В современных конфигурациях 1С, таких как «1С:Розница 3.0» и «1С:УНФ 3.0», работа с маркированным товаром является критически важным бизнес-процессом. Однако при обновлении релизов или подключении нового оборудования пользователи часто сталкиваются с ошибками, которые на первый взгляд кажутся системными сбоями платформы. Одна из таких распространенных проблем — аварийное завершение работы программы при попытке отсканировать код маркировки (DataMatrix) в документах поступления.
Разберем детально ошибку, при которой система сообщает: «Значение не является значением объектного типа (Метаданные)». Мы проанализируем стек вызовов, выясним технические причины происходящего и рассмотрим методы устранения этой неисправности.
Первым делом обратимся к тексту ошибки и стеку вызовов, который предоставляет платформа. Это самый важный этап диагностики. Рассмотрим ключевые строки, которые приводят к падению:
{ОбщийМодуль.ОбщегоНазначения.Модуль(4225)}:Возврат Ссылка.Метаданные().ПолноеИмя();
...
{Документ.ПриходнаяНакладная.МодульМенеджера(12579)}:Если НЕ ОбщегоНазначения.СсылкаСуществует(НайденнаяУпаковка) Тогда
Давайте проанализируем, что здесь происходит.
ПриходнаяНакладная выполняется проверка существования ссылки на упаковку. Переменная НайденнаяУпаковка передается в функцию общего модуля.ОбщегоНазначения платформа пытается получить метаданные переданной ссылки через метод .Метаданные().Ссылка (в данном контексте это наша НайденнаяУпаковка) не содержит ссылочного типа данных (СправочникСсылка, ДокументСсылка и т.д.). Чаще всего она содержит Неопределено или Null.Вывод: Проблема заключается не в самой платформе, а в том, что алгоритм поиска упаковки по штрихкоду не смог найти соответствие в базе данных и вернул пустое значение. Далее код конфигурации (в конкретном релизе 3.0.13.251 и близких к нему) пытается работать с этим пустым значением как с объектом, что и вызывает ошибку.
Многие замечают, что тот же самый товар отлично сканируется в Рабочем Месте Кассира (РМК). Почему так происходит? Разберем различия в логике:
Неопределено.Рассмотрим пошагово, как исправить ситуацию, двигаясь от простого к сложному.
Это самая частая причина проблем с маркировкой. Код DataMatrix содержит специальные непечатаемые символы-разделители (FNC1 или GS), которые разделяют группы данных (GTIN, серийный номер и т.д.).
Если сканер подключен в режиме «Клавиатура» (Keyboard Wedge), он часто «проглатывает» эти спецсимволы или заменяет их на пробелы. В результате 1С получает искаженную строку, не может распарсить её через драйвер и не находит товар.
Решение:
Посмотрим на результаты теста. Правильный результат должен выглядеть примерно так (в зависимости от драйвера спецсимволы могут отображаться как <GS>, [F1] или просто специфические скобки):
'01' + GTIN + '21' + Serial + ...
Если данные приходят сплошным потоком без разделителей групп, алгоритм ОбработатьДанныеШтрихкодаОбъемноСортовогоУчета не сможет извлечь GTIN, поиск упаковки вернет Неопределено, и возникнет ошибка.
Второй распространенной причиной является несоответствие формата GTIN (глобального номера предмета торговли) в карточке номенклатуры и в самом QR-коде, а также проблемы с отсутствующими штрихкодами (GTIN).
Разберем ситуацию:
ШтрихкодыНоменклатуры штрихкод может быть записан в формате EAN-13 (13 цифр) или даже без лидирующего нуля.Механизм поиска в «Приходной накладной» строго ищет совпадение. Если он извлек из маркировки GTIN 04600000000012, а в базе записан 4600000000012, упаковка может быть не найдена.
Что делать:
GS1 DataMatrix.В тексте вопроса указана версия конфигурации 3.0.13.251. Для этой ветки релизов (и соседних с ней) была зафиксирована ошибка в логике проверки найденной упаковки. Разработчики допустили ситуацию, когда проверка метаданных вызывается до того, как система убедилась, что ссылка вообще найдена.
Как проверить и исправить:
Если возможности обновиться нет, временным решением (для программиста) может быть внесение изменений в код модуля менеджера (только если конфигурация на поддержке с возможностью изменения). Необходимо обернуть вызов в проверку на заполненность.
// Примерный вид исправления (псевдокод)
Если ЗначениеЗаполнено(НайденнаяУпаковка) И НЕ ОбщегоНазначения.СсылкаСуществует(НайденнаяУпаковка) Тогда
// Логика обработки ошибки
КонецЕсли;
Однако, настоятельно рекомендуем использовать типовые механизмы обновления и патчи.
Если предыдущие методы не помогли, необходимо использовать отладчик. Давайте определим алгоритм действий для программиста.
Документ.ПриходнаяНакладная.МодульМенеджера на строке, где возникает ошибка (в примере это строка 12579, но в вашем релизе она может отличаться). Ориентируйтесь на поиск строки СсылкаСуществует(НайденнаяУпаковка).НайденнаяУпаковка. Скорее всего, оно будет равно Неопределено.ОбработатьДанныеШтрихкодаОбъемноСортовогоУчета. Посмотрите, какие данные пришли в переменную ДанныеШтрихкода.Если в ДанныеШтрихкода содержится корректная структура с выделенным GTIN, но поиск по справочникам не дал результатов — проблема в данных (штрихкоды в базе). Если же структура данных пуста или некорректна — проблема в настройках сканера или драйвере оборудования.
Ошибка «Значение не является значением объектного типа (Метаданные)» при сканировании маркировки — это следствие неудачного поиска упаковки товара, помноженное на недоработку в коде конкретного релиза конфигурации. Чтобы решить проблему: