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