Имя: Пароль:
1C
 
Получить принтер по умолчанию из скрипта.
0 masky
 
03.11.06
12:10
есть скрипт:
On Error Resume Next
Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
If Err.Number <> 0 Then
   WScript.Echo Err.Number & ": " & Err.Description
   WScript.Quit
End If
For Each objPrn In objService.ExecQuery("SELECT * FROM Win32_Printer")
   If objPrn.Attributes And 4 Then
       WScript.Echo objPrn.Name
       Exit For
   End If
Next


как из него получить в переменную 1С этот принтер?
1 VasilyKushnir
 
03.11.06
12:49
Может это натолкнет на мыслю

Процедура Сформировать()
   
   wshNetwork    = createObject("WScript.Network");
   oPrinters        = wshNetwork.EnumPrinterConnections();
   i                        = 0;
   
   Пока i < oPrinters.Count() - 1 Цикл
     Сообщить ("Порт " + oPrinters.Item(i+1));
       i = i + 2;
   КонецЦикла;

КонецПроцедуры

Здесь я определяю все доступные для печати принтера.
2 masky
 
03.11.06
13:07
эт понятно.. но мне к  сожалению надо именно принтер по умолчанию..
3 masky
 
03.11.06
13:40
Процедура ПолучитьПринтерПоУмолчанию()
   
   scrptCtrl=createobject("MSScriptControl.ScriptControl");
   scrptCtrl.language="vbscript";
   scrptCtrl.addcode("
   |Function GetDefaultPrinter()
   |GetDefaultPrinter=vbNullString
   |Set objWMIService=GetObject(""winmgmts:"" _
   |& ""{impersonationLevel=impersonate}!\\.\root\cimv2"")
   |Set colInstalledPrinters=objWMIService.ExecQuery _
   |(""Select * from Win32_Printer"")
   |For Each objPrinter in colInstalledPrinters
   |If objPrinter.Attributes and 4 Then
   |GetDefaultPrinter=objPrinter.Name
   |Exit For
   |End If
   |Next
   |End Function");
   СписокПринтеров.ДобавитьЗначение(scrptCtrl.run("GetDefaultPrinter"));
   
КонецПроцедуры    // ПолучитьПринтерПоУмолчанию
4 Эрнст
 
03.11.06
13:45
(3) процесс WMI работает в асинхронном режиме ?
5 masky
 
03.11.06
13:54
(4)  а хз.. где посмотреть?
6 smaharbA
 
03.11.06
13:57
//*******************************************
Функция ПринтерПоУмолчанию()
    Скрипт=createobject("MSScriptControl.ScriptControl");
    Скрипт.language="javascript";
    Скрипт.TimeOut=-1;
    Локатор=СоздатьОбъект("wbemscripting.swbemlocator");
    Сервис=Локатор.ConnectServer();
    Скрипт.AddObject("Принтеры",Сервис.ExecQuery("Select * from Win32_Printer"));
    Перечисленные=Скрипт.Eval("new Enumerator(Принтеры)");
    Пока Перечисленные.atEnd(0)=0 Цикл
       Если Перечисленные.item(0).Attributes % 8 / 4 = 1 Тогда
           Возврат Перечисленные.item(0).DriverName;
       Иначе
           //Сообщить(""+Перечисленные.item(0).Name+"; "+Перечисленные.item(0).Attributes);
       КонецЕсли;
       Перечисленные.moveNext(0);
    КонецЦикла;
КонецФункции
7 smaharbA
 
03.11.06
13:58
8 masky
 
03.11.06
14:08
(6)(7) спасибо
9 VasilyKushnir
 
03.11.06
14:31
wshPrint = CreateObject("WScript.Shell");
   Prn = wshPrint.RegRead("HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device");
   Сообщить (Prn);

В Prn - принтер по умолчанию (вытаскиваешь все до первой запятой).
10 masky
 
03.11.06
14:36
(9) прав на реестр нету и никто не даст..
11 VasilyKushnir
 
03.11.06
14:37
Так ведь нужно то всего право на чтение.
12 smaharbA
 
03.11.06
14:39
(10) есть на это права
13 VasilyKushnir
 
03.11.06
14:45
Ребята, а можно я свои 5 копеек вставлю - не хочется отдельную тему открывать.
Планируем менять принтера НР1200 (задрали уже). НР1160 дороговат, но с 1С в терминалке очень хорошо дружит. Предлагают НР1018 (у нас в Украине он в 2 раза дешевле НР1160). Кто нибудь может что сказать хорошего об этой железяке? Интерисует работа с 1С под терминалами на 2003 сервере. Локально скорее всего ХР Проф.
14 VasilyKushnir
 
03.11.06
14:50
Кстати,  masky, а скрипты в вопроссе ты не на http://script-coding.info/ взял?
Там же и готовое решение лежит...
15 smaharbA
 
03.11.06
14:50
Это таже "лягушка" как и 1100 только в другой обертке, есть и сетевой вариант, если печатать листов 50-100 в день еще подюжит немного, если до полутыши то хана
16 Рупор2
 
03.11.06
14:51
17 AeDen
 
03.11.06
14:52
(13) ХП - лажа.
18 VasilyKushnir
 
03.11.06
15:03
(15) Спасибо. Значит не подходит - в среднем 250-300 листов в день надо. А что, кроме НР можете хорошее (и не слишком дорогое) присоветовать?