#Область ОбработчикиСобытий
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
ИнтеграцияЕГАИСВызовСервера.ПриПолученииФормыДокумента(
"АктПостановкиНаБалансЕГАИС",
ВидФормы,
Параметры,
ВыбраннаяФорма,
ДополнительнаяИнформация,
СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область ДействияПриОбменеЕГАИС
Функция СтатусПослеПодготовкиКПередачеДанных(ДокументСсылка, Операция) Экспорт
Если Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1
Или Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2
Или Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыКПередаче(
ДокументСсылка,
Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.КПередаче);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияАктаПостановкиНаБаланс Тогда
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыКПередаче(
ДокументСсылка,
Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ЗапросНаОтменуПроведенияКПередаче);
Иначе
ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
КонецЕсли;
Возврат ПараметрыОбновления;
КонецФункции
Функция СтатусПослеПередачиДанных(ДокументСсылка, Операция, СтатусОбработки) Экспорт
Если СтатусОбработки = Неопределено Тогда
СтатусОбработки = Перечисления.СтатусыОбработкиСообщенийЕГАИС.ПереданоВУТМ;
КонецЕсли;
Если Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1
Или Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2
Или Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
СтатусыБазовыйПроцесс = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыБазовыйПроцесс.Принят = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ПереданВУТМ;
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПолученЕГАИС);
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПроведенЕГАИС);
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеУведомленияОРегистрацииДвижения);
СтатусыБазовыйПроцесс.Ошибка = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ОшибкаПередачи;
СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПередайтеДанные);
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусы(ДокументСсылка, СтатусОбработки, СтатусыБазовыйПроцесс);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияАктаПостановкиНаБаланс Тогда
СтатусыБазовыйПроцесс = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыБазовыйПроцесс.Принят = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ЗапросНаОтменуПроведенияПереданВУТМ;
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПолученЕГАИС);
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПроведенЕГАИС);
СтатусыБазовыйПроцесс.Ошибка = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ЗапросНаОтменуПроведенияОшибка;
СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОтменитеОперацию);
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусы(ДокументСсылка, СтатусОбработки, СтатусыБазовыйПроцесс);
Иначе
ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
КонецЕсли;
Возврат ПараметрыОбновления;
КонецФункции
Функция СтатусПослеПолученияДанных(ДокументСсылка, Операция, ДополнительныеПараметры = Неопределено) Экспорт
ВидДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументСсылка, "ВидДокумента");
СтатусыБазовыйПроцесс = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыБазовыйПроцесс.Принят = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ПроведенЕГАИС;
СтатусыБазовыйПроцесс.Обрабатывается = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ОбрабатываетсяЕГАИС;
СтатусыБазовыйПроцесс.ОшибкаПроведения = Неопределено;
СтатусыБазовыйПроцесс.Ошибка = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ОшибкаПередачи;
СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПередайтеДанные);
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.НеТребуется);
Если ВидДокумента = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1 Тогда
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
КонецЕсли;
СтатусыБазовыйПроцесс.УведомлениеОРегистрацииДвижения = (ВидДокумента = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1);
СтатусыЗапросНаОтменуПроведения = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыЗапросНаОтменуПроведения.Принят = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.Отменен;
СтатусыЗапросНаОтменуПроведения.Обрабатывается = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ЗапросНаОтменуПроведенияОбрабатываетсяЕГАИС;
СтатусыЗапросНаОтменуПроведения.ОтменаПроведения = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.Отменен;
СтатусыЗапросНаОтменуПроведения.ОшибкаПроведения = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ЗапросНаОтменуПроведенияОшибка;
СтатусыЗапросНаОтменуПроведения.Ошибка = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ЗапросНаОтменуПроведенияОшибка;
СтатусыЗапросНаОтменуПроведения.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
СтатусыЗапросНаОтменуПроведения.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОтменитеОперацию);
СтатусыЗапросНаОтменуПроведения.УведомлениеОРегистрацииДвижения = Ложь;
ВыполнитьРасчетТекущегоСостояния = Истина;
Если ДополнительныеПараметры <> Неопределено
И ДополнительныеПараметры.Свойство("ТекущееСостояние")
И ДополнительныеПараметры.ТекущееСостояние <> Неопределено Тогда
ВыполнитьРасчетТекущегоСостояния = ДополнительныеПараметры.ТекущееСостояние;
КонецЕсли;
Если Операция = Перечисления.ВидыДокументовЕГАИС.УведомлениеОРегистрацииДвиженияАктаПостановкиНаБаланс Тогда
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыПриПолученииКвитанции(
ДокументСсылка,
"УведомлениеОРегистрацииДвижения", Перечисления.СтатусыОбработкиСообщенийЕГАИС.ПринятИзЕГАИС,
СтатусыБазовыйПроцесс, ВыполнитьРасчетТекущегоСостояния);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.КвитанцияПолученЕГАИС Тогда
Статусы = Неопределено;
Если ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1
Или ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2
Или ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
Статусы = СтатусыБазовыйПроцесс;
ИначеЕсли ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияАктаПостановкиНаБаланс Тогда
Статусы = СтатусыЗапросНаОтменуПроведения;
Иначе
ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
КонецЕсли;
Если Статусы <> Неопределено Тогда
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыПриПолученииКвитанции(
ДокументСсылка,
"КвитанцияПолученЕГАИС", ДополнительныеПараметры.СтатусОбработки,
Статусы, ВыполнитьРасчетТекущегоСостояния);
КонецЕсли;
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.КвитанцияПроведенЕГАИС Тогда
Статусы = Неопределено;
Если ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1
Или ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2
Или ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
Статусы = СтатусыБазовыйПроцесс;
ИначеЕсли ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияАктаПостановкиНаБаланс Тогда
Статусы = СтатусыЗапросНаОтменуПроведения;
Иначе
ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
КонецЕсли;
Если Статусы <> Неопределено Тогда
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыПриПолученииКвитанции(
ДокументСсылка,
"КвитанцияПроведенЕГАИС", ДополнительныеПараметры.СтатусОбработки,
Статусы, ВыполнитьРасчетТекущегоСостояния);
КонецЕсли;
Иначе
ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
КонецЕсли;
Возврат ПараметрыОбновления;
КонецФункции
Функция ОбновитьСтатусПослеПодготовкиКПередачеДанных(ДокументСсылка, Операция, ДополнительныеПараметры = Неопределено) Экспорт
ПараметрыОбновления = СтатусПослеПодготовкиКПередачеДанных(ДокументСсылка, Операция);
Если ПараметрыОбновления = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
НовыйСтатусПослеОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.ОбновитьСтатус(
ДокументСсылка,
ПараметрыОбновления, ДополнительныеПараметры);
Возврат НовыйСтатусПослеОбновления;
КонецФункции
Функция ОбновитьСтатусПослеПередачиДанных(ДокументСсылка, Операция, СтатусОбработки, ДополнительныеПараметры = Неопределено) Экспорт
ПараметрыОбновления = СтатусПослеПередачиДанных(ДокументСсылка, Операция, СтатусОбработки);
Если ПараметрыОбновления = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
НовыйСтатусПослеОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.ОбновитьСтатус(
ДокументСсылка,
ПараметрыОбновления, ДополнительныеПараметры);
Возврат НовыйСтатусПослеОбновления;
КонецФункции
Функция ОбновитьСтатусПослеПолученияДанных(ДокументСсылка, Операция, ДополнительныеПараметры = Неопределено) Экспорт
ПараметрыОбновления = СтатусПослеПолученияДанных(ДокументСсылка, Операция, ДополнительныеПараметры);
Если ПараметрыОбновления = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
НовыйСтатусПослеОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.ОбновитьСтатус(
ДокументСсылка,
ПараметрыОбновления, ДополнительныеПараметры);
Возврат НовыйСтатусПослеОбновления;
КонецФункции
Функция ОбновитьСтатус(ДокументСсылка, ПараметрыОбновления, ДополнительныеПараметры) Экспорт
НовыйСтатусПослеОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.ОбновитьСтатус(
ДокументСсылка,
ПараметрыОбновления, ДополнительныеПараметры);
Возврат НовыйСтатусПослеОбновления;
КонецФункции
Функция ПоследовательностьОпераций(ДокументСсылка) Экспорт
Операция = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументСсылка, "ВидДокумента");
Таблица = ОбменДаннымиЕГАИС.ПустаяТаблицаПоследовательностьОпераций();
Исходящий = Перечисления.ТипыЗапросовИС.Исходящий;
Входящий = Перечисления.ТипыЗапросовИС.Входящий;
Если Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1 Тогда
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Исходящий, Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1, ДокументСсылка);
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Входящий, Перечисления.ВидыДокументовЕГАИС.УведомлениеОРегистрацииДвиженияАктаПостановкиНаБаланс);
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Исходящий, Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияАктаПостановкиНаБаланс, ДокументСсылка);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2 Тогда
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Исходящий, Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2, ДокументСсылка);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Исходящий, Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3, ДокументСсылка);
КонецЕсли;
Возврат Таблица;
КонецФункции
Процедура ПриИзмененииСтатусаДокумента(ДокументСсылка, ПредыдущийСтатус, НовыйСтатус, ПараметрыОбновленияСтатуса) Экспорт
СтатусыДвижений = СтатусыДвижений();
ДобавитьДвижения = ИнтеграцияЕГАИС.СтатусТребуетДобавленияДвижений(СтатусыДвижений, ПредыдущийСтатус, НовыйСтатус);
УдалитьДвижения = ИнтеграцияЕГАИС.СтатусТребуетУдаленияДвижений(СтатусыДвижений, ПредыдущийСтатус, НовыйСтатус);
Если ПараметрыОбновленияСтатуса.ОбновлятьДвижения
И (ДобавитьДвижения Или УдалитьДвижения) Тогда
ИмяРегистра = "ОстаткиАлкогольнойПродукцииЕГАИС";
НаборЗаписей = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);
ДополнительныеСвойстваДляПроведения = Новый Структура;
ИнтеграцияИС.ИнициализироватьДополнительныеСвойстваДляПроведения(ДокументСсылка, ДополнительныеСвойстваДляПроведения);
ИнициализироватьДанныеДокумента(ДокументСсылка, ДополнительныеСвойстваДляПроведения, ИмяРегистра);
НаборЗаписей.Загрузить(ДополнительныеСвойстваДляПроведения.ТаблицыДляДвижений["Таблица" + ИмяРегистра]);
НаборЗаписей.Записать();
КонецЕсли;
Если ДобавитьДвижения Тогда
Если ПараметрыОбновленияСтатуса.ДокументОбъект = Неопределено Тогда
Товары = ИнтеграцияЕГАИС.Справки2ПоДокументу(ДокументСсылка);
Иначе
Товары = ПараметрыОбновленияСтатуса.ДокументОбъект.Товары;
КонецЕсли;
ШтрихкодыУпаковок = ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоДокументу(ДокументСсылка);
Для Каждого СтрокаТЧ Из ШтрихкодыУпаковок.МаркированныеТовары Цикл
Если ЗначениеЗаполнено(СтрокаТЧ.Справка2)
И СтрокаТЧ.Статус = Перечисления.СтатусыАкцизныхМарок.ОшибкаЧтенияСтатуса Тогда
АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЧтенияСтатуса(СтрокаТЧ.ШтрихкодУпаковки);
Продолжить;
КонецЕсли;
СтрокаТовара = Неопределено;
ДанныеЗаписиСтатуса = РегистрыСведений.АкцизныеМаркиЕГАИС.ПоляЗаписиСтатусаУпаковки();
ДанныеЗаписиСтатуса.ОрганизацияЕГАИС = СтрокаТЧ.ОрганизацияЕГАИС;
ДанныеЗаписиСтатуса.АкцизнаяМарка = СтрокаТЧ.ШтрихкодУпаковки;
ДанныеЗаписиСтатуса.Статус = Перечисления.СтатусыАкцизныхМарок.ВНаличии;
Если ЗначениеЗаполнено(СтрокаТЧ.Справка2) Тогда
ДанныеЗаписиСтатуса.Справка2 = СтрокаТЧ.Справка2;
Иначе
Если СтрокаТовара = Неопределено Тогда
СтрокаТовара = Товары.Найти(СтрокаТЧ.ИдентификаторСтроки);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТовара) Тогда
ДанныеЗаписиСтатуса.Справка2 = СтрокаТовара.Справка2;
Иначе
АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЗаполненияСправки2(СтрокаТЧ.ШтрихкодУпаковки);
Продолжить;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТЧ.АлкогольнаяПродукция) Тогда
ДанныеЗаписиСтатуса.АлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
Иначе
Если СтрокаТовара = Неопределено Тогда
СтрокаТовара = Товары.Найти(СтрокаТЧ.ИдентификаторСтроки);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТовара) Тогда
ДанныеЗаписиСтатуса.АлкогольнаяПродукция = СтрокаТовара.АлкогольнаяПродукция;
Иначе
АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЗаполненияСправки2(СтрокаТЧ.ШтрихкодУпаковки);
Продолжить;
КонецЕсли;
КонецЕсли;
ДанныеЗаписиСтатуса.Основание = ДокументСсылка;
РегистрыСведений.АкцизныеМаркиЕГАИС.ВыполнитьЗаписьВРегистр(ДанныеЗаписиСтатуса);
КонецЦикла;
КонецЕсли;
Если УдалитьДвижения Тогда
Если ПараметрыОбновленияСтатуса.ДокументОбъект = Неопределено Тогда
Товары = ИнтеграцияЕГАИС.Справки2ПоДокументу(ДокументСсылка);
Иначе
Товары = ПараметрыОбновленияСтатуса.ДокументОбъект.Товары;
КонецЕсли;
ШтрихкодыУпаковок = ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоДокументу(ДокументСсылка);
Для Каждого СтрокаТЧ Из ШтрихкодыУпаковок.МаркированныеТовары Цикл
Если ЗначениеЗаполнено(СтрокаТЧ.Справка2)
И СтрокаТЧ.Статус = Перечисления.СтатусыАкцизныхМарок.ОшибкаЧтенияСтатуса Тогда
АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЧтенияСтатуса(СтрокаТЧ.ШтрихкодУпаковки);
Продолжить;
КонецЕсли;
СтрокаТовара = Неопределено;
ДанныеЗаписиСтатуса = РегистрыСведений.АкцизныеМаркиЕГАИС.ПоляЗаписиСтатусаУпаковки();
ДанныеЗаписиСтатуса.ОрганизацияЕГАИС = СтрокаТЧ.ОрганизацияЕГАИС;
ДанныеЗаписиСтатуса.АкцизнаяМарка = СтрокаТЧ.ШтрихкодУпаковки;
ДанныеЗаписиСтатуса.Статус = Перечисления.СтатусыАкцизныхМарок.Отсутствует;
Если ЗначениеЗаполнено(СтрокаТЧ.Справка2) Тогда
ДанныеЗаписиСтатуса.Справка2 = СтрокаТЧ.Справка2;
Иначе
Если СтрокаТовара = Неопределено Тогда
СтрокаТовара = Товары.Найти(СтрокаТЧ.ИдентификаторСтроки);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТовара) Тогда
ДанныеЗаписиСтатуса.Справка2 = СтрокаТовара.Справка2;
Иначе
АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЗаполненияСправки2(СтрокаТЧ.ШтрихкодУпаковки);
Продолжить;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТЧ.АлкогольнаяПродукция) Тогда
ДанныеЗаписиСтатуса.АлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
Иначе
Если СтрокаТовара = Неопределено Тогда
СтрокаТовара = Товары.Найти(СтрокаТЧ.ИдентификаторСтроки);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТовара) Тогда
ДанныеЗаписиСтатуса.АлкогольнаяПродукция = СтрокаТовара.АлкогольнаяПродукция;
Иначе
АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЗаполненияСправки2(СтрокаТЧ.ШтрихкодУпаковки);
Продолжить;
КонецЕсли;
КонецЕсли;
ДанныеЗаписиСтатуса.Основание = ДокументСсылка;
РегистрыСведений.АкцизныеМаркиЕГАИС.ВыполнитьЗаписьВРегистр(ДанныеЗаписиСтатуса);
КонецЦикла;
КонецЕсли;
ИнтеграцияЕГАИСПереопределяемый.ПриИзмененииСтатусаДокумента(ДокументСсылка, ПредыдущийСтатус, НовыйСтатус, ПараметрыОбновленияСтатуса);
Если КонечныеСтатусы().Найти(НовыйСтатус)<>Неопределено
И КонечныеСтатусы().Найти(ПредыдущийСтатус)=Неопределено Тогда
РасчетСтатусовОформленияЕГАИС.РассчитатьСтатусыОформленияДокументовЕГАИС(ДокументСсылка);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Статусы
Функция СтатусПоУмолчанию() Экспорт
Возврат Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.Черновик;
КонецФункции
Функция СтатусыОшибок() Экспорт
Статусы = Новый Массив;
Статусы.Добавить(Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ОшибкаПередачи);
Статусы.Добавить(Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ОшибкаПроведенияЕГАИС);
Статусы.Добавить(Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ЗапросНаОтменуПроведенияОшибка);
Возврат Статусы;
КонецФункции
Функция КонечныеСтатусы(ТребуетсяПовторноеОформление = Истина) Экспорт
Статусы = Новый Массив;
Статусы.Добавить(Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.Отменен);
Статусы.Добавить(Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ОшибкаПроведенияЕГАИС);
Возврат Статусы;
КонецФункции
Функция ДальнейшееДействиеПоУмолчанию() Экспорт
Возврат Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПередайтеДанные;
КонецФункции
Функция СтатусыДвижений()
Результат = Новый Массив;
Результат.Добавить(Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ПроведенЕГАИС);
Возврат Результат;
КонецФункции
#КонецОбласти
#Область ПанельОбменСЕГАИС
Функция ВсеТребующиеДействия() Экспорт
МассивДействий = Новый Массив;
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПередайтеДанные);
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ВыполнитеОбмен);
Возврат МассивДействий;
КонецФункции
Функция ВсеТребующиеОжидания() Экспорт
МассивДействий = Новый Массив;
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПередачуДанныхРегламентнымЗаданием);
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПолученЕГАИС);
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПроведенЕГАИС);
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеУведомленияОРегистрацииДвижения);
Возврат МассивДействий;
КонецФункции
Функция ТекстЗапросаПанельОбменСЕГАИСОформите() Экспорт
ТекстЗапроса = "
|ВЫБРАТЬ 0 КАК КоличествоДокументов
|";
ИнтеграцияЕГАИСПереопределяемый.ТекстЗапросаАктПостановкиНаБалансЕГАИСОформите(ТекстЗапроса);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаПанельОбменСЕГАИСОтработайте() Экспорт
ТекстЗапроса = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| КОЛИЧЕСТВО (РАЗЛИЧНЫЕ СтатусыДокументовЕГАИС.Документ) КАК КоличествоДокументов
|ИЗ
| РегистрСведений.СтатусыДокументовЕГАИС КАК СтатусыДокументовЕГАИС
|ЛЕВОЕ СОЕДИНЕНИЕ
| Документ.АктПостановкиНаБалансЕГАИС КАК АктПостановкиНаБалансЕГАИС
|ПО
| СтатусыДокументовЕГАИС.Документ = АктПостановкиНаБалансЕГАИС.Ссылка
|ГДЕ
| АктПостановкиНаБалансЕГАИС.Ссылка ЕСТЬ НЕ NULL
| И НЕ АктПостановкиНаБалансЕГАИС.ПометкаУдаления
| И СтатусыДокументовЕГАИС.ДальнейшееДействие1 В(&ВсеТребующиеДействия)
| И (АктПостановкиНаБалансЕГАИС.ОрганизацияЕГАИС В(&ОрганизацияЕГАИС)
| ИЛИ &БезОтбораПоОрганизацииЕГАИС)
| И (АктПостановкиНаБалансЕГАИС.Ответственный = &Ответственный
| ИЛИ &Ответственный = НЕОПРЕДЕЛЕНО)
|";
ИнтеграцияЕГАИСПереопределяемый.ТекстЗапросаАктПостановкиНаБалансЕГАИСОтработайте(ТекстЗапроса);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаПанельОбменСЕГАИСОжидайте() Экспорт
ТекстЗапроса = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| КОЛИЧЕСТВО (РАЗЛИЧНЫЕ СтатусыДокументовЕГАИС.Документ) КАК КоличествоДокументов
|ИЗ
| РегистрСведений.СтатусыДокументовЕГАИС КАК СтатусыДокументовЕГАИС
|ЛЕВОЕ СОЕДИНЕНИЕ
| Документ.АктПостановкиНаБалансЕГАИС КАК АктПостановкиНаБалансЕГАИС
|ПО
| СтатусыДокументовЕГАИС.Документ = АктПостановкиНаБалансЕГАИС.Ссылка
|ГДЕ
| АктПостановкиНаБалансЕГАИС.Ссылка ЕСТЬ НЕ NULL
| И НЕ АктПостановкиНаБалансЕГАИС.ПометкаУдаления
| И СтатусыДокументовЕГАИС.ДальнейшееДействие1 В(&ВсеТребующиеОжидания)
| И (АктПостановкиНаБалансЕГАИС.ОрганизацияЕГАИС В(&ОрганизацияЕГАИС)
| ИЛИ &БезОтбораПоОрганизацииЕГАИС)
| И (АктПостановкиНаБалансЕГАИС.Ответственный = &Ответственный
| ИЛИ &Ответственный = НЕОПРЕДЕЛЕНО)
|";
ИнтеграцияЕГАИСПереопределяемый.ТекстЗапросаАктПостановкиНаБалансЕГАИСОжидайте(ТекстЗапроса);
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#Область СообщенияЕГАИС
Функция СообщениеКПередачеXML(ДокументСсылка, ДальнейшееДействие, ДополнительныеПараметры = Неопределено) Экспорт
Если ДальнейшееДействие = Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПередайтеДанные Тогда
Возврат АктПостановкиНаБалансЕГАИСXML(ДокументСсылка);
ИначеЕсли ДальнейшееДействие = Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения Тогда
Возврат ЗапросНаОтменуПроведенияXML(ДокументСсылка);
КонецЕсли;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область СообщенияЕГАИС
Функция АктПостановкиНаБалансЕГАИСXML(ДокументСсылка)
СообщенияXML = Новый Массив;
ТекстыЗапроса = Новый СписокЗначений;
ТекстыЗапроса.Добавить(
"ВЫБРАТЬ
| ЕГАИСПрисоединенныеФайлы.Документ КАК Ссылка,
| КОЛИЧЕСТВО(ЕГАИСПрисоединенныеФайлы.Ссылка) КАК ПоследнийНомер
|ПОМЕСТИТЬ Версии
|ИЗ
| Справочник.ЕГАИСПрисоединенныеФайлы КАК ЕГАИСПрисоединенныеФайлы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АктПостановкиНаБалансЕГАИС КАК Шапка
| ПО Шапка.Ссылка = &Ссылка
| И Шапка.ВидДокумента = ЕГАИСПрисоединенныеФайлы.Операция
| И Шапка.Ссылка = ЕГАИСПрисоединенныеФайлы.Документ
|ГДЕ
| ЕГАИСПрисоединенныеФайлы.ТипСообщения = ЗНАЧЕНИЕ(Перечисление.ТипыЗапросовИС.Исходящий)
|СГРУППИРОВАТЬ ПО
| ЕГАИСПрисоединенныеФайлы.Документ
|;
|
|
|ВЫБРАТЬ
| Шапка.Номер КАК Номер,
| Шапка.Дата КАК Дата,
| ЕСТЬNULL(Версии.ПоследнийНомер, 0) КАК ПоследнийНомерВерсии,
| Шапка.Идентификатор КАК Идентификатор,
| Шапка.ВидДокумента КАК Операция,
| Шапка.ДокументОснование КАК ДокументОснование,
|
| Шапка.ПричинаПостановкиНаБаланс КАК ПричинаПостановкиНаБаланс,
| ВЫБОР
| КОГДА Шапка.ПричинаПостановкиНаБаланс = ЗНАЧЕНИЕ(Перечисление.ПричиныПостановкиНаБалансЕГАИС.Пересортица)
| ТОГДА ЕСТЬNULL(Шапка.АктСписанияЕГАИС.ИдентификаторЕГАИС, НЕОПРЕДЕЛЕНО)
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК ИдентификаторАктаСписания,
| ВЫРАЗИТЬ(Шапка.Комментарий КАК Строка(500)) КАК Комментарий,
|
| Шапка.ОрганизацияЕГАИС КАК ОрганизацияЕГАИС,
| Шапка.ОрганизацияЕГАИС.Код КАК ИдентификаторФСРАР,
| Шапка.ОрганизацияЕГАИС.ФорматОбмена КАК ФорматОбмена,
| Шапка.Ответственный КАК Ответственный
|ИЗ
| Документ.АктПостановкиНаБалансЕГАИС КАК Шапка,
| ЛЕВОЕ СОЕДИНЕНИЕ Версии КАК Версии
| ПО Шапка.Ссылка = Версии.Ссылка
|ГДЕ
| Шапка.Ссылка = &Ссылка
|",
"Шапка");
ТекстыЗапроса.Добавить(
"ВЫБРАТЬ
| Товары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Серия КАК Серия
|ПОМЕСТИТЬ ВТТовары
|ИЗ
| Документ.АктПостановкиНаБалансЕГАИС.Товары КАК Товары
|ГДЕ
| Товары.Ссылка = &Ссылка
|");
ТекстыЗапроса.Добавить(
ИнтеграцияЕГАИС.ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС(
"ВТТовары",
"ВТКоэффициентыПересчетаВЕдиницыЕГАИС"));
ТекстЗапросаАлкогольнаяПродукция =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Товары.АлкогольнаяПродукция КАК АлкогольнаяПродукция
|ПОМЕСТИТЬ АлкогольнаяПродукция
|ИЗ
| ВТТовары КАК Товары
|;
|
|
|ВЫБРАТЬ
| Товары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
|
| Продукция.Код КАК ПродукцияКод,
| ВЫРАЗИТЬ(Продукция.НаименованиеПолное КАК Строка(255)) КАК ПродукцияНаименованиеПолное,
| Продукция.ТипПродукции КАК ПродукцияТипПродукции,
| ЕСТЬNULL(ВидыПродукции.Код, """") КАК ПродукцияКодВидаПродукции,
|
| Производители.Код КАК ПроизводительКод,
| ВЫРАЗИТЬ(Производители.Наименование КАК Строка(64)) КАК ПроизводительНаименование,
| ВЫРАЗИТЬ(Производители.НаименованиеПолное КАК Строка(255)) КАК ПроизводительНаименованиеПолное,
| Производители.ИНН КАК ПроизводительИНН,
| Производители.КПП КАК ПроизводительКПП,
| Производители.КодСтраны КАК ПроизводительКодСтраны,
| Производители.КодРегиона КАК ПроизводительКодРегиона,
| Производители.ПочтовыйИндекс КАК ПроизводительПочтовыйИндекс,
| ВЫРАЗИТЬ(Производители.ПредставлениеАдреса КАК Строка(1000)) КАК ПроизводительПредставлениеАдреса,
| Производители.ТипОрганизации КАК ПроизводительТипОрганизации,
| Производители.ИдентификаторОрганизацииТС КАК ПроизводительИдентификаторОрганизацииТС
|ИЗ
| АлкогольнаяПродукция КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлассификаторАлкогольнойПродукцииЕГАИС КАК Продукция
| ПО Продукция.Ссылка = Товары.АлкогольнаяПродукция
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыАлкогольнойПродукции КАК ВидыПродукции
| ПО Продукция.ВидПродукции = ВидыПродукции.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлассификаторОрганизацийЕГАИС КАК Производители
| ПО Производители.Ссылка = Продукция.Производитель
|";
ТекстыЗапроса.Добавить(
ТекстЗапросаАлкогольнаяПродукция,
"АлкогольнаяПродукция");
ТекстыЗапроса.Добавить(
"ВЫБРАТЬ
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.ИдентификаторСтроки КАК ИдентификаторСтроки,
| Товары.Номенклатура КАК Номенклатура,
| Товары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| Товары.Количество
| * ЕСТЬNULL(ЕдиницыЕГАИС.Коэффициент, 1) КАК Количество,
| Товары.КоличествоПоСправке1 КАК КоличествоПоСправке1,
| Товары.НомерТТН КАК НомерТТН,
| Товары.ДатаТТН КАК ДатаТТН,
| Товары.ДатаРозлива КАК ДатаРозлива,
| Товары.НомерПодтвержденияЕГАИС КАК НомерПодтвержденияЕГАИС,
| Товары.ДатаПодтвержденияЕГАИС КАК ДатаПодтвержденияЕГАИС,
| Товары.Справка2 КАК Справка2,
| Товары.Справка2.НомерСправки1 КАК НомерСправки1,
| Товары.Справка2.РегистрационныйНомер КАК НомерСправки2,
|
| ЕСТЬNULL(ЕдиницыЕГАИС.ПроверятьОбъемДАЛ, ЛОЖЬ) КАК ПроверятьОбъемДАЛ,
| ЕСТЬNULL(ЕдиницыЕГАИС.ОбъемДАЛ, 0) КАК ОбъемДАЛ
|ИЗ
| Документ.АктПостановкиНаБалансЕГАИС.Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКоэффициентыПересчетаВЕдиницыЕГАИС КАК ЕдиницыЕГАИС
| ПО ЕдиницыЕГАИС.АлкогольнаяПродукция = Товары.АлкогольнаяПродукция
| И ЕдиницыЕГАИС.Номенклатура = Товары.Номенклатура
| И ЕдиницыЕГАИС.Характеристика = Товары.Характеристика
| И ЕдиницыЕГАИС.Серия = Товары.Серия
|ГДЕ
| Товары.Ссылка = &Ссылка
|",
"Товары");
ПараметрыФормированияТекстаЗапроса = ШтрихкодированиеЕГАИС.ПараметрыФормированияТекстаЗапросаВложенныхШтрихкодов();
ПараметрыФормированияТекстаЗапроса.ДокументСсылка = ДокументСсылка;
ПараметрыФормированияТекстаЗапроса.ИспользоватьИдентификаторСтроки = Истина;
ТекстыЗапроса.Добавить(
ШтрихкодированиеЕГАИС.ТекстЗапросаВложенныхШтрихкодовПоДокументу(ПараметрыФормированияТекстаЗапроса),
"ВложенныеШтрихкоды");
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.УстановитьПараметр("ПустыеЗначенияНоменклатуры", ИнтеграцияИС.НезаполненныеЗначенияОпределяемогоТипа("Номенклатура"));
РезультатыЗапроса = ОбщегоНазначенияИС.ВыполнитьПакетЗапросов(Запрос, ТекстыЗапроса);
Шапка = РезультатыЗапроса["Шапка"].Выбрать();
АлкогольнаяПродукция = РезультатыЗапроса["АлкогольнаяПродукция"].Выгрузить();
Товары = РезультатыЗапроса["Товары"].Выгрузить();
Если Не Шапка.Следующий()
Или Товары.Количество() = 0 Тогда
СообщениеXML = ОбменДаннымиЕГАИС.СтруктураСообщенияXML();
СообщениеXML.Документ = ДокументСсылка;
СообщениеXML.Описание = ОбменДаннымиЕГАИС.ОписаниеОперацииПередачиДанных(
Шапка.Операция, ДокументСсылка);
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, НСтр("ru = 'Нет данных для выгрузки.'"));
СообщенияXML.Добавить(СообщениеXML);
Возврат СообщенияXML;
КонецЕсли;
НомерВерсии = Шапка.ПоследнийНомерВерсии + 1;
ФорматОбмена = ОбменДаннымиЕГАИСКлиентСервер.ФорматОбмена(Шапка.ФорматОбмена);
СообщениеXML = ОбменДаннымиЕГАИС.СтруктураСообщенияXML();
СообщениеXML.Описание = ОбменДаннымиЕГАИС.ОписаниеОперацииПередачиДанных(
Шапка.Операция, ДокументСсылка, НомерВерсии);
ПространствоИмен = Перечисления.ВидыДокументовЕГАИС.ПространствоИмен(Шапка.Операция, ФорматОбмена);
ИмяТипа = Перечисления.ВидыДокументовЕГАИС.ТипЕГАИС(Шапка.Операция, ФорматОбмена);
Если ПространствоИмен = Неопределено
Или ИмяТипа = Неопределено Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
СтрШаблон(НСтр("ru = 'Операция не поддерживается в версии формата обмена: %1.'"), ФорматОбмена));
СообщенияXML.Добавить(СообщениеXML);
Возврат СообщенияXML;
КонецЕсли;
Если Шапка.Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1 Тогда
#Область ПодготовкаДанных
ОписаниеНоменклатуры = ОбщегоНазначенияИС.ОписаниеНоменклатуры(Товары.ВыгрузитьКолонку("Номенклатура"));
ТоварыИтоги = Новый ТаблицаЗначений;
ТоварыИтоги.Колонки.Добавить("АлкогольнаяПродукция");
ТоварыИтоги.Колонки.Добавить("КоличествоПоСправке1");
ТоварыИтоги.Колонки.Добавить("ДатаРозлива");
ТоварыИтоги.Колонки.Добавить("НомерТТН");
ТоварыИтоги.Колонки.Добавить("ДатаТТН");
ТоварыИтоги.Колонки.Добавить("НомерПодтвержденияЕГАИС");
ТоварыИтоги.Колонки.Добавить("ДатаПодтвержденияЕГАИС");
ТоварыИтоги.Колонки.Добавить("Количество");
Для Каждого СтрокаТЧ Из Товары Цикл
Если СтрокаТЧ.ПроверятьОбъемДАЛ
И Не ЗначениеЗаполнено(СтрокаТЧ.ОбъемДАЛ) Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, СтрШаблон(НСтр("ru = 'Для номенклатуры в строке %1 не установлен объем в декалитрах.'"), СтрокаТЧ.НомерСтроки));
КонецЕсли;
ДанныеОписанияНоменклатуры = ОписаниеНоменклатуры[СтрокаТЧ.Номенклатура];
Если СтрокаТЧ.ПроверятьОбъемДАЛ
Или ДанныеОписанияНоменклатуры = Неопределено
Или ДанныеОписанияНоменклатуры.КоличествоВПотребительскойУпаковке = 0 Тогда
Количество = СтрокаТЧ.Количество;
Иначе
Количество = Окр(СтрокаТЧ.Количество / ДанныеОписанияНоменклатуры.КоличествоВПотребительскойУпаковке, 0);
КонецЕсли;
НоваяСтрока = ТоварыИтоги.Добавить();
НоваяСтрока.АлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
НоваяСтрока.КоличествоПоСправке1 = СтрокаТЧ.КоличествоПоСправке1;
НоваяСтрока.ДатаРозлива = СтрокаТЧ.ДатаРозлива;
НоваяСтрока.НомерТТН = СтрокаТЧ.НомерТТН;
НоваяСтрока.ДатаТТН = СтрокаТЧ.ДатаТТН;
НоваяСтрока.НомерПодтвержденияЕГАИС = СтрокаТЧ.НомерПодтвержденияЕГАИС;
НоваяСтрока.ДатаПодтвержденияЕГАИС = СтрокаТЧ.ДатаПодтвержденияЕГАИС;
НоваяСтрока.Количество = Количество;
КонецЦикла;
ТоварыИтоги.Свернуть(
"АлкогольнаяПродукция,
|КоличествоПоСправке1,
|ДатаРозлива,
|НомерТТН,
|ДатаТТН,
|НомерПодтвержденияЕГАИС,
|ДатаПодтвержденияЕГАИС",
"Количество");
#КонецОбласти
#Область ПодготовкаДанныхАкцизныеМарки
АкцизныеМарки = Новый ТаблицаЗначений;
АкцизныеМарки.Колонки.Добавить("АлкогольнаяПродукция");
АкцизныеМарки.Колонки.Добавить("КоличествоПоСправке1");
АкцизныеМарки.Колонки.Добавить("ДатаРозлива");
АкцизныеМарки.Колонки.Добавить("НомерТТН");
АкцизныеМарки.Колонки.Добавить("ДатаТТН");
АкцизныеМарки.Колонки.Добавить("НомерПодтвержденияЕГАИС");
АкцизныеМарки.Колонки.Добавить("ДатаПодтвержденияЕГАИС");
АкцизныеМарки.Колонки.Добавить("КодАкцизнойМарки");
Выборка = РезультатыЗапроса["ВложенныеШтрихкоды"].Выбрать();
ВложенныеШтрихкодыУпаковок = ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоВыборкеИМенеджеруВТ(
Выборка, МенеджерВременныхТаблиц);
Для Каждого СтрокаТЧ Из ВложенныеШтрихкодыУпаковок.МаркированныеТовары Цикл
Если ЗначениеЗаполнено(СтрокаТЧ.Статус) Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
СтрШаблон(
НСтр("ru = 'Акцизная марка %1 со статусом %2 не может быть поставлена на баланс в регистр №1'"),
СтрокаТЧ.Штрихкод,
СтрокаТЧ.Статус));
КонецЕсли;
Если Не ЗначениеЗаполнено(СтрокаТЧ.ИдентификаторСтроки) Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, НСтр("ru = 'Не заполнен идентификатор строки акцизной марки.'"));
КонецЕсли;
НайденнаяСтрока = Товары.Найти(СтрокаТЧ.ИдентификаторСтроки, "ИдентификаторСтроки");
Если НайденнаяСтрока = Неопределено Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, НСтр("ru = 'Ошибка при связывании акцизных марок и алкогольной продукции'"));
КонецЕсли;
НоваяСтрока = АкцизныеМарки.Добавить();
НоваяСтрока.КодАкцизнойМарки = СтрокаТЧ.Штрихкод;
НоваяСтрока.АлкогольнаяПродукция = НайденнаяСтрока.АлкогольнаяПродукция;
НоваяСтрока.КоличествоПоСправке1 = НайденнаяСтрока.КоличествоПоСправке1;
НоваяСтрока.ДатаРозлива = НайденнаяСтрока.ДатаРозлива;
НоваяСтрока.НомерТТН = НайденнаяСтрока.НомерТТН;
НоваяСтрока.ДатаТТН = НайденнаяСтрока.ДатаТТН;
НоваяСтрока.НомерПодтвержденияЕГАИС = НайденнаяСтрока.НомерПодтвержденияЕГАИС;
НоваяСтрока.ДатаПодтвержденияЕГАИС = НайденнаяСтрока.ДатаПодтвержденияЕГАИС;
КонецЦикла;
#КонецОбласти
#Область АктПостановкиНаБалансВРегистр1
Если ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V1 Тогда
#Область ФорматОбмена_V1
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActChargeOnType");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", Шапка.Идентификатор, СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Number", СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate", Шапка.Дата, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
Для Каждого СтрокаТЧ Из ТоварыИтоги Цикл
НомерСтроки = Формат(ТоварыИтоги.Индекс(СтрокаТЧ) + 1, "ЧГ=0");
Position = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActChargeOnPositionType");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Identity", НомерСтроки, СообщениеXML, 5);
Position.Product = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "Product");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Quantity", СтрокаТЧ.Количество, СообщениеXML);
Position.InformAB = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "InformAB");
Position.InformAB.InformABReg = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position.InformAB, "InformABReg");
Position.InformAB.InformABReg.InformA = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position.InformAB.InformABReg, "InformA");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformAB.InformABReg.InformA, "Quantity", СтрокаТЧ.КоличествоПоСправке1, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformAB.InformABReg.InformA, "BottlingDate", СтрокаТЧ.ДатаРозлива, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformAB.InformABReg.InformA, "TTNNumber", СтрокаТЧ.НомерТТН, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformAB.InformABReg.InformA, "TTNDate", СтрокаТЧ.ДатаТТН, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformAB.InformABReg.InformA, "EGAISFixNumber", СтрокаТЧ.НомерПодтвержденияЕГАИС, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformAB.InformABReg.InformA, "EGAISFixDate", СтрокаТЧ.ДатаПодтвержденияЕГАИС, СообщениеXML);
ИнтеграцияЕГАИС.ЗаполнитьВXDTOАлкогольнуюПродукцию_v1(
Position.Product,
АлкогольнаяПродукция.Найти(СтрокаТЧ.АлкогольнаяПродукция, "АлкогольнаяПродукция"),
"Продукция", СообщениеXML);
ПараметрыОтбораАкцизныМарок = Новый Структура;
ПараметрыОтбораАкцизныМарок.Вставить("АлкогольнаяПродукция", СтрокаТЧ.АлкогольнаяПродукция);
ПараметрыОтбораАкцизныМарок.Вставить("КоличествоПоСправке1", СтрокаТЧ.КоличествоПоСправке1);
ПараметрыОтбораАкцизныМарок.Вставить("ДатаРозлива", СтрокаТЧ.ДатаРозлива);
ПараметрыОтбораАкцизныМарок.Вставить("НомерТТН", СтрокаТЧ.НомерТТН);
ПараметрыОтбораАкцизныМарок.Вставить("ДатаТТН", СтрокаТЧ.ДатаТТН);
ПараметрыОтбораАкцизныМарок.Вставить("НомерПодтвержденияЕГАИС", СтрокаТЧ.НомерПодтвержденияЕГАИС);
ПараметрыОтбораАкцизныМарок.Вставить("ДатаПодтвержденияЕГАИС", СтрокаТЧ.ДатаПодтвержденияЕГАИС);
ИнтеграцияЕГАИС.ЗаполнитьВXDTOАкцизныеМаркиПоОтбору(Position, ПараметрыОтбораАкцизныМарок, АкцизныеМарки, "MarkCode", СообщениеXML);
АктXDTO.Content.Position.Добавить(Position);
КонецЦикла;
#КонецОбласти
Иначе
#Область ФорматОбмена_V2
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActChargeOnType_v2");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", Шапка.Идентификатор, СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Number", СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate", Шапка.Дата, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "TypeChargeOn", Строка(Шапка.ПричинаПостановкиНаБаланс), СообщениеXML);
Если Шапка.ПричинаПостановкиНаБаланс = Перечисления.ПричиныПостановкиНаБалансЕГАИС.Пересортица Тогда
Если ЗначениеЗаполнено(Шапка.ИдентификаторАктаСписания) Тогда
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActWriteOff", Шапка.ИдентификаторАктаСписания, СообщениеXML);
Иначе
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, НСтр("ru = 'Акт списания не проведен в ЕГАИС.'"));
КонецЕсли;
КонецЕсли;
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
Для Каждого СтрокаТЧ Из ТоварыИтоги Цикл
СтрокаАП = АлкогольнаяПродукция.Найти(СтрокаТЧ.АлкогольнаяПродукция, "АлкогольнаяПродукция");
Если СтрокаАП = Неопределено
Или Не ЗначениеЗаполнено(СтрокаАП.ПроизводительТипОрганизации) Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML,
СтрШаблон(НСтр("ru = 'Для продукции %1 не указан производитель'"),
СтрокаТЧ.АлкогольнаяПродукция));
Продолжить;
КонецЕсли;
НомерСтроки = Формат(ТоварыИтоги.Индекс(СтрокаТЧ) + 1, "ЧГ=0");
Position = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActChargeOnPositionType");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Identity", НомерСтроки, СообщениеXML, 5);
Position.Product = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "Product");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Quantity", СтрокаТЧ.Количество, СообщениеXML);
Position.InformF1F2 = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "InformF1F2");
Position.InformF1F2.InformF1F2Reg = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position.InformF1F2, "InformF1F2Reg");
Position.InformF1F2.InformF1F2Reg.InformF1 = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position.InformF1F2.InformF1F2Reg, "InformF1");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformF1F2.InformF1F2Reg.InformF1, "Quantity", СтрокаТЧ.КоличествоПоСправке1, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformF1F2.InformF1F2Reg.InformF1, "BottlingDate", СтрокаТЧ.ДатаРозлива, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformF1F2.InformF1F2Reg.InformF1, "TTNNumber", СтрокаТЧ.НомерТТН, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformF1F2.InformF1F2Reg.InformF1, "TTNDate", СтрокаТЧ.ДатаТТН, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformF1F2.InformF1F2Reg.InformF1, "EGAISFixNumber", СтрокаТЧ.НомерПодтвержденияЕГАИС, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformF1F2.InformF1F2Reg.InformF1, "EGAISFixDate", СтрокаТЧ.ДатаПодтвержденияЕГАИС, СообщениеXML);
ИнтеграцияЕГАИС.ЗаполнитьВXDTOАлкогольнуюПродукцию_v2(
Position.Product,
СтрокаАП,
"Продукция", СообщениеXML);
ПараметрыОтбораАкцизныМарок = Новый Структура;
ПараметрыОтбораАкцизныМарок.Вставить("АлкогольнаяПродукция", СтрокаТЧ.АлкогольнаяПродукция);
ПараметрыОтбораАкцизныМарок.Вставить("КоличествоПоСправке1", СтрокаТЧ.КоличествоПоСправке1);
ПараметрыОтбораАкцизныМарок.Вставить("ДатаРозлива", СтрокаТЧ.ДатаРозлива);
ПараметрыОтбораАкцизныМарок.Вставить("НомерТТН", СтрокаТЧ.НомерТТН);
ПараметрыОтбораАкцизныМарок.Вставить("ДатаТТН", СтрокаТЧ.ДатаТТН);
ПараметрыОтбораАкцизныМарок.Вставить("НомерПодтвержденияЕГАИС", СтрокаТЧ.НомерПодтвержденияЕГАИС);
ПараметрыОтбораАкцизныМарок.Вставить("ДатаПодтвержденияЕГАИС", СтрокаТЧ.ДатаПодтвержденияЕГАИС);
ИнтеграцияЕГАИС.ЗаполнитьВXDTOАкцизныеМаркиПоОтбору(Position, ПараметрыОтбораАкцизныМарок, АкцизныеМарки, "MarkCode", СообщениеXML);
АктXDTO.Content.Position.Добавить(Position);
КонецЦикла;
#КонецОбласти
КонецЕсли;
#КонецОбласти
ИначеЕсли Шапка.Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2 Тогда
#Область ПодготовкаДанных
ТоварыИтоги = Новый ТаблицаЗначений;
ТоварыИтоги.Колонки.Добавить("АлкогольнаяПродукция");
ТоварыИтоги.Колонки.Добавить("Количество");
Для Каждого СтрокаТЧ Из Товары Цикл
Если СтрокаТЧ.ПроверятьОбъемДАЛ
И Не ЗначениеЗаполнено(СтрокаТЧ.ОбъемДАЛ) Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, СтрШаблон(НСтр("ru = 'Для номенклатуры в строке %1 не установлен объем в декалитрах.'"), СтрокаТЧ.НомерСтроки));
КонецЕсли;
НоваяСтрока = ТоварыИтоги.Добавить();
НоваяСтрока.АлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
НоваяСтрока.Количество = СтрокаТЧ.Количество;
КонецЦикла;
ТоварыИтоги.Свернуть(
"АлкогольнаяПродукция",
"Количество");
#КонецОбласти
#Область АктПостановкиНаБалансВРегистр2
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActChargeOnShopType_v2");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", Шапка.Идентификатор, СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Number", СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate", Шапка.Дата, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "TypeChargeOn", Строка(Шапка.ПричинаПостановкиНаБаланс), СообщениеXML);
Если Шапка.ПричинаПостановкиНаБаланс = Перечисления.ПричиныПостановкиНаБалансЕГАИС.Пересортица Тогда
Если ЗначениеЗаполнено(Шапка.ИдентификаторАктаСписания) Тогда
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActWriteOff", Шапка.ИдентификаторАктаСписания, СообщениеXML);
Иначе
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, НСтр("ru = 'Акт списания не проведен в ЕГАИС.'"));
КонецЕсли;
КонецЕсли;
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
Для Каждого СтрокаТЧ Из ТоварыИтоги Цикл
СтрокаАП = АлкогольнаяПродукция.Найти(СтрокаТЧ.АлкогольнаяПродукция, "АлкогольнаяПродукция");
Если СтрокаАП = Неопределено
Или Не ЗначениеЗаполнено(СтрокаАП.ПроизводительТипОрганизации) Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML,
СтрШаблон(НСтр("ru = 'Для продукции %1 не указан производитель'"),
СтрокаТЧ.АлкогольнаяПродукция));
Продолжить;
КонецЕсли;
НомерСтроки = Формат(ТоварыИтоги.Индекс(СтрокаТЧ) + 1, "ЧГ=0");
Position = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActChargeOnShopPositionType");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Identity", НомерСтроки, СообщениеXML, 5);
Position.Product = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "Product");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Quantity", СтрокаТЧ.Количество, СообщениеXML);
ИнтеграцияЕГАИС.ЗаполнитьВXDTOАлкогольнуюПродукцию_v2(
Position.Product,
СтрокаАП,
"Продукция", СообщениеXML);
АктXDTO.Content.Position.Добавить(Position);
КонецЦикла;
#КонецОбласти
ИначеЕсли Шапка.Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
#Область ПодготовкаДанных
ТоварыИтоги = Новый ТаблицаЗначений;
ТоварыИтоги.Колонки.Добавить("АлкогольнаяПродукция");
ТоварыИтоги.Колонки.Добавить("Справка2");
ТоварыИтоги.Колонки.Добавить("НомерСправки2");
ТоварыИтоги.Колонки.Добавить("Количество");
Для Каждого СтрокаТЧ Из Товары Цикл
Если СтрокаТЧ.ПроверятьОбъемДАЛ
И Не ЗначениеЗаполнено(СтрокаТЧ.ОбъемДАЛ) Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, СтрШаблон(НСтр("ru = 'Для номенклатуры в строке %1 не установлен объем в декалитрах.'"), СтрокаТЧ.НомерСтроки));
КонецЕсли;
НоваяСтрока = ТоварыИтоги.Добавить();
НоваяСтрока.АлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
НоваяСтрока.Справка2 = СтрокаТЧ.Справка2;
НоваяСтрока.НомерСправки2 = СтрокаТЧ.НомерСправки2;
НоваяСтрока.Количество = СтрокаТЧ.Количество;
КонецЦикла;
ТоварыИтоги.Свернуть("АлкогольнаяПродукция, Справка2, НомерСправки2", "Количество");
АкцизныеМарки = Новый ТаблицаЗначений;
АкцизныеМарки.Колонки.Добавить("Справка2");
АкцизныеМарки.Колонки.Добавить("КодАкцизнойМарки");
СтатусыДоступныхАкцизныхМарок = СтатусыДоступныхАкцизныхМарок();
ВложенныеШтрихкодыУпаковок = ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоВыборкеИМенеджеруВТ(
РезультатыЗапроса["ВложенныеШтрихкоды"].Выбрать(), МенеджерВременныхТаблиц);
Для Каждого СтрокаТЧ Из ВложенныеШтрихкодыУпаковок.МаркированныеТовары Цикл
Справка2 = Неопределено;
Если СтатусыДоступныхАкцизныхМарок.Найти(СтрокаТЧ.Статус) = Неопределено Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
СтрШаблон(
НСтр("ru = 'Акцизная марка %1 со статусом %2 не может быть поставлена на баланс в регистр №3'"),
СтрокаТЧ.Штрихкод,
СтрокаТЧ.Статус));
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТЧ.Справка2) Тогда
Справка2 = СтрокаТЧ.Справка2;
Иначе
НайденнаяСтрока = Товары.Найти(СтрокаТЧ.ИдентификаторСтроки, "ИдентификаторСтроки");
Если НайденнаяСтрока = Неопределено Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
СтрШаблон(
НСтр("ru = 'Не удалось определить справку 2 для акцизной марки %1'"),
СтрокаТЧ.Штрихкод));
Иначе
Справка2 = НайденнаяСтрока.Справка2;
КонецЕсли;
КонецЕсли;
Если Справка2 = Неопределено Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = АкцизныеМарки.Добавить();
НоваяСтрока.Справка2 = Справка2;
НоваяСтрока.КодАкцизнойМарки = СтрокаТЧ.Штрихкод;
КонецЦикла;
#КонецОбласти
#Область АктПостановкиНаБалансВРегистр3
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActFixBarCode");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", Шапка.Идентификатор, СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Number", СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate", Шапка.Дата, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
Для Каждого СтрокаТЧ Из ТоварыИтоги Цикл
НомерСтроки = Формат(ТоварыИтоги.Индекс(СтрокаТЧ) + 1, "ЧГ=0");
Position = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActFixBarCodePositionType");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Identity", НомерСтроки, СообщениеXML, 5);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Inform2RegId", СтрокаТЧ.НомерСправки2, СообщениеXML);
ИнтеграцияЕГАИС.ЗаполнитьВXDTOАкцизныеМаркиПоСправке2_v3(Position, СтрокаТЧ, АкцизныеМарки, СообщениеXML);
АктXDTO.Content.Position.Добавить(Position);
КонецЦикла;
#КонецОбласти
КонецЕсли;
ТекстСообщения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(ПространствоИмен, "RequestRepealACO");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(ЗапросXDTO, "ClientId", Шапка.ИдентификаторФСРАР, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(ЗапросXDTO, "RequestNumber", СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(ЗапросXDTO, "RequestDate", ТекущаяДатаСеанса(), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(ЗапросXDTO, "ACORegId", Шапка.ИдентификаторЕГАИС, СообщениеXML);
ТекстСообщенияXML = РаботаСXMLЕГАИС.ОбъектXDTOВXML(ЗапросXDTO, Шапка.ИдентификаторФСРАР, ПространствоИмен, ИмяТипа);
СообщениеXML.ТекстСообщенияXML = ТекстСообщенияXML;
СообщениеXML.ТипСообщения = Перечисления.ТипыЗапросовИС.Исходящий;
СообщениеXML.ОрганизацияЕГАИС = Шапка.ОрганизацияЕГАИС;
СообщениеXML.Операция = Операция;
СообщениеXML.ФорматОбмена = ФорматОбмена;
СообщениеXML.Документ = ДокументСсылка;
СообщениеXML.ДокументОснование = Шапка.ДокументОснование;
СообщениеXML.Версия = НомерВерсии;
СообщенияXML.Добавить(СообщениеXML);
Возврат СообщенияXML;
КонецФункции
#КонецОбласти
#Область СканированиеАлкогольнойПродукции
Функция ТаблицаАлкогольнойПродукцииКОпределениюСправок2(ДокументСсылка) Экспорт
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| АктПостановкиНаБалансЕГАИСТовары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| АктПостановкиНаБалансЕГАИСТовары.Номенклатура КАК Номенклатура,
| АктПостановкиНаБалансЕГАИСТовары.Характеристика КАК Характеристика,
| АктПостановкиНаБалансЕГАИСТовары.Серия КАК Серия,
| ВЫБОР
| КОГДА ЕСТЬNULL(ВидыАлкогольнойПродукции.Маркируемый, ЛОЖЬ)
| ТОГДА ЗНАЧЕНИЕ(Справочник.Справки2ЕГАИС.ПустаяСсылка)
| ИНАЧЕ АктПостановкиНаБалансЕГАИСТовары.Справка2
| КОНЕЦ КАК Справка2,
| СУММА(АктПостановкиНаБалансЕГАИСТовары.Количество) КАК Количество,
| ЕСТЬNULL(ВидыАлкогольнойПродукции.Маркируемый, ЛОЖЬ) КАК Маркируемая
|ИЗ
| Документ.АктПостановкиНаБалансЕГАИС.Товары КАК АктПостановкиНаБалансЕГАИСТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлассификаторАлкогольнойПродукцииЕГАИС КАК КлассификаторАлкогольнойПродукцииЕГАИС
| ПО АктПостановкиНаБалансЕГАИСТовары.АлкогольнаяПродукция = КлассификаторАлкогольнойПродукцииЕГАИС.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыАлкогольнойПродукции КАК ВидыАлкогольнойПродукции
| ПО КлассификаторАлкогольнойПродукцииЕГАИС.ВидПродукции = ВидыАлкогольнойПродукции.Ссылка
|ГДЕ
| АктПостановкиНаБалансЕГАИСТовары.Ссылка = &ДокументСсылка
|
|СГРУППИРОВАТЬ ПО
| АктПостановкиНаБалансЕГАИСТовары.Номенклатура,
| АктПостановкиНаБалансЕГАИСТовары.АлкогольнаяПродукция,
| АктПостановкиНаБалансЕГАИСТовары.Характеристика,
| АктПостановкиНаБалансЕГАИСТовары.Серия,
| ЕСТЬNULL(ВидыАлкогольнойПродукции.Маркируемый, ЛОЖЬ),
| ВЫБОР
| КОГДА ЕСТЬNULL(ВидыАлкогольнойПродукции.Маркируемый, ЛОЖЬ)
| ТОГДА ЗНАЧЕНИЕ(Справочник.Справки2ЕГАИС.ПустаяСсылка)
| ИНАЧЕ АктПостановкиНаБалансЕГАИСТовары.Справка2
| КОНЕЦ";
Запрос.УстановитьПараметр("ДокументСсылка", ДокументСсылка);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Функция ШтрихкодыУпаковок(ДокументСсылка, ЗаполнитьСправки2ИзРегистра = Ложь) Экспорт
Возврат ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоДокументу(ДокументСсылка, ЗаполнитьСправки2ИзРегистра);
КонецФункции
Функция СтатусыДоступныхАкцизныхМарок()
Результат = Новый Массив;
Результат.Добавить(Перечисления.СтатусыАкцизныхМарок.КПостановкеНаБаланс);
Результат.Добавить(Перечисления.СтатусыАкцизныхМарок.Отсутствует);
Результат.Добавить(Перечисления.СтатусыАкцизныхМарок.ПустаяСсылка());
Возврат Результат;
КонецФункции
Функция ОбработатьДанныеШтрихкода(Форма, ДанныеШтрихкода, ПараметрыСканирования, ВложенныеШтрихкоды = Неопределено) Экспорт
Если ИнтеграцияИСКлиентСервер.ЭтоУпаковка(ДанныеШтрихкода.ТипУпаковки) Тогда
Возврат ОбработатьДанныеШтрихкодаЛогистическойУпаковки(Форма, ДанныеШтрихкода, ВложенныеШтрихкоды, ПараметрыСканирования);
ИначеЕсли ДанныеШтрихкода.ТипУпаковки = Перечисления.ТипыУпаковок.МаркированныйТовар Тогда
Возврат ОбработатьДанныеШтрихкодаПотребительскойУпаковки(Форма, ДанныеШтрихкода, ПараметрыСканирования);
ИначеЕсли ДанныеШтрихкода.ТипШтрихкода = Перечисления.ТипыШтрихкодов.DataMatrix Тогда
Возврат ОбработатьДанныеШтрихкодаСНомеромИСерией(Форма, ДанныеШтрихкода, ПараметрыСканирования);
ИначеЕсли ДанныеШтрихкода.ВидУпаковки = Перечисления.ВидыУпаковокИС.Потребительская
И ДанныеШтрихкода.МаркируемаяПродукция <> Истина
И ДанныеШтрихкода.ЭтоШтрихкодНоменклатуры Тогда
Возврат ОбработатьДанныеШтрихкодаПотребительскойУпаковки(Форма, ДанныеШтрихкода, ПараметрыСканирования);
КонецЕсли;
Возврат Неопределено;
КонецФункции
Функция ОбработатьДанныеШтрихкодаПотребительскойУпаковки(Форма, ДанныеШтрихкода, ПараметрыСканирования)
Результат = ШтрихкодированиеОбщегоНазначенияИС.ИнициализироватьРезультатОбработкиШтрихкода(ПараметрыСканирования, ДанныеШтрихкода);
ПараметрыЗаполнения = АкцизныеМаркиЕГАИС.ПараметрыЗаполненияТоваровИАкцизныхМарок(Форма, Истина, ПараметрыСканирования);
ПараметрыЗаполнения.ТолькоПустаяСправка2 = Форма.Объект.ВидДокумента <> Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3;
Если Форма.Элементы.Товары.ТекущаяСтрока <> Неопределено Тогда
ПараметрыЗаполнения.ТекущаяСтрока = Форма.Объект.Товары.НайтиПоИдентификатору(Форма.Элементы.Товары.ТекущаяСтрока);
КонецЕсли;
Если ПараметрыЗаполнения.ТолькоПустаяСправка2 Тогда
Справка2 = Справочники.Справки2ЕГАИС.ПустаяСсылка();
Иначе
Справка2 = ДанныеШтрихкода.Справка2;
КонецЕсли;
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Номенклатура", ДанныеШтрихкода.Номенклатура);
ПараметрыОтбора.Вставить("Характеристика", ДанныеШтрихкода.Характеристика);
Если ПараметрыЗаполнения.УчитыватьСерии Тогда
ПараметрыОтбора.Вставить("Серия", ДанныеШтрихкода.Серия);
КонецЕсли;
Если ДанныеШтрихкода.ТипШтрихкода = Перечисления.ТипыШтрихкодов.PDF417
Или ДанныеШтрихкода.ТипШтрихкода = Перечисления.ТипыШтрихкодов.DataMatrix Тогда
ТипШтрихкода = ДанныеШтрихкода.ТипШтрихкода;
Иначе
ТипШтрихкода = Неопределено;
КонецЕсли;
Если ДанныеШтрихкода.Коэффициент <> Неопределено И ДанныеШтрихкода.Коэффициент > 0 Тогда
КоличествоПродукции = ДанныеШтрихкода.Коэффициент;
Иначе
КоличествоПродукции = ДанныеШтрихкода.Количество;
КонецЕсли;
РаспределенноеКоличество = 0;
Пока РаспределенноеКоличество < КоличествоПродукции Цикл
ОсталосьРаспределить = КоличествоПродукции - РаспределенноеКоличество;
РезультатПоиска = АкцизныеМаркиЕГАИС.НайтиСтрокиТоваров(
Форма.Объект.Товары, ПараметрыОтбора,
Справка2, ДанныеШтрихкода.АлкогольнаяПродукция, ПараметрыЗаполнения, ТипШтрихкода);
Если Не РезультатПоиска.ПолноеСоответствие <> Неопределено
И ЗначениеЗаполнено(РезультатПоиска.КЗаполнению) <> Неопределено Тогда
ПараметрыОтбора.Вставить("ТипШтрихкода", Перечисления.ТипыШтрихкодов.ПустаяСсылка());
РезультатПоиска = АкцизныеМаркиЕГАИС.НайтиСтрокиТоваров(
Форма.Объект.Товары, ПараметрыОтбора,
Справка2, ДанныеШтрихкода.АлкогольнаяПродукция, ПараметрыЗаполнения);
КонецЕсли;
СтрокаТЧ = РезультатПоиска.ПолноеСоответствие;
СтрокиТЧДляУменьшенияКоличества = РезультатПоиска.КЗаполнению;
Если СтрокиТЧДляУменьшенияКоличества = Неопределено
И СтрокаТЧ = Неопределено Тогда
СтрокаТЧ = Форма.Объект.Товары.Добавить();
СтрокаТЧ.Номенклатура = ДанныеШтрихкода.Номенклатура;
СтрокаТЧ.Характеристика = ДанныеШтрихкода.Характеристика;
СтрокаТЧ.Серия = ДанныеШтрихкода.Серия;
СтрокаТЧ.АлкогольнаяПродукция = ДанныеШтрихкода.АлкогольнаяПродукция;
СтрокаТЧ.Справка2 = Справка2;
АкцизныеМаркиЕГАИС.ОбработатьДобавленнуюСтроку(
СтрокаТЧ, ПараметрыЗаполнения,
ОсталосьРаспределить, ДанныеШтрихкода.МаркируемаяПродукция);
РаспределенноеКоличество = РаспределенноеКоличество + ОсталосьРаспределить;
ИначеЕсли СтрокиТЧДляУменьшенияКоличества = Неопределено
И СтрокаТЧ <> Неопределено Тогда
АкцизныеМаркиЕГАИС.ОбработатьИзмененнуюСтроку(
СтрокаТЧ, ПараметрыЗаполнения,
ОсталосьРаспределить, ДанныеШтрихкода.МаркируемаяПродукция);
РаспределенноеКоличество = РаспределенноеКоличество + ОсталосьРаспределить;
Иначе
Для Каждого СтрокаТЧДляУменьшенияКоличества Из СтрокиТЧДляУменьшенияКоличества Цикл
Если СтрокаТЧДляУменьшенияКоличества.Количество >= ОсталосьРаспределить Тогда
КоличествоКОбработке = ОсталосьРаспределить;
Иначе
КоличествоКОбработке = СтрокаТЧДляУменьшенияКоличества.Количество;
КонецЕсли;
Если СтрокаТЧДляУменьшенияКоличества.Количество <= КоличествоКОбработке Тогда
Если СтрокаТЧ = Неопределено Тогда
СтрокаТЧ = СтрокаТЧДляУменьшенияКоличества;
СтрокаТЧ.АлкогольнаяПродукция = ДанныеШтрихкода.АлкогольнаяПродукция;
СтрокаТЧ.Справка2 = Справка2;
Иначе
Форма.Объект.Товары.Удалить(СтрокаТЧДляУменьшенияКоличества);
Индекс = ПараметрыЗаполнения.ИзмененныеСтроки.Найти(СтрокаТЧДляУменьшенияКоличества);
Если Индекс <> Неопределено Тогда
ПараметрыЗаполнения.ИзмененныеСтроки.Удалить(Индекс);
КонецЕсли;
АкцизныеМаркиЕГАИС.ОбработатьИзмененнуюСтроку(
СтрокаТЧ, ПараметрыЗаполнения,
КоличествоКОбработке, ДанныеШтрихкода.МаркируемаяПродукция);
КонецЕсли;
РаспределенноеКоличество = РаспределенноеКоличество + КоличествоКОбработке;
Иначе
СтрокаТЧДляУменьшенияКоличества.Количество = СтрокаТЧДляУменьшенияКоличества.Количество - КоличествоКОбработке;
ПараметрыЗаполнения.ИзмененныеСтроки.Добавить(СтрокаТЧДляУменьшенияКоличества);
Если СтрокаТЧ = Неопределено Тогда
СтрокаТЧ = Форма.Объект.Товары.Вставить(Форма.Объект.Товары.Индекс(СтрокаТЧДляУменьшенияКоличества) + 1);
ЗаполнитьЗначенияСвойств(
СтрокаТЧ, СтрокаТЧДляУменьшенияКоличества,,
"Количество, КоличествоУпаковок, ИдентификаторСтроки, ТипШтрихкода");
СтрокаТЧ.АлкогольнаяПродукция = ДанныеШтрихкода.АлкогольнаяПродукция;
СтрокаТЧ.Справка2 = Справка2;
АкцизныеМаркиЕГАИС.ОбработатьДобавленнуюСтроку(
СтрокаТЧ, ПараметрыЗаполнения,
КоличествоКОбработке, ДанныеШтрихкода.МаркируемаяПродукция);
Иначе
АкцизныеМаркиЕГАИС.ОбработатьИзмененнуюСтроку(
СтрокаТЧ, ПараметрыЗаполнения,
КоличествоКОбработке, ДанныеШтрихкода.МаркируемаяПродукция);
КонецЕсли;
РаспределенноеКоличество = РаспределенноеКоличество + КоличествоКОбработке;
КонецЕсли;
Прервать;
КонецЦикла;
КонецЕсли;
Если Не ЗначениеЗаполнено(СтрокаТЧ.ТипШтрихкода) Тогда
СтрокаТЧ.ТипШтрихкода = ТипШтрихкода;
КонецЕсли;
Если Не ЗначениеЗаполнено(СтрокаТЧ.ИдентификаторСтроки) Тогда
СтрокаТЧ.ИдентификаторСтроки = Строка(Новый УникальныйИдентификатор);
КонецЕсли;
КонецЦикла;
Если Форма.Объект.ВидДокумента <> Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2
И ДанныеШтрихкода.МаркируемаяПродукция = Истина Тогда
АкцизныеМаркиСтрокаТЧ = Форма.Объект.АкцизныеМарки.Добавить();
АкцизныеМаркиСтрокаТЧ.АкцизнаяМарка = ДанныеШтрихкода.ШтрихкодУпаковки;
АкцизныеМаркиСтрокаТЧ.Количество = 1;
Если ЗначениеЗаполнено(Справка2) Тогда
АкцизныеМаркиСтрокаТЧ.Справка2 = Справка2;
Иначе
АкцизныеМаркиСтрокаТЧ.ИдентификаторСтроки = СтрокаТЧ.ИдентификаторСтроки;
КонецЕсли;
КонецЕсли;
Результат.ДобавленныеСтроки = ПараметрыЗаполнения.ДобавленныеСтроки;
Результат.ИзмененныеСтроки = ПараметрыЗаполнения.ИзмененныеСтроки;
Возврат Результат;
КонецФункции
Функция ОбработатьДанныеШтрихкодаЛогистическойУпаковки(Форма, ДанныеШтрихкода, ВложенныеШтрихкоды, ПараметрыСканирования)
Результат = ШтрихкодированиеОбщегоНазначенияИС.ИнициализироватьРезультатОбработкиШтрихкода(ПараметрыСканирования, ДанныеШтрихкода);
ПараметрыЗаполнения = АкцизныеМаркиЕГАИС.ПараметрыЗаполненияТоваровИАкцизныхМарок(Форма, Истина, ПараметрыСканирования);
ПараметрыЗаполнения.ТолькоПустаяСправка2 = Форма.Объект.ВидДокумента <> Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3;
ПараметрыЗаполнения.УчитыватьСерии = Форма.Объект.ВидДокумента = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3;
Если Форма.Элементы.Товары.ТекущаяСтрока <> Неопределено Тогда
ПараметрыЗаполнения.ТекущаяСтрока = Форма.Объект.Товары.НайтиПоИдентификатору(Форма.Элементы.Товары.ТекущаяСтрока);
КонецЕсли;
ЗаполнятьТолькоТовары = (Форма.Объект.ВидДокумента = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2);
АкцизныеМаркиЕГАИС.ЗаполнитьТоварыИАкцизныеМарки(
Форма.Объект, ВложенныеШтрихкоды.ДеревоУпаковок, ПараметрыЗаполнения,,
ЗаполнятьТолькоТовары);
Результат.ИзмененныеСтроки = ПараметрыЗаполнения.ИзмененныеСтроки;
Результат.ДобавленныеСтроки = ПараметрыЗаполнения.ДобавленныеСтроки;
Возврат Результат;
КонецФункции
Функция ОбработатьДанныеШтрихкодаСНомеромИСерией(Форма, ДанныеШтрихкода, ПараметрыСканирования)
Результат = ШтрихкодированиеОбщегоНазначенияИС.ИнициализироватьРезультатОбработкиШтрихкода(ПараметрыСканирования, ДанныеШтрихкода);
Если ПараметрыСканирования.Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1 Тогда
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Номенклатура", ДанныеШтрихкода.Номенклатура);
ПараметрыОтбора.Вставить("Характеристика", ДанныеШтрихкода.Характеристика);
ПараметрыОтбора.Вставить("АлкогольнаяПродукция", ДанныеШтрихкода.АлкогольнаяПродукция);
ПараметрыОтбора.Вставить("Серия", ДанныеШтрихкода.Серия);
Если ЗначениеЗаполнено(ДанныеШтрихкода.Справка2) Тогда
Запрос = Новый Запрос(
"ВЫБРАТЬ
| Справки2ЕГАИС.Справка1.НомерТТН КАК НомерТТН,
| Справки2ЕГАИС.Справка1.ДатаТТН КАК ДатаТТН,
| Справки2ЕГАИС.Справка1.ДатаРозлива КАК ДатаРозлива,
| Справки2ЕГАИС.Справка1.НомерПодтвержденияЕГАИС КАК НомерПодтвержденияЕГАИС,
| Справки2ЕГАИС.Справка1.ДатаПодтвержденияЕГАИС КАК ДатаПодтвержденияЕГАИС,
| Справки2ЕГАИС.Справка1.Количество КАК КоличествоПоСправке1,
| Справки2ЕГАИС.Справка1 КАК Справка1
|ИЗ
| Справочник.Справки2ЕГАИС КАК Справки2ЕГАИС
|ГДЕ
| Справки2ЕГАИС.Ссылка = &Справка2");
Запрос.УстановитьПараметр("Справка2", ДанныеШтрихкода.Справка2);
ВыборкаПоСправке1 = Запрос.Выполнить().Выбрать();
Если ВыборкаПоСправке1.Следующий() Тогда
Если ЗначениеЗаполнено(ВыборкаПоСправке1.Справка1) Тогда
ПараметрыОтбора.Вставить("ДатаТТН", ВыборкаПоСправке1.ДатаТТН);
ПараметрыОтбора.Вставить("НомерТТН", ВыборкаПоСправке1.НомерТТН);
ПараметрыОтбора.Вставить("ДатаПодтвержденияЕГАИС", ВыборкаПоСправке1.ДатаПодтвержденияЕГАИС);
ПараметрыОтбора.Вставить("НомерПодтвержденияЕГАИС", ВыборкаПоСправке1.НомерПодтвержденияЕГАИС);
ПараметрыОтбора.Вставить("КоличествоПоСправке1", ВыборкаПоСправке1.КоличествоПоСправке1);
ПараметрыОтбора.Вставить("ДатаРозлива", ВыборкаПоСправке1.ДатаРозлива);
КонецЕсли;
КонецЕсли;
Иначе
ПараметрыОтбора.Вставить("ДатаТТН", '00010101');
ПараметрыОтбора.Вставить("НомерТТН", "");
ПараметрыОтбора.Вставить("ДатаПодтвержденияЕГАИС", '00010101');
ПараметрыОтбора.Вставить("НомерПодтвержденияЕГАИС", "");
ПараметрыОтбора.Вставить("КоличествоПоСправке1", 0);
ПараметрыОтбора.Вставить("ДатаРозлива", '00010101');
КонецЕсли;
МассивСтрок = Форма.Объект.Товары.НайтиСтроки(ПараметрыОтбора);
Если МассивСтрок.Количество() > 0 Тогда
СтрокаТЧ = МассивСтрок[0];
Иначе
СтрокаТЧ = Неопределено;
КонецЕсли;
Иначе
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Номенклатура", ДанныеШтрихкода.Номенклатура);
ПараметрыОтбора.Вставить("Характеристика", ДанныеШтрихкода.Характеристика);
ПараметрыОтбора.Вставить("АлкогольнаяПродукция", ДанныеШтрихкода.АлкогольнаяПродукция);
ПараметрыОтбора.Вставить("Серия", ДанныеШтрихкода.Серия);
Если ПараметрыСканирования.Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
ПараметрыОтбора.Вставить("Справка2", ДанныеШтрихкода.Справка2);
Иначе
ПараметрыОтбора.Вставить("Справка2", Справочники.Справки2ЕГАИС.ПустаяСсылка());
КонецЕсли;
МассивСтрок = Форма.Объект.Товары.НайтиСтроки(ПараметрыОтбора);
Если МассивСтрок.Количество() > 0 Тогда
СтрокаТЧ = МассивСтрок[0];
Иначе
СтрокаТЧ = Неопределено;
КонецЕсли;
КонецЕсли;
Если СтрокаТЧ <> Неопределено Тогда
СтрокаТЧ.Количество = СтрокаТЧ.Количество + 1;
Результат.ИзмененныеСтроки.Добавить(СтрокаТЧ);
Иначе
СтрокаТЧ = Форма.Объект.Товары.Добавить();
СтрокаТЧ.ИдентификаторСтроки = Строка(Новый УникальныйИдентификатор);
СтрокаТЧ.АлкогольнаяПродукция = ДанныеШтрихкода.АлкогольнаяПродукция;
СтрокаТЧ.Номенклатура = ДанныеШтрихкода.Номенклатура;
СтрокаТЧ.Характеристика = ДанныеШтрихкода.Характеристика;
СтрокаТЧ.Серия = ДанныеШтрихкода.Серия;
Если ПараметрыСканирования.Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1
И ВыборкаПоСправке1 <> Неопределено Тогда
СтрокаТЧ.ДатаТТН = ВыборкаПоСправке1.ДатаТТН;
СтрокаТЧ.НомерТТН = ВыборкаПоСправке1.НомерТТН;
СтрокаТЧ.ДатаПодтвержденияЕГАИС = ВыборкаПоСправке1.ДатаПодтвержденияЕГАИС;
СтрокаТЧ.НомерПодтвержденияЕГАИС = ВыборкаПоСправке1.НомерПодтвержденияЕГАИС;
СтрокаТЧ.КоличествоПоСправке1 = ВыборкаПоСправке1.КоличествоПоСправке1;
СтрокаТЧ.ДатаРозлива = ВыборкаПоСправке1.ДатаРозлива;
КонецЕсли;
Если ПараметрыСканирования.Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
СтрокаТЧ.Справка2 = ДанныеШтрихкода.Справка2;
КонецЕсли;
СтрокаТЧ.КоличествоУпаковок = 1;
Результат.ДобавленныеСтроки.Добавить(СтрокаТЧ);
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область ЗавершениеПроверкиИПодбораМаркируемойПродукции
Процедура ОтразитьРезультатыПроверкиИПодбора(ПараметрыОкончанияПроверки) Экспорт
ТаблицаНеМаркируемойПродукции = ПараметрыОкончанияПроверки.ТаблицаНеМаркируемойПродукции;
ДеревоМаркируемойПродукции = ПараметрыОкончанияПроверки.ДеревоМаркируемойПродукции;
ДокументОбъект = ПараметрыОкончанияПроверки.ПроверяемыйДокумент.ПолучитьОбъект();
ДокументОбъект.СтатусПроверкиИПодбора = Перечисления.СтатусыПроверкиИПодбораИС.Завершено;
ОчиститьДанныеПередЗаполнением(ДокументОбъект);
ПараметрыЗаполнения = АкцизныеМаркиЕГАИС.ПараметрыЗаполненияТоваровИАкцизныхМарок(ДокументОбъект, Ложь);
Если ДокументОбъект.ВидДокумента = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
ПараметрыЗаполнения.МаркируемаяАлкогольнаяПродукция = Истина;
КонецЕсли;
ПараметрыЗаполнения.ТолькоПустаяСправка2 = ДокументОбъект.ВидДокумента <> Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3;
АкцизныеМаркиЕГАИС.ЗаполнитьТоварыИАкцизныеМарки(
ДокументОбъект, ДеревоМаркируемойПродукции, ПараметрыЗаполнения);
АкцизныеМаркиЕГАИС.ЗаполнитьНеМаркируемыеТовары(
ДокументОбъект, ТаблицаНеМаркируемойПродукции, ПараметрыЗаполнения);
ОбработатьСтрокиТЧ(ДокументОбъект, ПараметрыЗаполнения);
СтруктураПоискаПустыхСтрок = Новый Структура("Количество", 0);
ПустыеСтроки = ДокументОбъект.Товары.НайтиСтроки(СтруктураПоискаПустыхСтрок);
Для Каждого ПустаяСтрока Из ПустыеСтроки Цикл
ДокументОбъект.Товары.Удалить(ПустаяСтрока);
КонецЦикла;
Если ДокументОбъект.Проведен Тогда
Если ДокументОбъект.ПроверитьЗаполнение() Тогда
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Иначе
ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЕсли;
Иначе
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
КонецПроцедуры
Процедура ОчиститьДанныеПередЗаполнением(ДокументОбъект)
ДокументОбъект.АкцизныеМарки.Очистить();
ИменаКолонокДляОчистки = Новый Массив();
ИменаКолонокДляОчистки.Добавить("Количество");
ИменаКолонокДляОчистки.Добавить("КоличествоУпаковок");
Для Каждого СтрокаТовары Из ДокументОбъект.Товары Цикл
Для Каждого ИмяКолонки Из ИменаКолонокДляОчистки Цикл
СтрокаТовары[ИмяКолонки] = 0;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ОбработатьСтрокиТЧ(ДокументОбъект, ПараметрыЗаполнения)
ПараметрыУказанияСерий = ПараметрыУказанияСерий(ДокументОбъект);
ПустойСклад = ОбщегоНазначенияИС.ПустоеЗначениеОпределяемогоТипа("Склад");
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковок");
СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", Новый Структура("Склад, ПараметрыУказанияСерий", ПустойСклад, ПараметрыУказанияСерий));
СтруктураДействий.Вставить("ЗаполнитьАлкогольнуюПродукцию", ПараметрыЗаполнения);
Для Каждого СтрокаТЧ Из ПараметрыЗаполнения.ДобавленныеСтроки Цикл
ИнтеграцияИСПереопределяемый.ОбработатьСтрокуТабличнойЧасти(СтрокаТЧ, СтруктураДействий, ДокументОбъект);
КонецЦикла;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковок");
Для Каждого СтрокаТЧ Из ПараметрыЗаполнения.ИзмененныеСтроки Цикл
ИнтеграцияИСПереопределяемый.ОбработатьСтрокуТабличнойЧасти(СтрокаТЧ, СтруктураДействий, ДокументОбъект);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область Проведение
Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт
ИсточникиДанных = Новый Соответствие;
Возврат ИсточникиДанных;
КонецФункции
Процедура ИнициализироватьДанныеДокумента(ДокументСсылка, ДополнительныеСвойства, Регистры = Неопределено) Экспорт
Запрос = Новый Запрос;
ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
ТекстыЗапроса = Новый СписокЗначений;
ТекстЗапросаТаблицаОстаткиАлкогольнойПродукцииЕГАИС(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры);
ИнтеграцияИС.ИнициализироватьТаблицыДляДвижений(Запрос, ТекстыЗапроса, ДополнительныеСвойства.ТаблицыДляДвижений, Истина);
КонецПроцедуры
Процедура ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка)
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеШапки.Дата КАК Период,
| ДанныеШапки.Ссылка КАК Ссылка,
| ДанныеШапки.ОрганизацияЕГАИС КАК ОрганизацияЕГАИС,
| ДанныеШапки.ДатаРегистрацииДвижений КАК ДатаРегистрацииДвижений,
| ДанныеШапки.ВидДокумента КАК ВидДокумента,
| СтатусыДокументовЕГАИС.Статус КАК СтатусОбработки
|ИЗ
| Документ.АктПостановкиНаБалансЕГАИС КАК ДанныеШапки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыДокументовЕГАИС КАК СтатусыДокументовЕГАИС
| ПО СтатусыДокументовЕГАИС.Документ = ДанныеШапки.Ссылка
|ГДЕ
| ДанныеШапки.Ссылка = &Ссылка";
Реквизиты = Запрос.Выполнить().Выбрать();
Реквизиты.Следующий();
Запрос.УстановитьПараметр("Период", Реквизиты.Период);
Запрос.УстановитьПараметр("Ссылка", Реквизиты.Ссылка);
Запрос.УстановитьПараметр("УдалитьСтатусОбработки", Реквизиты.СтатусОбработки);
Запрос.УстановитьПараметр("ОрганизацияЕГАИС", Реквизиты.ОрганизацияЕГАИС);
Запрос.УстановитьПараметр("ДатаРегистрацииДвижений", Реквизиты.ДатаРегистрацииДвижений);
Запрос.УстановитьПараметр("ВидДокумента", Реквизиты.ВидДокумента);
Запрос.УстановитьПараметр("СтатусыДвижений", СтатусыДвижений());
КонецПроцедуры
Функция ТекстЗапросаТаблицаОстаткиАлкогольнойПродукцииЕГАИС(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ОстаткиАлкогольнойПродукцииЕГАИС";
Если НЕ ИнтеграцияИС.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
Если НЕ ИнтеграцияЕГАИС.ЕстьТаблицаЗапроса("ВТТовары", ТекстыЗапроса) Тогда
ТекстЗапросаВТТовары(Запрос, ТекстыЗапроса);
КонецЕсли;
Если НЕ ИнтеграцияЕГАИС.ЕстьТаблицаЗапроса("ВТКоэффициентыПересчетаВЕдиницыЕГАИС", ТекстыЗапроса) Тогда
ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК ВидДвижения,
| &Период КАК Период,
| &ОрганизацияЕГАИС КАК ОрганизацияЕГАИС,
| ТаблицаТовары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| ТаблицаТовары.Справка2 КАК Справка2,
| ВЫБОР
| КОГДА ЕСТЬNULL(ОписаниеНоменклатуры.КоличествоВПотребительскойУпаковке, 0) > 0
| ТОГДА ВЫРАЗИТЬ(ТаблицаТовары.Количество * ЕСТЬNULL(ЕдиницыЕГАИС.Коэффициент, 1) /
| ОписаниеНоменклатуры.КоличествоВПотребительскойУпаковке КАК ЧИСЛО(12, 0))
| ИНАЧЕ ТаблицаТовары.Количество * ЕСТЬNULL(ЕдиницыЕГАИС.Коэффициент, 1)
| КОНЕЦ КАК СвободныйОстаток,
| 0 КАК Количество,
| ТаблицаТовары.НомерСтроки КАК НомерСтроки
|ИЗ
| ВТТовары КАК ТаблицаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКоэффициентыПересчетаВЕдиницыЕГАИС КАК ЕдиницыЕГАИС
| ПО ЕдиницыЕГАИС.АлкогольнаяПродукция = ТаблицаТовары.АлкогольнаяПродукция
| И ЕдиницыЕГАИС.Номенклатура = ТаблицаТовары.Номенклатура
| И ЕдиницыЕГАИС.Характеристика = ТаблицаТовары.Характеристика
| И ЕдиницыЕГАИС.Серия = ТаблицаТовары.Серия
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОписаниеНоменклатурыИС КАК ОписаниеНоменклатуры
| ПО ТаблицаТовары.Номенклатура = ОписаниеНоменклатуры.Номенклатура
| И ТаблицаТовары.АлкогольнаяПродукция.ТипПродукции <> ЗНАЧЕНИЕ(Перечисление.ТипыПродукцииЕГАИС.Неупакованная)
|ГДЕ
| &УдалитьСтатусОбработки В (&СтатусыДвижений)
| И &ВидДокумента = ЗНАЧЕНИЕ(Перечисление.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК ВидДвижения,
| &ДатаРегистрацииДвижений КАК ДатаРегистрацииДвижений,
| &ОрганизацияЕГАИС КАК ОрганизацияЕГАИС,
| ТаблицаТовары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| ТаблицаТовары.Справка2 КАК Справка2,
| 0 КАК СвободныйОстаток,
| ВЫБОР
| КОГДА ЕСТЬNULL(ОписаниеНоменклатуры.КоличествоВПотребительскойУпаковке, 0) > 0
| ТОГДА ВЫРАЗИТЬ(ТаблицаТовары.Количество * ЕСТЬNULL(ЕдиницыЕГАИС.Коэффициент, 1) /
| ОписаниеНоменклатуры.КоличествоВПотребительскойУпаковке КАК ЧИСЛО(12, 0))
| ИНАЧЕ ТаблицаТовары.Количество * ЕСТЬNULL(ЕдиницыЕГАИС.Коэффициент, 1)
| КОНЕЦ КАК Количество,
| ТаблицаТовары.НомерСтроки КАК НомерСтроки
|ИЗ
| ВТТовары КАК ТаблицаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКоэффициентыПересчетаВЕдиницыЕГАИС КАК ЕдиницыЕГАИС
| ПО ЕдиницыЕГАИС.АлкогольнаяПродукция = ТаблицаТовары.АлкогольнаяПродукция
| И ЕдиницыЕГАИС.Номенклатура = ТаблицаТовары.Номенклатура
| И ЕдиницыЕГАИС.Характеристика = ТаблицаТовары.Характеристика
| И ЕдиницыЕГАИС.Серия = ТаблицаТовары.Серия
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОписаниеНоменклатурыИС КАК ОписаниеНоменклатуры
| ПО ТаблицаТовары.Номенклатура = ОписаниеНоменклатуры.Номенклатура
| И ТаблицаТовары.АлкогольнаяПродукция.ТипПродукции <> ЗНАЧЕНИЕ(Перечисление.ТипыПродукцииЕГАИС.Неупакованная)
|ГДЕ
| &УдалитьСтатусОбработки В (&СтатусыДвижений)
| И &ВидДокумента = ЗНАЧЕНИЕ(Перечисление.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1)";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВТТовары(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВТТовары";
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК Ссылка,
| ТаблицаТовары.НомерСтроки КАК НомерСтроки,
| ТаблицаТовары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Серия КАК Серия,
| ТаблицаТовары.Количество КАК Количество,
| ТаблицаТовары.Справка2 КАК Справка2
|ПОМЕСТИТЬ ВТТовары
|ИЗ
| Документ.АктПостановкиНаБалансЕГАИС.Товары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.Ссылка = &Ссылка";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВТКоэффициентыПересчетаВЕдиницыЕГАИС";
ТекстЗапроса = ИнтеграцияЕГАИС.ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС("ВТТовары", ИмяРегистра);
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ДвиженияСерийТоваров";
Если Не ИнтеграцияИС.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
ТекстЗапроса = "";
ИнтеграцияЕГАИСПереопределяемый.ПриЗаполненииТекстаЗапросаДвижениеСерийТоваров(ТекстЗапроса, Метаданные.Документы.АктПостановкиНаБалансЕГАИС.Имя);
Если ЗначениеЗаполнено(ТекстЗапроса) Тогда
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#Область Серии
Функция ИменаРеквизитовДляЗаполненияПараметровУказанияСерий() Экспорт
Возврат ИнтеграцияИС.ИменаРеквизитовДляЗаполненияПараметровУказанияСерий(Метаданные.Документы.АктПостановкиНаБалансЕГАИС);
КонецФункции
Функция ПараметрыУказанияСерий(Объект) Экспорт
Возврат ИнтеграцияИС.ПараметрыУказанияСерий(Метаданные.Документы.АктПостановкиНаБалансЕГАИС, Объект);
КонецФункции
Функция ТекстЗапросаЗаполненияСтатусовУказанияСерий(ПараметрыУказанияСерий) Экспорт
Возврат ИнтеграцияИС.ТекстЗапросаЗаполненияСтатусовУказанияСерий(Метаданные.Документы.АктПостановкиНаБалансЕГАИС, ПараметрыУказанияСерий);
КонецФункции
#КонецОбласти
#Область Отчеты
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
ИнтеграцияИСПереопределяемый.ДобавитьКомандуСтруктураПодчиненности(КомандыОтчетов);
ИнтеграцияИСПереопределяемый.ДобавитьКомандуДвиженияДокумента(КомандыОтчетов);
КомандаОтчет = Отчеты.АнализРасхожденийПриДвиженииАлкогольнойПродукции.ДобавитьКомандуОтчета(КомандыОтчетов);
Если КомандаОтчет <> Неопределено Тогда
КомандаОтчет.Важность = "Обычное";
КомандаОтчет.Порядок = 1;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Печать
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
Возврат;
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Возврат;
КонецПроцедуры
#КонецОбласти
#Область ОбновлениеИнформационнойБазы
Функция АдаптированныйТекстЗапросаДвиженийПоРегистру(ИмяРегистра) Экспорт
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений();
ТекстыЗапросаВременныхТаблиц = Новый Массив;
ПолноеИмяДокумента = "Документ.АктПостановкиНаБалансЕГАИС";
Если ИмяРегистра = "ОстаткиАлкогольнойПродукцииЕГАИС" Тогда
ТекстЗапроса = ТекстЗапросаТаблицаОстаткиАлкогольнойПродукцииЕГАИС(Запрос, ТекстыЗапроса, ИмяРегистра);
ТекстыЗапросаВременныхТаблиц.Добавить(Новый Структура("Ключ, Значение", "ВТКоэффициентыПересчетаВЕдиницыЕГАИС", ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС(Запрос, ТекстыЗапроса)));
ТекстыЗапросаВременныхТаблиц.Добавить(Новый Структура("Ключ, Значение", "ВТТовары", ТекстЗапросаВТТовары(Запрос, ТекстыЗапроса)));
СинонимТаблицыДокумента = "ТаблицаТовары";
Иначе
ТекстИсключения = НСтр("ru = 'В документе %ПолноеИмяДокумента% не реализована адаптация текста запроса формирования движений по регистру %ИмяРегистра%.'");
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ПолноеИмяДокумента%", ПолноеИмяДокумента);
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ИмяРегистра%", ИмяРегистра);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
ПереопределениеРасчетаПараметров = Новый Структура;
Результат = ОбновлениеИнформационнойБазыЕГАИС.РезультатАдаптацииЗапроса();
Результат.ЗначенияПараметров.Вставить("СтатусыДвижений", СтатусыДвижений());
Результат.ТекстЗапроса = ОбновлениеИнформационнойБазыЕГАИС.АдаптироватьЗапросМеханизмаПроведения(
ТекстЗапроса,
ПолноеИмяДокумента,
СинонимТаблицыДокумента,
ПереопределениеРасчетаПараметров,
ТекстыЗапросаВременныхТаблиц);
Возврат Результат;
КонецФункции
Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| АкцизныеМарки.Ссылка КАК Ссылка
|ИЗ
| Документ.АктПостановкиНаБалансЕГАИС.АкцизныеМарки КАК АкцизныеМарки
|ГДЕ
| АкцизныеМарки.КодАкцизнойМарки <> """"
| И АкцизныеМарки.АкцизнаяМарка = ЗНАЧЕНИЕ(Справочник.ШтрихкодыУпаковокТоваров.ПустаяСсылка)";
МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок);
КонецПроцедуры
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
ПолноеИмяДокумента = "Документ.АктПостановкиНаБалансЕГАИС";
МетаданныеДокумента = Метаданные.Документы.АктПостановкиНаБалансЕГАИС;
Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ПолноеИмяДокумента);
Пока Выборка.Следующий() Цикл
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяДокумента);
ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
Если ДокументОбъект = Неопределено Тогда
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
ЗафиксироватьТранзакцию();
Продолжить;
КонецЕсли;
Для каждого ТекСтрока Из ДокументОбъект.АкцизныеМарки Цикл
Если ЗначениеЗаполнено(ТекСтрока.КодАкцизнойМарки) Тогда
ТекСтрока.АкцизнаяМарка = Справочники.ШтрихкодыУпаковокТоваров.ПолучитьПоЗначениюШтрихкода(ТекСтрока.КодАкцизнойМарки);
ТекСтрока.Количество = 1;
КонецЕсли;
КонецЦикла;
ОбновлениеИнформационнойБазы.ЗаписатьДанные(ДокументОбъект);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ТекстСообщения = НСтр("ru = 'Не удалось обработать документ: %Ссылка% по причине: %Причина%'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", Выборка.Ссылка);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Предупреждение,
МетаданныеДокумента,
Выборка.Ссылка,
ТекстСообщения);
ВызватьИсключение;
КонецПопытки;
КонецЦикла;
Параметры.ОбработкаЗавершена = Не ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки(Параметры.Очередь, ПолноеИмяДокумента);
КонецПроцедуры
Процедура ЗарегистрироватьДанныеКОбработкеДляГенерацииАкцизныхМарок(Параметры) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| АкцизныеМарки.Ссылка
|ИЗ
| Документ.АктПостановкиНаБалансЕГАИС.АкцизныеМарки КАК АкцизныеМарки
|ГДЕ
| АкцизныеМарки.КодАкцизнойМарки <> """"
|";
МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок);
КонецПроцедуры
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсиюГенерацияАкцизныхМарок(Параметры) Экспорт
ПолноеИмяДокумента = "Документ.АктПостановкиНаБалансЕГАИС";
МетаданныеДокумента = Метаданные.Документы.АктПостановкиНаБалансЕГАИС;
Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ПолноеИмяДокумента);
Пока Выборка.Следующий() Цикл
НачатьТранзакцию();
Попытка
ОбработкаСсылкиНачата = Ложь;
ОбработкаСсылкиЗавершена = Ложь;
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяДокумента);
ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
Блокировка.Заблокировать();
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
Если ДокументОбъект = Неопределено Тогда
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
ЗафиксироватьТранзакцию();
Продолжить;
КонецЕсли;
ОбработкаСсылкиНачата = Истина;
Для каждого ТекСтрока Из ДокументОбъект.АкцизныеМарки Цикл
Если ЗначениеЗаполнено(ТекСтрока.КодАкцизнойМарки) Тогда
СтрокаТовар = ДокументОбъект.Товары.Найти(ТекСтрока.ИдентификаторСтроки, "ИдентификаторСтроки");
Если СтрокаТовар = Неопределено Тогда
Продолжить;
КонецЕсли;
ШтрихкодированиеЕГАИС.ПолучитьСгенерироватьАкцизнуюМарку(ТекСтрока.КодАкцизнойМарки,
СтрокаТовар.Номенклатура,
СтрокаТовар.Характеристика,,
Истина);
КонецЕсли;
КонецЦикла;
ОбработкаСсылкиЗавершена = Истина;
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
Если НЕ ОбработкаСсылкиНачата Тогда
ТекстСообщения = НСтр("ru = 'Не удалось заблокировать документ: %Ссылка% по причине: %Причина%'",
ОбщегоНазначения.КодОсновногоЯзыка());
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", Выборка.Ссылка);
ИначеЕсли НЕ ОбработкаСсылкиЗавершена Тогда
ТекстСообщения = НСтр("ru = 'Не удалось сгенерировать акцизную марку: %Ключ% по причине: %Причина%'",
ОбщегоНазначения.КодОсновногоЯзыка());
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ключ%", ТекСтрока.КодАкцизнойМарки);
Иначе
ТекстСообщения = НСтр("ru = 'Не удалось обработать документ: %Ссылка% по причине: %Причина%'",
ОбщегоНазначения.КодОсновногоЯзыка());
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", Выборка.Ссылка);
КонецЕсли;
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Предупреждение,
МетаданныеДокумента,
Выборка.Ссылка,
ТекстСообщения);
КонецПопытки;
КонецЦикла;
Параметры.ОбработкаЗавершена = Не ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки(Параметры.Очередь, ПолноеИмяДокумента);
КонецПроцедуры
#КонецОбласти
#Область Прочее
Процедура ПрименитьРезультатСопоставленияДляШтрихкодовУпаковок(ДокументОбъект) Экспорт
ВложенныеШтрихкоды = ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоДокументу(ДокументОбъект.Ссылка);
УстановитьПривилегированныйРежим(Истина);
Для Каждого СтрокаТЧ Из ВложенныеШтрихкоды.МаркированныеТовары Цикл
Если ЗначениеЗаполнено(СтрокаТЧ.Справка2) Тогда
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Справка2", СтрокаТЧ.Справка2);
ПараметрыОтбора.Вставить("ИдентификаторСтроки", "");
НайденныеСтроки = ДокументОбъект.Товары.НайтиСтроки(ПараметрыОтбора);
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
Если НайденнаяСтрока.Номенклатура <> СтрокаТЧ.Номенклатура
Или НайденнаяСтрока.Характеристика <> СтрокаТЧ.Характеристика
Или НайденнаяСтрока.Серия <> СтрокаТЧ.Серия Тогда
ШтрихкодУпаковкиОбъект = СтрокаТЧ.ШтрихкодУпаковки.ПолучитьОбъект();
ШтрихкодУпаковкиОбъект.Номенклатура = НайденнаяСтрока.Номенклатура;
ШтрихкодУпаковкиОбъект.Характеристика = НайденнаяСтрока.Характеристика;
ШтрихкодУпаковкиОбъект.Серия = НайденнаяСтрока.Серия;
ШтрихкодУпаковкиОбъект.Записать();
КонецЕсли;
Прервать;
КонецЦикла;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТЧ.ИдентификаторСтроки) Тогда
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Справка2", Справочники.Справки2ЕГАИС.ПустаяСсылка());
ПараметрыОтбора.Вставить("ИдентификаторСтроки", СтрокаТЧ.ИдентификаторСтроки);
НайденныеСтроки = ДокументОбъект.Товары.НайтиСтроки(ПараметрыОтбора);
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
Если НайденнаяСтрока.Номенклатура <> СтрокаТЧ.Номенклатура
Или НайденнаяСтрока.Характеристика <> СтрокаТЧ.Характеристика
Или НайденнаяСтрока.Серия <> СтрокаТЧ.Серия Тогда
ШтрихкодУпаковкиОбъект = СтрокаТЧ.ШтрихкодУпаковки.ПолучитьОбъект();
ШтрихкодУпаковкиОбъект.Номенклатура = НайденнаяСтрока.Номенклатура;
ШтрихкодУпаковкиОбъект.Характеристика = НайденнаяСтрока.Характеристика;
ШтрихкодУпаковкиОбъект.Серия = НайденнаяСтрока.Серия;
ШтрихкодУпаковкиОбъект.Записать();
КонецЕсли;
Прервать;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
Возврат;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ВЫБОР КОГДА ОрганизацияЕГАИС.Сопоставлено И ОрганизацияЕГАИС.СоответствуетОрганизации Тогда ЗначениеРазрешено(ОрганизацияЕГАИС.Контрагент)
| КОГДА ОрганизацияЕГАИС.Сопоставлено И НЕ ОрганизацияЕГАИС.СоответствуетОрганизации Тогда ЗначениеРазрешено(ОрганизацияЕГАИС.ТорговыйОбъект)
| ИНАЧЕ ИСТИНА КОНЕЦ ";
КонецПроцедуры
#КонецОбласти