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