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