Определяем модифицированность объекта на сервере.

Задача для примера:

При записи документа "Заказ клиента", если у него при редактировании изменилось значение реквизита "Пометка удаления", нужно выполнить какой-то программный алгоритм. Если значение не изменилось, то алгоритм выполнять не нужно. В общем, цель – определить, изменилось ли значение реквизита "Пометка удаления" перед тем, как документ будет записан.

У управляемой формы есть свойство Модифицированность. Но в данном случае оно вряд ли пригодится, так как пометка удаления может устанавливаться не из формы документа. Дальше приходит на ум использовать метод объекта метаданых "ДокументОбъект" Модифицированность(). Однако в отладчике видно, что даже если ничего не менять в документе, то при записи метод Модифицированность() всё равно принимает значение Истина.

Но выход есть. Отследить и обработать изменение реквизита "Пометка удаления" можно с помощью метода ДополнительныеСвойства. Для этого нам понадобится внести небольшие дополнения в процедуры модуля объекта документа.

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	
	Если НЕ Ссылка.ПометкаУдаления = ПометкаУдаления Тогда
		ДополнительныеСвойства.Вставить("ПометкаУдаленияИзменена", Истина);
	КонецЕсли;
	
КонецПроцедуры

В процедуре ПередЗаписью() мы сравниваем значение реквизита "Пометка удаления" редактируемого документа с значением, которое записано в базе. Если значения не равны, то записываем признак изменённости в дополнительные свойства, и далее используем его в процедуре ПриЗаписи():

Процедура ПриЗаписи(Отказ)
	
	Если ДополнительныеСвойства.Свойство("ПометкаУдаленияИзменена", Истина) Тогда
		// Произвольная обработка условия...
	КонецЕсли;
	
КонецПроцедуры

Комментарии   

0 #1 Андрей 21.11.2019 10:15
В своей статье Вы предлагаете не использовать свойство и/или метод 1C Модифицированность, а просто запоминаете тот реквизит или значение, которое Вам нужно проверить, а если надо проверить все реквизиты? Не перечислять же из все для запоминания старых значений?
Цитировать