13. Подчиненные формы

Подчиненные формы не являются самостоятельными компонентами и всегда создаются вместе с родительской формой. Они являются частью механизма формы. Они также могут иметь свой модуль. Модуль подчиненной формы не может существовать без модуля родительской формы. И если при добавлении модуля подчиненной формы, модуля родительской формы нет, то он создается автоматически.

Подчиненные формы того же типа, что и родительские, т. е. TdxForm. Обратиться к подчиненной форме из родительской можно либо по имени компонента формы, либо по ее имени через свойство Forms:

procedure AppendBnClick(Sender: TObject); 
begin
  if (Self.State <> dsInsert) and (Self.State <> dsEdit) and (Self.Edit = asOk) then
  with Self.Forms['товары'] do
  begin
    Append;
    Fields['Количество'] := 1;
    if EditWindow.ShowModal = mrOk then
      Post
    else
      Cancel;
  end;
end;

Обратите внимание на первую строчку в обработчике If …. Родительская форма должна находиться в состоянии изменения записи, если в подчиненных формах происходит манипулирование записями. В противном случае вы не сможете добавить запись (Append вернет asCantAppend). Изменения в подчиненных формах не сразу попадают в базу, а только после того как сохранится родительская запись.

У подчиненных форм есть некоторые ограничения на вызов методов. Нельзя вызывать следующие методы: Open, OpenRecord, OpenRecords, Close, Print. Вызов этих методов будет приводить к ошибке.