При работе с маркированной продукцией в программах 1С (особенно в комплексных решениях вроде 1С:ERP, 1С:КА или 1С:УТ) пользователи периодически сталкиваются с неприятным сбоем на этапе проверки поступивших накладных. Программа выдает ошибку: «Поле "ВСеройЗоне" объекта "Структура" не обнаружено». Попытки исправить эту проблему «в лоб» через доработку структуры часто приводят к эффекту домино — проверка табачной продукции начинает проходить успешно, но на той же накладной ломается проверка соков, молока или упакованной воды из-за отсутствия ключа МРЦ.
В этой статье мы подробно разберем природу этого флага, выясним, почему возникает конфликт между товарными группами, и рассмотрим правильные варианты решения проблемы на уровне программного кода 1С.
Для начала проанализируем законодательную и техническую базу. Термин «серая зона» (grayZone) — это не выдумка программистов 1С, а официальное понятие, закрепленное в Постановлении Правительства РФ № 224 (пункт 79 правил маркировки табачной продукции).
На табачных фабриках производственные линии работают на колоссальных скоростях. Роботизированные системы агрегации физически не всегда успевают сопоставить конкретную пачку с блоком или коробом, в который она укладывается. Из-за этого государство официально разрешило производителям иметь люфт — до 1% кодов маркировки в «серой зоне» от общего объема партии. Это легально выпущенные коды, которые временно не имеют жесткой привязки к транспортной упаковке в системе ГИС МТ («Честный Знак»).
При проверке такого кода через TrueAPI система возвращает параметр:
"grayZone": true
Этот флаг сообщает розничной точке, что товар абсолютно легален, его можно принимать на баланс и продавать, даже если нарушена стандартная цепочка агрегации у производителя. Важно понимать: флаг «серой зоны» существует исключительно для табачной и никотиносодержащей продукции (ИС МОТП). Ни для соков, ни для молока, ни для обуви этот тег сервером ГИС МТ не возвращается.
Давайте посмотрим, как ведет себя конфигурация 1С при обработке входящих данных. При выполнении онлайн-проверки кодов маркировки система отправляет запрос в ГИС МТ и получает ответ в формате JSON, который затем преобразует во внутренний объект 1С — Структура (обычно она называется ПараметрыКодаМаркировкиОнлайн).
Сбой происходит по следующему сценарию:
grayZone. 1С успешно парсит JSON и создает в структуре ключ ВСеройЗоне.Структура ключ ВСеройЗоне отсутствует вовсе.ПараметрыКодаМаркировкиОнлайн.ВСеройЗоне.Часто программисты пытаются быстро решить проблему, безусловно добавляя свойство ВСеройЗоне со значением Ложь во все проверяемые структуры. Рассмотрим подробнее, почему так делать категорически нельзя.
Как только в общую структуру параметров онлайн-проверки для сока или воды принудительно внедряется свойство ВСеройЗоне, алгоритмы валидации 1С распознают этот тег как маркер табачной продукции (так как исторически и логически этот реквизит закреплен только за ИС МОТП). Программа переключает ветку валидации на табачный сценарий и начинает требовать обязательное заполнение параметра МРЦ (Максимальная розничная цена). Поскольку у сока или минеральной воды МРЦ отсутствует, проверка завершается новой ошибкой: «Поле объекта не обнаружено (МРЦ)».
Чтобы восстановить корректную работу системы для всех товарных групп одновременно, мы можем применить несколько подходов в зависимости от возможности изменения конфигурации.
Это самый правильный и надежный способ исправления ошибки на уровне кода. Вместо прямого обращения к свойству структуры, которое может отсутствовать, необходимо использовать стандартный метод платформы Свойство(). Проанализируем пример кода.
Вместо проблемного участка кода:
Если ПараметрыКодаМаркировкиОнлайн.ВСеройЗоне Тогда
// Логика обработки табака из серой зоны
КонецЕсли;
Необходимо написать безопасную конструкцию:
ЗначениеВСеройЗоне = Ложь;
Если ПараметрыКодаМаркировкиОнлайн.Свойство("ВСеройЗоне", ЗначениеВСеройЗоне) И ЗначениеВСеройЗоне Тогда
// Логика обработки кодов, которые действительно находятся в серой зоне
КонецЕсли;
Метод Свойство() сначала проверит, существует ли данный ключ в структуре. Если мы проверяем сок или воду, метод вернет Ложь, переменная ЗначениеВСеройЗоне останется равной Ложь, и программа продолжит работу без аварийного завершения.
Если логика конфигурации требует обязательного наличия этого свойства в структуре для прохождения дальнейших этапов валидации, мы должны инициализировать его строго по условию принадлежности к табачной продукции. Для этого проанализируем тип маркируемой номенклатуры.
Разберем по шагам пример реализации:
// Определяем, относится ли проверяемая продукция к ИС МОТП (Табак)
ЭтоТабачнаяПродукция = (ПараметрыКодаМаркировкиОнлайн.ТоварнаяГруппа = ПредопределенноеЗначение("Перечисление.ТоварныеГруппыМП.Табак"));
Если ЭтоТабачнаяПродукция Тогда
Если Не ПараметрыКодаМаркировкиОнлайн.Свойство("ВСеройЗоне") Тогда
ПараметрыКодаМаркировкиОнлайн.Вставить("ВСеройЗоне", Ложь);
КонецЕсли;
КонецЕсли;
При таком подходе свойство ВСеройЗоне появится в структуре исключительно при проверке сигарет, альтернативного табака или никотиносодержащей продукции. Для пищевой, легкой или иной промышленности структура останется чистой, что предотвратит ложные срабатывания проверок на МРЦ.
Поскольку подсистема интеграции с ИС МП является частью Библиотеки стандартных подсистем (БСП), фирма 1С регулярно выпускает оперативные исправления подобных ошибок в виде патчей. Если ваша конфигурация находится на поддержке, выполните следующие действия:
EF_), и установите их.Применяя эти методы, мы обеспечим стабильную и бесперебойную работу кассовых узлов и складов при приемке и проверке любых видов маркированной продукции.