Как в 1С 7.7 реализовать печать чеков с разными системами налогообложения на одной ККТ

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

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

Главное правило: один чек — одна СНО

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

Программная реализация для ККТ «Штрих-М»

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

Разберем пример кода для установки СНО перед открытием чека в драйвере Штрих-М:


// Предположим, Объект - это созданный COM-объект драйвера "AddIn.DRVFR"
Объект.Password = 30; // Пароль администратора по умолчанию
Объект.TaxType = ВыбраннаяСНО; // Передаем числовое значение (например, 2 для УСН)
// Важно установить TaxType ДО метода OpenCheck
Если Объект.OpenCheck() <> 0 Тогда
    Предупреждение("Ошибка открытия чека: " + Объект.ResultCodeDescription);
    Возврат;
КонецЕсли;

Программная реализация для ККТ «Атол»

В кассовых аппаратах «Атол» (драйверы версий 8.х, 9.х или 10.х) работа с СНО строится через запись атрибутов (тегов). Согласно ФФД, за систему налогообложения отвечает тег 1055. Рассмотрим, как это выглядит при работе с драйвером напрямую (без использования промежуточных XML-файлов 1С):


// Для Атол 8.х / 9.х
Драйвер.AttrNumber = 1055; // Номер тега СНО
Драйвер.AttrValue = КодСистемы; // 1-ОСН, 2-УСН Доход, 4-УСН Доход-Расход, 8-ЕНВД, 16-ЕСХН, 32-ПСН
Драйвер.WriteAttribute(); // Записываем атрибут в память ККТ перед регистрацией позиции

Если вы используете современный драйвер Атол 10, принцип остается похожим, но команды передаются через объект параметров. Важно помнить, что если СНО не передана явно, касса использует систему, установленную в настройках (таблицах) ККТ по умолчанию.

Использование XML-компоненты 1С

Многие типовые обработки (например, fr_elves.ert) используют универсальный механизм обмена через XML. В этом случае данные передаются через структуру TaxVariant. Посмотрим на фрагмент формирования такой структуры:


// Добавление атрибута СНО в XML-структуру для формирования чека
ДобавитьАттрибут(XML_DOM, XML_Param, "TaxVariant", Строка(Фирма.СНО));

Однако, как справедливо отмечают эксперты, работа через XML в 1С 7.7 имеет ряд недостатков. Рассмотрим причины, почему прямое управление драйвером эффективнее:

  1. Ограниченность тегов: Стандартная XML-компонента 1С может не поддерживать новые теги (например, маркировку товаров «Честный Знак» или специфические реквизиты ФФД 1.2).
  2. Ошибки длины: В XML-структурах часто возникают ошибки, если длина передаваемого наименования товара превышает возможности драйвера, тогда как прямое обращение позволяет обрезать строку программно.
  3. Скорость: Формирование, передача и парсинг XML-пакета занимают значительно больше времени, чем прямой вызов методов COM-объекта драйвера.

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

Выясним, как должна выглядеть логика в модуле формы документа «Чек» или «Приходный кассовый ордер» при необходимости печати на разные СНО. Проанализируем ситуацию по шагам:

Шаг 1: Классификация товаров. В справочнике «Номенклатура» или «Категории товаров» необходимо добавить реквизит СистемаНалогообложения. Если реквизит пустой, товар относится к основной СНО организации.

Шаг 2: Группировка. Перед печатью чека создаем две временные таблицы (или два списка значений). В первую таблицу копируем строки товара, относящиеся к УСН, во вторую — к Патенту.

Шаг 3: Последовательная печать. Вызываем процедуру печати чека дважды. Рассмотрим примерный код:


// Пример логики разделения чека
ТаблицаУСН = СоздатьОбъект("ТаблицаЗначений");
// ... заполнение таблиц ...
Если ТаблицаУСН.КоличествоСтрок() > 0 Тогда
    // Инициализируем драйвер, устанавливаем TaxType = 2
    ПечатьЧекаНаККТ(ТаблицаУСН, 2); 
КонецЕсли;

Если ТаблицаПатент.КоличествоСтрок() > 0 Тогда
    // Инициализируем драйвер, устанавливаем TaxType = 32
    ПечатьЧекаНаККТ(ТаблицаПатент, 32); 
КонецЕсли;

Важные замечания по НДС

Помните, что при смене СНО часто меняется и ставка НДС. Например, для УСН и Патент чаще всего используется ставка «Без НДС» (или НДС 0% в некоторых случаях). При программном формировании строк чека (метод Registration для Штриха или Registration для Атола) обязательно передавайте правильный индекс налоговой ставки. Несоответствие СНО и ставки НДС (например, попытка пробить чек по Патенту с НДС 20%) приведет к отказу ККТ регистрировать операцию и ошибке «Неверный формат команды».

Таким образом, для корректной работы с несколькими СНО в 1С 7.7 требуется небольшая доработка типовых алгоритмов: добавление признака СНО в товары, логика разделения табличной части и явная передача кода СНО в драйвер перед открытием фискального чека.

← На главную