Как настроить печать на два фискальных регистратора на одном рабочем месте в 1С 7.7?

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

При автоматизации розничной торговли часто возникает задача разделения потока пробиваемых чеков на одном кассовом месте. Типичный сценарий: часть номенклатуры (например, подакцизная или требующая обязательной маркировки) должна фискализироваться в рамках требований 54-ФЗ по одной организации или системе налогообложения, а другая часть — через второй аппарат или печататься как нефискальный чек. Рассмотрим, как реализовать такую схему на платформе 1С:Предприятие 7.7 (в частности, в конфигурации «Торговля и склад 7.7»).

Ограничения типовой конфигурации «Торговля и склад 7.7»

Штатный механизм торгового оборудования в платформе 7.7 рассчитан на взаимодействие только с одним фискальным регистратором (ККТ) в рамках одного сеанса пользователя. Типовая глобальная переменная глФР и стандартные обработки обслуживания не поддерживают одновременную маршрутизацию строк одного документа на разные устройства «из коробки».

Для организации работы с двумя устройствами на одном компьютере есть несколько практических подходов, которые мы подробно разберем по шагам.

Способ 1. Переключение логических устройств (ЛУ) в драйвере ККТ

Наиболее надежный и классический способ при использовании COM-портовых драйверов ККТ (например, драйверов от компаний «АТОЛ» или «Штрих-М») — настройка и переключение логических устройств непосредственно перед отправкой команд печати чека.

Разберем последовательность действий:

  1. В утилите настройки драйвера ККТ настраиваем два логических устройства (ЛУ): задаем для ЛУ №1 параметры подключения первой кассы (например, COM3, скорость обмена, пароль), а для ЛУ №2 — параметры второго устройства (например, COM4).
  2. В справочнике «Номенклатура» (или через признак организации/склада) добавляем признак, по которому система определяет принадлежность позиции к конкретной кассе.
  3. В обработке обслуживания фискального регистратора или в модуле документа («Чек ККМ») перед выводом чека устанавливаем активный номер логического устройства.

Посмотрим на пример программной смены активного устройства через свойства драйвера:


// ЛогУстройство - числовой признак целевой кассы (1 или 2)
Если ЛогУстройство = 1 Тогда
    Объект.LDNumber = 1;
    Объект.SetActiveLD();
Иначе
    Объект.LDNumber = 2;
    Объект.SetActiveLD();
КонецЕсли;

После активации нужного логического устройства драйвер направляет все последующие команды фискализации (открытие чека, регистрация позиций, оплата и закрытие) именно на выбранный регистратор. Для соблюдения 54-ФЗ важно передавать корректные данные кассира и соблюдать строгую последовательность передачи реквизитов позиции: наименование, цена, количество и ставка НДС.

Способ 2. Разделение табличной части документа при проведении

Если покупатель приобретает одновременно товары разного назначения в рамках одной корзины, кассиру неудобно формировать два разных документа вручную. Разберем алгоритм автоматического разделения одного чека на два физических устройства:

  1. В документе «Чек ККМ» при нажатии кнопки «Оплата» процедура перебирает строки табличной части и формирует две независимые таблицы значений (массива позиций).
  2. Для первой таблицы значений активируется первое логическое устройство (или первый экземпляр драйвера) и пробивается первый фискальный чек.
  3. Для второй таблицы активируется второе логическое устройство и пробивается второй чек.
  4. Сумма полученных от покупателя денежных средств и сдача корректно распределяются между двумя фискальными документами.

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


// Перебираем первую группу товаров для ККТ №1
Объект.LDNumber = 1;
Объект.SetActiveLD();
// Открытие чека и регистрация позиций первой группы
Объект.OpenCheck();
Для Каждого Стр Из ТЗ_ТоварыФР1 Цикл
    // Регистрация продажи позиции
    Объект.Name = Стр.Товар.Наименование;
    Объект.Price = Стр.Цена;
    Объект.Quantity = Стр.Количество;
    Объект.Registration();
КонецЦикла;
Объект.CloseCheck();

// Переключаемся на ККТ №2 для оставшихся товаров
Объект.LDNumber = 2;
Объект.SetActiveLD();
Объект.OpenCheck();
Для Каждого Стр Из ТЗ_ТоварыФР2 Цикл
    Объект.Name = Стр.Товар.Наименование;
    Объект.Price = Стр.Цена;
    Объект.Quantity = Стр.Количество;
    Объект.Registration();
КонецЦикла;
Объект.CloseCheck();

Способ 3. Работа через раздельные экземпляры COM-объектов или Web-сервер

Если драйвер оборудования не поддерживает работу с логическими устройствами или требуется независимая работа с аппаратами разных производителей (например, один аппарат «АТОЛ», второй — «Штрих-М»), создаем два независимых программных объекта драйвера:


Попытка
    Драйвер1 = СоздатьОбъект("AddIn.FprnM45"); // Пример инициализации драйвера
    Драйвер2 = СоздатьОбъект("AddIn.FprnM45");
Исключение
    Сообщить("Ошибка загрузки внешней компоненты ККТ: " + ОписаниеОшибки());
КонецПопытки;

При использовании современных драйверов версий 10.х можно использовать локальный веб-сервер драйвера. В этом случае из 1С 7.7 запросы на печать отправляются по HTTP/JSON с помощью системного объекта WinHttp.WinHttpRequest.5.1. Это снимает проблему блокировки COM-портов и позволяет напрямую адресовать чеки конкретной кассе по ее идентификатору в сети.

Важные нюансы расчетов и требований 54-ФЗ

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

  1. Эквайринг (оплата банковской картой): Если используется встроенный в 1С банковский терминал, кассиру потребуется провести две раздельные безналичные транзакции на суммы соответствующих чеков либо перевести терминал в автономный режим.
  2. Расчет сдачи и распределение скидок: Округление сумм и применение скидок должны рассчитываться отдельно для каждого чека до вызова методов регистрации позиций в ККТ, чтобы сумма строк точно совпадала с итогом чека.
  3. Альтернатива двум аппаратам — смена СНО: Если оба типа товаров принадлежат одной организации, но продаются по разным системам налогообложения, зачастую достаточно использовать один фискальный регистратор, передавая перед пробитием чека нужный признак СНО (с помощью соответствующих методов драйвера), что избавляет от необходимости приобретать и обслуживать две кассы.
← На главную