Довольно часто на практике возникает следующая нестандартная ситуация: на одном рабочем месте запущено сразу несколько информационных баз 1С (например, для разных направлений учета, разных организаций или разделенных баз водоканала), при этом физический фискальный регистратор подключен только один. Проанализируем проблему: по умолчанию драйвер подключаемого оборудования 1С захватывает COM-порт при инициализации кассы. Если попытаться пробить чек из второй параллельно запущенной базы, система выдаст ошибку о том, что порт занят или устройство недоступно. В результате кассирам приходится закрывать смену в одной программе, отключать оборудование и заново открывать смену в другой. Рассмотрим подробнее способы решения этой проблемы, чтобы обеспечить бесперебойную одновременную работу.
Выясним настоящую причину блокировки: сама платформа 1С порт не занимает, это делает обработка обслуживания торгового оборудования (драйвер кассы). Следовательно, мы можем доработать код конфигурации таким образом, чтобы программа подключалась к фискальному регистратору исключительно на время непосредственного пробития чека.
Разберем по шагам логику такой доработки:
Посмотрим на пример использования команд подключения и отключения клиента торгового оборудования в старых конфигурациях:
ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
// Здесь идет формирование данных и пробитие чека
ПолучитьСерверТО().ОтключитьКлиента(ЭтаФорма);
Важно понимать, что кассе физически все равно, из какой информационной базы пришла команда. Если смена уже открыта через первую базу, при попытке открытия смены через вторую базу драйвер может вернуть ошибку: «Смена уже открыта». Чтобы избежать программного сбоя, перед пробитием чека или открытием смены можно опрашивать текущее состояние устройства. Рассмотрим пример получения состояния фискального регистратора из драйвера:
НомерСмены = 0;
НомерДокумента = 0;
СтатусСмены = 0;
ПараметрыСостояния = "";
Попытка
Если ПараметрыПодключения.РевизияИнтерфейса < 2000 Тогда
Ответ = ОбъектДрайвера.ПолучитьТекущееСостояние(ПараметрыПодключения.ИДУстройства, НомерДокумента, НомерСмены, СтатусСмены);
Иначе
Ответ = ОбъектДрайвера.ПолучитьТекущееСостояние(ПараметрыПодключения.ИДУстройства, НомерДокумента, НомерСмены, СтатусСмены, ПараметрыСостояния);
КонецЕсли;
Исключение
// Обработка ошибки опроса кассы
КонецПопытки;
Если в результате опроса переменная СтатусСмены покажет, что физическая смена в кассе уже открыта (обычно статус 2), код 1С может просто программно создать в текущей базе документ КассоваяСмена с текущим номером из устройства, минуя повторную отправку команды открытия на фискальный регистратор.
Если изменять логику типового торгового оборудования и переписывать встроенные обработки обслуживания сложно, проанализируем архитектурный подход. Мы можем выделить одну из существующих баз (или развернуть отдельную пустую конфигурацию) в качестве «мастер-базы». К ней физически и монопольно будет подключен фискальный регистратор.
Остальные базы не будут напрямую общаться с кассой. При необходимости пробить чек они будут формировать пакет данных (номенклатура, количество, цена, система налогообложения, тип оплаты) и передавать его в мастер-базу через COM-соединение или современные HTTP-сервисы / Web-сервисы. Мастер-база примет входящие запросы, выстроит их в очередь и спокойно, последовательно напечатает на одном аппарате. Этот подход снимает проблему блокировки портов и конфликтов оборудования.
Рассмотрим современное системное решение, не требующее серьезного программирования в 1С. Последние версии драйверов от крупных производителей оборудования поддерживают работу через локальный фоновый веб-сервис (сервер ККТ, работающий по протоколам HTTP/JSON).
Алгоритм работы в этом случае выглядит так:
При реализации любой схемы одновременной работы мы столкнемся с рядом серьезных организационно-правовых и учетных нюансов. Обратим на них особое внимание:
Рассинхронизация итогов Z-отчета: Документы КассоваяСмена в типовых конфигурациях аккумулируют суммы продаж и безналичной оплаты исключительно по данным своей информационной базы. Если три базы печатают документы на один фискальный накопитель, физический Z-отчет (отчет о закрытии смены) снимет общую, суммарную выручку. В результате в каждой отдельной базе показатели закрытия кассовой смены будут расходиться с фискальным отчетом ККТ. Учтите это при разработке регламентов сверки для бухгалтерии.
Аварийное закрытие смены: Если оператор инициирует закрытие смены (снятие Z-отчета) в одной из баз, касса физически закроет смену в ФН. После этого остальные базы при попытке пробить чек столкнутся с аппаратной ошибкой «Смена закрыта», а их документы в 1С зависнут в некорректном статусе. Процесс открытия и закрытия смен должен быть строго регламентирован и выполняться ответственным лицом централизованно.
Лимит смены в 24 часа: Согласно фискальному законодательству, таймер продолжительности смены запускается в памяти устройства с момента открытия первым чеком. Если кассиры работают в базах асинхронно, необходимо контролировать закрытие по единому расписанию: по истечении 24 часов фискальный накопитель заблокирует печать чеков во всех базах одновременно.
Системы налогообложения и агентские признаки: Если базы разделены по типам услуг (что характерно для сектора ЖКХ, водоканалов) или совмещают разные системы налогообложения (СНО), необходимо следить, чтобы алгоритм 1С обязательно передавал реквизит применяемой СНО и признаки платежного агента в явном виде на уровне каждой позиции чека. В противном случае фискальный регистратор применит систему налогообложения по умолчанию из своих внутренних аппаратных настроек, что приведет к налоговым нарушениям.