4.4. Карточки

Это диалоги для изменения и добавления данных. Изменения могут вноситься в несколько записей одновременно.

TRootCustomEditor - базовый предок для карточек. Он содержит компонент TssPageControl для расположения контролов и панель TssTaskPanel для отображения выбранных для редактирования элементов. Здесь реализовано управление активным контролом при открытии формы, локальная проверка заполнения обязательных полей, базовый функционал для формирования вкладок (см. Расположение контролов в карточках), заполнения данных значениями по умолчанию, работы нумератора документов, проверки допустимости значений, сохранения данных и удаления из карточки.

Основные виртуальные методы:

TRootMDIEditor – карточка с запросом к серверу. Здесь находится датасет EditDataSet, в котором задаются свойства запроса. Форма передаёт в запрос табличный параметр %Selection для фильтрации запроса выбранными для редактирования данными. В параметре по умолчанию одно ключевое поле. Эта карточка сохраняет данные на сервер.

TRootMDIClipboardEditor – здесь выделен функционал для использования карточки при вставке из буфера и плавающего справочника.

TRootMDINotesEditor – предок для корневых карточек с заметками. То есть, это карточка, которая управляет заметками в семействе данных. Здесь формируется запрос к серверу для получения данных заметок, контролы для них и сохранение на сервер.

TRootMDINotesWithSecretLevelsEditor – базовый класс для карточек объектов базы с грифом доступа.

TRootEditor – базовый предок для карточек использующих данные датасета мастер-формы (списка). Изменения сохраняются на сервер с помощью того же мастер-датасета.

TRootChildEditor – карточка для встроенных списков.

Чтобы добавить карточку для формы-списка надо пронаследовать форму от соответствующего класса и вернуть этот класс в методе GetEditorClass формы-списка, откуда она открывается. На форме-карточке нужно расположить контролы и задать свойства запроса к серверу, если это карточка со своим запросом. В свойстве Streams нужно указать ключевое поле в скобках для всех потоков, иначе изменение данных не заработает. Например:

MoveDocuments(mdoc_ID);MoveDocumentItems(mdit_ID)
      

Также нужно создать прототипы специфичных эдит-форматов. Подробнее об этом рассказано в главе Филд-форматы.