Имя: Пароль:
1C
1С v8
Программное создание и удаление реквизита формы в 1с 8.3 УФ
0 yaobez
 
26.07.17
12:32
Всем добрый день.

Туплю, не могу понять как удалить ранее программно созданный реквизит формы

Создаю так:

    ДобавляемыеРеквизиты = Новый Массив;
    РеквизитПредставительПартнера     = Новый РеквизитФормы("РФПредставительПартнера_"+СозданоЗаписей, Новый ОписаниеТипов("СправочникСсылка.СДОПредставителиПартнера"));
    ДобавляемыеРеквизиты.Добавить(РеквизитПредставительПартнера);
    ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);

Удалить пытаюсь так:

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


При выполнение выскакивает ошибка:

{Обработка.СДОЗаписьПартнеровНаКурсы.Форма.Форма.Форма(138)}: Ошибка при вызове метода контекста (ИзменитьРеквизиты)
    ЭтаФорма.ИзменитьРеквизиты(, МассивРекДляУдаления);
по причине:
Недопустимый путь к реквизиту. Путь: "РеквизитФормы"

При создании Реквизита формы действительно не заполняю параметр "Путь" , не понимаю, какой путь требуется указать.

из СП:

"РеквизитФормы (FormAttribute)
Путь (Path)

Использование:  Чтение и запись.

Описание:

Тип: Строка. Содержит путь к реквизиту. Не включает имя реквизита.

Доступность: Сервер, мобильное приложение(сервер)."


Буду благодарен Вам за помощь.
1 Redkiy
 
26.07.17
12:51
МассивРеквизитовУдаления = Новый Массив;
    МассивРеквизитовДобавления = Новый Массив;
    ПоляДляУдаления = Новый Массив;
    
    Для каждого Стр из  Элементы.ГруппаНоменклатуры.ПодчиненныеЭлементы цикл
        МассивРеквизитовУдаления.Добавить(Стр.ПутьКДанным);
        ПоляДляУдаления.Добавить(Стр);
    КонецЦикла;

    ИзменитьРеквизиты(МассивРеквизитовДобавления, МассивРеквизитовУдаления );
    
    Для каждого Стр Из ПоляДляУдаления цикл
        Элементы.Удалить(Стр);
    КонецЦикла;
2 Мыш
 
26.07.17
12:57
(0) Путь примерно такой: "Объект.ИмяРеквизитаОбъектаВМетаданных"
3 yaobez
 
26.07.17
13:40
Забыл написать, что работаю с формой Обработки, если это конечно важно.
4 Fedor-1971
 
26.07.17
14:26
(0)вот этим:
        
Если Найти(Элемент.Имя, "2") тогда
  МассивРекДляУдаления.Добавить(Элемент);
КонецЕсли;

ты что хотел сказать?
1.Найти возвращает число (позицию символа)
2.А если найдёшь реквизит формы, созданный в конфигурации, с 2 внутри? удалять можно только созданные программно реквизиты
3.И отладчиком проверь тип "Элемент" (так на всякий случай)

По уму - пери добавлении реквизита, запомни его в ТЗ (или список, или массив) когда будешь чистить, точно не схватишь лишние реквизиты
5 yaobez
 
26.07.17
14:39
(4)

1. Возвращает число, если число больше нуля то условие выполняется.
2. Реквизитов с "2" в имени в конструкторе не создавал, их там быть не может.
3.Элемент - тип РеквизитФормы, в котором свойство "Имя" искомое мной имя, а свойство "Путь" = "".

Через отладчик проверял.
6 yaobez
 
26.07.17
14:40
(1) Такая штука работает, сейчас постараюсь разобраться.
7 yaobez
 
26.07.17
15:51
Ну вроде заработало благодаря примеру Redkiy. В массив для удаления нужно добавлять имена реквизитов. Тогда работает.

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

Всем большое спасибо!
AdBlock убивает бесплатный контент. 1Сергей