МассивОбъектов прочитать в форме обработки.

1. mcgoblin 3 24.04.18 15:25 Сейчас в теме
Добрый день.
Задача. Есть внешняя печатная форма. Метод "ОткрытиеФормы" код ниже
#Region Регистрация_внешней_печатной_формы

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

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

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
	
	// Добавляем команду в таблицу команд по переданному описанию.
	// Параметры и их значения можно посмотреть в функции ПолучитьТаблицуКоманд
	НоваяКоманда = ТаблицаКоманд.Добавить();
	НоваяКоманда.Представление = Представление;
	НоваяКоманда.Идентификатор = Идентификатор;
	НоваяКоманда.Использование = Использование;
	НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
	НоваяКоманда.Модификатор = Модификатор;
	
КонецПроцедуры

#EndRegion

Показать


В форме документа устанавливаются необходимые дополнительные параметры, взависимости от нужд и формируется печатная форма для документа, вызвашего эту ВПФку

Вопрос, как осуществляется передача Массива объектов для печати???
Никак не могу сообразить
По теме из базы знаний
Найденные решения
6. Xershi 1484 24.04.18 16:20 Сейчас в теме
(1) читай документацию по функционалу. При методе открыть форму нет массива объектов.
Нужен массив создай его сам!
mcgoblin; +1 Ответить
10. mcgoblin 3 25.04.18 09:48 Сейчас в теме
(6) Вчера тут скачал обработку пример, там как то это передавалось и работало.
Я пытался разобраться, но видимо еще туповат((((
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. Xershi 1484 24.04.18 16:20 Сейчас в теме
(1) читай документацию по функционалу. При методе открыть форму нет массива объектов.
Нужен массив создай его сам!
mcgoblin; +1 Ответить
10. mcgoblin 3 25.04.18 09:48 Сейчас в теме
(6) Вчера тут скачал обработку пример, там как то это передавалось и работало.
Я пытался разобраться, но видимо еще туповат((((
11. Xershi 1484 25.04.18 13:16 Сейчас в теме
(10) внимательно читай какие методы ты используешь от этого зависят параметры которые ты получишь!
Плюс открой конфигуратор и посмотри справку по функциям там довольно понятно расписано что и куда идет!
7. independ 1520 24.04.18 20:14 Сейчас в теме
(1) Если нужно с использованием метода ОткрытиеФормы, то нужно создать 3 параметра формы
ДополнительнаяОбработкаСсылка, тип СправочникСсылка.ДополнительныеОтчетыИОбработки
ИдентификаторКоманды, тип строка
ОбъектыНазначения, тип произвольный

и далее в процедуре
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	МассивОбъектов=Новый Массив;
	Для каждого ЭлементОбъектНазначения из Параметры.ОбъектыНазначения Цикл
		МассивОбъектов.Добавить(ЭлементОбъектНазначения);
	КонецЦикла;	
КонецПроцедуры
mcgoblin; +1 Ответить
8. mcgoblin 3 25.04.18 09:44 Сейчас в теме
(7)Я честно пробовал, но у меня ничего не получилось.

В текущий момент решил проблему через вызов клиентского метода
9. mcgoblin 3 25.04.18 09:46 Сейчас в теме
(7)
(4) может кто то знает как открыв другую форму сделать так что бы она поставила выполнение кода на паузу, пока в ней не укажешь все нужные параметры?
Модальные окна в управляемых формах не разрешены конфигурацией
2. Rovan 22 24.04.18 15:45 Сейчас в теме
Надо создать
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
...
3. mcgoblin 3 24.04.18 15:58 Сейчас в теме
(2)Мне нужен МассивОбъектов не в модуле обработки, а в модуле формы обработки
4. Ivan_Sol 19 24.04.18 16:09 Сейчас в теме
В модуле объекта все равно надо указать процедуру Печать(МассивДокументов, ОбъектыПечати) в моем случае 2 параметра

В модуле формы:
// Код процедур и функций
&НаКлиенте
Процедура Печать(Команда)
ТабДок = ПечатьСерверная();
ТабДок.Показать();
Закрыть();
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции
// Содержит процедуры и функции, составляющие внутреннюю реализацию общего модуля
&НаСервере
Функция ПечатьСерверная()
МассивДокументов = Параметры.ОбъектыНазначения;
ЭтотОбъектОбработка= РеквизитФормыВЗначение("Объект");
ОбъектыПечати = Новый Структура();
ОбъектыПечати.Вставить("НачалоПериода", Объект.Период.ДатаНачала);
ОбъектыПечати.Вставить("КонецПериода", Объект.Период.ДатаОкончания);
ОбъектыПечати.Вставить("Подразделение", Объект.Подразделение);
ТабДок = ЭтотОбъектОбработка.Печать(МассивДокументов, ОбъектыПечати);
Возврат ТабДок;
КонецФункции

ОбъектыНазначения - реквизит формы, тип - произвольный, и обязательно указать "Ключевой параметр"
user705522_constantin_h; mcgoblin; +2 Ответить
5. Rovan 22 24.04.18 16:13 Сейчас в теме
Можно отладчиком найти как данная (ваша) конфигурация будет пытаться передать параметры.
Например УНФ делает так
ВыполнитьОткрытиеФормыОбработки(ВыполняемаяКоманда, Форма, ВыполняемаяКоманда.ОбъектыПечати);
- значит параметры открываемой формы это и есть массив объектов
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот