Условия задачи

Допустим в форме элемента справочника «Контрагенты» есть табличная часть «События», с колонками:

  • «Дата»;
  • «Контактное лицо»;
  • «Результат»;
  • «Дата следующего касания»;

Необходимо для удобства пользователя превратить табличную часть в поля ввода.

Рекомендуем ознакомиться в видео, для полного понимания задачи.

Программный код модуля формы элемента справочника «Контрагенты»

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	ОбновитьСобытия();
КонецПроцедуры

&НаСервере 
Процедура ОбновитьСобытия()
	Для каждого Стр Из Объект.События Цикл
		Попытка
			ДобавитьСобытие(Стр.НомерСтроки-1);
		Исключение
			//Сообщить("Ошибка"); 
		КонецПопытки;
	КонецЦикла;
КонецПроцедуры

&НаСервере 
Процедура ДобавитьСобытие(НомерСтроки)
	НаимРеквДата = "Дата" + НомерСтроки;
	НаимРеквКонтактноеЛицо = "КонтактноеЛицо"  + НомерСтроки;
	НаимРеквРезультат = "Результат" + НомерСтроки;
	НаимРеквДатаСледующегоКасания = "ДатаСледующегоКасания" + НомерСтроки;
	
	ПутьКДаннымДата = СтрШаблон("Объект.События[%1].Дата", НомерСтроки); 
	ПутьКДаннымКонтактноеЛицо = СтрШаблон("Объект.События[%1].КонтактноеЛицо", НомерСтроки); 
	ПутьКДаннымРезультат = СтрШаблон("Объект.События[%1].Результат", НомерСтроки); 
	ПутьКДаннымДатаСледующегоКасания = СтрШаблон("Объект.События[%1].ДатаСледующегоКасания", НомерСтроки); 
	                                              
	ДобавитьРеквизит(НаимРеквДата, "Дата");
	ДобавитьРеквизит(НаимРеквКонтактноеЛицо, "КонтактноеЛицо");
	ДобавитьРеквизит(НаимРеквРезультат, "Результат");
	ДобавитьРеквизит(НаимРеквДатаСледующегоКасания, "ДатаСледующегоКасания");
	
	Группа = Элементы.Добавить("СобытияГруппа" + (НомерСтроки), Тип("ГруппаФормы"), Элементы.СобытияГруппа);
	Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
	Группа.ОтображатьЗаголовок = Истина;
	Группа.Отображение = ОтображениеОбычнойГруппы.СильноеВыделение;
	Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
	Группа.Видимость = Истина;
	
	ДобавитьПолеВвода(НаимРеквДата, ПутьКДаннымДата, Группа);
	ДобавитьПолеВвода(НаимРеквКонтактноеЛицо, ПутьКДаннымКонтактноеЛицо, Группа);
	ДобавитьПолеВвода(НаимРеквРезультат, ПутьКДаннымРезультат, Группа);
	ДобавитьПолеВвода(НаимРеквДатаСледующегоКасания, ПутьКДаннымДатаСледующегоКасания, Группа);
КонецПроцедуры 

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

&НаСервере 
Процедура ДобавитьПолеВвода(НаимРекв, ПутьКДанным, Группа)
	Элемент = ЭтаФорма.Элементы.Добавить(НаимРекв, Тип("ПолеФормы"), Группа);
	Элемент.Вид = ВидПоляФормы.ПолеВвода;
	Элемент.ПутьКДанным = ПутьКДанным;
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьСобытиеКоманда(Команда)
	НовСтр = Объект.События.Добавить();
	ОбновитьСобытия();
КонецПроцедуры