Как исправить передачу признака предмета расчета (Услуга вместо Товара) в ОФД и настроить подключение ККТ Штрих-М после сброса RNDIS?

Программист 1С v8.3 (Обычные формы) Налоговый учет Торговля и дистрибуция
← На главную

В процессе интеграции 1С с онлайн-кассами (ККТ) разработчики часто сталкиваются с аппаратными и программными трудностями. Особенно остро эти проблемы проявляются при переходе на новые фискальные форматы (ФФД 1.05) или после обновления прошивок ККТ сервисными центрами. Типичными симптомами таких сбоев являются некорректная отправка тегов в ОФД (например, когда услуга регистрируется как товар) и внезапная потеря связи с кассой по сетевому интерфейсу USB (RNDIS).

В данной статье мы подробно разберем, как решить эти проблемы при работе с ККТ семейства «Штрих-М» через ActiveX-драйвер (DrvFR.dll).

---

Причина №1. В ОФД уходит признак «Товар» вместо «Услуги» (метод Sale против FNOperation)

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

Проанализируем код, который приводит к этой ошибке:


// Пример устаревшего кода, вызывающего ошибку передачи тегов
Если (СокрЛП(СписокТоваров.Вид) = "Услуга") Тогда
    Объект.PaymentItemSign = 4; // Пытаемся передать признак "Услуга" (Тег 1212)
Иначе
    Объект.PaymentItemSign = 1; // Товар
КонецЕсли;

Объект.Quantity = СписокТоваров.Количество;
Объект.Price = СписокТоваров.Цена;
Объект.Summ1 = СписокТоваров.Сумма;
Объект.Department = 1;
Объект.Tax1 = 1; // Ставка НДС

// Вызов устаревшего метода регистрации продажи
Объект.Sale(); 

Почему это происходит?

Дело в том, что метод Sale() является устаревшим (legacy) методом драйвера ККТ «Штрих-М». Он проектировался еще во времена старого стандарта ФФД 1.00. При вызове Sale() драйвер игнорирует новые свойства ФФД 1.05, такие как PaymentItemSign (тег 1212 — Признак предмета расчета) и PaymentTypeSign (тег 1214 — Признак способа расчета). В результате касса отправляет в ОФД дефолтное значение для этого тега — «1» (Товар).

Решение проблемы:

Для корректной передачи реквизитов ФФД 1.05 необходимо отказаться от метода Sale() в пользу специализированного фискального метода FNOperation(), а закрытие чека производить методом FNCloseCheckEx().

При этом важно включить два управляющих свойства (те самые «2 Enabled»), которые заставляют драйвер использовать переданные программно значения сумм и налогов вместо попыток их автоматического пересчета кассой:

  1. Summ1Enabled (или аналогичное свойство активации суммы) — сообщает ККТ, что сумма по позиции уже рассчитана на стороне 1С и её не нужно вычислять заново по формуле «Цена × Количество». Это исключает расхождение в округлениях копеек.
  2. TaxValueEnabled (Активация значения налога) — дает указание кассе принимать сумму НДС в готовом виде непосредственно из программного кода 1С.

Рассмотрим правильный пример реализации регистрации позиции чека в 1С:


// Корректная регистрация позиции по стандарту ФФД 1.05
Объект.Quantity = СписокТоваров.Количество;
Объект.Price = СписокТоваров.Цена;
Объект.Department = 1;

// Установка ставок налога
Объект.Tax1 = ПолучитьКодСтавкиНДС(СписокТоваров.СтавкаНДС); // Например, 1 для НДС 20%

// Передаем рассчитанную в 1С сумму налога и сумму позиции
Объект.Summ1 = СписокТоваров.Сумма;
Объект.Summ1Enabled = Истина; // Активируем передачу готовой суммы

Если ПолучитьКодСтавкиНДС(СписокТоваров.СтавкаНДС) > 0 Тогда
    Объект.TaxValue1 = СписокТоваров.СуммаНДС;
    Объект.TaxValueEnabled = Истина; // Активируем передачу готовой суммы НДС
КонецЕсли;

// Устанавливаем признаки согласно ФФД 1.05
Если (СокрЛП(СписокТоваров.Вид) = "Услуга") Тогда
    Объект.PaymentItemSign = 4; // Услуга
ИначеЕсли (СокрЛП(СписокТоваров.Вид) = "Работа") Тогда
    Объект.PaymentItemSign = 3; // Работа
Иначе
    Объект.PaymentItemSign = 1; // Товар
КонецЕсли;

// Устанавливаем признак способа расчета (например, 4 — Полный расчет)
Объект.PaymentTypeSign = 4; 

// Важно! Используем новый метод вместо Sale()
Объект.FNOperation(); 

---

Причина №2. Сброс интерфейса связи ККТ с RNDIS на COM-порт

Иногда после перепрошивки аппарата в ЦТО или при смене системной даты (например, при переходе на новый календарный год) касса внезапно перестает выходить на связь. При этом в операционной системе Windows пропадает сетевое устройство RNDIS (эмуляция сетевой карты через USB-кабель), а в диспетчере устройств ККТ определяется как обычный последовательный порт (VCOM).

Почему это происходит?

При обновлении микропрограммы (прошивки) ККТ или при исчерпании ресурса встроенной батарейки на системной плате кассы может произойти так называемое «технологическое обнуление» (сброс к заводским настройкам). По умолчанию в заводских настройках большинства моделей «Штрих-М» в качестве основного интерфейса связи зашит стандартный COM-порт, а режим RNDIS отключен.

Пошаговый алгоритм восстановления RNDIS-подключения:

  1. Подключите ККТ к компьютеру по USB-кабелю.
  2. Откройте утилиту «Тест драйвера ККТ» (Штрих-М).
  3. Перейдите в меню «Свойства» и временно установите тип подключения через виртуальный COM-порт, который определился в диспетчере устройств Windows (скорость обмена данными обычно составляет 115200 baud). Нажмите «Проверка связи», чтобы убедиться, что ККТ отвечает.
  4. В левой панели утилиты выберите раздел «Таблицы».
  5. Найдите и откройте Таблицу № 21 «Сетевые интерфейсы» (Network interfaces).
  6. Найдите строку или поле с названием RNDIS и измените его значение с 0 (Выключено) на 1 (Включено).
  7. Примените изменения и обязательно перезагрузите ККТ по питанию (выключите тумблером и включите снова).
  8. После перезапуска ККТ в сетевых подключениях Windows должен снова появиться сетевой адаптер RNDIS, после чего вы сможете перенастроить тест драйвера на работу по TCP-протоколу через этот интерфейс.

---

Важное предупреждение: опасность «ручной» смены ставок НДС в таблицах ККТ

В периоды изменения ставок НДС (например, переход с 18% на 20%) у некоторых специалистов возникает соблазн не обновлять прошивку кассы и конфигурацию 1С, а просто изменить текстовое название ставки в таблицах драйвера ККТ (заменив текст «18%» на «20%»).

Проанализируем, почему этот подход опасен:

Таким образом, для корректной работы кассового узла необходим комплексный подход: своевременное обновление внутреннего ПО кассы (прошивки), использование актуальной версии драйвера DrvFR.dll и доработка кода конфигурации 1С для поддержки вызовов методов ФФД 1.05.

← На главную