0. Dimasik2007 408 09.07.09 15:19 Сейчас в теме

Получение списка принтеров

Часто требуется получить список принтеров...

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. Dimasik2007 408 09.07.09 15:19 Сейчас в теме
Примечание. Не самое изящное решение, но вполне работоспособное :)
2. Ёпрст 1036 09.07.09 15:48 Сейчас в теме
а кто будет обновлять текстовый файлик потом ? При добавлении новых/удалении старых/изменения статуса по-умолчанию и т.д и т.п ?
4. Dimasik2007 408 09.07.09 16:03 Сейчас в теме
(2) (3) Так поставьте в процедуру при загрузке 1С, или еще куда-нибудь. Не в этом суть. Прога отрабатывает меньше 1 секунды, так что помещать можно куда угодно.
6. Dimasik2007 408 09.07.09 16:06 Сейчас в теме
(4) Имеется в виду вызов программки.
3. Ёпрст 1036 09.07.09 15:49 Сейчас в теме
>>>(я поставил в автозагрузку

это вообще не катит.. принтёр могут установить в течении дня.
В большой конторе это очень частое явление.



5. Tatitutu 3823 09.07.09 16:06 Сейчас в теме
Песенка не новая , но зато своя (с) И главное работает. +
7. Dimasik2007 408 09.07.09 16:09 Сейчас в теме
(5) Раз разработчики 1С не могут добавить, сделаем сами :)
8. akkvamarin 117 17.07.09 17:31 Сейчас в теме
<Столкнулся с такой проблемой, что при получение данных таким способом заметно "подтормаживание">

Да, так действительно, тормозит, я заметил это давно. Для куска кода вашего пункта 1 ни в коем случае нельзя указывать "Пока i < prn.Count()-1 Цикл" лучше заранее определить общее количество принтеров и использовать эту переменную для цикла "Пока i < ОбщКолВоПринтеров - 1 Цикл", поскольку каждый прогон по циклу система делает запрос на размер коллекции принтеров, что сильно увеличивает время исполнения кода.
Я, например, получаю их в 1С другим способом. Срабатывает моментом:
Сервис = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\" +ИмяКомпьютера() + "\root\cimv2");
ПринтерыВсе = Сервис.ExecQuery("Sel ect * from Win32_Printer");
Для Каждого Принтер из ПринтерыВсе Цикл
Сообщить(Принтер.Name);
КонецЦикла;


anig99; ABudnikov; m.ershov.ru@gmail.com; Lisena_Xitrena; Восьмой; Hadgehogs; xpym-xpym; +7 Ответить
9. Dimasik2007 408 22.07.09 19:51 Сейчас в теме
(8) Спасибо, записал в копилку :). Тем более что сам запрос можно подрезать (вместо * написать только нужные поля, например name и как-там-называется-поле-дефолтного-принтера).
10. CheBurator 3404 21.09.09 23:16 Сейчас в теме
ну и неплохо бы получать для каждого принтера хотя бы статус готов/неготов
12. Dimasik2007 408 23.09.09 21:05 Сейчас в теме
(10) После тестов (будет ли замедление работы) добавлю. Спасибо!
14. CheBurator 3404 23.09.09 21:32 Сейчас в теме
(12) ждемс!!!
если есть возможность обойтись без ВК - то делаем без ВК.
11. CheBurator 3404 21.09.09 23:16 Сейчас в теме
ну и ясен пень - определять (первым в списке ставить?) дефолтный принтер
13. Noy 1064 23.09.09 21:17 Сейчас в теме
для 7.7 можно использовать формекс - там есть "шустрый" метод получитьсписокпринтеров()...
15. oiter 13.12.11 12:46 Сейчас в теме
очень не плохой алгоритм. Проблема была лишь на 64-разрядном сервере предприятия. Не знаю почему, но иногда ругался на создание Com-объекта, в следствии чего программа вываливалась. Победить ошибку так и не удалось. Сом сервис не регистрируется на 64х разрядном сервере
17. kostik_love 279 21.03.17 16:36 Сейчас в теме
&НаКлиенте
Функция ПолучитьМассивПринтеров()
	
	МассивПринтеров = Новый Массив;

	Попытка
		objWMIService = ПолучитьCOMОбъект("winmgmts:\\.\root\CIMV2"); 
	Исключение
		ТекстСообщения = НСтр("ru = 'Список принтеров не доступен!'");
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
		Возврат МассивПринтеров;
	КонецПопытки;
	
	Выборка = objWMIService.ExecQuery("SEL ECT * FR OM Win32_Printer",,48);	
	
	Для Каждого objItem Из Выборка Цикл  
		МассивПринтеров.Добавить(objItem.Caption);
	КонецЦикла;
	
	Возврат МассивПринтеров;
КонецФункции
Показать
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 80 000 руб. до 120 000 руб.
Полный день

Консультант по 1С:Документооборот
Санкт-Петербург
зарплата от 120 000 руб. до 150 000 руб.
Полный день

Программист по 1С:Бухгалтерии
Санкт-Петербург
зарплата от 120 000 руб. до 150 000 руб.
Полный день

Программист по 1С:ЗУП
Санкт-Петербург
зарплата от 120 000 руб. до 150 000 руб.
Полный день

Консультант-аналитик 1С
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день