Имя: Пароль:
1C
 
Как получить имя принтера по умолчанию из 1С?
0 victuan1
 
25.06.09
05:46
Как-то на скриптах это делается. Может у кого есть готовый код, чтоб велик не изобретать?
1 skunk
 
25.06.09
06:48
2 victuan1
 
25.06.09
06:51
мне ж для 77 надо
3 Kavar
 
25.06.09
06:53
(2) Разница невелика будет.
4 victuan1
 
25.06.09
06:55
8-ку не знаю, лан, попробую перевести.
5 skunk
 
25.06.09
06:56
пицес программисты пошли


Функция ПолучитьПринтерПоУмолчанию() Экспорт
   
   Скрипт = создатьобъект("MSScriptControl.ScriptControl");
   Скрипт.Language = "vbscript";                
   Скрипт.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");
       
   Возврат СокрЛП(Скрипт.run("GetDefaultPrinter"));
   
КонецФункции
6 smaharbA
 
25.06.09
06:58
Полное управление, как из проводника

//Создадим на форме ТаблицуЗначений "ТЗПринтеры" повесим на нее функцию ДействиеСПринтером(), еще можно кнопку "Обновить" с функцией ПриОткрытии()...

//...

Перем 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),2);
       ТЗПринтеры.Документы=КоллекцияПринтеров.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 victuan1
 
25.06.09
07:01
(5) Да, сделал я уже.
8 victuan1
 
25.06.09
07:01
(6) Это возьмем на заметку.
9 victuan1
 
25.06.09
07:05
(5) Код долго выполняется, секунд 40
Я заметил, что окно вызова принтера в нашей сети выполняется десятки секунд.
С ноября пианю сисадмина, чтоб исправил, а толку нет.
Это невозможно разве исправить?
10 VladZ
 
25.06.09
07:42
(0) а зачем тебе?
11 victuan1
 
25.06.09
07:44
(10) Пишу сценарий пакетной печати документов: часть печати идет на дефолтный для юзера принтер, другая часть раскидывается по принтерам, расположенным на разных складах.
12 victuan1
 
25.06.09
07:44
13 smaharbA
 
25.06.09
08:06
(9) есть 2 быстрых способа
14 victuan1
 
25.06.09
09:05
(13) Ты ж не пит. Говори подробности.
15 victuan1
 
25.06.09
09:59
Что-то фигня получается.
Получаю имя принтера по умолчанию, подсовываю его в ПараметрыСтраницы() последним параметром.
Делаю Напечатать(1).
Если имя принтера по умолчанию короткое (Sclad или Sclad2), то в диалоге выбора принтера оно и показыватся, если имя посложнее //Zal1/ML1210, то в диалоге выбора принтера показывается принтера, на который шла печать в последний раз.
Что за ерунда?
16 FN
 
25.06.09
10:10
(14) в формексе есть метод - он отрабатывает быстрее, но это ВК надо подключать.
Код от smaharbA более универсален.
17 Ёпрст
 
гуру
25.06.09
10:12
(15) Опции перед параметрами страницы пропиши..
18 victuan1
 
25.06.09
10:13
Блин, перезагрузил спулер теперь ф-я ПолучитьПринтерПоУмолчанию выдает пустую строку. Что за н ах.
19 victuan1
 
25.06.09
10:33
Блин, танцы с бубнами...
1) Короче, убрал доступ к принтеру, добавил доступ.
2) Опции стоят, меня имя сохр. опций - не помогло.
3) ставил сокрлп в ПараметрыСтраницы.
Теперь работает. думаю из-за 1)