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