Главная О компании Новости Обучение Обратная связь Форум
сервер контра

ABACUS Financial ABACUS Builder ABACUS Professional ABACUS WEB

Подкачиваемые таблицы ABACUS Builder (AB7) - инструмент разработки корпоративных информационных систем на базе СУБД Oracle

Данная статья посвящена созданию с помощью ABACUS Builder (AB7) клиентского приложения с "подкачиваемой" таблицей. Поводом для написания работы послужили многочисленные просьбы пользователей AB7, так как в настоящее время в имеющейся документации компании Омега этот вопрос рассмотрен в недостаточном объеме.

"Подкачиваемая" таблица заполняется частями на основе системных ключей. Осуществляется подкачка при передачи данных с Oracle-сервера в ABACUS-сервер и при передачи данных с ABACUS-сервера в ABACUS-клиент. То есть, с сервера базы данных на сервер приложений, а также с сервера приложений на клиентское приложение передаются не все данные сразу, а небольшими порциями, размер которых определяется размером буфера подкачки. Подкачиваемая таблица служит для отображения и редактирования данных.

Создадим клиентскую отчетную форму для отображения информации о сотрудниках предприятия: табельного номера, фамилии, имени, отчества, должности, подразделения, даты приема на работу, оклада. Сначала рассмотрим учетную схему (графическое отражение сущностей и их взаимосвязей) нашей задачи. В схеме приведены категории (сущности), их номера и атрибуты. Связь "сверху вниз" показывает, что у одного экземпляра "верхнего" объекта может быть несколько экземпляров "нижнего" объекта.

Создадим экранную форму. Прежде всего, необходимо, чтобы мы могли выбирать предприятие из списка. Поместим компонент "Вычисляемое поле" FIRM, в свойствах "Дополнительно" укажем параметры справочника - это документ №3 категории 12003. Теперь мы сможем выбирать предприятие из имеющихся в этой категории.

Теперь разместим на форме заголовки таблицы, саму таблицу, а в таблице - 6 компонентов типа "Вычисляемое поле". Для того, чтобы таблица была подкачиваемой, в ее свойствах на вкладке "Дополнительные" установим свойство "Подкачиваемая".

Установив данное свойство, мы обеспечиваем динамическую подкачку данных на сервер приложений и на клиентское приложение, экономя, тем самым, ресурсы сервера приложений и машины клиента. Установим компонент "Локатор" для обеспечения навигации по таблице. В свойстве локатора "Колонка" укажем CALC - первая колонка нашей таблицы.

Теперь информация о сотрудниках будет сортироваться по полю, указанному в первой колонке. Добавим компонент типа "Вычисляемое поле" SELECT и занесем в него формулу "Вычисление" для заполнения нашей таблицы. Для написания запроса необходимо правильно отразить переходы по учетной схеме. Запрос выглядит следующим образом:

%TABLE.INIT("SELECT
#.1003,
#.1002,
#:1830 WHERE(#^1839.10002=2) FLOOR_VAL(#.187,DAT)^184.2,
#:1830 WHERE(#^1839.10002=3) FLOOR_VAL(#.187,DAT)^12004.2,
#:1830 WHERE(#^1839.10002=1).187,
#:1830 WHERE(#^1839.10002=4) FLOOR_VAL(#.187,DAT).125
FROM ATTRIBUTES(12005,1002) WHERE(#^12003=%FIRM)");

Мы отражаем значения атрибутов, "отталкиваясь" от списка всех сотрудников, которые снизу "привязаны" к объекту, выбранному в компоненте "FIRM":

  • отражаем атрибуты 1003, 1002
  • отражаем должность, для этого выбираем приказ о назначении на должность сотрудника (тип этого приказа определен в категории 1839, атрибут 10002), выбираем ближайшее значение даты начала приказа, отражаем атрибут 2 категории 184 Справочник должностей, "привязанной" сверху к данному приказу
  • отражаем подразделение, для этого выбираем приказ о переводе в подразделение сотрудника (тип этого приказа определен в категории 1839, атрибут 10002), выбираем ближайшее значение даты начала приказа, отражаем атрибут 2 категории 12004 Подразделения, "привязанной" сверху к данному приказу
  • отражаем дату приема сотрудника, для этого выбираем приказ о приеме сотрудника (тип этого приказа определен в категории 1839, атрибут 10002), выбираем ближайшее значение даты начала приказа, отражаем атрибут 187 категории приказа
  • отражаем оклад сотрудника, для этого выбираем приказ об окладе сотрудника (тип этого приказа определен в категории 1839, атрибут 10002), выбираем ближайшее значение даты начала приказа, отражаем атрибут 125 категории приказа

Строка FROM ATTRIBUTES(12005,1002) WHERE(#^12003=%FIRM) указывает, откуда получать значения атрибутов. Здесь для получения данных запроса мы используем структуру ATTRIBUTES, в скобках указано, от какой категории мы должны "отправиться" в запросе, какой атрибут является параметром сортировки. Затем, в конструкции WHERE указано, что все объекты категории 12005 (сотрудники) "привязаны" сверху к объекту категории 12003, который отражается в компоненте FIRM.

Теперь, сохраняем все данные и наше приложение готово. Работающее приложение выглядит следующим образом:

Реальная практика показывает, что подкачиваемая таблица ускоряет работу приложения в десятки раз. Если не делать таблицу подкачиваемой, а обычной или фреймовой (подкачка данных осуществляется только с сервера приложений на клиентское приложение) то запрос будет выглядеть следующим образом:

%TABLE:=AQL(SELECT
#.1003,
#.1002,
#:1830 WHERE(#^1839.10002=2) FLOOR_VAL(#.187,DAT)^184.2,
#:1830 WHERE(#^1839.10002=3) FLOOR_VAL(#.187,DAT)^12004.2,
#:1830 WHERE(#^1839.10002=1).187,
#:1830 WHERE(#^1839.10002=4) FLOOR_VAL(#.187,DAT).125
FROM [12005*] WHERE(#^12003=%FIRM);

При этом сортировка будет возможна по любому из полей.

В следующей статье мы рассмотрим более детально создание взаимосвязанных таблиц.


На Всемирной выставке в Париже (1889 год) был показан пишущий автомат под названием "Профессор Аркадиус". Но уже в 1873 году на оружейном заводе американца Ремингтона произвели первую промышленную серию (100 штук) пишущих машинок, положивших начало всем последующим модификациям вплоть до портативных. Из истории создания ККМ, арифмометров и счетных машин
ABACUS Builder. Cостав инструмента разработки

  © Компания "ОМЕГА"   www.omega.ru   (495) 234-42-32,  (495) 727-43-50