- В обработчиках событий модулей объектов, наборов записей, форм и т.п., содержащих параметр
Отказ(ПриЗаписи,ОбработкаПроверкиЗаполнения,ТоварыПередНачаломДобавленияи т.п.), не следует присваивать этому параметру значениеЛожь. Это требование обусловлено тем, что, как правило, в коде обработчиков событий параметрОтказможет устанавливаться сразу в нескольких последовательных проверках (или в нескольких подписках на одно и то же событие). В таком случае к моменту выполнения очередной проверки параметрОтказуже может заранее содержать значениеИстина, и можно ошибочно сбросить его обратно вЛожь. Кроме того, при доработках конфигурации на внедрении число этих проверок может увеличиться.
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
...
Отказ = ЕстьОшибкиЗаполнения();
...
КонецПроцедурыПроцедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
. . .
Если ЕстьОшибкиЗаполнения() Тогда
Отказ = Истина;
КонецЕсли;
...
КонецПроцедуры или
Отказ = Отказ Или ЕстьОшибкиЗаполнения(); - Эти же требования справедливы для других аналогичных параметров обработчиков событий:
СтандартнаяОбработка,Выполнениеи др.
Например:
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
Если Параметры.Свойства(...) Тогда
СтандартнаяОбработка = Ложь;
...
КонецЕсли;
КонецПроцедуры- Неприемлемо в событиях объекта
ПриЗаписи,ПередЗаписью,ПередУдалением,ОбработкаПроведения,ОбработкаПроверкиЗаполненияи т.п устанавливать параметрОтказв значениеИстинабез информирования пользователя о причинах:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Если Не ТоваровНаСкладеДостаточно() Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
...
КонецПроцедурыВ таких случаях сообщение об ошибке не информативно и скрывает истинные причины проблемы, поэтому расследование ошибки требует значительных временных затрат:
Не удалось записать "Заказ покупателя"!Следует согласно пп. 1.1 и 1.3 стандарта Информирование пользователя корректно уведомить пользователя о причинах отказа с помощью сообщения или вызова исключения.
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Если Не ТоваровНаСкладеДостаточно() Тогда
ТекстСообщения = СтрШаблон(НСтр("ru='Не хватает %1 %2 товара %3, на складе %4'"), Количество, ЕдиницаИзмерения, Товар, Склад);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,, "Объект.Товары",, Отказ);
КонецЕсли;
...
КонецПроцедуры