Как распечатать произвольный текст на фискальном регистраторе без автоматической шапки?

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

При работе с торговым оборудованием в 1С часто возникает задача вывести на чековую ленту произвольную информацию, которая не является фискальным чеком. Это могут быть слип-чеки терминалов, гарантийные талоны, информация о бонусах или просто служебные записки. Однако многие разработчики сталкиваются с тем, что перед их текстом устройство автоматически печатает «шапку» — название организации, ИНН и другие реквизиты. Разберем подробно, почему это происходит и как реализовать «чистую» печать.

Разберем причину появления автоматического заголовка

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

Существует три основных пути решения: программный обход через методы 1С, изменение настроек в таблицах драйвера и использование низкоуровневых команд. Рассмотрим каждый из них.

Метод 1: Исключение команд открытия и закрытия чека

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

Рассмотрим пример кода, который позволяет обойти печать заголовка путем прямой отправки строк. В старых конфигурациях (например, УТ 10.3) это решалось через прямые вызовы объектов драйвера. Посмотрим, как это выглядит структурно:


// Функция осуществляет построчную печать нефискальных строк
Функция ПечатьПроизвольногоТекста(ОбъектДрайвера, ИдентификаторУстройства, МассивСтрок) Экспорт
    
    Результат = Истина;
    
    // ВАЖНО: Мы НЕ вызываем ОбъектДрайвера.ОткрытьЧек(), 
    // так как именно эта команда провоцирует печать шапки.
    
    Для Каждого СтрокаТекста Из МассивСтрок Цикл
        // Используем метод печати нефискальной строки
        // Для ККТ с передачей данных метод может называться НапечататьТекстовыйДокумент или PrintText
        ПараметрыВывода = "";
        Если НЕ ОбъектДрайвера.НапечататьНефискальнуюСтроку(ИдентификаторУстройства, СтрокаТекста, ПараметрыВывода) Тогда
            Сообщить("Ошибка печати: " + ПараметрыВывода);
            Результат = Ложь;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    // Мы также НЕ вызываем ОбъектДрайвера.ЗакрытьЧек()
    Возврат Результат;
    
КонецФункции

В современных конфигурациях на базе БПО (Библиотека подключаемого оборудования) используется универсальный механизм. Если вы используете команду PrintText, убедитесь, что в параметрах команды не передаются флаги открытия чека. Если драйвер все равно подставляет шапку, переходим к следующему шагу.

Метод 2: Настройка таблиц фискального регистратора (Hardware level)

Если программные методы не помогают, значит, печать заголовка жестко прописана в настройках самого аппарата при получении любой команды печати. В этом случае нам поможет «Тест драйвера».

Для устройств Штрих-М:

  1. Запустите утилиту «Тест драйвера ККТ».
  2. Перейдите в раздел «Настройка таблиц».
  3. Найдите таблицу №1 «Тип текста / Параметры».
  4. Проанализируйте поле «Печать рекламного текста» или «Печать заголовка в нефискальном документе». Если значение установлено в «1», аппарат будет всегда печатать шапку. Установите значение в «0».
  5. Также проверьте таблицу №4 «Текст в чеке», где хранятся сами строки заголовка.

Для устройств Атол:

  1. Откройте «Драйвер ККТ 10.х».
  2. Перейдите в «Свойства» -> «Параметры ККТ» -> «Печать».
  3. Найдите пункт «Печать заголовка/подвала нефискального документа». Если галочка активна, драйвер будет принудительно добавлять данные организации. Снимите ее.

Осторожно: Изменение настроек таблиц может повлиять на работу кассы в фискальном режиме. Перед внесением изменений обязательно сохраните текущую конфигурацию таблиц (сделайте дамп).

Метод 3: Использование XML-шаблонов в БПО 2.0/3.0

В современных версиях 1С:Розница 2.2+ или УНФ 1.6 работа с ККТ идет через формирование XML-пакета. Чтобы напечатать «слип» без лишних данных, нужно правильно сформировать структуру TextDocument. Проанализируем пример формирования такого пакета:


// Пример формирования XML для нефискальной печати
ТекстДляПечати = "<TextDocument>
|    <Strings>
|        <TextString Text=""МОЯ ПРОИЗВОЛЬНАЯ СТРОКА""/>
|        <TextString Text=""ВТОРАЯ СТРОКА БЕЗ ШАПКИ""/>
|    </Strings>
|</TextDocument>";

МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(
    Оповещение, 
    ИдентификаторУстройства, 
    "PrintText", 
    Новый Массив(ТекстДляПечати)
);

Если передавать данные именно в таком формате через универсальный драйвер, ККТ зачастую воспринимает это как «Текстовый документ», для которого правила печати клише могут быть отключены по умолчанию.

Проблема «Трех бумажек» и лишних отрезков

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

Выясним, как это сделать: при формировании фискального чека (метод НачатьФискализациюЧекаНаФискальномУстройстве), в структуру чека можно добавить массив строк Postamble. Эти строки будут напечатаны сразу после итогов чека, но ДО того, как сработает автоматический отрезчик и закроется документ. Это позволит сохранить целостность ленты и избежать повторной печати заголовка.

Резюме и практические советы

Подведем итог нашим изысканиям:

  1. Первым делом проверьте, не вызывается ли у вас в коде ОткрытьЧек перед печатью текста. Для нефискальных данных этот метод не нужен.
  2. Если заголовок все равно печатается, используйте Тест драйвера для отключения автоматического клише в таблицах настроек ККТ.
  3. При работе с новыми драйверами (ККТ с передачей данных) отдавайте предпочтение передаче данных в формате XML через метод PrintText.
  4. Если вы программируете на низком уровне (через COM-объект драйвера), попробуйте метод PrintStringWithFont вместо PrintString — он часто игнорирует настройки оформления документа.

Следуя этим шагам, мы сможем добиться чистого вывода информации, экономя чековую ленту и делая документы более презентабельными для клиента.

← На главную