Перейти к основному содержанию
`Ctrl`+`K`

# Шаблоны отчетов

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

## Принцип разметки

Шаблоны документов имеют одинаковую разметку. Научившись размечать шаблоны одного типа, можно создавать отчёты других типов.

Примечание

Раздел не относится к специализированным отчетам, таким как Jasper Reports.

Основным элементом разметки шаблона является `тег` — текст, окружённый спецсимволами, который управляет формированием отчёта.

Все теги имеют следующий вид: `[#{значение}#]`. Простейшим случаем является тег, возвращающий значение атрибута строки: `[#{имя атрибута}#]`.

С помощью таких тегов обозначаются места, которые должны быть заполнены данными. Если в данных не будет найден атрибут или параметр с именем `{имя атрибута}`, текст будет заменён на пустую строку.

Для печати в отчёте набора данных предназначены переменные части, позволяющие выполнять запросы и выводить в отчёт данные с изменяющимся количеством строк.

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

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

- Открывающий тег:

      [#&{произвольное системное имя}={SQL-запрос}#]

- Закрывающий тег:

      [#/{произвольное системное имя}#]

Переменная часть обязательно должна заканчиваться закрывающим тегом, системное имя которого совпадает с системным именем открывающего тега. Все системные имена открывающих тегов начинаются с символа `&`, а закрывающие теги — с символа `/`.

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

Переменные части могут быть вложенными друг в друга, образуя связку «мастер-деталь». Если из вложенного уровня (уровень «деталь») необходимо получить значение атрибута из запроса верхнего уровня (уровень «мастер»), следует использовать маркер следующего вида: [#super$sField#], где `sField` — имя атрибута из SQL-запроса верхнего уровня.

При этом стоит отметить, что маркер [#sField#] тоже сработает, если атрибут `sField` присутствует только в запросе верхнего уровня. Если же он встречается в запросе нижнего уровня, то в печатной форме будет выведено значение из него.

Совет

1. Располагайте открывающие и закрывающие теги на отдельных строках.

2. Выносите запросы переменных частей в выборки, если их длина превышает 1000 символов.

## Шаблон xlsx

Шаблоном xlsx является документ в формате `xlsx`, размеченный по общим правилам разметки шаблонов, описанным в предыдущем разделе.

`скачать пример`

## Шаблон docx

Шаблоном DOCX является документ в формате `docx`, размеченный по общим правилам разметки шаблонов.

Если создать отчёт с шаблоном DOCX и скопировать в него разметку из отчёта XLSX, результат построения будет таким же, как для XLSX. Отличия будут только в форматировании — данные будут теми же.

## Шаблон TXT

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

    [#&Person=Select * from LBR_Person#]
    Карточка читателя библиотеки №[#sMnemoCode#]
    Фамилия: [#sSecondName#] Имя: [#sFirstName#]
    Отчество: [#sMiddleName#] Дата рождения: [#dBirthDate#]
    Телефон: [#sPhone#]
    Список заказов
    Рег. №	Дата	Состояние
    [#&Orders=select o.*,
    lbr_UserOrderAPI.GetIdState_HL(o.idState) as IdState_HL
    from lbr_UserOrder o
    where o.idUser = :super$id#]
    [#nRegNumber#][#dDate#][#idState_HL#]
    [#/Orders#]
    [#/Person#]

Внимание

Открывающий тег с запросом должен располагаться в одной строке!