Парадокс удаления формы элемента УФ
Реализовываю свою форму дерева (использую для задач).
И вот начала возникать ошибка — когда я нажимаю обновить, то после этого не открывается редактор задачи, как будто его элементы удалены.
Я долго думал, в чем причина, пока не понял, что когда я перерисовываю форму, перед этим удаляю прошлые созданные динамически элементы задач.
Так вот, при редактировании я размещаю форму редактирования внутри элемента задачи:
При удалении элементов задачи удаляется и форма редактирования со всеми подэлементами.
Выход — перед удалением элементов форму редактирования «спасать», вынося на верхний уровень:
//Нужно переместить подчиненные элементы на верхний уровень, чтобы они не были удалены Форма.Элементы.БС_ФормаЗадачи.Видимость = ложь; Форма.Элементы.Переместить(Форма.Элементы.БС_ФормаЗадачи, Форма);
Кстати, элементы, команды и реквизиты я удаляю так:
Ведь в коллекциях нельзя в процессе перебора делать удаление. И надо проверять обязательно, есть ли еще такой элемент, ведь он мог быть уже удален при удалении родительского элемента. Команды не нужно проверять на наличие, потому что они независимы друг от друга.
//Определяем связанные с задачами элементы КУдалению = Новый Массив(); Для Каждого Элемент Из Форма.Элементы Цикл Если Лев(Элемент.Имя, 16) = "БС_ДеревоСтрока_" Тогда КУдалению.Добавить(Элемент.Имя); КонецЕсли; КонецЦикла; Для Каждого ИмяЭлемента Из КУдалению Цикл Элемент = Форма.Элементы.Найти(ИмяЭлемента); Если Элемент <> Неопределено Тогда Форма.Элементы.Удалить(Элемент); КонецЕсли; КонецЦикла; //Удаляем команды КУдалению = Новый Массив(); Для Каждого Команда Из Форма.Команды Цикл Если Лев(Команда.Имя, 16) = "БС_ДеревоСтрока_" Тогда КУдалению.Добавить(Команда.Имя); КонецЕсли; КонецЦикла; Для Каждого ИмяКоманды Из КУдалению Цикл Команда = Форма.Команды.Найти(ИмяКоманды); Форма.Команды.Удалить(Команда); КонецЦикла; //Определяем связанные с задачами реквизиты ВсеРеквизиты= Форма.ПолучитьРеквизиты(); КУдалению = Новый Массив(); Для Каждого РеквизитИсточника Из ВсеРеквизиты Цикл Если Лев(РеквизитИсточника.Имя, 16) = "БС_ДеревоСтрока_" Тогда КУдалению.Добавить(РеквизитИсточника.Имя); КонецЕсли; КонецЦикла; Форма.ИзменитьРеквизиты(,КУдалению);
Свежие комментарии