#Область ОбработчикиСобытий
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
ИнтеграцияЕГАИСВызовСервера.ПриПолученииФормыДокумента(
"АктСписанияЕГАИС",
ВидФормы,
Параметры,
ВыбраннаяФорма,
ДополнительнаяИнформация,
СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Функция ПодобратьСправки2(Объект) Экспорт
СтруктураПересчетаСуммы = ИнтеграцияЕГАИСКлиентСервер.СтруктураПересчетаСуммы("КоличествоУпаковок, Сумма");
ИнтеграцияЕГАИС.ПодобратьСправки2ДляСписанияИзРегистра1(
Объект.Товары,
Объект.ОрганизацияЕГАИС,
Неопределено,
СтруктураПересчетаСуммы);
Возврат ИнтеграцияЕГАИС.Справки2ЗаполненыВТабличнойЧасти(Объект.Товары);
КонецФункции
#Область ДействияПриОбменеЕГАИС
Функция СтатусПослеПодготовкиКПередачеДанных(ДокументСсылка, Операция) Экспорт
Если Операция = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра1
Или Операция = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра2
Или Операция = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра3 Тогда
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыКПередаче(
ДокументСсылка,
Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.КПередаче);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияАктаСписания Тогда
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыКПередаче(
ДокументСсылка,
Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.ЗапросНаОтменуПроведенияКПередаче);
Иначе
ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
КонецЕсли;
Возврат ПараметрыОбновления;
КонецФункции
Функция СтатусПослеПередачиДанных(ДокументСсылка, Операция, СтатусОбработки) Экспорт
Если СтатусОбработки = Неопределено Тогда
СтатусОбработки = Перечисления.СтатусыОбработкиСообщенийЕГАИС.ПереданоВУТМ;
КонецЕсли;
Если Операция = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра1
Или Операция = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра2
Или Операция = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра3 Тогда
СтатусыБазовыйПроцесс = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыБазовыйПроцесс.Принят = Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.ПереданВУТМ;
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПолученЕГАИС);
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПроведенЕГАИС);
СтатусыБазовыйПроцесс.Ошибка = Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.ОшибкаПередачи;
СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПередайтеДанные);
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусы(ДокументСсылка, СтатусОбработки, СтатусыБазовыйПроцесс);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияАктаСписания Тогда
СтатусыБазовыйПроцесс = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыБазовыйПроцесс.Принят = Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.ЗапросНаОтменуПроведенияПереданВУТМ;
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПолученЕГАИС);
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПроведенЕГАИС);
СтатусыБазовыйПроцесс.Ошибка = Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.ЗапросНаОтменуПроведенияОшибка;
СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОтменитеОперацию);
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусы(ДокументСсылка, СтатусОбработки, СтатусыБазовыйПроцесс);
Иначе
ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
КонецЕсли;
Возврат ПараметрыОбновления;
КонецФункции
Функция СтатусПослеПолученияДанных(ДокументСсылка, Операция, ДополнительныеПараметры = Неопределено) Экспорт
ВидДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументСсылка, "ВидДокумента");
СтатусыБазовыйПроцесс = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыБазовыйПроцесс.Принят = Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.ПроведенЕГАИС;
СтатусыБазовыйПроцесс.Обрабатывается = Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.ОбрабатываетсяЕГАИС;
СтатусыБазовыйПроцесс.ОшибкаПроведения = Неопределено;
СтатусыБазовыйПроцесс.Ошибка = Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.ОшибкаПередачи;
СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПередайтеДанные);
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.НеТребуется);
Если ВидДокумента = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра1 Тогда
СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
КонецЕсли;
СтатусыБазовыйПроцесс.УведомлениеОРегистрацииДвижения = Ложь;
СтатусыЗапросНаОтменуПроведения = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
СтатусыЗапросНаОтменуПроведения.Принят = Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.Отменен;
СтатусыЗапросНаОтменуПроведения.Обрабатывается = Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.ЗапросНаОтменуПроведенияОбрабатываетсяЕГАИС;
СтатусыЗапросНаОтменуПроведения.ОтменаПроведения = Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.Отменен;
СтатусыЗапросНаОтменуПроведения.ОшибкаПроведения = Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.ЗапросНаОтменуПроведенияОшибка;
СтатусыЗапросНаОтменуПроведения.Ошибка = Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.ЗапросНаОтменуПроведенияОшибка;
СтатусыЗапросНаОтменуПроведения.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
СтатусыЗапросНаОтменуПроведения.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОтменитеОперацию);
СтатусыЗапросНаОтменуПроведения.УведомлениеОРегистрацииДвижения = Ложь;
ВыполнитьРасчетТекущегоСостояния = Истина;
Если ДополнительныеПараметры <> Неопределено
И ДополнительныеПараметры.Свойство("ТекущееСостояние")
И ДополнительныеПараметры.ТекущееСостояние <> Неопределено Тогда
ВыполнитьРасчетТекущегоСостояния = ДополнительныеПараметры.ТекущееСостояние;
КонецЕсли;
Если Операция = Перечисления.ВидыДокументовЕГАИС.КвитанцияПолученЕГАИС Тогда
Статусы = Неопределено;
Если ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра1
Или ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра2
Или ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра3 Тогда
Статусы = СтатусыБазовыйПроцесс;
ИначеЕсли ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияАктаСписания Тогда
Статусы = СтатусыЗапросНаОтменуПроведения;
Иначе
ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
КонецЕсли;
Если Статусы <> Неопределено Тогда
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыПриПолученииКвитанции(
ДокументСсылка,
"КвитанцияПолученЕГАИС", ДополнительныеПараметры.СтатусОбработки,
Статусы, ВыполнитьРасчетТекущегоСостояния);
КонецЕсли;
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.КвитанцияПроведенЕГАИС Тогда
Статусы = Неопределено;
Если ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра1
Или ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра2
Или ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра3 Тогда
Статусы = СтатусыБазовыйПроцесс;
ИначеЕсли ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияАктаСписания Тогда
Статусы = СтатусыЗапросНаОтменуПроведения;
Иначе
ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
КонецЕсли;
Если Статусы <> Неопределено Тогда
ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыПриПолученииКвитанции(
ДокументСсылка,
"КвитанцияПроведенЕГАИС", ДополнительныеПараметры.СтатусОбработки,
Статусы, ВыполнитьРасчетТекущегоСостояния);
КонецЕсли;
Иначе
ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
КонецЕсли;
Возврат ПараметрыОбновления;
КонецФункции
Функция ОбновитьСтатусПослеПодготовкиКПередачеДанных(ДокументСсылка, Операция, ДополнительныеПараметры = Неопределено) Экспорт
ПараметрыОбновления = СтатусПослеПодготовкиКПередачеДанных(ДокументСсылка, Операция);
Если ПараметрыОбновления = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
НовыйСтатусПослеОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.ОбновитьСтатус(
ДокументСсылка,
ПараметрыОбновления, ДополнительныеПараметры);
Возврат НовыйСтатусПослеОбновления;
КонецФункции
Функция ОбновитьСтатусПослеПередачиДанных(ДокументСсылка, Операция, СтатусОбработки, ДополнительныеПараметры = Неопределено) Экспорт
ПараметрыОбновления = СтатусПослеПередачиДанных(ДокументСсылка, Операция, СтатусОбработки);
Если ПараметрыОбновления = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
НовыйСтатусПослеОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.ОбновитьСтатус(
ДокументСсылка,
ПараметрыОбновления, ДополнительныеПараметры);
Возврат НовыйСтатусПослеОбновления;
КонецФункции
Функция ОбновитьСтатусПослеПолученияДанных(ДокументСсылка, Операция, ДополнительныеПараметры = Неопределено) Экспорт
ПараметрыОбновления = СтатусПослеПолученияДанных(ДокументСсылка, Операция, ДополнительныеПараметры);
Если ПараметрыОбновления = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
НовыйСтатусПослеОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.ОбновитьСтатус(
ДокументСсылка,
ПараметрыОбновления, ДополнительныеПараметры);
Возврат НовыйСтатусПослеОбновления;
КонецФункции
Функция ОбновитьСтатус(ДокументСсылка, ПараметрыОбновления, ДополнительныеПараметры) Экспорт
НовыйСтатусПослеОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.ОбновитьСтатус(
ДокументСсылка,
ПараметрыОбновления, ДополнительныеПараметры);
Возврат НовыйСтатусПослеОбновления;
КонецФункции
Функция ПоследовательностьОпераций(ДокументСсылка) Экспорт
Операция = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументСсылка, "ВидДокумента");
Таблица = ОбменДаннымиЕГАИС.ПустаяТаблицаПоследовательностьОпераций();
Исходящий = Перечисления.ТипыЗапросовИС.Исходящий;
Если Операция = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра1 Тогда
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Исходящий, Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра1, ДокументСсылка);
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Исходящий, Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияАктаСписания, ДокументСсылка);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра2 Тогда
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Исходящий, Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра2);
ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра3 Тогда
ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Исходящий, Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра3);
КонецЕсли;
Возврат Таблица;
КонецФункции
Процедура ПриИзмененииСтатусаДокумента(ДокументСсылка, ПредыдущийСтатус, НовыйСтатус, ПараметрыОбновленияСтатуса) Экспорт
ДобавитьДвижения = ИнтеграцияЕГАИС.СтатусТребуетДобавленияДвижений(СтатусыДвиженийСвободныйОстаток(), ПредыдущийСтатус, НовыйСтатус)
Или ИнтеграцияЕГАИС.СтатусТребуетДобавленияДвижений(СтатусыДвиженийКоличество(), ПредыдущийСтатус, НовыйСтатус);
УдалитьДвижения = ИнтеграцияЕГАИС.СтатусТребуетУдаленияДвижений(СтатусыДвиженийСвободныйОстаток(), ПредыдущийСтатус, НовыйСтатус)
Или ИнтеграцияЕГАИС.СтатусТребуетУдаленияДвижений(СтатусыДвиженийКоличество(), ПредыдущийСтатус, НовыйСтатус);
Если ПараметрыОбновленияСтатуса.ОбновлятьДвижения
И (ДобавитьДвижения Или УдалитьДвижения) Тогда
ИмяРегистра = "ОстаткиАлкогольнойПродукцииЕГАИС";
НаборЗаписей = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);
ДополнительныеСвойстваДляПроведения = Новый Структура;
ИнтеграцияИС.ИнициализироватьДополнительныеСвойстваДляПроведения(ДокументСсылка, ДополнительныеСвойстваДляПроведения);
ИнициализироватьДанныеДокумента(ДокументСсылка, ДополнительныеСвойстваДляПроведения, ИмяРегистра);
НаборЗаписей.Загрузить(ДополнительныеСвойстваДляПроведения.ТаблицыДляДвижений["Таблица" + ИмяРегистра]);
НаборЗаписей.Записать();
КонецЕсли;
ПроверятьЧастичноеВыбытие = ОбщегоНазначенияИС.ИспользуетсяЧастичноеВыбытие(Перечисления.ВидыПродукцииИС.Алкогольная);
Если ДобавитьДвижения Тогда
Если ПараметрыОбновленияСтатуса.ДокументОбъект = Неопределено Тогда
Товары = ИнтеграцияЕГАИС.Справки2ПоДокументу(ДокументСсылка);
Иначе
Товары = ПараметрыОбновленияСтатуса.ДокументОбъект.Товары;
КонецЕсли;
ШтрихкодыУпаковок = ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоДокументу(ДокументСсылка);
Для Каждого СтрокаТЧ Из ШтрихкодыУпаковок.МаркированныеТовары Цикл
Если ЗначениеЗаполнено(СтрокаТЧ.Справка2)
И СтрокаТЧ.Статус = Перечисления.СтатусыАкцизныхМарок.ОшибкаЧтенияСтатуса Тогда
АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЧтенияСтатуса(СтрокаТЧ.ШтрихкодУпаковки);
Продолжить;
КонецЕсли;
СтрокаТовара = Неопределено;
ДанныеЗаписиСтатуса = РегистрыСведений.АкцизныеМаркиЕГАИС.ПоляЗаписиСтатусаУпаковки();
ДанныеЗаписиСтатуса.ОрганизацияЕГАИС = СтрокаТЧ.ОрганизацияЕГАИС;
ДанныеЗаписиСтатуса.АкцизнаяМарка = СтрокаТЧ.ШтрихкодУпаковки;
ТребуетсяРезервирование = ИнтеграцияЕГАИС.СтатусТребуетДобавленияДвижений(СтатусыДвиженийСвободныйОстаток(), ПредыдущийСтатус, НовыйСтатус)
И ИнтеграцияЕГАИС.НетДвижений(СтатусыДвиженийКоличество(), ПредыдущийСтатус, НовыйСтатус);
Если СтрокаТЧ.ЧастичноеВыбытие
И Не СтрокаТЧ.ВыбытиеБутылки Тогда
ДанныеЗаписиСтатуса.Статус = Перечисления.СтатусыАкцизныхМарок.ВскрытаяБутылка;
ИначеЕсли ТребуетсяРезервирование Тогда
ДанныеЗаписиСтатуса.Статус = Перечисления.СтатусыАкцизныхМарок.ВРезерве;
Иначе
ДанныеЗаписиСтатуса.Статус = Перечисления.СтатусыАкцизныхМарок.Отсутствует;
КонецЕсли;
Если СтрокаТЧ.ЧастичноеВыбытие
И Не ТребуетсяРезервирование Тогда
Если СтрокаТЧ.Коэффициент = 0 Тогда
Коэффициент = 1;
Иначе
Коэффициент = СтрокаТЧ.Коэффициент;
КонецЕсли;
ДанныеЗаписиСтатуса.КоличествоЧастичногоВыбытия = Окр(
СтрокаТЧ.ЕмкостьПотребительскойУпаковки / Коэффициент * СтрокаТЧ.Количество, 0);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТЧ.Справка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) КАК ПоследнийНомерВерсии,
| Шапка.Идентификатор КАК Идентификатор,
| Шапка.ВидДокумента КАК Операция,
| Шапка.ДокументОснование КАК ДокументОснование,
|
| Шапка.ПричинаСписания КАК ПричинаСписания,
| ВЫРАЗИТЬ(Шапка.Комментарий КАК Строка(500)) КАК Комментарий,
|
| Шапка.ОрганизацияЕГАИС КАК ОрганизацияЕГАИС,
| Шапка.ОрганизацияЕГАИС.Код КАК ИдентификаторФСРАР,
| Шапка.ОрганизацияЕГАИС.ФорматОбмена КАК ФорматОбмена,
| Шапка.Ответственный КАК Ответственный
|ИЗ
| Документ.АктСписанияЕГАИС КАК Шапка,
| ЛЕВОЕ СОЕДИНЕНИЕ Версии КАК Версии
| ПО Шапка.Ссылка = Версии.Ссылка
|ГДЕ
| Шапка.Ссылка = &Ссылка
|",
"Шапка");
ТекстыЗапроса.Добавить(
"ВЫБРАТЬ
| Товары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Серия КАК Серия
|ПОМЕСТИТЬ ВТТовары
|ИЗ
| Документ.АктСписанияЕГАИС.Товары КАК Товары
|ГДЕ
| Товары.Ссылка = &Ссылка");
ТекстыЗапроса.Добавить(
ИнтеграцияЕГАИС.ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС(
"ВТТовары",
"ВТКоэффициентыПересчетаВЕдиницыЕГАИС"));
ТекстЗапросаАлкогольнаяПродукция =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Товары.АлкогольнаяПродукция КАК АлкогольнаяПродукция
|ПОМЕСТИТЬ АлкогольнаяПродукция
|ИЗ
| ВТТовары КАК Товары
|;
|
|
|ВЫБРАТЬ
| Товары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
|
| Продукция.Код КАК ПродукцияКод,
| ВЫРАЗИТЬ(Продукция.НаименованиеПолное КАК Строка(255)) КАК ПродукцияНаименованиеПолное,
| Продукция.ТипПродукции КАК ПродукцияТипПродукции,
| ЕСТЬNULL(ВидыПродукции.Код, """") КАК ПродукцияКодВидаПродукции,
|
| Производители.Код КАК ПроизводительКод,
| ВЫРАЗИТЬ(Производители.Наименование КАК Строка(64)) КАК ПроизводительНаименование,
| ВЫРАЗИТЬ(Производители.НаименованиеПолное КАК Строка(255)) КАК ПроизводительНаименованиеПолное,
| Производители.ИНН КАК ПроизводительИНН,
| Производители.КПП КАК ПроизводительКПП,
| Производители.КодСтраны КАК ПроизводительКодСтраны,
| Производители.КодРегиона КАК ПроизводительКодРегиона,
| Производители.ПочтовыйИндекс КАК ПроизводительПочтовыйИндекс,
| ВЫРАЗИТЬ(Производители.ПредставлениеАдреса КАК Строка(1000)) КАК ПроизводительПредставлениеАдреса,
| Производители.ТипОрганизации КАК ПроизводительТипОрганизации,
| Производители.ИдентификаторОрганизацииТС КАК ПроизводительИдентификаторОрганизацииТС
|ИЗ
| АлкогольнаяПродукция КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлассификаторАлкогольнойПродукцииЕГАИС КАК Продукция
| ПО Продукция.Ссылка = Товары.АлкогольнаяПродукция
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыАлкогольнойПродукции КАК ВидыПродукции
| ПО Продукция.ВидПродукции = ВидыПродукции.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлассификаторОрганизацийЕГАИС КАК Производители
| ПО Производители.Ссылка = Продукция.Производитель
|";
ТекстыЗапроса.Добавить(
ТекстЗапросаАлкогольнаяПродукция,
"АлкогольнаяПродукция");
ТекстыЗапроса.Добавить(
"ВЫБРАТЬ
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.ИдентификаторСтроки КАК ИдентификаторСтроки,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| Товары.Количество
| * ЕСТЬNULL(ЕдиницыЕГАИС.Коэффициент, 1) КАК Количество,
| Товары.Сумма КАК Сумма,
| Товары.Справка2 КАК Справка2,
| Товары.Справка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 Тогда
#Область ПодготовкаДанных
ФорматОбменаМенееV4 = Не Перечисления.ФорматыОбменаЕГАИС.ФорматОбменаНеМенееV4(ФорматОбмена);
НоменклатураСЧастичнымВыбытием = Новый Массив;
АкцизныеМарки = Новый ТаблицаЗначений;
АкцизныеМарки.Колонки.Добавить("Справка2", Новый ОписаниеТипов("СправочникСсылка.Справки2ЕГАИС"));
АкцизныеМарки.Колонки.Добавить("КодАкцизнойМарки", ОбщегоНазначения.ОписаниеТипаСтрока(200));
АкцизныеМарки.Колонки.Добавить("Количество", Метаданные.ОпределяемыеТипы.КоличествоЕГАИСНеотрицательное.Тип);
АкцизныеМарки.Колонки.Добавить("Коэффициент", ОбщегоНазначения.ОписаниеТипаЧисло(12, 3));
АкцизныеМарки.Колонки.Добавить("ЧастичноеВыбытие", Новый ОписаниеТипов("Булево"));
АкцизныеМарки.Колонки.Добавить("Номенклатура", Метаданные.ОпределяемыеТипы.Номенклатура.Тип);
АкцизныеМарки.Колонки.Добавить("Характеристика", Метаданные.ОпределяемыеТипы.ХарактеристикаНоменклатуры.Тип);
Для Каждого СтрокаТЧ Из ВложенныеШтрихкодыУпаковок.МаркированныеТовары Цикл
Справка2 = Неопределено;
Если ЗначениеЗаполнено(СтрокаТЧ.Статус)
И СтрокаТЧ.Статус <> Перечисления.СтатусыАкцизныхМарок.ВНаличии
И СтрокаТЧ.Статус <> Перечисления.СтатусыАкцизныхМарок.ВскрытаяБутылка Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
СтрШаблон(
НСтр("ru = 'Акцизная марка %1 со статусом %2 не может быть списана'"),
СтрокаТЧ.Штрихкод,
СтрокаТЧ.Статус));
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТЧ.Справка2) Тогда
Справка2 = СтрокаТЧ.Справка2;
Иначе
НайденнаяСтрока = Товары.Найти(СтрокаТЧ.ИдентификаторСтроки, "ИдентификаторСтроки");
Если НайденнаяСтрока = Неопределено Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
СтрШаблон(
НСтр("ru = 'Не удалось определить справку 2 для акцизной марки %1'"),
СтрокаТЧ.Штрихкод));
Иначе
Справка2 = НайденнаяСтрока.Справка2;
КонецЕсли;
КонецЕсли;
Если Справка2 = Неопределено Тогда
Продолжить;
КонецЕсли;
Если СтрокаТЧ.ЧастичноеВыбытие Тогда
Если НоменклатураСЧастичнымВыбытием.Найти(СтрокаТЧ.Номенклатура) = Неопределено Тогда
НоменклатураСЧастичнымВыбытием.Добавить(СтрокаТЧ.Номенклатура);
КонецЕсли;
Если ФорматОбменаМенееV4 Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
СтрШаблон(
НСтр("ru = 'Акцизная марка %1 не может быть обработана по причине: формат обмена %2 не поддерживает частичное выбытие'"),
СтрокаТЧ.Штрихкод,
ФорматОбмена));
Продолжить;
КонецЕсли;
КонецЕсли;
НоваяСтрока = АкцизныеМарки.Добавить();
НоваяСтрока.Справка2 = Справка2;
НоваяСтрока.КодАкцизнойМарки = СтрокаТЧ.Штрихкод;
НоваяСтрока.Номенклатура = СтрокаТЧ.Номенклатура;
НоваяСтрока.Характеристика = СтрокаТЧ.Характеристика;
НоваяСтрока.ЧастичноеВыбытие = СтрокаТЧ.ЧастичноеВыбытие;
Если СтрокаТЧ.Количество = 0 Тогда
НоваяСтрока.Количество = 1;
Иначе
НоваяСтрока.Количество = СтрокаТЧ.Количество;
КонецЕсли;
Если НоваяСтрока.ЧастичноеВыбытие Тогда
Если СтрокаТЧ.Коэффициент = 0 Тогда
НоваяСтрока.Коэффициент = 1;
Иначе
НоваяСтрока.Коэффициент = СтрокаТЧ.ЕмкостьПотребительскойУпаковки / СтрокаТЧ.Коэффициент;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЕстьЧастичноеВыбытие = НоменклатураСЧастичнымВыбытием.Количество() > 0;
ИспользоватьФорматОбменаV4 = Не ФорматОбменаМенееV4 И ЕстьЧастичноеВыбытие;
ТоварыИтоги = Новый ТаблицаЗначений;
ТоварыИтоги.Колонки.Добавить("АлкогольнаяПродукция", Новый ОписаниеТипов("СправочникСсылка.КлассификаторАлкогольнойПродукцииЕГАИС"));
ТоварыИтоги.Колонки.Добавить("Справка2", Новый ОписаниеТипов("СправочникСсылка.Справки2ЕГАИС"));
ТоварыИтоги.Колонки.Добавить("НомерСправки2", Метаданные.ОпределяемыеТипы.СтрокаЕГАИС.Тип);
ТоварыИтоги.Колонки.Добавить("Номенклатура", Метаданные.ОпределяемыеТипы.Номенклатура.Тип);
ТоварыИтоги.Колонки.Добавить("Характеристика", Метаданные.ОпределяемыеТипы.ХарактеристикаНоменклатуры.Тип);
ТоварыИтоги.Колонки.Добавить("Количество", Метаданные.ОпределяемыеТипы.КоличествоЕГАИСНеотрицательное.Тип);
ТоварыИтоги.Колонки.Добавить("Сумма", Метаданные.ОпределяемыеТипы.ДенежнаяСуммаГосИСНеотрицательная.Тип);
Если Не ИспользоватьФорматОбменаV4 Тогда
ОписаниеНоменклатуры = ОбщегоНазначенияИС.ОписаниеНоменклатуры(Товары.ВыгрузитьКолонку("Номенклатура"));
КонецЕсли;
Для Каждого СтрокаТЧ Из Товары Цикл
Если СтрокаТЧ.ПроверятьОбъемДАЛ
И Не ЗначениеЗаполнено(СтрокаТЧ.ОбъемДАЛ) Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, СтрШаблон(НСтр("ru = 'Для номенклатуры в строке %1 не установлен объем в декалитрах.'"), СтрокаТЧ.НомерСтроки));
КонецЕсли;
Если Не ИспользоватьФорматОбменаV4
И НоменклатураСЧастичнымВыбытием.Найти(СтрокаТЧ.Номенклатура) <> Неопределено Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = ТоварыИтоги.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);
Если Не ИспользоватьФорматОбменаV4
И Не СтрокаТЧ.ПроверятьОбъемДАЛ Тогда
ДанныеОписанияНоменклатуры = ОписаниеНоменклатуры[НоваяСтрока.Номенклатура];
Если ДанныеОписанияНоменклатуры <> Неопределено
И ДанныеОписанияНоменклатуры.КоличествоВПотребительскойУпаковке <> 0
И ДанныеОписанияНоменклатуры.КоличествоВПотребительскойУпаковке <> 1 Тогда
Если СтрокаТЧ.ПроверятьОбъемДАЛ Тогда
НоваяСтрока.Количество = Окр(НоваяСтрока.Количество / ДанныеОписанияНоменклатуры.КоличествоВПотребительскойУпаковке, 4);
Иначе
НоваяСтрока.Количество = Окр(НоваяСтрока.Количество / ДанныеОписанияНоменклатуры.КоличествоВПотребительскойУпаковке, 0);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ИспользоватьФорматОбменаV4 Тогда
ТоварыИтоги.Свернуть("АлкогольнаяПродукция,Справка2,НомерСправки2,Номенклатура,Характеристика", "Количество, Сумма");
Иначе
ТоварыИтоги.Свернуть("АлкогольнаяПродукция,Справка2,НомерСправки2", "Количество, Сумма");
КонецЕсли;
#КонецОбласти
#Область АктСписанияИзРегистра1
Если ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V1 Тогда
#Область ФорматОбмена_V1
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActWriteOffType");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", Шапка.Идентификатор, СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActNumber" , СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate" , Шапка.Дата, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "TypeWriteOff", Строка(Шапка.ПричинаСписания), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
Для Каждого СтрокаТЧ Из ТоварыИтоги Цикл
НомерСтроки = Формат(ТоварыИтоги.Индекс(СтрокаТЧ) + 1, "ЧГ=0");
Position = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActWriteOffPositionType");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Identity", НомерСтроки, СообщениеXML, 5);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Quantity", СтрокаТЧ.Количество, СообщениеXML);
Position.InformB = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "InformB");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformB, "BRegId", СтрокаТЧ.НомерСправки2, СообщениеXML);
АктXDTO.Content.Position.Добавить(Position);
КонецЦикла;
#КонецОбласти
ИначеЕсли ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V2 Тогда
#Область ФорматОбмена_V2
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActWriteOffType_v2");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", Шапка.Идентификатор, СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActNumber" , СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate" , Шапка.Дата, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "TypeWriteOff", Строка(Шапка.ПричинаСписания), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
Для Каждого СтрокаТЧ Из ТоварыИтоги Цикл
НомерСтроки = Формат(ТоварыИтоги.Индекс(СтрокаТЧ) + 1, "ЧГ=0");
Position = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActWriteOffPositionType");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Identity", НомерСтроки, СообщениеXML, 5);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Quantity", СтрокаТЧ.Количество, СообщениеXML);
Position.InformF1F2 = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "InformF1F2");
Position.InformF1F2.InformF2 = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position.InformF1F2, "InformF2");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformF1F2.InformF2, "F2RegId", СтрокаТЧ.НомерСправки2, СообщениеXML);
ИнтеграцияЕГАИС.ЗаполнитьВXDTOАкцизныеМаркиПоСправке2_v2(Position, СтрокаТЧ, АкцизныеМарки, "MarkCode", СообщениеXML);
АктXDTO.Content.Position.Добавить(Position);
КонецЦикла;
#КонецОбласти
ИначеЕсли Не ИспользоватьФорматОбменаV4 Тогда
#Область ФорматОбмена_V3
ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V3;
ПространствоИмен = СтрЗаменить(ПространствоИмен, "ActWriteOff_v4", "ActWriteOff_v3");
ИмяТипа = СтрЗаменить(ИмяТипа, "ActWriteOff_v4", "ActWriteOff_v3");
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActWriteOffType_v3");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", Шапка.Идентификатор, СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActNumber" , СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate" , Шапка.Дата, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "TypeWriteOff", Строка(Шапка.ПричинаСписания), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
Для Каждого СтрокаТЧ Из ТоварыИтоги Цикл
НомерСтроки = Формат(ТоварыИтоги.Индекс(СтрокаТЧ) + 1, "ЧГ=0");
Position = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActWriteOffPositionType");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Identity", НомерСтроки, СообщениеXML, 5);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Quantity", СтрокаТЧ.Количество, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "SumSale", СтрокаТЧ.Сумма, СообщениеXML);
Position.InformF1F2 = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "InformF1F2");
Position.InformF1F2.InformF2 = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position.InformF1F2, "InformF2");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformF1F2.InformF2, "F2RegId", СтрокаТЧ.НомерСправки2, СообщениеXML);
ИнтеграцияЕГАИС.ЗаполнитьВXDTOАкцизныеМаркиПоСправке2_v2(Position, СтрокаТЧ, АкцизныеМарки, "amc", СообщениеXML);
АктXDTO.Content.Position.Добавить(Position);
КонецЦикла;
#КонецОбласти
Иначе
#Область ФорматОбмена_V4
ТоварыИтоги.Колонки.Добавить("ЧастичноеВыбытие", Новый ОписаниеТипов("Булево"));
ТоварыИтоги.Колонки.Добавить("АкцизныеМарки", Новый ОписаниеТипов("Массив"));
ТоварыИтоги.Колонки.Добавить("КоличествоЕГАИС", Метаданные.ОпределяемыеТипы.КоличествоЕГАИСНеотрицательное.Тип);
ТоварыИтоги.Колонки.Добавить("СуммаЕГАИС", Метаданные.ОпределяемыеТипы.ДенежнаяСуммаГосИСНеотрицательная.Тип);
Для Каждого СтрокаТЧ Из АкцизныеМарки Цикл
КоличествоКРаспределению = СтрокаТЧ.Количество;
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("ЧастичноеВыбытие", Ложь);
СтруктураПоиска.Вставить("Справка2", СтрокаТЧ.Справка2);
Если ЗначениеЗаполнено(СтрокаТЧ.Номенклатура) Тогда
СтруктураПоиска.Вставить("Номенклатура", СтрокаТЧ.Номенклатура);
СтруктураПоиска.Вставить("Характеристика", СтрокаТЧ.Характеристика);
КонецЕсли;
НайденныеСтроки = ТоварыИтоги.НайтиСтроки(СтруктураПоиска);
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
Если КоличествоКРаспределению = 0 Тогда
Прервать;
КонецЕсли;
Если НайденнаяСтрока.Количество = 0 Тогда
Продолжить;
КонецЕсли;
Количество = Мин(КоличествоКРаспределению, НайденнаяСтрока.Количество);
Если НайденнаяСтрока.Количество = Количество Тогда
Сумма = НайденнаяСтрока.Сумма;
Иначе
Сумма = Окр(НайденнаяСтрока.Сумма / НайденнаяСтрока.Количество * Количество, 2);
КонецЕсли;
НайденнаяСтрока.Количество = НайденнаяСтрока.Количество - Количество;
НайденнаяСтрока.Сумма = НайденнаяСтрока.Сумма - Сумма;
Если СтрокаТЧ.ЧастичноеВыбытие Тогда
НоваяСтрока = ТоварыИтоги.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, НайденнаяСтрока,, "АкцизныеМарки");
НоваяСтрока.ЧастичноеВыбытие = Истина;
НоваяСтрока.Количество = 0;
НоваяСтрока.Сумма = 0;
НоваяСтрока.КоличествоЕГАИС = Окр(Количество * СтрокаТЧ.Коэффициент, 0);
НоваяСтрока.СуммаЕГАИС = Сумма;
НоваяСтрока.АкцизныеМарки.Добавить(СтрокаТЧ.КодАкцизнойМарки);
Если НайденнаяСтрока.Количество = 0
И НайденнаяСтрока.АкцизныеМарки.Количество() = 0 Тогда
ТоварыИтоги.Удалить(НайденнаяСтрока);
КонецЕсли;
Иначе
НайденнаяСтрока.КоличествоЕГАИС = НайденнаяСтрока.КоличествоЕГАИС + 1;
НайденнаяСтрока.СуммаЕГАИС = НайденнаяСтрока.СуммаЕГАИС + Сумма;
НайденнаяСтрока.АкцизныеМарки.Добавить(СтрокаТЧ.КодАкцизнойМарки);
КонецЕсли;
КоличествоКРаспределению = КоличествоКРаспределению - Количество;
КонецЦикла;
КонецЦикла;
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActWriteOffType_v4");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", Шапка.Идентификатор, СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActNumber" , СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate" , Шапка.Дата, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "TypeWriteOff", Строка(Шапка.ПричинаСписания), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
НомерСтроки = 0;
Для Каждого СтрокаТЧ Из ТоварыИтоги Цикл
НомерСтроки = НомерСтроки + 1;
Если СтрокаТЧ.АкцизныеМарки.Количество() = 0 Тогда
Количество = СтрокаТЧ.Количество;
Сумма = СтрокаТЧ.Сумма;
Иначе
Количество = СтрокаТЧ.КоличествоЕГАИС;
Сумма = СтрокаТЧ.СуммаЕГАИС;
КонецЕсли;
Если СтрокаТЧ.ЧастичноеВыбытие Тогда
ИмяПоляКоличество = "volume";
Иначе
ИмяПоляКоличество = "Quantity";
КонецЕсли;
Position = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActWriteOffPositionType");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Identity", Формат(НомерСтроки, "ЧГ=0"), СообщениеXML, 5);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "SumSale", Сумма, СообщениеXML);
Position.writeoffvolume = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "writeoffvolume");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.writeoffvolume, ИмяПоляКоличество, Количество, СообщениеXML);
Position.InformF1F2 = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "InformF1F2");
Position.InformF1F2.InformF2 = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position.InformF1F2, "InformF2");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformF1F2.InformF2, "F2RegId", СтрокаТЧ.НомерСправки2, СообщениеXML);
Если СтрокаТЧ.АкцизныеМарки.Количество() > 0 Тогда
Position.MarkCodeInfo = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "MarkCodeInfo");
Для Каждого АкцизнаяМарка Из СтрокаТЧ.АкцизныеМарки Цикл
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.MarkCodeInfo, "amc", АкцизнаяМарка, СообщениеXML);
КонецЦикла;
КонецЕсли;
АктXDTO.Content.Position.Добавить(Position);
КонецЦикла;
#КонецОбласти
КонецЕсли;
#КонецОбласти
ИначеЕсли Шапка.Операция = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра2 Тогда
#Область ПодготовкаДанных
ТоварыИтоги = Новый ТаблицаЗначений;
ТоварыИтоги.Колонки.Добавить("АлкогольнаяПродукция");
ТоварыИтоги.Колонки.Добавить("Количество");
ТоварыИтоги.Колонки.Добавить("Сумма");
Для Каждого СтрокаТЧ Из Товары Цикл
Если СтрокаТЧ.ПроверятьОбъемДАЛ
И Не ЗначениеЗаполнено(СтрокаТЧ.ОбъемДАЛ) Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, СтрШаблон(НСтр("ru = 'Для номенклатуры в строке %1 не установлен объем в декалитрах.'"), СтрокаТЧ.НомерСтроки));
КонецЕсли;
НоваяСтрока = ТоварыИтоги.Добавить();
НоваяСтрока.АлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
НоваяСтрока.Количество = СтрокаТЧ.Количество;
НоваяСтрока.Сумма = СтрокаТЧ.Сумма;
КонецЦикла;
ТоварыИтоги.Свернуть("АлкогольнаяПродукция", "Количество, Сумма");
АкцизныеМарки = Новый ТаблицаЗначений;
АкцизныеМарки.Колонки.Добавить("АлкогольнаяПродукция");
АкцизныеМарки.Колонки.Добавить("КодАкцизнойМарки");
Для Каждого СтрокаТЧ Из ВложенныеШтрихкодыУпаковок.МаркированныеТовары Цикл
ТекущаяАлкогольнаяПродукция = Неопределено;
Если ЗначениеЗаполнено(СтрокаТЧ.Статус)
И СтрокаТЧ.Статус <> Перечисления.СтатусыАкцизныхМарок.ВНаличии
И СтрокаТЧ.Статус <> Перечисления.СтатусыАкцизныхМарок.ВскрытаяБутылка Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
СтрШаблон(
НСтр("ru = 'Акцизная марка %1 со статусом %2 не может быть списана'"),
СтрокаТЧ.Штрихкод,
СтрокаТЧ.Статус));
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТЧ.АлкогольнаяПродукция) Тогда
ТекущаяАлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
Иначе
НайденнаяСтрока = Товары.Найти(СтрокаТЧ.ИдентификаторСтроки, "ИдентификаторСтроки");
Если НайденнаяСтрока = Неопределено Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
СообщениеXML,
СтрШаблон(
НСтр("ru = 'Не удалось определить алкогольную продукцию для акцизной марки %1'"),
СтрокаТЧ.Штрихкод));
Иначе
ТекущаяАлкогольнаяПродукция = НайденнаяСтрока.АлкогольнаяПродукция;
КонецЕсли;
КонецЕсли;
Если ТекущаяАлкогольнаяПродукция = Неопределено Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = АкцизныеМарки.Добавить();
НоваяСтрока.АлкогольнаяПродукция = ТекущаяАлкогольнаяПродукция;
НоваяСтрока.КодАкцизнойМарки = СтрокаТЧ.Штрихкод;
КонецЦикла;
#КонецОбласти
#Область АктСписанияИзРегистра2
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActWriteOffShopType_v2");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", Шапка.Идентификатор, СообщениеXML, 3);
АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActNumber" , СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate" , Шапка.Дата, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "TypeWriteOff", Строка(Шапка.ПричинаСписания), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
Для Каждого СтрокаТЧ Из ТоварыИтоги Цикл
НомерСтроки = Формат(ТоварыИтоги.Индекс(СтрокаТЧ) + 1, "ЧГ=0");
Position = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActWriteOffShopPositionType");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Identity", НомерСтроки, СообщениеXML, 5);
Position.Product = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "Product");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Quantity", СтрокаТЧ.Количество, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "SumSale", СтрокаТЧ.Сумма, СообщениеXML);
ИнтеграцияЕГАИС.ЗаполнитьВXDTOАлкогольнуюПродукцию_v2(
Position.Product,
АлкогольнаяПродукция.Найти(СтрокаТЧ.АлкогольнаяПродукция, "АлкогольнаяПродукция"),
"Продукция", СообщениеXML);
ПараметрыОтбораАкцизныМарок = Новый Структура;
ПараметрыОтбораАкцизныМарок.Вставить("АлкогольнаяПродукция", СтрокаТЧ.АлкогольнаяПродукция);
ИнтеграцияЕГАИС.ЗаполнитьВXDTOАкцизныеМаркиПоОтбору(Position, ПараметрыОтбораАкцизныМарок, АкцизныеМарки, "MarkCode", СообщенияXML);
АктXDTO.Content.Position.Добавить(Position);
КонецЦикла;
#КонецОбласти
ИначеЕсли Шапка.Операция = Перечисления.ВидыДокументовЕГАИС.АктСписанияИзРегистра3 Тогда
#Область ПодготовкаДанных
ТоварыИтоги = Новый ТаблицаЗначений;
ТоварыИтоги.Колонки.Добавить("АлкогольнаяПродукция");
ТоварыИтоги.Колонки.Добавить("Справка2");
ТоварыИтоги.Колонки.Добавить("НомерСправки2");
Для Каждого СтрокаТЧ Из Товары Цикл
НоваяСтрока = ТоварыИтоги.Добавить();
НоваяСтрока.АлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
НоваяСтрока.Справка2 = СтрокаТЧ.Справка2;
НоваяСтрока.НомерСправки2 = СтрокаТЧ.НомерСправки2;
КонецЦикла;
ТоварыИтоги.Свернуть("АлкогольнаяПродукция, Справка2, НомерСправки2");
АкцизныеМарки = Новый ТаблицаЗначений;
АкцизныеМарки.Колонки.Добавить("Справка2");
АкцизныеМарки.Колонки.Добавить("КодАкцизнойМарки");
Для Каждого СтрокаТЧ Из ВложенныеШтрихкодыУпаковок.МаркированныеТовары Цикл
Справка2 = Неопределено;
Если ЗначениеЗаполнено(СтрокаТЧ.Статус)
И СтрокаТЧ.Статус <> Перечисления.СтатусыАкцизныхМарок.ВНаличии Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, НСтр("ru = 'Некорректный статус.'"));
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТЧ.Справка2) Тогда
Справка2 = СтрокаТЧ.Справка2;
Иначе
НайденнаяСтрока = Товары.Найти(СтрокаТЧ.ИдентификаторСтроки, "ИдентификаторСтроки");
Если НайденнаяСтрока = Неопределено Тогда
ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, НСтр("ru = 'Не удалось найти справку 2'"));
Иначе
Справка2 = НайденнаяСтрока.Справка2;
КонецЕсли;
КонецЕсли;
Если Справка2 = Неопределено Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = АкцизныеМарки.Добавить();
НоваяСтрока.Справка2 = Справка2;
НоваяСтрока.КодАкцизнойМарки = СтрокаТЧ.Штрихкод;
КонецЦикла;
#КонецОбласти
#Область АктСписанияИзРегистра3
АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActUnFixBarCode");
РаботаС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(ПространствоИмен, "ActUnFixBarCodePositionType");
РаботаС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(ПространствоИмен, "RequestRepealAWO");
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(ЗапросXDTO, "ClientId", Шапка.ИдентификаторФСРАР, СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(ЗапросXDTO, "RequestNumber", СокрЛП(Шапка.Номер), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(ЗапросXDTO, "RequestDate", ТекущаяДатаСеанса(), СообщениеXML);
РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(ЗапросXDTO, "AWORegId", Шапка.ИдентификаторЕГАИС, Сообщение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 Тогда
Возврат ОбработатьДанныеШтрихкодаСНомеромИСерией(Форма, ДанныеШтрихкода, ПараметрыСканирования);
ИначеЕсли ДанныеШтрихкода.ВидУпаковки = Перечисления.ВидыУпаковокИС.Потребительская
И ДанныеШтрихкода.МаркируемаяПродукция <> Истина
И ДанныеШтрихкода.ЭтоШтрихкодНоменклатуры Тогда
Возврат ОбработатьДанныеШтрихкодаПотребительскойУпаковки(Форма, ДанныеШтрихкода, ПараметрыСканирования);
КонецЕсли;
Возврат Неопределено;
КонецФункции
Функция ОбработатьДанныеШтрихкодаПотребительскойУпаковки(Форма, ДанныеШтрихкода, ПараметрыСканирования) Экспорт
Результат = ШтрихкодированиеОбщегоНазначенияИС.ИнициализироватьРезультатОбработкиШтрихкода(ПараметрыСканирования, ДанныеШтрихкода);
ПараметрыЗаполнения = АкцизныеМаркиЕГАИС.ПараметрыЗаполненияТоваровИАкцизныхМарок(Форма, Истина, ПараметрыСканирования);
Если Форма.Элементы.Товары.ТекущаяСтрока <> Неопределено Тогда
ПараметрыЗаполнения.ТекущаяСтрока = Форма.Объект.Товары.НайтиПоИдентификатору(Форма.Элементы.Товары.ТекущаяСтрока);
КонецЕсли;
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Номенклатура", ДанныеШтрихкода.Номенклатура);
ПараметрыОтбора.Вставить("Характеристика", ДанныеШтрихкода.Характеристика);
ПараметрыОтбора.Вставить("Серия", ДанныеШтрихкода.Серия);
ЭтоЧастичноеВыбытие = ДанныеШтрихкода.ТипУпаковки = Перечисления.ТипыУпаковок.МаркированныйТовар
И ШтрихкодированиеЕГАИСКлиентСервер.ЭтоЧастичноеВыбытие(ДанныеШтрихкода);
Если Не ЭтоЧастичноеВыбытие
И ДанныеШтрихкода.Коэффициент <> Неопределено
И ДанныеШтрихкода.Коэффициент > 0 Тогда
КоличествоПродукции = ДанныеШтрихкода.Коэффициент;
Иначе
КоличествоПродукции = ДанныеШтрихкода.Количество;
КонецЕсли;
РаспределенноеКоличество = 0;
Пока РаспределенноеКоличество < КоличествоПродукции Цикл
ОсталосьРаспределить = КоличествоПродукции - РаспределенноеКоличество;
РезультатПоиска = АкцизныеМаркиЕГАИС.НайтиСтрокиТоваров(
Форма.Объект.Товары, ПараметрыОтбора,
ДанныеШтрихкода.Справка2, ДанныеШтрихкода.АлкогольнаяПродукция, ПараметрыЗаполнения);
СтрокаТЧ = РезультатПоиска.ПолноеСоответствие;
СтрокиТЧДляУменьшенияКоличества = РезультатПоиска.КЗаполнению;
Если СтрокиТЧДляУменьшенияКоличества = Неопределено
И СтрокаТЧ = Неопределено Тогда
СтрокаТЧ = Форма.Объект.Товары.Добавить();
СтрокаТЧ.Номенклатура = ДанныеШтрихкода.Номенклатура;
СтрокаТЧ.Характеристика = ДанныеШтрихкода.Характеристика;
СтрокаТЧ.Серия = ДанныеШтрихкода.Серия;
СтрокаТЧ.АлкогольнаяПродукция = ДанныеШтрихкода.АлкогольнаяПродукция;
СтрокаТЧ.Справка2 = ДанныеШтрихкода.Справка2;
АкцизныеМаркиЕГАИС.ОбработатьДобавленнуюСтроку(
СтрокаТЧ, ПараметрыЗаполнения,
ОсталосьРаспределить, ДанныеШтрихкода.МаркируемаяПродукция);
РаспределенноеКоличество = РаспределенноеКоличество + ОсталосьРаспределить;
ИначеЕсли СтрокиТЧДляУменьшенияКоличества = Неопределено
И СтрокаТЧ <> Неопределено Тогда
АкцизныеМаркиЕГАИС.ОбработатьИзмененнуюСтроку(
СтрокаТЧ, ПараметрыЗаполнения,
ОсталосьРаспределить, ДанныеШтрихкода.МаркируемаяПродукция);
РаспределенноеКоличество = РаспределенноеКоличество + ОсталосьРаспределить;
Иначе
Для Каждого СтрокаТЧДляУменьшенияКоличества Из СтрокиТЧДляУменьшенияКоличества Цикл
Если СтрокаТЧДляУменьшенияКоличества.Количество >= ОсталосьРаспределить Тогда
КоличествоКОбработке = ОсталосьРаспределить;
Иначе
КоличествоКОбработке = СтрокаТЧДляУменьшенияКоличества.Количество;
КонецЕсли;
Если СтрокаТЧДляУменьшенияКоличества.Количество <= КоличествоКОбработке Тогда
Если СтрокаТЧ = Неопределено Тогда
СтрокаТЧ = СтрокаТЧДляУменьшенияКоличества;
СтрокаТЧ.АлкогольнаяПродукция = ДанныеШтрихкода.АлкогольнаяПродукция;
СтрокаТЧ.Справка2 = ДанныеШтрихкода.Справка2;
Иначе
Форма.Объект.Товары.Удалить(СтрокаТЧДляУменьшенияКоличества);
Индекс = ПараметрыЗаполнения.ИзмененныеСтроки.Найти(СтрокаТЧДляУменьшенияКоличества);
Если Индекс <> Неопределено Тогда
ПараметрыЗаполнения.ИзмененныеСтроки.Удалить(Индекс);
КонецЕсли;
АкцизныеМаркиЕГАИС.ОбработатьИзмененнуюСтроку(
СтрокаТЧ, ПараметрыЗаполнения,
КоличествоКОбработке, ДанныеШтрихкода.МаркируемаяПродукция);
КонецЕсли;
РаспределенноеКоличество = РаспределенноеКоличество + КоличествоКОбработке;
Иначе
СтрокаТЧДляУменьшенияКоличества.Количество = СтрокаТЧДляУменьшенияКоличества.Количество - КоличествоКОбработке;
ПараметрыЗаполнения.ИзмененныеСтроки.Добавить(СтрокаТЧДляУменьшенияКоличества);
Если СтрокаТЧ = Неопределено Тогда
СтрокаТЧ = Форма.Объект.Товары.Вставить(Форма.Объект.Товары.Индекс(СтрокаТЧДляУменьшенияКоличества) + 1);
ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтрокаТЧДляУменьшенияКоличества,,"Количество, КоличествоУпаковок, ИдентификаторСтроки");
СтрокаТЧ.АлкогольнаяПродукция = ДанныеШтрихкода.АлкогольнаяПродукция;
СтрокаТЧ.Справка2 = ДанныеШтрихкода.Справка2;
АкцизныеМаркиЕГАИС.ОбработатьДобавленнуюСтроку(
СтрокаТЧ, ПараметрыЗаполнения,
КоличествоКОбработке, ДанныеШтрихкода.МаркируемаяПродукция);
Иначе
АкцизныеМаркиЕГАИС.ОбработатьИзмененнуюСтроку(
СтрокаТЧ, ПараметрыЗаполнения,
КоличествоКОбработке, ДанныеШтрихкода.МаркируемаяПродукция);
КонецЕсли;
РаспределенноеКоличество = РаспределенноеКоличество + КоличествоКОбработке;
КонецЕсли;
Прервать;
КонецЦикла;
КонецЕсли;
Если Не ЗначениеЗаполнено(СтрокаТЧ.ИдентификаторСтроки) Тогда
СтрокаТЧ.ИдентификаторСтроки = Строка(Новый УникальныйИдентификатор);
КонецЕсли;
КонецЦикла;
Если ДанныеШтрихкода.МаркируемаяПродукция = Истина Тогда
АкцизныеМаркиСтрокаТЧ = Форма.Объект.АкцизныеМарки.Добавить();
АкцизныеМаркиСтрокаТЧ.АкцизнаяМарка = ДанныеШтрихкода.ШтрихкодУпаковки;
АкцизныеМаркиСтрокаТЧ.Количество = 1;
Если ЭтоЧастичноеВыбытие Тогда
АкцизныеМаркиСтрокаТЧ.ЧастичноеВыбытиеКоличество = КоличествоПродукции;
АкцизныеМаркиСтрокаТЧ.ЧастичноеВыбытиеВариантУчета = ДанныеШтрихкода.ЧастичноеВыбытиеВариантУчета;
АкцизныеМаркиСтрокаТЧ.ЧастичноеВыбытиеНоменклатура = ДанныеШтрихкода.Номенклатура;
АкцизныеМаркиСтрокаТЧ.ЧастичноеВыбытиеХарактеристика = ДанныеШтрихкода.Характеристика;
АкцизныеМаркиСтрокаТЧ.ВыбытиеБутылки = ДанныеШтрихкода.ВыбытиеБутылки;
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеШтрихкода.Справка2) Тогда
АкцизныеМаркиСтрокаТЧ.Справка2 = ДанныеШтрихкода.Справка2;
Иначе
АкцизныеМаркиСтрокаТЧ.ИдентификаторСтроки = СтрокаТЧ.ИдентификаторСтроки;
КонецЕсли;
КонецЕсли;
Результат.ДобавленныеСтроки = ПараметрыЗаполнения.ДобавленныеСтроки;
Результат.ИзмененныеСтроки = ПараметрыЗаполнения.ИзмененныеСтроки;
Возврат Результат;
КонецФункции
Функция ОбработатьДанныеШтрихкодаЛогистическойУпаковки(Форма, ДанныеШтрихкода, ВложенныеШтрихкоды, ПараметрыСканирования) Экспорт
Результат = ШтрихкодированиеОбщегоНазначенияИС.ИнициализироватьРезультатОбработкиШтрихкода(ПараметрыСканирования, ДанныеШтрихкода);
ПараметрыЗаполнения = АкцизныеМаркиЕГАИС.ПараметрыЗаполненияТоваровИАкцизныхМарок(Форма, Истина, ПараметрыСканирования);
Если Форма.Элементы.Товары.ТекущаяСтрока <> Неопределено Тогда
ПараметрыЗаполнения.ТекущаяСтрока = Форма.Объект.Товары.НайтиПоИдентификатору(Форма.Элементы.Товары.ТекущаяСтрока);
КонецЕсли;
АкцизныеМаркиЕГАИС.ЗаполнитьТоварыИАкцизныеМарки(Форма.Объект, ВложенныеШтрихкоды.ДеревоУпаковок, ПараметрыЗаполнения);
Результат.ИзмененныеСтроки = ПараметрыЗаполнения.ИзмененныеСтроки;
Результат.ДобавленныеСтроки = ПараметрыЗаполнения.ДобавленныеСтроки;
Возврат Результат;
КонецФункции
Функция ОбработатьДанныеШтрихкодаСНомеромИСерией(Форма, ДанныеШтрихкода, ПараметрыСканирования)
Результат = ШтрихкодированиеОбщегоНазначенияИС.ИнициализироватьРезультатОбработкиШтрихкода(ПараметрыСканирования, ДанныеШтрихкода);
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Номенклатура", ДанныеШтрихкода.Номенклатура);
ПараметрыОтбора.Вставить("Характеристика", ДанныеШтрихкода.Характеристика);
ПараметрыОтбора.Вставить("АлкогольнаяПродукция", ДанныеШтрихкода.АлкогольнаяПродукция);
ПараметрыОтбора.Вставить("Серия", ДанныеШтрихкода.Серия);
ПараметрыОтбора.Вставить("Справка2", ДанныеШтрихкода.Справка2);
МассивСтрок = Форма.Объект.Товары.НайтиСтроки(ПараметрыОтбора);
Если МассивСтрок.Количество() > 0 Тогда
СтрокаТЧ = МассивСтрок[0];
Иначе
СтрокаТЧ = Неопределено;
КонецЕсли;
Если СтрокаТЧ <> Неопределено Тогда
СтрокаТЧ.Количество = СтрокаТЧ.Количество + 1;
Результат.ИзмененныеСтроки.Добавить(СтрокаТЧ);
Иначе
СтрокаТЧ = Форма.Объект.Товары.Добавить();
СтрокаТЧ.ИдентификаторСтроки = Строка(Новый УникальныйИдентификатор);
СтрокаТЧ.АлкогольнаяПродукция = ДанныеШтрихкода.АлкогольнаяПродукция;
СтрокаТЧ.Номенклатура = ДанныеШтрихкода.Номенклатура;
СтрокаТЧ.Характеристика = ДанныеШтрихкода.Характеристика;
СтрокаТЧ.Серия = ДанныеШтрихкода.Серия;
СтрокаТЧ.Справка2 = ДанныеШтрихкода.Справка2;
СтрокаТЧ.КоличествоУпаковок = 1;
Результат.ДобавленныеСтроки.Добавить(СтрокаТЧ);
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область ЗавершениеПроверкиИПодбораМаркируемойПродукции
Процедура ОтразитьРезультатыПроверкиИПодбора(ПараметрыОкончанияПроверки) Экспорт
ТаблицаНеМаркируемойПродукции = ПараметрыОкончанияПроверки.ТаблицаНеМаркируемойПродукции;
ДеревоМаркируемойПродукции = ПараметрыОкончанияПроверки.ДеревоМаркируемойПродукции;
ДокументОбъект = ПараметрыОкончанияПроверки.ПроверяемыйДокумент.ПолучитьОбъект();
ДокументОбъект.СтатусПроверкиИПодбора = Перечисления.СтатусыПроверкиИПодбораИС.Завершено;
ОчиститьДанныеПередЗаполнением(ДокументОбъект);
ПараметрыЗаполнения = АкцизныеМаркиЕГАИС.ПараметрыЗаполненияТоваровИАкцизныхМарок(ДокументОбъект, Ложь);
АкцизныеМаркиЕГАИС.ЗаполнитьТоварыИАкцизныеМарки(
ДокументОбъект, ДеревоМаркируемойПродукции, ПараметрыЗаполнения);
АкцизныеМаркиЕГАИС.ЗаполнитьНеМаркируемыеТовары(
ДокументОбъект, ТаблицаНеМаркируемойПродукции, ПараметрыЗаполнения);
ОбработатьСтрокиТЧ(ДокументОбъект, ПараметрыЗаполнения);
СтруктураПоискаПустыхСтрок = Новый Структура("Количество", 0);
ПустыеСтроки = ДокументОбъект.Товары.НайтиСтроки(СтруктураПоискаПустыхСтрок);
Для Каждого ПустаяСтрока Из ПустыеСтроки Цикл
ДокументОбъект.Товары.Удалить(ПустаяСтрока);
КонецЦикла;
Если ДокументОбъект.Проведен Тогда
Если ДокументОбъект.ПроверитьЗаполнение() Тогда
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Иначе
ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЕсли;
Иначе
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
КонецПроцедуры
Процедура ОчиститьДанныеПередЗаполнением(ДокументОбъект)
ДокументОбъект.АкцизныеМарки.Очистить();
ИменаКолонокДляОчистки = Новый Массив();
ИменаКолонокДляОчистки.Добавить("Количество");
ИменаКолонокДляОчистки.Добавить("КоличествоУпаковок");
Для Каждого СтрокаТовары Из ДокументОбъект.Товары Цикл
Для Каждого ИмяКолонки Из ИменаКолонокДляОчистки Цикл
СтрокаТовары[ИмяКолонки] = 0;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ОбработатьСтрокиТЧ(ДокументОбъект, ПараметрыЗаполнения)
ПараметрыУказанияСерий = ПараметрыУказанияСерий(ДокументОбъект);
ПустойСклад = ОбщегоНазначенияИС.ПустоеЗначениеОпределяемогоТипа("Склад");
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковок");
СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", Новый Структура("Склад, ПараметрыУказанияСерий", ПустойСклад, ПараметрыУказанияСерий));
СтруктураДействий.Вставить("ЗаполнитьАлкогольнуюПродукцию", ПараметрыЗаполнения);
Для Каждого СтрокаТЧ Из ПараметрыЗаполнения.ДобавленныеСтроки Цикл
ИнтеграцияИСПереопределяемый.ОбработатьСтрокуТабличнойЧасти(СтрокаТЧ, СтруктураДействий, ДокументОбъект);
КонецЦикла;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковок");
СтруктураДействий.Вставить("ПересчитатьСумму");
Для Каждого СтрокаТЧ Из ПараметрыЗаполнения.ИзмененныеСтроки Цикл
ИнтеграцияИСПереопределяемый.ОбработатьСтрокуТабличнойЧасти(СтрокаТЧ, СтруктураДействий, ДокументОбъект);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область Проведение
Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт
ИсточникиДанных = Новый Соответствие;
Возврат ИсточникиДанных;
КонецФункции
Процедура ИнициализироватьДанныеДокумента(ДокументСсылка, ДополнительныеСвойства, Регистры = Неопределено) Экспорт
Запрос = Новый Запрос;
ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
ТекстыЗапроса = Новый СписокЗначений;
ТекстЗапросаТаблицаОстаткиАлкогольнойПродукцииЕГАИС(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры);
ИнтеграцияИС.ИнициализироватьТаблицыДляДвижений(Запрос, ТекстыЗапроса, ДополнительныеСвойства.ТаблицыДляДвижений, Истина);
КонецПроцедуры
Процедура ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка)
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеШапки.Дата КАК Период,
| ДанныеШапки.Ссылка КАК Ссылка,
| ДанныеШапки.ОрганизацияЕГАИС КАК ОрганизацияЕГАИС,
| СтатусыДокументовЕГАИС.Статус КАК СтатусОбработки,
| ДанныеШапки.ДатаРегистрацииДвижений КАК ДатаРегистрацииДвижений,
| ДанныеШапки.ВидДокумента КАК ВидДокумента
|ИЗ
| Документ.АктСписанияЕГАИС КАК ДанныеШапки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыДокументовЕГАИС КАК СтатусыДокументовЕГАИС
| ПО СтатусыДокументовЕГАИС.Документ = ДанныеШапки.Ссылка
|ГДЕ
| ДанныеШапки.Ссылка = &Ссылка";
Реквизиты = Запрос.Выполнить().Выбрать();
Реквизиты.Следующий();
Запрос.УстановитьПараметр("Период", Реквизиты.Период);
Запрос.УстановитьПараметр("Ссылка", Реквизиты.Ссылка);
Запрос.УстановитьПараметр("УдалитьСтатусОбработки", Реквизиты.СтатусОбработки);
Запрос.УстановитьПараметр("ОрганизацияЕГАИС", Реквизиты.ОрганизацияЕГАИС);
Запрос.УстановитьПараметр("ДатаРегистрацииДвижений", Реквизиты.ДатаРегистрацииДвижений);
Запрос.УстановитьПараметр("ВидДокумента", Реквизиты.ВидДокумента);
Запрос.УстановитьПараметр("СтатусыДвиженийСвободныйОстаток", СтатусыДвиженийСвободныйОстаток());
Запрос.УстановитьПараметр("СтатусыДвиженийКоличество", СтатусыДвиженийКоличество());
КонецПроцедуры
Функция ТекстЗапросаТаблицаОстаткиАлкогольнойПродукцииЕГАИС(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ОстаткиАлкогольнойПродукцииЕГАИС";
Если НЕ ИнтеграцияИС.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
Если НЕ ИнтеграцияЕГАИС.ЕстьТаблицаЗапроса("ВТТовары", ТекстыЗапроса) Тогда
ТекстЗапросаВТТовары(Запрос, ТекстыЗапроса);
КонецЕсли;
Если НЕ ИнтеграцияЕГАИС.ЕстьТаблицаЗапроса("ВТКоэффициентыПересчетаВЕдиницыЕГАИС", ТекстыЗапроса) Тогда
ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС(Запрос, ТекстыЗапроса);
КонецЕсли;
Если НЕ ИнтеграцияЕГАИС.ЕстьТаблицаЗапроса("ВТТаблицаТоварыСгруппированные", ТекстыЗапроса) Тогда
ТекстЗапросаВТТаблицаТоварыСгруппированные(Запрос, ТекстыЗапроса);
КонецЕсли;
Если НЕ ИнтеграцияЕГАИС.ЕстьТаблицаЗапроса("ВТАкцизныеМарки", ТекстыЗапроса) Тогда
ТекстЗапросаВТАкцизныеМарки(Запрос, ТекстыЗапроса);
КонецЕсли;
Если НЕ ИнтеграцияЕГАИС.ЕстьТаблицаЗапроса("ВТВскрытыеБутылки", ТекстыЗапроса) Тогда
ТекстЗапросаВТВскрытыеБутылки(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) КАК ВидДвижения,
| &Период КАК Период,
| &ОрганизацияЕГАИС КАК ОрганизацияЕГАИС,
| 0 КАК НомерСтроки,
| ТаблицаТовары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| ТаблицаТовары.Справка2 КАК Справка2,
| ВЫБОР
| КОГДА &УдалитьСтатусОбработки В(&СтатусыДвиженийСвободныйОстаток)
| ТОГДА
| ВЫБОР
| КОГДА ЕСТЬNULL(ОписаниеНоменклатуры.КоличествоВПотребительскойУпаковке, 0) > 0
| ТОГДА ВЫРАЗИТЬ((ТаблицаТовары.Количество - ЕСТЬNULL(АкцизныеМарки.Количество, 0)) /
| ОписаниеНоменклатуры.КоличествоВПотребительскойУпаковке КАК ЧИСЛО(12, 0))
| ИНАЧЕ ТаблицаТовары.Количество - ЕСТЬNULL(АкцизныеМарки.Количество, 0)
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ КАК СвободныйОстаток,
| ВЫБОР
| КОГДА &УдалитьСтатусОбработки В(&СтатусыДвиженийКоличество)
| ТОГДА
| ВЫБОР
| КОГДА ЕСТЬNULL(ОписаниеНоменклатуры.КоличествоВПотребительскойУпаковке, 0) > 0
| ТОГДА ВЫРАЗИТЬ((ТаблицаТовары.Количество - ЕСТЬNULL(АкцизныеМарки.Количество, 0)) /
| ОписаниеНоменклатуры.КоличествоВПотребительскойУпаковке КАК ЧИСЛО(12, 0))
| ИНАЧЕ ТаблицаТовары.Количество - ЕСТЬNULL(АкцизныеМарки.Количество, 0)
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ КАК Количество
|ИЗ
| ВТТаблицаТоварыСгруппированные КАК ТаблицаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ ВТАкцизныеМарки КАК АкцизныеМарки
| ПО ТаблицаТовары.Ссылка = АкцизныеМарки.Ссылка
| И ТаблицаТовары.Номенклатура = АкцизныеМарки.Номенклатура
| И ТаблицаТовары.Характеристика = АкцизныеМарки.Характеристика
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОписаниеНоменклатурыИС КАК ОписаниеНоменклатуры
| ПО ТаблицаТовары.Номенклатура = ОписаниеНоменклатуры.Номенклатура
| И ТаблицаТовары.АлкогольнаяПродукция.ТипПродукции <> ЗНАЧЕНИЕ(Перечисление.ТипыПродукцииЕГАИС.Неупакованная)
|ГДЕ
| &ВидДокумента = ЗНАЧЕНИЕ(Перечисление.ВидыДокументовЕГАИС.АктСписанияИзРегистра1)
| И (&УдалитьСтатусОбработки В(&СтатусыДвиженийСвободныйОстаток) ИЛИ &УдалитьСтатусОбработки В(&СтатусыДвиженийКоличество))
| И ТаблицаТовары.Количество - ЕСТЬNULL(АкцизныеМарки.Количество, 0) <> 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) КАК ВидДвижения,
| &Период КАК Период,
| &ОрганизацияЕГАИС КАК ОрганизацияЕГАИС,
| 0 КАК НомерСтроки,
| ТаблицаТовары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| ТаблицаТовары.Справка2 КАК Справка2,
| ВЫБОР
| КОГДА &УдалитьСтатусОбработки В(&СтатусыДвиженийСвободныйОстаток)
| ТОГДА ТаблицаТовары.Количество
| ИНАЧЕ 0
| КОНЕЦ КАК СвободныйОстаток,
| ВЫБОР
| КОГДА &УдалитьСтатусОбработки В(&СтатусыДвиженийКоличество)
| ТОГДА ТаблицаТовары.Количество
| ИНАЧЕ 0
| КОНЕЦ КАК Количество
|ИЗ
| ВТВскрытыеБутылки КАК ТаблицаТовары
|ГДЕ
| &ВидДокумента = ЗНАЧЕНИЕ(Перечисление.ВидыДокументовЕГАИС.АктСписанияИзРегистра1)
| И (&УдалитьСтатусОбработки В(&СтатусыДвиженийСвободныйОстаток) ИЛИ &УдалитьСтатусОбработки В(&СтатусыДвиженийКоличество))";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВТТовары(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВТТовары";
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК Ссылка,
| ТаблицаТовары.НомерСтроки КАК НомерСтроки,
| ТаблицаТовары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Серия КАК Серия,
| ТаблицаТовары.Количество КАК Количество,
| ТаблицаТовары.Справка2 КАК Справка2
|ПОМЕСТИТЬ ВТТовары
|ИЗ
| Документ.АктСписанияЕГАИС.Товары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.Ссылка = &Ссылка";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВТКоэффициентыПересчетаВЕдиницыЕГАИС";
ТекстЗапроса = ИнтеграцияЕГАИС.ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС("ВТТовары", ИмяРегистра);
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВТТаблицаТоварыСгруппированные(Запрос, ТекстыЗапроса)
ИмяТаблицы = "ВТТаблицаТоварыСгруппированные";
ТекстЗапроса =
"ВЫБРАТЬ
| Товары.Ссылка КАК Ссылка,
| Товары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| Товары.Справка2 КАК Справка2,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| СУММА(Товары.Количество * ЕСТЬNULL(ЕдиницыЕГАИС.Коэффициент, 1)) КАК Количество
|ПОМЕСТИТЬ ВТТаблицаТоварыСгруппированные
|ИЗ
| ВТТовары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКоэффициентыПересчетаВЕдиницыЕГАИС КАК ЕдиницыЕГАИС
| ПО ЕдиницыЕГАИС.АлкогольнаяПродукция = Товары.АлкогольнаяПродукция
| И ЕдиницыЕГАИС.Номенклатура = Товары.Номенклатура
| И ЕдиницыЕГАИС.Характеристика = Товары.Характеристика
| И ЕдиницыЕГАИС.Серия = Товары.Серия
|СГРУППИРОВАТЬ ПО
| Товары.Ссылка,
| Товары.АлкогольнаяПродукция,
| Товары.Справка2,
| Товары.Номенклатура,
| Товары.Характеристика";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяТаблицы);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВТАкцизныеМарки(Запрос, ТекстыЗапроса)
ИмяТаблицы = "ВТАкцизныеМарки";
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК Ссылка,
| АктСписанияАкцизныеМарки.ЧастичноеВыбытиеНоменклатура КАК Номенклатура,
| АктСписанияАкцизныеМарки.ЧастичноеВыбытиеХарактеристика КАК Характеристика,
| АктСписанияАкцизныеМарки.Справка2 КАК Справка2,
| СУММА(АктСписанияАкцизныеМарки.ЧастичноеВыбытиеКоличество) КАК Количество
|ПОМЕСТИТЬ ВТАкцизныеМарки
|ИЗ
| Документ.АктСписанияЕГАИС КАК ТаблицаТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АктСписанияЕГАИС.АкцизныеМарки КАК АктСписанияАкцизныеМарки
| ПО ТаблицаТовары.Ссылка = АктСписанияАкцизныеМарки.Ссылка
|ГДЕ
| ТаблицаТовары.Ссылка = &Ссылка
| И АктСписанияАкцизныеМарки.ЧастичноеВыбытиеВариантУчета <> ЗНАЧЕНИЕ(Перечисление.ВариантыУчетаЧастичногоВыбытияИС.ПустаяСсылка)
|СГРУППИРОВАТЬ ПО
| ТаблицаТовары.Ссылка,
| АктСписанияАкцизныеМарки.ЧастичноеВыбытиеНоменклатура,
| АктСписанияАкцизныеМарки.ЧастичноеВыбытиеХарактеристика,
| АктСписанияАкцизныеМарки.Справка2";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяТаблицы);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВТВскрытыеБутылки(Запрос, ТекстыЗапроса)
ИмяТаблицы = "ВТВскрытыеБутылки";
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК Ссылка,
| АктСписанияАкцизныеМарки.Справка2.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| АктСписанияАкцизныеМарки.Справка2 КАК Справка2,
| СУММА(1) КАК Количество
|ПОМЕСТИТЬ ВТВскрытыеБутылки
|ИЗ
| Документ.АктСписанияЕГАИС КАК ТаблицаТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АктСписанияЕГАИС.АкцизныеМарки КАК АктСписанияАкцизныеМарки
| ПО ТаблицаТовары.Ссылка = АктСписанияАкцизныеМарки.Ссылка
|ГДЕ
| ТаблицаТовары.Ссылка = &Ссылка
| И АктСписанияАкцизныеМарки.ВыбытиеБутылки
| И АктСписанияАкцизныеМарки.ЧастичноеВыбытиеВариантУчета <> ЗНАЧЕНИЕ(Перечисление.ВариантыУчетаЧастичногоВыбытияИС.ПустаяСсылка)
|СГРУППИРОВАТЬ ПО
| ТаблицаТовары.Ссылка,
| АктСписанияАкцизныеМарки.Справка2.АлкогольнаяПродукция,
| АктСписанияАкцизныеМарки.Справка2";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяТаблицы);
Возврат ТекстЗапроса;
КонецФункции
Функция СтатусыДвиженийСвободныйОстаток()
Результат = Новый Массив;
Результат.Добавить(Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.КПередаче);
Результат.Добавить(Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.ПереданВУТМ);
Результат.Добавить(Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.ПроведенЕГАИС);
Возврат Результат;
КонецФункции
Функция СтатусыДвиженийКоличество()
Результат = Новый Массив;
Результат.Добавить(Перечисления.СтатусыОбработкиАктаСписанияЕГАИС.ПроведенЕГАИС);
Возврат Результат;
КонецФункции
Функция ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ДвиженияСерийТоваров";
Если Не ИнтеграцияИС.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
ТекстЗапроса = "";
ИнтеграцияЕГАИСПереопределяемый.ПриЗаполненииТекстаЗапросаДвижениеСерийТоваров(ТекстЗапроса, Метаданные.Документы.АктСписанияЕГАИС.Имя);
Если ЗначениеЗаполнено(ТекстЗапроса) Тогда
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#Область Серии
Функция ИменаРеквизитовДляЗаполненияПараметровУказанияСерий() Экспорт
Возврат ИнтеграцияИС.ИменаРеквизитовДляЗаполненияПараметровУказанияСерий(Метаданные.Документы.АктСписанияЕГАИС);
КонецФункции
Функция ПараметрыУказанияСерий(Объект) Экспорт
Возврат ИнтеграцияИС.ПараметрыУказанияСерий(Метаданные.Документы.АктСписанияЕГАИС, Объект);
КонецФункции
Функция ТекстЗапросаЗаполненияСтатусовУказанияСерий(ПараметрыУказанияСерий) Экспорт
Возврат ИнтеграцияИС.ТекстЗапросаЗаполненияСтатусовУказанияСерий(Метаданные.Документы.АктСписанияЕГАИС, ПараметрыУказанияСерий);
КонецФункции
#КонецОбласти
#Область Отчеты
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
ИнтеграцияИСПереопределяемый.ДобавитьКомандуСтруктураПодчиненности(КомандыОтчетов);
ИнтеграцияИСПереопределяемый.ДобавитьКомандуДвиженияДокумента(КомандыОтчетов);
КомандаОтчет = Отчеты.АнализРасхожденийПриДвиженииАлкогольнойПродукции.ДобавитьКомандуОтчета(КомандыОтчетов);
Если КомандаОтчет <> Неопределено Тогда
КомандаОтчет.Важность = "Обычное";
КомандаОтчет.Порядок = 1;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Печать
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
Возврат;
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Возврат;
КонецПроцедуры
#КонецОбласти
#Область ОбновлениеИнформационнойБазы
Функция АдаптированныйТекстЗапросаДвиженийПоРегистру(ИмяРегистра) Экспорт
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений();
ТекстыЗапросаВременныхТаблиц = Новый Массив;
ПолноеИмяДокумента = "Документ.АктСписанияЕГАИС";
Если ИмяРегистра = "ОстаткиАлкогольнойПродукцииЕГАИС" Тогда
ТекстЗапроса = ТекстЗапросаТаблицаОстаткиАлкогольнойПродукцииЕГАИС(Запрос, ТекстыЗапроса, ИмяРегистра);
ТекстыЗапросаВременныхТаблиц.Добавить(Новый Структура("Ключ, Значение", "ВТТаблицаТоварыСгруппированные",
ТекстЗапросаВТТаблицаТоварыСгруппированные(Запрос, ТекстыЗапроса)));
ТекстыЗапросаВременныхТаблиц.Добавить(Новый Структура("Ключ, Значение", "ВТАкцизныеМарки",
ТекстЗапросаВТАкцизныеМарки(Запрос, ТекстыЗапроса)));
ТекстыЗапросаВременныхТаблиц.Добавить(Новый Структура("Ключ, Значение", "ВТВскрытыеБутылки",
ТекстЗапросаВТВскрытыеБутылки(Запрос, ТекстыЗапроса)));
ТекстыЗапросаВременныхТаблиц.Добавить(Новый Структура("Ключ, Значение", "ВТКоэффициентыПересчетаВЕдиницыЕГАИС",
ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС(Запрос, ТекстыЗапроса)));
ТекстыЗапросаВременныхТаблиц.Добавить(Новый Структура("Ключ, Значение", "ВТТовары",
ТекстЗапросаВТТовары(Запрос, ТекстыЗапроса)));
СинонимТаблицыДокумента = "ТаблицаТовары";
Иначе
ТекстИсключения = НСтр("ru = 'В документе %ПолноеИмяДокумента% не реализована адаптация текста запроса формирования движений по регистру %ИмяРегистра%.'");
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ПолноеИмяДокумента%", ПолноеИмяДокумента);
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ИмяРегистра%", ИмяРегистра);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
ПереопределениеРасчетаПараметров = Новый Структура;
Результат = ОбновлениеИнформационнойБазыЕГАИС.РезультатАдаптацииЗапроса();
Результат.ЗначенияПараметров.Вставить("СтатусыДвиженийСвободныйОстаток", СтатусыДвиженийСвободныйОстаток());
Результат.ЗначенияПараметров.Вставить("СтатусыДвиженийКоличество", СтатусыДвиженийКоличество());
Результат.ТекстЗапроса = ОбновлениеИнформационнойБазыЕГАИС.АдаптироватьЗапросМеханизмаПроведения(
ТекстЗапроса,
ПолноеИмяДокумента,
СинонимТаблицыДокумента,
ПереопределениеРасчетаПараметров,
ТекстыЗапросаВременныхТаблиц);
Возврат Результат;
КонецФункции
Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| АкцизныеМарки.Ссылка КАК Ссылка
|ИЗ
| Документ.АктСписанияЕГАИС.АкцизныеМарки КАК АкцизныеМарки
|ГДЕ
| АкцизныеМарки.КодАкцизнойМарки <> """"
| И АкцизныеМарки.ШтрихкодУпаковки = ЗНАЧЕНИЕ(Справочник.ШтрихкодыУпаковокТоваров.ПустаяСсылка)";
МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок);
КонецПроцедуры
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
ПолноеИмяДокумента = "Документ.АктСписанияЕГАИС";
МетаданныеДокумента = Метаданные.Документы.АктСписанияЕГАИС;
Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ПолноеИмяДокумента);
Пока Выборка.Следующий() Цикл
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяДокумента);
ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
Если ДокументОбъект = Неопределено Тогда
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
ЗафиксироватьТранзакцию();
Продолжить;
КонецЕсли;
ОбработкаЗавершена = Истина;
Для каждого ТекСтрока Из ДокументОбъект.АкцизныеМарки Цикл
Если ЗначениеЗаполнено(ТекСтрока.КодАкцизнойМарки) Тогда
ТекСтрока.АкцизнаяМарка = Справочники.ШтрихкодыУпаковокТоваров.ПолучитьПоЗначениюШтрихкода(ТекСтрока.КодАкцизнойМарки);
ТекСтрока.Количество = 1;
Если НЕ ЗначениеЗаполнено(ТекСтрока.АкцизнаяМарка) Тогда
ОбработкаЗавершена = Ложь;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ОбработкаЗавершена Тогда
ОбновлениеИнформационнойБазы.ЗаписатьДанные(ДокументОбъект);
ЗафиксироватьТранзакцию();
Иначе
ОтменитьТранзакцию();
КонецЕсли;
Исключение
ОтменитьТранзакцию();
ТекстСообщения = НСтр("ru = 'Не удалось обработать документ: %Ссылка% по причине: %Причина%'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", Выборка.Ссылка);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Предупреждение,
МетаданныеДокумента,
Выборка.Ссылка,
ТекстСообщения);
ВызватьИсключение;
КонецПопытки;
КонецЦикла;
Параметры.ОбработкаЗавершена = Не ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки(Параметры.Очередь, ПолноеИмяДокумента);
КонецПроцедуры
Процедура ЗарегистрироватьДанныеКОбработкеДляГенерацииАкцизныхМарок(Параметры) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| АкцизныеМарки.Ссылка
|ИЗ
| Документ.АктСписанияЕГАИС.АкцизныеМарки КАК АкцизныеМарки
|ГДЕ
| АкцизныеМарки.КодАкцизнойМарки <> """"
|";
МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок);
КонецПроцедуры
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсиюГенерацияАкцизныхМарок(Параметры) Экспорт
ПолноеИмяДокумента = "Документ.АктСписанияЕГАИС";
МетаданныеДокумента = Метаданные.Документы.АктСписанияЕГАИС;
Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ПолноеИмяДокумента);
Пока Выборка.Следующий() Цикл
НачатьТранзакцию();
Попытка
ОбработкаСсылкиНачата = Ложь;
ОбработкаСсылкиЗавершена = Ложь;
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяДокумента);
ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
Блокировка.Заблокировать();
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
Если ДокументОбъект = Неопределено Тогда
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
ЗафиксироватьТранзакцию();
Продолжить;
КонецЕсли;
ОбработкаСсылкиНачата = Истина;
Для каждого ТекСтрока Из ДокументОбъект.АкцизныеМарки Цикл
Если ЗначениеЗаполнено(ТекСтрока.КодАкцизнойМарки) Тогда
СтрокаТовар = ДокументОбъект.Товары.Найти(ТекСтрока.ИдентификаторСтроки, "ИдентификаторСтроки");
Если СтрокаТовар = Неопределено Тогда
Продолжить;
КонецЕсли;
ШтрихкодированиеЕГАИС.ПолучитьСгенерироватьАкцизнуюМарку(ТекСтрока.КодАкцизнойМарки,
СтрокаТовар.Номенклатура,
СтрокаТовар.Характеристика,,
Истина);
КонецЕсли;
КонецЦикла;
ОбработкаСсылкиЗавершена = Истина;
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
Если НЕ ОбработкаСсылкиНачата Тогда
ТекстСообщения = НСтр("ru = 'Не удалось заблокировать документ: %Ссылка% по причине: %Причина%'",
ОбщегоНазначения.КодОсновногоЯзыка());
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", Выборка.Ссылка);
ИначеЕсли НЕ ОбработкаСсылкиЗавершена Тогда
ТекстСообщения = НСтр("ru = 'Не удалось сгенерировать акцизную марку: %Ключ% по причине: %Причина%'",
ОбщегоНазначения.КодОсновногоЯзыка());
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ключ%", ТекСтрока.КодАкцизнойМарки);
Иначе
ТекстСообщения = НСтр("ru = 'Не удалось обработать документ: %Ссылка% по причине: %Причина%'",
ОбщегоНазначения.КодОсновногоЯзыка());
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", Выборка.Ссылка);
КонецЕсли;
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Предупреждение,
МетаданныеДокумента,
Выборка.Ссылка,
ТекстСообщения);
Продолжить;
КонецПопытки;
КонецЦикла;
Параметры.ОбработкаЗавершена = Не ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки(Параметры.Очередь, ПолноеИмяДокумента);
КонецПроцедуры
#КонецОбласти
#Область Прочее
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
Возврат;
КонецПроцедуры
Функция ТекстЗапросаПродукцииДляПроверкиЦенВСпискеДокументов() Экспорт
ТекстЗапроса = "ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Серия КАК Серия,
| Товары.Цена КАК Цена,
| Товары.ОрганизацияЕГАИС КАК ОрганизацияЕГАИС,
| Товары.ИННКонтрагента КАК ИННКонтрагента,
| Товары.КППКонтрагента КАК КППКонтрагента,
| Товары.КоэффициентЕГАИС КАК КоэффициентЕГАИС
|ИЗ
| (ВЫБРАТЬ
| ДокументТовары.Номенклатура КАК Номенклатура,
| ДокументТовары.Характеристика КАК Характеристика,
| ДокументТовары.Серия КАК Серия,
| ДокументТовары.Цена КАК Цена,
| ДокументТовары.Ссылка.ОрганизацияЕГАИС КАК ОрганизацияЕГАИС,
| ДокументТовары.Ссылка.ОрганизацияЕГАИС.ИНН КАК ИННКонтрагента,
| ДокументТовары.Ссылка.ОрганизацияЕГАИС.КПП КАК КППКонтрагента,
| ВЫБОР
| КОГДА ДокументТовары.КоличествоУпаковок > 0
| ТОГДА ДокументТовары.Количество / ДокументТовары.КоличествоУпаковок
| ИНАЧЕ 1
| КОНЕЦ КАК КоэффициентЕГАИС
| ИЗ
| Документ.АктСписанияЕГАИС.Товары КАК ДокументТовары
| ГДЕ
| ДокументТовары.Ссылка В(&СписокДокументов)
| И ДокументТовары.Ссылка.ПричинаСписания = &ПричинаСписания) КАК Товары
|
|СГРУППИРОВАТЬ ПО
| Товары.Номенклатура,
| Товары.Характеристика,
| Товары.Серия,
| Товары.ИННКонтрагента,
| Товары.ОрганизацияЕГАИС,
| Товары.КППКонтрагента,
| Товары.Цена,
| Товары.КоэффициентЕГАИС";
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецЕсли