Как организовать печать на LPT-принтер через сеть в 1С:Предприятие 7.7?

Программист 1С v7.7
← На главную

В практике автоматизации торгового и складского учета часто возникает необходимость печати этикеток на специализированных принтерах (например, Argox, Zebra или BZB-2), подключенных через устаревший интерфейс LPT. Основная сложность заключается в том, что для достижения максимальной скорости и корректного позиционирования текста такие принтеры требуют отправки прямых управляющих команд (ESC/P, PPLA, ZPL). В этой статье мы подробно разберем, как реализовать печать на такой принтер, если он подключен не к локальному компьютеру, а находится в сети.

Анализ проблемы: почему стандартный драйвер не всегда подходит

Рассмотрим ситуацию: у нас есть принтер этикеток, подключенный к параллельному порту (LPT) на одном компьютере, и нам нужно отправить задание на печать с другого рабочего места. Использование стандартного Windows-драйвера в 1С v7.7 часто приводит к тому, что этикетка печатается как графический объект. Это существенно замедляет процесс, ухудшает качество штрихкодов и может вызывать проблемы с позиционированием ленты. Оптимальным решением является формирование текстового файла с низкоуровневыми командами принтера и его прямая отправка в порт.

Решение 1: Прямое копирование в сетевой ресурс (UNC-путь)

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

Посмотрим на пример кода, который успешно решает задачу:


// ИмяФайлаЭтикетки - путь к заранее сформированному текстовому файлу с командами
// Reserv-pc - сетевое имя компьютера, к которому подключен принтер
// Argox_OS-203DT_PPLA - сетевое имя (Share Name) самого принтера
КомандаСистемы("COPY /B " + ИмяФайлаЭтикетки + " \\Reserv-pc\Argox_OS-203DT_PPLA\LPT1:");

Разберем параметры этой команды:

  1. COPY /B — ключ /B крайне важен, так как он указывает системе, что файл нужно копировать в бинарном режиме. Без этого ключа некоторые управляющие символы (например, конец файла или перевод строки) могут быть интерпретированы неверно, и принтер выдаст ошибку.
  2. ИмяФайлаЭтикетки — локальный путь к сформированному файлу.
  3. \\ИмяПК\ИмяПринтера\LPT1: — полный сетевой путь. Обратите внимание, что в конце добавляется имя порта, к которому физически подключено устройство.

Решение 2: Перенаправление порта с помощью NET USE

Выясним еще один надежный метод, который часто называют «маппингом» порта. Этот способ удобен тем, что после настройки система будет воспринимать сетевой принтер как локальное устройство LPT1. Это особенно полезно для программ, которые не умеют работать с длинными сетевыми путями.

Для реализации этого метода необходимо выполнить следующую команду в консоли Windows (или через КомандаСистемы из 1С):

net use LPT1: \\Имя_Компьютера\Имя_Принтера /Persistent:Yes

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

КомандаСистемы("COPY /B " + ИмяФайлаЭтикетки + " LPT1:");

Флаг /Persistent:Yes гарантирует, что связь с принтером восстановится автоматически после перезагрузки компьютера.

Решение 3: Использование FileSystemObject для бесшумной печати

Многие программисты замечают, что вызов КомандаСистемы вызывает кратковременное появление черного окна командной строки (CMD), что может раздражать пользователей. Проанализируем способ отправки данных без использования внешних командных процессоров с помощью объекта Scripting.FileSystemObject.

Этот метод позволяет открыть сетевой порт как обычный файл и записать в него содержимое:


// Создаем объект для работы с файловой системой
FSO = СоздатьОбъект("Scripting.FileSystemObject");
Поток = FSO.CreateTextFile("\\Reserv-pc\Argox_OS-203DT_PPLA", Истина);

// Читаем содержимое файла с командами и записываем в порт
ТекстФайла = СоздатьОбъект("Текст");
ТекстФайла.Открыть(ИмяФайлаЭтикетки);
Для н = 1 По ТекстФайла.КоличествоСтрок() Цикл
    Поток.WriteLine(ТекстФайла.ПолучитьСтроку(н));
КонецЦикла;

Поток.Close();

Важно: При использовании этого метода убедитесь, что кодировка текста совпадает с той, которую ожидает принтер (обычно это OEM/DOS кодировка для кириллицы).

Технические нюансы и настройки системы

Чтобы печать через сеть работала стабильно, необходимо проверить несколько системных настроек, о которых часто забывают:

  1. Сетевое имя принтера: На компьютере, где принтер подключен физически, зайдите в свойства принтера, вкладка «Доступ». Имя общего ресурса должно быть коротким (до 8-12 символов), без пробелов и кириллицы. Это минимизирует ошибки в интерпретации пути командной строкой.
  2. Протокол SMB 1.0: Если вы печатаете с современной ОС (Windows 10/11) на старый ПК (Windows XP/7), проверьте наличие компонента «Поддержка общего доступа к файлам SMB 1.0/CIFS» в настройках Windows. Без него старые методы сетевой печати могут не работать.
  3. Драйвер Generic / Text Only: На сервере (ПК с принтером) рекомендуется устанавливать драйвер «Общий / Только текст». Это предотвратит добавление лишних графических данных диспетчером печати Windows к вашим ESC-командам.
  4. Права доступа: В настройках общего доступа принтера обязательно добавьте группу «Все» (Everyone) с правами на печать. Если компьютеры не находятся в домене, убедитесь, что на целевом ПК разрешен гостевой вход или учетные данные пользователей совпадают.

Использование Raw-портов для современных принт-серверов

Если ваш LPT-принтер подключен через внешний аппаратный принт-сервер (небольшая коробочка с RJ-45 и LPT разъемами), разберем альтернативный вариант. Такие устройства обычно поддерживают протокол Raw Printing на порту 9100. В этом случае нет необходимости «расшаривать» принтер в Windows. Можно отправлять команды напрямую через TCP/IP соединение, используя специализированные внешние компоненты для работы с сокетами в 1С.

Подведем итог: печать на сетевой LPT-порт в 1С 7.7 — задача вполне решаемая. Самым простым и эффективным способом остается использование команды COPY /B с указанием полного UNC-пути к принтеру и порту, при условии правильной настройки прав доступа в операционной системе.

← На главную