При работе с торговым оборудованием в 1С часто возникает задача вывести на чековую ленту произвольную информацию, которая не является фискальным чеком. Это могут быть слип-чеки терминалов, гарантийные талоны, информация о бонусах или просто служебные записки. Однако многие разработчики сталкиваются с тем, что перед их текстом устройство автоматически печатает «шапку» — название организации, ИНН и другие реквизиты. Разберем подробно, почему это происходит и как реализовать «чистую» печать.
Когда мы отправляем команду на печать текста через стандартный МенеджерОборудованияКлиент, драйвер или само устройство может воспринимать это как начало нового документа. В логике работы многих фискальных регистраторов (ККТ) заложено, что любой документ должен начинаться с клише (заголовка). Это клише хранится в энергонезависимой памяти аппарата. Важно понимать, что поведение зависит от модели (Штрих-М, Атол и др.) и версии используемого драйвера.
Существует три основных пути решения: программный обход через методы 1С, изменение настроек в таблицах драйвера и использование низкоуровневых команд. Рассмотрим каждый из них.
Проанализируем программную логику работы с драйвером. Часто шапка печатается в тот момент, когда вызывается метод ОткрытьЧек (или его аналог в универсальном драйвере). Если ваша задача — просто напечатать текст, не нужно инициализировать фискальный документ.
Рассмотрим пример кода, который позволяет обойти печать заголовка путем прямой отправки строк. В старых конфигурациях (например, УТ 10.3) это решалось через прямые вызовы объектов драйвера. Посмотрим, как это выглядит структурно:
// Функция осуществляет построчную печать нефискальных строк
Функция ПечатьПроизвольногоТекста(ОбъектДрайвера, ИдентификаторУстройства, МассивСтрок) Экспорт
Результат = Истина;
// ВАЖНО: Мы НЕ вызываем ОбъектДрайвера.ОткрытьЧек(),
// так как именно эта команда провоцирует печать шапки.
Для Каждого СтрокаТекста Из МассивСтрок Цикл
// Используем метод печати нефискальной строки
// Для ККТ с передачей данных метод может называться НапечататьТекстовыйДокумент или PrintText
ПараметрыВывода = "";
Если НЕ ОбъектДрайвера.НапечататьНефискальнуюСтроку(ИдентификаторУстройства, СтрокаТекста, ПараметрыВывода) Тогда
Сообщить("Ошибка печати: " + ПараметрыВывода);
Результат = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
// Мы также НЕ вызываем ОбъектДрайвера.ЗакрытьЧек()
Возврат Результат;
КонецФункции
В современных конфигурациях на базе БПО (Библиотека подключаемого оборудования) используется универсальный механизм. Если вы используете команду PrintText, убедитесь, что в параметрах команды не передаются флаги открытия чека. Если драйвер все равно подставляет шапку, переходим к следующему шагу.
Если программные методы не помогают, значит, печать заголовка жестко прописана в настройках самого аппарата при получении любой команды печати. В этом случае нам поможет «Тест драйвера».
Для устройств Штрих-М:
Для устройств Атол:
Осторожно: Изменение настроек таблиц может повлиять на работу кассы в фискальном режиме. Перед внесением изменений обязательно сохраните текущую конфигурацию таблиц (сделайте дамп).
В современных версиях 1С:Розница 2.2+ или УНФ 1.6 работа с ККТ идет через формирование XML-пакета. Чтобы напечатать «слип» без лишних данных, нужно правильно сформировать структуру TextDocument. Проанализируем пример формирования такого пакета:
// Пример формирования XML для нефискальной печати
ТекстДляПечати = "<TextDocument>
| <Strings>
| <TextString Text=""МОЯ ПРОИЗВОЛЬНАЯ СТРОКА""/>
| <TextString Text=""ВТОРАЯ СТРОКА БЕЗ ШАПКИ""/>
| </Strings>
|</TextDocument>";
МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(
Оповещение,
ИдентификаторУстройства,
"PrintText",
Новый Массив(ТекстДляПечати)
);
Если передавать данные именно в таком формате через универсальный драйвер, ККТ зачастую воспринимает это как «Текстовый документ», для которого правила печати клише могут быть отключены по умолчанию.
Часто возникает ситуация: нужно напечатать доп. информацию сразу после фискального чека, но принтер делает отрез ленты и снова печатает шапку. Чтобы этого избежать, используйте печать в «Подвале» (Footer) фискального чека.
Выясним, как это сделать: при формировании фискального чека (метод НачатьФискализациюЧекаНаФискальномУстройстве), в структуру чека можно добавить массив строк Postamble. Эти строки будут напечатаны сразу после итогов чека, но ДО того, как сработает автоматический отрезчик и закроется документ. Это позволит сохранить целостность ленты и избежать повторной печати заголовка.
Подведем итог нашим изысканиям:
ОткрытьЧек перед печатью текста. Для нефискальных данных этот метод не нужен.PrintText.PrintStringWithFont вместо PrintString — он часто игнорирует настройки оформления документа.Следуя этим шагам, мы сможем добиться чистого вывода информации, экономя чековую ленту и делая документы более презентабельными для клиента.