diff --git a/db/PKG_P8PANELS_PROJECTS.pck b/db/PKG_P8PANELS_PROJECTS.pck index fbfcef9..2c15086 100644 --- a/db/PKG_P8PANELS_PROJECTS.pck +++ b/db/PKG_P8PANELS_PROJECTS.pck @@ -193,9 +193,6 @@ create or replace package PKG_P8PANELS_PROJECTS as COUT out clob -- Сериализованная таблица данных ); - /* Формирование расчетной таблицы "PM0010" - "Калькуляция этапа проекта" */ - procedure STAGES_CT_CALC; - /* Подбор записей журнала затрат по статье калькуляции этапа проекта */ procedure STAGE_ARTS_SELECT_COST_FACT ( @@ -1860,188 +1857,6 @@ text="ПРАВА ДОСТУПА!!!!" COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); end STAGES_LIST; - /* Считывание записи проекта/этапа для расчётной таблицы "PM0010" - "Калькуляция этапа проекта" */ - procedure STAGES_CT_CALC_LOAD_PROJECT - ( - RPRJ out PROJECT%rowtype, -- Запись проекта - RSTG out PROJECTSTAGE%rowtype -- Запись этапа проекта - ) - is - NCOMPANY PKG_STD.TREF; -- Рег. номер организации из входных параметров - SPROJECT_CODE PKG_STD.TSTRING; -- Код проета из параметров - SPROJECT_STAGE_NUMB PKG_STD.TSTRING; -- Номер этапа проекта из входных параметров - begin - /* Считывание параметра "Организация" */ - PRSG_CALCTAB_IMAGE.READ_PARAMETER_NUM(SNAME => SSTAGES_CT_CALC_PRM_COMP, NVALUE => NCOMPANY); - /* Считывание параметра "Код проекта" */ - PRSG_CALCTAB_IMAGE.READ_PARAMETER_STR(SNAME => SSTAGES_CT_CALC_PRM_PRJ, SVALUE => SPROJECT_CODE); - /* Считывание параметра "Номер этапа проекта" */ - PRSG_CALCTAB_IMAGE.READ_PARAMETER_STR(SNAME => SSTAGES_CT_CALC_PRM_STG, SVALUE => SPROJECT_STAGE_NUMB); - /* Читаем данные */ - begin - /* Проект */ - select P.* - into RPRJ - from PROJECT P - where P.COMPANY = NCOMPANY - and P.CODE = SPROJECT_CODE; - /* Этап */ - select PS.* - into RSTG - from PROJECTSTAGE PS - where PS.PRN = RPRJ.RN - and trim(PS.NUMB) = trim(SPROJECT_STAGE_NUMB); - exception - when NO_DATA_FOUND then - P_EXCEPTION(0, - 'Этап "%s" проекта "%s" в организации "%s" не определён.', - COALESCE(SPROJECT_STAGE_NUMB, '<НЕ УКАЗАН>'), - COALESCE(SPROJECT_CODE, '<НЕ УКАЗАН>'), - COALESCE(TO_CHAR(NCOMPANY), '<НЕ УКАЗАНА>')); - end; - end STAGES_CT_CALC_LOAD_PROJECT; - - /* Формирование заголовков таблиц для расчётной таблицы "PM0010" - "Калькуляция этапа проекта" */ - procedure STAGES_CT_CALC_TABLE_CAPTIONS - is - RPRJ PROJECT%rowtype; -- Запись проекта - RSTG PROJECTSTAGE%rowtype; -- Запись этапа проекта - begin - /* Считаем проект и этап */ - STAGES_CT_CALC_LOAD_PROJECT(RPRJ => RPRJ, RSTG => RSTG); - /* Работаем от имени таблицы */ - case PRSG_CALCTAB.TABLE_NAME - /* Таблица "Статьи калькуляции" */ - when SSTAGES_CT_CALC_TBL_CLARTS then - PRSG_CALCTAB_BUILD.WRITE_TABLE_CAPTION(STEXT => 'Калькуляция этапа "' || trim(RSTG.NUMB) || '" проекта "' || - RPRJ.CODE || '"'); - /* Неизвестная таблица */ - else - null; - end case; - end STAGES_CT_CALC_TABLE_CAPTIONS; - - /* Формирование строк для расчетной таблицы "PM0010" - "Калькуляция этапа проекта" */ - procedure STAGES_CT_CALC_BUILD_LINES - is - NCOMPANY PKG_STD.TREF; -- Рег. номер организации из входных параметров - NVERSION PKG_STD.TREF; -- Рег. номер версии словаря "Статьи затрат" - SCRN PKG_STD.TSTRING; -- Наименование каталога статей калькуляции в словаре "Статьи затрат" - NCRN PKG_STD.TREF; -- Рег. номер каталога статей калькуляции в словаре "Статьи затрат" - BCREATED boolean := false; -- Флаг успешного добавления строк в таблицу - begin - /* Строки для таблицы "Статьи калькуляции" */ - if (PRSG_CALCTAB.TABLE_NAME = SSTAGES_CT_CALC_TBL_CLARTS) then - /* Считывание параметра "Организация" */ - PRSG_CALCTAB_IMAGE.READ_PARAMETER_NUM(SNAME => SSTAGES_CT_CALC_PRM_COMP, NVALUE => NCOMPANY); - /* Считывание параметра "Каталог статей калькуляции" */ - PRSG_CALCTAB_IMAGE.READ_PARAMETER_STR(SNAME => SSTAGES_CT_CALC_PRM_ARTSCAT, SVALUE => SCRN); - /* Находим версию словаря "Статьи затрат" */ - FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'FinPlanArticles', NVERSION => NVERSION); - /* Находим рег. номер каталога статей калькуляции */ - FIND_ACATALOG_NAME(NFLAG_SMART => 0, - NCOMPANY => NCOMPANY, - NVERSION => NVERSION, - SUNITCODE => 'FinPlanArticles', - SNAME => SCRN, - NRN => NCRN); - /* Идем по статьям калькуляции */ - for C in (select T.RN - from FPDARTCL T - where T.VERSION = NVERSION - and T.CRN = NCRN - order by T.CODE) - loop - /* Добавим строку */ - PRSG_CALCTAB_BUILD.APPEND_ROW_COPY(NSOURCE => C.RN); - /* Поднимем флаг добавления */ - BCREATED := true; - end loop; - /* Если статей не нашли */ - if (not BCREATED) then - P_EXCEPTION(0, 'Не задан набор статей калькуляции.'); - end if; - end if; - end STAGES_CT_CALC_BUILD_LINES; - - /* Наполнение строк для расчетной таблицы "PM0010" - "Калькуляция этапа проекта" */ - procedure STAGES_CT_CALC_FILL_LINES - is - RCURSOR PRSG_CALCTAB.TCURSOR; -- Маркер коллекции строк таблицы - RFPDARTCL FPDARTCL%rowtype; -- Запись статьи калькуляции в словаре - NSUMM_PL PKG_STD.TNUMBER; -- Плановая сумма (считанная из хранилища расчётной таблицы) - begin - /* Выбор листа и таблицы "Статьи калькуляции"*/ - PRSG_CALCTAB_IMAGE.SELECT_TABLE(SSHEET_NAME => SSTAGES_CT_CALC_SH_CACL, STABLE_NAME => SSTAGES_CT_CALC_TBL_CLARTS); - /* Первая строка */ - PRSG_CALCTAB_IMAGE.FIRST_ROW(SROW_NAME => SSTAGES_CT_CALC_LN_ARTS, RCURSOR => RCURSOR); - /* Цикл по строкам */ - loop - /* Cчитаем статью */ - begin - select A.* into RFPDARTCL from FPDARTCL A where A.RN = RCURSOR.ROW_SOURCE; - exception - when NO_DATA_FOUND then - PKG_MSG.RECORD_NOT_FOUND(NFLAG_SMART => 0, NDOCUMENT => RCURSOR.ROW_SOURCE, SUNIT_TABLE => 'FPDARTCL'); - end; - /* Заполняем колонки - "Номер" */ - PRSG_CALCTAB_IMAGE.WRITE_ROW_STR(RCURSOR => RCURSOR, - SCOLUMN_NAME => SSTAGES_CT_CALC_CL_NUMB, - SVALUE => RFPDARTCL.CODE, - NSOURCE => RFPDARTCL.RN); - /* Заполняем колонки - "Наименование" */ - PRSG_CALCTAB_IMAGE.WRITE_ROW_STR(RCURSOR => RCURSOR, - SCOLUMN_NAME => SSTAGES_CT_CALC_CL_NAME, - SVALUE => RFPDARTCL.NAME, - NSOURCE => RFPDARTCL.RN); - /* Заполняем колонки - "Плановая сумма" */ - PRSG_CALCTAB_IMAGE.READ_ROW_NUM(RCURSOR => RCURSOR, - SCOLUMN_NAME => SSTAGES_CT_CALC_CL_SUMM_PL, - NVALUE => NSUMM_PL); - PRSG_CALCTAB_IMAGE.WRITE_ROW_NUM(RCURSOR => RCURSOR, - SCOLUMN_NAME => SSTAGES_CT_CALC_CL_SUMM_PL, - NVALUE => COALESCE(NSUMM_PL, 0), - NSOURCE => RFPDARTCL.RN); - /* Выходим если строк больше нет */ - if (not PRSG_CALCTAB_IMAGE.NEXT_ROW(RCURSOR => RCURSOR)) then - exit; - end if; - end loop; - end STAGES_CT_CALC_FILL_LINES; - - /* Формирование расчетной таблицы "PM0010" - "Калькуляция этапа проекта" */ - procedure STAGES_CT_CALC - is - begin - /* Работаем в зависимости от текущего режима вызова */ - case - /* Инициализация построения */ - when (PRSG_CALCTAB.CONTEXT_INIT) then - null; - /* Формирование заголовков листов */ - when (PRSG_CALCTAB.CONTEXT_SHEET_CAPTION) then - null; - /* Формирование заголовков таблиц */ - when (PRSG_CALCTAB.CONTEXT_TABLE_CAPTION) then - STAGES_CT_CALC_TABLE_CAPTIONS(); - /* Формирование столбцов */ - when (PRSG_CALCTAB.CONTEXT_COLUMN_CAPTION) then - null; - /* Формирование строк */ - when (PRSG_CALCTAB.CONTEXT_ROW_COPIES) then - STAGES_CT_CALC_BUILD_LINES(); - /* Наполнение данными */ - when (PRSG_CALCTAB.CONTEXT_BEFORE) then - STAGES_CT_CALC_FILL_LINES(); - /* Сохранение */ - when (PRSG_CALCTAB.CONTEXT_AFTER) then - null; - /* Прочее */ - else - null; - end case; - end STAGES_CT_CALC; - /* Подбор записей журнала затрат по статье калькуляции этапа проекта */ procedure STAGE_ARTS_SELECT_COST_FACT (