Skip to content

Latest commit

 

History

History
96 lines (65 loc) · 4.9 KB

event-heandler-boolean-param.md

File metadata and controls

96 lines (65 loc) · 4.9 KB

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

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

Неправильно

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

Правильно

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

или

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

Например:

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

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

Неправильно

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

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

 ...

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

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

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

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

Правильно

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

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

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

См.