При создании форм редактирования для различных объектов часто встает задача отображения в форме либо дополнительной информации связанной с этим объектом, либо части данных объекта, которые не могут быть связаны с элементами формы посредством системного механизма связи с данными. В первом случае примером может служить список курсов валют в форме редактирования элемента валюты. Во втором случае примером служит фотография сотрудника, хранящаяся в хранилище значений.
Для правильной синхронизации данных с элементами формы нужно рассмотреть действия пользователя, которые приводят к необходимости обновлять те или иные данные, и какие инструменты, предоставляемые формой, нужно задействовать для решения этой задачи. При редактировании объекта в форме пользователь может совершать следующие действия: открыть форму нового объекта, открыть форму существующего объекта, записать новый объект, записать измененный объект, вызвать перечитывание объекта. Кроме того, разработчик может предусмотреть смену редактируемого объекта без закрытия формы. Действия по открытию формы нового и существующего объекта, изменения объекта в форме можно объединить в одно действие - назначение форме другого объекта для редактирования. При этом в форме должны быть обновлены и список валют и фотография сотрудника, так как в форме редактируется уже другой объект.
При записи существующего объекта ничего обновлять не нужно, так как в процессе записи данные объекта не изменяются. Запись нового объекта выделена в отдельное действие, так как при этом изменяется ссылка объекта. В этом случае требуется обновить содержимое списка валют, так как его содержимое зависит от значения ссылки объекта. При изменении ссылки перечитывать фотографию не надо, так как она не изменилась.
При нажатии на кнопку "Перечитать данные" пользователь ожидает, что будут обновлены данные объекта и все связанные с ним данные, поэтому в этом случае следует обновить и список валют, и фотографию сотрудника.
Для решения этих задач форма предоставляет возможность назначить обработчик на событие формы ПриИзмененииДанных, и на изменении данных объекта Ссылка. Подключение обработчика изменения данных может быть осуществлено в теле модуля формы следующим образом:
Копировать в буфер обменаПодключитьОбработчикИзмененияДанных("СправочникОбъект.Ссылка", "ПриИзмененииСсылки", Ложь);
В таблице отражено, на какие действия пользователя, вызываются эти события.
Событие | Присвоение | Запись нового | Перечитывание |
Событие формы ПриИзмененииДанных | Х | Х | |
Обработчик изменения данных Ссылка | Х | Х | Х |
Как видно из таблицы событие формы ПриИзмененииДанных вызывается на присвоение другого объекта (будет вызываться при открытии формы нового и существующего объекта) и при перечитывании данных, но не будет вызываться при записи нового объекта. Следовательно, данное событие подходит для синхронизации фотографии сотрудника с элементов формы картинка.
Обработчик изменения данных Ссылка вызывается при всех действиях. Следовательно, данное событие следует использовать для синхронизации списка валют.