bsl-language-server icon indicating copy to clipboard operation
bsl-language-server copied to clipboard

[NEW] Запрет установки параметр "Отказ" в Истина без информирования пользователя

Open artbear opened this issue 4 years ago • 6 comments

Описание проблемы, ошибки, которую надо диагностировать

Неприемлемо в событиях объекта ПриЗаписи, ПередЗаписью, ПередУдалением, ОбработкаПроведения, ОбработкаПроверкиЗаполнения и т.п. устанавливать параметр Отказ в значение Истина без информирования пользователя о причинах:

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

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
 
 Если Не ТоваровНаСкладеДостаточно() Тогда
   Отказ = Истина;
   Возврат;
 КонецЕсли;

 ...
КонецПроцедуры

В таких случаях сообщение об ошибке не информативно и скрывает истинные причины проблемы, поэтому расследование ошибки требует значительных временных затрат:

  • Не удалось записать "Заказ покупателя"!

Согласно пп. 1.1 и 1.3 стандарта Информирование пользователя следует корректно уведомить пользователя о причинах отказа с помощью сообщения или вызова исключения.

Правильно:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

 Если Не ТоваровНаСкладеДостаточно() Тогда
  
  ТекстСообщения = СтрШаблон(НСтр("ru='Не хватает %1 %2 товара %3, на складе %4'"), Количество, ЕдиницаИзмерения, Товар, Склад);
  ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,, "Объект.Товары",, Отказ);
  
 КонецЕсли;
 
 ...
КонецПроцедуры 

Связан с диагностикой из https://github.com/1c-syntax/bsl-language-server/issues/70

Алгоритм действий

  • если в коде есть установка Отказ = Истина
  • и нет вызовов Сообщить() или ЛюбойОбъект.Сообщить() или ОбщегоНазначения.СообщитьПользователю или ВызватьИсключение ниже по коду
  • тогда выдаем замечание
  • реализовать аналогично указанной диагностике UsingCancelParameter

Опции

  • добавить параметр для указания методов, выдающих информацию пользователю или выдачу исключений
  • в документации на правило рекомендовать использовать метод из БСП, если БСП установлено
  • возможно, нужно сразу в тексте замечания об этом написать

Ссылка на источник, подтверждающее нарушение либо обоснование наличия проблемы

Параметры диагностики

Тип Статья на русском

  • [x] :ant: Ошибка
  • [ ] :cop: Уязвимость
  • [ ] :guardsman: Потенциальная уязвимость
  • [ ] :poop: Качество кода
  • [ ] :trollface: Другое

Важность Статья на русском

  • [ ] :broken_heart: Блокирующая / Blocker
  • [x] :heart: Критическая / Critical
  • [ ] :yellow_heart: Важная / Major
  • [ ] :blue_heart: Незначительная / Minor
  • [ ] :green_heart: Информационная / Info
  • [ ] :revolving_hearts: Другое

Тэги Статья на русском

  • [x] STANDARD - "Нарушение стандартов 1С"
  • [ ] LOCKINOS - "Не будет работать в другой ОС"
  • [ ] SQL - "Проблема с запросом"
  • [ ] PERFORMANCE - "Проблема производительности"
  • [ ] BRAINOVERLOAD - "Непонятный код"
  • [x] BADPRACTICE - "Плохая практика программирования"
  • [ ] CLUMSY - "Излишние действия"
  • [ ] DESIGN - "Ошибка в проектировании"
  • [x] SUSPICIOUS - "Подозрительный код"
  • [ ] UNPREDICTABLE - "Непредсказуемо работающий код"
  • [ ] DEPRECATED - "Устаревшая функциональность"
  • [ ] ERROR - "Ошибочная конструкция"
  • [ ] LOCALIZE - "Проблемы локализации"

Время на исправление (минут)

3 минуты

Дополнительная информация

artbear avatar Mar 24 '21 21:03 artbear