Имя: Пароль:
1C
1C 7.7
v7: Как программно узнать готовность принтера
0 Яжец
 
26.09.11
13:04
Может кто подскажет?
1 Lepochkin
 
26.09.11
13:08
В смысле воткнут ли он в сеть или посмотреть стоит ли что-нибудь в очереди?
2 Яжец
 
26.09.11
13:43
(1) Хотя бы воткнут ли он в сеть?
3 andrewks
 
26.09.11
14:39
возможно, wmi
погугли
4 ЧеловекДуши
 
26.09.11
14:40
(2)(0)Скажи заказчику, что это невозможно, это с экономит тебе время и нервы на реализацию дальнейших хотелок не вменяемого клиента ;)
5 ЧеловекДуши
 
26.09.11
14:41
(3)А мне кажется, что невозможно, вернее есть ограничения по моделям (драйверов) принтеров.
6 poligraf
 
26.09.11
14:42
(2) ping? :)
7 andrewks
 
26.09.11
14:43
(5) ну, вынь же пишет "готов/не подключен и т.д."
значит, в принципе можно

только непонятно, нафейхоа?
8 Базис
 
naïve
26.09.11
14:46
9 smaharbA
 
26.09.11
14:48
shell.application
10 andrewks
 
26.09.11
14:49
11 ЧеловекДуши
 
26.09.11
14:49
(6)А кто сказал, что принтер сетевой?
12 poligraf
 
26.09.11
14:51
(11) "Хотя бы воткнут ли он в сеть?" - если только электрическая:)

(0) Твои заказчики когда печатают из ворда/экселя и прочих программ когда узнают о готовности принтера?
13 ЧеловекДуши
 
26.09.11
14:55
(12)>>> Твои заказчики когда печатают из ворда/экселя и прочих программ когда узнают о готовности принтера?
А они не узнают, тупо клацкают на печать :)
14 ЧеловекДуши
 
26.09.11
14:56
(10)Спасибо, буду знать :)
15 andrewks
 
26.09.11
14:56
в принципе, если представить массовую отбивку большого кол-ва документов с кучей операторов и принтеров, и автоматическим формированием и печатью всего пакета документов (например, алкоголь, или мед.препараты, когда пакет документов на одну накладную может легко перешагнуть за 20-30 листов), то резон очень даже может быть.
сломался принтер - поток печати автоматически можно перенаправить на другой в соответствии с некоторыми приоритетами
16 smaharbA
 
26.09.11
15:09

Процедура ПриОткрытии()
   Перем Действия,Шел,КоллекцияПринтеров,Это,Темы,Принтер,Стр,Флаг,Сч,Имя;
   Форма.ОбработкаОжидания("");
   Шел=СоздатьОбъект("Shell.Application");
   КоллекцияПринтеров=Шел.NameSpace("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{2227A280-3AEA-1069-A2DE-08002B30309D}");
   ХТМЛ = CreateObject("htmlfile");
   ХТМЛ.Open("text/html");
   ХТМЛ.Write("<script language='javascript'>
   |Новый=function(x,y){return new x(y)}
   |</script>");
   Это=ХТМЛ.documentElement.document.script;
   Темы=Это.Новый(Это.Enumerator,КоллекцияПринтеров.Items());
   Пока Темы.atEnd("")=0 Цикл
       Принтер = Темы.item(0);
       Имя=Принтер.Name;
       Стр=0;
       Если ТЗПринтеры.НайтиЗначение(Имя,Стр,"Имя")=0 Тогда
           Стр=ТЗПринтеры.НоваяСтрока();
       Иначе
           ТЗПринтеры.ПолучитьСтрокуПоНомеру(Стр);
       КонецЕсли;
       ТЗПринтеры.Имя = Имя;
       ТЗПринтеры.Путь = Принтер.Path;
       ТЗПринтеры.Состояние=КоллекцияПринтеров.GetDetailsOf(Принтер,2);
       ТЗПринтеры.Документы=КоллекцияПринтеров.GetDetailsOf(Принтер,1);
       ТЗПринтеры.Модель=КоллекцияПринтеров.GetDetailsOf(Принтер,5);
       ТЗПринтеры.Комментарий=КоллекцияПринтеров.GetDetailsOf(Принтер,3);
       ТЗПринтеры.Размещение=КоллекцияПринтеров.GetDetailsOf(Принтер,4);
       ТЗПринтеры.Принтер = Принтер;
       Флаг="V";
       Действия=Это.Новый(Это.Enumerator,Принтер.Verbs());
       Пока Действия.atEnd("")=0 Цикл
           Если (Найти(Действия.item(0).Name,"Использовать по умолчанию")>0) или (Стр<2) Тогда
               Флаг="";
               Прервать;
           КонецЕсли;
           Действия.moveNext(0);
       КонецЦикла;
       ТЗПринтеры.ПоУмолчанию = Флаг;
       Темы.moveNext(0);
   КонецЦикла;
   Для Сч=-ТЗПринтеры.КоличествоСтрок() По -2 Цикл
       Если ПустоеЗначение(ТЗПринтеры.ПолучитьЗначение(-Сч,"Состояние"))=1 Тогда
           ТЗПринтеры.УдалитьСтроку(-Сч);
       КонецЕсли;
   КонецЦикла;
   Действия=0;Шел=0;КоллекцияПринтеров=0;Это=0;Темы=0;Принтер=0;Стр=0;Флаг=0;Сч=0;
   Форма.ОбработкаОжидания("ПриОткрытии",10);
КонецПроцедуры    // ПриОткрытии


Процедура ДействиеСПринтером()
   Это=ПолучитьОбертку();

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


ТЗПринтеры.НоваяКолонка("ПоУмолчанию");
ТЗПринтеры.НоваяКолонка("Имя");
ТЗПринтеры.НоваяКолонка("Путь");
ТЗПринтеры.НоваяКолонка("Принтер");
ТЗПринтеры.НоваяКолонка("Состояние");
ТЗПринтеры.НоваяКолонка("Документы");
ТЗПринтеры.НоваяКолонка("Модель");
ТЗПринтеры.НоваяКолонка("Комментарий");
ТЗПринтеры.НоваяКолонка("Размещение");
ТЗПринтеры.НоваяКолонка("Порт");
ТЗПринтеры.УстановитьПараметрыКолонки("ПоУмолчанию",,,,"",3);
ТЗПринтеры.УстановитьПараметрыКолонки("Документы",,,,,10);
ТЗПринтеры.ВидимостьКолонки("Принтер",0);
17 andrewks
 
26.09.11
15:09
(16) дело мастера боится :)
18 andrewks
 
26.09.11
15:11
(16) можно вопрос?
а для чего htmlfile? почему бы сразу jscript не замутить?
19 smaharbA
 
26.09.11
15:14
(18) без разницы, хтмлфайл в восьмерке лучче чуствует себя и все (для этого кода в восьмерке конечно не нужно ни то и не другое)
20 Fish
 
26.09.11
15:17
Попытка
 КомандаСистемы("Copy *.* prn"); //Принтер готов
Исключение
//Принтер не готов
КонецПопытки

:)))
21 andrewks
 
26.09.11
15:21
(16) а что за
ПолучитьОбертку()?
22 smaharbA
 
26.09.11
15:37
(21) аа ))
тупой копи-паст )
это вынесена была ХТМЛ в

Функция ПолучитьОбертку(Это="")
   ХТМЛ = CreateObject("htmlfile");
   ХТМЛ.Open("text/html");
   ХТМЛ.Write("<script language='javascript'>
   |var ХТМЛ;
   |Новый=function(x,y){return new x(y)}
   |</script>");
   Док=ХТМЛ.documentElement.document;
   // Внедряем объект в самого себя, для сохранения контекста
   Док.script.ХТМЛ=ХТМЛ;
   Это=Док.script;
   Возврат Док.script;
КонецФункции    // ПолучитьОбертку
23 kittystark
 
26.09.11
17:39
(16) чегой-то не воткнулся, а в условии  Если (Найти(Действия.item(0).Name,"Использовать по умолчанию")>0) или (Стр<2) Тогда

для чего проверка " или (Стр<2)" ?

кстати, туда бы еще добавить "Set as De&fault Printer" для универсальности...
24 Злопчинский
 
26.09.11
19:15
а если принтера подключены через принтсерверы...?
25 smaharbA
 
26.09.11
21:36
(23) это не готовое решение, всегда печатаются только болванки
26 smaharbA
 
26.09.11
21:37
(24) смнп - пример и тут и на кубани
27 andrewks
 
27.09.11
09:10
вдогонку: если usb-принтер в автономном режиме - пишется, что он "готов", даже если его нет в наличии
это надо учитывать
28 kelebro63
 
27.09.11
11:30
телнет 9000-9001 порты
29 smaharbA
 
27.09.11
11:31
(27) проверить все свойства и вербсы