ЦИТК-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
@ -1550,12 +1551,12 @@ create or replace package body PKG_P8PANELS_MECHREC as
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,
@ -1585,11 +1586,20 @@ create or replace package body PKG_P8PANELS_MECHREC as
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
exception group by level
when others then order by level)
NRESULT := null; loop
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);