# Использование булевого параметра обработчика события

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

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

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

## Правильно

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

или

```bsl
Отказ = Отказ Или ЕстьОшибкиЗаполнения(); 
```

2. Эти же требования справедливы для других аналогичных параметров обработчиков событий: `СтандартнаяОбработка`, `Выполнение` и др.

Например:

```bsl
Процедура  ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) 
 
  Если Параметры.Свойства(...) Тогда 
     СтандартнаяОбработка = Ложь; 
     ...
 
  КонецЕсли; 

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

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

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

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

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

 ...

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

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

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

Следует согласно пп. 1.1 и 1.3 стандарта [Информирование пользователя](https://its.1c.ru/db/v8std#content:400:hdoc) корректно уведомить пользователя о причинах отказа с помощью сообщения или вызова исключения.

## Правильно

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

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

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

## См.

- [Работа с параметром «Отказ» в обработчиках событий](https://its.1c.ru/db/v8std#content:686:hdoc:1)
