From 61fabddaba5b3eb7ad1f838d06c410574cba7ec0 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Tue, 9 Apr 2024 19:07:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=91=D0=94:=20=D0=9F=D0=B0=D0=BD=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=20"=D0=93=D1=80=D0=B0=D1=84=D0=B8=D0=BA=D0=B8=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE=D0=B2"=20-=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D0=BD=D0=B0=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D1=87=D0=B8=D0=B5=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D1=85=20=D0=B2=20=D0=BF=D0=BE=D1=80=D1=82=D1=84=D0=B5=D0=BB?= =?UTF-8?q?=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_PROJECTS.pck | 203 ++++++++++++++++++----------------- 1 file changed, 107 insertions(+), 96 deletions(-) diff --git a/db/PKG_P8PANELS_PROJECTS.pck b/db/PKG_P8PANELS_PROJECTS.pck index 5afb251..7c23d19 100644 --- a/db/PKG_P8PANELS_PROJECTS.pck +++ b/db/PKG_P8PANELS_PROJECTS.pck @@ -1564,6 +1564,8 @@ text="Проверить, что для расчётных полей дата- from PROJECT P where P.COMPANY = NCOMPANY and P.STATE in (0, 1, 4) + and P.BEGPLAN is not null + and P.ENDPLAN is not null union all select min(PS.BEGPLAN) DBEGPLAN, max(PS.ENDPLAN) DENDPLAN @@ -1573,110 +1575,119 @@ text="Проверить, что для расчётных полей дата- and P.STATE in (0, 1, 4) and P.RN = PS.PRN and PS.STATE in (0, 1, 3) + and PS.BEGPLAN is not null + and PS.ENDPLAN is not null and PS.HRN is null); /* Инициализируем таблицу данных */ RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); - /* Формируем структуру заголовка */ - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NRN', - SCAPTION => 'Рег. номер', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SJOB', - SCAPTION => 'Работы', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SRESP', - SCAPTION => 'Ответственный', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BVISIBLE => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NSTATE', - SCAPTION => 'Состояние', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'DFROM', - SCAPTION => 'Начало работы', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, - BVISIBLE => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'DTO', - SCAPTION => 'Окончание работы', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, - BVISIBLE => false); - for Y in EXTRACT(year from DFROM) .. EXTRACT(year from DTO) - loop - SYEAR_COL_NAME := TO_CHAR(Y); - if (Y = EXTRACT(year from sysdate)) then - BEXPANDED := true; - else - BEXPANDED := false; - end if; - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => SYEAR_COL_NAME, - SCAPTION => TO_CHAR(Y), - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BEXPANDABLE => true, - BEXPANDED => BEXPANDED); - for M in 1 .. 12 + /* Если есть данные о начале и окончании проектов в портфеле */ + if ((DFROM is not null) and (DTO is not null)) then + /* Формируем структуру заголовка */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NRN', + SCAPTION => 'Рег. номер', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SJOB', + SCAPTION => 'Работы', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SRESP', + SCAPTION => 'Ответственный', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NSTATE', + SCAPTION => 'Состояние', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'DFROM', + SCAPTION => 'Начало работы', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'DTO', + SCAPTION => 'Окончание работы', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, + BVISIBLE => false); + for Y in EXTRACT(year from DFROM) .. EXTRACT(year from DTO) loop - DFROM_CUR := TO_DATE('01.' || LPAD(TO_CHAR(M), 2, '0') || '.' || TO_CHAR(Y), 'dd.mm.yyyy'); - DTO_CUR := LAST_DAY(DFROM_CUR); - if ((DFROM_CUR >= DFROM) and (DTO_CUR <= DTO)) then - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => SYEAR_COL_NAME || '_' || TO_CHAR(M), - SCAPTION => LPAD(TO_CHAR(M), 2, '0'), - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - SPARENT => SYEAR_COL_NAME); + SYEAR_COL_NAME := TO_CHAR(Y); + if (Y = EXTRACT(year from sysdate)) then + BEXPANDED := true; + else + BEXPANDED := false; end if; + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => SYEAR_COL_NAME, + SCAPTION => TO_CHAR(Y), + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BEXPANDABLE => true, + BEXPANDED => BEXPANDED); + for M in 1 .. 12 + loop + DFROM_CUR := TO_DATE('01.' || LPAD(TO_CHAR(M), 2, '0') || '.' || TO_CHAR(Y), 'dd.mm.yyyy'); + DTO_CUR := LAST_DAY(DFROM_CUR); + if ((DFROM_CUR >= DFROM) and (DTO_CUR <= DTO)) then + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => SYEAR_COL_NAME || '_' || TO_CHAR(M), + SCAPTION => LPAD(TO_CHAR(M), 2, '0'), + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + SPARENT => SYEAR_COL_NAME); + end if; + end loop; end loop; - end loop; - /* Обходим открытые проекты */ - for PR in (select P.* - from PROJECT P - where P.COMPANY = NCOMPANY - and P.STATE in (0, 1, 4) - order by P.BEGPLAN) - loop - /* Добвим группу для проекта */ - SPRJ_GROUP_NAME := PR.RN; - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG, - SNAME => SPRJ_GROUP_NAME, - SCAPTION => PR.CODE || ' - ' || PR.NAME, - BEXPANDABLE => true, - BEXPANDED => true); - /* Обходим этапы проекта */ - for ST in (select PS.RN NRN, - trim(PS.NUMB) || ' - ' || PS.NAME SJOB, - COALESCE(AG.AGNABBR, IND.NAME) SRESP, - PS.STATE NSTATE, - PS.BEGPLAN DFROM, - PS.ENDPLAN DTO - from PROJECTSTAGE PS, - AGNLIST AG, - INS_DEPARTMENT IND - where PS.PRN = PR.RN - and PS.STATE in (0, 1, 3) - and PS.HRN is null - and PS.RESPONSIBLE = AG.RN(+) - and PS.SUBDIV_RESP = IND.RN(+) - order by PS.NUMB) + /* Обходим открытые проекты */ + for PR in (select P.* + from PROJECT P + where P.COMPANY = NCOMPANY + and P.STATE in (0, 1, 4) + and P.BEGPLAN is not null + and P.ENDPLAN is not null + order by P.BEGPLAN) loop - /* Инициализируем строку */ - RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); - /* Добавляем колонки с данными */ - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN', NVALUE => ST.NRN); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SJOB', SVALUE => ST.SJOB); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SRESP', SVALUE => ST.SRESP); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NSTATE', NVALUE => ST.NSTATE); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'DFROM', DVALUE => ST.DFROM); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'DTO', DVALUE => ST.DTO); - /* Добавим строку для этапа */ - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + /* Добвим группу для проекта */ + SPRJ_GROUP_NAME := PR.RN; + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG, + SNAME => SPRJ_GROUP_NAME, + SCAPTION => PR.CODE || ' - ' || PR.NAME, + BEXPANDABLE => true, + BEXPANDED => true); + /* Обходим этапы проекта */ + for ST in (select PS.RN NRN, + trim(PS.NUMB) || ' - ' || PS.NAME SJOB, + COALESCE(AG.AGNABBR, IND.NAME) SRESP, + PS.STATE NSTATE, + PS.BEGPLAN DFROM, + PS.ENDPLAN DTO + from PROJECTSTAGE PS, + AGNLIST AG, + INS_DEPARTMENT IND + where PS.PRN = PR.RN + and PS.STATE in (0, 1, 3) + and PS.BEGPLAN is not null + and PS.ENDPLAN is not null + and PS.HRN is null + and PS.RESPONSIBLE = AG.RN(+) + and PS.SUBDIV_RESP = IND.RN(+) + order by PS.NUMB) + loop + /* Инициализируем строку */ + RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN', NVALUE => ST.NRN); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SJOB', SVALUE => ST.SJOB); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SRESP', SVALUE => ST.SRESP); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NSTATE', NVALUE => ST.NSTATE); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'DFROM', DVALUE => ST.DFROM); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'DTO', DVALUE => ST.DTO); + /* Добавим строку для этапа */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + end loop; end loop; - end loop; + end if; /* Сериализуем описание */ COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1); end GRAPH;