Как реализовать совмещение ПСН и УСН в 1С:Торговля и склад 9.2 при работе с фискальными регистраторами АТОЛ?

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

При ведении розничной торговли часто возникает ситуация, когда одна организация совмещает две системы налогообложения (СНО). Классический пример для магазина автозапчастей: торговля основными деталями ведется по Патенту (ПСН), а реализация моторных масел, которые являются подакцизным товаром, — по упрощенной системе (УСН). Согласно требованиям 54-ФЗ, в одном фискальном чеке может быть указана только одна СНО. Следовательно, если клиент покупает одновременно масло и запчасти, касса должна сформировать два разных чека.

В типовой конфигурации «Торговля и склад 9.2» на платформе 1С 7.7 этот функционал изначально не предусмотрен. Рассмотрим подробно, как доработать систему для корректной печати чеков на фискальных регистраторах АТОЛ (например, АТОЛ 30Ф) с использованием современных драйверов.

Шаг 1. Модификация справочника Номенклатуры

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

Рассмотрим вариант добавления нового реквизита. Откроем конфигуратор и добавим в справочник Номенклатура реквизит ВидСНО (тип — Число или Перечисление). Если мы используем числовой код для быстрой передачи в драйвер ККТ, можно ориентироваться на следующие значения: 2 — для УСН, 32 — для Патента.

Также можно реализовать логику через дополнительный флаг (галочку) «Товар УСН». Если галочка стоит — товар относится к УСН, если нет — к основной системе (Патенту). Для удобства работы с большим ассортиментом (например, маслами), мы можем не проставлять признак в каждой карточке, а проверять принадлежность товара к определенной группе (папке) в справочнике.

Шаг 2. Подготовка данных в документе Чек ККМ

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

Разберем пример кода для модификации таблицы товаров:


// В функции ПробитьЧекНаККМ создаем таблицу с дополнительной колонкой
СписокТоваров = СоздатьОбъект("ТаблицаЗначений");
СписокТоваров.НоваяКолонка("ТовНаим", "Строка");
СписокТоваров.НоваяКолонка("Цена", "Число");
СписокТоваров.НоваяКолонка("Количество", "Число");
СписокТоваров.НоваяКолонка("Сумма", "Число");
СписокТоваров.НоваяКолонка("СтавкаНДС", "Число");
// Добавляем признак СНО для каждой позиции
СписокТоваров.НоваяКолонка("УСН", "Число"); 

ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
    СписокТоваров.НоваяСтрока();
    СписокТоваров.ТовНаим = ?(СокрЛП(Номенклатура.ПолнНаименование)="", СокрЛП(Номенклатура.Наименование), СокрЛП(Номенклатура.ПолнНаименование));
    СписокТоваров.Цена = Цена;
    СписокТоваров.Количество = Количество;
    СписокТоваров.Сумма = Сумма;
    СписокТоваров.СтавкаНДС = 100 * глНачисляемыйНДС(Номенклатура.СтавкаНДС);
    // Получаем значение из карточки товара или по условию
    СписокТоваров.УСН = Номенклатура.ВидСНО; 
КонецЦикла;

Шаг 3. Программное разделение чеков и взаимодействие с ДТО 10

Самый ответственный этап — передача данных в драйвер фискального регистратора. Поскольку нам нужно два чека, мы должны выполнить цикл печати дважды, фильтруя таблицу СписокТоваров по признаку СНО. Рассмотрим, как это реализовать программно, используя объект драйвера (ДТО 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();

Шаг 4. Обработка особых ситуаций: Акциз и Сдача

При работе с маслами в 1С 7.7 крайне важно учитывать, что они являются подакцизными. Выясним причину возможных ошибок при проверках налоговой: если в чеке на подакцизный товар не указан соответствующий признак, это является нарушением. В коде выше мы использовали передачу параметра 1212 со значением 2. Убедитесь, что ваш драйвер и прошивка ККТ поддерживают этот функционал.

Еще один важный момент — расчет сдачи при оплате наличными, когда покупка разбивается на два чека. Разберем ситуацию: общая сумма 1500 руб. (1000 — патент, 500 — УСН). Клиент дает 2000 руб. Сдачу в 500 руб. нельзя печатать в обоих чеках. Рекомендуется привязывать всю сумму сдачи к первому пробиваемому чеку, а второй пробивать «под расчет» (сумма оплаты равна сумме чека). Это позволит избежать путаницы в кассовом отчете.

Шаг 5. Закрытие смены и отражение в учете

После реализации раздельной печати чеков возникнет вопрос: как собирать данные для Книги учета доходов и расходов (КУДиР)? В 1С 7.7 ТиС отчет о розничных продажах (Z-отчет) формируется на основании документов ЧекККМ.

Рассмотрим пути решения:

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

Проанализируем ситуацию с выгрузкой в бухгалтерию. Если вы используете стандартную выгрузку, разделение на два документа «Отчет о розничных продажах» позволит бухгалтерии автоматически разнести доходы по разным счетам и налоговым регистрам без ручной правки проводок.

Важное примечание: При использовании безналичной оплаты (эквайринга) через банковский терминал, сумма слип-чека будет общей. Однако кассовых чека все равно должно быть два. В обоих случаях вид оплаты в кассе передается как «Безналичными», и их общая сумма должна сойтись с итогом по терминалу за день.

Таким образом, внедрение совмещенных режимов СНО в «семерке» требует комплексного подхода: от правки справочников до глубокой переработки модулей печати и закрытия смены. Однако использование объектной модели ДТО 10 значительно упрощает передачу необходимых тегов в фискальный регистратор.

← На главную