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