Имя: Пароль:
1C
1С v8
Как определить наличие принтера в системе?
0 mzelensky
 
14.12.11
14:32
Доброго времени суток!
!00% где-то уже обсуждалась эта тема и я даже как-то ее видел, но вот найти ,когда понадобилось, не удается.

В общем нужно определить, установлен ли в системе принтер с определенным именем?
1 aleks-id
 
14.12.11
14:35
Функция ЗаполнитьПринтеры()
   Принтеры = Новый СписокЗначений;
   Состояние("Составляется список принтеров. Подождите.");
   Попытка
       Locator = Новый COMОбъект("WbemScripting.SWbemLocator");
       Сервисы = Locator.ConnectServer(".");
       Объекты = Сервисы.InstancesOf("Win32_Printer");
       // Теперь переберем все принтеры системы
       Для Каждого Принтер из Объекты Цикл
           ИмяПринтера = Принтер.Name;
           Пока Найти(ИмяПринтера,"\") > 0 Цикл
               ИмяПринтера = Сред(ИмяПринтера, Найти(ИмяПринтера,"\")+1);
           КонецЦикла;
           ИмяПринтера = СокрЛП(ИмяПринтера);
           Принтеры.Добавить(Принтер.Name,ИмяПринтера);
       КонецЦикла;
   Исключение
   КонецПопытки;
   Состояние();
   Возврат Принтеры;
КонецФункции
2 mzelensky
 
14.12.11
14:48
(1) этот пример я находил...но это ж ДОЛГО!!! Создается ком-объект, получаются все принтеры системы ,а потом методом перебора ищется нужный...ДОЛГО! Тем более там мы получаем весь набор свойств и методов этого объекта, а мне нужно просто "есть" или "нет" такой принтер в системе.
3 Матадор
 
14.12.11
14:53
(2) А ты думаешь если тебе предоставить встроенную функцию 1С с таким функционалом, она будет делать это каким-то другим способом?
4 mzelensky
 
14.12.11
15:00
(3) ну должен же быть способ проще!
5 aleks-id
 
14.12.11
15:11
Объекты = Сервисы.ExecQuery("SELECT Name FROM Win32_Printer WHERE Name LIKE '%HPLJ1110%'");
6 aleks-id
 
14.12.11
15:12
ну и соответственно если хоть чото есть в Объекты - значит принтер есть.
7 aleks-id
 
14.12.11
15:14
Объекты = Сервисы.ExecQuery("SELECT * FROM Win32_Printer Prn WHERE Prn.Name LIKE '%HPLJ1110%'");
это на случай если первый запрос не прокатит
8 aleks-id
 
14.12.11
15:17
тьфу ты
Объекты = Сервисы.ExecQuery("SELECT Prn.Name FROM Win32_Printer Prn WHERE Prn.Name LIKE '%HPLJ1110%'");
9 mzelensky
 
16.12.11
09:34
(5) работать работает, но почему-то на обработку уходит секунд 5.
10 andrewks
 
16.12.11
09:36
(9) а ты открой в проводнике папку Принтеры, и сравни
11 mzelensky
 
16.12.11
09:39
(10) тогда уж быстрее через "исключение" отлавливать! схватывает мгновенно :)
12 MaxS
 
16.12.11
09:40
какой-то типовой метод табличного документа выдаёт ошибку если в системе не установлены принтеры. не помню точнее ))
13 mzelensky
 
16.12.11
09:44
(12) ну я так подозреваю ты про "НаПечать" :)
14 MaxS
 
16.12.11
09:46
(13)  проверка уместится ли документ на листе принтера, что-то в этом роде ;)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший