Наличие обязательной конструкции "Если ОбменДанными.Загрузка Тогда ..."
Обработчик события ПередЗаписью
В данном обработчике, как правило, должны выполняться действия, связанные с заполнением значений реквизитов объекта (набора записей, значения константы; далее упрощенно - "объект"), проверки правильности их заполнения, связанности состояния объекта с некоторыми внешними данными. Также в данном обработчике следует выполнять действия, связанные с обращением к "старым" значениям реквизитов объекта, сохраненным в базу данных (имеет смысл при редактировании уже записанных ранее объектов, наборов записей и т.п.).
Содержимое процедуры-обработчика события ПередЗаписью
условно должно разделяться на две части:
- действия выполняемые при каждой записи объекта (в том числе и когда объект записывается механизмом обмена данными),
- и действия, которые не должны выполняться в случае записи объекта механизмом обмена.
Процедура ПередЗаписью(Отказ)
// действия, которые должны выполняться всегда, в том числе и при обмене данных
// ...
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// действия, выполняемые в случае, если запись инициирована не механизмом обмена данными
// ...
КонецПроцедуры
В большинстве случаев, все действия выполняемые в обработчике ПередЗаписью
должны располагаться в модуле после конструкции
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
То есть они не должны выполняться при записи объекта через механизм обмена данными, поскольку они уже были выполнены для объекта в том узле, где он был создан. В случае исключений, причина исключения из этого правила должна быть описана в комментарии к выполняемым действиям.
Обработчик события ПередУдалением
В данном обработчике модуля объекта, как правило, должны выполняться действия, которые необходимо выполнить перед удалением объекта. Например, перед удалением присоединенного файла может потребоваться произвести очистку ссылок на этот файл в объекте-владельце.
Содержимое процедуры-обработчика события ПередУдалением
условно должно разделяться на две части: - действия выполняемые перед каждым удалением объекта (в том числе и когда объект удаляется механизмом обмена данными), - действия, которые не должны выполняться перед удалением объекта механизмом обмена.
Процедура ПередУдалением(Отказ)
// действия, которые должны выполняться всегда, в том числеи при обмене данных
// ...
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// действия, выполняемые в случае, если событие перед удалением инициировано не механизмом обмена данными
// ...
КонецПроцедуры
В большинстве случаев, все действия выполняемые в обработчике ПередУдалением
должны располагаться в модуле после конструкции
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Т.е. они не должны выполняться перед удалением объекта через механизм обмена данными, так как это может привести к ошибкам. Примером таких ошибок является обращение к предопределенным объектам после очистки области данных. В случае исключений, причина исключения из этого правила должна быть описана в комментарии к выполняемым действиям.
Обработчик события ПриЗаписи
В данном обработчике, как правило, выполняются действия связанные с записью связанной с объектом (набором записей, значения константы; далее - "объект") данных в других объектах конфигурации, выполнении других действий, связанных с изменением объекта.
Запрещается в данном обработчике изменять содержимое записываемого объекта, поскольку на момент выполнения обработчика, объект уже записан в БД.
Для обработчика события ПриЗаписи
действуют те же требования в отношении разделения действий выполняемых при записи объекта механизмом обмена данными, что и для события ПередЗаписью
(см. раздел Обработчик события ПередЗаписью
).
Экранирование кода
// sonar:DataExchangeLoad:off
// sonar:DataExchangeLoad:on