#Область ОбработчикиСобытий
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
ИнтеграцияЕГАИСВызовСервера.ПриПолученииФормыДокумента(
"ТТНВходящаяЕГАИС",
ВидФормы,
Параметры,
ВыбраннаяФорма,
ДополнительнаяИнформация,
СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область ДействияПриОбменеЕГАИС
Функция СтатусПослеПодготовкиКПередачеДанных(ДокументСсылка, Операция) Экспорт
Если Операция = Перечисления.ВидыДокументовЕГАИС.АктТТНПодтверждение Тогда
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыКПередаче(
ДокументСсылка,
Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктПодтвержденияКПередаче);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.АктТТНРасхождения Тогда
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыКПередаче(
ДокументСсылка,
Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктРасхожденийКПередаче);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.АктТТНОтказ Тогда
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыКПередаче(
ДокументСсылка,
Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктОтказаКПередаче);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияТТН Тогда
ТекущееСостояние = РегистрыСведений.СтатусыДокументовЕГАИС.ТекущееСостояние(ДокументСсылка);
Если ТекущееСостояние.Статус = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.Отменен
Или ТекущееСостояние.Статус = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуАктаОтказаОшибка Тогда
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыКПередаче(
ДокументСсылка,
Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуАктаОтказаКПередаче);
Иначе
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыКПередаче(
ДокументСсылка,
Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуПроведенияКПередаче);
КонецЕсли;
Иначе
ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
КонецЕсли;
Возврат ПараметрыОбновления;
КонецФункции
Функция СтатусПослеПередачиДанных(ДокументСсылка, Операция, СтатусОбработки) Экспорт
Если СтатусОбработки = Неопределено Тогда
СтатусОбработки = Перечисления.СтатусыОбработкиСообщенийЕГАИС.ПереданоВУТМ;
КонецЕсли;
Если Операция = Перечисления.ВидыДокументовЕГАИС.АктТТНПодтверждение Тогда
СтатусыБазовыйПроцесс = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыБазовыйПроцесс.Принят = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктПодтвержденияПереданВУТМ;
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПолученЕГАИС);
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПроведенЕГАИС);
СтатусыБазовыйПроцесс.Ошибка = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктПодтвержденияОшибка;
СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПодтвердитеПолучение);
СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОтменитеОперацию);
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусы(ДокументСсылка, СтатусОбработки, СтатусыБазовыйПроцесс);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.АктТТНРасхождения Тогда
СтатусыБазовыйПроцесс = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыБазовыйПроцесс.Принят = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктРасхожденийПереданВУТМ;
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПолученЕГАИС);
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПроведенЕГАИС);
СтатусыБазовыйПроцесс.Ошибка = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктРасхожденийОшибка;
СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПодтвердитеПолучение);
СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОтменитеОперацию);
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусы(ДокументСсылка, СтатусОбработки, СтатусыБазовыйПроцесс);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.АктТТНОтказ Тогда
СтатусыБазовыйПроцесс = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыБазовыйПроцесс.Принят = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктОтказаПереданВУТМ;
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПолученЕГАИС);
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПроведенЕГАИС);
СтатусыБазовыйПроцесс.Ошибка = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктОтказаОшибка;
СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОткажитесьОтНакладной);
СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОтменитеОперацию);
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусы(ДокументСсылка, СтатусОбработки, СтатусыБазовыйПроцесс);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияТТН Тогда
ТекущееСостояние = РегистрыСведений.СтатусыДокументовЕГАИС.ТекущееСостояние(ДокументСсылка);
СтатусыБазовыйПроцесс = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
Если ТекущееСостояние.Статус = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуАктаОтказаКПередаче Тогда
СтатусыБазовыйПроцесс.Принят = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуАктаОтказаПереданВУТМ;
Иначе
СтатусыБазовыйПроцесс.Принят = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуПроведенияПереданВУТМ;
КонецЕсли;
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПолученЕГАИС);
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПроведенЕГАИС);
Если ТекущееСостояние.Статус = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуАктаОтказаКПередаче Тогда
СтатусыБазовыйПроцесс.Ошибка = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуАктаОтказаОшибка;
Иначе
СтатусыБазовыйПроцесс.Ошибка = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуПроведенияОшибка;
КонецЕсли;
СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОтменитеОперацию);
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусы(ДокументСсылка, СтатусОбработки, СтатусыБазовыйПроцесс);
Иначе
ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
КонецЕсли;
Возврат ПараметрыОбновления;
КонецФункции
Функция СтатусПослеПолученияДанных(ДокументСсылка, Операция, ДополнительныеПараметры = Неопределено) Экспорт
СтатусыАктТТНПодтверждение = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыАктТТНПодтверждение.Принят = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.Подтвержден;
СтатусыАктТТНПодтверждение.Обрабатывается = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктПодтвержденияОбрабатываетсяЕГАИС;
СтатусыАктТТНПодтверждение.ОтменаПроведения = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ОтмененПоставщиком;
СтатусыАктТТНПодтверждение.ОшибкаПроведения = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктПодтвержденияОшибка;
СтатусыАктТТНПодтверждение.Ошибка = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктПодтвержденияОшибка;
СтатусыАктТТНПодтверждение.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПодтвердитеПолучение);
СтатусыАктТТНПодтверждение.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОтменитеОперацию);
СтатусыАктТТНПодтверждение.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.НеТребуется);
СтатусыАктТТНПодтверждение.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
СтатусыАктТТНПодтверждение.УведомлениеОРегистрацииДвижения = Ложь;
СтатусыАктТТНРасхождения = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыАктТТНРасхождения.Принят = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ПодтвержденСРасхождениями;
СтатусыАктТТНРасхождения.Обрабатывается = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктРасхожденийОбрабатываетсяЕГАИС;
СтатусыАктТТНРасхождения.ОтменаПроведения = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ОтмененПоставщиком;
СтатусыАктТТНРасхождения.ОшибкаПроведения = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктРасхожденийОшибка;
СтатусыАктТТНРасхождения.Ошибка = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктРасхожденийОшибка;
СтатусыАктТТНРасхождения.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПодтвердитеПолучение);
СтатусыАктТТНРасхождения.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОтменитеОперацию);
СтатусыАктТТНРасхождения.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.НеТребуется);
СтатусыАктТТНРасхождения.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
СтатусыАктТТНРасхождения.УведомлениеОРегистрацииДвижения = Ложь;
СтатусыАктТТНОтказ = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыАктТТНОтказ.Принят = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.Отменен;
СтатусыАктТТНОтказ.Обрабатывается = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктОтказаОбрабатываетсяЕГАИС;
СтатусыАктТТНОтказ.ОтменаПроведения = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.Отменен;
СтатусыАктТТНОтказ.ОшибкаПроведения = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктОтказаОшибка;
СтатусыАктТТНОтказ.Ошибка = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктОтказаОшибка;
СтатусыАктТТНОтказ.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОткажитесьОтНакладной);
СтатусыАктТТНОтказ.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОтменитеОперацию);
СтатусыАктТТНОтказ.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.НеТребуется);
СтатусыАктТТНОтказ.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
СтатусыАктТТНОтказ.ОтменаПроведенияДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.НеТребуется);
СтатусыАктТТНОтказ.ОтменаПроведенияДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
СтатусыАктТТНОтказ.УведомлениеОРегистрацииДвижения = Ложь;
СтатусыЗапросНаОтменуПроведения = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыЗапросНаОтменуПроведения.Принят = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ПринятИзЕГАИС;
СтатусыЗапросНаОтменуПроведения.Обрабатывается = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуПроведенияОбрабатываетсяЕГАИС;
СтатусыЗапросНаОтменуПроведения.ОтменаПроведения = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ПринятИзЕГАИС;
СтатусыЗапросНаОтменуПроведения.ОшибкаПроведения = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуПроведенияОшибка;
СтатусыЗапросНаОтменуПроведения.Ошибка = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуПроведенияОшибка;
СтатусыЗапросНаОтменуПроведения.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
СтатусыЗапросНаОтменуПроведения.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОтменитеОперацию);
СтатусыЗапросНаОтменуПроведения.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПодтвердитеПолучение);
СтатусыЗапросНаОтменуПроведения.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОткажитесьОтНакладной);
СтатусыЗапросНаОтменуПроведения.ОтменаПроведенияДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПодтвердитеПолучение);
СтатусыЗапросНаОтменуПроведения.ОтменаПроведенияДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОткажитесьОтНакладной);
СтатусыЗапросНаОтменуПроведения.УведомлениеОРегистрацииДвижения = Ложь;
СтатусыЗапросНаОтменуПроведенияОтказ = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыЗапросНаОтменуПроведенияОтказ.Принят = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.Подтвержден;
СтатусыЗапросНаОтменуПроведенияОтказ.Обрабатывается = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуПроведенияОбрабатываетсяЕГАИС;
СтатусыЗапросНаОтменуПроведенияОтказ.ОшибкаПроведения = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуПроведенияОшибка;
СтатусыЗапросНаОтменуПроведенияОтказ.Ошибка = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуПроведенияОшибка;
СтатусыЗапросНаОтменуПроведенияОтказ.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
СтатусыЗапросНаОтменуПроведенияОтказ.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОтменитеОперацию);
СтатусыЗапросНаОтменуПроведенияОтказ.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.НеТребуется);
СтатусыЗапросНаОтменуПроведенияОтказ.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
СтатусыЗапросНаОтменуПроведенияОтказ.УведомлениеОРегистрацииДвижения = Ложь;
ВыполнитьРасчетТекущегоСостояния = Истина;
Если ДополнительныеПараметры <> Неопределено
И ДополнительныеПараметры.Свойство("ТекущееСостояние")
И ДополнительныеПараметры.ТекущееСостояние <> Неопределено Тогда
ВыполнитьРасчетТекущегоСостояния = ДополнительныеПараметры.ТекущееСостояние;
КонецЕсли;
Если Операция = Перечисления.ВидыДокументовЕГАИС.ТТН
Или Операция = Перечисления.ВидыДокументовЕГАИС.УведомлениеОРегистрацииДвиженияТТН Тогда
Если (ДополнительныеПараметры <> Неопределено) И (ДополнительныеПараметры.ДокументОбъект <> Неопределено) Тогда
ЗавершенаПроверкаИПодбор = ЗавершенаПроверкаИПодбор(ДополнительныеПараметры.ДокументОбъект);
Иначе
ЗавершенаПроверкаИПодбор = ЗавершенаПроверкаИПодбор(ДокументСсылка);
КонецЕсли;
СтатусыБазовыйПроцесс = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыБазовыйПроцесс.Принят = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ПринятИзЕГАИС;
Если НЕ ЗавершенаПроверкаИПодбор Тогда
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ВыполнитеПроверку);
Иначе
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПодтвердитеПолучение);
КонецЕсли;
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОткажитесьОтНакладной);
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусы(
ДокументСсылка,
Перечисления.СтатусыОбработкиСообщенийЕГАИС.ПринятИзЕГАИС,
СтатусыБазовыйПроцесс);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.КвитанцияАктаРасхожденийОтказ Тогда
Статусы = СтатусыАктТТНРасхождения;
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыПриПолученииКвитанции(
ДокументСсылка,
"КвитанцияПроведенЕГАИС", Перечисления.СтатусыОбработкиСообщенийЕГАИС.ДокументОтменен,
Статусы, Ложь);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.КвитанцияАктаРасхожденийПодтверждение Тогда
Статусы = СтатусыАктТТНРасхождения;
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыПриПолученииКвитанции(
ДокументСсылка,
"КвитанцияПроведенЕГАИС", Перечисления.СтатусыОбработкиСообщенийЕГАИС.ДокументПроведен,
Статусы, Ложь);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.КвитанцияЗапросаНаОтменуПроведенияТТНОтказ Тогда
Статусы = СтатусыЗапросНаОтменуПроведенияОтказ;
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыПриПолученииКвитанции(
ДокументСсылка,
"КвитанцияПроведенЕГАИС", Перечисления.СтатусыОбработкиСообщенийЕГАИС.ДокументПроведен,
Статусы, Ложь);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.КвитанцияПолученЕГАИС Тогда
Статусы = Неопределено;
Если ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктТТНПодтверждение Тогда
Статусы = СтатусыАктТТНПодтверждение;
ИначеЕсли ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктТТНРасхождения Тогда
Статусы = СтатусыАктТТНРасхождения;
ИначеЕсли ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктТТНОтказ Тогда
Статусы = СтатусыАктТТНОтказ;
ИначеЕсли ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияТТН Тогда
ТекущееСостояние = РегистрыСведений.СтатусыДокументовЕГАИС.ТекущееСостояние(ДокументСсылка);
Если ТекущееСостояние.Статус = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуАктаОтказаПереданВУТМ Тогда
Статусы = СтатусыЗапросНаОтменуПроведения;
Статусы.Обрабатывается = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуАктаОтказаОбрабатываетсяЕГАИС;
Статусы.ОшибкаПроведения = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуАктаОтказаОшибка;
Статусы.Ошибка = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуАктаОтказаОшибка;
Иначе
Статусы = СтатусыЗапросНаОтменуПроведения;
КонецЕсли;
Иначе
ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
КонецЕсли;
Если Статусы <> Неопределено Тогда
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыПриПолученииКвитанции(
ДокументСсылка,
"КвитанцияПолученЕГАИС", ДополнительныеПараметры.СтатусОбработки,
Статусы, ВыполнитьРасчетТекущегоСостояния);
КонецЕсли;
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.КвитанцияПроведенЕГАИС Тогда
Статусы = Неопределено;
Если ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктТТНПодтверждение Тогда
Статусы = СтатусыАктТТНПодтверждение;
ИначеЕсли ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктТТНРасхождения Тогда
Статусы = СтатусыАктТТНРасхождения;
ИначеЕсли ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктТТНОтказ Тогда
Статусы = СтатусыАктТТНОтказ;
ИначеЕсли ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияТТН Тогда
Статусы = СтатусыЗапросНаОтменуПроведения;
ИначеЕсли ДополнительныеПараметры.ОперацияКвитанции = Неопределено
И ДополнительныеПараметры.СтатусОбработки = Перечисления.СтатусыОбработкиСообщенийЕГАИС.ДокументРаспроведен Тогда
СтатусыРаспроведение = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыРаспроведение.ОтменаПроведения = Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ОтмененПоставщиком;
Статусы = СтатусыРаспроведение;
Иначе
ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
КонецЕсли;
Если Статусы <> Неопределено Тогда
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыПриПолученииКвитанции(
ДокументСсылка,
"КвитанцияПроведенЕГАИС", ДополнительныеПараметры.СтатусОбработки,
Статусы, ВыполнитьРасчетТекущегоСостояния);
КонецЕсли;
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.ИсторияСправок2ПоТТН Тогда
Иначе
ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
КонецЕсли;
Возврат ПараметрыОбновления;
КонецФункции
Функция ОбновитьСтатусПослеПодготовкиКПередачеДанных(ДокументСсылка, Операция, ДополнительныеПараметры = Неопределено) Экспорт
ПараметрыОбновления = СтатусПослеПодготовкиКПередачеДанных(ДокументСсылка, Операция);
Если ПараметрыОбновления = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
НовыйСтатусПослеОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.ОбновитьСтатус(
ДокументСсылка,
ПараметрыОбновления, ДополнительныеПараметры);
Возврат НовыйСтатусПослеОбновления;
КонецФункции
Функция ОбновитьСтатусПослеПередачиДанных(ДокументСсылка, Операция, СтатусОбработки, ДополнительныеПараметры = Неопределено) Экспорт
ПараметрыОбновления = СтатусПослеПередачиДанных(ДокументСсылка, Операция, СтатусОбработки);
Если ПараметрыОбновления = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
НовыйСтатусПослеОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.ОбновитьСтатус(
ДокументСсылка,
ПараметрыОбновления, ДополнительныеПараметры);
Возврат НовыйСтатусПослеОбновления;
КонецФункции
Функция ОбновитьСтатусПослеПолученияДанных(ДокументСсылка, Операция, ДополнительныеПараметры = Неопределено) Экспорт
ПараметрыОбновления = СтатусПослеПолученияДанных(ДокументСсылка, Операция, ДополнительныеПараметры);
Если ПараметрыОбновления = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
НовыйСтатусПослеОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.ОбновитьСтатус(
ДокументСсылка,
ПараметрыОбновления, ДополнительныеПараметры);
Возврат НовыйСтатусПослеОбновления;
КонецФункции
Функция ОбновитьСтатус(ДокументСсылка, ПараметрыОбновления, ДополнительныеПараметры) Экспорт
НовыйСтатусПослеОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.ОбновитьСтатус(
ДокументСсылка,
ПараметрыОбновления, ДополнительныеПараметры);
Возврат НовыйСтатусПослеОбновления;
КонецФункции
Функция ПоследовательностьОпераций(ДокументСсылка) Экспорт
Таблица = ОбменДаннымиЕГАИС.ПустаяТаблицаПоследовательностьОпераций();
Исходящий = Перечисления.ТипыЗапросовИС.Исходящий;
Входящий = Перечисления.ТипыЗапросовИС.Входящий;
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Входящий, Перечисления.ВидыДокументовЕГАИС.ТТН);
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Входящий, Перечисления.ВидыДокументовЕГАИС.УведомлениеОРегистрацииДвиженияТТН);
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Входящий, Перечисления.ВидыДокументовЕГАИС.ИсторияСправок2ПоТТН);
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, -1, Входящий, Перечисления.ВидыДокументовЕГАИС.КвитанцияПроведенЕГАИС);
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, -2, Входящий, Перечисления.ВидыДокументовЕГАИС.КвитанцияВходящейТранспортнойНакладной);
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Исходящий, Перечисления.ВидыДокументовЕГАИС.АктТТН, ДокументСсылка);
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 1, Исходящий, Перечисления.ВидыДокументовЕГАИС.АктТТНОтказ,,,Ложь);
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 2, Исходящий, Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияТТН, ДокументСсылка);
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 2, Исходящий, Перечисления.ВидыДокументовЕГАИС.АктТТНПодтверждение);
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 2, Исходящий, Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияТТН, ДокументСсылка);
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 3, Исходящий, Перечисления.ВидыДокументовЕГАИС.АктТТНРасхождения);
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 3, Входящий, Перечисления.ВидыДокументовЕГАИС.КвитанцияАктаРасхождений);
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 31, Входящий, Перечисления.ВидыДокументовЕГАИС.КвитанцияАктаРасхожденийОтказ);
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 32, Входящий, Перечисления.ВидыДокументовЕГАИС.КвитанцияАктаРасхожденийПодтверждение);
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 32, Исходящий, Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияТТН, ДокументСсылка);
Возврат Таблица;
КонецФункции
Процедура ПриИзмененииСтатусаДокумента(ДокументСсылка, ПредыдущийСтатус, НовыйСтатус, ПараметрыОбновленияСтатуса) Экспорт
СтатусыДвиженийСвободныйОстаток = СтатусыДвиженийСвободныйОстаток();
СтатусыДвиженийКоличество = СтатусыДвиженийКоличество();
ОбновитьДвижения = ИнтеграцияЕГАИС.СтатусТребуетОбновленияДвижений(СтатусыДвиженийСвободныйОстаток, ПредыдущийСтатус, НовыйСтатус)
Или ИнтеграцияЕГАИС.СтатусТребуетОбновленияДвижений(СтатусыДвиженийКоличество, ПредыдущийСтатус, НовыйСтатус);
Если ПараметрыОбновленияСтатуса.ОбновлятьДвижения
И ОбновитьДвижения Тогда
ИмяРегистра = "ОстаткиАлкогольнойПродукцииЕГАИС";
НаборЗаписей = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);
ДополнительныеСвойстваДляПроведения = Новый Структура;
ИнтеграцияИС.ИнициализироватьДополнительныеСвойстваДляПроведения(ДокументСсылка, ДополнительныеСвойстваДляПроведения);
ИнициализироватьДанныеДокумента(ДокументСсылка, ДополнительныеСвойстваДляПроведения, ИмяРегистра);
НаборЗаписей.Загрузить(ДополнительныеСвойстваДляПроведения.ТаблицыДляДвижений["Таблица" + ИмяРегистра]);
НаборЗаписей.Записать();
КонецЕсли;
Если ПараметрыОбновленияСтатуса.ДокументОбъект = Неопределено Тогда
Товары = ИнтеграцияЕГАИС.Справки2ПоДокументу(ДокументСсылка);
Иначе
Товары = ПараметрыОбновленияСтатуса.ДокументОбъект.Товары;
КонецЕсли;
Если ИнтеграцияЕГАИС.СтатусТребуетДобавленияДвижений(СтатусыДвиженийКоличество, ПредыдущийСтатус, НовыйСтатус) Тогда
ШтрихкодыУпаковок = ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоДокументу(ДокументСсылка);
ВходящиеАкцизныеМарки = ВходящиеАкцизныеМарки(ДокументСсылка, Товары);
Для Каждого СтрокаТЧ Из ШтрихкодыУпаковок.МаркированныеТовары Цикл
Если СтрокаТЧ.Статус = Перечисления.СтатусыАкцизныхМарок.ОшибкаЧтенияСтатуса Тогда
АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЧтенияСтатуса(СтрокаТЧ.ШтрихкодУпаковки);
Продолжить;
КонецЕсли;
Если Не ЗначениеЗаполнено(СтрокаТЧ.Справка2)
Или Не ЗначениеЗаполнено(СтрокаТЧ.АлкогольнаяПродукция) Тогда
АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЗаполненияСправки2(СтрокаТЧ.ШтрихкодУпаковки);
Продолжить;
КонецЕсли;
АкцизнаяМаркаКПодтверждению = (ВходящиеАкцизныеМарки.Найти(СтрокаТЧ.Штрихкод, "Штрихкод") <> Неопределено);
Если АкцизнаяМаркаКПодтверждению Тогда
НовыйСтатусАкцизнойМарки = Перечисления.СтатусыАкцизныхМарок.ВНаличии;
Иначе
НовыйСтатусАкцизнойМарки = Перечисления.СтатусыАкцизныхМарок.КПостановкеНаБаланс;
КонецЕсли;
ДанныеЗаписиСтатуса = РегистрыСведений.АкцизныеМаркиЕГАИС.ПоляЗаписиСтатусаУпаковки();
ДанныеЗаписиСтатуса.ОрганизацияЕГАИС = СтрокаТЧ.ОрганизацияЕГАИС;
ДанныеЗаписиСтатуса.АкцизнаяМарка = СтрокаТЧ.ШтрихкодУпаковки;
ДанныеЗаписиСтатуса.Статус = НовыйСтатусАкцизнойМарки;
ДанныеЗаписиСтатуса.Справка2 = СтрокаТЧ.Справка2;
ДанныеЗаписиСтатуса.АлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
ДанныеЗаписиСтатуса.Основание = ДокументСсылка;
РегистрыСведений.АкцизныеМаркиЕГАИС.ВыполнитьЗаписьВРегистр(ДанныеЗаписиСтатуса);
КонецЦикла;
КонецЕсли;
Если ИнтеграцияЕГАИС.СтатусТребуетУдаленияДвижений(СтатусыДвиженийСвободныйОстаток, ПредыдущийСтатус, НовыйСтатус)
И ИнтеграцияЕГАИС.ЕстьДвижения(СтатусыДвиженийКоличество, ПредыдущийСтатус, НовыйСтатус) Тогда
ШтрихкодыУпаковок = ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоДокументу(ДокументСсылка);
Для Каждого СтрокаТЧ Из ШтрихкодыУпаковок.МаркированныеТовары Цикл
Если СтрокаТЧ.Статус = Перечисления.СтатусыАкцизныхМарок.ОшибкаЧтенияСтатуса Тогда
АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЧтенияСтатуса(СтрокаТЧ.ШтрихкодУпаковки);
Продолжить;
КонецЕсли;
Если Не ЗначениеЗаполнено(СтрокаТЧ.Справка2)
Или Не ЗначениеЗаполнено(СтрокаТЧ.АлкогольнаяПродукция) Тогда
АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЗаполненияСправки2(СтрокаТЧ.ШтрихкодУпаковки);
Продолжить;
КонецЕсли;
Если СтрокаТЧ.Статус = Перечисления.СтатусыАкцизныхМарок.ВНаличии Тогда
НовыйСтатусАкцизнойМарки = Перечисления.СтатусыАкцизныхМарок.ВНаличииКОтменеПроведения;
ИначеЕсли СтрокаТЧ.Статус = Перечисления.СтатусыАкцизныхМарок.КПостановкеНаБаланс Тогда
НовыйСтатусАкцизнойМарки = Перечисления.СтатусыАкцизныхМарок.КПостановкеНаБалансКОтменеПроведения;
Иначе
Продолжить;
КонецЕсли;
ДанныеЗаписиСтатуса = РегистрыСведений.АкцизныеМаркиЕГАИС.ПоляЗаписиСтатусаУпаковки();
ДанныеЗаписиСтатуса.ОрганизацияЕГАИС = СтрокаТЧ.ОрганизацияЕГАИС;
ДанныеЗаписиСтатуса.АкцизнаяМарка = СтрокаТЧ.ШтрихкодУпаковки;
ДанныеЗаписиСтатуса.Статус = НовыйСтатусАкцизнойМарки;
ДанныеЗаписиСтатуса.Справка2 = СтрокаТЧ.Справка2;
ДанныеЗаписиСтатуса.АлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
ДанныеЗаписиСтатуса.Основание = ДокументСсылка;
РегистрыСведений.АкцизныеМаркиЕГАИС.ВыполнитьЗаписьВРегистр(ДанныеЗаписиСтатуса);
КонецЦикла;
КонецЕсли;
Если ИнтеграцияЕГАИС.СтатусТребуетДобавленияДвижений(СтатусыДвиженийСвободныйОстаток, ПредыдущийСтатус, НовыйСтатус)
И ИнтеграцияЕГАИС.ЕстьДвижения(СтатусыДвиженийКоличество, ПредыдущийСтатус, НовыйСтатус) Тогда
ШтрихкодыУпаковок = ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоДокументу(ДокументСсылка);
Для Каждого СтрокаТЧ Из ШтрихкодыУпаковок.МаркированныеТовары Цикл
Если СтрокаТЧ.Статус = Перечисления.СтатусыАкцизныхМарок.ОшибкаЧтенияСтатуса Тогда
АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЧтенияСтатуса(СтрокаТЧ.ШтрихкодУпаковки);
Продолжить;
КонецЕсли;
Если Не ЗначениеЗаполнено(СтрокаТЧ.Справка2)
Или Не ЗначениеЗаполнено(СтрокаТЧ.АлкогольнаяПродукция) Тогда
АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЗаполненияСправки2(СтрокаТЧ.ШтрихкодУпаковки);
Продолжить;
КонецЕсли;
Если СтрокаТЧ.Статус = Перечисления.СтатусыАкцизныхМарок.ВНаличииКОтменеПроведения Тогда
НовыйСтатусАкцизнойМарки = Перечисления.СтатусыАкцизныхМарок.ВНаличии;
ИначеЕсли СтрокаТЧ.Статус = Перечисления.СтатусыАкцизныхМарок.КПостановкеНаБалансКОтменеПроведения Тогда
НовыйСтатусАкцизнойМарки = Перечисления.СтатусыАкцизныхМарок.КПостановкеНаБаланс;
Иначе
Продолжить;
КонецЕсли;
ДанныеЗаписиСтатуса = РегистрыСведений.АкцизныеМаркиЕГАИС.ПоляЗаписиСтатусаУпаковки();
ДанныеЗаписиСтатуса.ОрганизацияЕГАИС = СтрокаТЧ.ОрганизацияЕГАИС;
ДанныеЗаписиСтатуса.АкцизнаяМарка = СтрокаТЧ.ШтрихкодУпаковки;
ДанныеЗаписиСтатуса.Статус = НовыйСтатусАкцизнойМарки;
ДанныеЗаписиСтатуса.Справка2 = СтрокаТЧ.Справка2;
ДанныеЗаписиСтатуса.АлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
ДанныеЗаписиСтатуса.Основание = ДокументСсылка;
РегистрыСведений.АкцизныеМаркиЕГАИС.ВыполнитьЗаписьВРегистр(ДанныеЗаписиСтатуса);
КонецЦикла;
КонецЕсли;
Если ИнтеграцияЕГАИС.СтатусТребуетУдаленияДвижений(СтатусыДвиженийКоличество, ПредыдущийСтатус, НовыйСтатус) Тогда
ШтрихкодыУпаковок = ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоДокументу(ДокументСсылка);
Для Каждого СтрокаТЧ Из ШтрихкодыУпаковок.МаркированныеТовары Цикл
Если СтрокаТЧ.Статус = Перечисления.СтатусыАкцизныхМарок.ОшибкаЧтенияСтатуса Тогда
АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЧтенияСтатуса(СтрокаТЧ.ШтрихкодУпаковки);
Продолжить;
КонецЕсли;
Если Не ЗначениеЗаполнено(СтрокаТЧ.Справка2)
Или Не ЗначениеЗаполнено(СтрокаТЧ.АлкогольнаяПродукция) Тогда
АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЗаполненияСправки2(СтрокаТЧ.ШтрихкодУпаковки);
Продолжить;
КонецЕсли;
ДанныеЗаписиСтатуса = РегистрыСведений.АкцизныеМаркиЕГАИС.ПоляЗаписиСтатусаУпаковки();
ДанныеЗаписиСтатуса.ОрганизацияЕГАИС = СтрокаТЧ.ОрганизацияЕГАИС;
ДанныеЗаписиСтатуса.АкцизнаяМарка = СтрокаТЧ.ШтрихкодУпаковки;
ДанныеЗаписиСтатуса.Статус = Перечисления.СтатусыАкцизныхМарок.НеПодтверждена;
ДанныеЗаписиСтатуса.Справка2 = СтрокаТЧ.Справка2;
ДанныеЗаписиСтатуса.АлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
ДанныеЗаписиСтатуса.Основание = ДокументСсылка;
РегистрыСведений.АкцизныеМаркиЕГАИС.ВыполнитьЗаписьВРегистр(ДанныеЗаписиСтатуса);
КонецЦикла;
КонецЕсли;
ИнтеграцияЕГАИСПереопределяемый.ПриИзмененииСтатусаДокумента(ДокументСсылка, ПредыдущийСтатус, НовыйСтатус, ПараметрыОбновленияСтатуса);
РасчетСтатусовОформленияЕГАИС.РассчитатьСтатусыОформленияДокументовЕГАИС(ДокументСсылка);
КонецПроцедуры
#КонецОбласти
#Область Статусы
Функция СтатусПоУмолчанию() Экспорт
Возврат Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ПринятИзЕГАИС;
КонецФункции
Функция СтатусыОшибок() Экспорт
Статусы = Новый Массив;
Статусы.Добавить(Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктПодтвержденияОшибка);
Статусы.Добавить(Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктРасхожденийОшибка);
Статусы.Добавить(Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.АктОтказаОшибка);
Статусы.Добавить(Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуПроведенияОшибка);
Возврат Статусы;
КонецФункции
Функция КонечныеСтатусы(ТребуетсяПовторноеОформление = Истина) Экспорт
Статусы = Новый Массив;
Статусы.Добавить(Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.Отменен);
Статусы.Добавить(Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ОтмененПоставщиком);
Если Не ТребуетсяПовторноеОформление Тогда
Статусы.Добавить(Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.Подтвержден);
Статусы.Добавить(Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ПодтвержденСРасхождениями);
КонецЕсли;
Возврат Статусы;
КонецФункции
Функция ДальнейшееДействиеПоУмолчанию() Экспорт
Возврат Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПодтвердитеПолучение;
КонецФункции
#КонецОбласти
#Область ПанельОбменСЕГАИС
Функция ВсеТребующиеДействия() Экспорт
МассивДействий = Новый Массив;
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ВыполнитеПроверку);
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПодтвердитеПолучение);
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПодтвердитеПолучениеАктПодтверждения);
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПодтвердитеПолучениеАктРасхождений);
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОткажитесьОтНакладной);
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ВыполнитеОбмен);
Возврат МассивДействий;
КонецФункции
Функция ВсеТребующиеОжидания() Экспорт
МассивДействий = Новый Массив;
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПередачуДанныхРегламентнымЗаданием);
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПолученЕГАИС);
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПроведенЕГАИС);
Возврат МассивДействий;
КонецФункции
Функция ТекстЗапросаПанельОбменСЕГАИСОтработайте() Экспорт
ТекстЗапроса = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| КОЛИЧЕСТВО (РАЗЛИЧНЫЕ СтатусыДокументовЕГАИС.Документ) КАК КоличествоДокументов
|ИЗ
| РегистрСведений.СтатусыДокументовЕГАИС КАК СтатусыДокументовЕГАИС
|ЛЕВОЕ СОЕДИНЕНИЕ
| Документ.ТТНВходящаяЕГАИС КАК ТТНВходящаяЕГАИС
|ПО
| СтатусыДокументовЕГАИС.Документ = ТТНВходящаяЕГАИС.Ссылка
|ГДЕ
| ТТНВходящаяЕГАИС.Ссылка ЕСТЬ НЕ NULL
| И НЕ ТТНВходящаяЕГАИС.ПометкаУдаления
| И СтатусыДокументовЕГАИС.ДальнейшееДействие1 В(&ВсеТребующиеДействия)
| И (ТТНВходящаяЕГАИС.Грузополучатель В(&ОрганизацияЕГАИС)
| ИЛИ &БезОтбораПоОрганизацииЕГАИС)
| И (ТТНВходящаяЕГАИС.Ответственный = &Ответственный
| ИЛИ &Ответственный = НЕОПРЕДЕЛЕНО)
|";
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаПанельОбменСЕГАИСОжидайте() Экспорт
ТекстЗапроса = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| КОЛИЧЕСТВО (РАЗЛИЧНЫЕ СтатусыДокументовЕГАИС.Документ) КАК КоличествоДокументов
|ИЗ
| РегистрСведений.СтатусыДокументовЕГАИС КАК СтатусыДокументовЕГАИС
|ЛЕВОЕ СОЕДИНЕНИЕ
| Документ.ТТНВходящаяЕГАИС КАК ТТНВходящаяЕГАИС
|ПО
| СтатусыДокументовЕГАИС.Документ = ТТНВходящаяЕГАИС.Ссылка
|ГДЕ
| ТТНВходящаяЕГАИС.Ссылка ЕСТЬ НЕ NULL
| И НЕ ТТНВходящаяЕГАИС.ПометкаУдаления
| И СтатусыДокументовЕГАИС.ДальнейшееДействие1 В(&ВсеТребующиеОжидания)
| И (ТТНВходящаяЕГАИС.Грузополучатель В(&ОрганизацияЕГАИС)
| ИЛИ &БезОтбораПоОрганизацииЕГАИС)
| И (ТТНВходящаяЕГАИС.Ответственный = &Ответственный
| ИЛИ &Ответственный = НЕОПРЕДЕЛЕНО)
|";
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#Область СообщенияЕГАИС
Функция СообщениеКПередачеXML(ДокументСсылка, ДальнейшееДействие, ДополнительныеПараметры = Неопределено) Экспорт
Если ДальнейшееДействие = Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПодтвердитеПолучение Тогда
ЕстьРасхождения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументСсылка, "ЕстьРасхождения");
Если ЕстьРасхождения Тогда
Возврат АктРасхожденийXML(ДокументСсылка);
Иначе
Возврат АктПодтвержденияXML(ДокументСсылка);
КонецЕсли;
ИначеЕсли ДальнейшееДействие = Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПодтвердитеПолучениеАктПодтверждения Тогда
Возврат АктПодтвержденияXML(ДокументСсылка);
ИначеЕсли ДальнейшееДействие = Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПодтвердитеПолучениеАктРасхождений Тогда
Возврат АктРасхожденийXML(ДокументСсылка);
ИначеЕсли ДальнейшееДействие = Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОткажитесьОтНакладной Тогда
Возврат АктОтказаXML(ДокументСсылка);
ИначеЕсли ДальнейшееДействие = Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения Тогда
Возврат ЗапросНаОтменуПроведенияXML(ДокументСсылка);
КонецЕсли;
КонецФункции
Функция ВходящееСообщение(ДокументСсылка) Экспорт
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| ЕГАИСПрисоединенныеФайлы.Ссылка КАК Ссылка,
| ЕГАИСПрисоединенныеФайлы.ВладелецФайла КАК ОрганизацияЕГАИС
|ИЗ
| Справочник.ЕГАИСПрисоединенныеФайлы КАК ЕГАИСПрисоединенныеФайлы
|ГДЕ
| ЕГАИСПрисоединенныеФайлы.Документ = &Документ
| И ЕГАИСПрисоединенныеФайлы.ТипСообщения = ЗНАЧЕНИЕ(Перечисление.ТипыЗапросовИС.Входящий)
| И ЕГАИСПрисоединенныеФайлы.Операция = ЗНАЧЕНИЕ(Перечисление.ВидыДокументовЕГАИС.ТТН)
|");
Запрос.УстановитьПараметр("Документ", ДокументСсылка);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Ссылка;
Иначе
ВызватьИсключение НСтр("ru='Не найдено входящее сообщение обмена'");
КонецЕсли;
КонецФункции
Функция ВходящееДеревоУпаковок(ДокументСсылка, Товары = Неопределено) Экспорт
ТоварыБезАкцизныхМарок = Новый ТаблицаЗначений;
ТоварыБезАкцизныхМарок.Колонки.Добавить("АлкогольнаяПродукция");
ТоварыБезАкцизныхМарок.Колонки.Добавить("Справка2");
ТоварыБезАкцизныхМарок.Колонки.Добавить("Количество");
ТоварыБезАкцизныхМарок.Колонки.Добавить("Номенклатура");
ТоварыБезАкцизныхМарок.Колонки.Добавить("Характеристика");
ТоварыБезАкцизныхМарок.Колонки.Добавить("Серия");
ДеревоУпаковок = Новый ДеревоЗначений;
ДеревоУпаковок.Колонки.Добавить("Штрихкод");
ДеревоУпаковок.Колонки.Добавить("ТипУпаковки");
ДеревоУпаковок.Колонки.Добавить("АлкогольнаяПродукция");
ДеревоУпаковок.Колонки.Добавить("Справка2");
ДеревоУпаковок.Колонки.Добавить("Номенклатура");
ДеревоУпаковок.Колонки.Добавить("Характеристика");
ДеревоУпаковок.Колонки.Добавить("Серия");
Если Товары = Неопределено Тогда
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ТТНВходящаяЕГАИСТовары.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ТТНВходящаяЕГАИСТовары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| ТТНВходящаяЕГАИСТовары.Номенклатура КАК Номенклатура,
| ТТНВходящаяЕГАИСТовары.Характеристика КАК Характеристика,
| ТТНВходящаяЕГАИСТовары.Серия КАК Серия,
| ТТНВходящаяЕГАИСТовары.Справка2 КАК Справка2,
| ТТНВходящаяЕГАИСТовары.Количество КАК Количество,
| ЕСТЬNULL(ТТНВходящаяЕГАИСТовары.АлкогольнаяПродукция.ВидПродукции.Маркируемый, ЛОЖЬ) КАК Маркируемый
|ИЗ
| Документ.ТТНВходящаяЕГАИС.Товары КАК ТТНВходящаяЕГАИСТовары
|ГДЕ
| ТТНВходящаяЕГАИСТовары.Ссылка = &Ссылка
|");
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
ТаблицаТовары = Запрос.Выполнить().Выгрузить();
Иначе
ТаблицаТовары = Товары;
КонецЕсли;
Результат = ДанныеДокументаТТНv3(ДокументСсылка);
Если Результат <> Неопределено
И (Результат.ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V3
Или Результат.ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V4) Тогда
Для Каждого ЭлементДанных Из Результат.Данные.Content.Position Цикл
MarkInfo = ЭлементДанных.InformF2.MarkInfo;
ШтрихкодыУпаковкиСправки2 = Новый Соответствие;
КоличествоАкцизныхМарок = 0;
СтрокаТЧ = ТаблицаТовары.Найти(ЭлементДанных.Identity, "ИдентификаторСтроки");
Если MarkInfo <> Неопределено Тогда
Для Каждого boxpos Из MarkInfo.boxpos Цикл
ШтрихкодУпаковки = Строка(boxpos.boxnumber);
ДанныеШтрихкодаУпаковки = Новый Структура;
ДанныеШтрихкодаУпаковки.Вставить("АкцизныеМарки", Новый Массив);
Если СтрокаТЧ <> Неопределено Тогда
ДанныеШтрихкодаУпаковки.Вставить("АлкогольнаяПродукция", СтрокаТЧ.АлкогольнаяПродукция);
ДанныеШтрихкодаУпаковки.Вставить("Справка2", СтрокаТЧ.Справка2);
ДанныеШтрихкодаУпаковки.Вставить("Номенклатура", СтрокаТЧ.Номенклатура);
ДанныеШтрихкодаУпаковки.Вставить("Характеристика", СтрокаТЧ.Характеристика);
ДанныеШтрихкодаУпаковки.Вставить("Серия", СтрокаТЧ.Серия);
Иначе
ДанныеШтрихкодаУпаковки.Вставить("АлкогольнаяПродукция");
ДанныеШтрихкодаУпаковки.Вставить("Справка2");
ДанныеШтрихкодаУпаковки.Вставить("Номенклатура");
ДанныеШтрихкодаУпаковки.Вставить("Характеристика");
ДанныеШтрихкодаУпаковки.Вставить("Серия");
КонецЕсли;
Если Не ЗначениеЗаполнено(ШтрихкодУпаковки) И ШтрихкодыУпаковкиСправки2.Получить(ШтрихкодУпаковки)<>Неопределено Тогда
ДобавленыРанее = ШтрихкодыУпаковкиСправки2.Получить(ШтрихкодУпаковки).АкцизныеМарки;
Для Каждого КодАкцизнойМарки Из ДобавленыРанее Цикл
ДанныеШтрихкодаУпаковки.АкцизныеМарки.Добавить(КодАкцизнойМарки);
КонецЦикла;
КонецЕсли;
Если boxpos.amclist <> Неопределено Тогда
Для Каждого КодАкцизнойМарки Из boxpos.amclist.amc Цикл
ДанныеШтрихкодаУпаковки.АкцизныеМарки.Добавить(КодАкцизнойМарки);
КоличествоАкцизныхМарок = КоличествоАкцизныхМарок + 1;
КонецЦикла;
КонецЕсли;
ШтрихкодыУпаковкиСправки2.Вставить(ШтрихкодУпаковки, ДанныеШтрихкодаУпаковки);
КонецЦикла;
КонецЕсли;
Если ЭлементДанных.Quantity <> КоличествоАкцизныхМарок
И СтрокаТЧ <> Неопределено Тогда
СтрокаТаблицы = ТоварыБезАкцизныхМарок.Добавить();
СтрокаТаблицы.АлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
СтрокаТаблицы.Справка2 = СтрокаТЧ.Справка2;
СтрокаТаблицы.Количество = ЭлементДанных.Quantity - КоличествоАкцизныхМарок;
СтрокаТаблицы.Номенклатура = СтрокаТЧ.Номенклатура;
СтрокаТаблицы.Характеристика = СтрокаТЧ.Характеристика;
СтрокаТаблицы.Серия = СтрокаТЧ.Серия;
КонецЕсли;
Если ЭлементДанных.boxInfo <> Неопределено Тогда
ДобавитьУпаковкиВДерево(ДеревоУпаковок, ЭлементДанных.boxInfo.boxtree, ШтрихкодыУпаковкиСправки2);
КонецЕсли;
Если ШтрихкодыУпаковкиСправки2.Количество() <> 0 Тогда
КодыУпаковок = Новый Массив;
Для Каждого КлючЗначение Из ШтрихкодыУпаковкиСправки2 Цикл
ДанныеУпаковки = Новый Структура;
ДанныеУпаковки.Вставить("bl", Неопределено);
ДанныеУпаковки.Вставить("boxnum", Новый Массив);
ДанныеУпаковки.boxnum.Добавить(КлючЗначение.Ключ);
КодыУпаковок.Добавить(ДанныеУпаковки);
КонецЦикла;
ДобавитьУпаковкиВДерево(ДеревоУпаковок, КодыУпаковок, ШтрихкодыУпаковкиСправки2);
КонецЕсли;
КонецЦикла;
Иначе
Для Каждого СтрокаТЧ Из ТаблицаТовары Цикл
СтрокаТаблицы = ТоварыБезАкцизныхМарок.Добавить();
СтрокаТаблицы.АлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
СтрокаТаблицы.Справка2 = СтрокаТЧ.Справка2;
СтрокаТаблицы.Количество = СтрокаТЧ.Количество;
СтрокаТаблицы.Номенклатура = СтрокаТЧ.Номенклатура;
СтрокаТаблицы.Характеристика = СтрокаТЧ.Характеристика;
СтрокаТаблицы.Серия = СтрокаТЧ.Серия;
КонецЦикла;
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("ДеревоУпаковок", ДеревоУпаковок);
Результат.Вставить("ТоварыБезАкцизныхМарок", ТоварыБезАкцизныхМарок);
Возврат Результат;
КонецФункции
Функция ВходящиеАкцизныеМарки(ДокументСсылка, Товары = Неопределено) Экспорт
Если Товары = Неопределено Тогда
Товары = ИнтеграцияЕГАИС.Справки2ПоДокументу(ДокументСсылка);
КонецЕсли;
АкцизныеМарки = Новый ТаблицаЗначений;
АкцизныеМарки.Колонки.Добавить("Справка2", Новый ОписаниеТипов("СправочникСсылка.Справки2ЕГАИС"));
АкцизныеМарки.Колонки.Добавить("Штрихкод", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(200)));
Результат = ДанныеДокументаТТНv3(ДокументСсылка);
Если Результат <> Неопределено
И (Результат.ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V3
Или Результат.ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V4) Тогда
Для Каждого ЭлементДанных Из Результат.Данные.Content.Position Цикл
MarkInfo = ЭлементДанных.InformF2.MarkInfo;
СтрокаТЧ = Товары.Найти(ЭлементДанных.Identity, "ИдентификаторСтроки");
Если СтрокаТЧ <> Неопределено Тогда
Справка2 = СтрокаТЧ.Справка2;
Иначе
Справка2 = Неопределено;
КонецЕсли;
Если MarkInfo <> Неопределено Тогда
Для Каждого boxpos Из MarkInfo.boxpos Цикл
Если boxpos.amclist <> Неопределено Тогда
Для Каждого КодАкцизнойМарки Из boxpos.amclist.amc Цикл
НоваяСтрока = АкцизныеМарки.Добавить();
НоваяСтрока.Справка2 = Справка2;
НоваяСтрока.Штрихкод = КодАкцизнойМарки;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат АкцизныеМарки;
КонецФункции
#КонецОбласти
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Списки) Экспорт
Списки.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Организация)
| И ЗначениеРазрешено(ТорговыйОбъект)
| И ВЫБОР
| КОГДА Грузоотправитель.Сопоставлено И Грузоотправитель.СоответствуетОрганизации
| ТОГДА ЗначениеРазрешено(Грузоотправитель.Контрагент)
| КОГДА Грузоотправитель.Сопоставлено И НЕ Грузоотправитель.СоответствуетОрганизации
| ТОГДА ЗначениеРазрешено(Грузоотправитель.ТорговыйОбъект)
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И ВЫБОР
| КОГДА Грузополучатель.Сопоставлено И Грузополучатель.СоответствуетОрганизации
| ТОГДА ЗначениеРазрешено(Грузополучатель.Контрагент)
| КОГДА Грузополучатель.Сопоставлено И НЕ Грузополучатель.СоответствуетОрганизации
| ТОГДА ЗначениеРазрешено(Грузополучатель.ТорговыйОбъект)
| ИНАЧЕ ИСТИНА
| КОНЕЦ";
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область СообщенияЕГАИС
Функция АктПодтвержденияXML(ДокументСсылка)
СообщенияXML = Новый Массив;
Операция = Перечисления.ВидыДокументовЕГАИС.АктТТНПодтверждение;
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ЕГАИСПрисоединенныеФайлы.Документ КАК Ссылка,
| КОЛИЧЕСТВО(ЕГАИСПрисоединенныеФайлы.Ссылка) КАК ПоследнийНомер
|ПОМЕСТИТЬ Версии
|ИЗ
| Справочник.ЕГАИСПрисоединенныеФайлы КАК ЕГАИСПрисоединенныеФайлы
|ГДЕ
| ЕГАИСПрисоединенныеФайлы.Документ = &Ссылка
| И ЕГАИСПрисоединенныеФайлы.Операция = &Операция
| И ЕГАИСПрисоединенныеФайлы.ТипСообщения = ЗНАЧЕНИЕ(Перечисление.ТипыЗапросовИС.Исходящий)
|СГРУППИРОВАТЬ ПО
| ЕГАИСПрисоединенныеФайлы.Документ
|;
|
|
|ВЫБРАТЬ
| Шапка.Номер КАК Номер,
| Шапка.Дата КАК Дата,
| ЕСТЬNULL(Версии.ПоследнийНомер, 0) КАК ПоследнийНомерВерсии,
| Шапка.ДокументОснование КАК ДокументОснование,
|
| Шапка.ИдентификаторЕГАИС КАК ИдентификаторЕГАИС,
| ВЫРАЗИТЬ(Шапка.Комментарий КАК Строка(500)) КАК Комментарий,
|
| Шапка.Грузополучатель КАК ОрганизацияЕГАИС,
| Шапка.Грузополучатель.Код КАК ИдентификаторФСРАР,
| Шапка.Грузоотправитель.ФорматОбмена КАК ФорматОбменаГрузоотправителя,
| Шапка.Грузополучатель.ФорматОбмена КАК ФорматОбменаГрузополучателя,
| Шапка.ФорматОбмена КАК ФорматОбмена,
| Шапка.Ответственный КАК Ответственный,
| ВЫБОР
| КОГДА Шапка.Грузополучатель.ИНН = Шапка.Грузоотправитель.ИНН
| ТОГДА ЛОЖЬ
| ИНАЧЕ Не Шапка.ТоварВПутиПринадлежитГрузополучателю
| КОНЕЦ КАК СменаСобственника
|ИЗ
| Документ.ТТНВходящаяЕГАИС КАК Шапка,
| ЛЕВОЕ СОЕДИНЕНИЕ Версии КАК Версии
| ПО Шапка.Ссылка = Версии.Ссылка
|ГДЕ
| Шапка.Ссылка = &Ссылка
|");
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.УстановитьПараметр("Операция", Операция);
Шапка = Запрос.Выполнить().Выбрать();
Если Не Шапка.Следующий() Тогда
СообщениеXML = ОбменДаннымиЕГАИС.СтруктураСообщенияXML();
СообщениеXML.Документ = ДокументСсылка;
СообщениеXML.Описание = ОбменДаннымиЕГАИС.ОписаниеОперацииПередачиДанных(
Операция, ДокументСсылка);
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, НСтр("ru = 'Нет данных для выгрузки.'"));
СообщенияXML.Добавить(СообщениеXML);
Возврат СообщенияXML;
КонецЕсли;
НомерВерсии = Шапка.ПоследнийНомерВерсии + 1;
ФорматОбмена = ФорматОбмена(Шапка);
СообщениеXML = ОбменДаннымиЕГАИС.СтруктураСообщенияXML();
СообщениеXML.Описание = ОбменДаннымиЕГАИС.ОписаниеОперацииПередачиДанных(
Операция, ДокументСсылка, НомерВерсии);
ПространствоИмен = Перечисления.ВидыДокументовЕГАИС.ПространствоИмен(Операция, ФорматОбмена);
ИмяТипа = Перечисления.ВидыДокументовЕГАИС.ТипЕГАИС(Операция, ФорматОбмена);
Если ПространствоИмен = Неопределено
Или ИмяТипа = Неопределено Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
СтрШаблон(НСтр("ru = 'Операция не поддерживается в версии формата обмена: %1.'"), ФорматОбмена));
СообщенияXML.Добавить(СообщениеXML);
Возврат СообщенияXML;
КонецЕсли;
#Область АктТТНПодтверждение
Если ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V1 Тогда
#Область ФорматОбмена_V1
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "WayBillActType");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", ИнтеграцияЕГАИС.НовыйИдентификаторДокумента(ДокументСсылка, "awb"), СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "IsAccept", "Accepted", СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ACTNUMBER", СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate", ТекущаяДатаСеанса(), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "WBRegId", Шапка.ИдентификаторЕГАИС, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
#КонецОбласти
ИначеЕсли ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V2 Тогда
#Область ФорматОбмена_V2
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "WayBillActType_v2");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", ИнтеграцияЕГАИС.НовыйИдентификаторДокумента(ДокументСсылка, "awb"), СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "IsAccept", "Accepted", СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ACTNUMBER", СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate", ТекущаяДатаСеанса(), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "WBRegId", Шапка.ИдентификаторЕГАИС, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
#КонецОбласти
Иначе
Если ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V3 Тогда
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "WayBillActType_v3");
Иначе
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "WayBillActType_v4");
КонецЕсли;
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", ИнтеграцияЕГАИС.НовыйИдентификаторДокумента(ДокументСсылка, "awb"), СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "IsAccept", "Accepted", СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ACTNUMBER", СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate", ТекущаяДатаСеанса(), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "WBRegId", Шапка.ИдентификаторЕГАИС, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
Если ФорматОбмена <> Перечисления.ФорматыОбменаЕГАИС.V3 Тогда
АктXDTO.Transport = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Transport");
Если Шапка.СменаСобственника Тогда
АктXDTO.Transport.ChangeOwnership = "IsChange";
Иначе
АктXDTO.Transport.ChangeOwnership = "NotChange";
КонецЕсли;
КонецЕсли;
КонецЕсли;
#КонецОбласти
ТекстСообщенияXML = РаботаСXMLЕГАИС.ОбъектXDTOВXML(АктXDTO, Шапка.ИдентификаторФСРАР, ПространствоИмен, ИмяТипа);
СообщениеXML.ТекстСообщенияXML = ТекстСообщенияXML;
СообщениеXML.ТипСообщения = Перечисления.ТипыЗапросовИС.Исходящий;
СообщениеXML.ОрганизацияЕГАИС = Шапка.ОрганизацияЕГАИС;
СообщениеXML.Операция = Операция;
СообщениеXML.ФорматОбмена = ФорматОбмена;
СообщениеXML.Документ = ДокументСсылка;
СообщениеXML.ДокументОснование = Шапка.ДокументОснование;
СообщениеXML.Версия = НомерВерсии;
СообщенияXML.Добавить(СообщениеXML);
Возврат СообщенияXML;
КонецФункции
Функция АктРасхожденийXML(ДокументСсылка)
СообщенияXML = Новый Массив;
Операция = Перечисления.ВидыДокументовЕГАИС.АктТТНРасхождения;
ТекстыЗапроса = Новый СписокЗначений;
ТекстыЗапроса.Добавить(
"ВЫБРАТЬ
| ЕГАИСПрисоединенныеФайлы.Документ КАК Ссылка,
| КОЛИЧЕСТВО(ЕГАИСПрисоединенныеФайлы.Ссылка) КАК ПоследнийНомер
|ПОМЕСТИТЬ Версии
|ИЗ
| Справочник.ЕГАИСПрисоединенныеФайлы КАК ЕГАИСПрисоединенныеФайлы
|ГДЕ
| ЕГАИСПрисоединенныеФайлы.Документ = &Ссылка
| И ЕГАИСПрисоединенныеФайлы.Операция = &Операция
| И ЕГАИСПрисоединенныеФайлы.ТипСообщения = ЗНАЧЕНИЕ(Перечисление.ТипыЗапросовИС.Исходящий)
|СГРУППИРОВАТЬ ПО
| ЕГАИСПрисоединенныеФайлы.Документ
|;
|
|
|ВЫБРАТЬ
| Шапка.Номер КАК Номер,
| Шапка.Дата КАК Дата,
| ЕСТЬNULL(Версии.ПоследнийНомер, 0) КАК ПоследнийНомерВерсии,
| Шапка.ДокументОснование КАК ДокументОснование,
|
| Шапка.ИдентификаторЕГАИС КАК ИдентификаторЕГАИС,
| ВЫРАЗИТЬ(Шапка.Комментарий КАК Строка(500)) КАК Комментарий,
|
| Шапка.Грузополучатель КАК ОрганизацияЕГАИС,
| Шапка.Грузополучатель.Код КАК ИдентификаторФСРАР,
| Шапка.Грузоотправитель.ФорматОбмена КАК ФорматОбменаГрузоотправителя,
| Шапка.Грузополучатель.ФорматОбмена КАК ФорматОбменаГрузополучателя,
| Шапка.ФорматОбмена КАК ФорматОбмена,
| Шапка.Ответственный КАК Ответственный
|ИЗ
| Документ.ТТНВходящаяЕГАИС КАК Шапка,
| ЛЕВОЕ СОЕДИНЕНИЕ Версии КАК Версии
| ПО Шапка.Ссылка = Версии.Ссылка
|ГДЕ
| Шапка.Ссылка = &Ссылка
|",
"Шапка");
ТекстыЗапроса.Добавить(
"ВЫБРАТЬ
| Товары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Серия КАК Серия,
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.ИдентификаторСтроки КАК ИдентификаторСтроки,
| Товары.Справка2 КАК Справка2,
| Товары.Количество КАК Количество,
| Товары.КоличествоФакт КАК КоличествоФакт
|ПОМЕСТИТЬ ВТТовары
|ИЗ
| Документ.ТТНВходящаяЕГАИС.Товары КАК Товары
|ГДЕ
| Товары.Ссылка = &Ссылка");
ТекстыЗапроса.Добавить(
ИнтеграцияЕГАИС.ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС(
"ВТТовары",
"ВТКоэффициентыПересчетаВЕдиницыЕГАИС"));
ТекстыЗапроса.Добавить(
"ВЫБРАТЬ
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.ИдентификаторСтроки КАК ИдентификаторСтроки,
| Товары.Справка2 КАК Справка2,
| Товары.Справка2.РегистрационныйНомер КАК НомерСправки2,
| Товары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| Товары.Количество КАК Количество,
| Товары.КоличествоФакт КАК КоличествоФакт,
|
| ЕСТЬNULL(ЕдиницыЕГАИС.ПроверятьОбъемДАЛ, ЛОЖЬ) КАК ПроверятьОбъемДАЛ,
| ЕСТЬNULL(ЕдиницыЕГАИС.ОбъемДАЛ, 0) КАК ОбъемДАЛ
|ИЗ
| ВТТовары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКоэффициентыПересчетаВЕдиницыЕГАИС КАК ЕдиницыЕГАИС
| ПО ЕдиницыЕГАИС.АлкогольнаяПродукция = Товары.АлкогольнаяПродукция
| И ЕдиницыЕГАИС.Номенклатура = Товары.Номенклатура
| И ЕдиницыЕГАИС.Характеристика = Товары.Характеристика
| И ЕдиницыЕГАИС.Серия = Товары.Серия
|",
"Товары");
ПараметрыФормированияТекстаЗапроса = ШтрихкодированиеЕГАИС.ПараметрыФормированияТекстаЗапросаВложенныхШтрихкодов();
ПараметрыФормированияТекстаЗапроса.ДокументСсылка = ДокументСсылка;
ПараметрыФормированияТекстаЗапроса.ИспользоватьИдентификаторСтроки = Ложь;
ПараметрыФормированияТекстаЗапроса.ИмяПоляОрганизацияЕГАИС = "Грузополучатель";
ТекстыЗапроса.Добавить(
ШтрихкодированиеЕГАИС.ТекстЗапросаВложенныхШтрихкодовПоДокументу(ПараметрыФормированияТекстаЗапроса),
"ВложенныеШтрихкоды");
ПустыеЗначенияНоменклатуры = ИнтеграцияИС.НезаполненныеЗначенияОпределяемогоТипа(Метаданные.ОпределяемыеТипы.Номенклатура);
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.УстановитьПараметр("Операция", Операция);
Запрос.УстановитьПараметр("ПустыеЗначенияНоменклатуры", ПустыеЗначенияНоменклатуры);
РезультатыЗапроса = ОбщегоНазначенияИС.ВыполнитьПакетЗапросов(Запрос, ТекстыЗапроса);
Шапка = РезультатыЗапроса["Шапка"].Выбрать();
Товары = РезультатыЗапроса["Товары"].Выгрузить();
Если Не Шапка.Следующий()
Или Товары.Количество() = 0 Тогда
СообщениеXML = ОбменДаннымиЕГАИС.СтруктураСообщенияXML();
СообщениеXML.Документ = ДокументСсылка;
СообщениеXML.Описание = ОбменДаннымиЕГАИС.ОписаниеОперацииПередачиДанных(
Операция, ДокументСсылка);
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, НСтр("ru = 'Нет данных для выгрузки.'"));
СообщенияXML.Добавить(СообщениеXML);
Возврат СообщенияXML;
КонецЕсли;
Если Товары.Итог("КоличествоФакт") = 0 Тогда
СообщениеXML = ОбменДаннымиЕГАИС.СтруктураСообщенияXML();
СообщениеXML.Документ = ДокументСсылка;
СообщениеXML.Описание = ОбменДаннымиЕГАИС.ОписаниеОперацииПередачиДанных(
Операция, ДокументСсылка);
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
НСтр("ru = 'Некорректная операция. Для передачи факта отказа необходимо воспользоваться командой ""Отказаться от накладной"".'"));
СообщенияXML.Добавить(СообщениеXML);
Возврат СообщенияXML;
КонецЕсли;
Если Товары.Итог("КоличествоФакт") = Товары.Итог("Количество") Тогда
ПрерватьВыполнение = Ложь;
Для Каждого СтрокаТЧ Из Товары Цикл
Если СтрокаТЧ.КоличествоФакт <> СтрокаТЧ.Количество Тогда
ПрерватьВыполнение = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не ПрерватьВыполнение Тогда
СообщениеXML = ОбменДаннымиЕГАИС.СтруктураСообщенияXML();
СообщениеXML.Документ = ДокументСсылка;
СообщениеXML.Описание = ОбменДаннымиЕГАИС.ОписаниеОперацииПередачиДанных(
Операция, ДокументСсылка);
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
НСтр("ru = 'Некорректная операция. Для передачи факта полного подтверждения необходимо воспользоваться командой ""Принять без расхождений"".'"));
СообщенияXML.Добавить(СообщениеXML);
Возврат СообщенияXML;
КонецЕсли;
КонецЕсли;
НомерВерсии = Шапка.ПоследнийНомерВерсии + 1;
ФорматОбмена = ФорматОбмена(Шапка);
СообщениеXML = ОбменДаннымиЕГАИС.СтруктураСообщенияXML();
СообщениеXML.Описание = ОбменДаннымиЕГАИС.ОписаниеОперацииПередачиДанных(
Операция, ДокументСсылка, НомерВерсии);
ПространствоИмен = Перечисления.ВидыДокументовЕГАИС.ПространствоИмен(Операция, ФорматОбмена);
ИмяТипа = Перечисления.ВидыДокументовЕГАИС.ТипЕГАИС(Операция, ФорматОбмена);
Если ПространствоИмен = Неопределено
Или ИмяТипа = Неопределено Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
СтрШаблон(НСтр("ru = 'Операция не поддерживается в версии формата обмена: %1.'"), ФорматОбмена));
СообщенияXML.Добавить(СообщениеXML);
Возврат СообщенияXML;
КонецЕсли;
#Область АктТТНРасхождения
Если ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V1 Тогда
#Область ФорматОбмена_V1
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "WayBillActType");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", ИнтеграцияЕГАИС.НовыйИдентификаторДокумента(ДокументСсылка, "rwb"), СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "IsAccept", "Accepted", СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ACTNUMBER", СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate", ТекущаяДатаСеанса(), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "WBRegId", Шапка.ИдентификаторЕГАИС, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
Для Каждого СтрокаТЧ Из Товары Цикл
НомерСтроки = Формат(СтрокаТЧ.НомерСтроки, "ЧГ=0");
Position = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "PositionType");
Если СтрокаТЧ.ПроверятьОбъемДАЛ
И Не ЗначениеЗаполнено(СтрокаТЧ.ОбъемДАЛ) Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, СтрШаблон(НСтр("ru = 'Для номенклатуры в строке %1 не установлен объем в декалитрах.'"), НомерСтроки));
КонецЕсли;
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Identity", СтрокаТЧ.ИдентификаторСтроки, СообщениеXML, 5);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "InformBRegId", СтрокаТЧ.НомерСправки2, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "RealQuantity", СтрокаТЧ.КоличествоФакт, СообщениеXML);
АктXDTO.Content.Position.Добавить(Position);
Если СтрокаТЧ.КоличествоФакт > СтрокаТЧ.Количество Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
СтрШаблон(
НСтр("ru = 'По алкогольной продукции %1 (номер справки 2: %2) фактическое количество (%3) превышает количество в ТТН (%4).'"),
СтрокаТЧ.АлкогольнаяПродукция,
СтрокаТЧ.НомерСправки2,
СтрокаТЧ.КоличествоФакт,
СтрокаТЧ.Количество));
КонецЕсли;
КонецЦикла;
#КонецОбласти
ИначеЕсли ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V2 Тогда
#Область ФорматОбмена_V2
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "WayBillActType_v2");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", ИнтеграцияЕГАИС.НовыйИдентификаторДокумента(ДокументСсылка, "rwb"), СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "IsAccept", "Differences", СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ACTNUMBER", СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate", ТекущаяДатаСеанса(), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "WBRegId", Шапка.ИдентификаторЕГАИС, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
Для Каждого СтрокаТЧ Из Товары Цикл
НомерСтроки = Формат(СтрокаТЧ.НомерСтроки, "ЧГ=0");
Position = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "PositionType");
Если СтрокаТЧ.ПроверятьОбъемДАЛ
И Не ЗначениеЗаполнено(СтрокаТЧ.ОбъемДАЛ) Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, СтрШаблон(НСтр("ru = 'Для номенклатуры в строке %1 не установлен объем в декалитрах.'"), НомерСтроки));
КонецЕсли;
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Identity", СтрокаТЧ.ИдентификаторСтроки, СообщениеXML, 5);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "InformF2RegId", СтрокаТЧ.НомерСправки2, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "RealQuantity", СтрокаТЧ.КоличествоФакт, СообщениеXML);
АктXDTO.Content.Position.Добавить(Position);
Если СтрокаТЧ.КоличествоФакт > СтрокаТЧ.Количество Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
СтрШаблон(
НСтр("ru = 'По алкогольной продукции %1 (номер справки 2: %2) фактическое количество (%3) превышает количество в ТТН (%4).'"),
СтрокаТЧ.АлкогольнаяПродукция,
СтрокаТЧ.НомерСправки2,
СтрокаТЧ.КоличествоФакт,
СтрокаТЧ.Количество));
КонецЕсли;
КонецЦикла;
#КонецОбласти
Иначе
ВходящиеАкцизныеМарки = ВходящиеАкцизныеМарки(ДокументСсылка, Товары);
ВходящиеАкцизныеМарки.Индексы.Добавить("Справка2");
Выборка = РезультатыЗапроса["ВложенныеШтрихкоды"].Выбрать();
ВложенныеШтрихкодыУпаковок = ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоВыборкеИМенеджеруВТ(
Выборка, МенеджерВременныхТаблиц);
ЗначенияШтрихкодов = ВложенныеШтрихкодыУпаковок.МаркированныеТовары;
ЗначенияШтрихкодов.Индексы.Добавить("Штрихкод");
Если ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V3 Тогда
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "WayBillActType_v3");
Иначе
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "WayBillActType_v4");
КонецЕсли;
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", ИнтеграцияЕГАИС.НовыйИдентификаторДокумента(ДокументСсылка, "rwb"), СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "IsAccept", "Differences", СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ACTNUMBER", СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate", ТекущаяДатаСеанса(), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "WBRegId", Шапка.ИдентификаторЕГАИС, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
Для Каждого СтрокаТЧ Из Товары Цикл
НомерСтроки = Формат(СтрокаТЧ.НомерСтроки, "ЧГ=0");
Position = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "PositionType");
Если СтрокаТЧ.ПроверятьОбъемДАЛ
И Не ЗначениеЗаполнено(СтрокаТЧ.ОбъемДАЛ) Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, СтрШаблон(НСтр("ru = 'Для номенклатуры в строке %1 не установлен объем в декалитрах.'"), НомерСтроки));
КонецЕсли;
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Identity", СтрокаТЧ.ИдентификаторСтроки, СообщениеXML, 5);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "InformF2RegId", СтрокаТЧ.НомерСправки2, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "RealQuantity", СтрокаТЧ.КоличествоФакт, СообщениеXML);
АктXDTO.Content.Position.Добавить(Position);
Если СтрокаТЧ.КоличествоФакт > СтрокаТЧ.Количество Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
СтрШаблон(
НСтр("ru = 'По алкогольной продукции %1 (номер справки 2: %2) фактическое количество (%3) превышает количество в ТТН (%4).'"),
СтрокаТЧ.АлкогольнаяПродукция,
СтрокаТЧ.НомерСправки2,
СтрокаТЧ.КоличествоФакт,
СтрокаТЧ.Количество));
КонецЕсли;
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Справка2", СтрокаТЧ.Справка2);
НайденныеСтроки = ВходящиеАкцизныеМарки.НайтиСтроки(ПараметрыОтбора);
КоличествоАкцизныхМарок = НайденныеСтроки.Количество();
Если КоличествоАкцизныхМарок > 0 Тогда
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
Если ЗначенияШтрихкодов.Найти(НайденнаяСтрока.Штрихкод, "Штрихкод") <> Неопределено Тогда
Продолжить;
КонецЕсли;
Если Position.MarkInfo = Неопределено Тогда
Position.MarkInfo = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "MarkInfo");
КонецЕсли;
Position.MarkInfo.amc.Добавить(НайденнаяСтрока.Штрихкод);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если ФорматОбмена <> Перечисления.ФорматыОбменаЕГАИС.V3 Тогда
АктXDTO.Transport = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Transport");
АктXDTO.Transport.ChangeOwnership = "IsChange";
КонецЕсли;
КонецЕсли;
#КонецОбласти
ТекстСообщенияXML = РаботаСXMLЕГАИС.ОбъектXDTOВXML(АктXDTO, Шапка.ИдентификаторФСРАР, ПространствоИмен, ИмяТипа);
СообщениеXML.ТекстСообщенияXML = ТекстСообщенияXML;
СообщениеXML.ТипСообщения = Перечисления.ТипыЗапросовИС.Исходящий;
СообщениеXML.ОрганизацияЕГАИС = Шапка.ОрганизацияЕГАИС;
СообщениеXML.Операция = Операция;
СообщениеXML.ФорматОбмена = ФорматОбмена;
СообщениеXML.Документ = ДокументСсылка;
СообщениеXML.ДокументОснование = Шапка.ДокументОснование;
СообщениеXML.Версия = НомерВерсии;
СообщенияXML.Добавить(СообщениеXML);
Возврат СообщенияXML;
КонецФункции
Функция АктОтказаXML(ДокументСсылка)
СообщенияXML = Новый Массив;
Операция = Перечисления.ВидыДокументовЕГАИС.АктТТНОтказ;
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ЕГАИСПрисоединенныеФайлы.Документ КАК Ссылка,
| КОЛИЧЕСТВО(ЕГАИСПрисоединенныеФайлы.Ссылка) КАК ПоследнийНомер
|ПОМЕСТИТЬ Версии
|ИЗ
| Справочник.ЕГАИСПрисоединенныеФайлы КАК ЕГАИСПрисоединенныеФайлы
|ГДЕ
| ЕГАИСПрисоединенныеФайлы.Документ = &Ссылка
| И ЕГАИСПрисоединенныеФайлы.Операция = &Операция
| И ЕГАИСПрисоединенныеФайлы.ТипСообщения = ЗНАЧЕНИЕ(Перечисление.ТипыЗапросовИС.Исходящий)
|СГРУППИРОВАТЬ ПО
| ЕГАИСПрисоединенныеФайлы.Документ
|;
|
|
|ВЫБРАТЬ
| Шапка.Номер КАК Номер,
| Шапка.Дата КАК Дата,
| ЕСТЬNULL(Версии.ПоследнийНомер, 0) КАК ПоследнийНомерВерсии,
| Шапка.ДокументОснование КАК ДокументОснование,
|
| Шапка.ИдентификаторЕГАИС КАК ИдентификаторЕГАИС,
| ВЫРАЗИТЬ(Шапка.Комментарий КАК Строка(500)) КАК Комментарий,
|
| Шапка.Грузополучатель КАК ОрганизацияЕГАИС,
| Шапка.Грузополучатель.Код КАК ИдентификаторФСРАР,
| Шапка.Грузоотправитель.ФорматОбмена КАК ФорматОбменаГрузоотправителя,
| Шапка.Грузополучатель.ФорматОбмена КАК ФорматОбменаГрузополучателя,
| Шапка.ФорматОбмена КАК ФорматОбмена,
| Шапка.Ответственный КАК Ответственный
|ИЗ
| Документ.ТТНВходящаяЕГАИС КАК Шапка,
| ЛЕВОЕ СОЕДИНЕНИЕ Версии КАК Версии
| ПО Шапка.Ссылка = Версии.Ссылка
|ГДЕ
| Шапка.Ссылка = &Ссылка
|");
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.УстановитьПараметр("Операция", Операция);
Шапка = Запрос.Выполнить().Выбрать();
Если Не Шапка.Следующий() Тогда
СообщениеXML = ОбменДаннымиЕГАИС.СтруктураСообщенияXML();
СообщениеXML.Документ = ДокументСсылка;
СообщениеXML.Описание = ОбменДаннымиЕГАИС.ОписаниеОперацииПередачиДанных(
Операция, ДокументСсылка);
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, НСтр("ru = 'Нет данных для выгрузки.'"));
СообщенияXML.Добавить(СообщениеXML);
Возврат СообщенияXML;
КонецЕсли;
НомерВерсии = Шапка.ПоследнийНомерВерсии + 1;
ФорматОбмена = ФорматОбмена(Шапка);
СообщениеXML = ОбменДаннымиЕГАИС.СтруктураСообщенияXML();
СообщениеXML.Описание = ОбменДаннымиЕГАИС.ОписаниеОперацииПередачиДанных(
Операция, ДокументСсылка, НомерВерсии);
ПространствоИмен = Перечисления.ВидыДокументовЕГАИС.ПространствоИмен(Операция, ФорматОбмена);
ИмяТипа = Перечисления.ВидыДокументовЕГАИС.ТипЕГАИС(Операция, ФорматОбмена);
Если ПространствоИмен = Неопределено
Или ИмяТипа = Неопределено Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
СтрШаблон(НСтр("ru = 'Операция не поддерживается в версии формата обмена: %1.'"), ФорматОбмена));
СообщенияXML.Добавить(СообщениеXML);
Возврат СообщенияXML;
КонецЕсли;
#Область АктТТНОтказ
Если ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V1 Тогда
#Область ФорматОбмена_V1
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "WayBillActType");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", ИнтеграцияЕГАИС.НовыйИдентификаторДокумента(ДокументСсылка, "cwb"), СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "IsAccept", "Rejected", СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ACTNUMBER", СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate", ТекущаяДатаСеанса(), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "WBRegId", Шапка.ИдентификаторЕГАИС, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
#КонецОбласти
ИначеЕсли ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V2 Тогда
#Область ФорматОбмена_V2
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "WayBillActType_v2");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", ИнтеграцияЕГАИС.НовыйИдентификаторДокумента(ДокументСсылка, "cwb"), СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "IsAccept", "Rejected", СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ACTNUMBER", СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate", ТекущаяДатаСеанса(), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "WBRegId", Шапка.ИдентификаторЕГАИС, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
#КонецОбласти
Иначе
Если ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V3 Тогда
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "WayBillActType_v3");
Иначе
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "WayBillActType_v4");
КонецЕсли;
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", ИнтеграцияЕГАИС.НовыйИдентификаторДокумента(ДокументСсылка, "cwb"), СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "IsAccept", "Rejected", СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ACTNUMBER", СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate", ТекущаяДатаСеанса(), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "WBRegId", Шапка.ИдентификаторЕГАИС, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
Если ФорматОбмена <> Перечисления.ФорматыОбменаЕГАИС.V3 Тогда
АктXDTO.Transport = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Transport");
АктXDTO.Transport.ChangeOwnership = "NotChange";
КонецЕсли;
КонецЕсли;
#КонецОбласти
ТекстСообщенияXML = РаботаСXMLЕГАИС.ОбъектXDTOВXML(АктXDTO, Шапка.ИдентификаторФСРАР, ПространствоИмен, ИмяТипа);
СообщениеXML.ТекстСообщенияXML = ТекстСообщенияXML;
СообщениеXML.ТипСообщения = Перечисления.ТипыЗапросовИС.Исходящий;
СообщениеXML.ОрганизацияЕГАИС = Шапка.ОрганизацияЕГАИС;
СообщениеXML.Операция = Операция;
СообщениеXML.ФорматОбмена = ФорматОбмена;
СообщениеXML.Документ = ДокументСсылка;
СообщениеXML.ДокументОснование = Шапка.ДокументОснование;
СообщениеXML.Версия = НомерВерсии;
СообщенияXML.Добавить(СообщениеXML);
Возврат СообщенияXML;
КонецФункции
Функция ЗапросНаОтменуПроведенияXML(ДокументСсылка)
СообщенияXML = Новый Массив;
Операция = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияТТН;
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ЕГАИСПрисоединенныеФайлы.Документ КАК Ссылка,
| КОЛИЧЕСТВО(ЕГАИСПрисоединенныеФайлы.Ссылка) КАК ПоследнийНомер
|ПОМЕСТИТЬ Версии
|ИЗ
| Справочник.ЕГАИСПрисоединенныеФайлы КАК ЕГАИСПрисоединенныеФайлы
|ГДЕ
| ЕГАИСПрисоединенныеФайлы.Документ = &Ссылка
| И ЕГАИСПрисоединенныеФайлы.Операция = &Операция
| И ЕГАИСПрисоединенныеФайлы.ТипСообщения = ЗНАЧЕНИЕ(Перечисление.ТипыЗапросовИС.Исходящий)
|СГРУППИРОВАТЬ ПО
| ЕГАИСПрисоединенныеФайлы.Документ
|;
|
|
|ВЫБРАТЬ
| Шапка.Номер КАК Номер,
| Шапка.Дата КАК Дата,
| ЕСТЬNULL(Версии.ПоследнийНомер, 0) КАК ПоследнийНомерВерсии,
| Шапка.ДокументОснование КАК ДокументОснование,
|
| Шапка.ИдентификаторЕГАИС КАК ИдентификаторЕГАИС,
| Шапка.Грузополучатель КАК ОрганизацияЕГАИС,
| Шапка.Грузополучатель.Код КАК ИдентификаторФСРАР,
| Шапка.Грузоотправитель.ФорматОбмена КАК ФорматОбменаГрузоотправителя,
| Шапка.Грузополучатель.ФорматОбмена КАК ФорматОбменаГрузополучателя,
| Шапка.ФорматОбмена КАК ФорматОбмена,
| Шапка.Ответственный КАК Ответственный
|ИЗ
| Документ.ТТНВходящаяЕГАИС КАК Шапка,
| ЛЕВОЕ СОЕДИНЕНИЕ Версии КАК Версии
| ПО Шапка.Ссылка = Версии.Ссылка
|ГДЕ
| Шапка.Ссылка = &Ссылка
|");
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.УстановитьПараметр("Операция", Операция);
Шапка = Запрос.Выполнить().Выбрать();
Если Не Шапка.Следующий() Тогда
СообщениеXML = ОбменДаннымиЕГАИС.СтруктураСообщенияXML();
СообщениеXML.Документ = ДокументСсылка;
СообщениеXML.Описание = ОбменДаннымиЕГАИС.ОписаниеОперацииПередачиДанных(
Операция, ДокументСсылка);
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, НСтр("ru = 'Нет данных для выгрузки.'"));
СообщенияXML.Добавить(СообщениеXML);
Возврат СообщенияXML;
КонецЕсли;
НомерВерсии = Шапка.ПоследнийНомерВерсии + 1;
ФорматОбмена = ФорматОбмена(Шапка);
СообщениеXML = ОбменДаннымиЕГАИС.СтруктураСообщенияXML();
СообщениеXML.Описание = ОбменДаннымиЕГАИС.ОписаниеОперацииПередачиДанных(
Операция, ДокументСсылка, НомерВерсии);
ПространствоИмен = Перечисления.ВидыДокументовЕГАИС.ПространствоИмен(Операция, ФорматОбмена);
ИмяТипа = Перечисления.ВидыДокументовЕГАИС.ТипЕГАИС(Операция, ФорматОбмена);
Если ПространствоИмен = Неопределено
Или ИмяТипа = Неопределено Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
СтрШаблон(НСтр("ru = 'Операция не поддерживается в версии формата обмена: %1.'"), ФорматОбмена));
СообщенияXML.Добавить(СообщениеXML);
Возврат СообщенияXML;
КонецЕсли;
ЗапросXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "RequestRepealWB");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(ЗапросXDTO, "ClientId", Шапка.ИдентификаторФСРАР, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(ЗапросXDTO, "RequestNumber", СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(ЗапросXDTO, "RequestDate", ТекущаяДатаСеанса(), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(ЗапросXDTO, "WBRegId", Шапка.ИдентификаторЕГАИС, СообщениеXML);
ТекстСообщенияXML = РаботаСXMLЕГАИС.ОбъектXDTOВXML(ЗапросXDTO, Шапка.ИдентификаторФСРАР, ПространствоИмен, ИмяТипа);
СообщениеXML.ТекстСообщенияXML = ТекстСообщенияXML;
СообщениеXML.ТипСообщения = Перечисления.ТипыЗапросовИС.Исходящий;
СообщениеXML.ОрганизацияЕГАИС = Шапка.ОрганизацияЕГАИС;
СообщениеXML.Операция = Операция;
СообщениеXML.ФорматОбмена = ФорматОбмена;
СообщениеXML.Документ = ДокументСсылка;
СообщениеXML.ДокументОснование = Шапка.ДокументОснование;
СообщениеXML.Версия = НомерВерсии;
СообщенияXML.Добавить(СообщениеXML);
Возврат СообщенияXML;
КонецФункции
#КонецОбласти
#Область СканированиеАлкогольнойПродукции
Функция ШтрихкодыУпаковок(ДокументСсылка, ЗаполнитьСправки2ИзРегистра = Ложь) Экспорт
Возврат ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоДокументу(ДокументСсылка, ЗаполнитьСправки2ИзРегистра);
КонецФункции
#Область ЗавершениеСканированияАлкогольнойПродукции
Процедура ЗаполнитьАкцизныеМарки(ДокументОбъект, ДеревоУпаковок, УпаковкаВерхнегоУровня = Неопределено) Экспорт
Для Каждого СтрокаДерева Из ДеревоУпаковок.Строки Цикл
Если СтрокаДерева.ТипУпаковки = Перечисления.ПрочиеЗоныПересчетаАлкогольнойПродукции.БутылкиБезКоробки Тогда
ЗаполнитьАкцизныеМарки(
ДокументОбъект, СтрокаДерева,
УпаковкаВерхнегоУровня);
Продолжить;
КонецЕсли;
Если УпаковкаВерхнегоУровня = Неопределено
И СтрокаДерева.ТипУпаковки <> Перечисления.ТипыУпаковок.МаркированныйТовар Тогда
УпаковкаВерхнегоУровняСтрокиДерева = СтрокаДерева.ШтрихкодУпаковки;
Иначе
УпаковкаВерхнегоУровняСтрокиДерева = УпаковкаВерхнегоУровня;
КонецЕсли;
Если СтрокаДерева.ТипУпаковки = Перечисления.ТипыУпаковок.МаркированныйТовар Тогда
КоличествоАкцизныхМарок = 1;
Иначе
КоличествоАкцизныхМарок = СтрокаДерева.КоличествоАкцизныхМарок;
КонецЕсли;
Если СтрокаДерева.Справка2 <> Неопределено И КоличествоАкцизныхМарок > 0 Тогда
СтрокаТЧАкцизныеМарки = ДокументОбъект.АкцизныеМарки.Добавить();
СтрокаТЧАкцизныеМарки.АкцизнаяМарка = СтрокаДерева.ШтрихкодУпаковки;
СтрокаТЧАкцизныеМарки.Справка2 = СтрокаДерева.Справка2;
СтрокаТЧАкцизныеМарки.Количество = КоличествоАкцизныхМарок;
Если СтрокаДерева.ШтрихкодУпаковки <> УпаковкаВерхнегоУровняСтрокиДерева Тогда
СтрокаТЧАкцизныеМарки.ШтрихкодУпаковки = УпаковкаВерхнегоУровняСтрокиДерева;
КонецЕсли;
Иначе
Если УпаковкаВерхнегоУровняСтрокиДерева = Неопределено
И СтрокаДерева.ТипУпаковки <> Перечисления.ТипыУпаковок.МаркированныйТовар Тогда
УпаковкаВерхнегоУровняСтрокиДерева = СтрокаДерева.ШтрихкодУпаковки;
КонецЕсли;
ЗаполнитьАкцизныеМарки(
ДокументОбъект, СтрокаДерева,
УпаковкаВерхнегоУровняСтрокиДерева);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьФактическоеКоличество(ДокументОбъект, ДеревоУпаковок, ТаблицаНеМаркируемойПродукции) Экспорт
ТаблицаКоличеств = Новый ТаблицаЗначений();
ТаблицаКоличеств.Колонки.Добавить("Справка2", Новый ОписаниеТипов("СправочникСсылка.Справки2ЕГАИС"));
ТаблицаКоличеств.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ТаблицаКоличеств.Индексы.Добавить("Справка2");
РассчитатьКоличествоМаркируемойПродукции(ДеревоУпаковок.Строки, ТаблицаКоличеств);
ДобавитьКоличествоНемаркируемойПродукции(ТаблицаНеМаркируемойПродукции, ТаблицаКоличеств);
Для Каждого СтрокаТовары Из ДокументОбъект.Товары Цикл
Если ЗначениеЗаполнено(СтрокаТовары.Справка2) Тогда
СтрокаТовары.КоличествоФакт = 0;
Иначе
Продолжить;
КонецЕсли;
СтруктураПоиска = Новый Структура("Справка2", СтрокаТовары.Справка2);
СтрокиКоличествПоСправке2 = ТаблицаКоличеств.НайтиСтроки(СтруктураПоиска);
Для Каждого СтрокаКоличества Из СтрокиКоличествПоСправке2 Цикл
СтрокаТовары.КоличествоФакт = СтрокаТовары.КоличествоФакт + СтрокаКоличества.Количество;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область СлужебнаяЗавершениеСканированияАлкогольнойПродукции
Функция ЗавершенаПроверкаИПодбор(Документ) Экспорт
Если ТипЗнч(Документ) = Тип("ДокументСсылка.ТТНВходящаяЕГАИС") Тогда
СтатусПроверкиИПодбора = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Документ, "СтатусПроверкиИПодбора");
Иначе
СтатусПроверкиИПодбора = Документ.СтатусПроверкиИПодбора;
КонецЕсли;
Возврат СтатусПроверкиИПодбора = Перечисления.СтатусыПроверкиИПодбораИС.Завершено;
КонецФункции
Процедура РассчитатьКоличествоМаркируемойПродукции(СтрокиДерева, ТаблицаКоличеств)
Для Каждого СтрокаДерева Из СтрокиДерева Цикл
Если ЗначениеЗаполнено(СтрокаДерева.Справка2) Тогда
Если СтрокаДерева.ТипУпаковки = Перечисления.ТипыУпаковок.МаркированныйТовар Тогда
КоличествоАкцизныхМарок = 1;
Иначе
КоличествоАкцизныхМарок = СтрокаДерева.КоличествоАкцизныхМарок;
КонецЕсли;
НоваяСтрока = ТаблицаКоличеств.Добавить();
НоваяСтрока.Справка2 = СтрокаДерева.Справка2;
НоваяСтрока.Количество = КоличествоАкцизныхМарок;
ИначеЕсли СтрокаДерева.Строки.Количество() > 0 Тогда
РассчитатьКоличествоМаркируемойПродукции(СтрокаДерева.Строки, ТаблицаКоличеств);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ДобавитьКоличествоНемаркируемойПродукции(ТаблицаНеМаркируемойПродукции, ТаблицаКоличеств)
Для Каждого СтрокаНеМаркируемойПродукции Из ТаблицаНеМаркируемойПродукции Цикл
Если НЕ ЗначениеЗаполнено(СтрокаНеМаркируемойПродукции.Справка2) Тогда
Продолжить;
КонецЕсли;
СтруктураПоиска = Новый Структура("Справка2", СтрокаНеМаркируемойПродукции.Справка2);
СтрокиКоличествПоСправке2 = ТаблицаКоличеств.НайтиСтроки(СтруктураПоиска);
Если СтрокиКоличествПоСправке2.Количество() = 0 Тогда
СтрокаКоличества = ТаблицаКоличеств.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаКоличества, СтруктураПоиска);
Иначе
СтрокаКоличества = СтрокиКоличествПоСправке2[0];
КонецЕсли;
СтрокаКоличества.Количество = СтрокаКоличества.Количество + СтрокаНеМаркируемойПродукции.КоличествоФактическое;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ЗавершениеПроверкиИПодбораМаркируемойПродукции
Процедура ОтразитьРезультатыПроверкиИПодбора(ПараметрыОкончанияПроверки) Экспорт
ТаблицаНеМаркируемойПродукции = ПараметрыОкончанияПроверки.ТаблицаНеМаркируемойПродукции;
ДеревоМаркируемойПродукции = ПараметрыОкончанияПроверки.ДеревоМаркируемойПродукции;
ДокументОбъект = ПараметрыОкончанияПроверки.ПроверяемыйДокумент.ПолучитьОбъект();
ДокументОбъект.СтатусПроверкиИПодбора = Перечисления.СтатусыПроверкиИПодбораИС.Завершено;
Если ПараметрыОкончанияПроверки.АдресРезультатовПроверки = Неопределено Тогда
ДокументОбъект.ДанныеПроверкиИПодбора = Новый ХранилищеЗначения(Неопределено);
Иначе
ДокументОбъект.ДанныеПроверкиИПодбора = ПараметрыОкончанияПроверки.АдресРезультатовПроверки;
КонецЕсли;
ДокументОбъект.АкцизныеМарки.Очистить();
ЗаполнитьАкцизныеМарки(ДокументОбъект, ДеревоМаркируемойПродукции);
ЗаполнитьФактическоеКоличество(ДокументОбъект, ДеревоМаркируемойПродукции, ТаблицаНеМаркируемойПродукции);
Если ДокументОбъект.Проведен Тогда
Если ДокументОбъект.ПроверитьЗаполнение() Тогда
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Иначе
ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЕсли;
Иначе
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
ПараметрыОбновленияСтатуса = ОбменДаннымиЕГАИС.ПараметрыОбновленияСтатуса();
ПараметрыОбновленияСтатуса.ОбновлятьДвижения = Ложь;
ПараметрыОбновленияСтатуса.СтатусОбработки = Перечисления.СтатусыОбработкиСообщенийЕГАИС.ПринятИзЕГАИС;
ПараметрыОбновленияСтатуса.ДокументОбъект = ДокументОбъект;
ОбновитьСтатусПослеПолученияДанных(ДокументОбъект.Ссылка, Перечисления.ВидыДокументовЕГАИС.ТТН, ПараметрыОбновленияСтатуса);
КонецПроцедуры
#КонецОбласти
#Область Проведение
Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт
ИсточникиДанных = Новый Соответствие;
Возврат ИсточникиДанных;
КонецФункции
Процедура ИнициализироватьДанныеДокумента(ДокументСсылка, ДополнительныеСвойства, Регистры = Неопределено) Экспорт
Запрос = Новый Запрос;
ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
ТекстыЗапроса = Новый СписокЗначений;
ТекстЗапросаТаблицаОстаткиАлкогольнойПродукцииЕГАИС(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры);
ИнтеграцияИС.ИнициализироватьТаблицыДляДвижений(Запрос, ТекстыЗапроса, ДополнительныеСвойства.ТаблицыДляДвижений, Истина);
КонецПроцедуры
Процедура ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка)
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеШапки.Дата КАК Период,
| ДанныеШапки.Ссылка КАК Ссылка,
| ДанныеШапки.Грузополучатель КАК Грузополучатель,
| ДанныеШапки.ДатаРегистрацииДвижений КАК ДатаРегистрацииДвижений,
| ДанныеШапки.ЕстьРасхождения КАК ЕстьРасхождения,
| СтатусыДокументовЕГАИС.Статус КАК СтатусОбработки
|ИЗ
| Документ.ТТНВходящаяЕГАИС КАК ДанныеШапки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыДокументовЕГАИС КАК СтатусыДокументовЕГАИС
| ПО СтатусыДокументовЕГАИС.Документ = ДанныеШапки.Ссылка
|ГДЕ
| ДанныеШапки.Ссылка = &Ссылка";
Реквизиты = Запрос.Выполнить().Выбрать();
Реквизиты.Следующий();
Запрос.УстановитьПараметр("Период", Реквизиты.Период);
Запрос.УстановитьПараметр("Ссылка", Реквизиты.Ссылка);
Запрос.УстановитьПараметр("УдалитьСтатусОбработки", Реквизиты.СтатусОбработки);
Запрос.УстановитьПараметр("Грузополучатель", Реквизиты.Грузополучатель);
Запрос.УстановитьПараметр("ДатаРегистрацииДвижений", Реквизиты.ДатаРегистрацииДвижений);
Запрос.УстановитьПараметр("ЕстьРасхождения", Реквизиты.ЕстьРасхождения);
Запрос.УстановитьПараметр("СтатусыДвиженийСвободныйОстаток", СтатусыДвиженийСвободныйОстаток());
Запрос.УстановитьПараметр("СтатусыДвиженийКоличество", СтатусыДвиженийКоличество());
КонецПроцедуры
Функция ТекстЗапросаТаблицаОстаткиАлкогольнойПродукцииЕГАИС(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ОстаткиАлкогольнойПродукцииЕГАИС";
Если НЕ ИнтеграцияИС.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
Если НЕ ИнтеграцияЕГАИС.ЕстьТаблицаЗапроса("ВТТовары", ТекстыЗапроса) Тогда
ТекстЗапросаВТТовары(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК ВидДвижения,
| &Период КАК Период,
| &Грузополучатель КАК ОрганизацияЕГАИС,
| ТаблицаТовары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| ТаблицаТовары.Справка2 КАК Справка2,
| ВЫБОР КОГДА &ЕстьРасхождения ТОГДА
| ТаблицаТовары.КоличествоФакт
| ИНАЧЕ
| ТаблицаТовары.Количество
| КОНЕЦ КАК СвободныйОстаток,
| 0 КАК Количество,
| ТаблицаТовары.НомерСтроки КАК НомерСтроки
|ИЗ
| ВТТовары КАК ТаблицаТовары
|ГДЕ
| &УдалитьСтатусОбработки В(&СтатусыДвиженийСвободныйОстаток)
| И ВЫБОР КОГДА &ЕстьРасхождения ТОГДА
| ТаблицаТовары.КоличествоФакт
| ИНАЧЕ
| ТаблицаТовары.Количество
| КОНЕЦ <> 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК ВидДвижения,
| &ДатаРегистрацииДвижений КАК ДатаРегистрацииДвижений,
| &Грузополучатель КАК ОрганизацияЕГАИС,
| ТаблицаТовары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| ТаблицаТовары.Справка2 КАК Справка2,
| 0 КАК СвободныйОстаток,
| ВЫБОР КОГДА &ЕстьРасхождения ТОГДА
| ТаблицаТовары.КоличествоФакт
| ИНАЧЕ
| ТаблицаТовары.Количество
| КОНЕЦ КАК Количество,
| ТаблицаТовары.НомерСтроки КАК НомерСтроки
|ИЗ
| ВТТовары КАК ТаблицаТовары
|ГДЕ
| &ДатаРегистрацииДвижений <> ДАТАВРЕМЯ(1,1,1)
| И &УдалитьСтатусОбработки В(&СтатусыДвиженийКоличество)
| И ВЫБОР КОГДА &ЕстьРасхождения ТОГДА
| ТаблицаТовары.КоличествоФакт
| ИНАЧЕ
| ТаблицаТовары.Количество
| КОНЕЦ <> 0
|";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВТТовары(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВТТовары";
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК Ссылка,
| ТаблицаТовары.НомерСтроки КАК НомерСтроки,
| ТаблицаТовары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Серия КАК Серия,
| ТаблицаТовары.Количество КАК Количество,
| ТаблицаТовары.КоличествоФакт КАК КоличествоФакт,
| ТаблицаТовары.Справка2 КАК Справка2
|ПОМЕСТИТЬ ВТТовары
|ИЗ
| Документ.ТТНВходящаяЕГАИС.Товары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.Ссылка = &Ссылка";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция СтатусыДвиженийСвободныйОстаток()
Результат = Новый Массив;
Результат.Добавить(Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.Подтвержден);
Результат.Добавить(Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ПодтвержденСРасхождениями);
Возврат Результат;
КонецФункции
Функция СтатусыДвиженийКоличество()
Результат = Новый Массив;
Результат.Добавить(Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.Подтвержден);
Результат.Добавить(Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ПодтвержденСРасхождениями);
Результат.Добавить(Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуПроведенияКПередаче);
Результат.Добавить(Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуПроведенияПереданВУТМ);
Результат.Добавить(Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуПроведенияОбрабатываетсяЕГАИС);
Результат.Добавить(Перечисления.СтатусыОбработкиТТНВходящейЕГАИС.ЗапросНаОтменуПроведенияОшибка);
Возврат Результат;
КонецФункции
Функция ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ДвиженияСерийТоваров";
Если Не ИнтеграцияИС.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
ТекстЗапроса = "";
ИнтеграцияЕГАИСПереопределяемый.ПриЗаполненииТекстаЗапросаДвижениеСерийТоваров(ТекстЗапроса, Метаданные.Документы.ТТНВходящаяЕГАИС.Имя);
Если ЗначениеЗаполнено(ТекстЗапроса) Тогда
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#Область Серии
Функция ИменаРеквизитовДляЗаполненияПараметровУказанияСерий() Экспорт
Возврат ИнтеграцияИС.ИменаРеквизитовДляЗаполненияПараметровУказанияСерий(Метаданные.Документы.ТТНВходящаяЕГАИС);
КонецФункции
Функция ПараметрыУказанияСерий(Объект) Экспорт
Возврат ИнтеграцияИС.ПараметрыУказанияСерий(Метаданные.Документы.ТТНВходящаяЕГАИС, Объект);
КонецФункции
Функция ТекстЗапросаЗаполненияСтатусовУказанияСерий(ПараметрыУказанияСерий) Экспорт
Возврат ИнтеграцияИС.ТекстЗапросаЗаполненияСтатусовУказанияСерий(Метаданные.Документы.ТТНВходящаяЕГАИС, ПараметрыУказанияСерий);
КонецФункции
#КонецОбласти
#Область ВводНаОсновании
Функция ТекстЗапросаПередачиВРегистры2и3НаОснованииТТНВходящей() Экспорт
ТекстЗапроса = "
|ВЫБРАТЬ
| ТТНВходящая.Ссылка КАК ДокументОснование,
| НЕ ТТНВходящая.Проведен КАК ЕстьОшибкиПроведен,
| ТТНВходящая.Грузополучатель КАК ОрганизацияЕГАИС
|ИЗ
| Документ.ТТНВходящаяЕГАИС КАК ТТНВходящая
|ГДЕ
| ТТНВходящая.Ссылка = &ДокументОснование
|;
|
|
|ВЫБРАТЬ
| ТаблицаДокументы.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ВТОформленныеДокументы
|ИЗ
| Документ.ПередачаВРегистр2ЕГАИС КАК ТаблицаДокументы
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыДокументовЕГАИС КАК СтатусыДокументовЕГАИС
| ПО (СтатусыДокументовЕГАИС.Документ = ТаблицаДокументы.Ссылка)
|ГДЕ
| ТаблицаДокументы.ДокументОснование = &ДокументОснование
| И ТаблицаДокументы.Ссылка <> &ПередачаВРегистр2
| И ТаблицаДокументы.Проведен
| И НЕ СтатусыДокументовЕГАИС.Статус В (&КонечныеСтатусы)
|;
|
|
|ВЫБРАТЬ
| ТабличнаяЧасть.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| ТабличнаяЧасть.Номенклатура КАК Номенклатура,
| ТабличнаяЧасть.Характеристика КАК Характеристика,
| ТабличнаяЧасть.Серия КАК Серия,
| ТабличнаяЧасть.Справка2 КАК Справка2,
| ВЫБОР
| КОГДА ТабличнаяЧасть.Ссылка.ЕстьРасхождения
| ТОГДА ТабличнаяЧасть.КоличествоФакт
| ИНАЧЕ ТабличнаяЧасть.Количество
| КОНЕЦ КАК Количество
|ПОМЕСТИТЬ ВТТовары
|ИЗ
| Документ.ТТНВходящаяЕГАИС.Товары КАК ТабличнаяЧасть
|ГДЕ
| ТабличнаяЧасть.Ссылка = &ДокументОснование
| И ТабличнаяЧасть.Справка2 <> ЗНАЧЕНИЕ(Справочник.Справки2ЕГАИС.ПустаяСсылка)
| И ТабличнаяЧасть.АлкогольнаяПродукция.ВидПродукции.Маркируемый = Ложь
|;
|
|
|"
+
ИнтеграцияЕГАИС.ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС(,,Истина)
+"
|ВЫБРАТЬ
| ТабличнаяЧасть.Номенклатура КАК Номенклатура,
| ТабличнаяЧасть.Характеристика КАК Характеристика,
| ТабличнаяЧасть.Серия КАК Серия,
| &ПустаяУпаковка КАК Упаковка,
| ТабличнаяЧасть.Количество / Коэффициенты.Коэффициент КАК Количество,
| ТабличнаяЧасть.Количество / Коэффициенты.Коэффициент КАК КоличествоУпаковок,
| ТабличнаяЧасть.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| ТабличнаяЧасть.Справка2 КАК Справка2,
| Коэффициенты.ПроверятьОбъемДАЛ И (Коэффициенты.ОбъемДАЛ = 0) КАК ЕстьОшибкиНеупакованнаяПродукция
|ПОМЕСТИТЬ ВТТоварыКОформлению
|ИЗ
| ВТТовары КАК ТабличнаяЧасть
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТКоэффициентыПересчетаВЕдиницыЕГАИС КАК Коэффициенты
| ПО Коэффициенты.Номенклатура = ТабличнаяЧасть.Номенклатура
| И Коэффициенты.Характеристика = ТабличнаяЧасть.Характеристика
| И Коэффициенты.Серия = ТабличнаяЧасть.Серия
| И Коэффициенты.АлкогольнаяПродукция = ТабличнаяЧасть.АлкогольнаяПродукция
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОформленныеТовары.Номенклатура,
| ОформленныеТовары.Характеристика,
| ОформленныеТовары.Серия,
| ОформленныеТовары.Упаковка,
| -ОформленныеТовары.Количество,
| -ОформленныеТовары.КоличествоУпаковок,
| ОформленныеТовары.АлкогольнаяПродукция,
| ОформленныеТовары.Справка2,
| ЛОЖЬ
|ИЗ
| Документ.ПередачаВРегистр2ЕГАИС.Товары КАК ОформленныеТовары
|ГДЕ
| ОформленныеТовары.Ссылка В
| (ВЫБРАТЬ
| Т.Ссылка
| ИЗ
| ВТОформленныеДокументы КАК Т)
|;
|
|
|ВЫБРАТЬ
| ТоварыКОформлению.Номенклатура КАК Номенклатура,
| ТоварыКОформлению.Характеристика КАК Характеристика,
| ТоварыКОформлению.Серия КАК Серия,
| ТоварыКОформлению.Упаковка КАК Упаковка,
| ТоварыКОформлению.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| ТоварыКОформлению.Справка2 КАК Справка2,
| СУММА(ТоварыКОформлению.Количество) КАК Количество,
| СУММА(ТоварыКОформлению.КоличествоУпаковок) КАК КоличествоУпаковок,
| МАКСИМУМ (ТоварыКОформлению.ЕстьОшибкиНеупакованнаяПродукция) КАК ЕстьОшибкиНеупакованнаяПродукция
|ПОМЕСТИТЬ ВТОстатки
|ИЗ
| ВТТоварыКОформлению КАК ТоварыКОформлению
|
|СГРУППИРОВАТЬ ПО
| ТоварыКОформлению.Номенклатура,
| ТоварыКОформлению.Характеристика,
| ТоварыКОформлению.Серия,
| ТоварыКОформлению.Упаковка,
| ТоварыКОформлению.АлкогольнаяПродукция,
| ТоварыКОформлению.Справка2
|
|ИМЕЮЩИЕ
| СУММА(ТоварыКОформлению.Количество) > 0
| ИЛИ МАКСИМУМ (ТоварыКОформлению.ЕстьОшибкиНеупакованнаяПродукция) = ИСТИНА
|;
|
|
|ВЫБРАТЬ
| АкцизныеМарки.АкцизнаяМарка КАК АкцизнаяМарка,
| АкцизныеМарки.Статус КАК Статус,
| АкцизныеМарки.Справка2 КАК Справка2,
| АкцизныеМарки.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| Остатки.Номенклатура КАК Номенклатура,
| Остатки.Характеристика КАК Характеристика,
| Остатки.Серия КАК Серия
|ПОМЕСТИТЬ ВТАкцизныеМарки
|ИЗ
| РегистрСведений.АкцизныеМаркиЕГАИС КАК АкцизныеМарки
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТОстатки КАК Остатки
| ПО Остатки.Справка2 = АкцизныеМарки.Справка2
| И Остатки.АлкогольнаяПродукция = АкцизныеМарки.АлкогольнаяПродукция
|ГДЕ
| АкцизныеМарки.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыАкцизныхМарок.ВНаличии), ЗНАЧЕНИЕ(Перечисление.СтатусыАкцизныхМарок.КПостановкеНаБаланс))
|;
|
|
|ВЫБРАТЬ
| АкцизныеМарки.Справка2 КАК Справка2,
| КОЛИЧЕСТВО(АкцизныеМарки.АкцизнаяМарка) КАК Количество
|ПОМЕСТИТЬ ВТАкцизныеМаркиПоСправкам2
|ИЗ
| ВТАкцизныеМарки КАК АкцизныеМарки
|
|СГРУППИРОВАТЬ ПО
| АкцизныеМарки.Справка2
|;
|
|
|ВЫБРАТЬ
| ТоварыКОформлению.Номенклатура КАК Номенклатура,
| ТоварыКОформлению.Характеристика КАК Характеристика,
| ТоварыКОформлению.Серия КАК Серия,
| ТоварыКОформлению.Упаковка КАК Упаковка,
| ТоварыКОформлению.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| ТоварыКОформлению.Справка2 КАК Справка2,
| ТоварыКОформлению.Количество - ЕСТЬNULL(АкцизныеМарки.Количество, 0) КАК Количество,
| ТоварыКОформлению.КоличествоУпаковок - ЕСТЬNULL(АкцизныеМарки.Количество, 0) КАК КоличествоУпаковок,
| ТоварыКОформлению.ЕстьОшибкиНеупакованнаяПродукция КАК ЕстьОшибкиНеупакованнаяПродукция
|ИЗ
| ВТОстатки КАК ТоварыКОформлению
| ЛЕВОЕ СОЕДИНЕНИЕ ВТАкцизныеМаркиПоСправкам2 КАК АкцизныеМарки
| ПО ТоварыКОформлению.Справка2 = АкцизныеМарки.Справка2
|ГДЕ
| ТоварыКОформлению.Количество - ЕСТЬNULL(АкцизныеМарки.Количество, 0) > 0
| ИЛИ ТоварыКОформлению.ЕстьОшибкиНеупакованнаяПродукция = ИСТИНА
|;
|
|
|ВЫБРАТЬ
| АкцизныеМарки.АкцизнаяМарка КАК АкцизнаяМарка,
| АкцизныеМарки.Справка2 КАК Справка2,
| АкцизныеМарки.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| АкцизныеМарки.Номенклатура КАК Номенклатура,
| АкцизныеМарки.Характеристика КАК Характеристика,
| АкцизныеМарки.Серия КАК Серия,
| 1 КАК Количество
|ИЗ
| ВТАкцизныеМарки КАК АкцизныеМарки
|ГДЕ
| АкцизныеМарки.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыАкцизныхМарок.КПостановкеНаБаланс)
|";
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#Область Отчеты
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
ИнтеграцияИСПереопределяемый.ДобавитьКомандуСтруктураПодчиненности(КомандыОтчетов);
ИнтеграцияИСПереопределяемый.ДобавитьКомандуДвиженияДокумента(КомандыОтчетов);
КомандаОтчет = Отчеты.АнализРасхожденийПриПоступленииАлкогольнойПродукции.ДобавитьКомандуОтчета(КомандыОтчетов);
Если КомандаОтчет <> Неопределено Тогда
КомандаОтчет.Важность = "Обычное";
КомандаОтчет.Порядок = 1;
КонецЕсли;
КомандаОтчет = Отчеты.АнализРасхожденийПриДвиженииАлкогольнойПродукции.ДобавитьКомандуОтчета(КомандыОтчетов);
Если КомандаОтчет <> Неопределено Тогда
КомандаОтчет.Важность = "Обычное";
КомандаОтчет.Порядок = 2;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Печать
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "ИнтеграцияЕГАИСКлиент.ПечатьИсторияСправок2";
КомандаПечати.МенеджерПечати = "";
КомандаПечати.Идентификатор = "ИсторияСправок2";
КомандаПечати.Представление = НСтр("ru = 'История справок 2'");
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Возврат;
КонецПроцедуры
#КонецОбласти
#Область ОбновлениеИнформационнойБазы
Функция АдаптированныйТекстЗапросаДвиженийПоРегистру(ИмяРегистра) Экспорт
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений();
ТекстыЗапросаВременныхТаблиц = Новый Массив;
ПолноеИмяДокумента = "Документ.ТТНВходящаяЕГАИС";
Если ИмяРегистра = "ОстаткиАлкогольнойПродукцииЕГАИС" Тогда
ТекстЗапроса = ТекстЗапросаТаблицаОстаткиАлкогольнойПродукцииЕГАИС(Запрос, ТекстыЗапроса, ИмяРегистра);
ТекстыЗапросаВременныхТаблиц.Добавить(Новый Структура("Ключ, Значение", "ВТТовары", ТекстЗапросаВТТовары(Запрос, ТекстыЗапроса)));
СинонимТаблицыДокумента = "ТаблицаТовары";
Иначе
ТекстИсключения = НСтр("ru = 'В документе %ПолноеИмяДокумента% не реализована адаптация текста запроса формирования движений по регистру %ИмяРегистра%.'");
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ПолноеИмяДокумента%", ПолноеИмяДокумента);
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ИмяРегистра%", ИмяРегистра);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
ПереопределениеРасчетаПараметров = Новый Структура;
Результат = ОбновлениеИнформационнойБазыЕГАИС.РезультатАдаптацииЗапроса();
Результат.ЗначенияПараметров.Вставить("СтатусыДвиженийСвободныйОстаток", СтатусыДвиженийСвободныйОстаток());
Результат.ЗначенияПараметров.Вставить("СтатусыДвиженийКоличество", СтатусыДвиженийКоличество());
Результат.ТекстЗапроса = ОбновлениеИнформационнойБазыЕГАИС.АдаптироватьЗапросМеханизмаПроведения(
ТекстЗапроса,
ПолноеИмяДокумента,
СинонимТаблицыДокумента,
ПереопределениеРасчетаПараметров,
ТекстыЗапросаВременныхТаблиц);
Возврат Результат;
КонецФункции
Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТабличнаяЧасть.Ссылка КАК Ссылка
|ИЗ
| Документ.ТТНВходящаяЕГАИС.Товары КАК ТабличнаяЧасть
|ГДЕ
| ТабличнаяЧасть.Номенклатура = &ПустаяНоменклатура
|");
Запрос.УстановитьПараметр("ПустаяНоменклатура", ОбщегоНазначенияИС.ПустоеЗначениеОпределяемогоТипа("Номенклатура"));
ДокументыКОбработке = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, ДокументыКОбработке);
КонецПроцедуры
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
Если ОбновлениеИнформационнойБазы.ЕстьЗаблокированныеПредыдущимиОчередямиДанные(Параметры.Очередь, "РегистрСведений.СоответствиеНоменклатурыЕГАИС") Тогда
Параметры.ОбработкаЗавершена = Ложь;
Возврат;
КонецЕсли;
ПолноеИмяОбъекта = "Документ.ТТНВходящаяЕГАИС";
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Результат = ОбновлениеИнформационнойБазы.СоздатьВременнуюТаблицуСсылокДляОбработки(Параметры.Очередь, ПолноеИмяОбъекта, МенеджерВременныхТаблиц);
Если Не Результат.ЕстьДанныеДляОбработки Тогда
Параметры.ОбработкаЗавершена = Истина;
Возврат;
КонецЕсли;
Если Не Результат.ЕстьЗаписиВоВременнойТаблице Тогда
Параметры.ОбработкаЗавершена = Ложь;
Возврат;
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ДанныеДляОбработки.Ссылка КАК Ссылка,
| Товары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| Товары.НомерСтроки КАК НомерСтроки
|ПОМЕСТИТЬ ВТАлкогольнаяПродукция
|ИЗ
| ВтСсылкиДляОбработки КАК ДанныеДляОбработки
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ТТНВходящаяЕГАИС.Товары КАК Товары
| ПО ДанныеДляОбработки.Ссылка = Товары.Ссылка
|ГДЕ
| Товары.Номенклатура = &ПустаяНоменклатура
|;
|
|
|ВЫБРАТЬ
| СоответствиеНоменклатурыЕГАИС.Номенклатура КАК Номенклатура,
| СоответствиеНоменклатурыЕГАИС.Характеристика КАК Характеристика,
| ВТАлкогольнаяПродукция.АлкогольнаяПродукция КАК АлкогольнаяПродукция
|ПОМЕСТИТЬ ВтСопоставленнаяНоменклатура
|ИЗ
| ВТАлкогольнаяПродукция КАК ВТАлкогольнаяПродукция
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеНоменклатурыЕГАИС КАК СоответствиеНоменклатурыЕГАИС
| ПО (СоответствиеНоменклатурыЕГАИС.АлкогольнаяПродукция = ВТАлкогольнаяПродукция.АлкогольнаяПродукция)
|;
|
|
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВтСопоставленнаяНоменклатура.Номенклатура) КАК КоличествоНоменклатура,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВтСопоставленнаяНоменклатура.Характеристика) КАК КоличествоХарактеристика,
| ВтСопоставленнаяНоменклатура.АлкогольнаяПродукция КАК АлкогольнаяПродукция
|ПОМЕСТИТЬ ВтКоличествоСопоставлено
|ИЗ
| ВтСопоставленнаяНоменклатура КАК ВтСопоставленнаяНоменклатура
|
|СГРУППИРОВАТЬ ПО
| ВтСопоставленнаяНоменклатура.АлкогольнаяПродукция
|;
|
|
|ВЫБРАТЬ
| ВтКоличествоСопоставлено.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| ВтСопоставленнаяНоменклатура.Номенклатура КАК Номенклатура,
| ВтСопоставленнаяНоменклатура.Характеристика КАК Характеристика,
| ЕСТЬNULL(ВтКоличествоСопоставлено.КоличествоНоменклатура, 0) КАК КоличествоНоменклатура,
| ЕСТЬNULL(ВтКоличествоСопоставлено.КоличествоХарактеристика, 0) КАК КоличествоХарактеристика
|ПОМЕСТИТЬ ВТСопоставлено
|ИЗ
| ВтСопоставленнаяНоменклатура КАК ВтСопоставленнаяНоменклатура
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтКоличествоСопоставлено КАК ВтКоличествоСопоставлено
| ПО ВтСопоставленнаяНоменклатура.АлкогольнаяПродукция = ВтКоличествоСопоставлено.АлкогольнаяПродукция
|;
|
|
|ВЫБРАТЬ
| ВТАлкогольнаяПродукция.Ссылка КАК Ссылка,
| ВТАлкогольнаяПродукция.Ссылка.ВерсияДанных КАК ВерсияДанных,
| ВТАлкогольнаяПродукция.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| ВТАлкогольнаяПродукция.НомерСтроки КАК НомерСтроки,
| ВТСопоставлено.Номенклатура КАК Номенклатура,
| ВТСопоставлено.Характеристика КАК Характеристика
|ИЗ
| ВТАлкогольнаяПродукция КАК ВТАлкогольнаяПродукция
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСопоставлено КАК ВТСопоставлено
| ПО ВТАлкогольнаяПродукция.АлкогольнаяПродукция = ВТСопоставлено.АлкогольнаяПродукция
| И (ВТСопоставлено.КоличествоНоменклатура = 1)
| И (ВТСопоставлено.КоличествоХарактеристика < 2)
|ИТОГИ ПО
| ВТАлкогольнаяПродукция.Ссылка
|";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВтСсылкиДляОбработки", Результат.ИмяВременнойТаблицы);
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ПустаяНоменклатура", ОбщегоНазначенияИС.ПустоеЗначениеОпределяемогоТипа("Номенклатура"));
ВыборкаПоДокументам = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоДокументам.Следующий() Цикл
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяОбъекта);
ЭлементБлокировки.УстановитьЗначение("Ссылка", ВыборкаПоДокументам.Ссылка);
Блокировка.Заблокировать();
ДокументОбъект = ВыборкаПоДокументам.Ссылка.ПолучитьОбъект();
Если ДокументОбъект = Неопределено Тогда
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ВыборкаПоДокументам.Ссылка);
ЗафиксироватьТранзакцию();
Продолжить;
КонецЕсли;
Если ДокументОбъект.ВерсияДанных <> ВыборкаПоДокументам.ВерсияДанных Тогда
ОтменитьТранзакцию();
Продолжить;
КонецЕсли;
ВыборкаПоТоварам = ВыборкаПоДокументам.Выбрать();
НоменклатураСопоставлена = ЛОЖЬ;
Пока ВыборкаПоТоварам.Следующий() Цикл
Если ЗначениеЗаполнено(ВыборкаПоТоварам.Номенклатура) Тогда
СтрокаТЧ = ДокументОбъект.Товары[ВыборкаПоТоварам.НомерСтроки - 1];
СтрокаТЧ.Номенклатура = ВыборкаПоТоварам.Номенклатура;
СтрокаТЧ.Характеристика = ВыборкаПоТоварам.Характеристика;
НоменклатураСопоставлена = ИСТИНА;
КонецЕсли;
КонецЦикла;
Если НоменклатураСопоставлена Тогда
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ДокументОбъект);
Иначе
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ДокументОбъект.Ссылка, , Параметры.Очередь);
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ТекстСообщения = НСтр("ru = 'Не удалось обработать документ: %Ссылка% по причине: %Причина%'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", ВыборкаПоДокументам.Ссылка);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(
ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Ошибка,
Метаданные.Документы.ТТНВходящаяЕГАИС,
ВыборкаПоДокументам.Ссылка,
ТекстСообщения);
Продолжить;
КонецПопытки;
КонецЦикла;
Параметры.ОбработкаЗавершена = Не ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки(Параметры.Очередь, ПолноеИмяОбъекта);
КонецПроцедуры
#КонецОбласти
#Область Прочее
Процедура ПрименитьРезультатСопоставленияДляШтрихкодовУпаковок(ДокументОбъект) Экспорт
ВложенныеШтрихкоды = ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоДокументу(ДокументОбъект.Ссылка);
УстановитьПривилегированныйРежим(Истина);
Для Каждого СтрокаТЧ Из ВложенныеШтрихкоды.МаркированныеТовары Цикл
Если ЗначениеЗаполнено(СтрокаТЧ.Справка2) Тогда
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Справка2", СтрокаТЧ.Справка2);
НайденныеСтроки = ДокументОбъект.Товары.НайтиСтроки(ПараметрыОтбора);
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
Если НайденнаяСтрока.Номенклатура <> СтрокаТЧ.Номенклатура
Или НайденнаяСтрока.Характеристика <> СтрокаТЧ.Характеристика
Или НайденнаяСтрока.Серия <> СтрокаТЧ.Серия Тогда
ШтрихкодУпаковкиОбъект = СтрокаТЧ.ШтрихкодУпаковки.ПолучитьОбъект();
ШтрихкодУпаковкиОбъект.Номенклатура = НайденнаяСтрока.Номенклатура;
ШтрихкодУпаковкиОбъект.Характеристика = НайденнаяСтрока.Характеристика;
ШтрихкодУпаковкиОбъект.Серия = НайденнаяСтрока.Серия;
ШтрихкодУпаковкиОбъект.Записать();
КонецЕсли;
Прервать;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ДанныеДокументаТТНv3(ДокументСсылка)
ТекстСообщенияXML = ПротоколОбменаИС.ТекстСообщенияXMLИзПротокола(ВходящееСообщение(ДокументСсылка));
ТекстОшибки = "";
ОбъектXDTO = Неопределено;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ТекстСообщенияXML);
Попытка
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, РаботаСXMLИС.ОбъектXDTOПоИмениСвойства(
РаботаСXMLЕГАИС.КорневоеПространствоИмен(), "Documents").Тип());
Исключение
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
Попытка
ОбъектXDTO = РаботаСXMLЕГАИС.ПреобразоватьПроизвольныйОбъектXDTOВОбъектXDTO(
РаботаСXMLИС.ПроизвольныйОбъектXDTOПоТекстуСообщенияXML(ТекстСообщенияXML),
РаботаСXMLИС.ОбъектXDTOПоИмениСвойства(РаботаСXMLЕГАИС.КорневоеПространствоИмен(), "Documents", Неопределено));
Исключение
ТекстОшибки = ПодробноеПредставлениеОшибки;
КонецПопытки;
КонецПопытки;
ДанныеДокументаТТН = Неопределено;
Если ОбъектXDTO <> Неопределено Тогда
ФорматОбмена = Неопределено;
ТипЕГАИС = Неопределено;
ДанныеДокументаТТН = Неопределено;
Если ОбъектXDTO <> Неопределено Тогда
Попытка
ДокументыПоТипамЕГАИС = РаботаСXMLИС.ОбъектXDTOВСтруктуру(ОбъектXDTO.Document);
Для Каждого КлючИЗначение Из ДокументыПоТипамЕГАИС Цикл
Если КлючИЗначение.Значение <> Неопределено Тогда
ТипЕГАИС = КлючИЗначение.Ключ;
ДанныеДокументаТТН = ДокументыПоТипамЕГАИС[ТипЕГАИС];
ВидДокументаИФорматОбмена = Перечисления.ВидыДокументовЕГАИС.ДанныеДокументаПоТипуЕГАИС(
ТипЕГАИС, Перечисления.ВидыДокументовЕГАИС.ТаблицаСоответствияДокументовТипамЕГАИС());
ФорматОбмена = ВидДокументаИФорматОбмена.ФорматОбмена;
Прервать;
КонецЕсли;
КонецЦикла;
Исключение
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ТекстОшибки) Или ДанныеДокументаТТН = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ВозвращаемоеЗначение = Новый Структура;
ВозвращаемоеЗначение.Вставить("Данные", ДанныеДокументаТТН);
ВозвращаемоеЗначение.Вставить("ФорматОбмена", ФорматОбмена);
Возврат ВозвращаемоеЗначение;
КонецФункции
Процедура ДобавитьУпаковкиВДерево(ДеревоУпаковок, ДеревоУпаковокСправки2, ШтрихкодыУпаковкиСправки2)
Для Каждого ДанныеУпаковки Из ДеревоУпаковокСправки2 Цикл
Если ДанныеУпаковки.boxnum <> Неопределено Тогда
Для Каждого Штрихкод Из ДанныеУпаковки.boxnum Цикл
СтрокаДерева = ДеревоУпаковок.Строки.Найти(Штрихкод);
Если СтрокаДерева = Неопределено Тогда
СтрокаДерева = ДеревоУпаковок.Строки.Добавить();
СтрокаДерева.Штрихкод = Штрихкод;
Если ЗначениеЗаполнено(Штрихкод) Тогда
СтрокаДерева.ТипУпаковки = Перечисления.ТипыУпаковок.МонотоварнаяУпаковка;
Иначе
СтрокаДерева.ТипУпаковки = Перечисления.ПрочиеЗоныПересчетаАлкогольнойПродукции.БутылкиБезКоробки;
КонецЕсли;
КонецЕсли;
ДанныеШтрихкодаУпаковки = ШтрихкодыУпаковкиСправки2[Штрихкод];
Если ДанныеШтрихкодаУпаковки <> Неопределено Тогда
Для Каждого КодАкцизнойМарки Из ДанныеШтрихкодаУпаковки.АкцизныеМарки Цикл
СтрокаАкцизнойМарки = СтрокаДерева.Строки.Добавить();
СтрокаАкцизнойМарки.Штрихкод = КодАкцизнойМарки;
СтрокаАкцизнойМарки.ТипУпаковки = Перечисления.ТипыУпаковок.МаркированныйТовар;
СтрокаАкцизнойМарки.АлкогольнаяПродукция = ДанныеШтрихкодаУпаковки.АлкогольнаяПродукция;
СтрокаАкцизнойМарки.Справка2 = ДанныеШтрихкодаУпаковки.Справка2;
СтрокаАкцизнойМарки.Номенклатура = ДанныеШтрихкодаУпаковки.Номенклатура;
СтрокаАкцизнойМарки.Характеристика = ДанныеШтрихкодаУпаковки.Характеристика;
СтрокаАкцизнойМарки.Серия = ДанныеШтрихкодаУпаковки.Серия;
КонецЦикла;
Если Не ЗначениеЗаполнено(СтрокаДерева.АлкогольнаяПродукция) Тогда
Если СтрокаДерева.ТипУпаковки = Перечисления.ТипыУпаковок.МонотоварнаяУпаковка Тогда
СтрокаДерева.АлкогольнаяПродукция = ДанныеШтрихкодаУпаковки.АлкогольнаяПродукция;
КонецЕсли;
ИначеЕсли СтрокаДерева.АлкогольнаяПродукция <> ДанныеШтрихкодаУпаковки.АлкогольнаяПродукция Тогда
СтрокаДерева.АлкогольнаяПродукция = Неопределено;
СтрокаДерева.ТипУпаковки = Перечисления.ТипыУпаковок.МультитоварнаяУпаковка;
КонецЕсли;
ШтрихкодыУпаковкиСправки2.Удалить(Штрихкод);
КонецЕсли;
Если ДанныеУпаковки.bl <> Неопределено Тогда
ДобавитьУпаковкиВДерево(СтрокаДерева, ДанныеУпаковки.bl, ШтрихкодыУпаковкиСправки2);
КонецЕсли;
КонецЦикла;
Иначе
Если ДанныеУпаковки.bl <> Неопределено Тогда
ДобавитьУпаковкиВДерево(ДеревоУпаковок, ДанныеУпаковки.bl, ШтрихкодыУпаковкиСправки2);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ФорматОбмена(Шапка)
ФорматОбмена = ОбменДаннымиЕГАИСКлиентСервер.ФорматОбмена();
Если Шапка.ФорматОбменаГрузоотправителя = Перечисления.ФорматыОбменаЕГАИС.V1
Или Шапка.ФорматОбменаГрузополучателя = Перечисления.ФорматыОбменаЕГАИС.V1 Тогда
ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V1;
ИначеЕсли ЗначениеЗаполнено(Шапка.ФорматОбмена) Тогда
ФорматОбмена = Шапка.ФорматОбмена;
КонецЕсли;
Возврат ФорматОбмена;
КонецФункции
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
Возврат;
КонецПроцедуры
#Область ФормированиеГиперссылкиВЖурналеЗакупок
Функция СформироватьГиперссылкуСмТакжеВРаботе(Параметры) Экспорт
Гиперссылка = Неопределено;
ИнтеграцияЕГАИСПереопределяемый.СформироватьГиперссылкуСмТакжеВРаботе(
Параметры,
Метаданные.Документы.ТТНВходящаяЕГАИС,
Гиперссылка);
Возврат Гиперссылка;
КонецФункции
#КонецОбласти
Функция ТекстЗапросаПродукцииДляПроверкиЦенВСпискеДокументов() Экспорт
ТекстЗапроса = "ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Серия КАК Серия,
| Товары.Цена КАК Цена,
| Товары.ОрганизацияЕГАИС КАК ОрганизацияЕГАИС,
| Товары.ИННКонтрагента КАК ИННКонтрагента,
| Товары.КППКонтрагента КАК КППКонтрагента,
| Товары.КоэффициентЕГАИС КАК КоэффициентЕГАИС
|ИЗ
| (ВЫБРАТЬ
| ДокументТовары.Номенклатура КАК Номенклатура,
| ДокументТовары.Характеристика КАК Характеристика,
| ДокументТовары.Серия КАК Серия,
| ДокументТовары.Цена КАК Цена,
| ДокументТовары.Ссылка.Грузоотправитель КАК ОрганизацияЕГАИС,
| ДокументТовары.Ссылка.Грузоотправитель.ИНН КАК ИННКонтрагента,
| ДокументТовары.Ссылка.Грузоотправитель.КПП КАК КППКонтрагента,
| 1 КАК КоэффициентЕГАИС
| ИЗ
| Документ.ТТНВходящаяЕГАИС.Товары КАК ДокументТовары
| ГДЕ
| ДокументТовары.Ссылка В(&СписокДокументов)
| И ДокументТовары.Ссылка.Грузоотправитель.ТипОрганизации В(&ТипыОрганизаций)
| И ДокументТовары.КоличествоФакт <> 0) КАК Товары
|
|СГРУППИРОВАТЬ ПО
| Товары.Характеристика,
| Товары.КППКонтрагента,
| Товары.ОрганизацияЕГАИС,
| Товары.ИННКонтрагента,
| Товары.Серия,
| Товары.Номенклатура,
| Товары.Цена,
| Товары.КоэффициентЕГАИС";
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецЕсли