Книга знаний

1С:Предприятие / v8 / Приемы программирования / Формы

v8: Копировальщик форм - вложенные формы

Как скопировать одну форму в другуюАвтор статьи: Гений 1С | Редакторы: Волшебник
Последняя редакция №5 от 22.08.06 | История
URL: http://kb.mista.ru/article.php?id=165

Ключевые слова: форма,копирование,элементы


Часто при обновлении типовых я создаю форму-заготовку, а потом добавляю ее элементы в форму типовой конфигурации, например при создании формы. Это позволяет дорабатывать интерфейс формы чисто на уровне кода модуля, т.е. не особо вмешиваться в функционал.

Привожу две полезных функции:
* п_ДобавитьЭлементФормыНаПанель - добавляет элемент управления непосредственно на указанную страницу панели
* п_КопироватьЭлементыФормы - копирует элементы формы из одной формы в другую

Пока в коде перечислены не все события элементов управления, поэтому чтобы события тоже копировались, надо привести их полный перечень.

Ограничение - в копируемой форме не должно быть панелей, т.к. по элементу нельзя определить, какой панели он принадлежит. Но если уж очень хочется иметь панели, нужно где-то в элементах формы подписывать, к какой панели принадлежит элемент, тогда можно внедрять и формы с панелями.

Функция п_ДобавитьЭлементФормыНаПанель(
  Форма, Тип, Имя, 
  Видимость=Неопределено, 
  Панель=Неопределено, 
  РезСтраницаПанели=Неопределено) Экспорт
    ИсхСтраницаПанели=Неопределено;
    
    Если Панель<>Неопределено И РезСтраницаПанели<>Неопределено И
             РезСтраницаПанели<>Панель.ТекущаяСтраница Тогда
        ИсхСтраницаПанели=Панель.ТекущаяСтраница;
        Панель.ТекущаяСтраница=РезСтраницаПанели;
    КонецЕсли;
    
    Эл=Форма.ЭлементыФормы.Добавить(Тип, Имя, Видимость, Панель);
    
    Если ИсхСтраницаПанели<>Неопределено И 
             РезСтраницаПанели<>Панель.ТекущаяСтраница Тогда
        Панель.ТекущаяСтраница=ИсхСтраницаПанели;
    КонецЕсли;
    
    Возврат Эл;
    
КонецФункции


Функция п_КопироватьЭлементыФормы(РезФорма, ИсхФорма, Панель, 
   РезСтраницаПанели=Неопределено, События=истина) Экспорт
    
    Если События Тогда
        МассивСобытий=Новый Массив;
        МассивСобытий.Добавить("НачалоВыбора");
        МассивСобытий.Добавить("ПриИзменении");
    КонецЕсли;
    
    Для Каждого ИсхЭл Из ИсхФорма.ЭлементыФормы Цикл
        ИсхТип=ТипЗнч(ИсхЭл);        
        Эл=п_ДобавитьЭлементФормыНаПанель(РезФорма, ИсхТип,ИсхЭл.Имя, истина, Панель, РезСтраницаПанели);
        Попытка
            ЗаполнитьЗначенияСвойств(Эл,ИсхЭл,,"Значение");
        Исключение
            Попытка
                ЗаполнитьЗначенияСвойств(Эл,ИсхЭл,,);
            Исключение
            КонецПопытки;
        КонецПопытки;
        
        Если События Тогда
            Для Каждого Событие Из МассивСобытий Цикл
                Попытка
                    Эл.УстановитьДействие(Событие, ИсхЭл.ПолучитьДействие(Событие));
                Исключение
                КОнецПопытки;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    
КонецФункции



Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2024 | Mista.ru

Яндекс.Метрика