При работе с торговым оборудованием часто возникает ситуация, когда в программе 1С всё настроено верно (указана нужная система налогообложения, привязан склад), но на печатной форме чека ККТ всё равно выводится неверная СНО — например, общая (ОСН) вместо ЕНВД или Патента. Разберем детально, как «поймать» данные, которые 1С отправляет в драйвер кассы, и как правильно настроить программу, чтобы избежать подобных расхождений.
Прежде чем приступать к отладке программного кода, рассмотрим наиболее «чистый» способ увидеть данные — логирование на уровне драйвера ККТ. Программа 1С не печатает чек напрямую, она формирует XML-пакет и передает его драйверу (например, Штрих-М или АТОЛ), который уже транслирует команды в фискальный накопитель. Проанализируем, как включить логи:
Shtrikh-M-FR-K.log. В этом файле фиксируются все XML-структуры. Нам нужно найти тег TaxationSystem.Если в логах мы видим, что 1С передает правильный код СНО, а касса печатает ОСН, значит, проблема в настройках самой кассы или её регистрации в ФНС. Если же в логе стоит неверное значение — ищем ошибку в алгоритмах 1С.
Многие программисты сталкиваются с тем, что точка останова в модуле документа (например, ЧекККМ) не дает понимания итогового XML. Выясним причину: формирование данных для кассы вынесено в общие модули подключаемого оборудования. Рассмотрим, в каких процедурах следует выполнять проверку:
Шаг 1. Поиск формирования XML. Основная работа происходит в общем модуле МенеджерОборудованияКлиент или МенеджерОборудованияКлиентПереопределяемый. Проанализируем функцию ПодготовитьДанныеДляФискализации. Именно здесь заполняется структура ПараметрыЧека.
Шаг 2. Работа с драйвером Штрих-М. Если используется оборудование этого вендора, обратим внимание на общий модуль ПодключаемоеОборудованиеШтрихМФискальныеРегистраторыКлиент. Разберем процедуру ПечатьЧекаПоШаблону. Поставим точку останова на моменте вызова метода драйвера:
// Пример места для установки точки останова
Результат = ОбъектДрайвера.СформироватьЧек(ПараметрыПодключения.Идустройста, XMLПакет);
В переменной XMLПакет будет содержаться весь текст сообщения. Нас интересует параметр TaxationSystem. Важно знать числовые коды, которые 1С передает драйверу:
Если отладка показала, что 1С передает «0» вместо ожидаемого налога, проанализируем настройки программы. В «1С:Розница» (редакции 2.2 и выше) существует сложная система приоритетов. Рассмотрим по шагам, как настроить разделение продаж:
Выясним причину: если товарная группа не указана в распределении, система «откатывается» к настройкам склада по умолчанию или к основной системе организации. В результате в чек попадает ОСН.
Если программная часть 1С работает корректно, нам стоит рассмотреть технические параметры самой кассы. Кассовый аппарат физически не может пробить чек по той системе налогообложения, которая не была отмечена при его фискализации (регистрации в налоговой).
Проанализируем тег 1062. При регистрации кассы в её память записываются допустимые режимы. Если при регистрации была указана только ОСН, то любые попытки 1С передать код «5» (Патент) будут либо игнорироваться кассой (она подставит ОСН по умолчанию), либо приводить к ошибке «Неверный формат команды».
Чтобы проверить это без доступа в личный кабинет налоговой, выполним следующие действия в «Тесте драйвера»:
Также для аппаратов марки «Штрих-М» существует Таблица 18 (HotFix СНО). В некоторых версиях прошивок касса может игнорировать команды от 1С и всегда печатать ту систему налогообложения, которая жестко прописана в этой таблице. Проверим, чтобы в поле СНО по умолчанию стояло корректное значение, либо поле было настроено на прием данных от внешнего ПО.
Разберем ситуацию с точки зрения ФФД. В версиях 1.05 и выше СНО является обязательным реквизитом для каждой позиции или чека в целом. Если 1С по какой-то причине (например, из-за старой версии обработки обслуживания) не передает тег СНО, касса берет первую из списка разрешенных при регистрации. Чаще всего первой в списке идет именно Общая система налогообложения.
Для исправления ситуации рекомендуется:
Таким образом, решение проблемы всегда лежит на стыке трех областей: корректности настройки распределения продаж в 1С, правильности формирования XML-пакета в программном коде и параметров фискализации самого аппарата ККТ. Последовательно проверяя каждый этап, мы сможем добиться верного отображения налогов в чеке.