Поиск значения древовидной структуры по ключу
Клиент обратился с просьбой исправить ошибку в расширении, которая появилась после обновления.
Нашел проблемную строку кода:
Выяснил, что изменилась структура ДополнительныеСвойства, и к РежимуЗаписи теперь можно обратиться так:
ПроведениеДокументов и СвойстваДокумента это структуры.
Решил, что нужно написать функцию по поиску значения в древовидной структуре ДополнительныеСвойства по ключу "РежимЗаписи", чтобы при последующих обновлениях и возможном изменении структуры ДополнительныеСвойства не возникала ошибка.
Теперь проблемная строка кода выглядит так:
На ваш взгляд это правильный подход?
Нашел проблемную строку кода:
Если Не Отказ И ДополнительныеСвойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Выяснил, что изменилась структура ДополнительныеСвойства, и к РежимуЗаписи теперь можно обратиться так:
Если Не Отказ И ДополнительныеСвойства.ПроведениеДокументов.СвойстваДокумента.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
ПроведениеДокументов и СвойстваДокумента это структуры.
Решил, что нужно написать функцию по поиску значения в древовидной структуре ДополнительныеСвойства по ключу "РежимЗаписи", чтобы при последующих обновлениях и возможном изменении структуры ДополнительныеСвойства не возникала ошибка.
Функция ПолучитьЗначениеСтруктурыПоКлючу(Структура, Ключ)
Если Структура.Свойство(Ключ) Тогда
Возврат Структура[Ключ];
Иначе
Для Каждого Элемент Из Структура Цикл
Если ТипЗнч(Элемент.Значение) = Тип("Структура") Или ТипЗнч(Элемент.Значение) = Тип("ФиксированнаяСтруктура") Тогда
Возврат ПолучитьЗначениеСтруктурыПоКлючу(Элемент.Значение, Ключ);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецФункции
ПоказатьТеперь проблемная строка кода выглядит так:
Если Не Отказ И ПолучитьЗначениеСтруктурыПоКлючу(ДополнительныеСвойства, "РежимЗаписи") = РежимЗаписиДокумента.Проведение Тогда
На ваш взгляд это правильный подход?
По теме из базы знаний
- JSON парсер для профессиональных разработчиков
- Регулярные выражения – это просто. Построитель и отладчик регулярных выражений
- Программная работа с графическими схемами. Готовое решение
- Описание формата внутреннего представления данных 1С в контексте обмена данными
- Алгоритм K-ближайших соседей (KNN) в 1С 8.3 и машинное обучение
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Решили не тестить даже?
До второго элемента структуры даже не дойдёт, на первом же сработает Возврат.
Для Каждого Элемент Из Структура Цикл
Если ТипЗнч(Элемент.Значение) = Тип("Структура") Или ТипЗнч(Элемент.Значение) = Тип("ФиксированнаяСтруктура") Тогда
Возврат ПолучитьЗначениеСтруктурыПоКлючу(Элемент.Значение, Ключ);
КонецЕсли;
КонецЦикла;
До второго элемента структуры даже не дойдёт, на первом же сработает Возврат.
(7) проверьте:
Структура1 = Новый Структура("Фигня",Ложь);
Структура2 = Новый Структура("РежимЗаписи", Истина);
ДопСвойства = Новый Структура("Структура1, Структура2", Структура1, Структура2);
Результат = ПолучитьЗначениеСтруктурыПоКлючу(ДопСвойства,"РежимЗаписи");
А в следующем обновлении они имя ключа поменяют или перенесут в другой модуль. Пустое это. 1с тщательно следит за тем, чтобы обновления ломали работу как можно большего количества доработок, это хлеб франчей, а франчи это хлеб 1с.
Но если клиент готов оплачивать такие упражнения, то почему бы и нет.
Но если клиент готов оплачивать такие упражнения, то почему бы и нет.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот