Как открыть форму из модуля объекта внешней печатной формы?
Делаю внешнюю печатную форму для ЗУП 3.1.(управляемое приложение). Настройку и регистрацию печатной формы сделал на модуле объекта, всё работает исправно. Пришла задача заполнять реквизиты печатной формы до его открытия, соответственно создал форму и подтянул к нему реквизиты.
Пробовал через вызов ВызовКлиентскогоМетода, но там далее недоступен сам документ из которого буду вызывать эту внешнюю печатную форму. То есть из модуля объекта не могу открыть форму, а если переключить работу на клиент то там не вижу сам документ. Как правильно построить архитектуру.
Пробовал через вызов ВызовКлиентскогоМетода, но там далее недоступен сам документ из которого буду вызывать эту внешнюю печатную форму. То есть из модуля объекта не могу открыть форму, а если переключить работу на клиент то там не вижу сам документ. Как правильно построить архитектуру.
По теме из базы знаний
- Внешние печатные формы для нетиповой конфигурации (управляемое приложение)
- Дополнительные отчеты и обработки для конфигураций, основанных на БСП. Часть 2. Печатные формы (MXL).
- Вывод печатных форм с запросом данных в форму "Печать документов" из подсистемы БСП "Печать".
- Как быстро развернуть автоматическую линию проверки своего решения на 1С, затратив 8 часов и получив выигрыш в 1 человеко/месяц
- Расширяем возможности дополнительных обработок и настраиваем их отладку
Найденные решения
Вот эти статьи мне помогли!
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) У меня сохранился шаблон, возможно он Вам поможет:
//////////////////////////////////////////////////////////
// МОДУЛЬ ОБРАБОТКИ //
//////////////////////////////////////////////////////////
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Демо: накладная (внешняя печатная форма с диалогом)'");
НоваяКоманда.Идентификатор = "ДемоНакладнаяСДиалогом";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
НоваяКоманда.Модификатор = "ПечатьMXL";
Возврат ПараметрыРегистрации;
КонецФункции
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ДемоНакладнаяСДиалогом");
Если ПечатнаяФорма <> Неопределено Тогда
ПечатнаяФорма.ТабличныйДокумент = СформироватьДемоНакладная(МассивОбъектов, ОбъектыПечати);
ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Демо: накладная'");
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция СформироватьДемоНакладная(МассивОбъектов, ОбъектыПечати)
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.КлючПараметровПечати = "ПараметрыПечати_РеализацияТоваровУслуг_ДемоНакладная";
Макет = ПолучитьМакет("ПФ_MXL_ДемоНакладная");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеШапки.Ссылка КАК Ссылка,
| .....................
|ИЗ
| Документ.РеализацияТоваровУслуг КАК ДанныеШапки
|ГДЕ
| ДанныеШапки.Ссылка В(&МассивОбъектов)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ДанныеТаблицы.Ссылка КАК Ссылка,
| ДанныеТаблицы.НомерСтроки КАК НомерСтроки,
| .....................
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК ДанныеТаблицы
|ГДЕ
| ДанныеТаблицы.Ссылка В(&МассивОбъектов)
|ИТОГИ ПО
| Ссылка";
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Запрос.УстановитьПараметр("Параметр1", ЭтотОбъект.ПолеВвода1);
Запрос.УстановитьПараметр("Параметр2", ЭтотОбъект.ПолеВвода2);
РезультатыЗапроса = Запрос.ВыполнитьПакет();
ДанныеПечати = РезультатыЗапроса[0].Выбрать();
ВыборкаПоДокументам = РезультатыЗапроса[1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ПервыйДокумент = Истина;
Пока ДанныеПечати.Следующий() Цикл
Если Не ВыборкаПоДокументам.НайтиСледующий(ДанныеПечати.Ссылка, "Ссылка") Тогда
Продолжить;
КонецЕсли;
Если Не ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
// Заголовок.
ОбластьЗаголовок.Параметры.Заполнить(ДанныеПечати);
ТабличныйДокумент.Вывести(ОбластьЗаголовок);
// Шапка таблицы.
ТабличныйДокумент.Вывести(ОбластьШапка);
// Строки таблицы
ДетальныеЗаписи = ВыборкаПоДокументам.Выбрать();
Пока ДетальныеЗаписи.Следующий() Цикл
ОбластьСтрока.Параметры.Заполнить(ДетальныеЗаписи);
СтрокаСПодвалом = Новый Массив;
СтрокаСПодвалом.Добавить(ОбластьСтрока);
СтрокаСПодвалом.Добавить(ОбластьПодвал);
Если Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, СтрокаСПодвалом) Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ТабличныйДокумент.Вывести(ОбластьШапка);
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьСтрока);
КонецЦикла;
// Подвал.
ОбластьПодвал.Параметры.Заполнить(ВыборкаПоДокументам);
ТабличныйДокумент.Вывести(ОбластьПодвал);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент,
НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка);
КонецЦикла;
Возврат ТабличныйДокумент;
КонецФункции
#КонецОбласти
#КонецЕсли
//////////////////////////////////////////////////////////
// МОДУЛЬ ФОРМЫ //
//////////////////////////////////////////////////////////
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ИдентификаторКоманды = Параметры.ИдентификаторКоманды;
ОбъектыНазначения.ЗагрузитьЗначения(Параметры.ОбъектыНазначения);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура КомандаОК(Команда)
КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(ИдентификаторКоманды);
ОбъектыПечати = Новый СписокЗначений;
ПечатьНаСервере(КоллекцияПечатныхФорм, ОбъектыПечати);
УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, ОбъектыПечати, ЭтотОбъект.ВладелецФормы);
Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура КомандаОтмена(Команда)
Закрыть();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ПечатьНаСервере(КоллекцияПечатныхФорм, ОбъектыПечати)
// Преобразование массива структур в таблицу значений.
ПечатныеФормы = Новый ТаблицаЗначений;
Для Каждого ИмяКолонки Из УправлениеПечатьюКлиентСервер.ИменаПолейКоллекцииПечатныхФорм() Цикл
ПечатныеФормы.Колонки.Добавить(ИмяКолонки);
КонецЦикла;
Для Индекс = 0 По КоллекцияПечатныхФорм.ВГраница() Цикл
ЗаполнитьЗначенияСвойств(ПечатныеФормы.Добавить(), КоллекцияПечатныхФорм[Индекс])
КонецЦикла;
// Непосредственная печать.
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
ОбработкаОбъект.Печать(
ОбъектыНазначения.ВыгрузитьЗначения(),
ПечатныеФормы,
ОбъектыПечати,
Новый Структура);
// Обратное преобразование таблицы значений в массив структур.
Для Индекс = 0 По КоллекцияПечатныхФорм.ВГраница() Цикл
ЗаполнитьЗначенияСвойств(КоллекцияПечатныхФорм[Индекс], ПечатныеФормы[Индекс])
КонецЦикла;
КонецПроцедуры
#КонецОбласти
ПоказатьПрикрепленные файлы:
ПечатнаяФормаСДиалогом.epf
Вот эти статьи мне помогли!
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот