Как исправить ошибку «FFFFFFF8h, No XML attribute AdvancePayment» при печати чека на ККТ Штрих-М в 1С?

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

При оформлении продаж и пробитии фискального чека на контрольно-кассовой технике Штрих-М (например, Штрих-М-01Ф, Штрих-ON-LINE) пользователи конфигураций на обычных формах (в частности, 1С:Управление торговлей 10.3, УПП 1.3, КА 1.1) могут столкнуться с ошибкой: FFFFFFF8h, No XML attribute AdvancePayment. При этом кассовая смена может открываться и закрываться без каких-либо сбоев, но печать документов продажи блокируется.

Проанализируем природу возникновения этой ошибки и разберем по шагам рабочие способы ее устранения.

Причины возникновения ошибки

Данный сбой формируется не фискальным накопителем и не самой кассой, а интеграционной библиотекой драйвера (компонентой SMDrvFR1CLib.dll / SMDrvFR1CLib20.dll), отвечающей за взаимодействие между 1С и кассовым аппаратом. Ошибка возникает на этапе синтаксического анализа входного XML-пакета чека (CheckPackage).

Основная причина кроется в рассинхронизации версий:

  1. Несоответствие стандартов обмена: установленный драйвер торгового оборудования ориентирован на более свежие требования 1С к разработке драйверов ККТ (поддержка ФФД 1.05 и выше), где в структуре оплат обязательным является атрибут AdvancePayment (аванс / предоплата).
  2. Устаревший формат пакета в 1С: используемая в конфигурации обработка обслуживания торгового оборудования (например, ShtrihMkkt.epf) или типовой модуль конфигурации формирует узел <Payments> по старой спецификации, в которой передаются только наличные и безналичные оплаты без дополнительных тегов предоплаты и кредита.
  3. Конфликт версий библиотек: при установке свежего дистрибутива драйверов («Тест драйвера ККТ») в операционной системе регистрируется новая COM-компонента, которая перехватывает вызовы старой обработки 1С и отклоняет сформированный XML-документ из-за отсутствия обязательных атрибутов.

Способ 1. Замена внешней обработки обслуживания на совместимую версию

Самый быстрый способ восстановить работоспособность кассы без внесения изменений в конфигурацию — выровнять версии между драйвером и обработкой обслуживания ККТ.

Разберем по шагам последовательность действий:

  1. Перейдем в меню Сервис — Торговое оборудование — Подключение и настройка торгового оборудования (для конфигураций на базе УТ 10.3).
  2. Откроем вкладку Фискальные регистраторы или ККТ с передачей данных.
  3. Проверим используемую внешнюю обработку обслуживания (файл с расширением .epf).
  4. Если была выполнена установка свежего драйвера (например, версии 4.14 и выше), необходимо либо загрузить актуальную обработку обслуживания из каталога поставки последнего релиза вашей конфигурации (папка TradeWareEpf), либо временно вернуть предыдущую версию обработки, которая корректно взаимодействует с установленным драйвером без строгой валидации новых атрибутов.
  5. После выбора файла обработки нажмем кнопку Сохранить и заново выполним тест устройства.

Способ 2. Корректировка формирования XML-пакета чека в коде 1С

Если база данных доработана, снята с поддержки или используется нестандартный механизм взаимодействия с кассовым аппаратом, оптимальным решением будет программное добавление недостающих атрибутов в формируемый 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" полностью устраняет проблему валидации.

Способ 3. Проверка и регистрация совместимой версии библиотеки драйвера

В ситуациях, когда доработка кода нежелательна, а обработка обслуживания жестко привязана к определенной версии API, разберем порядок перерегистрации библиотеки драйвера в операционной системе Windows:

  1. Закроем все запущенные сеансы программы 1С:Предприятие.
  2. Найдем каталог с установленным драйвером Штрих-М (обычно это C:\Program Files (x86)\SHTRIH-M\ или папка в каталоге платформы 1С:Предприятие).
  3. Запустим командную строку от имени Администратора.
  4. Выполним перерегистрацию необходимой версии интеграционной компоненты с помощью системной утилиты regsvr32: regsvr32 "C:\Program Files (x86)\SHTRIH-M\DrvFR 4.14\Bin\SMDrvFR1CLib20.dll"
  5. Запустим 1С, перейдем в форму настройки торгового оборудования, выполним повторное тестирование связи и проверим печать чека.

Важный момент: при обновлении внутреннего ПО кассового аппарата (прошивки ККТ) на работу по формату ФФД 1.05 требуется обязательное согласование всех трех звеньев цепи: актуальная прошивка ККТ — совместимый драйвер производителя — обновленная обработка обслуживания в 1С.

← На главную