Имя: Пароль:
1C
 
Как правильно передавать параметры печати?
0 WerLym
 
20.03.26
20:33
&НаКлиенте
Процедура Ст_ПечатьЛистСогласованияПродолжение(Результат, Параметры) Экспорт

    Если Результат = КодВозвратаДиалога.Отмена Тогда
        Возврат;
    ИначеЕсли Результат = КодВозвратаДиалога.ОК Тогда

        ПараметрыЗаписи = Новый Структура;
        Если Не Записать(ПараметрыЗаписи) Тогда
            Возврат;
        КонецЕсли;

        ПоказатьОповещениеПользователя(
        НСтр("ru = 'Создание:'"), ПолучитьНавигационнуюСсылку(Объект.Ссылка), Строка(Объект.Ссылка),
        БиблиотекаКартинок.Информация32);
    КонецЕсли;

    ПараметрыПечати = Новый Структура();
    ПараметрыПечати.Вставить("Ответственный", Строка(Объект.Ответственный));
    
    МассивДокументов = Новый Массив;
    МассивДокументов.Добавить(Объект.Ссылка);
    УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Справочник.ДокументыПредприятия", "ЛистСогласования",
    МассивДокументов, ЭтаФорма, ПараметрыПечати);

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


// Формирует и выводит на экран печатные формы.
//
// Параметры:
//  ИмяМенеджераПечати - Строка - менеджер печати для печатаемых объектов;
//  ИменаМакетов       - Строка - идентификаторы печатных форм;
//  МассивОбъектов     - ЛюбаяСсылка
//                     - Массив из ЛюбаяСсылка - объекты печати;
//  ВладелецФормы      - ФормаКлиентскогоПриложения - форма, из которой выполняется печать;
//  ПараметрыПечати    - Структура - произвольные параметры для передачи в менеджер печати.
//
// Пример:
//   УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Обработка.ПечатнаяФорма", "СписаниеТоваров", ДокументыНаПечать, ЭтотОбъект);
//
Процедура ВыполнитьКомандуПечати(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ВладелецФормы, ПараметрыПечати = Неопределено) Экспорт
    
    Если Не ПроверитьКоличествоПереданныхОбъектов(МассивОбъектов) Тогда
        Возврат;
    КонецЕсли;
    
    ИмяПараметра = "СтандартныеПодсистемы.Печать.ВыполнитьКомандуПечати";
    СписокПереданныхПараметров = ПараметрыПриложения[ИмяПараметра];
    
    Если СписокПереданныхПараметров = Неопределено Тогда
        СписокПереданныхПараметров = Новый Массив;
        ПараметрыПриложения[ИмяПараметра] = СписокПереданныхПараметров;
    КонецЕсли;
    
    ПараметрыОткрытия = УправлениеПечатьюСлужебныйКлиент.ПараметрыОткрытияФормыПечати();
    ПараметрыОткрытия.ИмяМенеджераПечати = ИмяМенеджераПечати;
    ПараметрыОткрытия.ИменаМакетов = ИменаМакетов;
    ПараметрыОткрытия.ПараметрКоманды = МассивОбъектов;
    ПараметрыОткрытия.ПараметрыПечати = ПараметрыПечати;
    ПараметрыОткрытия.ВладелецФормы = ВладелецФормы;
    
    СписокПереданныхПараметров.Добавить(ПараметрыОткрытия);
    
    ПодключитьОбработчикОжидания("ПродолжитьВыполнениеКомандыПечатиСПереданнымиПараметрами", 0.1, Истина);
    
КонецПроцедуры

как мне правильно тут передать структуру для вывода дополнительных параметров? Документооборот КОРП, редакция 3.0 (3.0.19.30)
1 DrZombi
 
гуру
23.03.26
09:23
(0) Не уловил то, что вам надо, но свою печать я реализую так.
Для передачи параметров в процедуру печати. :)

//В примере передача параметров в обработку печати.
//   Из обработки печати с вызовом диалога, для ввода параметров
//   Выполнена для БП 3.0, поэтому и указано Ожидание. В Бухгалтерии, оно теперь через фоновое задание выполняется :)


Печать(Команда)

&НаКлиенте
Процедура Печать(Команда)
    
    ОбъектыПечати = ПолучитьИзВременногоХранилища(ОбъектыНазначения);
    ПараметрыПечати = ОбщегоНазначенияБПКлиент.ПолучитьЗаголовокПечатнойФормы(ОбъектыПечати);
    
    Если ПараметрыПечати = Неопределено Тогда
        ПараметрыПечати = Новый Структура();
    КонецЕсли;
    
    СписокМакетов = УчетОСВызовСервера.ПолучитьСписокМакетовОС1(ОбъектыПечати);
    
    Если СписокМакетов <> "" Тогда
        пИдентификаторКоманды = "ПФ_ОС1_ПринятиеКУчетуОС";
        //ДополнительныеПараметры.ИсточникДанных    Печатная форма документа "Принятие к учету ОС" "ОС-1(а,б) (...)"    СправочникСсылка.ДополнительныеОтчетыИОбработки
        ИсточникДанных = ПолучитьСсылкуНаВнешнююОбработкуПоИмениОбъектаНаСервере(пИдентификаторКоманды); //ДополнительныеОтчетыИОбработки
        Если ИсточникДанных = Неопределено Тогда
            ТекстСообщения = "Нет внешней обработки '"+пИдентификаторКоманды+"'";
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
            
            Закрыть();
            Возврат;
        КонецЕсли;
        
        ПараметрыВывода = ПодготовитьСтруктуруПараметровВывода();
        ПараметрыВывода.Вставить("НомерДоговора",Объект.НомерДоговора);
        ПараметрыВывода.Вставить("ДатаДоговора",Объект.ДатаДоговора);
        
        ПараметрыИсточника = Новый Структура;
        ПараметрыИсточника.Вставить("ИдентификаторКоманды", пИдентификаторКоманды);
        ПараметрыИсточника.Вставить("ОбъектыНазначения",    ОбъектыПечати);
        
        ИмяМенеджераПечати = "ВнешняяОбработка."+пИдентификаторКоманды;
        ИменаМакетов     = СписокМакетов;
        МассивОбъектов     = ОбъектыПечати;
        
        //ПараметрыОткрытия = Новый Структура;
        ПараметрыОткрытия = УправлениеПечатьюСлужебныйКлиент.ПараметрыОткрытияФормыПечати();
        ПараметрыОткрытия.ИсточникДанных = ИсточникДанных;
        ПараметрыОткрытия.ПараметрыИсточника = ПараметрыИсточника;
        ПараметрыОткрытия.ПараметрыВывода     = ПараметрыВывода;
        
        ПараметрыОткрытия.ИмяМенеджераПечати = ИмяМенеджераПечати;
        ПараметрыОткрытия.ИменаМакетов         = ИменаМакетов;
        ПараметрыОткрытия.ПараметрКоманды     = МассивОбъектов;
        ПараметрыОткрытия.ПараметрыПечати     = ПараметрыПечати;
        
        ВладелецФормы = ЭтаФорма;
        Если ВладелецФормы = Неопределено Тогда
            ПараметрыОткрытия.УникальныйИдентификаторХранилища = Новый УникальныйИдентификатор;
        Иначе
            ПараметрыОткрытия.УникальныйИдентификаторХранилища = ВладелецФормы.УникальныйИдентификатор;
        КонецЕсли;
        
        СформированныеПечатныеФормы = УправлениеПечатьюВызовСервера.НачатьФормированиеПечатныхФорм(ПараметрыОткрытия);
        ПараметрыОткрытия.ВладелецФормы = ВладелецФормы;
        
        Если СОГ_ВнешниеБазыИСВызовСервера.ЗаданиеЕщеВыполняется(СформированныеПечатныеФормы.ИдентификаторЗадания) = Истина Тогда
            СформированныеПечатныеФормы_ = СформированныеПечатныеФормы; //Запомним параметры, для печатной формы...
            СформированныеПечатныеФормы_.Вставить("пТекДата", ТекущаяДата());
            
            Элементы.ФормаПечать.Доступность = Ложь;
            
            ПодключитьОбработчикОжидания("СОГ_ОжиданияЗавершенияПечати",1,Истина);
            Возврат;
        КонецЕсли;
        
        //РезультатФоновойОперации = Новый Структура;
        //РезультатФоновойОперации.Вставить("Статус", "Выполнено");
        //РезультатФоновойОперации.Вставить("КраткоеПредставлениеОшибки", "");
        //РезультатФоновойОперации.Вставить("ПодробноеПредставлениеОшибки", "");
        //РезультатФоновойОперации.Вставить("Сообщения", Новый ФиксированныйМассив(Новый Массив));
        //РезультатФоновойОперации.Вставить("АдресРезультата", ПоместитьВоВременноеХранилище(СформированныеПечатныеФормы, ПараметрыОткрытия.УникальныйИдентификаторХранилища));
        
        //УправлениеПечатьюКлиент.ВыполнитьКомандуПечатиПослеФормированияПечатныхФорм(РезультатФоновойОперации, ПараметрыОткрытия);
        УправлениеПечатьюСлужебныйКлиент.ОткрытьФормуПечатьДокументов(СформированныеПечатныеФормы, ПараметрыОткрытия);
    
    КонецЕсли;
        
    Закрыть();
    
КонецПроцедуры



ПолучитьСсылкуНаВнешнююОбработкуПоИмениОбъектаНаСервере(ИмяОбъекта)

&НаСервере
Функция ПолучитьСсылкуНаВнешнююОбработкуПоИмениОбъектаНаСервере(ИмяОбъекта)
    
    //Отключим всякого рода проверки безопасности от 1С... оно тут лишнее...
    УстановитьОтключениеБезопасногоРежима(Истина);
    УстановитьПривилегированныйРежим(Истина);
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ИмяОбъекта", ИмяОбъекта);
    Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |    ДополнительныеОтчетыИОбработки.Ссылка КАК Ссылка
    |ИЗ
    |    Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки
    |ГДЕ
    |    НЕ ДополнительныеОтчетыИОбработки.ЭтоГруппа
    |    И НЕ ДополнительныеОтчетыИОбработки.ПометкаУдаления
    |    И ДополнительныеОтчетыИОбработки.ИмяОбъекта = &ИмяОбъекта
    |    И ДополнительныеОтчетыИОбработки.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется)
    |
    |УПОРЯДОЧИТЬ ПО
    |    Ссылка";
    
    РезЗапроса = Запрос.Выполнить();
    Если РезЗапроса.Пустой() Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    Выборка = РезЗапроса.Выбрать();
    Выборка.Следующий();
    
    Возврат Выборка.Ссылка;
КонецФункции



ПодготовитьСтруктуруПараметровВывода()

Функция ПодготовитьСтруктуруПараметровВывода()
    Возврат УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
КонецФункции

2 DrZombi
 
гуру
23.03.26
09:29
+(0) А уже в вызываемой печатной процедуре, этот параметр стандартный в БСП "ПараметрыПечати"

Пример:


// Экспортная процедура печати, вызываемая из основной программы
//
// Параметры:
// ВХОДЯЩИЕ:
//  МассивОбъектовНазначения - Массив - список объектов ссылочного типа для печати документа
//                 Как правило, содержит один элемент с ссылкой на вызвавший форму объект (документ, справочник)
//
// ИСХОДЯЩИЕ:
//  КоллекцияПечатныхФорм - ТаблицаЗначений - таблица сформированных табличных документов.
//                 Как правило, содержит одну строку с именем текущей печатной формы
//  ОбъектыПечати - СписокЗначений - список объектов печати.
//  ПараметрыВывода - Структура - Параметры сформированных табличных документов. Содержит поля:
//                          ДоступнаПечатьПоКомплектно - булево - по умолчанию Ложь
//                            ПолучательЭлектронногоПисьма
//                            ОтправительЭлектронногоПисьма
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыПечати) Экспорт
    
3 DrZombi
 
гуру
23.03.26
09:37
+(0) вот...

ЗаданиеЕщеВыполняется(ИдентификаторЗадания)

Функция ЗаданиеЕщеВыполняется(ИдентификаторЗадания) Экспорт
    
    Если Не ЗначениеЗаполнено(ИдентификаторЗадания) Тогда
        Возврат Ложь;
    КонецЕсли;
    
    Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
    
    Возврат Задание <> Неопределено И Задание.Состояние = СостояниеФоновогоЗадания.Активно;
    
КонецФункции