Каждый владелец розничного магазина или специалист по автоматизации рано или поздно сталкивается с нюансами обновления кассового программного обеспечения. Особенно остро эти проблемы проявляются при совмещении или смене налоговых режимов, например, при работе на Патентной системе налогообложения (ПСН).
Типичный сценарий: после планового обновления конфигурации 1С:Розница с редакции 2.2 на 2.3 при попытке пробить чек на фискальном регистраторе (например, популярной марки «Штрих-М») на экран выводится критическая ошибка форматно-логического контроля: «Чек не напечатан на устройстве для печати чеков. Дополнительное описание: ккт не зарегистрирована с указанной системой налогообложения».
В этой статье мы подробно разберем, почему возникает данная ошибка, как взаимосвязаны настройки 1С, параметры фискального накопителя и логика работы драйверов ККТ, а также предоставим пошаговую инструкцию по устранению проблемы как стандартными средствами, так и с помощью точечной корректировки кода.
---
Для начала проанализируем архитектурные изменения в логике работы конфигурации. В редакции 2.2 и более ранних версиях механизмы интеграции с торговым оборудованием лояльно относились к передаваемым на кассу параметрам. Программа формировала XML-пакет с чеком и отправляла его на драйвер ККТ «как есть», перекладывая всю ответственность за проверку соответствия СНО на сам фискальный аппарат.
Начиная с редакции 2.3, разработчики фирмы 1С внедрили строгий форматно-логический контроль (ФЛК) непосредственно на стороне конфигурации перед отправкой данных в драйвер. Теперь программа сверяет систему налогообложения, определенную для конкретного чека, со списком разрешенных СНО, которые прописаны в карточке ККТ внутри самой базы 1С.
Если в настройках подключения оборудования в 1С не установлена галочка напротив нужного налогового режима, ФЛК блокирует отправку чека программным методом, генерируя упомянутую ошибку.
---
Многие специалисты пытаются решить проблему «в лоб» — комментируют процедуру проверки ФЛК в кодовой базе 1С. Однако после этого они замечают странное поведение: чеки начинают печататься, но в личном кабинете ОФД вместо ожидаемого Патента отображается совершенно другая СНО (например, УСН Доходы 6%).
Выясним причину этого явления. Она кроется в двух факторах:
---
Рассмотрим детально, как восстановить корректный учет и печать чеков без деструктивного вмешательства в типовой код конфигурации.
Если у вашей организации действительно изменился или продлился патент, эти сведения необходимо незамедлительно занести в информационную базу. В противном случае алгоритмы 1С будут постоянно сбрасывать продажи на основную систему налогообложения (УСН).
Для этого выполним следующие действия:
Очень часто пользователи забывают, что в 1С:Розница привязка СНО идет не только к организации в целом, но и к конкретным торговым точкам (складам).
Проверим и настроим эти связи:
Теперь необходимо сообщить механизму ФЛК программы 1С, что наша касса физически умеет и имеет право работать с Патентом. Для этого синхронизируем настройки карточки ККТ:
Чтобы обезопасить себя от отправки неверных данных в налоговую и ОФД в будущем (если вдруг снова произойдет сбой в программе 1С), настоятельно рекомендуется активировать внутренний контроль на стороне самого кассового аппарата.
1С:Розница, чтобы освободить порт подключения к ККТ.---
Иногда возникает ситуация, когда все настройки выполнены верно, даты патента актуальны, но ошибка ФЛК сохраняется из-за несоответствия кодирования систем налогообложения между БСП (Библиотекой стандартных подсистем) и драйвером ККТ Штрих-М.
В коде драйвера и конфигурации СНО передается в виде числового битового флага. Традиционно для Патента (ПСН) используется код 32 (или 5-й бит). В случае программного сбоя или устаревшей версии интеграционной компоненты код может передаваться некорректно.
Проанализируем пример кода, отвечающего за сопоставление систем налогообложения в общем модуле. Если вы используете доработанную конфигурацию или создаете расширение, обратите внимание на логику работы функции формирования XML-пакета чека.
Ниже представлен пример реализации функции маппинга СНО в общем модуле ПодключаемоеОборудованиеКлиентСервер, которую можно скорректировать для точного соответствия требованиям драйвера Штрих-М:
Функция ПолучитьЧисловойКодСНО(ТипСНО) Экспорт
// Перечисление.ТипыСистемНалогообложения содержит перечень СНО в 1С
// Нам необходимо вернуть строгое числовое значение для фискального регистратора
Если ТипСНО = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложения.Общая") Тогда
Возврат 1; // ОСН
ИначеЕсли ТипСНО = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложения.УСНДоходы") Тогда
Возврат 2; // УСН Доходы
ИначеЕсли ТипСНО = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложения.УСНДоходыМинусРасходы") Тогда
Возврат 4; // УСН Доходы минус Расходы
ИначеЕсли ТипСНО = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложения.ЕНВД") Тогда
Возврат 8; // ЕНВД (не актуально, но может присутствовать в старых базах)
ИначеЕсли ТипСНО = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложения.ЕСХН") Тогда
Возврат 16; // Единый сельхозналог
ИначеЕсли ТипСНО = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложения.Патент") Тогда
Возврат 32; // Патентная система налогообложения (ПСН)
Иначе
Возврат 0; // Не определено
КонецЕсли;
КонецФункции
Если при отладке вы обнаружили, что в переменную СНО попадает некорректное числовое значение или вообще передается пустая ссылка, рекомендуется использовать механизм Расширений конфигурации. Напишем обработчик «Перед» или «Вместо» для процедуры подготовки параметров фискализации, чтобы принудительно устанавливать ПСН для чеков, пробиваемых из интерфейса РМК розничного магазина:
&Вместо("ПодготовитьПараметрыФискализации")
Процедура Расш_ПодготовитьПараметрыФискализации(ПараметрыЧека, ОбъектДрайвера)
// Вызываем оригинальный обработчик для заполнения базовых параметров
ПродолжитьВызов(ПараметрыЧека, ОбъектДрайвера);
// Принудительно проверяем: если документ оформляется по патенту,
// гарантируем передачу кода 32 в структуру параметров ККТ Штрих-М
Если ПараметрыЧека.Свойство("СистемаНалогообложения") Тогда
Если ПараметрыЧека.СистемаНалогообложения = Перечисления.ТипыСистемНалогообложения.Патент Тогда
// Устанавливаем точный числовой эквивалент для драйвера Штрих-М
ПараметрыЧека.Вставить("СистемаНалогообложенияКод", 32);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Использование расширений является наиболее безопасным и предпочтительным методом, так как оно сохраняет конфигурацию на поддержке и предотвращает затирание ваших изменений при последующих обновлениях 1С:Розница.
---
Мы полностью разобрали цепочку взаимодействия между учетной системой 1С, драйвером и ККТ. Ошибка ФЛК — это не дефект программы, а важный защитный механизм, предотвращающий отправку неверных сведений в ОФД и ФНС, за которые организация может получить штраф.
Для стабильной работы торговой точки придерживайтесь следующих правил: