Как правильно реализовать выбытие маркированного товара по ФФД 1.2 в 1С 7.7?

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

Особенности передачи кода маркировки

Переход на ФФД 1.2 требует строгого соблюдения формата передачи данных в фискальный накопитель. Одной из самых частых ошибок является потеря управляющих символов GS (Group Separator, ASCII код 29). Если вы считываете марку сканером в режиме эмуляции клавиатуры, он может удалять этот символ из строки. Для корректной работы системы символ GS должен присутствовать строго перед идентификаторами применения 91 и 92.

Рассмотрим, как правильно восстановить структуру марки, если она была считана некорректно. Никогда не заменяйте символ GS на пробелы или произвольные «квадратики» — это приведет к ошибке Код товара не распознан. Используйте Симв(29) для вставки управляющего символа в нужные позиции.

Алгоритм подготовки кода маркировки

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


// Пример корректной сборки кода маркировки
ДлинаКМ = СтрДлина(КодМаркировки);
СимволЗамены = Симв(29); 
// Разбиваем КМ на части и вставляем разделители GS
КодМаркировки = Сред(КодМаркировки, 1, 31) + СимволЗамены + Сред(КодМаркировки, 32, 6) + СимволЗамены + Сред(КодМаркировки, 38, ДлинаКМ - 38 + 1);
Объект.BarCode = КодМаркировки;

Последовательность вызова методов фискального регистратора

Для успешного выбытия товара по ФФД 1.2 недостаточно просто передать код. Важно соблюдать строгий порядок вызова методов. Рассмотрим этапы выполнения операции:

  1. Выполните FNOperation() — это инициализирует начало операции с ФН.
  2. Установите параметры товара, такие как PaymentTypeSign (признак способа расчета) и PaymentItemSign (признак предмета расчета). Для маркированных товаров часто используется код 33.
  3. Вызовите FNCheckItemBarcode() для проверки кода маркировки через ФН и ОИСМ.
  4. Проанализируйте результат проверки: CheckItemLocalResult, KMServerErrorCode и KMServerCheckingStatus. Если проверка вернула ошибку, обязательно выполните AnnounceCheck() или аннулирование.
  5. Если проверка успешна, вызовите FNAcceptMarkingCode().
  6. В завершение передайте данные в чек с помощью FNSendItemBarcode().

Важные замечания по параметрам

При настройке предмета расчета учитывайте следующие требования:

Признак предмета расчета (тег 1212): Для маркированных товаров (например, шин или обуви) рекомендуется использовать значение 33, что соответствует реализуемому товару, подлежащему маркировке. Использование значения 1 («Товар») может быть недостаточно для специфических групп товаров.

Мера количества (тег 2108): Установка MeasureUnit = 0 корректно обозначает штучный товар.

Проверка версии ФФД

Чтобы ваша обработка корректно работала на кассах с разным уровнем подготовки, мы можем программно запрашивать версию ФФД из таблицы настроек ККТ. Для аппаратов Штрих-М это часто 17-я таблица.


// Пример проверки версии ФФД
Объект.Password = ПарольАдминистратораФР;
Объект.TableNumber = 17;
Объект.FieldNumber = 17;
Объект.RowNumber = 1;
Если Объект.ReadTable() = 0 Тогда
    ВерсияФД = Объект.ValueOfFieldInteger;
    // 4 соответствует ФФД 1.2
    Если ВерсияФД = 4 Тогда
        ФФД1_2 = 1; 
    КонецЕсли;
КонецЕсли;

Помните, что любые манипуляции с передачей КМ требуют внимательного тестирования. Всегда проверяйте коды ответа сервера и локальной проверки перед фискализацией операции. Это позволит избежать попадания некорректных данных в ФН и проблем с ОФД.

← На главную