Чек ККМ на возврат / Форма документа / Модуль формы

файл
&НаКлиенте
Перем КэшированныеЗначения; //используется механизмом обработки изменения реквизитов ТЧ

&НаКлиенте
Перем ТекущиеДанныеИдентификатор; // используется механизмом серий

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	УстановитьУсловноеОформление();
	
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
	ПоддерживаемыеТипыПодключаемогоОборудования = "СканерШтрихкода";
	
	Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
		ПриЧтенииСозданииНаСервере();
	КонецЕсли;
	
	Если Объект.Статус = Перечисления.СтатусыЧековККМ.Пробит Тогда
		УстановитьРежимТолькоПросмотрНаСервере();
	ИначеЕсли Объект.ОплатаПлатежнымиКартами.Количество() > 0 Тогда
		Элементы.Товары.ТолькоПросмотр = Истина;
	КонецЕсли;
	
	Элементы.ТоварыПомещение.Видимость = СкладыСервер.ИспользоватьСкладскиеПомещения(Объект.Склад,Объект.Дата);
	
	Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
		
		ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.ЧекККМВозврат));
		НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,ПараметрыУказанияСерий);
		УстановитьВидимостьЭлементовСерий();
		ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
		РассчитатьИтоговыеПоказателиЧекаККМНаВозврат(ЭтаФорма);
		Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий);
		
	КонецЕсли;
	
	Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда
		Элементы.ГруппаИтого.ЦветФона = Новый Цвет();
	КонецЕсли;
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
	
	ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтаФорма, ПоддерживаемыеТипыПодключаемогоОборудования);
	ПересчитатьДокументНаКлиенте(ЭтаФорма);
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии()

	МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если ИмяСобытия = "Закрытие_РедактированиеКомплекта"
		И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
		ПриОкончанииРедактированияНабора(Параметр.АдресВоВременномХранилище);
	КонецЕсли;
	
	Если ИмяСобытия = "РедактироватьНабор"
		И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
		
		ПараметрыКомплекта = Новый Структура;
		ПараметрыКомплекта.Вставить("НоменклатураНабора", Параметр.НоменклатураНабора);
		ПараметрыКомплекта.Вставить("ХарактеристикаНабора", Параметр.ХарактеристикаНабора);
		ПараметрыКомплекта.Вставить("КолонкиНабора", КолонкиНабора());
		
		АдресНабораВоВременномХранилище = АдресНабораВоВременномХранилище(ПараметрыКомплекта);
		
		ПараметрыОткрытия = Новый Структура;
		ПараметрыОткрытия.Вставить("АдресВоВременномХранилище", АдресНабораВоВременномХранилище);
		ПараметрыОткрытия.Вставить("НоменклатураНабора",   Параметр.НоменклатураНабора);
		ПараметрыОткрытия.Вставить("ХарактеристикаНабора", Параметр.ХарактеристикаНабора);
		ПараметрыОткрытия.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС);
		ПараметрыОткрытия.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС);
		ПараметрыОткрытия.Вставить("Валюта", Объект.Валюта);
		ПараметрыОткрытия.Вставить("ВидЦены", Объект.ВидЦены);
		ПараметрыОткрытия.Вставить("Дата", Объект.Дата);
		ПараметрыОткрытия.Вставить("Ссылка", Объект.Ссылка);
		ПараметрыОткрытия.Вставить("Склад", Объект.Склад);
		ПараметрыОткрытия.Вставить("СкрыватьКомандуОстаткиНаСкладах", Ложь);
		ПараметрыОткрытия.Вставить("Организация", Объект.Организация);
		
		ОткрытьФорму("Обработка.РедактированиеНабора.Форма.Форма", ПараметрыОткрытия, ЭтаФорма, УникальныйИдентификатор);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
	
	Если НоменклатураКлиент.ЭтоУказаниеСерий(ИсточникВыбора) Тогда
		НоменклатураКлиент.ОбработатьУказаниеСерии(ЭтаФорма, ПараметрыУказанияСерий, ВыбранноеЗначение);
	КонецЕсли;
	
	Если Окно <> Неопределено Тогда
		Окно.Активизировать();
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
	ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.ЧекККМВозврат));
	УстановитьВидимостьЭлементовСерий();
	
	ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
	
	РассчитатьИтоговыеПоказателиЧекаККМНаВозврат(ЭтаФорма);
	
	Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий);
	
	МодификацияКонфигурацииПереопределяемый.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
	
	ПриЧтенииСозданииНаСервере();
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
	ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(ТекущийОбъект, Документы.ЧекККМВозврат));
	
	Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий);
	ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
	
	ОбеспечениеВДокументахСервер.ПроверитьЗапуститьФоновоеЗаданиеРаспределенияЗапасов();
	
	МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтаФорма, ТекущийОбъект, ПараметрыЗаписи);

КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	
	Оповестить("Запись_ЧекККМВозврат", ПараметрыЗаписи, Объект.Ссылка);
	
	МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтотОбъект, ПараметрыЗаписи);

	// СтандартныеПодсистемы.ПодключаемыеКоманды
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
		МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
		МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
	КонецЕсли;
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

	МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтаФорма, Отказ, ТекущийОбъект, ПараметрыЗаписи);

КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
	
	ДатаПриИзмененииСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура ФискальнаяОперацияСтатусОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	ФискальнаяОперацияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыТовары

&НаКлиенте
Процедура ТоварыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	Если НаборыКлиент.БлокируемыйЭлемент(Поле) Тогда
		
		ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(ВыбраннаяСтрока);
		Если ЗначениеЗаполнено(ТекущаяСтрока.НоменклатураНабора) Тогда
			
			ПараметрОповещения = Новый Структура;
			ПараметрОповещения.Вставить("НоменклатураНабора",   ТекущаяСтрока.НоменклатураНабора);
			ПараметрОповещения.Вставить("ХарактеристикаНабора", ТекущаяСтрока.ХарактеристикаНабора);
			ПараметрОповещения.Вставить("ФормаВладелец",        УникальныйИдентификатор);
			
			Оповестить("РедактироватьНабор", ПараметрОповещения, ЭтаФорма);
			
		КонецЕсли;
		
	ИначеЕсли Поле = Элементы.ТоварыНоменклатураНабора Тогда
		ПоказатьЗначение(Неопределено, Элементы.Товары.ТекущиеДанные.НоменклатураНабора);
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыОплатаПлатежнымиКартами

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыТовары

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаписатьДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Записать(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ПровестиДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
	
	ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ОтправитьПодтверждениеНСПК(Команда)
	
	ОтправитьПодтверждениеНСПКНаКлиентеЛокализация();
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма);

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтаФорма, Ложь);

	//
	
	НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтаФорма);

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеСтатусовУказанияСерий(ЭтаФорма, Ложь);

	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКоличествоУпаковок.Имя);
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСумма.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЧекККМ");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;

	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);

КонецПроцедуры

&НаСервере
Процедура ПриЧтенииСозданииНаСервере()
	
	ФискальнаяОперацияОбновитьСтатус();
	
КонецПроцедуры

#Область ПриИзмененииРеквизитов

&НаСервере
Процедура ДатаПриИзмененииСервер()
	
	ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект);
	НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.ЧекККМВозврат));
	Элементы.ТоварыПомещение.Видимость = СкладыСервер.ИспользоватьСкладскиеПомещения(Объект.Склад,Объект.Дата);
	
КонецПроцедуры

#КонецОбласти

#Область Серии

&НаСервере
Процедура УстановитьВидимостьЭлементовСерий()
	
	Элементы.ТоварыСтатусУказанияСерий.Видимость = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;
	Элементы.ТоварыСерия.Видимость               = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;
	
КонецПроцедуры

#КонецОбласти

#Область Наборы

&НаКлиентеНаСервереБезКонтекста
Функция КолонкиНабора()
	
	Колонки = Новый Массив;
	Колонки.Добавить("Номенклатура");
	Колонки.Добавить("Характеристика");
	
	Колонки.Добавить("Цена");
	Колонки.Добавить("Упаковка");
	Колонки.Добавить("Количество");
	Колонки.Добавить("КоличествоУпаковок");
	
	Колонки.Добавить("СтавкаНДС");
	Колонки.Добавить("СуммаНДС");
	Колонки.Добавить("Сумма");
	
	Возврат Колонки;
	
КонецФункции

&НаКлиенте
// Вызывается через ОписаниеОповещения из общего модуля НаборыКлиент 
Процедура ПриУдаленииКомплектующих(Действие, ДополнительныйПараметр) Экспорт
	
	Если НаборыКлиент.ДействиеРедактироватьНабор(Действие) Тогда
		НаборыКлиент.ПриУдаленииКомплектующих(ЭтаФорма, "Товары", ДополнительныйПараметр);
	ИначеЕсли НаборыКлиент.ДействиеУдалитьВесьНабор(Действие) Тогда
		ПриУдаленииКомплектующихНаСервере("Товары", ДополнительныйПараметр);
	КонецЕсли;
	
	ПересчитатьДокументНаКлиенте(ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Процедура ПриУдаленииКомплектующихНаСервере(ИмяТЧ, ДополнительныйПараметр)
	НаборыСервер.ПриУдаленииКомплектующих(ЭтаФорма, ИмяТЧ, ДополнительныйПараметр);
КонецПроцедуры

&НаСервере
Функция АдресНабораВоВременномХранилище(Параметры)
	
	Возврат НаборыСервер.АдресНабораВоВременномХранилище(ЭтаФорма, Параметры, "Товары");
	
КонецФункции

&НаСервере
Процедура ПриОкончанииРедактированияНабора(АдресВоВременномХранилище)
	
	СтруктураДействийСДобавленнымиСтроками = Новый Структура;
	СтруктураДействийСИзмененнымиСтроками = Новый Структура;
	
	ПараметрыДанных = Новый Структура;
	ПараметрыДанных.Вставить("Данные", ПолучитьИзВременногоХранилища(АдресВоВременномХранилище));
	ПараметрыДанных.Вставить("СтруктураДействийСИзмененнымиСтроками", СтруктураДействийСИзмененнымиСтроками);
	ПараметрыДанных.Вставить("СтруктураДействийСДобавленнымиСтроками", СтруктураДействийСДобавленнымиСтроками);
	ПараметрыДанных.Вставить("КолонкиНабора", КолонкиНабора());
	
	НаборыСервер.ПриОкончанииРедактированияНабора(ЭтаФорма, "Товары", ПараметрыДанных);
	
	ПересчитатьДокументНаКлиенте(ЭтаФорма);
	
КонецПроцедуры

#КонецОбласти

#Область ФискальнаяОперация

&НаСервере
Процедура ФискальнаяОперацияОбновитьСтатус()
	
	Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
		ФискальнаяОперацияДанныеЖурнала
			 = ОборудованиеЧекопечатающиеУстройстваВызовСервера.ДанныеФискальнойОперации(Объект.Ссылка);
	Иначе
		ФискальнаяОперацияДанныеЖурнала = Неопределено;
	КонецЕсли;
	
	Строки = Новый Массив;
	Если ФискальнаяОперацияДанныеЖурнала = Неопределено Тогда
		
		Строки.Добавить("");
		
	Иначе
		
		Строки.Добавить(
			Новый ФорматированнаяСтрока(
				СтрШаблон(
					НСтр("ru = 'Пробит чек №%1'"),
					ФискальнаяОперацияДанныеЖурнала.НомерЧекаККМ),,
				ЦветаСтиля.ГиперссылкаЦвет,,
				"ОткрытьЗаписьФискальнойОперации"));
		
	КонецЕсли;
	
	ФискальнаяОперацияСтатус = Новый ФорматированнаяСтрока(Строки);
	
КонецПроцедуры

&НаКлиенте
Процедура ФискальнаяОперацияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	Если "ОткрытьЗаписьФискальнойОперации" = НавигационнаяСсылкаФорматированнойСтроки Тогда
		
		ПодключаемоеОборудованиеУТКлиент.ОткрытьЗаписьФискальнойОперации(ЭтотОбъект, Объект.Ссылка);
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область Прочее

&НаСервере
Процедура УстановитьРежимТолькоПросмотрНаСервере()
	
	Элементы.ГруппаШапка.ТолькоПросмотр             = Истина;
	Элементы.Товары.ТолькоПросмотр                  = Истина;
	Элементы.ОплатаПлатежнымиКартами.ТолькоПросмотр = Истина;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ПересчитатьДокументНаКлиенте(Форма)
	
	Форма.СуммаДокумента = ЦенообразованиеКлиентСервер.ПолучитьСуммуДокумента(Форма.Объект.Товары, Форма.Объект.ЦенаВключаетНДС);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура РассчитатьИтоговыеПоказателиЧекаККМНаВозврат(Форма)
	
	Форма.СуммаВсего = Форма.Объект.Товары.Итог("Сумма");
	
	Если Не Форма.Объект.ЦенаВключаетНДС Тогда
		Форма.СуммаВсего = Форма.СуммаВсего + Форма.Объект.Товары.Итог("СуммаНДС");
	КонецЕсли;
	
	ПродажаОблагаетсяНДС = УчетНДСУПКлиентСервер.ОтображатьНДСВИтогахДокументаПродажи(Форма.Объект.НалогообложениеНДС);
	Если ПродажаОблагаетсяНДС Тогда
		Форма.Элементы.ГруппаСтраницыНДС.ТекущаяСтраница   = Форма.Элементы.СтраницаСНДС;
		Форма.Элементы.ГруппаСтраницыВсего.ТекущаяСтраница = Форма.Элементы.СтраницаВсегоСНДС;
	Иначе
		Форма.Элементы.ГруппаСтраницыНДС.ТекущаяСтраница   = Форма.Элементы.СтраницаБезНДС;
		Форма.Элементы.ГруппаСтраницыВсего.ТекущаяСтраница = Форма.Элементы.СтраницаВсегоБезНДС;
	КонецЕсли;
	
КонецПроцедуры

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

&НаСервере
Процедура ЗаполнитьСлужебныеРеквизитыПоНоменклатуре()
	
	ЗаполнитьПризнакХарактеристикиИспользуются = Новый Структура;
	ЗаполнитьПризнакХарактеристикиИспользуются.Вставить("Номенклатура", "ХарактеристикиИспользуются");
	
	ЗаполнитьПризнакТипНоменклатуры = Новый Структура;
	ЗаполнитьПризнакТипНоменклатуры.Вставить("Номенклатура", "ТипНоменклатуры");
	
	СтруктураДействий = Новый Структура("ЗаполнитьПризнакХарактеристикиИспользуются, ЗаполнитьПризнакТипНоменклатуры",
		ЗаполнитьПризнакХарактеристикиИспользуются,
		ЗаполнитьПризнакТипНоменклатуры);
	
	НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(
		Объект.Товары, СтруктураДействий);
	
	НаборыСервер.ЗаполнитьСлужебныеРеквизиты(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ОтправитьПодтверждениеНСПКНаКлиентеЛокализация()
	
	//++ Локализация
	СтрокиДляОплатыЭС = ТоварыФССКОплате();
	
	Если СтрокиДляОплатыЭС.Количество() = 0 Тогда
		ПоказатьПредупреждение(,
			НСтр("ru = 'В документе не выбраны товары из классификатора ФСС, либо у товаров не указан код ТРУ ФСС.'"));
		Возврат;
	КонецЕсли;
	
	СуммаОплатыСертификатамиНСПК = СуммаОплатыЭСФССПоДокументу(Объект.ОплатаПлатежнымиКартами);
	
	Если СуммаОплатыСертификатамиНСПК = 0 Тогда
		ПоказатьПредупреждение(,
			НСтр("ru = 'Отправлять подтверждение не требуется, т.к. ЭС НСПК не использовался для оплаты'"));
		Возврат;
	КонецЕсли;
	
	ДополнительныеПараметры = Новый Структура("СуммаСертификатамиНСПК", СуммаОплатыСертификатамиНСПК);
	
	Если ОтправленФискальныйЧекВНСПК(Объект) Тогда
		
		ПоказатьВопрос(
			Новый ОписаниеОповещения("ОповещениеВопросОтправитьПодтверждениеНСПК", ЭтотОбъект, ДополнительныеПараметры),
			НСтр("ru = 'Подтверждение уже было отправлено на сервер НСПК. Повторить отправку подтверждения?'"),
			РежимДиалогаВопрос.ПовторитьОтмена);
		
	Иначе
		
		ОтправитьПодтверждениеНСПКНаКлиенте(Объект.Ссылка, ДополнительныеПараметры.СуммаСертификатамиЭСФСС);
		
	КонецЕсли;
	//-- Локализация
	
КонецПроцедуры

//++ Локализация

&НаСервере
Функция ПараметрыПередачиДанныхФискальногоЧека(ДокументОснование, СуммаСертификатамиЭСФСС)
	
	Возврат ЭлектронныеСертификатыНСПКУТ.ПараметрыПередачиДанныхФискальногоЧека(ДокументОснование, СуммаСертификатамиЭСФСС);
	
КонецФункции

&НаКлиенте
Процедура ОповещениеВопросОтправитьПодтверждениеНСПК(Знач Результат = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт
	
	Если Результат <> КодВозвратаДиалога.Повторить Тогда
		Возврат;
	КонецЕсли;
	
	ОтправитьПодтверждениеНСПКНаКлиенте(Объект.Ссылка, ДополнительныеПараметры.СуммаСертификатамиНСПК);
	
КонецПроцедуры

&НаСервере
Функция ТоварыФССКОплате()
	
	Возврат ЧекККМВозвратЛокализация.ТоварыФССВДокументеКОплате(
				Объект.Товары.Выгрузить(),
				Объект.ЦенаВключаетНДС);
	
КонецФункции

&НаКлиенте
Процедура ОтправитьПодтверждениеНСПКНаКлиенте(ЧекККМ, СуммаСертификатамиЭСФСС)
	
	ПараметрыОперации = ПараметрыПередачиДанныхФискальногоЧека(ЧекККМ, СуммаСертификатамиЭСФСС);
	Если ПараметрыОперации = Неопределено Тогда
		ТекстСообщения = СтрШаблон(НСтр("ru = 'Отсутствуют данные о фискализации чека: %1'"), СокрЛП(ЧекККМ));
		ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
	Иначе
		ОповещениеМетода = Новый ОписаниеОповещения("ПередатьДанныеФискальногоЧекаНСПКЗавершение", ЭтотОбъект, ПараметрыОперации);
		ЭлектронныеСертификатыНСПККлиент.НачатьПередачуДанныхФискальногоЧека(ОповещениеМетода, ПараметрыОперации);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПередатьДанныеФискальногоЧекаНСПКЗавершение(РезультатВыполнения, ДополнительныеПараметры) Экспорт 
	
	РезультатПередачи = Новый Структура("Результат, КодРезультата, ОписаниеОшибки", Ложь, 999, "");
	ЗаполнитьЗначенияСвойств(РезультатПередачи, РезультатВыполнения);
	
	Если Не РезультатПередачи.Результат Тогда
		ТекстСообщения = СтрШаблон(
			НСтр("ru = 'При отправке подтверждения операции %1 на сервер произошла ошибка (код %2):
			|%3'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()),
			ДополнительныеПараметры.ИдентификаторКорзины,
			Строка(РезультатПередачи.КодРезультата),
			РезультатПередачи.ОписаниеОшибки);
			
		ДобавитьЗаписьПоНеотправленномуВНСПКФискальномуЧеку(Объект.Ссылка, ТекстСообщения);
		ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
	Иначе
		ТекстСообщения = СтрШаблон(
			НСтр("ru = 'Подтверждение операции %1 успешно отправлено на сервер НСПК'",
				ОбщегоНазначенияКлиент.КодОсновногоЯзыка()),
			ДополнительныеПараметры.ИдентификаторКорзины);
		ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
		
		УдалитьЗаписьПоОтправленномуВНСПКФискальномуЧеку(Объект.Ссылка);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ДобавитьЗаписьПоНеотправленномуВНСПКФискальномуЧеку(ЧекККМ, ТекстСообщения)
	
	ЭлектронныеСертификатыНСПКУТ.ДобавитьЗаписьПоНеотправленномуВНСПКФискальномуЧеку(ЧекККМ, ТекстСообщения);
	
КонецПроцедуры

&НаСервере
Процедура УдалитьЗаписьПоОтправленномуВНСПКФискальномуЧеку(ЧекККМ)
	
	ЭлектронныеСертификатыНСПКУТ.УдалитьЗаписьПоОтправленномуВНСПКФискальномуЧеку(ЧекККМ);
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция СуммаОплатыЭСФССПоДокументу(ЗНАЧ ОплатыПлатежнойКартой)
	
	Возврат РозничныеПродажиЛокализация.СуммаОплатыЭСФССПоДокументу(ОплатыПлатежнойКартой.Выгрузить());
	
КонецФункции

&НаСервереБезКонтекста
Функция ОтправленФискальныйЧекВНСПК(ЗНАЧ Объект)
	
	Возврат РегистрыСведений.НеотправленныеВНСПКФискальныеЧекиСТоварамиФСС.ОтправленФискальныйЧекВНСПК(Объект.Ссылка);
	
КонецФункции

//-- Локализация

#КонецОбласти

#КонецОбласти

Связанные материалы