#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область ДействияПриОбменеЕГАИС
Функция СтатусПослеПодготовкиКПередачеДанных(ДокументСсылка, Операция) Экспорт
Возврат ЧекиЕГАИС.СтатусПослеПодготовкиКПередачеДанных(ДокументСсылка, Операция);
КонецФункции
Функция СтатусПослеПередачиДанных(ДокументСсылка, Операция, СтатусОбработки) Экспорт
Возврат ЧекиЕГАИС.СтатусПослеПередачиДанных(ДокументСсылка, Операция, СтатусОбработки);
КонецФункции
Функция СтатусПослеПолученияДанных(ДокументСсылка, Операция, ДополнительныеПараметры = Неопределено) Экспорт
Возврат ЧекиЕГАИС.СтатусПослеПолученияДанных(ДокументСсылка, Операция, ДополнительныеПараметры);
КонецФункции
Функция ОбновитьСтатусПослеПодготовкиКПередачеДанных(ДокументСсылка, Операция, ДополнительныеПараметры = Неопределено) Экспорт
Возврат ЧекиЕГАИС.ОбновитьСтатусПослеПодготовкиКПередачеДанных(ДокументСсылка, Операция, ДополнительныеПараметры);
КонецФункции
Функция ОбновитьСтатусПослеПередачиДанных(ДокументСсылка, Операция, СтатусОбработки, ДополнительныеПараметры = Неопределено) Экспорт
Возврат ЧекиЕГАИС.ОбновитьСтатусПослеПередачиДанных(ДокументСсылка, Операция, СтатусОбработки, ДополнительныеПараметры);
КонецФункции
Функция ОбновитьСтатусПослеПолученияДанных(ДокументСсылка, Операция, ДополнительныеПараметры = Неопределено) Экспорт
Возврат ЧекиЕГАИС.ОбновитьСтатусПослеПолученияДанных(ДокументСсылка, Операция, ДополнительныеПараметры);
КонецФункции
Функция ОбновитьСтатус(ДокументСсылка, ПараметрыОбновления, ДополнительныеПараметры) Экспорт
Возврат ЧекиЕГАИС.ОбновитьСтатус(ДокументСсылка, ПараметрыОбновления, ДополнительныеПараметры);
КонецФункции
Функция ПоследовательностьОпераций(ДокументСсылка) Экспорт
Возврат ЧекиЕГАИС.ПоследовательностьОпераций(ДокументСсылка);
КонецФункции
Процедура ПриИзмененииСтатусаДокумента(ДокументСсылка, ПредыдущийСтатус, НовыйСтатус, ПараметрыОбновленияСтатуса) Экспорт
ЧекиЕГАИС.ПриИзмененииСтатусаЧекаНаВозврат(ДокументСсылка, ПредыдущийСтатус, НовыйСтатус, ПараметрыОбновленияСтатуса);
ИнтеграцияЕГАИСПереопределяемый.ПриИзмененииСтатусаДокумента(ДокументСсылка, ПредыдущийСтатус, НовыйСтатус, ПараметрыОбновленияСтатуса);
КонецПроцедуры
#КонецОбласти
#Область Серии
Функция ИменаРеквизитовДляЗаполненияПараметровУказанияСерий() Экспорт
Возврат ИнтеграцияИС.ИменаРеквизитовДляЗаполненияПараметровУказанияСерий(Метаданные.Документы.ЧекЕГАИСВозврат);
КонецФункции
Функция ПараметрыУказанияСерий(Объект) Экспорт
Возврат ИнтеграцияИС.ПараметрыУказанияСерий(Метаданные.Документы.ЧекЕГАИСВозврат, Объект);
КонецФункции
Функция ТекстЗапросаЗаполненияСтатусовУказанияСерий(ПараметрыУказанияСерий) Экспорт
Возврат ИнтеграцияИС.ТекстЗапросаЗаполненияСтатусовУказанияСерий(Метаданные.Документы.ЧекЕГАИСВозврат, ПараметрыУказанияСерий);
КонецФункции
#КонецОбласти
#Область Статусы
Функция СтатусПоУмолчанию() Экспорт
Возврат ЧекиЕГАИС.СтатусПоУмолчанию();
КонецФункции
Функция СтатусыДвиженийАкцизныхМарокСвободныйОстаток() Экспорт
Возврат ЧекиЕГАИС.СтатусыДвиженийАкцизныхМарокСвободныйОстаток();
КонецФункции
Функция СтатусыДвиженийАкцизныхМарокКоличество() Экспорт
Возврат ЧекиЕГАИС.СтатусыДвиженийАкцизныхМарокКоличество();
КонецФункции
Функция СтатусыОшибок() Экспорт
Статусы = Новый Массив;
Статусы.Добавить(Перечисления.СтатусыИнформированияЕГАИС.ОшибкаПередачи);
Возврат Статусы;
КонецФункции
Функция КонечныеСтатусы(ТребуетсяПовторноеОформление = Истина) Экспорт
Статусы = Новый Массив;
Возврат Статусы;
КонецФункции
Функция ДальнейшееДействиеПоУмолчанию() Экспорт
Возврат ЧекиЕГАИС.ДальнейшееДействиеПоУмолчанию();
КонецФункции
#КонецОбласти
#Область ПанельОбменСЕГАИС
Функция ВсеТребующиеДействия() Экспорт
МассивДействий = Новый Массив;
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПередайтеДанные);
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ВыполнитеОбмен);
Возврат МассивДействий;
КонецФункции
Функция ВсеТребующиеОжидания() Экспорт
МассивДействий = Новый Массив;
МассивДействий.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПередачуДанныхРегламентнымЗаданием);
Возврат МассивДействий;
КонецФункции
Функция ТекстЗапросаПанельОбменСЕГАИСОформите() Экспорт
ТекстЗапроса = "
|ВЫБРАТЬ
| 0 КАК КоличествоДокументов
|";
ИнтеграцияЕГАИСПереопределяемый.ТекстЗапросаЧекЕГАИСВозвратОформите(ТекстЗапроса);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаПанельОбменСЕГАИСОтработайте() Экспорт
ТекстЗапроса = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| КОЛИЧЕСТВО (РАЗЛИЧНЫЕ СтатусыДокументовЕГАИС.Документ) КАК КоличествоДокументов
|ИЗ
| РегистрСведений.СтатусыДокументовЕГАИС КАК СтатусыДокументовЕГАИС
|ЛЕВОЕ СОЕДИНЕНИЕ
| Документ.ЧекЕГАИСВозврат КАК ЧекЕГАИСВозврат
|ПО
| СтатусыДокументовЕГАИС.Документ = ЧекЕГАИСВозврат.Ссылка
|ГДЕ
| ЧекЕГАИСВозврат.Ссылка ЕСТЬ НЕ NULL
| И НЕ ЧекЕГАИСВозврат.ПометкаУдаления
| И СтатусыДокументовЕГАИС.ДальнейшееДействие1 В(&ВсеТребующиеДействия)
| И (ЧекЕГАИСВозврат.ОрганизацияЕГАИС В(&ОрганизацияЕГАИС)
| ИЛИ &БезОтбораПоОрганизацииЕГАИС)
| И (ЧекЕГАИСВозврат.Ответственный = &Ответственный
| ИЛИ &Ответственный = НЕОПРЕДЕЛЕНО)
|";
ИнтеграцияЕГАИСПереопределяемый.ТекстЗапросаЧекЕГАИСВозвратОтработайте(ТекстЗапроса);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаПанельОбменСЕГАИСОжидайте() Экспорт
ТекстЗапроса = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| КОЛИЧЕСТВО (РАЗЛИЧНЫЕ СтатусыДокументовЕГАИС.Документ) КАК КоличествоДокументов
|ИЗ
| РегистрСведений.СтатусыДокументовЕГАИС КАК СтатусыДокументовЕГАИС
|ЛЕВОЕ СОЕДИНЕНИЕ
| Документ.ЧекЕГАИСВозврат КАК ЧекЕГАИСВозврат
|ПО
| СтатусыДокументовЕГАИС.Документ = ЧекЕГАИСВозврат.Ссылка
|ГДЕ
| ЧекЕГАИСВозврат.Ссылка ЕСТЬ НЕ NULL
| И НЕ ЧекЕГАИСВозврат.ПометкаУдаления
| И СтатусыДокументовЕГАИС.ДальнейшееДействие1 В(&ВсеТребующиеОжидания)
| И (ЧекЕГАИСВозврат.ОрганизацияЕГАИС В(&ОрганизацияЕГАИС)
| ИЛИ &БезОтбораПоОрганизацииЕГАИС)
| И (ЧекЕГАИСВозврат.Ответственный = &Ответственный
| ИЛИ &Ответственный = НЕОПРЕДЕЛЕНО)
|";
ИнтеграцияЕГАИСПереопределяемый.ТекстЗапросаЧекЕГАИСВозвратОжидайте(ТекстЗапроса);
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#Область СообщенияЕГАИС
Функция СообщениеКПередачеXML(ДокументСсылка, ДальнейшееДействие, ДополнительныеПараметры = Неопределено) Экспорт
Если ДальнейшееДействие = Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПередайтеДанные Тогда
Возврат ЧекЕГАИСВозвратXML(ДокументСсылка);
КонецЕсли;
КонецФункции
#КонецОбласти
#Область СканированиеАлкогольнойПродукции
Функция ТаблицаАлкогольнойПродукцииКОпределениюСправок2(ДокументСсылка) Экспорт
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЧекЕГАИСВозвратТовары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| ЧекЕГАИСВозвратТовары.Номенклатура КАК Номенклатура,
| ЧекЕГАИСВозвратТовары.Характеристика КАК Характеристика,
| ЧекЕГАИСВозвратТовары.Серия КАК Серия,
| ЗНАЧЕНИЕ(Справочник.Справки2ЕГАИС.ПустаяСсылка) КАК Справка2,
| СУММА(ЧекЕГАИСВозвратТовары.Количество) КАК Количество,
| ЕСТЬNULL(ВидыАлкогольнойПродукции.Маркируемый, ЛОЖЬ) КАК Маркируемая
|ИЗ
| Документ.ЧекЕГАИСВозврат.Товары КАК ЧекЕГАИСВозвратТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлассификаторАлкогольнойПродукцииЕГАИС КАК КлассификаторАлкогольнойПродукцииЕГАИС
| ПО ЧекЕГАИСВозвратТовары.АлкогольнаяПродукция = КлассификаторАлкогольнойПродукцииЕГАИС.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыАлкогольнойПродукции КАК ВидыАлкогольнойПродукции
| ПО КлассификаторАлкогольнойПродукцииЕГАИС.ВидПродукции = ВидыАлкогольнойПродукции.Ссылка
|ГДЕ
| ЧекЕГАИСВозвратТовары.Ссылка = &ДокументСсылка
|
|СГРУППИРОВАТЬ ПО
| ЧекЕГАИСВозвратТовары.Номенклатура,
| ЧекЕГАИСВозвратТовары.АлкогольнаяПродукция,
| ЧекЕГАИСВозвратТовары.Характеристика,
| ЧекЕГАИСВозвратТовары.Серия,
| ЕСТЬNULL(ВидыАлкогольнойПродукции.Маркируемый, ЛОЖЬ)";
Запрос.УстановитьПараметр("ДокументСсылка", ДокументСсылка);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Функция НаличиеМаркируемойПродукции(Ссылка) Экспорт
СтруктураВозврата = Новый Структура;
СтруктураВозврата.Вставить("ЕстьМаркируемая", Ложь);
СтруктураВозврата.Вставить("ЕстьНеМаркируемая", Ложь);
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ
| ВидыАлкогольнойПродукции.Маркируемый КАК Маркируемый
|ИЗ
| Документ.ЧекЕГАИСВозврат.Товары КАК ЧекЕГАИСВозвратТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлассификаторАлкогольнойПродукцииЕГАИС КАК КлассификаторАлкогольнойПродукцииЕГАИС
| ПО ЧекЕГАИСВозвратТовары.АлкогольнаяПродукция = КлассификаторАлкогольнойПродукцииЕГАИС.Ссылка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыАлкогольнойПродукции КАК ВидыАлкогольнойПродукции
| ПО КлассификаторАлкогольнойПродукцииЕГАИС.ВидПродукции = ВидыАлкогольнойПродукции.Ссылка
|ГДЕ
| ЧекЕГАИСВозвратТовары.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Маркируемый Тогда
СтруктураВозврата.ЕстьМаркируемая = Истина;
Иначе
СтруктураВозврата.ЕстьНеМаркируемая = Истина;
КонецЕсли;
КонецЦикла;
Возврат СтруктураВозврата;
КонецФункции
Функция ШтрихкодыУпаковок(ДокументСсылка, ЗаполнитьСправки2ИзРегистра = Ложь) Экспорт
Возврат ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоДокументу(ДокументСсылка, ЗаполнитьСправки2ИзРегистра);
КонецФункции
Функция ОбработатьДанныеШтрихкода(Форма, ДанныеШтрихкода, ПараметрыСканирования, ВложенныеШтрихкоды = Неопределено) Экспорт
Если ИнтеграцияИСКлиентСервер.ЭтоУпаковка(ДанныеШтрихкода.ТипУпаковки) Тогда
Возврат ОбработатьДанныеШтрихкодаЛогистическойУпаковки(Форма, ДанныеШтрихкода, ВложенныеШтрихкоды, ПараметрыСканирования);
ИначеЕсли ДанныеШтрихкода.ТипУпаковки = Перечисления.ТипыУпаковок.МаркированныйТовар Тогда
Возврат ОбработатьДанныеШтрихкодаПотребительскойУпаковки(Форма, ДанныеШтрихкода, ПараметрыСканирования);
ИначеЕсли ДанныеШтрихкода.ТипШтрихкода = Перечисления.ТипыШтрихкодов.DataMatrix Тогда
Возврат ОбработатьДанныеШтрихкодаСНомеромИСерией(Форма, ДанныеШтрихкода, ПараметрыСканирования);
ИначеЕсли ДанныеШтрихкода.ВидУпаковки = Перечисления.ВидыУпаковокИС.Потребительская
И ДанныеШтрихкода.МаркируемаяПродукция <> Истина
И ДанныеШтрихкода.ЭтоШтрихкодНоменклатуры Тогда
Возврат ОбработатьДанныеШтрихкодаПотребительскойУпаковки(Форма, ДанныеШтрихкода, ПараметрыСканирования);
КонецЕсли;
Возврат Неопределено;
КонецФункции
Функция ОбработатьДанныеШтрихкодаПотребительскойУпаковки(Форма, ДанныеШтрихкода, ПараметрыСканирования) Экспорт
Возврат Документы.ЧекЕГАИС.ОбработатьДанныеШтрихкодаПотребительскойУпаковки(Форма, ДанныеШтрихкода, ПараметрыСканирования);
КонецФункции
Функция ОбработатьДанныеШтрихкодаЛогистическойУпаковки(Форма, ДанныеШтрихкода, ВложенныеШтрихкоды, ПараметрыСканирования) Экспорт
Возврат Документы.ЧекЕГАИС.ОбработатьДанныеШтрихкодаЛогистическойУпаковки(Форма, ДанныеШтрихкода, ВложенныеШтрихкоды, ПараметрыСканирования);
КонецФункции
Функция ОбработатьДанныеШтрихкодаСНомеромИСерией(Форма, ДанныеШтрихкода, ПараметрыСканирования) Экспорт
Возврат Документы.ЧекЕГАИС.ОбработатьДанныеШтрихкодаСНомеромИСерией(Форма, ДанныеШтрихкода, ПараметрыСканирования);
КонецФункции
#КонецОбласти
#Область ЗавершениеПроверкиИПодбораМаркируемойПродукции
Процедура ОтразитьРезультатыПроверкиИПодбора(ПараметрыОкончанияПроверки) Экспорт
ТаблицаНеМаркируемойПродукции = ПараметрыОкончанияПроверки.ТаблицаНеМаркируемойПродукции;
ДеревоМаркируемойПродукции = ПараметрыОкончанияПроверки.ДеревоМаркируемойПродукции;
ДокументОбъект = ПараметрыОкончанияПроверки.ПроверяемыйДокумент.ПолучитьОбъект();
ДокументОбъект.СтатусПроверкиИПодбора = Перечисления.СтатусыПроверкиИПодбораИС.Завершено;
ОчиститьДанныеПередЗаполнением(ДокументОбъект);
ПараметрыЗаполнения = АкцизныеМаркиЕГАИС.ПараметрыЗаполненияТоваровИАкцизныхМарок(ДокументОбъект, Ложь);
ПараметрыЗаполнения.ЕстьСправка2 = Ложь;
Документы.ЧекЕГАИС.ЗаполнитьТоварыИАкцизныеМарки(
ДокументОбъект,
ДеревоМаркируемойПродукции,
ПараметрыЗаполнения);
Документы.ЧекЕГАИС.ЗаполнитьНеМаркируемыеТовары(
ДокументОбъект, ТаблицаНеМаркируемойПродукции, ПараметрыЗаполнения);
ОбработатьСтрокиТЧ(ДокументОбъект, ПараметрыЗаполнения);
СтруктураПоискаПустыхСтрок = Новый Структура("Количество", 0);
ПустыеСтроки = ДокументОбъект.Товары.НайтиСтроки(СтруктураПоискаПустыхСтрок);
Для Каждого ПустаяСтрока Из ПустыеСтроки Цикл
ДокументОбъект.Товары.Удалить(ПустаяСтрока);
КонецЦикла;
Если ДокументОбъект.Проведен Тогда
Если ДокументОбъект.ПроверитьЗаполнение() Тогда
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Иначе
ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЕсли;
Иначе
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
КонецПроцедуры
Процедура ОчиститьДанныеПередЗаполнением(ДокументОбъект)
ДокументОбъект.АкцизныеМарки.Очистить();
ИменаКолонокДляОчистки = Новый Массив();
ИменаКолонокДляОчистки.Добавить("Количество");
ИменаКолонокДляОчистки.Добавить("КоличествоУпаковок");
Для Каждого СтрокаТовары Из ДокументОбъект.Товары Цикл
Для Каждого ИмяКолонки Из ИменаКолонокДляОчистки Цикл
СтрокаТовары[ИмяКолонки] = 0;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ОбработатьСтрокиТЧ(ДокументОбъект, ПараметрыЗаполнения)
ПараметрыУказанияСерий = ПараметрыУказанияСерий(ДокументОбъект);
ПустойСклад = ОбщегоНазначенияИС.ПустоеЗначениеОпределяемогоТипа("Склад");
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковок");
СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", Новый Структура("Склад, ПараметрыУказанияСерий", ПустойСклад, ПараметрыУказанияСерий));
СтруктураДействий.Вставить("ЗаполнитьАлкогольнуюПродукцию", ПараметрыЗаполнения);
Для Каждого СтрокаТЧ Из ПараметрыЗаполнения.ДобавленныеСтроки Цикл
ИнтеграцияИСПереопределяемый.ОбработатьСтрокуТабличнойЧасти(СтрокаТЧ, СтруктураДействий, ДокументОбъект);
КонецЦикла;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковок");
СтруктураДействий.Вставить("ПересчитатьСумму");
Для Каждого СтрокаТЧ Из ПараметрыЗаполнения.ИзмененныеСтроки Цикл
ИнтеграцияИСПереопределяемый.ОбработатьСтрокуТабличнойЧасти(СтрокаТЧ, СтруктураДействий, ДокументОбъект);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ВЫБОР КОГДА ОрганизацияЕГАИС.Сопоставлено И ОрганизацияЕГАИС.СоответствуетОрганизации Тогда ЗначениеРазрешено(ОрганизацияЕГАИС.Контрагент)
| КОГДА ОрганизацияЕГАИС.Сопоставлено И НЕ ОрганизацияЕГАИС.СоответствуетОрганизации Тогда ЗначениеРазрешено(ОрганизацияЕГАИС.ТорговыйОбъект)
| ИНАЧЕ ИСТИНА КОНЕЦ ";
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область СообщенияЕГАИС
Функция ЧекЕГАИСВозвратXML(ДокументСсылка)
ТекстыЗапроса = Новый СписокЗначений;
ТекстыЗапроса.Добавить(
"ВЫБРАТЬ
| ЕГАИСПрисоединенныеФайлы.Документ КАК Ссылка,
| КОЛИЧЕСТВО(ЕГАИСПрисоединенныеФайлы.Ссылка) КАК ПоследнийНомер
|ПОМЕСТИТЬ Версии
|ИЗ
| Справочник.ЕГАИСПрисоединенныеФайлы КАК ЕГАИСПрисоединенныеФайлы
|ГДЕ
| ЕГАИСПрисоединенныеФайлы.Документ = &Ссылка
| И ЕГАИСПрисоединенныеФайлы.Операция = &Операция
| И ЕГАИСПрисоединенныеФайлы.ТипСообщения = ЗНАЧЕНИЕ(Перечисление.ТипыЗапросовИС.Исходящий)
|СГРУППИРОВАТЬ ПО
| ЕГАИСПрисоединенныеФайлы.Документ
|;
|
|
|ВЫБРАТЬ
| Шапка.Номер КАК Номер,
| Шапка.Дата КАК Дата,
| ЕСТЬNULL(Версии.ПоследнийНомер, 0) КАК ПоследнийНомерВерсии,
| Шапка.ДокументОснование КАК ДокументОснование,
| Шапка.ВидОперации КАК ВидОперации,
| Шапка.ОрганизацияЕГАИС КАК ОрганизацияЕГАИС,
| Шапка.ОрганизацияЕГАИС.Код КАК ИдентификаторФСРАР,
| Шапка.ОрганизацияЕГАИС.ФорматОбмена КАК ФорматОбмена,
| Шапка.ОрганизацияЕГАИС.ИНН КАК ИНН,
| Шапка.ОрганизацияЕГАИС.КПП КАК КПП,
| Шапка.ОрганизацияЕГАИС.ТорговыйОбъект КАК ТорговыйОбъект,
| Шапка.Ответственный КАК Ответственный,
| Шапка.НомерСмены КАК НомерСмены,
| Шапка.НомерЧекаККМ КАК НомерЧекаККМ,
| Шапка.СерийныйНомерККМ КАК СерийныйНомерККМ
|ИЗ
| Документ.ЧекЕГАИСВозврат КАК Шапка,
| ЛЕВОЕ СОЕДИНЕНИЕ Версии КАК Версии
| ПО Шапка.Ссылка = Версии.Ссылка
|ГДЕ
| Шапка.Ссылка = &Ссылка
|",
"Шапка");
ТекстыЗапроса.Добавить(
"ВЫБРАТЬ
| Товары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Серия КАК Серия
|ПОМЕСТИТЬ ВТТовары
|ИЗ
| Документ.ЧекЕГАИСВозврат.Товары КАК Товары
|ГДЕ
| Товары.Ссылка = &Ссылка
|");
ТекстыЗапроса.Добавить(
ИнтеграцияЕГАИС.ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС(
"ВТТовары",
"ВТКоэффициентыПересчетаВЕдиницыЕГАИС"));
ТекстыЗапроса.Добавить(
"ВЫБРАТЬ
| Товары.ИдентификаторСтроки КАК ИдентификаторСтроки,
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.Количество
| * ЕСТЬNULL(ЕдиницыЕГАИС.Коэффициент, 1) КАК Количество,
| -Товары.Цена КАК Цена,
| Товары.Штрихкод КАК Штрихкод,
| Товары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| Товары.АлкогольнаяПродукция.Объем КАК Объем,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика
|ИЗ
| Документ.ЧекЕГАИСВозврат.Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКоэффициентыПересчетаВЕдиницыЕГАИС КАК ЕдиницыЕГАИС
| ПО ЕдиницыЕГАИС.АлкогольнаяПродукция = Товары.АлкогольнаяПродукция
| И ЕдиницыЕГАИС.Номенклатура = Товары.Номенклатура
| И ЕдиницыЕГАИС.Характеристика = Товары.Характеристика
| И ЕдиницыЕГАИС.Серия = Товары.Серия
|ГДЕ
| Товары.Ссылка = &Ссылка
|",
"Товары");
ПараметрыФормированияТекстаЗапроса = ШтрихкодированиеЕГАИС.ПараметрыФормированияТекстаЗапросаВложенныхШтрихкодов();
ПараметрыФормированияТекстаЗапроса.ДокументСсылка = ДокументСсылка;
ПараметрыФормированияТекстаЗапроса.ИспользоватьИдентификаторСтроки = Истина;
ТекстыЗапроса.Добавить(
ШтрихкодированиеЕГАИС.ТекстЗапросаВложенныхШтрихкодовПоДокументу(ПараметрыФормированияТекстаЗапроса),
"ВложенныеШтрихкоды");
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.УстановитьПараметр("Операция", Перечисления.ВидыДокументовЕГАИС.ЧекККМ);
Запрос.УстановитьПараметр("ПустыеЗначенияНоменклатуры", ИнтеграцияИС.НезаполненныеЗначенияОпределяемогоТипа("Номенклатура"));
РезультатыЗапроса = ОбщегоНазначенияИС.ВыполнитьПакетЗапросов(Запрос, ТекстыЗапроса);
Возврат Документы.ЧекЕГАИС.СообщенияЧекЕГАИСXML(ДокументСсылка, РезультатыЗапроса, МенеджерВременныхТаблиц);
КонецФункции
#КонецОбласти
#Область Проведение
Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт
ИсточникиДанных = Новый Соответствие;
Возврат ИсточникиДанных;
КонецФункции
Процедура ИнициализироватьДанныеДокумента(ДокументСсылка, ДополнительныеСвойства, Регистры = Неопределено) Экспорт
Запрос = Новый Запрос;
ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
ТекстыЗапроса = Новый СписокЗначений;
ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаОстаткиАлкогольнойПродукцииЕГАИС(Запрос, ТекстыЗапроса, Регистры);
ИнтеграцияИС.ИнициализироватьТаблицыДляДвижений(Запрос, ТекстыЗапроса, ДополнительныеСвойства.ТаблицыДляДвижений, Истина);
КонецПроцедуры
Процедура ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка)
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеШапки.ОрганизацияЕГАИС КАК ОрганизацияЕГАИС,
| ДанныеШапки.Ссылка КАК Ссылка,
| ДанныеШапки.Дата КАК Период,
| СтатусыДокументовЕГАИС.Статус КАК СтатусОбработки
|ИЗ
| Документ.ЧекЕГАИСВозврат КАК ДанныеШапки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыДокументовЕГАИС КАК СтатусыДокументовЕГАИС
| ПО СтатусыДокументовЕГАИС.Документ = ДанныеШапки.Ссылка
|ГДЕ
| ДанныеШапки.Ссылка = &Ссылка";
Реквизиты = Запрос.Выполнить().Выбрать();
Реквизиты.Следующий();
Запрос.УстановитьПараметр("Ссылка", Реквизиты.Ссылка);
Запрос.УстановитьПараметр("ОрганизацияЕГАИС", Реквизиты.ОрганизацияЕГАИС);
Запрос.УстановитьПараметр("СтатусОбработки", Реквизиты.СтатусОбработки);
Запрос.УстановитьПараметр("Период", Реквизиты.Период);
КонецПроцедуры
Функция ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ДвиженияСерийТоваров";
Если Не ИнтеграцияИС.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
ТекстЗапроса = "";
ИнтеграцияЕГАИСПереопределяемый.ПриЗаполненииТекстаЗапросаДвижениеСерийТоваров(ТекстЗапроса, Метаданные.Документы.ЧекЕГАИСВозврат.Имя);
Если ЗначениеЗаполнено(ТекстЗапроса) Тогда
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаТаблицаОстаткиАлкогольнойПродукцииЕГАИС(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ОстаткиАлкогольнойПродукцииЕГАИС";
Если НЕ ИнтеграцияИС.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК ВидДвижения,
| &Период КАК Период,
| ТаблицаАкцизныеМарки.Ссылка КАК Ссылка,
| &ОрганизацияЕГАИС КАК ОрганизацияЕГАИС,
| ТаблицаАкцизныеМарки.Справка2 КАК Справка2,
| Справки2ЕГАИС.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТаблицаАкцизныеМарки.АкцизнаяМарка) КАК Количество,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТаблицаАкцизныеМарки.АкцизнаяМарка) КАК СвободныйОстаток
|ИЗ
| Документ.ЧекЕГАИСВозврат.АкцизныеМарки КАК ТаблицаАкцизныеМарки
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Справки2ЕГАИС КАК Справки2ЕГАИС
| ПО Справки2ЕГАИС.Ссылка = ТаблицаАкцизныеМарки.Справка2
|ГДЕ
| ТаблицаАкцизныеМарки.Ссылка = &Ссылка
| И &СтатусОбработки = ЗНАЧЕНИЕ(Перечисление.СтатусыИнформированияЕГАИС.ПереданВУТМ)
| И ТаблицаАкцизныеМарки.Справка2 <> ЗНАЧЕНИЕ(Справочник.Справки2ЕГАИС.ПустаяСсылка)
|
|СГРУППИРОВАТЬ ПО
| ТаблицаАкцизныеМарки.Ссылка,
| ТаблицаАкцизныеМарки.Справка2,
| Справки2ЕГАИС.АлкогольнаяПродукция
|";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#Область Отчеты
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
ИнтеграцияИСПереопределяемый.ДобавитьКомандуСтруктураПодчиненности(КомандыОтчетов);
ИнтеграцияИСПереопределяемый.ДобавитьКомандуДвиженияДокумента(КомандыОтчетов);
КомандаОтчет = Отчеты.АнализРасхожденийПриДвиженииАлкогольнойПродукции.ДобавитьКомандуОтчета(КомандыОтчетов);
Если КомандаОтчет <> Неопределено Тогда
КомандаОтчет.Важность = "Обычное";
КомандаОтчет.Порядок = 1;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Печать
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
Возврат;
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Возврат;
КонецПроцедуры
#КонецОбласти
#Область ОбновлениеИнформационнойБазы
Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| АкцизныеМарки.Ссылка
|ИЗ
| Документ.ЧекЕГАИСВозврат.АкцизныеМарки КАК АкцизныеМарки
|ГДЕ
| АкцизныеМарки.КодАкцизнойМарки <> """"
| И АкцизныеМарки.АкцизнаяМарка = ЗНАЧЕНИЕ(Справочник.ШтрихкодыУпаковокТоваров.ПустаяСсылка)
|";
МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок);
КонецПроцедуры
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
ПолноеИмяДокумента = "Документ.ЧекЕГАИСВозврат";
МетаданныеДокумента = Метаданные.Документы.ЧекЕГАИСВозврат;
Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ПолноеИмяДокумента);
Пока Выборка.Следующий() Цикл
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяДокумента);
ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
Если ДокументОбъект = Неопределено Тогда
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
ЗафиксироватьТранзакцию();
Продолжить;
КонецЕсли;
ОбработкаЗавершена = Истина;
Для каждого ТекСтрока Из ДокументОбъект.АкцизныеМарки Цикл
Если ЗначениеЗаполнено(ТекСтрока.КодАкцизнойМарки) Тогда
ТекСтрока.АкцизнаяМарка = Справочники.ШтрихкодыУпаковокТоваров.ПолучитьПоЗначениюШтрихкода(ТекСтрока.КодАкцизнойМарки);
Если НЕ ЗначениеЗаполнено(ТекСтрока.АкцизнаяМарка) Тогда
ОбработкаЗавершена = Ложь;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ОбработкаЗавершена Тогда
ОбновлениеИнформационнойБазы.ЗаписатьДанные(ДокументОбъект);
ЗафиксироватьТранзакцию();
Иначе
ОтменитьТранзакцию();
КонецЕсли;
Исключение
ОтменитьТранзакцию();
ТекстСообщения = НСтр("ru = 'Не удалось обработать документ: %Ссылка% по причине: %Причина%'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", Выборка.Ссылка);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Предупреждение,
МетаданныеДокумента,
Выборка.Ссылка,
ТекстСообщения);
ВызватьИсключение;
КонецПопытки;
КонецЦикла;
Параметры.ОбработкаЗавершена = Не ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки(Параметры.Очередь, ПолноеИмяДокумента);
КонецПроцедуры
Процедура ЗарегистрироватьДанныеКОбработкеДляГенерацииАкцизныхМарок(Параметры) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| АкцизныеМарки.Ссылка
|ИЗ
| Документ.ЧекЕГАИСВозврат.АкцизныеМарки КАК АкцизныеМарки
|ГДЕ
| АкцизныеМарки.КодАкцизнойМарки <> """"
| И АкцизныеМарки.АкцизнаяМарка = ЗНАЧЕНИЕ(Справочник.ШтрихкодыУпаковокТоваров.ПустаяСсылка)
|";
МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок);
КонецПроцедуры
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсиюГенерацияАкцизныхМарок(Параметры) Экспорт
ПолноеИмяДокумента = "Документ.ЧекЕГАИСВозврат";
МетаданныеДокумента = Метаданные.Документы.ЧекЕГАИСВозврат;
Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ПолноеИмяДокумента);
Пока Выборка.Следующий() Цикл
НачатьТранзакцию();
Попытка
ОбработкаСсылкиНачата = Ложь;
ОбработкаСсылкиЗавершена = Ложь;
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяДокумента);
ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
Блокировка.Заблокировать();
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
Если ДокументОбъект = Неопределено Тогда
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
ЗафиксироватьТранзакцию();
Продолжить;
КонецЕсли;
ОбработкаСсылкиНачата = Истина;
Для каждого ТекСтрока Из ДокументОбъект.АкцизныеМарки Цикл
Если ЗначениеЗаполнено(ТекСтрока.КодАкцизнойМарки) И НЕ ЗначениеЗаполнено(ТекСтрока.АкцизнаяМарка) Тогда
СтрокаТовар = ДокументОбъект.Товары.Найти(ТекСтрока.ИдентификаторСтроки, "ИдентификаторСтроки");
Если СтрокаТовар = Неопределено Тогда
Продолжить;
КонецЕсли;
ШтрихкодированиеЕГАИС.ПолучитьСгенерироватьАкцизнуюМарку(ТекСтрока.КодАкцизнойМарки,
СтрокаТовар.Номенклатура,
СтрокаТовар.Характеристика,
Истина);
КонецЕсли;
КонецЦикла;
ОбработкаСсылкиЗавершена = Истина;
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
Если НЕ ОбработкаСсылкиНачата Тогда
ТекстСообщения = НСтр("ru = 'Не удалось заблокировать документ: %Ссылка% по причине: %Причина%'",
ОбщегоНазначения.КодОсновногоЯзыка());
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", Выборка.Ссылка);
ИначеЕсли НЕ ОбработкаСсылкиЗавершена Тогда
ТекстСообщения = НСтр("ru = 'Не удалось сгенерировать акцизную марку: %Ключ% по причине: %Причина%'",
ОбщегоНазначения.КодОсновногоЯзыка());
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ключ%", ТекСтрока.КодАкцизнойМарки);
Иначе
ТекстСообщения = НСтр("ru = 'Не удалось обработать документ: %Ссылка% по причине: %Причина%'",
ОбщегоНазначения.КодОсновногоЯзыка());
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", Выборка.Ссылка);
КонецЕсли;
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Предупреждение,
МетаданныеДокумента,
Выборка.Ссылка,
ТекстСообщения);
КонецПопытки;
КонецЦикла;
Параметры.ОбработкаЗавершена = Не ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки(Параметры.Очередь, ПолноеИмяДокумента);
КонецПроцедуры
#КонецОбласти
#Область Прочее
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
Возврат;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли