09.12.2009
Любая управляемая форма предназначена для отображения и изменения некоторых данных. Такие данные, как правило, хранятся в реквизитах формы. Совокупность этих данных (значения реквизитов формы) называется данными формы.
Т.к. данные формы доступны и на клиенте и на сервере, то основным хранилищем всех данных выступает сервер, просто потому что взаимодействие клиента и сервера инициируется только с клиента. Это означает, что в момент работы в памяти сервера находятся все данные формы, и доступ к ним осуществляется напрямую. На клиенте же имеется в общем случае частичное представление этих данных, при необходимости подгружаемое с сервера. При дальнейшей работе с формой изменения данных могут передаваться туда и/или обратно для синхронизации состояний клиента и сервера.
Данный подход накладывает определенный отпечаток на методику работы с данными формы. Рассмотрим основные сценарии работы с формой:
При открытии формы, на клиенте в памяти доступны следующие данные:
Т.е. если у вас есть реквизит, в котором, например, хранится список значений, то этот список целиком будет передан на клиента при открытии формы. Для табличных частей, алгоритм работы платформы другой – изначально передается только часть строк. Далее, при обращении к остальным строкам табличных частей, они будут постепенно подчитываться с сервера. Это значит, что при открытии формы все подготовительные действия с табличными частями желательно производить на сервере. Если же аналогичные действия мы попытаемся выполнить на клиенте, то это приведет к тому, что все данные табличной части будут переданы на клиента, хотя они не требуются для отображения в форме.
Если в процессе работы с формой на сервере требуется выполнить некоторый код, использующий данные формы, то при получении управления сервером на нем должны быть те же данные что и на клиенте. Для реализации этого используется контекстный вызов процедуры или функции, при котором платформа делает обмен изменениями данных формы с момента предыдущей синхронизации. Т.е. на сервер будут переданы не все данные с клиента, а только изменившаяся часть. Аналогично, после завершения работы контекстного метода на сервере, изменившиеся данные на сервере могут быть переданы на клиента, если это необходимо для отображения в форме. Помимо контекстных вызовов есть также встроенные методы табличной части, такие как Сортировать и НайтиСтроки, которые также могут приводить к серверному вызову с посылкой изменений, но уже конкретной табличной части.
При записи и закрытии формы, происходит серверный вызов, аналогичный контекстному вызову. Изменения данных формы после последней синхронизации отправляются на сервер. На сервере же, происходит конвертация этих данных в объект информационной базы с последующей его записью. Чтобы не делать лишних действий с базой данных, платформа пытается оптимизировать запись данных объекта в базу данных, в случае если мы редактировали уже созданный ранее объект информационной базы. Это касается только табличных частей, и их запись в базу происходит по следующим правилам: