При работе с маркируемой продукцией (табак, обувь, одежда) в устаревших или типовых конфигурациях 1С, таких как Управление торговлей 10.3, пользователи часто сталкиваются с двумя критическими проблемами. Первая — некорректное формирование тега 1162 (код типа маркировки), когда система по старинке передает специфические байты вместо универсального префикса. Вторая — загадочное сообщение «Отсутствует» при сканировании маркированного товара на кассе. В этой статье мы подробно разберем механику работы системы с маркировкой и выясним, как привести работу программы в соответствие с актуальными требованиями закона.
Рассмотрим ситуацию с передачей кода маркировки в ККТ. Согласно актуальным требованиям (особенно в рамках ФФД 1.2), формат передачи данных в чеке претерпел изменения. Раньше для каждой товарной группы использовался свой идентификатор: например, для обуви это были байты 15 20, а для табачных изделий — 00 05. Однако современный стандарт предполагает использование универсального кода типа маркировки 44 4D (что соответствует шестнадцатеричному представлению символов «DM» — DataMatrix).
Проанализируем, почему типовые релизы 1С, такие как УТ 10.3.60, могут продолжать передавать старые значения. Проблема кроется в том, что логика формирования структуры тега жестко прописана в коде конфигурации или в используемой обработке обслуживания ККТ. Если программа видит, что товар относится к категории «Обувь», она принудительно подставляет старый префикс. Чтобы исправить это в кастомных решениях или при использовании самописных обработок, мы можем перехватить структуру тега перед отправкой на драйвер ККТ.
Посмотрим на пример логики, которую можно внедрить в обработку обслуживания для принудительной замены кода типа:
// Пример подмены типа маркировки в структуре чека
Если СтрНайти(ПараметрыЧека.ТипМаркировки, "15 20") > 0
Или СтрНайти(ПараметрыЧека.ТипМаркировки, "00 05") > 0 Тогда
// Заменяем на универсальный код 44 4D для ФФД 1.2
ПараметрыЧека.ТипМаркировки = "44 4D";
КонецЕсли;
Важно понимать, что в базовых версиях конфигураций, где изменение кода невозможно, решение проблемы часто ложится на плечи разработчиков драйверов ККТ. Современные драйверы умеют самостоятельно «нормализовать» код маркировки, если прошивка кассы обновлена до актуальной версии. Поэтому первым делом проверьте версию прошивки вашей ККТ.
Теперь разберем вторую проблему: при сканировании маркированной пачки сигарет или пары обуви система выдает сообщение «Отсутствует». Это крайне неудачный вариант локализации ошибки в типовых решениях, который вводит пользователей в заблуждение. Проанализируем, что происходит «под капотом» 1С в этот момент.
В конфигурации УТ 10.3 реализован механизм упрощенного учета марок. Алгоритм работы следующий:
Номенклатура ищется товар.КодыУпаковок (или аналогичный регистр).Ошибка «Отсутствует» возникает ровно в тот момент, когда вы пытаетесь продать эту же марку второй раз. Система находит этот код в базе, видит, что он уже помечен как «проданный» (или просто существует в базе, хотя при первом сканировании его там быть не должно), и блокирует добавление в чек. Сообщение «Отсутствует» в данном контексте означает: «Данная марка отсутствует в свободном остатке, так как была реализована ранее».
Если вы столкнулись с такой ситуацией на тестовом стенде или в результате ошибки кассира, решение заключается в очистке локального кэша марок. Рассмотрим, как это сделать программно или через интерфейс:
Для исправления ситуации необходимо найти справочник, где хранятся считанные коды (в УТ 10.3 это часто справочник КодыУпаковок или специализированный регистр сведений). Найдите в нем запись, соответствующую вашему DataMatrix, и удалите её. После этого система позволит повторно добавить товар в чек, так как для неё эта марка снова станет «новой».
Проанализируем также ситуацию, когда товар вообще не ищется по DataMatrix. Часто это происходит из-за некорректной настройки сканера (он может не передавать управляющие символы или префиксы). В типовых формах за обработку сканирования отвечает процедура ВнешнееСобытие. Чтобы система успешно находила товар, убедитесь, что в коде реализован разбор марки:
// Фрагмент разбора DataMatrix для поиска номенклатуры
Если МаркировкаПродукции.ЭтоКодМаркировки(ДанныеСканера) Тогда
GTIN = МаркировкаПродукции.ПолучитьGTINИзМарки(ДанныеСканера);
// Преобразование GTIN в EAN13 для поиска в базе
ШтрихКодПоиска = СокрЛП(Сред(GTIN, 2, 13));
НайденнаяСсылка = Справочники.Номенклатура.НайтиПоШтрихкоду(ШтрихКодПоиска);
КонецЕсли;
Подведем итог и составим план действий для администратора или программиста 1С:
"Код маркировки %1 уже был продан ранее!". Это сэкономит массу времени техподдержке и пользователям.Следуя этим рекомендациям, мы сможем обеспечить стабильную работу маркировки даже на таких «заслуженных» конфигурациях, как УТ 10.3, минимизируя простои на кассовой зоне.