09.12.2009

Особенности работы формы с данными

Любая управляемая форма предназначена для отображения и изменения некоторых данных. Такие данные, как правило, хранятся в реквизитах формы. Совокупность этих данных (значения реквизитов формы) называется данными формы.

Т.к. данные формы доступны и на клиенте и на сервере, то основным хранилищем всех данных выступает сервер, просто потому что взаимодействие клиента и сервера инициируется только с клиента. Это означает, что в момент работы в памяти сервера находятся все данные формы, и доступ к ним осуществляется напрямую. На клиенте же имеется в общем случае частичное представление этих данных, при необходимости подгружаемое с сервера. При дальнейшей работе с формой изменения данных могут передаваться туда и/или обратно для синхронизации состояний клиента и сервера.

Данный подход накладывает определенный отпечаток на методику работы с данными формы. Рассмотрим основные сценарии работы с формой:

  1. Открытие формы.
  2. Редактирование формы.
  3. Закрытие формы.

Открытие формы

При открытии формы, на клиенте в памяти доступны следующие данные:

  1. Значения реквизитов, кроме табличных частей, табличных документов и динамических списков.
  2. Некоторая часть данных табличных частей, динамических списков и табличных документов, предназначенная для отображения.

Т.е. если у вас есть реквизит, в котором, например, хранится список значений, то этот список целиком будет передан на клиента при открытии формы. Для табличных частей, алгоритм работы платформы другой – изначально передается только часть строк. Далее, при обращении к остальным строкам табличных частей, они будут постепенно подчитываться с сервера. Это значит, что при открытии формы все подготовительные действия с табличными частями желательно производить на сервере. Если же аналогичные действия мы попытаемся выполнить на клиенте, то это приведет к тому, что все данные табличной части будут переданы на клиента, хотя они не требуются для отображения в форме.

Редактирование формы

Если в процессе работы с формой на сервере требуется выполнить некоторый код, использующий данные формы, то при получении управления сервером на нем должны быть те же данные что и на клиенте. Для реализации этого используется контекстный вызов процедуры или функции, при котором платформа делает обмен изменениями данных формы с момента предыдущей синхронизации. Т.е. на сервер будут переданы не все данные с клиента, а только изменившаяся часть. Аналогично, после завершения работы контекстного метода на сервере, изменившиеся данные на сервере могут быть переданы на клиента, если это необходимо для отображения в форме. Помимо контекстных вызовов есть также встроенные методы табличной части, такие как Сортировать и НайтиСтроки, которые также могут приводить к серверному вызову с посылкой изменений, но уже конкретной табличной части.

Закрытие формы

При записи и закрытии формы, происходит серверный вызов, аналогичный контекстному вызову. Изменения данных формы после последней синхронизации отправляются на сервер. На сервере же, происходит конвертация этих данных в объект информационной базы с последующей его записью. Чтобы не делать лишних действий с базой данных, платформа пытается оптимизировать запись данных объекта в базу данных, в случае если мы редактировали уже созданный ранее объект информационной базы. Это касается только табличных частей, и их запись в базу происходит по следующим правилам:

  1. Если были только добавления новых строк в конец табличной части, то записываться в базу данных будет только эти новые добавленные строки.
  2. Если были перемещения, удаления или добавления строк в середине табличной части, то она перезаписывается полностью.