При работе с алкогольной продукцией в конфигурации «1С:Розница» (релиз 2.3.3.12 и некоторые последующие) многие пользователи и технические специалисты столкнулись с критической проблемой. Суть ее заключается в том, что при сканировании акцизных марок непосредственно в документе Реализация товаров (РТУ) программа перестает генерировать уникальный Идентификатор строки. В результате этого при попытке создать на основании реализации Чек ЕГАИС данные о считанных марках не переносятся в чек, либо марки оказываются не связанными с товарными позициями.
В этой статье мы подробно разберем причины возникновения этой ситуации, проанализируем изменения в коде конфигурации и предложим конкретные программные решения для восстановления корректной работы системы.
Проанализируем механику работы документа Реализация товаров. В предыдущих стабильных версиях при добавлении товара или сканировании марки в форму документа срабатывала процедура, обеспечивающая уникальную связь между строкой таблицы Товары и данными в таблице Акцизные марки. Эта связь реализуется через специальное поле КлючСвязи или ИдентификаторСтроки.
В релизе 2.3.3.12 из модуля формы документа (функция ДобавитьНайденныеПозицииТоваров()) был исключен вызов метода:
ОбработкаТабличнойЧастиТоварыКлиентСервер.ЗаполнитьКлючСвязи();
Без этого вызова новые строки в документе не получают GUID (уникальный идентификатор), который служит «мостом» для интеграции с подсистемой ЕГАИС. В итоге, даже если вы успешно отсканировали бутылки в реализации, при формировании Чека ЕГАИС программа «теряет» информацию о том, какая марка к какому товару относится. Это происходит из-за того, что в Чеке ЕГАИС столбец ИдентификаторСтроки также остается пустым.
Рассмотрим наиболее эффективный способ решения проблемы, предложенный практикующими специалистами. Нам необходимо принудительно инициализировать ИдентификаторСтроки в процессе формирования данных Чека ЕГАИС на основании реализации.
Для этого нам потребуется внести изменения в общий модуль ИнтеграцияЕГАИСРТ. Разберем по шагам, что именно нужно сделать в функции ЗаполнитьТоварыЧекаЕГАИСНаОснованииРеализацииТоваров().
Найдем фрагмент кода, отвечающий за заполнение строк, и добавим генерацию уникального идентификатора. Проанализируем пример кода:
// В функции ЗаполнитьТоварыЧекаЕГАИСНаОснованииРеализацииТоваров()
// Ищем цикл обхода строк и добавляем инициализацию идентификатора
СтрокаТЧ.ИдентификаторСтроки = Строка(Новый УникальныйИдентификатор); // Добавленная или перемещенная строка
Если АкцизныеМарки.Количество() <> 0 Тогда
// Ранее разработчики могли ошибочно закомментировать заполнение идентификатора здесь
// или расположить его внутри условия, которое не всегда срабатывает
КонецЕсли;
Важный нюанс: Убедитесь, что ИдентификаторСтроки заполняется для каждой строки таблицы товаров чека до того, как начнется обработка акцизных марок. Это гарантирует, что подсистема ЕГАИС сможет однозначно сопоставить каждую считанную марку с конкретной номенклатурной позицией.
Если вы хотите исправить проблему «в корне», то есть еще на этапе работы с документом Реализация товаров, можно воспользоваться механизмом расширений. Мы можем вернуть вызов заполнения ключей связи, который был удален разработчиками в последних релизах.
Проанализируем ситуацию: нам нужно гарантировать наличие ключа связи в табличной части Товары. Создадим расширение и добавим в него процедуру, которая будет вызываться ПередЗаписью документа или в обработчике изменения таблицы товаров:
&После("ДобавитьНайденныеПозицииТоваров")
Процедура Расш_ДобавитьНайденныеПозицииТоваров(ТаблицаТоваров)
// Вызываем стандартный метод для заполнения GUID в строках
ОбработкаТабличнойЧастиТоварыКлиентСервер.ЗаполнитьКлючСвязи(Объект.Товары);
КонецПроцедуры
Этот подход более правильный с точки зрения архитектуры 1С, так как он восстанавливает стандартное поведение конфигурации, на которое завязаны многие механизмы (не только ЕГАИС, но и маркировка обуви, табака и т.д.).
Как показывает практика и обсуждения на форумах, релиз 2.3.3.19, хотя и содержит огромный список исправлений (более 17 критических ошибок), не всегда решает конкретную проблему связи РТУ и Чека ЕГАИС. Это связано с тем, что разработчики 1С в данной ветке конфигурации начали глобальный переход на новые подсистемы работы с подключаемым оборудованием и маркировкой, и некоторые старые цепочки документов оказались временно разорваны.
Поэтому, если после обновления до 2.3.3.19 ошибка сохраняется, рекомендуется выполнить следующие действия:
Мы выяснили, что корень проблемы — в «забытом» коде, который перестал генерировать ИдентификаторСтроки. Для оперативного исправления ситуации программисту 1С достаточно внести изменения в общий модуль или создать небольшое расширение.
Помните: Работа с ЕГАИС требует высокой точности. Если вы оставляете идентификаторы пустыми, это может привести к расхождениям в остатках между регистром 1 и регистром 3 в системе ЕГАИС, так как марки не будут корректно списываться с остатков организации при продаже через документ реализации.
Используйте предложенные фрагменты кода СтрокаТЧ.ИдентификаторСтроки = Строка(Новый УникальныйИдентификатор); для обеспечения стабильной связи данных и успешной выгрузки чеков в УТМ.