Версия 2. Управление принтерами внутри 1С

Обработки - Универсальные обработки

Управление принтерами внутри 1С, обычные формы, операционная система - Windows

Нашим операторам необходимо печатать большие объемы и при этом изменять свойства принтера. Когда программа 1С открывалась через RDP, они заходили непосредственно в раздел "Устройства и принтеры". Но при запуске 1С published application такой возможности нет. Пришлось сделать управление принтерами внутри 1С. Используются только стандартные библиотеки и объекты Windows, ничего устанавливать дополнительно и настраивать не нужно

Мне показалось это необычным - решил поделиться.

Выбор принтера можно использовать например в пакетной печати документов.

Комментарии к фото экрана:

  1. Внешний вид обработки.
  2. Выбор принтера происходит с помощью объекта WScript. Открывается список принтеров.
  3. Окно свойств принтера открываем с помощью printui.dll. Результат - стандартное окно свойств.
  4. Окно очереди печати открываем с помощью printui.dll. Результат окно очереди печати.
  5. Для печати на выбранный принтер пробной страницы нужно использовать свойство "ИмяПринтера" табличного документа.
  6. Список доступных свойств принтера из объекта winmgmts.

Если файл не удается скачать второй раз бесплатно - ниже добавил текст процедуры. Переменная ТабСвойств - это табличная часть с колонками Наименование, Значение.

Процедура ПолучитьСвойстваНажатие(Элемент)
	
	ТабСвойств.Очистить();
	
	objWMIService = ПолучитьCOMОбъект ("winmgmts:\\.\root\cimv2");
	colPrinters = objWMIService.ExecQuery("Select * From Win32_Printer Where Name = '"+мПринтер+"'");
	Для Каждого Product ИЗ colPrinters Цикл
		Для Каждого Prop ИЗ Product.Properties_ Цикл
			Стр = ТабСвойств.Добавить();
			Стр.Наименование = Prop.Name;
			Стр.Значение = Prop.Value;
		КонецЦикла;
	КонецЦикла;
	
КонецПроцедуры

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

Наименование Файл Версия Размер
Версия 2. Управление принтерами внутри 1С:
.epf 8,77Kb
28.07.17
18
.epf 8,77Kb 18 Скачать

См. также

Комментарии
1. Ярослав Володимирович (myr4ik07) 106 26.07.17 08:23 Сейчас в теме
На 10-ке список получен, все остальное не канает.
3. Николай Васильев (vasilev2015) 344 26.07.17 09:32 Сейчас в теме
(1) Объясните значение "не канает": "не работает" или "не интересует" ?
4. Ярослав Володимирович (myr4ik07) 106 26.07.17 09:37 Сейчас в теме
(3) не работает, ошибка "Неприпустимі аргументи"
6. Николай Васильев (vasilev2015) 344 26.07.17 09:55 Сейчас в теме
(4) у меня работает на Windows Server 2008 R2 Enterprise, Windows Server 2012 R2 Datacenter. Много пользователей, ежедневно. Проверьте, что служба диспетчера печати запущена. Недопустимые аргументы - это ошибка Windows или ошибка 1С в какой-то строке ?
7. Ярослав Володимирович (myr4ik07) 106 26.07.17 10:13 Сейчас в теме
(6) винда показывает ошибку. spooler запущен, но это не принципиально, я брал обработку из-за инфы как получить список принтеров, все остальное, было бы желание, нашлося б решение.
2. Николай Васильев (vasilev2015) 344 26.07.17 09:13 Сейчас в теме
Коллеги, напишите: что еще нужно добавить в эту обработку ? Идеи есть ?
5. Ярослав Володимирович (myr4ik07) 106 26.07.17 09:40 Сейчас в теме
(2) на мой взгляд что самое ценное это получить список принтеров, т.е. имя принеторв, что бы это имя присвоить при программной печати из 1С. За способ получения списка спасибо, не знал о таком объекте в винде какой получает информацию о принтерах, находил только скриптами поллучения.
9. С К (kraynev-navi) 228 26.07.17 11:49 Сейчас в теме
(2) получить/выбрать лотки бумаги (входящие/исходящие) реализовано?
10. Николай Васильев (vasilev2015) 344 26.07.17 12:00 Сейчас в теме
(9) Если это свойство принтера, то в окне свойств можно.

Еще можно отдельно вывести кнопку очистку очереди, но можно чистить из окна очереди.
12. С К (kraynev-navi) 228 26.07.17 20:12 Сейчас в теме
(10) не скачивал, поэтому не понял сразу. Судя по скриншоту - просто вызов окна свойств без всякого программного взаимодействия на уровне считать/установить? Надеялся как раз на программное взаимодействие.
13. Николай Васильев (vasilev2015) 344 26.07.17 21:18 Сейчас в теме
можно разные темы поднять. Например, сделать табличную часть две колонки имя свойства-значение свойства заполнять ее свойствами принтера например Дуплекс-Истина и потом записывать обратно в принтер. Вам это интереснее будет ?

Только за запись поручиться не смогу: например у меня не всегда отрабатывает SetDefaultPrinter объекта WScript. Это все из-за винды )))
17. С К (kraynev-navi) 228 28.07.17 12:02 Сейчас в теме
(13) изначально поднимал тему: http://forum.infostart.ru/forum28/topic169460/ (первая фраза: без предпросмотра выбрать лоток печати). Интерес остался.
19. Николай Васильев (vasilev2015) 344 28.07.17 12:18 Сейчас в теме
(17) я не думаю, что у меня получится лучше, чем у Вас, но посмотрю. Вчера с удивлением узнал, что бумага в лотках наших принтеров поднимается типа как в лифте. Не пружинами, а именно электроприводами )))
20. Николай Васильев (vasilev2015) 344 28.07.17 14:03 Сейчас в теме
(17) Кстати, выбирать принтеры гораздо легче, чем лотки. Можно печатать четные страницы на одном принтере, нечетные - на другом. Или у Вас тоже огромный объем печати и лотки на электроприводе ?
21. С К (kraynev-navi) 228 28.07.17 14:05 Сейчас в теме
(20) Нет, у нас другая проблема: печать на защищенных носителях. Поэтому брак должен быть минимальным.
22. Николай Васильев (vasilev2015) 344 28.07.17 17:07 Сейчас в теме
(21) Специально для kraynev-navi добавил табличную часть со свойствами.

Предлагаю в 1С не делать установку лотков принтера, а проверять перед печатью установленный лоток. Чтобы не брать на себя ответственность за "защищенные носители"
kraynev-navi; +1 Ответить
24. С К (kraynev-navi) 228 30.07.17 21:29 Сейчас в теме
(22) респект за желание помочь. +
Скачаю новую версию, посмотрю.
8. Николай Васильев (vasilev2015) 344 26.07.17 10:51 Сейчас в теме
Посмотрите еще https://technet.microsoft.com/library/ee176792.aspx
может, не запущена служба, поддерживающая WScript или какие-то настройки безопасности ?

Способ получения принтеров таким образом для 1С встречается с 2005 года. (Больше 10 лет). Все новое - хорошо забытое старое.
11. Виктор Череватенко (buddha667) 26.07.17 16:22 Сейчас в теме
Я решил подобную проблему (в 1с 7.7) таким образом:

//---------------------------------------
Процедура глОткрытьНастройкиПринтеров()
	ЗапуститьПриложение("explorer.exe shell:PrintersFolder");	
КонецПроцедуры


Не так красиво, но просто)
14. Яков Коган (Yashazz) 2138 27.07.17 16:41 Сейчас в теме
15. Николай Васильев (vasilev2015) 344 27.07.17 16:49 Сейчас в теме
(14) Приведите пример аналогичной публикации на infostart, доступной за sm ? )))

Лично мне из всех моих статей больше нравится http://infostart.ru/public/534444/ а остальные - гораздо меньше. Но коллеги оценивают противоположно.
16. Яков Коган (Yashazz) 2138 28.07.17 09:44 Сейчас в теме
(15) А я даже не об ИС говорю. Ещё на ИТлэнде в своё время было. Была книжка, автора не помню, про работу с WSH, AD и всяким таким системным, для 7.7/8.0 ещё. И вот когда она вышла, был прямо шквал разработок на эту тему.
18. Николай Васильев (vasilev2015) 344 28.07.17 12:16 Сейчас в теме
(16) В этом смысле соглашусь с Вами. Об этом же в пункте 8.

Вспомните Екклезиаста

9 Что было, то и будет; и что делалось, то и будет делаться, и нет ничего нового под солнцем.
10 Бывает нечто, о чем говорят: "смотри, вот это новое"; но это было уже в веках, бывших прежде нас.

)))
23. aspirator 23 (aspirator23) 303 29.07.17 13:41 Сейчас в теме
25. С К (kraynev-navi) 228 31.07.17 16:41 Сейчас в теме
Посмотрел обработку - до этих свойств уже добирался ранее, увы, этого мало.
Установка в нашем случае должна быть по любому.
26. Николай Васильев (vasilev2015) 344 31.07.17 17:18 Сейчас в теме
Посмотрите код в отладчике. Там еще есть свойства у com-объекта, но мне они показались малозначимыми. Пожалуй, это все чем могу Вам помочь.
Оставьте свое сообщение