Акт постановки на баланс ЕГАИС / Форма документа / Модуль формы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура НастроитьЭлементыФормы(Форма)
	
	Форма.Элементы.Операция.СписокВыбора.Очистить();
	
	ИспользуемыйФорматОбменаЕГАИС = ИнтеграцияЕГАИСВызовСервера.ФорматОбменаОрганизацииЕГАИС(Форма.Объект.ОрганизацияЕГАИС);
	
	АктПостановкиНаБалансВРегистр1 = ПредопределенноеЗначение("Перечисление.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1");
	АктПостановкиНаБалансВРегистр2 = ПредопределенноеЗначение("Перечисление.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2");
	АктПостановкиНаБалансВРегистр3 = ПредопределенноеЗначение("Перечисление.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3");
	
	Формат1 = ПредопределенноеЗначение("Перечисление.ФорматыОбменаЕГАИС.V1");
	Формат2 = ПредопределенноеЗначение("Перечисление.ФорматыОбменаЕГАИС.V2");
	Формат3 = ПредопределенноеЗначение("Перечисление.ФорматыОбменаЕГАИС.V3");
	Формат4 = ПредопределенноеЗначение("Перечисление.ФорматыОбменаЕГАИС.V4");
	
	Пересортица = ПредопределенноеЗначение("Перечисление.ПричиныПостановкиНаБалансЕГАИС.Пересортица");
	
	Если    ИспользуемыйФорматОбменаЕГАИС = Формат1
		Или ИспользуемыйФорматОбменаЕГАИС = Формат2
		Или ИспользуемыйФорматОбменаЕГАИС = Формат3
		Или ИспользуемыйФорматОбменаЕГАИС = Формат4
		Или (Форма.Объект.ВидДокумента = АктПостановкиНаБалансВРегистр1 И ЗначениеЗаполнено(Форма.Объект.Ссылка)) Тогда
		
		Если ИспользуемыйФорматОбменаЕГАИС = Формат3
			Или ИспользуемыйФорматОбменаЕГАИС = Формат4 Тогда
			Форма.Элементы.Операция.СписокВыбора.Добавить(АктПостановкиНаБалансВРегистр1, НСтр("ru = 'Регистра №1,3'"));
		Иначе
			Форма.Элементы.Операция.СписокВыбора.Добавить(АктПостановкиНаБалансВРегистр1, НСтр("ru = 'Регистра №1'"));
		КонецЕсли;
		
	КонецЕсли;
	Если    ИспользуемыйФорматОбменаЕГАИС = Формат2
		Или ИспользуемыйФорматОбменаЕГАИС = Формат3
		Или ИспользуемыйФорматОбменаЕГАИС = Формат4
		Или (Форма.Объект.ВидДокумента = АктПостановкиНаБалансВРегистр2 И ЗначениеЗаполнено(Форма.Объект.Ссылка))Тогда
		Форма.Элементы.Операция.СписокВыбора.Добавить(АктПостановкиНаБалансВРегистр2, НСтр("ru = 'Регистра №2'"));
	КонецЕсли;
	Если ИспользуемыйФорматОбменаЕГАИС = Формат3
		Или ИспользуемыйФорматОбменаЕГАИС = Формат4
		Или (Форма.Объект.ВидДокумента = АктПостановкиНаБалансВРегистр3 И ЗначениеЗаполнено(Форма.Объект.Ссылка)) Тогда
		Форма.Элементы.Операция.СписокВыбора.Добавить(АктПостановкиНаБалансВРегистр3, НСтр("ru = 'Регистра №3'"));
	КонецЕсли;
	
	Форма.ИспользоватьАкцизныеМарки = (Форма.Объект.ВидДокумента = АктПостановкиНаБалансВРегистр1)
	                              Или (Форма.Объект.ВидДокумента = АктПостановкиНаБалансВРегистр3);
	
	ВидимостьРеквизитовСправки1        = (Форма.Объект.ВидДокумента = АктПостановкиНаБалансВРегистр1);
	
	ВидимостьПричиныПостановкиНаБаланс = (Форма.Объект.ВидДокумента = АктПостановкиНаБалансВРегистр1)
	                                 Или (Форма.Объект.ВидДокумента = АктПостановкиНаБалансВРегистр2);
	
	Форма.Элементы.ТоварыПодменюЗаполнить.Видимость = ЗначениеЗаполнено(Форма.Объект.ДокументОснование);
	Форма.Элементы.ТоварыОткрытьПодбор.Видимость = Не ЗначениеЗаполнено(Форма.Объект.ДокументОснование);
	
	Форма.Элементы.ПричинаПостановкиНаБаланс.Видимость = ВидимостьПричиныПостановкиНаБаланс;
	Форма.Элементы.ПричинаПостановкиНаБаланс.Доступность = Форма.Объект.ВидДокумента = АктПостановкиНаБалансВРегистр1;
	
	Форма.Элементы.АктСписанияЕГАИС.Видимость = (Форма.Объект.ПричинаПостановкиНаБаланс = Пересортица)
	                                             И ВидимостьПричиныПостановкиНаБаланс;
	
	Форма.Элементы.ТоварыИндексАкцизнойМарки.Видимость     = Форма.ИспользоватьАкцизныеМарки;
	
	Форма.Элементы.ТоварыКоличествоПоСправке1.Видимость    = ВидимостьРеквизитовСправки1;
	Форма.Элементы.ТоварыНомерТТН.Видимость                = ВидимостьРеквизитовСправки1;
	Форма.Элементы.ТоварыДатаТТН.Видимость                 = ВидимостьРеквизитовСправки1;
	Форма.Элементы.ТоварыДатаРозлива.Видимость             = ВидимостьРеквизитовСправки1;
	Форма.Элементы.ТоварыНомерПодтвержденияЕГАИС.Видимость = ВидимостьРеквизитовСправки1;
	Форма.Элементы.ТоварыДатаПодтвержденияЕГАИС.Видимость  = ВидимостьРеквизитовСправки1;
	
	Форма.Элементы.ТоварыСправка2.Видимость                = Форма.ИспользоватьАкцизныеМарки;
	Форма.Элементы.ТоварыСправка2.ТолькоПросмотр           = (Форма.Объект.ВидДокумента <> АктПостановкиНаБалансВРегистр3);
	
	ПараметрыВыбораАлкогольнойПродукции = Новый Массив;
	Если Форма.Объект.ВидДокумента = АктПостановкиНаБалансВРегистр3 Тогда
		ПараметрыВыбораАлкогольнойПродукции.Добавить(Новый ПараметрВыбора("ТолькоМаркируемая", Истина));
	КонецЕсли;
	Форма.Элементы.ТоварыАлкогольнаяПродукция.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбораАлкогольнойПродукции);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

КонецФункции 

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

#Область Оборудование

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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