Чек ЕГАИС / Форма документа / Модуль формы

файл
#Область ОписаниеПеременных

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

&НаКлиенте
Перем ДанныеУдаляемыхСтрок; // Для удаления акцизных марок

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ВидОперацииПриИзменении(Элемент)
	НастроитьЭлементыФормы(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура ВидОперацииОчистка(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПредставлениеСохраненногоВыбораОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	АкцизныеМаркиЕГАИСКлиент.ПредставлениеСохраненногоВыбораОбработкаНавигационнойСсылки(ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки);
	
КонецПроцедуры

&НаКлиенте
Процедура ДокументОснованиеПриИзменении(Элемент)
	
	ПодключаемыеКомандыИСКлиентСервер.УправлениеВидимостьюКомандПодключенныхКОбъекту(ЭтотОбъект);
	НастроитьЭлементыФормы(ЭтотОбъект);
	
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура ТоварыПослеУдаления(Элемент)
	
	Если ДанныеУдаляемыхСтрок <> Неопределено Тогда
		УдалитьАкцизныеМарки(ДанныеУдаляемыхСтрок);
	КонецЕсли;
	
	ДанныеУдаляемыхСтрок = Неопределено;
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
	
	Идентификатор = Элементы.Товары.ТекущиеДанные.ПолучитьИдентификатор();
	
	ПриИзмененииНоменклатуры(Идентификатор, КэшированныеЗначения);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ТоварыНоменклатураСоздание(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
	
	СобытияФормЕГАИСКлиентПереопределяемый.ОткрытьФормуСозданияНоменклатуры(
		ЭтотОбъект,
		ИнтеграцияЕГАИСВызовСервера.РеквизитыАлкогольнойПродукцииДляСозданияНоменклатуры(ТекущиеДанные.АлкогольнаяПродукция));
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыХарактеристикаПриИзменении(Элемент)
	
	Идентификатор = Элементы.Товары.ТекущиеДанные.ПолучитьИдентификатор();
	
	ПриИзмененииХарактеристики(Идентификатор, КэшированныеЗначения);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ТоварыХарактеристикаСоздание(Элемент, СтандартнаяОбработка)
	
	СобытияФормЕГАИСКлиентПереопределяемый.ХарактеристикаСоздание(ЭтотОбъект, Элементы.Товары.ТекущаяСтрока, Элемент, СтандартнаяОбработка);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ТоварыУпаковкаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
	
	СобытияФормЕГАИСКлиентПереопределяемый.НачалоВыбораУпаковки(ЭтотОбъект, ТекущаяСтрока, Элемент, ДанныеВыбора, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
	
	СобытияФормЕГАИСКлиент.ПриИзмененииЦены(Элементы.Товары.ТекущиеДанные);
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыСуммаПриИзменении(Элемент)
	
	СобытияФормЕГАИСКлиент.ПриИзмененииСуммы(Элементы.Товары.ТекущиеДанные);
	
КонецПроцедуры


&НаКлиенте
Процедура ТоварыСерияПриИзменении(Элемент)
	
	ПараметрыЗаполнения = ИнтеграцияЕГАИСКлиентСервер.ПараметрыЗаполненияТабличнойЧасти();
	ПараметрыЗаполнения.ЗаполнитьАлкогольнуюПродукцию = Истина;
	
	СобытияФормЕГАИСКлиентПереопределяемый.ПриИзмененииСерии(ЭтотОбъект, 
		Элементы.Товары.ТекущиеДанные,
		КэшированныеЗначения,
		ПараметрыЗаполнения);
		
КонецПроцедуры

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

&НаКлиенте
Процедура ТоварыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
	
	Если ОграничениеРедактированияПоСтатусуПроверкиИПодбора
		Или РедактированиеФормыНедоступно Тогда
		Отказ = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	СобытияФормЕГАИСКлиент.ВыборЭлементаТабличнойЧастиОткрытьФормуЭлемента(ЭтотОбъект, Элемент, Поле);
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ЗаписатьДокумент(Команда)
	
	ОценкаПроизводительностиКлиент.ЗамерВремени(
		"Документ.ЧекЕГАИС.Форма.ФормаДокумента.Записать");
	
	ОчиститьСообщения();
	Записать();
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьПодбор(Команда)
	
	// &ЗамерПроизводительности
	ОценкаПроизводительностиКлиент.ЗамерВремени( 
		"Документ.ЧекЕГАИС.ФормаДокумента.Команда.ОткрытьПодбор");
	
	СобытияФормЕГАИСКлиентПереопределяемый.ОткрытьФормуПодбораНоменклатуры(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ПоискПоШтрихкодуВыполнить(Команда)
	
	ОчиститьСообщения();
	
	ШтрихкодированиеОбщегоНазначенияИСКлиент.ПоказатьВводШтрихкода(ОписаниеОповещенияОбработкиКодаМаркировки());
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ЗагрузитьИзВнешнегоФайла(Команда)
	
	ОчиститьСообщения();
	
	ИнтеграцияИСКлиент.ОткрытьФормуЗагрузкиКодовМаркировки(
		ЭтотОбъект,
		Ложь,
		ИнтеграцияЕГАИСКлиент.ЗаголовокФормыЗагрузкиКодовМаркировки(ЭтотОбъект));
	
КонецПроцедуры

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

&НаКлиенте
Процедура АрхивироватьДокумент(Команда)
	
	ОбщегоНазначенияИСКлиент.АрхивироватьДокументы(ЭтотОбъект, Объект.Ссылка, ИнтеграцияЕГАИСКлиент);
	
КонецПроцедуры

// СтандартныеПодсистемы.ПодключаемыеКоманды

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

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

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

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

&НаКлиенте
Процедура ПровестиДокумент(Команда)
	
	ОценкаПроизводительностиКлиент.ЗамерВремени(
		"Документ.ЧекЕГАИС.Форма.ФормаДокумента.Провести");
	
	ОчиститьСообщения();
	ПараметрыЗаписи = Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение);
	Записать(ПараметрыЗаписи);
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ОткрытьПодборСерий(Текст, СтандартнаяОбработка)
	
	ИнтеграцияИСКлиент.ОткрытьПодборСерий(ЭтотОбъект,, Текст, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

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

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

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

#Область Штрихкодирование

&НаКлиенте
Функция ОписаниеОповещенияОбработкиКодаМаркировки()
	
	Возврат Новый ОписаниеОповещения("ОбработатьКодМаркировки", ЭтотОбъект);
	
КонецФункции

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

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

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

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

&НаСервере
Процедура ПослеОбработкиШтрихкодовСервер(РезультатОбработкиШтрихкода, КэшированныеЗначения, ПараметрыСканирования)
	
	Если Не РезультатОбработкиШтрихкода.ТребуетсяОбработкаШтрихкода Тогда
		
		ОбработатьСтрокиТЧ(
			РезультатОбработкиШтрихкода.ДобавленныеСтроки,
			РезультатОбработкиШтрихкода.ИзмененныеСтроки,
			КэшированныеЗначения);
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

#Область Штрихкоды

&НаСервере
Процедура ОбработатьСтрокиТЧ(ДобавленныеСтроки, ИзмененныеСтроки, КэшированныеЗначения = Неопределено)
	
	Для Каждого СтрокаТЧ Из ДобавленныеСтроки Цикл
		
		ПараметрыЗаполнения = ИнтеграцияЕГАИСКлиентСервер.ПараметрыЗаполненияТабличнойЧасти();
		ПараметрыЗаполнения.ПересчитатьСумму                   = Истина;
		ПараметрыЗаполнения.ПересчитатьКоличествоЕдиниц        = Истина;
		ПараметрыЗаполнения.МаркируемаяПродукцияВТЧ            = Истина;
		ПараметрыЗаполнения.ЗаполнитьАлкогольнуюПродукцию      = Истина;
		ПараметрыЗаполнения.ПроверитьСериюРассчитатьСтатус     = Истина;
		ПараметрыЗаполнения.ЗаполнитьАртикул                   = Истина;
		ПараметрыЗаполнения.ЗаполнитьКод                       = Истина;
		
		СобытияФормЕГАИСПереопределяемый.ПриИзмененииНоменклатуры(
			ЭтотОбъект, СтрокаТЧ, КэшированныеЗначения,
			ПараметрыЗаполнения, ПараметрыУказанияСерий);
		
		АкцизныеМаркиКлиентСервер.ЗаполнитьИндексАкцизнойМарки(СтрокаТЧ);
		
	КонецЦикла;
	
	Для Каждого СтрокаТЧ Из ИзмененныеСтроки Цикл
		
		ПараметрыЗаполнения = ИнтеграцияЕГАИСКлиентСервер.ПараметрыЗаполненияТабличнойЧасти();
		ПараметрыЗаполнения.ПересчитатьСумму                   = Истина;
		ПараметрыЗаполнения.ПересчитатьКоличествоУпаковок      = Истина;
		
		СобытияФормЕГАИСПереопределяемый.ПриИзмененииКоличестваУпаковок(
			ЭтотОбъект, СтрокаТЧ, КэшированныеЗначения,
			ПараметрыЗаполнения);
		
		АкцизныеМаркиКлиентСервер.ЗаполнитьИндексАкцизнойМарки(СтрокаТЧ);
		
	КонецЦикла;
	
	Если ДобавленныеСтроки.Количество() > 0 Тогда
		АкцизныеМаркиЕГАИС.ЗаполнитьСлужебныеРеквизиты(ЭтотОбъект);
		Элементы.Товары.ТекущаяСтрока = ДобавленныеСтроки[ДобавленныеСтроки.Количество() - 1].ПолучитьИдентификатор();
	ИначеЕсли ИзмененныеСтроки.Количество() > 0 Тогда
		Элементы.Товары.ТекущаяСтрока = ИзмененныеСтроки[ИзмененныеСтроки.Количество() - 1].ПолучитьИдентификатор();
	КонецЕсли;
	
КонецПроцедуры


&НаСервере
Функция ПолучитьШтрихкодыНоменклатуры(Отбор)
	
	Возврат ШтрихкодированиеЕГАИС.ПолучитьШтрихкодыНоменклатуры(Отбор);
	
КонецФункции

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

#Область Статус

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

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

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

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

&НаКлиенте
Процедура ПодготовитьКПередачеПослеПроверкиМинимальныхЦен()
	
	ОбменДаннымиЕГАИСКлиент.ПодготовитьКПередаче(
		Объект.Ссылка,
		ПредопределенноеЗначение("Перечисление.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПередайтеДанные"),
		УникальныйИдентификатор);
	
КонецПроцедуры

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

#Область Подбор

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

&НаКлиенте
Процедура Подключаемый_ОбработкаРезультатаПодбораНоменклатуры(Результат, ДополнительныеПараметры) Экспорт
	
	ПараметрыЗаполнения = ИнтеграцияЕГАИСКлиентСервер.ПараметрыЗаполненияТабличнойЧасти();
	ПараметрыЗаполнения.ПересчитатьСумму             = Истина;
	ПараметрыЗаполнения.ПересчитатьКоличествоЕдиниц  = Истина;
	ПараметрыЗаполнения.ЗаполнитьИндексАкцизнойМарки = Истина;
	
	ОбработкаРезультатаПодбораНоменклатуры(Результат, ПараметрыЗаполнения);
	
КонецПроцедуры

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

#Область УправлениеЭлементамиФормы

&НаКлиентеНаСервереБезКонтекста
Процедура НастроитьЭлементыФормы(Форма)
	
	Если Форма.Объект.ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийЧекаЕГАИС.РеализацияЮридическомуЛицуСБезналичнойОплатой") Тогда
		Форма.Элементы.НомерСмены.Заголовок       = НСтр("ru = 'Номер накладной'");
		Форма.Элементы.СерийныйНомерККМ.Заголовок = НСтр("ru = 'Номер счета на оплату'");
	ИначеЕсли Форма.Объект.ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийЧекаЕГАИС.ВскрытиеТары") Тогда
		Форма.Элементы.НомерЧекаККМ.Заголовок     = НСтр("ru = 'Номер чека (номер документа-основания)'");
		Форма.Элементы.НомерСмены.Заголовок       = НСтр("ru = 'Номер смены (номер документа-основания)'");
		Форма.Элементы.СерийныйНомерККМ.Заголовок = НСтр("ru = 'Номер фискального накопителя'");
	Иначе
		Форма.Элементы.НомерЧекаККМ.Заголовок     = НСтр("ru = 'Номер чека'");
		Форма.Элементы.НомерСмены.Заголовок       = НСтр("ru = 'Номер смены'");
		Форма.Элементы.СерийныйНомерККМ.Заголовок = НСтр("ru = 'Номер фискального накопителя'");
	КонецЕсли;
	Форма.Элементы.НомерЧекаККМ.Видимость = Форма.Объект.ВидОперации <> ПредопределенноеЗначение("Перечисление.ВидыОперацийЧекаЕГАИС.РеализацияЮридическомуЛицуСБезналичнойОплатой");
	
	Форма.Элементы.ТоварыПодменюЗаполнить.Видимость = ЗначениеЗаполнено(Форма.Объект.ДокументОснование);
	Форма.Элементы.ТоварыОткрытьПодбор.Видимость = Не ЗначениеЗаполнено(Форма.Объект.ДокументОснование);
	
КонецПроцедуры

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

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

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

#Область СканированиеАлкогольнойПродукции

&НаКлиенте
Процедура СканированиеАлкогольнойПродукцииПослеЗакрытия(Результат, ДополнительныеПараметры) Экспорт
	
	Если Не ЭтоАдресВременногоХранилища(Результат) Тогда
		Возврат;
	КонецЕсли;
	
	СканированиеАлкогольнойПродукцииПослеЗакрытияНаСервере(Результат);
	
КонецПроцедуры

&НаСервере
Процедура СканированиеАлкогольнойПродукцииПослеЗакрытияНаСервере(АдресВременногоХранилища)
	
	Прочитать();
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ВопросПриОткрытииФормыСканированияИПроверкиАлкогольнойПродукцииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт

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

	Если ЗаписаноУспешно Тогда
		ОткрытьФормуСканированияАлкогольнойПродукции();
	КонецЕсли;

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

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

#Область РаботаСТСД

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

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

&НаКлиенте
Функция ПодготовленныеДанныеПартионнойПродукцииТСД()
	
	Если ЗагрузкаДанныхТСД.ПартионнаяАлкогольнаяПродукция.Количество() = 0 Тогда
		
		Возврат Неопределено;
		
	КонецЕсли;
	
	ПараметрыЗаполнения = ИнтеграцияЕГАИСКлиентСервер.ПараметрыЗаполненияТабличнойЧасти();
	ПараметрыЗаполнения.ПересчитатьСумму                   = Истина;
	ПараметрыЗаполнения.ПересчитатьКоличествоЕдиниц        = Истина;
	ПараметрыЗаполнения.ШтрихкодыВТЧ                       = Истина;
	ПараметрыЗаполнения.МаркируемаяПродукцияВТЧ            = Истина;
	ПараметрыЗаполнения.ЗаполнитьАлкогольнуюПродукцию      = Истина;
	
	СтруктураДействий = Неопределено;
	ШтрихкодированиеНоменклатурыЕГАИСКлиентПереопределяемый.ПодготовитьДанныеДляОбработкиТаблицыТоваровПолученнойИзТСД(
		ЭтотОбъект,
		ЗагрузкаДанныхТСД.ПартионнаяАлкогольнаяПродукция,
		КэшированныеЗначения,
		ПараметрыЗаполнения,
		СтруктураДействий);
	
	Возврат СтруктураДействий;
	
КонецФункции

&НаКлиенте
Процедура ОбработатьПолученныеДанныеТСД()
	
	Если ЗагрузкаДанныхТСД.ПартионнаяАлкогольнаяПродукция.Количество() > 0 Тогда
		
		ДанныеПартионнойПродукции = ПодготовленныеДанныеПартионнойПродукцииТСД();
		
		ОбработатьДанныеТСДНаСервере(ДанныеПартионнойПродукции, КэшированныеЗначения);
		
		Если ЗагрузкаДанныхТСД.ПартионнаяАлкогольнаяПродукция.Количество() > 0 Тогда
			
			ШтрихкодированиеИСКлиентПереопределяемый.ПослеОбработкиТаблицыТоваровПолученнойИзТСД(
				ЭтотОбъект,
				ДанныеПартионнойПродукции,
				КэшированныеЗначения);
				
		КонецЕсли;
		
	КонецЕсли;
	
	Если ЗагрузкаДанныхТСД.МаркируемаяАлкогольнаяПродукцияДопУказание.Количество() > 0 Тогда
		
		Подключаемый_ПослеОбработкиШтрихкодаТСД();
		
	Иначе
		
		ГрупповаяОбработкаШтрихкодовИСКлиент.ОповеститьОбОкончанииОбработкиДанныхТСД();
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ОбработатьДанныеТСДНаСервере(ДанныеПартионнойПродукции, КэшированныеЗначения)
	
	Если ЗагрузкаДанныхТСД.ПартионнаяАлкогольнаяПродукция.Количество() > 0 Тогда
		
		ШтрихкодированиеИСПереопределяемый.ОбработатьДанныеИзТСД(
			ЭтотОбъект, ДанныеПартионнойПродукции, КэшированныеЗначения);
		
		АкцизныеМаркиЕГАИС.ЗаполнитьСлужебныеРеквизиты(ЭтотОбъект);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПослеОбработкиШтрихкодаТСД()
	
	ПараметрыСканирования = ШтрихкодированиеОбщегоНазначенияИСКлиент.ПараметрыСканирования(ЭтотОбъект);
	
	Если ЗагрузкаДанныхТСД.ИндексОбрабатываемогоЭлемента <> ЗагрузкаДанныхТСД.МаркируемаяАлкогольнаяПродукцияДопУказание.Количество() Тогда
		
		ДанныеШтрихкода = ЗагрузкаДанныхТСД.МаркируемаяАлкогольнаяПродукцияДопУказание[ЗагрузкаДанныхТСД.ИндексОбрабатываемогоЭлемента].РезультатОбработки.ДанныеШтрихКода;
		
		ЗагрузкаДанныхТСД.ИндексОбрабатываемогоЭлемента = ЗагрузкаДанныхТСД.ИндексОбрабатываемогоЭлемента + 1;
		
		РезультатОбработкиШтрихкода = РезультатОбработкиШтрихкодаДопУказаниеТСД(ДанныеШтрихКода, КэшированныеЗначения, ПараметрыСканирования);
		
		ПараметрыЗавершенияВводаШтрихкода = ПараметрыЗавершенияВводаШтрихкода(ДанныеШтрихкода, РезультатОбработкиШтрихкода, ПараметрыСканирования);
		
		ШтрихкодированиеОбщегоНазначенияИСКлиент.ЗавершитьОбработкуШтрихкода(ПараметрыЗавершенияВводаШтрихкода);
		
	Иначе
		
		ГрупповаяОбработкаШтрихкодовИСКлиент.ОповеститьОбОкончанииОбработкиДанныхТСД();
		
		ЗагрузкаДанныхТСД = Неопределено;
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

#Область ДокументОснование

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

&НаКлиенте
Процедура ВопросОПерезаполнениииПоОснованиюПриЗавершении(Результат, Параметры) Экспорт

	Если Результат = КодВозвратаДиалога.Да Тогда
		
		ПерезаполнитьПоОснованиюСервер();
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

&НаСервере
Процедура ПриИзмененииХарактеристики(Идентификатор, КэшированныеЗначения)
	
	ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(Идентификатор);
	ТекущаяСтрока.Штрихкод = Неопределено;
	
	ПараметрыЗаполнения = ИнтеграцияЕГАИСКлиентСервер.ПараметрыЗаполненияТабличнойЧасти();
	ПараметрыЗаполнения.ЗаполнитьАлкогольнуюПродукцию = Истина;
	
	СобытияФормЕГАИСПереопределяемый.ПриИзмененииХарактеристики(
		ЭтотОбъект, ТекущаяСтрока, КэшированныеЗначения,
		ПараметрыЗаполнения);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПриИзмененииКоличестваУпаковок(ТекущаяСтрока)
	
	ПараметрыЗаполнения = ИнтеграцияЕГАИСКлиентСервер.ПараметрыЗаполненияТабличнойЧасти();
	ПараметрыЗаполнения.ПересчитатьСумму             = Истина;
	ПараметрыЗаполнения.ПересчитатьКоличествоЕдиниц  = Истина;
	
	СобытияФормЕГАИСКлиентПереопределяемый.ПриИзмененииКоличестваУпаковок(
		ЭтотОбъект, ТекущаяСтрока, КэшированныеЗначения,
		ПараметрыЗаполнения);
	
	РассчитатьКоличествоЕГАИС(ТекущаяСтрока);
	
	АкцизныеМаркиКлиентСервер.ЗаполнитьИндексАкцизнойМарки(ТекущаяСтрока);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура РассчитатьКоличествоЕГАИС(ТекущаяСтрока)
	
	ТекущаяСтрока.КоличествоЕГАИС = ТекущаяСтрока.Количество * ТекущаяСтрока.КоэффициентЕГАИС;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьВидимостьИнформацииОСканированииDataMatrix()
	
	ВидимостьИнформации = АкцизныеМаркиЕГАИС.ВидимостьИнформацииОСканированииDataMatrix(Ложь);
	
	Элементы.ГруппаИнформацияDataMatrix.Видимость = НЕ Элементы.СтраницаТовары.ТолькоПросмотр И ВидимостьИнформации;
	
КонецПроцедуры

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

&НаСервере
Процедура УдалитьАкцизныеМарки(Данные)
	
	АкцизныеМаркиЕГАИС.УдалитьАкцизныеМаркиЧека(
		ЭтотОбъект,
		Данные.ИдентификаторыСтрок);
	
	АкцизныеМаркиЕГАИС.ЗаполнитьСлужебныеРеквизиты(ЭтотОбъект);
	
	ШтрихкодированиеИС.ОбновитьКэшМаркируемойПродукции(ЭтотОбъект);
	
КонецПроцедуры

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

#Область МинимальныеЦеныПодакцизныхТоваров

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

&НаСервере
Функция РезультатыПроверкиМиниальныхЦен()
	
	Возврат ИнтеграцияЕГАИС.РезультатыПроверкиМинимальныхЦенПоДокументу(Объект.Ссылка);
	
КонецФункции

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

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

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