Материал из wiki.sibvaleo.com
- создаем курсор в БД, выводящий одну запись к редактированию, причем все поля-ссылки оставляем ссылками (id). При необходимости можно создать чисто информационные поля, которые не будут редактироваться.
- создаем новую форму, наследника от TFinancesCustomRecordEditorForm. Если на форме редактирования нужны вкладки с дочерними гридами - то от TFinancesRecordEditorWithChildForm (File - New - Other - вкладка Finances).
- устанавливаем ей (форме) свойства Name (обычно - НазваниеТаблицыEditForm), Caption (обычно - ОписаниеТаблицы)
- добавляем в используемые модули uFinancesMainForm, uObjectIds (Alt+F11 либо ручками в коде в секции implementation)
- устанавливаем DataSet.Connection = FinancesMainDM.MainConnection (это нужно только для design-time настройки, в run-time соединение берется из пула либо передается от редактора верхнего уровня)
- в DataSet.Sql пишем вызов курсора
- в DataSet.Params устанавливаем свойства DataType (для курсора - ftCursor), ParamType (для курсора - ptResult)
- настраиваем поля запроса так же, как и поля в ParamsDataSet формы грида для создания редакторов
- дополнительно устанавливаем для полей значения DisplayLabel, Visible, Required. Для первичного ключа Required устанавливается в false.
- создаем редакторы полей двойным щелчком по компоненту FieldEditorCreator
- прописываем вызов процедур редактирования в свойствах компонента UpdateSQL: InsertSQL, ModifySQL, DeleteSQL
- при этом имена параметры должны быть равны именам полей с прибавлением new_ для нового значения и old_ для старого (до редактирования) значения. Например:
delete from t where id = :old_id
begin
set_t(io_id => :new_id, i_name => :new_name);
end;
- если уникальное поле в запросе отлично от "ID", то создаем событие формы OnCreate, и в нем прописываем ключевое поле: KeyFields := "KeyField";
- прописываем регистрацию формы как редактора этого объекта
- в секции initialization пишем TMyEditForm.RegisterSelf(id)
- TMyEditFormтут - имя класса нашей формы
- id - константа нашей формы
- если нужно добавить к редактору редактирования списка связанных сущностей, то надо
- Переопределить метод CreateChildGrids (procedure CreateChildGrids; override;)
- В его реализации прописать создание дочерних гридов:
CreateChildGrid(idAccountResponsibles, 'finacc');
- Тут idAccountResponsibles - id грида, который будет встроен в форму редактирования, finacc - имя поля грида, которое будет спрятано при показе в виде дочерней формы и имя параметра для хранения значения, по которому будут фильтроваться данные. Обычно это KeyValues, но не обязательно именно так
- Переопределить метод SetChildGridsParams (procedure SetChildGridsParams; override;)
- Прописать в его реализации установку значений параметров дочерних гридов:
procedure TAccountEditorForm.SetChildGridsParams;
begin
inherited;
ChildGrids[0].Params['finacc'] := DataSetID.Value;
end;