Печать на сервере 1с. DLL для 1С, способная печатать картинки и pdf файлы в серверном контексте (например, при работе веб-сервиса)

13.03.18

Разработка - Разработка внешних компонент

Не знаю, пригодится кому или нет, писалось для себя, т.к  возникла необходимость печатать на принтере этикеток sscc напрямую с ТСД  через web - сервис. Как известно, веб сервис в 1С работает только в серверном контексте и, к сожалению, разработчики платформы пока не позаботились о возможности вызывать метод  при таких условиях. 

Скачать файлы

Наименование Файл Версия Размер
zip архив с dll и описанием
.zip 5,07Mb
68
.zip 1.0.0.0.0 5,07Mb 68 Скачать

Вся инструкция по работе в архиве с библиотекой. Ограничение по pdf - 10  страниц за раз.

Параметры:
PaperHight-Высота бумаги ( число )
PaperWight - ширина бумаги (число)
PrinterName - Имя принтера ( строка) 
FileName - Имя файла ( строка) 
Landscape - Ориентация (Альбомная\Книжная,true\False) (булево)
PixelJpgX - Параметр для печати картинок ( координата по x)  задается для опеределения места начала отрисовки картинке на листе бумаги ( число)
PixelJpgY- Параметр для печати картинок ( координата по y)  задается для опеределения места начала отрисовки картинке на листе бумаги ( число)
LeftField- левое поле отступа ( число ); 
RightField- правое поле отступа ( число);
UpField  - верхнее поле отступа ( число);
DownField  - нижнее поле отступа ( число);

Методы:
ReturnSettings() - возвращает значение параметров(строка);
PrintPDF() - печатает PDF файл ( возвращает ответ -"ОК" или описание ошибки (строка));
PrintJPG() - печатает Файл картинки jpg  , может и другие форматы ( возвращает ответ -"ОК" или описание ошибки (строка));

Имя для ком соединения -"Component1c.MyClassComponent";

Гуиды Библиотеки :
6844AACB-9194-46bf-81AF-9DA73EE687DC - интерфейс;
69EE0677-884A-4eeb-A3BD-D407844C0C70 - класс реализиующий функциональность интерфейса;

Регистрация :
вместо regsvr32 ( это для ++ библиотек) - C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe  "Путь к файлу"
пример : C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe "C:\Users\user\Documents\component1c\Component1c.dll" 
пример 2 : C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe "C:\Users\user\Documents\component1c\Component1c.dll" /codebase

дорегистрация для 64 битного сервера :

Работа с реестром----
1. создаем раздел с именем "{69EE0677-884A-4eeb-A3BD-D407844C0C70}" в ветке HKEY_CLASSES_ROOT\wow6432node\appid. Для этого раздела создаем строковое свойство "DllSurrogate" с пустым значением.
2. Находим HKEY_CLASSES_ROOT\wow6432node\CLSID\{69EE0677-884A-4eeb-A3BD-D407844C0C70} и добавляем строковое свойство "AppID" со значением "{69EE0677-884A-4eeb-A3BD-D407844C0C70}".

 где 
{69EE0677-884A-4eeb-A3BD-D407844C0C70} гуид приложения 

 

Пример кода 1С  

 МояОбработка=Новый COMОбъект("Component1c.MyClassComponent");
    МояОбработка.PrinterName="Honeywell PM42 (203 dpi) - DP";
    МояОбработка.FileName= "C:\Users\user\Documents\штрихкод.jpg";
    МояОбработка.PaperHight=197;
    МояОбработка.PaperWight=404;
    МояОбработка.PixelJpgX=50;
    МояОбработка.PixelJpgY=10;

   
    Ответ=МояОбработка.PrintJPG();


Тестирование проводилось на платформе 8.3.9+ , КА 1.1  и 64 битном сервере 1С предприятия.

Печатал на принтер этикеток Honeywell PM42  с Терминала сбора данных "EDA50k "  с  установленным на него самописным  мобильным приложением 1С  посредством web -сервиса.  PDF  файлы печатает нормально, однако по какой-то причине - именно на этот принтер всегда в альбомном варианте, хотя и давалась четкая команда на драйвер, что необходим портрет. На обычных принтерах также не всегда отрабатывает команда о смене ориентации . Эту проблему решил (правда, только для обычного принтера)   сохранением из 1С pdf  файла сразу в нужной мне ориентации.

Но  Honeywell PM42 даже  при сохраненном файле в портретном варианте продолжал печатать как альбомный лист.

В итоге, насколько я понял, эта проблема связанна именной с той библиотекой, которую я использовал как базу для работы с pdf. Т.к мне на данном принтере необходимо было печатать только штрихкод, сформированный в 1С, а штрих код в 1С стандартной компонентой формируется как картинка, то я добавил возможность печати картинок.

При отправлении изображения на принтер Honeywell PM42 проблема решилась.

Библиотека для работы с печатью изображений типовая (т.е  от виндовс)  и она может печатать разные форматы изображений, но я тестировал только в jpg.

Печать Сервер веб-сервис вебсервис печать с сервера 1с печать на сервере 1с печать на сервере

См. также

Медиадисплей. Рекламный информационный монитор для покупателя.

Разработка внешних компонент POS терминал Рабочее место Розничная торговля Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)

Монитор покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Можно использовать в качестве графического меню-борда в кафе и видеовывески. Управление выводом на телевизор через hdmi-приставку на базе Windows или Android. В качестве устройства отображения можно использовать Android-планшеты, фоторамки с Android, монитор любого Windows-компьютера, доступного по сети. Настраивается ЛЮБОЙ ДИЗАЙН экрана!

16800 руб.

30.05.2017    52105    34    69    

43

Ценники и этикетки со штрих-кодом для 1С 8.х любой конфигурации

Этикетки, ценники Платформа 1С v8.3 Конфигурации 1cv8 Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Беларусь Украина Россия Управленческий учет Платные (руб)

Простая в использовании обработка для формирования и печати ценников и этикеток со штрих-кодом, с дополнительной ценой, для 1С8.х любой конфигурации. Большое разнообразие шаблонов печатных форм. Управляемая форма (Такси) + Обычный режим.

3588 руб.

11.11.2020    47548    53    44    

64

Печать ценников. (Розница 2.3, УНФ 1.6, две цены + серийные номера) + УНФ 3.0

Этикетки, ценники Платформа 1С v8.3 Управляемые формы 1С:Розница 2 1С:Управление нашей фирмой 1.6 Платные (руб)

Встроенная в конфигурации Розница 2.3 и УНФ 1.6 подсистема печати ценников по мне слишком неповоротлива и с усилиями поддается тонкой настройке, решил с нуля написать свою универсальную печать ценников для этих конфигураций.

2000 руб.

04.11.2019    28136    113    87    

52

Внешняя компонента для сканирования (замена TWAIN-компоненты БСП) (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

2400 руб.

12.05.2020    26244    131    99    

83

Внешняя компонента для подключения 1С к телефонии Asterisk

Разработка внешних компонент Телефония, SIP Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    44977    117    64    

60

Внешняя компонента печати PDF (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет печатать PDF файлы непосредственно из 1С, не используя при этом сторонних программ. Прекрасно работает на сервере, тонком клиенте и веб-клиенте. Основана на проекте PDFium из состава проекта Chromium/Chrome

1500 руб.

17.09.2018    35081    104    123    

111

Мастер создания внешних компонент 1С (технология COM) для DELPHI 6/7/8/2005/2006/2007/2008/2010/XE/XE2/XE3

Разработка внешних компонент Платформа 1С v8.3 Платные (руб)

Средство для сверхбыстрой разработки внешних компонент 1С:Предприятия 7.7 и 8 по технологии COM на всех версиях DELPHI, начиная с 6.

2000 руб.

28.03.2013    54000    35    14    

68

QR-код с логотипом компании (обычная и управляемая форма)

Разработка внешних компонент Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Как известно, стремление сделать свою рекламную продукцию запоминающейся и выделяющейся — верный путь к успеху. Сегодня, мы поговорим с вами о том, что можно сделать с обычным черно-белым QR-кодом, чтобы он стал более живым и привлекательным. Если вам не терпится попробовать сделать QR-код с логотипом компании, то эта обработка для вас!

2400 руб.

22.06.2016    30840    4    4    

8
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. host_kms 125 06.05.18 14:54 Сейчас в теме
Выдает ошибку, вроде все по инструкции сделал
	
    МояОбработка=Новый COMОбъект("Component1c.MyClassComponent");
    МояОбработка.PrinterName="PP8000";
    МояОбработка.FileName= "D:\file.pdf";
    МояОбработка.PaperHight=100;
    МояОбработка.PaperWight=80;
    Ответ=МояОбработка.PrintPDF();
Прикрепленные файлы:
2. evgeny43 32 07.05.18 09:46 Сейчас в теме
(1) Если все сделано по инструкции, но не работает - то мне известна только 1 причина , из за которой может пойти не так .
в моем случае сервер 1с у меня работает от системной записи , если у вас это не так, то необходимо дать доступ вашей учетной записи виндовс, под которой работает сервер 1с до компоненты. (п.с на некоторых пк адекватно регистрируется компонента без "/codebase", а на некоторых с.. , попробуйте оба варианта).
тут есть 2 варианта :
1) в реестре пробежаться по всем записям сделанным компонентой и вами ( щелкать по ним правой кнопкой мыши , и выбирать меню разрешить доступ и т.д)
2) можно дать учетной записи доступ ко всем компонентам на пк .

в разделе Component Services/Computers на My Computer клик правой кнопкой, Свойства (Properties)
закладка Безопасность COM (COM Security)
в разделе Права доступа (Access Permissions) нажать Изменить настройки по умолчанию... (Edit Default...), в открывшемся окне добавить для пользователя, под которым запускается служба SQL Server, права Локальный доступ (Local Access)
в разделе Разрешения на запуск и активацию (Launch and Activation Permissions) нажать Изменить настройки по умолчанию... (Edit Default...), в открывшемся окне добавить для пользователя, под которым запускается служба SQL Server, права Локальный запуск, Локальная активация (Local Launch, Local Activation)



Component Services--- служба компонент "Панель управления\Все элементы панели управления\Администрирование\Службы компонентов".
И не забудьте дать доступ учетной записи 1с , до физического нахождения ком компоненты ( т.е то место куда вы ее скопировали )


P.S "/codebase"
до перерегистрации компоненты, не забудьте почистить реестр от ее остатков в ручном режиме, в противном случае есть большая вероятность, что перерегистрация не поможет.
3. D@rkM@ster 11.03.19 10:11 Сейчас в теме
Добрый день, установил компоненту на сервер, проверил работоспособность через внешнюю обработку, все отлично печатало (нужно было реализовать печать SSCC штрихкода для склада WMS). В конфигурацию ничего добавлять не стал, т.к. впереди были выходные.
Но как не печально это не помогло, ночью позвонили со склада, сказали что 1с не доступна. Попробовали подключиться удаленно, сервер не отвечал... Пришлось вызывать системного администратора, у него тоже ничего не получилось сделать на месте, сервер просто при загрузке показывал черный экран и на этом все. В итоге после долгих попыток что-то придумать, пришлось восстанавливать сервер из бэкапа. К сожалению логов после восстановления из бэкапа не осталось.
Можете сделать какое-нибудь предположение почему такое могло произойти и с чем могло быть связано ?
4. evgeny43 32 13.03.19 14:14 Сейчас в теме
(3)
Здравствуйте. Честно говоря без логов ни чего сказать не могу.
Однако с обработкой скорее всего не связано, т.к у меня так же все установленно для печати с ТСД на принтер этикеток через сервер 1с. Работаем уже 1.5 года на ней . Единственное различие - com соединение создается в общем модуле, а не в обработке.

вот код в общем модуле для анализа :
	//// Печать через HP принтер этикеток с рулоном 10 на 5 см ( 10 ширина , 5 высота) 	
	КомпонентШК=Неопределено;
	ОбработкаШК=Обработки.итПечатьПроизвольногоШтрихкода.Создать();
	ОбработкаШК.ПодключитьКомпоненту(КомпонентШК);
	Если КомпонентШК=Неопределено тогда
		Сообщить("Нет компоненты штрихкода");
		Возврат 
	КонецЕсли;
	КомпонентШК.ТипКода=4;
	КомпонентШК.ЗначениеКода=ИдентификаторУпаковки;
	КомпонентШК.Высота=110;
	КомпонентШК.Ширина=400;
	ОбработкаШК.ПроверкаКартинкиПоМинимальнымПараметрам(КомпонентШК);
	Картинка=КомпонентШК.ПолучитьШтрихкод();
	Картинка=новый Картинка(Картинка);
	ВременныйФайл = ПолучитьИмяВременногоФайла("Jpg");
	Картинка.Записать(ВременныйФайл);
	ComОбработкаПечати=Новый COMОбъект("Component1c.MyClassComponent");
	ComОбработкаПечати.PrinterName=Принтер;
	ComОбработкаПечати.FileName=ВременныйФайл;
	ComОбработкаПечати.LeftField=0;
	ComОбработкаПечати.RightField=0;
	ComОбработкаПечати.UpField=0;
	ComОбработкаПечати.DownField=0;
	ComОбработкаПечати.PaperHight=197;
	ComОбработкаПечати.PaperWight=404;
	ComОбработкаПечати.PixelJpgX=0;
	ComОбработкаПечати.PixelJpgY=0;
	
	Ответ=ComОбработкаПечати.PrintJPG();
	УдалитьФайлы(ВременныйФайл);
Показать
5. isstorm 5 03.07.20 13:39 Сейчас в теме
Добрый день.
Скачал обработку, зарегистрировал. Пробую на внешней обработке, файловая база.
Обработка проходит, ответ="ОК", но печати на принтере не происходит. И ошибки тоже никакой нет
6. isstorm 5 03.07.20 14:23 Сейчас в теме
Документ даже появляется в очереди принтера, но принтер не хочет его печатать. при этом тот же самый документ если открыть в adobe, всё ок, печатается без проблем
7. evgeny43 32 03.07.20 17:09 Сейчас в теме
(6)необходимо смотреть конкретный случай, в данной разработке я использовал готовую библиотеку, и просто сделал для нее обертку под 1с.
Давно уже было и всего не помню, у нас работает, такой проблемы не возникало . Скорее всего это связано либо с библиотекой ос , попробуйте поставить пакеты с ++ и дот нет , либо с драйвером принтера. Разочек у нас была проблема с настройками сервера, но я в это не лез, с эти разбирались админы.
8. evgeny43 32 03.07.20 18:02 Сейчас в теме
(6)возможно если время появится в дальнейшем, попробую Native компоненту сделать на с++ библиотеке , мб она вам поможет, но это в планах.
9. user853074 24.09.20 17:56 Сейчас в теме
Может кто-то сталкивался, не получается запустить ДЛЛ, если 1С 64-bit. На версии 32-bit, все хорошо?
10. evgeny43 32 05.10.20 09:12 Сейчас в теме
(9) Вы регистрацию в реестре на сервере делали?

Работа с реестром----
1. создаем раздел с именем "{69EE0677-884A-4eeb-A3BD-D407844C0C70}" в ветке HKEY_CLASSES_ROOT\wow6432node\appid. Для этого раздела создаем строковое свойство "DllSurrogate" с пустым значением.
2. Находим HKEY_CLASSES_ROOT\wow6432node\CLSID\{69EE0677-884A-4eeb-A3BD-D407844C0C70} и добавляем строковое свойство "AppID" со значением "{69EE0677-884A-4eeb-A3BD-D407844C0C70}".

где
{69EE0677-884A-4eeb-A3BD-D407844C0C70} гуид приложения
11. user853074 21.10.20 13:10 Сейчас в теме
(10)
Да спасибо, печатает.
Но возник вопрос, как мне подобрать параметры, что бы печать происходила на целый лист. К примеру у меня размер листа 98*150, и мне нужно что бы с таким же размером вывелась печатная форма. Могу ли установить что бы печаталось на весь размер бумаги?
12. user853074 22.10.20 09:10 Сейчас в теме
(11)

Не правильно выразил мысль. Когда я пытаюсь установить размер через:
МояОбработка.PaperHight=197;
МояОбработка.PaperWight=404;
То после печати ПДФ, слетают настройки принтера и пишет сообщение "Неправельный размер бумаги"
13. evgeny43 32 22.10.20 09:49 Сейчас в теме
(12)Честно говоря давно писал, сейчас не помню, но для управления размером бумаги я использовал типовую библиотеку виндовс , наверное в этом направлении надо копать , позже посмотрю мб получиться сделать натив компоненту, там постараюсь исправить недочеты.
14. dekson 29.11.21 18:44 Сейчас в теме
Есть интересное наблюдение. Есть 2 файла pdf
1 печатается нормально, а второй 2 страничный печатается без пробелов.
15. StasX 24.08.22 09:46 Сейчас в теме
Добрый день.

Подскажите, а есть ли возможность посылать код принтеру на обрезку этикетки?
Сейчас все этикетки печатаются без обрезки, бесконечной лентой.
16. evgeny43 32 25.08.22 12:09 Сейчас в теме
(15) Добрый день в компоненте такой возможности нет, но для своих принтеров я делал настройки на них самих. т.к для печати используется стандартный драйвер виндовс то он принимает настройки принтера на сервере.
17. StasX 25.08.22 14:07 Сейчас в теме
(16) Да, уже разобрался, решается настройкой драйвера. Обрезание настроил после выполнения задания, а не после страницы. А если надо напечатать несколько страниц не обрезая, помещаю в один файл pdf несколько страниц, а не по отдельности.
18. NikolaGri 03.10.22 13:26 Сейчас в теме
Доброго времени суток. Не могу создать объект из ДЛЛ. клас не зарегистрирован
1. Правильно ли я зарегистрировал вместо "Framework\v2.0.50727\RegAsm.exe" у меня "Framework\v4.0.30319\RegAsm.exe"?
2. Как определить гуид своего приложения? из строки "где
{69EE0677-884A-4eeb-A3BD-D407844C0C70} гуид приложения"
19. evgeny43 32 04.10.22 10:39 Сейчас в теме
(18)ГУИД жестко задан, у вас такой же будет. Нужен именно .net указанный в описании , если у вас его нет необходимо установить, полной преемственности в .net нет.
20. NikolaGri 05.10.22 06:23 Сейчас в теме
(19) Доброго времени суток. А будет ли работать на .net 3.5 ? он как бы вроде включает в себя все предыдущие.
Оставьте свое сообщение