1с напечатать на сервере

Обновлено: 08.07.2024

Вся инструкция по работе в архиве с библиотекой. Ограничение по 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 - класс реализиующий функциональность интерфейса;

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

Работа с реестром----
1. создаем раздел с именем "" в ветке HKEY_CLASSES_ROOT\wow6432node\appid. Для этого раздела создаем строковое свойство "DllSurrogate" с пустым значением.
2. Находим HKEY_CLASSES_ROOT\wow6432node\CLSID\ и добавляем строковое свойство "AppID" со значением "".


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

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

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

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

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

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

так что, печать с сервера пошла?
какие образом печатаешь в этом случае?

еще как вариант:
сохраняй результат печати в файл, а потом батником печатай.
например батник, который будет печатать все файлы из указанной папки, а в конце удалять их, такое вроде пишеться.

1. получаете печатную форму на сервере
2. сохраняете как пдф
3. через командную строку отправляете пдф на печать
4. профит (4) spezc, команду в студию.
Пробовал, скачал API Acrobat Reader - не катит.
см. 1 пост:
- печать через Adobe Reader () (печатная форма сохранена в pdf) – «Новый COMОбъект("AcroExch.AVDoc")…» (проверял и на объектах "AcroExch.App", "AcroExch.AVDoc.1" – везде не верно указан класс), но не прокатывает, где-то прочитал, что нужна версия Prof как минимум.
Хотя сейчас только пришла идея - использовать Foxit Reader. (6) Rokstedi, вроде как нашел решение.
Пробовал вызывать Adobe Reader с параметром, но открывался документ, а затем шла печать:
"C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" /h /t "G:\Test.pdf" "Microsoft XPS Document Writer".
Решил проверить с Foxit Reader, вроде как катит (ничего не открывается, сразу идет печать), но еще не проверял работу в фоновом задании:
"C:\Program Files (x86)\Foxit Software\Foxit Reader\Foxit Reader.exe" /t "G:\Test.pdf" "Microsoft XPS Document Writer".
Буду проверять на выходных. (7) Aero, и как проверка? У меня в серверном варианте не работает. Видно что процесс Foxit запустился, но печать не происходит.
Если взять ту же строку запуска и открыть под обычным пользователем через cmd - то печатает. (7) понимаю что тема древняя, но все же. нашли решение для печати из 1С на сервере?

(9) Добрый день.
Как сделал - под кассиром запускается дополнительный сеанс, в нем открывается форма с обработчиком ожидания. Процедура из обработчика ожидания проверяет, есть ли что-нибудь на печать (у меня данные хранятся в регистре сведений), если есть - печатает и очищает регистр сведений. Т.к. доп. сеанс запускается на клиенте и интерактивно, то проблем с печатью нет.

Ниже часть кода:

Саму обработку "ОбработкаЗаданийНаПечать" не даю, она заточена под мою архитектуру. Если надо, могу дать. В этой обработке весь код по проверке данных к печати, и сама печать. При печати создаются документы, печатные формы которых и печатаются.

Вся инструкция по работе в архиве с библиотекой. Ограничение по 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 - класс реализиующий функциональность интерфейса;

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

Работа с реестром----
1. создаем раздел с именем "" в ветке HKEY_CLASSES_ROOT\wow6432node\appid. Для этого раздела создаем строковое свойство "DllSurrogate" с пустым значением.
2. Находим HKEY_CLASSES_ROOT\wow6432node\CLSID\ и добавляем строковое свойство "AppID" со значением "".


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

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

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

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

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

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

Сегодня я бы хотел поделиться своим опытом устранения проблем печати на терминальном сервере Microsoft.

Подробности под катом.

Вместо Intro

Наверняка, почти каждый системный администратор, работающий с Windows и, в частности, с терминальным сервером, сталкивался с проблемами печати.
Разрывается телефон, у всех одна и та же проблема: «Нажимаю на печать — ничего не происходит!». Идем смотреть логи и видим следующую картину:

image

Причины и решения

Итак, из-за чего может происходить подобная ситуация? Большую часть подобных ситуаций вызывают установленные на сервере драйверы.

  • Необходимо помнить, что драйверы у клиентов и на сервере должны быть идентичны
  • Убедитесь, что включена изоляция драйверов
  • Удалите все драйвера на сервере и попробуйте использовать TS Easy Print
  • Попробуйте решения сторонних компаний

А теперь пройдемся подробнее по всем пунктам. Для начала установим на наш терминальный сервер роль «Службы печати и документов».

image

Это позволит нам удобно управлять драйверами и принтерами, установленными в системе.

Идентичные драйвера

Думаю, тут особо не о чем рассказывать. Стоит помнить, что драйвера необходимо брать с официальных страниц изготовителя принтера. Так же еще один момент — стабильнее всего ведут себя PCL5. Если есть возможность выбора между PCL5 и PCL6 — стоит установить PCL5 (соответственно, серверу и клиенту).

Изоляция драйверов

В Windows 2008 появилась замечательная возможность изоляции драйверов принтера. Теперь драйвер принтера подгружается не Spoolsv.exe а специальным процессом PrintIsolationHost.exe. При «вылетании» драйвера принтера «слетает» только один экземпляр PrintIsolationHost.exe, а сама служба «Диспетчера печати» остается работоспособной, что, как понимаете, весьма влияет на настроение пользователей ;)

Чтобы включить данную возможность, нам необходимо открыть редактор локальной групповой политики (gpedit.msc) и пройти следующим путем: «Параметры компьютера -> Административные шаблоны -> Принтеры». Находим и включаем следующие пункты:

  • Выполнить драйверы принтеров в изолированных процессах
  • Переопределить параметр совместимости выполнения драйвера печати, назначенный драйвером печати

image

TS Easy Print

Видимо, вняв наконец стенаниям системных администраторов, компания Microsoft решила что-то сделать с необходимостью ставить зоопарк драйверов на терминальный сервер и падающим из-за этого spoolsv.exe. В итоге, на свет родилась технология TS Easy Print. Ключевой особенностью является, то, что больше нам не нужно устанавливать на сервер драйвера для каждого принтера — вместо этого используется унифицированный драйвер Remote Desktop Easy Print, соответственно, мы уходим от проблемы падающего спулера — ведь все операции с печатью выполняются на компьютере клиента.
Для того, чтобы явно определить, что мы хотим использовать на терминальном сервере TS Easy Print, необходимо пройти опять же в редактор локальной групповой политики (gpedit.msc) по следующему пути: «Параметры компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Перенаправление принтеров». Нас интересуют следующие пункты, которые надо включить:

  • Использовать в первую очередь драйвер принтера Easy Print удаленного рабочего стола
  • Перенаправлять только используемый по умолчанию принтер клиента

image

Далее, необходимо очистить наш сервер от лишних драйверов принтеров. Это можно сделать в менеджере роли «Службы печати и документов».
Внимательно удаляйте драйвера! Необходимо оставить в живых такие вещи, как «Remote Desktop Easy Print» и «Microsoft XPS Document Writer». Именно они и отвечают за передачу печати на клиента.

Решения сторонних компаний

Избавиться от проблемы падающего спулера призваны такое ПО как, например, ScrewDrivers (сайт). Оно предоставляет клиент-серверную архитектуру.
Сервер ScrewDrivers — это компонент, который необходимо установить на серверы, на которых планируется использовать печать в терминальном сеансе. Клиент ScrewDrivers должен быть установлен на рабочих станциях. Именно этот компонент позволяет создать на терминальном сервере виртуальные принтеры, которые соответствуют локальным принтерам пользователя.
В целом, напоминает Easy Print, но не бесплатно (впрочем, есть лекарства ;).

Приветствую. Есть вебсервис на 1С. Печать с клиентских приложений 1С работает. Хочется работать с 1С через soap. В том числе чтобы работала печать.

Все работает кроме печати. В гугле по запросу "печать с 1С" скудная информация.

Как можно отправлять на печать с сервера 1С документа?

В печати ничего магического нет - все довольно просто.
Ваша главная проблема в том, что вы сами не знаете чего хотите!

Если у вас есть какая-то странная идея использовать сервер 1С как сервер печати, то вам стоит сделать новый вебсервис, который на вход получает двоичные данные документа для печати, тип документа (что бы знать чем его распечатать) и вторичные настройки (количество экземпляров, ориентация и пр.). Веб-сервис получает двоичные данные, записывает их во временный файл и натравливает на него какую-то программу печати с указанием параметров печати.

Очень странное поведение. Не проще ли сделать VPN на сетевой принтер и печатать напрямую?

"В обработчике веб-сервиса на стороне 1С находите по переданной информации документ и вызываете функцию его печати"

А про какую функцию печати Вы ведете речь, такую, чтобы ее можно было запустить на сервере? Все в итоге упрется в функцию Напечатать, которая выполняется на клиенте.

Все упирается не в функцию "Напечатать", а в ваш кругозор!

Замечание №1. В типовых конфигурациях функция печати имеет одним из своих параметров свойство "непосредственная печать", которое посылает печатный документ на принтер минуя промежуточный предпоказ на клиенте.

Замечание №2. В платформе кроме работы с внешними компонентами еще со времен 7.7 есть запуск внешних приложений операционной системы, которые умеют делать ВСЕ и даже печатать :)

По поводу Замечания 1.
Как Ваше замечание коррелирует с поставленной задачей? Очень радует конечно тот факт, что Вы знакомы с отдельным функционалом некоторых типовых решений. Но зачем приводить функционал, который не связан с поднятой проблемой?
Вы пишете: ". которое посылает печатный документ на принтер минуя промежуточный предпоказ на клиенте"
- это к чему?
На самом деле, если бы Вы посмотрели в код, то увидели бы, что все типовые процедуры в итоге скармливают полученный табличный документ процедуре "Напечатать", которая выполняется только на клиенте. Буду рад, если Вы сможете расширить мой кругозор примером, опровергающим мое утверждение.
По второму замечанию.
Что Вам даст запуск внешних приложений, если на руках у вас табличный документ 1С?
Вы бы конечно могли предложить вариант преобразования в pdf и выводом полученного документа внешними приложениями или вариант запуска через командную строку клиентской сессии 1С и печати из под нее документа. Но Вы этого упорно не делаете. Не вижу пока никакого смысла в Ваших ответах по данному вопросу. У вас есть пример внешней компоненты, которая реализует требуемый функционал? Можете ли Вы реализовать данную компоненту (возможно у вас смогут приобрести)? Был ли у вас какой-то похожий опыт. Это была бы конкретика.
А пока Вы демонстрируете лишь весьма завышенную самооценку и нежелание услышать собеседников.

1) Никакой поставленной задачи в природе не существует. Есть каша в голове вопрошающего и я надеюсь, что krekerov смог понять расплывчатость своего вопроса и сделал правильные выводы.

2) С типовыми решениями не работаю уже больше двух лет. Но ранее при использовании встроенного функционала не сталкивался с проблемами клиентской стороны. Тут все ограничено прямотой рук и их местонахождением.

3) ">>Вы бы конечно могли предложить вариант преобразования в pdf и выводом полученного документа внешними приложениями или вариант запуска через командную строку клиентской сессии 1С и печати из под нее документа. Но Вы этого упорно не делаете. "

- это было мое первое предложение в ответе. Но я предлагал не зацикливаться на PDF. Ведь еще есть docx, odt и прочие форматы, интересность которых варьируется от операционной системы и установленного программного обеспечения.

4) ">> А пока Вы демонстрируете лишь весьма завышенную самооценку и нежелание услышать собеседников."

- Какого собеседника. krekerov возможно уже решил свои проблемы и этот вопрос на Тостере с моим единственным комментарием висит для демонстрации того, как все легко и непринужденно реализуется даже без наличия сертифицированных специалистов под рукой. Поскольку krekerov не отзывается, то беседа давно закрыта.

5) ">> Буду рад, если Вы сможете расширить мой кругозор примером, опровергающим мое утверждение."

- За бесплатно я консультирую только в двух случаях: "интересный опыт лично для меня" и "желание бескорыстно помочь человеку, к которому я иррационально испытал симпатию".

Для вашего конкретного случая мы можем согласовать стоимость моих консалтинговых услуг через личку. При чем в вашем случае я буду приниматься за работу при условии полной предоплаты. Но в любом случае Вам для общения со мной придется сдуть ваше чрезмерно раздутое Эго и засунуть настроения "все вокруг мне должны"/"все вокруг гандоны, один я вменяемый" сами догадайтесь в какое место.

Читайте также: