bsl-language-server
bsl-language-server copied to clipboard
[NEW] Запрет установки параметр "Отказ" в Истина без информирования пользователя
Описание проблемы, ошибки, которую надо диагностировать
Неприемлемо в событиях объекта ПриЗаписи, ПередЗаписью, ПередУдалением, ОбработкаПроведения, ОбработкаПроверкиЗаполнения и т.п. устанавливать параметр Отказ в значение Истина без информирования пользователя о причинах:
Неправильно:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Если Не ТоваровНаСкладеДостаточно() Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
...
КонецПроцедуры
В таких случаях сообщение об ошибке не информативно и скрывает истинные причины проблемы, поэтому расследование ошибки требует значительных временных затрат:
Не удалось записать "Заказ покупателя"!
Согласно пп. 1.1 и 1.3 стандарта Информирование пользователя следует корректно уведомить пользователя о причинах отказа с помощью сообщения или вызова исключения.
Правильно:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Если Не ТоваровНаСкладеДостаточно() Тогда
ТекстСообщения = СтрШаблон(НСтр("ru='Не хватает %1 %2 товара %3, на складе %4'"), Количество, ЕдиницаИзмерения, Товар, Склад);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,, "Объект.Товары",, Отказ);
КонецЕсли;
...
КонецПроцедуры
Связан с диагностикой из https://github.com/1c-syntax/bsl-language-server/issues/70
Алгоритм действий
- если в коде есть установка
Отказ = Истина - и нет вызовов
Сообщить()илиЛюбойОбъект.Сообщить()илиОбщегоНазначения.СообщитьПользователюилиВызватьИсключениениже по коду - тогда выдаем замечание
- реализовать аналогично указанной диагностике UsingCancelParameter
Опции
- добавить параметр для указания методов, выдающих информацию пользователю или выдачу исключений
- в документации на правило рекомендовать использовать метод из БСП, если БСП установлено
- возможно, нужно сразу в тексте замечания об этом написать
Ссылка на источник, подтверждающее нарушение либо обоснование наличия проблемы
- Работа с параметром «Отказ» в обработчиках событий, п.3 - Стандарт 1С
- Информирование пользователя - Стандарт 1С
- Перехват исключений в коде - Стандарт 1С
Параметры диагностики
Тип Статья на русском
- [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 минуты