Почему в 1С:Розница 2.2 оплата подарочным сертификатом пробивается как платежная карта и как это исправить?

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

При оформлении продаж в режиме рабочего места кассира (РМК) конфигурации 1С:Розница 2.2 нередко возникает ситуация, когда при смешанной оплате или оплате подарочным сертификатом фискальный регистратор печатает на чеке тип оплаты Платежная карта (или безналичная оплата) вместо выделенного вида Сертификат. В драйвере торгового оборудования при этом могут быть настроены различные типы оплаты, однако устройство все равно относит операцию к первому безналичному типу.

Разберем детально, почему так происходит на устройствах АТОЛ (в частности, на фискальных регистраторах и принтерах документов серии FPrint), как устроена обработка оплат в коде 1С и какие действия необходимо предпринять для корректного разделения потоков платежей.

Анализ механизма передачи оплат в кодовой базе 1С

Проанализируем сначала, как сама конфигурация формирует данные для фискализации. В типовой конфигурации «Розница 2.2» при подготовке чека в общем модуле или модуле формы РМК (метод ПодготовитьДанныеДляПробитияЧека) формируется массив или таблица оплат, где каждому виду расчета присваивается свой цифровой идентификатор:

  1. 0 — Наличные средства.
  2. 1 — Платежная карта (эквайринг).
  3. 2 — Банковский кредит.
  4. 3 — Подарочный сертификат (встречное предоставление).

Таким образом, на уровне бизнес-логики 1С четко разделяет карту и сертификат. Однако далее управление передается в подсистему БПО (Библиотека подключаемого оборудования). И здесь поведение программы зависит от того, через какую именно внешнюю компоненту и какой общий модуль осуществляется взаимодействие с фискальным регистратором.

Если в системе используется устаревший интеграционный механизм, вызов транслируется в общий модуль ПодключаемоеОборудованиеАтолФискальныеРегистраторыКлиент. Посмотрим на фрагмент кода функции закрытия чека:


Функция ЗакрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаОплат, ВыходныеПараметры) Экспорт

    Результат = Истина;
    СуммаНаличнойОплаты    = 0;
    СуммаБезналичнойОплаты = 0;

    Для ИндексОплаты = 0 По ТаблицаОплат.Количество() - 1 Цикл
        Если ТаблицаОплат[ИндексОплаты][0].Значение = 0 Тогда
            СуммаНаличнойОплаты = СуммаНаличнойОплаты + ТаблицаОплат[ИндексОплаты][1].Значение;
        Иначе
            СуммаБезналичнойОплаты = СуммаБезналичнойОплаты + ТаблицаОплат[ИндексОплаты][1].Значение;
        КонецЕсли;
    КонецЦикла;

    Результат = ОбъектДрайвера.ЗакрытьЧек(ПараметрыПодключения.ИДУстройства,
                                          СуммаНаличнойОплаты, СуммаБезналичнойОплаты);
    Если НЕ Результат Тогда
        ВыходныеПараметры.Очистить();
        ВыходныеПараметры.Добавить(999);
        ВыходныеПараметры.Добавить("");
        ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);

        ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Как видно из кода, в этом методе все платежи с кодом больше 0 (карты, сертификаты, кредиты) суммируются в единую переменную СуммаБезналичнойОплаты. Метод внешней компоненты ОбъектДрайвера.ЗакрытьЧек устаревшего стандарта 1С принимает всего два числовых параметра оплаты: наличные и безналичные. В результате драйвер ККМ отправляет всю сумму в первую доступную безналичную секцию (тип 1), которая в таблицах кассы названа платежной картой.

В чем разница между старыми и новыми драйверами АТОЛ

Выясним причину на уровне драйверов. В линейке ДТО АТОЛ 8 (Драйверы торгового оборудования) параллельно сосуществовали два типа интеграционных библиотек:

  1. Устаревшая компонента (AddIn.ATOL_KKM_1C / FprnM1C.dll): Реализована по стандарту интеграции 1.x. Метод CloseCheck(DeviceID, Cash, Cashless) физически не умеет принимать расширенную таблицу платежей.
  2. Универсальный драйвер по стандарту БПО (AtolDrivers8_1C.dll): Работает через общий модуль конфигурации ПодключаемоеОборудованиеУниверсальныйДрайверКлиент. В этом модуле метод закрытия чека формирует полную XML-структуру или пакет данных, в котором передаются все четыре вида оплат по отдельности.

Если в операционной системе Windows ранее была зарегистрирована старая библиотека (или при настройке рабочего места кассира в 1С был выбран предопределенный обработчик обслуживания предыдущего поколения), платформа продолжает создавать COM-объект старого драйвера. Соответственно, 1С вызывает модуль с двумя типами оплат, игнорируя сертификаты.

Пошаговое решение проблемы

Для того чтобы чеки закрывались корректно и сертификат не подменялся картой, необходимо перевести взаимодействие кассы с 1С на универсальный стандарт БПО. Рассмотрим последовательность действий.

Шаг 1. Переустановка и обновление драйвера ДТО АТОЛ

Самое простое и эффективное решение — выполнить чистую установку актуальной сборки драйвера АТОЛ 8-й версии (или более новой 10-й версии, если она поддерживается релизом конфигурации):

  1. Закрываем все запущенные сеансы «1С:Предприятие».
  2. Удаляем старую версию драйвера через «Панель управления» -> «Программы и компоненты».
  3. Устанавливаем дистрибутив ДТО АТОЛ актуального релиза. Во время установки инсталлятор автоматически зарегистрирует в системном реестре обновленные библиотеки взаимодействия с 1С.
  4. Если используется 32-разрядный клиент 1С (что является стандартом для работы с подключаемым оборудованием), убеждаемся, что установлена 32-битная (x86) версия библиотек драйвера.

Шаг 2. Разрегистрация старых библиотек вручную (при необходимости)

Если после обновления дистрибутива 1С по-прежнему цепляется за старый программный идентификатор, разберем, как очистить регистрацию вручную. Запустим командную строку от имени Администратора и выполним разрегистрацию старой библиотеки:

regsvr32 /u "C:\Program Files (x86)\ATOL\Drivers8\Bin\FprnM1C.dll"

После этого регистрируем библиотеку нового стандарта из комплекта поставки:

regsvr32 "C:\Program Files (x86)\ATOL\Drivers8\Bin\AtolDrivers8_1C.dll"

Шаг 3. Перенастройка оборудования в 1С:Розница

Проверим карточку подключения кассового аппарата внутри информационной базы:

  1. Переходим в раздел Администрирование -> Подключаемое оборудование -> Драйверы оборудования.
  2. Создаем новый элемент или обновляем существующий, загрузив сертифицированный драйвер АТОЛ из комплекта БПО (поставляется в виде zip-архива в каталоге шаблона конфигурации или на сайте ИТС).
  3. Открываем список подключенных фискальных регистраторов (или ККТ с передачей данных).
  4. В карточке устройства выбираем драйвер, работающий по стандарту БПО (универсальный драйвер), а не устаревший обработчик «АТОЛ: Фискальные регистраторы». При необходимости создаем подключение заново, если конфигурация блокирует смену драйвера в существующем элементе.
  5. Нажимаем кнопку Настроить и выполняем тест устройства.

Шаг 4. Проверка нумерации оплат в таблицах ККТ

Проанализируем соответствие номеров оплат в самом аппарате. Открываем утилиту «Тест «Драйвер ККМ» и переходим в раздел Настройка свойств -> Параметры ККМ -> Оплата:

  1. Проверяем текстовые наименования видов оплаты в таблицах ККМ. Тип 1 по умолчанию закреплен за наличными.
  2. Убеждаемся, что один из безналичных типов оплат (например, Вид 3 или Вид 4) назван СЕРТИФИКАТ или ПОДАРОЧНЫЙ СЕРТИФИКАТ.
  3. При отправке данных из 1С универсальный драйвер автоматически транслирует индекс оплаты 1С (3 — Сертификат) в соответствующий номер типа оплаты фискального регистратора.

После перевода кассы на универсальный модуль БПО и перерегистрации компонентов чек при оплате подарочным сертификатом будет закрываться отдельной строкой оплаты с корректным наименованием.

← На главную