Как реализовать печать чеков по двум системам налогообложения (УСН и Патент/ЕНВД) из РМК в 1С:Управление торговлей 11.4?

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

При совмещении нескольких систем налогообложения (например, УСН и Патента, или ранее ЕНВД) индивидуальные предприниматели и организации часто сталкиваются с технической проблемой при оформлении розничных продаж через Рабочее место кассира (РМК). Покупатель может одновременно приобретать товары, относящиеся к разным СНО. В этой статье мы подробно разберем, почему возникает данная проблема, рассмотрим законодательные ограничения форматов фискальных документов и детально изучим практические методы реализации разделения чеков в программе 1С:Управление торговлей 11.4 на примере кассовых аппаратов АТOЛ 55Ф и драйвера АТОЛ 10-й версии.

Законодательный контекст и технические ограничения кассы

Согласно действующим требованиям Федерального закона № 54-ФЗ и утвержденным форматам фискальных документов (ФФД 1.05, 1.1, 1.2), один фискальный чек ККТ может содержать строго одну систему налогообложения. Данный реквизит передается в фискальном теге 1055 (Система налогообложения).

Если в кассовый аппарат попытаться отправить пакет данных, содержащий номенклатуру с разными признаками СНО, драйвер ККТ (в частности, драйвер АТОЛ 10.x) вернет ошибку вида: «СНО в чеке не совпадает с выбранной» или «Ошибка передачи параметров». Кассовый аппарат физически не имеет возможности напечатать один чек с разделением по налогам. Единственный корректный путь с точки зрения законодательства — сформировать и пробить два разных фискальных документа.

Рассмотрим по шагам основные способы решения этой задачи: от административных мер до глубокой программной доработки конфигурации.

---

Метод 1. Административное ограничение подбора товаров (Без изменения кода ККТ)

Это самый простой способ, который не требует изменения механизмов печати ККТ, но накладывает определенные регламентные требования на работу кассира. Суть метода заключается в том, чтобы запретить подбор в один чек товаров, относящихся к разным СНО.

Для реализации этого подхода выполним следующие действия:

  1. Создадим дополнительный реквизит для номенклатуры (или будем использовать встроенные механизмы разделения, такие как Группы финансового учета).
  2. При подборе первого товара в корзину РМК программа запоминает его СНО как базовую для текущего сеанса продажи.
  3. При попытке добавить второй товар система выполняет проверку его СНО. Если СНО нового товара отличается от СНО уже добавленных позиций, система блокирует операцию и выдает предупреждение кассиру.

Проанализируем пример кода, который можно внедрить в форму РМК (например, в процедуру обработки добавления товара) для реализации такой проверки:


&НаКлиенте
Процедура ПроверитьСНОПриПодборе(НовыйТовар, Отказ)
    
    // Получаем СНО текущего добавляемого товара
    ТекущаяСНО = ПолучитьСНОНоменклатуры(НовыйТовар);
    
    // Проверяем, есть ли уже товары в корзине
    Если Объект.Товары.Количество() > 0 Тогда
        ПервыйТовар = Объект.Товары[0].Номенклатура;
        БазоваяСНО = ПолучитьСНОНоменклатуры(ПервыйТовар);
        
        Если ТекущаяСНО <> БазоваяСНО Тогда
            Отказ = Истина;
            ВызватьИсключение "Внимание! Вы пытаетесь добавить товар с другой системой налогообложения (" + ТекущаяСНО + "). 
                              |Сначала завершите текущий чек или пробейте его отдельно!";
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

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

---

Метод 2. Программное разделение чека на уровне ККТ (Один документ в 1С — два чека на кассе)

Этот вариант является наиболее удобным для кассира, так как позволяет осуществлять подбор любых товаров в один документ продажи, а разделение происходит автоматически в момент нажатия кнопки «Пробить чек».

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

Выясним подробную схему работы этого алгоритма:

  1. Перед формированием XML-пакета данных для ККТ система анализирует табличную часть Товары.
  2. Номенклатурные позиции распределяются по соответствующим СНО (например, моторные масла отправляются в группу «УСН», а автозапчасти — в группу «Патент»).
  3. Для каждой группы товаров формируется свой отдельный массив позиций.
  4. В цикле происходит последовательный вызов фискализации для каждой группы. В параметры команды открытия чека передается код соответствующей СНО.

Рассмотрим пример кода, реализующий группировку и последовательную отправку пакетов данных на печать:


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

При использовании этого метода крайне важно правильно настроить функцию ПодготовитьПакетДляККТ. В передаваемой структуре XML-пакета необходимо заполнять узел, отвечающий за налогообложение чека. В драйвере АТОЛ 10 за это отвечает параметр TaxVariant (или соответствующее свойство в XML-структуре 1С, передаваемой в метод ПробитьЧек).

---

Важный нюанс: Распределение безналичной оплаты (Эквайринг)

Наиболее сложным техническим моментом при автоматическом разбиении чеков является обработка безналичной оплаты через банковский терминал. Рассмотрим два возможных сценария интеграции оборудования:

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

---

Метод 3. Использование промежуточного ПО (ККМ-Сервер)

Если глубокое изменение кода конфигурации 1С нежелательно (например, база находится на регулярной поддержке и обновлении), можно использовать сторонние программные прослойки, такие как ККМ-Сервер или специализированные внешние компоненты.

В такой архитектуре:

  1. 1С отправляет один общий чек на виртуальное устройство печати.
  2. Программа-драйвер (ККМ-Сервер) перехватывает входящий XML-пакет, анализирует признаки СНО у каждой товарной позиции.
  3. Драйвер самостоятельно делит один входящий пакет на два физических чека и поочередно отправляет их в фискальный накопитель ККТ.

Этот подход минимизирует вмешательство в логику проведения документов внутри 1С:Управление торговлей и позволяет сохранить конфигурацию максимально приближенной к типовой.

Резюме и рекомендации

Выбор конкретного метода зависит от интенсивности розничного потока на торговой точке. Для небольших магазинов с низкой проходимостью оптимальным выбором будет Метод 1 (организационное разделение) или использование Метода 3. Для крупных супермаркетов и точек с высокой интенсивностью продаж единственным жизнеспособным решением является разработка расширения конфигурации по Методу 2 с корректно настроенным распределением эквайринговых платежей.

← На главную