Печать на выбранный принтер в 1С

Во время реализации проекта столкнулся с задачей печати табличного документа (или что-то другое) на выбранный принтер, чтобы не вызвать постоянно диалог печати. Вот простенький способ реализации.

Для начала нужно записать функцию в модуль формы, объекта или общий модуль, который будет возвращать список доступных в системе на данный момент принтеров. Для 1С нужна только текстовая название принтера. Не помню где я нашел эту функцию, поэтому источники не укажу:

ПолучитьСписокДоступныхПринтеров

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Функция ПолучитьСписокДоступныхПринтеров() Экспорт 
// Принтеры установленные в системе 
Список = Новый СписокЗначений;
#Если Клиент Тогда 
Попытка
КОМОбъект = Новый COMОбъект ("WScript.Network");
Принтеры = КОМОбъект.EnumPrinterConnections(); //возвращает массив, в котором на принтер идет два элемента - порт и локальное имя. 
н = 0;
Пока н < Принтеры.Count()-1 Цикл // соответственно нам нужен каждый второй элемент массива
Список.Добавить(Принтеры.Item(н+1), Принтеры.Item(н+1));
н = н + 2;
КонецЦикла;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
#КонецЕсли 
возврат Список;
КонецФункции

Затем на форме размещаем поле выбора «Принтер». При открытии формы получаем список принтеров и вешаем его на поле выбора.

ПриОткрытии

1
2
3
4
5
Процедура ПриОткрытии() 
СписокПринтеров = ПолучитьСписокДоступныхПринтеров();
 
ЭлементыФормы.Принтер.СписокВыбора = СписокПринтеров;
КонецПроцедуры

Ну и в конце модифицируем процедуру печати

Печать

1
2
3
4
5
Процедура Печать() 
ТабДок = Новый ТабличныйДокумент; //тут ваша функция, которая возвращает заполненный табличный документ
ТабДок.ИмяПринтера = Принтер; //указываем в самом табличном документе, на какой принтер нужно печатать
ТабДок.Напечатать(); //или ваша функция печати
КонецПроцедуры