Пользовательские отчеты

Материал из Меасофт
Перейти к: навигация, поиск

Для управления пользователями выберите пункт «Дополнительные возможности» меню «Отчеты» главного меню программы. Откроется окно дополнительных возможностей.

Для создания новой дополнительной возможности выберите пункт «Создать» в контекстном меню и введите название новой дополнительной возможности. После этого Вы переходите к редактированию исходного текста пользовательской функции.

Синтаксис дополнительных возможностей:
Код дополнительной возможности состоит из 2-х или более частей, разделяемых пустой строкой.
Первая часть – описание формы ввода данных пользователем. Если она отсутствует (форма не нужна), то перед второй частью все-равно должна быть пустая строка.
Описание формы состоит из описаний полей ввода – одно поле на одной строке. Описание каждого поля ввода состоит из четырех параметров, разделяемых запятыми:

  1. input – должно присутствовать всегда – признак объявления поля ввода.
  2. Имя переменной, которой будет присвоен результат – рекомендуется использовать символ доллара в начале переменной для однозначной идентификации[1].
  3. Название поля ввода – текстовая строка, которая будет выведена на форме.
  4. Тип поля ввода. Возможные значения:
INT – вводит целое число
STR – вводит строку
CUSTSTR – вводит строку, но не экранирует ее при подстановке в запрос
FLOAT – вводит число с плавающей точкой
CHECK – вводит булево значение (отображается на форме в виде галочки)
DATE – вводит дату
COMBO - вводит текст с возможностью выбора из выпадающего списка
COMBOLIST - вводит текст из выпадающего списка
UPDOWN - вводит целое число со стрелками уменьшения/увеличения
FILESTR - вводит имя файла


Пример объявления формы:

input, $zakaz, Введите номер заказа, int                                                                                          
input, $date1, Введите дату начала, date
input, $date2, Введите дату конца, date

Каждая последующая часть является выполнением запросов к БД. Выполнение запросов бывает 2-х видов: “Query” – просто выполнение запросов без возврата таблицы - для запросов типа insert, update, delete, и “Report” – выполнение запроса и выгрузка результатов его выполнения в Excel.
Каждая часть с запросом должна начинаться с одного из этих ключевых слов – Query или Report, а дальше через пробел пишется запрос, в котором можно использовать переменные, введенные в первой части, а также зарезервированное выражение «%AddressQuery%», которое подставляет значение SQL-запроса из таблицы адресов на закладке «Адреса», для использования введенных пользователем фильтров[2].

Пример полного текста дополнительной возможности:

input, $zakaz, Введите номер заказа, int                                                                                          
input, $date1, Введите дату начала, date
input, $date2, Введите дату конца, date

report select 0 as '№ п/п_recno', target as 'Компания', name as 'ФИО'
from address 
where zakaz=$zakaz
and date_put between $date1 and $date2

Данный код выводит диалоговое окно для ввода пользователем исходных данных, и потом выводит отчет о корреспонденции из указанного заказа, доставленной в указанный промежуток времени.

Пример использования %AddressQuery% (обратите внимание, что перед текстом должна быть пустая строка, обозначающая начало второй части текста):


report select 0 as '№ п/п_recno', 'Электротовары и аксессуары к ним' as 'Характер груза', case when k.car is not null 
then (select concat('Водитель: ',c.number, ' ', ct.name) from cars c join car_types ct on c.type=ct.code where c.code=k.car)      
else concat('Пеший: ', k.name) end as 'Вид транспорта', case when (a.number=0) and (a.strbarcode<>'') then a.strbarcode
else concat(a.zakaz, '-', a.number) end as 'Номер курьерской накладной', a.address as 'Пункт назначения',
a.rur as 'Страховая сумма в руб.'
from (%addressQuery%) a join kurier k on a.tokurier=k.code

Данный код выгружает корреспонденцию, выбранную пользователем в «Адресах», добавляя поле нумерации строк, текстовое поле с фиксированным значением, а также поле, в котором указывается пеший курьер доставляет, или водитель, и, если водитель – то указывается марка и гос. номер автомобиля.

Описание таблиц: Описание основных таблиц системы находится в таблице log.logfields, общий список таблиц можно посмотреть выполнив запрос «show tables from courier», а структуру конкретной таблицы – «describe table <table_name>»


Пример использования типов полей ввода Combo и Combolist.

Пример использования Combolist для выбора значения из выпадающего списка приведен ниже:

input, $variable, Выберите клиента, combolist, SELECT company FROM CLIENTS  where date_p>now() or Date_P is null order by COMPANY

<?>
showmessage($variable);

Пример использования Combo, позволяющего осуществлять выбор из выпадающего списка путем текстового ввода значения приведен ниже:

input, $combo1, Выберите клиента, combo, SELECT company FROM CLIENTS  where date_p>now() or Date_P is null order by COMPANY

<?>
showmessage($combo1);

Пример построения предустановленного списка значений вместо запроса рассмотрен в следующем примере. Значения списка необходимо перечислить через запятую. Пример синтаксиса рассмотрен ниже:

input, $combo1, Выберите клиента, combo, 'Выбор 1, Выбор 2, ''Выбор с , запятой'', ''Выбор с ''' апострофом'''

Пример использования символа 'запятой' в исходном коде рассмотрен на примере ее использования дважды в коде. Первое - в названии поля ввода, второе - в самом Select-запросе для разделения двух полей "company" и "code".

input, $combo1, 'Выберите клиента, какого хотите!', combo, 'SELECT company, code FROM CLIENTS  where date_p>now() or Date_P is null order by COMPANY, code'


Примечания

  1. Заполнение запроса значениями происходит функцией replace, поэтому нельзя допускать, чтобы название одной переменной было подстрокой названия другой переменной. Например, если Вы создаете 2 переменные: $date и $date1, переменная $date1 может оказаться неработоспособной, поскольку ее название включает в себя название другой переменной
  2. Если запрос «select» возвращает поле, имя которого заканчивается на «_recno», при выгрузке в Excel значения этого поля будут заменены порядковым номером записи. Поля, имена которых начинаются на тире (-) не будут выведены. Это удобно использовать для полей технического назначения, например, для сортировки