С введением формата фискальных данных (ФФД) 1.2 владельцы кассовой техники Штрих-М столкнулись с необходимостью обновления драйверов и пересмотра программного кода в 1С 7.7. Старые методы, такие как Sale() и ReturnSale(), которые годами верой и правдой служили в версии 4.15, в новых реалиях становятся неактуальными или вовсе перестают работать при продаже маркированного товара. В качестве базового примера для адаптации кода можно взять обработку печати чеков для кассы Штрих Онлайн, где реализованы основные принципы взаимодействия. Разберем подробно, какие изменения необходимо внести в конфигурацию, чтобы обеспечить корректную передачу данных в систему «Честный знак».
Проанализируем основное изменение: в драйверах версии 5.16 и выше для работы с ФФД 1.2 разработчики рекомендуют отказаться от специализированных методов продажи в пользу универсальной команды FNOperation(). Это связано с тем, что новый формат требует более сложной структуры данных, которую старые методы не всегда могут корректно транслировать в фискальный накопитель.
Выясним, как теперь определять тип операции. За это отвечает свойство CheckType. Рассмотрим соответствие значений:
Посмотрим на пример того, как может выглядеть замена кода в обработке обслуживания кассы:
// Старый подход (драйвер 4.15)
Объект.Quantity = Колво;
Объект.Price = Цена;
Объект.Sale();
// Новый подход (драйвер 5.17, ФФД 1.2)
Объект.CheckType = 1; // Приход
Объект.Quantity = Колво;
Объект.Price = Цена;
Объект.Tax1 = 0; // Настройка НДС
Объект.FNOperation();
Главное отличие ФФД 1.2 — это необходимость предварительной проверки кода маркировки (КМ) перед тем, как позиция будет добавлена в чек. Теперь это не просто запись текстового тега 1162, а интерактивный процесс взаимодействия кассы, фискального накопителя и серверов «Честного знака». В современных условиях крайне важно правильно реализовать разрешительный режим на кассах, который требует онлайн-проверки статуса товара.
Рассмотрим по шагам правильную последовательность действий в коде 1С 7.7:
MarkingCode (полная строка кода) и устанавливаем ItemStatus = 1 (товар реализуется).FNCheckItemBarcode(). В этот момент касса связывается с ОФД для получения статуса кода. Для обеспечения отказоустойчивости при отсутствии связи полезно настроить локальный модуль Честный знак для 1С 7.7.ItemBarcodeCheckResult. Если результат положительный, мы можем продолжать.FNAcceptMarkingCode(). Это критически важный шаг, который подтверждает, что данный код будет использован в текущем чеке.FNOperation().Проанализируем пример реализации данного алгоритма:
// 1. Передаем код маркировки
Объект.MarkingCode = СокрЛП(ТекМаркировка);
Объект.ItemStatus = 1;
// 2. Запускаем проверку в ФН
Если Объект.FNCheckItemBarcode() <> 0 Тогда
Предупреждение("Ошибка проверки кода: " + Объект.ResultDescription);
Возврат;
КонецЕсли;
// 3. Ждем ответа и подтверждаем (упрощенно)
// Здесь можно добавить паузу или проверку результата через ItemBarcodeCheckResult
Объект.FNAcceptMarkingCode();
// 4. Добавляем позицию в чек
Объект.CheckType = 1;
Объект.Quantity = 1;
Объект.Price = ТекЦена;
Объект.FNOperation();
В ФФД 1.2 обязательным реквизитом стала мера количества предмета расчета. Если раньше мы могли просто передать количество, то теперь касса требует четкого указания: штуки это, килограммы, метры или иные единицы. В драйвере Штрих-М за это отвечает свойство MeasureUnit.
Посмотрим на основные значения MeasureUnit:
Если это свойство не заполнить, драйвер может вернуть ошибку «Неверный формат данных» при вызове метода закрытия чека или операции по позиции.
Важно понимать, что проверка маркировки — это сетевая операция. Касса отправляет запрос в ОФД, который перенаправляет его в систему маркировки. Это занимает время. При работе из 1С 7.7 стандартные таймауты ожидания ответа от драйвера (обычно 150-300 мс) могут оказаться недостаточными.
Разберем, что нужно сделать в настройках:
Timeout хотя бы в значение 5000–10000 (мс). Это даст кассе время дождаться ответа от серверов «Честного знака».[M+] в чеке никогда не появится.После того как мы внедрили новый код, необходимо проанализировать печатную форму чека. В ФФД 1.2 рядом с маркированным товаром печатается специальный признак:
FNCheckItemBarcode.Важный момент: Для достижения статуса [M+] необходимо использовать именно связку FNCheckItemBarcode + FNAcceptMarkingCode + FNOperation. Использование записи напрямую в таблицы более не является легитимным.
Подводя итог, переход на драйвер 5.17 и выше требует от программиста 1С 7.7 не просто обновления файлов DrvrFr.dll, но и существенной переработки логики формирования чека. Основной упор следует сделать на замену методов продажи и внедрение цикла проверки кодов маркировки.