Ошибка «Значение не является значением объектного типа (Метаданные)» при сканировании QR-кода Честный Знак: причины и решение

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

В современных конфигурациях 1С, таких как «1С:Розница 3.0» и «1С:УНФ 3.0», работа с маркированным товаром является критически важным бизнес-процессом. Однако при обновлении релизов или подключении нового оборудования пользователи часто сталкиваются с ошибками, которые на первый взгляд кажутся системными сбоями платформы. Одна из таких распространенных проблем — аварийное завершение работы программы при попытке отсканировать код маркировки (DataMatrix) в документах поступления.

Разберем детально ошибку, при которой система сообщает: «Значение не является значением объектного типа (Метаданные)». Мы проанализируем стек вызовов, выясним технические причины происходящего и рассмотрим методы устранения этой неисправности.

Анализ стека ошибки и диагностика проблемы

Первым делом обратимся к тексту ошибки и стеку вызовов, который предоставляет платформа. Это самый важный этап диагностики. Рассмотрим ключевые строки, которые приводят к падению:


{ОбщийМодуль.ОбщегоНазначения.Модуль(4225)}:Возврат Ссылка.Метаданные().ПолноеИмя();
...
{Документ.ПриходнаяНакладная.МодульМенеджера(12579)}:Если НЕ ОбщегоНазначения.СсылкаСуществует(НайденнаяУпаковка) Тогда

Давайте проанализируем, что здесь происходит.

  1. В модуле менеджера документа ПриходнаяНакладная выполняется проверка существования ссылки на упаковку. Переменная НайденнаяУпаковка передается в функцию общего модуля.
  2. В общем модуле ОбщегоНазначения платформа пытается получить метаданные переданной ссылки через метод .Метаданные().
  3. Ошибка «Значение не является значением объектного типа» означает, что переменная Ссылка (в данном контексте это наша НайденнаяУпаковка) не содержит ссылочного типа данных (СправочникСсылка, ДокументСсылка и т.д.). Чаще всего она содержит Неопределено или Null.

Вывод: Проблема заключается не в самой платформе, а в том, что алгоритм поиска упаковки по штрихкоду не смог найти соответствие в базе данных и вернул пустое значение. Далее код конфигурации (в конкретном релизе 3.0.13.251 и близких к нему) пытается работать с этим пустым значением как с объектом, что и вызывает ошибку.

Почему это происходит только в документах закупки?

Многие замечают, что тот же самый товар отлично сканируется в Рабочем Месте Кассира (РМК). Почему так происходит? Разберем различия в логике:

Основные причины и методы решения

Рассмотрим пошагово, как исправить ситуацию, двигаясь от простого к сложному.

1. Проверка настроек сканера штрихкодов

Это самая частая причина проблем с маркировкой. Код DataMatrix содержит специальные непечатаемые символы-разделители (FNC1 или GS), которые разделяют группы данных (GTIN, серийный номер и т.д.).

Если сканер подключен в режиме «Клавиатура» (Keyboard Wedge), он часто «проглатывает» эти спецсимволы или заменяет их на пробелы. В результате 1С получает искаженную строку, не может распарсить её через драйвер и не находит товар.

Решение:

  1. Переведите сканер в режим COM-порта (эмуляция RS-232). Это рекомендованный режим для работы с маркировкой в 1С.
  2. Установите драйвер «1С:Сканер штрихкода (NativeApi)» или драйвер от производителя оборудования.
  3. В настройках оборудования в 1С выполните «Тест устройства». Отсканируйте код маркировки.

Посмотрим на результаты теста. Правильный результат должен выглядеть примерно так (в зависимости от драйвера спецсимволы могут отображаться как <GS>, [F1] или просто специфические скобки):

'01' + GTIN + '21' + Serial + ...

Если данные приходят сплошным потоком без разделителей групп, алгоритм ОбработатьДанныеШтрихкодаОбъемноСортовогоУчета не сможет извлечь GTIN, поиск упаковки вернет Неопределено, и возникнет ошибка.

2. Проблема формата GTIN в базе данных

Второй распространенной причиной является несоответствие формата GTIN (глобального номера предмета торговли) в карточке номенклатуры и в самом QR-коде, а также проблемы с отсутствующими штрихкодами (GTIN).

Разберем ситуацию:

Механизм поиска в «Приходной накладной» строго ищет совпадение. Если он извлек из маркировки GTIN 04600000000012, а в базе записан 4600000000012, упаковка может быть не найдена.

Что делать:

  1. Откройте карточку проблемной номенклатуры.
  2. Перейдите в список штрихкодов.
  3. Убедитесь, что там есть запись именно для упаковки, которая используется в документе, чтобы привести данные в порядок.
  4. Попробуйте добавить новый штрихкод, отсканировав DataMatrix прямо в карточке товара. Система должна корректно распознать тип штрихкода как GS1 DataMatrix.

3. Ошибка релиза конфигурации

В тексте вопроса указана версия конфигурации 3.0.13.251. Для этой ветки релизов (и соседних с ней) была зафиксирована ошибка в логике проверки найденной упаковки. Разработчики допустили ситуацию, когда проверка метаданных вызывается до того, как система убедилась, что ссылка вообще найдена.

Как проверить и исправить:

  1. Зайдите в раздел Администрирование — Обслуживание — Обновление программы.
  2. Проверьте наличие доступных Исправлений (патчей). Для «Розницы» и «УНФ» 3.0 регулярно выходят микро-обновления, исправляющие именно ошибки интеграции с ИС МП.
  3. Ищите патчи с описанием, содержащим слова «ОСУ», «Маркировка», «Ошибка при сканировании».
  4. Установите все актуальные патчи и перезапустите сеанс.

Если возможности обновиться нет, временным решением (для программиста) может быть внесение изменений в код модуля менеджера (только если конфигурация на поддержке с возможностью изменения). Необходимо обернуть вызов в проверку на заполненность.


// Примерный вид исправления (псевдокод)
Если ЗначениеЗаполнено(НайденнаяУпаковка) И НЕ ОбщегоНазначения.СсылкаСуществует(НайденнаяУпаковка) Тогда
    // Логика обработки ошибки
КонецЕсли;

Однако, настоятельно рекомендуем использовать типовые механизмы обновления и патчи.

4. Отладка для точного выявления причины

Если предыдущие методы не помогли, необходимо использовать отладчик. Давайте определим алгоритм действий для программиста.

  1. Запустите конфигуратор и предприятие в режиме отладки.
  2. Поставьте точку останова в модуле Документ.ПриходнаяНакладная.МодульМенеджера на строке, где возникает ошибка (в примере это строка 12579, но в вашем релизе она может отличаться). Ориентируйтесь на поиск строки СсылкаСуществует(НайденнаяУпаковка).
  3. Выполните сканирование.
  4. Когда сработает точка останова, вычислите выражение НайденнаяУпаковка. Скорее всего, оно будет равно Неопределено.
  5. Поднимитесь выше по стеку вызовов к процедуре ОбработатьДанныеШтрихкодаОбъемноСортовогоУчета. Посмотрите, какие данные пришли в переменную ДанныеШтрихкода.

Если в ДанныеШтрихкода содержится корректная структура с выделенным GTIN, но поиск по справочникам не дал результатов — проблема в данных (штрихкоды в базе). Если же структура данных пуста или некорректна — проблема в настройках сканера или драйвере оборудования.

Резюме

Ошибка «Значение не является значением объектного типа (Метаданные)» при сканировании маркировки — это следствие неудачного поиска упаковки товара, помноженное на недоработку в коде конкретного релиза конфигурации. Чтобы решить проблему:

  1. Убедитесь, что сканер работает в режиме COM и корректно передает спецсимволы GS1.
  2. Проверьте соответствие GTIN в марке и в карточке номенклатуры (включая лидирующие нули).
  3. Обязательно установите последние патчи для вашей версии конфигурации «1С:Розница» или «1С:УНФ» с обновлением механизмов взаимодействия.
← На главную