При совмещении нескольких систем налогообложения (например, УСН и Патента, или ранее ЕНВД) индивидуальные предприниматели и организации часто сталкиваются с технической проблемой при оформлении розничных продаж через Рабочее место кассира (РМК). Покупатель может одновременно приобретать товары, относящиеся к разным СНО. В этой статье мы подробно разберем, почему возникает данная проблема, рассмотрим законодательные ограничения форматов фискальных документов и детально изучим практические методы реализации разделения чеков в программе 1С:Управление торговлей 11.4 на примере кассовых аппаратов АТOЛ 55Ф и драйвера АТОЛ 10-й версии.
Согласно действующим требованиям Федерального закона № 54-ФЗ и утвержденным форматам фискальных документов (ФФД 1.05, 1.1, 1.2), один фискальный чек ККТ может содержать строго одну систему налогообложения. Данный реквизит передается в фискальном теге 1055 (Система налогообложения).
Если в кассовый аппарат попытаться отправить пакет данных, содержащий номенклатуру с разными признаками СНО, драйвер ККТ (в частности, драйвер АТОЛ 10.x) вернет ошибку вида: «СНО в чеке не совпадает с выбранной» или «Ошибка передачи параметров». Кассовый аппарат физически не имеет возможности напечатать один чек с разделением по налогам. Единственный корректный путь с точки зрения законодательства — сформировать и пробить два разных фискальных документа.
Рассмотрим по шагам основные способы решения этой задачи: от административных мер до глубокой программной доработки конфигурации.
---
Это самый простой способ, который не требует изменения механизмов печати ККТ, но накладывает определенные регламентные требования на работу кассира. Суть метода заключается в том, чтобы запретить подбор в один чек товаров, относящихся к разным СНО.
Для реализации этого подхода выполним следующие действия:
Проанализируем пример кода, который можно внедрить в форму РМК (например, в процедуру обработки добавления товара) для реализации такой проверки:
&НаКлиенте
Процедура ПроверитьСНОПриПодборе(НовыйТовар, Отказ)
// Получаем СНО текущего добавляемого товара
ТекущаяСНО = ПолучитьСНОНоменклатуры(НовыйТовар);
// Проверяем, есть ли уже товары в корзине
Если Объект.Товары.Количество() > 0 Тогда
ПервыйТовар = Объект.Товары[0].Номенклатура;
БазоваяСНО = ПолучитьСНОНоменклатуры(ПервыйТовар);
Если ТекущаяСНО <> БазоваяСНО Тогда
Отказ = Истина;
ВызватьИсключение "Внимание! Вы пытаетесь добавить товар с другой системой налогообложения (" + ТекущаяСНО + ").
|Сначала завершите текущий чек или пробейте его отдельно!";
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Преимущества: Простота реализации, полное отсутствие риска расхождения сумм в учетной системе и на кассе.
Недостатки: Снижение скорости обслуживания клиентов. Если у покупателя в корзине товары разных категорий, кассиру придется оформлять два отдельных документа продажи и проводить две операции оплаты.
---
Этот вариант является наиболее удобным для кассира, так как позволяет осуществлять подбор любых товаров в один документ продажи, а разделение происходит автоматически в момент нажатия кнопки «Пробить чек».
Для программной реализации автоматического разделения нам потребуется внести изменения в код конфигурации или разработать расширение. Основные доработки сосредоточены в общем модуле МенеджерОборудованияВызовСервера и в обработке РМК.
Выясним подробную схему работы этого алгоритма:
Товары.Рассмотрим пример кода, реализующий группировку и последовательную отправку пакетов данных на печать:
Процедура ПробитьРазделенныеЧеки(ДокументСсылка)
// Шаг 1. Получаем таблицу товаров из документа
ТаблицаТоваров = ДокументСсылка.Товары.Выгрузить();
// Добавляем колонку для СНО, если ее нет
ТаблицаТоваров.Колонки.Добавить("СистемаНалогообложения");
Для Каждого СтрокаТЧ Из ТаблицаТоваров Цикл
СтрокаТЧ.СистемаНалогообложения = ОпределитьСНОТовара(СтрокаТЧ.Номенклатура);
КонецЦикла;
// Шаг 2. Получаем список уникальных СНО в документе
ТаблицаСНО = ТаблицаТоваров.Скопировать();
ТаблицаСНО.Свернуть("СистемаНалогообложения");
// Шаг 3. Запускаем цикл пробития фискальных чеков
Для Каждого ТекущаяСНО Из ТаблицаСНО Цикл
// Отбираем строки только для текущей СНО
ПараметрыОтбора = Новый Структура("СистемаНалогообложения", ТекущаяСНО.СистемаНалогообложения);
СтрокиДляЧека = ТаблицаТоваров.НайтиСтроки(ПараметрыОтбора);
// Формируем XML-пакет данных ККТ для текущей группы товаров
ДанныеЧека = ПодготовитьПакетДляККТ(СтрокиДляЧека, ТекущаяСНО.СистемаНалогообложения);
// Вызываем стандартную функцию фискализации драйвера
РезультатПечати = ПолучитьМенеджерОборудования().ПробитьЧек(ДанныеЧека);
Если Не РезультатПечати Тогда
ВызватьИсключение "Ошибка печати чека по системе налогообложения: " + ТекущаяСНО.СистемаНалогообложения;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
При использовании этого метода крайне важно правильно настроить функцию ПодготовитьПакетДляККТ. В передаваемой структуре XML-пакета необходимо заполнять узел, отвечающий за налогообложение чека. В драйвере АТОЛ 10 за это отвечает параметр TaxVariant (или соответствующее свойство в XML-структуре 1С, передаваемой в метод ПробитьЧек).
---
Наиболее сложным техническим моментом при автоматическом разбиении чеков является обработка безналичной оплаты через банковский терминал. Рассмотрим два возможных сценария интеграции оборудования:
Для решения проблемы с интегрированным эквайрингом мы рекомендуем принудительно разделять оплату картой на две отдельные транзакции в рамках одной сессии РМК либо переводить эквайринговый терминал в режим «ручного подтверждения», когда одна транзакция на терминале программно сопоставляется с двумя последующими фискальными документами в ККТ.
---
Если глубокое изменение кода конфигурации 1С нежелательно (например, база находится на регулярной поддержке и обновлении), можно использовать сторонние программные прослойки, такие как ККМ-Сервер или специализированные внешние компоненты.
В такой архитектуре:
Этот подход минимизирует вмешательство в логику проведения документов внутри 1С:Управление торговлей и позволяет сохранить конфигурацию максимально приближенной к типовой.
Выбор конкретного метода зависит от интенсивности розничного потока на торговой точке. Для небольших магазинов с низкой проходимостью оптимальным выбором будет Метод 1 (организационное разделение) или использование Метода 3. Для крупных супермаркетов и точек с высокой интенсивностью продаж единственным жизнеспособным решением является разработка расширения конфигурации по Методу 2 с корректно настроенным распределением эквайринговых платежей.