|
Программное копирование реквизита управляемой формы | ☑ | ||
---|---|---|---|---|
0
BFG9000
11.12.17
✎
10:46
|
Добрый день!
Есть таблица на УФ и связанный с ней реквизит Таблица значений. Элемент Таблица формы имеет определенные настройки - ширину колонок, объединенные колонки и т.п. Необходимо сделать копию ТЗ и отобразить ее на той же форме. Это у меня получилось - выгрузил первоначальную ТЗ в другую, программно создал реквизит формы, элемент ТаблицаФормы и колонки. Но в этом случае элементы Поле формы создаются "по умолчанию", а нужно, чтобы новая таблица формы имела вид, как и первоначальная. Есть ли какой-либо способ скопировать эти свойства? |
|||
1
vicof
11.12.17
✎
10:50
|
ЗаполнитьЗначенияСвойств(Элементы.Таблица2, Элементы.Таблица1) не?
|
|||
2
Mort
11.12.17
✎
11:13
|
Вот программа из работающей обработки (Data Commander), который состоит из программного создания элементов практически полностью.
Вызывать, например, так: СоздатьКопиюЭлемента(Элементы.Таблица1, "Префикс"); Копия будет называться "ПрефиксТаблица1", реквизиты, соответственно должны называться тоже как и "родные" только с префиксом. Вот код: // Главные &НаСервере Функция СоздатьКопиюЭлемента(ЭлементИсточника, ПрефиксКопии, ГруппаЭлементов = Неопределено) Тип = ТипЗнч(ЭлементИсточника); ЭлементПриемника = Элементы.Добавить(ПрефиксКопии+ ЭлементИсточника.Имя, Тип, ГруппаЭлементов); Если Тип = Тип("ГруппаФормы") Тогда ЭлементПриемника.Вид = ЭлементИсточника.Вид; Если ЭлементИсточника.Вид = ВидГруппыФормы.ОбычнаяГруппа Тогда ЗаполнитьЗначенияСвойств(ЭлементПриемника, ЭлементИсточника,,"ПутьКДаннымЗаголовка"); ИначеЕсли ЭлементИсточника.Вид = ВидГруппыФормы.Страницы Тогда ЗаполнитьЗначенияСвойств(ЭлементПриемника, ЭлементИсточника,, "ТекущаяСтраница"); СкопироватьСобытия(ЭлементПриемника, ЭлементИсточника); ИначеЕсли ЭлементИсточника.Вид = ВидГруппыФормы.Страница Тогда ЗаполнитьЗначенияСвойств(ЭлементПриемника, ЭлементИсточника,, "ПутьКДаннымЗаголовка"); ИначеЕсли ЭлементИсточника.Вид = ВидГруппыФормы.ГруппаКолонок Тогда ЗаполнитьЗначенияСвойств(ЭлементПриемника, ЭлементИсточника,, "ПутьКДаннымШапки"); Иначе ЗаполнитьЗначенияСвойств(ЭлементПриемника, ЭлементИсточника); КонецЕсли; СкопироватьПодчиненныеЭлементы(ЭлементПриемника, ЭлементИсточника, ПрефиксКопии); ИначеЕсли Тип = Тип("ПолеФормы") Тогда ЭлементПриемника.Вид = ЭлементИсточника.Вид; ЭлементПриемника.ПутьКДанным = ПрефиксКопии + ЭлементИсточника.ПутьКДанным; Если ЭлементИсточника.Вид = ВидПоляФормы.ПолеВвода Тогда ЗаполнитьЗначенияСвойств(ЭлементПриемника, ЭлементИсточника,, "ВыделенныйТекст, СвязьПоТипу, ПутьКДанным"); Если ЭлементИсточника.СвязьПоТипу.ПутьКДанным <> "" Тогда ПутьКДаннымСвязиПриемника = СтрЗаменить(ЭлементИсточника.СвязьПоТипу.ПутьКДанным, "Элементы." , "Элементы." + ПрефиксКопии); ЭлементПриемника.СвязьПоТипу = Новый СвязьПоТипу(ПутьКДаннымСвязиПриемника, ЭлементИсточника.СвязьПоТипу.ЭлементСвязи); КонецЕсли; ЗаполнитьКоллекциюСвойств(ЭлементПриемника.СписокВыбора, ЭлементИсточника.СписокВыбора); ИначеЕсли ЭлементИсточника.Вид = ВидПоляФормы.ПолеПереключателя Тогда ЗаполнитьКоллекциюСвойств(ЭлементПриемника.СписокВыбора, ЭлементИсточника.СписокВыбора); ЗаполнитьЗначенияСвойств(ЭлементПриемника, ЭлементИсточника,,"ПутьКДанным"); ИначеЕсли ЭлементИсточника.Вид = ВидПоляФормы.ПолеТекстовогоДокумента Тогда ЗаполнитьЗначенияСвойств(ЭлементПриемника, ЭлементИсточника,,"ПутьКДанным, ВыделенныйТекст"); ИначеЕсли ЭлементИсточника.Вид = ВидПоляФормы.ПолеФорматированногоДокумента Тогда ЗаполнитьЗначенияСвойств(ЭлементПриемника, ЭлементИсточника,,"ПутьКДанным, ВыделенныйТекст"); Иначе ЗаполнитьЗначенияСвойств(ЭлементПриемника, ЭлементИсточника,,"ПутьКДанным"); КонецЕсли; СкопироватьСобытия(ЭлементПриемника, ЭлементИсточника); ИначеЕсли Тип = Тип("ТаблицаФормы") Тогда ЭлементПриемника.ПутьКДанным = ПрефиксКопии + ЭлементИсточника.ПутьКДанным; ЗаполнитьЗначенияСвойств(ЭлементПриемника, ЭлементИсточника,, "ПутьКДаннымКартинкиСтроки, ПутьКДанным, ДополнительныеПараметрыСоздания, ЗапросОбновления"); СкопироватьПодчиненныеЭлементы(ЭлементПриемника, ЭлементИсточника, ПрефиксКопии); СкопироватьКнопкиКоманднойПанелиТаблицы(ЭлементПриемника.КоманднаяПанель, ЭлементИсточника.КоманднаяПанель, ПрефиксКопии); СкопироватьСобытия(ЭлементПриемника, ЭлементИсточника); ИначеЕсли Тип = Тип("КнопкаФормы") Тогда ЗаполнитьЗначенияСвойств(ЭлементПриемника, ЭлементИсточника); СкопироватьКоманду(ЭлементПриемника, ЭлементИсточника, ПрефиксКопии); Иначе ЗаполнитьЗначенияСвойств(ЭлементПриемника, ЭлементИсточника); КонецЕсли; КонецФункции &НаСервере Процедура СкопироватьПодчиненныеЭлементы(Приемник, Источник, ПрефиксКопии) Экспорт Для Каждого ЭлементИсточника Из Источник.ПодчиненныеЭлементы Цикл СоздатьКопиюЭлемента(ЭлементИсточника, ПрефиксКопии, Приемник); КонецЦикла; КонецПроцедуры // Служебные &НаСервереБезКонтекста Процедура ЗаполнитьКоллекциюСвойств(КоллекцияПриемник, КоллекцияИсточник) Для Каждого Элемент Из КоллекцияИсточник Цикл ЗаполнитьЗначенияСвойств(КоллекцияПриемник.Добавить(), Элемент); КонецЦикла; КонецПроцедуры &НаСервере Процедура СкопироватьКнопкиКоманднойПанелиТаблицы(ГруппаКнопокПриемник, ГруппаКнопокИсточник,ПрефиксКопии) Экспорт Для Каждого ЭлементИсточника из ГруппаКнопокИсточник.ПодчиненныеЭлементы Цикл // Созданные элементы командных панелей таблиц должны содержать слово "кнопка" или "кнопки". // Это необходимо, чтобы отличить их от стандартных элементов, которые генерируются в источнике сами Если Найти(НРег(ЭлементИсточника.Имя), "кнопк") > 0 Тогда Тип = ТипЗнч(ЭлементИсточника); ЭлементПриемника = Элементы.Добавить(ПрефиксКопии + ЭлементИсточника.Имя, Тип, ГруппаКнопокПриемник); Если Тип = Тип("ГруппаФормы") Тогда ЭлементПриемника.Вид = ЭлементИсточника.Вид; ЗаполнитьЗначенияСвойств(ЭлементПриемника, ЭлементИсточника); СкопироватьКнопкиКоманднойПанелиТаблицы(ЭлементПриемника, ЭлементИсточника, ПрефиксКопии); ИначеЕсли Тип = Тип("КнопкаФормы") Тогда ЗаполнитьЗначенияСвойств(ЭлементПриемника, ЭлементИсточника); СкопироватьКоманду(ЭлементПриемника, ЭлементИсточника, ПрефиксКопии); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры &НаСервере Процедура СкопироватьКоманду(ЭлементПриемник, ЭлементИсточник, ПрефиксКопии) Экспорт КомандаИсточник = Команды.Найти(ЭлементИсточник.ИмяКоманды); КомандаПриемник = Команды.Найти(ПрефиксКопии + КомандаИсточник.Имя); //Две кнопки могут ссылаться на одну команду Если КомандаПриемник = Неопределено Тогда КомандаПриемник = Команды.Добавить(ПрефиксКопии + КомандаИсточник.Имя); КонецЕсли; ЗаполнитьЗначенияСвойств(КомандаПриемник, КомандаИсточник, , "Имя"); ЭлементПриемник.ИмяКоманды = КомандаПриемник.Имя; КонецПроцедуры &НаСервере Процедура СкопироватьСобытия(ЭлементПриемник, ЭлементИсточник) Экспорт СкопироватьСобытие(ЭлементПриемник, ЭлементИсточник, "ПриИзменении"); СкопироватьСобытие(ЭлементПриемник, ЭлементИсточник, "НачалоВыбора"); СкопироватьСобытие(ЭлементПриемник, ЭлементИсточник, "НачалоВыбораИзСписка"); СкопироватьСобытие(ЭлементПриемник, ЭлементИсточник, "Очистка"); СкопироватьСобытие(ЭлементПриемник, ЭлементИсточник, "Выбор"); СкопироватьСобытие(ЭлементПриемник, ЭлементИсточник, "Регулирование"); СкопироватьСобытие(ЭлементПриемник, ЭлементИсточник, "Открытие"); СкопироватьСобытие(ЭлементПриемник, ЭлементИсточник, "ОбработкаВыбора"); СкопироватьСобытие(ЭлементПриемник, ЭлементИсточник, "АвтоПодбор"); СкопироватьСобытие(ЭлементПриемник, ЭлементИсточник, "ОкончаниеВводаТекста"); СкопироватьСобытие(ЭлементПриемник, ЭлементИсточник, "ПриОбновленииСоставаПользовательскихНастроекНаСервере"); СкопироватьСобытие(ЭлементПриемник, ЭлементИсточник, "ПриНачалеРедактирования"); СкопироватьСобытие(ЭлементПриемник, ЭлементИсточник, "ПередНачаломДобавления"); СкопироватьСобытие(ЭлементПриемник, ЭлементИсточник, "ПередНачаломИзменения"); СкопироватьСобытие(ЭлементПриемник, ЭлементИсточник, "ПриАктивизацииСтроки"); КонецПроцедуры &НаСервере Процедура СкопироватьСобытие(ЭлементПриемник, ЭлементИсточник, ИмяСобытия) Экспорт Действие = ЭлементИсточник.ПолучитьДействие(ИмяСобытия); Если Действие <> "" Тогда ЭлементПриемник.УстановитьДействие(ИмяСобытия, Действие); КонецЕсли; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |