Почему ШТРИХ-М-01-Ф не передает наименование товара в ОФД и как это исправить?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

В процессе эксплуатации контрольно-кассовой техники (ККТ) ШТРИХ-М-01-Ф программисты часто сталкиваются с парадоксальной ситуацией: на бумажном чеке, который выдает аппарат, все реквизиты (включая название товара, цену и количество) отображаются корректно, однако в личном кабинете ОФД вместо наименования товара отображается пустая строка или прочерк. Разберем детально, почему это происходит и как настроить передачу данных в соответствии с требованиями законодательства.

Анализируем причину проблемы: Тег 1030 и особенности ФФД

Основная причина кроется в переходе на Формат фискальных данных (ФФД) 1.05 и выше. В старых протоколах касса могла принимать текстовую строку просто для печати на бумаге. Сейчас же для ОФД критически важно заполнение Тега 1030 (Наименование предмета расчета). Если ваше программное обеспечение использует устаревшие методы драйвера, оно может отправлять текст только в буфер печати принтера, но не передавать его в фискальный накопитель (ФН) как обязательный атрибут позиции.

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

Решение №1: Изменение порядка заполнения свойств драйвера

Рассмотрим один из нюансов работы драйвера «Штрих-М». Иногда порядок установки свойств объекта имеет решающее значение. Выясним, как правильно передавать данные в цикле обхода товаров. Посмотрим на пример кода, где наименование гарантированно попадает в структуру чека:


// Пример корректной последовательности установки свойств
Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл
    СтрокаДляПечати = СписокТоваров.ТовНаим;
    
    // Сначала устанавливаем пароль и строку наименования
    Объект.Password = Пароль;
    Объект.StringForPrinting = СтрокаДляПечати;
    
    // Только ПОСЛЕ наименования устанавливаем цену и количество
    Объект.Price = СписокТоваров.Цена;
    Объект.Quantity = СписокТоваров.Количество;
    Объект.Department = НомерСекции;
    
    // Вызываем метод регистрации (продажи)
    Объект.Sale(); 
КонецЦикла;

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

Решение №2: Использование спецсимволов для передачи в ОФД

В некоторых реализациях драйверов «Штрих-М» существует механизм разделения текста для чека и текста для ОФД. Если обычная передача не помогает, попробуем применить префикс в виде двойного слэша. Рассмотрим, как это работает:

Если добавить "//" перед строкой наименования, драйвер интерпретирует это как команду: «Данный текст предназначен специально для передачи в ОФД». При этом на бумажный чек этот текст может выводиться без слэшей (зависит от настроек таблицы 17 ККТ).


// Принудительная передача наименования в ОФД
Объект.StringForPrinting = "//" + Товар.Наименование;
Объект.Price = Товар.Цена;
Объект.Quantity = Товар.Количество;
Объект.Sale();

Решение №3: Переход на прямую работу с DrvFr.dll (Основное решение)

Если манипуляции с порядком свойств и слэшами не принесли результата, проанализируем самый надежный способ. Проблема часто заключается в самой библиотеке DrvFr1C.dll, которая является лишь «оберткой» и может скрывать ошибки или не поддерживать новые методы ФФД. Профессиональное решение задачи — переписать обработку обслуживания на использование нативного COM-объекта AddIn.DrVFR (библиотека DrvFr.dll).

Разберем алгоритм перехода:

  1. Убедимся, что на компьютере установлен актуальный драйвер ККТ «Штрих-М» (например, версии 4.14 или 4.15).
  2. В коде 1С заменим подключение внешней компоненты с DrvFr1C.dll на DrvFr.dll.
  3. Вместо универсальных методов типа НапечататьФискСтроку(), используем прямые методы драйвера.

При использовании DrvFr.dll мы получаем доступ к свойству ItemName, которое напрямую отвечает за заполнение Тега 1030. Посмотрим на логику работы:


// Прямая работа с нативным драйвером
Драйвер = СоздатьОбъект("AddIn.DrVFR");
Драйвер.Password = 30; // Пароль администратора по умолчанию
Драйвер.Quantity = Количество;
Драйвер.Price = Цена;
Драйвер.Department = 1;
Драйвер.Tax1 = 0; // Настройка НДС

// Устанавливаем именно ItemName для корректного ФФД 1.05
Драйвер.ItemName = "Пирожок с капустой"; 

// Регистрация позиции
Результат = Драйвер.FNOperation(); 
Если Результат <> 0 Тогда
    Предупреждение("Ошибка кассы: " + Драйвер.ResultCodeDescription);
КонецЕсли;

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

Дополнительные настройки: Проверка таблиц ККТ

Если программный код корректен, но наименование все равно не уходит, проанализируем настройки самой кассы через «Тест драйвера»:

  1. Откроем «Тест драйвера ККТ».
  2. Перейдем в раздел «Настройка таблиц».
  3. Найдем Таблицу 17 (Региональные настройки).
  4. Проверим поле «Печать наименования товара». Если там стоит значение, отличное от нуля, касса может пытаться искать название товара во внутренней базе ККТ по коду, игнорируя то, что прислала 1С. Установите режим, позволяющий внешнему ПО управлять печатью.

Также проверьте длину передаваемой строки. Несмотря на то, что стандарт позволяет передавать длинные наименования, некоторые старые ревизии плат «Штрих-М» могут обрезать или вовсе игнорировать строки длиннее 64 или 128 символов при формировании пакета для ОФД. Попробуйте сократить наименование до 30-40 символов для теста.

Выясним причину через лог драйвера

Если ничего из вышеперечисленного не помогло, рекомендуем включить ведение лога в настройках драйвера. В лог-файле (обычно drvfr.log в папке драйвера) можно увидеть точную последовательность команд, которые 1С отправляет в порт. Если вы видите, что свойство StringForPrinting или ItemName заполнено, но команда Sale или FNOperation возвращает ошибку — проблема в прошивке кассы, и её необходимо обновить до актуальной версии у авторизованного сервисного центра.

Подводя итог: для исправления отсутствия наименования в ОФД на кассах ШТРИХ-М-01-Ф наиболее эффективным является переход на использование прямой библиотеки DrvFr.dll и метода FNOperation() с обязательным заполнением свойства ItemName. Это гарантирует попадание данных в Тег 1030 и корректное отображение чека в налоговых органах.

← На главную