Создание отчётов — различия между версиями
Admin (обсуждение | вклад) |
Admin (обсуждение | вклад) (→Пример отчёта) |
||
Строка 109: | Строка 109: | ||
</pre> | </pre> | ||
− | [[Файл:period1.png]] | + | [[Файл:period1.png|center|800px]] |
=== Документация по синтаксису шаблонов === | === Документация по синтаксису шаблонов === | ||
* http://www.makotemplates.org/ | * http://www.makotemplates.org/ |
Версия 16:30, 15 марта 2011
В ExpertBilling 1.4 внедрена принципиально новая система работы с отчётами. Сейчас вы сами сможете задать их внешний вид, а, также, создавать новые виды отчётов и документов. Из тела отчёта можно обратиться к rpc серверу, выполнить выборки из базы данных и отформатировать их в удобном для вас виде.
Свои отчёты вы можете сделать интерактивными. К примеру, перед его формированием, предложить пользователю указать необходимый период времени или выбрать другие параметры.
Для генерации отчётов необходимо создать шаблоны отчётов. Сделать это можно в меню "Главное меню"->"Шаблоны документов"
В левой части окна расположены категории отчётов. Часть отчётов предзадана и мы не рекомендуем их удалять. Чтобы создать новый отчёт необходимо выбрать первый пункт в дереве типов шаблонов "-- Новый шаблон --" и указать параметры шаблона справа. Выберите тип шаблона, его имя и задайте тело шаблона. С помощью кнопки "Сохранить" на панели инструментов сохраните его. Кнопка "Предпросмотр" служит для предварительного просмотра созданного шаблона
Содержание
Краткая информация по синтаксису шаблонов
Обозначение переменных:
${value1} ${object.value}
Вызов функций и методов
${int(a)} ${object.method()}
Вычисления
${a+100} ${(1/2)+200**7}
Выполнение кода на языке python в теле отчёта
<% import datetime #получение текущего времени now = datetime.datetime.now() %>
Цикл for в теле отчёта
%for account in accounts: ${account.id}, ${account.username} %endfor
Доступ к rpc серверу из отчёта
В самом начале работы отчёта уже присутствует переменная connection, которая хранит в себе подключение к rpc серверу. Доступ к rpc серверу понадобится вам в том случае, если вы захотите получить доступ к данным, хранящимся в базе данных. Помимо доступа к данным вам будут доступны другие функции rpc сервера. Такие как сброс активной сессии на севрере доступа, активация/деактивация пользователя на сервере доступа и многие другие. Основные функции
- sql() - выполнение запроса. Функция возвращает результат вопроса в виде списка объектов записей
- get_model(id, table_name) - получить конкретную запись из указанной таблицы по её id
- get_models(table_name) - получить список записей из указанной таблицы
Пример:
<% accounts = connection.get_model("billservice_account") %> <table> <tr> <td>id</td><td>username</td> </tr> %for account in accounts: <tr> <td>${account.id}</td><td>${account.username}</td> </tr> %endfor </table>
В примере производится выборка всех аккаунтов и вывод их id и имён пользователей в виде таблицы.
Пример отчёта
Этот отчёт запрашивает период времени и потом показывает суммы, на которые был пополнен баланс у каждого пользователя.
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <% import os from CustomForms import PeriodForm child = PeriodForm(realm='ostatok') if child.exec_()!=1: return %> <% accounts = connection.get_models("billservice_account") %> <img src="${os.path.abspath("images/reports/header.png")}"> <center>Пополнения баланса за период <strong>С ${child.start_date}</strong> по <strong>${child.end_date}</strong></center> <table border=1 width=100%> <tr> <td>Имя пользователя</td><td>ФИО</td><td>Сумма</td> </tr> % for account in accounts: <% account_summ = connection.sql(r"SELECT sum(summ) FROM billservice_transaction WHERE account_id=%s and created between '%s' and '%s';" % (account.id, child.start_date, child.end_date))[0].sum or 0 %> <tr> <td>${account.username}</td><td>${account.fullname}</td><td>${account_summ}</td> </tr> % endfor </body> </html>