Главная | О компании | Новости | Обучение | Обратная связь | Форум |
ABACUS Financial ABACUS Builder ABACUS Professional
|
Подкачиваемые таблицы Данная статья посвящена созданию с помощью 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":
Строка 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); При этом сортировка будет возможна по любому из полей. В следующей статье мы рассмотрим более детально создание взаимосвязанных таблиц.
|
|
|
||