Модуль RsFrm


Модуль RsFrm download предназначен для печати данных в файл с использованием модуля RSODBC. Для печати создается файл шаблонов печати. Файл может содержат один или несколько шаблонов. Шаблоны представляют собой набор тегов, каждый из которых начинается с новой строки. Каждый шаблон начинается с тега FORM и заканчивается тегом END. После тега FORM должен идти тег FONT, который устанавливает базовый шрифт формы, на основании которого расчитываюся все базовые размеры формы. Далее следует произвольный набор тегов. Для связывания данных и формы используется метод RsAdd, которому в качестве параметра передается открытый Recordset. При этом первому recordset присваивается имя 'A', а последующим 'B'..'Z'. Если форма отображает таблицу TABLE, то recordset 'A' связывается с ней. Если таблицы нет, то все recordset равноправны. Положение распечатываемых данных на странице определяется тегом BOX, в котором размеры задаются в миллиметрах. А выводимые данные тегом TEXT, который помимо текста может содержать ссылки на recordset [B!DATA] или переменные бейсика [Summa], а так-же любые функции dBasic. Между этими тегами может стоять тег FONT, который задает шрифт для тега TEXT. Если форма содержит таблицу, то она разбивается на две части, до и после таблицы. Все размеры в первой части формы задаются от левого-верхнего угла листа, а во второй от нижнего левого угла таблицы. Если перед таблицей стоит тег FONT, то этот шрифт используется при печати содержания таблицы.

Пример:

FORM 5
FONT Pragmatica,8

BOX 0,0,60,5
TEXT LEFT {[B!BANK]}

BOX 0,5,40,10
TEXT LEFT {Выписка за [B!DATA]}

BOX 40,5,150,10
TEXT LEFT {Счет N [B!RS]}

BOX 0,10,40,15
FONT Pragmatica,8,Bold
TEXT LEFT {Лицево пассив}

BOX 40,10,150,15
TEXT LEFT {[B!PNAME] [B!INN]}

BOX 0,15,90,20
TEXT RIGHT {Входяще сальдо:}

BOX 90,15,150,20
TEXT RIGHT {[B!BRUB]}

TITLE DATA,20,{Дата}
TITLE BIK,25,{Код\nбанка}
TITLE RS,25,{МФО}
TITLE NOMER,20,{Номер\nдокумента}
TITLE RDEB,30,{Обороты\nдебет},1
TITLE RKRD,30,{Обороты\nкредит},1
TABLE

BOX 0,0,90,5
TEXT RIGHT {Исходящее сальдо:}

BOX 90,0,150,5
TEXT RIGHT {[B!ERUB]}

END

Теги шаблона:
BOX- установка зоны печати.
FONT- установка текущего шрифта.
TEXT- установка текста для печати.
TITLE- задание заголовка таблицы.
TABLE- таблица.

Формат файла.

Функции и методы модуля RsFrm:
Form- создает объект форма.
Close- уничтожает объект форма.
RsAdd- добавляет Recordset к форме.
Print- печатает форму на принторе.
Type- печатает на принторе или в файл.
Write- запись в файл по шаблону.

Список тегов шаблона

Назначение.Установка зоны печати.

BOX X1,Y1,X2,Y2[,STSRSBSL]

X1,Y1 - координаты левого верхнего угла в миллиметрах,
X2,Y2 - координаты правого нижнего угла в миллиметрах,
STSRSBSL - описатель рамки области.

Описание.Описатель рамки задает рамку ST-сверху, SR-справо, SB-снизу, SL-слева.

Пример:

BOX 0,10,40,15,SLST

FONT

Назначение.Установка текущего шрифта.

FONT FontName,FontSize[,Bold|Italic]

FontName - имя шрифта,
FontSize - размер шрифта,
Bold|Italic - тип шрифта.

Пример:

FONT Pragmatica,8,Bold

TEXT

Назначение.Установка текста для печати.

TEXT [LEFT|RIGHT|CENTER] {sText}

sText - строка текста.

Описание.Текст может содержать ссылки на поля recordset и на переменные dBasic. При вводе текста перевод строки игнорируется, Для ввода специальных символов используется префикс '\', т.о. '\r'-CR, '\n'-LF, '\t'-TAB.

Пример:

TEXT LEFT {Грузополучатель: [C!NAME],\n[C!ADRES]}

TITLE

Назначение.Задание колонки таблицы.

TITLE Field,Size,{sText}[,Flg]

Field - имя поля recordset,
Size - ширина колонки в миллиметрах,
sText - текст заголовка колонки,
Flg - высота подножья в строках или 0.

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

Пример:

TITLE DATA,20,{Дата}
TITLE BIK,25,{Код\nбанка}
TITLE RS,25,{МФО}
TITLE NOMER,20,{Номер\nдокумента}
TITLE RDEB,30,{Обороты\nдебет},1
TITLE RKRD,30,{Обороты\nкредит},1
TABLE

TABLE

Назначение.Таблица

TABLE

Формат файла

В результате печати в файл, создается временный файл, который сохраняется открытым и хэндел, которого возвращается методом Type. Это файл может быть отображен и отредактирован объектом VwFrm По завершению работы с ним его следует закрыть функцией FIO!Close( File ), при этом он будет автоматически уничтожен. Файл формы образован набором структур вида:

typedef struct {
  short len;
  char	com;

} FRMOBJ;,

где len - задает размер структуры в байтах, а com - ее код.

Каждая страница начинается с структуры FRMPAGE.

typedef struct {
  short len;
  char	com; /* # */ 
  BYTE	num;  - номер страницы
  int	width; - ширина страницы в пикселах
  int	depth; - высота страницы в пикселах
  int	cx; - ширина символа в пикселах
  int	cy; - высота символа в пикселах

} FRMPAGE;

Далее записывается главный фонт страницы

typedef struct {
  short len;
  char	com; /* F */
  BYTE	size; - размер фонта
  char	type; - тип фонта
  BYTE	reserv;
  char	name[1]; - имя

} FRMFONT;

Далее следует набор структур 

typedef struct {
  short len;
  char	com; /* B */
  BYTE	border; - маска описания рамки
  RECT	rc; - координаты области в пикселах

} FRMBOX;
и 

typedef struct {
  short len;
  char	com; /* T */
  char	alig;  - выравнивание (L,R,C)
  char	text[1]; - текст

} FRMTEXT;

В конце записывается структура FRMOBJ с кодом 'E'.

Для описания таблицы используется следующая последовательность.
Записывается заголовок

typedef struct {
  short len;
  char	com;	  /* H */
  BYTE	num; - номер колонки начиная с 1
  RECT	rc;	 - размер квадрата для вывода заголовка
  char	text[1]; - текст заголовка

} FRMHEAD;

Далее идут L-строки таблицы

typedef struct {
  short len;
  char	com;  /* L, R */
  BYTE	num;   - номер колонки
  WORD	format; -  выравнивание
  int	top;	-  кордината верха
  int	bottom;	 - координата низа
  char	text[1]; - текст 

} FRMLINE;

Которые завершаются R-строкой, т.е. подножьем, 
здесь значения top и bottom выдаются с некоторым отступом.

Завершает отображения таблицы структура

typedef struct {
  short len;
  char	com;  /* G */
  int	header; - высота заголовка
  int	footer; - высота подножья
  RECT	rc;

} FRMGRID;

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

Список функций и методов модуля

Form

Назначение.Создает объект форма.

Form( LONG<hWnd>, STRING<FileName>, LONG<nForm> ) LONG<pClass>

hWnd - описатель родительского окна,
FileName - имя файла шаблонов,
nForm - номер шаблона.

Описание.Функция создает объект форма. Если nForm равен 0, то строка FileName рассматривается как сама форма.

Пример:

SET FRM= RSFRM.Form( HWND, PRGDIR+"SKLAD.FRM", 1 )
IF EMPTY(FRM) THEN END
FRM.RsAdd( A )
FRM.RsAdd( B )
FRM.RsAdd( C )
Title="Счет N "+Number+" от "+DATE(Date)
IF $File THEN File= FRM.Type( Title, "FILE" )
IF NOT $File THEN File=0; FRM.Print( Title )
ERASE FRM.Close

Close

Назначение.Уничтожает объект форма.

Close

Пример.

ERASE FRM.Close

RsAdd

Назначение.Добавляет Recordset к форме.

RsAdd( OBJECT<Rs> ) BOOL

Rs - Recordset

Описание.Метод добавляет открытый Recordset к объекту форма. Каждый новый Recordset получает очередное имя в диапазоне 'A'..'H'. Первый Recordset может быть использован для печати таблицы.

Пример.

FRM.RsAdd( A )
FRM.RsAdd( B )
FRM.RsAdd( C )

Print

Назначение.Печать формы на принторе.

Print( STRING<Title> ) BOOL

Title - строка заголовка формы.

Описание.Метод печатает форму на принторе. В процессе печати на экране отображается информационное окошко со строкой Title и номером текущей страницы. Отступы от краев определяются установками принтера (SETMARGIN).

Пример.

Title="Счет N "+Number+" от "+DATE(Date)
FRM.Print( Title )

Type

Назначение.Печать на принторе или в файл.

Type( STRING<Title>, STRING<Options> ) LONG

Title - строка заголовка формы.
Options - строка опций.

Описание.Метод печатает форму на принторе или в файл. Отступы от краев определяются установками принтора (SETMARGIN). В процессе печати на экране отображается информационное окошко со строкой Title и номером текущей страницы. Строка опций может содержать:

  1. FILE - печать в файл. Если указана эта опция, то метод возваращает хэндол открытого файла формы.
  2. DEFAULT - перед печатью не выдается окошко для выбора принтора. Печать идет на устройство по умолчанию, при его отсутствии возникает ошибка. Эту опцию можно использовать при пакетной печати.
  3. TABLE - печать таблицы ввиде набора форм. Т.е. каждая строка Recordset распечатыватся с использованием шаблона формы.
  4. EVENT - задает код события, которое возникает перед печатью первой формы на первой странице. В качестве параметра пердается HDC. При этом зона занимаемая первой формой пропускается и т.о. в этой области можно, распечатать заголовок или другое. К сожалению это прием нельзя использовать при печати в файл.

Пример.

Title="Счет N "+Number+" от "+DATE(Date)
File=FRM.Type( Title, "FILE|DEFAULT" )

Write

Назначение.Запись в файл по шаблону.

Write( STRING<Dst>, STRING<Src> ) BOOL

Dst - имя файла приемника.
Src - имя файла шаблона.

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

Пример.Шаблона.

Данные о клиенте:
Телефон:[Phone]
Адрес:[Address]
Пример.Использования.
SET FRM= RSFRM.Form( HWND, "END", 0 )
IF EMPTY(FRM) THEN END
ok=FRM.Write( "Test.dst", "Test.src" )
ERASE FRM.Close

Hosted by uCoz