В практической работе с торговым оборудованием в среде 1С:Предприятие системные администраторы и программисты иногда сталкиваются с крайне специфическим поведением фискальных регистраторов семейства Штрих-М. Ошибка проявляется следующим образом: кассир пытается пробить обычный чек, но вместо печати чека продажи ККТ внезапно распечатывает Z-отчет (отчет с гашением), закрывая текущую кассовую смену. Сразу после этого программа 1С выдает ошибку: "Ошибка: не открыта кассовая смена".
Попытка повторно открыть смену и заново пробить чек ни к чему не приводит — цикл повторяется: смена открывается, при попытке пробить чек ККТ снова ее закрывает и рапортует об ошибке. Давайте подробно разберем, почему возникает этот сбой, как устроен механизм взаимодействия программы с драйвером кассы и какие практические шаги помогут полностью устранить данную проблему.
Первопричина кроется во внутреннем алгоритме работы Библиотеки подключаемого оборудования (БПО) 1С и особенностях протокола фискальных регистраторов Штрих-М. Перед отправкой команды на печать фискального чека 1С выполняет сверку налоговых ставок (НДС), указанных в документе продажи, со ставками, запрограммированными во внутренней памяти ККТ (в частности, в Таблице 6 "Налоговые ставки").
Если 1С обнаруживает малейшее несовпадение (например, в базе 1С ставка называется "Без НДС", а во внутренней таблице кассы под тем же индексом прописано "Без налога" или выставлено неверное процентное значение), программа считает необходимым актуализировать эти настройки. 1С пытается автоматически перезаписать (запрограммировать) правильные наименования и значения ставок в память ККТ.
Однако по техническому регламенту работы фискальных накопителей и самих аппаратов Штрих-М, изменять таблицы налоговых ставок (Таблицу 6) разрешено строго при закрытой кассовой смене. Если смена уже открыта, касса вернет ошибку при попытке записи в таблицу.
Для обхода этого ограничения разработчики интеграционной компоненты добавили специальный параметр. Если в настройках ККТ в 1С или в свойствах драйвера активна опция "Закрывать смену для программирования налоговых ставок", 1С берет инициативу на себя:
Ситуация усугубляется после обновления прошивок ККТ в сервисных центрах (ЦТО) или при изменении налогового законодательства. Новая прошивка часто сбрасывает или модифицирует структуру внутренних таблиц кассы, из-за чего старая компонента 1С начинает видеть расхождения в ставках даже у организаций, работающих полностью без НДС.
---
Первым делом нам необходимо разорвать бесконечный цикл автоматического закрытия смен. Для этого нужно запретить программе самостоятельно инициировать процедуру перепрограммирования налоговых ставок ККТ.
Выполним следующие действия в интерфейсе 1С:Бухгалтерия:
CloseSession или находиться на вкладке "Ставки НДС").После снятия этой галочки 1С перестанет принудительно закрывать смену. Если расхождение в ставках все же останется, программа просто выдаст предупреждение или ошибку формата "Неверная налоговая ставка", но смена на ККТ останется открытой, и вам не придется аннулировать Z-отчеты.
---
Если после выполнения Шага 1 касса выдает ошибку неверной ставки при попытке пробить чек, нам необходимо вручную сопоставить налоговые таблицы 1С и фискального регистратора. Проанализируем состояние таблиц оборудования.
Для этого нам понадобится стандартная сервисная утилита от производителя:
Затем вернемся в 1С в настройки подключаемого оборудования. Нам нужно сопоставить налоговые ставки системы с номерами налоговых ставок (налоговых групп) ККТ. Убедимся, что ставка "Без НДС" в 1С указывает именно на тот номер ряда из Таблицы 6 драйвера, который мы зафиксировали ранее.
Также стоит проверить еще одну важную настройку в таблицах Штрих-М. В Таблице 17 "Региональные настройки" найдем поле "Rus автокоррекция ставки НДС" (поле № 38). На новых прошивках рекомендуется выставить значение этого поля в 0 (отключено), чтобы касса сама не пыталась модифицировать передаваемые ставки во время работы.
---
Очень частая причина "неадекватного" поведения Штрих-М при взаимодействии с 1С — это конфликт версий динамических библиотек (DLL). При обновлении конфигурации или платформы 1С может продолжать использовать устаревшие файлы интеграционных компонент, которые "застряли" в системных каталогах или кэше пользователя.
Проанализируем файловую систему и выполним полную очистку:
C:\ (особенно в папках установки 1С, каталогах платформы и профилях пользователей) файлов библиотек со следующими масками имен:
DrvFR.dllDrvFR1С.dllSMDrvFR1CLib.dllSMDrvFR1CLib20.dll%appdata%\1C\1Cv8\ExtCompT\ и аналогичные локальные директории хранения внешних компонент 1С.---
Из-за частых аварийных закрытий смены на физическом устройстве статус смены в базе данных 1С и на самой кассе гарантированно разойдется. Например, в ККТ смена уже закрыта Z-отчетом, а в информационной базе 1С документ "Кассовая смена" все еще имеет статус "Открыта".
Выясним текущее положение дел и восстановим порядок. Для этого воспользуемся программными методами или ручной корректировкой документов.
Если нам необходимо программно закрыть "зависшую" смену в 1С без физического обращения к кассе, мы можем воспользоваться внешней обработкой или написать небольшой код для изменения статуса документа КассоваяСмена:
// Процедура принудительного закрытия зависшей кассовой смены в базе 1С
Процедура ЗакрытьСменуВБазеПрограммно(НомерСмены) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КассоваяСмена.Ссылка КАК Ссылка
|ИЗ
| Документ.КассоваяСмена КАК КассоваяСмена
|ГДЕ
| КассоваяСмена.Номер = &Номер";
Запрос.УстановитьПараметр("Номер", НомерСмены);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
СменаОбъект = Выборка.Ссылка.ПолучитьОбъект();
Если СменаОбъект.Статус = Перечисления.СтатусыКассовойСмены.Открыта Тогда
СменаОбъект.Статус = Перечисления.СтатусыКассовойСмены.Закрыта;
СменаОбъект.ВремяОкончания = ТекущаяДата();
СменаОбъект.Записать(РежимЗаписиДокумента.Запись);
ЗаписьЖурналаРегистрации("КассовыеСмены", УровеньЖурналаРегистрации.Информация, , ,
"Смена № " + НомерСмены + " успешно переведена в статус Закрыта.");
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Рассмотрим два возможных сценария восстановления синхронизации:
Кассовая смена за проблемную дату, измените его статус на "Закрыта" и установите время окончания смены. После этого вы сможете открыть смену штатным образом из рабочего места кассира (РМК).Выполнив эти комплексные шаги по настройке параметров драйвера, очистке старых файлов библиотек и ручной сверке налоговых таблиц, вы навсегда избавитесь от проблемы внезапного автоматического закрытия смены на кассовых аппаратах Штрих-М.