Почему при сканировании марок в документе «Реализация товаров» в «1С:Розница 2.3» не заполняется идентификатор строки и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

При работе с алкогольной продукцией в конфигурации «1С:Розница» (релиз 2.3.3.12 и некоторые последующие) многие пользователи и технические специалисты столкнулись с критической проблемой. Суть ее заключается в том, что при сканировании акцизных марок непосредственно в документе Реализация товаров (РТУ) программа перестает генерировать уникальный Идентификатор строки. В результате этого при попытке создать на основании реализации Чек ЕГАИС данные о считанных марках не переносятся в чек, либо марки оказываются не связанными с товарными позициями.

В этой статье мы подробно разберем причины возникновения этой ситуации, проанализируем изменения в коде конфигурации и предложим конкретные программные решения для восстановления корректной работы системы.

Выясняем причину технического сбоя

Проанализируем механику работы документа Реализация товаров. В предыдущих стабильных версиях при добавлении товара или сканировании марки в форму документа срабатывала процедура, обеспечивающая уникальную связь между строкой таблицы Товары и данными в таблице Акцизные марки. Эта связь реализуется через специальное поле КлючСвязи или ИдентификаторСтроки.

В релизе 2.3.3.12 из модуля формы документа (функция ДобавитьНайденныеПозицииТоваров()) был исключен вызов метода:

ОбработкаТабличнойЧастиТоварыКлиентСервер.ЗаполнитьКлючСвязи();

Без этого вызова новые строки в документе не получают GUID (уникальный идентификатор), который служит «мостом» для интеграции с подсистемой ЕГАИС. В итоге, даже если вы успешно отсканировали бутылки в реализации, при формировании Чека ЕГАИС программа «теряет» информацию о том, какая марка к какому товару относится. Это происходит из-за того, что в Чеке ЕГАИС столбец ИдентификаторСтроки также остается пустым.

Вариант решения №1: Исправление модуля интеграции ЕГАИС

Рассмотрим наиболее эффективный способ решения проблемы, предложенный практикующими специалистами. Нам необходимо принудительно инициализировать ИдентификаторСтроки в процессе формирования данных Чека ЕГАИС на основании реализации.

Для этого нам потребуется внести изменения в общий модуль ИнтеграцияЕГАИСРТ. Разберем по шагам, что именно нужно сделать в функции ЗаполнитьТоварыЧекаЕГАИСНаОснованииРеализацииТоваров().

Найдем фрагмент кода, отвечающий за заполнение строк, и добавим генерацию уникального идентификатора. Проанализируем пример кода:


// В функции ЗаполнитьТоварыЧекаЕГАИСНаОснованииРеализацииТоваров()
// Ищем цикл обхода строк и добавляем инициализацию идентификатора

СтрокаТЧ.ИдентификаторСтроки = Строка(Новый УникальныйИдентификатор); // Добавленная или перемещенная строка

Если АкцизныеМарки.Количество() <> 0 Тогда
    // Ранее разработчики могли ошибочно закомментировать заполнение идентификатора здесь
    // или расположить его внутри условия, которое не всегда срабатывает
КонецЕсли;

Важный нюанс: Убедитесь, что ИдентификаторСтроки заполняется для каждой строки таблицы товаров чека до того, как начнется обработка акцизных марок. Это гарантирует, что подсистема ЕГАИС сможет однозначно сопоставить каждую считанную марку с конкретной номенклатурной позицией.

Вариант решения №2: Восстановление заполнения ключа связи в реализации

Если вы хотите исправить проблему «в корне», то есть еще на этапе работы с документом Реализация товаров, можно воспользоваться механизмом расширений. Мы можем вернуть вызов заполнения ключей связи, который был удален разработчиками в последних релизах.

Проанализируем ситуацию: нам нужно гарантировать наличие ключа связи в табличной части Товары. Создадим расширение и добавим в него процедуру, которая будет вызываться ПередЗаписью документа или в обработчике изменения таблицы товаров:


&После("ДобавитьНайденныеПозицииТоваров")
Процедура Расш_ДобавитьНайденныеПозицииТоваров(ТаблицаТоваров)
    // Вызываем стандартный метод для заполнения GUID в строках
    ОбработкаТабличнойЧастиТоварыКлиентСервер.ЗаполнитьКлючСвязи(Объект.Товары);
КонецПроцедуры

Этот подход более правильный с точки зрения архитектуры 1С, так как он восстанавливает стандартное поведение конфигурации, на которое завязаны многие механизмы (не только ЕГАИС, но и маркировка обуви, табака и т.д.).

Почему обновление на 2.3.3.19 может не помочь?

Как показывает практика и обсуждения на форумах, релиз 2.3.3.19, хотя и содержит огромный список исправлений (более 17 критических ошибок), не всегда решает конкретную проблему связи РТУ и Чека ЕГАИС. Это связано с тем, что разработчики 1С в данной ветке конфигурации начали глобальный переход на новые подсистемы работы с подключаемым оборудованием и маркировкой, и некоторые старые цепочки документов оказались временно разорваны.

Поэтому, если после обновления до 2.3.3.19 ошибка сохраняется, рекомендуется выполнить следующие действия:

  1. Проверить наличие установленных патчей (исправлений). В 1С:Розница 2.3 есть механизм автоматической загрузки патчей (Администрирование — Обслуживание — Обновление программы — Установленные исправления). Ищите патчи с описанием «ошибка заполнения ИдентификатораСтроки».
  2. Если патча нет, примените решение с расширением, описанное выше.
  3. Рассмотрите возможность перехода на более современную и стабильную ветку — 2.3.4.х и выше. Начиная с релиза 2.3.4.31, логика подбора алкоголя была существенно переработана, и данная ошибка там устранена штатно.

Итоги и рекомендации

Мы выяснили, что корень проблемы — в «забытом» коде, который перестал генерировать ИдентификаторСтроки. Для оперативного исправления ситуации программисту 1С достаточно внести изменения в общий модуль или создать небольшое расширение.

Помните: Работа с ЕГАИС требует высокой точности. Если вы оставляете идентификаторы пустыми, это может привести к расхождениям в остатках между регистром 1 и регистром 3 в системе ЕГАИС, так как марки не будут корректно списываться с остатков организации при продаже через документ реализации.

Используйте предложенные фрагменты кода СтрокаТЧ.ИдентификаторСтроки = Строка(Новый УникальныйИдентификатор); для обеспечения стабильной связи данных и успешной выгрузки чеков в УТМ.

← На главную