Доброго времени суток, в данном примере я продемонстрирую свое решение вот такой задачи - необходимо вывести вес номенклатуры в табличную часть документа "Заказ клиента", реквизиты должны быть созданы программно, вес пересчитывается при изменении количества, номенклатуры или упаковки, в подвале документа выводится итоговый вес.
1. Создаем программно новые реквизиты, поля формы документа и устанавливаем действие для нового реквизита "вес"
Процедура ДобавитьРеквизитыВеса()
МассивДобавляемыхРеквизитов = Новый Массив;
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Вес", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)),
"Объект.Товары", "Вес"));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ВесИтого", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)),
"", "Итого вес", Ложь));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Объем", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)),
"Объект.Товары", "Объем"));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ВесУпаковки", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(18,9)),
"Объект.Товары", "Вес упаковки"));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ОбъемУпаковки", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(18,9)),
"Объект.Товары", "Объем упаковки"));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ЕдиницаИзмеренияВеса", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"),
"Объект.Товары", "Единица измерения веса"));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ЕдиницаИзмеренияОбъема",Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"),
"Объект.Товары", "Единица измерения объема"));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ТипИзмеряемойВеличины", Новый ОписаниеТипов("ПеречислениеСсылка.ТипыИзмеряемыхВеличин"),
"Объект.Товары", "Единица измерения объема"));
ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);
//Добавляем поле в табличную часть документа
ЭлементВес = Элементы.Вставить("Вес", Тип("ПолеФормы"), Элементы.Товары,Элементы.ТоварыУпаковкаЕдиницаИзмерения);
ЭлементВес.Заголовок = "Вес";
ЭлементВес.ПутьКДанным = "Объект.Товары.Вес";
ЭлементВес.Вид = ВидПоляФормы.ПолеВвода;
ЭлементВес.ПропускатьПриВводе=Истина;
ЭлементВес.УстановитьДействие("ПриИзменении","Расш1_ТоварыВесПриИзменении");
//Добавляем поле в подвал формы
ЭлементВес = Элементы.Вставить("ВесИтого", Тип("ПолеФормы"), Элементы.ГруппаПодвал);
ЭлементВес.Вид = ВидПоляФормы.ПолеНадписи;
ЭлементВес.ПутьКДанным = "ВесИтого";
КонецПроцедуры
2. В расширении переопределяем обработчики событий элементов форм и вставляем необходимый код
&НаКлиенте
&ИзменениеИКонтроль("ТоварыНоменклатураПриИзменении")
Процедура Расш1_ТоварыНоменклатураПриИзменении(Элемент)
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
#Вставка
СтруктураДействий.Вставить("ЗаполнитьПризнакТипИзмеряемойВеличины", Новый Структура("Номенклатура", "ТипИзмеряемойВеличины"));
СтруктураДействий.Вставить("ЗаполнитьВесУпаковки",Новый Структура("Номенклатура, Упаковка", "ВесУпаковки"));
СтруктураДействий.Вставить("ЗаполнитьОбъемУпаковки",Новый Структура("Номенклатура, Упаковка", "ОбъемУпаковки"));
СтруктураДействий.Вставить("ЗаполнитьЕдиницуИзмеренияВеса",Новый Структура("Номенклатура, Упаковка", "ЕдиницаИзмеренияВеса"));
СтруктураДействий.Вставить("ЗаполнитьЕдиницуИзмеренияОбъема",Новый Структура("Номенклатура, Упаковка", "ЕдиницаИзмеренияОбъема"));
СтруктураДействий.Вставить("ПересчитатьВесОбъем");
#КонецВставки
//////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
КонецПроцедуры
Подобные изменения необходимо внести в ряд процедур обработчиков событий (при изменении количества, единицы измерения).
3. Описываем процедуру обработчика события для созданного реквизита "Вес"
&НаКлиенте
Процедура Расш1_ТоварыВесПриИзменении()
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковокПоВесу");
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма);
КонецПроцедуры
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.5.17.90, 11.5.17.84