Поиск   |   Контакты   |   Добавить в Избранное  
Генератор отчетов Genrep
 

GenRep

Генератор отчетов из DBF,TXT,ADO в Microsoft Office MS Word, Excel, Html. Генератор не использует OLE, т.е. для формирования отчетов установка Microsoft Office MS Word,Excel не требуется

Dorep screenshot

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

Иногда чтобы быстро получить отчет Вы встаете перед проблемой - какой генератор будет совместим с Вашей программой и как его туда подключить.

Предлагаемый генератор решит следующие проблемы:
  • Быстрая и простая разработка отчета непосредственно в Microsoft Office MS Word, Excel
  • Высокая скорость генерации отчета
  • Простота языка описания шаблона отчета
  • Вызов генератора из любого языка поддерживающего механизм Windows API
  • Вызов генератора посредством функций system или WinExec
  • Использование любых существующих документов Microsoft Office MS Word,Excel для шаблонов генератора
  • Вывод отчетов в Microsoft Office MS Word в виде Rtf-файлов с возможностью редактирования и печати
  • Вывод отчетов в MS Excel в виде Xml-файлов с возможностью редактирования и печати
  • Вывод отчетов из приложений DOS работающих с DBF файлами
  • Минимальные затраты дискового пространсва при установке генератора
  • Вывод данных из файлов DBF или из файла произвольных структур подготовленных из Вашей программы

 

Высокая скорость построения отчета

Генератор отчетов Genrep написан на Visual C++ и не использует OLE интерфейс для вывода в МS Word, а работает напрямую с файлом шаблона и таблицами dbf, что позволяет получить максимальную скорость генерации отчета

 

Справка

Примеры форматов

 

Описание генератора GENREP
Оглавление
Описание генератора GENREP
Сайт
Установка
Исполняемые файлы
Файлы шаблонов
Определения функций Visual C++ библиотеки genrep.dll
Параметры
Командная строка dorep.exe
Структура файла шаблона
Имя файла источника
Формат LMK
Печатаемые блоки-выражения
Имя поля или выражение
Зарезервированные слова
Агрегатные функции
Вставка управляющих блоков RTF из выводимых полей
Пример шаблона
Формат отображения
Вызов генератора
Пример определения и вызова генератора для Visual Foxpro приложений
Пример вызова из приложения DOS при помощи dorep.exe
Пример определения и вызова генератора для Visual Basic приложений
Пример определения и вызова генератора для 1С:Предприятие
Пример определения и вызова генератора для Clarion приложений
Описание структуры файла SP

Описание генератора GENREP

 

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

  • DBF – из файлов DBF формата (поддержка Меmo-полей из файлов .FPT)
  • ADO – из источника подключенного при помощи технологии ADO DB
  • LNK – специально подготовленный текстовый файл с данными
  • SP – специальный С++ формат

Сайт

www.genrep.net
www.genrep.ru

Установка

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

 

Исполняемые файлы

Gendep.dll
Библиотека генератора отчетов, размещаемая в папке исполняемого файла Dorep.exe.
Dorep.exe
Исполняемый файл запускающий программу генерации отчета.

Файлы шаблонов

Расширение файла

Описание

SAB

Файл шаблона отчета подготовленный в непосредственно в МS Word или из программы генерации отчетов. Такой файл должен быть сохранен из МS Word в формате RTF  и в дальнейшем переименован в файл с расширением .SAB. Такой шаблон будет  обработан генератором в текстовый файл RTF

SBX

Файл шаблона отчета подготовленный в непосредственно в Excel или из программы генерации отчетов. Такой файл должен быть сохранен из Excel в формате XML  и в дальнейшем переименован в файл с расширением .SBX. Такой шаблон будет  обработан генератором в текстовый файл XML

TXS

Файл шаблона отчета подготовленный в  виде текста. Такой шаблон будет  обработан генератором в текстовый файл TXT

TXH

Файл шаблона отчета подготовленный в  виде текста. Такой шаблон будет  обработан генератором в файл c расширением HTML

 

Определения функций Visual C++ библиотеки genrep.dll

extern "C" void WINAPI AboutDLL() - О программе
extern "C" void WINAPI LoadWord(char *fname) - Загрузка WinWord (параметр имя файла)
extern "C" int WINAPI RunRepDial(CString &fname,int isd) - Отладка отчета (параметр шаблон, isd)
extern "C" int WINAPI RunReport(CString &fname,int isd) - Выполнить отчет (параметр шаблон, isd)
extern "C" int WINAPI RunRep(char * fname,int isd) - Выполнить отчет (параметр шаблон, isd)
extern "C" int WINAPI RunDial(char * fname,int isd) - Отладка отчета (параметр шаблон, isd)
extern "C" int WINAPI RunRepEx(char * fname,int isd,char * constr) - Выполнить отчет (параметр шаблон, isd, строка ADO)

Параметры

fname - полный путь к шаблону 
  (например "..\sab\formats.sab") 

isd - флаг
   isd = 0 - работа в текущей папке 
   isd = 1 - работа в папке шаблона 
   isd = 8 - не показывать прогресс 
   isd = 16 - не открывать отчет (Word,Excel) 
для объединения параметры сложить 
  isd = 1+8+16 - работа в папке шаблона,не показывать прогресс и не открывать отчет 

constr - стока коннекта ADO 
  (например Access - "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ado\access\apetest.mdb;User Id=admin;Password=;")

Командная строка dorep.exe

Выполнение отчета возможно с помощью вызова dorep.exe с параметрами 
dorep.exe "путь шаблона" "флаг
Пример: 
  dorep.exe "sql\access.sab" "1" 
  dorep.exe "sql\access.sab" "9" 

Структура файла шаблона

 

Файл-шаблон - это обычный файл формата приложения, но со встроенными управляющими блоками. Эти управляющие блоки заключены в квадратные скобки. Управляющие блоки делятся на 2 вида:

Не печатаемые управляющие блоки
Управляющие блоки предназначены для того, чтобы файл отчета "понял" откуда собственно следует брать данные и как их группировать.
Управляющие блоки обязательны должны быть парными. Т.е. должен быть открывающий управляющий блок и закрывающийуправляющий блок. Открывающий управляющий блок начинается с символа "меньше" (<), а закрывающий управляющий блок должен завершаться символом "больше" (>). Для удобства распознования, рекомендуется распологать управляющие блоки в отдельных строках отчета. Т.е. в общем случае это выглядит так:
Тело отчета
[<НаименованиеБлока] - открытие управляющего блока
Тело отчета
[НаименованиеБлока>] - закрытие управляющего блока
Тело отчета
Всего предусмотрено 3 типа управляющих блоков:

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

Таким образом, в самом общем виде отчет выглядит следующим образом
Текст до того, как информация будет взята из какой-либо таблицы (заголовок отчета)
[ <Table1.dbf]
      Заголовочная часть при открытии таблицы Table1.dbf
[<FieldGroup]
      Заголовочная часть при открытии группы по полю FieldGroup таблицы Table1.dbf
[<FldSubGrp]
      Заголовочная часть при открытии группы по полю FldSubGrp таблицы Table1.dbf
[<Detal]
      собственно отображение содержимого таблицы Table1.dbf
[Detal>]
      Заключительная часть при закрытии группы по полю FldSubGrp таблицы Table1.dbf. Отображение итогов по данной группе
[FldSubGrp>]
      Заключительная часть при закрытии группы по полю FieldGroup таблицы Table1.dbf. Отображение итогов по данной группе
[FieldGroup>]
      Заключительная часть при закрытии таблицы Table1.dbf. Отображение итогов по таблице Table1.dbf
[Table1.dbf>]
      Текст после того, как информация будет взята из таблицы Table1.dbf, но до того, как информация будет взята из таблицы Table2.dbf
[<Table2.dbf]
      Заголовочная часть при открытии таблицы Table2.dbf
      ...
      Заключительная часть при закрытии таблицы Table2.dbf. Отображение итогов по таблице Table2.dbf
[Table2.dbf>]
      Текст после того, как информация будет взята из какой-либо таблицы (подвал отчета)
Важные замечания

  • Недопустимо делать "пересечение" блоков - т.е. и "открытие" и "закрытие" блока должны происходить только внутри таких же "скобок" другого блока. Блоки обязательно должны быть вложены друг в друга как матрешки.
  • Недопустимо открыть внутри уже открытого табличного блока другой табличный блок - т.е. внутри информации из одной таблицы нельзя вывести информацию из другой. Только по очереди.
  • В блоках описания отчета может отсутствовать блок детализации ("Detail"). В этом случае отчет все равно пройдет по всем записям указанной таблицы и распечатает исключительно заключительную часть при закрытии таблицы. Т.е. в нем можно указать итоговую часть отчета.
  • Если блок отчета содержит блоки группировок, то блок детализации ("Detal") обязательно должен присутствовать.

Управляющие блоки рекомендуется распологать на отдельных строках исключительно для удобства. Однако в случае необходимости их можно расположить и в одну строку, например:
[<Table1.dbf] 
  Итого по таблице Table1.dbf 
[Table1.dbf>]
   дополнительный текст
[<Table2.dbf]
   Итого по таблице Table2.dbf
[Table2.dbf>]

 

Имя файла источника 

В блоке указания источника необходимо указать файл источника по которому будет строится отчет. Для источника
DBF,LMK, SP – это имя самого файла
Для источника ADO дложен быть создан специальный файл подключения с расширением .CON

Например файл access.con:

[genrep]
ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ado\access\apetest.mdb;User Id=admin;Password=;"
Command="select * from products"

Тело отчета
[<access.con]
Тело отчета
[access.con>]
Тело отчета

 

Формат LMK

Данные в файле записываются в виде текстовых строк. Каждая строка соответствует записи данных. После каждой строки ставится перевод каретки. Данные вводятся в виде:

\:ИмяПоля1:cЗначение\:ИмяПоля2:cЗначение\: ИмяПоля3:cЗначение …
\:ИмяПоля1:cЗначение\:ИмяПоля2:cЗначение\: ИмяПоля3:cЗначение
.
\:ИмяПоля1:cЗначение\:ИмяПоля2:cЗначение\: ИмяПоля3:cЗначение
<EOF>

Печатаемые блоки-выражения

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

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

[%Формат отображения:Аггрегатная функция:Имя поля или выражение]

Здесь обязательным является только Имя поля или выражение, а Формат отображения и Аггрегатная функция можно и не указывать. Они используются только по мере необходимости.
Если не задан Формат отображения, то используется некий формат по-умолчанию
Аггрегатная функция используются для подсчета итогов. Т.е. это функции типа "подсчитать сумму по полю", "подсчитать количество записей". Следует иметь в виду, что в результате использования аггрегатных функций итоговое значение принимает тип Double, т.е. как правило необходимо использовать Формат отображения в паре с Аггрегатными функциями
Выражение, которое может использоваться вместо имени поля обязательно должно выдавать числовой результат. С другими типами выражений данный генератор не работает. Это не относится собственно к полям таблицы. Поля могут иметь любой допустимый тип данных. Кроме того, в качестве имен полей или выражений могут выступатьзарезервированные слова

Имя поля или выражение

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

Конструкция

Пример

Описание

+

[Amount+10]

Сложение

-

[Amount-10]

Вычитание

/

[Amount/10]

Деление

*

[Amount*10]

Умножение

%

[Amount%3]

Целочисленный остаток от деления. Если в данном примере Amount=8, то 8%3=2.
Замечание - данный символ работает только с целой частью числа, т.е. если написать выражение 5.2%2.6, то это будет интерпретировано как 5%2=1

$

[Platezh$1]

Округление до указанного количество знаков после запятой. Если в данном примере Platezh=5.26, то 5.26$1=5.30 Если указанное количество знаков до которого следует округлить имеет отрицательное значение, то предполагается, что округлять следует до целой части.

#

[Platezh#2]

Деление с округлением результата до целого в большую сторону. Если в данном примереPlatezh=4.01, то 4.01#2=3.00

|

[Platezh|2]

Деление с округлением результата до целого в меньшую сторону. Если в данном примереPlatezh=4.99, то 4.99|2=2.00

( )

[Platezh/(Platezh+Nalog)*100]

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

IF(Усл;Выр;Выр)

[IF(Platezh>0;Nalog/Platezh;0)]

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

Следует обратить особое внимание на то, что использование внутри квадратных скобок пробелов недопустимо. Это приведет к неверному распознаванию выражения и как следствие - отсутствию результата.
Условный оператор, как впрочем и любое выражение, можно использовать вместе с функциями агрегирования, например, подсчитать только те записи, где значение поля Amount>10
[SUM:IF(Amount>10;1;0)]
Разумеется, можно использовать и формат для отображения только целой части
[%.0f:SUM:IF(Amount>10;1;0)]
Обратите внимание, что даже если используется функция, которая возвращает целую часть, то это никак не влияет на формат вывода результата. Например, 4.01#2=3.00. Т.е. для отображения результат в нужном формате необходимо использовать опции формата.
В качестве имени поля могут выступать также зарезервированные слова

Зарезервированные слова

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


Слово

Назначение

[_page_]

Вставка разрыва страницы

[_date_]

Вставка текущей даты в виде 31.12.01

[_time_]

Вставка текущего времени в виде 01:45

Агрегатные функции

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


Функция

Пример

Описание

CNT

[CNT:Amount]

Количество не повторяющихся значений в данном поле или выражении. В примере подсчитывается количество не повторяющихся значений в поле Amount.
Для пояснения того, что имеется в виду под словами "не повторяющиеся значения" предположим, что в поле Amount в порядке следования есть следующие значения: 1,1,1,2,2,3,1,1. В результате использования функции CNT мы получим значение 4. Т.е. значение счетчика увеличивается на 1 только в тот момент, когда последующее значение отлично от предыдущего. Эту функцию удобно использовать для подсчета количества группировок по какому-либо полю.

CNTR

[CNTR:Amount]

Количество записей. Т.е. общее количество значений в поле Amount вне зависимости от уникальности этих значений.

SUM

[SUM:Platezh-Nalog]

Сумма по данному полю или выражению. В примере производится суммирование значений выражения (Platezh-Nalog), т.е. "чистый" платеж без налога.

Следует иметь в виду, что вне зависимости, от типа данных, использованных в указанном поле или выражении по которым производится расчет, итоговое выражение будет иметь тип Double для того, чтобы с запасом "перекрыть" все возможные значения, которые могут появиться в результате суммирования. Это значит, что у итога появиться дробная часть, даже если Вы складывали целочисленные значения.
Для того, чтобы "подавить" не нужное отображение дробной части следует использовать опцию "Формата" в выражении, например:
[%.0f:CNTR:Amount]
Разумеется, можно использовать и формат для отображения целочисленных значений
[%i:CNTR:Amount]
Но в этом случае Вы должны отдавать себе отчет, что может произойти переполнение данного типа, т.е. в результате подсчета общее количество может оказаться больше чем поддерживает данный целочисленный формат.
Для подсчета количества записей можно использовать и функцию SUM в следующем виде [SUM:1]. Или при суммировании по условию, например, подсчитать количество записей, где значение поля Amount>10 будет выглядеть так [SUM:IF(Amount>10;1;0)]

 

Вставка управляющих блоков RTF из выводимых полей

При выводе полей в отчет, можно вывести управляющую последовательность rtf используя в поле управляющий тег {bsl}.
Например: {bsl}page  {bsl}line  {bsl}par

 

Пример шаблона

[personal.sp>]

шаблон

Формат отображения

Данные можно отображать не только "как есть", но и "как надо", для чего используются специальные форматы отображения. В данном генераторе отчетов можно использовать форматы отображения языка программирования "Си", формат встроенного языка программирования "СП Бухгалтерия", а также ряд дополнительных форматов, разработанных специально для данного генератора.
Внимание - при вводе формата следует учитывать регистр букв. Т.е. имеет принципиальное значение большие или маленькие буквы. Это единственное место в данном генераторе отчетов, где учитывается регистр букв. В остальных местах регистр букв значения не имеет.
В самом общем виде формат отображения также имеет свой формат:
%[flags] [width] [.precision] [{h | l | I64 | L}]type
Т.е. если использовать формат отображения, то обязательным для использования является смвол "%" и единственная буква, отображающая тип данных (type), например %f Все другие части контролируют другие аспекты формата отображения, такие как:
flags - символ или набор символов, которые управляют выравниванием, отображением знака, фактом отображения ведущих нулей. Допустимо использовать комбинацию флагов
width - минимальное количество отображаемых символов.
.precision - максимальное количество отображаемых символов всего или части значения, или минимальное значение для целочисленных типов данных
{h | l | I64 | L} - это опции определяющие максимально допустимые размерности для некоторых типов полей
type - собственно буква, обозначающая тип выходных данных. Единственный обязательный параметр из всех перечисленных
Форматы отображения языка программирования "Си" представлены на дополнительном файле Format.rtf. Здесь будет рассмотрена только наиболее общеупотребительная часть значений указанных флагов этого языка
Некоторые значения опции type и что именно у них ограничивает опция .precision


Обозначение

Тип

Влияние .precision(т.е. число после точки в выражении формата)

d

Целое

Минимальное количество знаков. Недостающее добавляется слева нулями. Не ограничивает число, если количество знаков больше указанного

X

Целое в 16-ричном формате

Минимальное количество знаков. Недостающее добавляется слева нулями. Не ограничивает число, если количество знаков больше указанного

f

Дробное

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

s

Символьная

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

Некоторые значения опции Flags


Значение

Описание

-

Выравнивание значения по левому краю. По умолчанию (т.е. если знак "минус" не указан) выравнивание происходит по правому краю

+

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

0

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

Пробел

В данном генераторе отчетов наличие пробела указывает на то, что нулевые значения печатать не надо.

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


Пример

 

Описание

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

[%.2f:Platezh]

 

Отобразить только 2 знака после запятой не ограничивая количество знаков в целой части. При этом нулевые значения обязательно отображать.

[% .2f:Platezh]

*

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

[%.0f:Platezh]

 

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

[%.2f руб:Platezh]

 

Отобразить только 2 знака после запятой не ограничивая количество знаков в целой части. При этом нулевые значения обязательно отображать, а после числа добавить слово " руб". В приципе, того же самого результата можно добиться используя следующий формат вывода [%.2f:Platezh] руб

[%5.2f:Platezh]

 

Отобразить только 2 знака после запятой при этом общее количество отображаемых знаков (включая запятую) не должно быть меньше 5. Т.е. значения больше 99.99 благополучно отобразятся, а если количество знаков меньше 5, то недостающее будет дополнено ведущими пробелами (слева). Целую часть в значении формата можно использовать для выравнивания числовых данных при шрифте Courier. Например, формат[%20.2f:Platezh] означает, что под число отводится минимум 20 символов, причем недостающее будет дополнено пробелами слева, т.е. выравнивание по правому краю.

[%05.2f:Platezh]

 

Отобразить только 2 знака после запятой при этом общее количество отображаемых знаков (включая запятую) не должно быть меньше 5. Т.е. значения больше 99.99 благополучно отобразятся, а если количество знаков меньше 5, то недостающее будет дополнено не пробелами, как в предыдущем случае, а ведущими нулями. Напимер, число 1.2 будет отображено как 01.20

[%-5.2f:Platezh]

 

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

[%SP:Platezh]

*

Отобразить указанную сумму прописью (словами) на русском языке. Т.е. вместо числа 5.25 будет выведено "Пять рублей 25 копеек"

[%SPU:Platezh]

*

Отобразить указанную сумму прописью (словами) на украинском языке. Т.е. вместо числа 5.25 будет выведено "П'ять грiвней 25 копiйок"

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

[%d:Amount]

 

Отобразить "как есть". Т.е. как целое число

[%+d:Amount]

 

Отобразить знак перед числом, даже если число положительное. Например, при значенииAmount=10 будет отображено +10

[%.10d:Amount]

 

Если количество знаков в числе меньше 10, то недостающее дополнить слева нулями

[%010d:Amount]

 

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

[%XH:Amount]

 

Отобразить значение Amount в 16-ричной системе исчисления, дописав справа символ "Н". Например, при значении Amount=123 отобразится значени 7BH

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

[%s:Text]

 

Отобразить текстовую строку "как есть" с ведущими и концевыми пробелами (если есть)

[%.14s:Text]

 

Отобразить только первые 14 символов текстовой строки, а остальные отбросить

[%60.14s:Text]

 

Отобразить только первые 14 символов текстовой строки, а остальные отбросить. После чего дополнить полученный результат до 60 символов пробелами слева (т.е. сделать "выравнивание" по правому краю)

Дата и время
По умолчанию, поля типа Date отображаются в формате ДД.ММ.ГГГГ. т.е. например 31.12.2001. К отображению даты и времени относятся также некоторые зарезервированные слова.

[%dt:Date]

*

Отобразить дату в формате ДД.ММ.ГГГГ т.е. например 31.12.2001

[%dt2:Date]

*

Отобразить дату в формате ДД.ММ.ГГ т.е. например 31.12.01

[%dts:Date]

*

Отобразить дату в виде строки, т.е. например "31 декабря 2001 г"

[%tm:Amount]

*

Исходя из предположение, что имеющееся целочисленное значение - это количество минут отобразить это число как время. Например, при значении Amount=345 отобразится05:45

Логическое
По умолчанию, если логическое поле имеет значени "Истина", то оно отображается в виде символа звездочки "*", если "Ложь", то никак не отображается

[%lg1:Flag]

*

"Истина" отображается как слово "Да", а "Ложь" как слово "Нет"

[%lg2:Flag]

*

"Истина" отображается как символ "+", а "Ложь" как символ "-"

 

Вызов генератора

Пример определения и вызова генератора для Visual Foxpro приложений

 

DECLARE Integer RunRep IN genrep.dll AS Runr String @cName, Integer Isd 
DECLARE Integer RunDial IN genrep.dll AS Rund String @cName, Integer Isd =Runr('namefile.sab' , 0+1) 

=Rund('namefile.sab' , 0) && работа в текущей папке 
=Rund('namefile.sab' , 1) && работа в папке шаблона 
=Runr('namefile.sab' , 0+16) && не вызывать Word 
=Runr('namefile.sab' , 0+8+16) && не вызывать Word, не показывать Progress Bar

* ADODB 
DECLARE Integer RunRepEx IN genrep.dll AS RunRepEx String @cName, Integer Isd , String @ConStr 
RunRepEx("..\sql\access.sab",1,"Provider=VFPOLEDB;Data Source=sql\nort\northwind.dbc;Collating Sequence=machine;") 
RunRepEx("..\sql\products.sbx",1,"Provider=VFPOLEDB;Data Source=sql\nort\northwind.dbc;Collating Sequence=machine;")

vfp code

Пример вызова из приложения DOS при помощи dorep.exe

 ! run "dorep.exe C:\genrep\sab\Standart\dbf\formats.sab"

Пример определения и вызова генератора для Visual Basic приложений

Public Declare Function RunDial Lib "genrep.dll" (ByVal SabName As String, ByVal nFlag As Integer) As Integer
Public Declare Function RunRep Lib "genrep.dll" (ByVal SabName As String, ByVal nFlag As Integer) As Integer

'Запуск отчета в режиме диалога
Public Sub Genrep_RunDialog(sab As String)
ret = RunDial(sab, 1)
End Sub
'Запуск отчета на выполнение
Public Sub Genrep_RunReport(NameSab As String, ByVal nFlag As Integer)
ret = RunRep(NameSab, nFlag)
End Sub

Пример определения и вызова генератора для 1С:Предприятие

Перем КаталогGenrep;

Процедура Сформировать()
//Выполнить отчет
ЗапуститьПриложение(КаталогGenrep+"dorep.exe "+сокрлп(ФайлШаблона));
КонецПроцедуры 

Процедура ЗапуститьDoRep()
//Редактировать шабон
ЗапуститьПриложение(КаталогGenrep+"dorep.exe ");
КонецПроцедуры 

КаталогGenrep = "C:\genrep\";
ФайлШаблон = "Nomen.sab";

1c code

Пример определения и вызова генератора для Clarion приложений

 MODULE('GenRep.lib') 
AboutDLL,Name('AboutDLL') 
LoadWord(*CString),Pascal,Raw,Name('LoadWord') 
! RunRepDial(*CString,Signed),Signed,Pascal,Raw,Name('RunRepDial') 
RunDial(*CString,Signed),Signed,Pascal,Raw,Name('RunDial') 
RunRep(*CString,Signed),Signed,Pascal,Raw,Name('RunRep') 
! RunReport(*CString,Signed),Signed,Pascal,Raw,Name('RunReport') 
End 

 

Описание структуры файла SP

Специальный формат файла данных СП-Бухгалтерия:

 

#define  SPB_MARKA  "SPB-DOC1"  // Маркер
#define  MAX_NAME            40         // Максимальная длина наименования поля
#define  MAX_FILE_COUNT 255             // Максимальное количество полей в записи
#define  FTYP_TEXT           1          // тип char
#define  FTYP_INT        2        // тип long
#define  FTYP_DOUB       3        // тип double

#define  CP_DOS      866          // кодовая страница
#define  CP_WIN      1251         // кодовая страница

// Заголовок файла
class RepZag
{
 public:
       char    marka[sizeof(SPB_MARKA)]; // Маркер "SPB-DOC1"     
       WORD    fcount;                // Количество полей
       DWORD   offset;                // Cмещение 1-ой записи
       WORD    len;                   // длина записи
        WORD    cpp;                        // кодовая страница
       char    rezerv[16];               // Резерв   
};

// Описание поля файла
class RepFld
{
 public:
       char name[MAX_NAME];       // Наименование поля
       BYTE type;          // Тип поля (1,2 или 3)
       WORD offset;        // Cмещение поля в записи
       WORD len;           // Длина поля в записи
};

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

Поддерживаются поля следующих типов: char, long, double. Длина полей типа char должна бать фиксированной.

Пример для вывода структуры:

class Zap
{
char   cName[50];         
double dCumma;                   
double dCount;            
int    iDate;             
};

Файл:
sizeof(RepZag)
sizeof(RepFld)*fcount
sizeof(Zap)
sizeof(Zap)
sizeof(Zap)
...
...
...
sizeof(Zap)

 

Дата в SP-файле может быть записана в виде intили в виде char
Преобразование даты из intiDt в текст произойдет по следующему правилу:
                          
sprintf(cDate,"%.2u/%.2u/%.2u", iDt%32,(iDt>>5)%16,(( iDt >>9)+10)%100);

  iDt%32         – дeнь
 (iDt>>5)%16     – месяц
((iDt>>9)+10)%100) - год

 

Описание в формате CHM