Пример создания и использования шаблона |
Часто некоторые фрагменты разных отчётов строятся одинаково. Очень удобно выносить этот код в отдельный 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> от
<field>Дата</field></div>
<table>
<tr>
<td class="label"
style="width: 17mm;" nowrap>Продавец </td>
<td class="value"
style="width:
100%"><field>Лицо1.Наименование_()</field></td>
</tr>
<tr>
<td class="label"
nowrap>Склад </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%> </td>
<td
class="label"> </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"> </td>
<td
class="label"> </td>
<td class="label"
width=0% nowrap>Получил </td>
<td class="value"
width=40%> </td>
</tr>
</table>
<script language="sbis">
НапечататьОтчёт("Шаблон подписи
пользователя внутренний");
</script>
</body>
</html>
Шаблон вызывается функцией НапечататьШаблон(), в параметре которой указывается имя файла с шаблоном без расширения.
В конце рассматриваемой отчётной формы вызывается еще один шаблон, вставляющий мелким шрифтом в правом углу отчёта сведения о программе, авторе и дате составления. Это шаблон входит в любую конфигурацию программы СБиС++ и рекомендуется вставлять данный шаблон в каждую отчётную форму, создаваемую в программе.