Пользовательские отчеты — различия между версиями
Johny (обсуждение | вклад) |
Sammy (обсуждение | вклад) м |
||
(не показаны 24 промежуточные версии 3 участников) | |||
Строка 17: | Строка 17: | ||
::CHECK – вводит булево значение (отображается на форме в виде галочки) | ::CHECK – вводит булево значение (отображается на форме в виде галочки) | ||
::DATE – вводит дату | ::DATE – вводит дату | ||
+ | ::DATE2 – вводит дату, поле разрешено не заполнять | ||
+ | ::TIME – вводит время | ||
::COMBO - вводит текст с возможностью выбора из выпадающего списка | ::COMBO - вводит текст с возможностью выбора из выпадающего списка | ||
::COMBOLIST - вводит текст из выпадающего списка | ::COMBOLIST - вводит текст из выпадающего списка | ||
::UPDOWN - вводит целое число со стрелками уменьшения/увеличения | ::UPDOWN - вводит целое число со стрелками уменьшения/увеличения | ||
− | + | ::FILESTR - вводит имя файла для открытия файла | |
+ | ::SAVEFILESTR - вводит имя файла для сохранения файла | ||
+ | ::CHECKLISTBOX - выводит список с галками | ||
+ | ::MEMO- многострочное поле для ввода текста | ||
+ | 5. Значение по-умолчанию | ||
Пример объявления формы: | Пример объявления формы: | ||
{| | {| | ||
− | |<pre>input, $zakaz, Введите номер заказа, int | + | |<pre>input, $zakaz, Введите номер заказа, int, 555 |
input, $date1, Введите дату начала, date | input, $date1, Введите дату начала, date | ||
input, $date2, Введите дату конца, date</pre> | input, $date2, Введите дату конца, date</pre> | ||
Строка 30: | Строка 36: | ||
|} | |} | ||
Каждая последующая часть является выполнением запросов к БД. Выполнение запросов бывает 2-х видов: “Query” – просто выполнение запросов без возврата таблицы - для запросов типа insert, update, delete, и “Report” – выполнение запроса и выгрузка результатов его выполнения в Excel.<br /> | Каждая последующая часть является выполнением запросов к БД. Выполнение запросов бывает 2-х видов: “Query” – просто выполнение запросов без возврата таблицы - для запросов типа insert, update, delete, и “Report” – выполнение запроса и выгрузка результатов его выполнения в Excel.<br /> | ||
− | Каждая часть с запросом должна начинаться с одного из этих ключевых слов – Query или Report, а дальше через пробел пишется запрос, в котором можно использовать переменные, введенные в первой части, а также зарезервированное выражение «%AddressQuery%», которое подставляет значение SQL-запроса из таблицы адресов на закладке «Адреса», для использования введенных пользователем фильтров<ref>Если запрос «select» возвращает поле, имя которого заканчивается на «_recno», при выгрузке в Excel значения этого поля будут заменены порядковым номером записи</ref>. | + | Каждая часть с запросом должна начинаться с одного из этих ключевых слов – Query или Report, а дальше через пробел или с новой строки пишется запрос, в котором можно использовать переменные, введенные в первой части, а также зарезервированное выражение «%AddressQuery%», которое подставляет значение SQL-запроса из таблицы адресов на закладке «Адреса», для использования введенных пользователем фильтров<ref>Если запрос «select» возвращает поле, имя которого заканчивается на «_recno», при выгрузке в Excel значения этого поля будут заменены порядковым номером записи. Поля, имена которых начинаются на тире (-) не будут выведены. Это удобно использовать для полей технического назначения, например, для сортировки</ref>. В строке Report через пробел можно указать название ярлыка листа. Если в нем запятые - текст нужно взять в одинарные кавычки. Если в доп. возможности несколько блоков Report, отчеты будут выведены в один документ Excel на разные листы. |
Пример полного текста дополнительной возможности: | Пример полного текста дополнительной возможности: | ||
Строка 38: | Строка 44: | ||
input, $date1, Введите дату начала, date | input, $date1, Введите дату начала, date | ||
input, $date2, Введите дату конца, date | input, $date2, Введите дату конца, date | ||
− | report select 0 as '№ п/п_recno', target as 'Компания', name as 'ФИО' | + | |
+ | report 'Ярлык листа для отчета' | ||
+ | select 0 as '№ п/п_recno', target as 'Компания', name as 'ФИО' | ||
from address | from address | ||
where zakaz=$zakaz | where zakaz=$zakaz | ||
Строка 60: | Строка 68: | ||
Данный код выгружает корреспонденцию, выбранную пользователем в «Адресах», добавляя поле нумерации строк, текстовое поле с фиксированным значением, а также поле, в котором указывается пеший курьер доставляет, или водитель, и, если водитель – то указывается марка и гос. номер автомобиля. | Данный код выгружает корреспонденцию, выбранную пользователем в «Адресах», добавляя поле нумерации строк, текстовое поле с фиксированным значением, а также поле, в котором указывается пеший курьер доставляет, или водитель, и, если водитель – то указывается марка и гос. номер автомобиля. | ||
− | Описание таблиц: Описание основных таблиц системы находится в таблице | + | Описание таблиц: Описание основных таблиц системы находится в таблице `schema`.`logfields`, общий список таблиц можно посмотреть выполнив запрос «show tables from courier», а структуру конкретной таблицы – «describe table <table_name>» |
+ | |||
+ | |||
+ | |||
+ | Пример использования типов полей ввода Combo и Combolist. | ||
+ | |||
+ | Пример использования 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/> | <references/> |
Текущая версия на 16:02, 25 апреля 2024
Для управления пользователями выберите пункт «Дополнительные возможности» меню «Отчеты» главного меню программы. Откроется окно дополнительных возможностей.
Для создания новой дополнительной возможности выберите пункт «Создать» в контекстном меню и введите название новой дополнительной возможности. После этого Вы переходите к редактированию исходного текста пользовательской функции.
Синтаксис дополнительных возможностей:
Код дополнительной возможности состоит из 2-х или более частей, разделяемых пустой строкой.
Первая часть – описание формы ввода данных пользователем. Если она отсутствует (форма не нужна), то перед второй частью все-равно должна быть пустая строка.
Описание формы состоит из описаний полей ввода – одно поле на одной строке. Описание каждого поля ввода состоит из четырех параметров, разделяемых запятыми:
- input – должно присутствовать всегда – признак объявления поля ввода.
- Имя переменной, которой будет присвоен результат – рекомендуется использовать символ доллара в начале переменной для однозначной идентификации[1].
- Название поля ввода – текстовая строка, которая будет выведена на форме.
- Тип поля ввода. Возможные значения:
- INT – вводит целое число
- STR – вводит строку
- CUSTSTR – вводит строку, но не экранирует ее при подстановке в запрос
- FLOAT – вводит число с плавающей точкой
- CHECK – вводит булево значение (отображается на форме в виде галочки)
- DATE – вводит дату
- DATE2 – вводит дату, поле разрешено не заполнять
- TIME – вводит время
- COMBO - вводит текст с возможностью выбора из выпадающего списка
- COMBOLIST - вводит текст из выпадающего списка
- UPDOWN - вводит целое число со стрелками уменьшения/увеличения
- FILESTR - вводит имя файла для открытия файла
- SAVEFILESTR - вводит имя файла для сохранения файла
- CHECKLISTBOX - выводит список с галками
- MEMO- многострочное поле для ввода текста
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 |
Данный код выгружает корреспонденцию, выбранную пользователем в «Адресах», добавляя поле нумерации строк, текстовое поле с фиксированным значением, а также поле, в котором указывается пеший курьер доставляет, или водитель, и, если водитель – то указывается марка и гос. номер автомобиля.
Описание таблиц: Описание основных таблиц системы находится в таблице `schema`.`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); |
Примечания
- ↑ Заполнение запроса значениями происходит функцией replace, поэтому нельзя допускать, чтобы название одной переменной было подстрокой названия другой переменной. Например, если Вы создаете 2 переменные: $date и $date1, переменная $date1 может оказаться неработоспособной, поскольку ее название включает в себя название другой переменной
- ↑ Если запрос «select» возвращает поле, имя которого заканчивается на «_recno», при выгрузке в Excel значения этого поля будут заменены порядковым номером записи. Поля, имена которых начинаются на тире (-) не будут выведены. Это удобно использовать для полей технического назначения, например, для сортировки