Как реализовать продажу товаров по разным системам налогообложения в 1С 7.7 «Торговля и Склад» через одну кассу АТОЛ?

Программист 1С v7.7 Налоговый учет Торговля и дистрибуция
← На главную

С введением 54-ФЗ и форматов фискальных данных (ФФД) перед разработчиками на платформе 1С 7.7 встала задача корректного разделения потоков продаж. Часто возникают ситуации, когда одна организация или ИП совмещает несколько систем налогообложения (СНО), например, УСН и Патент, или продает подакцизные товары (моторные масла) на ОСН, а остальные — по упрощенке. Рассмотрим подробно, как доработать типовую конфигурацию «Торговля и Склад» (ТиС) для решения этой задачи.

Постановка задачи и законодательные ограничения

Важно понимать, что согласно требованиям ФФД, в одном кассовом чеке может быть указана только одна система налогообложения. Если в корзине покупателя присутствуют товары, относящиеся к разным СНО, программа должна автоматически или полуавтоматически разделить один документ на два разных чека. Проанализируем техническую сторону реализации этого процесса для ККТ АТОЛ.

Механизм управления СНО через драйвер АТОЛ

Для управления системой налогообложения в старых драйверах (DTO 8) использовалось свойство TaxType. Разберем соответствие числовых значений режимам налогообложения:

Однако в современных реалиях (ФФД 1.05 и выше) правильнее работать через запись атрибутов (тегов). Ключевым является Тег 1055 (Система налогообложения). Рассмотрим пример кода, который необходимо внедрить в обработку обслуживания ККТ (обычно это fr_comm.ert или специализированные обработки для АТОЛ 54-ФЗ):


// Пример установки СНО через прямой доступ к атрибутам драйвера
Объект.AttrNumber = 1055;
Объект.AttrValue = ВыбраннаяСистемаНалогообложения; // Числовое значение от 1 до 32 (битовая маска)
Объект.WriteAttribute();

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

Алгоритм разделения чеков в 1С 7.7

Поскольку типовая «Торговля и Склад» не предполагает автоматического разделения одного документа «Чек» или «ПКО» на разные системы налогообложения, нам придется доработать логику печати. Рассмотрим пошагово, как это реализовать:

  1. Маркировка товаров: В карточке номенклатуры (или в справочнике категорий) необходимо добавить реквизит «СистемаНалогообложения».
  2. Модификация процедуры печати: В модуле формы документа или в глобальном модуле (в зависимости от архитектуры вашей печати) перед вызовом фискализации создаем цикл по табличной части.
  3. Группировка: Разделим товары из документа на несколько списков (таблиц значений) по признаку СНО.
  4. Последовательная печать: Запустим цикл по полученным группам. Для каждой группы установим соответствующий параметр TaxType или атрибут 1055 и пробьем отдельный чек.

Рассмотрим пример кода для разделения товаров в обработке fr_comm.ert:


// Пример логики разделения таблицы товаров
ТЗ_ОСН = СоздатьОбъект("ТаблицаЗначений");
ТЗ_УСН = СоздатьОбъект("ТаблицаЗначений");
// ... заполняем структуры таблиц ...

Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
    Если Док.Номенклатура.СНО = Перечисление.СНО.ОСН Тогда
        // Копируем данные в ТЗ_ОСН
    Иначе
        // Копируем данные в ТЗ_УСН
    КонецЕсли;
КонецЦикла;

// Печать первого чека
Если ТЗ_ОСН.КоличествоСтрок() > 0 Тогда
    Объект.TaxType = 0; // ОСН
    ПечататьГруппуТоваров(ТЗ_ОСН);
КонецЕсли;

// Печать второго чека
Если ТЗ_УСН.КоличествоСтрок() > 0 Тогда
    Объект.TaxType = 2; // УСН Доход-расход
    ПечататьГруппуТоваров(ТЗ_УСН);
КонецЕсли;

Переход на ФФД 1.05 и драйвер 10-й версии

Выясним причину, почему многие старые решения перестают работать. С 2019 года обязательным стал формат 1.05, а позже и 1.2 (для маркировки). В драйверах АТОЛ 10-й версии (DTO 10) объектная модель полностью изменилась. Если вы переходите на 10-ку в 1С 7.7, обратите внимание на следующие моменты:

1. Вместо прямого обращения к свойствам используется метод setParam. Чтобы установить СНО, нужно передать параметр LIBFPTR_PARAM_TAX_VARIANT.

2. Пример установки СНО в DTO 10:


Драйвер.setParam(65545, НомерСНО); // 65545 — ID параметра системы налогообложения
Драйвер.setParam(1055, НомерСНО); 

Проблема распределения скидок

Разберем ситуацию со скидками при разделении чеков. В ФФД 1.05 отсутствует понятие «скидка на весь чек» в том виде, в котором она была раньше. Каждая позиция должна содержать итоговую цену. При программном разделении одного документа 1С на два чека ККТ, убедитесь, что распределение общей скидки документа (если она есть) происходит корректно между этими двумя чеками, иначе итоговая сумма по кассе не совпадет с данными в 1С.

Для решения проблемы «лишней копейки» при округлении распределенной скидки, рекомендуем использовать алгоритм распределения остатка на последнюю позицию в каждой группе товаров.

Работа с несколькими ККТ в одной базе

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

Важный совет: Если вы планируете торговать маркированными товарами (через систему «Честный ЗНАК»), типовые обработки 7.7 потребуют значительной переработки для передачи кода маркировки (Тег 1162). В этом случае рассмотрите возможность использования внешних компонент, поддерживающих ФФД 1.2.

Проанализировав ситуацию, можно сделать вывод: реализация продажи по разным СНО в одной базе 1С 7.7 возможна и технически оправдана. Основная сложность заключается в аккуратном разделении табличной части документа перед отправкой команд на ФР и корректной установке атрибута 1055 (или TaxType) для каждой итерации печати.

← На главную