Как правильно передать типы оплаты Наличные и Безналичные из 1С:УТ 10.3 в ККТ Атол 30Ф

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

При работе со старыми редакциями конфигурации 1С:Управление торговлей 10.3 и современными онлайн-кассами (такими как Атол 30Ф) программисты часто сталкиваются с ситуацией, когда все пробитые чеки регистрируются ККТ с типом оплаты «Электронно». Это происходит даже в тех случаях, когда клиент расплачивается наличными. Такая ситуация является нарушением правил ведения кассовых операций и требует немедленного исправления в коде обработки обслуживания или конфигурации.

В этой статье мы подробно разберем, как устроена передача данных в драйвер Атол, почему возникает путаница с типами оплаты и как правильно модифицировать XML-пакет фискализации, чтобы касса корректно разделяла нал и безнал.

Разбор механизма определения типа оплаты в драйверах Атол

Первое и самое важное, что нам необходимо понять: в современных драйверах Атол (начиная с 8-й и 9-й версий и заканчивая актуальной 10-й) тип оплаты в чеке зачастую определяется не передачей какого-то числового идентификатора (например, 1 или 2), а заполнением конкретного атрибута суммы в XML-структуре, которую 1С передает драйверу. Проанализируем типичную ситуацию: если программа передает всю сумму чека в параметр ElectronicPayment, ККТ логично закрывает чек как электронный. Если мы хотим, чтобы оплата прошла как наличная, сумма должна попасть в атрибут Cash.

Рассмотрим структуру XML-пакета, который формируется в процедуре ПолучитьXMLПакетДляФискализацияЧека. Именно здесь кроется ключ к решению проблемы. Драйвер ожидает распределения общей суммы чека по следующим категориям:

  1. Cash — оплата наличными.
  2. ElectronicPayment — безналичная оплата (карты, переводы, электронные кошельки).
  3. Credit — передача товара в кредит (постоплата).
  4. AdvancePayment — зачет аванса (предоплаты).
  5. CashProvision — оплата встречным предоставлением (бартер).

Корректировка кода формирования XML-пакета

Давайте проанализируем фрагмент кода, который отвечает за запись атрибутов оплаты в XML. Для того чтобы касса понимала, какой тип оплаты используется, нам нужно заранее рассчитать переменные СуммаНаличными, СуммаЭлектронными и другие. Посмотрим, как это должно выглядеть в теле функции:


// Формирование блока оплаты в XML-пакете
ЗаписьXML.ЗаписатьАтрибут("Cash"             , XMLСтрока(СуммаНаличными));
ЗаписьXML.ЗаписатьАтрибут("ElectronicPayment", XMLСтрока(СуммаЭлектронными));
ЗаписьXML.ЗаписатьАтрибут("Credit"           , XMLСтрока(СуммаПостоплатой));
ЗаписьXML.ЗаписатьАтрибут("AdvancePayment"   , XMLСтрока(СуммаПредоплатой));
ЗаписьXML.ЗаписатьАтрибут("CashProvision"    , XMLСтрока(СуммаПредоставлением));

Обратите внимание на важный нюанс: если вы передадите 0 в атрибут Cash и полную сумму в ElectronicPayment, чек будет электронным. Ошибка «все чеки электронные» обычно возникает потому, что в коде 1С расчет переменной СуммаЭлектронными перекрывает остальные значения или логика определения вида оплаты в документе работает некорректно.

Определение вида оплаты в документе 1С

Чтобы правильно заполнить вышеуказанные атрибуты, нам нужно обратиться к данным самого документа (например, ЧекККМ). Проанализируем, как в типовой УТ 10.3 реализовано получение сумм. Обычно используются экспортные функции модуля документа или обработки. Выясним причину ошибки, проверив, как вызываются методы ПолучитьСуммуНаличнойОплаты() и ПолучитьСуммуБезналичнойОплаты().

Рассмотрим пример правильной подготовки данных перед формированием XML:


СуммаНаличными = 0;
СуммаЭлектронными = 0;

// Если в документе выбран вид оплаты "Наличные"
Если ВидОплаты = Перечисления.ВидыОплатыЧекаККМ.Наличные Тогда
    СуммаНаличными = Объект.СуммаДокумента;
// Если оплата платежной картой
ИначеЕсли ВидОплаты = Перечисления.ВидыОплатыЧекаККМ.ПлатежнаяКарта Тогда
    СуммаЭлектронными = Объект.СуммаДокумента;
КонецЕсли;

Важный совет: В случае сложных (комбинированных) оплат, когда часть суммы оплачивается картой, а часть наличными, убедитесь, что ваша конфигурация поддерживает табличную часть «Оплаты» и корректно суммирует итоги по каждому виду. Если передать в ККТ сумму оплат, которая в итоге не равна сумме строк чека, драйвер выдаст ошибку «Сумма всех типов оплаты меньше суммы чека».

Взаимодействие с таблицами ККТ (Настройка драйвера)

Иногда программный код 1С написан верно, но касса все равно печатает не те названия типов оплаты. Это может быть связано с внутренними настройками самой ККТ Атол. Посмотрим на ситуацию со стороны железа. В памяти кассы есть Таблица №2 «Типы оплаты».

Рассмотрим стандартные индексы этой таблицы:

Если вы используете специфическую обработку обслуживания, она может пытаться передать индекс типа оплаты напрямую через атрибут PaymentType. В этом случае убедитесь, что в коде 1С передается именно тот индекс, который соответствует нужной строке в таблицах ККТ. Однако для современных моделей Атол 30Ф и драйверов версии 8.14+ и выше рекомендуется использовать именно распределение по именованным атрибутам сумм (Cash, ElectronicPayment), так как это стандарт протокола ФФД 1.05.

Проверка версии драйвера и протокола ФФД

Проанализируем влияние версии драйвера на результат. Пользователи часто спорят, стоит ли переходить с 8-го драйвера на 9-й или 10-й. Для корректной работы с типами оплаты в рамках ФФД 1.05 подходят все перечисленные версии, но есть особенности:

  1. Драйвер 8.x: Самый стабильный для старых конфигураций на обычных формах. Поддерживает работу через COM-объект. Ошибки с типами оплаты здесь чаще всего лечатся правкой XML-пакета.
  2. Драйвер 9.x: Промежуточная версия, которая часто использовалась в период перехода на онлайн-кассы. Имеет схожую логику работы с XML.
  3. Драйвер 10.x: Современный стандарт. Если вы решите перейти на него, структуру формирования чека придется переписывать более существенно, так как он предпочитает работу через JSON или прямые вызовы методов объекта драйвера.

Если ваша организация работает с маркированным товаром (Честный ЗНАК) или использует УСН/Патент, крайне рекомендуется использовать драйвер версии 10.х и обновленные обработки обслуживания, так как старые версии драйверов могут некорректно печатать реквизиты НДС или не передавать коды маркировки (теги 1162/1163), что приведет к штрафам.

Итоги и рекомендации

Подводя итог, для исправления проблемы «все чеки электронно» выполните следующие шаги:

1. Найдите в коде обработки или конфигурации процедуру формирования XML-пакета (обычно ПолучитьXMLПакетДляФискализацияЧека).
2. Проверьте, заполняются ли атрибуты Cash и ElectronicPayment разными значениями в зависимости от типа оплаты документа.
3. Убедитесь, что переменная ТипРасчета (тег 1214) соответствует моменту расчета (обычно это «Полный расчет»), а не подменяет собой тип оплаты.
4. Протестируйте пробитие чека на тестовой кассе или в режиме эмулятора, анализируя сформированный XML-текст перед его отправкой на устройство.

Правильное распределение сумм по атрибутам XML позволит вам не только соблюдать закон, но и получать корректные отчеты о выручке в разрезе способов оплаты как в 1С, так и в личном кабинете ОФД.

← На главную