Как исправить ошибку «Кассовая смена не открыта или истекла» при печати чеков с нескольких рабочих мест на одну ККТ в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

При организации работы торговой точки нередко возникает необходимость подключить несколько рабочих мест кассира (РМК) к одному физическому фискальному регистратору или сетевому серверу печати чеков. Однако при попытке пробить чек со второго терминала пользователи часто сталкиваются с ошибкой: «При печати чека произошла ошибка. Чек не напечатан на фискальном устройстве. Дополнительное описание: Кассовая смена не открыта или истекла».

Разберем по шагам, почему возникает эта коллизия в типовых конфигурациях 1С, как устроена работа подсистемы подключаемого оборудования (БПО) и какими способами можно настроить корректную многопользовательскую печать.

Выясним причину: почему 1С блокирует печать со второго терминала

Проанализируем архитектуру подсистемы БПО, используемой в конфигурациях «1С:Управление торговлей 11», «1С:ERP» и «1С:Комплексная автоматизация». Поведение системы обусловлено двумя ключевыми факторами:

  1. Жесткая привязка оборудования к рабочему месту: В базе 1С фискальный регистратор привязывается к конкретной записи справочника РабочиеМеста (уникальному идентификатору клиентского компьютера или сеанса). Документ КассоваяСмена регистрируется с обязательным отбором по связке параметров «Касса ККМ» и «Рабочее место». Когда на первом РМК кассир открывает смену, смена открывается и в базе, и в фискальном накопителе (ФН). При попытке пробить чек со второго РМК конфигурация ищет в табличной части открытую смену именно для текущего сеанса. Не найдя ее, 1С посылает в кассу команду открытия новой смены. В ответ касса возвращает ошибку, так как в самом фискальном накопителе смена уже открыта.
  2. Монопольный захват портов: При прямом подключении кассовое место держит открытый порт связи с драйвером ККТ. Если несколько сессий одновременно обращаются к одному физическому устройству без специализированного сетевого сервиса или очереди, драйвер возвращает ошибку блокировки порта.

В типовых конфигурациях «1С:Розница» и «1С:Управление нашей фирмой» механизм работы с общим оборудованием реализован штатно, тогда как в «1С:Управление торговлей» для разделения кассы между несколькими РМК требуется адаптация логики или настройка отдельного сценария фискализации.

Способ 1. Использование единого виртуального рабочего места

Рассмотрим самый простой способ обхода ошибки без снятия конфигурации с поддержки и без внесения правок в программный код.

Задача сводится к тому, чтобы заставить разные клиентские сеансы (включая RDP-подключения и виртуальные машины) использовать одну и ту же запись в справочнике РабочиеМеста:

  1. Перейдем в раздел Администрирование — Подключаемое оборудование — Рабочие места.
  2. Создадим одну общую запись рабочего места (например, «Основная касса (сетевая)»).
  3. Привяжем кассовый аппарат именно к этому рабочему месту.
  4. В настройках пользователей или параметрах запуска сеансов укажем созданное рабочее место в качестве текущего для всех кассиров, пробивающих чеки на этой ККТ.

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

Способ 2. Переопределение проверки смены в расширении

Если специфика учета требует сохранения персональных рабочих мест для каждого сотрудника, скорректируем типовую проверку смены с помощью расширения конфигурации.

Посмотрим на типовой алгоритм: обычно он накладывает фильтр на реквизиты КассаККМ и РабочееМесто. В расширении переопределим функцию поиска открытой смены так, чтобы отбор производился исключительно по объекту КассаККМ.

Пример программного кода для поиска открытой смены по кассе:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |	КассоваяСмена.Ссылка КАК Ссылка,
    |	КассоваяСмена.Состояние КАК Состояние
    |ИЗ
    |	Документ.КассоваяСмена КАК КассоваяСмена
    |ГДЕ
    |	КассоваяСмена.КассаККМ = &КассаККМ
    |	И КассоваяСмена.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияКассовойСмены.Открыта)";

Запрос.УстановитьПараметр("КассаККМ", ПараметрыКассы.КассаККМ);
Результат = Запрос.Выполнить();

Если Не Результат.Пустой() Тогда
    Выборка = Результат.Выбрать();
    Выборка.Следующий();
    // Возвращаем существующую открытую смену без вызова команды драйвера
    ТекущаяСмена = Выборка.Ссылка;
КонецЕсли;

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

Способ 3. Организация асинхронной очереди фискализации

Рассмотрим наиболее надежный подход для высоконагруженных торговых точек. Прямое обращение нескольких РМК к одной кассе даже при исправленной логике смен может вызывать конфликты параллельного доступа («Порт занят»). Для устранения проблемы организуем очередь чеков:

  1. РМК кассиров не обращаются к драйверу ККТ напрямую, а только создают документы ЧекККМ со статусом «К фискализации».
  2. На стороне сервера 1С настраивается регламентное задание или выделенный фоновый сеанс, последовательно считывающий документы из очереди.
  3. Единый процесс обращается к кассе, передает данные чека и записывает результат фискализации (номер чека, номер ФД и фискальный признак) обратно в документ.

Этот метод полностью устраняет проблемы блокировок и позволяет распределять нагрузку без риска потери данных.

Важные требования законодательства при совместной работе с ККТ

Реализуя совместную печать чеков, обратим внимание на обязательные требования 54-ФЗ и форматов фискальных документов (ФФД):

  1. Реквизиты кассира (теги 1021 и 1203): Если несколько продавцов работают в рамках одной смены, закон требует, чтобы в чеке были указаны фактические данные сотрудника, выполнившего расчет. В структуру фискализации необходимо динамически передавать ФИО (тег 1021) и ИНН кассира (тег 1203) текущего пользователя, а не того, кто открывал общую смену утром.
  2. Ограничение длительности смены (24 часа): Фискальный накопитель аппаратно блокирует печать чеков, если с момента открытия смены прошло более суток. В таком случае ошибка «Кассовая смена истекла» является физической блокировкой ФН. Перед продолжением работы необходимо обязательно сформировать отчет о закрытии смены (Z-отчет) и открыть новую смену.
  3. Тайм-ауты разрешительного режима (ТСПИоТ): При продаже маркированных товаров касса или кассовое ПО выполняет онлайн-проверку кодов маркировки. Регламентное время ответа от серверов проверки ограничено 1,5 секундами. При использовании очередей печати и промежуточных серверов ККМ важно следить, чтобы задержки сетевого взаимодействия не приводили к разрыву сессии фискализации.
← На главную