Представление служит для визуального представления данных, расположенных в таблицах, в любом заранее заданном его автором виде. Примером представления служат отчеты Воронка продаж и Производительность в стандартной конфигурации. Другим примером представления служит Форум из той же конфигурации. Через представление можно не только выводить данные, но и изменять их (добавлять, удалять, редактировать). Если в отчетах данные только выводятся в удобном для статистики виде (подсчет, анализ), то на Форуме они непосредственно изменяются пользователями. Представления являются довольно гибким инструментом работы с программой, вплоть до создания собственных дополнительных модулей на ее основе.
Внимание! Настраивать представления рекомендуется только программистам, обладающим необходимым знаниями в этой области. В случае отсутствия данных специалистов вы всегда можете заказать создание необходимых представлений (отчетов) в нашей компании. Для заказа сформулируйте данные в техзадании и пришлите на info@clientbase.ru.
Порядок создания представлений
1. Для создания представления необходимо зайти в меню Настройки => вкладка Конфигурация, после чего выбрать нужную вам категорию, в которой Вы хотите создать представление/отчет и перейти по ссылке Представления.

2. После нажатия кнопки "Добавить представление", Вы перейдёте в окно редактирования представлений. Первым, что необходимо сделать, это задать имя создаваемого представления.

3. Код представления состоит из двух частей — подготовки данных для отображения и собственно отображения полученных данных. Первая часть пишется на языке PHP с извлечением при необходимости данных из БД с помощью MySQL запросов, и их обработки. Вторая часть пишется в формате шаблона Smarty, основой которого является HTML.
Для того чтобы извлечь данные из таблиц программы Клиентская база, необходимо знать структуру базы данных, в частности как обращаться к конкретным таблицам и полям. Физически в базе они хранятся под номерами, а не под "русскими" именами. Например, таблица Контрагенты в стандартной конфигурации имеет номер 42, поле Название (название компании) в той же таблице — номер 435. Их истинные имена выглядят как <prefix>data42 и f435 соответственно, где <prefix> — текущий префикс таблиц. Таким образом запрос на выборку данных о контрагенте с названием «Аргумент» будет выглядеть так:
$sqlQuery = "SELECT * FROM ".DATA_TABLE."42 WHERE f435='Аргумент'";
$result = mysql_query($sqlQuery);
$row = mysql_fetch_array($result);
$company['name'] = $row['f435']; // поле Название
$company['email'] = $row['f442']; // поле E-mail
….
Здесь DATA_TABLE — константа, равная <prefix>data (текущий префикс берется из файла config.php, он задается при установке программы). Номера полей и таблиц можно посмотреть в Настройках соответствующих таблиц и полей, в адресной строке браузера (table и field соответственно)
Еще один пример (из отчета Воронка продаж). Допустим, нам надо отобразить какое количество контрагентов находится на определённой стадии переговоров с нашей фирмой. Для этого опять же необходимо извлечь данные из таблицы "Контрагенты". Номер нужной нам таблицы 42, а поля, которое содержит информацию о стадиях, 552. Также, полезно будет знать, сколько всего компаний мы обзвонили. Соответственно поле, которое содержит информацию об этом имеет номер 772.
// Выбираем из таблицы "контрагенты" все компании, которые имеют тип "Обзвон"
$sqlQuery = "SELECT count(*) as cnt FROM ".DATA_TABLE."42 WHERE f772='Обзвон'";
$result = mysql_query($sqlQuery);
$row = mysql_fetch_array($result);
$data['all'] = $row['cnt']; //Заносим полученные данные в ячейку массива $data
// Выбираем из таблицы "контрагенты" все компании, которые имеют статус "Новый"
$sqlQuery = "SELECT count(*) as cnt FROM ".DATA_TABLE."42 WHERE f552='Новый'";
$result = mysql_query($sqlQuery);
$row = mysql_fetch_array($result);
$data['new'] = $row['cnt']; //Заносим полученные данные в ячейку массива $data
Аналогично извлекаются данные из других стадий.
Необходимые нам данные из нужной таблицы мы извлекли. Теперь нужно передать их в шаблон отображения через метод $smarty->assign. Делается это так:
$smarty->assign("data", $data); //здесь $data — передаваемая в шаблон Smarty переменная, "data" — имя переменной внутри шаблона
Полученный код необходимо разместить в поле "Подготовка данных".
4. Данные мы подготовили, теперь необходимо их отобразить. Для этого нужно написать код шаблона отображения на Smarty с подстановкой переданных данных. Подробную инструкцию по созданию шаблонов Smarty вы можете найти здесь: http://www.smarty.net/manual/ru/
Ключевые моменты при создании шаблонов:
1) Основой шаблона является HTML, внутри которого содержатся инструкции Smarty в фигурных скобках (переменные, условия, циклы и т.д.)
2) Если вам необходимо использовать javascript или таблицы стилей, в которых фигурные скобки конфликтуют с синтаксисом разделителей Smarty, используйте тег {literal}. Пример из отчета Воронка продаж:
{literal}
<style>
.main {
margin-top: 25px;
margin-bottom: 25px;
}
.mainTable {
border-collapse: collapse;
text-align: center;
height: 70px;
}
</style>
{/literal}
3) Переменные в Smarty вставляются следующим образом:
{$foo} — отображение простой переменной (не массив и не объект)
{$foo[4]} — отображает 5-й элемент числового массива
{$foo.bar} — отображает значение ключа "bar" ассоциативного массива, подобно PHP $foo['bar']
{$foo.$bar} — отображает значение переменного ключа массива, подобно PHP $foo[$bar]
{$foo->bar} — отображает свойство "bar" объекта
{$foo->bar()} — отображает возвращаемое значение метода "bar" объекта
Пример из отчета Воронка продаж:
В первой таблице разместим данные о количестве компаний, которые имеют тип "Обзвон"
<table class="mainTable" align="center" cellspacing="0" cellpadding="0" style="width:70%; background-color:#F0F0F0;">
<tr>
<td>Всего: <b>{$data.all}</b></td> {* <- здесь мы вставили переменную Smarty, а это комментарий *}
</tr>
</table>
И т.д.
Полученный код размещается в поле "Отображение данных".
5. После заполнения всех полей, сохраните полученное представление. При необходимости можно также заполнить поле Справка, оно будет доступно всем пользователям, имеющим доступ к данному отчету (с версии 1.6.1)
