ЦИТК-842 - Доработка панели "Производственная программа"

This commit is contained in:
Dollerino 2024-05-06 16:20:24 +03:00
parent f0a00a31c2
commit 7cf105b236

View File

@ -1524,6 +1524,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
SPLAN_TITLE PKG_STD.TSTRING; -- Заголовок плана SPLAN_TITLE PKG_STD.TSTRING; -- Заголовок плана
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
NTASK_CLASS PKG_STD.TNUMBER; -- Класс задачи NTASK_CLASS PKG_STD.TNUMBER; -- Класс задачи
NLEVEL_FILTER PKG_STD.TNUMBER; -- Уровень для фильтра
/* Объединение значений в строковое представление */ /* Объединение значений в строковое представление */
function MAKE_INFO function MAKE_INFO
@ -1547,49 +1548,58 @@ create or replace package body PKG_P8PANELS_MECHREC as
/* Считывание максимального уровня иерархии плана по каталогу */ /* Считывание максимального уровня иерархии плана по каталогу */
function PRODPLAN_MAX_LEVEL_GET function PRODPLAN_MAX_LEVEL_GET
( (
NCRN in number -- Рег. номер каталога планов NCRN in number -- Рег. номер каталога планов
) return number -- Максимальный уровень иерархии ) return number -- Максимальный уровень иерархии
is is
NRESULT PKG_STD.TNUMBER; -- Максимальный уровень иерархии NRESULT PKG_STD.TNUMBER := 1; -- Максимальный уровень иерархии
NTOTAL PKG_STD.TNUMBER := 0; -- Сумма документов по проверяемому уровню
begin begin
/* Считываем максимальный уровень */ /* Цикл по уровням каталога планов */
begin for REC in (select level,
select max(level) count(TMP.RN) COUNT_DOCS
into NRESULT from (select T.RN,
from (select T.RN, T.UP_LEVEL
T.UP_LEVEL from FCPRODPLAN P,
from FCPRODPLAN P, FCPRODPLANSP T,
FCPRODPLANSP T, FINSTATE FS
FINSTATE FS where P.CRN = NCRN
where P.CRN = NCRN and P.CATEGORY = NFCPRODPLAN_CATEGORY
and P.CATEGORY = NFCPRODPLAN_CATEGORY and P.STATUS = NFCPRODPLAN_STATUS
and P.STATUS = NFCPRODPLAN_STATUS and FS.RN = P.TYPE
and FS.RN = P.TYPE and FS.CODE = SFCPRODPLAN_TYPE
and FS.CODE = SFCPRODPLAN_TYPE and exists (select /*+ INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */
and exists (select /*+ INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */ 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.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
and T.PRN = P.RN and T.MAIN_QUANT > 0) TMP
and T.MAIN_QUANT > 0) 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; group by level
exception order by level)
when others then loop
NRESULT := null; /* Получаем количество задач с учетом текущего уровня */
end; NTOTAL := NTOTAL + REC.COUNT_DOCS;
/* Если сумма документов по текущему уровню превышает максимальное количество задач */
if (NTOTAL >= NMAX_TASKS) then
/* Выходим из цикла */
exit;
end if;
/* Указываем текущий уровень */
NRESULT := REC.LEVEL;
end loop;
/* Возвращаем результат */ /* Возвращаем результат */
return NRESULT; return NRESULT;
end PRODPLAN_MAX_LEVEL_GET; end PRODPLAN_MAX_LEVEL_GET;
@ -1620,7 +1630,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
/* Инициализация динамических атрибутов */ /* Инициализация динамических атрибутов */
procedure TASK_ATTRS_INIT procedure TASK_ATTRS_INIT
( (
RG in out PKG_P8PANELS_VISUAL.TGANTT -- Описание диаграммы Ганта RG in out nocopy PKG_P8PANELS_VISUAL.TGANTT -- Описание диаграммы Ганта
) )
is is
begin begin
@ -1696,7 +1706,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
/* Инициализация цветов */ /* Инициализация цветов */
procedure TASK_COLORS_INIT procedure TASK_COLORS_INIT
( (
RG in out PKG_P8PANELS_VISUAL.TGANTT -- Описание диаграммы Ганта RG in out nocopy PKG_P8PANELS_VISUAL.TGANTT -- Описание диаграммы Ганта
) )
is is
begin begin
@ -1966,6 +1976,8 @@ create or replace package body PKG_P8PANELS_MECHREC as
TASK_COLORS_INIT(RG => RG); TASK_COLORS_INIT(RG => RG);
/* Определяем максимальный уровень иерархии */ /* Определяем максимальный уровень иерархии */
NMAX_LEVEL := PRODPLAN_MAX_LEVEL_GET(NCRN => NCRN); NMAX_LEVEL := PRODPLAN_MAX_LEVEL_GET(NCRN => NCRN);
/* Определяем уровень фильтра */
NLEVEL_FILTER := COALESCE(NLEVEL, NMAX_LEVEL);
/* Обходим данные */ /* Обходим данные */
for C in (select TMP.*, for C in (select TMP.*,
level NTASK_LEVEL level NTASK_LEVEL
@ -2034,7 +2046,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
and FM.RN = T.MATRES and FM.RN = T.MATRES
and D.RN = FM.NOMENCLATURE and D.RN = FM.NOMENCLATURE
and D.UMEAS_MAIN = DM.RN) TMP and D.UMEAS_MAIN = DM.RN) TMP
where ((NLEVEL is null) or ((NLEVEL is not null) and (level <= NLEVEL))) where level <= NLEVEL_FILTER
connect by prior TMP.NRN = TMP.NUP_LEVEL connect by prior TMP.NRN = TMP.NUP_LEVEL
start with TMP.NUP_LEVEL is null start with TMP.NUP_LEVEL is null
order siblings by TMP.DORDER_DATE asc) order siblings by TMP.DORDER_DATE asc)
@ -2108,7 +2120,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
where T.PRN = C.NPRN where T.PRN = C.NPRN
and T.UP_LEVEL = C.NRN and T.UP_LEVEL = C.NRN
and T.MAIN_QUANT > 0 and T.MAIN_QUANT > 0
and ((NLEVEL is null) or ((NLEVEL is not null) and (NLEVEL >= C.NTASK_LEVEL + 1)))) and NLEVEL_FILTER >= C.NTASK_LEVEL + 1)
loop loop
/* Добавляем зависимости */ /* Добавляем зависимости */
PKG_P8PANELS_VISUAL.TGANTT_TASK_ADD_DEPENDENCY(RTASK => RGT, NDEPENDENCY => LINK.RN); PKG_P8PANELS_VISUAL.TGANTT_TASK_ADD_DEPENDENCY(RTASK => RGT, NDEPENDENCY => LINK.RN);