Имя: Пароль:
1C
 
Поиск значения древовидной структуры по ключу
0 Алексей Турков
 
18.04.23
20:52
Клиент обратился с просьбой исправить ошибку в расширении, которая появилась после обновления.
Нашел проблемную строку кода:
Если Не Отказ И ДополнительныеСвойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда

Выяснил, что изменилась структура ДополнительныеСвойства, и к РежимуЗаписи теперь можно обратиться так:
Если Не Отказ И ДополнительныеСвойства.ПроведениеДокументов.СвойстваДокумента.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда

ПроведениеДокументов и СвойстваДокумента это структуры.

Решил, что нужно написать функцию по поиску значения в древовидной структуре ДополнительныеСвойства по ключу "РежимЗаписи", чтобы при последующих обновлениях и возможном изменении структуры ДополнительныеСвойства не возникала ошибка.

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

Теперь проблемная строка кода выглядит так:
Если Не Отказ И ПолучитьЗначениеСтруктурыПоКлючу(ДополнительныеСвойства, "РежимЗаписи") = РежимЗаписиДокумента.Проведение Тогда

На ваш взгляд это правильный подход?
1 lodger
 
18.04.23
23:19
В БСП костыль с похожим смыслом не завалился где-нибудь?
2 Мимохожий Однако
 
19.04.23
07:29
(0) Если работает и не тормозит, то можно считать правильным. Без контекста оценить сложно
2 + 2 = 3.9999999999999999999999999999999...