В практике автоматизации торгового и складского учета часто возникает необходимость печати этикеток на специализированных принтерах (например, Argox, Zebra или BZB-2), подключенных через устаревший интерфейс LPT. Основная сложность заключается в том, что для достижения максимальной скорости и корректного позиционирования текста такие принтеры требуют отправки прямых управляющих команд (ESC/P, PPLA, ZPL). В этой статье мы подробно разберем, как реализовать печать на такой принтер, если он подключен не к локальному компьютеру, а находится в сети.
Рассмотрим ситуацию: у нас есть принтер этикеток, подключенный к параллельному порту (LPT) на одном компьютере, и нам нужно отправить задание на печать с другого рабочего места. Использование стандартного Windows-драйвера в 1С v7.7 часто приводит к тому, что этикетка печатается как графический объект. Это существенно замедляет процесс, ухудшает качество штрихкодов и может вызывать проблемы с позиционированием ленты. Оптимальным решением является формирование текстового файла с низкоуровневыми командами принтера и его прямая отправка в порт.
Проанализируем самый быстрый способ, который обсуждался в сообществе. Если принтер на удаленном компьютере уже «расшарен» (открыт для общего доступа), мы можем воспользоваться системной командой копирования. Основной нюанс здесь заключается в правильном указании пути. Формат пути должен включать имя компьютера, сетевое имя принтера и указание порта.
Посмотрим на пример кода, который успешно решает задачу:
// ИмяФайлаЭтикетки - путь к заранее сформированному текстовому файлу с командами
// Reserv-pc - сетевое имя компьютера, к которому подключен принтер
// Argox_OS-203DT_PPLA - сетевое имя (Share Name) самого принтера
КомандаСистемы("COPY /B " + ИмяФайлаЭтикетки + " \\Reserv-pc\Argox_OS-203DT_PPLA\LPT1:");
Разберем параметры этой команды:
/B крайне важен, так как он указывает системе, что файл нужно копировать в бинарном режиме. Без этого ключа некоторые управляющие символы (например, конец файла или перевод строки) могут быть интерпретированы неверно, и принтер выдаст ошибку.Выясним еще один надежный метод, который часто называют «маппингом» порта. Этот способ удобен тем, что после настройки система будет воспринимать сетевой принтер как локальное устройство LPT1. Это особенно полезно для программ, которые не умеют работать с длинными сетевыми путями.
Для реализации этого метода необходимо выполнить следующую команду в консоли Windows (или через КомандаСистемы из 1С):
net use LPT1: \\Имя_Компьютера\Имя_Принтера /Persistent:Yes
После этого печать из 1С упрощается до предела. Нам больше не нужно знать сетевое имя принтера при каждой отправке, достаточно обратиться к локальному порту:
КомандаСистемы("COPY /B " + ИмяФайлаЭтикетки + " LPT1:");
Флаг /Persistent:Yes гарантирует, что связь с принтером восстановится автоматически после перезагрузки компьютера.
Многие программисты замечают, что вызов КомандаСистемы вызывает кратковременное появление черного окна командной строки (CMD), что может раздражать пользователей. Проанализируем способ отправки данных без использования внешних командных процессоров с помощью объекта Scripting.FileSystemObject.
Этот метод позволяет открыть сетевой порт как обычный файл и записать в него содержимое:
// Создаем объект для работы с файловой системой
FSO = СоздатьОбъект("Scripting.FileSystemObject");
Поток = FSO.CreateTextFile("\\Reserv-pc\Argox_OS-203DT_PPLA", Истина);
// Читаем содержимое файла с командами и записываем в порт
ТекстФайла = СоздатьОбъект("Текст");
ТекстФайла.Открыть(ИмяФайлаЭтикетки);
Для н = 1 По ТекстФайла.КоличествоСтрок() Цикл
Поток.WriteLine(ТекстФайла.ПолучитьСтроку(н));
КонецЦикла;
Поток.Close();
Важно: При использовании этого метода убедитесь, что кодировка текста совпадает с той, которую ожидает принтер (обычно это OEM/DOS кодировка для кириллицы).
Чтобы печать через сеть работала стабильно, необходимо проверить несколько системных настроек, о которых часто забывают:
Если ваш LPT-принтер подключен через внешний аппаратный принт-сервер (небольшая коробочка с RJ-45 и LPT разъемами), разберем альтернативный вариант. Такие устройства обычно поддерживают протокол Raw Printing на порту 9100. В этом случае нет необходимости «расшаривать» принтер в Windows. Можно отправлять команды напрямую через TCP/IP соединение, используя специализированные внешние компоненты для работы с сокетами в 1С.
Подведем итог: печать на сетевой LPT-порт в 1С 7.7 — задача вполне решаемая. Самым простым и эффективным способом остается использование команды COPY /B с указанием полного UNC-пути к принтеру и порту, при условии правильной настройки прав доступа в операционной системе.