Рубрики
1С: Предприятие 8.х

ДанныеФормыДерево ЗначениеВДанныеФормы недопустимое значение параметра (параметр номер ‘2’) УФ

Разрабатывая в режиме совместимости интерфейса 1C 8.2 столкнулся с тем, что на УФ ЗначениеВРеквизитФормы() выдает ошибку когда пытаешься загрузить пустое ДеревоЗначений в РеквизитФормы типа ДанныеФормыДерево

Решением считаю выгружать только те колонки дерева значений в элемент формы которые есть в этом элементе.

Также я рекомендую проверять что в загружаемом в данные формы ДеревеЗначений есть колонки и какие-либо данные т.к. старые версии 1С предприятия и режимы совместимости с ними выдают ошибки, когда грузишь структуру отличную от той, то есть в элементе формы.

Ниже код для добавления в свои фреймворки.

Процедура ВыгрузитьСтрокиЭлементаДереваЗначений(Источник, Приемник, ИменаКолонокДляКопирования) Экспорт
    ВложенныеСтроки = Источник.Строки;
    
    Приемник = Новый ДеревоЗначений;
    Для каждого СтрокаИсточник Из ВложенныеСтроки Цикл
        СтрокаПриемник = Приемник.Строки.Добавить();
        ВыгрузитьСтрокиЭлементаДереваЗначений(СтрокаИсточник, СтрокаПриемник, ИменаКолонокДляКопирования);
    КонецЦикла;
    
КонецПроцедуры

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

Функция ПопыткаЗначениеВРеквизитФормы(Источник, Приемник)
    Если ЗначениеЗаполнено(Источник) Тогда
        Попытка
            ЗначениеВРеквизитФормы(Источник, Приемник);        	
        Исключение
            ПриемникРезультат = РеквизитФормыВЗначение(Приемник, Тип("ДеревоЗначений"));
            СкопироватьСовпадающиеКолонкиВРезультат(Источник, ПриемникРезультат);
            ЗначениеВРеквизитФормы(ПриемникРезультат, Приемник);
            //ОписаниеОшибки()
        КонецПопытки;
    КонецЕсли;
    
КонецФункции

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.