Пример создания и использования шаблона

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

При составлении отчёта по любой накладной требуется вывести на печать таблицу наименований со следующими столбцами: порядковый номер, наименование, количество, единицы измерения, цена, сумма. В папке "Шаблоны" соответствующего модуля создаем файл с названием <Шаблон списка наименований накладной.htm>. Ниже приведен код этого файла.

<html>
  <head>
    <title>Шаблон списка наименований накладной</title>
    <style>
      td.label { font: bold 8pt;
                 text-align: center;
                 border: 1px solid black;
                 border-bottom: 1.5pt solid black;
                 border-top: 1.5pt solid black; }
      td.result { text-align: right;
                  font-weight: bold;
                  border-bottom: 1.5pt solid black; }
    </style>
  </head>
  <body>
    <script language="sbis">
      пN = 0;
      пИтСуммаЦен = 0;
    </script>
    <table>
      <thead>
        <tr>
          <td class=label style="width: 7mm;">№</td>
          <td class=label>Наименование</td>
          <td class=label style="width: 15mm;">Кол-во</td>
          <td class=label style="width:15mm;">Ед.изм.</td>
          <td class=label style="width: 20mm;">Цена</td>
          <td class=label style="width: 20mm;">Сумма</td>
        </tr>
      </thead>
      <tbody>
        <tr forall="наименований">
          <td style="text-align: center;"> <field>++пn</field></td>
          <td><field>Наименование</field></td>
          <td style="text-align: right;" nowrap> <field>Кол_во</field></td>
          <td style="text-align: center;" nowrap> <field>ЕдИзмерения</field></td>
          <td><field style="precision: 2; zero-padding: on;" nowrap>Цена</field></td>
          <td><field style="precision: 2; zero-padding: on;" totals="питсуммацен" nowrap>СуммаЦен</field></td>
        </tr>
      </tbody>
      <tfoot>
        <tr>
          <td class=result colspan="5" >ИТОГО</td>
          <td class=result style="precision: 2; zero-padding: on;"><field>питсуммацен</field></td>
        </tr>
      </tfoot>
    </table>
    <div style="text-align: right; font-weight: bold;"><field>Прописью(Деньги(пИтСуммаЦен))</field></div>
  </body>
</html>

Файл шаблона по своему построению ничем не отличается от обычной отчётной формы. Он также содержит разделы Head и Body. В разделе Head внутри тегов <style></style> определяем стиль форматирования для ячеек заголовка таблицы и ячеек вывода результата.

Раздел Body начинается с элемента <script>, в котором задаются и инициализируются две глобальные переменные. Переменная <пN> нужна для вывода порядкового номера наименования накладной, а в переменной <пИтСуммаЦен> суммируются значения полей <СуммаЦен> по каждому из наименований.

Далее идет непосредственно формирование таблицы наименований. Как и в предыдущем примере, шапка таблицы описывается внутри <thead>. Тело таблицы в данном примере устроено уже иначе.

В теге строки <tr> определен параметр forall со значением "Наименований". Он является аналогом функции языка СБиС++ ДляВсех(), а в данном случае – ДляВсех(Наименований)) и позволяет перебирать все записи наименований накладной. В результате для каждой записи будет дублироваться тег строки и вложенные в него теги, т.е. каждой записи будет соответствовать своя строка в таблице отчётной формы.

Обратите внимание, что в первой ячейки строки тела таблицы выводится значение увеличенной на единицу переменной <пN>.  Для суммирования значений полей <СуммаЦен> используется параметр totals. Его значением является имя переменной, к которой каждый раз прибавляется выводимое тегом значение.

Для вывода значений типа деньги используется стилевая специализация вида <precision: 2; zero-padding: on;>. Свойство precision отвечает за количество знаков после запятой, а zero-padding – за отображение нулей справа. Только такое сочетание позволит вывести два знака после запятой, даже если там окажутся нули нули.

После тега <tfoot> идет описание итоговое строки таблицы, в которой выводится результат получившийся при суммировании в переменной <пИтСуммаЦен>.  Этот же результат выводится и после таблицы прописью.

На этом шаблон закончен. Перейдем к вопросу о его использовании в отчётных формах. Рассмотрим пример составления отчётной формы для печати приходной накладной по <F4> с использованием созданного ранее шаблона.

Кроме непосредственно таблицы наименований должны быть: заголовок с номером накладной и датой создания, шапка (продавец, склад, примечание) и подписи внизу документа. Шапку накладной и подписи формируются в отдельные таблицы.

<html>
  <head>
    <title>Приходная накладная</title>
    <style>
      .title { text-align: center;
               font: bold 10pt; }
      td.label { font-size: 8pt;
                 text-align: left; }
      td.value { text-align: left;
                 font-weight: bold;
                 border-bottom: 1pt solid black;
                 padding-left: 5mm; }
    </style>
  </head>
  <body>
    <div class="title">ПРИХОДНАЯ НАКЛАДНАЯ № <field>_Номер</field>&nbsp;от  <field>Дата</field></div>
    <table>
      <tr>
        <td class="label" style="width: 17mm;" nowrap>Продавец &nbsp;</td>
        <td class="value" style="width: 100%"><field>Лицо1.Наименование_()</field></td>
      </tr>
      <tr>
        <td class="label" nowrap>Склад &nbsp;</td>
        <td class="value"><field>Наименование</field></td>

      </tr>
        <tr>
        <td class="label">Примечание</td>
        <td class="value"><field>Примечание</field></td>
      </tr>
    </table>
    <br>
    <script language="sbis">
      НапечататьШаблон("Шаблон списка наименований накладной");
    </script>
    <br>
    <table>
      <tr>
        <td class="label" width=0% nowrap>Отпуск разрешил </td>
        <td class="value" width=40%>&nbsp;</td>
        <td class="label">&nbsp;</td>
        <td class="label" colspan=2>"К внешнему виду и комплектации товара претензий не имею."</td>
      </tr>
      <tr>
        <td class="label" colspan=4 style="height:4mm"></td>
      </tr>
      <tr>
        <td class="label">Отпустил </td>
        <td class="value">&nbsp;</td>
        <td class="label">&nbsp;</td>
        <td class="label" width=0% nowrap>Получил </td>
        <td class="value" width=40%>&nbsp;</td>
      </tr>
    </table>
    <script language="sbis">
      НапечататьОтчёт("Шаблон подписи пользователя внутренний");
    </script>
  </body>
</html>

Шаблон вызывается функцией НапечататьШаблон(), в параметре которой указывается имя файла с шаблоном без расширения.

В конце рассматриваемой отчётной формы вызывается еще один шаблон, вставляющий мелким шрифтом в правом углу отчёта сведения о программе, авторе и дате составления. Это шаблон входит в любую конфигурацию программы СБиС++ и рекомендуется вставлять данный шаблон в каждую отчётную форму, создаваемую в программе.