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