Как настроить пробитие чеков с оплатой банковской картой на фискальном регистраторе Штрих-М в 1С 7.7 Торговля и Склад

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

При внедрении торгового эквайринга в конфигурации 1С:Торговля и Склад 9.2 на платформе 1С:Предприятие 7.7 часто возникает задача разделения видов оплат в фискальном регистраторе (ФР) «Штрих-М». Если терминал работает автономно от учетной системы, кассир сначала проводит операцию по банковскому терминалу, а затем пробивает фискальный чек в 1С. Разберем, как правильно передавать информацию о безналичной оплате в драйвер ККТ, чтобы суммы корректно распределялись по секциям и типам оплат в сменных отчетах (Z-отчете).

Различие между отделами (секциями) и типами оплаты в драйвере Штрих-М

Проанализируем распространенное заблуждение: попытку передать признак безналичной оплаты через номер секции или отдела. Важно четко разделять эти понятия:

  1. Секция (отдел) — задается свойством Department при регистрации каждой позиции чека (методы Sale() или ReturnSale()). Секции служат для аналитического разделения номенклатуры (например, разные товарные группы или системы налогообложения).
  2. Тип оплаты — определяет способ расчета за чек в целом. Типы оплаты задаются свойствами Summ1, Summ2, Summ3, Summ4 непосредственно перед фискализацией чека методом CloseCheck().

В фискальных регистраторах «Штрих-М» по умолчанию используются следующие соответствия:

  1. Summ1 — Наличные денежные средства (Тип оплаты 1).
  2. Summ2 — Безналичные расчеты / Платежная карта / Электронные средства (Тип оплаты 2).
  3. Summ3 и Summ4 — Прочие типы оплаты (кредит, предоплата, сертификаты и т.д.).

Передача чека в отдельную секцию не делает оплату безналичной. Для отражения эквайринга необходимо передавать сумму в свойство Summ2.

Настройка фискального регистратора в тесте драйвера

Перед доработкой конфигурации проверим настройки аппарата через утилиту «Тест драйвера ККТ» («Тест драйвера ФР»):

  1. Подключимся к фискальному регистратору и перейдем в раздел Таблицы.
  2. Откроем Таблицу 5 («Наименования типов оплаты»).
  3. Убедимся, что для Типа оплаты 2 задано понятное наименование: БЕЗНАЛИЧНЫМИ, ПЛАТ. КАРТОЙ или ЭЛЕКТРОННЫМИ.
  4. Сохраним параметры в ККТ. При таком подходе в итоговых отчетах за смену (X- и Z-отчеты) суммы наличных и безналичных платежей будут автоматически разделяться по отдельным строкам.

Доработка документа «Чек» и формы кассира

Разберем по шагам доработку конфигурации «Торговля и Склад 9.2»:

  1. В документе Чек добавим реквизит или реквизит формы для выбора способа оплаты: Наличные или Банковская карта. Если требуется смешанная оплата (часть чека налом, часть картой), создадим два реквизита: СуммаНал и СуммаБезнал.
  2. На форме рабочего места кассира настроим интерфейс с выбором вида расчета перед нажатием кнопки печати чека.
  3. Передадим выбранный тип оплаты в процедуру печати чека внешней обработки обслуживания ККТ.

Доработка обработки обслуживания фискального регистратора

Откроем внешнюю обработку обслуживания ККТ (как правило, fr_comm.ert или специализированный модуль работы с ФР) и найдем процедуру закрытия чека. Перед вызовом метода CloseCheck() драйвера необходимо инициализировать все переменные сумм, чтобы избежать наложения данных от предыдущих операций.

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


// Очищаем все типы оплат перед заполнением
Объект.Summ1 = 0;
Объект.Summ2 = 0;
Объект.Summ3 = 0;
Объект.Summ4 = 0;

// Распределяем суммы в зависимости от типа оплаты
Если ТипОплаты = 1 Тогда
    // 100% оплата наличными
    Объект.Summ1 = ИтогЧека;
ИначеЕсли ТипОплаты = 2 Тогда
    // 100% оплата по банковской карте (эквайринг)
    Объект.Summ2 = ИтогЧека;
ИначеЕсли ТипОплаты = 3 Тогда
    // Смешанная оплата (наличные + карта)
    Объект.Summ1 = СуммаНаличными;
    Объект.Summ2 = СуммаКартой;
КонецЕсли;

// Сброс служебных параметров чека
Объект.DiscountOnCheck = 0;
Объект.StringForPrinting = "";

// Выполняем фискализацию и закрытие чека
Объект.CloseCheck();

// Проверяем результат выполнения команды
Если Объект.ResultCode <> 0 Тогда
    Предупреждение("Ошибка закрытия чека: " + Объект.ResultCodeDescription);
    Возврат 0;
КонецЕсли;

Важные правила и ограничения при работе с безналичной оплатой

Рассмотрим нюансы, соблюдение которых позволит избежать сбоев при печати чеков:

  1. Запрет сдачи при безналичном расчете: в отличие от наличных, при оплате картой сумма в свойстве Summ2 не может превышать сумму товарных позиций чека. Драйвер вернет ошибку, если переданная безналичная сумма больше итога чека.
  2. Точное совпадение копеек: сумма всех строк чека (с учетом количества, цен и скидок) должна строго до копейки совпадать с суммой переданных оплат: Summ1 + Summ2 = ИтогЧека. При расхождении даже на 1 копейку метод CloseCheck() завершится ошибкой.
  3. Оформление возвратов: при проведении документа возврата методом ReturnSale() закрытие чека также должно производиться через свойство Summ2. Это гарантирует, что возврат по безналичному расчету не уменьшит сумму наличных денег в кассе фискального регистратора.
  4. Обязательное обнуление параметров: перед вызовом каждого метода закрытия чека обязательно присваивайте нулевые значения неиспользуемым свойствам Summ1–Summ4. Это предотвратит случайное дублирование сумм из памяти драйвера.
← На главную