При оформлении продаж в режиме рабочего места кассира (РМК) конфигурации 1С:Розница 2.2 нередко возникает ситуация, когда при смешанной оплате или оплате подарочным сертификатом фискальный регистратор печатает на чеке тип оплаты Платежная карта (или безналичная оплата) вместо выделенного вида Сертификат. В драйвере торгового оборудования при этом могут быть настроены различные типы оплаты, однако устройство все равно относит операцию к первому безналичному типу.
Разберем детально, почему так происходит на устройствах АТОЛ (в частности, на фискальных регистраторах и принтерах документов серии FPrint), как устроена обработка оплат в коде 1С и какие действия необходимо предпринять для корректного разделения потоков платежей.
Проанализируем сначала, как сама конфигурация формирует данные для фискализации. В типовой конфигурации «Розница 2.2» при подготовке чека в общем модуле или модуле формы РМК (метод ПодготовитьДанныеДляПробитияЧека) формируется массив или таблица оплат, где каждому виду расчета присваивается свой цифровой идентификатор:
Таким образом, на уровне бизнес-логики 1С четко разделяет карту и сертификат. Однако далее управление передается в подсистему БПО (Библиотека подключаемого оборудования). И здесь поведение программы зависит от того, через какую именно внешнюю компоненту и какой общий модуль осуществляется взаимодействие с фискальным регистратором.
Если в системе используется устаревший интеграционный механизм, вызов транслируется в общий модуль ПодключаемоеОборудованиеАтолФискальныеРегистраторыКлиент. Посмотрим на фрагмент кода функции закрытия чека:
Функция ЗакрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаОплат, ВыходныеПараметры) Экспорт
Результат = Истина;
СуммаНаличнойОплаты = 0;
СуммаБезналичнойОплаты = 0;
Для ИндексОплаты = 0 По ТаблицаОплат.Количество() - 1 Цикл
Если ТаблицаОплат[ИндексОплаты][0].Значение = 0 Тогда
СуммаНаличнойОплаты = СуммаНаличнойОплаты + ТаблицаОплат[ИндексОплаты][1].Значение;
Иначе
СуммаБезналичнойОплаты = СуммаБезналичнойОплаты + ТаблицаОплат[ИндексОплаты][1].Значение;
КонецЕсли;
КонецЦикла;
Результат = ОбъектДрайвера.ЗакрытьЧек(ПараметрыПодключения.ИДУстройства,
СуммаНаличнойОплаты, СуммаБезналичнойОплаты);
Если НЕ Результат Тогда
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
КонецЕсли;
Возврат Результат;
КонецФункции
Как видно из кода, в этом методе все платежи с кодом больше 0 (карты, сертификаты, кредиты) суммируются в единую переменную СуммаБезналичнойОплаты. Метод внешней компоненты ОбъектДрайвера.ЗакрытьЧек устаревшего стандарта 1С принимает всего два числовых параметра оплаты: наличные и безналичные. В результате драйвер ККМ отправляет всю сумму в первую доступную безналичную секцию (тип 1), которая в таблицах кассы названа платежной картой.
Выясним причину на уровне драйверов. В линейке ДТО АТОЛ 8 (Драйверы торгового оборудования) параллельно сосуществовали два типа интеграционных библиотек:
CloseCheck(DeviceID, Cash, Cashless) физически не умеет принимать расширенную таблицу платежей.ПодключаемоеОборудованиеУниверсальныйДрайверКлиент. В этом модуле метод закрытия чека формирует полную XML-структуру или пакет данных, в котором передаются все четыре вида оплат по отдельности.Если в операционной системе Windows ранее была зарегистрирована старая библиотека (или при настройке рабочего места кассира в 1С был выбран предопределенный обработчик обслуживания предыдущего поколения), платформа продолжает создавать COM-объект старого драйвера. Соответственно, 1С вызывает модуль с двумя типами оплат, игнорируя сертификаты.
Для того чтобы чеки закрывались корректно и сертификат не подменялся картой, необходимо перевести взаимодействие кассы с 1С на универсальный стандарт БПО. Рассмотрим последовательность действий.
Самое простое и эффективное решение — выполнить чистую установку актуальной сборки драйвера АТОЛ 8-й версии (или более новой 10-й версии, если она поддерживается релизом конфигурации):
Если после обновления дистрибутива 1С по-прежнему цепляется за старый программный идентификатор, разберем, как очистить регистрацию вручную. Запустим командную строку от имени Администратора и выполним разрегистрацию старой библиотеки:
regsvr32 /u "C:\Program Files (x86)\ATOL\Drivers8\Bin\FprnM1C.dll"
После этого регистрируем библиотеку нового стандарта из комплекта поставки:
regsvr32 "C:\Program Files (x86)\ATOL\Drivers8\Bin\AtolDrivers8_1C.dll"
Проверим карточку подключения кассового аппарата внутри информационной базы:
Проанализируем соответствие номеров оплат в самом аппарате. Открываем утилиту «Тест «Драйвер ККМ» и переходим в раздел Настройка свойств -> Параметры ККМ -> Оплата:
СЕРТИФИКАТ или ПОДАРОЧНЫЙ СЕРТИФИКАТ.После перевода кассы на универсальный модуль БПО и перерегистрации компонентов чек при оплате подарочным сертификатом будет закрываться отдельной строкой оплаты с корректным наименованием.