Часто в розничной торговле возникает ситуация, когда на рабочем месте кассира отсутствует обычный принтер, а руководству требуется оперативно получать отчеты (например, остатки товара на смену или план продаж) непосредственно на чековой ленте. Фискальный регистратор (ККТ) технически является принтером чеков, и 1С позволяет использовать его возможности для печати нефискальной информации. В этой статье мы подробно разберем, как программно реализовать печать произвольного текста, используя возможности драйверов и встроенные механизмы 1С.
Если ваша конфигурация (например, УНФ 1.6, Розница 2.3 или Бухгалтерия 3.0) использует современную БПО, это самый правильный и безопасный метод. Он позволяет избежать конфликтов за порт устройства, так как 1С сама управляет подключением и отключением оборудования. Разберем алгоритм работы через штатный механизм МенеджерОборудования.
Для печати текста нам потребуется вызвать команду PrintText. Основное преимущество этого метода в том, что он работает в рамках установленных стандартов 1С и не требует прямой инициализации COM-объектов драйвера.
Проанализируем пример кода для реализации такой печати:
// 1. Получаем список подключенных устройств (ККТ)
Оповещение = Новый ОписаниеОповещения("ЗавершитьПечатьТекста", ЭтотОбъект);
ПараметрыКассы = МенеджерОборудованияВызовСервера.ПолучитьПараметрыККТ(КассаУзла);
// 2. Формируем массив строк для печати
МассивСтрок = Новый Массив;
МассивСтрок.Добавить("ОТЧЕТ ПО ПРОДАЖАМ");
МассивСтрок.Добавить("--------------------------------");
МассивСтрок.Добавить("Товар: Плюшки Кол-во: 10");
МассивСтрок.Добавить("Товар: Кофе Кол-во: 5");
МассивСтрок.Добавить("--------------------------------");
// 3. Вызываем команду печати через БПО
МенеджерОборудованияКлиент.ВыполнитьКоманду(Оповещение, "PrintText", МассивСтрок, ПараметрыКассы.ИдентификаторУстройства);
Важно помнить, что при использовании БПО текст будет напечатан как нефискальный документ. Если касса находится в режиме открытого чека, выполнение этой команды может привести к ошибке, поэтому убедитесь, что все чеки закрыты или аннулированы.
В случаях, когда стандартных методов БПО недостаточно или используются старые версии конфигураций, можно обратиться к драйверу напрямую через COM-объект. Для устройств марки "Штрих-М", "РР-Электро" и совместимых используется объект AddIn.DrvFR.
Рассмотрим пошагово, как программно отправить строки на печать:
PrintString для вывода каждой строки.Посмотрим на пример реализации:
Попытка
Драйвер = Новый COMОбъект("AddIn.DrvFR");
Исключение
Сообщить("Драйвер Штрих-М не установлен на данном ПК");
Возврат;
КонецПопытки;
// Установка параметров связи (обычно берутся из настроек 1С)
Драйвер.Password = 30; // Пароль системного администратора ККТ
Драйвер.Connect();
Если Драйвер.ResultCode <> 0 Тогда
Сообщить("Ошибка связи: " + Драйвер.ResultCodeDescription);
Возврат;
КонецЕсли;
// Печать строк
Драйвер.StringForPrinting = "СПИСОК НА СЛЕДУЮЩУЮ СМЕНУ";
Драйвер.PrintString();
Драйвер.StringForPrinting = "1. Молоко - 10 шт.";
Драйвер.PrintString();
Драйвер.StringForPrinting = "2. Хлеб - 5 шт.";
Драйвер.PrintString();
// Промотка ленты, чтобы текст вышел из под ножа
Драйвер.FeedAfterCut = Истина;
Драйвер.CutPaper(); // Отрезка
Драйвер.Disconnect();
Важный нюанс: при работе напрямую через драйвер 1С не знает, что порт занят. Если в этот момент кассир попробует пробить чек в основной программе, он получит ошибку "Порт занят". Поэтому всегда вызывайте Disconnect() сразу после завершения печати.
Выясним причину, почему текст иногда "съезжает" или обрезается. Фискальный регистратор имеет ограниченную ширину печати, которая измеряется в символах. Для большинства моделей это:
Рекомендуем перед печатью подготовить функцию нормализации строки, которая будет обрезать длинные наименования номенклатуры или переносить их на новую строку. Также учитывайте, что фискальный регистратор не поддерживает разные шрифты (жирный, курсив) при обычной текстовой печати через PrintString, если это не предусмотрено внутренними таблицами шрифтов ККТ.
Если вам нужно печатать полноценные табличные документы (ТабличныйДокумент), можно установить в операционной системе драйвер "Generic / Text Only" и привязать его к порту, на котором висит касса. В этом случае вы сможете использовать метод ТабДок.Напечатать().
Однако проанализируем ситуацию: этот метод крайне нестабилен для ККТ, так как драйвер Windows может блокировать порт на постоянной основе, не давая драйверу 1С пробивать чеки. Мы рекомендуем использовать этот способ только в крайнем случае и только для устройств, работающих через сетевой протокол (TCP/IP), где возможно одновременное подключение нескольких сессий.
Нужно ли регистрировать такие отчеты в налоговой? Нет. Печать текста методами PrintString или через команды БПО не является фискальной операцией. Эти данные не записываются в фискальный накопитель и не уходят в ОФД. Тем не менее, строго не рекомендуется использовать в заголовках таких отчетов слова "Чек", "Кассовый чек", "Итог" или "Фискальный", чтобы не вводить в заблуждение покупателей и проверяющие органы.
Подведем итог: наиболее стабильным решением для современных конфигураций 1С 8.3 является использование методов БПО. Это гарантирует корректную работу с очередью печати и совместимость с различными моделями ККТ (Атол, Штрих-М, Эвотор и др.) без переписывания кода под конкретный драйвер.