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С (с функцией наставничества)
Екатеринбург
зарплата от 100 000 руб.
Полный день

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

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

Программист 1С
Тольятти
зарплата от 70 000 руб.
Полный день

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