Перейти к содержанию

Небезопасное использование метода НайтиПоКоду() (UnsafeFindByCode)

Тип Поддерживаются
языки
Важность Включена
по умолчанию
Время на
исправление (мин)
Теги
Дефект кода BSL Важный Да 5 design
suspicious

Описание диагностики

Диагностика обнаруживает использование метода НайтиПоКоду() (или FindByCode()) для справочников, у которых:

  • отключен контроль уникальности кода (свойство Контроль уникальности установлено в значение Ложь)
  • или включены серии кодов не по всему справочнику (свойство Серии кодов не равно ПоВсемуСправочнику)

В таких случаях использование метода НайтиПоКоду() может привести к неожиданному поведению, так как код может быть не уникальным в пределах всего справочника или может существовать несколько элементов с одинаковым кодом в разных сериях.

Примеры

Неправильно:

// Справочник без контроля уникальности
СправочникБезКонтроля = Справочники.СправочникБезКонтроляУникальности.НайтиПоКоду("001");
// Справочник с сериями кодов "В пределах подчинения"
СправочникССериями = Справочники.СправочникССериямиПодчинения.НайтиПоКоду("001");

Правильно:

// Использование метода НайтиПоКоду() для справочника с контролем уникальности
// и сериями кодов по всему справочнику
СправочникСКонтролем = Справочники.СправочникСКонтролемУникальности.НайтиПоКоду("001");
// Альтернативный вариант - использовать метод НайтиПоНаименованию() или другие методы поиска
Справочник = Справочники.СправочникБезКонтроляУникальности.НайтиПоНаименованию("Элемент");

Источники

Сниппеты

Экранирование кода

// BSLLS:UnsafeFindByCode-off
// BSLLS:UnsafeFindByCode-on

Параметр конфигурационного файла

"UnsafeFindByCode": false