При ведении розничной торговли часто возникает ситуация, когда одна организация совмещает две системы налогообложения (СНО). Классический пример для магазина автозапчастей: торговля основными деталями ведется по Патенту (ПСН), а реализация моторных масел, которые являются подакцизным товаром, — по упрощенной системе (УСН). Согласно требованиям 54-ФЗ, в одном фискальном чеке может быть указана только одна СНО. Следовательно, если клиент покупает одновременно масло и запчасти, касса должна сформировать два разных чека.
В типовой конфигурации «Торговля и склад 9.2» на платформе 1С 7.7 этот функционал изначально не предусмотрен. Рассмотрим подробно, как доработать систему для корректной печати чеков на фискальных регистраторах АТОЛ (например, АТОЛ 30Ф) с использованием современных драйверов.
Первым делом нам необходимо научить систему различать товары по принадлежности к налоговым режимам. Для этого проанализируем структуру справочника Номенклатура и внесем изменения.
Рассмотрим вариант добавления нового реквизита. Откроем конфигуратор и добавим в справочник Номенклатура реквизит ВидСНО (тип — Число или Перечисление). Если мы используем числовой код для быстрой передачи в драйвер ККТ, можно ориентироваться на следующие значения: 2 — для УСН, 32 — для Патента.
Также можно реализовать логику через дополнительный флаг (галочку) «Товар УСН». Если галочка стоит — товар относится к УСН, если нет — к основной системе (Патенту). Для удобства работы с большим ассортиментом (например, маслами), мы можем не проставлять признак в каждой карточке, а проверять принадлежность товара к определенной группе (папке) в справочнике.
Перейдем к модулю документа ЧекККМ. Нам необходимо изменить алгоритм сбора данных перед отправкой на печать. В типовой функции ПробитьЧекНаККМ используется таблица значений для формирования списка товаров. Расширим её возможности.
Разберем пример кода для модификации таблицы товаров:
// В функции ПробитьЧекНаККМ создаем таблицу с дополнительной колонкой
СписокТоваров = СоздатьОбъект("ТаблицаЗначений");
СписокТоваров.НоваяКолонка("ТовНаим", "Строка");
СписокТоваров.НоваяКолонка("Цена", "Число");
СписокТоваров.НоваяКолонка("Количество", "Число");
СписокТоваров.НоваяКолонка("Сумма", "Число");
СписокТоваров.НоваяКолонка("СтавкаНДС", "Число");
// Добавляем признак СНО для каждой позиции
СписокТоваров.НоваяКолонка("УСН", "Число");
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
СписокТоваров.НоваяСтрока();
СписокТоваров.ТовНаим = ?(СокрЛП(Номенклатура.ПолнНаименование)="", СокрЛП(Номенклатура.Наименование), СокрЛП(Номенклатура.ПолнНаименование));
СписокТоваров.Цена = Цена;
СписокТоваров.Количество = Количество;
СписокТоваров.Сумма = Сумма;
СписокТоваров.СтавкаНДС = 100 * глНачисляемыйНДС(Номенклатура.СтавкаНДС);
// Получаем значение из карточки товара или по условию
СписокТоваров.УСН = Номенклатура.ВидСНО;
КонецЦикла;
Самый ответственный этап — передача данных в драйвер фискального регистратора. Поскольку нам нужно два чека, мы должны выполнить цикл печати дважды, фильтруя таблицу СписокТоваров по признаку СНО. Рассмотрим, как это реализовать программно, используя объект драйвера (ДТО 10).
Перед открытием чека необходимо передать тег 1055, который отвечает за систему налогообложения. Проанализируем фрагмент кода:
// Установка кассира (тег 1021)
ФРОбъект.setParam(1021, КассирНаименование);
ФРОбъект.operatorLogin();
// Выбираем СНО: 32 - Патент, 2 - УСН Доход
// В реальном коде здесь должен быть цикл по двум видам СНО
Если ТекущаяСНОЧека = 32 Тогда
ФРОбъект.setParam(1055, ФРОбъект.LIBFPTR_TT_PATENT);
Иначе
ФРОбъект.setParam(1055, ФРОбъект.LIBFPTR_TT_USN_INCOME);
КонецЕсли;
ФРОбъект.setParam(ФРОбъект.LIBFPTR_PARAM_RECEIPT_TYPE, ФРОбъект.LIBFPTR_RT_SELL);
ФРОбъект.openReceipt();
// Цикл по строкам таблицы товаров, относящимся к ТекущаяСНОЧека
тТоваров.ВыбратьСтроки();
Пока тТоваров.ПолучитьСтроку() = 1 Цикл
Если тТоваров.УСН <> ТекущаяСНОЧека Тогда
Продолжить;
КонецЕсли;
ФРОбъект.setParam(ФРОбъект.LIBFPTR_PARAM_COMMODITY_NAME, тТоваров.ТовНаим);
ФРОбъект.setParam(ФРОбъект.LIBFPTR_PARAM_PRICE, тТоваров.Цена);
ФРОбъект.setParam(ФРОбъект.LIBFPTR_PARAM_QUANTITY, тТоваров.Количество);
// Для масел (подакцизный товар) важно передать признак предмета расчета (тег 1212)
// Значение "2" соответствует подакцизному товару
Если тТоваров.Подакцизный = 1 Тогда
ФРОбъект.setParam(1212, 2);
КонецЕсли;
ФРОбъект.setParam(ФРОбъект.LIBFPTR_PARAM_TAX_TYPE, ФРОбъект.LIBFPTR_TAX_NO); // Без НДС
Если ФРОбъект.registration() <> 0 Тогда
Сообщить("Ошибка регистрации строки: " + ФРОбъект.errorDescription());
Возврат;
КонецЕсли;
КонецЦикла;
// Закрытие чека оплатой
ФРОбъект.setParam(ФРОбъект.LIBFPTR_PARAM_PAYMENT_TYPE, ФРОбъект.LIBFPTR_PT_CASH);
ФРОбъект.setParam(ФРОбъект.LIBFPTR_PARAM_PAYMENT_SUM, СуммаПоСНО);
ФРОбъект.payment();
ФРОбъект.closeReceipt();
При работе с маслами в 1С 7.7 крайне важно учитывать, что они являются подакцизными. Выясним причину возможных ошибок при проверках налоговой: если в чеке на подакцизный товар не указан соответствующий признак, это является нарушением. В коде выше мы использовали передачу параметра 1212 со значением 2. Убедитесь, что ваш драйвер и прошивка ККТ поддерживают этот функционал.
Еще один важный момент — расчет сдачи при оплате наличными, когда покупка разбивается на два чека. Разберем ситуацию: общая сумма 1500 руб. (1000 — патент, 500 — УСН). Клиент дает 2000 руб. Сдачу в 500 руб. нельзя печатать в обоих чеках. Рекомендуется привязывать всю сумму сдачи к первому пробиваемому чеку, а второй пробивать «под расчет» (сумма оплаты равна сумме чека). Это позволит избежать путаницы в кассовом отчете.
После реализации раздельной печати чеков возникнет вопрос: как собирать данные для Книги учета доходов и расходов (КУДиР)? В 1С 7.7 ТиС отчет о розничных продажах (Z-отчет) формируется на основании документов ЧекККМ.
Рассмотрим пути решения:
ЗакрытиеСмены), чтобы она создавала два разных документа ОтчетОРозничныхПродажах — один для выручки по Патенту, другой для УСН.Проанализируем ситуацию с выгрузкой в бухгалтерию. Если вы используете стандартную выгрузку, разделение на два документа «Отчет о розничных продажах» позволит бухгалтерии автоматически разнести доходы по разным счетам и налоговым регистрам без ручной правки проводок.
Важное примечание: При использовании безналичной оплаты (эквайринга) через банковский терминал, сумма слип-чека будет общей. Однако кассовых чека все равно должно быть два. В обоих случаях вид оплаты в кассе передается как «Безналичными», и их общая сумма должна сойтись с итогом по терминалу за день.
Таким образом, внедрение совмещенных режимов СНО в «семерке» требует комплексного подхода: от правки справочников до глубокой переработки модулей печати и закрытия смены. Однако использование объектной модели ДТО 10 значительно упрощает передачу необходимых тегов в фискальный регистратор.