Как передать данные в тег 1162 при пробитии чека с маркировкой в 1С 7.7 через драйвер АТОЛ 10?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

Процесс интеграции маркировки в устаревшие конфигурации 1С 7.7 сопряжен с рядом технических сложностей. Одной из наиболее распространенных проблем является корректная передача кода маркировки (DataMatrix) в фискальный накопитель через драйвер ККТ. Часто программисты сталкиваются с ошибкой "Не поддерживается в данной версии" или "Неверное количество" при попытке записи параметра в тег 1162. В этой статье мы подробно разберем, как обойти ограничения платформы 7.7 и правильно сформировать данные для ККТ АТОЛ.

Почему стандартные методы передачи маркировки дают ошибку?

Проанализируем ситуацию. В современных версиях драйвера АТОЛ (ДТО 10) предусмотрен параметр LIBFPTR_PARAM_MARKING_CODE, который должен принимать "сырую" строку кода маркировки и самостоятельно ее парсить. Однако в среде 1С 7.7 этот механизм часто дает сбой по следующим причинам:

  1. Ограничения COM-интерфейса: 1С 7.7 не всегда корректно передает сложные типы данных (массивы байтов), которые ожидает драйвер под капотом этого параметра.
  2. Версия прошивки ККТ: Для полноценной работы с маркировкой касса должна работать на "Платформе 5.0" (прошивки 5.7.x и выше) или иметь актуальную версию Платформы 2.5 с установленной лицензией на маркировку (Лицензия №10).
  3. Неверная интерпретация ошибки: Ошибка "Неверное количество" часто является следствием того, что драйвер не смог принять тег 1162 и сбросил состояние чека, из-за чего последующая команда передачи количества товара воспринимается как некорректная.

Решение проблемы через метод setParamStrHex

Рассмотрим наиболее надежный способ, который работает даже в тех случаях, когда стандартный setParam пасует. Это использование метода setParamStrHex. Вместо передачи текстовой строки, мы будем передавать заранее сформированную последовательность байтов в шестнадцатеричном виде (HEX). Это избавляет драйвер от необходимости гадать, какой тип маркировки перед ним, и исключает ошибки кодировки.

Для реализации этого метода нам необходимо вручную собрать значение тега 1162. Структура этого значения для ФФД 1.05 выглядит следующим образом:

[Префикс типа товара] + [Данные в HEX]

Популярные префиксы:

Алгоритм программного преобразования кода маркировки

Выясним, как преобразовать считанный сканером код (например, для обуви) в нужный формат. Код маркировки обуви обычно начинается с 01 (GTIN) и 21 (Серийный номер). Для формирования тега нам нужно взять GTIN (14 цифр) и серийный номер (13 символов).

Рассмотрим функции для преобразования данных, которые нам понадобятся в 1С 7.7:


// Функция перевода десятичного числа в HEX (или любую другую систему)
Функция DecToAny(Знач тЗначение, тОснование)
    тРезультат = "";
    Пока тЗначение > 0 Цикл
        тРезультат = Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", тЗначение%тОснование + 1, 1) + тРезультат;
        тЗначение = Цел(тЗначение/тОснование) ;
    КонецЦикла;
    Возврат тРезультат;
КонецФункции

// Функция перевода ASCII строки в HEX последовательность
Функция AsciToHex(Знач тЗначение)
    ДлинаСтр  = СтрДлина(тЗначение);
    тРезультат = "";
    Для i=1 По ДлинаСтр Цикл
        ТекСимвол = Сред(тЗначение,i,1);
        тРезультат = тРезультат + DecToAny(КодСимв(ТекСимвол),16);
    КонецЦикла;               
    Возврат тРезультат;
КонецФункции

Проанализируем логику подготовки строки. После получения GTIN и Serial, их нужно перевести в HEX, убедиться в четности количества знаков (добавить ведущие нули при необходимости) и разбить пробелами. Однако, как показывает практика, самый простой и эффективный способ для 1С 7.7 — это прямая передача данных через setParamStrHex с префиксом 44 4D.

Пример интеграции в процедуру пробития чека

Посмотрим на пример кода, который необходимо вставить перед регистрацией позиции в чеке:


// Предположим, что СтрМаркировки - это HEX-строка, сформированная из кода
// Для обуви префикс 44 4D (DM)
// Пример формирования строки: "44 4D 04 33 B1 00 2C 32 6C 43 77 6E 52 4E 25 70 4F 25 6E 28 55"

// Очищаем параметры перед установкой
Объект.setParam(Объект.LIBFPTR_PARAM_MARKING_CODE, ""); 

// Устанавливаем тег 1162 напрямую через HEX
Объект.setParamStrHex(1162, "44 4D " + СформированнаяHEXСтрока);

// Далее стандартная регистрация позиции
Объект.setParam(Объект.LIBFPTR_PARAM_COMMODITY_NAME, "Ботинки мужские");
Объект.setParam(Объект.LIBFPTR_PARAM_PRICE, 1500.00);
Объект.setParam(Объект.LIBFPTR_PARAM_QUANTITY, 1);
Объект.setParam(Объект.LIBFPTR_PARAM_TAX_TYPE, Объект.LIBFPTR_TAX_NO);
Объект.registration();

Важные замечания по настройке оборудования

Рассмотрим дополнительные факторы, которые могут влиять на результат:

Итоги

Мы выяснили, что для решения проблемы передачи данных в тег 1162 в 1С 7.7 наиболее эффективным методом является использование setParamStrHex. Это позволяет избежать проблем с типизацией данных в COM-объектах и гарантирует, что фискальный накопитель получит данные в том виде, в котором он их ожидает. Помните о необходимости добавления правильного префикса товарной группы (например, 44 4D для обуви) и следите за актуальностью прошивки вашего кассового аппарата.

← На главную