Для настройки Режима ШАБЛОН служит файл PFORM.DBF. В настройке задаются: 1. Имя файла-шаблона 2. Имя активной БД, из каторой вызывается шаблон 3. Аннотация на шаблон 4. Имя просматриваемой БД 5. Выражение поиска (SEEK) для определения записи, с которой нач- нется просмотр 6. Выражение просмотра (WHILE) для определения просматриваемого объема записей 7. Выражение условия (USL) для выбора отдельных записей 8. Связи. ALIAS1;INDEX;{|| relat1 };{|| relat2 };ALIAS0; ALIAS1 - БД в которую строится связь ALIAS0 - БД из которой строится связь INDEX - номер индекса в ALIAS1 {|| relat1 } - выражение RELATION, которое будет построено {|| relat2 } - выражение RELATION, которое будет восстановлено В связях можно задать имена полей по котрым нужно произвести сумма- цию: {FieldName[;Usl]}. Результат суммации сохраняется в массиве aSUM. Значение суммы: aSUM[i,1], где номер описания {FieldName}. Usl - определяет необязательное локальное условие для вычисления суммы. Кроме того в связях можно задать имена файлов БД, которые нужно открыть: [Alias;Index;Filter;], где Alias - имя файла БД (без расширения) Index - номер активного индекса (на время генерации) Filter - управление фильтром: T - отключить текущий фильтр F - не отключать текущий фильтр текст - установить временный фильтр ?:Text;Valume;Maska;Help; - конструкция для определения переменных. Значения переменных можно использовать при генерации. Переменные получают последовательные имена: _pN, где N позиция переменной. Text - текст вопроса. Valume - значение по умолчанию. Maska - шаблон редактирования: @B 9 - для чисел @D - для дат @Sn - для длиных строк XXX - для коротких строк Формы хранятся в файлах с расширением *.PFM. Для описания формы используются следующие ключевые слова: ┌────────────────┬───────────────────────────────┐ │ Ключевое слово │ Значение │ ├────────────────┼───────────────────────────────┤ │ !WIDTH │ Ширина листа документа │ │ !HEIGHT │ Высота листа документа │ │ !USERFUNC │ Имя пользовательской функции │ │ !PAGETITLE │ Заголовок листа │ │ !PAGEDOWN │ "Подвал" листа │ │ !TEXT │ Текст │ │ !TABLE │ Начало таблицы │ │ !TABLETITLE │ Заголовок таблицы │ │ !BODY │ "Тело" таблицы │ │ !TABLEDOWN │ "Подвал" таблицы │ │ !ENDTABLE │ Конец таблицы │ │ !FIELD │ Поля │ │ !NEWPAGE │ Перевод страницы │ │ @ │ Центрирование строки │ └────────────────┴───────────────────────────────┘ !WIDTH Задает ширину листа печатаемого документа. Числовая величина задается в этой же строке, разделенная пробелом от ключевого слова. Данная установка используется при центрировании строк. По умолчанию - ширина листа 80 символов. !HEIGHT Задает количество строк на странице печатаемого документа. Числовая величина задается в этой же строке, разделенная пробелом от ключевого слова. По умолчанию - 57 строк. !USERFUNC Задает пользовательскую функцию, которая вызывается каждым раз перед началом печати секции !BODY. Имя функции задается в этой же строке, разделенное пробелом от ключевого слова. По умолчанию - печать таблицы будет происходить с текущей записи и до конца файла. FUSTAB() - стандартная функция в которую передаются выражения поиска, просмотра и условия отбора для записей просматри- ваемой БД. !PAGETITLE Служит для задания блока, печатаемого в начале каждой страницы. Блок начинается со строки следующей за идентификатором !PAGETITLE и оканчивается следующим встретившимся ключевым словом. Допускается использование в печатной форме нескольких таких блоков. !PAGEDOWN Служит для задания блока, печатаемого в конце каждой страницы. Блок начинается со строки следующей за идентификатором !PAGEDOWN и оканчивается следующим встретившимся ключевым словом. Допускается использование в печатной форме нескольких таких блоков. !TEXT Указывает на блок печатаемой произвольной информации. Блок начинается со строки следующей за идентификатором !TEXT и оканчивается следующим встретившимся ключевым словом. !TABLE Является указателем на начало таблицы и задает блок печатаемый в начале таблицы. В этой же строке, через пробел, можно указать имя таблицы, которое можно использовать в пользовательской функции для идентификации текущей обрабатываемой таблицы, в том случае, если форма содержит несколько таблиц. Блок начинается со строки следующей за идентификатором !TABLE и оканчивается следующим встретившимся ключевым словом. !TABLETITLE Служит для задания блока, печатаемого в начале каждого нового листа таблицы, если она состоит из нескольких страниц. Блок начинается со строки следующей за идентификатором !TABLETITLE и оканчивается следующим встретившимся ключевым словом. !TABLEDOWN Служит для задания блока, печатаемого в конце каждого листа таблицы, если она состоит из нескольких страниц. Блок начинается со строки следующей за идентификатором !TABLEDOWN и оканчивается следующим встретившимся ключевым словом. !ENDTABLE Служит указателем на конец таблицы и задает блок завершающий таблицу. Блок начинается со строки следующей за идентификатором !ENDTABLE и оканчивается следующим встретившимся ключевым словом. !FIELD Указывает на список выводимых полей, переменных и выражений в том порядке, в каком они встречаются в форме. Таких списков может быть несколько. Для указания форматов и положения полей в блоках используются следующие символические обозначения: ┌──────────────┬───────────────────────────────────────┐ │ Обозначение │ Указание на │ ├──────────────┼───────────────────────────────────────┤ │ _____ │ Символьное поле по шаблону "XXXXX" │ │ _/ │ Символьное поле неопределенной длины │ │ ____.__ │ Числовое поле по шаблону "9999.99" │ │ ____. │ Числовое поле по шаблону "9999" │ │ _./ │ Числовое поле неопределенной длинны │ │ __.__.__ │ Поле даты │ └──────────────┴───────────────────────────────────────┘ В списке полей можно указывать произвольные выражения и переменные. Здесь же, через точку с запятой, можно указывать формат и шаблон выводимого значения, которые будут являться приоритетными по отношению к формату заданному при помощи символической мнемоники. Количество полей указанных в блоках и приведенных в списках должно совпадать. !NEWPAGE Служит для указания на перевод страницы. @ Наличие этого символа в 1 позиции указывает на необходимость ее центрирования относительно заданной ширины листа. PAGE() Функция возвращающая номер текущей печатаемой страницы. Примечание Задание имени пользовательской функции, а также ширины и высоты листа должны производится в начале формы. Если данные параметры не заданы, то они принимают значение по умолчанию. Описание таблицы должно начинаться с !TABLE и оканчиваться !ENDTABLE. Блоки !TABLETITLE и !TABLETITLE могут отсутствовать. Примеры 1. Форма бланка. !WIDTH 58 !TEXT @Бланк учета отгрузки товара ┌─────────────────────────────────────────────────────────┐ │ За __.__.__ │ │ │ │ Товар: __________________________ │ │ │ │ Стоимость единицы товара: ________.__ │ │ │ │ Количество единиц товара: ____. │ │ │ │ Общая сумма: ___________. руб. __. коп. │ │ │ │ │ │ Принял: ___________________ │ └─────────────────────────────────────────────────────────┘ !FIELD product->date product->name product->cost product->count product->count*product->cost ; @Z (product->count*product->cost)%100 product->fio 2. Табличная форма. !WIDTH 58 ! TEXT @Данные о продаже на __.__.__ !FIELD DATE() !PAGETITLE Отчет ----------------------------------------------------------- !PAGEDOWN ----------------------------------------------------------- @страница ___. !FIELD PAGE() !TABLE Продажи за валюту Таблица 1 ┌────────────┬──────────┬─────────────┬──────────────────────────┐ │ Товар │ Страна │ Стоимость │ Общая сумма │ ├────────────┼──────────┼─────────────┼──────────────────────────┤ │ 1 │ 2 │ 3 │ 4 │ ├────────────┼──────────┼─────────────┼──────────────────────────┤ !TABLETITLE Продолжение. Таблица 1 ┌────────────┬──────────┬─────────────┬──────────────────────────┐ │ 1 │ 2 │ 3 │ 4 │ ├────────────┼──────────┼─────────────┼──────────────────────────┤ !BODY │ __________ │ ________ │ ________.__ │ ___________________.__ │ !TABLEDOWN └────────────┴──────────┴─────────────┴──────────────────────────┘ !ENDTABLE ├────────────┴──────────┴─────────────┴──────────────────────────┤ │ Конец таблицы 1 │ └────────────────────────────────────────────────────────────────┘ !NEWPAGE !FIELD sale->product sale->country global->sum !TABLE Продажи за рубли Таблица 2 ┌────────────┬────────────────────────┬──────────────────────────┐ │ Товар │ Покупатель │ Общая сумма │ ├────────────┼────────────────────────┼──────────────────────────┤ !BODY │ __________ │ ______________________ │ __________.__ │ !ENDTABLE ├────────────┴────────────────────────┴──────────────────────────┤ │ Конец таблицы 2 │ └────────────────────────────────────────────────────────────────┘ !NEWPAGE !FIELD ussr->product ussr->byer global->sum Пользовательская функция: Если указано имя пользовательской функции, то перед каждым началом печати секции !BODY будет происходить ее вызов. Печать будет продолжаться до тех пор, пока функция пользователя возвращает значение .T., если возвращается .F. печать таблицы прекращается.