БД: BASE, MECHREC, SAMPLES - совместимость с PG, в BASE удалена трассировка

This commit is contained in:
Mikhail Chechnev 2024-02-26 13:10:17 +03:00
parent 7ef89565de
commit 12bb34b0e2
3 changed files with 168 additions and 233 deletions

View File

@ -168,7 +168,9 @@ create or replace package body PKG_P8PANELS_BASE as
SRES := SDATA_TYPE_CLOB; SRES := SDATA_TYPE_CLOB;
/* Неизвестный тип данных */ /* Неизвестный тип данных */
else else
P_EXCEPTION(0, 'Тип данных "%s" не поддерживается.', TO_CHAR(NSTD_DATA_TYPE)); P_EXCEPTION(0,
'Тип данных "%s" не поддерживается.',
COALESCE(TO_CHAR(NSTD_DATA_TYPE), '<НЕ ОПРЕДЕЛЁН>'));
end case; end case;
/* Возвращаем результат */ /* Возвращаем результат */
return SRES; return SRES;
@ -753,7 +755,7 @@ create or replace package body PKG_P8PANELS_BASE as
RNODE02 => PKG_XMAKE.ELEMENT(ICURSOR => XRESP, RNODE02 => PKG_XMAKE.ELEMENT(ICURSOR => XRESP,
SNAME => SRESP_TAG_SDATA_TYPE, SNAME => SRESP_TAG_SDATA_TYPE,
RVALUE00 => PKG_XMAKE.VALUE(ICURSOR => XRESP, RVALUE00 => PKG_XMAKE.VALUE(ICURSOR => XRESP,
SVALUE => STD_DATA_TYPE_TO_STR(NSTD_DATA_TYPE => RARG_VAL.DATA_TYPE))))); SVALUE => STD_DATA_TYPE_TO_STR(NSTD_DATA_TYPE => RARG.DATA_TYPE)))));
end if; end if;
/* Считываем наименование следующего параметра */ /* Считываем наименование следующего параметра */
SARG_NAME := PKG_CONTPRMLOC.NEXT_(RCONTAINER => ARGS_VALS, SNAME => SARG_NAME); SARG_NAME := PKG_CONTPRMLOC.NEXT_(RCONTAINER => ARGS_VALS, SNAME => SARG_NAME);
@ -796,7 +798,6 @@ create or replace package body PKG_P8PANELS_BASE as
XRQ_ROOT PKG_XPATH.TNODE; -- Корневой элемент тела документа запроса XRQ_ROOT PKG_XPATH.TNODE; -- Корневой элемент тела документа запроса
SRQ_ACTION PKG_STD.TSTRING; -- Код действия из запроса SRQ_ACTION PKG_STD.TSTRING; -- Код действия из запроса
begin begin
PKG_TRACE.REGISTER(SDATA => 'P8PANELS', SDATA1 => CIN);
/* Разбираем запрос */ /* Разбираем запрос */
XRQ_ROOT := RQ_ROOT_GET(CRQ => CIN); XRQ_ROOT := RQ_ROOT_GET(CRQ => CIN);
/* Считываем код действия из запроса */ /* Считываем код действия из запроса */

View File

@ -123,14 +123,14 @@ create or replace package body PKG_P8PANELS_MECHREC as
and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */
UR.ROLEID UR.ROLEID
from USERROLES UR from USERROLES UR
where UR.AUTHID = UTILIZER) where UR.AUTHID = UTILIZER())
union all union all
select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */ select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */
null null
from USERPRIV UP from USERPRIV UP
where UP.JUR_PERS = P.JUR_PERS where UP.JUR_PERS = P.JUR_PERS
and UP.UNITCODE = 'CostProductPlans' and UP.UNITCODE = 'CostProductPlans'
and UP.AUTHID = UTILIZER) and UP.AUTHID = UTILIZER())
and T.PRN = P.RN) TMP and T.PRN = P.RN) TMP
connect by prior TMP.RN = TMP.UP_LEVEL connect by prior TMP.RN = TMP.UP_LEVEL
start with TMP.UP_LEVEL is null; start with TMP.UP_LEVEL is null;
@ -203,26 +203,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
NTASK_PROGRESS PKG_STD.TNUMBER; -- Прогресс выполнения задачи NTASK_PROGRESS PKG_STD.TNUMBER; -- Прогресс выполнения задачи
DDATE_FROM PKG_STD.TLDATE; -- Дата запуска спецификации DDATE_FROM PKG_STD.TLDATE; -- Дата запуска спецификации
DDATE_TO PKG_STD.TLDATE; -- Дата выпуска спецификации DDATE_TO PKG_STD.TLDATE; -- Дата выпуска спецификации
STASK_CAPTION PKG_STD.TSTRING; -- Описание задачи в Ганте STASK_CAPTION PKG_STD.TSTRING; -- Описание задачи в Ганте
CSQL clob; -- Буфер для запроса
ICURSOR integer; -- Курсор для исполнения запроса
/* Значения спецификации */
NTASK_RN PKG_STD.TREF; -- Рег. номер спецификации
NTASK_PRN PKG_STD.TREF; -- Рег. номер родителя спецификации
STASK_PROD_ORDER PKG_STD.TSTRING; -- Заказ
DTASK_REP_DATE PKG_STD.TLDATE; -- Дата запуска
DTASK_REP_DATE_TO PKG_STD.TLDATE; -- Дата выпуска
DTASK_INCL_DATE PKG_STD.TLDATE; -- Дата включения в план
STASK_ROUTE PKG_STD.TSTRING; -- Маршрут
STASK_NOMEN_NAME PKG_STD.TSTRING; -- Наименование номенклатуры
NTASK_DEFRESLIZ number; -- Дефицит запуска
NTASK_REL_FACT number; -- Выпуск факт
NTASK_DEFSTART number; -- Дефицит выпуска
NTASK_MAIN_QUANT number; -- Выпуск
STASK_SUBDIV_DLVR PKG_STD.TSTRING; -- Сдающее подразделение
NTASK_HAVE_LINK PKG_STD.TNUMBER; -- Наличие ссылок (0 - нет, 1 - да)
NTASK_UP_LEVEL PKG_STD.TREF; -- Рег. номер родительской записи в иерархии
NTASK_LEVEL PKG_STD.TNUMBER; -- Уровень в иерархии
/* Объединение значений в строковое представление */ /* Объединение значений в строковое представление */
function MAKE_INFO function MAKE_INFO
@ -356,190 +337,134 @@ create or replace package body PKG_P8PANELS_MECHREC as
/* Определяем максимальный уровень иерархии */ /* Определяем максимальный уровень иерархии */
NMAX_LEVEL := PRODPLAN_MAX_LEVEL_GET(NCRN => NCRN); NMAX_LEVEL := PRODPLAN_MAX_LEVEL_GET(NCRN => NCRN);
/* Обходим данные */ /* Обходим данные */
begin for C in (select TMP.*,
CSQL := 'select TMP.*, level NTASK_LEVEL
level NTASK_LEVEL from (select T.RN NRN,
from (select T.RN NRN, T.PRN NPRN,
T.PRN NPRN, (select PORD.NUMB from FACEACC PORD where PORD.RN = T.PROD_ORDER) SPROD_ORDER,
(select PORD.NUMB from FACEACC PORD where PORD.RN = T.PROD_ORDER) SPROD_ORDER, T.REP_DATE DREP_DATE,
T.REP_DATE DREP_DATE, T.REP_DATE_TO DREP_DATE_TO,
T.REP_DATE_TO DREP_DATE_TO, T.INCL_DATE DINCL_DATE,
T.INCL_DATE DINCL_DATE, T.ROUTE SROUTE,
T.ROUTE SROUTE, D.NOMEN_NAME SNOMEN_NAME,
D.NOMEN_NAME SNOMEN_NAME, (T.QUANT_REST - T.START_FACT) NDEFRESLIZ,
(T.QUANT_REST - T.START_FACT) NDEFRESLIZ, T.REL_FACT NREL_FACT,
T.REL_FACT NREL_FACT, (T.MAIN_QUANT - T.REL_FACT) NDEFSTART,
(T.MAIN_QUANT - T.REL_FACT) NDEFSTART, T.MAIN_QUANT NMAIN_QUANT,
T.MAIN_QUANT NMAIN_QUANT, (select IDD.CODE from INS_DEPARTMENT IDD where IDD.RN = T.SUBDIV_DLVR) SSUBDIV_DLVR,
(select IDD.CODE from INS_DEPARTMENT IDD where IDD.RN = T.SUBDIV_DLVR) SSUBDIV_DLVR, (select 1
(select 1 from DUAL
from DUAL where exists (select null
where exists from DOCLINKS L
(select null where L.IN_DOCUMENT = T.RN
from DOCLINKS L and L.IN_UNITCODE = 'CostProductPlansSpecs'
where L.IN_DOCUMENT = T.RN and (L.OUT_UNITCODE = 'CostRouteLists' or L.OUT_UNITCODE = 'IncomFromDeps')
and L.IN_UNITCODE = ''CostProductPlansSpecs'' and ROWNUM = 1)) NHAVE_LINK,
and (L.OUT_UNITCODE = ''CostRouteLists'' or L.OUT_UNITCODE = ''IncomFromDeps'') T.UP_LEVEL NUP_LEVEL,
and ROWNUM = 1)) NHAVE_LINK, case SSORT_FIELD
T.UP_LEVEL NUP_LEVEL when 'DREP_DATE_TO' then
from FCPRODPLAN P, T.REP_DATE_TO
FINSTATE FS, else
FCPRODPLANSP T, T.REP_DATE
FCMATRESOURCE FM, end DORDER_DATE
DICNOMNS D from FCPRODPLAN P,
where P.CRN = :NCRN FINSTATE FS,
and P.CATEGORY = :NFCPRODPLAN_CATEGORY FCPRODPLANSP T,
and P.STATUS = :NFCPRODPLAN_STATUS FCMATRESOURCE FM,
and FS.RN = P.TYPE DICNOMNS D
and FS.CODE = :SFCPRODPLAN_TYPE where P.CRN = NCRN
and exists and P.CATEGORY = NFCPRODPLAN_CATEGORY
(select /*+ INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */ and P.STATUS = NFCPRODPLAN_STATUS
null and FS.RN = P.TYPE
from USERPRIV UP and FS.CODE = SFCPRODPLAN_TYPE
where UP.JUR_PERS = P.JUR_PERS and exists
and UP.UNITCODE = ''CostProductPlans'' (select /*+ INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */
and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ null
UR.ROLEID from USERPRIV UP
from USERROLES UR where UP.JUR_PERS = P.JUR_PERS
where UR.AUTHID = UTILIZER) and UP.UNITCODE = 'CostProductPlans'
union all and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */
select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */ UR.ROLEID
null from USERROLES UR
from USERPRIV UP where UR.AUTHID = UTILIZER())
where UP.JUR_PERS = P.JUR_PERS union all
and UP.UNITCODE = ''CostProductPlans'' select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */
and UP.AUTHID = UTILIZER) null
and T.PRN = P.RN from USERPRIV UP
and ((T.REP_DATE is not null) or (T.REP_DATE_TO is not null) or (T.INCL_DATE is not null)) where UP.JUR_PERS = P.JUR_PERS
and FM.RN = T.MATRES and UP.UNITCODE = 'CostProductPlans'
and D.RN = FM.NOMENCLATURE) TMP and UP.AUTHID = UTILIZER())
where ((:NLEVEL is null) or ((:NLEVEL is not null) and (level <= :NLEVEL))) and T.PRN = P.RN
connect by prior TMP.NRN = TMP.NUP_LEVEL and ((T.REP_DATE is not null) or (T.REP_DATE_TO is not null) or (T.INCL_DATE is not null))
start with TMP.NUP_LEVEL is null and FM.RN = T.MATRES
order siblings by TMP.%SORT_FIELD% asc'; and D.RN = FM.NOMENCLATURE) TMP
/* Подставляем поле сортировки */ where ((NLEVEL is null) or ((NLEVEL is not null) and (level <= NLEVEL)))
CSQL := replace(CSQL, '%SORT_FIELD%', SSORT_FIELD); connect by prior TMP.NRN = TMP.NUP_LEVEL
/* Разбираем его */ start with TMP.NUP_LEVEL is null
ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); order siblings by TMP.DORDER_DATE asc)
PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); loop
/* Делаем подстановку параметров */ /* Формируем описание задачи в Ганте */
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCRN', NVALUE => NCRN); STASK_CAPTION := MAKE_INFO(SPROD_ORDER => C.SPROD_ORDER,
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNOMEN_NAME => C.SNOMEN_NAME,
SNAME => 'NFCPRODPLAN_CATEGORY', SSUBDIV_DLVR => C.SSUBDIV_DLVR,
NVALUE => NFCPRODPLAN_CATEGORY); NMAIN_QUANT => C.NMAIN_QUANT);
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCPRODPLAN_STATUS', NVALUE => NFCPRODPLAN_STATUS); /* Инициализируем даты и цвет (если необходимо) */
PKG_SQL_DML.BIND_VARIABLE_STR(ICURSOR => ICURSOR, SNAME => 'SFCPRODPLAN_TYPE', SVALUE => SFCPRODPLAN_TYPE); FCPRODPLANSP_DATES_GET(DREP_DATE => C.DREP_DATE,
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NLEVEL', NVALUE => NLEVEL); DREP_DATE_TO => C.DREP_DATE_TO,
/* Описываем структуру записи курсора */ DINCL_DATE => C.DINCL_DATE,
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); NHAVE_LINK => COALESCE(C.NHAVE_LINK, 0),
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 2); DDATE_FROM => DDATE_FROM,
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); DDATE_TO => DDATE_TO,
PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 4); STASK_BG_COLOR => STASK_BG_COLOR,
PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 5); STASK_TEXT_COLOR => STASK_TEXT_COLOR,
PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 6); NTASK_PROGRESS => NTASK_PROGRESS);
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 7); /* Если цвет изначально не указан и требуется анализирование */
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 8); if (STASK_BG_COLOR is null) then
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 9); /* Формирование характеристик элемента ганта */
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 10); MAKE_GANT_ITEM(NDEFRESLIZ => C.NDEFRESLIZ,
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 11); NREL_FACT => C.NREL_FACT,
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 12); NDEFSTART => C.NDEFSTART,
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 13); STASK_BG_COLOR => STASK_BG_COLOR,
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 14); STASK_BG_PROGRESS_COLOR => STASK_BG_PROGRESS_COLOR,
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 15); NTASK_PROGRESS => NTASK_PROGRESS);
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 16);
/* Делаем выборку */
if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then
null;
end if; end if;
/* Обходим выбранные записи */ /* Сформируем основную спецификацию */
while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) RGT := PKG_P8PANELS_VISUAL.TGANTT_TASK_MAKE(NRN => C.NRN,
SNUMB => COALESCE(C.SROUTE, 'Отсутствует'),
SCAPTION => STASK_CAPTION,
SNAME => C.SNOMEN_NAME,
DSTART => DDATE_FROM,
DEND => DDATE_TO,
NPROGRESS => NTASK_PROGRESS,
SBG_COLOR => STASK_BG_COLOR,
STEXT_COLOR => STASK_TEXT_COLOR,
SBG_PROGRESS_COLOR => STASK_BG_PROGRESS_COLOR,
BREAD_ONLY => true,
BREAD_ONLY_DATES => true,
BREAD_ONLY_PROGRESS => true);
/* Заполним значение динамических атрибутов */
FILL_TASK_ATTRS(RG => RG,
RGT => RGT,
SPROD_ORDER => C.SPROD_ORDER,
SSUBDIV_DLVR => C.SSUBDIV_DLVR,
NMAIN_QUANT => C.NMAIN_QUANT,
NDEFRESLIZ => C.NDEFRESLIZ,
NREL_FACT => C.NREL_FACT,
NDEFSTART => C.NDEFSTART,
NLEVEL => C.NTASK_LEVEL);
/* Собираем зависимости */
for LINK in (select T.RN
from FCPRODPLANSP T
where T.PRN = C.NPRN
and T.UP_LEVEL = C.NRN
and ((NLEVEL is null) or ((NLEVEL is not null) and (NLEVEL >= C.NTASK_LEVEL + 1))))
loop loop
/* Читаем данные из курсора */ /* Добавляем зависимости */
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 1, NVALUE => NTASK_RN); PKG_P8PANELS_VISUAL.TGANTT_TASK_ADD_DEPENDENCY(RTASK => RGT, NDEPENDENCY => LINK.RN);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 2, NVALUE => NTASK_PRN);
PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 3, SVALUE => STASK_PROD_ORDER);
PKG_SQL_DML.COLUMN_VALUE_DATE(ICURSOR => ICURSOR, IPOSITION => 4, DVALUE => DTASK_REP_DATE);
PKG_SQL_DML.COLUMN_VALUE_DATE(ICURSOR => ICURSOR, IPOSITION => 5, DVALUE => DTASK_REP_DATE_TO);
PKG_SQL_DML.COLUMN_VALUE_DATE(ICURSOR => ICURSOR, IPOSITION => 6, DVALUE => DTASK_INCL_DATE);
PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 7, SVALUE => STASK_ROUTE);
PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 8, SVALUE => STASK_NOMEN_NAME);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 9, NVALUE => NTASK_DEFRESLIZ);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 10, NVALUE => NTASK_REL_FACT);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 11, NVALUE => NTASK_DEFSTART);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 12, NVALUE => NTASK_MAIN_QUANT);
PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 13, SVALUE => STASK_SUBDIV_DLVR);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 14, NVALUE => NTASK_HAVE_LINK);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 15, NVALUE => NTASK_UP_LEVEL);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 16, NVALUE => NTASK_LEVEL);
/* Формируем описание задачи в Ганте */
STASK_CAPTION := MAKE_INFO(SPROD_ORDER => STASK_PROD_ORDER,
SNOMEN_NAME => STASK_NOMEN_NAME,
SSUBDIV_DLVR => STASK_SUBDIV_DLVR,
NMAIN_QUANT => NTASK_MAIN_QUANT);
/* Инициализируем даты и цвет (если необходимо) */
FCPRODPLANSP_DATES_GET(DREP_DATE => DTASK_REP_DATE,
DREP_DATE_TO => DTASK_REP_DATE_TO,
DINCL_DATE => DTASK_INCL_DATE,
NHAVE_LINK => COALESCE(NTASK_HAVE_LINK, 0),
DDATE_FROM => DDATE_FROM,
DDATE_TO => DDATE_TO,
STASK_BG_COLOR => STASK_BG_COLOR,
STASK_TEXT_COLOR => STASK_TEXT_COLOR,
NTASK_PROGRESS => NTASK_PROGRESS);
/* Если цвет изначально не указан и требуется анализирование */
if (STASK_BG_COLOR is null) then
/* Формирование характеристик элемента ганта */
MAKE_GANT_ITEM(NDEFRESLIZ => NTASK_DEFRESLIZ,
NREL_FACT => NTASK_REL_FACT,
NDEFSTART => NTASK_DEFSTART,
STASK_BG_COLOR => STASK_BG_COLOR,
STASK_BG_PROGRESS_COLOR => STASK_BG_PROGRESS_COLOR,
NTASK_PROGRESS => NTASK_PROGRESS);
end if;
/* Сформируем основную спецификацию */
RGT := PKG_P8PANELS_VISUAL.TGANTT_TASK_MAKE(NRN => NTASK_RN,
SNUMB => COALESCE(STASK_ROUTE, 'Отсутствует'),
SCAPTION => STASK_CAPTION,
SNAME => STASK_NOMEN_NAME,
DSTART => DDATE_FROM,
DEND => DDATE_TO,
NPROGRESS => NTASK_PROGRESS,
SBG_COLOR => STASK_BG_COLOR,
STEXT_COLOR => STASK_TEXT_COLOR,
SBG_PROGRESS_COLOR => STASK_BG_PROGRESS_COLOR,
BREAD_ONLY => true,
BREAD_ONLY_DATES => true,
BREAD_ONLY_PROGRESS => true);
/* Заполним значение динамических атрибутов */
FILL_TASK_ATTRS(RG => RG,
RGT => RGT,
SPROD_ORDER => STASK_PROD_ORDER,
SSUBDIV_DLVR => STASK_SUBDIV_DLVR,
NMAIN_QUANT => NTASK_MAIN_QUANT,
NDEFRESLIZ => NTASK_DEFRESLIZ,
NREL_FACT => NTASK_REL_FACT,
NDEFSTART => NTASK_DEFSTART,
NLEVEL => NTASK_LEVEL);
/* Собираем зависимости */
for LINK in (select T.RN
from FCPRODPLANSP T
where T.PRN = NTASK_PRN
and T.UP_LEVEL = NTASK_RN
and ((NLEVEL is null) or ((NLEVEL is not null) and (NLEVEL >= NTASK_LEVEL + 1))))
loop
/* Добавляем зависимости */
PKG_P8PANELS_VISUAL.TGANTT_TASK_ADD_DEPENDENCY(RTASK => RGT, NDEPENDENCY => LINK.RN);
end loop;
/* Добавляем основную спецификацию в диаграмму */
PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK(RGANTT => RG, RTASK => RGT);
end loop; end loop;
/* Освобождаем курсор */ /* Добавляем основную спецификацию в диаграмму */
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK(RGANTT => RG, RTASK => RGT);
exception end loop;
when others then
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
raise;
end;
/* Формируем список */ /* Формируем список */
COUT := PKG_P8PANELS_VISUAL.TGANTT_TO_XML(RGANTT => RG); COUT := PKG_P8PANELS_VISUAL.TGANTT_TO_XML(RGANTT => RG);
end FCPRODPLANSP_GET; end FCPRODPLANSP_GET;
@ -575,14 +500,14 @@ create or replace package body PKG_P8PANELS_MECHREC as
and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */
UR.ROLEID UR.ROLEID
from USERROLES UR from USERROLES UR
where UR.AUTHID = UTILIZER) where UR.AUTHID = UTILIZER())
union all union all
select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */ select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */
null null
from USERPRIV UP from USERPRIV UP
where UP.JUR_PERS = P.JUR_PERS where UP.JUR_PERS = P.JUR_PERS
and UP.UNITCODE = 'CostProductPlans' and UP.UNITCODE = 'CostProductPlans'
and UP.AUTHID = UTILIZER)) as NCOUNT_DOCS and UP.AUTHID = UTILIZER())) as NCOUNT_DOCS
from ACATALOG T, from ACATALOG T,
UNITLIST UL UNITLIST UL
where T.DOCNAME = 'CostProductPlans' where T.DOCNAME = 'CostProductPlans'

View File

@ -74,28 +74,30 @@ create or replace package body PKG_P8PANELS_SAMPLES as
NVERSION := GET_SESSION_VERSION(SUNITCODE => 'AGNLIST'); NVERSION := GET_SESSION_VERSION(SUNITCODE => 'AGNLIST');
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);
PKG_XFAST.DOWN_NODE(SNAME => 'DATA'); PKG_XFAST.DOWN_NODE(SNAME => 'DATA');
for C in (select D.* for C in (select TMP.*
from (select T.RN NRN, from (select D.*,
T.AGNABBR SAGNABBR, ROWNUM NROWNUM
T.AGNNAME SAGNNAME from (select T.RN NRN,
from AGNLIST T T.AGNABBR SAGNABBR,
where T.VERSION = NVERSION T.AGNNAME SAGNNAME
and exists (select /*+ INDEX(UP I_USERPRIV_CATALOG_ROLEID) */ from AGNLIST T
null where T.VERSION = NVERSION
from USERPRIV UP and exists (select /*+ INDEX(UP I_USERPRIV_CATALOG_ROLEID) */
where UP.CATALOG = T.CRN null
and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ from USERPRIV UP
UR.ROLEID where UP.CATALOG = T.CRN
from USERROLES UR and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */
where UR.AUTHID = UTILIZER) UR.ROLEID
union all from USERROLES UR
select /*+ INDEX(UP I_USERPRIV_CATALOG_AUTHID) */ where UR.AUTHID = UTILIZER)
null union all
from USERPRIV UP select /*+ INDEX(UP I_USERPRIV_CATALOG_AUTHID) */
where UP.CATALOG = T.CRN null
and UP.AUTHID = UTILIZER) from USERPRIV UP
order by T.RN desc) D where UP.CATALOG = T.CRN
where ROWNUM <= 10) and UP.AUTHID = UTILIZER)
order by T.RN desc) D) TMP
where TMP.NROWNUM <= 10)
loop loop
PKG_XFAST.DOWN_NODE(SNAME => 'AGENTS'); PKG_XFAST.DOWN_NODE(SNAME => 'AGENTS');
PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => C.NRN); PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => C.NRN);
@ -301,16 +303,22 @@ create or replace package body PKG_P8PANELS_SAMPLES as
/* Собираем запрос */ /* Собираем запрос */
CSQL := 'select * CSQL := 'select *
from (select D.*, from (select D.*,
ROWNUM NROW %ROWNUM% NROW
from (select AG.AGNABBR SAGNABBR, from (select AG.AGNABBR SAGNABBR,
AG.AGNNAME SAGNNAME, AG.AGNNAME SAGNNAME,
AG.AGNTYPE NAGNTYPE AG.AGNTYPE NAGNTYPE
from AGNLIST AG from AGNLIST AG
where exists (select /*+ INDEX(UP I_USERPRIV_CATALOG_ROLEID) */ null from USERPRIV UP where UP.CATALOG = AG.CRN and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ UR.ROLEID from USERROLES UR where UR.AUTHID = UTILIZER) where exists (select /*+ INDEX(UP I_USERPRIV_CATALOG_ROLEID) */ null from USERPRIV UP where UP."CATALOG" = AG.CRN and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ UR.ROLEID from USERROLES UR where UR.AUTHID = UTILIZER())
union all union all
select /*+ INDEX(UP I_USERPRIV_CATALOG_AUTHID) */ null from USERPRIV UP where UP.CATALOG = AG.CRN and UP.AUTHID = UTILIZER) select /*+ INDEX(UP I_USERPRIV_CATALOG_AUTHID) */ null from USERPRIV UP where UP."CATALOG" = AG.CRN and UP.AUTHID = UTILIZER())
and AG.RN in (select ID from COND_BROKER_IDSMART where IDENT = :NIDENT) %ORDER_BY%) D) F and AG.RN in (select ID from COND_BROKER_IDSMART where IDENT = :NIDENT) %ORDER_BY%) D) F
where F.NROW between :NROW_FROM and :NROW_TO'; where F.NROW between :NROW_FROM and :NROW_TO';
/* Корректировка запроса под СУБД */
if (PKG_COMPATIBLE.DATABASE_() = 0) then
CSQL := replace(csql, '%ROWNUM%', 'ROWNUM');
else
CSQL := replace(csql, '%ROWNUM%', '(row_number() over())::numeric');
end if;
/* Учтём сортировки */ /* Учтём сортировки */
PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL);
/* Учтём фильтры */ /* Учтём фильтры */
@ -331,6 +339,7 @@ create or replace package body PKG_P8PANELS_SAMPLES as
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 1); PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 1);
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2);
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 3); PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 3);
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4);
/* Делаем выборку */ /* Делаем выборку */
if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then
null; null;