Пример печати данных выборки

Требуется составить отчётную форму для печати данных из справочника "Сотрудники" по <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="!Раздел.ЭтоКорень()"> &nbsp;&nbsp;&nbsp; <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>. Он позволяет выводить в отчёт результат своей работы, т.е. в данном примере подставляет значения полей для каждой записи справочника "Сотрудники".