Данная компонента создана для отправки данных на принетры этикеток. Другие способы отправки данных на принтер (Например с использованием команд net use и copy) не работали, в случае когда принтер был подключен к компьютеру в сети.
Данный способ позволяет быстро выводить на печать этикетки, используя команды обрабатываемые принтером.
Компонента создана с использованием COM, работает на 1С версии 8.1 и выше. Тестировалась только на версии 1С предприятия 8.2, 8.3 в том числе на управляемых формах.
Внимание: Вышла новая Native-API компонента для печати этикеток. Рекомендуется использовать ее для своих проектов. Подробнее в публикации: //infostart.ru/public/1188440/
1. Установка и регистрация компоненты
Для работы данной компоненты необходимо наличие установленного NET.Framework 4. Скопируйте файлы из архива в каталог на локальном компьютере (Например C:\Adm\COM\). Регистрация компоненты в системе выполняется с помощью командного файла:
@ECHO OFF
REM The following directory is for .NET 4.0
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319
set PATH=%PATH%;%DOTNETFX2%
echo ---------------------------------------------------
regasm.exe C:\Adm\COM\VKV8MEANS.dll /codebase
echo ---------------------------------------------------
echo Done.
@pause
Обратите внимание на путь к каталогу NET Framework. Для вашей системы он может быть другой.
2. Настройка принтера для работы
Для печати на принтере с использованием команд ZPL (EPL) необходимо закачать нужные шрифты и изображения на принтер, используя ПО поставляемое с вашим принтером. Я закачиваю данные на принтеры используя программу "Zebra Designer Font and Graphics Downloader" из состава "Zebra Setup Utilities".
Предоставляем общий доступ к принтеру по сети.
Обращение к принтеру будет осуществляться по адресу принтера: "\\Имя компьютера\Имя принтера" или "Имя принтера", если используется локальный принтер.
3. Подготовка этикетки для печати на принтере
Этикетка формируется в виде команд принтера для печати нужного текста и изображений.
Пример этикетки в формате ZPL:
^XA
^FO20,25
^A@N,10,9,E:ARI000.FNT^FDBosch1234 Sup^FS
^FO20,49
^A@N,10,9,E:ARI001.FNT^FDАрт.1234^FS
^FO370,49
^IME:RCT.GRF^FS
^FO385,49
^A@N,8,7,E:ARI002.FNT^FDМТ14^FS
^FO50,64
^BY4^BEN,70,Y,N
^FD4909500320181^FS
^XZ
Описывать команды ZPL и EPL не буду. Этой информации много в интернете.
Формирование этикетки производится по макету:
Где:
ТипЭлемента - Тип элемента для вывода на печать: Текст, Изображение, Штрихкод
ПозицияЛево - Позиция элемента от левого края (По умолчанию 20)
ПозицияВерх - Отступ от последнего элемента до текущей строки. Для первой строки 25.
Значение - Значение для вывода в элемента
ДополнительныеДанные - Для текста - Шрифт, Для изображения - Диск принтера, Для штрихкода - Тип штрихкода
ВысотаЭлемента - Высота элемента. Текст - высота букв в точках (По умолчанию 10), Штрихкод - Высота кода от 1 до 10.
ШиринаЭлемента - Ширина элемента в точках, по умолчанию 9
ВыводитьЕслиУказанПараметр - Если в строке есть параметр и он не заполнен, то строка не будет выведена
Отступ[Тип штрихкода] - Задается отступ для различных видов ШК
В приложенной обработке есть пример формирования этикетки и отправки на принтер. Обработка проверялась на УПП, но должна работать и на других конфигурациях.
4. Описание функций библиотеки
-
Функция "SendRawDataStringToPrinter", ("ОтправитьСтрокуДанныхНаПринтер")
Описание:
Отправляет строку данных в порт принтера. В строке передаются команды для печати эткетки.
Параметры:
Адрес порта - Строка, Имя принтера
Команда - Строка, Команды для отправки на порт.
Возвращаемое значение:
Истина - Данные отправлены на печать упешно
-
Функция "SendRawDataFileToPrinter", ("ОтправитьФайлДанныхНаПринтер")
Описание:
Отправляет файл в порт принтера. В текстовом файле передаются команды для печати этикетки.
Параметры:
Адрес порта: - Строка, Имя принтера
Имя файла - Имя файла для отправки на принтер.
Возвращаемое значение:
Истина - Данные отправлены на печать упешно
-
Функция "BackgroundSendRawDataFileToPrinter", ("ФоноваяОтправкаФайлаДанныхНаПринтер")
Описание:
Фоновая отправка файла на принтер. Компонента вернет управление 1С не дожидаясь окончания печати. Используется при отправке на печать большого числа этикеток.
Параметры:
Адрес порта: - Строка, Имя принтера
Имя файла - Имя файла для отправки на принтер.
Возвращаемое значение:
Истина - Данные отправлены на печать упешно
5. Пример работы с библиотекой
Отвечая на комментарии, понял что нужно все-таки выложить простенький примерчик работы с библиотекой:
ИмяПринтера = "\\192.168.1.280\Zebra";
//ИмяПринтера = "Zebra TLP2824"; //Можно указывать системное имя принтера
ЭтикеткаТовара = "^XA
|^FO20,25
|^A@N,10,9,^FDНаименование товара^FS
|^FO20,49
|^A@N,10,9,^FDАрт.123456789^FS
|^FO20,73
|^A@N,10,9,^FDПроизводитель:Фабрика^FS
|^FO20,97
|^FO50,187
|^BY4^BEN,70,Y,N
|^FD4909500671160^FS
|^XZ";
// Для Управляемых форм сначала подключаем компоненту
Если НЕ ПодключитьВнешнююКомпоненту("AddIn.VKV8MEA") Тогда
Сообщить("Компонента печати этикеток не загружена");
Возврат;
КонецЕсли;
СерверПечати = Новый("AddIn.VKV8MEA");
Результат = СерверПечати.ОтправитьСтрокуДанныхНаПринтер(ИмяПринтера, ЭтикеткаТовара);
Если НЕ Результат Тогда
Сообщить("Ошибка печати этикетки");
КонецЕсли;