#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Экспорт
ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
Если ТипДанныхЗаполнения = Тип("Структура") Тогда
Если Не ДанныеЗаполнения.Свойство("ЧтениеКомандФормы") Тогда
ЗаполнитьДокументПоОтбору(ДанныеЗаполнения);
КонецЕсли;
ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.ЧекККМ") Тогда
ЗаполнитьДокументПоЧекуККМ(ДанныеЗаполнения);
Иначе
Если Справочники.КассыККМ.КассаККМСозданаВСистеме() Тогда
КассаККМ = Справочники.КассыККМ.КассаККМФискальныйРегистраторДляРМК();
Если ЗначениеЗаполнено(КассаККМ) Тогда
ЗаполнитьДокументПоКассеККМ(КассаККМ);
Иначе
ВызватьИсключение НСтр("ru = 'У пользователя недостаточно прав на подключаемое оборудование: Фискальный регистратор'");
КонецЕсли;
Иначе
ВызватьИсключение НСтр("ru = 'Для продолжения работы в РМК необходимо создать хотя бы одну кассу ККМ'");
КонецЕсли;
КонецЕсли;
ИнициализироватьДокумент(ДанныеЗаполнения);
ЧекККМЛокализация.ОбработкаЗаполнения(ЭтотОбъект, ДанныеЗаполнения, СтандартнаяОбработка);
КонецПроцедуры
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
ПроведениеДокументов.ПередЗаписьюДокумента(ЭтотОбъект, РежимЗаписи, РежимПроведения);
Если Не ЗначениеЗаполнено(Статус) Тогда
Статус = Перечисления.СтатусыЧековККМ.ОтложенБезРезервирования;
КонецЕсли;
Если Статус = Перечисления.СтатусыЧековККМ.Пробит Тогда
Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
ЗаполнитьОбъектРасчетов();
ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
Отказ = Истина;
ТекстОшибки = НСтр("ru='Чек ККМ пробит. Отмена проведения невозможна'");
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, ЭтотОбъект);
Возврат;
КонецЕсли;
Иначе
Для Каждого СтрокаТЧ Из ПодарочныеСертификаты Цикл
СтрокаТЧ.ОбъектРасчетов = Неопределено;
КонецЦикла;
КонецЕсли;
НоменклатураСервер.ОкруглитьКоличествоШтучныхТоваров(ЭтотОбъект, РежимЗаписи);
ПодарочныеСертификатыСервер.ЗаполнитьСуммуВВалютеСертификатаВТабличнойЧасти(ПодарочныеСертификаты, Организация, Дата, Валюта);
СуммаДокумента = ЦенообразованиеКлиентСервер.ПолучитьСуммуДокумента(Товары, ЦенаВключаетНДС);
НоменклатураСервер.ОчиститьНеиспользуемыеСерии(ЭтотОбъект, НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ЧекККМ));
ОбщегоНазначенияУТ.ЗаполнитьИдентификаторыДокумента(ЭтотОбъект, "Товары,ПодарочныеСертификаты,ОплатаПлатежнымиКартами");
Если ПолучитьФункциональнуюОпцию("ИспользоватьСерверЛояльностиПоставщикДанных")
И ПолучитьФункциональнуюОпцию("ИспользоватьБонусныеПрограммыЛояльности")
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КассаККМ, "ТипКассы") = Перечисления.ТипыКассККМ.АвтономноеРМК Тогда
ДополнительныеСвойства.Вставить("СкорректироватьРегистрСведенийБонусныеБаллыКСписанию");
КонецЕсли;
ЧекККМЛокализация.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Если ДополнительныеСвойства.Свойство("СкорректироватьРегистрСведенийБонусныеБаллыКСписанию") Тогда
СерверЛояльностиПоставщикДанных.СкорректироватьРегистрСведенийБонусныеБаллыКСписанию(ЭтотОбъект);
КонецЕсли;
ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ОбработкаУдаленияПроведения(Отказ)
ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ПриКопировании(ОбъектКопирования)
Архивный = Ложь;
Статус = Неопределено;
ПолученоНаличными = 0;
ОплатаПлатежнымиКартами.Очистить();
Серии.Очистить();
СостояниеКассовойСмены = РозничныеПродажи.ПолучитьСостояниеКассовойСмены(КассаККМ);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, СостояниеКассовойСмены);
СкидкиРассчитаны = Ложь;
СкидкиНаценкиЗаполнениеСервер.ОтменитьСкидки(ЭтотОбъект, "Товары", Ложь);
Для Каждого СтрокаТЧ Из Товары Цикл
СтрокаТЧ.СуммаБонусныхБалловКСписанию = 0;
СтрокаТЧ.СуммаБонусныхБалловКСписаниюВВалюте = 0;
КонецЦикла;
ИнициализироватьДокумент();
СтруктураДействий = Новый Структура;
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
СтруктураДействий.Вставить("СкорректироватьСтавкуНДС", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(ЭтотОбъект));
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Товары, СтруктураДействий, КэшированныеЗначения);
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВТЧ(ЭтотОбъект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
КэшированныеЗначения.ОбработанныеСтроки,
СтруктураДействий,
Товары,
КэшированныеЗначения);
ОбщегоНазначенияУТ.ОчиститьИдентификаторыДокумента(ЭтотОбъект, "Товары,ПодарочныеСертификаты,ОплатаПлатежнымиКартами");
ЧекККМЛокализация.ПриКопировании(ЭтотОбъект, ОбъектКопирования);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
НоменклатураСервер.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ);
Если Не СкладыСервер.ИспользоватьСкладскиеПомещения(Склад,Дата) Тогда
МассивНепроверяемыхРеквизитов.Добавить("Товары.Помещение");
КонецЕсли;
НоменклатураСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ);
НоменклатураСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,
НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ЧекККМ),
Отказ,
МассивНепроверяемыхРеквизитов);
ПодарочныеСертификатыСервер.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ);
ПродажиСервер.ПроверитьКорректностьЗаполненияДокументаПродажи(ЭтотОбъект, Отказ);
РозничныеПродажи.ПроверитьЗаполнениеОплатыПлатежнымиКартами(ЭтотОбъект, Отказ);
ЧекККМЛокализация.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты,МассивНепроверяемыхРеквизитов);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ИнициализацияИЗаполнение
Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПоУмолчанию(Склад);
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация);
Если Не ЗначениеЗаполнено(Валюта) Тогда
Валюта = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация);
КонецЕсли;
Кассир = Пользователи.ТекущийПользователь();
ПараметрыЗаполнения = УчетНДСУПКлиентСервер.ПараметрыЗаполненияНалогообложенияНДСПродажи();
ПараметрыЗаполнения.Организация = Организация;
ПараметрыЗаполнения.Дата = Дата;
ПараметрыЗаполнения.Склад = Склад;
Если ЗначениеЗаполнено(Подразделение) Тогда
ПараметрыЗаполнения.Подразделение = Подразделение;
КонецЕсли;
ПараметрыЗаполнения.РозничнаяПродажа = Истина;
УчетНДСУП.ЗаполнитьНалогообложениеНДСПродажи(НалогообложениеНДС, ПараметрыЗаполнения);
КонецПроцедуры
Процедура ЗаполнитьДокументПоКассеККМ(КассаККМ)
СостояниеКассовойСмены = РозничныеПродажи.ПолучитьСостояниеКассовойСмены(КассаККМ);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, СостояниеКассовойСмены,,"Кассир");
КонецПроцедуры
Процедура ЗаполнитьДокументПоОтбору(ДанныеЗаполнения)
Если ДанныеЗаполнения.Свойство("КассаККМ") Тогда
ЗаполнитьДокументПоКассеККМ(ДанныеЗаполнения.КассаККМ);
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьДокументПоЧекуККМ(ЧекККМСсылка)
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ЧекККМ.КассаККМ КАК КассаККМ,
| ЧекККМ.Товары КАК Товары
|ИЗ
| Документ.ЧекККМ КАК ЧекККМ
|ГДЕ
| ЧекККМ.Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", ЧекККМСсылка);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
ЗаполнитьДокументПоКассеККМ(Выборка.КассаККМ);
Товары.Загрузить(Выборка.Товары.Выгрузить());
КонецЕсли;
ПриКопировании(ЧекККМСсылка);
КонецПроцедуры
Процедура ЗаполнитьОбъектРасчетов()
Если ПодарочныеСертификаты.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПодарочныеСертификаты.НомерСтроки КАК НомерСтроки,
| ВЫРАЗИТЬ(ПодарочныеСертификаты.ПодарочныйСертификат КАК Справочник.ПодарочныеСертификаты) КАК ПодарочныйСертификат
|ПОМЕСТИТЬ ПодарочныеСертификаты
|ИЗ
| &ПодарочныеСертификаты КАК ПодарочныеСертификаты
|ИНДЕКСИРОВАТЬ ПО
| ПодарочныйСертификат
|;
|
|
|ВЫБРАТЬ
| ПодарочныеСертификаты.НомерСтроки КАК НомерСтроки,
| ПодарочныеСертификаты.ПодарочныйСертификат КАК ПодарочныйСертификат,
| ОбъектыРасчетов.Ссылка КАК ОбъектРасчетов
|ИЗ
| ПодарочныеСертификаты КАК ПодарочныеСертификаты
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОбъектыРасчетов КАК ОбъектыРасчетов
| ПО ОбъектыРасчетов.Объект = ПодарочныеСертификаты.ПодарочныйСертификат
| И НЕ ОбъектыРасчетов.ПометкаУдаления
|ГДЕ
| ПодарочныеСертификаты.ПодарочныйСертификат.Владелец.УчетПодарочныхСертификатов2_5";
Запрос.УстановитьПараметр("ПодарочныеСертификаты", ПодарочныеСертификаты.Выгрузить());
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Индекс = Выборка.НомерСтроки - 1;
ПодарочныеСертификаты[Индекс].ОбъектРасчетов = Выборка.ОбъектРасчетов;
ПодарочныеСертификаты[Индекс].СуммаВзаиморасчетов = ПодарочныеСертификаты[Индекс].Сумма;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли