Переход на формат фискальных данных ФФД 1.05 принес немало головной боли разработчикам и системным администраторам, работающим со старыми конфигурациями 1С и торговым оборудованием Атол. Особенно остро встает вопрос интеграции, когда в системе используются драйверы торгового оборудования 8-й версии (ДТО 8). Производители ККТ активно продвигают переход на 10-ю версию драйверов, однако на практике переписать под нее старый, стабильно работающий код бывает затруднительно и затратно.
В этой статье мы подробно разберем, как устроен формат XML-файла обмена CheckPackage для ФФД 1.05, как корректно передавать информацию о различных типах оплат в секции Payments, а также разберем технические нюансы работы с драйверами Атол 8-й версии и старыми обработками обслуживания (включая платформу 1С 7.7).
Для взаимодействия 1С с фискальными регистраторами через сертифицированные драйверы используется XML-пакет стандарта CheckPackage. При переходе с ФФД 1.0 на ФФД 1.05 структура этого пакета усложнилась. В частности, появились новые требования к детализации платежей, признакам способов и предметов расчета.
Рассмотрим структуру типового XML-файла чека для ФФД 1.05. Особое внимание уделим секции Payments, которая отвечает за типы закрытия чека.
<?xml version="1.0" encoding="UTF-8"?>
<CheckPackage>
<Parameters PaymentType="1" TaxVariant="1" CustomerEmail="customer@example.com" CustomerPhone="79991112233" CashierName="Иванов И.И." CashierINN="771234567890">
<AgentData/>
<PurveyorData/>
</Parameters>
<Positions>
<FiscalString Name="Шоколад Аленка 100г" Quantity="2" Price="100.00" Amount="200.00" Department="1" TaxIndex="1" TaxSum="33.33" SignMethodCalculation="4" SignCalculationObject="1">
<AgentData/>
<PurveyorData/>
</FiscalString>
</Positions>
<Payments Cash="100.00" ElectronicPayment="100.00" PrePayment="0.00" PostPayment="0.00" Barter="0.00"/>
</CheckPackage>
Проанализируем ключевые атрибуты этого XML-файла:
Parameters):
PaymentType — тип расчета (приход, возврат прихода, расход, возврат расхода).TaxVariant — код системы налогообложения (СНО).CustomerEmail и CustomerPhone — контактные данные покупателя для отправки электронного чека.CashierName — имя кассира (обязательно для ФФД 1.05).CashierINN — ИНН кассира. Фискальный накопитель строго валидирует этот тег в ФФД 1.05.Positions):
SignMethodCalculation — признак способа расчета (например, 4 — полная оплата, предоплата, аванс и т.д.).SignCalculationObject — признак предмета расчета (например, 1 — товар, 4 — услуга).TaxIndex — индекс ставки НДС.Payments):
Здесь кроется главная ловушка обратной совместимости, которую мы разберем далее.
При передаче оплат в ККТ под ФФД 1.05 важно учитывать версию используемой Библиотеки подключаемого оборудования (БПО) 1С. Разработчики платформы меняли наименования атрибутов в зависимости от релизов:
Cash (наличные), ElectronicPayment (безналичные), AdvancePayment (предоплата/зачет аванса), Credit (постоплата/в кредит), CashProvision (оплата встречным предоставлением).AdvancePayment был заменен на PrePayment, Credit — на PostPayment, а CashProvision — на Barter.Выясним причину частых ошибок: Если вы отправляете на старую компоненту Атол XML-пакет с атрибутом PrePayment, в то время как она ожидает старый AdvancePayment, драйвер просто проигнорирует эту сумму. Чек либо не закроется из-за расхождения суммы оплат с итогом чека, либо вся сумма пойдет по умолчанию на электронный тип оплаты. При интеграции обязательно проверяйте версию используемой компоненты FprnM1C82_54FZ.dll.
Многие программисты пытаются использовать стандартные методы интеграции ККТ через компоненту 1С и сталкиваются с тем, что драйвер 8-й версии ведет себя нестабильно или выдает ошибки. Разберем ключевые ограничения и способы их обхода.
Версия драйвера и новые реквизиты. Старые версии драйверов (например, 8.14) не умеют полноценно работать с дополнительными тегами ФФД 1.05. Чтобы ККТ корректно обрабатывала ИНН кассира (тег 1203), ИНН покупателя (тег 1228) и наименование покупателя (тег 1227), необходимо установить версию ДТО не ниже 8.15.3 или 8.16. При этом библиотека FprnM1C82_54FZ.dll в папке базы данных также должна быть обновлена до соответствующей версии.
Прямая запись атрибутов (метод WriteAttribute). Если стандартный механизм формирования XML-пакета через БПО дает сбои или не поддерживает отправку нужных тегов (например, кода маркировки лекарств или обуви), приходится использовать прямой обходной путь. Драйвер Атол 8-й версии позволяет передавать теги напрямую в ККТ перед закрытием чека с помощью метода WriteAttribute внешней компоненты.
Рассмотрим пример кода на языке 1С для прямой записи атрибутов кассира в драйвер:
// Создаем объект драйвера Атол напрямую
Драйвер = Новый COMОбъект("Atol.DriverKKM");
Драйвер.DeviceEnabled = Истина;
// Входим в режим регистрации чека
Драйвер.Mode = 1;
Драйвер.SetMode();
// Передаем ИНН кассира (тег 1203)
Драйвер.AttrNumber = 1203;
Драйвер.AttrType = 2; // Строковый тип данных
Драйвер.AttrValueString = "771234567890";
Драйвер.WriteAttribute();
// Передаем имя кассира (тег 1021)
Драйвер.AttrNumber = 1021;
Драйвер.AttrType = 2;
Драйвер.AttrValueString = "Администратор Сидоров А.П.";
Драйвер.WriteAttribute();
Использование прямого обращения к методам драйвера ККТ позволяет обойти любые ограничения XML-схем старых БПО, но требует полной перестройки логики печати чека в кодовой базе.
Ограничение по СНО. Начиная с ФФД 1.05, касса жестко контролирует правило: один чек — одна система налогообложения (СНО). Если ваше предприятие работает одновременно на УСН и Патенте, вы больше не можете отправлять товары с разными СНО в одном XML-пакете. Программа должна предварительно анализировать состав чека и при необходимости программно разделять его на два отдельных физических документа продажи.
Ошибка "items[0].tax.type" при переходе на НДС 20%. Распространенная техническая проблема при отправке чеков на ККТ с новыми прошивками под НДС 20% через ДТО 8 — отказ проведения документа из-за неверной налоговой ставки. Новая прошивка ожидает измененный числовой идентификатор налога. Для решения этой проблемы в 1С необходимо убедиться, что таблица соответствия ставок НДС в конфигурации сопоставляется с верными кодами налогов в драйвере Атол (обычно ставка 20% передается тем же индексом, который ранее отвечал за 18%, а ККТ сама пересчитывает ставку на основе своей прошивки и даты проведения чека).
Отдельного внимания заслуживают разработчики, сопровождающие исторические конфигурации на платформе 1С 7.7 (например, «Торговля и Склад 7.7»). При переходе на ФФД 1.05 фирма 1С выпустила специализированную обработку обслуживания frATOL54_comm_105.ert. Ее внутренняя архитектура претерпела колоссальные изменения по сравнению со старой версией frATOL54_comm.ert.
Отказ от XML в пользу нативного режима. Предыдущие обработки обслуживания для 7.7 формировали промежуточный XML-файл обмена и передавали его внешней компоненте для разбора. В версии обработки _105 разработчики полностью отказались от использования XML. Теперь обработка работает напрямую с COM-объектом драйвера Атол, посылая команды печати строк, налогов и оплат через пошаговый вызов нативных функций компоненты драйвера.
Проблема распределения скидок. Самый главный «подводный камень» обработки frATOL54_comm_105.ert — это некорректная работа со скидками «из коробки». Поскольку в нативном режиме драйвер Атол самостоятельно производит округления копеек при распределении суммовой скидки документа на каждую позицию чека, итоговая сумма по позициям часто не сходится с итогом по чеку на 1-2 копейки. Это приводит к ошибке ККТ «Сумма всех типов оплат меньше суммы чека» и отмене печати.
Чтобы решить эту проблему, программистам приходится дорабатывать модуль обработки frATOL54_comm_105.ert вручную. Рассмотрим алгоритм исправления:
ЦенаСоСкидкой = Округлить(СуммаСоСкидкой / Количество, 2)).Цена * Количество = Сумма выполнялось безукоризненно для каждой фискальной строки.Проанализируем архитектуру драйверов Атол, чтобы понять долгосрочные перспективы поддержки торгового оборудования:
Рекомендация: Если ваша сфера деятельности не связана с маркированными товарами (обувь, одежда, лекарства, табак), вы можете продолжать использовать связку 1С + ДТО 8.16.3 + ФФД 1.05. Это позволит сэкономить время на переписывание кода интеграции. Однако, если планируется продажа маркированной продукции или переход на ФФД 1.2, вам в обязательном порядке придется переписать модули работы с торговым оборудованием под ДТО 10-й версии, так как 8-я ветка драйверов физически не поддерживает эти новые стандарты.