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

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

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

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

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


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

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

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

Author: Владимир Тюрюков

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

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