В современных редакциях конфигураций на базе 1С:Предприятие 8.3, таких как 1С:Управление торговлей 11.5.27, 1С:ERP или 1С:Комплексная автоматизация, разработчики часто сталкиваются с тем, что привычные реквизиты номенклатуры перестают работать. Раньше для определения того, подлежит ли товар обязательной маркировке, достаточно было проверить одно булево поле в справочнике Номенклатура или ВидыНоменклатуры. Однако с развитием подсистем интеграции с ГИС МТ (Честный Знак), логика существенно усложнилась.
Рассмотрим подробно, почему старые методы больше не актуальны и как правильно реализовать проверку признака is_markable (маркируемость) в актуальных релизах.
Проанализируем структуру метаданных современных конфигураций. Выясним причину, по которой поиск простого флажка в карточке товара больше не приносит результата. В ранних версиях 1С:УТ признак маркировки действительно мог храниться как перечисление или булево значение. В свежих релизах (начиная с веток 11.5.12 и выше) система перешла на использование механизма особенностей учета.
Теперь признак «маркируемости» является производным. Он зависит от значения реквизита ОсобенностиУчета в справочнике ВидыНоменклатуры, а также от связанных данных в справочнике КлючиВидовПродукции. Более того, для оптимизации запросов и работы с оборудованием система кэширует эти данные или использует специализированные общие модули. Попытка прочитать реквизит Маркируемый напрямую из объекта Номенклатура вернет Ложь даже для обуви или табака, так как архитектура хранения данных изменилась. При необходимости перепривязать и скорректировать данные номенклатуры можно использовать обработку для изменения реквизитов маркировки в УТ.
Разберем самый правильный и «чистый» с точки зрения архитектуры 1С способ. Для определения маркировки следует использовать функции общих модулей, которые входят в состав Библиотеки интеграции с информационными системами (БИС). Рассмотрим пример кода, который позволяет быстро получить ответ на вопрос о маркируемости товара:
// Пример использования функций интеграции
НоменклатураСсылка = СсылкаНаТовар; // Ваша ссылка на справочник Номенклатура
ЭтоМаркируемыйТовар = ИнтеграцияИС.ЭтоМаркируемаяПродукция(НоменклатураСсылка);
Если ЭтоМаркируемыйТовар Тогда
// Товар подлежит обязательной маркировке
// Здесь можно реализовать логику для выгрузки в облачную кассу
КонецЕсли;
Функция ИнтеграцияИС.ЭтоМаркируемаяПродукция внутри себя анализирует не только вид номенклатуры, но и текущие настройки системы. Это позволяет избежать ошибок, если в базе включено ведение учета маркировки только для определенных категорий товаров.
Рассмотрим ситуацию, когда нам нужно получить не просто флаг «Да/Нет», а детальную информацию о виде продукции (например, для передачи в тег 1162 кассового чека). В этом случае нам поможет общий модуль ОбщегоНазначенияИС. Проанализируем пример получения данных через структуру описания:
// Получаем полное описание параметров маркировки номенклатуры
ОписаниеНоменклатуры = ОбщегоНазначенияИС.ОписаниеНоменклатуры(НоменклатураСсылка);
// Извлекаем ключ видов продукции
ВидПродукцииИС = ОписаниеНоменклатуры[НоменклатураСсылка].КлючВидовПродукции;
// Если ключ заполнен — продукция маркируется
МаркируемаяПродукция = ЗначениеЗаполнено(ВидПродукцииИС);
// Также можно узнать конкретную категорию (Обувь, Молоко, Табак и т.д.)
Если МаркируемаяПродукция Тогда
КатегорияТовара = ВидПродукцииИС.ВидПродукции;
КонецЕсли;
Преимущество этого метода заключается в том, что вы получаете доступ к Ключу видов продукции. Это системный справочник, который связывает настройки 1С с требованиями законодательства по маркировке. Именно на него ориентируются механизмы печати чеков и обмена с оборудованием.
Посмотрим на ситуацию со стороны данных. Если вам необходимо выполнить проверку в запросе или без обращения к тяжелым функциям общего модуля, важно понимать, где физически лежат настройки. Основным «источником истины» является реквизит ОсобенностиУчета в справочнике ВидыНоменклатуры. Рассмотрим алгоритм ручной проверки:
ВидНоменклатуры для текущей позиции.ОсобенностиУчета.ДополнительныеОсобенностиУчетаНоменклатуры, относящуюся к маркировке (например, ОбувнаяПродукция, МолочнаяПродукцияБезВсД и т.д.), то товар считается маркируемым.Важно: Список значений этого перечисления постоянно расширяется с вводом новых групп товаров (БАДы, антисептики, пиво и т.д.). Поэтому использование жестко заданных списков в коде не рекомендуется — лучше использовать методы БИС, описанные выше.
При выгрузке данных в облачную кассу (через API или файлы обмена) признака is_markable = true часто бывает недостаточно. Современные требования ФФД (Формата фискальных данных) требуют передачи конкретного кода типа маркировки. Проанализируем, как это получить.
Выясним причину, по которой касса может выдать ошибку даже при установленном флаге маркировки. Обычно это связано с отсутствием GTIN. В 1С:УТ 11.5 GTIN хранится в регистре сведений ШтрихкодыНоменклатуры. Для корректной работы маркировки рекомендуется проверять наличие штрихкода формата EAN-13, который зарегистрирован в системе GS1. Для автоматического сопоставления номенклатуры и записи GTIN в базу можно использовать обработку загрузки КИЗ и записи GTIN в УТ 11.5.
Для максимально точной работы используйте метод ИнтеграцияИСБЛ.ДанныеДляМаркировки(Номенклатура). Он возвращает структуру, содержащую:
Подведем итоги. Чтобы правильно реализовать параметр is_markable в 1С:УТ 11.5.27 и выше, забудьте о поиске реквизитов в самой номенклатуре. Правильный путь — это использование функций ИнтеграцияИС.ЭтоМаркируемаяПродукция(Номенклатура) или анализ ключей в ОбщегоНазначенияИС.ОписаниеНоменклатуры.
Такой подход гарантирует, что ваше решение не «сломается» после следующего обновления конфигурации, когда в систему будут добавлены новые группы маркируемых товаров. Мы рекомендуем всегда отдавать предпочтение вызовам стандартных библиотечных функций, так как они автоматически учитывают все законодательные изменения, внесенные методистами фирмы 1С.