Приветствую Вас ГостьСреда, 15.05.2024, 01:44

Каталог статей


Проверка модифицированности данных

Если надо проверить, были ли изменены данные на форме, то поможет свойство формы управляемой формы "Модифицированность", доступный НаКлиенте.

Например

&НаКлиенте

...

Если Модифицированность Тогда

КонецЕсли;

...

Это свойство можно установить программно:

Модифицированность = Истина 

Чтобы обозначить, что были произведены какие-то программные изменения или наоборот после программного сохранения установить в Ложь, чтобы повторно не записывать объект.

Если 

Не надо путать с методом объекта Объект.Модифицированность(). Этот метод доступен НаСервере. С его использованием могут возникнуть проблемы, если мы хотим проверить были ли изменены данные на форме, так как если мы будем получать объект по ссылке, то Объект.Модифицированность() всегда вернет Ложь, так как мы только что считали его из базы. Если будем получать объект из реквизита формы, то этот метод всегда вернет Истина, так как изначально реквизит был пустой, а потом мы его заполнили контекстом.

Метод Объект.Модифицированность() возможно использовать только в том случае, если все манипуляции с объектом происходят программно: сначала получили, потом что-то поделали, а потом можно и проверить, изменился ли загруженный ранее объект.

Для того, чтобы однозначно определить отличается ли объект в форме от объекта в базе нужно сравнивать реквизиты полученные по ссылке и реквизиты объекта. Для этого можно воспользоваться универсальной функцией:

Функция ОбъектМодифицирован(Объект, ПроверятьТабличныеЧасти = Истина, ПроверятьСтандартные = Истина) 
 
 Ссылка = Объект.Ссылка;
 Метаданное = Ссылка.Метаданные();
 
 Для каждого Реквизит из Метаданное.Реквизиты Цикл
 Если Объект[Реквизит.Имя] <> Ссылка[Реквизит.Имя] Тогда
 Возврат Истина;
 КонецЕсли;
 КонецЦикла;
 
 Если ПроверятьСтандартные Тогда
 Для каждого Реквизит из Метаданное.СтандартныеРеквизиты Цикл
 Если Объект[Реквизит.Имя] <> Ссылка[Реквизит.Имя] Тогда
 Возврат Истина;
 КонецЕсли;
 КонецЦикла;
 КонецЕсли;
 
 
 Если ПроверятьТабличныеЧасти Тогда
 Для каждого ТЧ из Метаданное.ТабличныеЧасти Цикл
 
 Если Объект[ТЧ.Имя].Количество() <> Ссылка[ТЧ.Имя].Количество() Тогда
 Возврат Истина;
 КонецЕсли;
 
 Для Индекс = 0 по Объект[ТЧ.Имя].Количество()-1 Цикл
 ОбъектСтрокаТЧ = Объект[ТЧ.Имя][Индекс];
 СсылкаСтрокаТЧ = Ссылка[ТЧ.Имя][Индекс];
 Для каждого РеквизитТЧ из ТЧ.Реквизиты Цикл
 Если ОбъектСтрокаТЧ[РеквизитТЧ.Имя] <> СсылкаСтрокаТЧ[РеквизитТЧ.Имя] Тогда
 Возврат Истина;
 КонецЕсли;
 КонецЦикла;
 КонецЦикла;
 
 КонецЦикла; 
 КонецЕсли;
 
 Возврат Ложь;
 
КонецФункции

 

 

 

Категория: Формы | Добавил: leshic (01.04.2019)
Просмотров: 2860 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Вход на сайт
Поиск
Категории раздела
СКД [48]
Регистры [7]
Формы [41]
Администрирование [35]
Запросы [10]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [29]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0