![]() |
![]() |
![]() |
|
Как получить список ИМЕН принтеров, которые доступны на компе? | ☑ | ||
---|---|---|---|---|
0
Добрый вечер
13.09.06
✎
16:19
|
Надо вывести на печать несколько разных доков, а 1С запоминает последний используемый принтер и если перед этим печатал в PDF никак его не исправить не выдавая Юзеру окно настройки печати, а не хотелось бы.
Может это в 8-ке предусмотрено да я не знаю |
|||
1
megalodon
13.09.06
✎
16:20
|
как нить скриптами из реестра выгребать разве что.
|
|||
2
mrist
13.09.06
✎
16:22
|
Попытка
Locator = Новый COMОбъект("WbemScripting.SWbemLocator"); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; ServicesSet = Locator.ConnectServer("."); ObjectSet = ServicesSet.InstancesOf("Win32_Printer"); СЗ = Новый СписокЗначений; Для каждого Item Из ObjectSet Цикл СЗ.Добавить(Item.Caption, Item.Caption); КонецЦикла; |
|||
3
Добрый вечер
13.09.06
✎
16:28
|
(2) Спасибо! Попробую
|
|||
7
mrist
13.09.06
✎
16:48
|
(6) добавь последний вариант и в КЗ
|
|||
8
smaharbA
13.09.06
✎
16:52
|
//Создадим на форме ТаблицуЗначений "ТЗПринтеры" повесим на нее функцию ДействиеСПринтером(), еще можно кнопку "Обновить" с функцией ПриОткрытии()...
//... Перем Scr,Shell,КоллекцияПринтеров; //******************************************* Процедура ПриОткрытии() ТЗПринтеры.УдалитьСтроки(); Scr.Reset(); Scr.AddObject("o",КоллекцияПринтеров.Items()); e=Scr.eval("new Enumerator(o);"); Пока e.atEnd(0)=0 Цикл ТЗПринтеры.НоваяСтрока(); ТЗПринтеры.ПоУмолчанию = ""; ТЗПринтеры.Имя = e.item(0).Name; ТЗПринтеры.Путь = e.item(0).Path; ТЗПринтеры.Состояние=КоллекцияПринтеров.GetDetailsOf(e.item(0),3); ТЗПринтеры.Документы=КоллекцияПринтеров.GetDetailsOf(e.item(0),1); ТЗПринтеры.Модель=КоллекцияПринтеров.GetDetailsOf(e.item(0),5); ТЗПринтеры.Комментарий=КоллекцияПринтеров.GetDetailsOf(e.item(0),3); ТЗПринтеры.Размещение=КоллекцияПринтеров.GetDetailsOf(e.item(0),4); ТЗПринтеры.Принтер = e.item(0); Verbs=""; Об="s"+ТЗПринтеры.КоличествоСтрок(); Scr.AddObject(Об,e.item(0).verbs()); v=Scr.eval("new Enumerator("+Об+");"); Пока v.atEnd(0)=0 Цикл Verbs=Verbs + v.item(0).name +РазделительСтрок; v.moveNext(0); КонецЦикла; Если (Найти(verbs,"Использовать по умолчанию")=0) и (ТЗПринтеры.КоличествоСтрок()>1) Тогда ТЗПринтеры.ПоУмолчанию = "@@@"; КонецЕсли; e.moveNext(0); КонецЦикла; Форма.ОбработкаОжидания("ПриОткрытии",10); КонецПроцедуры // ПриОткрытии Процедура ДействиеСПринтером() СпДействий=СоздатьОбъект("СписокЗначений"); Об="s"+ТЗПринтеры.НомерСтроки; v=Scr.eval("new Enumerator("+Об+");"); Пока v.atEnd(0)=0 Цикл СпДействий.ДобавитьЗначение(v.item(0),v.item(0).name); v.moveNext(0); КонецЦикла; Действие=""; Если СпДействий.ВыбратьЗначение(Действие,,,,2)=1 Тогда Действие.DoIt(); ПриОткрытии(); КонецЕсли; КонецПроцедуры // ТЗПринтеры.НоваяКолонка("ПоУмолчанию"); ТЗПринтеры.НоваяКолонка("Имя"); ТЗПринтеры.НоваяКолонка("Путь"); ТЗПринтеры.НоваяКолонка("Принтер"); ТЗПринтеры.НоваяКолонка("Состояние"); ТЗПринтеры.НоваяКолонка("Документы"); ТЗПринтеры.НоваяКолонка("Модель"); ТЗПринтеры.НоваяКолонка("Комментарий"); ТЗПринтеры.НоваяКолонка("Размещение"); ТЗПринтеры.УстановитьПараметрыКолонки("ПоУмолчанию",,,,"",3); ТЗПринтеры.УстановитьПараметрыКолонки("Документы",,,,,10); ТЗПринтеры.ВидимостьКолонки("Принтер",0); Scr = CreateObject("MSScriptControl.ScriptControl"); Scr.Language = "javascript"; Scr.Timeout=-1; Shell=СоздатьОбъект("Shell.Application"); КоллекцияПринтеров=Shell.NameSpace("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{2227A280-3AEA-1069-A2DE-08002B30309D}"); ... ... Это 7-ка, для 8-ки и того просче будет, тут еще и управляем как в системной папке "Принтеры"...(удобно под терминалом, без рабочего стола) ... Но и это далеко не последний вариант :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |