Поиск полного имени принтера по подстроке

Поиски в Интернет помогли решить задачу определения полного имени принтера по подстроке. Такое может потребоваться при печати из терминальной сессии. В настройках пользователя добавляем новый элемент ПринтерПоУмолчанию типа Строка и далее в общем модуле УниверсальныеМеханизмы правим:

Процедура НапечататьДокумент(ПечДокумент, КоличествоЭкземпляров = 1, НаПринтер = Ложь, Заголовок = "", Ссылка = Неопределено, ИсточникМакета = Неопределено, ОткрыватьПечатнуюФорму=Истина) Экспорт

    Если
ПечДокумент = Неопределено тогда
        Возврат;
    КонецЕсли;

   
// Получить необходимое количество копий
   
Если КоличествоЭкземпляров > 0 Тогда
       
ПечДокумент.КоличествоЭкземпляров = КоличествоЭкземпляров;
    КонецЕсли;

   
//am+
   
Если Не ЗначениеЗаполнено(ПечДокумент.ИмяПринтера) Тогда
       
_ИмяПринтераПоУмолчанию = СокрЛП(УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ПринтерПоУмолчанию"));
        Если
ЗначениеЗаполнено(_ИмяПринтераПоУмолчанию) Тогда
           
ПечДокумент.ИмяПринтера = НайтиПолноеИмяПринтераПоПодстроке(_ИмяПринтераПоУмолчанию);
        КонецЕсли;
    КонецЕсли;
   
//am-

    //--- 8< ----------


а вот текст основной функции, в написании которой сильно помог поиск в Интернет, расположим ее в том же общем модуле.


//am+
Функция НайтиПолноеИмяПринтераПоПодстроке(Маска) Экспорт
   
_Маска = СокрЛП(Маска);
   
Locator = Новый COMОбъект("WbemScripting.SWbemLocator");
   
Сервисы = Locator.ConnectServer();
   
Объекты = Сервисы.InstancesOf("Win32_Printer");
    Для каждого
Принтер из Объекты Цикл
        Если
Найти(Принтер.Name,_Маска)<>0 Тогда
            Возврат
Принтер.Name;
        КонецЕсли;
    КонецЦикла;
    Возврат
"";
КонецФункции
//am-

Похожие материалы

Справочники

Документы

Отчеты

Обработки