Как исправить ошибку -3895 при передаче маркировки шин в ККМ АТОЛ из Альфа-Авто 4?

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

Рассмотрим достаточно распространенную и сложную задачу, с которой сталкиваются программисты 1С при поддержке устаревших конфигураций. Суть проблемы заключается в следующем: имеется система на базе «Альфа-Авто» редакции 4.1 и кассовый аппарат АТОЛ (например, АТОЛ 55Ф). Данная редакция конфигурации умеет работать только с драйверами торгового оборудования 8-й версии (ДТО 8). Обновлений под актуальный ДТО 10 разработчиком не предусмотрено.

При попытке пробить маркированные шины (или другие товары, подлежащие обязательной маркировке, такие как обувь, одежда, парфюмерия), система должна передать данные в онлайн-кассу. Программисты часто пытаются передать тег 1162 напрямую в устройство через метод WriteAttribute, предварительно переведя код маркировки (GTIN и серийный номер) в 16-ричный формат. Однако при выполнении команды возникает ошибка -3895 (Неверная длина).

Разберем причину возникновения ошибки -3895

Давайте проанализируем ситуацию и выясним причину, по которой старый код отказывается работать. Посмотрим на пример кода, который часто пытаются использовать для решения этой задачи в ДТО 8:


Устройство.BeginItem;
Устройство.ItemType=1;
Если ЗначениеЗаполнено(ТипМаркировки) И ТипМаркировки <> -1 Тогда
    ДанныеМарки = Новый Структура;
    ДанныеМарки.Вставить("ГТИН",GTINМаркировки);
    ДанныеМарки.Вставить("СЕРИЯ",СерийныйНомерМаркировки);
    СтрокаМаркировки = ПолучитьКодДляПередачиТега1162_010320(ДанныеМарки); 
    
    Устройство.StreamFormat = 5;
    Устройство.AttrNumber = 1162;
    Устройство.AttrValue = СокрЛП(СтрокаМаркировки);
    Устройство.WriteAttribute; // Здесь возникает ошибка -3895
КонецЕсли;
Устройство.Name = стрНаименование;
Устройство.Price = Цена;
Устройство.Quantity = Количество;
Устройство.Department = Отдел;
Устройство.Summ = Сумма;
Устройство.TaxTypeNumber = НомерНалога;
Устройство.EndItem;

На первый взгляд, переменная СтрокаМаркировки формируется верно (в 16-ричном формате). Однако ошибка -3895 напрямую связана с переходом кассовых аппаратов на Формат Фискальных Документов (ФФД) 1.2.

В старых форматах (ФФД 1.05 и 1.1) действительно использовался тег 1162, в который можно было передать HEX-строку. Но в актуальном ФФД 1.2 логика работы кардинально изменилась: на смену пришел тег 1163. Оборудование стало строго проверять длину и формат передаваемого кода. ДТО 8 официально снят с поддержки и технически несовместим с ФФД 1.2. Он просто не умеет корректно обрабатывать полный код DataMatrix с криптохвостом, а в самом драйвере отсутствуют API-методы для локальной и онлайн-проверки валидности кода в системе «Честный ЗНАК» через ФН-М до момента пробития чека. Таким образом, любые попытки прямой записи тега через устаревший драйвер будут отклоняться прошивкой кассы.

Решение проблемы: переход на ДТО 10 и перенос логики

Чтобы пробитие чеков с маркировкой работало без ошибок, разберем по шагам, что необходимо сделать.

  1. Обновление оборудования: Убедитесь, что кассовый аппарат переведен на «Платформу 5.0» (версия прошивки не ниже 5.8.100), установлен фискальный накопитель нового образца (ФН-М), а версия ДТО 10 — не ниже 10.9.x (рекомендуется 10.10.x и выше). В настройках драйвера ККТ необходимо включить опцию «Для проверки КМ использовать прямой доступ к ФН-М».
  2. Подключение ДТО 10 к Альфа-Авто 4: Поскольку штатно 4-я редакция не поддерживает ДТО 10, используйте внешние разработки и компоненты (обертки), которые эмулируют необходимые интерфейсы или предоставляют внешние обработки обслуживания для подключения современных драйверов АТОЛ.
  3. Перенос функционала из Альфа-Авто 5: Возьмите актуальный релиз «Альфа-Авто» ред. 5.1 и перенесите из него весь функционал, касающийся маркировки, в вашу базу 4-й редакции.

Особенности адаптации кода маркировки в Альфа-Авто 4

Рассмотрим подробнее процесс переноса подсистемы маркировки. Вам не обязательно переносить абсолютно все документы. Достаточно адаптировать маркировку в следующих объектах:

Документы типа «Ввод в оборот кодов маркировки» или «Заказ кодов маркировки» можно не переносить, если вы не являетесь производителем, а занимаетесь только розничной продажей. Учет поступлений кодов (УПД) целесообразно вести через системы ЭДО (например, СБИС), а в 1С заносить уже подтвержденные документы с последующим сканированием марок при продаже.

Если же вы все-таки решили перенести документы ввода в оборот, вы можете столкнуться с тем, что их процедуры зашиты в защищенные модули. Посмотрим на пример того, как можно обойти проверку защищенных функций для таких документов:


// Функция помещается в общий модуль ЗфЗащищенныеФункции
Функция зфФормаДокументаПриОткрытии(ЭтаФорма, ПовторноеОткрытие = Ложь) Экспорт
    ОбработкаЗащиты = Неопределено;
    Если Не зфПроверкаЗащиты(ОбработкаЗащиты) Тогда
        Возврат Ложь;
    КонецЕсли;
    
    пЭтаФорма = ЭтаФорма;
    пПовторноеОткрытие = ПовторноеОткрытие;
    
    Если ТипЗНЧ(ЭтаФорма.Ссылка) = Тип("ДокументСсылка.ЗаказКодовМаркировки") Тогда
        Рез = Истина;
    ИначеЕсли ТипЗНЧ(ЭтаФорма.Ссылка) = Тип("ДокументСсылка.ВводВОборотКодовМаркировки") Тогда
        Рез = Истина;
    Иначе
        Рез = ОбработкаЗащиты.Компонента.дкФормаПриОткрытии(пЭтаФорма, пПовторноеОткрытие);
    КонецЕсли;
    
    ЭтаФорма.Модифицированность = Ложь;
    Возврат Рез;
КонецФункции

Важное замечание: При таком обходе вам придется самостоятельно дописывать логику заполнения реквизитов по умолчанию (Организация, Подразделение, Автор и т.д.), так как штатный защищенный модуль перестанет их инициализировать.

Заключение

Подведем итоги. Пытаться передать данные маркировки через устаревший ДТО 8 в современных реалиях бессмысленно — касса вернет ошибку из-за несоответствия формату ФФД 1.2. Оптимальным решением является использование внешних решений для интеграции ДТО 10 в устаревшую «Альфа-Авто 4» и аккуратный перенос алгоритмов работы с DataMatrix из 5-й редакции. В новом алгоритме (через ДТО 10) касса требует передачи сырого кода DataMatrix, самостоятельно проверяет его через ФН-М и ОФД, и только после успешной валидации пробивает чек по всем правилам закона.

← На главную