Пример печати данных выборки |
Требуется составить отчётную форму для печати данных из справочника "Сотрудники" по <Ctrl+P>. В отчёте должно быть две колонки: Ф.И.О. сотрудника и его табельный номер. При этом названия отделов должны выводиться полужирным шрифтом, а находящиеся в них сотрудники – с отступом.
Разберем получившийся код отчётной формы:
<html>
<head>
<title>Список
сотрудников</title>
</head>
<body>
<h1>Список
сотрудников</h1><br>
<table>
<thead>
<tr>
<th>Ф.И.О. сотрудника</Th>
<th
style="width: 20%;">Таб.номер</th>
</tr>
</thead>
<tbody object="">
<tr
if="ЭтоУзел()">
<td
colspan="2" style="font-weight: bold">
<field>ФИО</field> </td>
</tr>
<tr
if="!ЭтоУзел()">
<td
nowrap if="Раздел.ЭтоКорень()"> <field>ФИО</field>
</td>
<td
nowrap if="!Раздел.ЭтоКорень()">
<field>ФИО</field> </td>
<td
nowrap style="text-align: right">
<field>ТабНомер</field> </td>
</tr>
</tbody>
</table>
</body>
</html>
Начало отчётной формы ничем не отличается от предыдущих примеров. С помощью тегов заголовка <h1></h1> выводим название отчёта. Затем добавляем таблицу и формируем для нее шапку в разделе <thead>, состоящую из двух столбцов: для Ф.И.О. сотрудника и табельного номера. В данном примере задана ширина второго столбца, равная 20% от всей ширины таблицы.
Поля справочника "Сотрудники" печатаются в разделе <tbody>. В этом примере необходимо последовательно перебирать записи выборки "Сотрудники", поэтому воспользуемся параметром object. Этот параметр получает пустое значение, а значит, будет перебирать все записи текущего объекта (выборки "Сотрудники"). После того, как мы добавили этот параметр, тег <tbody> и все вложенные в него теги будут дублироваться для каждой записи выборки. При этом контекстом будет запись выборки и обращение к ее полям не требует оператора ". ".
Раздел <tbody> содержит две строки, у каждой из которых определен параметр if. Он позволяет задавать условие на языке СБиС++, при истинности которого печатается сам тег и все вложенные в него теги. В данном примере проверяется является ли текущая запись узловой или нет. Если запись является разделом, то на печать выводится только значение поля <ФИО> полужирным шрифтом. В противном случае во втором столбце выводится табельный номер сотрудника. Обратите внимание, что для любой записи будет истинно одно и только одно из условий параметра if. Таким образом, на печать всегда выведется одна строка, соответствующая текущей записи выборки.
Аналогично обстоит дело в случае вывода на печать значения поля <ФИО> для листовой записи. В параметре if тега ячейки <td> проверяется расположение записи относительно корня. Значение табельного номера выводится в любом случае, а, значит, выводящий его тег не требует никаких условий.
Сами значения полей в ячейки печатаются с помощью тега <field>. Он позволяет выводить в отчёт результат своей работы, т.е. в данном примере подставляет значения полей для каждой записи справочника "Сотрудники".