|
удаление программно добавленных реквизитов | ☑ | ||
---|---|---|---|---|
0
Strimteam
02.08.16
✎
15:00
|
Всем доброго дня.
Столкнулся с проблемой: На форму добавляю свой реквизит типа "Строка", с отображением как "ПолеФормы". Затем при повторной активизации формы хочу проверить - добавлен ли реквизит на форму, и удалить его если он там есть. Для добавления использую конструкцию: НовыйРек = Новый РеквизитФормы(СтрЗаменить(ИмяРеквизита," ",""),ДопустимыеТипы,,ИмяРеквизита); МассивРеквизитов = Новый Массив; МассивРеквизитов.Добавить(НовыйРек); ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов); Но при попытке найти такой реквизит чтобы его удалить на форме - система просто не находит его в Элементы. Если использовать ЭтаФорма[ИмяРеквизита] - находит конкретно значение типа Строка. Сделать с ней, само собой, ничего нельзя. Вопрос - как можно удалить элемент, если он был добавлен раньше программно? |
|||
1
lera01
02.08.16
✎
15:08
|
Проверить, если есть - просто не добавлять. Это вариант?
|
|||
2
Strimteam
02.08.16
✎
15:11
|
(1) Мне скорее надо его удалить, так как имя реквизита могло изменится, и чтобы старый не мешал - сначала пытаюсь убрать ранее добавленные. Так что всё же нужно удалять.
|
|||
3
Nuobu
02.08.16
✎
15:15
|
||||
4
f_vadim
02.08.16
✎
15:21
|
Элементы.Найти
|
|||
5
f_vadim
02.08.16
✎
15:22
|
или тут старообрядцы?
|
|||
6
Nuobu
02.08.16
✎
15:23
|
(4) Тут реквизиты формы, а не элементы.
|
|||
7
f_vadim
02.08.16
✎
15:26
|
(6) обсыпал голову пеплом. и на всякий случай другие части тела.
|
|||
8
Strimteam
02.08.16
✎
15:28
|
(3) похоже что всё печально. У меня обработка внутри конфигурации, но созданные реквизиты так же не получить через Метаданные(). Значит пытаться искать элементы по наименованию, а затем "переопределять" элементы на другие реквизиты. Спасибо за ссылку.
|
|||
9
Kuzen
02.08.16
✎
15:31
|
(0) Так что удалить то надо "Элемент формы" или "Реквизит Формы"?
|
|||
10
Kuzen
02.08.16
✎
15:32
|
Если реквизит то есть второй параметр у ИзменитьРеквизиты
ИзменитьРеквизиты(<ДобавляемыеРеквизиты>, <УдаляемыеРеквизиты>) |
|||
11
Strimteam
02.08.16
✎
15:33
|
(10) Чтобы использовать ИзменитьРеквизиты надо сначала найти этот реквизит, и в массив передать. А я не могу найти такие реквизиты, если они были добавлены на форму программно. Если есть рабочий пример использования - буду признателен.
|
|||
12
Kuzen
02.08.16
✎
15:34
|
(0) Твой код добавляет реквизит формы, элемент формы она не создает. Поэтому в элементах ты и не находишь скорее всего.
|
|||
13
Strimteam
02.08.16
✎
15:37
|
(12) Элементы создаю отдельно, и сами элементы найти можно.
НовоеПолеФормы=ЭтаФорма.Элементы.Добавить(СтрЗаменить(ИмяРеквизита," ",""),Тип("ПолеФормы"),НайденаяГруппа); Но только я реквизит не могу найти, чтобы его удалить затем. |
|||
14
FIXXXL
02.08.16
✎
15:43
|
(13) я при добавлении сохраняю в списки
и при удалении чищу по спискам //управление программно созданными реквизитами &НаСервере Процедура ЗафиксироватьПрограммноСозданныеРеквизитыИЭлементы(РеквизитПС) //при обновлении формы необходимо полное перезаполнение, //состав программно сформированных колонок может изменится //сохраним названия созданных при открытии формы колонок, //перед обновлением информации удалим согласно списка СписокУдаляемыхРеквизитов.Добавить(РеквизитПС.Путь + "." + РеквизитПС.Имя); СписокУдаляемыхЭлементов.Добавить(РеквизитПС.Имя); КонецПроцедуры &НаСервере Процедура УдалитьПрограммноСозданныеРеквизитыИЭлементы() //удаление ранее созданных программно колонок //убираем элементы формы Для каждого ЭлементФ Из СписокУдаляемыхЭлементов Цикл НайденныйЭлементФормы = ЭтаФорма.Элементы.Найти(ЭлементФ.Значение); Если НайденныйЭлементФормы <> Неопределено Тогда ЭтаФорма.Элементы.Удалить(НайденныйЭлементФормы); КонецЕсли; КонецЦикла; //убираем реквизиты формы МассивУдаляемыхРеквизитов = Новый Массив; Для каждого ЭлементСписка Из СписокУдаляемыхРеквизитов Цикл МассивУдаляемыхРеквизитов.Добавить(ЭлементСписка.Значение); КонецЦикла; ИзменитьРеквизиты(,МассивУдаляемыхРеквизитов); СписокУдаляемыхРеквизитов.Очистить(); СписокУдаляемыхЭлементов.Очистить(); КонецПроцедуры |
|||
15
1sanekmaloi1
02.08.16
✎
15:45
|
Зачем его искать?
<УдаляемыеРеквизиты> (необязательный) Тип: Массив. Массив, содержащий строки, описывающие пути к удаляемым реквизитам. Удалять можно только ранее программно добавленные реквизиты. В массиве Строки с путями и все. |
|||
16
Kuzen
02.08.16
✎
15:49
|
//добавить реквизит
ИмяРеквизита = "Тест"; Путь = ""; НовыйРек = Новый РеквизитФормы(ИмяРеквизита,Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100)),Путь,ИмяРеквизита); МассивРеквизитов = Новый Массив; МассивРеквизитов.Добавить(НовыйРек); ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов); //удалить реквизит МассивУдалить = Новый Массив; МассивУдалить.Добавить("Тест"); ЭтаФорма.ИзменитьРеквизиты(,МассивУдалить); |
|||
17
Strimteam
02.08.16
✎
16:12
|
(16) Спасибо
(15) Спасибо (14) Спасибо Так же оказалось полезной функция ЭтаФорма.ПолучитьРеквизиты() . Элементы при добавлении на форму, и работе с формой - нормально по поиску находятся. Если же было обращение к другой форме (у меня открывалась подчинённая форма), то при возврате к оригинальной форме - элементы на форме есть, но через Элементы их в общем списке нет. Зато через ЭтаФорма.ПолучитьРеквизиты() можно увидеть что был реквизит, а значит был и элемент формы. Всем большое спасибо за решение. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |