1С 8.2/8.3 Управляемые формы, заполнение табличной части объекта

Появилась как-то задачка заполнить табличную часть документа на управляемых формах. Ну дело то плевое… Как оказалось — «показалось». С обычными формами совсем все просто:

Процедура Инициализировать (Объект, ИмяТабличнойЧасти, ТабличноеПолеОбъекта) Экспорт

и все. С управляемыми несколько сложнее, но ничего страшного. Написав стандартную процедуру СведенияОВнешнейОбработке() с типом ЗаполнениеОбъекта и соответствующие попытался заполнить объект. Но оказалось, что в процедуру ВыполнитьКоманду передается массив ссылок, а не объектов. Вот тут и появилась проблема. Данные не изменяются. Решение в следующем: получаем форму этого объекта и через нее получаем объект, который и меняем. Код ниже. Если у кого-то есть более изящное решение, прошу поделиться..

 &НаКлиенте

Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт

Для каждого Элемент из ОбъектыНазначенияМассив Цикл

ФормаОбъекта = ПолучитьФорму(ПолучитьПолноеИмяДокумента(Элемент)+".Форма.ФормаДокумента", Новый Структура("Ключ", Элемент));

Если ФормаОбъекта = Неопределено Тогда

Сообщить("Не удалось заполнить документ!");
Возврат;
КонецЕсли;

ОбъектСсылки = ФормаОбъекта.Объект;

ЗаполнитьНаСервере(ОбъектСсылки);

КопироватьДанныеФормы(ОбъектСсылки, ФормаОбъекта.Объект);
ФормаОбъекта.Модифицированность = Истина;

КонецЦикла;

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

 

Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.ЗаказКлиента");
МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг");

ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "ЗаполнитьЦенуПоступления");
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
ПараметрыРегистрации.Вставить("Информация", "ЗаполнитьЦенуПоступления");

ТаблицаКоманд = ПолучитьТаблицуКоманд();

ДобавитьКоманду(ТаблицаКоманд, "ЗаполнитьЦенуПоступления", "ЗаполнитьЦенуПоступления", "ВызовКлиентскогоМетода", Истина);

ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

Возврат ПараметрыРегистрации;

КонецФункции

Функция ПолучитьТаблицуКоманд()

Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;

КонецФункции

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

НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;

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