ОТЧЕТЫ - мануал по созданию своего отчета

Описание, назначение, скриншоты, видео, часто задаваемые вопросы и т.п.

ОТЧЕТЫ - мануал по созданию своего отчета

Сообщение tretyakovmax » 27 июл 2015, 07:30

Отчет может быть создан практически в любой 32-битной версии Delphi или иного компилятора (т.к. представляет собой обычный dll). В запросе к БД недопустимы какие-либо действия по изменению или удалению информации - такие запросы вызовут ошибку.

Для примера, выложены исходники одного из стандартных отчетов (для Delphi):
r_need_DEMO.zip
(2.44 KiB) Скачиваний: 432


Внтури есть блок констант, в котором и производятся все настройки отчета:

RI_NAME - название, котрое будет отображено в списке;

RI_VERSION - внутреняя версия отчета, лучше оставить как есть;

RI_DBMAJORVERSION, RI_DBMINORVERSION, RI_DBBUILDVERSION - версия БД, с которой отчет должен работать. Последняя версия - 1.2.3;

RF_FIELDS_COUNT - количество отображаемых в отчете колонок;

SQL_FIELDS_COUNT - количество полей, возвращаемых запросом к БД этого отчета;

RF_FIELDS - названия колонок отчета, пишем столько названий, сколько надо;

RFST_FIELDS - тип сортировки для колонок отчета - количество должно соответствовать количеству колонок;

Доступные такие типы сортировки:
COLUMNDATATYPE_DEFAULT - сортировка по умолчанию (как текст) - 1, 10, 2, 24;
COLUMNDATATYPE_INT - сортировать как целые числа - 1, 2, 10, 24;
COLUMNDATATYPE_FLOAT - сортировать как реальные числа - 1, 2, 10, 24;
COLUMNDATATYPE_DATE - сортировать как дату;

RFDW_FIELDS - ширина колонок отчета - количество должно соответствовать количеству колонок;

R_SQLFITOREPFI - соответствие данных из полей запроса колонкам отчета;
Тоесть, какое поле из SQL-запроса в какой колонке отчета отображать. В этом массиве индексы соответсвуют номерам полей SQL-запроса, а значения - номерам полей самого отчета. Все номера начинаются с нуля. И самое главное - в одном поле отчета может быть объединено несколько полей из SQL-запроса (например, значение и единица измерения номинала или количества).

R_SQLFIPT - тип объединения данных из полей SQL-запроса в колонки отчета;
В этом массиве прописано, как будут объединятся поля SQL-запроса.

Доступные такие типы объединения:
SQLTF_ANYDATA - отображать любые непустые данные с заменой на последние непустые (по умолчанию - отображаем что есть). Например, если в полях 0 и 1 запроса у нас есть значения, при таком типе объединения полей будет отображено непустое значение из последнего объединяемого поля (т.е. из поля 1). Или из поля 0, если 1, к примеру - пустое;
SQLTF_UPDATE - отображать только последние, даже если они пусты. Например, если в поле 0 запроса у нас есть значение, а в поле 1 - пусто, при при таком типе объединения полей будет отображено значение из последнего объединяемого поля, независимо от того, если там что-то или пусто;
SQLTF_STDUNION - объединять стандартно (через пробел). Значения всех полей объединяются через пробел - "Поле0 Поле1 Поле2";
SQLTF_LISTUNION - объединять как список (через запятую). Значения всех полей объединяются через запятую - "Поле0,Поле1,Поле2";
SQLTF_ONESTRUNION - объединять в одну строку (без пробелов). Значения всех полей объединяются в сплошную строку, без каких-либо знаков препинания - "Поле0Поле1Поле2";

Запрос ввода каких-либо данных от пользователя или автоматического ввода данных (например - текущей даты) производится с помощью указания в SQL-запросе специальных переменных вида :RV_NAME.

Список доступных переменных:

Эти переменные заполняются нужными значениями автоматически...

:RV_NULL - Установка в NULL;
:RV_USER_DBID - Код пользовательской БД;
:RV_NOW - Текущая дата;
:RV_LAST_MONTH - Первое число текущего месяца;
:RV_LAST_QUARTER - Первое число текущего квартала;
:RV_LAST_SIXMONTH - Первое число текущего полугодия
:RV_LAST_YEAR - Первое число текущего года;
:RV_ESCAPE - Ввод экранирующего символа "\" (для поиска по тексту);

Значения этих переменных вводятся пользователем через стандартные диалоговые окна.
Если предполагается, что необходимо ввести ряд значений одним диалогом (например - диапазон дат) - диалоговое окно будет отображен только один раз. Если для выбора некоего значения необходимо предварительно выбрать еще одно (например, для выбора базового параметра, нужно сначала выбрать класс) - будет открыто два диалоговых окна - сначало предварительное, потом основное.

:RV_DATE - Ввод одиночной даты;
:RV_BEGIN_DATE - Ввод диапазона дат – начальная дата;
:RV_END_DATE - Ввод диапазона дат – конечная дата;
:RV_INT - Ввод одиночного целого числа;
:RV_MIN_INT - Ввод диапазона целых чисел – минимальное число;
:RV_MAX_INT - Ввод диапазона целых чисел – максимальное число;
:RV_FLOAT - Ввод одиночного реального числа;
:RV_MAX_FLOAT - Ввод диапазона реальных чисел – максимальное число;
:RV_MIN_FLOAT - Ввод диапазона реальных чисел – минимальное число;
:RV_STRING - Ввод строки текста;
:RV_TEXT - Ввод строки текста для поиска вхождений;
:RV_COUNT - Ввод количества стандартным диалоговым окном (как в Наличии элементов);

...выбор ID объектов БД - классов, корпусов и т.п. - соотвественно, или ID базы + ID объекта или только ID объекта - в зависимости от типа этого объекта (пользовательский или общий).

:RV_CLASSDBID, :RV_CLASSID - Выбор класса;
:RV_CASEDBID, :RV_CASEID - Выбор корпуса;
:RV_MAKERDBID, :RV_MAKERID - Выбор производителя;
:RV_UNITDBID, :RV_UNITID - Выбор единицы измерения;
:RV_BASEPARAMDBID, :RV_BASEPARAMID - Выбор базового параметра с предварительным выбором класса;
:RV_ELEMENTTYPEDBID, :RV_ELEMENTTYPEID - Выбор типа элемента с предварительным выбором класса;
:RV_PROJECTID - Выбор проекта;
:RV_STORAGEID - Выбор места хранения;
:RV_SUPPLIERID - Выбор поставщика;
:RV_ELEMENTAVAILID - Выбор элемента в наличии;
tretyakovmax
Администратор
 
Сообщений: 178
Зарегистрирован: 03 июн 2013, 06:52

Вернуться в Общие вопросы

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


cron