Имя: Пароль:
1C
 
подскажите кто шарит в WbemScripting.SWbemLocator
0 Waximuss
 
21.10.09
13:20
получаю доступные принтеры...

//////
Locator = Новый COMОбъект("WbemScripting.SWbemLocator");
Сервисы = Locator.ConnectServer(".");
Объекты = Сервисы.InstancesOf("Win32_Printer");
           
Для каждого Принтер из Объекты Цикл
//////

А как получить доступные каждому принтеру размеры бумаги?
1 smaharbA
 
21.10.09
13:22
wmi является самодокументированым, пройдись отладчиком
2 Waximuss
 
21.10.09
13:22
ага, понял куда копать...
3 smaharbA
 
21.10.09
13:32
PaperSizesSupported
PrinterPaperNames
4 smaharbA
 
21.10.09
13:36
для семерки примерно

//*******************************************
Функция Win32_X(Путь="Win32_process",Фильтр="name='1CV7S.EXE'",Компьютер=".",Поля="*")
   Если ПустоеЗначение(Фильтр)=1 Тогда
       Ф="";
   Иначе
       Ф= "Where "+Фильтр;
   КонецЕсли;
   ТЗ=СоздатьОбъект("ТаблицаЗначений");
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.Language="javascript";
   Локатор=СоздатьОбъект("wbemscripting.swbemlocator");
   Сервис=Локатор.ConnectServer(Компьютер,"root\cimv2");
   Коллекция=Сервис.ExecQuery("Select "+Поля+" from "+Путь+" "+Ф);
   Если Коллекция.count=0 Тогда
       ТЗ.НоваяКолонка("Ошибка");
       ТЗ.НоваяСтрока();
       ТЗ.Ошибка="Ненайдены экземпляры Select "+Поля+" from "+Путь+" "+Ф;
       Возврат ТЗ;
   КонецЕсли;
   Скрипт.AddObject("Коллекция",Коллекция);
   Перечисленные=Скрипт.Eval("Перечисленные=new Enumerator(Коллекция)");
   Перечисленные=Скрипт.Eval("new Enumerator(Коллекция)");
   Свойства=Перечисленные.item(0).Properties_;
   Скрипт.AddObject("Свойства",Свойства);
   ПеречисленныеСвойства=Скрипт.Eval("new Enumerator(Свойства)");
   Пока ПеречисленныеСвойства.atEnd(0)=0 Цикл
       Стр=ПеречисленныеСвойства.item(0).name;
       ТЗ.НоваяКолонка(Стр);
       ПеречисленныеСвойства.moveNext(0);
   КонецЦикла;
   Сеть=СоздатьОбъект("Wscript.Network");
   Пользователь=Сеть.UserName;
   Пока Перечисленные.atEnd(0)=0 Цикл
       НС=ТЗ.НоваяСтрока();
       Для к=1 По ТЗ.КоличествоКолонок() Цикл
           Стр=ТЗ.ПолучитьПараметрыКолонки(к);
           Попытка
               Тип=Скрипт.Eval("typeof(Перечисленные.item(0).Properties_.Item('"+Стр+"').Value)");
               Если Тип="object" Тогда
                   СтрЗнач=Скрипт.Eval("(Перечисленные.item(0).Properties_.Item('"+Стр+"').Value).toString()");
               ИначеЕсли Тип="unknown" Тогда    
                   СтрЗнач="";
                   Массив=Скрипт.Eval("new VBArray(Перечисленные.item(0).Properties_.Item('"+Стр+"').Value)");
                   СтрЗнач=Массив.toArray(0).toString(0);
               Иначе
                   СтрЗнач=Перечисленные.item(0).Properties_.Item(Стр).Value;
               КонецЕсли;
               ТЗ.УстановитьЗначение(НС,Стр,СтрЗнач);
           Исключение
           КонецПопытки;
       КонецЦикла;
       Перечисленные.moveNext(0);
   КонецЦикла;
   Возврат ТЗ;
   //Предупреждение(Текст);

КонецФункции

Процедура Сформировать()
   Перем Стр;
   ТЗ=Win32_X("Win32_Printer","name like 'HP Laser%'");
   ТЗ.ВыбратьСтроку();
КонецПроцедуры    // Сформировать
5 Waximuss
 
26.10.09
13:12
один момент не учёл... А как при печати табдока указать размер бумаги-то?) что-то не наблюдаю такого свойства...
6 Waximuss
 
26.10.09
13:39
up
7 smaharbA
 
27.10.09
07:04
(5) через "штатный" вми не установить
Программист всегда исправляет последнюю ошибку.