Для этого используется объект Построитель. В форму добавляется единственный реквизит с типом построитель, назовем его, например, ДинамическиеДанные. В поле ДинамическиеДанные.Отбор можно добавлять любое число реквизитов, и использовать их в качестве данных для новых элементов управления. Реквизиты могут быть произвольного типа, причем содержать даже такие экзотические типы, как Форма или ЭлементУправления.
В обработке содержится небольшая библиотека функций, которая позволяет добавлять, удалять динамические реквизиты и использовать путь к ним.
В результате работы обработки в Поле2 проставляется путь к данным Данные1, ссылающимся на Поле1 через Форму, а в Поле3 и в Поле4 устанавливается одинаковый путь к данным Данные2. Соответственно, в Поле1 и Поле2, в Поле3 и Поле4 выводятся одинаковые данные.
Библиотека выглядит так:
//fixin 20081124
//Функция позволяет добавить новые данные в форму
Функция ДобавитьДинамическиеДанныеПоЗначению(Форма, ИмяРеквизитаДД = "ДинамическиеДанные", ИмяДанных, Значение) Экспорт
//Определяем тип значения
Т = ТипЗнч(Значение);
МТ = Новый Массив();
МТ.Добавить(Т);
ОписаниеТипов = Новый ОписаниеТипов(МТ);
ТекОтбор = ДобавитьДинамическиеДанныеПоТипу(Форма, ИмяРеквизитаДД, ИмяДанных, ОписаниеТипов);
ТекОтбор.Значение = Значение;
Возврат ТекОтбор;
КонецФункции
Функция ДобавитьДинамическиеДанныеПоТипу(Форма, ИмяРеквизитаДД = "ДинамическиеДанные", ИмяДанных, ОписаниеТипов) Экспорт
//Сначала добавляем в поля
ТекПоляПостроителя = Форма[ИмяРеквизитаДД].ДоступныеПоля;
ТекПоле = ТекПоляПостроителя.Найти(ИмяДанных);
Если ТекПоле <> Неопределено Тогда
//Если поле есть, то его удаляем
ТекПоляПостроителя.Удалить(ТекПоле);
КонецЕсли;
ТекПоле = ТекПоляПостроителя.Добавить(ИмяДанных, ИмяДанных, ОписаниеТипов);
ТекПоле.Отбор = истина;
//Затем добавляем в отбор
ТекОтборПостроителя = Форма[ИмяРеквизитаДД].Отбор;
ТекОтбор = ТекОтборПостроителя.Найти(ИмяДанных);
Если ТекОтбор = Неопределено Тогда
ТекОтбор = ТекОтборПостроителя.Добавить(ИмяДанных);
КонецЕсли;
Возврат ТекОтбор;
КонецФункции
//fixin 20081124
//Функция позволяет удалить добавленные новые данные в форме
Функция УдалитьДинамическиеДанные(Форма, ИмяРеквизитаДД = "ДинамическиеДанные", ИмяДанных) Экспорт
//Сначала удаляем из построителя
ТекОтборПостроителя = Форма[ИмяРеквизитаДД].Отбор;
ТекОтбор = ТекОтборПостроителя.Найти(ИмяДанных);
Если ТекОтбор <> Неопределено Тогда
ТекОтборПостроителя.Удалить(ТекОтборПостроителя.Индекс(ТекОтбор));
КонецЕсли;
//Затем удаляем из доступных полей
ТекПоляПостроителя = Форма[ИмяРеквизитаДД].ДоступныеПоля;
ТекПоле = ТекПоляПостроителя.Найти(ИмяДанных);
Если ТекПоле <> Неопределено Тогда
ТекПоляПостроителя.Удалить(ТекПоле);
КонецЕсли;
КонецФункции
//fixin 20081124
//Функция позволяет получить путь к новым данным в форме
Функция ПолучитьПутьДинамическихДанных(ИмяРеквизитаДД = "ДинамическиеДанные", ИмяДанных) Экспорт
Возврат ИмяРеквизитаДД + ".Отбор." + ИмяДанных + ".Значение";
КонецФункции