Интеграция .NET API NiceLabel в 1С:Предприятие (любую другую платформу, взаимодействующую через COM).
Для интеграции печати этикеток при помощи движка NiceLabel была написана компонента на C#, реализующая COM-класс с публичными методами (интерфейсами):
- void OpenLabel(string labelPath) – метод, при помощи которого отрывается шаблон этикетки. На вход принимает полный путь до шаблона, ничего не возвращает;
- void PrintLabel(string printerName, int copyCount= 1) – метод, реализующий печать этикетки из открытого шаблона. На вход принимает имя принтера и количество копий, ничего не возвращает;
- void Close() – метод, завершающий работу движка печати. Без параметров;
- string[] GetPrinters() – метод, возвращающий массив имен, доступных принтеров. Без параметров;
- string[] GetLabelParam() – метод, возвращающий массив параметров открытой этикетки. Без параметров;
- string GetLabelPreview( int width=800, int height=600, int side = 0) – метод, возвращающий изображение этикетки для предварительного просмотра. По умолчанию возвращает двухстороннее изображение размера 800*600. Принимает на вход длину и ширину в пикселях, также необходимую сторону этикетки(0 – обе стороны, 1 – лицевая сторона, 2 – оборотная сторона). Изображение возвращается в формате строки Base64.;
- void SetLabelParam(string _name, string _value) – метод, задающий значения параметров этикетки по одному. На вход принимает имя параметра и значение параметра. Ничего не возвращает;
- void SetLabelParams(string _values) – метод, задающий значения параметров этикетки массово. На вход принимает строку вида “Параметр=Значение” + Символы.ПС(перенос строки) + “Параметр=Значение”. Ничего не возвращает;
Пример работы с компонентой:
&НаКлиенте
перем Компонента экспорт; //объявляем переменную компоненты, для работы во всех методах формы
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Компонента = Новый COMОбъект("OneSExternalComponent.LabelPrinter"); //Инициализируем класс движка печати, теперь можно работать с этикетками
КонецПроцедуры
&НаКлиенте
Процедура РаботаСКомпонентой()
Компонента.OpenLabel(“C:\Labels\label.nlbl”); //открываем шаблон этикетки
РеквизитыШаблона = Компонента.GetLabelParam(); //Получаем параметры(реквизиты) этикетки в формате COMSafeArray
РеквизитыМассив = РеквизитыШаблонаCOM.Выгрузить(); //Преобразуем COMSafeArray в массив, можно работать с массивом
СписокПринтеров = компонента.GetPrinters().Выгрузить(); //Получаем список имен доступных принтеров, сразу выгружаем в массив
Принтер = СписокПринтеров[0]; //присваиваем переменной имя принтера с индексом 0
компонента.SetLabelParam("art", “а316бм”); //присваиваем параметру шаблона art, значение а616бм
компонента.SetLabelParams(“company=ООО РогаИКопыта” + Симполы.ПС + “inn=4300000000000”); //присваиваем параметру шаблона company, значение ‘ООО РогаИКопыта’ и параметру inn значение ‘4300000000000’
Превью = компонента.GetLabelPreview(500,320,1);//получаем превью открытой этикетки, размером 500*320 с лицевой стороны
ДанныеКартинки = Base64Значение(Превью); //Преобразуем строку Base64 в двоичные данные
ПредварительныйПросмотр = ВернутьХранилищеДанных(ДанныеКартинки); //Присваиваем адрес двоичным данным этикетки, где ПредварительныйПросмотр – поле картинки, с источником данных – реквизит формы ПредварительныйПросмотр типа Строка, хранящий путь к двоичным данным изображения
Компонента.PrintLabel(Принтер,5); //Печатаем этикетку на выбранном принтере в количестве 5 копий
КонецПроцедуры
&НаСервере
функция ВернутьХранилищеДанных(ДвоичныеДанные)
МойУникальныйИдентификатор = Новый УникальныйИдентификатор;
Возврат ПоместитьВоВременноеХранилище(ДвоичныеДанные,МойУникальныйИдентификатор);
КонецФункции
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
Компонента.Close(); //Завершаем работу с движком печати
КонецПроцедуры
Настройка компоненты для работы:
- Установить компоненты ASP .NET(Панел управления – Программы и компоненты – Включение или отключение компонентов Windows)
- Необходимо распаковать содержимое архива и зарегистрировать OneSExternalComponent.dll с помощью Regasm. Пример:
cd “C:\Windows\Microsoft.NET\Framework64\v4.0.30319”
regasm "C:\OneSExternalComponent.dll" /codebase /tlb
- Установить NiceLabel 2019
- Возможно, потребуется настройка безопасности COM в Windows.
- Пример реализации в 1С в архиве.
Компонента протестирована на Windows 10 x64.
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.18.59
- 1С:Комплексная автоматизация 2, релизы 2.5.17.134