bsl-language-server
bsl-language-server copied to clipboard
[NEW] Получение метаданных объектов
Описание проблемы, ошибки, которую надо диагностировать
- В тех случаях, когда известен тип объекта метаданного (справочник, документ, и т.п.), то получение метаданных объекта конфигурации следует выполнять с помощью метода
Метаданныеэтого объекта (или ссылки для объектов ссылочного типа), а не путем обращения к свойству глобального контекстаМетаданные, так как второй способ существенно более медленный.
Правильно:
СправочникОбъект.Метаданные()
Неправильно:
Метаданные.Справочники[ИмяСправочника]Метаданные.НайтиПоПолномуИмени("Справочник." + ИмяСправочника)
- В тех случаях, когда тип объекта метаданного заранее неизвестен, рекомендуется воспользоваться методом
НайтиПоТипу, например:
// Получить полное имя объекта метаданных вида "Справочник.Номенклатура",
// "Документ.ПриходнаяНакладная" по переданной ссылке.
ИмяОбъектаМетаданного = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).ПолноеИмя();
Ссылка на источник, подтверждающее нарушение либо обоснование наличия проблемы
https://its.1c.ru/db/v8std#content:445:hdoc
Параметры диагностики
Тип Статья на русском
- [ ] :ant: Ошибка
- [ ] :cop: Уязвимость
- [ ] :guardsman: Потенциальная уязвимость
- [x] :poop: Качество кода
- [ ] :trollface: Другое
Важность Статья на русском
- [ ] :broken_heart: Блокирующая / Blocker
- [ ] :heart: Критическая / Critical
- [x] :yellow_heart: Важная / Major
- [ ] :blue_heart: Незначительная / Minor
- [ ] :green_heart: Информационная / Info
- [ ] :revolving_hearts: Другое
Тэги Статья на русском
- [x]
STANDARD- "Нарушение стандартов 1С" - [ ]
LOCKINOS- "Не будет работать в другой ОС" - [ ]
SQL- "Проблема с запросом" - [x]
PERFORMANCE- "Проблема производительности" - [ ]
BRAINOVERLOAD- "Непонятный код" - [x]
BADPRACTICE- "Плохая практика программирования" - [ ]
CLUMSY- "Излишние действия" - [ ]
DESIGN- "Ошибка в проектировании" - [ ]
SUSPICIOUS- "Подозрительный код" - [ ]
UNPREDICTABLE- "Непредсказуемо работающий код" - [ ]
DEPRECATED- "Устаревшая функциональность" - [ ]
ERROR- "Ошибочная конструкция" - [ ]
LOCALIZE- "Проблемы локализации"
Время на исправление (минут)
1
Дополнительная информация
Нужен алгоритм проверки.
алгоритм простой:
- искать вызовы
Метаданные.Справочники[ИмяСправочника]Метаданные.ВидМетаданного[ИмяМетаданного]Метаданные.НайтиПоПолномуИмени("Справочник." + ИмяСправочника)Метаданные.НайтиПоПолномуИмени("ВидМетаданного." + ИмяМетаданного)Метаданные.НайтиПоПолномуИмени(XXX)
@zeegin
Но ведь эти вызовы разрешены.
Их не рекоменуется использовать когда есть Ссылка.
Потому сложно не поймать FP.
А как исключить неправильное использование именно при наличии ссылки, будет правильно, но не понятно как эту доп информацию вычленить.
Но ведь эти вызовы разрешены. Их не рекоменуется использовать когда есть Ссылка.
@zeegin Расшифруй свою фразу
в приведенном мной источнике https://its.1c.ru/db/v8std#content:445:hdoc ничего не сказано про "Ссылка".
Нет запрета на получения метаданных через менеджер Метаданные. Есть рекомендация не искать в менеджере метаданные нужного типа, когда известен объект или ссылка.
Просто использовать менеджер это ок когда ты оперируешь именно метаданными, т.е. когда ни объекта ни ссылки у тебя нет.
Ругаться на все вызовы будет много FP.