Имя: Пароль:
1C
 
Как получить список ИМЕН принтеров, которые доступны на компе?
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-ки и того просче будет, тут еще и управляем как в системной папке "Принтеры"...(удобно под терминалом, без рабочего стола)
...
Но и это далеко не последний вариант :)