Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Печать Отчета на принтер прграммно
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Constantus
Приветствую, форумчане!

УТ 10.3.20.1, Моби-С 5.5, "ABBYY Ukraine", обычные

Для вывода на экран результата отчета применяется следующий код:

 обработка_печати = Отчеты.ПечатьТоваровИзРейса1.Создать();
обработка_печати.Рейс = Рейс;
обработка_печати.ДатаПечати = Рейс.ДатаДоставки;
обработка_печати.БезСумм = БезСумм;
обработка_печати.ТолькоИтоги = ТолькоИтоги;
            
форма = обработка_печати.ПолучитьФорму();
форма.ЭлементыФормы.Рейс.Доступность = Ложь;
форма.Открыть();


Как вывести Отчет сразу на принтер???
Flexy
Покажите код, который формирует табличный документ в обработке печати.
Constantus
Flexy @ Сегодня, 17:52 необходимо зарегистрироваться для просмотра ссылки ,


Процедура ПриОткрытии()
    // Вставить содержимое обработчика.
    
    для Каждого Вариант из СхемаКомпоновкиДанных.ВариантыНастроек Цикл
        ЭлементыФормы.ВариантОтчета.СписокВыбора.Добавить(Вариант.Имя, Вариант.Представление);    
    КонецЦикла;
    
    Если БезСумм Тогда
        КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.ВариантыНастроек.Найти("БезСумм").Настройки);
    ИначеЕсли ТолькоИтоги Тогда
        КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.ВариантыНастроек.Найти("ТолькоИтоги").Настройки);
    Иначе
        КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.ВариантыНастроек.Найти("Основной").Настройки);
    КонецЕсли;    

    
    Если ЗначениеЗаполнено(Рейс) Тогда
        ПараметрСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Рейс");
        ПараметрСКД.Значение = Рейс;
        ПараметрСКД.Использование = Истина;
    КонецЕсли;
    ТабДок = ЭлементыФормы.Результат;
    ТабДок.КоличествоЭкземпляров = 2;
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    ТабДок.АвтоМасштаб = Истина;
    
        

    Настройки = КомпоновщикНастроек.Настройки;
    
    ПараметрСКД = Настройки.ПараметрыВывода.Элементы.Найти("Заголовок");
    ПараметрСКД.Значение = "Подбор товаров к отгрузке: " + Рейс.Экспедитор.Наименование + " " + Формат(ДатаПечати,"ДЛФ=D");
    ПараметрСКД.Использование = Истина;
    

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки,,Тип("ГенераторМакетаКомпоновкиДанных"));//ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки); //ВнешнийНабор

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.ОтображатьПроцентВывода = Истина;
    ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

КонецПроцедуры

Flexy
Процедура ПриОткрытии() Экспорт
...
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Если ПечатьНаПринтер Тогда
ТабДок.Напечатать();
КонецЕсли;
...


обработка_печати = Отчеты.ПечатьТоваровИзРейса1.Создать();
обработка_печати.Рейс = Рейс;
обработка_печати.ДатаПечати = Рейс.ДатаДоставки;
обработка_печати.БезСумм = БезСумм;
обработка_печати.ТолькоИтоги = ТолькоИтоги;
// Flexy
форма = обработка_печати.ПолучитьФорму();
Режим = РежимДиалогаВопрос.ДаНет;
Ответ = Вопрос("Печатать сразу на принтер?", Режим);
Если Ответ = КодВозвратаДиалога.Да Тогда
обработка_печати.ПечатьНаПринтер = Истина;
Форма.ПриОткрытии();
Возврат;
КонецЕсли;
//-----        

форма.ЭлементыФормы.Рейс.Доступность = Ложь;
форма.Открыть();
Constantus
Flexy @ Сегодня, 17:52 необходимо зарегистрироваться для просмотра ссылки ,


Благодарю за наводку. В Отчете добавил реквизит "НаПринтер". Передал его значение:

обработка_печати.НаПринтер = ПечатьНаПринтер;


В отчете добавил код:

    Если НаПринтер Тогда
        ТабДок.Напечатать();
    КонецЕсли;


Далее при вызове печати изменил код:

             форма = обработка_печати.ПолучитьФорму();

             форма.ЭлементыФормы.Рейс.Доступность = Ложь;
             форма.Открыть();
             Если ПечатьНаПринтер Тогда
                   форма.Закрыть();
             КонецЕсли;


Вроде работает, но на сколько оптимален?
Flexy
Зачем открывать форму?
Сделайте процедуру ПриОткрытии Экспортной.
Процедура ПриОткрытии() Экспорт

И вызывайте из той формы от куда идет вызов обработки:
 обработка_печати.ПечатьНаПринтер = Истина;
Форма.ПриОткрытии(); // тут отработает алгоритм из процедуры "ПриОткрытии" формы обработки печати.
Возврат;
Constantus
Flexy @ Сегодня, 18:02 необходимо зарегистрироваться для просмотра ссылки ,

Почти угадал icon_beer17.gif

Благодарю!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.