Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 00:25

Вызов диалога выбора принтера перед печатью для пакета документов

Автор fokas, 14 дек 2011, 18:32

0 Пользователей и 1 гость просматривают эту тему.

fokas

Есть несколько документов, которые печатаются пачкой, каждый в определенном количестве экземпляров. Каждый документ формируется отдельным табличным документом. Сначала я пробовал создать единственный табличный документ с разных макетов, но тогда летели размеры ячеек. Хоть это и решил, но не полностью, некоторые макеты всё равно сбивали друг друга. По интернету полазил, там тоже варианты через колено, использовать для склейки что нибудь внешнее - Word, Excel...
В задании обязательным требованием было вывести диалог выбора принтера для печати. Нашёл такое решение для формирования списка доступных принтеров:

Функция ПолучитьСписокДоступныхПринтеров()
   
    Список = Новый СписокЗначений;
    #Если Клиент Тогда
        Попытка
            КОМОбъект = Новый COMОбъект("WScript.Network");
            Принтеры = КОМОбъект.EnumPrinterConnections();
            Сч = 0;
            Пока Сч <  Принтеры.Count()-1 Цикл
                Список.Добавить(Принтеры.Item(Сч+1), Принтеры.Item(Сч+1));
                Сч = Сч+2;
            КонецЦикла;
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    #КонецЕсли
    Возврат Список;
   
КонецФункции

Но она находит в локалке левые устройства. Может это беда админов, сетевых драйверов и т.д. В принципе с этим смирились. А мне не нравится :) Стукнуло в голову! Может получится так?

Документ1.Напечатать(РежимИспользованияДиалогаПечати.Использовать);
ВыбранныйПринтер = Документ1.ИмяПринтера;
КоличествоКопийПакетаДокументов = Документ1.КоличествоЭкземпляров;

Документ2.ИмяПринтера = ВыбранныйПринтер;
Документ2.КоличествоЭкземпляров = КоличествоКопийПакетаДокументов;
Документ2.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);

Количество копий я получил, а вот принтер - нет, переменная ВыбранныйПринтер пустая. И хотя печать всё равно происходит, меня отсутствие самого принтера смущает. А вдруг при его отсутствии документы отправляются на принтер по умолчанию? Возможности проверить нет, доступен только один.

Всё ли правильно я делаю?

fokas


Vit1501

А если установить параметр ДиалогПечати в состояние "использовать"?


ТабличныйДокумент (SpreadsheetDocument)
Напечатать (Print)
Синтаксис:

Напечатать(<ДиалогПечати>)
Параметры:

<ДиалогПечати> (необязательный)

Тип: РежимИспользованияДиалогаПечати.
Определяет необходимость показа диалога печати перед печатью.
Значение по умолчанию: НеИспользовать
Описание:

Выводит табличный документ на печать.

Доступность:

Тонкий клиент, веб-клиент, толстый клиент.
Пример:

ТабДок.Напечатать();


fokas

Если установить, перед печатью у тебя появится несколько диалогов. Бардак же

Vit1501

можно поставить счетчик и в первый раз вызывать метод  с параметром ДиалогПечати в состояние "использовать", а потом  в переменную сохранить свойство табличного докуемнта "имяПринтера" и в следующих итерациях цикла использовать уже это имя без диалога

fokas

Vit, я это и делаю. Выше код. И именно с этим проблема. Не выходит получить название принтера. Ладно оно-то всё равно печатает. Но:
1. Не известно, используется ли выбранный принтер. Он в сети сейчас 1. Может ведь просто отправляет на принтер по умолчанию, раз нет имени. Это и интересно
2. Как тогда остановить печать остальных документов, если пользователь откажется от печати? Вроде единственным способом было проверить, было ли передано имя принтера через диалог.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск