"УНФ и Розница 3.0: Запрещено сканировать логистические упаковки" — исправляем ошибку распознавания DataMatrix
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
1С:УНФ 3.0 — «Запрещено сканировать логистические упаковки»: причина ошибки и восстановление шаблонов маркировки
Конфигурация: 1С:Управление нашей фирмой и Розница 3.0
Версия, на которой проверено решение: 3.0.13.363
Тематика: Честный ЗНАК, маркировка, ККТ, GS1 DataMatrix, исправление ошибок 1С
Описание проблемы:
При выгрузке из 1С Фрэш в локальные конфигурации УНФ и Розница 3.0 при продаже маркированного может возникнуть следующая ошибка:
«Невозможно добавить нераспознанную маркируемую продукцию с кодом маркировки по причине: Запрещено сканировать логистические упаковки в форму документа с детализацией групповые упаковки. Сканирование таких кодов необходимо выполнять в форме проверки и подбора».
В нашем случае ошибка возникала при сканировании маркированной воды в документе продажи, но пострадали все группы маркированного товара. При этом код маркировки был корректным, товар относился к маркируемой продукции, а сканер передавал данные без ошибок.
Самое интересное — аналогичный код успешно обрабатывался в другой информационной базе с той же конфигурацией. Стало понятно, что проблема связана не с самим кодом маркировки, а с его интерпретацией внутри конкретной информационной базы.
Поиск причины:
Первоначально проверили наиболее очевидные варианты:
- Корректность передачи кода маркировки сканером.
- Настройки номенклатуры и вида маркируемой продукции.
- Работу механизма распознавания GS1 DataMatrix.
- Влияние установленных расширений конфигурации.
Отключение расширений проблему не устранило.
Также была создана копия проблемной информационной базы и проверена на другом компьютере. Ошибка воспроизводилась. Таким образом, удалось исключить влияние конкретного рабочего места и сосредоточиться на данных информационной базы.
Что показал отладчик:
В процессе отладки обнаружили, что обычный код маркировки единицы товара распознаётся системой как логистическая упаковка. В частности, при обработке кода определялись следующие значения:
ВидУпаковки = Логистическая
ТипШтрихкода = GS1-128
Однако фактически сканировался GS1 DataMatrix с идентификаторами применения GS1, характерными для индивидуального кода маркировки товара:
(01) GTIN
(21) Серийный номер
(93) Код проверки
То есть ошибка возникала не на этапе считывания DataMatrix, а на этапе определения его типа и назначения. Система ошибочно относила индивидуальный код маркировки к логистической упаковке, после чего срабатывала предусмотренная конфигурацией проверка. В ходе исследования вышли на функцию:
ОбщиеНастройкиРазбораКодаМаркировки()
В ней формируются настройки, используемые механизмом распознавания кодов маркировки.
Особое внимание привлекли таблицы:
НастройкиРазбора.Общие.ШаблоныКодовМаркировки
НастройкиРазбора.Общие.ШаблоныКодовМаркировкиПоВидамПродукции
В исправной информационной базе эти таблицы заполнялись корректно. В проблемной базе при диагностике обнаруживались пустые таблицы настроек. При дальнейшем исследовании выяснилось, что в конфигурации существуют механизмы первоначального заполнения шаблонов, однако проблема была связана не только с формированием настроек в оперативной памяти. Причину удалось локализовать в данных справочников.
Причина ошибки:
В проблемной информационной базе были обнаружены некорректные ссылки на шаблоны разбора кодов маркировки. Основной справочник:
ШаблоныКодовМаркировкиСУЗ
В его табличной части:
ШаблоныРазбораКодовМаркировки`
хранятся ссылки на элементы справочника:
ШаблоныРазбораКодовМаркировкиИСМП`
Именно здесь были обнаружены ссылки, которые требовалось восстановить. При этом наличие элементов с одинаковыми наименованиями ещё не означает, что ссылки указывают на одни и те же объекты. Для платформы 1С два элемента справочника с одинаковым наименованием, но разными уникальными идентификаторами — совершенно разные объекты. Поэтому визуально настройки могли выглядеть корректными, хотя фактически ссылались на неподходящие элементы. В результате механизм разбора кодов маркировки использовал некорректные настройки, а обычный GS1 DataMatrix ошибочно определялся как логистическая упаковка. Важно отметить: это причина, установленная в нашем конкретном случае. Аналогичное сообщение может возникать и при действительно ошибочном сканировании логистического кода.
Разработка решения:
Для восстановления настроек была подготовлена внешняя обработка переноса шаблонов из исправной информационной базы. Идея заключается в том, чтобы не переносить ссылки напрямую между базами, а восстановить их по наименованиям соответствующих элементов.
Принцип работы:
Шаг 1. Выгрузка из исправной базы
Обработка получает данные справочника:
ШаблоныКодовМаркировкиСУЗ
Дополнительно выгружается табличная часть ШаблоныРазбораКодовМаркировки, включая ссылку на шаблон разбора и признак Импорт.
Данные сохраняются в двух форматах в папку temp на диске С:
- XML — для последующего восстановления.
- TXT — для просмотра и сравнения настроек.
Шаг 2. Загрузка в проблемную базу
При загрузке обработка находит существующие элементы справочников по наименованию. Ссылки из исходной базы напрямую не переносятся. Вместо этого выполняется поиск соответствующего элемента уже в целевой информационной базе. После этого обновляются необходимые реквизиты и табличная часть. Такой подход позволяет восстановить связи между шаблонами, даже если уникальные идентификаторы элементов в двух базах различаются. Дополнительные проверки. Для снижения риска некорректного восстановления предусмотрены проверки:
- Существования целевого элемента.
- Уникальности найденного наименования.
- Наличия связанных шаблонов разбора.
- Корректности значений перечислений.
- Возможности записи изменённого элемента.
Если соответствующий элемент отсутствует или обнаружено несколько элементов с одинаковым наименованием, автоматическая подстановка не выполняется. Это принципиально важно: нельзя исправлять повреждённые ссылки, создавая новые неоднозначные соответствия.
Порядок восстановления:
1. Подготовить исправную информационную базу с той же версией конфигурации.
2. Открыть обработку в исправной базе.
3. Выгрузить шаблоны маркировки в XML и TXT.
4. Проверить содержимое выгрузки.
5. Открыть обработку в проблемной базе.
6. Загрузить XML с настройками.
8. Перезапустить сеанс 1С, чтобы исключить влияние ранее сформированных настроек и сеансового кеша.
9. Повторить сканирование проблемного кода маркировки.
Если причина совпадает с описанной выше, восстановление корректных ссылок позволяет устранить ошибочную классификацию кода.
Решение разрабатывалось для 1С: Управление нашей фирмой 3.0.13.363. На других релизах состав реквизитов, структура справочников и механизм формирования настроек разбора кодов маркировки могут отличаться. Обработка предназначена для восстановления настроек в ситуации, когда причина ошибки связана с некорректными ссылками на шаблоны. Она не исправляет физически повреждённые DataMatrix, ошибки сканера, некорректную номенклатуру или проблемы проверки кодов через «Честный ЗНАК». Также не рекомендуется использовать произвольную рабочую базу в качестве источника эталонных настроек. Сначала необходимо убедиться, что её шаблоны действительно корректны.
Итог:
Ошибка «Запрещено сканировать логистические упаковки в форму документа с детализацией групповые упаковки» не всегда означает, что пользователь действительно сканирует логистическую упаковку. В нашем случае обычный GS1 DataMatrix определялся как GS1-128 из-за некорректных настроек разбора кодов маркировки в информационной базе. Причину удалось найти через отладчик, сравнение исправной и проблемной баз и анализ справочника ШаблоныКодовМаркировкиСУЗ. Для восстановления была разработана обработка, которая переносит настройки из исправной базы, восстанавливая ссылки на существующие элементы по наименованиям.
К публикации прилагается архив с обработкой и выгрузкой настроек для УНФ 3.0.13.363.
Вступайте в нашу телеграмм-группу Инфостарт