При автоматизации розничной торговли часто возникает задача разделения потока пробиваемых чеков на одном кассовом месте. Типичный сценарий: часть номенклатуры (например, подакцизная или требующая обязательной маркировки) должна фискализироваться в рамках требований 54-ФЗ по одной организации или системе налогообложения, а другая часть — через второй аппарат или печататься как нефискальный чек. Рассмотрим, как реализовать такую схему на платформе 1С:Предприятие 7.7 (в частности, в конфигурации «Торговля и склад 7.7»).
Штатный механизм торгового оборудования в платформе 7.7 рассчитан на взаимодействие только с одним фискальным регистратором (ККТ) в рамках одного сеанса пользователя. Типовая глобальная переменная глФР и стандартные обработки обслуживания не поддерживают одновременную маршрутизацию строк одного документа на разные устройства «из коробки».
Для организации работы с двумя устройствами на одном компьютере есть несколько практических подходов, которые мы подробно разберем по шагам.
Наиболее надежный и классический способ при использовании COM-портовых драйверов ККТ (например, драйверов от компаний «АТОЛ» или «Штрих-М») — настройка и переключение логических устройств непосредственно перед отправкой команд печати чека.
Разберем последовательность действий:
COM3, скорость обмена, пароль), а для ЛУ №2 — параметры второго устройства (например, COM4).Посмотрим на пример программной смены активного устройства через свойства драйвера:
// ЛогУстройство - числовой признак целевой кассы (1 или 2)
Если ЛогУстройство = 1 Тогда
Объект.LDNumber = 1;
Объект.SetActiveLD();
Иначе
Объект.LDNumber = 2;
Объект.SetActiveLD();
КонецЕсли;
После активации нужного логического устройства драйвер направляет все последующие команды фискализации (открытие чека, регистрация позиций, оплата и закрытие) именно на выбранный регистратор. Для соблюдения 54-ФЗ важно передавать корректные данные кассира и соблюдать строгую последовательность передачи реквизитов позиции: наименование, цена, количество и ставка НДС.
Если покупатель приобретает одновременно товары разного назначения в рамках одной корзины, кассиру неудобно формировать два разных документа вручную. Разберем алгоритм автоматического разделения одного чека на два физических устройства:
Пример структуры кода для поочередной печати двух частей чека:
// Перебираем первую группу товаров для ККТ №1
Объект.LDNumber = 1;
Объект.SetActiveLD();
// Открытие чека и регистрация позиций первой группы
Объект.OpenCheck();
Для Каждого Стр Из ТЗ_ТоварыФР1 Цикл
// Регистрация продажи позиции
Объект.Name = Стр.Товар.Наименование;
Объект.Price = Стр.Цена;
Объект.Quantity = Стр.Количество;
Объект.Registration();
КонецЦикла;
Объект.CloseCheck();
// Переключаемся на ККТ №2 для оставшихся товаров
Объект.LDNumber = 2;
Объект.SetActiveLD();
Объект.OpenCheck();
Для Каждого Стр Из ТЗ_ТоварыФР2 Цикл
Объект.Name = Стр.Товар.Наименование;
Объект.Price = Стр.Цена;
Объект.Quantity = Стр.Количество;
Объект.Registration();
КонецЦикла;
Объект.CloseCheck();
Если драйвер оборудования не поддерживает работу с логическими устройствами или требуется независимая работа с аппаратами разных производителей (например, один аппарат «АТОЛ», второй — «Штрих-М»), создаем два независимых программных объекта драйвера:
Попытка
Драйвер1 = СоздатьОбъект("AddIn.FprnM45"); // Пример инициализации драйвера
Драйвер2 = СоздатьОбъект("AddIn.FprnM45");
Исключение
Сообщить("Ошибка загрузки внешней компоненты ККТ: " + ОписаниеОшибки());
КонецПопытки;
При использовании современных драйверов версий 10.х можно использовать локальный веб-сервер драйвера. В этом случае из 1С 7.7 запросы на печать отправляются по HTTP/JSON с помощью системного объекта WinHttp.WinHttpRequest.5.1. Это снимает проблему блокировки COM-портов и позволяет напрямую адресовать чеки конкретной кассе по ее идентификатору в сети.
При реализации схемы с двумя фискальными регистраторами обязательно учитываем следующие особенности: