Часто в розничной торговле или при работе от лица нескольких юридических лиц возникает необходимость бить чеки с одного рабочего места на разные кассы. Если база работает на современной платформе, эта задача решается штатными средствами подключаемого оборудования. Но что делать, если учет ведется в классической «1С:Торговля и Склад 7.7» (ТиС 9), а к уже работающей онлайн-кассе (например, Атол) нужно добавить чекопечатающую машину (ЧПМ) или ФР от другого производителя (например, Штрих-М)?
Проанализируем ситуацию подробнее. В штатной логике ТиС 7.7 предусмотрено использование фискального регистратора в виде единственной сущности, как правило, привязанной к глобальной переменной глФР. Из-за этого прямое добавление касс с другими драйверами превращается в головную боль. Рассмотрим основные и наиболее оптимальные способы решения этой задачи, чтобы не переписывать половину конфигурации.
Разберем самый простой вариант. Если обе кассы работают на базе одного и того же драйвера (например, два фискальных регистратора от Штрих-М или два от Атол), вам вообще не нужно создавать дополнительные глобальные переменные и дублировать обработки обслуживания.
Современные (и не очень) драйверы торгового оборудования поддерживают понятие «Логическое устройство» (ЛУ). Суть в том, что в системе держится открытым всего один COM-порт (один OLE-объект), а перед самой печатью чека мы программно меняем активное логическое устройство на нужное. Драйвер сам переключает контекст на нужную физическую кассу, пробивает чек и возвращает фокус обратно.
Посмотрим на пример того, как это реализуется для драйверов оборудования «Штрих-М»:
Объект.LDNumber = НомерЛУ; // Устанавливаем номер нужного логического устройства
Объект.SetActiveLD(); // Делаем это устройство активным
Этот метод принимает параметры логического устройства с номером из свойств LDNumber, EscapeIP, EscapePort, EscapeTimeOut и делает их текущими параметрами драйвера. Во многих доработанных обработках обслуживания этот механизм уже поддерживается штатно, достаточно просто указать условия маршрутизации в настройках.
Теперь рассмотрим более сложный, но гибкий вариант — так называемый «зоопарк оборудования». Допустим, у нас есть Атол и ЧПМ от Штрих-М. Драйверы абсолютно разные (например, DrvFR.dll для Штрих-М и FprnM1C.dll для Атола). Логические устройства тут не помогут.
Многие разработчики совершают ошибку, пытаясь тупо сдублировать глобальную переменную глФР и всю ее обвязку, создавая в глобальном модуле глФР2, глФР3 и так далее. Это ведет к огромному количеству исправлений по всей конфигурации. Пойдем более изящным путем.
СписокЗначений (или структуру, если используете дополнительные компоненты) при старте системы, например в процедуре ПриНачалеРаботыСистемы().Подключить() и сложим ссылки на эти объекты в наш список (назовем его глФРы).глФРы и присваиваем ее переменной глФР.Таким образом, переменная глФР становится динамической. Мы подменяем ее содержимое непосредственно перед печатью. Это позволяет избежать переписывания кучи мест в обработках и сохраняет общую логику системы.
Рассмотрим альтернативный вариант, который выносит логику маршрутизации за пределы устаревшей платформы 1С 7.7. Вместо того чтобы смешивать драйверы разных производителей в 1С, можно использовать промежуточное ПО — серверы торгового оборудования.
Как это работает:
Мы настраиваем 1С 7.7 так, чтобы она общалась только с одной «виртуальной» кассой — самим прокси-сервером (через HTTP-запросы или специальную внешнюю компоненту). А уже к серверу физически подключены все ваши реальные устройства: Атол, Штрихи, принтеры чеков.
Преимущества данного подхода:
Если в вашей организации продажа товаров от разных юридических лиц может оказаться в одном чеке покупателя, нам потребуется доработать обработку Рабочего Места Кассира (РМК). Этот функционал часто называют «Мультикассой».
В этом случае, при нажатии кнопки «Пробить», доработанный модуль должен проанализировать табличную часть документа. Он программно «разрезает» один виртуальный документ 1С на несколько физических заданий на печать. Для реализации создается служебный справочник соответствий (например, «Отдел» или «Группа товаров» -> «Физическая касса / ЛУ»).
Система в цикле фильтрует товары для первой фирмы, подставляет нужный OLE-объект драйвера в глФР, пробивает чек. Затем берет остаток товаров для второй фирмы, меняет глФР на драйвер другой кассы и бьет второй чек. Клиент получает два физических чека из разных аппаратов, а в 1С остается один удобный документ.
Мы подробно разобрали, как избавиться от ограничения «одной кассы» в 1С 7.7. Если оборудование однотипное — используйте логические устройства драйвера. Если у вас «зоопарк» из Атола и Штрих-М — создавайте список OLE-объектов в глобальном модуле и подменяйте контекст глФР "на лету". А если вы хотите современных и стабильных решений без лишнего кода в 1С — обратите внимание на промежуточные прокси-серверы оборудования.