Друк на вибраний принтер в 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
Процедура Печать() 
ТабДок = Новый ТабличныйДокумент; //тут ваша функция, которая возвращает заполненный табличный документ
ТабДок.ИмяПринтера = Принтер; //указываем в самом табличном документе, на какой принтер нужно печатать
ТабДок.Напечатать(); //или ваша функция печати
КонецПроцедуры