Почему при проведении чека в 1С автоматически закрывается кассовая смена на ККТ Штрих-М и как это исправить

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

В практической работе с торговым оборудованием в среде 1С:Предприятие системные администраторы и программисты иногда сталкиваются с крайне специфическим поведением фискальных регистраторов семейства Штрих-М. Ошибка проявляется следующим образом: кассир пытается пробить обычный чек, но вместо печати чека продажи ККТ внезапно распечатывает Z-отчет (отчет с гашением), закрывая текущую кассовую смену. Сразу после этого программа 1С выдает ошибку: "Ошибка: не открыта кассовая смена".

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

Техническая суть проблемы: почему касса закрывает смену?

Первопричина кроется во внутреннем алгоритме работы Библиотеки подключаемого оборудования (БПО) 1С и особенностях протокола фискальных регистраторов Штрих-М. Перед отправкой команды на печать фискального чека 1С выполняет сверку налоговых ставок (НДС), указанных в документе продажи, со ставками, запрограммированными во внутренней памяти ККТ (в частности, в Таблице 6 "Налоговые ставки").

Если 1С обнаруживает малейшее несовпадение (например, в базе 1С ставка называется "Без НДС", а во внутренней таблице кассы под тем же индексом прописано "Без налога" или выставлено неверное процентное значение), программа считает необходимым актуализировать эти настройки. 1С пытается автоматически перезаписать (запрограммировать) правильные наименования и значения ставок в память ККТ.

Однако по техническому регламенту работы фискальных накопителей и самих аппаратов Штрих-М, изменять таблицы налоговых ставок (Таблицу 6) разрешено строго при закрытой кассовой смене. Если смена уже открыта, касса вернет ошибку при попытке записи в таблицу.

Для обхода этого ограничения разработчики интеграционной компоненты добавили специальный параметр. Если в настройках ККТ в 1С или в свойствах драйвера активна опция "Закрывать смену для программирования налоговых ставок", 1С берет инициативу на себя:

  1. Обнаружив несовпадение ставок при открытой смене, 1С посылает ККТ команду принудительного закрытия смены (снятие Z-отчета).
  2. ККТ успешно закрывает смену.
  3. Программа пытается продолжить операцию фискализации чека.
  4. Но поскольку смена только что была закрыта, ККТ блокирует печать чека продажи и возвращает логичную ошибку: "Не открыта кассовая смена".

Ситуация усугубляется после обновления прошивок ККТ в сервисных центрах (ЦТО) или при изменении налогового законодательства. Новая прошивка часто сбрасывает или модифицирует структуру внутренних таблиц кассы, из-за чего старая компонента 1С начинает видеть расхождения в ставках даже у организаций, работающих полностью без НДС.

---

Шаг 1. Отключение автоматического закрытия смены в настройках 1С

Первым делом нам необходимо разорвать бесконечный цикл автоматического закрытия смен. Для этого нужно запретить программе самостоятельно инициировать процедуру перепрограммирования налоговых ставок ККТ.

Выполним следующие действия в интерфейсе 1С:Бухгалтерия:

  1. Перейдем в раздел Администрирование, затем выберем пункт Подключаемое оборудование.
  2. Найдем в списке наше фискальное устройство Штрих-М и откроем карточку его настроек.
  3. Нажмем кнопку Настроить (или "Параметры драйвера" в зависимости от версии используемой БПО).
  4. Внимательно изучим доступные параметры. Нам необходимо найти флаг "Закрывать смену для программирования налоговых ставок" (в некоторых версиях он может иметь англоязычное техническое название CloseSession или находиться на вкладке "Ставки НДС").
  5. Снимем этот флажок и сохраним настройки оборудования.

После снятия этой галочки 1С перестанет принудительно закрывать смену. Если расхождение в ставках все же останется, программа просто выдаст предупреждение или ошибку формата "Неверная налоговая ставка", но смена на ККТ останется открытой, и вам не придется аннулировать Z-отчеты.

---

Шаг 2. Ручная синхронизация таблиц ставок в ККТ и 1С

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

Для этого нам понадобится стандартная сервисная утилита от производителя:

  1. Полностью закроем программу 1С на рабочем месте (это обязательно, так как 1С монопольно захватывает COM-порт или сетевое подключение к кассе).
  2. Запустим утилиту Тест драйвера ККТ (обычно это "Драйвер ФР" версии 4.14, 4.15 или 5.x) обязательно от имени Администратора.
  3. Зайдем в Настройка свойств, проверим связь с устройством.
  4. В меню функций перейдем в раздел Таблицы.
  5. Найдем и откроем двойным кликом Таблицу № 6 "Налоговые ставки".
  6. Посмотрим, какие именно ставки записаны в строках (рядах) таблицы. Обратим внимание на текстовые наименования ставок (например, "Без НДС", "0%", "20%", "20/120"). Каждому ряду соответствует свой порядковый индекс (обычно от 1 до 4 или более).
  7. Если наша организация работает без НДС, зафиксируем, в каком именно ряду прописано значение "Без НДС" или "Без налога" (обычно это ряд 4).

Затем вернемся в 1С в настройки подключаемого оборудования. Нам нужно сопоставить налоговые ставки системы с номерами налоговых ставок (налоговых групп) ККТ. Убедимся, что ставка "Без НДС" в 1С указывает именно на тот номер ряда из Таблицы 6 драйвера, который мы зафиксировали ранее.

Также стоит проверить еще одну важную настройку в таблицах Штрих-М. В Таблице 17 "Региональные настройки" найдем поле "Rus автокоррекция ставки НДС" (поле № 38). На новых прошивках рекомендуется выставить значение этого поля в 0 (отключено), чтобы касса сама не пыталась модифицировать передаваемые ставки во время работы.

---

Шаг 3. Полная очистка системы от устаревших DLL-файлов драйвера

Очень частая причина "неадекватного" поведения Штрих-М при взаимодействии с 1С — это конфликт версий динамических библиотек (DLL). При обновлении конфигурации или платформы 1С может продолжать использовать устаревшие файлы интеграционных компонент, которые "застряли" в системных каталогах или кэше пользователя.

Проанализируем файловую систему и выполним полную очистку:

  1. Закроем 1С и остановим все службы, связанные с торговым оборудованием.
  2. Удалим старый драйвер "Штрих-М" через штатную панель управления Windows ("Установка и удаление программ").
  3. Произведем глобальный поиск на диске C:\ (особенно в папках установки 1С, каталогах платформы и профилях пользователей) файлов библиотек со следующими масками имен:
    • DrvFR.dll
    • DrvFR1С.dll
    • SMDrvFR1CLib.dll
    • SMDrvFR1CLib20.dll
  4. Безжалостно удалим все найденные старые копии этих библиотек. Особое внимание обратите на скрытый каталог пользователя: %appdata%\1C\1Cv8\ExtCompT\ и аналогичные локальные директории хранения внешних компонент 1С.
  5. Установим последнюю стабильную версию драйвера ККТ "Штрих-М" с официального сайта производителя (желательно ветки 4.15 или новее).
  6. В настройках оборудования 1С переустановим драйвер устройства, выбрав современную компоненту, поставляемую на базе технологии NativeAPI, отказавшись от устаревших OLE-технологий.

---

Шаг 4. Устранение рассинхронизации статуса смены

Из-за частых аварийных закрытий смены на физическом устройстве статус смены в базе данных 1С и на самой кассе гарантированно разойдется. Например, в ККТ смена уже закрыта Z-отчетом, а в информационной базе 1С документ "Кассовая смена" все еще имеет статус "Открыта".

Выясним текущее положение дел и восстановим порядок. Для этого воспользуемся программными методами или ручной корректировкой документов.

Если нам необходимо программно закрыть "зависшую" смену в 1С без физического обращения к кассе, мы можем воспользоваться внешней обработкой или написать небольшой код для изменения статуса документа КассоваяСмена:


// Процедура принудительного закрытия зависшей кассовой смены в базе 1С
Процедура ЗакрытьСменуВБазеПрограммно(НомерСмены) Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   КассоваяСмена.Ссылка КАК Ссылка
        |ИЗ
        |   Документ.КассоваяСмена КАК КассоваяСмена
        |ГДЕ
        |   КассоваяСмена.Номер = &Номер";
    
    Запрос.УстановитьПараметр("Номер", НомерСмены);
    РезультатЗапроса = Запрос.Выполнить();
    
    Если Не РезультатЗапроса.Пустой() Тогда
        Выборка = РезультатЗапроса.Выбрать();
        Пока Выборка.Следующий() Цикл
            СменаОбъект = Выборка.Ссылка.ПолучитьОбъект();
            Если СменаОбъект.Статус = Перечисления.СтатусыКассовойСмены.Открыта Тогда
                СменаОбъект.Статус = Перечисления.СтатусыКассовойСмены.Закрыта;
                СменаОбъект.ВремяОкончания = ТекущаяДата();
                СменаОбъект.Записать(РежимЗаписиДокумента.Запись);
                ЗаписьЖурналаРегистрации("КассовыеСмены", УровеньЖурналаРегистрации.Информация, , , 
                    "Смена № " + НомерСмены + " успешно переведена в статус Закрыта.");
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    
КонецПроцедуры

Рассмотрим два возможных сценария восстановления синхронизации:

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

← На главную