При работе с торговым оборудованием в устаревших, но все еще актуальных конфигурациях, таких как 1С:Управление торговлей 10.3, часто возникает проблема некорректного отображения системы налогообложения (СНО) в печатной форме чека. Даже если в учетной политике организации или в настройках склада указана верная система, кассовый аппарат (например, Атол 22Ф) может упорно печатать иную СНО, например, «ОСН» или «УСН доход-расход» вместо ожидаемого «Патента» или «ЕНВД» (в случае использования для коррекции старых чеков). Рассмотрим подробно, как устроена передача этих данных и где искать корень проблемы.
Для начала разберем, по какому пути проходят данные от документа в 1С до фискального накопителя кассы. В 1С:УТ 10.3 взаимодействие с кассой строится через обработки обслуживания. Это внешние файлы или встроенные объекты, которые служат прослойкой между кодом конфигурации и драйвером производителя (в нашем случае драйвером Атол).
Проанализируем типичную ситуацию: программист меняет СНО в коде, но результат на чеке не меняется. Это происходит потому, что данные могут переопределяться на нескольких этапах:
ЧекККМ).Основная точка входа для формирования данных чека в актуальных версиях УТ 10.3 — это процедура ПодготовитьДанныеДляФискализацииЧека. Чтобы найти ее, воспользуемся глобальным поиском по конфигурации. Именно в этой процедуре формируется структура ОбщиеПараметры, которая содержит в себе ключ СистемаНалогообложения.
Посмотрим на пример кода, который отвечает за заполнение этого параметра:
// Пример формирования структуры параметров для чека
СтруктураЧека = Новый Структура;
СтруктураЧека.Вставить("СистемаНалогообложения", ПолучитьСНОДляДокумента(Объект));
// Далее эта структура передается в обработку обслуживания
Результат = ОбработкаОбслуживания.ВыполнитьКоманду("ПечататьЧек", ПараметрыКоманды);
Выясним причину, по которой изменения в этом месте могут не работать. В протоколе обмена с кассами Атол СНО передается не строкой, а числовым индексом. Если вы передадите строку "ЕНВД", драйвер может ее не понять и подставить значение по умолчанию, установленное при фискализации аппарата.
Рассмотрим стандартную кодировку систем налогообложения, которую ожидает драйвер Атол версии 8 или 10. При передаче параметров крайне важно использовать именно эти цифровые значения:
Если в вашей процедуре ПодготовитьДанныеДляФискализацииЧека передается значение, не соответствующее этому списку, касса проигнорирует команду. Проверьте, какой тип данных уходит в структуру ОбщиеПараметры. Если там объект перечисления, его необходимо преобразовать в числовой индекс.
Если правки в глобальных модулях конфигурации не помогают, необходимо проверить саму обработку обслуживания. В УТ 10.3 их можно найти и выгрузить через меню «Сервис» — «Торговое оборудование» — «Подключение и настройка торгового оборудования». Выберите вашу кассу, нажмите на кнопку «Параметры» и посмотрите имя используемой обработки.
Разобрав код обработки (это обычный файл .epf), найдите функцию ПечататьЧек. Проанализируйте, как параметры из 1С транслируются в методы драйвера. Иногда в старых обработках жестко прописано использование СНО по умолчанию, либо механизм передачи параметров вовсе не реализован для новых форматов фискальных данных (ФФД).
Важный технический нюанс, который часто упускают: согласно требованиям ФФД 1.05 и выше, в одном фискальном документе (чеке) может быть указана только одна система налогообложения. Если ваша задача состоит в том, чтобы продать в одном сеансе товары, относящиеся к разным СНО (например, часть по УСН, часть по Патенту), 1С должна сформировать два отдельных чека.
Стандартная логика УТ 10.3 часто не умеет автоматически разделять один документ «Чек ККМ» на два физических чека по разным СНО. Для решения этой задачи потребуется серьезная доработка:
Пример логики разделения:
// Псевдокод разделения чека по СНО
ТаблицаПоСНО = Товары.Скопировать();
ТаблицаПоСНО.Свернуть("СистемаНалогообложения");
Для Каждого СтрокаСНО Из ТаблицаПоСНО Цикл
Отбор = Новый Структура("СистемаНалогообложения", СтрокаСНО.СистемаНалогообложения);
ТоварыДляЧека = Товары.НайтиСтроки(Отбор);
// Формируем данные только для текущей СНО
ДанныеЧека = СформироватьПакетДляККТ(ТоварыДляЧека, СтрокаСНО.СистемаНалогообложения);
МенеджерОборудования.ПечатьЧека(ДанныеЧека);
КонецЦикла;
Если программный код 1С передает верный индекс (например, 2 для УСН доход-расход), но на бумаге выходит другое значение, необходимо проверить настройки самой кассы. Кассовый аппарат может печатать только те СНО, которые были указаны при его регистрации (фискализации).
Чтобы убедиться в этом, выполните следующие действия:
Важно: Если касса зарегистрирована только на одну СНО, то попытка передать другую СНО через драйвер приведет либо к ошибке «Неверная СНО», либо к игнорированию параметра и печати предустановленной системы. Для добавления новой СНО потребуется процедура перерегистрации ККТ (без замены ФН, если он не меняется).
Подводя итог, если СНО в чеке отображается неверно, действуйте по шагам: проверьте соответствие числовых кодов (индексов) в структуре ОбщиеПараметры, убедитесь, что обработка обслуживания не подменяет эти данные, и обязательно проверьте отчет о регистрации ККТ на предмет доступных систем налогообложения. Помните, что для работы с несколькими СНО одновременно необходимо программное разделение документа на несколько фискальных операций.