При работе с маркируемыми товарами в программе 1С:Бухгалтерия предприятия 3.0 пользователи часто сталкиваются с ситуацией, когда при попытке пробить чек ККТ выдает сообщение: «Не удалось распределить код маркировки по товарам». Особенно критично это проявляется в тех случаях, когда в чеке присутствует более одной позиции. В данной статье мы подробно разберем причины этой ошибки и проанализируем пошаговые алгоритмы её устранения.
Проанализируем механику работы 1С с кодами маркировки. В конфигурации Бухгалтерия предприятия 3.0 данные о считанных кодах DataMatrix хранятся в специальной технической таблице, которая не видна в обычном интерфейсе документа (чека или реализации). Каждая единица маркируемого товара должна быть жестко связана со своим кодом через уникальный идентификатор — КлючСвязи.
Рассмотрим основные ситуации, когда эта связь нарушается:
GS1) приводит к тому, что 1С не может корректно распознать GTIN и серийный номер, чтобы соотнести их с номенклатурой в чеке.Самый надежный метод избежать ошибок распределения — это использование специализированного интерфейса 1С. Рассмотрим, как это сделать правильно. Вместо того чтобы сканировать коды прямо в табличную часть «Товары», выполним следующие действия:
Найдем в документе (например, «Розничная продажа (чек)») колонку с пиктограммой в виде зеленой буквы «М». Это кнопка вызова формы «Подбор и проверка маркируемой продукции». Нажмем на неё.
В открывшемся окне мы увидим древовидную структуру товаров. Нам необходимо сканировать коды именно в этом окне. Для оптимизации процесса можно использовать формирование списков для загрузки агрегации в Честный знак. Разберем преимущества этого подхода:
GTIN (в том числе при проверке поступившего пива в потребительских упаковках).После того как все коды отсканированы и светятся зеленым, нажмем кнопку «Завершить подбор». Теперь программа сама корректно распределит все коды по строкам документа, заполнив необходимые технические поля.
Если ошибка уже возникла и форма проверки показывает несоответствие, проанализируем ситуацию и выполним «сброс» данных. Часто это единственный способ восстановить корректную структуру документа, а запрос остатков из системы Честный знак поможет выявить расхождения.
Выясним причину сбоя, удалив все считанные штрихкоды из документа. Для этого перейдем в форму подбора и проверки (зеленая «М») и удалим все позиции из списка отсканированных кодов. Если кодов много, можно попробовать полностью очистить табличную часть «Товары» и добавить номенклатуру заново.
Важный момент: если у вас несколько строк с одним и тем же товаром, попробуйте объединить их в одну строку, сложив количество. После объединения строк заново отсканируйте коды через форму подбора.
Иногда корень проблемы кроется в аппаратной части. Проанализируем настройки сканера. Если сканер настроен в режиме «Keyboard Emulation» (эмуляция клавиатуры), он может передавать данные слишком быстро или добавлять лишние префиксы/суффиксы.
Посмотрим на настройки в разделе «Администрирование» — «Подключаемое оборудование». Для корректной работы с маркировкой рекомендуется:
CR или LF).GS (FNC1), который является разделителем в структуре кода DataMatrix. Без этого символа 1С может считать код единой строкой и не выделить из него GTIN, что сделает распределение невозможным.Если вы являетесь разработчиком, рассмотрим, где именно в коде происходит сбой. Основная логика распределения сосредоточена в общем модуле ИнтеграцияИСМП или в обработке ПроверкаКодовМаркировкиИСМП. Система сравнивает коллекцию ВыбранныеШтрихкоды с данными табличной части по полю КлючСвязи.
Проанализируем фрагмент кода, который может вызывать затруднения при кастомизации:
// Пример логики сопоставления кодов маркировки
Процедура ОбработатьРаспределениеКодов(ДокументОбъект)
ТаблицаТоваров = ДокументОбъект.Товары;
ТаблицаМаркировки = ДокументОбъект.ПроверкаКодовМаркировки;
Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
// Поиск кодов, привязанных к данной строке по КлючуСвязи
НайденныеКоды = ТаблицаМаркировки.НайтиСтроки(Новый Структура("КлючСвязи", СтрокаТовара.КлючСвязи));
Если НайденныеКоды.Количество() <> СтрокаТовара.Количество Тогда
ВызватьИсключение "Не удалось распределить код маркировки по товарам";
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Если вы используете расширения, проверьте, не перекрывается ли процедура ОбработкаПроверкиКодовМаркировки. Часто сторонние расширения некорректно заполняют КлючСвязи при программном добавлении строк в чек, что и приводит к ошибке при попытке фискализации.
Нельзя забывать и о программном обеспечении самой кассы. С введением формата фискальных данных ФФД 1.2 требования к передаче маркировки ужесточились. Выясним, актуальны ли ваши драйверы.
Проанализируем версию драйвера в 1С (например, для ККТ АТОЛ или Штрих-М). Старые версии драйверов не умели передавать массив кодов маркировки для проверки на сервере «Честного ЗНАКа» (тег 2108), что возвращало ошибку в 1С еще на этапе формирования пакета для печати — в этом поможет универсальный драйвер подключения онлайн-касс АТОЛ и Штрих-М. Рекомендуется:
Подводя итог, скажем, что ошибка «Не удалось распределить код маркировки по товарам» в 90% случаев лечится полной очисткой кодов в документе и их повторным сканированием строго через форму «Подбор и проверка». Это гарантирует восстановление связей между физическим кодом на этикетке и строкой в учетной системе 1С.