Как настроить XML-пакет CheckPackage для драйверов Атол 8 при переходе на ФФД 1.05 в 1С

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

Переход на формат фискальных данных ФФД 1.05 принес немало головной боли разработчикам и системным администраторам, работающим со старыми конфигурациями 1С и торговым оборудованием Атол. Особенно остро встает вопрос интеграции, когда в системе используются драйверы торгового оборудования 8-й версии (ДТО 8). Производители ККТ активно продвигают переход на 10-ю версию драйверов, однако на практике переписать под нее старый, стабильно работающий код бывает затруднительно и затратно.

В этой статье мы подробно разберем, как устроен формат XML-файла обмена CheckPackage для ФФД 1.05, как корректно передавать информацию о различных типах оплат в секции Payments, а также разберем технические нюансы работы с драйверами Атол 8-й версии и старыми обработками обслуживания (включая платформу 1С 7.7).

1. Структура XML-пакета CheckPackage под ФФД 1.05

Для взаимодействия 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-файла:

  1. Атрибуты параметров (Parameters):
    • PaymentType — тип расчета (приход, возврат прихода, расход, возврат расхода).
    • TaxVariant — код системы налогообложения (СНО).
    • CustomerEmail и CustomerPhone — контактные данные покупателя для отправки электронного чека.
    • CashierName — имя кассира (обязательно для ФФД 1.05).
    • CashierINN — ИНН кассира. Фискальный накопитель строго валидирует этот тег в ФФД 1.05.
  2. Атрибуты позиций (Positions):
    • SignMethodCalculation — признак способа расчета (например, 4 — полная оплата, предоплата, аванс и т.д.).
    • SignCalculationObject — признак предмета расчета (например, 1 — товар, 4 — услуга).
    • TaxIndex — индекс ставки НДС.
  3. Секция оплат (Payments): Здесь кроется главная ловушка обратной совместимости, которую мы разберем далее.

2. Эволюция и коварство секции Payments

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

Выясним причину частых ошибок: Если вы отправляете на старую компоненту Атол XML-пакет с атрибутом PrePayment, в то время как она ожидает старый AdvancePayment, драйвер просто проигнорирует эту сумму. Чек либо не закроется из-за расхождения суммы оплат с итогом чека, либо вся сумма пойдет по умолчанию на электронный тип оплаты. При интеграции обязательно проверяйте версию используемой компоненты FprnM1C82_54FZ.dll.

3. Технические ограничения Атол ДТО 8 при работе с ФФД 1.05

Многие программисты пытаются использовать стандартные методы интеграции ККТ через компоненту 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%, а ККТ сама пересчитывает ставку на основе своей прошивки и даты проведения чека).

4. Секреты перехода на ФФД 1.05 в 1С 7.7 (Обработка frATOL54_comm_105.ert)

Отдельного внимания заслуживают разработчики, сопровождающие исторические конфигурации на платформе 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 вручную. Рассмотрим алгоритм исправления:

  1. Необходимо отказаться от передачи процента скидки или общей суммы скидки в драйвер.
  2. Всю математику распределения скидок нужно выполнять на стороне 1С 7.7 перед началом печати чека.
  3. В таблицу товаров, передаваемую на ККТ, должны попадать уже рассчитанные конечные цены со скидками (ЦенаСоСкидкой = Округлить(СуммаСоСкидкой / Количество, 2)).
  4. Возникающую копеечную погрешность из-за округления деления необходимо программно относить на одну из позиций чека с количеством «1», чтобы математическое равенство Цена * Количество = Сумма выполнялось безукоризненно для каждой фискальной строки.

5. Стоит ли оставаться на ДТО 8 в 2019 году и далее?

Проанализируем архитектуру драйверов Атол, чтобы понять долгосрочные перспективы поддержки торгового оборудования:

Рекомендация: Если ваша сфера деятельности не связана с маркированными товарами (обувь, одежда, лекарства, табак), вы можете продолжать использовать связку 1С + ДТО 8.16.3 + ФФД 1.05. Это позволит сэкономить время на переписывание кода интеграции. Однако, если планируется продажа маркированной продукции или переход на ФФД 1.2, вам в обязательном порядке придется переписать модули работы с торговым оборудованием под ДТО 10-й версии, так как 8-я ветка драйверов физически не поддерживает эти новые стандарты.

← На главную