Товарно-транспортная накладная ЕГАИС (входящая) / Форма документа / Модуль формы

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

&НаКлиенте
Перем КэшированныеЗначения;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ГрузоотправительКонтрагентНажатие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ПоказатьЗначение(, Объект.Грузоотправитель);
	
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура ДекорацияПоставщикНажатие(Элемент)
	
	ПоказатьЗначение(, Объект.Поставщик);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ТорговыйОбъектПриИзменении(Элемент)
	
	ПриИзмененииТорговогоОбъектаНаСервере();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ТоварыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	
	ЗавершитьРедактированиеСтрокиТовары(Элемент, НоваяСтрока, ОтменаРедактирования);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)

	ОпределитьРасхождениеКоличества();
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыКоличествоФактПриИзменении(Элемент)

	ОпределитьРасхождениеКоличества();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ДатаПриИзмененииНаСервере()
	
	//? - серии входящей ТТН вероятно не зависят от даты
	ПодготовитьЗаполнитьУстановитьВидимостьСерий();
	
КонецПроцедуры

&НаСервере
Процедура ПриИзмененииТорговогоОбъектаНаСервере()
	
	ПодготовитьЗаполнитьУстановитьВидимостьСерий();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ОпределитьРасхожденияКоличествТоваров()
	
	Для Каждого СтрокаТовары Из Объект.Товары Цикл
		СтрокаТовары.РасхождениеКоличества = СтрокаТовары.Количество <> СтрокаТовары.КоличествоФакт;
	КонецЦикла;
	
КонецПроцедуры

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

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

&НаСервере
Процедура ОбновитьСтатусЕГАИС()
	
	МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Объект.Ссылка);
	
	СтатусЕГАИС = МенеджерОбъекта.СтатусПоУмолчанию();
	
	ДальнейшееДействие = МенеджерОбъекта.ДальнейшееДействиеПоУмолчанию();
	Если НЕ ЗавершенаПроверкаИПодбор(Объект.СтатусПроверкиИПодбора) Тогда
		
		ДальнейшееДействие = Новый Массив;
		
	КонецЕсли;
	
	Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
		
		Запрос = Новый Запрос(
		"ВЫБРАТЬ
		|	Статусы.Статус КАК Статус,
		|	ВЫБОР
		|		КОГДА Статусы.ДальнейшееДействие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='Только расхождения'"));
		КонецЕсли;
	КонецЕсли;
		
КонецПроцедуры

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

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

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

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

		Если ОтборСтрокКоличествоБыло <> ОтборСтрокКоличествоСтало Тогда
			ОтборСтрок = "Все";
			УстановитьОтборСтрок(ЭтотОбъект);
		КонецЕсли;
		
		Элементы.ОтборСтрок.Видимость = (ОтборСтрокКоличествоСтало <> 1);
	КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область СопоставлениеКлассификаторов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьВидимостьКоличестваФакт()
	
	ЕстьОтборСтрокТолькоРасхождения = ЕстьОтборСтрокТолькоРасхождения();
	
	Элементы.ТоварыКоличествоФакт.Видимость = ЕстьОтборСтрокТолькоРасхождения;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция ЗавершенаПроверкаИПодбор(СтатусПроверкиИПодбора)
	
	Возврат СтатусПроверкиИПодбора = ПредопределенноеЗначение("Перечисление.СтатусыПроверкиИПодбораИС.Завершено");
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ВыполняетсяПроверкаИПодбор(СтатусПроверкиИПодбора)
	
	Возврат СтатусПроверкиИПодбора = ПредопределенноеЗначение("Перечисление.СтатусыПроверкиИПодбораИС.Выполняется");
	
КонецФункции

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

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

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

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

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

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

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

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

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