Правильная ссылка на эту страницу
http://az-design.ru/Projects/AzBook/AZMicro/AZMicro33.shtml

Таблица "Журнал операций"

       Следующая таблица — основа работы бухгалтера — "Журнал операций". В принципе ничего сложного нет, кроме того, что ширина записи достаточно большая и нужно как-то ее обустроить. Короче нужен интерфейс пользователя.
       Выбираем на PageControl страницу "Журнал операций". После чего
       — из вкладки "Win32" выбираем компонент TToolBar, кладем его на страницу и устанавливаем свойство Align=alTop;
       — из вкладки "Data Control" выбираем компонент TDBNavigator, кладем его на ToolBar и меняем свойство Name на nvJournal;
       — из вкладки "Data Control" выбираем компонент TDBCtrlGrid, кладем его на страницу "Журнал операций" и меняем свойства — Name=cgrJournal, Align=alClient и RowCount=5.
       В результате получилась основа, на которой можно построить запись:
       — Для отображения всех полей, кроме JrLegend, используется компонент TDBEdit с вкладки "Data Control";
       — для каждого поля нужно сделать подпись, для чего используются компоненты TLabel с вкладки "Standard";
       — поле JrLegend слишком большое, чтобы показывать его либо в DBGrid, либо в DBEdit. Поэтому для его отображения используется компонент TDBMemo.
       Разместим эти компоненты на чистой поверхности компонента TDBCtrlGrid, так как покажется удобным. У каждого компонента поменяем свойство Name на имя поля с префиксом соответствующим ed для DBEdit и DBMemo и lb для TLabel. То, что при этом получилось показано на рисунке:

дизайн Журнал операций
Рис.AzMicro005 — дизайн "Журнал операций"

       После того как сделан дизайн, можно настраивать связь с таблицей. Для этого с вкладки "Interbase" положить на форму компоненты TIBTransaction, TIBQuery, TIBUpdateSQL, и с вкладки "Data Access" компонент TDataSource. Свойство Name для этих компонентов нужно изменить на имя таблицы с префиксом соответствующим tr для TIBTransaction, qr для TIBQuery, upd для TIBUpdateSQL и ds для TDataSource.
       В первую очередь нужно настроить компонент TQuery. Для этого:
       — свойство Database должно быть равно IBDatabase1;
       — свойство Transaction должно быть равно trJournal;
       — свойство UpdateObjects должно быть равно updJournal.
       Для компонента TTransaction нужно изменить следующие свойства:
       — свойство AutoStopAction должно быть равно saCommitRetaining,
       — свойство DefaultAction должно быть равно TACommitRetaining.
       После чего можно в процедуру CreateForm добавить следующие строки:

  qrJournal.Close;
  qrJournal.SQL.Clear;
  qrJournal.SQL.Add('Select * from Journal');
  qrJournal.SQL.Add(' order by JrnDate');

       Для начала запишем запрос, который будет отображать содержимое таблицы отсортированное по дате. Запрос будет выбирать все поля записи, что в общем случае не всегда правильно.

  qrJournal.GeneratorField.Field := 'JrnID';
  qrJournal.GeneratorField.Generator := 'Journal_GEN';
  qrJournal.GeneratorField.ApplyEvent := gamOnServer;

       После этого укажем имя поля, которое заполняется генератором, имя генератора и то, что это событие должно обрабатываться сервером.
       Так как эта таблица должна редактироваться, то для компонента TQuery был добавлен компонент TUpdateSQL, в котором должны быть прописаны запросы для операций удаления, вставки и модификации записей.

  updJournal.DeleteSQL.Clear;
  updJournal.DeleteSQL.Add('Delete from Journal');
  updJournal.DeleteSQL.Add(' where JrnID = :OLD_JrnID');

       Запрос на удаление заносится в свойство DeleteSQL. В клаузе where нужно указать поле (набор полей), которое уникально идентифицирует строку, в данном случае достаточно указать JrnID. Обратите внимание на префикс OLD_ в названии параметра :OLD_JrnID. Данный префикс означает, что IBDataSet должен подставить в параметр значение поля до изменения пользователем.

  updJournal.InsertSQL.Clear;
  updJournal.InsertSQL.Add('Insert into Journal(JrnDate,JrCredit,JrDebit,JrAmount,JrLegend)');
  updJournal.InsertSQL.Add(' values(:JrnDate,:JrCredit,:JrDebit,:JrAmount,:JrLegend)');

       Запрос на вставку новой записи заносится в свойство InsertSQL. Поле JrnID можно в него не включать, так как оно формируется генератором.

  updJournal.ModifySQL.Clear;
  updJournal.ModifySQL.Add('Update Journal Set');
  updJournal.ModifySQL.Add(' JrnDate  = :JrnDate,');
  updJournal.ModifySQL.Add(' JrCredit = :JrCredit,');
  updJournal.ModifySQL.Add(' JrDebit  = :JrDebit,');
  updJournal.ModifySQL.Add(' JrAmount = :JrAmount,');
  updJournal.ModifySQL.Add(' JrLegend = :JrLegend');
  updJournal.ModifySQL.Add(' where JrnID = :OLD_JrnID');

       Запрос на модификацию записи заносится в свойство ModifySQL. В него нужно включить все поля, которые разрешается редактировать.

  updJournal.RefreshSQL.Clear;
  updJournal.RefreshSQL.Add('Select * from Journal');
  updJournal.RefreshSQL.Add(' where JrnID = :OLD_JrnID');

       И, наконец, последний запрос на обновление заносится в свойство RefreshSQL. Этот запрос нужен для того, чтобы увидеть изменения в БД после предыдущих запросов.
       После этого запрос нужно открыть:

  qrJournal.Open;

       В принципе этого достаточно для начала работы с журналом операций. Результат можно посмотреть на рисунке:

Журнал операций в работе
Рис.AzMicro006 — "Журнал операций" в работе

Архангельский Андрей




<<< Пред. Оглавление
Начало раздела
След. >>>

Дата последнего изменения:
Thursday, 21-Aug-2014 09:10:56 MSK


Постоянный адрес статьи:
http://az-design.ru/Projects/AzBook/AZMicro/AZMicro33.shtml