@ -16,17 +16,31 @@ create or replace package PKG_P8PANELS_VISUAL as
NGANTT_ZOOM_WEEK constant PKG_STD . TNUMBER : = 3 ; -- Неделя
NGANTT_ZOOM_MONTH constant PKG_STD . TNUMBER : = 4 ; -- Месяц
/* Константы - масштаб циклограммы */
NCYCLOGRAM_ZOOM_MIN constant PKG_STD . TLNUMBER : = 0 . 2 ; -- Минимальный (0.2 от исходного)
NCYCLOGRAM_ZOOM_TINY constant PKG_STD . TLNUMBER : = 0 . 4 ; -- Мелкий (0.4 от исходного)
NCYCLOGRAM_ZOOM_SMALL constant PKG_STD . TLNUMBER : = 0 . 7 ; -- Уменьшенный (0.7 от исходного)
NCYCLOGRAM_ZOOM_DEFAULT constant PKG_STD . TLNUMBER : = 1 ; -- Исходный
NCYCLOGRAM_ZOOM_LARGE constant PKG_STD . TLNUMBER : = 1 . 5 ; -- Увеличенный (1.5 от исходного)
NCYCLOGRAM_ZOOM_HUGE constant PKG_STD . TLNUMBER : = 2 ; -- Большой (2 от исходного)
NCYCLOGRAM_ZOOM_MAX constant PKG_STD . TLNUMBER : = 2 . 5 ; -- Максимальный (2.5 от исходного)
/* Константы - тип графика */
SCHART_TYPE_BAR constant PKG_STD . TSTRING : = ' bar ' ;
SCHART_TYPE_LINE constant PKG_STD . TSTRING : = ' line ' ;
SCHART_TYPE_PIE constant PKG_STD . TSTRING : = ' pie ' ;
SCHART_TYPE_DOUGHNUT constant PKG_STD . TSTRING : = ' doughnut ' ;
SCHART_TYPE_BAR constant PKG_STD . TSTRING : = ' bar ' ; -- Столбчатая
SCHART_TYPE_LINE constant PKG_STD . TSTRING : = ' line ' ; -- Линейная
SCHART_TYPE_PIE constant PKG_STD . TSTRING : = ' pie ' ; -- Круговая
SCHART_TYPE_DOUGHNUT constant PKG_STD . TSTRING : = ' doughnut ' ; -- Кольцевая
/* Константы - расположение легенды графика */
SCHART_LGND_POS_LEFT constant PKG_STD . TSTRING : = ' left ' ;
SCHART_LGND_POS_RIGHT constant PKG_STD . TSTRING : = ' right ' ;
SCHART_LGND_POS_TOP constant PKG_STD . TSTRING : = ' top ' ;
SCHART_LGND_POS_BOTTOM constant PKG_STD . TSTRING : = ' bottom ' ;
SCHART_LGND_POS_LEFT constant PKG_STD . TSTRING : = ' left ' ; -- Слева
SCHART_LGND_POS_RIGHT constant PKG_STD . TSTRING : = ' right ' ; -- Справа
SCHART_LGND_POS_TOP constant PKG_STD . TSTRING : = ' top ' ; -- Наверху
SCHART_LGND_POS_BOTTOM constant PKG_STD . TSTRING : = ' bottom ' ; -- Внизу
/* Константы - циклограмма */
NCYCLOGRAM_GROUP_DEF_WIDTH constant PKG_STD . TNUMBER : = 100 ; -- Высота заголовка группы (по умолчанию)
NCYCLOGRAM_GROUP_DEF_HEIGHT constant PKG_STD . TNUMBER : = 42 ; -- Ширина заголовка группы (по умолчанию)
NCYCLOGRAM_LINE_HEIGHT constant PKG_STD . TNUMBER : = 20 ; -- Высота строк циклограммы
/* Типы данных - значение колонки таблицы данных */
type TCOL_VAL is record
@ -242,6 +256,83 @@ create or replace package PKG_P8PANELS_VISUAL as
RDATASETS TCHART_DATASETS -- Наборы данных
) ;
/* Типы данных - описание атрибута задачи для циклограммы */
type TCYCLOGRAM_TASK_ATTR is record
(
SNAME PKG_STD . TSTRING , -- Наименование
SCAPTION PKG_STD . TSTRING , -- Заголовок
BVISIBLE boolean -- Разрешить отображение
) ;
/* Типы данных - коллекция описаний атрибутов задачи для циклограммы */
type TCYCLOGRAM_TASK_ATTRS is table of TCYCLOGRAM_TASK_ATTR ;
/* Типы данных - значение атрибута задачи для циклограммы */
type TCYCLOGRAM_TASK_ATTR_VAL is record
(
SNAME PKG_STD . TSTRING , -- Наименование
SVALUE PKG_STD . TSTRING -- Значение
) ;
/* Типы данных - коллекция значений атрибутов задачи для циклограммы */
type TCYCLOGRAM_TASK_ATTR_VALS is table of TCYCLOGRAM_TASK_ATTR_VAL ;
/* Типы данных - колонка циклограммы */
type TCYCLOGRAM_COLUMN is record
(
SNAME PKG_STD . TSTRING , -- Наименование колонки
NSTART PKG_STD . TNUMBER , -- Позиция начала колонки
NEND PKG_STD . TNUMBER -- Позиция конца колонки
) ;
/* Типы данных - коллекция колонок циклограммы */
type TCYCLOGRAM_COLUMNS is table of TCYCLOGRAM_COLUMN ;
/* Типы данных - строки циклограммы */
type TCYCLOGRAM_TASK is record
(
NRN PKG_STD . TREF , -- Р е г . номер
SCAPTION PKG_STD . TSTRING , -- Заголовок
SNAME PKG_STD . TSTRING , -- Наименование
NLINE_NUMB PKG_STD . TNUMBER , -- Номер строки
NSTART PKG_STD . TNUMBER , -- Позиция начала задачи
NEND PKG_STD . TNUMBER , -- Позиция конца задачи
SGROUP PKG_STD . TSTRING , -- Наименование группы
SBG_COLOR PKG_STD . TSTRING : = null , -- Цвет заливки задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
STEXT_COLOR PKG_STD . TSTRING : = null , -- Цвет текста заголовка задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
SHIGHLIGHT_COLOR PKG_STD . TSTRING : = null , -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
RATTR_VALS TCYCLOGRAM_TASK_ATTR_VALS : = null -- Значения дополнительных атрбутов (null - дополнительные атрибуты не определены)
) ;
/* Типы данных - коллекция строк циклограммы */
type TCYCLOGRAM_TASKS is table of TCYCLOGRAM_TASK ;
/* Типы данных - группа строк циклограммы */
type TCYCLOGRAM_GROUP is record
(
SNAME PKG_STD . TSTRING , -- Имя группы
BHEADER_VISIBLE boolean , -- Признак отображения заголовка группы
NHEADER_HEIGHT PKG_STD . TNUMBER , -- Высота заголовка группы
NHEADER_WIDTH PKG_STD . TNUMBER , -- Ширина заголовка группы
SHIGHLIGHT_COLOR PKG_STD . TSTRING : = null -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
) ;
/* Типы данных - коллекция групп строк циклограммы */
type TCYCLOGRAM_GROUPS is table of TCYCLOGRAM_GROUP ;
/* Типы данных - циклограмма */
type TCYCLOGRAM is record
(
STITLE PKG_STD . TSTRING , -- Заголовок (null - не отображать)
NLINE_HEIGHT PKG_STD . TLNUMBER , -- Высота строк
NZOOM PKG_STD . TNUMBER : = NCYCLOGRAM_ZOOM_DEFAULT , -- Текущий масштаб (см. константы NCYCLOGRAM_ZOOM_*)
BZOOM_BAR boolean : = true , -- Обображать панель масштабирования
RCOLUMNS TCYCLOGRAM_COLUMNS , -- Коллекция колонок циклограммы
RGROUPS TCYCLOGRAM_GROUPS , -- Коллекция групп строк циклограммы
RTASKS TCYCLOGRAM_TASKS , -- Коллекция строк циклограммы
RTASK_ATTRS TCYCLOGRAM_TASK_ATTRS -- Описание атрибутов карточки задачи
) ;
/* Расчет диапаона выдаваемых записей */
procedure UTL_ROWS_LIMITS_CALC
(
@ -578,6 +669,87 @@ create or replace package PKG_P8PANELS_VISUAL as
NINCLUDE_DEF in number : = 1 -- Включить описание заголовка (0 - нет, 1 - да)
) return clob ; -- XML-описание
/* Формирование задачи циклограммы */
function TCYCLOGRAM_TASK_MAKE
(
NRN in number , -- Р е г . номер записи
SCAPTION in varchar2 , -- Заголовок
SNAME in varchar2 , -- Наименование
NLINE_NUMB in number , -- Номер строки
NSTART in number , -- Позиция начала задачи
NEND in number , -- Позиция конца задачи
SGROUP in varchar2 : = null , -- Наименование группы
SBG_COLOR in varchar2 : = null , -- Цвет заливки задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
STEXT_COLOR in varchar2 : = null , -- Цвет текста заголовка задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
SHIGHLIGHT_COLOR in varchar2 : = null -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
) return TCYCLOGRAM_TASK ; -- Результат работы
/* Добавление значения атрибута к задаче циклограммы */
procedure TCYCLOGRAM_TASK_ADD_ATTR_VAL
(
RCYCLOGRAM in TCYCLOGRAM , -- Описание циклограммы
RTASK in out nocopy TCYCLOGRAM_TASK , -- Описание задачи
SNAME in varchar2 , -- Наименование
SVALUE in varchar2 , -- Значение
BCLEAR in boolean : = false -- Флаг очистки коллекции значений атрибутов (false - не очищать, true - очистить коллекцию перед добавлением)
) ;
/* Формирование циклограммы */
function TCYCLOGRAM_MAKE
(
STITLE in varchar2 , -- Заголовок (null - не отображать)
NLINE_HEIGHT in number : = NCYCLOGRAM_LINE_HEIGHT , -- Высота строк
NZOOM in number : = NCYCLOGRAM_ZOOM_DEFAULT , -- Текущий масштаб (см. константы NCYCLOGRAM_ZOOM_*)
BZOOM_BAR in boolean : = true -- Обображать панель масштабирования
) return TCYCLOGRAM ; -- Результат работы
/* Добавление колонки в циклограмму */
procedure TCYCLOGRAM_ADD_COLUMN
(
RCYCLOGRAM in out nocopy TCYCLOGRAM , -- Описание циклограммы
SNAME in varchar2 , -- Заголовок колонки
NSTART in number , -- Позиция начала колонки
NEND in number , -- Позиция конца колонки
BCLEAR in boolean : = false -- Флаг очистки коллекции колонок циклограммы (false - не очищать, true - очистить коллекцию перед добавлением)
) ;
/* Добавление группы в циклограмму */
procedure TCYCLOGRAM_ADD_GROUP
(
RCYCLOGRAM in out nocopy TCYCLOGRAM , -- Описание циклограммы
SNAME in varchar2 , -- Имя группы
BHEADER_VISIBLE in boolean : = true , -- Признак отображения заголовка группы
NHEADER_HEIGHT in number : = NCYCLOGRAM_GROUP_DEF_HEIGHT , -- Высота заголовка группы
NHEADER_WIDTH in number : = NCYCLOGRAM_GROUP_DEF_WIDTH , -- Ширина заголовка группы
SHIGHLIGHT_COLOR in varchar2 : = null , -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
BCLEAR in boolean : = false -- Флаг очистки коллекции групп (false - не очищать, true - очистить коллекцию перед добавлением)
) ;
/* Добавление задачи в циклограммы */
procedure TCYCLOGRAM_ADD_TASK
(
RCYCLOGRAM in out nocopy TCYCLOGRAM , -- Описание циклограммы
RTASK in TCYCLOGRAM_TASK , -- Задача циклограммы
BCLEAR in boolean : = false -- Флаг очистки коллекции задач (false - не очищать, true - очистить коллекцию перед добавлением)
) ;
/* Добавление описания атрибута задачи циклограммы */
procedure TCYCLOGRAM_ADD_TASK_ATTR
(
RCYCLOGRAM in out nocopy TCYCLOGRAM , -- Описание циклограммы
SNAME in varchar2 , -- Наименование
SCAPTION in varchar2 , -- Заголовок
BVISIBLE boolean : = true , -- Разрешить отображение
BCLEAR in boolean : = false -- Флаг очистки коллекции атрибутов (false - не очищать, true - очистить коллекцию перед добавлением)
) ;
/* Сериализация циклограммы */
function TCYCLOGRAM_TO_XML
(
RCYCLOGRAM in TCYCLOGRAM , -- Описание циклограммы
NINCLUDE_DEF in number : = 1 -- Включить описание колонок (0 - нет, 1 - да)
) return clob ; -- XML-описание
end PKG_P8PANELS_VISUAL ;
/
create or replace package body PKG_P8PANELS_VISUAL as
@ -603,6 +775,7 @@ text="Формат data_grid и gant как в chart"
SRESP_TAG_XGANTT_TASKS constant PKG_STD . TSTRING : = ' XGANTT_TASKS ' ; -- Тэг для описания коллекции задач диаграммы Ганта
SRESP_TAG_XCHART constant PKG_STD . TSTRING : = ' XCHART ' ; -- Тэг для описания графика
SRESP_TAG_XDATA_GRID constant PKG_STD . TSTRING : = ' XDATA_GRID ' ; -- Тэг для описания таблицы данных
SRESP_TAG_XCYCLOGRAM constant PKG_STD . TSTRING : = ' XCYCLOGRAM ' ; -- Тэг для описания заголовка циклограммы
/* Константы - атрибуты ответов (универсальные) */
SRESP_ATTR_NAME constant PKG_STD . TSTRING : = ' name ' ; -- Атрибут для наименования
@ -627,6 +800,12 @@ text="Формат data_grid и gant как в chart"
SRESP_ATTR_FIXED_HEADER constant PKG_STD . TSTRING : = ' fixedHeader ' ; -- Атрибут для флага фиксации заголовка
SRESP_ATTR_FIXED_COLUMNS constant PKG_STD . TSTRING : = ' fixedColumns ' ; -- Атрибут для количества фиксированных колонок
SRESP_ATTR_WIDTH constant PKG_STD . TSTRING : = ' width ' ; -- Атрибут для ширины
SRESP_ATTR_HEIGHT constant PKG_STD . TSTRING : = ' height ' ; -- Атрибут для высоты
SRESP_ATTR_GROUPS constant PKG_STD . TSTRING : = ' groups ' ; -- Атрибут для групп
SRESP_ATTR_COLUMNS constant PKG_STD . TSTRING : = ' columns ' ; -- Атрибут для колонок
SRESP_ATTR_TASKS constant PKG_STD . TSTRING : = ' tasks ' ; -- Атрибут для задач
SRESP_ATTR_HL_COLOR constant PKG_STD . TSTRING : = ' highlightColor ' ; -- Атрибут для цвета подсветки
SRESP_ATTR_ZOOM_BAR constant PKG_STD . TSTRING : = ' zoomBar ' ; -- Атрибут для флага отображения панели масштаба
/* Константы - атрибуты ответов (таблица данных) */
SRESP_ATTR_DT_ORDER constant PKG_STD . TSTRING : = ' order ' ; -- Атрибут для флага сортировки
@ -634,7 +813,6 @@ text="Формат data_grid и gant как в chart"
SRESP_ATTR_DT_COLUMN_VALUES constant PKG_STD . TSTRING : = ' values ' ; -- Атрибут для предопределённых значений
/* Константы - атрибуты ответов (диаграмма Ганта) */
SRESP_ATTR_GANTT_ZOOM_BAR constant PKG_STD . TSTRING : = ' zoomBar ' ; -- Атрибут для флага отображения панели масштаба диаграммы Ганта
SRESP_ATTR_TASK_PROGRESS constant PKG_STD . TSTRING : = ' progress ' ; -- Атрибут для прогресса задачи
SRESP_ATTR_TASK_DEPS constant PKG_STD . TSTRING : = ' dependencies ' ; -- Атрибут для зависимостей задачи
SRESP_ATTR_TASK_RO constant PKG_STD . TSTRING : = ' readOnly ' ; -- Атрибут для флага задачи "только для чтения"
@ -657,6 +835,10 @@ text="Формат data_grid и gant как в chart"
SRESP_ATTR_CHART_DS_ITEMS constant PKG_STD . TSTRING : = ' items ' ; -- Атрибут для коллекции элементов набора данных
SRESP_ATTR_CHART_DS_I_VAL constant PKG_STD . TSTRING : = ' value ' ; -- Атрибут для значения элемента набора данных
/* Константы - атрибуты ответов (циклограмма) */
SRESP_ATTR_CG_TASK_LINE constant PKG_STD . TSTRING : = ' lineNumb ' ; -- Атрибут для номера строки (по оси Y)
SRESP_ATTR_CG_LINE_HEIGHT constant PKG_STD . TSTRING : = ' lineHeight ' ; -- Атрибут для высоты строк
/* Константы - параметры условий отбора */
SCOND_FROM_POSTFIX constant PKG_STD . TSTRING : = ' From ' ; -- Постфикс наименования нижней границы условия отбора
SCOND_TO_POSTFIX constant PKG_STD . TSTRING : = ' To ' ; -- Постфикс наименования верхней границы условия отбора
@ -2034,7 +2216,7 @@ text="Формат data_grid и gant как в chart"
/* Cта тиче с кие атрибуты заголовка */
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_TITLE , SVALUE = > RGANTT . STITLE ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_ZOOM , NVALUE = > RGANTT . NZOOM ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_ GANTT_ ZOOM_BAR, BVALUE = > RGANTT . BZOOM_BAR ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_ ZOOM_BAR, BVALUE = > RGANTT . BZOOM_BAR ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_TASK_RO , BVALUE = > RGANTT . BREAD_ONLY ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_TASK_RO_DATES , BVALUE = > RGANTT . BREAD_ONLY_DATES ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_TASK_RO_PRGRS , BVALUE = > RGANTT . BREAD_ONLY_PROGRESS ) ;
@ -2382,5 +2564,517 @@ text="Формат data_grid и gant как в chart"
P_EXCEPTION ( 0 , PKG_STATE . SQL_ERRM ( ) ) ;
end TCHART_TO_XML ;
/* Формирование колонки циклограммы */
function TCYCLOGRAM_COLUMN_MAKE
(
SNAME in varchar2 , -- Заголовок колонки
NSTART in number , -- Позиция начала колонки
NEND in number -- Позиция конца колонки
) return TCYCLOGRAM_COLUMN -- Результат работы
is
RRES TCYCLOGRAM_COLUMN ; -- Буфер для результата
begin
/* Формируем объект */
RRES . SNAME : = SNAME ;
RRES . NSTART : = NSTART ;
RRES . NEND : = NEND ;
/* Возвращаем результат */
return RRES ;
end TCYCLOGRAM_COLUMN_MAKE ;
/* Добавление колонки циклограммы в коллекцию */
procedure TCYCLOGRAM_COLUMNS_ADD
(
RCOLUMNS in out nocopy TCYCLOGRAM_COLUMNS , -- Коллекция колонок циклограммы
SNAME in varchar2 , -- Наименование колонки
NSTART in number , -- Позиция начала колонки
NEND in number , -- Позиция конца колонки
BCLEAR in boolean : = false -- Флаг очистки коллекции колонок (false - не очищать, true - очистить коллекцию перед добавлением)
)
is
begin
/* Инициализируем коллекцию если необходимо */
if ( ( RCOLUMNS is null ) or ( BCLEAR ) ) then
RCOLUMNS : = TCYCLOGRAM_COLUMNS ( ) ;
end if ;
/* Добавляем элемент */
RCOLUMNS . EXTEND ( ) ;
RCOLUMNS ( RCOLUMNS . LAST ) : = TCYCLOGRAM_COLUMN_MAKE ( SNAME = > SNAME , NSTART = > NSTART , NEND = > NEND ) ;
end TCYCLOGRAM_COLUMNS_ADD ;
/* Сериализация описания колонок циклограммы */
procedure TCYCLOGRAM_COLUMNS_TO_XML
(
RCYCLOGRAM_COLUMNS in TCYCLOGRAM_COLUMNS -- Описание колонок циклограммы
)
is
begin
/* Обходим колонки из коллекции */
if ( ( RCYCLOGRAM_COLUMNS is not null ) and ( RCYCLOGRAM_COLUMNS . COUNT > 0 ) ) then
for I in RCYCLOGRAM_COLUMNS . FIRST . . RCYCLOGRAM_COLUMNS . LAST
loop
/* Открываем описание колонки */
PKG_XFAST . DOWN_NODE ( SNAME = > SRESP_TAG_XCOLUMNS_DEF ) ;
/* Атрибуты колонки */
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_NAME , SVALUE = > RCYCLOGRAM_COLUMNS ( I ) . SNAME ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_START , NVALUE = > RCYCLOGRAM_COLUMNS ( I ) . NSTART ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_END , NVALUE = > RCYCLOGRAM_COLUMNS ( I ) . NEND ) ;
/* Закрываем описание колонки */
PKG_XFAST . UP ( ) ;
end loop ;
end if ;
end TCYCLOGRAM_COLUMNS_TO_XML ;
/* Формирование группы циклограммы */
function TCYCLOGRAM_GROUP_MAKE
(
SNAME in varchar2 , -- Имя группы
BHEADER_VISIBLE in boolean : = true , -- Признак отображения заголовка группы
NHEADER_HEIGHT in number : = NCYCLOGRAM_GROUP_DEF_HEIGHT , -- Высота заголовка группы
NHEADER_WIDTH in number : = NCYCLOGRAM_GROUP_DEF_WIDTH , -- Ширина заголовка группы
SHIGHLIGHT_COLOR in varchar2 : = null -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
) return TCYCLOGRAM_GROUP -- Результат работы
is
RRES TCYCLOGRAM_GROUP ; -- Буфер для результата
begin
/* Формируем объект */
RRES . SNAME : = SNAME ;
RRES . BHEADER_VISIBLE : = BHEADER_VISIBLE ;
RRES . NHEADER_HEIGHT : = NHEADER_HEIGHT ;
RRES . NHEADER_WIDTH : = NHEADER_WIDTH ;
RRES . SHIGHLIGHT_COLOR : = SHIGHLIGHT_COLOR ;
/* Возвращаем результат */
return RRES ;
end TCYCLOGRAM_GROUP_MAKE ;
/* Поиск группы циклограммы по наименованию */
function TCYCLOGRAM_GROUP_FIND
(
RGROUPS in TCYCLOGRAM_GROUPS , -- Описание групп циклограммы
SNAME in varchar2 -- Наименование
) return TCYCLOGRAM_GROUP -- Найденное описание группы (null - если не нашли)
is
begin
/* Обходим группы из описания */
if ( ( RGROUPS is not null ) and ( RGROUPS . COUNT > 0 ) ) then
for I in RGROUPS . FIRST . . RGROUPS . LAST
loop
if ( RGROUPS ( I ) . SNAME = SNAME ) then
return RGROUPS ( I ) ;
end if ;
end loop ;
end if ;
/* Ничего не нашли */
return null ;
end TCYCLOGRAM_GROUP_FIND ;
/* Сериализация описания групп циклограммы */
procedure TCYCLOGRAM_GROUPS_TO_XML
(
RGROUPS in TCYCLOGRAM_GROUPS -- Коллекция групп циклограммы
)
is
begin
/* Обходим группы из коллекции */
if ( ( RGROUPS is not null ) and ( RGROUPS . COUNT > 0 ) ) then
for I in RGROUPS . FIRST . . RGROUPS . LAST
loop
/* Открываем описание группы */
PKG_XFAST . DOWN_NODE ( SNAME = > SRESP_ATTR_GROUPS ) ;
/* Атрибуты группы */
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_NAME , SVALUE = > RGROUPS ( I ) . SNAME ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_VISIBLE , BVALUE = > RGROUPS ( I ) . BHEADER_VISIBLE ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_HEIGHT , NVALUE = > RGROUPS ( I ) . NHEADER_HEIGHT ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_WIDTH , NVALUE = > RGROUPS ( I ) . NHEADER_WIDTH ) ;
if ( RGROUPS ( I ) . SHIGHLIGHT_COLOR is not null ) then
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_HL_COLOR , SVALUE = > RGROUPS ( I ) . SHIGHLIGHT_COLOR ) ;
end if ;
/* Закрываем описание группы */
PKG_XFAST . UP ( ) ;
end loop ;
end if ;
end TCYCLOGRAM_GROUPS_TO_XML ;
/* Проверка наличия группы в циклограмме */
function TCYCLOGRAM_TASK_GROUP_CHECK
(
RGROUPS in TCYCLOGRAM_GROUPS , -- Описание групп циклограммы
SNAME in varchar2 -- Наименование
) return TCYCLOGRAM_GROUP -- Найденное описание группы (null - если не нашли)
is
begin
/* Обходим группы из описания */
if ( ( RGROUPS is not null ) and ( RGROUPS . COUNT > 0 ) ) then
for I in RGROUPS . FIRST . . RGROUPS . LAST
loop
if ( RGROUPS ( I ) . SNAME = SNAME ) then
return RGROUPS ( I ) ;
end if ;
end loop ;
end if ;
/* Ничего не нашли */
return null ;
end TCYCLOGRAM_TASK_GROUP_CHECK ;
/* Формирование задачи циклограммы */
function TCYCLOGRAM_TASK_MAKE
(
NRN in number , -- Р е г . номер записи
SCAPTION in varchar2 , -- Заголовок
SNAME in varchar2 , -- Наименование
NLINE_NUMB in number , -- Номер строки
NSTART in number , -- Позиция начала задачи
NEND in number , -- Позиция конца задачи
SGROUP in varchar2 : = null , -- Наименование группы
SBG_COLOR in varchar2 : = null , -- Цвет заливки задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
STEXT_COLOR in varchar2 : = null , -- Цвет текста заголовка задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
SHIGHLIGHT_COLOR in varchar2 : = null -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
) return TCYCLOGRAM_TASK -- Результат работы
is
RRES TCYCLOGRAM_TASK ; -- Буфер для результата
begin
/* Формируем объект */
RRES . NRN : = NRN ;
RRES . SCAPTION : = SCAPTION ;
RRES . SNAME : = SNAME ;
RRES . NLINE_NUMB : = NLINE_NUMB ;
RRES . NSTART : = NSTART ;
RRES . NEND : = NEND ;
RRES . SGROUP : = SGROUP ;
RRES . SBG_COLOR : = SBG_COLOR ;
RRES . STEXT_COLOR : = STEXT_COLOR ;
RRES . SHIGHLIGHT_COLOR : = SHIGHLIGHT_COLOR ;
/* Возвращаем результат */
return RRES ;
end TCYCLOGRAM_TASK_MAKE ;
/* Проверка корректности наименования дополнительного атрибута задачи циклограммы */
procedure TCYCLOGRAM_TASK_ATTR_NAME_CH
(
SNAME in varchar2 -- Наименование
)
is
begin
if ( SNAME in ( SRESP_ATTR_ID ,
SRESP_ATTR_RN ,
SRESP_ATTR_CAPTION ,
SRESP_ATTR_FULL_NAME ,
SRESP_ATTR_START ,
SRESP_ATTR_END ,
SRESP_ATTR_CG_TASK_LINE ,
SRESP_ATTR_GROUP_NAME ,
SRESP_ATTR_TASK_BG_COLOR ,
SRESP_ATTR_TASK_TEXT_COLOR ,
SRESP_ATTR_HL_COLOR ) ) then
P_EXCEPTION ( 0 ,
' Наименование атрибута "%s" является зарезервированным. ' ,
SNAME ) ;
end if ;
end TCYCLOGRAM_TASK_ATTR_NAME_CH ;
/* Поиск атрибута задачи циклограммы по наименованию */
function TCYCLOGRAM_TASK_ATTR_FIND
(
RTASK_ATTRS in TCYCLOGRAM_TASK_ATTRS , -- Описание атрибутов задачи циклограммы
SNAME in varchar2 -- Наименование
) return TCYCLOGRAM_TASK_ATTR -- Найденное описание (null - если не нашли)
is
begin
/* Обходим атрибуты из описания */
if ( ( RTASK_ATTRS is not null ) and ( RTASK_ATTRS . COUNT > 0 ) ) then
for I in RTASK_ATTRS . FIRST . . RTASK_ATTRS . LAST
loop
if ( RTASK_ATTRS ( I ) . SNAME = SNAME ) then
return RTASK_ATTRS ( I ) ;
end if ;
end loop ;
end if ;
/* Ничего не нашли */
return null ;
end TCYCLOGRAM_TASK_ATTR_FIND ;
/* Добавление значения атрибута к задаче циклограммы */
procedure TCYCLOGRAM_TASK_ADD_ATTR_VAL
(
RCYCLOGRAM in TCYCLOGRAM , -- Описание циклограммы
RTASK in out nocopy TCYCLOGRAM_TASK , -- Описание задачи
SNAME in varchar2 , -- Наименование
SVALUE in varchar2 , -- Значение
BCLEAR in boolean : = false -- Флаг очистки коллекции значений атрибутов (false - не очищать, true - очистить коллекцию перед добавлением)
)
is
begin
/* Проверим наименование */
TCYCLOGRAM_TASK_ATTR_NAME_CH ( SNAME = > SNAME ) ;
/* Проверим, что такой атрибут зарегистрирован */
if ( TCYCLOGRAM_TASK_ATTR_FIND ( RTASK_ATTRS = > RCYCLOGRAM . RTASK_ATTRS , SNAME = > SNAME ) . SNAME is null ) then
P_EXCEPTION ( 0 ,
' Атрибут "%s" задачи циклограммы не зарегистрирован. ' ,
SNAME ) ;
end if ;
/* Инициализируем коллекцию если необходимо */
if ( ( RTASK . RATTR_VALS is null ) or ( BCLEAR ) ) then
RTASK . RATTR_VALS : = TCYCLOGRAM_TASK_ATTR_VALS ( ) ;
end if ;
/* Добавляем элемент */
RTASK . RATTR_VALS . EXTEND ( ) ;
RTASK . RATTR_VALS ( RTASK . RATTR_VALS . LAST ) . SNAME : = SNAME ;
RTASK . RATTR_VALS ( RTASK . RATTR_VALS . LAST ) . SVALUE : = SVALUE ;
end TCYCLOGRAM_TASK_ADD_ATTR_VAL ;
/* Сериализация описания задач группы циклограммы */
procedure TCYCLOGRAM_TASKS_TO_XML
(
RTASKS in TCYCLOGRAM_TASKS -- Коллекция задач группы циклограммы
)
is
begin
/* Обходим задачи из коллекции */
if ( ( RTASKS is not null ) and ( RTASKS . COUNT > 0 ) ) then
for I in RTASKS . FIRST . . RTASKS . LAST
loop
/* Открываем строку */
PKG_XFAST . DOWN_NODE ( SNAME = > SRESP_ATTR_TASKS ) ;
/* Статические тарибуты */
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_ID , SVALUE = > ' taskId ' | | RTASKS ( I ) . NRN ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_RN , NVALUE = > RTASKS ( I ) . NRN ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_NAME , SVALUE = > RTASKS ( I ) . SCAPTION ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_FULL_NAME , SVALUE = > RTASKS ( I ) . SNAME ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_CG_TASK_LINE , NVALUE = > RTASKS ( I ) . NLINE_NUMB ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_START , NVALUE = > RTASKS ( I ) . NSTART ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_END , NVALUE = > RTASKS ( I ) . NEND ) ;
if ( RTASKS ( I ) . SGROUP is not null ) then
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_GROUP_NAME , SVALUE = > RTASKS ( I ) . SGROUP ) ;
end if ;
if ( RTASKS ( I ) . SBG_COLOR is not null ) then
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_TASK_BG_COLOR , SVALUE = > RTASKS ( I ) . SBG_COLOR ) ;
end if ;
if ( RTASKS ( I ) . STEXT_COLOR is not null ) then
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_TASK_TEXT_COLOR , SVALUE = > RTASKS ( I ) . STEXT_COLOR ) ;
end if ;
if ( RTASKS ( I ) . SHIGHLIGHT_COLOR is not null ) then
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_HL_COLOR , SVALUE = > RTASKS ( I ) . SHIGHLIGHT_COLOR ) ;
end if ;
/* Динамические атрибуты */
if ( ( RTASKS ( I ) . RATTR_VALS is not null ) and ( RTASKS ( I ) . RATTR_VALS . COUNT > 0 ) ) then
for J in RTASKS ( I ) . RATTR_VALS . FIRST . . RTASKS ( I ) . RATTR_VALS . LAST
loop
PKG_XFAST . ATTR ( SNAME = > RTASKS ( I ) . RATTR_VALS ( J ) . SNAME , SVALUE = > RTASKS ( I ) . RATTR_VALS ( J ) . SVALUE ) ;
end loop ;
end if ;
/* Закрываем задачу */
PKG_XFAST . UP ( ) ;
end loop ;
end if ;
end TCYCLOGRAM_TASKS_TO_XML ;
/* Формирование циклограммы */
function TCYCLOGRAM_MAKE
(
STITLE in varchar2 , -- Заголовок (null - не отображать)
NLINE_HEIGHT in number : = NCYCLOGRAM_LINE_HEIGHT , -- Высота строк
NZOOM in number : = NCYCLOGRAM_ZOOM_DEFAULT , -- Текущий масштаб (см. константы NCYCLOGRAM_ZOOM_*)
BZOOM_BAR in boolean : = true -- Обображать панель масштабирования
) return TCYCLOGRAM -- Результат работы
is
RRES TCYCLOGRAM ; -- Буфер для результата
begin
/* Формируем объект */
RRES . STITLE : = STITLE ;
RRES . NLINE_HEIGHT : = NLINE_HEIGHT ;
RRES . NZOOM : = NZOOM ;
RRES . BZOOM_BAR : = BZOOM_BAR ;
/* Возвращаем результат */
return RRES ;
end TCYCLOGRAM_MAKE ;
/* Добавление колонки в циклограмму */
procedure TCYCLOGRAM_ADD_COLUMN
(
RCYCLOGRAM in out nocopy TCYCLOGRAM , -- Описание циклограммы
SNAME in varchar2 , -- Заголовок колонки
NSTART in number , -- Позиция начала колонки
NEND in number , -- Позиция конца колонки
BCLEAR in boolean : = false -- Флаг очистки коллекции колонок (false - не очищать, true - очистить коллекцию перед добавлением)
)
is
begin
/* Формируем описание и добавляем в коллекцию колонок */
TCYCLOGRAM_COLUMNS_ADD ( RCOLUMNS = > RCYCLOGRAM . RCOLUMNS ,
SNAME = > SNAME ,
NSTART = > NSTART ,
NEND = > NEND ,
BCLEAR = > BCLEAR ) ;
end TCYCLOGRAM_ADD_COLUMN ;
/* Добавление группы в циклограмму */
procedure TCYCLOGRAM_ADD_GROUP
(
RCYCLOGRAM in out nocopy TCYCLOGRAM , -- Описание циклограммы
SNAME in varchar2 , -- Имя группы
BHEADER_VISIBLE in boolean : = true , -- Признак отображения заголовка группы
NHEADER_HEIGHT in number : = NCYCLOGRAM_GROUP_DEF_HEIGHT , -- Высота заголовка группы
NHEADER_WIDTH in number : = NCYCLOGRAM_GROUP_DEF_WIDTH , -- Ширина заголовка группы
SHIGHLIGHT_COLOR in varchar2 : = null , -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
BCLEAR in boolean : = false -- Флаг очистки коллекции групп (false - не очищать, true - очистить коллекцию перед добавлением)
)
is
begin
/* Проверяем наличие группы в циклограмме */
if ( TCYCLOGRAM_GROUP_FIND ( RGROUPS = > RCYCLOGRAM . RGROUPS , SNAME = > SNAME ) . SNAME is null ) then
/* Инициализируем коллекцию если необходимо */
if ( ( RCYCLOGRAM . RGROUPS is null ) or ( BCLEAR ) ) then
RCYCLOGRAM . RGROUPS : = TCYCLOGRAM_GROUPS ( ) ;
end if ;
/* Добавляем элемент */
RCYCLOGRAM . RGROUPS . EXTEND ( ) ;
RCYCLOGRAM . RGROUPS ( RCYCLOGRAM . RGROUPS . LAST ) : = TCYCLOGRAM_GROUP_MAKE ( SNAME = > SNAME ,
BHEADER_VISIBLE = > BHEADER_VISIBLE ,
NHEADER_HEIGHT = > NHEADER_HEIGHT ,
NHEADER_WIDTH = > NHEADER_WIDTH ,
SHIGHLIGHT_COLOR = > SHIGHLIGHT_COLOR ) ;
end if ;
end TCYCLOGRAM_ADD_GROUP ;
/* Добавление задачи в циклограммы */
procedure TCYCLOGRAM_ADD_TASK
(
RCYCLOGRAM in out nocopy TCYCLOGRAM , -- Описание циклограммы
RTASK in TCYCLOGRAM_TASK , -- Задача циклограммы
BCLEAR in boolean : = false -- Флаг очистки коллекции задач (false - не очищать, true - очистить коллекцию перед добавлением)
)
is
begin
/* Инициализируем коллекцию если необходимо */
if ( ( RCYCLOGRAM . RTASKS is null ) or ( BCLEAR ) ) then
RCYCLOGRAM . RTASKS : = TCYCLOGRAM_TASKS ( ) ;
end if ;
/* Если у задачи указана группа */
if ( RTASK . SGROUP is not null ) then
/* Проверяем наличие группы в циклограмме */
if ( TCYCLOGRAM_GROUP_FIND ( RGROUPS = > RCYCLOGRAM . RGROUPS , SNAME = > RTASK . SGROUP ) . SNAME is null ) then
P_EXCEPTION ( 0 , ' Группа "%s" циклограммы не зарегистрирована. ' , RTASK . SGROUP ) ;
end if ;
end if ;
/* Добавляем элемент */
RCYCLOGRAM . RTASKS . EXTEND ( ) ;
RCYCLOGRAM . RTASKS ( RCYCLOGRAM . RTASKS . LAST ) : = RTASK ;
end TCYCLOGRAM_ADD_TASK ;
/* Добавление описания атрибута задачи циклограммы */
procedure TCYCLOGRAM_ADD_TASK_ATTR
(
RCYCLOGRAM in out nocopy TCYCLOGRAM , -- Описание циклограммы
SNAME in varchar2 , -- Наименование
SCAPTION in varchar2 , -- Заголовок
BVISIBLE boolean : = true , -- Разрешить отображение
BCLEAR in boolean : = false -- Флаг очистки коллекции атрибутов (false - не очищать, true - очистить коллекцию перед добавлением)
)
is
begin
/* Проверим наименование */
TCYCLOGRAM_TASK_ATTR_NAME_CH ( SNAME = > SNAME ) ;
/* Проверим, что такого ещё нет */
if ( TCYCLOGRAM_TASK_ATTR_FIND ( RTASK_ATTRS = > RCYCLOGRAM . RTASK_ATTRS , SNAME = > SNAME ) . SNAME is not null ) then
P_EXCEPTION ( 0 ,
' Атрибут "%s" задачи циклограммы уже зарегистрирован. ' ,
SNAME ) ;
end if ;
/* Инициализируем коллекцию если необходимо */
if ( ( RCYCLOGRAM . RTASK_ATTRS is null ) or ( BCLEAR ) ) then
RCYCLOGRAM . RTASK_ATTRS : = TCYCLOGRAM_TASK_ATTRS ( ) ;
end if ;
/* Добавляем элемент */
RCYCLOGRAM . RTASK_ATTRS . EXTEND ( ) ;
RCYCLOGRAM . RTASK_ATTRS ( RCYCLOGRAM . RTASK_ATTRS . LAST ) . SNAME : = SNAME ;
RCYCLOGRAM . RTASK_ATTRS ( RCYCLOGRAM . RTASK_ATTRS . LAST ) . SCAPTION : = SCAPTION ;
RCYCLOGRAM . RTASK_ATTRS ( RCYCLOGRAM . RTASK_ATTRS . LAST ) . BVISIBLE : = BVISIBLE ;
end TCYCLOGRAM_ADD_TASK_ATTR ;
/* Сериализация описания циклограммы */
procedure TCYCLOGRAM_DEF_TO_XML
(
RCYCLOGRAM in TCYCLOGRAM -- Описание циклограммы
)
is
begin
/* Cта тиче с кие атрибуты заголовка */
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_TITLE , SVALUE = > RCYCLOGRAM . STITLE ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_CG_LINE_HEIGHT , NVALUE = > RCYCLOGRAM . NLINE_HEIGHT ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_ZOOM , NVALUE = > RCYCLOGRAM . NZOOM ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_ZOOM_BAR , BVALUE = > RCYCLOGRAM . BZOOM_BAR ) ;
/* Если есть динамические атрибуты */
if ( ( RCYCLOGRAM . RTASK_ATTRS is not null ) and ( RCYCLOGRAM . RTASK_ATTRS . COUNT > 0 ) ) then
/* Обходим динамические атрибуты задачи */
for I in RCYCLOGRAM . RTASK_ATTRS . FIRST . . RCYCLOGRAM . RTASK_ATTRS . LAST
loop
/* Открываем динамический атрибут задачи */
PKG_XFAST . DOWN_NODE ( SNAME = > SRESP_ATTR_TASK_ATTRIBUTES ) ;
/* Наполняем е г о атрибутами */
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_NAME , SVALUE = > RCYCLOGRAM . RTASK_ATTRS ( I ) . SNAME ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_CAPTION , SVALUE = > RCYCLOGRAM . RTASK_ATTRS ( I ) . SCAPTION ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_VISIBLE , BVALUE = > RCYCLOGRAM . RTASK_ATTRS ( I ) . BVISIBLE ) ;
/* Закрываем динамический атрибут задачи */
PKG_XFAST . UP ( ) ;
end loop ;
end if ;
/* Обходим колонки циклограммы */
if ( ( RCYCLOGRAM . RCOLUMNS is not null ) and ( RCYCLOGRAM . RCOLUMNS . COUNT > 0 ) ) then
for I in RCYCLOGRAM . RCOLUMNS . FIRST . . RCYCLOGRAM . RCOLUMNS . LAST
loop
/* Открываем описание колонки */
PKG_XFAST . DOWN_NODE ( SNAME = > SRESP_ATTR_COLUMNS ) ;
/* Атрибуты колонки */
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_NAME , SVALUE = > RCYCLOGRAM . RCOLUMNS ( I ) . SNAME ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_START , NVALUE = > RCYCLOGRAM . RCOLUMNS ( I ) . NSTART ) ;
PKG_XFAST . ATTR ( SNAME = > SRESP_ATTR_END , NVALUE = > RCYCLOGRAM . RCOLUMNS ( I ) . NEND ) ;
/* Закрываем описание колонки */
PKG_XFAST . UP ( ) ;
end loop ;
end if ;
end TCYCLOGRAM_DEF_TO_XML ;
/* Сериализация циклограммы */
function TCYCLOGRAM_TO_XML
(
RCYCLOGRAM in TCYCLOGRAM , -- Описание циклограммы
NINCLUDE_DEF in number : = 1 -- Включить описание колонок (0 - нет, 1 - да)
) return clob -- XML-описание
is
CRES clob ; -- Буфер для результата
begin
/* Начинаем формирование XML */
PKG_XFAST . PROLOGUE ( ITYPE = > PKG_XFAST . CONTENT_ ) ;
/* Открываем корень */
PKG_XFAST . DOWN_NODE ( SNAME = > SRESP_TAG_XDATA ) ;
/* Открываем циклограмму */
PKG_XFAST . DOWN_NODE ( SNAME = > SRESP_TAG_XCYCLOGRAM ) ;
/* Если необходимо включить описание циклограммы */
if ( NINCLUDE_DEF = 1 ) then
TCYCLOGRAM_DEF_TO_XML ( RCYCLOGRAM = > RCYCLOGRAM ) ;
end if ;
/* Формируем описание групп циклограммы */
TCYCLOGRAM_GROUPS_TO_XML ( RGROUPS = > RCYCLOGRAM . RGROUPS ) ;
/* Описываем задачи */
TCYCLOGRAM_TASKS_TO_XML ( RTASKS = > RCYCLOGRAM . RTASKS ) ;
/* Закрываем циклограмму */
PKG_XFAST . UP ( ) ;
/* Закрываем корень */
PKG_XFAST . UP ( ) ;
/* Сериализуем */
CRES : = PKG_XFAST . SERIALIZE_TO_CLOB ( ) ;
/* Завершаем формирование XML */
PKG_XFAST . EPILOGUE ( ) ;
/* Возвращаем полученное */
return CRES ;
exception
when others then
/* Завершаем формирование XML */
PKG_XFAST . EPILOGUE ( ) ;
/* Вернем ошибку */
PKG_STATE . DIAGNOSTICS_STACKED ( ) ;
P_EXCEPTION ( 0 , PKG_STATE . SQL_ERRM ( ) ) ;
end TCYCLOGRAM_TO_XML ;
end PKG_P8PANELS_VISUAL ;
/