Компонент XMLGrid

Компонент «TISPROGrid XML» призначений для відображення даних в табличній формі з використанням XML - реєстру на користувальницької формі. В дизайнері вікон розміщений на вкладці Розширені.

Параметри компонента:

  • XMLFileDescription – ім'я файлу XML -реестра:
    • MdID - код модуля;
    • RstID - код реєстру;
    • QueryID - код запиту.

Значення з імені файлу XML - реестра.

Наприклад: U055_1_001.xml - MdID = 55, RstID = 1, QueryID = 1

  • GridID - ідентифікатор реєстру;
  • XMLBaseDescription - опис таблиці:
    • BaseSynonym - Ім'я таблиці. Синонім для таблиці в реєстрі;
    • UniqueKeys - Список полів, що становлять унікальний ключ записи. Обов'язковий параметр для позиціонування на реєстрі;
    • MarkAbsField - Ім'я поля, значення якого буде використовуватися для оцінки записів. Обов'язковий параметр для роботи із зазначеними записами;
    • Mrk - Код маркера реєстру (повинен бути більше 20 000).

Події:

  • OnClick - приходить при будь-якій зміні фокуса в реєстрі, тобто при зміні осередку, в т.ч. в межах одного рядка;
  • OnShowRecord - викликається при відображенні запису.
  • OnModFieldBegin - викликається на початку редагування поля.
  • OnModifyField - викликається після завершення редагування поля.
  • OnNewRecord - викликається при створенні нового запису в реєстрі.
  • OnInsertRecord - викликається при вставці запису до реєстру.
  • _ShowRecord - компонент Таблиця видає це повідомлення перед завантаженням записи у внутрішній буфер. Оброблювач цього повідомлення повинен заповнити всі обчислюваності поля, що входять до запису таблиці. Тобто сформувати запис, який потім буде відображатися.
  • _BeforeRecord - це повідомлення надсилається при позиціонуванні на запис, після того, як поточна запис на базі встановлена. Оброблювач цієї події повинен обробляти зв'язку таблиці з іншими елементами форми: оновлювати праву частину комбореестра, оновлювати поля підвалу, оновлювати пов'язані таблиці і т.п. Т.е. Тобто ця подія - сигнал навігації по таблиці.

Функції:

Функції ініціалізації і інтерфейсу:

  • function Init: integer

    Ініціалізація роботи з реєстром. Функція ініціалізує механізм і викликає побудову / заповнення реєстру згідно з видом, зазначеним в параметрах. Перед викликом обов'язково повинні бути заповнені параметри: GridID, MdID, RstID, QueryID.

  • function Refresh: integer
    • Оновлює дані в реєстрі. Оновлення здійснюється з повторним запитом параметрів у користувача.
  • function RefreshNoAsk: integer
    • Оновлює дані в реєстрі. Оновлення здійснюється з попередніми значеннями параметрів.
  • function RefreshNoClear: integer
    • Оновлює дані в реєстрі без очищення реєстру. Можна застосовувати, наприклад, для оновлення не лише реєстру, а однієї або декількох записів, попередньо їх видаливши.
  • function SelectView: integer
    • Виводить вікно вибору / встановлення виду реєстру. (Відповідає натисканню комбінації клавіш Alt + 0)
  • function RefreshRst: integer
    • Оновлює дані в реєстрі. Оновлення здійснюється з повторним запитом параметрів і очищенням маркерів (відповідає натисканню комбінації клавіш Ctrl + F2).
  • function ShowFindWindow: integer
    • Показує вікно пошуку. Відповідає натисканню клавіші F7.
  • function ShowFilterWindow: integer
    • Показує вікно фільтра. Відповідає натисканню клавіші F11.
  • function ShowFilterWindowCurrent: integer
    • Показує вікно фільтра з заповненням значення за поточним полем. Відповідає натисканню комбінації клавіш Alt + F11.

Функції роботи з таблицею реєстру:

  • function SetBegin: integer
    • Встановити курсор на перший запис.
  • function GetNext: integer
    • Встановити курсор на наступний запис.
  • function SetEnd: integer
    • Встановити курсор на останній запис.
  • function GetPrev: integer
    • Встановити курсор на попередній запис.
  • function GetKey: integer
    • Встановити курсор на запис у відповідності зі значенням ключа UniqueKeys.
  • function Delete: integer
    • Видаляє поточний запис в реєстрі.
  • procedure BeginUpdate procedure BeginUpdate
    • Включає режим редагування реєстру, при якому дії з функціями роботи з реєстром не відображаються на екрані.
  • procedure EndUpdate
    • Відключає режим редагування реєстру.
  • function ShowTable: integer
    • Перевідображає реєстр.

Функції роботи з полями:

  • function ParamField (FieldName: String, FieldType: String, FieldLen: Byte, FieldScale: Byte, Value: String): integer
    • Заповнює поле-параметр XML - реєстра.
      • FldName - ім'я поля. Повинна відповідати імені в розділі <params>.
      • FldType - тип поля. Допустимі типи: "STRING", "INT", "NUM", "DATE", "TIME".
      • FldLen - довжина поля для типу STRING.
      • FldScale - місце точки для типу NUM.
      • Value - значення параметра.
  • function GetFieldValue (FieldName: String): String
    • Отримати значення поля по імені
  • function SetFieldValue (FieldName: String, Value: String): integer
    • Встановити значення поля по імені. Використовується для заповнення полів ключа. Поля записів в таблиці не змінює.
  • function SetFieldModifiable (FieldName: String, Modifiable: boolean): Boolean
    • Встановлюється можливість редагування зазначеного поля в реєстрі. Працює тільки при ReadOnly = false.
  • functionfunction Set Sort (FieldNames: String): integer
    • Встановити сортування по імені полів. FieldNames заповнюється наступним шаблоном: ім'я поля, напрямок сортування, ..., ім'я поля, напрямок сортування. Напрямок сортування може бути або по зростанню: 'A', або по спадаючій: 'D'
  • AllowSort (Allow: BOOLEAN): integer
    • Дозволити / заборонити зміну сортування.

Гарячі клавіші:

  • F7 - Пошук;
  • F11 - Фільтр;
  • Alt + F11 - Фільтр за поточним;
  • F12 - Налаштування сортування.

Властивості:

  • ReadOnly - Ознака реєстру «тільки для читання». Для редагування записів прямо в реєстрі встановити в false;
  • Insertable - Ознака можливості вставки. При установці в true при русі курсору нижче останнього запису створюється нова;
  • CaptionLines - властивість визначає кількість рівнів в шапці таблиці. Заповнюється шапка як і раніше в XML-файл у властивості name тега <field>. Приклад: name = "Загальна шапка | Поле ”. Рівні шапки поділяються символом «| ». Однакову назву декількох колонок об'єднує їх в одну;
  • FixedCols - Це властивість вказує кількість зафіксованих колонок з лівого краю таблиці.

Приклад:

// Робимо реєстр, що редагується

GridXML 1. Refresh;

GridXML1.ReadOnly: = false;

GridXML1.Insertable: = true;

GridXML1.SetFieldModifiable ('PtnCd', true); // Поле контрагента - редагується

procedure GridXML1OnModifyField (Sender: TISPROComponent);

var

PtnCd, PtnNm: String;

begin

PtnCd: = GridXML1.SetFieldValue ('PtnCd'); // Отримали новий код контрагента

//.....Отримали по ньому найменування, наприклад окремим запитом

GridXML 1. SetFieldValue (PtnNm); // Записали в реєстр найменування

end;

код програми:

procedure Form1OnShow (Sender: TISPROC omponent);

var

ret: integer;

begin

// Запуск

GridXML1.XMLFileDescription.MdID: = 555;

GridXML1.XMLFileDescription.RstID: = 0;

GridXML1.XMLFileDescription.QueryID: = 1;

GridXML1.XMLBaseDescription.MarkAbsField: = 'Tes tRcd';

GridXML1.XMLBaseDescription.Mrk: = 20000;

GridXML1.XMLBaseDescription.UniqueKeys: = 'TestRcd';

ret: = GridXML1.Init;

if (ret> 0) then

begin

// Параметрв 0

ret: = GridXML1.ParamField ( 'TestID', 'INT', 0, 0, '0');

if (ret> 0) then

GridXML1.Refresh;

end

end;

// Кнопка "наступний запис"

procedure But ton1OnClick (Sender: TISPROComponent);

begin

GridXML1.GetNext;

end;

// Кнопка "попереднійзапис "

procedure Button2OnClick (Sender: TISPROComponent);

begin

GridXML1.GetPrev;

end;

procedure GridXML1OnDblClick (Sender: TISPROComponent);

var

Rcd, ret: integer;

begin

// Отримуємо Ід поточного запису

Rcd: = StrToInt (GridXML1.GetFieldValue ( 'TestRcd'));

// Щось робимо із записом

// .....

// ODBCQuery 1.Open;

// .....

// Оновлюємо запис з сервера

ret: = GridXML1.ParamField ( 'TestID', 'INT', 0, 0, IntToStr (Rcd)); //Ид нужной записи // Ід потрібного запису

if (ret> 0) then

Begin

GridXML1.BeginUpdate;

GridXML1.Delete;// Видаляємо

Gri dXML1.RefreshNoClear;// оновлюємо один запис

GridXML1.EndUpdate;

GridXML1.ParamField ( 'TestID', 'INT', 0, 0, '0');// Обнуляем // Обнуляємопараметр параметр

GridXML1.SetFieldValue ( 'TestRcd', IntToStr (Rcd));// позиціонуємо на оновленому запису

GridXML1.GetKey;

End;

end;

procedure GridXML1OnKeyDown (Sender: TISPROComponent; var Key: Word; Shift: Integer);

begin

if (Key = 13) then // При натисканні Enter дані поточного запису:

ShowMessage ('Номер документа:' + GridXML 1. GetFieldValue ('TestNmr') + 'Сума:' + GridXML 1. GetFieldValue ('TestSm'));

end; begin

end.

ВикористовуванийXML-реєстр:

U555_0_001.xml

<? xml v ersion = "1.0" encoding = "windows-1251"?>

< Query name = "Документи призначені для користувача">

<Result - fields>

<field name = "Rcd" as = "TestRcd" olap = "" progressbar = "" progressbarright = "" progressbarcolor = "" olapicon = "" calculated = "true" scale = "0" type = "int" prgres = " "p rgtype =" 2 ">

<program> CashDoc_Rcd </ program> </ field>

<field name = "Номер" as = "TestNmr" olap = "" progressbar = "" progressbarright = "" progressbarcolor = "" olapicon = "" calculated = "true" scale = "20" type = "string" prgres = " "prgtype =" 2 ">

<program> CashDoc_DocNmr </ pr ogram> </ field>

<field name = "Дата" as = "TestDat" olap = "" progressbar = "" progressbarright = "" progressbarcolor = "" olapicon = "" calculated = "true" scale = "20" type = "string" prgres = " "prgtype =" 2 ">

<program> CashDocR.CashDoc_DocDat </ program> </ field>

<field name = "Контрагент" as = "TestPtn" olap = "" progressbar = "" progressbarright = "" progressbarcolor = "" olapicon = "" calculated = "true" scale = "20" type = "string" prgres = " "prgtype =" 2 ">

<program> CashDoc_Ptn </ program> </ field>

<field name = " Сума " as = "TestSm" olap = "" progressbar = "" progressbarright = "" progressbarcolor = "" olapicon = "" calculated = "true" scale = "20" type = "string" prgres = " "prgtype =" 2 ">

<Program> Round (CashDoc_Sm, Svl_Acc) </ program> </ field>

</ Result-fields>

<Tables>

FROM CashDocR

LEFT JOIN Svl on SVl_Rcd = CashDoc_Val

</ Tables>

<Where>

(CashDoc_Rcd =: TestID OR: TestID = 0)

</ Where>

<Params>

<param name = "ID документа " id = "TestID" type = "int" />

</ Params>

</ Query>