Мельница данных  (одним файлом)  (09.12.2024)
1. Технологическая платформа "Мельница Данных"
 

2. Руководство пользователя обозревателя данных

2.1. Запуск обозревателя данных

Для начала работы необходимо запустить исполняемый файл DataBrowser.exe. Это можно сделать посредством ярлыка, создаваемого инсталлятором Системы:

Ярлык обозревателя данных

При его запуске отобразится окно входа в систему:

Окно логина обозревателя данных

Для запуска системы необходимо заполнить поля формы входа в систему, после чего нажать кнопку ОК или клавишу Enter на клавиатуре. Если система ранее запускалась на Вашем локальном компьютере, то поля формы (за исключением поля Пароль) будут заполнены данными, введенными в прошлый раз. Если система на компьютере запускается впервые, то при открытии формы ее поля будут пустыми. Для заполнения полей формы необходимо знать, на каком типе сервера БД работает система, имя базы данных, с которой предстоит работать, имя пользователя и пароль. Если Вы не располагаете такой информацией, узнайте ее у администратора системы.

  • Источник данных - в этом поле из выпадающего списка выберите тип сервера баз данных, на котором функционирует система; возможен выбор из трех вариантов:
    • если система работает на сервере Interbase (Firebird), выберите пункт Interbase/FireBird Server;
    • если система работает на сервере Oracle, выберите пункт Oracle Database Server;
    • если система работает на сервере MSSQL, выберите пункт Microsoft SQL Server.
  • База данных - в этом поле необходимо указать имя базы данных.
  • Имя пользователя - в этом поле введите Ваше имя пользователя (логин).
  • Пароль - в это поле введите Ваш пароль.
Для удобства последующего запуска системы Вы можете воспользоваться флажками "Сохранить пароль" и "Входить автоматически".
  • Сохранить пароль - если установить этот флажок, то Ваш пароль будет запомнен и подставлен в поле Пароль при следующем запуске системы. В связи с тем, что информация о вводимом Вами пароле будет сохранена на Вашем локальном компьютере, пользоваться этим флажком рекомендуется только в том случае, если возможность несанкционированного доступа к Вашему компьютеру исключена.
  • Входить автоматически - этот флажок доступен только при установленном флажке "Сохранить пароль". Если установить этот флажок, то при следующем входе в систему Вам не придется заполнять поля формы и нажимать кнопку OK или клавишу Enter. Форма покажется на некоторое время, после чего произойдет автоматический вход в систему.

Если Вы установили флажок "Входить автоматически", но хотите изменить ранее введенную в поля информацию, необходимо выполнить щелчок мышью (здесь и далее "щелчок мышью" означает щелчок ЛЕВОЙ кнопкой мыши. Если необходим щелчок ПРАВОЙ кнопкой мыши, то будет указано "щелчок правой кнопкой мыши") на форме во время ее показа. После этого можно будет изменить ранее установленные в полях значения.


2.2. Элементы интерфейса пользователя

При входе в систему на экране отобразиться ее главное окно. Макет главного окна системы:

Макет главного окна обозревателя данных

В заголовке главного окна системы отображается имя запущенного приложения (Databrowser.exe), имя пользователя (sysdba) и имя базы данных (C:\project\databases\icecream.fdb). Интерфейс состоит из трех основных элементов:

  1. В верхней части экрана расположена Панель инструментов. На ней расположены иконки, соответствующие доступным в настоящее время действиям, а также доступным для текущего пользователя формам.
  2. В левой части экрана расположен Инспектор объектов, позволяющий просматривать и редактировать свойства объектов, выбранных в таблицах данных.
  3. Основную часть экрана занимают Формы с Таблицами данных. Таблицы данных используются для просмотра и редактирования объектов, учитываемых в системе.


2.3. Работа с формами и таблицами данных

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

Таблицы данных в форме расположены на закладках с заголовками, соответствующими наименованиям таблиц данных. Например, на предыдущем рисунке активна форма "Продажи мороженого". В этой форме на первом уровне расположены таблицы данных "Регионы", "Сорта мороженого", "Сорта фруктового мороженого", "Представительства", "Все продажи". Активной в настоящее время является таблица данных "Представительства".


2.3.1. Подчиненные таблицы данных и взаимное расположение главной и подчиненных таблиц

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

Например, на рисунке в главной таблице "Представительства" выбрано представительство ООО "Холод плюс". При этом в подчиненной таблице "Продажи представительства" отображаются только те продажи, которые осуществлены данным представительством.

Подчиненные таблицы могут располагаться двумя способами:

  • на закладках - в этом случае в нижней части главной таблицы отображаются закладки с наименованиями подчиненных таблиц; переключаться между подчиненными таблицами можно путем щелчка мышью по соответствующей закладке;
    Отображение подчиненных таблиц на закладках
  • в отдельных окнах - в этом случае каждая из подчиненных таблиц располагается в своем окне; окна имеют заголовки, соответствующие наименованиям таблиц; окна, в которых отображаются подчиненные таблицы, можно перетаскивать за заголовок в любое другое место экрана, минимизировать, восстанавливать, закрывать и т.д.
    Отображение подчиненных представлений в отдельных окнах

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

При отображении подчиненных таблиц на закладках занимаемая ими область также может быть минимизирована. Для этого необходимо подвести курсор к границе раздела зон главной и подчиненной таблиц и когда он примет форму горизонтального разделителя (Горизонтальный разделитель) выполнить двойной щелчок мышью.

Минимизация зоны подчиненных таблиц

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


2.3.2. Отображение учитываемых объектов в таблице данных

Таблица данных имеет строки и колонки. Строки таблицы (или записи) соответствуют учитываемым объектам. Колонки таблицы соответствуют свойствам объектов.

Макет таблицы данных

На рисунке представлен макет таблицы данных, в которой отображаются объекты, соответствующие сортам фруктового мороженого. Таблица данных имеет наименование "Сорта фруктового мороженого", которое отображается на соответствующей закладке (1). Таблица имеет пять строк (2), соответствующих пяти сортам фруктового мороженого. Выделенной в настоящее время является первая строка. Таблица имеет пять колонок, соответствующих свойствам учитываемых сортов мороженого. Каждая колонка имеет заголовок (4), отражающий отображаемое в этой колонке свойство. Активной в настоящее время является первая колонка. Активным элементом данных (3) является ячейка, расположенная в первой строке в первом столбце.

На рисунке активная строка и активный элемент данных выделяются оттенками синего цвета. Цвета, применяемые для выделения элементов данных, зависят от локальных настроек операционной системы Windows (стилей) на компьютере пользователя.

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

Если отображаемые данные не помещаются в окно по ширине, то активной становится горизонтальная полоса прокрутки (7). С ее помощью можно пролистывать колонки таблицы вправо и влево. Если данные не помещаются в окно по вертикали, то активной становится вертикальная полоса прокрутки (8). С ее помощью можно пролистывать записи об объектах вверх и вниз. При щелчке правой кнопкой мыши на полосе прокрутки (если она активна) доступны действия по быстрой прокрутке содержимого таблицы.

При щелчке правой кнопкой мыши в области таблицы данных отображается контекстное меню. Контекстное меню отображает список действий, доступных над объектами, отображаемыми в таблице данных. Вызываемые действия выполняются для тех объектов, которые являются выделенными в таблице данных. Если ни одного объекта не выделено, некоторые действия контекстного меню могут быть недоступны. Набор действий, отображаемых в контекстном меню различен в разных таблицах данных.

Контекстное меню

  1. Заголовок закладки с именем таблицы данных.
  2. Выделенный объект.
  3. Выделенный элемент данных.
  4. Заголовок колонки.
  5. Строка фильтра.
  6. Флажок для выбора объектов.
  7. Горизонтальная полоса прокрутки.
  8. Вертикальная полоса прокрутки

2.3.2.1. Иерархические таблицы данных

Если отображаемые в таблице данные имеют иерархическую структуру (т.е. присутствует "вхождение" одних объектов в другие), то в таблице данных объекты могут отображаться в виде "дерева".

Иерархическая таблица данных

На рисунке представлена таблица данных, отображающая периоды обучения студентов. Эти данные имеют иерархическую структуру, которая отражает вхождение учебных модулей в состав семестров, а семестров в состав учебных годов. В первой колонке иерархической таблицы данных слева от элементов данных, имеющих подчиненные элементы, отображаются значки Свернутый узел дерева или Развернутый узел дерева. При щелчке мышью по значку Свернутый узел дерева отображаются подчиненные объекты. Значок Свернутый узел дерева при этом превращается в значок Развернутый узел дерева. При щелчке мышью по значку Развернутый узел дерева подчиненные объекты скрываются и значок Развернутый узел дерева превращается в Свернутый узел дерева. На рисунке для объектов "Учебный год 2005-2006" и его подчиненных объектов "I семестр" и "II семестр" подчиненные объекты отображены. Щелчком по значку Развернутый узел дерева подчиненные объекты можно скрыть. Для объектов "I семестр" и "II семестр" учебного года 2006-2007 подчиненные объекты скрыты. Щелчком по значку Свернутый узел дерева их можно отобразить. При горизонтальном пролистывании таблицы данных вправо или влево "дерево" объектов всегда отображается слева от самого левого столбца.

В иерархических таблицах данных доступны дополнительные действия по управлению отображением и выбору объектов, которые описаны в разделе 4.7.1.


2.3.3. Выбор объектов в таблице данных

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

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

При выборе нескольких объектов в главной таблице в подчиненной таблице будут отображены записи, соответствующие подчиненным объектам, отобранным для ВСЕХ объектов, выбранных в главной таблице.

Произвольный выбор объектов

На рисунке представлена таблица данных "Учащиеся", имеющая ряд подчиненных таблиц. На рисунке открыта подчиненная таблица "Родственники и контактные лица". В таблице данных "Учащиеся" путем установки флажка произвольным образом выбраны три учащихся с фамилиями Матвеева, Зимогляд и Анчевский. При этом в подчиненной таблице "Родственники и контактные лица" отображены родители всех троих учащихся.

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

Для быстроты и удобства выбора объектов доступны дополнительные возможности:

  • для выделения нескольких объектов подряд можно щелкнуть мышью в любом месте записи, соответствующей первому объекту, а затем, удерживая клавишу Shift, щелкнуть по записи, соответствующей последнему объекту; все объекты между первым и последним, включая их, будут выделены;
  • осуществлять произвольный выбор объектов можно щелчком мышью в любом месте записи, удерживая клавишу Ctrl ;
  • можно воспользоваться действиями, доступными в подменю "Выбранные" на панели инструментов или в контекстном меню:
    • Выбрать все - все отображаемые в настоящий момент в таблице данных объекты будут выбраны;
    • Показать только выбранные - в таблице данных будут отображены только те объекты, которые помечены как выбранные; остальные объекты будут скрыты;
    • Показать все - если ранее было установлен отбор только выбранных объектов, этот отбор будет снят, и снова будут отображены все доступные в таблице объекты.

При выборе объектов изменяется информация, отображаемая Инспектором объектов. Если выбран один объект, то Инспектор объектов отображает и позволяет редактировать все доступные пользователю свойства этого объекта. Если выбрано несколько объектов, отображение и редактирование свойств Инспектором объектов происходит по правилам, описанным в разделе 5 "Работа с Инспектором объектов".

При выполнении действий над объектами выбранное действие будет выполнено для всех выбранных объектов. Если не выбрано ни одного объекта, некоторые действия могут быть недоступны.

При одновременном выборе большого числа объектов быстродействие системы может снижаться. При необходимости работы с большой выборкой объектов лучше воспользоваться возможностью фильтрации данных.


2.3.4. Изменение порядка отображения колонок

Порядок отображения колонок может быть изменен путем "перетаскивания" их заголовков. Для того чтобы переместить колонку правее или левее, подведите указатель мыши к заголовку колонки, нажмите левую кнопку мыши и, не отпуская ее, перетащите заголовок колонки вправо или влево. После того, как Вы отпустите кнопку мыши, порядок отображения колонок изменится.

Изменение порядка отображения колонок

На рисунке изображено перетаскивание заголовка колонки "Вид упаковки" в таблице данных "Сорта мороженого". После того, как кнопка мыши будет отпущена, колонка "Вид упаковки" станет третьей слева, а колонка "Число продаж" второй.


2.3.5. Скрытие и отображение колонок

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

Скрытие колонки

На рисунке показано как скрыть колонку "Вид упаковки" в таблице данных "Сорта мороженого". Описанным выше образом можно скрыть любое число колонок таблицы данных кроме последней. Если в таблице данных осталась одна колонка, то действие "Скрыть эту колонку" будет недоступно. Для отображения скрытых ранее колонок таблицы данных необходимо воспользоваться действием "Показать скрытые колонки" в подменю "колонка" контекстного меню. (На рис. 12. действие располагается ниже действия "Скрыть эту колонку"). Если ни одной колонки таблицы данных не скрыто, то действие "Показать скрытые колонки" будет недоступно. Действия, расположенные в подменю "колонка" доступны также на панели инструментов.


2.3.6. Сортировка данных в таблицах

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

Сортировка данных по одной колонке

На рисунке данные в таблице данных "Учащиеся" отсортированы по значению в колонке "Фамилия" по возрастанию. В заголовке колонки "Фамилия" отображается направленная вверх стрелочка. Для сортировки данных по значениям в нескольких колонках необходимо выполнить щелчок мышью на заголовке первой колонки, затем, удерживая клавишу Ctrl, выполнить щелчок по заголовку второй колонки и т.д. При этом в заголовках колонок будут отображаться стрелочки, соответствующие направлению сортировки и цифры, соответствующие порядку колонок в сортировке.

Сортировка данных по нескольким колонкам

На рисунке представлен пример сортировки данных таблицы данных "Учащиеся" по региону (по возрастанию), затем по полу (по убыванию) и затем по фамилии (по возрастанию). В заголовках колонок отображены соответствующие стрелочки с цифрами 1, 2 и 3.

В иерархических таблицах данные сортируются в пределах каждого уровня иерархии.

Сортировка данных в иерархической таблице

На рисунке данные в иерархической таблице данных "Направления и специальности" отсортированы по колонке "Наименование" по возрастанию.


2.3.7. Группировка данных в таблицах

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

Для осуществления группировки по значению в одной из колонок необходимо выделить любой элемент данных в этой колонке. Затем щелчком правой кнопки мыши открыть контекстное меню и в нем в подменю "колонка" выбрать действие "Группировать по этой колонке".

Осуществление группировки данных

На рисунке показано, как при помощи действия в контекстном меню осуществляется группировка данных в таблице данных "Все продажи" по значению в колонке "Представительство".

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

Отображение данных в сгруппированном виде

На рисунке данные в таблице данных "Все продажи" сгруппированы по значению в колонке "Представительство". Группы объектов, соответствующие представительствам ЗАО "Айс девелопмент", ЗАО "Фрост интернешнл" и ООО "Заморозь соседа", раскрыты. Группы, соответствующие ОАО "Красный нос" и ООО "Дед мороз и лето", свернуты.

Данные могут группироваться и по нескольким колонкам. Для этого необходимо повторить описанные выше действия для всех колонок, которые должны быть включены в группировку.

Группировка данных по нескольким колонкам

На рисунке представлен пример группировки данных, отображаемых в таблице данных "Все продажи" по колонкам "Регион" и "Сорт мороженого".

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

Действия, расположенные в подменю "колонка", доступны также на панели инструментов.


2.3.8. Фильтрация данных в таблицах

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

  • путем выбора значения из выпадающего списка, доступного при нажатии кнопки Кнопка выпадающего списка в строке фильтра
  • путем записи условия фильтрации в строке фильтра

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

Фильтрация данных путем выбора значения в строке фильтра

На рисунке показано, как осуществить фильтрацию данных по значению "эскимо" в колонке "Вид упаковки". После выполнения фильтрации эта таблица данных будет выглядеть следующим образом:

Отображение данных в отфильтрованном виде

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

Для фильтрации данных по более сложному условию можно воспользоваться вторым способом - записью условия фильтрации в строке фильтра. Условие фильтрации записывается по следующим правилам:

  1. Строка разделяется на части посредством системного разделителя (системный разделитель устанавливается в настройках операционной системы Windows). Обычно - точка с запятой, ";"
  2. Каждая часть строки интерпретируется самостоятельно, и эти части объединяются логическим "ИЛИ"
  3. При интерпретации каждой части проверяются следующие условия:
    Часть строкиПравило отбора объектов
    *Будут отобраны только те объекты, у которых значение в колонке не является пустым (установлено).
    !*Будут отобраны только те объекты, у которых значение в колонке является пустым (не установлено).
    начинается с символов '<=', '<', '>=', '>'Будут отобраны только те объекты, у которых значение в колонке удовлетворяет условию.
    включает в себя символы '*' и/или '?'Будут отобраны только те объекты, у которых значение в колонке удовлетворяет шаблону, в котором знак '?' соответствует одному любому символу, а знак '*' - любому количеству любых символов.
    начинается с символа '!' Будут отобраны только те объекты, у которых значение в колонке не удовлетворяет условию, переданному оставшейся частью строки (знак '!' означает отрицание).
    представляет собой строку в апострофах (одиночных кавычках)Содержание строки не анализируется по приведенным выше правилам. Будут отобраны только те объекты, у которых значение данного свойства соответствует строке, заключенной в апострофы.
    любая другая строкаБудут отобраны только те объекты, у которых значение данного свойства соответствует введенной строке (строки чувствительны к регистру).
  4. Условия, указанные в разных колонках, объединяются логическим "И"

После ввода в строке фильтр требуемого условия необходимо нажать клавишу Enter.

Фильтрация данных по сложному условию

В таблице данных "Все продажи" на рисунке отобраны только те записи, для которых верно следующее: Продажи осуществлены в регионе "Москва" или "Тверская область"; при этом наименование проданного сорта мороженого начинается с "Б"; при этом число продаж данного сорта больше 100.

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

  • выбрать в строке фильтра из выпадающего списка пункт "(Все)"
  • удалить все символы, записанные в строке фильтра и нажать клавишу Enter


2.3.9. Отображение итоговых значений (агрегатов) по колонкам

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

  • количество объектов (для свойств любых типов)
  • сумма значений (для числовых значений)
  • наименьшее (минимальное) значение (для строковых, числовых, логических значений, перечислений, значений типа даты, времени, даты со временем)
  • наибольшее (максимальное) значение (аналогично наименьшему значению)
  • среднее значение (для числовых значений)

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

Таблица данных с агрегатом по одной из колонок

На рисунке в нижней части таблицы данных отображена строка на светло-желтом фоне, в которой в колонке "Число продаж" показана сумма числа всех продаж, отображаемых в таблице.

Агрегат может быть вычислен и показан по любой из колонок.

Если данные в таблице отфильтрованы, то агрегат будет рассчитан только по тем записям, которые отобраны по условию фильтрации.

Если данные в таблице сгруппированы, то агрегаты будут рассчитаны как для всех отображаемых в таблице данных, так и отдельно для каждой группы.

Отображение агрегатов для сгруппированных данных

На рисунке данные о продажах сгруппированы по региону. Суммы числа продаж и среднее значение выручки отображены как для каждого региона (в строках на ярко-желтом фоне), так и для всех продаж в целом (в строке на светло-желтом фоне внизу таблицы).

Если свернуть группы, то можно просматривать только итоговые значения агрегатов для групп и для всех объектов в целом. Агрегаты при этом будут видны только в случае, если они отображаются правее надписи с именем и значением параметра группировки.

Режим отображения только агрегатов для групп


2.3.10. Редактирование данных в таблице

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

  • выполнить двойной щелчок мышью на элементе данных
  • при выделенном активном элементе данных нажать клавишу Enter на клавиатуре

После перевода элемента данных в режим редактирования отображаемый в нем текст будет выделен. Текст может быть отображен на белом или на сером фоне. Справа от текста могут появиться кнопки.

Перевод элемента данных в режим редактирования

На рисунке элемент данных в пятой сверху строке в первой колонке (текст "Белоснежка") переведен в режим редактирования.

Отображение элемента данных в режиме редактирования зависит от типа отображаемого свойства, доступности свойства для изменения и допустимости установленного значения.


  1. Редактирование значения "только для чтения"
    Если текст отображается на сером фоне, это означает, что свойство доступно только для чтения. У Вас нет возможности изменять его значение. Такое значение (или его часть) можно выделить и скопировать при помощи сочетания клавиш Ctrl+Ins или Ctrl+C и затем вставить в доступном для ввода значений месте в этом или в любом другом приложении.

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

  3. Редактирование значения
    Если в режиме редактирования в ячейке отображается обычный текст на белом фоне, то значение свойства доступно для изменения. Редактирование значения производится при помощи клавиш клавиатуры. Выделенное значение или его часть может быть скопирована и вставлена стандартным образом. При редактировании текста обращайте внимание на тип свойства (строковое, числовое, дата и т.п.). Если введенное значение не будет удовлетворять типу, то оно будет считаться недопустимым и станет отображаться на зеленом фоне. Форматы, допустимые для значений различных типов, соответствуют локальным настройкам операционной системы Windows. После изменения значения необходимо нажать клавишу Enter для того, чтобы применить сделанные изменения.
  4. Если слева от текста в ячейке отображается флажок, это означает, что свойство может иметь одно из двух возможных значений. Одно из значений соответствует установленному флажку, другое - снятому. Если для свойства допустимо пустое значение, то в случае его установки флажок будет отображен на сером фоне и справа от него будет отображен текст "(Нет)".
    Редактирование логического значения "истина"   Редактирование логического значения "ложь"
    Изменение значения такого свойства производится либо щелчком мыши по флажку, либо путем нажатия клавиши Пробел на клавиатуре.
  5. Редактирование значения в выпадающем списке
    Если справа от текста отображается кнопка с направленной вниз стрелкой, это означает, что значение свойства должно быть выбрано из списка допустимых значений. Изменять такое значение можно двумя способами:
    • Нажать на кнопку Кнопка выпадающего списка, расположенную справа от текста, в открывшемся выпадающем списке выбрать новое значение.

      Выбор значения из таблицы данных

      На рисунке показан выбор значения из выпадающего списка. Если Вы выбираете значение при помощи мыши, то достаточно выполнить щелчок мышью на нужном значении. Для выбора значения при помощи клавиатуры необходимо воспользоваться клавишами-стрелками "вверх" и "вниз", и когда нужное значение будет выделено, нажать клавишу Enter. Если для свойства допустимо пустое значение, то первым элементом выпадающего списка будет элемент "(Нет)". Если список включает больше восьми элементов, то в нем будет доступна вертикальная полоса прокрутки.

    • Ввести текст, соответствующий нужному элементу списка, с клавиатуры. В процессе ввода будут предлагаться допустимые для выбора значения. Если введенный с клавиатуры текст не будет удовлетворять ни одному из элементов списка, он будет отображен на зеленом фоне, и установить новое значение не удастся. При вводе значения с клавиатуры следите за регистром символов. После ввода нового значения необходимо нажать клавишу Enter.

  6. Редактирование значения с выбором
    Если справа от текста отображается кнопка с тремя точками, это означает, что данное свойство предполагает выбор значения из другой таблицы данных. Изменять такое значение можно двумя способами:
    • Нажать на кнопку Кнопка выбора, расположенную справа от текста; при этом откроется таблица данных, в которой нужно будет выбрать новое значение. В правом нижнем углу этой таблицы данных будут расположены кнопки OK и Отмена. Для выбора значения можно щелкнуть мышью по нужной записи или воспользоваться стрелками на клавиатуре. После выбора нужного значения нажмите кнопку OK. Если Вы не хотите менять ранее установленное значение, нажмите кнопку Отмена.

      Выбор значения из таблицы данных

      На рисунке представлена таблица данных, которая будет отображена для выбора значения свойства, представляющего собой сорт мороженого.

    • Ввести текст, соответствующий нужному значению, с клавиатуры. В процессе ввода будут предлагаться допустимые для выбора значения. Если введенный с клавиатуры текст не будет совпадать ни с одним из допустимых значений, он будет отображен на зеленом фоне, и установить новое значение не удастся. При вводе значения с клавиатуры следите за регистром символов. После ввода нового значения необходимо нажать клавишу Enter.

  7. Редактирование значения с выбором и выпадающим списком
    Если справа от текста отображаются две кнопки - кнопка со стрелкой и кнопка с тремя точками, то можно как выбирать значение из выпадающего списка, так и выбирать значение из таблицы данных (описано выше). В этом случае так же можно вводить текст, соответствующий допустимому значению с клавиатуры. После ввода значения с клавиатуры необходимо нажать клавишу Enter.

  8. Редактирование большого значения

    Если справа от текста отображены три кнопки, а сам текст представляет собой строку "(Данные)" или строку "(Нет)" это означает, что данное свойство представляет собой большой объект. Большой объект может быть текстом, файлом, содержащим изображение, xml-документ, исходный текст программных модулей или просто любые бинарные данные.

    При нажатии на кнопку Кнопка выбора отобразится окно, отображающее и позволяющее редактировать данные, представляющие собой большой объект.

    Окно для редактирования большого объекта

    На рисунке изображено окно, в котором может редактироваться исходный текст метода. После внесения изменений в текст окно редактирования нужно закрыть. Если в тексте действительно произошли изменения, то будет отображено предупреждение:

    Предупреждение окна редактирования большого объекта

    При нажатии кнопки Да окно редактирования будет закрыто, и изменения будут сохранены. При нажатии кнопки Нет окно редактирования будет закрыто, но произведенные изменения сохранены не будут. При нажатии кнопки Отмена окно редактирования останется открытым и работу с текстом можно будет продолжить.

    Копка Кнопка загрузки из файла позволяет загрузить содержимое большого объекта из файла. При нажатии этой кнопки отобразится стандартный диалог открытия файла Windows, в котором можно выбрать нужный файл, после чего нажать кнопку Открыть. При замене содержимого большого объекта новым будет отображено предупреждение:

    Предупреждение при загрузке из файла большого объекта

    Если нажать кнопку Да, то содержание большого объекта будет заменено новым, загруженным из указанного файла. Если нажать кнопку Нет, то содержание большого объекта не изменится

    Кнопка Кнопка сохранения в файл позволяет сохранить содержимое большого объекта в файл. При нажатии этой кнопки отобразится стандартный диалог сохранения файла Windows, в котором необходимо задать расположение и имя файла и нажать кнопку Сохранить. При сохранении файла необходимо явно указать его расширение. При сохранении файла никаких предупреждений не отображается.

    После изменения содержания большого объекта необходимо нажать клавишу Enter.


2.3.11. Выполнение действий над объектами

Все действия, которые могут быть произведены над объектами, могут быть выполнены одним из трех способов:

  • выбор действия в контекстном меню
  • вызов действия при помощи клавиш клавиатуры - "горячих клавиш" (доступно не для всех действий)
  • вызов действия при помощи иконки на панели инструментов (доступно не для всех действий)

При помощи действий производится добавление, удаление объектов, запуск различных процедур, выполняемых над данными, формирование отчетов.

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

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

В некоторых пунктах контекстного меню может быть расположена стрелка Стрелка раскрытия контекстного меню. При выборе такого пункта никакого действия не выполняется, а открывается " подменю ", содержащее другие действия.

Выполнение действий над объектами при помощи контекстного меню

На рисунке изображено контекстное меню, отображающее все действия, доступные над объектом, соответствующим студенту Алехиной Елене Михайловне. Действиям "Добавить студента-специалиста", "Удалить" и "Обновить" соответствуют "горячие клавиши". Пункты меню "Перемещения", "Колонка", "Выбранные" имеют подменю. На рисунке открыто подменю пункта "Перемещения".

Для некоторых действий могут быть установлены изображения-иконки. В этом случае иконки отображаются на панели инструментов (подробнее в разделе 4.13. "Работа с панелью инструментов").

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

Перед выполнением некоторых действий может быть отображено предупреждение. Например, перед удалением объекта может отображаться следующее окно:

Предупреждение при выполнении действия

Если в таком окне нажать кнопку Да, то действие будет выполнено. Если нажать кнопку Нет, то действие будет отменено.


2.3.12. Работа с панелью инструментов

На панели инструментов отображаются иконки, соответствующие доступным пользователю действиям и формам. Иконки могут иметь подписи, соответствующие наименованием действий или форм. Вызов действий или переключение между активными формами осуществляется при помощи щелчка мышью на одной из иконок. Если иконок много и они не помещаются на панели инструментов по ширине, то слева или справа отображаются кнопки прокрутки. Для прокрутки содержимого панели инструментов достаточно подвести указатель мыши к кнопке прокрутки.

Панель инструментов

На рисунке представлен пример панели инструментов. Иконки с подписями "Создать", "Удалить", "Колонка", "Выбранные", "Перенос в Excel" соответствуют доступным в текущей таблице данных действиям. Иконки с надписями "Системная форма" и "Продажи мороженого" соответствуют доступным пользователю формам. Справа от иконки "Продажи мороженого" расположена кнопка прокрутки. Подведя указатель мыши к этой кнопке, можно увидеть иконки, расположенные правее и не поместившиеся на панели инструментов.

Некоторые кнопки панели инструментов могут иметь выпадающие кнопки. Выпадающие кнопки соответствуют пунктам подменю контекстного меню. Справа от кнопок, имеющих выпадающие кнопки, расположена направленная вниз стрелочка. Если нажать мышью на эту стрелочку, то отобразится панель с выпадающими кнопками. На рисунке кнопки "Колонка" и "Выбранные" имеют выпадающие кнопки.

Панель выпадающих кнопок

Как и в контекстном меню, на панели инструментов некоторые кнопки могут быть недоступны. Доступность кнопки зависит от того, какие объекты в настоящий момент выделены, и от применимости действия к выделенным объектам.


2.3.13. Стандартные действия, доступные в любых таблицах данных

Ряд стандартных действий, доступных объектов любого типа, может быть вызван из любой таблицы данных. Разработчиком конкретной прикладной системы некоторые из перечисленных в данном разделе действий могут быть скрыты. Также перечень доступных стандартных действий зависит от прав доступа конкретного пользователя.

Стандартные действия

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


2.3.13.1. Копирование и вставка объектов

Объекты, отображаемые в таблице данных, можно копировать и вставлять. Вставлять объекты можно как в ту же таблицу данных, из которой они были скопированы, так и в другую таблицу данных, отображающую объекты того же типа. Для этого необходимо выполнить следующие действия:

  1. Выбрать один или несколько объектов, которые Вы хотите скопировать (см. раздел 4.3. "Выбор объектов в таблице данных").
  2. Вызвать действие "Копировать" из контекстного меню или при помощи иконки на панели инструментов.
  3. Перейти в таблицу данных, в которую Вы хотите вставить скопированные объекты.
  4. Вызвать действие "Вставить" из контекстного меню или при помощи иконки на панели инструментов.

При копировании и вставке происходит создание копии объекта. Все свойства нового объекта, кроме свойства "Имя" (или замещающего его свойства), будут такими же, как у первичного объекта. Свойство имя будет равно строке, составленной из слова "Копия " и имени первичного объекта. После вставки объекта значение свойства "Имя" можно изменить.

Действия "Копировать" и "Вставить" имеют соответствующие иконки на панели инструментов:
Кнопка "копировать"  Кнопка "вставить"


2.3.13.2. Подменю "Колонка" - работа с колонкой

Действия, доступные в подменю "Колонка" в контекстном меню или на панели инструментов могут быть применены к колонкам любой таблицы данных. Доступность тех или иных действий над колонкой зависит от типа данных, отображаемых в колонке, и от того, какие действия над колонкой уже совершены (например, нельзя вычислить сумму значений строкового типа, или нельзя очистить группировку, если данные не сгруппированы).

Иконка "Колонка" на панели инструментов имеет выпадающие кнопки:
Кнопки подменю работы с колонкой

Действия, доступные в подменю "Колонка", описаны в разделах 4.6. "Скрытие и отображение колонок", 4.8. "Группировка данных в таблицах", 4.10. "Отображение итоговых значений (агрегатов) по колонкам".


2.3.13.3. Подменю "Выбранные" - работа с выбранными объектами

Действия, доступные в подменю "Выбранные" позволяют быстро отбирать и снимать отбор с объектов, а также устанавливать режим отображения в таблице данных только тех объектов, которые помечены как выбранные.

Иконка "Выбранные" на панели инструментов имеет выпадающие кнопки:
Кнопки подменю работы с выбранными объектами

Назначение этих действий описано в разделе 4.3. "Выбор объектов в таблице данных".


2.3.13.4. Перенос в Excel

Данные, отображаемые в любой из таблиц данных, могут быть перенесены в MS Excel. При этом в MS Excel будут сохранены все настройки отображения данных (сортировка по одной или нескольким колонкам, группировка, отображение итоговых значений). Действие "Перенос в Excel" может быть вызвано из контекстного меню или при помощи иконки на панели инструментов. С данными, перенесенными в MS Excel, далее могут производиться любые манипуляции средствами этого приложения.

Если в таблице много записей, то перенос данных в Excel может занять некоторое время. Если это время превышает 10 сек., то отобразится окно, сообщающая, что система находится в работе. В этом окне будет отображен индикатор процесса переноса данных:
Индикатор прогресса переноса данных в Excel

Действие "Перенос в Excel" имеет соответствующую иконку на панели инструментов:
Кнопка переноса в Excel


2.3.13.5. Экспорт данных

Отображаемые в таблицах данных объекты могут быть экспортированы в виде xml-документа. Для того, чтобы осуществить экспорт объектов, необходимо выполнить следующее:

  1. Выбрать объекты, подлежащие экспорту (см. раздел 4.3. "Выбор объектов в таблице данных").
  2. Вызвать действие "Экспортировать" из контекстного меню или при помощи иконки на панели инструментов.
  3. В открывшемся окне сохранения файла указать местоположение и имя файла. Дать файлу расширение .xml.


2.3.13.6. Обновление данных таблицы

После выполнения действий над различными объектами, хранящимися в системе, их новое состояние может сразу не отобразиться в таблице данных. Для того чтобы получить из базы данных последние актуальные данные необходимо воспользоваться действием "Обновить", которое доступно в контекстном меню, при помощи иконки на панели инструментов, а также может быть доступно при нажатии клавиши F5.

Действие "Обновить" имеет соответствующую иконку на панели инструментов:
Кнопка обновления набора данных


2.3.13.7. Доступ к настройкам системы

При наличии соответствующих прав доступа Вы можете просматривать и изменять настройки системы. Доступ к меню настроек осуществляется при помощи действия "Настройки", которое может быть вызвано из контекстного меню или при помощи иконки на панели инструментов. При вызове этого действия отобразится форма задания настроек. Эта форма аналогична форме задания параметров (см. раздел 6 "Работа с формой задания параметров"). Если Вы имеете права администратора системы, то форма задания настроек, кроме кнопок OK и Отмена, будет иметь кнопку "По умолчанию". При нажатии этой кнопки значения, установленные в полях формы станут значениями настроек по умолчанию.

Форма задания настроек системы

Если в системе нет доступных для текущего пользователя настроек, то при вызове действия "Настройки" отобразится окно:
Сообщение об отсутствии доступных настроек

Действие "Настройки" имеет соответствующую иконку на панели инструментов:
Кнопка формы настроек


2.3.13.8. Дополнительные действия, доступные в иерархических таблицах данных

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

При помощи этих действий можно управлять отображением дерева иерархически организованных объектов следующим образом:

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


2.4. Работа с Инспектором объектов

2.4.1. Отображение свойств Инспектором объектов

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

  1. Если в таблице данных выбран один объект, то в Инспекторе объектов отображаются все свойства этого объекта, видимые пользователю.
  2. Если в таблице данных выбрано несколько объектов, то
    • Инспектор объектов будет иметь строки, соответствующие только тем свойствам, которые есть у всех выделенных объектов;
    • если у всех выделенных объектов значение свойства одинаково, то это значение будет отображено в правой колонке; в противном случае в правой колонке будет отображено пустое значение.
  3. При изменении значения свойства в Инспекторе объектов новое значение будет установлено для всех выделенных объектов.

Выбран один объект - вид на инспектор объектов  
Выбран один объект - вид на таблицу

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

Выбрано несколько объектов - вид на инспектор объектов
 
Выбрано несколько объектов - вид на таблицу

На рисунке в той же таблице данных выбрано два объекта: сорт мороженого "Тропический рай" (фруктовое мороженое) и сорт "Белый Бим черное ухо" (обычное мороженое). При этом в Инспекторе объектов отображаются только те свойства, которые являются общими для выделенных объектов (свойство "Фрукт" не отображается). Значения свойств "Вид упаковки" и "Вес" для выбранных объектов одинаковы, поэтому их значения отображены в правой колонке Инспектора объектов. Значения остальных свойств для данных объектов различны, поэтому для этих свойств отображаются пустые значения. Если изменить одно из свойств в Инспекторе объектов, то новое значение будет установлено как для сорта мороженого "Тропический рай", так и для сорта мороженого "Белый Бим черное ухо".

Порядок отображения свойств в Инспекторе объектов устанавливается разработчиком прикладной системы. Также разработчиком прикладной системы может быть установлено отнесение свойств к категориям. В этом случае свойства могут отображаться сгруппированными по категориям. Слева от наименования каждой категории будет отображен значок Свернутый узел дерева или Развернутый узел дерева. Нажатием мышью на значок Развернутый узел дерева свойства, входящие в категорию, можно свернуть, нажатием на значок Свернутый узел дерева их можно снова отобразить.

Отображение Инспектором объектов свойств, сгруппированных по категориям

На рисунке представлен пример отображения Инспектором объектов свойств объекта, соответствующего дисциплине учебного плана студентов. Свойства, отнесенные к категориям "Формы текущего контроля" и "Распределение аудиторных часов по модулям", свернуты. Свойства, отнесенные к категории "Учебные часы" раскрыты.

В связи с тем, что выбор свойств объектов для отображения, получение и сравнение их значений происходит по специальному алгоритму, в случае одновременного выбора большого числа объектов скорость работы Инспектора объектов может снижаться. Если на вычисление значения общего свойства группы объектов требуется значительное время, то такое свойство может отображаться как свойство с отложенным вычислением. Для такого свойства в правой колонке вместо значения может отображаться строка (...). При активизации этого свойства справа отобразится кнопка со знаком вопроса Кнопка вычисления отложенного свойства. Если нажать на эту кнопку, то значение свойства будет определено и отображено.

Свойство с отложенным вычислением


2.4.2. Управление положением Инспектора объектов на экране и порядком отображения свойств

Инспектор объектов отображается в отдельном окне. Это окно можно перетаскивать по экрану за заголовок, изменять его размеры стандартным для операционной системы Windows образом. На панели инструментов всегда присутствует иконка Инспектора объектов, при нажатии которой можно отобразить окно Инспектора (если оно не видимо) и сделать его активным:
Кнопка инспектора объектов

При нажатии правой кнопки мыши в левом столбце Инспектора объектов или в свободном нижнем поле доступно контекстное меню Инспектора объектов. При помощи действий, расположенных в этом меню можно управлять режимом работы окна Инспектора и порядком отображения свойств.

Контекстное меню инспектора объектов

Выбор одного из пунктов контекстного меню переводит Инспектор объектов в новый режим работы. После этого рядом с пунктом меню отображается галочка Флажок в контекстном меню или точка Радиокнопка в контекстном меню. При повторном выборе помеченного пункта меню соответствующий режим работы отменяется и отметка снимается. Доступные пункты контекстного меню позволяют устанавливать следующие режимы работы Инспектора объектов.

  • При выборе пункта меню Всегда наверху окно Инспектора объектов будет всегда отображаться на переднем плане независимо от переключения между активными таблицами данных.
  • Если выбрать пункт меню Прозрачное окно, то окно Инспектора объектов станет полупрозрачным.
  • Если выбрать пункт меню Показать скрытые свойства, то кроме свойств, отображаемых в обычном режиме (свойства, созданные разработчиком прикладной системы как " видимые ") будут отображены свойства объектов, " невидимые " пользователю.
  • Пункт меню Сортировать по алфавиту позволяет отображать свойства не в порядке, установленном разработчиком прикладной системы, а в алфавитном порядке их наименований. Такой режим работы удобен в случае, если необходимо найти свойство по его наименованию.
  • Пункты подменю Группировка позволяют:
    • Группировать по категории - свойства будут отображены сгруппированными по категориям (показано на рисунке);
    • Группировать по классу - свойства будут отображены сгруппированными по классу объектов, членами которого они являются;
    • Не группировать - свойства будут отображены без группировки.

2.4.3. Редактирование значений свойств при помощи Инспектора объектов

При помощи Инспектора объектов удобно изменять значения свойств одного или одновременно нескольких выбранных объектов (о выборе объектов см. раздел 4.3. "Выбор объектов в таблице данных"). Одно из свойств, отображаемых в Инспекторе объектов, всегда является активным. Активное значение выделяется в Инспекторе объектов рамкой, его значение отображается в режиме редактирования.

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


2.5. Работа с формой задания параметров

Форма задания параметров используется для организации диалога с пользователем по заданию параметров, необходимых для выполнения метода или формирования отчета. Форма задания параметров открывается при вызове действия, для выполнения которого необходимо задать параметры.

Форма задания параметров представляет собой форму, содержащую поля различного вида. В правом нижнем углу формы расположены кнопки ОК и Отмена.

Форма задания параметров

Слева или сверху от каждого поля расположено его наименование. Наименования поля отражает, какие данные должны быть в него введены. Поля формы объединяются в группы. Группы полей могут располагаться в столбцах или на закладках. На рисунке выше поля формы расположены в двух столбцах. Если поля расположены на закладках, то в верхней части формы отображаются заголовки закладок с их наименованиями.

Расположение полей формы на закладках

На рисунке представлена та же форма, что и на рисунке выше, но с расположением параметров на закладках.

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

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

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

  1. Если поле имеет серый фон, то его значение недоступно для изменения. Такие поля используются для отображения дополнительной информации. Значения в таких полях могут изменяться автоматически при установке новых значений в других полях формы.
    Редактирование значения "только для чтения" на форме
  2. Обычное поле отображается в случае, когда в него должно быть введено строковое значение длиной до 128 символов, целочисленное, вещественное (с целой и дробной частью) значение, значение типа даты, времени, или даты со временем
    Редактирование недопустимого значения на форме
    В таком поле можно вводить текст с клавиатуры, копировать и вставлять его. Введенные в такое поле символы проверяются на соответствие типу данным (на основе локальных настроек компьютера) и на удовлетворение значения дополнительным условиям, которые могут быть установлены разработчиком прикладной системы. В случае если введенный набор символов соответствует недопустимому для данного поля значению, поле приобретет зеленый фон.
    Редактирование значения на форме - установлено допустимое значение
    Редактирование недопустимого значения даты на форме - установлено недопустимое значение.
  3. Для ввода строковых значений, длина которых может превышать 128 символов, отображаются расширенные поля ввода:
    Редактирование длинной строки на форме
    В таком поле можно вводить текст с клавиатуры, копировать его и вставлять. Также в таком поле может вводится многострочный текст. Перенос строки осуществляется нажатием клавиш Ctrl+Enter. Если текст имеет большое число строк, для его просмотра используется вертикальная полоса прокрутки.
  4. Для выбора значения из двух возможных вариантов используется поля, в котором отображается флажок и текстовое значение.
    Редактирование логического значения на форме
    Изменение значения в таком поле может производиться либо щелчком мыши по флажку, либо при помощи клавиши Пробел на клавиатуре. Если в данном поле пустое значение недопустимо, то переключение происходит между двумя возможными значениями (например, для поля "Пол" между значениями "Муж." и "Жен."). Если пустое значение допустимо, то переключение происходит между тремя вариантами: двумя значениями и пустым значением, для которого отображается строка "(Нет)".
  5. Если значение поля должно быть установлено путем выбора из списка допустимых значений, то в правой части поля отображается кнопка с направленной вниз стрелкой.
    Редактирование значения из выпадающего списка на форме
    Установление значения в таком поле может производиться либо при помощи выбора из выпадающего списка, открывающегося при нажатии на кнопку Кнопка выпадающего списка, либо путем ввода с клавиатуры текста, соответствующего выбираемому значению. В процессе ввода будут предлагаться допустимые варианты.
  6. Если поле предполагает ввод большого объекта, то оно отображается следующим образом:
    Редактирование большого значения на форме
    Если в поле значение не установлено, то отображается текст "(Нет)". Если значение установлено, то отображается текст "(Данные)". В правой части поля ввода расположено три кнопки:
    • Кнопка выбора при нажатии этой кнопки будет отображено окно редактирования текста большого объекта;
    • Кнопка загрузки из файла при нажатии этой кнопки большой объект можно загрузить из файла при помощи стандартного диалога открытия файла Windows;
    • Кнопка сохранения в файл при нажатии этой кнопки большой объект можно сохранить в файл при помощи стандартного диалога сохранения файла Windows.
  7. Если поле предполагает выбор объекта из другой таблицы данных, то в правой части поля отображается кнопка с тремя точками или кнопка со стрелкой и кнопка с тремя точками.
    Редактирование значения с выбором на форме
    Выбор значений в таком поле производится путем нажатия на одну из кнопок:
    • Кнопка выпадающего списка при нажатии данной кнопки отображается выпадающий список объектов которые могут быть выбраны в данном поле;
    • Кнопка выбора - при нажатии данной кнопки будет открыта таблица данных, и в ее правом нижнем углу будут расположены кнопки OK и Отмена. В открывшейся таблице нужно выбрать один объект, после чего нажать кнопку ОК.

При работе с формой задания параметров рекомендуется устанавливать в полях значения в порядке их следования на форме. Разработчиком прикладной системы может быть установлена зависимость между значениями полей. В этом случае при изменении значения в одном из полей, в других полях значения также могут автоматически измениться. Допустимость значений в одних полях может зависеть от того, какие значения установлены в других полях.

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


2.6. Формирование отчетов Microsoft Excel

Формирование отчетов, выгружаемых в MS Excel происходит при помощи вызова действий в таблицах данных (подробнее о вызове действий см. раздел 4.12 "Выполнение действий над объектами"). При вызове отчета на выполнение может отобразиться форма задания параметров отчета. Поля этой формы необходимо заполнить, после чего нажать кнопку ОК (подробнее о работе с формой задания параметров см. раздел 6. "Работа с формой задания параметров").

Отчеты, выгружаемые в MS Excel, как правило, имеют иконки на панели инструментов, характерные для рабочих книг Excel:
Кнопка формирования отчета Microsoft Excel

При запуске отчета на исполнение происходит создание рабочей книги Excel, в которую передаются данные, хранящиеся в базе данных. Рабочая книга может содержать данные, диаграммы, интерактивные элементы управления, и проч.. Далее средствами MS Excel могут осуществляться любые доступные действия с рабочей книгой.

Отчеты в MS Excel используются для вывода на печать документов и стандартных форм отчетности. Шаблоны отчетов создаются разработчиками прикладной системы.

Полученный в результате формирования отчета файл MS Excel может далее использоваться для дальнейшей работы с данными, может быть распечатан, сохранен, отправлен по электронной почте и т.п.


2.7. Формирование отчетов в виде HTML-документов

В целях публикации отчетной информации в Internet средствами системы могут формироваться отчеты в виде HTML-документов. Формирование таких отчетов происходит путем вызова действий в таблицах данных (подробнее о вызове действий см. раздел 4.12 "Выполнение действий над объектами"). При вызове отчета на выполнение может отобразиться форма задания параметров отчета. Поля этой формы необходимо заполнить, после чего нажать кнопку ОК (подробнее о работе с формой задания параметров см. раздел 6. "Работа с формой задания параметров").

Отчеты, формируемые в виде HTML-документов, как правило имеют иконки на панели инструментов, характерные для приложения MS Internet Explorer:
Кнопка формирования XSLT-отчета

В результате работы отчета создается HTML-документ, который может содержать таблицы с данными, рисунки, ссылки и проч. Сформированный документ показывается при помощи приложения Internet Explorer. Полученный html-файл может быть опубликован в Internet, сохранен, распечатан и т.д.

Сформированный html-документ сохраняет связь в базой данных. Если в ранее открытом документе выполнить процедуру обновления, по документ отобразит последнюю версию хранящихся на сервере БД данных.


2.8. Взаимодействие с разработчиком в случае ошибок, проблем, вопросов по работе системы

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

Общими принципами сбора информации для обращения к разработчику должны быть:

  1. Необходимо быть готовым изложить последовательность действий пользователя в системе, начиная с открытия системы до ситуации, приводящей к ошибке, проблемной ситуации или ситуации, вызывающей вопрос.
  2. Если ошибка или проблема имеет визуальное проявление, нужно сделать скриншот (снимок) экрана. Желательно предоставлять скриншот всего экрана компьютера, а не только активного окна приложения, это даст разработчику дополнительную полезную информацию. Скришот экрана при работе в операционной системе MS Windows можно получить путем одновременного нажатия клавиш Ctrl + Print Screen (PrtScr) и последующей вставки (сочетание клавиш Shift + Ins) в какое-либо графическое приложение, например, программу Paint.
  3. Если ошибка заключается не в отображении специального окна с сообщением об ошибке, а в том, что результат работы системы является, с точки зрения пользователя, некорректным, то нужно быть готовым изложить, каким должен быть корректный результат, и чем именно результат работы системы некорректен.
  4. Если ошибка, проблема или вопрос связаны с работой третьесторонних приложений (например, отчеты, формируемые в MS Excel или MS Word, работа web-приложений системы посредством интернет-браузеров), нужно быть готовым предоставить информацию о версии третьесторонних приложений.
  5. Нужно быть готовым предоставить информацию о конфигурации рабочего места пользователя, версии операционной системы, установленном программном обеспечении и его версии, включая средства анитивирусной защиты.

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


2.8.1. Приложение Отладочный монитор

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

Иконка Debug Monitor

Когда приложение Отладочный монитор запущено, приложение Обозреватель данных выводит в него поток сообщений о действиях и событиях, происходящих в системе. В Отладочный монитор попадают все sql-запросы, направляемые с рабочего места пользователя на сервер баз данных (в случае удаленного подключения - html-запросы, направляемые на сервер приложений), информационные сообщения, предупреждения, отладочная информация, сообщения об ошибках и прочие данные.

DebugView screenshot

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

  1. Закрыть приложение Обозреватель данных, если оно было открыто.
  2. Запустить приложение Отладочный монитор. Если это приложение уже было открыто, то выполнить очитку всех имеющихся в нем сообщений при помощи кнопки Очистить.
  3. В приложение Обозреватель данных выполнить всю последовательность действий, приводящих в появлению ошибки или проблемной ситуации.
  4. После возникновения ошибки или проблемной ситуации в приложении Отладочный монитор нажать кнопку Сохранить в файл, выбрать место сохранения и задать имя файла. Файл будет сохранен в формате.txt.
  5. Отправить полученный.txt-файл разработчику в составе других информационных материалов, которыми должны быть:
    • Словесное описание проблемы и способа ее воспроизведения
    • Один или несколько скриншотов экрана, иллюстрирующих проблему

После получения информации, состав которой описан в пункте 5, разработчик может запросить дополнительную информацию о проблеме.


2.8.2. Получение файла, содержащего информацию об ошибке

В ходе работы с системой могут отображаться специальные окна с информацией об ошибках. Эти окна могут быть двух видов:

  1. Окно с информацией о недопустимом действии пользователя (окно с шапкой синего цвета):

    Окно ошибки. Синяя шапка.

    Как правило, отображение такого окна с информацией об ошибке свидетельствует не об ошибке в функциональности системы, а о том, что пользователем выполнено недопустимое действие. Информация о том, в чем именно действие не допустимо, содержится в тексте, отображаемом в окне. Например, на приведенном выше скриншоте мы видим окно с ошибкой, отображено после попытки пользователя создать в справочнике "Уровни образования и курсы" второй записи с именем "1 курс", подчиненной родительской записи "Бакалавриат", что недопустимо. Поэтому сообщение об ошибке говорит о дублировании объекта по полю Имя.

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

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

  2. Окно с информацией об ошибке системы (окно с шапкой красного цвета).

    Окно ошибки. Красная шапка.

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

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

Сохранение информации для направления разработчику.

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

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

Информация для службы поддержки

При помощи ссылки Сформировать файл для службы поддержки можно собрать в удобном виде наиболее полную и полезную для разработчика информацию. После нажатия на ссылку будет предложен диалог сохранения файла. По умолчанию файлу будет дано имя ExceptionInfo.err. Это имя можно изменить, но расширение необходимо файла сохранить. После выбора места сохранения и имени файла и нажатия кнопки Сохранить, система отобразить предупреждение:

Предупреждение при сохранении файла для службы поддержки

К данному предупреждению нужно отнестись ответственно - отправлять полученный файл только на адреса службы поддержки системы в вашей организации или на официальный контактный адрес разработчика (если вы взаимодействуете с разработчиком напрямую). После отправки этот файл необходимо удалить.

Предоставление разработчику информации в виде.err-файла - это самый удобный и надежный вариант взаимодействия, который даст возможность разработчику решить проблему или ответить на вопрос наиболее эффективным и быстрым образом. Данный файл содержит все виды информации, которые могут быть собраны другими способами:

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

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

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

Получение файла для службы поддержки

2.8.3. Получение информации о третесторонних приложениях

В случае, если ошибка произошла при взаимодействии системы с третьесторонним приложением, например, при выполнении отчета MS Excel, MS Word, pdf, при работе web-приложений системы через интернет-браузер, разработчику, в дополнение к файлу с информацией об ошибке, понадобится информация о версии третьестороннего приложения, при взаимодействии с которым произошла ошибка.

Получить информацию о версии приложения можно, как правило, в окне О программе ("About box"), которое в большинстве программных продуктов представлено в пункте меню Справка.

Разработчику в составе информационных материалов нужно отправить скриншот этого окна.

В продуктах семейства Microsoft Office вызвать окно О программе можно разными способами в зависимости от версии MS Office. В программных продуктах версий до 2003 включительно это окно доступно в меню Справка / О программе. В программных продуктах версий 2007 и выше вызвать это окно можно следующим образом:

  1. В меню Файл открыть выпадающий список доступных действий и нажать кнопку Параметры Excel :
    Параметры Excel
  2. В открывшемся окне выбрать раздел Ресурсы, в правой части окна нажать кнопку О программе :
    Вызов окна О программе Excel

Окно О программе в случае MS Excel выглядит следующим образом:

Окно О программе Excel

В программе Acrobat Reader окно О программе можно вызвать из меню Справка / О программе :

Вызов окна О программе Acrobat Reader

В интернет-браузерах окно "О программе" (О Google Chrome, О FireFox, О Internet Explorer) также можно вызвать из меню Справка. Строка меню в интернет-браузерах часто бывает по умолчанию скрыта. Для того, чтобы ее отобразить, нужно нажать клавишу Alt на клавиатуре.


3. Руководство пользователя построителя запросов

4. Руководство администратора

4.1. Установка программного обеспечения СУБД

Прежде, чем устанавливать программноге обеспечение "Мельница данных" необходимо установить и настроить программное обеспечение СУБД.

Для конфигурирования сервера БД необходимо последовать советам раздела "Конфигурирование сервера". В этом разделе описаны шаги, которые необходимо предпринять для установки сервера "с нуля". Если сервер БД у вас уже установлен и настроен, то использовать рекомендации этого раздела нет необходимости. Раздел описывает установку сервера БД минимальной поддерживаемой версии в минимально необходимой для работы "Мельницы данных" конфигурации. Если вы собираетесь использовать сервер БД для более широкого круга задач, то пользуйтесь руководствами по соответствующим СУБД.
Важно!
Документация по СУБД, а также любая другая информация, полученная от производителей СУБД, имеет абсолютный приоритет перед утверждениями настоящего документа.

На каждой рабочей станции должно быть установлено и настроено программное обеспечение клиентской части СУБД. Это, как правило, некий набор библиотек и компонентов, наличие которых необходимо для соединения с сервером БД. Для обеспечения рабочей станции этими компонентами необходимо последовать советам раздела Конфигурирование клиента. В этом разделе описаны шаги, которые необходимо предпринять для установки клиентской части СУБД "с нуля". Если клиентская часть СУБД у вас уже установлена и настроена, то использовать рекомендации этого раздела нет необходимости. Раздел описывает установку клиентской части СУБД минимальной поддерживаемой версии в минимально необходимой для работы "Мельницы данных" конфигурации.

В настоящий момент поддерживаемые СУБД приведены в таблице:
СУБД Минимальная
требуемая версия
Разработчик Сопровождение в России
Firebird
Firebird
Open source
1.5.4.4910 http://www.firebirdsql.org
Страница загрузки
http://www.ibase.ru
Oracle
Oracle database
Коммерческое ПО
9.2.0.1 http://www.oracle.com
Страница загрузки
http://www.oracle.com/global/ru/index.html


4.1.1. Конфигурирование сервера
Firebird

Младшая тестированная на совместимость версия - 1.5.4.4910. Использование более младшей версии на сервере недопустимо. Шаги установки примерно следующие:

  1. Первая страница содержит логотип проекта Firebird
    Установка FireBird (первая страница)
  2. Вторая страница содержит лицензионное соглашение. Для продолжения установки необходимо установить кнопку "I accept the agreement".
    Установка FireBird (вторая страница)
  3. Третья страница содержит информацию, необходимую для установки.
    Установка FireBird (третья страница)
  4. Четвертая страница позволяет указать папку на диске, в которую будут установлены файлы Firebird.
    Установка FireBird (четвертая страница)
  5. На пятой странице определяется тип установки. Мы конфигурируем сервер БД, и, соответственно, выбираем из выпадающего списка пункт "Full installation of Server and development tools". Необходимо определиться с выбором между различными архитектурами сервера. Если вы затрудняетесь в выборе между вариантами архитектуры сервера, то помните, что для однопроцессорных систем предпочтительнее Super Server, для многопроцессорных используется только Classic Server. Подробности можно посмотреть на сайте сопровождающей компании или на сайте проекта. Особое внимание требуется обратить на работу сервера на процессоре в режиме HyperThreading.
    Установка серверной части FireBird - выбор типа установки
  6. На шестой странице предлагается выбрать имя папки меню "Пуск", в которой будут созданы полезные ярлыки. В нашем случае ярлыки будут созданы для файлов документации, бесполезной в конечном счете для конечного пользователя. Поэтому мы ставим флажок "Don't create any icons".
    Установка FireBird (шестая страница)
  7. На седьмой странице необходимо выбрать параметры установки. Настоятельно рекомендуется включить флажок "Use the Guardian to control the server" и запускать сервер в режиме службы, то есть выбрать кнопку "Run as a Service". Также настоятельно рекомендуется установить флажок "Start Firebird automatically everytime you boot up". Программное обеспечение "Мельница данных" использует в работе библиотеку gds32.dll , загружая ее из системного каталога Windows. Поэтому в целях обеспечения нормальной работы необходимо установить оба флажка - "Copy Firebird client library to <system> directory" и "Generate client library as GDS32.DLL for legacy app. support".
    Установка серверной части FireBird - параметры установки
  8. На восьмой странице необходимо подтвердить установку с выбранными параметрами.
    Установка серверной части FireBird - подтверждение установки
  9. После установки на девятой странице можно ознакомиться с информацией об установленной версии.
    Установка FireBird (девятая страница)
  10. Десятая страница информирует об успешном завершении установки и позволяет запустить сервер немедленно. Рекомендуется установить флажок "Start Firebird Service now".
    Установка серверной части FireBird - установка завершена

Убедиться в том, что сервер установлен и запущен, можно из окна служб (Start → Control Panel → Administrative Tools → Services):

Установленный FireBird в списке сервисов

Кстати

Использование embedded-сервера вполне допустимо, с учетом ограничений, налагаемых разработчиком. Для использования embedded-сервера необходимо положить файлы (с полным путем) из архива embedded-сервера рядом с исполняемыми файлами нашей системы, и переименовать файл FBEMBED.DLL в GDS32.DLL , примерно следующим образом:

Использование FireBird Embedded

Для работы с embedded-сервером имя сервера в строке соединения указывать нельзя. Кроме того, необходимо соблюдать рекомендации и требования разработчиков сервера.

Oracle

Младшая тестированная на совместимость версия - 9.2.0.1. Использование более младшей версии недопустимо.

Если вы устанавливаете Oracle не с компакт-дисков, то не пользуйтесь программой автозапуска, лежащей в корне первого установочного диска, а запустите setup.exe из каталога install\win32 на первом установочном диске.

Шаги установки примерно следующие:

  1. Первая страница содержит логотип Oracle и командные кнопки. Для продолжения установки нажмите кнопку "Next".
    Установка Oracle (первая страница)
  2. На второй странице необходимо определиться с путями установки и источника, а также с именем "дома". Настоятельно рекомендуется принять значения, предлагаемые по умолчанию.
    Установка Oracle (вторая страница)
  3. На третьей странице необходимо выбрать устанавливаемый продукт. Для сервера БД необходимо выбрать продукт "Oracle9i Database 9.2.0.1.0".
    Установка серверной части Oracle
  4. На четвертой странице необходимо выбрать тип установки. Для обеспечения требуемой функциональности выберите тип "Standard Edition".
    Установка серверной части Oracle - выбор типа установки
  5. На пятой странице необходимо выбрать параметры базы данных, создаваемой автоматически при установке сервера. Рекомендуется никакой базы данных при установке не создавать, для чего выбрать пункт "Software Only".
    Установка серверной части Oracle - отказ от автоматического создания БД
  6. На шестой странице необходимо выбрать порт TCP/IP, используемый Oracle Services for MTS. По умолчанию 2030.
    Установка серверной части Oracle - порт MTS
  7. На седьмой странице необходимо подтвердить правильность параметров установки.
    Установка серверной части Oracle - подтверждение установки
  8. После окончания процесса вы увидете сообщение об успешном завершении установки. Нажмите кнопку "Exit".
    Установка серверной части Oracle - завершено
  9. После завршения работы инсталлятора автоматически будет запущено приложение "Enterprise Manager Console". Если по каким-либо причинам этого не произошло, запустите это приложение самостоятельно через меню "Пуск". В окне "Add Databases To Tree" нажмите кнопку "Cancel".
    Установка серверной части Oracle - отказ от использования Enterprise Manager Console
  10. Из меню выберите пункт Tools → Service Management → Oracle Net Manager.
    Установка серверной части Oracle - вызов Oracle Net Manager
  11. В появивщемся окне приложения "Oracle Net Manager" раскройте узел дерева "Local", встаньте на узел дерева "Listener" и нажмите на кнопку с большим зеленым плюсом в панели инструменов (слева).
    Установка серверной части Oracle - Oracle Net Manager
  12. В появивщемся окне добавления Listener'a введите имя (по умолчанию - LISTENER). Настоятельно рекомендуется принять умолчание.
    Установка серверной части Oracle - создание Listener'a
  13. Нажмите на кнопку "Add Address" в нижней части окна.
    Установка серверной части Oracle - создание адреса Listener'a
  14. В появившемся окне отображена информация о том, каким образом клиенты будут осуществлять соединение с сервером БД. Настоятельно рекомендуется принять умолчания - протокол TCP/IP, порт 1521.
    Установка серверной части Oracle - адрес Listener'a создан
  15. Из меню выберите пункт File → Save Network Configuration
    Установка серверной части Oracle - сохранение конфигурации
  16. Служба Listener'a будет создана при первой попытке создать базу данных. Закройте приложения "Oracle Net Manager" и "Enterprise Manager Console".

4.1.2. Конфигурирование клиента
Firebird

Младшая тестированная на совместимость версия - 1.5.4.4910. Использование более младшей версии на клиенте недопустимо. Шаги установки примерно следующие:

  1. Первая страница содержит логотип проекта Firebird
    Установка FireBird (первая страница)
  2. Вторая страница содержит лицензионное соглашение. Для продолжения установки необходимо установить кнопку "I accept the agreement".
    Установка FireBird (вторая страница)
  3. Третья страница содержит информацию, необходимую для установки.
    Установка FireBird (третья страница)
  4. Четвертая страница позволяет указать папку на диске, в которую будут установлены файлы Firebird.
    Установка FireBird (четвертая страница)
  5. На пятой странице определяется тип установки. Мы конфигурируем клиентскую часть, и, соответственно, выбираем из выпадающего списка пункт "Minimum client install - no server, no tools". Кнопки в списке устанавливаемых компонентов будут автоматически выставлены в правильное положение.
    Установка клиентской части FireBird - выбор типа установки
  6. На шестой странице предлагается выбрать имя папки меню "Пуск", в которой будут созданы полезные ярлыки. В нашем случае ярлыки будут созданы для файлов документации, бесполезной в конечном счете для конечного пользователя. Поэтому мы ставим флажок "Don't create any icons".
    Установка FireBird (шестая страница)
  7. На седьмой странице необходимо выбрать параметры установки. Программное обеспечение "Мельница данных" использует в работе библиотеку gds32.dll, загружая ее из системного каталога Windows. Поэтому в целях обеспечения нормальной работы необходимо установить оба флажка - "Copy Firebird client library to <system> directory" и "Generate client library as GDS32.DLL for legacy app. support".
    Установка клиентской части FireBird - параметры установки
  8. На восьмой странице необходимо подтвердить установку с выбранными параметрами.
    Установка клиентской части FireBird - подтверждение установки
  9. После установки на девятой странице можно ознакомиться с информацией об установленной версии.
    Установка FireBird (девятая страница)
  10. Десятая страница информирует об успешном завершении установки.
    Установка клиентской части FireBird - установка завершена
Oracle

Младшая тестированная на совместимость версия - 9.2.0.1. Использование более младшей версии на клиенте недопустимо.

Если вы устанавливаете Oracle не с компакт-дисков, то не пользуйтесь программой автозапуска, лежащей в корне первого установочного диска, а запустите setup.exe из каталога install\win32 на первом установочном диске.

Шаги установки примерно следующие:

  1. Первая страница содержит логотип Oracle и командные кнопки. Для продолжения установки нажмите кнопку "Next".
    Установка Oracle (первая страница)
  2. На второй странице необходимо определиться с путями установки и источника, а также с именем "дома". Настоятельно рекомендуется принять значения, предлагаемые по умолчанию.
    Установка Oracle (вторая страница)
  3. На третьей странице необходимо выбрать устанавливаемый продукт. Для рабочей станции необходимо установить продукт "Oracle9i Client 9.2.0.1.0".
    Установка клиентской части Oracle
  4. На четвертой странице необходимо выбрать тип установки. Для обеспечения требуемой функциональности выберите тип "Runtime".
    Установка клиентской части Oracle - выбор типа установки
  5. На пятой странице необходимо подтвердить правильность параметров установки.
    Установка клиентской части Oracle - подтверждение установки
  6. В процессе установки инсталлятор потребует настроить параметры соединения с сервером БД. Для этого запустится отдельный мастер "Oracle Net Configuration Assistant", и процесс установки будет приостановлен на время работы этого мастера.
    Если этого по каким-либо причинам не произошло, то после завершнения установки необходимо запустить это приложение из меню "Пуск" и выполнить описанные в этом и следующих шагах действия.
    На этой (первой) странице мастера необходимо отказаться от использования службы каталогов, выбрав кнопку "No, I will create net service names myself...".
    Установка клиентской части Oracle - конфигурирование подключения к БД - не использовать directory service.
  7. На второй странице мастера необходимо выбрать версию базы данных. Базы данных версии Oracle8 в любом случае не поддерживаются "Мельницей данных", поэтому выберите кнопку "Oracle8i or later database or service".
    Установка клиентской части Oracle - конфигурирование подключения к БД - версия БД
  8. На третьей странице мастера необходимо ввести имя сервиса, идентифицирующего базу данных на сервере (в данном случае - "RTT"). Это имя устанавливается при создании базы данных.
    Установка клиентской части Oracle - конфигурирование подключения к БД - имя сервиса
  9. На четвертой странице мастера выберите из списка доступных для соединения с БД протоколов протокол "TCP".
    Установка клиентской части Oracle - конфигурирование подключения к БД - протокол
  10. На пятой странице мастера введите адрес сервера, на котором установлена БД. Можно вводить как символьное имя сервера, так и IP-адрес. На этой же странице выберите порт TCP/IP, по которому будет производиться соединение с сервером. Порт по умолчанию - 1521.
    Установка клиентской части Oracle - конфигурирование подключения к БД - сервер и порт
  11. На шестой странице мастер предлагает протестировать заданные на предыдущих шагах параметры. Выберите кнопку "Yes, perform a test".
    Установка клиентской части Oracle - конфигурирование подключения к БД - тестирование соединения
  12. Если введенные на предыдущих страницах параметры соединения с БД были заданы корректно, то мастер сообщит об этом:
    Установка клиентской части Oracle - конфигурирование подключения к БД - успешное соединение
  13. На восьмой странице введите имя псевдонима подключения, который будет использоваться в дальнейшем для установки соединения с БД приложениями "Мальницы данных". Во избежание путаницы настоятельно рекомендуется именовать псевдоним так же, как и службу на сервере (в данном случае - RTT). сообщит об этом:
    Установка клиентской части Oracle - конфигурирование подключения к БД - псевдоним соедиения
  14. На девятой странице мастера у вас есть возможность выбрать, настроить еще одно подключение или завершить работу с мастером. После завршения установки вы всегда сможете вернуться к процедуре создания псевдонима подключений, вызвав из меню "Пуск" приложение "Oracle Net Configuration Assistant".
    Установка клиентской части Oracle - конфигурирование подключения к БД - отказ от создания следующего соединения
  15. На десятой странице мастер сообщает об успешном создании псевдонима соединения с БД.
    Установка клиентской части Oracle - конфигурирование подключения к БД - завершено конфигурирование соединения
  16. На десятой странице мастер сообщает об успешном завершении своей работы.
    Установка клиентской части Oracle - конфигурирование подключения к БД - завершено
  17. После завршения работы мастера "Oracle Net Configuration Assistant" вы увидете сообщение об успешном завершении работы инсталлятора. Нажмите кнопку "Exit".
    Установка клиентской части Oracle - завершено

4.2. Установка программного обеспечения платформы "Мельница данных"

Для установки ПП "Мельница данных" необходимо запустить файл setup.exe, расположенный на поставляемом компакт диске. После запуска программы установки необходимо следовать указаниям мастера установки.

Шаг 1: Выбор языка

Установка Мельницы Выбор языка

Шаг 2: Информация о версии устанавливаемого ПП

Установка Мельницы. Версия ПП

Шаг3: Выбор каталога установки файлов ПП

Установка Мельницы. Папка установки.

Шаг 4: Выбор файла лицензии

Установка Мельницы. Выбор лицензии.

Файл лицензии также расположен на поставляемом компакт-диске или высылается по электронной почте. В случае если не выбран никакой файл лицензий, то программа будет установлена в демонстрационном режиме. В последующем после получения файла лицензий необходимо будет переустановить ПП. Подробнее с лицензионным соглашением можно ознакомится в одноименном разделе настоящей документации.

Шаг 5: Выбор компонентов для установки

Установка Мельницы. Выбор компонентов.

На данном шаге вам необходимо выбрать набор компонентов для установки на локальный компьютер. В зависимости от специфики использования рабочего места, на которое устанавливается ПО, необходимо выбрать тип установки. Предлагаемые типы установок:

  • Рабочее место пользователя
  • Рабочее место администратора
  • Рабочее место разработчика
  • Только построитель запросов
  • По выбору

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

Полный перечень компонентов для установки:

  1. Обозреватель данных
  2. Построитель запросов
  3. Утилита обслуживания баз данных
  4. Утилита слияния баз данных
  5. Инструменты разработчика / Инструмент поставки решений
  6. Отладочный монитор
  7. Документация

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

После указания всех параметров мастер установки скопирует файлы на локальный компьютер и создаст в меню программ папку с ярлыками к установленным компонентам:

Установка Мельницы. Ярлыки после установки.

4.2.1. Поставляемые компоненты ПП "Мельница данных"
Обозреватель данныхОбозреватель данных (DataBrowser) - Основное приложение позволяющее просматривать и модифицировать данные. Приложение используется для разработки прикладных решений. Позволяет описывать объекты БД, их свойства, методы, пользовательские формы и отчеты. Это же приложение используется для работы с разработанными прикладными решения пользователями на локальных рабочих местах.
Утилита обслуживания БДУтилита обслуживания базы данных (DBSetupShell) - Приложение, позволяющее создавать и обслуживать выбранную базу данных любой из поддерживаемых СУБД. Также при помощи данной утилиты можно создавать и удалять пользователей БД, создавать и восстанавливать резервные копии БД, импортировать и экспортировать данные из/в БД, а также выполнять процедуры по контролю целостности БД.
Построитель запросовПостроитель запросов (QueryBuilder) - Приложение, позволяющее визуальными средствами создавать интерактивные запросы на основе данных хранящихся в используемой БД. Созданные запросы сохраняются в стандартный формате SQL и полностью удовлетворяют архитектуре клиент-сервер. Сохраненные в виде файла запросы могут быть открыты пользователем по необходимости. Полученная таким образом информация будет актуальна в любой момент времени. Также существует возможность создания статистического отчета на основе Excel шаблона.
Отладочный мониторОтладочный монитор (DebugView) - Средство позволяющее отслеживать все запросы к БД генерируемые "клиентской частью" прикладного решения, а также результат их исполнения сервером СУБД. Используется для отладки в процессе разработки прикладного решения.
Утилита слияния баз данныхУтилита слияния баз данных (Merger) - Данная утилита позволяет сравнивать данные и метаданные 2х различных БД. При помощи данного приложения можно с легкостью перенести, например данные из резервной копии в рабочую БД в случае не преднамеренного удаления большого числа объектов, тем самым избежать необходимости восстановления резервной копии недельной давности. Также используется для обновления версии ПП.
Редактор файлов документацииРедактор файлов документации (HelpEditor) - Незаменимое средство создания электронной справки и файлов документации в стандартном формате chm.

4.3. Создание и начальная инициализация базы данных

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

После запуска одноименного приложения откроется окно панели управления утилиты:

Создание БД. Утилита обслуживания БД.

Для доступа к задачам необходимо заполнить параметры работы с базой данных:

  1. Источник данных : Необходимо указать используемую СУБД.
  2. База данных : Необходимо указать наименование создаваемого файла БД и его месторасположение. (Пример: c:\databases\base.fdb)
  3. Пользователь : Указать имя пользователя (Администратора) для используемой СУБД. Для Interbase/FireBird - SYSDBA, для Oracle - SYS.
  4. Пароль : Указать пароль пользователя (Администратора) для используемой СУБД. Для Interbase/FireBird - masterkey, для Oracle - SYS.

После заполнения полей параметров можно приступать к созданию БД. Для создания новой базы данных необходимо воспользоваться задачей "Создать новую БД". После нажатия кнопки "Выполнить" будут выполнены команды отображенные в окне "Командная строка".

Кстати
Днные команды можно выполнить самостоятельно из командной строки операционой системы или из любого другого приложения. Также создать пустую БД можно средствами входящими в комплекты поставок соответствуеющих СУБД.
Создание БД. Вывод консольного приложения.

В окне "Вывод консольного приложения" будет отображен результат выполнения команд по созданию БД. В случае успешного выполнения всех необходимых команд, БД будет создана по указанному в параметрах месторасположению.

После создания пустой БД необходимо наполнить ее системными объектами (метаданными) для последующей работы с ПП "Мельница данных". Для этого необходимо выполнить задачу "Синхронизировать базу данных". После нажатия кнопки "Выполнить" будет автоматически запущен отладочный монитор отображающий процесс наполнения БД необходимыми метаданными. Данный процесс может занять от одной до нескольких минут в зависимости от используемой СУБД и производительности сервера. (Обычно около минуты) По окончании процесса в окне "Вывод консольного приложения" будет отображен результат выполнения инициализации базы данных.

Инициализация БД. Вывод консольного приложения.

Все действия по созданию и инициализации БД выполнены. БД готова к эксплуатации.


4.4. Управление доступом пользователей

После того, как база данных создана и инициализирована метаданными платформы, доступ к системе будет иметь один пользователь - администратор созданной БД. Добавление других пользователей, ролей пользователей и включение пользователей в роли выполняется в представлениях Пользователи и Роли в Системной форме. После начальной инициализации БД на вкладке Пользователи можно увидеть одного пользователя с именем, соответствующим логину администратора БД (Например, для FireBird пользователь SYSDBA), на вкладке Роли можно увидеть одну роль с наименованием Администраторы. На подчиненных вкладках этих представлений можно увидеть, что пользователь - администратор включен в роль Администраторы.

Профиль пользователя формируется путем определения для него:

  1. Перечня доступных форм
  2. Перечня доступных визуальных групп
  3. Перечня групп запретов

Формирование профиля происходит одинаково как для роли, так и для отдельного пользователя. Однако рекомендуется формировать профили для ролей, а не для отдельных пользователей. В этом случае при подключении к системе новых пользователей, изменении параметров доступа для существующего пользователя достаточно будет включить пользователя в одну из ролей, или исключить его из роли. Роли рекомендуется формировать содержательным образом на основе распределения обязанностей реальных пользователей, работающих с прикладным решением.


4.4.1. Создание пользователей

Создание пользователя системы включает в себя два этапа:

  1. Создание пользователя БД средствами используемой СУБД. Для этого наряду с возможностями каждой из СУБД Утилитой обслуживания БД предлагается действие Создать пользователя. Предлагаемые Утилитой по умолчанию пути к БД и параметры доступа требуют уточнения в зависимости от условий функционирования реальной БД. Задавать права доступа пользователя к объектам БД на данном этапе не надо.
  2. В Системной форме на вкладке Пользователи создать нового пользователя при помощи соответствующего действия контекстного меню.
    Важно!
    В поле Имя нужно вветси строку, строго соответствующую логину пользователя БД в вернем регистре.
    Особых требований к полю Наименование не предъявляется. Однако рекомендуется вводить в это поле фамилию и имя реального пользователя системы, например, Смирнов Иван Николаевич, что позволить в последующем получать информативные данных об активности пользователей системы.

4.4.2. Создание ролей

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

  • Начальник отдела кадров
  • Инспектора по работе с личными данными персонала
  • Инспектора по социальным вопросам
В случаях, когда реальные пользователи совмещают несколько ролей, роли лучше формировать отдельно, после чего одного пользователя можно влючить одновременно в несколько ролей.


4.4.3. Включение пользователей в роли

В роль могут включаться как пользователи, так и другие роли. Для добавления в роль нового члена роли нужно выбрать роль на вкладке Роли, отрыть подчиненную вкладку Члены роли и вызвать на ней действие Создать. Поля формы параметров заполняются следующим образом:

  • Пользователь - в этом поле необходимо выбрать либо одного из пользователей, либо одну из ролей. В зависимости от того, выбран ли пользователь или роль, будет меняться доступность следующих ниже полей.
  • Основная роль - в этом поле можно установить значение Да или Нет. Если пользователь включен в нескольно ролей, то среди них можно выделить одну основную. Разработчик прикладного решения на платформе сможет использовать это значение для управления доступом к объектам системы. Поле доступно для выбора значения только в том случае, если в поле Пользователь выбран именно пользователь, а не роль.
  • Добавить связанные роли - в этом поле можно установить значение Да или Нет. Поле доступно для выбора значения только в том случае, если в поле Пользователь выбрана роль. При установке значения Да в роль будут включены также все роли, входящие в выбранную. при установке значения Нет будет включена только одна роль без подчиненных ролей.

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


4.4.4. Формирование перечня доступных визуальных групп

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

Для каждой роли (или для отдельного пользователя) формируется перечень визуальных групп, которые будут ему доступны на Консоли управления. Если визуальных групп в прикладном решение не создано, или если пользователю не доступно ни одной визуальной группы, консоль управления не будет отображена. В этом случае при открытии системы пользователь увидит первую из доступных ему форм, которая открывается автоматически.

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

Важно!
Если пользователь включен в несколько ролей, то достаточно наличия доступа к визуальной группе в одной из этих ролей.

4.4.5. Формирование перечня доступных форм

Формы создаются разработчиком прикладного решения. Работа с визуальными группами ведется в Системной форме на вкладке Формы. Каждая форма представляет собой набор представлений, связанных друг с другом определенным образом. Иконки всех форм, доступных пользователю, отображаются на Панели инструментов в верхней части экрана. Нажимая на одну из иконок форм, пользователь может переключаться между ними. Если форма входит в одну из доступных пользователю визуальных групп, она отобразится на консоли управления. В этом случае переключаться между формами пользователь сможет как на Панели инструментов, так и на Консоли управления.

Для каждой роли (или для отдельного пользователя) формируется перечень форм, которые будут ему доступны на Консоли управления. При открытии системы пользователь видит первую из доступных ему форм, открываемую автоматически.

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

Важно!
Если пользователь включен в несколько ролей, то достаточно наличия доступа к форме в одной из этих ролей.

4.4.6. Формирование перечня групп запретов

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

  • Запрет на класс
  • Запрет на свойство
  • Запрет на подпрограмму

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


4.5. Ключи командной строки утилиты обслуживания БД

Утилита обслуживания БД - консольное приложение. При запуске приложения оно сообщает о поддерживаемых режимах и ключах командной строки. Ключи указываются через пробел. Ключ должен начинаться символом "/". Для ключей, содержащих значения параметров, между ключем и значением должен быть пробел. Имена файлов и папок, содержащие пробелы, в командной строке должны быть заключены в кавычки.

При работе с утилитой общее правило состоит в том, что первым параметром передается строка соединения с БД, вторым параметром необязательная команда. Остальные параметры и ключи указываются в зависимости от выбранной команды.

Если работа утилиты завершилась успешно, то она возвращает код завершения 0. Если в процессе работы утилиты произошли ошибки, то код завершения будет равен 1. Если работа утилиты завершилась успешно, но были выданы предупреждения, то она возвращает код завершения 2.

Поддерживаемые команды:

<Команда не указана> Инициализация/cинхронизация БД
ping Проверка доступности БД
pump Перекачка данных
check Проверка целостности БД
build Перестройка всех метаданных
load Загрузка доступных файлов
export Экспорт реплики данных
import Импорт реплики данных

Далее будут рассмотрены подробности работы каждого из режимов.


4.5.1. Перекачка данных

Для осуществления перекачки данных необходимо:

  1. Иметь права владельца схемы в БД - приемнике.
  2. Иметь права владельца схемы в БД - источнике.
  3. Если не задан ключ /M, то БД - приемник должен быть пустой схемой, не содержащей никаких объектов.
Эти условия контролируются утилитой dbsetup.exe.

Перекачка данных осуществляется в любом направлении. Ниже представлены варианты сочетания источников и приемников данных. В случае, если попытка использовать тот или иной оптимизационный механизм оказалась неудачной, производится стандартная перекачка.

Приемник Источник
БД MSSQL БД Firebird БД Oracle БД PostgreSQL Папка, файл, zip-архив
БД MSSQL Стандартная перекачка данных
БД Firebird Предпринимается попытка использовать механизм загрузки данных из внешних таблиц ("external table"). Предпринимается попытка использовать механизм "внешний источник данных" ("external data source"). Предпринимается попытка использовать механизм загрузки данных из внешних таблиц ("external table").
БД Oracle Предпринимается попытка использовать механизм загрузки данных из внешних таблиц ("table organization external"). Предпринимается попытка использовать механизм "связи БД" ("database link").
Предпринимается попытка использовать механизм загрузки данных из внешних таблиц ("table organization external").
БД PostgreSQL Предпринимается попытка использовать механизм загрузки данных из внешнего текстового файла оператором COPY. Предпринимается попытка использовать расширение "dblink". Предпринимается попытка использовать механизм загрузки данных из внешнего текстового файла оператором COPY.
Папка, файл, zip-архив Стандартная перекачка данных Предпринимается попытка собрать на сервере blob, содержащий целевой xml-документ. Не имеет смысла.
Просто скопируйте файлы.

Используемые параметры и ключи командной строки:

Для перекачки данных используюется команда pump. В строке соединения указывается БД-приемник, кроме случая перекачки данных из БД в папку, файл или zip-архив. Для всех случаев кроме случая перекачки данных из БД в папку, файл или zip-архив командная строка содержит кляузу pump from. Для случая перекачки данных из БД в папку, файл или zip-архив командная строка содержит кляузу pump to.
Пример
Перекача данных из БД Oracle в БД Firebird:
dbsetup.exe fb#sysdba/masterkey@host:database pump from ora#dataowner/password@host/sid.dataowner
    
Перекача данных из zip-архива в БД Firebird:
dbsetup.exe fb#sysdba/masterkey@host:database pump from c:\dbbackup.zip
    
Перекача данных из БД Firebird в zip-архив:
dbsetup.exe fb#sysdba/masterkey@host:database pump to c:\dbbackup.zip
    

Ключ Назначение
/J <Целое число> Определяет число потоков, осуществляющих перекачку данных. По умолчанию соответствует количеству ядер процессора.
/H <Целое число> Определяет базовое количество записей в блоке перекачки. По умолчанию - 1 млн. записей. Для таблиц, содержащих большие объекты (blob и/или clob) размер блока перекачки определяется как базовый размер блока, деленный на 100. Если источником является папка, файл или zip-архив - ключ игнорируется.
/M Пропустить этап создания таблиц и последовательностей в БД (таблицы и последовательности должны быть созданы заранее).
/G Пропустить этап заливки данных, произвести только создание таблиц и последовательностей в БД.
/K <Список таблиц> Не перекачивать данные указанных таблиц. Список таблиц разделяется символом ";" (точка с запятой).
/NODBLINK Принудительно отключает механизмы связи между БД на сервере.
/NOCSV Принудительно отключает механизмы загрузки данных из внешнего файла.
/NOXML Принудительно отключает механизмы cборки xml-документа на сервере.

Важно!
Информация о значениях типа "внешние данные" будет перенесена из источника в приемник, сами внешние данные при этом перенесены в хранилище не будут.

При перекачке данных учитыватся табличное пространство ("группа файлов") каждой таблицы в случае, если это понятие релевантно для источника и приемника. При использовании папки, файла или zip-архива имя табличного пространства каждой таблицы сохраняется в файле RTTI, и будет использовано, если окажется релевантным. Если в приемнике имеется возможность разместить таблицу в табличное пространство с тем же именем, которое указано в источнике, то это будет сделано.

При перекачке данных таже осуществляется перенос последовательностей. При этом переносится текущее значение каждой из последовательностей. Значение кеша последовательности переносится только в том случае, если это понятие релевантно для источника и для приемника. При использовании папки, файла или zip-архива значение кеша сохраняется в файле Sequences, и будет использовано, если окажется релевантным.

После завершения перекачки данных в схеме-приемнике остаются следующие объекты:

  • Таблицы данных.
  • Первичные ключи таблиц данных.
  • Последовательности.
  • Заголовки системных объектов платформы.

Этот набор минимально достаточен, чтобы с помощью синхронизации (загрузив метаданные из таблиц, с ключем /T) восстановить метаданные БД в соответствующей схеме, и работать с ней средствами платформы.

Особенности перекачки данных в папку, файл или zip-архив:

При использовании папки она рассматривается как хранилище файлов перекачки. При использовании файла он рассматривается как хранилище файлов перекачки в формате Microsoft Compound File. При использовании zip-архива он рассматривается как хранилище файлов перекачки. Хранилище файлов перекачки содержит следующие файлы:

  • FormatSettings - xml-файл с информацией о региональных настройках процесса, сформировавшего хранилище.
  • Sequences - xml-файл с информацией о текущих значениях последовательностей.
  • RTTI - xml-файл с информацией о таблицах и полях. Также содержит информацию о табличных пространствах.
  • <Имя Таблицы> с возможным числовым постфиксом в скобках - xml-файл с данными таблицы в стандартном xml-представлении.
  • #<Длина файла в 16-ричном представлении, 16 символов><CRC файла в 16-ричном представлении, 8 символов> - двоичный файл с содержимым blob/clob. Такие файлы формируются для объектов, чей размер превышает 1MB.

Остальные файлы в хранилище будут проигнорированы (если хранилище используется как источник) или удалены (если хранилище используется как приемник).

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


4.5.1.1. Стандартная перекачка данных

Стандартная процедура перекачки блока данных заключается в открытии однонаправленного курсора на основании запроса типа select... from "..." к таблице-источнику, подготовке запроса insert into "..."("ID",.....) values (:Param1, :Param2....) к приемнику, и многократному выполнению этого единожды подготовленного запроса по мере продвижения вперед по курсору-источнику. Все значения полей при этом проходят через клиентскую сторону, и заливка данных осуществляется по одной записи за одно выполнение запроса. Характерная скорость такой заливки - порядка 5000 записей в секунду.

Oracle
Оператор INSERT в процессах перекачки данных всегда формируется с подсказкой /*+ APPEND */.

Важно!
Описанные далее механизмы оптимизации не могут использоваться одновременно. Если какой-либо из них может быть использован в вашей ситуации - постарайтесь обеспечить условия, необходимые для их работы. Вы получите значительное ускорение перекачки.


4.5.1.2. Механизмы связи между БД на сервере

Firebird
Будут формироваться и выполняться блоки вида
01execute block as
02  declare "ID" BIGINT;
03  declare "P0" SMALLINT;
04  .....
05begin
06  for execute statement 'select "ID", .... from "...."'
07    on external data source '....' as user '...' password '....'
08    into :"ID",:"P0",..... do
09      insert into "...."("ID",....)
10      values (:"ID",:"P0",.....);
11end
    

Oracle
Механизм может быть использован, если пользователь-владелец схемы имеет право CREATE DATABASE LINK, и оператор create database link будет выполнен без ошибок. При этом будет создан link с именем "SYS$PUMP". После завершения процедуры перекачки данных link будет удален. Таким образом, можно в целях безопасности выдавать право CREATE DATABASE LINK владельцу схемы данных только на время перекачки данных. При этом генерируются и выполняются операторы вида
1INSERT /*+ APPEND */ INTO "..."("ID", ....)
2SELECT "ID", ....
3  FROM "..."@"SYS$PUMP"
4...
    

Postgres
Механизм может быть использован, если в БД установлено стандартное расширение "dblink", и оператор select public.dblink_connect('user=... password=.......') будет выполнен без ошибок. При этом генерируются и выполняются операторы вида
01do $$
02declare
03  cnt int;
04begin
05  perform public.dblink_connect('user=... password=... ....');
06  perform public.dblink_open('SYS$....', 'select T."ID", ..... from "...." T');
07  loop
08    insert into "...." ("ID", .....)
09    select T."ID" from public.dblink_fetch('SYS$.....', 1000000)
10    as T("ID" bigint, .....);
11    get diagnostics cnt = row_count;
12    exit when cnt = 0;
13  end loop;
14end; $$
    

Механизм может быть принудительно заблокирован ключем /NODBLINK.


4.5.1.3. Загрузка данных из внешнего файла

Firebird
Чтобы использовать загрузку из внешнего файла, необходимо, чтобы одновременно выполнялись следующие условия:
  • Сервер БД выполняется на том же хосте, на котором происходит запуск dbsetup.exe (в строке соединения хост не указан, указан как localhost, указан как 127.0.0.1, указан так, чтобы совпадать с результатом вызова функции gethostname).
  • Временная папка процесса dbsetup.exe (переменная окружения %TMP%) доступна сервису Firebird как источник внешних данных (в конфигурации FireBird - параметр ExternalFileAccess).
  • Таблица не содержит полей типа BLOB.
  • Таблица не содержит обнуляемых полей, все поля таблицы обязательные.
  • Загружаемый блок содержит как минимум 1000 записей.
В этом случае во временной папке будет создан временный файл, содержащий загружаемые данные в требуемом Firebird формате, и выполнены операторы:
1create table "DML..." external '.....'
2  ("ID" BIGINT,
3  ....);
4insert into "..."("ID", ...)
5  select "ID", ....
6  from "DML....";
7drop table "DML....";
    
После чего временный файл будет удален.

Oracle
Чтобы использовать загрузку из внешнего файла, необходимо, чтобы одновременно выполнялись следующие условия:
  • Сервер БД выполняется на том же хосте, на котором происходит запуск dbsetup.exe (в строке соединения хост не указан, указан как localhost, указан как 127.0.0.1, указан так, чтобы совпадать с результатом вызова функции gethostname).
  • Владельцу данных доступна на чтение и запись хотя бы одна папка (directory). Этого можно достичь, например, такими операторами:
    Пример
    1CREATE DIRECTORY dir_name AS 'D:\TEMP';
    2GRANT READ,WRITE ON DIRECTORY dir_name TO user_name;
              
    При этом папка (на диске) должна быть доступна на запись процессу dbsetup.exe.
  • Оператор
    01create table "DML...."
    02(
    03 ....
    04) ORGANIZATION EXTERNAL (
    05  DEFAULT DIRECTORY ....
    06  ACCESS PARAMETERS (
    07    RECORDS DELIMITED BY NEWLINE
    08    FIELDS TERMINATED BY '....'
    09  )
    10  LOCATION ('DML.....')
    11)
            
    выполняется без ошибок. Созданная при этом таблица доступна для чтения.
  • Таблица не содержит полей типа BLOB.
  • Загружаемый блок содержит как минимум 1000 записей.
В этом случае в папке, которая доступна, будет создан временный файл, содержащий загружаемые данные в требуемом Oracle формате, и выполнены операторы:
1create table "DML....."
2(
3 ....
4) ORGANIZATION EXTERNAL (
5....);
6insert into "..."("ID", ...)
7  select "ID", ....
8  from "DML....";
9drop table "DML....";
    
После чего временный файл будет удален.

Postgres
Чтобы использовать загрузку из внешнего файла, необходимо, чтобы одновременно выполнялись следующие условия:
  • Сервер БД выполняется на том же хосте, на котором происходит запуск dbsetup.exe (в строке соединения хост не указан, указан как localhost, указан как 127.0.0.1, указан так, чтобы совпадать с результатом вызова функции gethostname).
  • Временная папка процесса dbsetup.exe (переменная окружения %TMP%) доступна сервису PostgreSQL как источник внешних данных.
В этом случае в папке, которая доступна, будет создан временный файл, содержащий загружаемые данные в требуемом Postgres формате. В случае, когда размер файла превысит 1GB, а также по исчерпании источника, будет выполнен оператор
  copy "..."(...) from %TEMP%\DML....CSV with (format csv, encoding UTF8)
    
После чего временный файл будет удален.

Механизм может быть принудительно заблокирован ключем /NOCSV.


4.5.1.4. Сборка xml-документа на сервере

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

Firebird
Чтобы использовать формирование xml-документов на сервере, необходимо, чтобы одновременно выполнялись следующие условия:
  • Таблица не содержит полей типа BLOB.
  • Таблица не содержит строковых полей, которые могут содержать не-xml-compaint символы (определяется по свойствам соответствующего строкового домена.
В этом случае будут формироваться и выполняться запросы вида
1with T as (select T.* from "...." T order by T."ID")
2select cast(cast(
3  '<data handle="' || count(1) ||  '" eof="1">' || list('<row>' ||
4    '<ID type="int64">' || T."ID" || '</ID>' ||
5      case when T."..." is null then '<.../>' else '<... type="int">' || T."..." || '</...>' end ||
6      ......
7    || '</row>' , '') || '</data>' as blob sub_type 1 character set utf8) as blob sub_type 0), count(1)
8  from T
    
При выполнении такого запроса клиент получит blob, содержащий требуемый xml-документ в требуемой кодировке.

Oracle
Чтобы использовать формирование xml-документов на сервере, необходимо, чтобы одновременно выполнялись следующие условия:
  • Используется Oracle версии не ниже 11.
  • Таблица не содержит полей типа BLOB.
В этом случае будут формироваться и выполняться запросы вида
1with T as (select T.* from "..." T )
2select "SYS$HELPER"."ClobToBlob"('<data handle="' || count(1) || '" eof="1">' ||
3  xmlagg(xmlelement("row", xmlelement("ID", xmlattributes('int64' as "type"), T."ID"),
4    case when "..." is null then xmltype('<..../>') else
5      xmlelement("....", xmlattributes('ascii' as "type"), "SYS$HELPER"."XMLEscape"(asciistr(T."...."), 0)) end,
6    ....
7 order by T."ID").getclobval() || '</data>'), count(1) from T
    
При выполнении такого запроса клиент получит blob, содержащий требуемый xml-документ в требуемой кодировке.

Postgres
Чтобы использовать формирование xml-документов на сервере, необходимо, чтобы одновременно выполнялись следующее условие:
  • Таблица не содержит полей типа BLOB.
В этом случае будут формироваться и выполняться запросы вида
1select convert_to( '<data handle="' || count(1) ||  '" eof="1">' || string_agg(
2  '<row>' ||
3    '<ID type="int64">' || T."ID" || '</ID>' ||
4    case when T."...." is null then '<..../>' else '<.... type="int64">' || T."...." || '</....>' end ||
5    .....
6  '</row>', '' order by T."ID") || '</data>', 'UTF8'), count(1) from "..." T
    
При выполнении такого запроса клиент получит blob, содержащий требуемый xml-документ в требуемой кодировке.

Механизм может быть принудительно заблокирован ключем /NOXML.


4.6. Ключи командной строки инсталлятора платформы

Для автоматизации установки или обновления платформы инсталлятор платфромы setup.exe поддерживает ключи командной строки.
Важно!
Указание ключей командной строки не превращет инсталлятор платфромы setup.exe в консольное приложение. Поэтому если вы включаете запуск инсталлятора в файл пакетной обработки, вам, возможно, потребуется дождаться завершения процесса установки. Для этого рекомендуется использовать команду start (с ключем /w или /wait. Рекомендуется ознакомиться со справкой по команде start перед ее использованием) :
Пример
start /w "SOME_TITLE" "...\SOME_FOLDER\setup.exe" /N /S /P /F .....
      

Ключи указываются через пробел. Ключ должен начинаться символом "/". Для ключей, содержащих значения параметров, между ключем, символом "=" и значением параметра пробелов быть не должно.

Ключи командной строки:

Ключ Назначение
/S Запускает инсталлятор в режиме "без пользовательского интерфейса". Никакого взаимодействия с пользоваетелем не предусматривается. Если ключ /S не указан, то режимы, устанавливаемые остальными ключами, будут являться умолчаниями, и пользователь сможет их изменить в процессе взаимодействия с инсталлятором.
/NCRC Отключает проверку целостности инсталлятора перед запуском.
/x64 Устанавливает компоненты 64-разрядной редакции. См. замечание 1.
/L="<Файл лицензии>" Позволяет указать файл лицензии. Необходимо использовать полный путь к файлу. Если имя файла лицензии содержит пробелы, то его необходимо заключать в кавычки. См. замечание 2.
/T=<Число от 0 до 7> Выбирает тип установки (состав устанавливаемых компонент).
  • 0 - Рабочее место пользователя
  • 1 - Рабочее место администратора
  • 2 - Рабочее место разработчика
  • 3 - Только построитель запросов
  • 4 - Сервер приложений
  • 5 - Только сервер приложений
  • 6 - Только отладочный монитор
  • 7 - Только системные файлы
Точно установить, какие конкретно компоненты входят в тот или иной тип установки можно, запустив инсталлятор, на странице "Параметры установки". Там указано соответствие между типами установки и устанавливаемыми компонентами.
/LANG=<Идентификатор языка> Поддерживаемые языки:
  • 1033 - Английский
  • 1049 - Русский
  • 1034 - Испанский
/N Без регистрации компонентов в реестре и создания ярлыков. Только копирование файлов.
/NOREGISTER
/U Без создания ярлыков. Только копирование файлов и регистрация компонентов.
/UPDATE
/NOSERVICE Не регистрировать сервисы в системе.
/P Не проверять возможность обновления файлов.
/NOPROCLIST
/F Не устанавливать третьесторонние распространяемые файлы.
/NOINSTALLREDIST
/NODISABLEOFFICECLIPBOARD Не устанавливать библиотеку поддержки приложений Microsoft Office.
/NO_DISABLE_OFFICE_CLIPBOARD
/D=<Папка установки> Указывает папку установки. Необходимо указывать полный путь к папке.
Важно!
Этот ключ может быть указан только последним в командной строке, либо не указан вообще.
Важно!
Даже если имя папки установки содержит пробелы, то заключать в кавычки значение ключа /D не нужно.
Пример
setup.exe /NCRC /S /D=C:\Program Files\Data Mill
            

Замечания:

  1. Если ключ /x64 не задан, но в папке установки уже содержится папка WIN64, то все равно будет устанавливаться (в данном случае - обновляться) 64-битная редакция.
  2. Если ключ /L=... не задан, но рядом с инсталлятором пллатформы setup.exe находится хотя бы один файл с расширением .license, то в качестве файла лицензии будет использоваться один из этих файлов (первый найденный).

4.7. Форматы и соглашения

4.7.1. Стандартная адресация базы данных платформы

Строка адресации БД платформы "Мельница данных" состоит из следующих элементов:
Сервер#Пользователь:Роль/Пароль@БазаДанных

Сервер - один из следующих вариантов:

  • MS - БД MSSQL
  • FB - БД Firebird
  • ORA - БД Oracle Database
  • PG - БД PostgreSQL
  • MY - БД MySQL
  • APP - Удаленное подключение к БД через сервер приложений

Пользователь - имя пользователя, используемого для соедиения.

Роль - роль, ассоциированная с соединением.
Firebird
Роль, заданная в строке адресации БД, используется для установки соединения с БД (передается через параметр isc_dpb_sql_role_name)
Для всех СУБД, кроме Firebird, указание роли имеет смысл только для утилиты обслуживания БД.

Пароль - пароль пользователя, используемый для соедиения. Пароль также может быть не задан в строке соединения (после символа "/" сразу следует символ "@"). В этом случае пароль будет запрошен у пользователя (если будет такая возможность), или будет использоваться Negotiate-аутентификация.

БазаДанных - адресует собственно базу или схему данных.
При использовании удаленного подключения к БД через сервер приложений используется нотация
protocol://Host:Port/handler
Протокол (protocol) может быть http или https. По умолчанию используется протокол http. Порт (Port) по умолчанию 80 для протокол http и 443 для протокола https может быть опущен.
MS SQL
Host:Port\\InstanceName.Database
Порт (Port) по умолчанию 1433 может быть опущен вместе с двоеточнием. Хост (Host) может быть опущен, если используется локально. Имя экземпляра (InstanceName) может быть опущено, если используется имя "MSSQLSERVER". Следующие строки эквивалентны:
1localhost:1433\\MSSQLSERVER.MillDatabase
2localhost\\MSSQLSERVER.MillDatabase
3localhost.MillDatabase
4MillDatabase
    

Firebird
Host/Port:DBPath
Порт (Port) по умолчанию 3050 может быть опущен. Если опущен хост (Host), то используется локальный протокол доступа к БД. Файл базы данных (DBPath) может быть задан как полное имя файла в файловой системе сервера, так и быть псевдонимом, настроенным на сервере.
Oracle
Host:Port/SID.schema
Порт (Port) по умолчанию 1521 может быть опущен. Если опущен хост (Host), то используется имя из файа TNSNAMES.ORA в используемой клиентской части СУБД. Указание SID и имени схемы (schema) обязательно.
Postgres
Host:Port/DataBase.schema
Порт (Port) по умолчанию 5432 может быть опущен. Если опущен хост (Host), то используется локальное соединение. Указание имени базы данных (DataBase) и имени схемы (schema) обязательно.
MySQL
Host:Port/schema
Порт (Port) по умолчанию 3306 может быть опущен. Если опущен хост (Host), то используется локальное соединение. Указание имени схемы (schema) обязательно.

Прямое подключение к БД от имени владельца схемы данных является административным.
Oracle
Владельцем схемы данных является пользователь, имя которого совпадает с именем схемы.
Важно!
Никакое подключения к БД через сервер приложений не является административным.


5. Руководство разработчика на платформе

5.1. Решения, предлагаемые технологией "Мельница данных"

Технология "Мельница данных" предлагает решения традиционных проблем разработки и сопровождения учетных систем за счет следующих инноваций:

  1. Объектная модель хранится в системе по тем же принципам, что и модель бизнес-данных, т.е. объекты классов, описывающих метаданные системы (классы, поля, методы, свойства, пользовательские формы) хранятся в базе данных и отображаются при помощи стандартного пользовательского интерфейса. Моделирование системного слоя метаданных системы произведено разработчиками платформы. Модель системного слоя документирована и доступна для просмотра и использования разработчикам прикладных систем.
  2. Разработка прикладных учетных систем ведется в той же среде, что и работа конечных пользователей. Текущая модель прикладной системы доступна для просмотра и использования всеми разработчиками.
  3. На основе заложенной объектной модели прикладной системы автоматически генерируется SQL-код (как DML, так и DDL составляющие), что полностью освобождает разработчика прикладной системы от SQL-программирования.
  4. Пользовательские интерфейсы (формы, представления) также описываются при помощи объектной модели и хранятся в базе данных. Это позволяет автоматически генерировать формы просмотра данных и формы задания параметров методов, что освобождает разработчика прикладной системы от написания кода клиентского приложения. Для тонкого управления поведением форм задания параметров может использоваться язык VB-script.
  5. При внесении изменений в объектную модель:
    • новое состояние модели отображается в пользовательском интерфейсе в доступной для всех разработчиков форме;
    • текущая объектная модель в виде диаграммы классов может быть выгружена в HTML-отчет, что является базовой возможностью платформы;
    • внесение изменений в структуру базы данных и пользовательские интерфейсы производится автоматически средствами платформы.

Основными элементами стандартизованного пользовательского интерфейса являются развитые элементы управления, работающие с данными:

  • Таблицы данных - отображают списки объектов в табличной форме, удобной для восприятия пользователя. Таблицы данных позволяют производить сортировку, группировку объектов, фильтрацию данных по ряду условий, подведение агрегатов (количества объектов, наибольшего, наименьшего значения, суммы, среднего и т.д.), отображение и скрытие групп, подведение итогов по группе. Таблицы данных имеют функционал, позволяющий отображать иерархические структуры, а также производить произвольный отбор отображаемых объектов пользователем. Используемые таблицы данных позволяют работать с большими объемами данных без потери производительности.
  • Инспектор объектов - отображает все свойства выбранных (одного или нескольких) объектов в двух колонках: имя свойства - значение свойства. Инспектор объектов позволяет просматривать все свойства объектов, а также изменять значения свойств как одного объекта, так и для всех выделенных объектов одним действием.
  • Форма задания параметров - отображается при вызове пользователем одного из методов. На форме расположены элементы управления Поле ввода, соответствующие описанным для метода параметрам. Внешний вид и поведение элементов управления зависят от типа описанных параметров. Поведением элементов управления на форме можно управлять при помощи скрипта формы, разрабатываемого на языке VB-script.
  • Поле ввода - используется для задания значений свойств и параметров как в Таблице данных, так и в Инспекторе объектов и на формах задания параметров. Имеет функционал, позволяющий редактировать значения различных типов. Использование стандартизованного пользовательского интерфейса позволяет снизить издержки как на его сопровождение, так и на обучение пользователей работе на новых участках.

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

  1. Возможность переноса в Microsoft Excel любого видимого представления "as-is" с сохранением всех группировок, сортировок, агрегатов и т. п.
  2. Возможность вывода отчетов в виде документов Microsoft Office с передачей в среду функционирования Office соединения с БД, что позволяет строить отчеты любой степени сложности.
  3. Возможность использования в системе любого внешнего Ole-объекта как метода любого класса без ограничений.
  4. Возможность использования скриптлетов (фрагментов кода на скриптовом языке VBScript и/или JScript) как методов системы, фактически - возможность реализации на этих языках сколь угодно сложного поведения.
  5. Возможность формирования отчетов непосредственно в виде html-документов для последующей публикации их в сети Internet.

5.2. Системный слой объектной модели "Мельница данных"

Технология разработки и сопровождения учетных систем "Мельница данных" требует для своего функционирования объектную модель бизнес-сущностей. Технология диктует ряд дополнительных требований к объектной модели.

  1. Все классы наследуются от единого корня, класса TObject. Класс TObject вводит ряд элементов состояния, поведения и представления, которые наследуются всеми учитываемыми объектами в обязательном порядке.
  2. Множественное наследование не поддерживается (т.е. у каждого класса может быть один и только один родитель).
  3. Множественная инкапсуляция не поддерживается (т.е. у каждого объекта может быть один либо ни одного инкапсулирующего объекта).
  4. Простые типы данных вводятся посредством доменов. Домены определяют обязательность своих значений, а также другие характеристики, зависящие от класса домена. Домены бывают:
    • строковые (определяют максимальную длину строки);
    • целочисленные (определяют максимальное и минимальное значение целого числа);
    • вещественные (определяют максимальное и минимальное значение числа, количество значащих цифр);
    • логические;
    • значения типа "дата";
    • значения типа "время";
    • значения типа "дата со временем";
    • перечисления (определяют список возможных значений);
    • ссылка (определяют класс-приемник ссылки);
    • большие двоичные объекты (текст, изображение, файл, и т.д.).

5.3. Наследование и переопределение членов класса и параметров подпрограмм

Все члены родительского класса наследуются дочерним классом следующим образом:

Поля

Все поля родительского класса доступны в дочернем классе. При создании в дочернем классе поля с тем же именем, что и в родительском классе, класс-наследник теряет возможность напрямую манипулировать полем родительского класса и получает поле с тем же именем. Можно сказать, что новое поле "закрывает" старое, но не "замещает" его.

Методы

Все методы родительского класса наследуются дочерним классом. При создании в дочернем классе метода с тем же именем, что и в родительском классе, метод переопределяется, т.е. вместо старого метода будет существовать новый. Единственный способом обратиться к старому (унаследованному) методу является использование в теле метода оператора унаследованного вызова inherited (см. раздел 5.3.14.). Переопределенный метод имеет все параметры родительского метода и может расширять список параметров, а также переопределять унаследованные параметры (создавая параметры с тем же именем и изменяя любой другой атрибут параметра по своему усмотрению). Скрипты форм задания параметров не наследуются и должны быть полностью заданы в переопределенном методе. Изображения-иконки методов наследуются и могут не переопределяться явно.

Свойства

Все свойства родительского класса доступны в дочернем классе. При создании в дочернем классе свойства с тем же именем, что и в родительском классе, класс-наследник теряет возможность напрямую манипулировать свойством родительского класса и получает свойство с тем же именем. Можно сказать, что новое свойство "закрывает" старое, но не "замещает" его. На практике часто бывает необходимо в унаследованном методе (особенно в конструкторе) скрыть часть параметров от пользователя, либо сузить область выбора значений для каких либо параметров. В этом случае необходимо переопределить параметры в унаследованном методе с новыми значениями свойства Scope ("Область видимости") или Domain ("Домен"). Это нормальная рекомендуемая практика. Необходимо понимать, что скрыв с формы элемент управления, соответствующий параметру, значение которого обязательно, необходимо предусмотреть, чтобы этот параметр получил значение до вызова унаследованного метода, либо из скрипта формы задания параметров, либо в теле самого метода.

Пример
В конструкторе класса, унаследованного от класса TObject, переопределен параметр Name, таким образом, что в свойстве "Область видимости" установлено значение "Не видимо пользователям". При этом тело метода конструктора должно выглядеть следующим образом:
1begin
2  Name := UniqueValue;                    (1)
3  inherited;                         (2)
4  // инициализация собственных полей
5end;
  
Параметр конструктора Description, унаследованный от конструктора класса TObject останется видимым и его значение будет в обязательном порядке установлено пользователем при помощи формы задания параметров. Значения параметров Parent и Master будут определены из контекста вызова или запрошены у пользователя. Параметр Name не будет отображен на форме задания параметров и в начале выполнения тела метода его значение будет пустым (nil). В связи с этим в строке (1) тела метода производится установка значения параметра Name при помощи функции UniqueValue. Если этого не сделать, то вызов унаследованного метода при помощи оператора inherited вернет ошибку, связанную с тем, что параметр Name имеет недопустимое значение.

5.4. Средства моделирования пользовательского интерфейса

5.4.1. Представления

5.4.2. Визуальные группы

5.4.3. Формы, связь представлений в формах

5.5. Объектно-реляционное отображение

5.6. Обзор возможностей Платформы

5.7. Этапы разработки прикладных решений

5.7.1. Формирование видения модели

5.7.2. Создание структур хранения и средств обработки данных

5.7.2.1. Класс TObject, члены класса TОbject

5.7.2.2. Создание классов

5.7.2.3. Создание полей

5.7.2.4. Создание свойств

5.7.2.5. Создание методов

5.7.3. Синхронизаци базы данных

5.7.4. Создание пользователей и ролей

5.7.5. Средства моделирования пользовательских интерфейсов

5.7.5.1. Представления

5.7.5.2. Формы. Включение представлений в формы

5.7.5.3. Визуальные группы. Включение форм в визуальные группы

5.7.5.4. Организация доступа пользователей к формам и визуальным группам

5.7.6. Разработка отчетов

5.7.6.1. Создание шаблонов PDF-отчетов

5.7.6.1.1. Описание

Portable Document Format (PDF) — кроссплатформенный формат электронных документов, созданный фирмой Adobe Systems с использованием ряда возможностей языка PostScript. В первую очередь предназначен для представления в электронном виде полиграфической продукции, — значительное количество современного профессионального печатного оборудования может обрабатывать PDF непосредственно. Для просмотра можно использовать официальную бесплатную программу Adobe Reader, а также программы сторонних разработчиков. Традиционным способом создания PDF-документов является виртуальный принтер, то есть документ как таковой готовится в своей специализированной программе — графической программе или текстовом редакторе, САПР и т. д., а затем экспортируется в формат PDF для распространения в электронном виде, передачи в типографию и т. п. Формат PDF позволяет внедрять необходимые шрифты (построчный текст), векторные и растровые изображения, формы и мультимедиа-вставки. Поддерживает RGB, CMYK, Grayscale, Lab, Duotone, Bitmap, несколько типов сжатия растровой информации. Имеет собственные технические форматы для полиграфии: PDF/X-1, PDF/X-3. Включает механизм электронных подписей для защиты и проверки подлинности документов. В этом формате распространяется большое количество сопутствующей документации. Чаще всего PDF-файл является комбинацией текста с растровой и векторной графикой, реже — текста с формами, JavaScript'ом, 3D-графикой и другими типами элементов.

В приложениях Платформы "Мельница данных" для создания PDF-документов используется собственная библиотека PDFCreator.dll. С помощью библиотеки возможно прямое создание документов версии 1.3 . Создание PDF-документов осуществляется путем ввода предопределенных в библиотеке команд, которые в дальнейшем интерпретируются на основе языка описания страниц POSTSCRIPT.

Важно!
Все размеры графических объектов, размеры страниц, шрифтов и т.п. по умолчанию заданы в миллиметрах.
Совет
Для удобства построения шаблона PDF-документа создана функция DrawGrid. При ее включении при отладке при создании шаблона будет отображена визуальная сетка с шагом 5 миллиметров.
C гридом

5.7.6.1.2. Методы

5.7.6.1.2.1. Свойства документа

Для создания и описания свойств PDF-документа в библиотеке PDFCreator.dll используется класс IPDFDocument, обладающий следующими свойствами:

  • Title (WideString) - заголовок документа. По умолчанию - пустая строка.
    Пример
    Title = "DOC1"
  • CanEmbedFonts (WordBool) - Признак возможности построения PDF- документа со встроенными шрифтами (Embedded Fonts). В случае включения признака, все объявленные в скрипте шрифты будут включены в сборку документа и будут передаваться целиком вместе с документом. По умолчанию - False.
    Пример
    CanEmbedFonts = True 
    CanEmbedFonts = False 
  • CanCompress (WordBool) - признак сжатия документа при создании по собственным алгоритмам. По умолчанию - True.
    Пример
    CanCompress = False 
    CanCompress = True
  • Author (WideString) - автор документа. По умолчанию - текущий пользователь ОС.
  • Subject (WideString) - описание документа. По умолчанию - пустая строка.
  • Keywords (WideString) - ключевые слова для поиска по документу. По умолчанию - пустая строка.
  • Creator (WideString) - приложение-родитель документа. Указывается в том случае, если документ был сконвертирован из другого формата.
  • PageCount (Integer) - свойство, содержащее общее количество страниц в документе.
  • Pages[Index: Integer]: IPDFPage - свойство документа, предназначенное для перебора страниц документа для совершения над ними однотипных действий.
    Пример

    Пример использования:

    1for I = 0 to PageCount - 1
    2  Pages(I).rectangle 10,10,10,10, false
    3next
    Save "c:\pdf.pdf"

    Результат: На всех страницах документа будут нарисованы квадраты 10х10 мм.
  • procedure Save(Target: OleVariant) - процедура для сохранения документа PDF на жесткий диск сразу после создания.
    Пример
    Save "c:\pdf.pdf"
    - сохранит документ в файл c:\pdf.pdf


5.7.6.1.2.2. Свойства страницы

Для создания страницы используется функция

function CreatePage(Parent: OleVariant): IPDFPage;

Параметр Parent указывает страницу-родителя для данной страницы. Если страницы- родителя быть не должно - формат вызова функции примет вид:

set page = CreatePage(Null)

Параметры страницы:

  • Title - заголовок страницы.
    Пример
    page.Title = "Page name"
          
  • Width - ширина страницы, миллиметры
    Пример
    page.Width = 80
          
  • Height - высота страницы, миллиметры
    Пример
    page.Height = 80
          
  • DrawGrid - процедура, выводящая на страницу сетку с шагом 5 миллиметров для удобства отладки вида документа.
  • Perform - процедура, позволяющая выполнить дополнительные команды PostScript на странице.
    Пример
    page.perform "1 0.7 0 0 k"page.perform "0 0 m"
          

5.7.6.1.2.2.1. Объявление цвета

Для объявления цвета объектов на странице используется цветовая модель R:G:B (Red:Green:Blue). Объявление цвета для выполнения последующих операций (цвет шрифта, цвет линии/фигуры) осуществляется процедурой

procedure SetColor(R: Integer; G: Integer; B: Integer);
Где параметры R, G, B - значения базисных цветов для выбранного цвета (от 0 до 255).

Пример
ЦветRGB
Белый 255 255 255 +++
Черный 0 0 0 +++
Серый 190 190 190 +++
Синий 0 0 255 +++
Красный 255 0 0 +++
Зеленый 0 255 0 +++
Важно!

Если предварительно цвет не был объявлен, используется цвет по умолчанию - черный (0,0,0)


5.7.6.1.2.3. Графика

5.7.6.1.2.3.1. Линии

Для отрисовки линий используется процедура

procedure Line(X1: Double; Y1: Double; X2: Double; Y2: Double);
Здесь:

  • X1 - координата начала линии по горизонтали в миллиметрах от верхнего левого угла листа.
  • Y1 - координата начала линии по вертикали в миллиметрах от верхнего левого угла листа.
  • X2 - координата конца линии по горизонтали в миллиметрах от верхнего левого угла листа.
  • Y2 - координата Конца линии по вертикали в миллиметрах от верхнего левого угла листа.

Для задания толщины линии используется свойство

property LineWidth: Double
Значение толщины задается в миллиметрах. Значение по умолчанию - минимально возможная единица рисования для устройства. Так для монитора - 1 pixel, для принтера - 1 dot (точка)

Для задания стиля отрисовки начала/окончания линии используется свойство property LineCap: TPDFLineCap
Возможные стили:
Значение свойства: Отображение: Описание:
0Линия 0Прямой срез точно по точкам начала и окончания линии (по умолчанию)
1Линия 1С закруглением
2Линия 2Прямой срез с продолжением линии на половину толщины линии

Объявление цвета линии.

Пример
Две линии разной толщины, с разными окончаниями и цветами:
01set page = CreatePage(Null)
02
03page.DrawGrid
04
05page.LineCap = 1
06
07page.LineWidth = 2
08
09page.Line 10, 10, 30, 30
10
11page.LineWidth = 4
12
13page.SetColor 255, 0, 0
14
15page.LineCap = 2
16
page.Line 10, 30, 30, 10."I 


Результат:
2 линии

При необходимости соединения линий под углом в определенной точке можно задать тип соединения. Для объявления типа соединения используется свойство property LineJoin: TPDFLineJoin;
Типы соединения двух линий:
Значение свойстваОтображениеОписание
02 линии 0С острым углом
12 линии 1С закруглением
22 линии 2С обрезанным углом

Пунктир

Для создания пунктира используется процедура отображения линии с предварительно объявленными дополнительными значениями.

Процедура procedure SetDash(DashArray: OleVariant; Phase: Integer); Здесь DashArray - массив значений в миллиметрах, указывающий последовательность чередования штрихов и пропусков на линии, Phase - смещение в миллиметрах по линии.

Пример
Пример 1. Штрих 10 мм, Промежуток 5 мм, Смещения нет
Пример 2. Штрих 10 мм, Промежуток 5 мм, Смещение 5 мм
Пример 3. Различные значения штрихов и промежутков, Смещения нет
01set page = CreatePage(Null)
02
03page.DrawGrid
04
05page.LineWidth = 3
06
07page.SetDash Array(10, 5), 0
08
09page.Line 10, 10, 100, 10
10
11page.SetDash Array(10, 5), 5
12
13page.Line 10, 20, 100, 20
14
15page.SetDash Array(10, 5, 3, 2, 12, 20), 0
16
page.Line 10, 30, 100, 30

Результат:
Пунктир 1

Ломанная линия - здесь непрерывная линия, состоящая из нескольких прямых. Для отображения ломанной используется процедура procedure Poly(Points: OleVariant; Fill: WordBool), где Points - массив координат точек соединяемых прямыми, а Fill - признак заливки полученной замкнутой фигуры (если замкнута).

Пример
Пример Звезда без заливки
1set page = CreatePage(Null)
2
3page.DrawGrid
4
5page.LineWidth = 3
6
page.Poly  Array(10, 45, 100, 45, 27, 103, 55, 10, 82, 103, 10, 45), false

Результат:
Звезда
Пример
Пример Звезда с заливкой
1set page = CreatePage(Null)
2
3page.DrawGrid
4
5page.LineWidth = 3
6
page.Poly  Array(10, 45, 100, 45, 27, 103, 55, 10, 82, 103, 10, 45), true

Результат:
Звезда заливка

5.7.6.1.2.3.2. Прямоугольник

Rectangle (Прямоугольник) - для создания используется процедура:

procedure Rectangle(X1: Double; Y1: Double; Width: Double; Height: Double; Fill: WordBool);
Здесь:

  • X1 - координата верхнего левого угла прямоугольника по горизонтали в миллиметрах от верхнего левого угла листа шаблона.
  • Y1 - координата верхнего левого угла прямоугольника по вертикали в миллиметрах от верхнего левого угла листа шаблона.
  • Width - ширина прямоугольника с миллиметрах.
  • Height - высота прямоугольника с миллиметрах.
  • Fill - признак заливки прямоугольника (True/False). Если значение True то заливка производится объявленным заранее цветом (см. Объявление цвета). Если False - заливка не производится. Прямоугольник отрисовывается линиями с предварительно заданной толщиной. См. Линии
Пример
Пример 1. Создание красного прямоугольника:
1set page = CreatePage(Null)
2
3page.SetColor 255, 0, 0
4
5page.Rectangle 10, 15, 40, 20, True
6
page.DrawGrid
Результат:
Прямоугольник
Пример 2. Пустой прямоугольник без задания цвета:
1set page = CreatePage(Null)
2
3page.DrawGrid
4
5page.Rectangle 12, 17, 42, 25, false
6
page.DrawGrid

Результат:
Прямоугольник false

Также существует возможность изменения стиля отображения углов прямоугольника. Для этого нужно использовать свойство property LineJoin: TPDFLineJoin;

Значение свойстваОтображениеОписание
02 линии 0С острым углом
12 линии 1С закруглением
22 линии 2С обрезанным углом

Пример построения прямоугольников с различными типами соединения сторон:

Пример
01set page = CreatePage(Null)
02
03page.DrawGrid
04
05page.LineWidth = 4
06
07page.LineJoin = 0
08
09page.Rectangle 10, 10, 20, 10, false
10
11page.LineJoin = 1
12
13page.Rectangle 40, 10, 20, 10, false
14
15page.LineJoin = 2
16
page.Rectangle 70, 10, 20, 10, false


Результат:
3 прямоугольника

5.7.6.1.2.3.3. Вставка готовых изображений

Для вставки на создаваемую страницу готового изображения используется процедура procedure Image(const FileName: WideString; X: Double; Y: Double; Width: Double; Height: Double)

Параметры:

  • const FileName - имя файла изображения и путь к нему на жестком диске. Задается в кавычках.
  • X - координата левой верхней точки изображения по отношению к верхнему левому углу страницы по горизонтали в миллиметрах
  • Y - координата левой верхней точки изображения по отношению к верхнему левому углу страницы по вертикали в миллиметрах
  • Width - ширина изображения в миллиметрах
  • Height - высота изображения в миллиметрах.
Пример
1set page = CreatePage(Null)
2page.drawgrid
page.Image "c:\mill.bmp", 10,10, 30, 30

Результат:
Картинка

Вне зависимости от размера исходного изображения, при вставке изображения на создаваемую страницу оно будет растянуто по размерам, прописанным в процедуре.


5.7.6.1.2.3.4. Векторная графика

Язык PostScript, с помощью которого создаются векторные изображения для PDF-документа, поддерживает создание типичных примитивных объектов, таких как:

  • Прямые и ломанные линии
  • Многоугольники
  • Окружности и эллипсы
  • Кривые Безье
  • Текст

При создании векторного изображения на странице PDF-документа в приложениях Платформы, команды построения примитивных объектов PostScript передаются на исполнение при помощи процедуры Perform. Подробнее об операторах и командах PostScript для создания PDF-документов можно узнать на сайте Adobe


5.7.6.1.2.4. Шрифты

Шрифты, которые должны использоваться в создаваемом документе, должны быть предварительно объявлены. Для объявления используемых шрифтов используется функция
function CreateFont(const FontName: WideString; Size: Double; Bold: WordBool; Italic: WordBool): IPDFFont; где:

  • const FontName - имя шрифта, аналогичное имени объявляемого шрифта в операционной системе. В Функции объявляется в кавычках.
  • Size - размер шрифта в пунктах
  • Bold - признак начертания шрифта "жирный". Значения - True или False
  • Italic - признак начертания шрифта "курсив". Значения - True или False
Пример
Примеры объявления шрифтов:
1set font = page.createFont("Arial", 20, False, False)
2set labelFont = page.createFont("Times New Roman", 16, False, True)
3set dataFont = page.createFont("Tahoma", 18, True, False)
  

Для вывода текстовой информации на страницу используются процедуры:

  • procedure WriteLine(const LineText: WideString; X: Double; Y: Double);
    - используется для вывода текстовой строки
  • function WriteText(const AText: WideString; X: Double; Y: Double; Width: Double; Alignment: TPDFTextAlignment): Double;
    - используется для вывода текстового блока.

Параметры для procedure WriteLine :

  • const LineText - текстовая строка для вывода. Прописывается в кавычках. Будет выведена на страницу одной строкой.
  • X - координата верхней левой точки текстовой строки по горизонтали в миллиметрах.
  • Y - координата верхней левой точки текстовой строки по вертикали в миллиметрах.
Пример
Примеры вывода текстов на страницу:
01set page = CreatePage(Null)
02page.DrawGrid
03set font = page.createFont("Arial", 20, False, False)
04set labelFont = page.createFont("Times New Roman", 16, False, True)
05set dataFont = page.createFont("Tahoma", 18, True, False)
06Font.WriteLine "Фамилия", 5, 2
07Font.WriteLine "Имя", 5, 10
08Font.WriteLine "Отчество", 5, 18
09labelFont.WriteLine "Дата рождения", 5, 26
10dataFont.WriteLine "Национальность", 5, 34
  

Результат:
Разные шрифты

Параметры для function WriteText :

  • const AText - текст для вывода на страницу. Прописывается в кавычках. Будет выведена на страницу в виде текстового блока.
  • X - координата верхней левой точки текстового блока по горизонтали в миллиметрах.
  • Y - координата верхней левой точки текстового блока по вертикали в миллиметрах.
  • Width - ширина текстового блока в миллиметрах
  • Alignment - тип выравнивания текста в текстовом блоке.
    Значение параметраТип выравнивания
    0 По левому краю
    1 По правому краю
    2 По центру
    3 Выравнивание по ширине
Пример
Примеры вывода текстовых блоков на страницу:
1set page = CreatePage(Null)
2page.DrawGrid
3set font = page.createFont("Arial", 14, False, False)
4set labelFont = page.createFont("Times New Roman", 12, False, True)
5set dataFont = page.createFont("Tahoma", 11, True, False)
6Q = font.WriteText ("Тест работы свойства для выравнивания текста в текстовом блоке для документа PDF, создаваемого на Платформе Мельница Данных", 5, 5, 100, 0)
7Q = labelFont.WriteText ("Тест работы свойства для выравнивания текста в текстовом блоке для документа PDF, создаваемого на Платформе Мельница Данных", 5, 35, 100, 1)
8Q = dataFont.WriteText ("Тест работы свойства для выравнивания текста в текстовом блоке для документа PDF, создаваемого на Платформе Мельница Данных", 5, 55, 100, 2)
9Q = dataFont.WriteText ("Тест работы свойства для выравнивания текста в текстовом блоке для документа PDF, создаваемого на Платформе Мельница Данных", 5, 80, 100, 3)
  

Результат:
Выравнивание

Свойства шрифтов:

property Spacing: Double; - свойство, отвечающее за величину промежутка между буквами в слове. Задается в виде отклонения от промежутка между буквами по умолчанию для выбранного шрифта по горизонтальной оси в миллиметрах. Значение свойства равное "0" соответствует значению по умолчанию.

Пример
Пример:
01set page = CreatePage(Null)
02page.DrawGrid
03set font = page.createFont("Arial", 14, False, False)
04set labelFont = page.createFont("Arial", 14, False, False)
05set dataFont = page.createFont("Arial", 14, False, False)
06font.Spacing = 0
07labelFont.Spacing = 1
08dataFont.Spacing = 2
09font.WriteLine "Промежуток по умолчанию (0)", 5, 5
10labelFont.WriteLine "Промежуток с отклонением (1 мм)", 5, 10
11dataFont.WriteLine "Промежуток с отклонением (2 мм)", 5, 15
  

Результат:
Промежуток букв

property WordSpacing: Double; - свойство, отвечающее за величину промежутка между соседними словами. Задается в виде отклонения от промежутка между словами по умолчанию для выбранного шрифта по горизонтальной оси в миллиметрах. Значение свойства равное "0" соответствует значению по умолчанию.

Пример
Пример:
01set page = CreatePage(Null)
02page.DrawGrid
03set font = page.createFont("Arial", 14, False, False)
04set labelFont = page.createFont("Arial", 14, False, False)
05set dataFont = page.createFont("Arial", 14, False, False)
06font.WordSpacing = 0
07labelFont.WordSpacing = 2
08dataFont.WordSpacing = 5
09font.WriteLine "Промежуток по умолчанию (0)", 5, 5
10labelFont.WriteLine "Промежуток с отклонением (2 мм)", 5, 10
11dataFont.WriteLine "Промежуток с отклонением (5 мм)", 5, 15
  

Результат:
Промежуток слов

property Scaling: Double; - свойство, отвечающее за горизонтальное масштабирование букв используемого шрифта. Устанавливается в процентах. Горизонтальный масштаб по умолчанию - 100%.

Пример
Пример:
01set page = CreatePage(Null)
02page.DrawGrid
03set font = page.createFont("Arial", 14, False, False)
04set labelFont = page.createFont("Arial", 14, False, False)
05set dataFont = page.createFont("Arial", 14, False, False)
06font.Scaling = 50
07labelFont.Scaling = 100
08dataFont.Scaling = 200
09font.WriteLine "Сжатие (50)", 5, 5
10labelFont.WriteLine "По умолчанию (100)", 5, 10
11dataFont.WriteLine "Растягивание (150)", 5, 15
  

Результат:
Scaling

property RenderingMode: TPDFFontRenderingMode; - свойство, отвечающее за заливку букв используемого шрифта.
Типы заливки:
Значение параметра:Отображение:Описание:
0 Font Fill Сплошная заливка (по умолчанию). Буква заливается сплошным цветом,
объявленным на данный момент.
1 Font Stroke Только граница. Прорисовывается граница буквы. Тело остается незалитым.
2 Font FillStroke Сначала заливка, потом граница. Граница прорисовывается всегда черным цветом.
Заливка осуществляется сплошным цветом, объявленным на данный момент.
3 Inv Невидимый шрифт.

Пример
Пример:
01set page = CreatePage(Null)
02set font = page.createFont("Arial", 20, False, False)
03set labelFont = page.createFont("Arial", 20, False, False)
04set dataFont = page.createFont("Arial", 20, False, False)
05font.RenderingMode = 0
06labelFont.RenderingMode = 1
07dataFont.RenderingMode = 2
08page.setColor 255, 0, 0
09Q = font.WriteText ("Олимпиада", 5, 5, 50, 0)
10Q = labelFont.WriteText ("Олимпиада", 5, 15, 50, 0)
11Q = dataFont.WriteText ("Олимпиада", 5, 25, 50, 0)
  

Результат:
Заливка букв

property Rise: Double; - свойство, отвечающее за перемещение текста по вертикали.

Пример
01set page = CreatePage(Null)
02page.DrawGrid
03set font = page.createFont("Arial", 20, False, False)
04set labelFont = page.createFont("Arial", 7, False, False)
05set dataFont = page.createFont("Arial", 7, False, False)
06labelFont.rise = -17
07dataFont.rise = -2
08Q = font.WriteText ("Олимпиада", 5, 5, 50, 0)
09Q = labelFont.WriteText ("Олимпиада", 44, 5, 50, 0)
10Q = dataFont.WriteText ("Олимпиада", 44, 5, 50, 0)
  

Результат:
Rise

Для определения размеров текстовой строки используется процедура MeasureLine(const LineText: WideString; out Width: OleVariant; out Height: OleVariant);

Здесь:

  • LineText - исходный текст для размещения на странице
  • Width - возвращаемый параметр ширины текстового блока на странице
  • Height - возвращаемый параметр высоты текстового блока на странице
Пример
1S = "шифр"
2font.MeasureLine S, W, H
3Q = font.WriteText(S, 139, 244 + ((23 - H) / 2), 40, 2)
  


Здесь для текста "Шифр" замеряется ширина и высота получившегося текстового блока. Затем полученные данные используются для корректного размещения текста на странице.

Для определения высоты текстового блока используется функция MeasureText(const AText: WideString; Width: Double): Double; safecall;

Функция распределит текст по задаваемому значению ширины текстового блока и вернет значение высоты текстового блока в милиметрах.

Здесь:

  • AText - исходный текст для размещения на странице. Прописывается в кавычках.
  • Width - задаваемая ширина текстового блока на странице в милиметрах.
Пример
1S = "Текст для размещения на странице..."
2Q = font.MeasureText(S, 139)
  
Здесь для текста "Текст для размещения на странице..." замеряется высота получившегося текстового блока. Затем полученные данные могут использоваться для корректного размещения текста на странице.

5.7.6.1.3. Порядок создания

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

Конструктор
  1. Объявляем все переменные.
  2. Создаем страницы
  3. Устанавливаем все свойства документа и страниц
  4. Рисуем простые графические объекты
  5. Объявляем все используемые шрифты
  6. Расставляем постоянный текст на странице
  7. Расставляем переменный текст на странице
  8. Вставляем или создаем сложные графические объекты
Пример
Пример документа PDF:
001set LDataSet = createDataSet("TRoundAbiturSt")
002'Объявление переменных
003LDataSet.AddQueryItem 1, "ID", ID
004LDataSet.AddQueryItem 0, "RoundComp$N"
005LDataSet.AddQueryItem 0, "BachRound$N"
006LDataSet.AddQueryItem 0, "LastName"
007LDataSet.AddQueryItem 0, "FirstName"
008LDataSet.AddQueryItem 0, "MiddleName"
009LDataSet.AddQueryItem 0, "BirthDate"
010LDataSet.AddQueryItem 0, "RegNumber"
011LDataSet.AddQueryItem 0, "SecondStageCity$D"
012LDataSet.AddQueryItem 0, "PhoneList"
013
014'Присваивание переменным значений
015OlympName = LDataSet.Field("RoundComp$N")
016OlympClass = LDataSet.Field("BachRound$N")
017LastName = LDataSet.Field("LastName")
018FirstName = LDataSet.Field("FirstName")
019MiddleName = LDataSet.Field("MiddleName")
020if not IsNull(LDataSet.Field("BirthDate")) then
021  BirthDate = LDataSet.Field("BirthDate")
022else
023  BirthDate = "(не задана)"
024end if
025RegNo = LDataSet.Field("RegNumber")
026if not IsNull(LDataSet.Field("SecondStageCity$D")) then
027  OlympCity = LDataSet.Field("SecondStageCity$D")
028else
029  OlympCity = "(не выбран город участия)"
030end if
031if not IsNull(LDataSet.Field("PhoneList")) then
032  Phone = LDataSet.Field("PhoneList")
033else
034  Phone = ""
035end if
036
037'CanCompress = False - признак сжатия файла
038set page = CreatePage(Null) ' создаем страницу
039'Объявляем используемые шрифты
040set font = page.createFont("Arial", 20, False, False)
041set labelFont = page.createFont("Arial", 16, False, False)
042set dataFont = page.createFont("Arial", 18, True, False)
043set bigFont = page.createFont("Arial", 24, False, False)
044
045'page.DrawGrid  - рисуем сетку для удобства отладки
046
047page.LineWidth = 0.5 ' Установка толщины линии
048
049' Рисуем прямоугольники
050page.Rectangle 8, 12, 4, 4, True
051page.Rectangle 190, 12, 4, 4, True
052
053page.Rectangle 8, 273, 4, 4, True
054page.Rectangle 105, 273, 4, 4, True
055page.Rectangle 190, 273, 4, 4, True
056
057'Выводим постоянный и переменный текст
058Q = font.WriteText ("Межрегиональная олимпиада школьников", 12, 20, 178, 2)
059Q = bigFont.WriteText (OlympName, 12, 45, 178, 2)
060Q = bigFont.WriteText (OlympClass, 12, 56, 178, 2)
061
062Q = font.WriteText ("Титульный лист", 12, 72, 178, 2)
063
064labelFont.WriteLine "Фамилия", 25, 115 - 23
065labelFont.WriteLine "Имя", 25, 123 - 23
066labelFont.WriteLine "Отчество", 25, 131 - 23
067labelFont.WriteLine "Дата", 25, 139 - 23
068labelFont.WriteLine "рождения", 25, 145 - 23
069
070labelFont.WriteLine "Регистрационный номер", 25, 169 - 30
071labelFont.WriteLine "Город проведения", 25, 177 - 30
072labelFont.WriteLine "Аудитория", 25, 185 - 30
073
074
075labelFont.WriteLine "Дата", 25, 211
076labelFont.WriteLine "Подпись", 25, 219
077labelFont.WriteLine "Телефон", 25, 227
078
079
080dataFont.WriteLine LastName, 63, 114 - 23
081dataFont.WriteLine FirstName, 63, 122 - 23
082dataFont.WriteLine MiddleName, 63, 130 - 23
083dataFont.WriteLine BirthDate, 63, 141 - 23
084
085dataFont.WriteLine RegNo, 100, 168 - 30
086dataFont.WriteLine OlympCity, 100, 176 - 30
087
088' Рисуем линии
089page.line 100, 192 - 30, 150, 192 - 30
090page.line 58, 218, 108, 218
091page.line 58, 226, 108, 226
092Q = dataFont.WriteText(Phone, 58, 226, 65, 0)
093
094
095
096' Устанавливаем новый цвет
097page.setColor 192, 192, 192
098
099S = "шифр"
100font.MeasureLine S, W, H  ' измеряем текстовый блок
101Q = font.WriteText(S, 139, 244 + ((23 - H) / 2), 40, 2) ' располагаем текстовый
102блок на странице
103
104' Устанавливаем новый цвет
105page.setColor 255, 0, 0
106' Устанавливаем толщину линий в 1 пиксель
107page.LineWidth = 0
108' Рисуем линии по координатам
109X = 139
110Y = 267
111
112page.line X, Y - 3, X, Y + 3
113page.line X - 3, Y, X + 3, Y
114
115X = X + 40
116page.line X, Y - 3, X, Y + 3
117page.line X - 3, Y, X + 3, Y
118
119
120Y = Y - 23
121page.line X, Y - 3, X, Y + 3
122page.line X - 3, Y, X + 3, Y
123
124X = X - 40
125page.line X, Y - 3, X, Y + 3
page.line X - 3, Y, X + 3, Y

Результат:

Титул

5.7.6.2. Справочник по интерфейсам

5.7.6.2.1. Перечисление TPDFFontRenderingMode
1type
2  TPDFFontRenderingMode = (frmFillText, frmStrokeText, frmFillThenStrokeText, 
3    frmInvisible);

Или

1type
2  TPDFFontRenderingMode = TOleEnum;
3const
4  frmFillText = $00000000;
5  frmStrokeText = $00000001;
6  frmFillThenStrokeText = $00000002;
7  frmInvisible = $00000003;

Элементы перечисления:

Имя Значение Назначение
frmFillText 0

frmStrokeText 1

frmFillThenStrokeText 2

frmInvisible 3


5.7.6.2.2. Перечисление TPDFLineCap
1type
2  TPDFLineCap = (lcBuss, lcRound, lcProtecting);

Или

1type
2  TPDFLineCap = TOleEnum;
3const
4  lcBuss = $00000000;
5  lcRound = $00000001;
6  lcProtecting = $00000002;

Элементы перечисления:

Имя Значение Назначение
lcBuss 0

lcRound 1

lcProtecting 2


5.7.6.2.3. Перечисление TPDFLineJoin
1type
2  TPDFLineJoin = (ljMiter, ljRound, ljBevel);

Или

1type
2  TPDFLineJoin = TOleEnum;
3const
4  ljMiter = $00000000;
5  ljRound = $00000001;
6  ljBevel = $00000002;

Элементы перечисления:

Имя Значение Назначение
ljMiter 0

ljRound 1

ljBevel 2


5.7.6.2.4. Перечисление TPDFTextAlignment
1type
2  TPDFTextAlignment = (ptaLeft, ptaRight, ptaCenter, ptaJustified);

Или

1type
2  TPDFTextAlignment = TOleEnum;
3const
4  ptaLeft = $00000000;
5  ptaRight = $00000001;
6  ptaCenter = $00000002;
7  ptaJustified = $00000003;

Элементы перечисления:

Имя Значение Назначение
ptaLeft 0

ptaRight 1

ptaCenter 2

ptaJustified 3


5.7.6.2.5. Интерфейс IPDFDocument

Диаграмма

01type
02  IPDFDocument = interface(IDispatch)
03    ['{E57FFE9D-6B85-45E6-A5D0-9DD17950A666}']
04    procedure Save(Target: OleVariant); safecall;
05    function CreatePage(Parent: OleVariant): IPDFPage; safecall;
06    function Get_Title: WideString; safecall;
07    procedure Set_Title(Value: WideString); safecall;
08    function Get_CanEmbedFonts: WordBool; safecall;
09    procedure Set_CanEmbedFonts(Value: WordBool); safecall;
10    function Get_CanCompress: WordBool; safecall;
11    procedure Set_CanCompress(Value: WordBool); safecall;
12    function Get_Author: WideString; safecall;
13    procedure Set_Author(Value: WideString); safecall;
14    function Get_Subject: WideString; safecall;
15    procedure Set_Subject(Value: WideString); safecall;
16    function Get_Keywords: WideString; safecall;
17    procedure Set_Keywords(Value: WideString); safecall;
18    function Get_Creator: WideString; safecall;
19    procedure Set_Creator(Value: WideString); safecall;
20    function Get_Pages(Index: Integer): IPDFPage; safecall;
21    function Get_PageCount: Integer; safecall;
22    procedure Close; safecall;
23    procedure Serialize(const Stream: IUnknown); safecall;
24    function Get_MinCompressSize: Integer; safecall;
25    procedure Set_MinCompressSize(Value: Integer); safecall;
26    function Get_MaxCompressSize: Integer; safecall;
27    procedure Set_MaxCompressSize(Value: Integer); safecall;
28    function CreatePageFromImage(Image: OleVariant; PageWidth: Double; 
29      PageHeight: Double; Margin: Double): WordBool; safecall;
30    procedure SaveToXML(Target: OleVariant); safecall;
31    property Title: WideString read Get_Title write Set_Title;
32    property CanEmbedFonts: WordBool read Get_CanEmbedFonts write Set_CanEmbedFonts;
33    property CanCompress: WordBool read Get_CanCompress write Set_CanCompress;
34    property Author: WideString read Get_Author write Set_Author;
35    property Subject: WideString read Get_Subject write Set_Subject;
36    property Keywords: WideString read Get_Keywords write Set_Keywords;
37    property Creator: WideString read Get_Creator write Set_Creator;
38    property Pages[Index: Integer]: IPDFPage read Get_Pages;
39    property PageCount: Integer read Get_PageCount;
40    property MinCompressSize: Integer read Get_MinCompressSize 
41      write Set_MinCompressSize;
42    property MaxCompressSize: Integer read Get_MaxCompressSize 
43      write Set_MaxCompressSize;
44  end;

5.7.6.2.5.1. Свойства

Свойства интерфейса IPDFDocument:

Имя Тип Доступ Назначение
Author WideString Чтение/Запись

CanCompress WordBool Чтение/Запись

CanEmbedFonts WordBool Чтение/Запись

Creator WideString Чтение/Запись

Keywords WideString Чтение/Запись

MaxCompressSize Integer Чтение/Запись

MinCompressSize Integer Чтение/Запись

PageCount Integer Только для чтения

Pages[Index: Integer]IPDFPage Только для чтения

Subject WideString Чтение/Запись

Title WideString Чтение/Запись


5.7.6.2.5.2. Метод Close

Метод интерфейса IPDFDocument.

procedure IPDFDocument.Close;

Метод не имеет параметров.


5.7.6.2.5.3. Метод CreatePage

Метод интерфейса IPDFDocument.

function IPDFDocument.CreatePage(Parent: OleVariant): IPDFPage;

Параметры:

Имя Тип Обязательно Значение
Parent OleVariant Да

Замечания:

Возвращает значение типа IPDFPage.


5.7.6.2.5.4. Метод CreatePageFromImage

Метод интерфейса IPDFDocument.

1function IPDFDocument.CreatePageFromImage(Image: OleVariant; PageWidth: Double; 
2  PageHeight: Double; Margin: Double): WordBool;

Параметры:

Имя Тип Обязательно Значение
Image OleVariant Да

PageWidth Double Да

PageHeight Double Да

Margin Double Да

Замечания:

Возвращает значение типа WordBool.


5.7.6.2.5.5. Метод Save

Метод интерфейса IPDFDocument.

procedure IPDFDocument.Save(Target: OleVariant);

Параметры:

Имя Тип Обязательно Значение
Target OleVariant Да


5.7.6.2.5.6. Метод SaveToXML

Метод интерфейса IPDFDocument.

procedure IPDFDocument.SaveToXML(Target: OleVariant);

Параметры:

Имя Тип Обязательно Значение
Target OleVariant Да


5.7.6.2.5.7. Метод Serialize

Метод интерфейса IPDFDocument.

procedure IPDFDocument.Serialize(const Stream: IUnknown);

Параметры:

Имя Тип Обязательно Значение
Stream IUnknown Да


5.7.6.2.6. Интерфейс IPDFFont

Диаграмма

01type
02  IPDFFont = interface(IDispatch)
03    ['{43FE399A-A724-4076-BAFA-098639628385}']
04    function Get_Spacing: Double; safecall;
05    procedure Set_Spacing(Value: Double); safecall;
06    function Get_WordSpacing: Double; safecall;
07    procedure Set_WordSpacing(Value: Double); safecall;
08    function Get_Scaling: Double; safecall;
09    procedure Set_Scaling(Value: Double); safecall;
10    function Get_RenderingMode: TPDFFontRenderingMode; safecall;
11    procedure Set_RenderingMode(Value: TPDFFontRenderingMode); safecall;
12    function Get_Rise: Double; safecall;
13    procedure Set_Rise(Value: Double); safecall;
14    procedure WriteLine(const LineText: WideString; X: Double; Y: Double); safecall;
15    procedure MeasureLine(const LineText: WideString; out Width: OleVariant; 
16      out Height: OleVariant); safecall;
17    function WriteText(const AText: WideString; X: Double; Y: Double; 
18      Width: Double; Alignment: TPDFTextAlignment): Double; safecall;
19    function MeasureText(const AText: WideString; Width: Double): Double; safecall;
20    function Get_Angle: Double; safecall;
21    procedure Set_Angle(Value: Double); safecall;
22    function Get_LineSpacing: Double; safecall;
23    procedure Set_LineSpacing(Value: Double); safecall;
24    property Spacing: Double read Get_Spacing write Set_Spacing;
25    property WordSpacing: Double read Get_WordSpacing write Set_WordSpacing;
26    property Scaling: Double read Get_Scaling write Set_Scaling;
27    property RenderingMode: TPDFFontRenderingMode read Get_RenderingMode 
28      write Set_RenderingMode;
29    property Rise: Double read Get_Rise write Set_Rise;
30    property Angle: Double read Get_Angle write Set_Angle;
31    property LineSpacing: Double read Get_LineSpacing write Set_LineSpacing;
32  end;

5.7.6.2.6.1. Свойства

Свойства интерфейса IPDFFont:

Имя Тип Доступ Назначение
Angle Double Чтение/Запись

LineSpacing Double Чтение/Запись

RenderingModeTPDFFontRenderingMode Чтение/Запись

Rise Double Чтение/Запись

Scaling Double Чтение/Запись

Spacing Double Чтение/Запись

WordSpacing Double Чтение/Запись


5.7.6.2.6.2. Метод MeasureLine

Метод интерфейса IPDFFont.

1procedure IPDFFont.MeasureLine(const LineText: WideString; 
2  out Width: OleVariant; out Height: OleVariant);

Параметры:

Имя Тип Обязательно Значение
LineText WideString Да

Width OleVariant Да

Height OleVariant Да


5.7.6.2.6.3. Метод MeasureText

Метод интерфейса IPDFFont.

function IPDFFont.MeasureText(const AText: WideString; Width: Double): Double;

Параметры:

Имя Тип Обязательно Значение
AText WideString Да

Width Double Да

Замечания:

Возвращает значение типа Double.


5.7.6.2.6.4. Метод WriteLine

Метод интерфейса IPDFFont.

procedure IPDFFont.WriteLine(const LineText: WideString; X: Double; Y: Double);

Параметры:

Имя Тип Обязательно Значение
LineText WideString Да

X Double Да

Y Double Да


5.7.6.2.6.5. Метод WriteText

Метод интерфейса IPDFFont.

1function IPDFFont.WriteText(const AText: WideString; X: Double; Y: Double; 
2  Width: Double; Alignment: TPDFTextAlignment): Double;

Параметры:

Имя Тип Обязательно Значение
AText WideString Да

X Double Да

Y Double Да

Width Double Да

AlignmentTPDFTextAlignment Да

Замечания:

Возвращает значение типа Double.


5.7.6.2.7. Интерфейс IPDFPage

Диаграмма

01type
02  IPDFPage = interface(IDispatch)
03    ['{749FB131-80FE-46E9-8330-22C1DC346FE7}']
04    function Get_Parent: IPDFPage; safecall;
05    function Get_Title: WideString; safecall;
06    procedure Set_Title(Value: WideString); safecall;
07    function Get_Width: Double; safecall;
08    procedure Set_Width(Value: Double); safecall;
09    function Get_Height: Double; safecall;
10    procedure Set_Height(Value: Double); safecall;
11    function CreateFont(const FontName: WideString; Size: Double; Bold: WordBool; 
12      Italic: WordBool): IPDFFont; safecall;
13    procedure Perform(const Command: WideString); safecall;
14    function Get_LineWidth: Double; safecall;
15    procedure Set_LineWidth(Value: Double); safecall;
16    procedure Line(X1: Double; Y1: Double; X2: Double; Y2: Double); safecall;
17    procedure Rectangle(X1: Double; Y1: Double; Width: Double; Height: Double; 
18      Fill: WordBool); safecall;
19    function Get_LineCap: TPDFLineCap; safecall;
20    procedure Set_LineCap(Value: TPDFLineCap); safecall;
21    function Get_LineJoin: TPDFLineJoin; safecall;
22    procedure Set_LineJoin(Value: TPDFLineJoin); safecall;
23    procedure SetDash(DashArray: OleVariant; Phase: Integer); safecall;
24    procedure SetColor(R: Integer; G: Integer; B: Integer); safecall;
25    procedure PerformColor(const Command: WideString); safecall;
26    procedure Poly(Points: OleVariant; Fill: WordBool); safecall;
27    procedure Image(Image: OleVariant; X: Double; Y: Double; Width: Double; 
28      Height: Double; Transparent: WordBool); safecall;
29    procedure DrawGrid; safecall;
30    procedure Arc(X: Double; Y: Double; Radius: Double; StartAngle: Double; 
31      EndAngle: Double; FillSegment: WordBool; FillSector: WordBool); safecall;
32    procedure Curve(Points: OleVariant; Fill: WordBool); safecall;
33    procedure HyperLink(const URI: WideString; X: Double; Y: Double; Width: Double; 
34      Height: Double); safecall;
35    procedure Pattern(X1: Double; Y1: Double; Width: Double; Height: Double; 
36      PatternPointSize: Double; Percentage: Integer); safecall;
37    procedure Bezier(Points: OleVariant; Fill: WordBool); safecall;
38    procedure XObject(Data: OleVariant); safecall;
39    procedure SetColorCMYK(C: Double; M: Double; Y: Double; K: Double); safecall;
40    procedure LocalLink(const Page: IDispatch; DestinationX: Double; 
41      DestinationY: Double; DestinationWidth: Double; DestinationHeight: Double; 
42      X: Double; Y: Double; Width: Double; Height: Double); safecall;
43    property Parent: IPDFPage read Get_Parent;
44    property Title: WideString read Get_Title write Set_Title;
45    property Width: Double read Get_Width write Set_Width;
46    property Height: Double read Get_Height write Set_Height;
47    property LineWidth: Double read Get_LineWidth write Set_LineWidth;
48    property LineCap: TPDFLineCap read Get_LineCap write Set_LineCap;
49    property LineJoin: TPDFLineJoin read Get_LineJoin write Set_LineJoin;
50  end;

5.7.6.2.7.1. Свойства

Свойства интерфейса IPDFPage:

Имя Тип Доступ Назначение
Height Double Чтение/Запись

LineCapTPDFLineCap Чтение/Запись

LineJoinTPDFLineJoin Чтение/Запись

LineWidth Double Чтение/Запись

ParentIPDFPage Только для чтения

Title WideString Чтение/Запись

Width Double Чтение/Запись


5.7.6.2.7.2. Метод Arc

Метод интерфейса IPDFPage.

1procedure IPDFPage.Arc(X: Double; Y: Double; Radius: Double; 
2  StartAngle: Double; EndAngle: Double; FillSegment: WordBool; 
3  FillSector: WordBool);

Параметры:

Имя Тип Обязательно Значение
X Double Да

Y Double Да

Radius Double Да

StartAngle Double Да

EndAngle Double Да

FillSegment WordBool Да

FillSector WordBool Да


5.7.6.2.7.3. Метод Bezier

Метод интерфейса IPDFPage.

procedure IPDFPage.Bezier(Points: OleVariant; Fill: WordBool);

Параметры:

Имя Тип Обязательно Значение
Points OleVariant Да

Fill WordBool Да


5.7.6.2.7.4. Метод CreateFont

Метод интерфейса IPDFPage.

1function IPDFPage.CreateFont(const FontName: WideString; Size: Double; 
2  Bold: WordBool; Italic: WordBool): IPDFFont;

Параметры:

Имя Тип Обязательно Значение
FontName WideString Да

Size Double Да

Bold WordBool Да

Italic WordBool Да

Замечания:

Возвращает значение типа IPDFFont.


5.7.6.2.7.5. Метод Curve

Метод интерфейса IPDFPage.

procedure IPDFPage.Curve(Points: OleVariant; Fill: WordBool);

Параметры:

Имя Тип Обязательно Значение
Points OleVariant Да

Fill WordBool Да


5.7.6.2.7.6. Метод DrawGrid

Метод интерфейса IPDFPage.

procedure IPDFPage.DrawGrid;

Метод не имеет параметров.


5.7.6.2.7.7. Метод HyperLink

Метод интерфейса IPDFPage.

1procedure IPDFPage.HyperLink(const URI: WideString; X: Double; Y: Double; 
2  Width: Double; Height: Double);

Параметры:

Имя Тип Обязательно Значение
URI WideString Да

X Double Да

Y Double Да

Width Double Да

Height Double Да


5.7.6.2.7.8. Метод Image

Метод интерфейса IPDFPage.

1procedure IPDFPage.Image(Image: OleVariant; X: Double; Y: Double; 
2  Width: Double; Height: Double; Transparent: WordBool);

Параметры:

Имя Тип Обязательно Значение
Image OleVariant Да

X Double Да

Y Double Да

Width Double Да

Height Double Да

Transparent WordBool Нет


5.7.6.2.7.9. Метод Line

Метод интерфейса IPDFPage.

procedure IPDFPage.Line(X1: Double; Y1: Double; X2: Double; Y2: Double);

Параметры:

Имя Тип Обязательно Значение
X1 Double Да

Y1 Double Да

X2 Double Да

Y2 Double Да


5.7.6.2.7.10. Метод LocalLink

Метод интерфейса IPDFPage.

1procedure IPDFPage.LocalLink(const Page: IDispatch; DestinationX: Double; 
2  DestinationY: Double; DestinationWidth: Double; DestinationHeight: Double; 
3  X: Double; Y: Double; Width: Double; Height: Double);

Параметры:

Имя Тип Обязательно Значение
Page IDispatch Да

DestinationX Double Да

DestinationY Double Да

DestinationWidth Double Да

DestinationHeight Double Да

X Double Да

Y Double Да

Width Double Да

Height Double Да


5.7.6.2.7.11. Метод Pattern

Метод интерфейса IPDFPage.

1procedure IPDFPage.Pattern(X1: Double; Y1: Double; Width: Double; 
2  Height: Double; PatternPointSize: Double; Percentage: Integer);

Параметры:

Имя Тип Обязательно Значение
X1 Double Да

Y1 Double Да

Width Double Да

Height Double Да

PatternPointSize Double Да

Percentage Integer Да


5.7.6.2.7.12. Метод Perform

Метод интерфейса IPDFPage.

procedure IPDFPage.Perform(const Command: WideString);

Параметры:

Имя Тип Обязательно Значение
Command WideString Да


5.7.6.2.7.13. Метод PerformColor

Метод интерфейса IPDFPage.

procedure IPDFPage.PerformColor(const Command: WideString);

Параметры:

Имя Тип Обязательно Значение
Command WideString Да


5.7.6.2.7.14. Метод Poly

Метод интерфейса IPDFPage.

procedure IPDFPage.Poly(Points: OleVariant; Fill: WordBool);

Параметры:

Имя Тип Обязательно Значение
Points OleVariant Да

Fill WordBool Да


5.7.6.2.7.15. Метод Rectangle

Метод интерфейса IPDFPage.

1procedure IPDFPage.Rectangle(X1: Double; Y1: Double; Width: Double; 
2  Height: Double; Fill: WordBool);

Параметры:

Имя Тип Обязательно Значение
X1 Double Да

Y1 Double Да

Width Double Да

Height Double Да

Fill WordBool Да


5.7.6.2.7.16. Метод SetColor

Метод интерфейса IPDFPage.

procedure IPDFPage.SetColor(R: Integer; G: Integer; B: Integer);

Параметры:

Имя Тип Обязательно Значение
R Integer Да

G Integer Да

B Integer Да


5.7.6.2.7.17. Метод SetColorCMYK

Метод интерфейса IPDFPage.

procedure IPDFPage.SetColorCMYK(C: Double; M: Double; Y: Double; K: Double);

Параметры:

Имя Тип Обязательно Значение
C Double Да

M Double Да

Y Double Да

K Double Да


5.7.6.2.7.18. Метод SetDash

Метод интерфейса IPDFPage.

procedure IPDFPage.SetDash(DashArray: OleVariant; Phase: Integer);

Параметры:

Имя Тип Обязательно Значение
DashArray OleVariant Да

Phase Integer Да


5.7.6.2.7.19. Метод XObject

Метод интерфейса IPDFPage.

procedure IPDFPage.XObject(Data: OleVariant);

Параметры:

Имя Тип Обязательно Значение
Data OleVariant Да


5.7.7. Поставка решений

5.8. Интеграция

Интеграция - комплекс работ по настройке механизмов взаимодействия между различными учетными системами, которые функционируют независимо друг от друга в одной организационной структуре ("лоскутная" автоматизация).

Концептуально реализация интеграции может быть осуществлена двумя способами (рассмотрены более подробно далее):

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

Практически, реализация интеграции может быть осуществлена слежующими способами:

Пути интеграции


5.8.1. Интеграция данных

В свою очередь интеграцию данных можно разделить на два типа:


5.8.1.1. Репликативная интеграция

Репликативная интеграция - передающая сторона формирует реплику, передает ее принимающей стороне, которая в свою очередь загружает в себя реплику. В этом случае стандартами формата реплики являются двоичный формат и  XML-схема. Платформа Мельница Данных имеет готовые механизмы для реализации обоих форматов. 

Варианты реализации репликационной интеграции:

1. Данные должны быть переданы из сторонней учетной системы и загружены в Платформу Мельница данных:

УС-МД Реплика

В Платформе уже реализованы механизмы загрузки реплик в двоичном (бинарном) формате, а также в формате XML-схемы. В случае, если разработчики или сопровождающие сотрудники сторонней учетной системы имеют возможность выгрузки реплики в данных форматах, взаимодействие производится стандартными средствами Платформы. В противном случае создается конвертер для перевода данных реплики в один из стандартных форматов для дальнейшей загрузки реплики в Мельницу Данных.

2. Данные должны быть переданы из Платформы Мельница Данных и загружены в стороннюю учетную систему:

МД-УС Репликация

При необходимости выгрузки данных из Платформы Мельница Данных используются стандартные механизмы выгрузки реплики в двоичном (бинарном) формате или в формате XML-схемы. В случае, если эти варианты не являются приемлемыми для принимающей стороны (сторонней учетной системы), можно выполнить выгрузку данных через скриптлет, Microsoft Excel-файл, отчет или любыми механизмами просто выгрузить требуемый файл для дальнейшей обработки (загрузки) принимающей стороной. В этом случае необходимо четкое согласование протоколов и форматов обмена данными.

3. Данные должны быть переданы из одной сторонней учетной системы в другую. При этом Платформа Мельница Данных выступает в качестве интеграционной платформы:

МД - интеграционное ядро

Если Платформа выступает в качестве интеграционного ядра, в ней необходимо объявить структуры для хранения тех элементов данных, которые в Платформе по умолчанию не хранятся, но загружаются в нее из сторонних учетных систем и в дальнейшем подлежат какому-либо анализу. При этом нет необходимости обеспечивать функционирование бизнес-процессов над этими данными в рамках Платформы, данные просто хранятся.

Подобная интеграция осуществляется простыми готовыми средствами платформы в самые сжатые сроки.


5.8.1.2. On-Line доступ

Второй путь интеграции данных - Интеграция с использованием доступа к данным в режиме On-Line.

1. В том случае когда Платформа является серверной стороной, то есть стороной-поставщиком данных для других систем, возможны следующие варианты предоставления данных:

OnLine

- СУБД, то есть база данных, которая хранит все данные Платформы. На данный момент поддерживаются Oracle, Firebird, MS SQL. Возможна реализация поддержки и других систем управления базами данных. Для указанных баз данных доступны стандартные протоколы доступа, с помощью которых осуществляются запросы к данным Платформы непосредственно. Запросы формируются при помощи стандартизированного языка запросов Structured Query Language (SQL).  

- RESTful-сервис используется для реализации более сложной механики предоставления доступа к данным и входит в состав поставки сервера приложений Платформы. С его помощью, в частности, осуществляется удаленный доступ и доступ к данным через SOAP (Simple Object Access Protocol — простой протокол доступа к объектам) с автоматическим формированием по данным Платформы WSDL-документа, описывающего сервисы. Таким образом реализуется продвинутый функционал по отбору объекта по критериям, а также в части доступа ко всем данным Платформы по протоколу SOAP/

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

Пример

  Практический пример реализации:

Компания "Мельница технологий" в одном из московских ВУЗов осуществяла интеграцию с тестирующей системой по проведению олимпиад. С использованием протокола SOAP в тестирующую систему из Платформы предоставлялась информация о реквизитах олимпиад, которые были выбраны каждым школьником-участником. Был реализован обработчик-"переходник", через который передавалсь информация. 

Для системы LMS (Learning Management System) компании Asteros данные также предоставляются по протоколу SOAP.

2. В случае когда Платформе необходим доступ к данным сторонних систем, используется готовый RESTful-"обработчик". Частными случаями данной ситуции являются взаимодействия Платформы с различными собственными web-приложениями, а также с "Обозревателем данных", работающим через удаленный доступ.

RESTful

Для получения данных в режиме On-Line от сторонних систем используются те же стандартные протоколы. При необходимости создаются "обработчики", которые отображают для конечного пользователя в визуальных формах Платформы данные, полученные из сторонних систем.

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

RESTFUL интеграция


5.8.2. Интеграция функций
Данный тип развития интеграции в свою очередь можно разделить на 2 пути:

5.8.2.1. Взаимные вызовы

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

Доступ к функциям возможен с помощью выполнения хранимых процедур (каждое бизнес-действие, которое производит пользователь, обязательно оформляется в виде хранимой процедуры на уровне СУБД Платформы). Процедуру можно вызывать, получив доступ к СУБД. Аналогично тому, как создаются select-запросы, запросы к данным, можно делать запросы, вызывающие бизнес-функции. Все методы, отчеты, и все, что доступно пользователю, может быть вызвано и через RESTful-сервис. При этом методы будут выполняться, отчеты будут формироваться в виде Excel, Word, PDF, HTML, в соответствии с запросом вызывающей стороны. Данный функционал обеспечивается готовым "обработчиком", входящим в состав поставки Платформы.

С помощью протокола SOAP можно вызывать любой метод любого объекта, получать результаты его выполнения без ограничений. 

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

Пример

 Пример реализации:

В ВУЗе при формировании приказа о зачислении студента в Платформе, также автоматически создается объект "Приказ" в системе документооборота ВУЗа. В дальнейшем, передвижение приказа по маршруту согласования в решении на Платформе аналогично отображается в системе документооборота. 

Если для сторонней системы существуют какие-либо стандартные протоколы, по которым можно вызывать функцию, то средствами Платформы не составляет труда вызов данной функции.


5.8.2.2. Встраивание

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

Существуют разные способы реализации данного пути:

- В open-source системах, как правило, слой доступа к данным вынесен в некий отдельный модуль. Характерный пример - это LMS eFront. Это Open-Source разработка, содержащая в себе большой объем php-кода, с развитым web-интерфейсом, и, в том числе, содержащая модуль доступа к данным. В процессе работы создается база MySQL база достаточно примитивной структуры. В этом случае можно изменить модуль доступа, так, чтобы вместо запросов к MySQL-базе механика делала бы запросы к базе данных Платформы. Тогда исполнение php-кода, его интерпретация происходит в рамках сервера приложений Платформы.

Пример

  Пример реализации:

Так как в базе данных Платформы уже хранятся данные о студентах, преподавателях, курсах и т.д., то при взаимодействии с системой обучения LMS, естественным, удобным и надежным решением является хранение все этих данных в одной базе данных

- В тех случаях, когда решения Платформы сами являются частью какой-либо более общей системы, и должны предоставлять свои функции, то это решается на уровне СУБД. То есть, сгенерированный Платформой прикладной код (код на соответствующем диалекте SQL) может быть интегрирован в код более масштабного хранилища, функционировать там, исполняться там, если в этом есть необходимость.

Пример
 Прикладные системы на базе СУБД Teradata позволяют использовать PL/SQL-код для каких-либо наборов данных, притом, что сама база гораздо имеет продвинутые возможности автоматического контроля версий, хроникальности, аналитики.


5.9. Положения и определения

5.9.1. Работа с типами данных

5.9.1.1. Домены

5.9.2. Язык PascalScript

На языке PascalScript на платформе "Мельница данных" описываются тела методов и выражения. Выражения используются в условиях отбора объектов определенного класса при их отображении в представлениях, а также как встраиваемые выражения, которые могут служить членами класса для чтения свойств.

Здесь и далее зарезервированные слова выделены жирным шрифтом.


5.9.2.1. Структура программного блока тела метода
1  [Описание переменных]
2  begin
3    //Операторы
  end;

Комментарии расположены между символами { и } либо от символов // до конца строки.


5.9.2.2. Описание переменных
1var
2    Имя переменной[, Имя переменной…]: Тип;
3    Имя переменной[, Имя переменной…]: Тип;
4    ...
Имя переменной должно быть идентификатором (последовательность символов a-z, A-Z, 0-9, _). "Тип" может быть одним из следующих:
  • integer - определяет переменные целочисленного типа;
  • string[целое_число] - определяет переменные строкового типа с заданной максимальной длиной; максимальная длина задается в квадратных скобках и обязательна для задания;
  • float - определяет переменные вещественного типа;
  • date - определяет переменные типа "дата";
  • time - определяет переменные типа "время";
  • datetime - определяет переменные типа "дата со временем";
  • boolean - определяет переменные логического типа;
  • blob - определяет переменные типа больших двоичных объектов;
  • Имя класса - определяет переменные-ссылки на экземпляры соответствующих классов;
Пример
1  var
2   I: integer;
3   LSomeObject: TObject;
4   LStart, LStop: datetime;
   LNewName: string[64];

5.9.2.3. Операторы PascalScript

Операторы разделяются точкой с запятой (;). Операторы могут быть одним из следующих:


5.9.2.3.1. Составной оператор
1begin
2  //Другие операторы
end
Операторы, размещенные внутри составного оператора, разделяются точкой с запятой. Никаких ограничений на состав операторов и количество уровней вложенности не накладывается.
Пример
1begin
2  Result := LCurrentValue;
3  Exit;
4end;

5.9.2.3.2. Оператор присваивания
Выражение1 := Выражение2

Присваивает значение выражения Выражение2 выражению Выражение1. Типы Выражения1 и Выражения2 должны быть совместимы (совпадать по классу домена либо оба быть числовыми). Для этого на Выражение1 (стоящее слева от знака равенства, lvalue) накладывается ряд ограничений. Это выражение должно быть:

  • Полем или свойством экземпляра класса
  • Локальной переменной
  • Параметром
  • Зарезервированной переменной Result
Пример
LObject.Name := 'Новое имя';
Пример
Result := 25;
Пример
LStartTime := StrToDateTime('01.01.2006 00:00:30'); 
Пример
01var
02  LObject: TObject;
03  LClass: TClass;
04  I: Integer; 
05  F: Float;
06begin
07  I := F;  //неверно
08  F := I;  //верно
09  LObject := LClass; //верно
10  LClass := LObject; //неверно. Должно быть LClass := (LObject as TClass);
11end;  

5.9.2.3.3. Оператор вызова
ИмяПроцедуры [(Параметр1, Параметр2 ...)]

"ИмяПроцедуры" должно быть:

  • Именем метода класса и вызываться с указанием класса либо экземпляра;
  • Именем метода экземпляра и вызываться с указанием экземпляра;
  • Именем метода своего класса либо предка и вызываться без указания спецификаторов.
Порядок и количество параметров в операторе вызова должны строго совпадать с описанием метода.

Пример
1  //метод класса, указан класс
2  LList := TObjectList.Create(Name, Description, TObjectList, nil, nil, Folder);    
3
4  //метод экземпляра, указан экземпляр. Метод не имеет параметров.
5  LList.Destroy;
6
7  //свой либо унаследованный метод
8  BuildDefaultActions(Name, True); 

5.9.2.3.4. Оператор ветвления
1if Выражение then
2  //Оператор1
3[else
4  //Оператор2]

Выражение должно быть логического типа. В случае если значение Выражения истинно, выполняется Оператор1. Часть else является необязательной и относится к последнему оператору if, не имеющему таковой. В случае ее наличия Оператор2 выполняется, если значение Выражения ложно.

Пример
1if LIndex > 25 then
2  raise 'Индекс слишком большой.';
Пример
1if LMonth = 'январь' then
2  January
3else if LMonth = 'февраль' then
4  February
5else   
6  OtherMonth;  //обратите внимание на точки с запятой.

5.9.2.3.5. Оператор выбора
1case Выражение of
2  Значение1: //Оператор1
3  Значение2: //Оператор2
4  ...
5[else
6  //Оператор ]
end

Заменяет каскад операторов if. Значение Выражения должно быть числового типа. Часть else выполняется в случае, если Выражение не равно ни одному из перечисленных вариантов. Эта часть не является обязательной.

Пример
1сase LIndex of
2  0: ZeroIndex;
3  1,2,3: SmallIndex;
4  4,5,6,7,8,9,10: BigIndex;
5else
6  raise 'Слишком большой или отрицательный индекс.';
7end;

5.9.2.3.6. Цикл с предусловием
1while Выражение do
2  //Оператор

Оператор выполняется до тех пор, пока значение Выражения истинно. Выражение должно быть логического типа. Если при входе в цикл Выражение не истинно, то тело цикла не будет выполнено ни одного раза.

Пример
01while LList.Count > 0 do
02  LList.GetItem(0).Destroy;
03
04while True do
05begin
06  LValue := LValue.NextValue;
07  if LValue.Value > 10 then
08  begin
09    Result := LValue.Value;
10    exit;
11  end;
12end;

5.9.2.3.7. Цикл с постусловием
1repeat
2  //Операторы
3until Выражение

Операторы выполняются до тех пор, пока значение Выражения ложно. Выражение должно быть логического типа. Обратите внимание, что внутри себя оператор может содержать несколько операторов, разделенных точкой с запятой. Тело цикла обязательно будет выполнено хотя бы один раз.

Пример
1repeat
2  Result := Result + 1;
3  LObject := LObject.Parent;
4until LObject = nil;

5.9.2.3.8. Цикл с параметром
1for Параметр := Выражение1 (to|downto) Выражение2 do
2  //Оператор

Параметр цикла обязан быть простой локальной переменной. Функционально цикл с параметром эквивалентен циклам:

  • Для формы to
    1Параметр := Выражение1;
    2while Параметр <= Выражение2 dobegin
    3  Оператор;
    4  Параметр :=  Параметр + 1;
    end;
  • Для формы downto
    1Параметр := Выражение1;
    2while Параметр >= Выражение2 dobegin
    3  Оператор;
    4  Параметр :=  Параметр - 1;
    end;
Если Выражение1 равно Выражению2, тело цикла будет выполнено один раз.

Пример
1for I := LList.Length - 1 downto 0 do
2// если LList.Length = 0, тело цикла ни разу не будет выполнено.
3begin
4  LClass := LList.GetItem(I);
5  LMethod := any(TMethod with (Name = LName) and (Master = LClass));
6  LParamList.Add(any(TMethod with (Name = LName) and (Master = LClass)));
7end;

5.9.2.3.9. Цикл по экземплярам
1for each Параметр of ИмяКласса [with Выражение]
2  [by [-] Выражение [, [-] Выражение]] do
3    //Оператор

Цикл осуществляется по выборке среди экземпляров класса ИмяКласса, для которых истинно Выражение. Если Выражение не задано, то по всем экземплярам. Ссылка на текущий в рамках цикла экземпляр присваивается в локальную переменную Параметр. Выражение должно определяться относительно переменной Параметр. Выраженния, следующие за ключевым словом by, определяют порядок обхода экземпляров. Знак "-" перед выражением (любого типа) определяет обратный порядок обхода.

Пример
1for each LOption of TOption with LOption.Domain.Required do
2    // для каждой настройки, домен которой обязателен
3  LOption.SetDefaultValue;

5.9.2.3.10. Оператор прекращения цикла
break

Происходит немедленный выход из цикла. Выполняется финализация операторов защиты завершения, которыми защищено тело цикла. Допустим только в теле цикла с предусловием, цикла с постусловием, цикла с параметром или цикла по экземплярам.


5.9.2.3.11. Оператор выхода из подпрограммы
exit

Происходит немедленный выход из программного блока. Выполняется финализация операторов защиты завершения.


5.9.2.3.12. Оператор защиты завершения
1try
2  //Операторы1
3finally
4  //Операторы2
end

Выполняются операторы Операторы1, разделенные точкой с запятой. В случае возникновения исключительной ситуации управление сразу передается на Операторы2, и после их выполнения исключение остается активным. Если исключения не произошло, выполняются Операторы2. Если среди Операторов1 встречается оператор exit, то Операторы2 все равно выполняются.

Пример
1//создание временного объекта-списка
2LList := TObjectList.Create(Name, Description, TObjectList, nil, nil, Folder);
3try
4  LList.Add(LValue);
5  Exit;
6finally
7  //гарантированное уничтожение созданного объекта независимо от исключений.
8  LList.Destroy;
9end;

5.9.2.3.13. Оператор обработки исключительных ситуаций
1try
2  //Операторы1
3except
4  //Операторы2
end

Выполняются операторы Операторы1. В случае возникновения исключительной ситуации управление передается на Операторы2. Если исключительных ситуаций не возникло, Операторы2 не выполняются никогда. При передаче управления на Операторы2 исключительная ситуация деактивирована. Для ее повторного возбуждения можно воспользоваться оператором возбуждения исключения без указания текстовой строки сообщения.

Пример
1try
2  LObject.NeverTouch := True;
3  LObject.ExecuteCoolMethod; //если метод выполнен неудачно
4except
5  LObject.NeverTouch := True;  //установить флаг и ничего не сообщать пользователю.
6end;
Пример
1try
2   LObject.ExecuteCoolMethod; //если метод выполнен неудачно
3except
4   LObject.Destroy; //удалить неудачный объект
5   raise;           // продолжить обработку исключения.
6end;

5.9.2.3.14. Оператор возбуждения исключения
raise [Выражение]
Возбуждает исключение, которое, если не было обработано блоком except оператора обработки, дойдет до пользователя. Пользователь увидит сообщение, определяемое Выражением. Выражение должно иметь строковый тип и является обязательным для всех случаев, кроме части except оператора обработки исключений.

5.9.2.3.15. Оператор унаследованного вызова
inherited

Работает только в унаследованном переопределенном методе. Вызывается метод предка с параметрами, заданными в параметрах к моменту вызова. Если программный блок представляет собой тело функции, то в псевдопеременной Result будет результат выполнения метода предка.

Пример
1// в теле конструктора
2Name := 'Object name';
3Description := 'Object description';
4inherited; //вызов предка с параметрами Name и Description,
5           //заданными двумя предыдущими операторами. Ссылка на
6           //созданный объект лежит в
7           //псевдопеременной Result
8Result.Name := 'New name';

5.9.2.4. Выражения и операции

5.9.2.4.1. Состав выражения
Любое выражение имеет тип. Выражения состоят из следующих элементов:
  • Целая числовая константа (0 3 234);
  • Вещественная числовая константа. Дробная часть отделяется от целой точкой (".") (3.14 2.71);
  • Строковая константа. Заключается в апострофы. ('Some string' '10', '01.01.2006' 'now');
  • Логическая константа (True False);
  • Безтиповая (любого типа) константа nil;
  • Зарезервированное слово Self. Обозначает разный объект в зависимости от контекста:
    • В методах класса кроме конструктора - использование запрещено.
    • В методах экземпляра - всегда экземпляр, для которого вызван метод.
    • В конструкторе - до вызова унаследованного метода значение не определено. После вызова - ссылка на сконструированный объект.
    • В выражениях условий отбора - объект, для которого принимается решение о его вхождении в отбор.
  • Квалификатор.
  • Агрегат.

5.9.2.4.2. Квалификатор

Квалификатор обозначает объект, переменную, параметр, свойство, поле, вызов функции. Квалификатор состоит из идентификаторов, разделенных точкой.

Пример
Result
Пример
AName
Пример
Caption
Пример
LObject.Name
Пример
LObject.Parent.Name
Пример
LObject.ChildCount
Пример
LObject.HasAsParent(LOtherObject)

При интерпретации квалификатора используется следующий порядок разбора идентификатора:

  1. Контекстная переменная (для выражений условий отбора доменов)
  2. Локальная переменная
  3. Параметр
  4. Имя элемента перечисления
  5. Имя класса. Вне контекста означает ссылку на соответствующий объект класса TClass
  6. Имя поля
  7. Имя метода
  8. Имя свойства

При интерпретации квалификатора внутри выражения агрегата правила разбора идентификатора изменяются:

  1. Контекстная переменная (для выражений условий отбора доменов)
  2. Имя элемента перечисления
  3. Имя класса. Если это имя агрегируемого класса, то дальнейшие разыменования относятся к агрегируемому объекту
  4. Имя поля
  5. Имя метода
  6. Имя свойства
  7. Локальная переменная
  8. Параметр


5.9.2.4.3. Агрегат

Агрегат определяет агрегированное значение над экземплярами определенного класса, удовлетворяющими условиям агрегации. Агрегаты бывают следующих типов:

  • any - первый попавшийся объект. Результат имеет тип ссылки на объект агрегируемого класса.
    Пример
    1any(TObject with Master = Self.Parent)  
    2//первый попавшийся объект, имеющий значение 
    3//свойства Master равным значению свойства 
    4//Parent текущего (контекстного) объекта.
    
  • count - количество объектов. Результат имеет целочисленный тип.
    Пример
    1count(TObject with Master = Self.Parent) 
    2//количество объектов, имеющих значение свойства 
    3//Master равным значению свойства Parent 
    4//текущего объекта.
    
  • sum - сумма значений свойства, поля или функции объектов. Результат имеет тип суммируемого поля, свойства или функции
    Пример
    1sum(TExam.Mark with Master = LStudent) //сумма 
    2//баллов студента по его испытаниям
    
  • max, min - соответственно максимальное и минимальное значений свойства, поля или функции объектов. Результат имеет тип агрегируемого поля, свойства или функции
    Пример
    1min(TObject.Created) // момент создания первого 
    2//объекта Системы.
    

Внутри выражения агрегата правила разбора идентификатора изменяются на следующие:

  1. Контекстная переменная (для выражений условий отбора доменов)
  2. Имя элемента перечисления
  3. Имя класса. Если это имя агрегируемого класса, то дальнейшие разыменования относятся к агрегируемому объекту
  4. Имя поля
  5. Имя метода
  6. Имя свойства
  7. Локальная переменная
  8. Параметр


5.9.2.4.4. Операции

Операции связывают элементы выражений.

Таблица операций в порядке приоритета:
Левый
операнд
Правый операнд
Целый Вещест-
венный
Дата Время Дата со временем Логи-
ческий
Строковый Объект nil
not
Нет ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещено
* (звездочка)
Целый Целый Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
Вещест-
венный
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
/ (слэш, дробь)
Целый Вещест-
венный
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
Вещест-
венный
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
div
Целый Целый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
and
Целый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
or
Целый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
+ (плюс)
Целый Целый Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
Вещест-
венный
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата Дата Дата со временем Запрещено Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время Время Время Дата со временем Время Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем Дата со временем Дата со временем Запрещено Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Строковый ЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
- (минус)
Целый Целый Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
Вещест-
венный
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата Дата Дата со временем Целый Дата со временем Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время Время Время Дата со временем Время Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем Дата со временем Дата со временем Вещест-
венный
Дата со временем Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
=, <> (равно, не равно)
Целый Логи-
ческий
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
Вещест-
венный
Логи-
ческий
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
Дата ЗапрещеноЗапрещено Логи-
ческий
Запрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещено Логи-
ческий
Время ЗапрещеноЗапрещеноЗапрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
Дата со временем ЗапрещеноЗапрещено Логи-
ческий
Запрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещено Логи-
ческий
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
ЗапрещеноЗапрещено Логи-
ческий
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
Запрещено Логи-
ческий
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
Логи-
ческий
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
<, >, <=, >= (меньше, больше, меньше либо равно, больше либо равно)
Целый Логи-
ческий
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
Логи-
ческий
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата ЗапрещеноЗапрещено Логи-
ческий
Запрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время ЗапрещеноЗапрещеноЗапрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем ЗапрещеноЗапрещено Логи-
ческий
Запрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
ЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
is
Целый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
Запрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
as
Целый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Объект Запрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено


5.9.2.4.4.1. Особенности применения операций
  1. Приоритет сравнений ниже приоритета операций булевой логики. Поэтому выражение
    LObject.Master = LMaster and LObject.Parent = LParent
    будет интерпретироваться следующим образом:
    LObject.Master = (LMaster  and LObject.Parent) = LParent
    и вызовет ошибку компиляции из-за применения операции and к объектам. Необходимо писать:
    (LObject.Master = LMaster) and (LObject.Parent = LParent)
  2. Любое значение (выражение любого типа) сравнивается с безтиповой константой nil:
    1      LObject := any(TObject with Name = 'Some name');
    2      if LObject = nil then
    3         .....
          
  3. Операции "Унарный минус" не существует. Для задания отрицательных констант пользуйтесь конструкцией 0-Значение:
    Result := 0-1;

5.9.2.5. Формальная грамматика
001Goal: MethodBody | Expression;
002
003MethodBody: [ConstantDeclaration] [VariableDeclaration] CompoundStatement ";";
004
005ConstantDeclaration: "const" Ident ":" DomainSpecification ";" 
006  [{Ident ":" DomainSpecification ";"}];
007
008VariableDeclaration: "var" DomainDefinition [{DomainDefinition}];
009
010DomainDefinition: Ident ":" DomainSpecification ";";
011
012DomainSpecification: IntegerDomainDefinition
013  | StringDomainDefinition
014  | FloatDomainDefinition
015  | DateDomainDefinition
016  | TimeDomainDefinition
017  | DateTimeDomainDefinition
018  | BooleanDomainDefinition
019  | BlobDomainDefinition
020  | EnumerationDomainDefinition
021  | Ident;
022
023IntegerDomainDefinition: "integer";
024StringDomainDefinition: "string" "[" Number "]";
025FloatDomainDefinition: "float" ["(" Number ["." Number] ")"];
026DateDomainDefinition: "date";
027TimeDomainDefinition: "time";
028DateTimeDomainDefinition: "datetime";
029BooleanDomainDefinition: "boolean";
030BlobDomainDefinition: "blob" | "clob";
031EnumerationDomainDefinition: "(" Ident {"," Ident} ")";
032
033CompoundStatement: "begin" Statement [{";" Statement}] "end";
034
035Statement:
036  | CompoundStatement
037  | AssignmentStatement
038  | InheritedStatement
039  | CallStatement
040  | IfStatement
041  | CaseStatement
042  | ForStatement
043  | WhileStatement
044  | RepeatStatement
045  | TryFinallyStatement
046  | TryExceptStatement
047  | RaiseStatement
048  | ForEachStatement
049  | ExitStatement;
050
051AssignmentStatement:  Qualifier ":=" Expression;
052
053CallStatement: Qualifier;
054
055InheritedStatement: "inherited";
056
057IfStatement: "if" Expression "then" Statement ["else" Statement];
058
059CaseStatement: "case" Expression "of" {CaseBranch} ["else" Statement ";"] "end";
060
061CaseBranch: CaseLabel [{',' CaseLabel}] ":" Statement ";";
062
063CaseLabel: Number | Ident;
064
065ForStatement: "for" Ident ":=" Expression ("to"|"downto") 
066  Expression "do" Statement;
067
068WhileStatement: "while" Expression "do" Statement;
069
070RepeatStatement: "repeat" Statement [{";" Statement}] "until" Expression;
071
072TryFinallyStatement: "try" Statement [{";" Statement}] "finally" 
073  Statement [{";" Statement}] "end";
074
075TryExceptStatement: "try" Statement [{";" Statement}] "except" 
076  Statement [{";" Statement}] "end";
077
078RaiseStatement: "raise" [Expression];
079
080ForEachStatement: "for" "each" Ident "of" Ident ["with" Expression] 
081  ["by" Expression] "do" Statement;
082
083ExitStatement: "exit";
084
085Expression: ComparedExpression [{RelationOperation Expression}];
086
087ComparedExpression: Addon [{AdditionOperaton ComparedExpression}];
088
089Addon: Factor [{MultiplicativeOperation Addon}];
090
091Factor: "(" Expression ")"
092  | "not" Expression
093  | Number ["." Number]
094  | StringConstant
095  | Qualifier
096  | "nil"
097  | "True"
098  | "False"
099  | "(" Expression "is" Ident ")"
100  | "any" Aggregate
101  | "count" Aggregate
102  | "sum" Aggregate
103  | "max" Aggregate
104  | "min" Aggregate;
105
106Aggregate: "(" Ident ["." Ident] ["with" Expression] ")";
107
108Qualifier: QualifierPart [{"." QualifierPart}];
109
110QualifierPart: Ident ["(" Expression [{", " Expression}] ")"]
111  | "self"
112  | "(" Qualifier "as" Ident ")";
113
114RelationOperation: "<"
115  | ">"
116  | "<="
117  | ">="
118  | "="
119  | "<>";
120
121AdditionOperaton: "+"
122  | "-"
123  | "or";
124
125MultiplicativeOperation: "*"
126  | "/"
127  | "div"
128  | "and";

5.9.2.6. Соглашения

5.9.2.6.1. Соглашения о наименованиях

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

  • Имя класса должно начинаться с латинской буквы 'T'.
    Пример
    Имя Наименование
    TObjectList Список объектов
    TLearnPlan Учебный план
  • Имя поля должно начинаться с латинской буквы 'F'.
    Пример
    Имя Наименование
    FLearnPeriod Период обучения
    FExamMark Оценка за экзамен
  • Имя свойства не имеет префикса.
    Пример
    Имя Наименование
    ExamKind Вид рубежного испытания
    ContactPhone Контактный телефон
    Если членом класса для чтения свойства является поля, то имя свойства должно повторять имя поля без префикса 'F'. Если членом класса для чтения свойства является метод, то имя поля должно повторять имя метода без слова 'Get'.
  • Имя параметра не имеет префикса.
    Пример
    Имя Наименование
    OrderNumber Номер приказа
    ExamDate Дата проведения экзамена
    Параметры, используемые для инициализации значений полей, должны иметь имя, повторяющее имя поля без префикса 'F'. При компиляции тела метода, написанного на языке PascalScript имена параметров и имена свойств будут распознаваться в соответствии с порядком разбора идентификаторов, как это описано здесь и здесь.
  • Имена методов должны представлять собой императивный глагол на английском языке, выражающий смысл того, что метод делает. Имена методов не имеют префикса. Имена методов, используемых для получения значений свойств должны (как члены класса для чтения), должны начинаться со слова Get. Имена методов, используемых для установки значений свойств должны (как члены класса для записи), должны начинаться со слова Set.
    Пример
    Имя Наименование
    CountMarkSumm Вычислить сумму баллов
    GetAge Получить значение возраста
    SetMark Установить значение оценки
  • Имена локальных переменных должны начинаться с латинской буквы 'L'.
    Пример
    LMarkSumm (сумма баллов), LObjectCount (количество объектов).
  • Имена доменов должны начинаться с латинской буквы 'T'. В именах доменов допустимы пробелы. Рекомендуется к имени домена добавлять слово 'domain' (через пробел), а для обязательных доменов 'required domain' (через пробел) тогда, когда необходимо исключить возможность использования этих доменов в текстах на PascalScript. Первым словом в имени домена-ссылки должно быть имя класса домена. Исключением являются имена доменов, соответствующих простым типам данных без дополнительных ограничений. Имена таких доменов могут повторять имена типов языка PascalScript (Integer, Boolean, Float).
    Пример
    Имя Класс домена Наименование
    TPrice domain Вещественный домен Цена
    TWeight required domain Целочисленный домен Вес (обязательный)
    Boolean Логический Логический
    TClassMember required domain Ссылка домен Член класса
  • Имена элементов перечислений должны иметь префикс из двух или трех символов, идентифицирующий соответствующий домен-перечисление. Префикс записывается строчными буквами. Например,
    Пример
    Имя Наименование
    для домена TExamKind (вид испытания)
    ekTest зачет
    ekExam экзамен
    ekDifTest дифференцированный зачет
    для домена TAggregateKind (вид агрегата)
    agCount количество
    agSumm сумма
    agAverage среднее значение
    Настоятельно рекомендуется давать уникальные имена элементов перечислений в пределах всей системы.

5.9.2.6.2. Стилевое оформление исходного кода

Код на языке PascalScript, являющийся частью поставляемого решения, должен быть оформлен в соответствии с изложенными правилами.


5.9.2.6.2.1. Использование строк, пробелов и отступов

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

Пробелы, запрещенные к использованию:

  • До или после точки "."
  • Между именем вызываемого метода и открывающей скобкой "("
  • После открывающей скобки "(" или перед закрывающей ")"
  • Перед точкой с запятой ";"
  • Перед двоеточием ":"
  • Перед запятой ","

Двоеточие для всех объявлений переменных не должно содержать перед собой пробелов и иметь один пробел после перед именем типа.

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

Существует несколько исключений из этого правила. Зарезервированные слова var, begin и end, относящиеся к программному блоку вцелом, всегда должны примыкать к левой границе. Код внутри блока begin..end должен иметь отступ два символа.

Все строки должны быть ограничены 80 столбцами. Строки, длиннее чем 80 столбцов должны быть разделены и перенесены. Все перенесенные строки должны быть выровнены по первой строке и иметь отступ в два символа. Зарезервированное слово begin всегда должно находиться на своей отдельной строке.

Нельзя переносить строки в тех местах, где не допускаются пробелы, например между именем метода и открывающей скобкой. Никогда нельзя помещать зарезервированное слово begin на строку, содержащую другой код.


5.9.2.6.2.2. Оформление объявлений и операторов

Все переменные с их типами должны быть объявлены на различных строках.

Простые операторы содержат одну точку с запятой. Если Вам необходимо разделить оператор, то перенесите продолжение оператора на следующую строку с отступом в два пробела.
Пример
  MyValue :=
    MyValue + (SomeVeryLongStatement / OtherLongStatement);

Составные операторы всегда заканчиваются точкой с запятой.
Пример
1begin
2  MyStatement;
3  MyNext Statement;
4  MyLastStatement;
end;

Каждое присвоение и каждое выражение должно располагаться на разных строках.

Оператор "if"

Оператор if всегда должен располагаться по крайней мере на двух строках
Неправильно
if A < B then DoSomething; 
Правильно
if A < B then
  DoSomething;
В случае составного оператора необходимо поместить каждый оператор на новую строку.
Неправильно
1  if A < B then begin
2    DoSomething;
3    DoSomethingElse;
4  end else begin
5    DoThis;
6    DoThat;
7  end;
Правильно
1  if A < B then
2  begin
3    DoSomething;
4    DoSomethingElse;
5  end
6  else
7  begin
8    DoThis;
9    DoThat;
  end;
Все остальные варианты расположения операторов не рекомендуются и не одобряются, хотя и являются синтаксически правильными.

Оператор "for"

Неправильно
1  for i := 0 to 10 do begin
2    DoSomething;
3    DoSomethingElse;
4  end;
Правильно
1  for i := 0 to 10 do
2  begin
3    DoSomething;
4    DoSomethingElse;
5  end;
6
7  for I := 0 to 10 do
8    DoSomething;

Оператор "while"

Неправильно
1  while x < j  do begin
2    DoSomething;
3    DoSomethingElse;
  end;
Правильно
1  while x < j do
2  begin
3    DoSomething;
4    DoSomethingElse;
5  end;
6
7  while x < j do
8    Something;

Оператор "repeat..until"

Правильно
1  repeat
2    x := j;
3    j := UpdateValue;
4  until j > 25;

Оператор "case"

Несмотря на то, что существует множество синтаксически правильных конструкций, одобренной и рекомендованной считается следующая:
Правильно
01  case LCode of
02    1, 3:
03      begin
04        Incr := FIncrement + 1;
05        FinalIncr := FIncrement div FLineDiv;
06        Count := FLineDiv;
07      end;
08    2, 4:
09      begin
10        Incr := FPageIncrement;
11        FinalIncr := Incr + 1;
12        Incr := Incr div FPageDiv;
13        Count := FPageDiv;
14      end;
15  else
16    begin
17      Count := 0;
18      Incr := 0;
19      FinalIncr := 0;
20    end;
  end;

Оператор "try"

Несмотря на то, что существует множество синтаксически правильных конструкций, одобренной и рекомендованной считается следующая:
Правильно
01try
02  try
03    EnumItems(CurrentThreadID, LDisable, 0);
04    Result := TaskList;
05  except
06    EnableItems(TaskList);
07    raise;
08  end;
09finally
10  TaskList := SaveList;
11  TaskActive := SaveActive;
end; 

5.9.3. Интерфейсы взаимодействия с внешними подсистемами

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


5.9.3.1. Интерфейс IContext
01  IContext = interface(IDispatch)
02    ['{79847D79-A3BE-408F-B59F-662B91BC6350}']
03    function Handle: Integer;
04    function getName(ID: OleVariant): WideString;
05    function getDescription(ID: OleVariant): WideString;
06    function createDataSet(const TargetClassName: WideString):
07      IContextDataSet;
08    function executeMethod(const ClassName: WideString;
09      const MethodName: WideString;
10      Params: OleVariant): OleVariant;
11    function executeReport(const ClassName: WideString;
12      const TemplateName: WideString;
13      Params: OleVariant): IDispatch;
14    function getPropValue(const ClassName: WideString;
15      const PropName: WideString;
16      const ID: OleVariant): OleVariant;
17    procedure setPropValue(const ClassName: WideString;
18      const PropName: WideString;
19      const ID: OleVariant; Value: OleVariant);
20    function select(const ClassName: WideString;
21      QueryItems: OleVariant): IDispatch;
22    function enumerationItem(ItemIdentifier: OleVariant): WideString;
23    function getClass(const ClassName: WideString): WideString;
24    function createGUID: WideString;
25    procedure processStart(const Description: WideString;
26      ItemCount: Integer);
27    procedure processStep;
28    procedure processStop;
29    function PlaceDataSet(const Range: IDispatch;
30      const DataSet: IContextDataSet;
31      ShiftRows: WordBool; ShiftColumns: WordBool): Integer;
32    procedure DebugString(const Message: WideString);
33    procedure ExportObject(var Document: OleVariant; const ID: WideString;
34      const ClassID: WideString);
35    function callRoutine(const ClassName, RoutineName: WideString;
36      var RetValue: OleVariant; const ScriptPart: OleVariant): WordBool;
37    function getOleObject(const ClassID, AccessibleFileName: WideString): IDispatch;
38    function getResource(const Name: WideString): WideString;
39    function getTempFileName(const Extension: WideString): WideString;
40    function selectVaue(const ClassDomain: WideString;
41      const ExpressionContext: IContextExpressionInfo;
42      var Value: OleVariant): WordBool;
43    procedure raiseManagedException(const ExceptionMessage: WideString);
44    function getCRC(Data: OleVariant): WideString;
45    function downloadData(const Host: WideString; const Url: WideString;
46      const UserName: WideString; const Password: WideString;
47      NegotiateAuth: WordBool; PostData: OleVariant;
48      const PostContentType: WideString; PostDataIsBinary: WordBool;
49      CanCache: WordBool; NewSession: WordBool; TimeOut: Integer): OleVariant;
50    function createBinaryData: IDispatch;
51    function BinaryToBitmap(const Data: IDispatch): IDispatch; safecall;
52    function editValues(const ValuesList: WideString; const Title: WideString;
53      UseTabs: WordBool; HideOKButton: WordBool;
54      const ScriptPart: OleVariant): WordBool;
55    function MsgBox(const Prompt: WideString; Buttons: LongWord;
56      const Title: WideString;
57      const HelpFile: WideString; Context: LongWord): Integer;
58    function ShowMsgBox(const Prompt: WideString; Buttons: LongWord;
59      const Title: WideString;
60      const HelpFile: WideString; Context: LongWord): Integer;
61    function buildNamedFile(const Data: IDispatch; const StoredFileName: WideString;
62                            Propmpt: WordBool; Compress: WordBool): IDispatch;
63    procedure parseNamedFile(const NamedFile: IDispatch; out FileName: OleVariant;
64                             out Data: OleVariant);
65    procedure showView(const ViewName: WideString; Key: OleVariant;
66                       const DetailPropertyName: WideString);
67    procedure showDataSet(const DataSet: ContextDataSet; const Caption: WideString;
68                          ColumnCaptions: OleVariant; ColumnOnChangeHandlers: OleVariant;
69                          TakeActionsFromView: OleVariant);
70    function executeConsoleProcess(const CommandLine: WideString; MaxDuration: Integer;
71                                   const OutputData: OleVariant): Integer;
72    function createRaster: IDispatch;
73    function createZIPArchive: IDispatch;
74    function ConvertExcel(Source: OleVariant; const Format: WideString): IDispatch;
75    property ContextObject: IDispatch;
76    property Language: WideString;
77    property UserName: WideString;
78    property NegotiateAuth: WordBool;
79    property Variable[const Name: WideString; Persistent: WordBool]: OleVariant;
80  end;

Члены интерфейса доступны для использования в скриптах форм задания параметров, а также в отчетах как члены класса передаваемого контекстного объекта.

  • Функция Handle возвращает дескриптор главного окна приложения.
  • Функция getName возвращает имя объекта по его идентификатору.
  • Функция getDescription возвращает наименование объекта по его идентификатору.
  • Функция createDataSet создает набор данных, основанный на экземплярах класса, имя которого передано как параметр. Возвращаемый объект реализует интерфейс IContextDataSet.
  • Функция executeMethod осуществляет вызов метода с параметрами. Имя класса передается в параметре ClassName, имя вызываемого метода - в параметре MethodName. Если вызываемый метод явяется функцией, то результат ее выполнения возвращается как результат вызова executeMethod. Параметры вызова метода передаются через параметр Params следующим образом:
    • Для методов класса без параметров можно передавать любое значение, например, Null.
    • Для методов класса, имеющих один параметр, значение Params есть значение этого единственного параметра.
    • Для методов класса, имеющих более одного параметра, значение Params есть массив значений параметров.
      Пример
      VBScript, VBA LValue = executeMethod("TObject", "Round", Array(10.24, 1))
      JScript LValue = executeMethod("TObject", "Round", new Array(10.24, 1));
      Object Pascal LValue := executeMethod('TObject', 'Round', VarArrayOf([10.24, 1]));
    • Для методов экземпляра без параметров значение Params есть идентификатор объекта, для которого вызывается метод.
    • Для методов экземпляра, имеющих параметры, значение Params есть массив значений параметров. При этом первым элементом массива является идентификатор объекта, для которого вызывается метод.
      Пример
      VBScript, VBA executeMethod "TObject", "MergeTo", Array(LOldObject, LNewObject)
      JScript executeMethod("TObject", "MergeTo", new Array(LOldObject, LNewObject));
      Object Pascal executeMethod('TObject', 'MergeTo', VarArrayOf([LOldObject, LNewObject]));
  • Функция executeReport осуществляет вызов отчета с параметрами. Имя класса передается в параметре ClassName, имя вызываемого метода - в параметре TemplateName. Параметры вызова передаются в параметре Params аналогично вызову executeMethod. В результате вызова функции возвращается ссылка на рабочую книгу Microsoft Excel, документ Microsoft Word и так далее. Судьба приложения, в рамках которого создан возвращенный объект, остается на усмотрение вызывающей стороны. Если вызывающая сторона предполагает взаимодействие объекта с пользователем, то необходимо обеспечить видимость объекта-приложения (Application.Visible := True;). В противном случае необходимо закрыть приложение после освобождения объекта документа (Application.Quit).
  • Функция getPropValue возвращает значение свойства объекта. Имя класса, имя свойства и идентификатор объекта задаются в параметрах.
  • Процедура setPropValue устанавливает значение свойства объекта в значение, заданное параметром Value. Для очистки значения можно использовать пустую строку или значение Null. Имя класса, имя свойства и идентификатор объекта задаются в параметрах.
  • Функция select возвращает ссылку на XML-документ, содержащий в корневом элементе элементы, представляющие собой записи набора данных на основе класса ClassName (с полями, разнесенными по элементам), определяемого структурой параметра QueryItems.
  • Функция enumerationItem возвращает идентификатор элемента перечисления по имени.
    Пример
    VBScript, VBA LItemID = enumerationItem("rsReplicatableMetadata")
    JScript LItemID = enumerationItem("rsReplicatableMetadata");
    Object Pascal LItemID := enumerationItem('rsReplicatableMetadata');
  • Функция getClass возвращает идентификатор объекта типа Класс TClass (Классы) по имени.
    Пример
    VBScript, VBA LClassID = getClass("TDocumentType")
    JScript LClassID = getClass("TDocumentType");
    Object Pascal LClassID := getClass('TDocumentType');
  • функция createGUID является оберткой над функцией Windows API CoCreateGuid. Возвращает сгенерированный глобально-уникальный идентификатор, преобразованный в строку.
  • процедура processStart информирует систему о необходимости показать окно выполнения длительного процесса. Текст, описывающий процесс (он появляется в показываемом окне) задается параметром Description. В случае, если есть возможность определить количество "шагов" процесса, то это количество необходимо передать в параметре ItemCount. В случае, если параметр ItemCount больше нуля, окно выполнения будет снабжено индикатором прогресса. Если значение ItemCount равно нулю, то окно появится без индикатора прогресса. Если значение ItemCount меньше нуля, то решение о появлении окна будет принято системой самостоятельно на основании загрузки процессора и окно процесса не появится, если процесс завершится достаточно быстро.
  • процедура processStep информирует систему о завершении очередного "шага" процесса, что найдет отражение в индикаторе прогресса окна выполнения длительного процесса, если таковые случатся.
  • процедура processStop информирует систему о завершении длительного процесса, что приведет к закрытию окна выполнения длительного процесса, если таковое случится.
  • функция PlaceDataSet осуществляет перенос данных из набора, задаваемого параметром DataSet в некоторое место документа Microsoft Office. Место назначения определяется параметром Range следующим образом:
    Microsoft Word
    • Объект Range. По месту расположения этого объекта будет создана таблица (Table), в которой будут размещены данные из набора.
      Пример
      PlaceDataSet ThisDocument.Bookmarks("BookMarkName").Range, LDataSet
      Пример
      PlaceDataSet Selection.Range, LDataSet
    • Объект Document. В самом начале переданного документа будет создана таблица (Table), в которой будут размещены данные из набора.
      Пример
      PlaceDataSet ThisDocument, LDataSet
    Microsoft Excel
    • Объект Range. По месту расположения этого объекта (диапазона) будут размещены данные из набора. Если параметр ShiftRows задан и равен True, то заданный диапазон будет расширен вниз на необходимое количество строк, и информация, лежащая ниже переданного диапазона, будет по-прежнему лежать ниже. Если нет, то она (скорее всего) будет затёрта данными набора. Если параметр ShiftColumns задан и равен True, то этот диапазон будет расширен вправо на необходимое количество столбцов, и информация, лежащая правее переданного диапазона, будет по-прежнему лежать правее. Если нет, то она (скорее всего) будет затёрта данными набора.
      Пример
      PlaceDataSet Range("C4"), LDataSet
    • Объект WorkSheet. На переданном листе будут размещены данные из набора.
      Пример
      PlaceDataSet WorkSheets("HiddenSheet"), LDataSet
    Функция возвращает количество размещенных записей.
  • процедура DebugString выводит переданную в качестве аргумента строку в отладочный монитор.
  • процедура ExportObject осуществляет экспорт информации об объекте, задаваемом параметром ID в XML-документ, передаваемый в параметре Document. Если объект документа не был создан, то он создается автоматически. Если документ не имеет корневого узла, он будет создан автоматически.
    Пример
    01set LDataSet = CreateDataSet("TSecurityAccount")
    02
    03LDataSet.AddQueryItem qpWhat, "ID"
    04
    05set LDocument = CreateObject("Msxml2.DOMDocument.4.0") 'Не обязательно.
    06
    07while not LDataSet.Eof
    08  ExportObject LDocument, LDataSet.Field("ID")
    09  LDataSet.Next
    10wend
    11
    12LDocument.save "c:\RolesAndUsers.xml"
          
  • Функция callRoutine осуществляет вызов подпрограммы. Параметры будут запрошены у пользователя обычным порядком (с показом формы задания параметров, отработки ее скрипта и т. д.). Имя класса передается в параметре ClassName, имя вызываемой подпрограммы - в параметре RoutineName. Если пользователь разрешил выполнение подпрограммы (либо для выполнения не требовалось разрешения пользователя), функция вернет True, иначе False. Значение, возвращаемое подпрограммой, может быть возвращено через необязательный параметр RetValue. Через значение необязательного параметра ScriptPart можно передать скрипт на языке VBScript, который будет "приклеен" сверху к скрипту формы параметров вызываемой подпрограммы.
  • Функция getOleObject возвращает ссылку на Ole-объект с идентификатором класса, переданном в параметре ClassID. Объект создается на основе библиотеки кода, сохраненной в доступном файле с именем, заданным параметром AccessibleFileName. Регистр символов имени доступного файла важен.
  • Функция getResource возвращает значение ресурсной строки по имени ресурса (элемента перечислимого домена Resource strings или перевода (объекта класса TLanguageTranslation).
    Пример
    MsgBox getResource("rssMyErrorMessage")
          
  • Функция getTempFileName возвращает сгенерированное системой имя временного файла с расширением, переданным в параметре Extension.
  • Функция selectVaue позволяет пользователю выбрать значение на основе ссылочного домена, имя которого передается в параметре ClassDomain. Вызывающая сторона может реализовать интерфейс IContextExpressionInfo, через который передается информация о контексте вызова для интерпретации выражений условий отбора, и передать ссылку на него через параметр ExpressionContext. Выбранное значение передается в обе стороны через параметр Value. Если пользователь подтвердил выбор значения, функция возвращает значение True, и устанавливает значение параметра Value, равное идентификатору выбранного пользователем объекта. Если пользователь отказался от выбора, функция возвращает значение False.
  • Процедура raiseManagedException возбуждает управляемую исключительную ситуацию с сообщением для пользователя, заданным параметром ExceptionMessage.
  • Функция getCRC возвращает шестнадцатиричное представление контрольной суммы переданных в параметре Data данных. Параметр может быть
    • Объектом, реализующим интерфейс IBinaryData
    • Объектом, реализующим интерфейс IStream
    • Объектом, реализующим интерфейс ISequentialStream
    • Объектом, реализующим интерфейс IFile объектной модели FileSystemObject
    • Строкой данных. Строка будет преобразована в байты в соответствии с кодировкой UTF-8.
  • Функция downloadData осуществляет обращение к указанному ресурсу по протоколу http (https), и возвращает ответ сервера в виде объекта, реализующего интерфейс IBinaryData. Параметр Host определяет http-сервер, параметр Url - Url, к которому будет происходить обращение. Параметры UserName и Password определяют имя пользователя и пароль, если http-сервер требует авторизовать пользователя. Параметр NegotiateAuth устанавливает режим аутентификации. (Basic или Negotiate). Параметры PostData, PostContentType и PostDataIsBinary определяют содержимое тела POST-запроса (если не определено, функция отправит GET-запрос). Параметр CanCache позволяет использовать локальный кеш http-ответов. Параметр NewSession требует принудительного создания новой сессии при вызове функции. Параметр TimeOut определяет максимальное время ожидания ответа в секундах.
  • Функция createBinaryData создает пустой объект, реализующий интерфейс IBinaryData.
  • Функция BinaryToBitmap  конвертирует переданный графический файл в формат BMP. Объекты во входном и выходном параметрах должны реализовывать интерфейс IBinaryData.
  • Функция editValues создает и показывает форму редактирования группы значений. Параметр ValuesList содержит идентификатор объекта класса TObjectList. Этот список содержит ссылки на редактируемые значения (объекты класса TTypedValue), и командные кнопки формы (объекты класса TTypedValueButton). Параметр Title определяет заголовок формы, параметр UseTabs определяет, будут ли показаны закладки на форме редактирования. Параметр HideOKButton позволяет скрыть кнопку "OK" на показываемой форме. Параметр ScriptPart определяет скрипт показываемой формы.

    Пример
    01  LValue1 = executeMethod ("TTypedValue", "CreateStrValue", _
    02    Array("Value1", "Первый параметр", Null, Null, _
    03    "TLongString", Null, Null, Null, Null, Null, "Значение по  умолчанию первого параметра"))
    04  LValue2 = executeMethod ("TTypedValue", "CreateStrValue", _
    05    Array("Value2", "Второй параметр", Null, Null, _
    06    "TLongString", Null, Null, Null, Null, Null, "Значение по  умолчанию второго параметра"))
    07
    08  LValues = executeMethod("TObjectList", "CreateFromString", _
    09    LValue1 & ";" & LValue2)
    10
    11  if editValues(LValues, "Введите два строковых значения, друзья", True, False, "") then
    12    MsgBox getPropValue("TTypedValue", "StrValue", LValue1) & _
    13      " " & _
    14      getPropValue("TTypedValue", "StrValue", LValue2)
    15  end if
    16
    17  executeMethod "TObject", "Destroy", LValues
    18  executeMethod "TObject", "Destroy", LValue1
    19  executeMethod "TObject", "Destroy", LValue2
            

    Пример
    01  LScriptPart =  "Buttons(""NextButton"").Enabled = ParentForm.NavigatorCanNext" & Chr(10) & _
    02    "Buttons(""PrevButton"").Enabled = ParentForm.NavigatorCanPrevious"
    03
    04  LValue1 = executeMethod ("TTypedValue", "CreateStrValue", _
    05    Array("Value1", "Первый параметр", Null, Null, "TLongString", Null, Null, Null, Null, Null, _
    06    "Значение по  умолчанию первого параметра"))
    07  LValue2 = executeMethod ("TTypedValue", "CreateStrValue", _
    08    Array("Value2", "Второй параметр", Null, Null, "TLongString", Null, Null, Null, Null, Null, _
    09    "Значение по  умолчанию второго параметра"))
    10
    11  LNextButton = executeMethod ("TTypedValueButton", "Create", Array("NextButton", "Вперед!", _
    12    Null, Null, Null, Null, 0, Null, Null, _
    13    "ParentForm.NavigatorNext"  & Chr(10) & LScriptPart, enumerationItem("scPublic"), 1, Null))
    14
    15  LPrevButton = executeMethod ("TTypedValueButton", "Create", Array("PrevButton", "Назад!", _
    16    Null, Null, Null, Null, 1, Null, Null, _
    17    "ParentForm.NavigatorPrevious" & Chr(10) & LScriptPart, enumerationItem("scPublic"), 1, Null))
    18
    19  LValues = executeMethod("TObjectList", "CreateFromString", _
    20    LValue1 & ";" & LValue2 & ";" & LNextButton & ";" & LPrevButton)
    21
    22  if editValues(LValues, "Введите два строковых значения, друзья", True, True, LScriptPart) then
    23    MsgBox getPropValue("TTypedValue", "StrValue", LValue1) & _
    24      " " & _
    25      getPropValue("TTypedValue", "StrValue", LValue2)
    26  end if
    27
    28  executeMethod "TObject", "Destroy", LValues
    29  executeMethod "TObject", "Destroy", LValue1
    30  executeMethod "TObject", "Destroy", LValue2
    31  executeMethod "TObject", "Destroy", LNextButton
    32  executeMethod "TObject", "Destroy", LPrevButton
            

  • Функции MsgBox и ShowMsgBox (это синонимы одной точки входа) полностью аналогичны функции Basic MsgBox по поведению и набору параметров.
  • Функция buildNamedFile формирует значение типа "Именованный файл" на основе объекта, реализующего интерфейс IBinaryData (параметр Data) и информации об имени и параметрах именованного файла.
  • Процедура parseNamedFile разбирает значение типа "Именованный файл". Выходной параметр FileName будет содержать сохраненное имя файла, выходной параметр Data - объект, реализующего интерфейс IBinaryData и содержащий данные именованного файла.
  • Свойство ContextObject позволяет получить ссылку на этот же самый контекстный объект.
  • Свойство UserName позволяет получить логин текущего пользователя.
  • Свойство NegotiateAuth позволяет получить признак доменной аутентификации пользователя.
  • Свойство Language позволяет получать и устанавливать текущий языковой контекст, в котором будут выполняться обращения к БД. Значение свойства либо пустая строка (используется язык БД по умолчанию), либо имя объекта класса TLanguage
  • Свойство Variable позволяет сохранять и получать произвольные значения, которые могут хранится постоянно (в реестре) или только в текущем сеансе, в зависимости от параметра Persistent.
    Пример
    1'сохранить на время текущего сеанса значение в переменную с именем SameVariableName
    2Variable("SameVariableName", False) = "Value"
    3
    4'получить значение переменной с именем SameVariableName хранимой в текущем сеансе
    5LValue = Variable("SameVariableName", False)
          
  • Процедура showView осуществляет показ в модальном окне представления с именем ViewName. С помощью параметров DetailPropertyName и Key можно наложить на представление дополнительное условие отбора.

5.9.3.2. Интерфейс IContextDataSet
01  IContextDataSet = interface(IDispatch)
02    ['{466F3AF7-F899-4BC1-869D-1B17DCB86159}']
03    procedure AddQueryItem(Part: TQueryPart; const Name: WideString;
04      Value: OleVariant; Special: TQuerySpecial; Context: OleVariant);
05    function Eof: WordBool;
06    function Field(const Name: WideString): OleVariant;
07    function FieldCount: Integer;
08    function FieldName(Index: Integer): WideString;
09    procedure Next;
10  end;

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

  • Процедура AddQueryItem добавляет элемент набора данных. Элементы могут добавляться в любом порядке до первого обращения к данным набора. Символические имена всех предопределенных для параметров этого метода констант являются членами интерфейса IConstants.
    • часть запроса определяется параметром Part, который может принимать одно из следующих предопределенных значений:
      Символическое имя Числовое значение Описание
      qpWhat 0 Добавляет поле (столбец), определяемое параметром Name, к результирующему набору данных. Параметр Value игнорируется.
      qpWhere 1 Определяет условие, налагаемое на свойства объектов класса, передаваемое остальными параметрами.
      qpOrder 2 Определяет порядок сортировки записей результирующего набора данных. Параметр Value игнорируется.
      qpGroup 3 Определяет, что записи результирующего набора данных будут сгруппированы по столбцу, переданному в параметре Name. Параметры Value и Special игнорируются.
    • параметр Name должен быть именем свойства класса, на котором основан набор данных, либо зарезервированным словом "ID" (без кавычек).
    • параметр Value (необязательный) определяет условия отбора, накладываемые на свойство, заданное параметром Name. Имеет смысл только если значение параметра Part равно qpWhere. Условие задается посредством строки, интерпретируемой следующим образом:
      • строка разделяется на части посредством системного разделителя
      • каждая часть интерпретируется самостоятельно, и эти части объединяются логическим "ИЛИ"
      • при интерпретации каждой части проверяются следующие условия:
        * проверка значения на непустоту (IS NOT NULL)
        !* проверка значения на пустоту (IS NULL)
        начинается с символов
        '<=', '<', '>=', '>'
        проверка соответствующего отношения между значением свойства, переданного параметром Name и оставшейся частью строки
        включает в себя символы '*' и/или '?' проверка соответствия значения шаблону, в котором знак '?' соответствует одному любому символу, а знак '*' - любому количеству любых символов
        начинается с символа '!' символ '!' означает отрицание условия, переданного оставшейся частью строки
        представляет собой строку в апострофах (одиночных кавычках) содержание строки не анализируется по приведенным выше условиям
        любая другая строка проверка равенства значения свойства, переданного параметром Name значению, переданному строкой
    • параметр Special (необязательный) обеспечивает дополнительное поведение набора данных (если параметр Special используется, необходимо использовать и параметр Value, можно передавать пустую строку):
      Символическое имя Числовое значение Описание
      qsNone 0 Параметр не используется. Значение по умолчанию.
      qsDescending 7 Используется при значении qpOrder параметра Part. В этом случае производится сортировка по убыванию.
      qsCount 8 Используется при значении qpWhat параметра Part. Определяют тип агрегации по свойству, заданному параметром Name.
      qsSum 9
      qsMin 10
      qsMax 11
      qsAverage 12
      qsFunction 22 Используется для включения в запрос вызова функции. Используется при значении qpWhat параметра Part.
    • параметр Context (необязательный) определяет дополнительные параметры элемента запроса.
    Пример
    01'включить в набор данных свойство Name
    02LDataSet.AddQueryItem 0, "Name"
    03'включить в набор данных среднее значение цены
    04LDataSet.AddQueryItem 0, "Price", "", 12
    05'включить в набор данных идентификатор объекта
    06LDataSet.AddQueryItem 0, "ID"
    07'включить в набор данных вызов функции. В поле IsCompany будет значение True, если объект является организацией
    08LDataSet.AddQueryItem 0, "IsCompany", "TObject.IsInstanceOf", 22, Array(getClass("TCompany"))
    09'наложить на набор данных условие
    10LDataSet.AddQueryItem 1, "Organization", "фирма Елочка"
          
    Пример
    1LDataSet.AddQueryItem 0, "Organization"              '(1)
    2LDataSet.AddQueryItem 0, "SalesCount", "", "9"       '(2)
    3LDataSet.AddQueryItem 1, "SaleDate", ">10.09.2005"   '(3)
    4LDataSet.AddQueryItem 2, "Organization"              '(4)
    5LDataSet.AddQueryItem 3, "Organization"              '(5)
          
    Производится отбор из класса, описывающего число продаж некоего продукта различными организациями. При этом в набор данных включаются колонки "Organization" (строка 1) и "SalesCount" (строка 2). При этом будет произведена группировка по свойству "Organization" (строка 5) (что гарантирует вхождение каждой организации в результирующий набор данных не более одного раза). Набор данных будет отсортирован по организации (строка 4). При этом в колонке "SalesCount" будет сумма (строка 2) всех продаж, осуществленных каждой организацией после 10.09.2005 (строка 3).
  • Функция FieldCount возвращает количество полей (столбцов) набора данных.
  • Функция FieldName возвращает имя поля (столбца) с номером, переданным в параметре Index.
  • Функция Field возвращает значение, содержащееся в поле с именем или индексом, заданным параметром Name (строкового типа) текущей записи набора данных. При первом обращении к набору данных текущей является первая запись. Если параметр определяет номер, то поиск поля производится по номеру. Если имя, то по имени.
  • Процедура Next осуществляет переход к следующей записи набора данных.
  • Функция Eof возвращает False, если текущая запись набора данных существует; в случаях, если набор данных пустой, или при помощи метода Next достигнут конец набора данных, возвращает True.
    Пример
    01If LDataSet.Eof then
    02  'набор данных пуст. Ничего не отобрано.
    03Else
    04  While Not LDataSet.Eof
    05    'работа с очередной отобранной записью
    06    Cells(LRow, 1).Value = LDataSet.Field("Name")
    07    Cells(LRow, 2).Value = LDataSet.Field("Description")
    08    Cells(LRow, 2).Value = LDataSet.Field("Count")
    09    'переход к следующей записи
    10    LDataSet.Next
    11    LRow = LRow + 1
    12  Wend
    13End If
          

5.9.3.3. Интерфейс IConstants
01  IConstants = interface(IDispatch)
02    ['{7E7B2D66-5E7C-496A-AE06-EFC485007500}']
03    property qpWhat: Integer;
04    property qpWhere: Integer;
05    property qpOrder: Integer;
06    property qpGroup: Integer;
07    property qpHaving: Integer;
08    property qsNone: Integer;
09    property qsObjectID: Integer;
10    property qsParentID: Integer;
11    property qsHasChildren: Integer;
12    property qsFilterCondition: Integer;
13    property qsUplink: Integer;
14    property qsRootOnly: Integer;
15    property qsDescending: Integer;
16    property qsCount: Integer;
17    property qsSum: Integer;
18    property qsMin: Integer;
19    property qsMax: Integer;
20    property qsAverage: Integer;
21    property qsMasterLink: Integer;
22    property qsSelectedOnly: Integer;
23  end;

Интерфейс предоставляет символические имена констант, необходимых для работы с объектом, реализующим интерфейс IContextDataSet.

СвойствоЗначение
qpWhat0
qpWhere1
qpOrder2
qpGroup3
qpHaving4
qsNone0
qsObjectID1
qsParentID2
qsHasChildren3
qsFilterCondition4
qsUplink5
qsRootOnly6
qsDescending7
qsCount8
qsSum9
qsMin10
qsMax11
qsAverage12
qsMasterLink13
qsSelectedOnly14

5.9.3.4. Интерфейс IFormContext
01  IFormContext = interface(IDispatch)
02    ['{1944F1C8-CAEA-4CF9-9A4D-CE3423508FF7}']
03    function ChangedControl: OleVariant;
04    function ControlCount: Integer;
05    function ButtonCount: Integer;
06    function ID: WideString;
07    procedure Cancel;
08    function ControlExists(const Name: WideString): WordBool;
09    function ChangedControlName: WideString;
10    function ParentForm: OleVariant;
11    function RoutineID: WideString;
12    procedure PreInitControl(const Name: WideString; Value: OleVariant);
13    procedure NavigatorNext;
14    procedure NavigatorPrevious;
15    function NavigatorCanNext: WordBool;
16    function NavigatorCanPrevious: WordBool;
17    procedure RefreshView(RefreshAll: WordBool);
18    function ExpressionContextValue(const Name: WideString): OleVariant; safecall;
19    property Controls[Name: OleVariant]: IControl;
20    property Buttons[Name: OleVariant]: IButton;
21    property Enabled: WordBool;
22  end;

Представляет собой модель формы задания параметров. Члены интерфейса доступны для использования в скриптах форм задания параметров.

  • Функция ChangedControl возвращает объект, реализующий интерфейс IControl, соответствующий элементу управления, изменение которого вызвало исполнение скрипта формы параметров. Если выполнение скрипта вызвано инициализацией формы задания параметров, то значение функции - Empty. Пустоту значения можно проверить с помощью функции VBScript IsEmpty.
  • Функция ControlCount возвращает число элементов управления на форме параметров, как видимых так и невидимых.
  • Функция ButtonCount возвращает число командных кнопок на форме параметров, как видимых так и невидимых.
  • Функция ID возвращает значение идентификатора объекта, для которого вызван метод. Для методов класса возвращает пустое значение.
  • Функция ControlExists возвращает True, если элемент управления с именем Name существует на форме, и, соответственно, существует соответствующий параметр.
  • Функция ChangedControlName возвращает имя элемента управления, изменение которого вызвало исполнение скрипта формы параметров. Если выполнение скрипта вызвано инициализацией формы задания параметров, то значение функции - пустая строка.
  • Процедура Cancel прекращет работу формы задания параметров. Форма закрывается, выполнение действия блокируется.
  • Функция ParentForm возвращает ссылку на контекст родительской формы в цепочке вызовов. В контексте первой формы (вызванной с грида немодальной формы) возвращает пустое значение (Empty). Пустоту значения можно проверить с помощью функции VBScript IsEmpty.
  • Функция RoutineID возвращает идентификатор подпрограммы, для которой вызвана форма.
  • Процедура PreInitControl имитирует предварительную инициализацию элемента управления с именем Name значением, переданным в параметре Value. Сам элемент управления при этом будет скрыт, и не будет показан вплоть до следующего вызова формы пользователем.
  • Процедура NavigatorNext выполняет переход к следующему объекту набора данных, для которого показывается форма параметров.
  • Процедура NavigatorPrevious выполняет переход к предыдущему объекту набора данных, для которого показывается форма параметров.
  • Функция NavigatorCanNext возвращает True, если возможен переход к следующему объекту набора данных, для которого показывается форма параметров.
  • Функция NavigatorCanPrevious возвращает True, если возможен переход к предыдущему объекту набора данных, для которого показывается форма параметров.
  • Процедура RefreshView обновляет набор данных, для которого показывается форма параметров. Если значение параметра RefreshAll равно True, то будет обновлен весь набор, если False, то только выделенные записи.
  • Свойство Controls позволяет обращаться к элементам управления на форме задания параметров, их свойствам и методам. Каждый элемент управления реализует интерфейс IControl. В параметре Name (строкового типа)может быть передано как имя элемента управления, так и его индекс (в этом случае индекс должен быть передан как строка). Имена элементов управления на форме параметров соответствуют именам параметров подпрограммы (метода, отчета, etc).
  • Свойство Buttons позволяет обращаться к командным кнопкам на форме задания параметров, их свойствам и методам. Каждая командная кнопка реализует интерфейс IButton. В параметре Name (строкового типа)может быть передано как имя командной кнопки, так и ее индекс (в этом случае индекс должен быть передан как строка).
  • Свойство Enabled позволяет получать и устанавливать доступность кнопки OK на форме задания параметров. Если на форме есть невалидные (имеющие недопустимые значения) элементы управления, значение свойства всегда равно False и устанавливать его в явном виде в True не рекомендуется. Для учета дополнительного условия рекомендуется использовать следующую конструкцию: Enabled = Enabled and (Controls("SalesCount").Value > 10)
  • Функция ExpressionContextValue возвращает значение переменной контекста с именем Name, которая используется для интeрпретации выражений условий отбора на форме.

5.9.3.5. Интерфейс IControl
01  IControl = interface(IDispatch)
02    ['{0662001F-D3D5-4F28-98AC-9B499F70E856}']
03    function Name: WideString;
04    procedure SetHint(const Value: WideString);
05    procedure RefreshLinkedView;
06    property Value: OleVariant;
07    property ReadOnly: WordBool;
08    property IsValid: WordBool;
09    property IsEmpty: WordBool;
10  end;

Моделирует элемент управления на форме задания параметров. Позволяет управлять поведением элементов управления на форме.

  • Функция Name возвращает имя элемента управления; имена элементов управления всегда совпадают с именамим соответствующих параметров подпрограммы.
  • Процедура SetHint устанавливает текст всплывающей подсказки элемента управления. Всплывыющая подсказка показывается только если значение элемента управления недопустимо (свойство IsValid равно False).
  • Процедура RefreshLinkedView обновит связанное с элементом управления представление.
  • Свойство Value позволяет получать и устанавливать значение, введенное в элемент управления.
  • Свойство ReadOnly позволяет получать и устанавливать доступность элемента управления для записи; при значении True элемент управления не доступен для записи и отображается неактивным.
  • Свойство IsValid позволяет получать и устанавливать "валидность" элемента управления; по умолчанию валидным элемент управления является в том случае, если введенное в него значение соответствует домену соответствующего параметра подпрограммы с учетом наложенного на него условия отбора.
  • Свойство IsEmpty имеет значение True в случае, если в элемент управления не введено никакого значения (элемент управления пустой), в противном случае имеет значение False.

5.9.3.6. Интерфейс IButton
1  IButton = interface(IDispatch)
2    ['{1618406F-B9F1-4C5F-BC35-C2A154837CA9}']
3    function Name: WideString; safecall;
4    procedure Click; safecall;
5    property Enabled: WordBool;
6  end;

Моделирует командную кнопку на форме задания параметров. Позволяет управлять поведением кнопки на форме.

  • Функция Name возвращает имя кнопки.
  • Процедура Click эмулирует нажатие на кнопку.
  • Свойство Enabled позволяет получать и устанавливать доступность кнопки.

5.9.3.7. Интерфейс IBinaryData
01  IBinaryData = interface(IDispatch)
02    ['{8A9F7CB3-230A-4048-B938-852CBF6ADB2D}']
03    procedure Load(const Src: OleVariant);
04    procedure Append(const Src: OleVariant);
05    procedure Save(const Dst: OleVariant);
06    function Size: Cardinal;
07    function ToString(Encoding: WideString): WideString;
08    procedure FromString(Data: OleVariant);
09    procedure AppendString(Data: OleVariant);
10    function ToBase64: WideString;
11    procedure FromBase64(Data: OleVariant);

Представляет набор двоичных данных.

  • Процедура Load загружает двоичные данные из переданного источника. Источник может быть
    • Объектом, реализующим интерфейс IStream
    • Объектом, реализующим интерфейс ISequentialStream
    • Строкой, содержащей имя файла
  • Процедура Append добавляет двоичные данные из переданного источника. Источник может быть
    • Объектом, реализующим интерфейс IStream
    • Объектом, реализующим интерфейс ISequentialStream
    • Строкой, содержащей имя файла
  • Процедура Save сохраняет двоичные данные в переданный приемник. Приемник может быть
    • Объектом, реализующим интерфейс IStream
    • Объектом, реализующим интерфейс ISequentialStream
    • Строкой, содержащей имя файла
  • Функция ToString переводит данные в строку. Байты, содержашиеся в объекте, будут рассматриваться как содержащие строку в кодировке, заданной параметром Encoding. По умолчанию используется кодировка UTF-8
  • Процедура FromString загружает данные из строки, переданной в параметре Data, перекодировав ее в кодировку UTF-8
  • Процедура AppendString  добавляет данные из строки, переданной в параметре Data, перекодировав ее в кодировку UTF-8
  • Функция ToBase64 возвращает строку, полученную путем кодирования в формат Base64, данных содержащихся в объекте
  • Процедура FromBase64 загружает данные из строки, переданной в параметре Data, раскодировав ее из формата Base64

5.9.3.8. Интерфейс IContextExpressionInfo
1  IContextExpressionInfo = interface(IUnknown)
2    ['{C7518427-B515-4EB4-B698-88656E6CBF7C}']
3    function Count: Integer;
4    function ItemName(Index: Integer): WideString;
5    function ItemValue(Index: Integer): OleVariant;
6    function ItemDomain(Index: Integer): OleVariant;
7  end;

Через реализацию этого интерфейса передаются значения контекстных переменных при обращении к функции selectValueинтерфейса IContext.

  • Функция Count возвращает количество используемых контекстных переменных. Нумерация контекстных переменных начинается с нуля.
  • Функция ItemName возвращает имя контекстной переменной c номером, переданным в параметре Index.
  • Функция ItemValue возвращает значение контекстной переменной c номером, переданным в параметре Index.
  • Функция ItemDomain возвращает имя домена контекстной переменной c номером, переданным в параметре Index.

5.9.3.9. Интерфейс IExceptionHandler
1  IExceptionHandler = interface(IDispatch)
2    ['{3C3C7202-5ED5-4EB4-9CDD-A929C18CA8BD}']
3    procedure HandleException(ContextObject: OleVariant;
4      const Message: WideString;
5      const ExtentedInfo: WideString);
6  end;

Реализовав интерфейс IExceptionHandler разработчик решений может получать уведомления о возникающих при работе исключительных ситуациях. При возникновении исключения объект, реализующий интерфейс, получит текст сообщения об ошибке и расширенную информацию.

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

Для установки настроек интерфейса необходимо открыть Системную форму раздела АДМИНИСТРАТОРУ, перейти на вкладку  Настройки и в столбце "Заголовок закладки" установить фильтр "Обработка ошибок".

После этого в качестве значения Идентификатора класса установить "IExceptionHandler" без кавычек.

Для Библиотеки кода указать значение HSE.tlb


5.9.3.10. Справочник по интерфейсам

5.9.3.10.1. Перечисление TQueryPart
1type
2  TQueryPart = (qpWhat, qpWhere, qpOrder, qpGroup, qpHaving, qpInnerJoin, 
3    qpOuterJoin);

Или

01type
02  TQueryPart = TOleEnum;
03const
04  qpWhat = $00000000;
05  qpWhere = $00000001;
06  qpOrder = $00000002;
07  qpGroup = $00000003;
08  qpHaving = $00000004;
09  qpInnerJoin = $00000005;
10  qpOuterJoin = $00000006;

Элементы перечисления:

Имя Значение Назначение
qpWhat 0

qpWhere 1

qpOrder 2

qpGroup 3

qpHaving 4

qpInnerJoin 5

qpOuterJoin 6


5.9.3.10.2. Перечисление TQuerySpecial
1type
2  TQuerySpecial = (qsNone, qsObjectID, qsParentID, qsHasChildren, 
3    qsFilterCondition, qsUplink, qsRootOnly, qsDescending, qsCount, qsSum, qsMin, 
4    qsMax, qsAverage, qsMasterLink, qsSelectedOnly, qsDistinct, qsViewCondition, 
5    qsCaseInsensitive, qsAsString, qsListed, qsName, qsDescription, qsFunction, 
6    qsCountDistinct, qsBoolean, qsExact, qsSearchIndex, qsOptimizationParameters);

Или

01type
02  TQuerySpecial = TOleEnum;
03const
04  qsNone = $00000000;
05  qsObjectID = $00000001;
06  qsParentID = $00000002;
07  qsHasChildren = $00000003;
08  qsFilterCondition = $00000004;
09  qsUplink = $00000005;
10  qsRootOnly = $00000006;
11  qsDescending = $00000007;
12  qsCount = $00000008;
13  qsSum = $00000009;
14  qsMin = $0000000A;
15  qsMax = $0000000B;
16  qsAverage = $0000000C;
17  qsMasterLink = $0000000D;
18  qsSelectedOnly = $0000000E;
19  qsDistinct = $0000000F;
20  qsViewCondition = $00000010;
21  qsCaseInsensitive = $00000011;
22  qsAsString = $00000012;
23  qsListed = $00000013;
24  qsName = $00000014;
25  qsDescription = $00000015;
26  qsFunction = $00000016;
27  qsCountDistinct = $00000017;
28  qsBoolean = $00000018;
29  qsExact = $00000019;
30  qsSearchIndex = $0000001A;
31  qsOptimizationParameters = $0000001B;

Элементы перечисления:

Имя Значение Назначение
qsNone 0

qsObjectID 1

qsParentID 2

qsHasChildren 3

qsFilterCondition 4

qsUplink 5

qsRootOnly 6

qsDescending 7

qsCount 8

qsSum 9

qsMin 10

qsMax 11

qsAverage 12

qsMasterLink 13

qsSelectedOnly 14

qsDistinct 15

qsViewCondition 16

qsCaseInsensitive 17

qsAsString 18

qsListed 19

qsName 20

qsDescription 21

qsFunction 22

qsCountDistinct 23

qsBoolean 24

qsExact 25

qsSearchIndex 26

qsOptimizationParameters 27


5.9.3.10.3. Интерфейс IButton

Диаграмма

1type
2  IButton = interface(IDispatch)
3    ['{1618406F-B9F1-4C5F-BC35-C2A154837CA9}']
4    function Get_Enabled: WordBool; safecall;
5    procedure Set_Enabled(Value: WordBool); safecall;
6    function Name: WideString; safecall;
7    procedure Click; safecall;
8    property Enabled: WordBool read Get_Enabled write Set_Enabled;
9  end;

5.9.3.10.3.1. Свойства

Свойства интерфейса IButton:

Имя Тип Доступ Назначение
Enabled WordBool Чтение/Запись


5.9.3.10.3.2. Метод Click

Метод интерфейса IButton.

procedure IButton.Click;

Метод не имеет параметров.


5.9.3.10.3.3. Метод Name

Метод интерфейса IButton.

function IButton.Name: WideString;

Метод не имеет параметров.

Замечания:

Возвращает значение типа WideString.


5.9.3.10.4. Интерфейс IContext

Диаграмма

001type
002  IContext = interface(IDispatch)
003    ['{79847D79-A3BE-408F-B59F-662B91BC6350}']
004    function Get_ContextObject: IDispatch; safecall;
005    function Get_UserName: WideString; safecall;
006    function Get_NegotiateAuth: WordBool; safecall;
007    function Get_Language: WideString; safecall;
008    procedure Set_Language(Value: WideString); safecall;
009    function Get_TimeBias: Double; safecall;
010    function getName(ID: OleVariant): WideString; safecall;
011    function getDescription(ID: OleVariant): WideString; safecall;
012    function getPropValue(const ClassName: WideString; const PropName: WideString; 
013      ID: OleVariant): OleVariant; safecall;
014    procedure setPropValue(const ClassName: WideString; const PropName: WideString; 
015      ID: OleVariant; Value: OleVariant); safecall;
016    procedure getPropValues(const ClassName: WideString; 
017      const PropName: WideString; IDS: OleVariant; OnValueEvent: OleVariant; 
018      ThreadCount: Integer; ThreadSafe: WordBool); safecall;
019    procedure setPropValues(const ClassName: WideString; 
020      const PropName: WideString; IDS: OleVariant; OnValueNeededEvent: OleVariant; 
021      ThreadCount: Integer; ThreadSafe: WordBool); safecall;
022    function createDataSet(const TargetClassName: WideString): IContextDataSet; safecall;
023    function select(const ClassName: WideString; QueryItems: OleVariant): IDispatch; safecall;
024    function executeMethod(const ClassName: WideString; 
025      const MethodName: WideString; Params: OleVariant): OleVariant; safecall;
026    function getClass(const ClassName: WideString): WideString; safecall;
027    function enumerationItem(ItemIdentifier: OleVariant): WideString; safecall;
028    function getResource(const Name: WideString): WideString; safecall;
029    function bulkInsert(const ClassName: WideString; 
030      const Data: IDispatch): IContextDataSet; safecall;
031    function PreProcessScript(const Script: WideString; Indent: WordBool; 
032      const CommentMark: WideString): WideString; safecall;
033    function executeReport(const ClassName: WideString; 
034      const TemplateName: WideString; Params: OleVariant): IDispatch; safecall;
035    procedure saveReport(const ClassName: WideString; 
036      const TemplateName: WideString; Params: OleVariant; const FileName: WideString); safecall;
037    function Get_Variable(const Name: WideString; Persistent: WordBool): OleVariant; safecall;
038    procedure Set_Variable(const Name: WideString; Persistent: WordBool; 
039      Value: OleVariant); safecall;
040    function DebugString(const Message: WideString): WideString; safecall;
041    procedure raiseManagedException(const ExceptionMessage: WideString); safecall;
042    function createGUID: WideString; safecall;
043    function getTempFileName(const Extension: WideString): WideString; safecall;
044    function HasUI: WordBool; safecall;
045    function Handle: Integer; safecall;
046    procedure processStart(const Description: WideString; ItemCount: Integer; 
047      CanAbort: WordBool); safecall;
048    function processStep: WordBool; safecall;
049    procedure processStop; safecall;
050    procedure Sleep(MSecs: Integer); safecall;
051    function executeConsoleProcess(const CommandLine: WideString; 
052      MaxDuration: Integer; const OutputData: OleVariant): Integer; safecall;
053    function downloadData(const Host: WideString; const Url: WideString; 
054      const UserName: WideString; const Password: WideString; 
055      NegotiateAuth: WordBool; PostData: OleVariant; 
056      const PostContentType: WideString; PostDataIsBinary: WordBool; 
057      CanCache: WordBool; NewSession: WordBool; TimeOut: Integer): OleVariant; safecall;
058    function LineBreak: WideString; safecall;
059    function Transliterate(const Value: WideString): WideString; safecall;
060    procedure CompareLists(var List1: OleVariant; var List2: OleVariant; 
061      const Delimiter: WideString; CaseSensitive: WordBool); safecall;
062    function parseJSON(const JSON: WideString): WideString; safecall;
063    function ConvertExcel(Source: OleVariant; const Format: WideString): IDispatch; safecall;
064    function createBinaryData: IDispatch; safecall;
065    function getCRC(Data: OleVariant): WideString; safecall;
066    function buildNamedFile(const Data: IDispatch; 
067      const StoredFileName: WideString; Propmpt: WordBool; 
068      Compress: WordBool): IDispatch; safecall;
069    procedure parseNamedFile(NamedFile: OleVariant; out FileName: OleVariant; 
070      out Data: OleVariant); safecall;
071    function createRaster: IDispatch; safecall;
072    function BinaryToBitmap(const Data: IDispatch): IDispatch; safecall;
073    function getOleObject(const ClassID: WideString; 
074      const AccessibleFileName: WideString): IDispatch; safecall;
075    function PlaceDataSet(const Range: IDispatch; const DataSet: IContextDataSet; 
076      ShiftRows: WordBool; ShiftColumns: WordBool): Integer; safecall;
077    procedure ExportObject(var Document: OleVariant; const ID: WideString; 
078      const ClassID: WideString); safecall;
079    function createZIPArchive: IDispatch; safecall;
080    function callRoutine(const ClassName: WideString; 
081      const RoutineName: WideString; var RetValue: OleVariant; 
082      const ScriptPart: OleVariant): WordBool; safecall;
083    function selectVaue(const ClassDomain: WideString; 
084      const ExpressionContext: IUnknown; var Value: OleVariant): WordBool; safecall;
085    function editValues(const ValuesList: WideString; const Title: WideString; 
086      UseTabs: WordBool; HideOKButton: WordBool; 
087      const ScriptPart: OleVariant): WordBool; safecall;
088    function MsgBox(const Prompt: WideString; Buttons: LongWord; 
089      const Title: WideString; const HelpFile: WideString; Context: LongWord): Integer; safecall;
090    function ShowMsgBox(const Prompt: WideString; Buttons: LongWord; 
091      const Title: WideString; const HelpFile: WideString; Context: LongWord): Integer; safecall;
092    procedure showView(const ViewName: WideString; Key: OleVariant; 
093      const DetailPropertyName: WideString); safecall;
094    procedure showDataSet(const DataSet: ContextDataSet; const Caption: WideString; 
095      ColumnCaptions: OleVariant; ColumnOnChangeHandlers: OleVariant; 
096      TakeActionsFromView: OleVariant); safecall;
097    procedure SaveExternalDataToFolder(const Resource: WideString; 
098      const Folder: WideString); safecall;
099    function PerformAsyncTask(ID: OleVariant): WordBool; safecall;
100    procedure RebuildTextIndex(ClassID: OleVariant; FieldID: OleVariant; 
101      ThreadCount: Integer); safecall;
102    function MainHandle: Integer; safecall;
103    function IsHTMLDocumentSafe(const HTML: WideString): WordBool; safecall;
104    function EnsafeHTMLDocument(const HTML: WideString; RemoveHead: WordBool; 
105      Format: WordBool; PureXML: WordBool): WideString; safecall;
106    property ContextObject: IDispatch read Get_ContextObject;
107    property UserName: WideString read Get_UserName;
108    property NegotiateAuth: WordBool read Get_NegotiateAuth;
109    property Language: WideString read Get_Language write Set_Language;
110    property TimeBias: Double read Get_TimeBias;
111    property Variable[const Name: WideString; Persistent: WordBool]: OleVariant 
112      read Get_Variable write Set_Variable;
113  end;

5.9.3.10.4.1. Свойства

Свойства интерфейса IContext:

Имя Тип Доступ Назначение
ContextObject IDispatch Только для чтения

Language WideString Чтение/Запись

NegotiateAuth WordBool Только для чтения

TimeBias Double Только для чтения

UserName WideString Только для чтения

Variable[const Name: WideString, Persistent: WordBool] OleVariant Чтение/Запись


5.9.3.10.4.2. Метод BinaryToBitmap

Метод интерфейса IContext.

function IContext.BinaryToBitmap(const Data: IDispatch): IDispatch;

Параметры:

Имя Тип Обязательно Значение
Data IDispatch Да

Замечания:

Возвращает значение типа IDispatch.


5.9.3.10.4.3. Метод buildNamedFile

Метод интерфейса IContext.

1function IContext.buildNamedFile(const Data: IDispatch; 
2  const StoredFileName: WideString; Propmpt: WordBool; 
3  Compress: WordBool): IDispatch;

Параметры:

Имя Тип Обязательно Значение
Data IDispatch Да

StoredFileName WideString Да

Propmpt WordBool Да

Compress WordBool Да

Замечания:

Возвращает значение типа IDispatch.


5.9.3.10.4.4. Метод bulkInsert

Метод интерфейса IContext.

1function IContext.bulkInsert(const ClassName: WideString; 
2  const Data: IDispatch): IContextDataSet;

Параметры:

Имя Тип Обязательно Значение
ClassName WideString Да

Data IDispatch Да

Замечания:

Возвращает значение типа IContextDataSet.


5.9.3.10.4.5. Метод callRoutine

Метод интерфейса IContext.

1function IContext.callRoutine(const ClassName: WideString; 
2  const RoutineName: WideString; var RetValue: OleVariant; 
3  const ScriptPart: OleVariant): WordBool;

Параметры:

Имя Тип Обязательно Значение
ClassName WideString Да

RoutineName WideString Да

RetValue OleVariant Нет

ScriptPart OleVariant Нет

Замечания:

Возвращает значение типа WordBool.


5.9.3.10.4.6. Метод CompareLists

Метод интерфейса IContext.

1procedure IContext.CompareLists(var List1: OleVariant; var List2: OleVariant; 
2  const Delimiter: WideString; CaseSensitive: WordBool);

Параметры:

Имя Тип Обязательно Значение
List1 OleVariant Да

List2 OleVariant Да

Delimiter WideString Да

CaseSensitive WordBool Да


5.9.3.10.4.7. Метод ConvertExcel

Метод интерфейса IContext.

1function IContext.ConvertExcel(Source: OleVariant; 
2  const Format: WideString): IDispatch;

Параметры:

Имя Тип Обязательно Значение
Source OleVariant Да

Format WideString Да

Замечания:

Возвращает значение типа IDispatch.


5.9.3.10.4.8. Метод createBinaryData

Метод интерфейса IContext.

function IContext.createBinaryData: IDispatch;

Метод не имеет параметров.

Замечания:

Возвращает значение типа IDispatch.


5.9.3.10.4.9. Метод createDataSet

Метод интерфейса IContext.

function IContext.createDataSet(const TargetClassName: WideString): IContextDataSet;

Параметры:

Имя Тип Обязательно Значение
TargetClassName WideString Да

Замечания:

Возвращает значение типа IContextDataSet.


5.9.3.10.4.10. Метод createGUID

Метод интерфейса IContext.

function IContext.createGUID: WideString;

Метод не имеет параметров.

Замечания:

Возвращает значение типа WideString.


5.9.3.10.4.11. Метод createRaster

Метод интерфейса IContext.

function IContext.createRaster: IDispatch;

Метод не имеет параметров.

Замечания:

Возвращает значение типа IDispatch.


5.9.3.10.4.12. Метод createZIPArchive

Метод интерфейса IContext.

function IContext.createZIPArchive: IDispatch;

Метод не имеет параметров.

Замечания:

Возвращает значение типа IDispatch.


5.9.3.10.4.13. Метод DebugString

Метод интерфейса IContext.

function IContext.DebugString(const Message: WideString): WideString;

Параметры:

Имя Тип Обязательно Значение
Message WideString Да

Замечания:

Возвращает значение типа WideString.


5.9.3.10.4.14. Метод downloadData

Метод интерфейса IContext.

1function IContext.downloadData(const Host: WideString; const Url: WideString; 
2  const UserName: WideString; const Password: WideString; 
3  NegotiateAuth: WordBool; PostData: OleVariant; 
4  const PostContentType: WideString; PostDataIsBinary: WordBool; 
5  CanCache: WordBool; NewSession: WordBool; TimeOut: Integer): OleVariant;

Параметры:

Имя Тип Обязательно Значение
Host WideString Да

Url WideString Да

UserName WideString Да

Password WideString Да

NegotiateAuth WordBool Да

PostData OleVariant Да

PostContentType WideString Да

PostDataIsBinary WordBool Да

CanCache WordBool Да

NewSession WordBool Да

TimeOut Integer Да

Замечания:

Возвращает значение типа OleVariant.


5.9.3.10.4.15. Метод editValues

Метод интерфейса IContext.

1function IContext.editValues(const ValuesList: WideString; 
2  const Title: WideString; UseTabs: WordBool; HideOKButton: WordBool; 
3  const ScriptPart: OleVariant): WordBool;

Параметры:

Имя Тип Обязательно Значение
ValuesList WideString Да

Title WideString Да

UseTabs WordBool Да

HideOKButton WordBool Да

ScriptPart OleVariant Нет

Замечания:

Возвращает значение типа WordBool.


5.9.3.10.4.16. Метод EnsafeHTMLDocument

Метод интерфейса IContext.

1function IContext.EnsafeHTMLDocument(const HTML: WideString; 
2  RemoveHead: WordBool; Format: WordBool; PureXML: WordBool): WideString;

Параметры:

Имя Тип Обязательно Значение
HTML WideString Да

RemoveHead WordBool Да

Format WordBool Да

PureXML WordBool Да

Замечания:

Возвращает значение типа WideString.


5.9.3.10.4.17. Метод enumerationItem

Метод интерфейса IContext.

function IContext.enumerationItem(ItemIdentifier: OleVariant): WideString;

Параметры:

Имя Тип Обязательно Значение
ItemIdentifier OleVariant Да

Замечания:

Возвращает значение типа WideString.


5.9.3.10.4.18. Метод executeConsoleProcess

Метод интерфейса IContext.

1function IContext.executeConsoleProcess(const CommandLine: WideString; 
2  MaxDuration: Integer; const OutputData: OleVariant): Integer;

Параметры:

Имя Тип Обязательно Значение
CommandLine WideString Да

MaxDuration Integer Да

OutputData OleVariant Да

Замечания:

Возвращает значение типа Integer.


5.9.3.10.4.19. Метод executeMethod

Метод интерфейса IContext.

1function IContext.executeMethod(const ClassName: WideString; 
2  const MethodName: WideString; Params: OleVariant): OleVariant;

Параметры:

Имя Тип Обязательно Значение
ClassName WideString Да

MethodName WideString Да

Params OleVariant Да

Замечания:

Возвращает значение типа OleVariant.


5.9.3.10.4.20. Метод executeReport

Метод интерфейса IContext.

1function IContext.executeReport(const ClassName: WideString; 
2  const TemplateName: WideString; Params: OleVariant): IDispatch;

Параметры:

Имя Тип Обязательно Значение
ClassName WideString Да

TemplateName WideString Да

Params OleVariant Да

Замечания:

Возвращает значение типа IDispatch.


5.9.3.10.4.21. Метод ExportObject

Метод интерфейса IContext.

1procedure IContext.ExportObject(var Document: OleVariant; const ID: WideString; 
2  const ClassID: WideString);

Параметры:

Имя Тип Обязательно Значение
Document OleVariant Да

ID WideString Да

ClassID WideString Да


5.9.3.10.4.22. Метод getClass

Метод интерфейса IContext.

function IContext.getClass(const ClassName: WideString): WideString;

Параметры:

Имя Тип Обязательно Значение
ClassName WideString Да

Замечания:

Возвращает значение типа WideString.


5.9.3.10.4.23. Метод getCRC

Метод интерфейса IContext.

function IContext.getCRC(Data: OleVariant): WideString;

Параметры:

Имя Тип Обязательно Значение
Data OleVariant Да

Замечания:

Возвращает значение типа WideString.


5.9.3.10.4.24. Метод getDescription

Метод интерфейса IContext.

function IContext.getDescription(ID: OleVariant): WideString;

Параметры:

Имя Тип Обязательно Значение
ID OleVariant Да

Замечания:

Возвращает значение типа WideString.


5.9.3.10.4.25. Метод getName

Метод интерфейса IContext.

function IContext.getName(ID: OleVariant): WideString;

Параметры:

Имя Тип Обязательно Значение
ID OleVariant Да

Замечания:

Возвращает значение типа WideString.


5.9.3.10.4.26. Метод getOleObject

Метод интерфейса IContext.

1function IContext.getOleObject(const ClassID: WideString; 
2  const AccessibleFileName: WideString): IDispatch;

Параметры:

Имя Тип Обязательно Значение
ClassID WideString Да

AccessibleFileName WideString Да

Замечания:

Возвращает значение типа IDispatch.


5.9.3.10.4.27. Метод getPropValue

Метод интерфейса IContext.

1function IContext.getPropValue(const ClassName: WideString; 
2  const PropName: WideString; ID: OleVariant): OleVariant;

Параметры:

Имя Тип Обязательно Значение
ClassName WideString Да

PropName WideString Да

ID OleVariant Да

Замечания:

Возвращает значение типа OleVariant.


5.9.3.10.4.28. Метод getPropValues

Метод интерфейса IContext.

1procedure IContext.getPropValues(const ClassName: WideString; 
2  const PropName: WideString; IDS: OleVariant; OnValueEvent: OleVariant; 
3  ThreadCount: Integer; ThreadSafe: WordBool);

Параметры:

Имя Тип Обязательно Значение
ClassName WideString Да

PropName WideString Да

IDS OleVariant Да

OnValueEvent OleVariant Да

ThreadCount Integer Да

ThreadSafe WordBool Да


5.9.3.10.4.29. Метод getResource

Метод интерфейса IContext.

function IContext.getResource(const Name: WideString): WideString;

Параметры:

Имя Тип Обязательно Значение
Name WideString Да

Замечания:

Возвращает значение типа WideString.


5.9.3.10.4.30. Метод getTempFileName

Метод интерфейса IContext.

function IContext.getTempFileName(const Extension: WideString): WideString;

Параметры:

Имя Тип Обязательно Значение
Extension WideString Да

Замечания:

Возвращает значение типа WideString.


5.9.3.10.4.31. Метод Handle

Метод интерфейса IContext.

function IContext.Handle: Integer;

Метод не имеет параметров.

Замечания:

Возвращает значение типа Integer.


5.9.3.10.4.32. Метод HasUI

Метод интерфейса IContext.

function IContext.HasUI: WordBool;

Метод не имеет параметров.

Замечания:

Возвращает значение типа WordBool.


5.9.3.10.4.33. Метод IsHTMLDocumentSafe

Метод интерфейса IContext.

function IContext.IsHTMLDocumentSafe(const HTML: WideString): WordBool;

Параметры:

Имя Тип Обязательно Значение
HTML WideString Да

Замечания:

Возвращает значение типа WordBool.


5.9.3.10.4.34. Метод LineBreak

Метод интерфейса IContext.

function IContext.LineBreak: WideString;

Метод не имеет параметров.

Замечания:

Возвращает значение типа WideString.


5.9.3.10.4.35. Метод MainHandle

Метод интерфейса IContext.

function IContext.MainHandle: Integer;

Метод не имеет параметров.

Замечания:

Возвращает значение типа Integer.


5.9.3.10.4.36. Метод MsgBox

Метод интерфейса IContext.

1function IContext.MsgBox(const Prompt: WideString; Buttons: LongWord; 
2  const Title: WideString; const HelpFile: WideString; Context: LongWord): Integer;

Параметры:

Имя Тип Обязательно Значение
Prompt WideString Да

Buttons LongWord Нет

Title WideString Нет

HelpFile WideString Нет

Context LongWord Нет

Замечания:

Возвращает значение типа Integer.


5.9.3.10.4.37. Метод parseJSON

Метод интерфейса IContext.

function IContext.parseJSON(const JSON: WideString): WideString;

Параметры:

Имя Тип Обязательно Значение
JSON WideString Да

Замечания:

Возвращает значение типа WideString.


5.9.3.10.4.38. Метод parseNamedFile

Метод интерфейса IContext.

1procedure IContext.parseNamedFile(NamedFile: OleVariant; 
2  out FileName: OleVariant; out Data: OleVariant);

Параметры:

Имя Тип Обязательно Значение
NamedFile OleVariant Да

FileName OleVariant Да

Data OleVariant Да


5.9.3.10.4.39. Метод PerformAsyncTask

Метод интерфейса IContext.

function IContext.PerformAsyncTask(ID: OleVariant): WordBool;

Параметры:

Имя Тип Обязательно Значение
ID OleVariant Да

Замечания:

Возвращает значение типа WordBool.


5.9.3.10.4.40. Метод PlaceDataSet

Метод интерфейса IContext.

1function IContext.PlaceDataSet(const Range: IDispatch; 
2  const DataSet: IContextDataSet; ShiftRows: WordBool; 
3  ShiftColumns: WordBool): Integer;

Параметры:

Имя Тип Обязательно Значение
Range IDispatch Да

DataSetIContextDataSet Да

ShiftRows WordBool Нет

ShiftColumns WordBool Нет

Замечания:

Возвращает значение типа Integer.


5.9.3.10.4.41. Метод PreProcessScript

Метод интерфейса IContext.

1function IContext.PreProcessScript(const Script: WideString; Indent: WordBool; 
2  const CommentMark: WideString): WideString;

Параметры:

Имя Тип Обязательно Значение
Script WideString Да

Indent WordBool Да

CommentMark WideString Да

Замечания:

Возвращает значение типа WideString.


5.9.3.10.4.42. Метод processStart

Метод интерфейса IContext.

1procedure IContext.processStart(const Description: WideString; 
2  ItemCount: Integer; CanAbort: WordBool);

Параметры:

Имя Тип Обязательно Значение
Description WideString Да

ItemCount Integer Нет

CanAbort WordBool Нет


5.9.3.10.4.43. Метод processStep

Метод интерфейса IContext.

function IContext.processStep: WordBool;

Метод не имеет параметров.

Замечания:

Возвращает значение типа WordBool.


5.9.3.10.4.44. Метод processStop

Метод интерфейса IContext.

procedure IContext.processStop;

Метод не имеет параметров.


5.9.3.10.4.45. Метод raiseManagedException

Метод интерфейса IContext.

procedure IContext.raiseManagedException(const ExceptionMessage: WideString);

Параметры:

Имя Тип Обязательно Значение
ExceptionMessage WideString Да


5.9.3.10.4.46. Метод RebuildTextIndex

Метод интерфейса IContext.

1procedure IContext.RebuildTextIndex(ClassID: OleVariant; FieldID: OleVariant; 
2  ThreadCount: Integer);

Параметры:

Имя Тип Обязательно Значение
ClassID OleVariant Да

FieldID OleVariant Да

ThreadCount Integer Да


5.9.3.10.4.47. Метод SaveExternalDataToFolder

Метод интерфейса IContext.

1procedure IContext.SaveExternalDataToFolder(const Resource: WideString; 
2  const Folder: WideString);

Параметры:

Имя Тип Обязательно Значение
Resource WideString Да

Folder WideString Да


5.9.3.10.4.48. Метод saveReport

Метод интерфейса IContext.

1procedure IContext.saveReport(const ClassName: WideString; 
2  const TemplateName: WideString; Params: OleVariant; const FileName: WideString);

Параметры:

Имя Тип Обязательно Значение
ClassName WideString Да

TemplateName WideString Да

Params OleVariant Да

FileName WideString Да


5.9.3.10.4.49. Метод select

Метод интерфейса IContext.

1function IContext.select(const ClassName: WideString; 
2  QueryItems: OleVariant): IDispatch;

Параметры:

Имя Тип Обязательно Значение
ClassName WideString Да

QueryItems OleVariant Да

Замечания:

Возвращает значение типа IDispatch.


5.9.3.10.4.50. Метод selectVaue

Метод интерфейса IContext.

1function IContext.selectVaue(const ClassDomain: WideString; 
2  const ExpressionContext: IUnknown; var Value: OleVariant): WordBool;

Параметры:

Имя Тип Обязательно Значение
ClassDomain WideString Да

ExpressionContext IUnknown Да

Value OleVariant Да

Замечания:

Возвращает значение типа WordBool.


5.9.3.10.4.51. Метод setPropValue

Метод интерфейса IContext.

1procedure IContext.setPropValue(const ClassName: WideString; 
2  const PropName: WideString; ID: OleVariant; Value: OleVariant);

Параметры:

Имя Тип Обязательно Значение
ClassName WideString Да

PropName WideString Да

ID OleVariant Да

Value OleVariant Да


5.9.3.10.4.52. Метод setPropValues

Метод интерфейса IContext.

1procedure IContext.setPropValues(const ClassName: WideString; 
2  const PropName: WideString; IDS: OleVariant; OnValueNeededEvent: OleVariant; 
3  ThreadCount: Integer; ThreadSafe: WordBool);

Параметры:

Имя Тип Обязательно Значение
ClassName WideString Да

PropName WideString Да

IDS OleVariant Да

OnValueNeededEvent OleVariant Да

ThreadCount Integer Да

ThreadSafe WordBool Да


5.9.3.10.4.53. Метод showDataSet

Метод интерфейса IContext.

1procedure IContext.showDataSet(const DataSet: ContextDataSet; 
2  const Caption: WideString; ColumnCaptions: OleVariant; 
3  ColumnOnChangeHandlers: OleVariant; TakeActionsFromView: OleVariant);

Параметры:

Имя Тип Обязательно Значение
DataSet ContextDataSet Да

Caption WideString Да

ColumnCaptions OleVariant Да

ColumnOnChangeHandlers OleVariant Да

TakeActionsFromView OleVariant Да


5.9.3.10.4.54. Метод ShowMsgBox

Метод интерфейса IContext.

1function IContext.ShowMsgBox(const Prompt: WideString; Buttons: LongWord; 
2  const Title: WideString; const HelpFile: WideString; Context: LongWord): Integer;

Параметры:

Имя Тип Обязательно Значение
Prompt WideString Да

Buttons LongWord Нет

Title WideString Нет

HelpFile WideString Нет

Context LongWord Нет

Замечания:

Возвращает значение типа Integer.


5.9.3.10.4.55. Метод showView

Метод интерфейса IContext.

1procedure IContext.showView(const ViewName: WideString; Key: OleVariant; 
2  const DetailPropertyName: WideString);

Параметры:

Имя Тип Обязательно Значение
ViewName WideString Да

Key OleVariant Да

DetailPropertyName WideString Да


5.9.3.10.4.56. Метод Sleep

Метод интерфейса IContext.

procedure IContext.Sleep(MSecs: Integer);

Параметры:

Имя Тип Обязательно Значение
MSecs Integer Да


5.9.3.10.4.57. Метод Transliterate

Метод интерфейса IContext.

function IContext.Transliterate(const Value: WideString): WideString;

Параметры:

Имя Тип Обязательно Значение
Value WideString Да

Замечания:

Возвращает значение типа WideString.


5.9.3.10.5. Интерфейс IContextDataSet

Диаграмма

01type
02  IContextDataSet = interface(IDispatch)
03    ['{466F3AF7-F899-4BC1-869D-1B17DCB86159}']
04    procedure AddQueryItem(Part: TQueryPart; const Name: WideString; 
05      Value: OleVariant; Special: TQuerySpecial; Context: OleVariant); safecall;
06    function Eof: WordBool; safecall;
07    function Field(const Name: WideString): OleVariant; safecall;
08    function FieldCount: Integer; safecall;
09    function FieldName(Index: Integer): WideString; safecall;
10    procedure Next; safecall;
11    procedure Split(OnRowEvent: OleVariant; ChunkSize: Integer; 
12      ThreadCount: Integer; ThreadSafe: WordBool); safecall;
13    function AsJSON: WideString; safecall;
14    function AsXML: WideString; safecall;
15    function AsBinaryData: IDispatch; safecall;
16  end;

5.9.3.10.5.1. Метод AddQueryItem

Метод интерфейса IContextDataSet.

1procedure IContextDataSet.AddQueryItem(Part: TQueryPart; 
2  const Name: WideString; Value: OleVariant; Special: TQuerySpecial; 
3  Context: OleVariant);

Параметры:

Имя Тип Обязательно Значение
PartTQueryPart Да

Name WideString Да

Value OleVariant Нет

SpecialTQuerySpecial Нет

Context OleVariant Нет


5.9.3.10.5.2. Метод AsBinaryData

Метод интерфейса IContextDataSet.

function IContextDataSet.AsBinaryData: IDispatch;

Метод не имеет параметров.

Замечания:

Возвращает значение типа IDispatch.


5.9.3.10.5.3. Метод AsJSON

Метод интерфейса IContextDataSet.

function IContextDataSet.AsJSON: WideString;

Метод не имеет параметров.

Замечания:

Возвращает значение типа WideString.


5.9.3.10.5.4. Метод AsXML

Метод интерфейса IContextDataSet.

function IContextDataSet.AsXML: WideString;

Метод не имеет параметров.

Замечания:

Возвращает значение типа WideString.


5.9.3.10.5.5. Метод Eof

Метод интерфейса IContextDataSet.

function IContextDataSet.Eof: WordBool;

Метод не имеет параметров.

Замечания:

Возвращает значение типа WordBool.


5.9.3.10.5.6. Метод Field

Метод интерфейса IContextDataSet.

function IContextDataSet.Field(const Name: WideString): OleVariant;

Параметры:

Имя Тип Обязательно Значение
Name WideString Да

Замечания:

Возвращает значение типа OleVariant.


5.9.3.10.5.7. Метод FieldCount

Метод интерфейса IContextDataSet.

function IContextDataSet.FieldCount: Integer;

Метод не имеет параметров.

Замечания:

Возвращает значение типа Integer.


5.9.3.10.5.8. Метод FieldName

Метод интерфейса IContextDataSet.

function IContextDataSet.FieldName(Index: Integer): WideString;

Параметры:

Имя Тип Обязательно Значение
Index Integer Да

Замечания:

Возвращает значение типа WideString.


5.9.3.10.5.9. Метод Next

Метод интерфейса IContextDataSet.

procedure IContextDataSet.Next;

Метод не имеет параметров.


5.9.3.10.5.10. Метод Split

Метод интерфейса IContextDataSet.

1procedure IContextDataSet.Split(OnRowEvent: OleVariant; ChunkSize: Integer; 
2  ThreadCount: Integer; ThreadSafe: WordBool);

Параметры:

Имя Тип Обязательно Значение
OnRowEvent OleVariant Да

ChunkSize Integer Да

ThreadCount Integer Да

ThreadSafe WordBool Да


5.9.3.10.6. Интерфейс IContextExpressionInfo

Диаграмма

1type
2  IContextExpressionInfo = interface(IUnknown)
3    ['{C7518427-B515-4EB4-B698-88656E6CBF7C}']
4    function LookupExpressionContext(const Identifier: WideString; 
5      out DomainID: WideString; out Value: WideString): WordBool; safecall;
6    procedure SerializeExpressionContext(const RootNode: IDispatch); safecall;
7  end;

5.9.3.10.6.1. Метод LookupExpressionContext

Метод интерфейса IContextExpressionInfo.

1function IContextExpressionInfo.LookupExpressionContext(const Identifier: WideString; 
2  out DomainID: WideString; out Value: WideString): WordBool;

Параметры:

Имя Тип Обязательно Значение
Identifier WideString Да

DomainID WideString Да

Value WideString Да

Замечания:

Возвращает значение типа WordBool.


5.9.3.10.6.2. Метод SerializeExpressionContext

Метод интерфейса IContextExpressionInfo.

procedure IContextExpressionInfo.SerializeExpressionContext(const RootNode: IDispatch);

Параметры:

Имя Тип Обязательно Значение
RootNode IDispatch Да


5.9.3.10.7. Интерфейс IControl

Диаграмма

01type
02  IControl = interface(IDispatch)
03    ['{0662001F-D3D5-4F28-98AC-9B499F70E856}']
04    function Name: WideString; safecall;
05    function Get_Value: OleVariant; safecall;
06    procedure Set_Value(Value: OleVariant); safecall;
07    function Get_ReadOnly: WordBool; safecall;
08    procedure Set_ReadOnly(Value: WordBool); safecall;
09    function Get_IsValid: WordBool; safecall;
10    procedure Set_IsValid(Value: WordBool); safecall;
11    function Get_IsEmpty: WordBool; safecall;
12    procedure SetHint(const Value: WideString); safecall;
13    procedure RefreshLinkedView; safecall;
14    function Get_Visible: WordBool; safecall;
15    property Value: OleVariant read Get_Value write Set_Value;
16    property ReadOnly: WordBool read Get_ReadOnly write Set_ReadOnly;
17    property IsValid: WordBool read Get_IsValid write Set_IsValid;
18    property IsEmpty: WordBool read Get_IsEmpty;
19    property Visible: WordBool read Get_Visible;
20  end;

5.9.3.10.7.1. Свойства

Свойства интерфейса IControl:

Имя Тип Доступ Назначение
IsEmpty WordBool Только для чтения

IsValid WordBool Чтение/Запись

ReadOnly WordBool Чтение/Запись

Value OleVariant Чтение/Запись

Visible WordBool Только для чтения


5.9.3.10.7.2. Метод Name

Метод интерфейса IControl.

function IControl.Name: WideString;

Метод не имеет параметров.

Замечания:

Возвращает значение типа WideString.


5.9.3.10.7.3. Метод RefreshLinkedView

Метод интерфейса IControl.

procedure IControl.RefreshLinkedView;

Метод не имеет параметров.


5.9.3.10.7.4. Метод SetHint

Метод интерфейса IControl.

procedure IControl.SetHint(const Value: WideString);

Параметры:

Имя Тип Обязательно Значение
Value WideString Да


5.9.3.10.8. Интерфейс IExceptionHandler

Диаграмма

1type
2  IExceptionHandler = interface(IDispatch)
3    ['{3C3C7202-5ED5-4EB4-9CDD-A929C18CA8BD}']
4    procedure HandleException(ContextObject: OleVariant; const Message: WideString; 
5      const ExtentedInfo: WideString; SupportServiceData: OleVariant); safecall;
6  end;

5.9.3.10.8.1. Метод HandleException

Метод интерфейса IExceptionHandler.

1procedure IExceptionHandler.HandleException(ContextObject: OleVariant; 
2  const Message: WideString; const ExtentedInfo: WideString; 
3  SupportServiceData: OleVariant);

Параметры:

Имя Тип Обязательно Значение
ContextObject OleVariant Да

Message WideString Да

ExtentedInfo WideString Да

SupportServiceData OleVariant Да


5.9.3.10.9. Интерфейс IExternalContext

Диаграмма

1type
2  IExternalContext = interface(IDispatch)
3    ['{EA2F1CDA-53F6-40E9-A2B7-0A80AB84D177}']
4    procedure Connect(const Database: WideString); safecall;
5  end;

5.9.3.10.9.1. Метод Connect

Метод интерфейса IExternalContext.

procedure IExternalContext.Connect(const Database: WideString);

Параметры:

Имя Тип Обязательно Значение
Database WideString Да


5.9.3.10.10. Интерфейс IFormContext

Диаграмма

01type
02  IFormContext = interface(IDispatch)
03    ['{1944F1C8-CAEA-4CF9-9A4D-CE3423508FF7}']
04    function ID: WideString; safecall;
05    function RoutineID: WideString; safecall;
06    function ControlCount: Integer; safecall;
07    function Get_Controls(Name: OleVariant): IControl; safecall;
08    function ControlExists(const Name: WideString): WordBool; safecall;
09    function ButtonCount: Integer; safecall;
10    function Get_Buttons(Name: OleVariant): IButton; safecall;
11    function Get_Enabled: WordBool; safecall;
12    procedure Set_Enabled(Value: WordBool); safecall;
13    function ChangedControl: OleVariant; safecall;
14    function ChangedControlName: WideString; safecall;
15    procedure Cancel; safecall;
16    function ParentForm: OleVariant; safecall;
17    procedure PreInitControl(const Name: WideString; Value: OleVariant); safecall;
18    procedure NavigatorNext; safecall;
19    procedure NavigatorPrevious; safecall;
20    function NavigatorCanNext: WordBool; safecall;
21    function NavigatorCanPrevious: WordBool; safecall;
22    procedure RefreshView(RefreshAll: WordBool); safecall;
23    function ExpressionContextValue(const Name: WideString): OleVariant; safecall;
24    property Controls[Name: OleVariant]: IControl read Get_Controls;
25    property Buttons[Name: OleVariant]: IButton read Get_Buttons;
26    property Enabled: WordBool read Get_Enabled write Set_Enabled;
27  end;

5.9.3.10.10.1. Свойства

Свойства интерфейса IFormContext:

Имя Тип Доступ Назначение
Buttons[Name: OleVariant]IButton Только для чтения

Controls[Name: OleVariant]IControl Только для чтения

Enabled WordBool Чтение/Запись


5.9.3.10.10.2. Метод ButtonCount

Метод интерфейса IFormContext.

function IFormContext.ButtonCount: Integer;

Метод не имеет параметров.

Замечания:

Возвращает значение типа Integer.


5.9.3.10.10.3. Метод Cancel

Метод интерфейса IFormContext.

procedure IFormContext.Cancel;

Метод не имеет параметров.


5.9.3.10.10.4. Метод ChangedControl

Метод интерфейса IFormContext.

function IFormContext.ChangedControl: OleVariant;

Метод не имеет параметров.

Замечания:

Возвращает значение типа OleVariant.


5.9.3.10.10.5. Метод ChangedControlName

Метод интерфейса IFormContext.

function IFormContext.ChangedControlName: WideString;

Метод не имеет параметров.

Замечания:

Возвращает значение типа WideString.


5.9.3.10.10.6. Метод ControlCount

Метод интерфейса IFormContext.

function IFormContext.ControlCount: Integer;

Метод не имеет параметров.

Замечания:

Возвращает значение типа Integer.


5.9.3.10.10.7. Метод ControlExists

Метод интерфейса IFormContext.

function IFormContext.ControlExists(const Name: WideString): WordBool;

Параметры:

Имя Тип Обязательно Значение
Name WideString Да

Замечания:

Возвращает значение типа WordBool.


5.9.3.10.10.8. Метод ExpressionContextValue

Метод интерфейса IFormContext.

function IFormContext.ExpressionContextValue(const Name: WideString): OleVariant;

Параметры:

Имя Тип Обязательно Значение
Name WideString Да

Замечания:

Возвращает значение типа OleVariant.


5.9.3.10.10.9. Метод ID

Метод интерфейса IFormContext.

function IFormContext.ID: WideString;

Метод не имеет параметров.

Замечания:

Возвращает значение типа WideString.


5.9.3.10.10.10. Метод NavigatorCanNext

Метод интерфейса IFormContext.

function IFormContext.NavigatorCanNext: WordBool;

Метод не имеет параметров.

Замечания:

Возвращает значение типа WordBool.


5.9.3.10.10.11. Метод NavigatorCanPrevious

Метод интерфейса IFormContext.

function IFormContext.NavigatorCanPrevious: WordBool;

Метод не имеет параметров.

Замечания:

Возвращает значение типа WordBool.


5.9.3.10.10.12. Метод NavigatorNext

Метод интерфейса IFormContext.

procedure IFormContext.NavigatorNext;

Метод не имеет параметров.


5.9.3.10.10.13. Метод NavigatorPrevious

Метод интерфейса IFormContext.

procedure IFormContext.NavigatorPrevious;

Метод не имеет параметров.


5.9.3.10.10.14. Метод ParentForm

Метод интерфейса IFormContext.

function IFormContext.ParentForm: OleVariant;

Метод не имеет параметров.

Замечания:

Возвращает значение типа OleVariant.


5.9.3.10.10.15. Метод PreInitControl

Метод интерфейса IFormContext.

procedure IFormContext.PreInitControl(const Name: WideString; Value: OleVariant);

Параметры:

Имя Тип Обязательно Значение
Name WideString Да

Value OleVariant Да


5.9.3.10.10.16. Метод RefreshView

Метод интерфейса IFormContext.

procedure IFormContext.RefreshView(RefreshAll: WordBool);

Параметры:

Имя Тип Обязательно Значение
RefreshAll WordBool Да


5.9.3.10.10.17. Метод RoutineID

Метод интерфейса IFormContext.

function IFormContext.RoutineID: WideString;

Метод не имеет параметров.

Замечания:

Возвращает значение типа WideString.


5.9.3.10.11. Интерфейс IRaster

Диаграмма

01type
02  IRaster = interface(IDispatch)
03    ['{4F27D016-03C2-4D48-ABF7-FD547E859F79}']
04    function Get_Width: Integer; safecall;
05    procedure Set_Width(Value: Integer); safecall;
06    function Get_Height: Integer; safecall;
07    procedure Set_Height(Value: Integer); safecall;
08    function Get_DefaultColor: Integer; safecall;
09    procedure Set_DefaultColor(Value: Integer); safecall;
10    procedure Load(Src: OleVariant); safecall;
11    procedure SaveBitmap(Dst: OleVariant); safecall;
12    procedure SavePNG(Dst: OleVariant); safecall;
13    procedure SaveJPG(Dst: OleVariant; Quality: Integer); safecall;
14    procedure FlipVertical; safecall;
15    procedure FlipHorizontal; safecall;
16    procedure Rotate; safecall;
17    procedure Resize(NewWidth: Integer; NewHeight: Integer; Center: WordBool); safecall;
18    procedure Stretch(NewWidth: Integer; NewHeight: Integer); safecall;
19    procedure StretchToSize(MaxWidth: OleVariant; MaxHeight: OleVariant; 
20      MaxSize: OleVariant); safecall;
21    procedure Overlay(Src: OleVariant; X: Integer; Y: Integer; Width: Integer; 
22      Height: Integer); safecall;
23    property Width: Integer read Get_Width write Set_Width;
24    property Height: Integer read Get_Height write Set_Height;
25    property DefaultColor: Integer read Get_DefaultColor write Set_DefaultColor;
26  end;

5.9.3.10.11.1. Свойства

Свойства интерфейса IRaster:

Имя Тип Доступ Назначение
DefaultColor Integer Чтение/Запись

Height Integer Чтение/Запись

Width Integer Чтение/Запись


5.9.3.10.11.2. Метод FlipHorizontal

Метод интерфейса IRaster.

procedure IRaster.FlipHorizontal;

Метод не имеет параметров.


5.9.3.10.11.3. Метод FlipVertical

Метод интерфейса IRaster.

procedure IRaster.FlipVertical;

Метод не имеет параметров.


5.9.3.10.11.4. Метод Load

Метод интерфейса IRaster.

procedure IRaster.Load(Src: OleVariant);

Параметры:

Имя Тип Обязательно Значение
Src OleVariant Да


5.9.3.10.11.5. Метод Overlay

Метод интерфейса IRaster.

1procedure IRaster.Overlay(Src: OleVariant; X: Integer; Y: Integer; 
2  Width: Integer; Height: Integer);

Параметры:

Имя Тип Обязательно Значение
Src OleVariant Да

X Integer Да

Y Integer Да

Width Integer Да

Height Integer Да


5.9.3.10.11.6. Метод Resize

Метод интерфейса IRaster.

1procedure IRaster.Resize(NewWidth: Integer; NewHeight: Integer; 
2  Center: WordBool);

Параметры:

Имя Тип Обязательно Значение
NewWidth Integer Да

NewHeight Integer Да

Center WordBool Да


5.9.3.10.11.7. Метод Rotate

Метод интерфейса IRaster.

procedure IRaster.Rotate;

Метод не имеет параметров.


5.9.3.10.11.8. Метод SaveBitmap

Метод интерфейса IRaster.

procedure IRaster.SaveBitmap(Dst: OleVariant);

Параметры:

Имя Тип Обязательно Значение
Dst OleVariant Да


5.9.3.10.11.9. Метод SaveJPG

Метод интерфейса IRaster.

procedure IRaster.SaveJPG(Dst: OleVariant; Quality: Integer);

Параметры:

Имя Тип Обязательно Значение
Dst OleVariant Да

Quality Integer Да


5.9.3.10.11.10. Метод SavePNG

Метод интерфейса IRaster.

procedure IRaster.SavePNG(Dst: OleVariant);

Параметры:

Имя Тип Обязательно Значение
Dst OleVariant Да


5.9.3.10.11.11. Метод Stretch

Метод интерфейса IRaster.

procedure IRaster.Stretch(NewWidth: Integer; NewHeight: Integer);

Параметры:

Имя Тип Обязательно Значение
NewWidth Integer Да

NewHeight Integer Да


5.9.3.10.11.12. Метод StretchToSize

Метод интерфейса IRaster.

1procedure IRaster.StretchToSize(MaxWidth: OleVariant; MaxHeight: OleVariant; 
2  MaxSize: OleVariant);

Параметры:

Имя Тип Обязательно Значение
MaxWidth OleVariant Да

MaxHeight OleVariant Да

MaxSize OleVariant Да


5.9.3.10.12. Интерфейс IScannerTools

Диаграмма

1type
2  IScannerTools = interface(IDispatch)
3    ['{FC1B3C9F-7DE9-4909-B57D-6D33E3B0A87A}']
4    function AcquireImage(Silent: WordBool): IDispatch; safecall;
5    function AcquirePDF: IDispatch; safecall;
6  end;

5.9.3.10.12.1. Метод AcquireImage

Метод интерфейса IScannerTools.

function IScannerTools.AcquireImage(Silent: WordBool): IDispatch;

Параметры:

Имя Тип Обязательно Значение
Silent WordBool Да

Замечания:

Возвращает значение типа IDispatch.


5.9.3.10.12.2. Метод AcquirePDF

Метод интерфейса IScannerTools.

function IScannerTools.AcquirePDF: IDispatch;

Метод не имеет параметров.

Замечания:

Возвращает значение типа IDispatch.


5.9.3.10.13. Интерфейс ISetOfObjectsEditor

Диаграмма

1type
2  ISetOfObjectsEditor = interface(IDispatch)
3    ['{6D3662A7-D9FF-4BD6-8D92-A4EA2058C74E}']
4    function Get_DomainName: WideString; safecall;
5    procedure Set_DomainName(Value: WideString); safecall;
6    function Get_SelectedCount: Integer; safecall;
7    property DomainName: WideString read Get_DomainName write Set_DomainName;
8    property SelectedCount: Integer read Get_SelectedCount;
9  end;

5.9.3.10.13.1. Свойства

Свойства интерфейса ISetOfObjectsEditor:

Имя Тип Доступ Назначение
DomainName WideString Чтение/Запись

SelectedCount Integer Только для чтения


5.9.3.10.14. Интерфейс IZIPArchive

Диаграмма

01type
02  IZIPArchive = interface(IDispatch)
03    ['{11C9400F-F262-4F72-882F-5AA5A4531591}']
04    procedure Load(Src: OleVariant); safecall;
05    procedure Save(Src: OleVariant); safecall;
06    function Get_FileCount: Integer; safecall;
07    function Get_FileName(Index: Integer): WideString; safecall;
08    function Get_FileData(Index: Integer): OleVariant; safecall;
09    procedure AddFile(const FileName: WideString; Data: OleVariant); safecall;
10    function Get_FileSize(Index: Integer): Int64; safecall;
11    function Get_FileDateTime(Index: Integer): TDateTime; safecall;
12    function Get_FileCRC(Index: Integer): WideString; safecall;
13    function Get_UTF8Support: WordBool; safecall;
14    procedure Set_UTF8Support(Value: WordBool); safecall;
15    property FileCount: Integer read Get_FileCount;
16    property FileName[Index: Integer]: WideString read Get_FileName;
17    property FileData[Index: Integer]: OleVariant read Get_FileData;
18    property FileSize[Index: Integer]: Int64 read Get_FileSize;
19    property FileDateTime[Index: Integer]: TDateTime read Get_FileDateTime;
20    property FileCRC[Index: Integer]: WideString read Get_FileCRC;
21    property UTF8Support: WordBool read Get_UTF8Support write Set_UTF8Support;
22  end;

5.9.3.10.14.1. Свойства

Свойства интерфейса IZIPArchive:

Имя Тип Доступ Назначение
FileCRC[Index: Integer] WideString Только для чтения

FileCount Integer Только для чтения

FileData[Index: Integer] OleVariant Только для чтения

FileDateTime[Index: Integer] TDateTime Только для чтения