Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Стандарт 412: В запросе отсутствует проверка на NULL для поля, которое может потенциально содержать NULL. #163

Open
marmyshev opened this issue Sep 9, 2021 · 9 comments · May be fixed by #1153
Assignees
Labels
ql 1C:Query Language, язык запросов 1С standards Поддержка стандартов АПК Доработка совместимоси с функциональностю АПК ред.1

Comments

@marmyshev
Copy link
Collaborator

marmyshev commented Sep 9, 2021

Название проверки

В запросе отсутствует проверка на NULL для поля, которое может потенциально содержать NULL.

Английское название проверки
??

Правило анализа кода/метаданных

1.2. При сортировке по полю запроса, которое может потенциально
содержать NULL, следует учитывать, что в разных СУБД порядок сортировки
по этому полю может отличаться.

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

ВЫБРАТЬ
  СправочникНоменклатура.Ссылка КАК НоменклатураСсылка,
  ЗапасыОстатки.КоличествоОстаток КАК КоличествоОстаток
ИЗ
  Справочник.Номенклатура КАК СправочникНоменклатура
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Запасы.Остатки КАК
ЗапасыОстатки
    ПО (ЗапасыОстатки.Номенклатура = СправочникНоменклатура.Ссылка)

УПОРЯДОЧИТЬ ПО
  КоличествоОстаток

Правильно:

ВЫБРАТЬ
  СправочникНоменклатура.Ссылка КАК НоменклатураСсылка,
  ЕСТЬNULL(ЗапасыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток
ИЗ
  Справочник.Номенклатура КАК СправочникНоменклатура
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Запасы.Остатки КАК
ЗапасыОстатки
    ПО (ЗапасыОстатки.Номенклатура = СправочникНоменклатура.Ссылка)

УПОРЯДОЧИТЬ ПО
  КоличествоОстаток

 

Мета-информация (пожалуйста, заполните если знаете):

  • Номер стандарта: 412
  • Код проверки: ??my-check-id
  • Тип ошибки: ERROR SECURITY PERFORMANCE WARNING PORTABILITY LIBRARY_DEVELOPMENT_AND_USAGE CODE_STYLE UI_STYLE SPELLING
  • Критичность: BLOCKER CRITICAL MAJOR MINOR TRIVIAL
  • Код ошибки АПК: 540

Параметры проверки

  • NA

Текст ошибки

В запросе отсутствует проверка на NULL для поля, которое может потенциально содержать NULL.

Пример некорректного решения

  • NA

Описание, почему так делать нельзя

Пример корректного решения

  • NA

Дополнительные материалы

@marmyshev marmyshev added standards Поддержка стандартов АПК Доработка совместимоси с функциональностю АПК ред.1 Черновик Задача не отредактирована, шаблон, или не дописана. bsl 1C Built-in Script Language form Модель форм 1С mdo Metadata objects (Объекты метаданных) labels Sep 9, 2021
@artbear
Copy link
Contributor

artbear commented Oct 10, 2021

Я в БЛС ЛС и Пульском плагине реализовал это замечательное правило.
например, 1c-syntax/bsl-language-server#1650

Ошибка по этому правилу - одни из самых частых ошибок разработчиков 1С любого уровня компетенции!
Даже в замечательной БСП немало таких проблем.

@artbear
Copy link
Contributor

artbear commented Oct 10, 2021

В указанном ПР я добавил примеры и пояснил, почему использование NULL плохо.

в стандартах 1С вообще очень мало информации о том, что сравнение с NULL опасная штука!

@marmyshev
Copy link
Collaborator Author

Поддерживаю!

Кажется что такую задачу довольно легко сделать. Это наверное, не "для начинающих", но всё есть.

@marmyshev
Copy link
Collaborator Author

@artbear ты решишься сам сделать в код-стайле? 😊

@marmyshev marmyshev added ql 1C:Query Language, язык запросов 1С and removed bsl 1C Built-in Script Language mdo Metadata objects (Объекты метаданных) form Модель форм 1С Черновик Задача не отредактирована, шаблон, или не дописана. labels Oct 10, 2021
@artbear
Copy link
Contributor

artbear commented Oct 10, 2021

Да, это правило - одно из моих любимых.
Сделаю и третью реализацию в 3м плагине )

@artbear
Copy link
Contributor

artbear commented Oct 10, 2021

@marmyshev Назначь, плиз, на меня.

@marmyshev
Copy link
Collaborator Author

@artbear я на днях залью API 3-го уровня - для легкого и удобного тестирования QL - предлагаю тесты для этой задачи уже на нём делать.

@marmyshev marmyshev added this to the 0.1 для EDT 2021.2 milestone Oct 11, 2021
@marmyshev
Copy link
Collaborator Author

@artbear как дела с реализацией проеверки? нужна помощь?

@marmyshev marmyshev removed this from the 0.1 для EDT 2021.2 milestone Nov 22, 2021
@disant1
Copy link
Contributor

disant1 commented Sep 15, 2022

Взял в работу

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ql 1C:Query Language, язык запросов 1С standards Поддержка стандартов АПК Доработка совместимоси с функциональностю АПК ред.1
Projects
None yet
3 participants