Пользовательские отчеты — различия между версиями

Материал из Меасофт
Перейти к: навигация, поиск
(не показано 29 промежуточных версий 4 участников)
Строка 8: Строка 8:
 
Описание формы состоит из описаний полей ввода – одно поле на одной строке. Описание каждого поля ввода состоит из четырех параметров, разделяемых запятыми:
 
Описание формы состоит из описаний полей ввода – одно поле на одной строке. Описание каждого поля ввода состоит из четырех параметров, разделяемых запятыми:
 
#input – должно присутствовать всегда – признак объявления поля ввода.
 
#input – должно присутствовать всегда – признак объявления поля ввода.
#Имя переменной, которой будет присвоен результат – рекомендуется использовать символ доллара в начале переменной для однозначной идентификации.
+
#Имя переменной, которой будет присвоен результат – рекомендуется использовать символ доллара в начале переменной для однозначной идентификации<ref>Заполнение запроса значениями происходит функцией replace, поэтому нельзя допускать, чтобы название одной переменной было подстрокой названия другой переменной. Например, если Вы создаете 2 переменные: $date и  $date1, переменная $date1 может оказаться неработоспособной, поскольку ее название включает в себя название другой переменной</ref>.
 
#Название поля ввода – текстовая строка, которая будет выведена на форме.
 
#Название поля ввода – текстовая строка, которая будет выведена на форме.
 
#Тип поля ввода. Возможные значения:  
 
#Тип поля ввода. Возможные значения:  
Строка 17: Строка 17:
 
::CHECK – вводит булево значение (отображается на форме в виде галочки)
 
::CHECK – вводит булево значение (отображается на форме в виде галочки)
 
::DATE – вводит дату
 
::DATE – вводит дату
::'''''Примечание к переменным'''''
+
::TIME – вводит время
::::''Заполнение запроса значениями происходит функцией replace, поэтому нельзя допускать, чтобы название одной переменной было подстрокой названия другой переменной. Например, если Вы создаете 2 переменные: $date и  $date1, переменная $date1 может оказаться неработоспособной, поскольку ее название включает в себя название другой переменной.''
+
::COMBO - вводит текст с возможностью выбора из выпадающего списка
 +
::COMBOLIST - вводит текст из выпадающего списка
 +
::UPDOWN - вводит целое число со стрелками уменьшения/увеличения
 +
::FILESTR - вводит имя файла для открытия файла
 +
::SAVEFILESTR - вводит имя файла для сохранения файла
 +
::CHECKLISTBOX - выводит список с галками
 +
5. Значение по-умолчанию
  
 
Пример объявления формы:
 
Пример объявления формы:
input, $zakaz, Введите номер заказа, int
+
{|
input, $date1, Введите дату начала, date
+
|<pre>input, $zakaz, Введите номер заказа, int, 555                                                                                       
input, $date2, Введите дату конца, date
+
input, $date1, Введите дату начала, date
 
+
input, $date2, Введите дату конца, date</pre>
 +
|
 +
|}
 
Каждая последующая часть является выполнением запросов к БД. Выполнение запросов бывает 2-х видов: “Query” – просто выполнение запросов без возврата таблицы -  для запросов типа insert, update, delete, и “Report” – выполнение запроса и выгрузка результатов его выполнения в Excel.<br />  
 
Каждая последующая часть является выполнением запросов к БД. Выполнение запросов бывает 2-х видов: “Query” – просто выполнение запросов без возврата таблицы -  для запросов типа insert, update, delete, и “Report” – выполнение запроса и выгрузка результатов его выполнения в Excel.<br />  
Каждая часть с запросом должна начинаться с одного из этих ключевых слов – Query или Report, а дальше через пробел пишется запрос, в котором можно использовать переменные, введенные в первой части, а так же зарезервированное выражение «%AddressQuery%», которое подставляет значение SQL-запроса из таблицы адресов на закладке «Адреса», для использования введенных пользователем фильтров.<br />
+
Каждая часть с запросом должна начинаться с одного из этих ключевых слов – Query или Report, а дальше через пробел или с новой строки пишется запрос, в котором можно использовать переменные, введенные в первой части, а также зарезервированное выражение «%AddressQuery%», которое подставляет значение SQL-запроса из таблицы адресов на закладке «Адреса», для использования введенных пользователем фильтров<ref>Если запрос «select» возвращает поле, имя которого заканчивается на «_recno», при выгрузке в Excel значения этого поля будут заменены порядковым номером записи. Поля, имена которых начинаются на тире (-) не будут выведены. Это удобно использовать для полей технического назначения, например, для сортировки</ref>. В строке Report через пробел можно указать название ярлыка листа. Если в нем запятые - текст нужно взять в одинарные кавычки. Если в доп. возможности несколько блоков Report, отчеты будут выведены в один документ Excel на разные листы.
'''''Примечание'''''
 
::''Если запрос «select» возвращает поле, имя которого заканчивается на «_recno», при выгрузке в Excel значения этого поля будут заменены порядковым номером записи.''
 
  
 
Пример полного текста дополнительной возможности:
 
Пример полного текста дополнительной возможности:
 +
{|
 +
|<pre>
 +
input, $zakaz, Введите номер заказа, int                                                                                         
 +
input, $date1, Введите дату начала, date
 +
input, $date2, Введите дату конца, date
  
input, $zakaz, Введите номер заказа, int
+
report 'Ярлык листа для отчета'
input, $date1, Введите дату начала, date
+
select 0 as '№ п/п_recno', target as 'Компания', name as 'ФИО'
input, $date2, Введите дату конца, date
+
from address  
report select 0 as '№ п/п_recno', target as ‘Компания’, name as ‘ФИО’
+
where zakaz=$zakaz
from address  
+
and date_put between $date1 and $date2</pre>
where zakaz=$zakaz
+
|
and date_put between $date1 and $date2
+
|}
 
 
 
Данный код выводит диалоговое окно для ввода пользователем исходных данных, и потом выводит отчет о корреспонденции из указанного заказа, доставленной в указанный промежуток времени.
 
Данный код выводит диалоговое окно для ввода пользователем исходных данных, и потом выводит отчет о корреспонденции из указанного заказа, доставленной в указанный промежуток времени.
  
 
Пример использования %AddressQuery% (обратите внимание, что перед текстом должна быть пустая строка, обозначающая начало второй части текста):
 
Пример использования %AddressQuery% (обратите внимание, что перед текстом должна быть пустая строка, обозначающая начало второй части текста):
 +
{|
 +
|<pre>
 +
 +
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<><nowiki>''</nowiki>) 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</pre>
 +
|
 +
|}
 +
Данный код выгружает корреспонденцию, выбранную пользователем в «Адресах», добавляя поле нумерации строк, текстовое поле с фиксированным значением, а также поле, в котором указывается пеший курьер доставляет, или водитель, и, если водитель – то указывается марка и гос. номер автомобиля.
 +
 +
Описание таблиц: Описание основных таблиц системы находится в таблице log.logfields, общий список таблиц можно посмотреть выполнив запрос «show tables from courier», а структуру конкретной таблицы – «describe table <table_name>»
 +
  
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<><nowiki>''</nowiki>) 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
 
  
Данный код выгружает корреспонденцию, выбранную пользователем в «Адресах», добавляя поле нумерации строк, текстовое поле с фиксированным значением, а так же поле, в котором указывается пеший курьер доставляет, или водитель, и, если водитель – то указывается марка и гос. номер автомобиля.
+
Пример использования типов полей ввода Combo и Combolist.
  
Описание таблиц: Описание основных таблиц системы находится в таблице log.logfields, общий список таблиц можно посмотреть выполнив запрос «show tables from courier», а структуру конкретной таблицы – «describe table <table_name>»
+
Пример использования Combolist для выбора значения из выпадающего списка приведен ниже:
 +
 
 +
{|
 +
|<pre>
 +
input, $variable, Выберите клиента, combolist, SELECT company FROM CLIENTS  where date_p>now() or Date_P is null order by COMPANY
 +
 
 +
<?>
 +
showmessage($variable);</pre>
 +
|
 +
|}
 +
 
 +
Пример использования Combo, позволяющего осуществлять выбор из выпадающего списка путем текстового ввода значения приведен ниже:
 +
 
 +
{|
 +
|<pre>
 +
input, $combo1, Выберите клиента, combo, SELECT company FROM CLIENTS  where date_p>now() or Date_P is null order by COMPANY
 +
 
 +
<?>
 +
showmessage($combo1);</pre>
 +
|
 +
|}
 +
 
 +
Пример построения предустановленного списка значений вместо запроса рассмотрен в следующем примере. Значения списка необходимо перечислить через запятую. Пример синтаксиса рассмотрен ниже:
 +
 
 +
{|
 +
|<pre>
 +
input, $combo1, Выберите клиента, combo, 'Выбор 1, Выбор 2, ''Выбор с , запятой'', ''Выбор с ''' апострофом'''</pre>
 +
|
 +
|}
 +
 
 +
Пример использования символа 'запятой' в исходном коде рассмотрен на примере ее использования дважды в коде. Первое - в названии поля ввода, второе - в самом Select-запросе для разделения двух полей "company" и "code".
 +
 
 +
{|
 +
|<pre>
 +
input, $combo1, 'Выберите клиента, какого хотите!', combo, 'SELECT company, code FROM CLIENTS  where date_p>now() or Date_P is null order by COMPANY, code'
 +
 
 +
<?>
 +
showmessage('Выбрали клиента с кодом:'+$combo1.codes);</pre>
 +
|
 +
|}
 +
 
 +
 
 +
=Примечания=
 +
<references/>

Версия 16:11, 2 октября 2020

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

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

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

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

5. Значение по-умолчанию

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

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

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

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

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'

<?>
showmessage('Выбрали клиента с кодом:'+$combo1.codes);


Примечания

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