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

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

Кратко

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

Идентификаторы

Поле Значение
Код правила BSL260
Совместимый псевдоним UnsafeFindByCode
Серьёзность WARNING
Без конфигурации Да
BSLLS JSON, режим ON без переопределений Да
Флаг реестра implemented Да
Теги correctness, robustness

Флаг implemented отражает реестр и не подтверждает проверенное совпадение с BSLLS.

Поведение

  • Публичный идентификатор BSL260 и псевдоним UnsafeFindByCode стабильны.
  • Правило сообщает о случаях, описанных на этой странице.
  • Подавления и проектная конфигурация применяются до публикации результата.
  • Для выполнения правила не требуется внешний анализатор или сетевой доступ.

Настройка и подавление

Код BSL### - основной стабильный идентификатор. Совместимый псевдоним принимается в select, ignore и совместимых блоковых комментариях.

[tool.onec-hbk-bsl]
select = ["BSL260"]
ignore = ["UnsafeFindByCode"]

Все три семейства подавлений работают для текущей строки и диапазона. Если открывающий комментарий стоит после кода, он действует только на эту строку. Используйте любой один вариант:

  • noqa:
Значение = "пример";  // noqa: BSL260
  • bsl-disable (совместимый вариант):
Значение = "пример";  // bsl-disable: BSL260
  • совместимый BSLLS-вариант:
Значение = "пример";  // BSLLS:UnsafeFindByCode-off

Если тот же открывающий комментарий стоит на отдельной строке, он начинает диапазон. Закройте его парным маркером того же семейства:

// noqa: BSL260
// код без этой диагностики
// noqa-enable: BSL260

// bsl-disable: BSL260
// код без этой диагностики
// bsl-enable: BSL260

// BSLLS:UnsafeFindByCode-off
// код без этой диагностики
// BSLLS:UnsafeFindByCode-on

Чтобы отключить правило до конца файла, не добавляйте закрывающий noqa-enable, bsl-enable или BSLLS:…-on.

Открывающий и закрывающий маркеры должны принадлежать одному семейству.

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

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

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

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

Примеры

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

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

Правильно:

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

Источники