Достаточно общий механизм управляемой формы

mechanism

Привет всем, кто зашёл случайно или очутился тут случайноlaugh! Поговорим о такой интересной теме, как механизм работы управляемой формы!

Для того, чтобы лучше понять механизм работы управляемой формы, рассмотрим открытие и запись существующего документаsmiley.

pro_10_5_1

Открытие существующего документа

Открытие существующего документа, например, "Реализация товаров", всегда начинается со считывания данных из БД (система выполняет неявный запрос). Именно этими данными заполняется ДокументОбъект вида "Реализация товаров" в событии ПриЧтенииНаСервере.

Таким образом, после заполнения ДокументОбъект будет содержать информацию о самом документе.

После этого, опять же на стороне сервера создаётся управляемая форма с основным реквизитом Объект. Почему его называют основным? Одна из причин заключается в том, что ранее созданный ДокументОбъект конвертируется в реквизит формы Объект в тип ДанныеФормыСтруктура. Основным реквизитом его называют, потому что именно в него происходит считывание данных и именно с помощью него происходит запись в БД.

Таким образом, на стороне сервера получаем управляемую форму с полностью заполненными данными. Это происходит в событии ПриСозданииНаСервере.

Далее система удаляет ДокументОбъект т.к. он выполнил свою функцию, и необходимости в нём больше нет.

После этого система передаёт заполненную на сервере управляемую форму на сторону клиента. На стороне клиенте управляемая форма открывается. Это происходит в событии ПриОткрытии.

Ну, и последним шагом является удаление управляемой формы созданной на стороне сервера т.к. в ней также необходимости больше нет.

Запись документа

После того, как форма открылась, пользователь начинает редактировать документ. Таким образом, мы получаем как бы две версии документа: версия, которая сохранена в БД и версия, которая отображена на экране у пользователя. Чего? Кто это? Капитан Очевидность ты что-то хочешь сказать? "Да, признаком что версии документов отличаются можно судить по наличию звёздочки" —  сказал капитан Очевидностьlaughlaughlaugh.

pro_10_5_2

Символ * говорит о том, что документ был модифицирован со времени последней записи и новая запись в БД пока ещё не происходила.

Из этого можно сделать вывод, что пользователь работает с экземпляром объекта ранее записанного в БД.

После редактирования пользователем вся изменённая версия находится в реквизите Объект. При записи именно эта версия и будет записана в БД, опять же по причине того, что реквизит Объект является основным (свойство реквизита), которому доступны такие стандартные действия, как запись в БД, проведение, пометка на удаление, отмена проведения и прочие стандартные действия, характерные типу данных ДокументОбъект (для объекта Справочник свои стандартные действия).

pro_10_5_3

Когда происходит запись или проведение, то система данные формы (реквизит Объект) передаёт на сторону сервера, где преобразует из типа ДанныеФормыСтруктура в тип ДокументОбъект и записывает в БД. Таким образом, чтение и запись происходит от типа ДокументОбъект.

Наверно, не трудно догадаться, что управляемая форма это клиентский объектsmiley. Естественно, на клиенте недоступны такие типы как ТаблицаЗначений, ДокументОбъект итдlaugh.

Например, ДокументОбъект система преобразует в похожий по структуре тип ДанныеФормыСтруктура, а ТаблицаЗначений в ДанныеФормыКоллекция. Для чего система это делает? Система это делает для того, чтобы "тяжёлый" тип преобразовать в "лёгкий", ведь, как известно, тонкий клиент работает по тонким ("лёгким") каналам связи. Естественно, у преобразованного типа ("лёгкого") не все методы и свойства присутствуют по-сравнению с исходным ("тяжёлым"). Но это отдельная и большая темаwink.

Скажу лишь, что существует метод РеквизитФормыВЗначение, который преобразует клиентский тип ("лёгкий") в исходный ("тяжёлый"). Обратное преобразование возможно при помощи метода ЗначениеВРеквизитФормы.

Наличие скобок в дереве реквизитов как раз и свидетельствуют о том, что произошло преобразование типов.

pro_10_5_4

Обратите внимание, что реквизит формы Согласован и ТекущаяДатаРеквизит не обрамлены скобками. О чём это говорит? Это говорит о том, что тип изначально лёгкий и не требует дополнительного преобразования.

Ну вот как-то так. Ничего сложного как всегда нетyes.

Понравилось? Не забудь поддержать сайт!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *