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

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

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

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

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

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

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

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

&НаКлиенте
Процедура СтраницаОформленоОтборДальнейшееДействиеЕГАИСПриИзменении(Элемент)
	
	УстановитьОтборПоДальнейшемуДействиюСервер();
	
КонецПроцедуры

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

#Область ОтборПоОрганизацииЕГАИС

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ОтборДальнейшиеДействия

&НаСервереБезКонтекста
Функция ВсеТребующиеДействия()
	
	Возврат Документы.ТТНВходящаяЕГАИС.ВсеТребующиеДействия();
	
КонецФункции

&НаСервереБезКонтекста
Функция ВсеТребующиеОжидания()
	
	Возврат Документы.ТТНВходящаяЕГАИС.ВсеТребующиеОжидания();
	
КонецФункции

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

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

#Область ОформлениеПоступления

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПоказатьПредупреждениеПоступлениеНеТребуется()
	
	ПоказатьПредупреждение(, НСтр("ru='Поступление товаров для данной ТТН ЕГАИС не требуется.'"));
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьПредупреждениеПоступлениеУжеОформлено()
	
	ПоказатьПредупреждение(, НСтр("ru='Поступление товаров для данной ТТН ЕГАИС уже оформлено.'"));
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьПредупреждениеЕстьНесопоставленнаяАлкогольнаяПродукция()
	
	ПоказатьПредупреждение(, НСтр("ru='В данной ТТН ЕГАИС имеется несопоставленная алкогольная продукция.
	                                  |Выполнить действие можно только после выполнения сопоставления лицом,
	                                  |ответственным за ведение номенклатуры на предприятии.'"));
	
КонецПроцедуры

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

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

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

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

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

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

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