Создание суммарных выходных форм.

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

Реализована данная технология с использованием рабочей БД, имя которой в стандартном варианте WORK. Единственным условием для БД WORK является наличие в таблице описания полей (файле work. fst) строки “920 0 v920”. База данных может состоять только из 8-ми основных файлов + файл work. fst.

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

Для реализации этой технологии следует дополнительно к таблице создать файл с именем таблицы и расширением ‘smf’, состоящий из секций, данные которых задаются следующим образом:

Секция [ROWQRY], является обязательной. Строки этой секции являются форматами, которые выполняются на фиктивной записи и дают набор строк. Каждая строка  рассматривается как запрос на поиск для отбора записей из текущей БД, по которым будут подсчитаны суммы и помещены во вновь созданную запись БД WORK. Секция [FLDMODE1001] является необязательной. Строки этой секции являются форматами, которые выполняются на фиктивной записи и дают набор строк. В общем случае их количество равно количеству строк секции ROWQRY. Каждая строка – это значение поля 1001, которое добавляется во все записи, отобранные по запросу этого же порядкового номера. Секция [FLDTEXT] является необязательной. Если она есть, то она формирует строки, которые являются форматами. При выполнении на фиктивной записи они дают набор значений для поля с меткой 1 в записи БД WORK этого же порядкового номера.  Секция [FLDSUM] является обязательной, представляет собой набор форматов. Каждый формат выполняется для всех записей текущего фрагмента, результаты форматирования суммируются и помещаются в поле созданной записи БД WORK. Метка поля соответствует порядковому номеру строки формата плюс 1 (т. е. метки суммарных полей: 2, 3, 4, …).

Последовательность формирования таблицы следующая:

НЕ нашли? Не то? Что вы ищете?

На фиктивной записи выполняются все строки форматов секции ROWQRY. При этом возможно размножение результирующих строк. Результирующие строки запоминаются как поисковые запросы для текущей БД. На фиктивной записи выполняются все строки форматов секции FLDMODE1001. При этом возможно размножение результирующих строк. Результирующие строки запоминаются как значения поля с меткой 1001, которое будет добавляться в каждую запись текущей БД. На фиктивной записи выполняются все строки форматов секции FLDTEXT. При этом возможно размножение результирующих строк. Результирующие строки запоминаются как значения поля с меткой 1, которое будет добавлено в запись БД WORK. Выполняется цикл по строкам, сформированным в секции ROWQRY. Каждая строка является запросом на поиск в текущей БД. По запросу отбирается фрагмент записей. В каждую запись добавляется поле 1001, значение которого берется из набора строк секции FLDMODE1001 (если оно существует). Кроме того в каждую запись добавляется значение поля 991, если оно было предусмотрено созданной таблицей (стандартная технология). На всех записях отобранного фрагмента выполняются форматы секции FLDSUM с суммированием значений форматирования. Если хотя бы одна сумма не пустая, то в БД WORK создается новая запись, в которую записывается:
    В поле 1 значение из набора строк секции FLDTEXT. Порядковый номер строки соответствует порядковому номеру запроса. В поля с метками начиная с 2 записываются значения сумм, подсчитанных форматами секции FLDSUM. В поле 920 записывается идентификатор, единый и уникальный для всех сформированных записей БД WORK. После завершения цикла по всем строкам-запросам в БД WORK отбираются записи по идентификатору и для этих записей формируется таблица по стандартной технологии. Т. о. сама таблица создается стандартными средствами в директории основной БД, но с учетом меток полей, которые будут создаваться в записях БД WORK.