Перейти к содержанию
v8cs:event-handler-boolean-param

Использование булевого параметра обработчика события (event-handler-boolean-param)

  • Категория: bsl
  1. В обработчиках событий модулей объектов, наборов записей, форм и т.п., содержащих параметр Отказ (ПриЗаписи, ОбработкаПроверкиЗаполнения, ТоварыПередНачаломДобавления и т.п.), не следует присваивать этому параметру значение Ложь. Это требование обусловлено тем, что, как правило, в коде обработчиков событий параметр Отказ может устанавливаться сразу в нескольких последовательных проверках (или в нескольких подписках на одно и то же событие). В таком случае к моменту выполнения очередной проверки параметр Отказ уже может заранее содержать значение Истина, и можно ошибочно сбросить его обратно в Ложь. Кроме того, при доработках конфигурации на внедрении число этих проверок может увеличиться.

Неправильно

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
  ...
  Отказ = ЕстьОшибкиЗаполнения();
  ...
КонецПроцедуры

Правильно

Процедура  ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
  . . .
  Если ЕстьОшибкиЗаполнения() Тогда
    Отказ = Истина;
  КонецЕсли;
  ...
КонецПроцедуры

или

Отказ = Отказ Или ЕстьОшибкиЗаполнения();
  1. Эти же требования справедливы для других аналогичных параметров обработчиков событий: СтандартнаяОбработка, Выполнение и др.

Например:

Процедура  ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)

  Если Параметры.Свойства(...) Тогда
     СтандартнаяОбработка = Ложь;
     ...

  КонецЕсли;

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

Неправильно

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

 Если Не ТоваровНаСкладеДостаточно() Тогда
   Отказ = Истина;
   Возврат;
 КонецЕсли;

 ...

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

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

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

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

Правильно

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

 Если Не ТоваровНаСкладеДостаточно() Тогда

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

 КонецЕсли;

 ...

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

См.

Соответствие стандартам

Источник диагностики