Как настроить смену системы налогообложения и печать чеков на онлайн-кассе Штрих-М в 1С 7.7?

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

При интеграции фискальных регистраторов компании «Штрих-М» с конфигурациями на платформе 1С:Предприятие 7.7 разработчики часто сталкиваются с задачами динамического выбора системы налогообложения (СНО) при совмещении налоговых режимов, а также с проблемами корректной передачи наименований товаров и скидок в ОФД по требованиям 54-ФЗ. Разберем по шагам, как правильно реализовать взаимодействие с кассой через прямой COM-объект драйвера DrvFR.dll.

Ограничения законодательства: совмещение нескольких СНО

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

Если организация совмещает несколько режимов (например, УСН и Патент), в учетной системе 1С 7.7 необходимо предварительно группировать строки документа реализации по используемой системе налогообложения и последовательно пробивать два отдельных чека.

Коды систем налогообложения в драйвере ККТ

Для указания СНО в драйвере «Штрих-М» используется свойство TaxType (битовая маска тега 1055). Значения задаются следующими кодами:

  1. 1 — Общая система налогообложения (ОСН);
  2. 2 — Упрощенная система (УСН Доход);
  3. 4 — Упрощенная система (УСН Доход минус Расход);
  4. 8 — Единый налог на вмененный доход (ЕНВД, исторически);
  5. 16 — Единый сельскохозяйственный налог (ЕСХН);
  6. 32 — Патентная система налогообложения (ПСН).

Реализация смены СНО и печати чека

Рассмотрим правильный алгоритм формирования и закрытия фискального чека. Особое внимание уделим последовательности заполнения реквизитов позиции: наименование товара в свойство StringForPrinting должно передаваться строго до вызова методов фиксации и регистрации (FNOperation или Buy), иначе касса передаст в ОФД чек с пустым названием товара.

Посмотрим на практический пример функции печати чека в модуле 1С 7.7:


Функция НапечататьФискальныйЧек(ОбъектККМ, КодСНО, ТаблицаТоваров, СуммаНал, СуммаБезнал, СкидкаНаЧек)
    // Проверяем соединение с фискальным регистратором
    Если ПодключитьсяКФР(ОбъектККМ) = 0 Тогда
        Сообщить("Ошибка подключения к кассовому аппарату!", "!");
        Возврат 0;
    КонецЕсли;
    
    // Устанавливаем тип чека: 0 - продажа (приход)
    ОбъектККМ.CheckType = 0;
    
    // Перебираем позиции чека
    ТаблицаТоваров.ВыбратьСтроки();
    Пока ТаблицаТоваров.ПолучитьСтроку() = 1 Цикл
        // 1. Очищаем буфер и передаем наименование товара (тег 1030, макс. 128 символов)
        СтрокаНоменклатуры = СокрЛП(ТаблицаТоваров.Товар.Наименование);
        ОбъектККМ.StringForPrinting = Лев(СтрокаНоменклатуры, 128);
        
        // 2. Указываем цену, количество и отдел
        ОбъектККМ.Price = ТаблицаТоваров.Цена;
        ОбъектККМ.Quantity = ТаблицаТоваров.Количество;
        ОбъектККМ.Department = 1;
        
        // 3. Указываем номер налога/НДС (Tax1: 1 - 20%, 2 - 10%, 4 - Без НДС и т.д.)
        ОбъектККМ.Tax1 = ТаблицаТоваров.КодСтавкиНДС;
        
        // 4. Регистрируем позицию
        ОбъектККМ.FNOperation();
        
        Если ОбъектККМ.ResultCode <> 0 Тогда
            Сообщить("Ошибка регистрации позиции: " + ОбъектККМ.ResultCodeDescription, "!");
            ОбъектККМ.CancelCheck();
            Возврат 0;
        КонецЕсли;
    КонецЦикла;
    
    // Передаем систему налогообложения для чека
    ОбъектККМ.TaxType = КодСНО;
    
    // Указываем виды оплаты
    ОбъектККМ.Summ1 = СуммаНал;    // Наличные
    ОбъектККМ.Summ2 = 0;
    ОбъектККМ.Summ3 = 0;
    ОбъектККМ.Summ4 = СуммаБезнал; // Безналичная оплата (электронные)
    
    // Очищаем буфер печати перед закрытием
    ОбъектККМ.StringForPrinting = "";
    
    // Закрываем чек
    ОбъектККМ.FNCloseCheckEx();
    
    Если ОбъектККМ.ResultCode <> 0 Тогда
        Сообщить("Ошибка закрытия чека: " + ОбъектККМ.ResultCodeDescription, "!");
        ОбъектККМ.CancelCheck();
        Возврат 0;
    КонецЕсли;
    
    // Отрезка чека
    ОбъектККМ.CutCheck();
    
    Возврат 1;
КонецФункции

Альтернативный вариант: правка таблицы ККТ

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


// Смена СНО через запись в Таблицу 18
Объект.Password = ПарольАдминистратора;
Объект.TableNumber = 18;
Объект.RowNumber = 1;
Объект.FieldNumber = 5;
Объект.ValueOfFieldInteger = КодСНО; // Например, 2 для УСН Доход или 32 для ПСН
Объект.WriteTable();

Если Объект.ResultCode <> 0 Тогда
    Сообщить("Не удалось обновить СНО в таблице ККТ: " + Объект.ResultCodeDescription);
КонецЕсли;

Однако постоянное переписывание таблиц ККТ из кода 1С не рекомендуется: таблицы могут отличаться между версиями внутреннего ПО кассы, а частая запись в энергонезависимую память устройства нежелательна.

Особенности обработки скидок и сумм

По правилам онлайн-касс и форматов фискальных данных:

  1. Скидка на чек в явном виде запрещена: Сумма всех товарных позиций обязана с абсолютной точностью до копейки равняться сумме оплат.
  2. Распределение скидки: Общую скидку документа необходимо программно распределять по строкам чека, пересчитывая итоговую цену каждой позиции с учетом скидки (Цена = СуммаСтрокиСоСкидкой / Количество).
  3. Коррекция копеек: Возникающую из-за округления копеечную погрешность следует программно относить на первую или самую дорогую позицию документа до передачи данных в ККТ.
← На главную