Как вывести дополнительную информацию и реквизиты покупателя в чеке ККТ Штрих-М из 1С:Комплексная автоматизация 1.1?

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

При работе с торговым оборудованием в среде 1С:Комплексная автоматизация 1.1 (КА 1.1) часто возникает необходимость кастомизации кассового чека. Запросы бизнеса могут варьироваться от печати рекламных сообщений и остатка бонусных баллов до выполнения строгих законодательных требований, таких как указание ИНН и наименования покупателя при расчетах между организациями (согласно 54-ФЗ и ФФД 1.05/1.2). Рассмотрим подробно, как реализовать эти задачи программно, используя драйверы компании Штрих-М.

Разбор архитектуры взаимодействия 1С и ККТ

Прежде чем приступать к написанию кода, давайте разберем, как КА 1.1 взаимодействует с кассой. В этой конфигурации используется механизм «обработок обслуживания» (внешние файлы с расширением .epf). Программа не обращается к драйверу напрямую, а делает это через промежуточный объект — обработку торгового оборудования. Это критически важный момент: если вы попытаетесь вызвать метод драйвера напрямую у обработки, вы получите ошибку Метод объекта не обнаружен.

Для решения задачи нам потребуется проанализировать код функции печати чека в обработке обслуживания. Обычно это методы НапечататьЧек или ПечатьЧека. Внутри них создается объект драйвера (например, через Новый COMОбъект("AddIn.DrvFR")), и именно у этого внутреннего объекта нужно вызывать специализированные команды.

Вариант 1: Печать произвольного текста и бонусов

Для вывода информации, которая не является фискальной (например, «Ваш баланс баллов: 500»), используются методы печати строк. В зависимости от версии драйвера Штрих-М, этот метод может называться PrintString или PrintText.

Давайте посмотрим на пример кода, который вставляет дополнительные строки перед закрытием чека:


// Предположим, мы находимся внутри обработки обслуживания
// ОбъектДрайвера — это инициализированный COM-объект драйвера Штрих-М

// Устанавливаем текст для печати
ОбъектДрайвера.StringForPrinting = "Баллов начислено: " + Строка(БаллыНачислено);
// Вызываем метод печати текстовой строки
ОбъектДрайвера.PrintString();

ОбъектДрайвера.StringForPrinting = "Остаток на карте: " + Строка(БаллыОстаток);
ОбъектДрайвера.PrintString();

Важный нюанс: Чтобы строки попали именно внутрь чека, их нужно вызывать после регистрации всех позиций (товаров), но до вызова команды закрытия чека (CloseCheck). Если вызвать печать строк после закрытия чека, касса может напечатать их на чековой ленте, но они будут считаться нефискальным документом и визуально отделены от основного чека.

Вариант 2: Передача ИНН и наименования покупателя (Юрлица)

Когда покупателем выступает юридическое лицо или ИП, закон требует передавать их реквизиты в электронном виде (Теги 1227 и 1228). Просто напечатать их текстом через PrintString недостаточно — данные должны уйти в ОФД.

Для современных версий ФФД в драйверах Штрих-М используется механизм записи тегов. Рассмотрим, как это реализовать программно:


// Передача наименования покупателя (Тег 1227)
ОбъектДрайвера.TagNumber = 1227;
ОбъектДрайвера.TagType = 7; // Тип данных: Строка
ОбъектДрайвера.TagValue = "ООО 'Ромашка'";
ОбъектДрайвера.FNWriteTag();

// Передача ИНН покупателя (Тег 1228)
ОбъектДрайвера.TagNumber = 1228;
ОбъектДрайвера.TagType = 7; 
ОбъектДрайвера.TagValue = "7701010101";
ОбъектДрайвера.FNWriteTag();

Проанализируем этот фрагмент: метод FNWriteTag записывает значение тега в память ККТ для текущего чека. Эти команды должны предшествовать команде CloseCheck. Если вы используете старую конфигурацию КА 1.1, вам, скорее всего, придется вручную добавить поля ИНН и НаименованиеПокупателя в структуру данных, передаваемую из документа «Оплата от покупателя» или «Реализация» в обработку обслуживания.

Причина ошибки «Метод объекта не обнаружен»

Выясним причину, по которой пользователи часто сталкиваются с этой ошибкой. В 1С:Предприятие 8 работа с оборудованием строится по иерархии:

  1. Документ 1С (например, ЧекККМ).
  2. Глобальный модуль управления оборудованием.
  3. Внешняя обработка обслуживания (.epf).
  4. COM-объект (драйвер), установленный в системе (dfr.dll).

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

Использование шаблонов чека

Существует еще один продвинутый способ — использование встроенного редактора шаблонов чеков, который предоставляется компанией Штрих-М. В этом случае логика оформления (шрифты, разделители, положение текста) настраивается в самой ККТ или в параметрах драйвера. В 1С при этом передаются только сырые данные.

Для КА 1.1 это часто является более стабильным решением, так как оно минимизирует изменения в коде типовой конфигурации. Вы можете настроить «Подвал» или «Заголовок» чека в таблицах параметров ККТ (Таблица №4 «Текст в чеке»), если информация статична. Для динамической информации (баллы) все же придется использовать программные методы, описанные выше.

Пошаговый алгоритм внедрения изменений

Для успешной реализации задачи рекомендуется придерживаться следующего плана:

  1. Обновите драйвер: Убедитесь, что установлена актуальная версия драйвера Штрих-М (не ниже 4.15), поддерживающая работу с тегами ФФД 1.05/1.2.
  2. Доработайте обработку обслуживания: Откройте используемую .epf в конфигураторе, найдите метод закрытия чека и добавьте в него блок печати дополнительных строк или записи тегов.
  3. Проверьте таблицы ККТ: Через утилиту «Тест драйвера» проверьте настройки в таблице 1 (Тип чека) и таблице 17 (Регистры), чтобы убедиться, что печать текста в чеке разрешена.
  4. Тестирование: Выполните печать чека в режиме «Эмуляция» или на тестовой кассе, чтобы убедиться, что строки печатаются в нужном месте и не нарушают структуру фискального документа.

Важное предостережение: Помните, что длина строки в ККТ ограничена (обычно 32 или 42 символа в зависимости от модели и ширины ленты). Если ваш текст о баллах или наименование покупателя слишком длинные, их необходимо программно разбивать на несколько строк, иначе драйвер может обрезать текст или выдать ошибку.

← На главную