Создание реквизита формы программно при нажатии кнопки

1. El_Ninio 02.12.24 19:00 Сейчас в теме
&НаСервере
Процедура СозданиеРеквизитаФормы()   
       
    Если МассивУдаляемыхРеквизитов.Количество()>0 Тогда       
        МассивДанных = МассивУдаляемыхРеквизитов.ВыгрузитьЗначения(); 
        Для каждого ЭлементМассива Из МассивДанных Цикл
            НайдЭлемент = Элементы.Найти(ЭлементМассива);
            Если НайдЭлемент<>Неопределено Тогда
                Элементы.Удалить(НайдЭлемент);
            КонецЕсли; 
        КонецЦикла;        
        ИзменитьРеквизиты(,МассивДанных);
        МассивУдаляемыхРеквизитов.Очистить();
    КонецЕсли;                         
    
    МассивДобавляемыхРеквизитов = новый Массив;            
    Сч = 1;
    Для каждого СубконтоСчета Из Счет.ВидыСубконто Цикл
        НовыйРеквизит = Новый РеквизитФормы("Субконто" + Сч, Новый ОписаниеТипов(СубконтоСчета.ВидСубконто.ТипЗначения));  
        МассивДобавляемыхРеквизитов.Добавить(НовыйРеквизит); 
        МассивУдаляемыхРеквизитов.Добавить("Субконто" + Сч);
        Сч= Сч + 1;
    КонецЦикла;
    ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);
    
    Для каждого ЭлементСписка Из МассивДобавляемыхРеквизитов Цикл
        НовыйЭлемент = Элементы.Добавить(ЭлементСписка.Имя, Тип("ПолеФормы"));    
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.ПутьКДанным = ЭлементСписка.Имя;   
    КонецЦикла;
        
КонецПроцедуры // ()

&НаКлиенте
Процедура СчетПриИзменении(Элемент)  
    Если ЗначениеЗаполнено(Счет) Тогда
        СозданиеРеквизитаФормы();
    КонецЕсли;    
КонецПроцедуры
Показать



Получаю ошибку


Ошибка при вызове метода контекста (СозданиеРеквизитаФормы)
{Документ.Расход.Форма.ФормаПодбора.Форма(72)}:СозданиеРеквизитаФормы();

по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'v':
форма: Элемент
имя: {http://v8.1c.ru/8.2/uobjects}v
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'value':
форма: Элемент
имя: {http://v8.1c.ru/8.1/data/core}value
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'РеквизитФормы'


Покажите как правильно сделать, https://its.1c.ru/db/pubv8devui/content/268/hdoc вот ссылка с которого пытался сделать.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user2107184 02.12.24 19:29 Сейчас в теме
Вангую, что у формы есть собственный реквизит с именем МассивДобавляемыхРеквизитов или НовыйРеквизит (произвольного типа)
3. -AI- 03.12.24 08:35 Сейчас в теме
если
МассивУдаляемыхРеквизитов или МассивДобавляемыхРеквизитов - это реквизит формы,
то там не может быть массив.
если всё же нужен массив - дополнительно заверни его в структуру
4. El_Ninio 03.12.24 14:41 Сейчас в теме
Был глюк, или что то я не понял. Сама заработала. МассивУдаляемых это список значений, храню реквизиты чтоб при повторном вызове удалить ранее созданных реквизитов.
5. user2116971 03.12.24 14:59 Сейчас в теме
(4) В любом случае - я не вижу смысла два раза применять ИзменитьРеквизиты(). Это считай двойное полное перестроение формы со всеми вытекающими
Да я, в принципе, и вообще без него бы обошелся в данном случае:
- максимальное количество реквизитов плана счетов известно (читай - фиксированное количество реквизитов и их имен)
- доступно переименование реквизитов (например, переименовать старые и добавить их в массив удаляемых, добавить новые и одним движением ИзменитьРеквизиты(Жлбавляемые, Удаляемые))
- доступно изменение типа реквизита (просто тупо в цикле у этих реквизитов поменять тип, и не надо вообще никакого ИзменитьРеквизиты()).

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот