Как сделать так, чтобы в РМК 1С:Розница на каждый товар печатался отдельный чек?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

В розничной торговле иногда возникают ситуации, когда бизнес-логика или особые требования учета требуют выдачи покупателю отдельного фискального чека на каждый приобретенный товар. Это может быть связано с гарантийными обязательствами, спецификой ведения раздельного учета или требованиями контрагентов. Однако при работе в стандартном встроенном Рабочем месте кассира (РМК) в программе 1С:Розница 2.3 (и более новых версиях) по умолчанию все выбранные товары печатаются одним фискальным документом.

В рамках этой статьи мы подробно разберем, какие штатные механизмы разделения чеков существуют в программе, как реализовать задачу ручным способом без привлечения программистов и как настроить автоматическое разделение чеков на уровне программного кода с помощью механизма расширений.

Стандартный функционал 1С:Розница: что возможно «из коробки»

Прежде чем переходить к доработкам, проанализируем стандартное поведение системы. В типовом решении 1С:Розница автоматическое разделение чеков на уровне фискального регистратора (ККТ) происходит только в двух строго определенных законом случаях:

  1. Продажи от лица разных организаций (например, ИП и ООО). Если в справочниках программы настроено распределение продаж по товарным группам или складам для разных юридических лиц, то при оформлении совместной покупки в РМК система автоматически разделит товары в корзине на несколько документов «Чек ККМ» и отправит их на печать на соответствующие кассовые аппараты.
  2. Разные системы налогообложения (СНО). Согласно требованиям Федерального закона № 54-ФЗ, в одном фискальном документе невозможно совмещать разные режимы налогообложения (например, ОСНО и Патент). Если кассир добавляет в корзину товары, относящиеся к разным СНО, программа самостоятельно разделит их на отдельные физические чеки в момент проведения оплаты.

Также стоит упомянуть полезные смежные настройки интерфейса РМК (доступные в настройках РМК в разделе «Формирование чека»):

Таким образом, стандартного флага или настройки «Печатать каждый товар отдельным чеком» в коробочной версии нет. Перейдем к вариантам решения этой задачи.

Вариант 1. Ручной способ проведения продаж (без доработок)

Если необходимость в раздельных чеках возникает нечасто, мы можем использовать простейший организационный обходной путь. Кассиру необходимо выполнять операции последовательно:

  1. Отсканировать первый товар в корзину РМК.
  2. Нажать кнопку «Оплатить», принять денежные средства и закрыть фискальный чек.
  3. Отсканировать второй товар.
  4. Снова принять оплату и закрыть второй чек.
  5. Повторить процедуру для каждого последующего товара в покупке.

Преимущества: метод не требует изменения конфигурации, привлечения специалистов и дополнительных финансовых затрат.

Недостатки: резко возрастает время обслуживания одного покупателя, создаются очереди на кассе, повышается нагрузка на кассира, что увеличивает вероятность ошибок ввода.

Вариант 2. Автоматическое разделение через расширение конфигурации

Если бизнес-процессы требуют, чтобы кассир сканировал все товары в одно окно, но на выходе получался отдельный фискальный документ на каждую позицию, нам потребуется программная доработка. Для этого мы рекомендуем использовать Расширение конфигурации (файл .cfe). Использование расширения позволяет не снимать типовую конфигурацию с поддержки и сохраняет возможность беспрепятственного обновления программы в будущем.

Рассмотрим подробнее техническую логику работы такого расширения. Нам необходимо перехватить стандартную процедуру проведения оплаты и фискализации чека в модулях РМК. Вместо создания одного общего документа Документ.ЧекККМ, система должна в цикле обходить строки табличной части товаров, программно создавать под каждую строку индивидуальный документ и отправлять его на кассу.

Проанализируем примерную схему реализации такого алгоритма на встроенном языке 1С:


// Пример обработчика в расширении формы РМК при нажатии кнопки оплаты
&НаКлиенте
Процедура Расш_ОплатитьЧекиПосле(Команда)
    
    // Получаем таблицу товаров из текущего сеанса РМК
    ТаблицаТоваров = Объект.Товары;
    
    Если ТаблицаТоваров.Количество() > 1 Тогда
        
        // Предупреждаем пользователя или запускаем автоматический цикл
        Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
            
            // Вызываем серверный метод для создания отдельного документа Чек ККМ
            НовыйЧекСсылка = СоздатьЧекНаОдинТоварНаСервере(СтрокаТовара);
            
            Если ЗначениеЗаполнено(НовыйЧекСсылка) Тогда
                // Подготавливаем параметры фискализации и отправляем команду на ККТ
                ПараметрыОплаты = Новый Структура("ФормаОплаты, Сумма", "Наличные", СтрокаТовара.Сумма);
                ПробитьЧекНаОборудовании(НовыйЧекСсылка, ПараметрыОплаты);
            КонецЕсли;
            
        КонецЦикла;
        
        // Очищаем форму РМК после успешной печати всех позиций
        Объект.Товары.Очистить();
        Модифицированность = Ложь;
        
    КонецЕсли;
    
КонецПроцедуры

На сервере код создания отдельного документа будет выглядеть следующим образом:


&НаСервере
Функция СоздатьЧекНаОдинТоварНаСервере(СтрокаТовара)
    
    НовыйЧек = Документы.ЧекККМ.СоздатьДокумент();
    НовыйЧек.Дата = ТекущаяДата();
    НовыйЧек.Организация = Объект.Организация;
    НовыйЧек.КассаККМ = Объект.КассаККМ;
    НовыйЧек.Склад = Объект.Склад;
    
    // Заполняем строку товара
    НоваяСтрока = НовыйЧек.Товары.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТовара);
    
    // Заполняем суммы и обязательные реквизиты шапки
    НовыйЧек.СуммаДокумента = СтрокаТовара.Сумма;
    
    Попытка
        НовыйЧек.Записать(РежимЗаписиДокумента.Проведение);
        Возврат НовыйЧек.Ссылка;
    Исключение
        ЗаписьЖурналаРегистрации("Ошибка разделения чека", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;
    
КонецФункции

Критически важный нюанс: интеграция с эквайрингом

При планировании программной доработки по автоматическому разделению чеков необходимо учитывать важный технический аспект — работу с эквайринговыми терминалами.

Если клиент рассчитывается наличными, то система просто один за другим напечатает чеки, кассир заберет общую сумму и выдаст сдачу. В этом сценарии проблем не возникает.

Однако если оплата производится банковской картой через интегрированный (подключенный к 1С) эквайринговый терминал, поведение системы изменится:

Решение проблемы с эквайрингом: при безналичной оплате в алгоритме доработки нужно предусмотреть предварительное списание общей суммы одним слип-чеком через терминал без жесткой привязки к ККТ, а затем выполнить последовательную фискализацию отдельных документов ЧекККМ на ККТ в режиме «без взаимодействия с эквайрингом» (указывая вид оплаты «Электронно», но не отправляя повторные команды на банковский терминал).

Резюме

Решить задачу печати отдельного чека на каждый товар в 1С:Розница 2.3 возможно. Для редких операций подойдет простой ручной способ проведения каждой позиции по очереди. Для потоковых продаж необходимо разработать программное расширение конфигурации, которое автоматизирует создание документов. При разработке расширения обязательно уделите внимание разделению логики работы с наличной оплатой и эквайрингом, чтобы не создавать неудобств покупателям на кассе.

← На главную