COM-соединение с принтером. Непосредственная быстрая печать с выбором принтера не по умолчанию (1C: v8: Программисту: COM-соединение со службой Microsoft WMI, ) — 1C-h
 

COM-соединение с принтером. Непосредственная быстрая печать с выбором принтера не по умолчанию (1C: v8: Программисту: COM-соединение со службой Microsoft WMI, )

3

Вопрос Выбор принтера для быстрой непосредственной печати — как организовать в 1С:Предприятии. COM-соединение со службой WMI
Ответ Обычно в 1С:Предприятии последовательность действий при печати документов бывает в двух вариантах:
Вариант 1 – жмем на кнопку «печать», и на принтере сразу «вылезает» лист с распечатанным текстом.
Вариант 2 – жмем на кнопку «печать», на экране компьютера появляется форма предпросмотра, идем в меню «Файл – Печать», открывается стандартное диалоговое окно Windows выбора принтера, выбираем принтер (и при желании его настройки), жмем на кнопку «Печать» и после этого уже на принтере «вылезает» лист с распечатанным текстом.

Ниже будет показано, как реализовать еще один вариант печати:
Вариант 3 — жмем на кнопку «печать», открывается наше собственное окошко выбора принтера, выбираем принтер (или предпросмотр) – жмем «ОК», документ либо сразу печатается, либо открывается окно предпросмотра.
Т.е. в этом нашем третьем варианте пользователь сам «на лету» решает, хочет ли он посмотреть этот конкретный экземпляр перед печатью.

Для реализации воспользуемся СОМ-соединением со службой WMI. (Краткая справка: WMI — Windows Management Instrumentarium – это служба Microsoft, позволяющая писать скрипты, управляющие непосредственно самой операционной системой, системными устройствами, реестром, файловой системой и т.п.*)
Отметим, что на само по себе СОМ-соединение со службой WMI уходит несколько секунд, поэтому этот метод все же не так уж удобен для торопливых пользователей.

	ТабДокумент = Новый ТабличныйДокумент;
	// определяем содержимое печатной формы:
	//...
	// открываем СОМ-соединение с WMI:
	Локатор = Новый COMОбъект("WbemScripting.SWbemLocator");
	// собственно метод ConnectServer() позволяет подключиться к службе WMI:
	СлужбаWMI = Локатор.ConnectServer();
	// Переменная для списка принтеров в системе (метод InstancesOf  предназначен для получения коллекции экземпляров указанного в скобках класса):
	ПринтерыВСистеме = СлужбаWMI.InstancesOf("Win32_Printer");
	// список принтеров будем помещать в список значений:
	СписокПринтеров = Новый СписокЗначений;
	// заполним список принтеров, перебирая в цикле полученную коллекцию:
	Для Каждого Принтер Из ПринтерыВСистеме Цикл
		СписокПринтеров.Добавить(Принтер.Name);
		Если Принтер.Default Тогда
			// принтер, установленный на данном компьютере «по умолчанию», запомним сразу:
			ТекСтрока = СписокПринтеров[СписокПринтеров.Количество()-1];
		КонецЕсли;
	КонецЦикла;

	// добавим в полученный список принтеров вариант предварительного просмотра на экране:
	СписокПринтеров.Добавить("На экран (Предварительный просмотр)");

	// побуждаем пользователя выбрать принтер:
	ИмяПринтера = СписокПринтеров.ВыбратьЭлемент("Принетр для Печати",ТекСтрока);

	// в зависмости от выбранного значения, либо выполним непосредственную печать, либо на экран:
	Если НЕ ИмяПринтера = Неопределено Тогда
		Если ИмяПринтера.Значение = "На экран (Предварительный просмотр)" Тогда
			ТабДокумент.ИмяПринтера = ТекСтрока.Значение; // предварительный просмотр - значит принтер по умолчанию
			ТабДокумент.Показать("Печатная форма");
		Иначе
			ТабДокумент.ИмяПринтера = ИмяПринтера.Значение; // не предварительный просмотр, значит, принтер выбрали какой-то
			ТабДокумент.Напечатать(Истина);
		КонецЕсли;
	КонецЕсли;

*Справочная табличка объектов библиотеки службы WMI:

Объект Описание
SWbemLocator Используется для установления связи с пространством имен WMI на локальном или удаленном компьютере. В языке 1C v8 – создается с помощью метода Новый COMОбъект(), VBScript с помощью функции CreateObject, в JScript — с помощью конструкции new ActiveXObject, в WSH — с помощью метода CreateObject объекта WScript.
SWbemServices Позволяет выполнять действия над классами и объектами в пространстве имен WMI (создание, получение доступа, изменение и удаление классов или экземпляров классов). В языках VBScript и JScript создается с помощью функции GetObject, в WSH — с помощью метода GetObject объекта WScript
SWbemObjectSet Коллекция объектов SWbemObject, которая может быть получена путем вызова методов других объектов библиотеки поддержки сценариев WMI (например, методов ExecQuery или InstancesOf объекта SWbemservices)
SWbemObject Представляет либо экземпляр управляемого ресурса WMI, либо определение класса WMI. В языках VBScript и JScript создается с помощью функции GetObject, в WSH — с помощью метода GetObject объекта Wscript
SWbemMethodSet Коллекция объектов SWbemMethod. Хранится в свойстве Methods_ соответствующего объекта SWbemObject, не может быть создана в сценарии напрямую с помощью CreateObject или GetObject
SWbemMethod Позволяет получить описание метода объекта WMI. Этот объект не может быть создан в сценарии напрямую с помощью CreateObject или GetObject
SWbemPropertySet Коллекция объектов SWbemProperty. Хранится в свойстве Properties_ соответствующего объекта SWbemObject, не может быть создана в сценарии напрямую с помощью CreateObject или GetObject
SWbemProperty Представляет одно свойство управляемого объекта WMI. Этот объект не может быть создан в сценарии напрямую с помощью CreateObject или GetObject
SWbemQualifierSet Коллекция объектов SWbemQualifier. Хранится в свойстве Qualifiers_ соответствующего объекта SWbemObject, SWbemProperty или SWbemMethod. Эта коллекция не может быть создана в сценарии напрямую с помощью CreateObject или GetObject
SWbemQualifier Представляет либо квалификатор класса или экземпляра класса WMI, либо квалификатор свойства или метода объекта WMI. Этот объект не может быть создан в сценарии напрямую с помощью CreateObject или GetObject
SWbemObjectPath Позволяет построить и проверить путь к объекту WMI. В языке VBScript создается с помощью функции CreateObject, в JScript — с помощью конструкции new ActiveXObject, в WSH — с помощью метода CreateObject объекта WScript
SWbemNamedValueSet Коллекция объектов SWbemNamedValue. В языке VBScript создается с помощью функции CreateObject, в JScript — с помощью конструкции new ActiveXObject, в WSH — с помощью метода CreateObject объекта Wscript
SWbemNamedValue Используется для передачи дополнительной информации при некоторых вызовах WMI. Этот объект не может быть создан в сценарии напрямую с помощью CreateObject или GetObject
SWbemLastError Содержит расширенную информацию о произошедшей ошибке WMI. В языке VBScript создается с помощью функции CreateObject, в JScript — с помощью конструкции new ActiveXObject, в WSH — с помощью метода CreateObject объекта Wscript
SWbemSecurity Позволяет читать или записывать информацию об установках безопасности для определенного объекта WMI. Хранится в свойстве Security_ объектов SWbemLocator, SWbemServices, SWbemObjectSet, SWbemObject, SWbemObjectPath, SWbemLastError, SWbemEventSource
SWbemPrivilegeSet Коллекция объектов SWbemPrivilege. Хранится в свойстве Privileges объекта WbemSecurity
SWbemPrivilege Позволяет установить или удалить привилегию, необходимую для доступа к объекту WMI. Этот объект не может быть создан в сценарии напрямую с помощью CreateObject или GetObject
SWbemEventSource Соответствует событию WMI, которое задается с помощью метода ExecNotificationQuery объекта SWbemServices. Этот объект не может быть создан в сценарии напрямую с помощью CreateObject или GetObject
SWbemSink Используется для получения результатов выполнения асинхронных методов. В языке VBScript создается с помощью функции CreateObject, в JScript — с помощью конструкции new ActiveXObject, в WSH — с помощью метода CreateObject объекта Wscript

3 thoughts on “COM-соединение с принтером. Непосредственная быстрая печать с выбором принтера не по умолчанию (1C: v8: Программисту: COM-соединение со службой Microsoft WMI, )

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Next Post

При создании документа «Реализация товаров и услуг» случайно захватили лишний документ «Собранные товары». В реализации появились лишние строки. Как их убрать? (1С: Управление торговлей)

Ср Ноя 10 , 2010
Вопрос При создании документа «Реализация товаров и услуг» случайно захватили лишний документ «Собранные товары». В реализации появились лишние строки. Как их убрать? Ответ Нужно посмотреть в табличной части документа «Реализация товаров и услуг», по каким документам «Собранные товары» эти строки попали в документ. Для этого откроем групповую обработку, которая находиться […]

You May Like