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

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

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

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

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

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

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

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

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


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

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

Метод 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 — он часто игнорирует настройки оформления документа.

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

← На главную