МассивОбъектов прочитать в форме обработки.
Добрый день.
Задача. Есть внешняя печатная форма. Метод "ОткрытиеФормы" код ниже
В форме документа устанавливаются необходимые дополнительные параметры, взависимости от нужд и формируется печатная форма для документа, вызвашего эту ВПФку
Вопрос, как осуществляется передача Массива объектов для печати???
Никак не могу сообразить
Задача. Есть внешняя печатная форма. Метод "ОткрытиеФормы" код ниже
#Region Регистрация_внешней_печатной_формы
Функция СведенияОВнешнейОбработке() Экспорт
// Объявим переменную, в которой мы сохраним и вернем "наружу" необходимые данные
ПараметрыРегистрации = Новый Структура;
// Объявим еще одну переменную, которая нам потребуется ниже
МассивНазначений = Новый Массив;
// Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать.
// Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
// Теперь нам необходимо передать в виде массива имен, к чему будет подключена наша ВПФ
// Имейте ввиду, что можно задать имя в таком виде: Документ.* - в этом случае обработка будет подключена ко всем документам в системе,
// которые поддерживают механизм ВПФ
МассивНазначений.Добавить("Документ.ПриемНаРаботу");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
// Теперь зададим имя, под которым ВПФ будет зарегистрирована в справочнике внешних обработок
ПараметрыРегистрации.Вставить("Наименование", "Приказ о приёме");
// Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
// Следующие два параметра играют больше информационную роль, т.е. это то, что будет видеть пользователь в информации к обработке
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("Информация", "Приказ о приёме");
// Создадим таблицу команд (подробнее смотрим ниже)
ТаблицаКоманд = ПолучитьТаблицуКоманд();
// Добавим команду в таблицу //кгм-кгм
ДобавитьКоманду(ТаблицаКоманд, "Приказ о приёме", "ПриказНаПрием", "ОткрытиеФормы", Ложь, "ПечатьMXL");
// Сохраним таблицу команд в параметры регистрации обработки
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
// Теперь вернем системе наши параметры
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
// Создадим пустую таблицу команд и колонки в ней
Команды = Новый ТаблицаЗначений;
// Как будет выглядеть описание печатной формы для пользователя
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
// Имя нашего макета, что бы могли отличить вызванную команду в обработке печати
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
// Тут задается, как должна вызваться команда обработки
// Возможные варианты:
// - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система
// - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки
// - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
// Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
// Для печатной формы должен содержать строку ПечатьMXL
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
// Добавляем команду в таблицу команд по переданному описанию.
// Параметры и их значения можно посмотреть в функции ПолучитьТаблицуКоманд
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
#EndRegion
ПоказатьВ форме документа устанавливаются необходимые дополнительные параметры, взависимости от нужд и формируется печатная форма для документа, вызвашего эту ВПФку
Вопрос, как осуществляется передача Массива объектов для печати???
Никак не могу сообразить
По теме из базы знаний
- УТ 11. Динамическое изменение MXL-макета внешней печатной формы в режиме 1С.
- Создаем "кроссплатформенную" библиотеку для OneScript и 1С:Предприятие
- Подключаемые печатные формы с .DOCX макетом без Word'а
- Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке
- Шаблон внешней печатной формы в формате office open XML (Microsoft Word, OpenOffice.org Writer, Google Docs и др.)
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Если нужно с использованием метода ОткрытиеФормы, то нужно создать 3 параметра формы
и далее в процедуре
ДополнительнаяОбработкаСсылка, тип СправочникСсылка.ДополнительныеОтчетыИОбработки
ИдентификаторКоманды, тип строка
ОбъектыНазначения, тип произвольный
и далее в процедуре
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
МассивОбъектов=Новый Массив;
Для каждого ЭлементОбъектНазначения из Параметры.ОбъектыНазначения Цикл
МассивОбъектов.Добавить(ЭлементОбъектНазначения);
КонецЦикла;
КонецПроцедуры
В модуле объекта все равно надо указать процедуру Печать(МассивДокументов, ОбъектыПечати) в моем случае 2 параметра
В модуле формы:
// Код процедур и функций
&НаКлиенте
Процедура Печать(Команда)
ТабДок = ПечатьСерверная();
ТабДок.Показать();
Закрыть();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Содержит процедуры и функции, составляющие внутреннюю реализацию общего модуля
&НаСервере
Функция ПечатьСерверная()
МассивДокументов = Параметры.ОбъектыНазначения;
ЭтотОбъектОбработка= РеквизитФормыВЗначение("Объект");
ОбъектыПечати = Новый Структура();
ОбъектыПечати.Вставить("НачалоПериода", Объект.Период.ДатаНачала);
ОбъектыПечати.Вставить("КонецПериода", Объект.Период.ДатаОкончания);
ОбъектыПечати.Вставить("Подразделение", Объект.Подразделение);
ТабДок = ЭтотОбъектОбработка.Печать(МассивДокументов, ОбъектыПечати);
Возврат ТабДок;
КонецФункции
ОбъектыНазначения - реквизит формы, тип - произвольный, и обязательно указать "Ключевой параметр"
В модуле формы:
// Код процедур и функций
&НаКлиенте
Процедура Печать(Команда)
ТабДок = ПечатьСерверная();
ТабДок.Показать();
Закрыть();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Содержит процедуры и функции, составляющие внутреннюю реализацию общего модуля
&НаСервере
Функция ПечатьСерверная()
МассивДокументов = Параметры.ОбъектыНазначения;
ЭтотОбъектОбработка= РеквизитФормыВЗначение("Объект");
ОбъектыПечати = Новый Структура();
ОбъектыПечати.Вставить("НачалоПериода", Объект.Период.ДатаНачала);
ОбъектыПечати.Вставить("КонецПериода", Объект.Период.ДатаОкончания);
ОбъектыПечати.Вставить("Подразделение", Объект.Подразделение);
ТабДок = ЭтотОбъектОбработка.Печать(МассивДокументов, ОбъектыПечати);
Возврат ТабДок;
КонецФункции
ОбъектыНазначения - реквизит формы, тип - произвольный, и обязательно указать "Ключевой параметр"
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот