При оформлении продаж и пробитии фискального чека на контрольно-кассовой технике Штрих-М (например, Штрих-М-01Ф, Штрих-ON-LINE) пользователи конфигураций на обычных формах (в частности, 1С:Управление торговлей 10.3, УПП 1.3, КА 1.1) могут столкнуться с ошибкой: FFFFFFF8h, No XML attribute AdvancePayment. При этом кассовая смена может открываться и закрываться без каких-либо сбоев, но печать документов продажи блокируется.
Проанализируем природу возникновения этой ошибки и разберем по шагам рабочие способы ее устранения.
Данный сбой формируется не фискальным накопителем и не самой кассой, а интеграционной библиотекой драйвера (компонентой SMDrvFR1CLib.dll / SMDrvFR1CLib20.dll), отвечающей за взаимодействие между 1С и кассовым аппаратом. Ошибка возникает на этапе синтаксического анализа входного XML-пакета чека (CheckPackage).
Основная причина кроется в рассинхронизации версий:
AdvancePayment (аванс / предоплата).ShtrihMkkt.epf) или типовой модуль конфигурации формирует узел <Payments> по старой спецификации, в которой передаются только наличные и безналичные оплаты без дополнительных тегов предоплаты и кредита.Самый быстрый способ восстановить работоспособность кассы без внесения изменений в конфигурацию — выровнять версии между драйвером и обработкой обслуживания ККТ.
Разберем по шагам последовательность действий:
.epf).TradeWareEpf), либо временно вернуть предыдущую версию обработки, которая корректно взаимодействует с установленным драйвером без строгой валидации новых атрибутов.Если база данных доработана, снята с поддержки или используется нестандартный механизм взаимодействия с кассовым аппаратом, оптимальным решением будет программное добавление недостающих атрибутов в формируемый XML-пакет.
Рассмотрим пример. В функции формирования XML-пакета фискального чека (обычно это функция СформироватьXMLПакетаЧека или метод обработки обслуживания) блок оплат <Payments> должен содержать полный набор атрибутов способа расчета. Даже если оплата производилась только наличными, остальные атрибуты должны присутствовать со значением 0.00.
Посмотрим на пример корректного заполнения узла оплат:
// Пример добавления обязательных атрибутов оплат в XML
ЗаписьXML.ЗаписатьНачалоЭлемента("Payments");
ЗаписьXML.ЗаписатьАтрибут("Cash", Формат(СуммаНаличные, "ЧЦ=15; ЧДЦ=2; ЧГ=0"));
ЗаписьXML.ЗаписатьАтрибут("ElectronicPayment", Формат(СуммаБезналичные, "ЧЦ=15; ЧДЦ=2; ЧГ=0"));
ЗаписьXML.ЗаписатьАтрибут("AdvancePayment", Формат(СуммаАванс, "ЧЦ=15; ЧДЦ=2; ЧГ=0"));
ЗаписьXML.ЗаписатьАтрибут("Credit", Формат(СуммаКредит, "ЧЦ=15; ЧДЦ=2; ЧГ=0"));
ЗаписьXML.ЗаписатьАтрибут("CashProvision", Формат(СуммаВстречное, "ЧЦ=15; ЧДЦ=2; ЧГ=0"));
ЗаписьXML.ЗаписатьКонецЭлемента(); // Payments
Если в коде передаются только Cash и ElectronicPayment, парсер новой компоненты прерывает выполнение с ошибкой No XML attribute AdvancePayment. Добавление атрибута AdvancePayment="0.00" полностью устраняет проблему валидации.
В ситуациях, когда доработка кода нежелательна, а обработка обслуживания жестко привязана к определенной версии API, разберем порядок перерегистрации библиотеки драйвера в операционной системе Windows:
C:\Program Files (x86)\SHTRIH-M\ или папка в каталоге платформы 1С:Предприятие).regsvr32:
regsvr32 "C:\Program Files (x86)\SHTRIH-M\DrvFR 4.14\Bin\SMDrvFR1CLib20.dll"
Важный момент: при обновлении внутреннего ПО кассового аппарата (прошивки ККТ) на работу по формату ФФД 1.05 требуется обязательное согласование всех трех звеньев цепи: актуальная прошивка ККТ — совместимый драйвер производителя — обновленная обработка обслуживания в 1С.