При автоматизации розничной торговли часто возникает необходимость печати дополнительных документов на фискальном регистраторе (ККТ). Это могут быть товарные чеки, слип-чеки эквайринга, купоны на скидку или бланки на возврат. Одной из распространенных проблем при работе с конфигурацией 1С:Розница является отсутствие автоматической отрезки бумаги после печати такого нефискального документа, в то время как обычные кассовые чеки отрезаются корректно.
В этой статье мы подробно разберем, почему метод НапечататьТекстовыйДокумент может игнорировать команду отрезки, и какие программные и аппаратные методы существуют для решения этой задачи. Мы проанализируем ситуацию на примере интеграции через стандартные драйверы ККТ и выясним, как заставить устройство работать правильно.
Для печати произвольного текста в 1С обычно используется интеграционная компонента и метод НапечататьТекстовыйДокумент. Типичный вызов этой функции в коде выглядит следующим образом:
Результат = ОбъектДрайвера.НапечататьТекстовыйДокумент(ПараметрыПодключения.ИДУстройства, ТекстПечати);
Проблема заключается в том, что стандарт 1С для драйверов оборудования не всегда подразумевает наличие отдельной команды Отрезать() для нефискальных документов. ККТ воспринимает такой текст как единый поток данных. Если драйвер или прошивка аппарата настроены на «умную» отрезку только фискальных документов, то после текстового блока нож просто не сработает.
Самый простой и эффективный способ программно инициировать отрезку — это вставка специальных управляющих тегов непосредственно в строку ТекстПечати. Драйвер 1С при анализе текста ищет эти маркеры и преобразует их в низкоуровневые команды для принтера чеков.
Рассмотрим основные варианты тегов, которые поддерживаются большинством современных драйверов (АТОЛ, Штрих-М):
[отрезка] — стандартный тег на кириллице.[cut] — международный вариант тега.<cut> — формат, иногда встречающийся в специализированных драйверах.Важные нюансы использования тегов:
Символы.ПС.[CUT].Давайте посмотрим на пример функции, формирующей текст для печати с корректной отрезкой:
Функция СформироватьТекстЧекаС Отрезкой(ДанныеДляПечати) Экспорт
Текст = " КОПИЯ ЧЕКА" + Символы.ПС;
Текст = Текст + "--------------------------" + Символы.ПС;
Текст = Текст + "Товар: " + ДанныеДляПечати.Наименование + Символы.ПС;
Текст = Текст + "Сумма: " + ДанныеДляПечати.Сумма + Символы.ПС;
Текст = Текст + "--------------------------" + Символы.ПС;
// Добавляем пустые строки, чтобы текст вышел из-под ножа
Текст = Текст + Символы.ПС + Символы.ПС + Символы.ПС;
// Добавляем управляющий тег отрезки
Текст = Текст + "[отрезка]";
Возврат Текст;
КонецФункции
Если программные теги не помогают, необходимо проверить настройки самого оборудования. Часто в параметрах ККТ функция отрезки для нефискальных документов отключена на уровне железа. Проанализируем настройки для двух самых популярных производителей.
Для устройств АТОЛ (Драйвер 10.х):
Запустите «Тест драйвера ККТ», перейдите в раздел «Свойства» -> «Параметры ККТ». Найдите ветку «Печать». Здесь важно проверить значение флага «Отрезка после нефискального документа» или «Автоотрезка». Убедитесь, что тип отрезки выбран как «Полная» или «Частичная», а не «Никакая».
Для устройств Штрих-М:
В «Тесте драйвера» откройте «Таблицы». Нас интересует Таблица 1 «Настройки». Проверьте следующие поля:
Иногда отрезка срабатывает, но из-за особенностей конструкции печатающего механизма нож разрезает последнюю строку текста. Это происходит потому, что линия печати и линия ножа физически разнесены на 1-2 сантиметра. Чтобы избежать «зажевывания» информации, мы рекомендуем всегда добавлять 4-6 пустых строк перед командой отрезки.
// Продвигаем бумагу за линию ножа
Для Итератор = 1 По 5 Цикл
ТекстПечати = ТекстПечати + Символы.ПС;
КонецЦикла;
ТекстПечати = ТекстПечати + "[cut]";
Если в вашей сети магазинов используется РИБ (Распределенная информационная база), и в части магазинов отрезка работает, а в других нет — проанализируйте версию интеграционной компоненты. В справочнике «Драйверы оборудования» в 1С может быть загружена старая версия файла (например, Atol_KKT_10.zip), которая некорректно транслирует XML-пакеты в команды драйвера. Убедитесь, что на всех узлах используется идентичная версия драйвера производителя и одинаковая «прослойка» от 1С.
Также проверьте модель ККТ. Бюджетные модели (например, АТОЛ 30Ф или АТОЛ 11Ф) не имеют встроенного автоматического отрезчика — в них используется металлическая гребенка для ручного отрыва. В таких случаях программная команда отрезки будет игнорироваться устройством по техническим причинам.
Мы рассмотрели основные причины, по которым 1С:Розница 2 может не отрезать чек при использовании метода НапечататьТекстовыйДокумент. Чаще всего проблема решается добавлением тега [отрезка] с предварительным переводом строки. Если это не помогает, следует обратиться к низкоуровневым настройкам таблиц ККТ через утилиты производителя.
Помните, что стабильная работа торгового оборудования зависит от синергии трех факторов: актуальной версии прошивки ККТ, корректной интеграционной компоненты 1С и правильно сформированного текста в коде программы.