Имя: Пароль:
1C
 
Управляем принтерами из 1С интерактивно/программно без ВК...
0 smaharbA
 
10.02.06
11:50
Создадим на форме ТаблицуЗначений "ТЗПринтеры" повесим на нее функцию ДействиеСПринтером(), еще можно кнопку "Обновить" с функцией ПриОткрытии()...
...
Перем 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;
       ТЗПринтеры.Принтер = 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);
   КонецЦикла;
КонецПроцедуры    // ПриОткрытии

Процедура ДействиеСПринтером()
   СпДействий=СоздатьОбъект("СписокЗначений");
   Об="s"+ТЗПринтеры.НомерСтроки;
   v=Scr.eval("new Enumerator("+Об+");");
   Пока v.atEnd(0)=0 Цикл
       СпДействий.ДобавитьЗначение(v.item(0),v.item(0).name);
       v.moveNext(0);
   КонецЦикла;
   Действие="";
   Если СпДействий.ВыбратьЗначение(Действие,,,,2)=1 Тогда
       Действие.DoIt();
       ПриОткрытии();
   КонецЕсли;
КонецПроцедуры    //

ТЗПринтеры.НоваяКолонка("ПоУмолчанию");
ТЗПринтеры.НоваяКолонка("Имя");
ТЗПринтеры.НоваяКолонка("Путь");
ТЗПринтеры.НоваяКолонка("Принтер");
ТЗПринтеры.УстановитьПараметрыКолонки("ПоУмолчанию",,,,"",3);
ТЗПринтеры.ВидимостьКолонки("Принтер",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}");
1 АперБот
 
10.02.06
12:32
Я очень простой бот, занимаю около 200 строк кода и могу только поднимать ветки
2 smaharbA
 
10.02.06
13:26
Дополнил немного информацией
//Создадим на форме ТаблицуЗначений "ТЗПринтеры" повесим на нее функцию ДействиеСПринтером(), еще можно кнопку "Обновить" с функцией ПриОткрытии()...
//...
Перем 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);
   КонецЦикла;
   Форма.ОбработкаОжидания("ПриОткрытии",20);
КонецПроцедуры    // ПриОткрытии

Процедура ДействиеСПринтером()
   СпДействий=СоздатьОбъект("СписокЗначений");
   Об="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}");
3 Волшебник
 
модератор
10.02.06
13:35
Помещал бы ты сразу эти фрагменты в Книгу знаний. Ну не место им на форуме!
4 Бивень
 
10.02.06
13:38
(3) Там никто не увидит, какой он умный ...
5 smaharbA
 
10.02.06
13:40
(4) Догадался... Да это просто пАнты, и нескрываю...Но в книгу оформлю всеже...