create or replace package PKG_P8PANELS_RRPCONFED as /* Получение разделов регламентированного отчёта */ procedure RRPCONF_GET_SECTIONS ( NRN_RRPCONF in number, -- Рег. номер настройки форм регламентированного отчёта NROW_ORDER in number := 0, -- Порядок сортировки строк NCOL_ORDER in number := 0, -- Порядок сортировки граф COUT out clob -- Список разделов ); /* Добавление раздела регламентированного отчёта */ procedure RRPCONFSCTN_INSERT ( NPRN in number, -- Рег. номер настройки форм регламентированного отчёта SCODE in varchar2, -- Мнемокод SNAME in varchar2, -- Наименование NRN out number -- Рег. номер созданной записи ); /* Исправление раздела регламентированного отчёта */ procedure RRPCONFSCTN_UPDATE ( NRN in number, -- Рег. номер раздела SCODE in varchar2, -- Мнемокод раздела SNAME in varchar2 -- Наименование раздела ); /* Удаление раздела регламентированного отчёта */ procedure RRPCONFSCTN_DELETE ( NRN in number -- Рег. номер раздела ); /* Получение кодов настройки, раздела и показателя раздела по ид. показателя раздела */ procedure RRPCONFSCTNMRK_GET_CODES ( NRN in number, -- Рег. номер показателя раздела SRRPCONF out varchar2, -- Мнемокод настройки формы регламентированного отчёта SRRPCONFSCTN out varchar2, -- Мнемокод раздела SRRPCONFSCTNMRK out varchar2 -- Мнемокод показателя раздела ); /* Формирование кода и наименования показателя раздела регламентированного отчёта */ procedure RRPCONFSCTNMRK_GET_CODE_NAME ( NRRPCONFSCTN in number, -- Рег. номер раздела NRRPROW in number, -- Рег. номер строки NRRPCOLUMN in number, -- Рег. номер графы SCODE out varchar2, -- Мнемокод показателя раздела SNAME out varchar2 -- Наименование показателя раздела ); /* Формирование кода и наименования показателя раздела регламентированного отчёта */ procedure RRPCONFSCTNMRK_GET_NAME ( NRRPCONFSCTNMRK in number, -- Рег. номер показателя SNAME out varchar2 -- Наименование показателя раздела ); /* Добавление показателя раздела регламентированного отчёта */ procedure RRPCONFSCTNMRK_INSERT ( NPRN in number, -- Рег. номер раздела SCODE in varchar2, -- Мнемокод показателя раздела SNAME in varchar2, -- Наименование показателя раздела NRRPROW in number, -- Рег. номер строки NRRPCOLUMN in number, -- Рег. номер графы NRN out number -- Рег. номер созданной записи ); /* Исправление показателя раздела регламентированного отчёта */ procedure RRPCONFSCTNMRK_UPDATE ( NRN in number, -- Рег. номер показателя раздела SNAME in varchar2 -- Новое наименование ); /* Удаление показателя раздела регламентированного отчёта */ procedure RRPCONFSCTNMRK_DELETE ( NRN in number -- Рег. номер показателя раздела ); end PKG_P8PANELS_RRPCONFED; / create or replace package body PKG_P8PANELS_RRPCONFED as /* Маски для формирования представления параметров состава показателя */ SPRM_MASK_ACC_DC constant PKG_STD.TSTRING := 'ДЕБЕТ_КРЕДИТ'; -- Маска для параметров "Счет дебет" и "Счет кредит" SPRM_MASK_ACC constant PKG_STD.TSTRING := 'СЧЕТ'; -- Маска для параметров "Счет" SPRM_MASK_ACC_WO_ANL constant PKG_STD.TSTRING := 'СЧЕТ_БЕЗ_АНЛ'; -- Маска для параметров "Счет" без учета аналитик SPRM_MASK_DATE_FROM constant PKG_STD.TSTRING := 'ДАТА_С'; -- Маска для параметров "Дата с" SPRM_MASK_DATE_TO constant PKG_STD.TSTRING := 'ДАТА_ПО'; -- Маска для параметров "Дата по" SPRM_MASK_RRPCONF constant PKG_STD.TSTRING := 'НАСТРОЙКА'; -- Маска для параметров настройки РО /* Константы - мнемокоды разделов */ SUNIT_RRPCONFSCTN constant PKG_STD.TSTRING := 'RRPConfigSection'; -- Раздел настройки регламентированного отчета SUNIT_RRPCONFSCTNMRK constant PKG_STD.TSTRING := 'RRPConfigSectionMark'; -- Показатель раздела настройки регламентированного отчета /* Константы - действия разделов */ SACTION_DELETE constant PKG_STD.TSTRING := 'DELETE'; -- Удаление /* Получение доступности действия раздела */ function UTL_UNIT_ACTION_GET_ALLOW ( SUNIT in varchar2, -- Мнемокод раздела (см. константы SUNIT_*) SACTION in varchar2, -- Действие (см. константы SACTION_*) NRN in number -- Рег. номер записи ) return number -- Доступность действия (0 - недоступно, 1 - доступно) is NRESULT PKG_STD.TNUMBER; -- Доступность действия (0 - недоступно, 1 - доступно) begin /* Исходим отраздела */ case SUNIT /* Раздел настройки регламентированного отчета */ when SUNIT_RRPCONFSCTN then /* Исходим от действия */ case SACTION /* Удаление */ when SACTION_DELETE then /* Если раздел есть в сформированном отчете/параметре отчета/имеет дочерний раздел - удаление невозможно */ begin select 0 into NRESULT from DUAL where exists (select null from RRPDOC_STORAGE_SCTN S where S.RRPCONFSCTN = NRN) or exists (select null from RRPDOCPRM P where P.RRPCONFSCTN = NRN) or exists (select null from RRPCONFSCTN C where C.RRPCONFSCTN = NRN); exception /* Если таких записей нет - удаление возможно */ when NO_DATA_FOUND then NRESULT := 1; /* Если необработанная ошибка - удаление невозможно */ when others then NRESULT := 0; end; /* Действие неопределено */ else NRESULT := 1; end case; /* Показатель раздела настройки регламентированного отчета */ when SUNIT_RRPCONFSCTNMRK then /* Исходим от действия */ case SACTION /* Удаление */ when SACTION_DELETE then /* Если показатель есть в сформированном отчете - удаление невозможно */ begin select 0 into NRESULT from DUAL where exists (select null from RRPDOC_STORAGE_MRK M where M.RRPCONFSCTNMRK = NRN); exception /* Если таких записей нет - удаление возможно */ when NO_DATA_FOUND then NRESULT := 1; /* Если необработанная ошибка - удаление невозможно */ when others then NRESULT := 0; end; else NRESULT := 1; end case; /* Раздел неопределен */ else NRESULT := 1; end case; /* Возвращаем результат */ return NRESULT; end UTL_UNIT_ACTION_GET_ALLOW; /* Формирование описателя состава показателя регламентированного отчета */ function UTL_RRPCONFSCTNMRKCN_GET_DESC ( NCOMPANY in number, -- Рег. номер организации NRRPCONFSCTNMRKCN in number -- Рег. номер состава показателя регламентированного отчета ) return varchar2 -- Описатель показателя is SRESULT PKG_STD.TSTRING; -- Описатель показателя SCN_DESC PKG_STD.TSTRING; -- Основные параметры состава показателя RREC RRPCONFSCTNMRKCN%rowtype; -- Запись состава показателя регламентированного отчета RRRPCONFSCTNMRK RRPCONFSCTNMRK%rowtype; -- Запись показателя регламентированного отчета /* Считывание мнемокода показателя по рег. номеру состава показателя */ function UTL_MARK_GET_CODE_BY_CN ( NRRPCONFSCTNMRKCN in number -- Рег. номер состава показателя ) return varchar2 -- Мнемокод показателя is SRESULT PKG_STD.TSTRING; -- Мнемокод показателя begin /* Считываем мнемокод показателя */ begin select M.CODE into SRESULT from RRPCONFSCTNMRKCN T, RRPCONFSCTNMRK M where T.RN = NRRPCONFSCTNMRKCN and M.RN = T.PRN; exception when others then SRESULT := null; end; /* Возвращаем результат */ return SRESULT; end UTL_MARK_GET_CODE_BY_CN; /* Считывание мнемокода настройки по рег. номеру состава показателя */ function UTL_CONF_GET_CODE_BY_CN ( NRRPCONFSCTNMRKCN in number -- Рег. номер состава показателя ) return varchar2 -- Мнемокод настройки регламентированного отчета is SRESULT PKG_STD.TSTRING; -- Мнемокод настройки регламентированного отчета begin /* Считываем мнемокод настройки регламентированного отчета */ begin select C.CODE into SRESULT from RRPCONFSCTNMRKCN T, RRPCONFSCTNMRK M, RRPCONF C where T.RN = NRRPCONFSCTNMRKCN and M.RN = T.PRN and C.RN = M.RRPCONF; exception when others then SRESULT := null; end; /* Возвращаем результат */ return SRESULT; end UTL_CONF_GET_CODE_BY_CN; /* Формирование представления параметров состава показателя */ procedure MAKE_PRMS_BY_MASK ( SPRMS_DESC in out varchar2, -- Строковое представление параметров NCOMPANY in number, -- Рег. номер организации NRRPCONFSCTNMRKCN in number, -- Рег. номер состава показателя SMASK in varchar2 -- Маска (см. константы SPRM_MASK_*) ) is SDATE_FROM PKG_STD.TSTRING; -- Строковое представление "Дата с" SDATE_TO PKG_STD.TSTRING; -- Строковое представление "Дата по" DDATE_FROM PKG_STD.TLDATE; -- ДАТА_С SDATE_FROM_PATTERN PKG_STD.TSTRING; -- ДАТА_С_ШАБЛОН DDATE_TO PKG_STD.TLDATE; -- ДАТА_ПО SDATE_TO_PATTERN PKG_STD.TSTRING; -- ДАТА_ПО_ШАБЛОН SACCOUNT_DEBIT PKG_STD.TSTRING; -- СЧЕТ_ДЕБЕТ SANALYTIC_DEBIT1 PKG_STD.TSTRING; -- АНАЛИТИКА1_ДЕБЕТ SANALYTIC_DEBIT2 PKG_STD.TSTRING; -- АНАЛИТИКА2_ДЕБЕТ SANALYTIC_DEBIT3 PKG_STD.TSTRING; -- АНАЛИТИКА3_ДЕБЕТ SANALYTIC_DEBIT4 PKG_STD.TSTRING; -- АНАЛИТИКА4_ДЕБЕТ SANALYTIC_DEBIT5 PKG_STD.TSTRING; -- АНАЛИТИКА5_ДЕБЕТ SACCOUNT_CREDIT PKG_STD.TSTRING; -- СЧЕТ_КРЕДИТ SANALYTIC_CREDIT1 PKG_STD.TSTRING; -- АНАЛИТИКА1_КРЕДИТ SANALYTIC_CREDIT2 PKG_STD.TSTRING; -- АНАЛИТИКА2_КРЕДИТ SANALYTIC_CREDIT3 PKG_STD.TSTRING; -- АНАЛИТИКА3_КРЕДИТ SANALYTIC_CREDIT4 PKG_STD.TSTRING; -- АНАЛИТИКА4_КРЕДИТ SANALYTIC_CREDIT5 PKG_STD.TSTRING; -- АНАЛИТИКА5_КРЕДИТ SACCOUNT PKG_STD.TSTRING; -- СЧЕТ SANALYTIC1 PKG_STD.TSTRING; -- АНАЛИТИКА1 SANALYTIC2 PKG_STD.TSTRING; -- АНАЛИТИКА2 SANALYTIC3 PKG_STD.TSTRING; -- АНАЛИТИКА3 SANALYTIC4 PKG_STD.TSTRING; -- АНАЛИТИКА4 SANALYTIC5 PKG_STD.TSTRING; -- АНАЛИТИКА5 SRRPCONF PKG_STD.TSTRING; -- НАСТРОЙКА NRRPCONF_RD PKG_STD.TNUMBER; -- НАСТРОЙКА_ТЕК SMARK_CODE PKG_STD.TSTRING; -- ПОКАЗАТЕЛЬ NMARK_CODE_RD PKG_STD.TNUMBER; -- ПОКАЗАТЕЛЬ_ТЕК SMARK_ROW_CODE PKG_STD.TSTRING; -- СТРОКА_ПОКАЗАТЕЛЯ SMARK_COL_CODE PKG_STD.TSTRING; -- ГРАФА_ПОКАЗАТЕЛЯ begin /* Получаем представление параметров исходя из маски */ case SMASK /* "Счет дебет" и "Счет кредит" */ when SPRM_MASK_ACC_DC then /* Считывание значения - Счет дебет */ SACCOUNT_DEBIT := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SACCOUNT_DEBIT_P); /* Считывание значения - Аналитический счет 1 дебет */ SANALYTIC_DEBIT1 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_DEBIT1_P); /* Считывание значения - Аналитический счет 2 дебет */ SANALYTIC_DEBIT2 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_DEBIT2_P); /* Считывание значения - Аналитический счет 3 дебет */ SANALYTIC_DEBIT3 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_DEBIT3_P); /* Считывание значения - Аналитический счет 4 дебет */ SANALYTIC_DEBIT4 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_DEBIT4_P); /* Считывание значения - Аналитический счет 5 дебет */ SANALYTIC_DEBIT5 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_DEBIT5_P); /* Считывание значения - Счет кредит */ SACCOUNT_CREDIT := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SACCOUNT_CREDIT_P); /* Считывание значения - Аналитический счет 1 кредит */ SANALYTIC_CREDIT1 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_CREDIT1_P); /* Считывание значения - Аналитический счет 2 кредит */ SANALYTIC_CREDIT2 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_CREDIT2_P); /* Считывание значения - Аналитический счет 3 кредит */ SANALYTIC_CREDIT3 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_CREDIT3_P); /* Считывание значения - Аналитический счет 4 кредит */ SANALYTIC_CREDIT4 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_CREDIT4_P); /* Считывание значения - Аналитический счет 5 кредит */ SANALYTIC_CREDIT5 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_CREDIT5_P); /* Если указан счет дебет */ if ((SACCOUNT_DEBIT is not null) or (SANALYTIC_DEBIT1 is not null) or (SANALYTIC_DEBIT2 is not null) or (SANALYTIC_DEBIT3 is not null) or (SANALYTIC_DEBIT4 is not null) or (SANALYTIC_DEBIT5 is not null)) then /* Добавляем */ SPRMS_DESC := SPRMS_DESC || 'Д:' || SACCOUNT_DEBIT || ''; /* Добавляем информацию об аналитиках */ SPRMS_DESC := SPRMS_DESC || '(' || SANALYTIC_DEBIT1 || ',' || SANALYTIC_DEBIT2 || ',' || SANALYTIC_DEBIT3 || ',' || SANALYTIC_DEBIT4 || ',' || SANALYTIC_DEBIT5 || '),'; end if; /* Если указан счет кредит */ if ((SACCOUNT_CREDIT is not null) or (SANALYTIC_CREDIT1 is not null) or (SANALYTIC_CREDIT2 is not null) or (SANALYTIC_CREDIT3 is not null) or (SANALYTIC_CREDIT4 is not null) or (SANALYTIC_CREDIT5 is not null)) then /* Добавляем */ SPRMS_DESC := SPRMS_DESC || 'К:' || SACCOUNT_CREDIT || ','; /* Добавляем информацию об аналитиках */ SPRMS_DESC := SPRMS_DESC || '(' || SANALYTIC_CREDIT1 || ',' || SANALYTIC_CREDIT2 || ',' || SANALYTIC_CREDIT3 || ',' || SANALYTIC_CREDIT4 || ',' || SANALYTIC_CREDIT5 || '),'; end if; /* "Счет" */ when SPRM_MASK_ACC then /* Считывание значения - Счет */ SACCOUNT := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SACCOUNT_P); /* Считывание значения - Аналитический счет 1 */ SANALYTIC1 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC1_P); /* Считывание значения - Аналитический счет 2 */ SANALYTIC2 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC2_P); /* Считывание значения - Аналитический счет 3 */ SANALYTIC3 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC3_P); /* Считывание значения - Аналитический счет 4 */ SANALYTIC4 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC4_P); /* Считывание значения - Аналитический счет 5 */ SANALYTIC5 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC5_P); /* Если указан счет */ if ((SACCOUNT is not null) or (SANALYTIC1 is not null) or (SANALYTIC2 is not null) or (SANALYTIC3 is not null) or (SANALYTIC4 is not null) or (SANALYTIC5 is not null)) then /* Добавляем */ SPRMS_DESC := SPRMS_DESC || 'С:' || SACCOUNT || ''; /* Добавляем информацию об аналитиках */ SPRMS_DESC := SPRMS_DESC || '(' || SANALYTIC1 || ',' || SANALYTIC2 || ',' || SANALYTIC3 || ',' || SANALYTIC4 || ',' || SANALYTIC5 || '),'; end if; /* "Счет" без аналитик */ when SPRM_MASK_ACC_WO_ANL then /* Считывание значения - Счет */ SACCOUNT := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SACCOUNT_P); /* Если счет не пустой */ if (SACCOUNT is not null) then /* Добавляем информацию по счету */ SPRMS_DESC := SPRMS_DESC || 'С:' || SACCOUNT || ','; end if; /* "Дата с" */ when SPRM_MASK_DATE_FROM then /* Считывание значения - Дата с */ DDATE_FROM := PKG_RRPCONFSCTNMRKCN.PARAM_GET_DATE_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SDATE_FROM_P); /* Считывание значения - Дата с (шаблон) */ SDATE_FROM_PATTERN := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SDATE_FROM_PATTERN_P); /* Определяем "Дата с" */ SDATE_FROM := COALESCE(TO_CHAR(DDATE_FROM, 'dd.mm.yyyy'), SDATE_FROM_PATTERN); /* Если указана дата с */ if (SDATE_FROM is not null) then /* Добавляем дату с */ SPRMS_DESC := SPRMS_DESC || 'ДС:' || SDATE_FROM || ','; end if; /* "Дата по" */ when SPRM_MASK_DATE_TO then /* Считывание значения - Дата по */ DDATE_TO := PKG_RRPCONFSCTNMRKCN.PARAM_GET_DATE_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SDATE_TO_P); /* Считывание значения - Дата по (шаблон) */ SDATE_TO_PATTERN := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SDATE_TO_PATTERN_P); /* пределяем "Дата по" */ SDATE_TO := COALESCE(TO_CHAR(DDATE_TO, 'dd.mm.yyyy'), SDATE_TO_PATTERN); /* Если указана дата по */ if (SDATE_TO is not null) then /* Добавляем дату по */ SPRMS_DESC := SPRMS_DESC || 'ДП:' || SDATE_TO || ','; end if; /* Параметры настройки РО */ when SPRM_MASK_RRPCONF then /* Считывание значения - Настройка регламентированного отчета */ SRRPCONF := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SRRPCONF_P); /* Считывание значения - Настройка регламентированного отчета (текущее) */ NRRPCONF_RD := PKG_RRPCONFSCTNMRKCN.PARAM_GET_NUM_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SRRPCONF_RD_P); /* Если указана текущая настройка */ if (NRRPCONF_RD = 1) then /* Считываем мнемокод текущей настройки */ SRRPCONF := UTL_CONF_GET_CODE_BY_CN(NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN); end if; /* Считывание значения - Мнемокод показателя */ SMARK_CODE := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SMARK_CODE_P); /* Считывание значения - Мнемокод показателя (текущее) */ NMARK_CODE_RD := PKG_RRPCONFSCTNMRKCN.PARAM_GET_NUM_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SMARK_CODE_RD_P); /* Если указан текущий показатель */ if (NMARK_CODE_RD = 1) then /* Считываем мнемокод текущей настройки */ SMARK_CODE := UTL_MARK_GET_CODE_BY_CN(NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN); end if; /* Считывание значения - Мнемокод строки показателя */ SMARK_ROW_CODE := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SMARK_ROW_CODE_P); /* Считывание значения - Мнемокод графы показателя */ SMARK_COL_CODE := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY, NPRN => NRRPCONFSCTNMRKCN, SPARAM => PKG_RRPCONFSCTNMRKCN.SMARK_COL_CODE_P); /* Если настройка указана */ if (SRRPCONF is not null) then /* Добавляем */ SPRMS_DESC := SPRMS_DESC || 'Н:' || SRRPCONF || ','; end if; /* Если мнемокод показателя указан */ if (SMARK_CODE is not null) then /* Добавляем */ SPRMS_DESC := SPRMS_DESC || 'П:' || SRRPCONF || ','; end if; /* Если строка показателя указана */ if (SMARK_ROW_CODE is not null) then /* Добавляем */ SPRMS_DESC := SPRMS_DESC || 'СТР:' || SMARK_ROW_CODE || ','; end if; /* Если графа показателя указана */ if (SMARK_COL_CODE is not null) then /* Добавляем */ SPRMS_DESC := SPRMS_DESC || 'ГРФ:' || SMARK_COL_CODE || ','; end if; else /* Незвестная маска */ null; end case; end MAKE_PRMS_BY_MASK; /* Формирование строки основных параметров для учетного раздела состава показателя */ function SOURCE_UNIT_GET_PRMS ( NCOMPANY in number, -- Рег. номер организации NRRPCONFSCTNMRKCN in number, -- Рег. номер состава показателя регламентированного отчета SSOURCE_UNIT in varchar2 -- Учетный раздел ) return varchar2 -- Строковое представление основных параметров учетного раздела is SRESULT PKG_STD.TSTRING; -- Строковое представление основных параметров учетного раздела begin /* Открываем параметры */ SRESULT := '('; /* Собираем параметры исходя из раздела */ case SSOURCE_UNIT /* Хозяйственные операции */ when 'EconomicOperations' then /* Получаем информацию по "Счет дебет" и "Счет кредит" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_ACC_DC); /* Добавляем информацию по "Дата с" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_DATE_FROM); /* Добавляем информацию по "Дата по" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_DATE_TO); /* Расчёты с дебиторами/кредиторами */ when 'DebitorsCreditorsAccounts' then /* Получаем информацию по "Счет" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_ACC); /* Добавляем информацию по "Дата с" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_DATE_FROM); /* Добавляем информацию по "Дата по" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_DATE_TO); /* Остатки средств по счетам */ when 'AccountsRemnants' then /* Получаем информацию по "Счет" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_ACC); /* Добавляем информацию по "Дата с" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_DATE_FROM); /* Остатки товарно-материальных ценностей */ when 'ValuesRemnants' then /* Получаем информацию по "Счет" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_ACC); /* Добавляем информацию по "Дата с" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_DATE_FROM); /* Дебиторская/кредиторская задолженность */ when 'DebitorsCreditorsRemnants' then /* Получаем информацию по "Счет" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_ACC); /* Добавляем информацию по "Дата с" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_DATE_FROM); /* Добавляем информацию по "Дата по" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_DATE_TO); /* Инвентарная картотека */ when 'Inventory' then /* Получаем информацию по "Счет" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_ACC); /* Добавляем информацию по "Дата с" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_DATE_FROM); /* Добавляем информацию по "Дата по" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_DATE_TO); /* Картотека МБП */ when 'ItemsCards' then /* Получаем информацию по "Счет" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_ACC_WO_ANL); /* Добавляем информацию по "Дата с" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_DATE_FROM); /* Картотека операций будущих периодов */ when 'OperCards' then /* Получаем информацию по "Счет" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_ACC); /* Добавляем информацию по "Дата с" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_DATE_FROM); /* Добавляем информацию по "Дата по" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_DATE_TO); /* Регламентированный отчет */ when 'RRPDocuments' then /* Добавляем информацию по настройке */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_RRPCONF); /* Добавляем информацию по "Дата с" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_DATE_FROM); /* Добавляем информацию по "Дата по" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_DATE_TO); /* Декларация по налогу на прибыль */ when 'DeclarationIncome' then /* Добавляем информацию по настройке */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_RRPCONF); /* Добавляем информацию по "Дата с" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_DATE_FROM); /* Добавляем информацию по "Дата по" */ MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT, NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN, SMASK => SPRM_MASK_DATE_TO); /* Неизвестный раздел */ else SRESULT := null; end case; /* Убираем лишний знак */ SRESULT := RTRIM(SRESULT, ','); /* Закрываем параметры */ SRESULT := SRESULT || ')'; /* Возвращаем результат */ return SRESULT; end SOURCE_UNIT_GET_PRMS; /* Считывание типа источинка состава показателя в текстовом представлении */ function RRPCONFSCTNMRKCN_GET_ST ( NSOURCE_TYPE in number, -- Тип источника SSOURCE_UNIT in varchar2 -- Раздел источника ) return varchar2 -- Тип источника в текстовом представлении is SRESULT PKG_STD.TSTRING; -- Тип источника в текстовом представлении begin /* Строковое представление источника значения */ case NSOURCE_TYPE when 0 then /* Исходим от раздела */ case SSOURCE_UNIT when 'EconomicOperations' then SRESULT := 'ХО'; when 'DebitorsCreditorsAccounts' then SRESULT := 'РСДК'; when 'AccountsRemnants' then SRESULT := 'ОС'; when 'ValuesRemnants' then SRESULT := 'ТМЦ'; when 'DebitorsCreditorsRemnants' then SRESULT := 'ДКЗ'; when 'Inventory' then SRESULT := 'ИК'; when 'ItemsCards' then SRESULT := 'МБП'; when 'OperCards' then SRESULT := 'КОБП'; when 'DeclarationIncome' then SRESULT := 'ДПНП'; when 'RRPDocuments' then SRESULT := 'РО'; else SRESULT := null; end case; when 1 then SRESULT := 'РП'; when 2 then SRESULT := 'ХП'; when 3 then SRESULT := 'СЗ'; when 4 then SRESULT := 'fx'; else SRESULT := null; end case; /* Возвращаем результат */ return SRESULT; end RRPCONFSCTNMRKCN_GET_ST; /* Считывание знака состава показателя в текстовом представлении */ function RRPCONFSCTNMRKCN_GET_SIGN ( NSIGN in number -- Знак состава показателя ) return varchar2 -- Знак состава показателя в текстовом представлении is SRESULT PKG_STD.TSTRING; -- Знак состава показателя в текстовом представлении begin /* Опеределяем знак */ case NSIGN when 0 then SRESULT := '+'; when 1 then SRESULT := '-'; else SRESULT := '+/-'; end case; /* Возвращаем результат */ return SRESULT; end RRPCONFSCTNMRKCN_GET_SIGN; begin /* Считывание записи состава показателя регламентированного отчета */ RREC := GET_RRPCONFSCTNMRKCN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRRPCONFSCTNMRKCN); /* Формируем представление состава показателя в виде формулы */ case RREC.SOURCE_TYPE /* Учетный раздел */ when 0 then /* Собираем представление из параметров составов */ SCN_DESC := SOURCE_UNIT_GET_PRMS(NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => RREC.RN, SSOURCE_UNIT => RREC.SOURCE_UNIT); /* Расчетный показатель */ when 1 then /* Считываем запись расчетного показателя */ RRRPCONFSCTNMRK := GET_RRPCONFSCTNMRK_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RREC.RRPCONFSCTNMRK); /* Указываем мнемокод показателя */ SCN_DESC := '(' || RRRPCONFSCTNMRK.CODE || ')'; /* Хранимая процедура */ when 2 then /* Формируем из пакета и процедуры */ SCN_DESC := '(' || PKG_OBJECT_DESC.STORED_NAME(SPACKAGE_NAME => RREC.PKG, SSTORED_NAME => RREC.PRC) || ')'; /* Статическое значение */ when 3 then /* Указываем статическое значение */ SCN_DESC := '(' || COALESCE(RREC.STATIC_STR, COALESCE(TO_CHAR(RREC.STATIC_NUM), TO_CHAR(RREC.STATIC_DATE, 'dd.mm.yyyy'))) || ')'; /* Формула */ when 4 then /* Указываем формулу */ SCN_DESC := '(' || RREC.FORMULA || ')'; else SCN_DESC := null; end case; /* Формируем описатель */ SRESULT := RRPCONFSCTNMRKCN_GET_SIGN(NSIGN => RREC.SIGN) || ' ' || RRPCONFSCTNMRKCN_GET_ST(NSOURCE_TYPE => RREC.SOURCE_TYPE, SSOURCE_UNIT => RREC.SOURCE_UNIT) || SCN_DESC; /* Возвращаем результат */ return SRESULT; end UTL_RRPCONFSCTNMRKCN_GET_DESC; /* Получение разделов регламентированного отчёта */ procedure RRPCONF_GET_SECTIONS ( NRN_RRPCONF in number, -- Рег. номер настройки форм регламентированного отчёта NROW_ORDER in number := 0, -- Порядок сортировки строк NCOL_ORDER in number := 0, -- Порядок сортировки граф COUT out clob -- Список разделов ) is NVERSION PKG_STD.TREF; -- Рег. номер версии словаря контрагентов NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса RDG PKG_P8PANELS_VISUAL.TDG; -- Описание таблицы RDG_ROW PKG_P8PANELS_VISUAL.TDG_ROW; -- Строка таблицы CDG clob; -- XML данных раздела CXML PKG_CONTVALLOC2NS.TCONTAINER; -- Контейнер для данных XML RRRPCONFSCTNMRK RRPCONFSCTNMRK%rowtype; -- Рег. номер показателя NCURRENT_SECTION PKG_STD.TNUMBER; -- Идентификатор раздела настройки в контейнере NSECTION_RN PKG_STD.TREF; -- Рег. номер раздел настройки SSECTION_CODE PKG_STD.TSTRING; -- Мнемокод раздела настройки SSECTION_NAME PKG_STD.TSTRING; -- Наименование раздела настройки CSECTION_CLOB clob; -- Данные по разделу настройки CSQL_ROWS clob; -- Запрос по строкам SORDERS_R PKG_STD.TSTRING; -- Сортировка строк ICURSOR_R integer; -- Курсор для исполнения запроса по строкам NROW_RN PKG_STD.TREF; -- Рег. номер строки NROW_POS PKG_STD.TNUMBER := 0; -- Позиция строки SROW_CODE PKG_STD.TSTRING; -- Код строки SROW_NAME PKG_STD.TSTRING; -- Наименование строки CSQL_COLS clob; -- Запрос по графам SORDERS_C PKG_STD.TSTRING; -- Сортировка граф ICURSOR_C integer; -- Курсор для исполнения запроса по графам NCOL_RN PKG_STD.TREF; -- Рег. номер графы SCOL_CODE PKG_STD.TSTRING; -- Код графы SCOL_NAME PKG_STD.TSTRING; -- Наименование графы /* Формирование текстового представления сортировки */ function ORDER_TEXT_GET ( NORDER in number, -- Порядок сортировки SALIAS in varchar2, -- Алиас таблицы NTYPE in number -- Тип таблицы (0 - графы, 1 - строки) ) return varchar2 -- Текстовое представление сортировки is SRESULT PKG_STD.TSTRING; -- Текстовое представление сортировки STABLE_COLUMN_CODE PKG_STD.TSTRING; -- Наименование колонки таблицы, содержащую код begin /* Определяем наименование колонки, содержающую код */ if (NTYPE = 0) then /* Код графы */ STABLE_COLUMN_CODE := 'COLUMN_CODE'; else /* Код графы */ STABLE_COLUMN_CODE := 'ROW_CODE'; end if; /* Формируем представление сортировки */ case NORDER /* Код - номер сортировки - мнемокод */ when 1 then SRESULT := PKG_SQL_BUILD.LPAD_() || '(' || SALIAS || '.' || STABLE_COLUMN_CODE || ', 40, ''0''),' || SALIAS || '.SORT_NUMB,' || PKG_SQL_BUILD.LPAD_() || '(' || SALIAS || '.CODE, 20, ''0'')'; /* Мнемокод - номер сортировки - код */ when 2 then SRESULT := PKG_SQL_BUILD.LPAD_() || '(' || SALIAS || '.CODE, 20, ''0''),' || SALIAS || '.SORT_NUMB,' || PKG_SQL_BUILD.LPAD_() || '(' || SALIAS || '.' || STABLE_COLUMN_CODE || ', 40, ''0'')'; /* Номер сортировки - код - мнемокод */ else SRESULT := SALIAS || '.SORT_NUMB,' || PKG_SQL_BUILD.LPAD_() || '(' || SALIAS || '.' || STABLE_COLUMN_CODE || ', 40, ''0''),' || PKG_SQL_BUILD.LPAD_() || '(' || SALIAS || '.CODE, 20, ''0'')'; end case; /* Возвращаем результат */ return SRESULT; end ORDER_TEXT_GET; /* Инициализация колонок граф показателей */ procedure MARKS_COLUMNS_INIT ( RDG in out nocopy PKG_P8PANELS_VISUAL.TDG, -- Описание таблицы NRRPCONFSCTN in number, -- Рег. номер раздела SORDER in varchar2 -- Сортировка ) is CSQL clob; -- Запрос по графам показателей раздела ICURSOR integer; -- Курсор для исполнения запроса по графам показателей раздела SCOL_CODE PKG_STD.TSTRING; -- Мнемокод графы SCOL_NAME PKG_STD.TSTRING; -- Наименование графы begin /* Добавляем подсказку совместимости */ CSQL := null; CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select C.CODE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' C.NAME'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from RRPCONFSCTNMRK T,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' RRPCOLUMN C'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.PRN = ' || NRRPCONFSCTN); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.RRPCOLUMN = C.RN'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' group by C.RN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' C.CODE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' C.NAME,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' C.COLUMN_CODE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' C.SORT_NUMB'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' order by ' || SORDER); /* Разбираем его */ ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); /* Описываем структуру записи курсора */ PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 1); PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); /* Делаем выборку */ if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then null; end if; /* Обходим графы показателей раздела */ while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) loop /* Считываем рег. номер строки */ PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 1, SVALUE => SCOL_CODE); /* Считываем код строки */ PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 2, SVALUE => SCOL_NAME); /* Наименование графы */ PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SCOL_' || SCOL_CODE, SCAPTION => SCOL_NAME, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, NWIDTH => 200); /* Рег. номер графы */ PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NCOL_RN_' || SCOL_CODE, SCAPTION => SCOL_NAME || ' рег. номер', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => false); /* Рег. номер показателя */ PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NMARK_RN_' || SCOL_CODE, SCAPTION => SCOL_NAME || ' рег. номер показателя', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => false); /* Мнемокод показателя */ PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SMARK_CODE_' || SCOL_CODE, SCAPTION => SCOL_NAME || ' мнемокод показателя', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, BVISIBLE => false); /* Для составов показтелей */ PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'MARK_CNS_' || SCOL_CODE, SCAPTION => SCOL_NAME || ' состав показателя', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, BVISIBLE => false); end loop; /* Освобождаем курсор */ PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); exception when others then PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); raise; end MARKS_COLUMNS_INIT; /* Считывание показателя по строке/графе */ function RRPCONFSCTNMRK_GET_ROWCOL ( NRRPCONFSCTN in number, -- Рег. номер раздела NRRPROW in number, -- Рег. номер строки NRRPCOLUMN in number -- Рег. номер графы ) return RRPCONFSCTNMRK%rowtype -- Запись показателя is RRESULT RRPCONFSCTNMRK%rowtype; -- Рег. номер показателя begin /* Считываем рег. номер показателя */ begin select T.* into RRESULT from RRPCONFSCTNMRK T where T.PRN = NRRPCONFSCTN and T.RRPROW = NRRPROW and T.RRPCOLUMN = NRRPCOLUMN; exception when others then RRESULT := null; end; /* Возвращаем результат */ return RRESULT; end RRPCONFSCTNMRK_GET_ROWCOL; begin /* Очистка контейнера */ PKG_CONTVALLOC2NS.PURGE(RCONTAINER => CXML); /* Определение версии раздела */ NVERSION := GET_SESSION_VERSION(SUNITCODE => 'RRPConfig'); /* Цикл по разделам настройки форм регламентированного отчёта */ for S in (select T.RN NRN, T.VERSION NVERSION, T.CRN NCRN, T.PRN NPRN, T.CODE SCODE, T.NAME SNAME, COALESCE((select 1 from RRPCONFSCTNMRK M where M.PRN = T.RN and ROWNUM = 1), 0) NMARKS_EXISTS, ROWNUM RNUM from RRPCONFSCTN T where T.PRN = NRN_RRPCONF and T.VERSION = NVERSION order by T.CODE) loop /* Инициализируем таблицу данных */ RDG := PKG_P8PANELS_VISUAL.TDG_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 1); /* Наименование строки */ PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SROW_NAME', SCAPTION => '', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, NWIDTH => 150); /* Позиция строки */ PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NROW_POS', SCAPTION => 'Позиция строки', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => false); /* Мнемокод строки */ PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SROW_CODE', SCAPTION => 'Мнемокод строки', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, BVISIBLE => false); /* Рег. номер строки */ PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NROW_RN', SCAPTION => 'Рег. номер строки', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => false); /* Обнуляем счётчик позиции строки */ NROW_POS := 0; /* Если раздел содержит показатели */ if (S.NMARKS_EXISTS = 1) then /* Формируем текстовое представление сортировки графы */ SORDERS_C := ORDER_TEXT_GET(NORDER => NCOL_ORDER, SALIAS => 'C', NTYPE => 0); /* Инициализируем колонки граф */ MARKS_COLUMNS_INIT(RDG => RDG, NRRPCONFSCTN => S.NRN, SORDER => SORDERS_C); begin /* Формируем текстовое представление сортировки строки */ SORDERS_R := ORDER_TEXT_GET(NORDER => NROW_ORDER, SALIAS => 'R', NTYPE => 1); /* Добавляем подсказку совместимости */ CSQL_ROWS := PKG_SQL_BUILD.COMPATIBLE(); PKG_SQL_BUILD.APPEND(SSQL => CSQL_ROWS, SELEMENT1 => 'select R.RN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_ROWS, SELEMENT1 => ' R.CODE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_ROWS, SELEMENT1 => ' R.NAME'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_ROWS, SELEMENT1 => ' from RRPCONFSCTNMRK T,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_ROWS, SELEMENT1 => ' RRPROW R'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_ROWS, SELEMENT1 => ' where T.PRN = ' || S.NRN); PKG_SQL_BUILD.APPEND(SSQL => CSQL_ROWS, SELEMENT1 => ' and R.RN = T.RRPROW'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_ROWS, SELEMENT1 => ' group by R.RN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_ROWS, SELEMENT1 => ' R.CODE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_ROWS, SELEMENT1 => ' R.NAME,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_ROWS, SELEMENT1 => ' R.ROW_CODE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_ROWS, SELEMENT1 => ' R.SORT_NUMB'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_ROWS, SELEMENT1 => ' order by ' || SORDERS_R); /* Разбираем его */ ICURSOR_R := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); PKG_SQL_DML.PARSE(ICURSOR => ICURSOR_R, SQUERY => CSQL_ROWS); /* Описываем структуру записи курсора */ PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR_R, IPOSITION => 1); PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR_R, IPOSITION => 2); PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR_R, IPOSITION => 3); /* Делаем выборку */ if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR_R) = 0) then null; end if; /* Обходим выбранные записи */ while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR_R) > 0) loop /* Считываем рег. номер строки */ PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR_R, IPOSITION => 1, NVALUE => NROW_RN); /* Считываем код строки */ PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR_R, IPOSITION => 2, SVALUE => SROW_CODE); /* Считываем наименование строки */ PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR_R, IPOSITION => 3, SVALUE => SROW_NAME); /* Заполняем наименование строки */ PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SROW_NAME', SVALUE => SROW_NAME, BCLEAR => true); /* Заполняем позицию строки */ PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NROW_POS', NVALUE => NROW_POS); /* Заполняем мнемокод строки */ PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SROW_CODE', SVALUE => SROW_CODE); /* Заполняем рег. номер строки */ PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NROW_RN', NVALUE => NROW_RN); /* Добавляем подсказку совместимости */ CSQL_COLS := PKG_SQL_BUILD.COMPATIBLE(); PKG_SQL_BUILD.APPEND(SSQL => CSQL_COLS, SELEMENT1 => 'select C.RN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_COLS, SELEMENT1 => ' C.CODE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_COLS, SELEMENT1 => ' C.NAME'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_COLS, SELEMENT1 => ' from RRPCONFSCTNMRK T,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_COLS, SELEMENT1 => ' RRPCOLUMN C'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_COLS, SELEMENT1 => ' where T.PRN = ' || S.NRN); PKG_SQL_BUILD.APPEND(SSQL => CSQL_COLS, SELEMENT1 => ' and C.RN = T.RRPCOLUMN'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_COLS, SELEMENT1 => ' group by C.RN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_COLS, SELEMENT1 => ' C.CODE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_COLS, SELEMENT1 => ' C.NAME,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_COLS, SELEMENT1 => ' C.COLUMN_CODE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_COLS, SELEMENT1 => ' C.SORT_NUMB'); PKG_SQL_BUILD.APPEND(SSQL => CSQL_COLS, SELEMENT1 => ' order by ' || SORDERS_C); /* Разбираем его */ ICURSOR_C := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); PKG_SQL_DML.PARSE(ICURSOR => ICURSOR_C, SQUERY => CSQL_COLS); /* Описываем структуру записи курсора */ PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR_C, IPOSITION => 1); PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR_C, IPOSITION => 2); PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR_C, IPOSITION => 3); /* Делаем выборку */ if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR_C) = 0) then null; end if; /* Обходим выбранные записи */ while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR_C) > 0) loop /* Считываем рег. номер графы */ PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR_C, IPOSITION => 1, NVALUE => NCOL_RN); /* Считываем код графы */ PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR_C, IPOSITION => 2, SVALUE => SCOL_CODE); /* Считываем наименование графы */ PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR_C, IPOSITION => 3, SVALUE => SCOL_NAME); /* Считываем показатель по строке/графе */ RRRPCONFSCTNMRK := RRPCONFSCTNMRK_GET_ROWCOL(NRRPCONFSCTN => S.NRN, NRRPROW => NROW_RN, NRRPCOLUMN => NCOL_RN); /* Заполняем наименование графы */ PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SCOL_' || SCOL_CODE, SVALUE => SCOL_NAME); /* Заполняем рег. номер графы */ PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NCOL_RN_' || SCOL_CODE, NVALUE => NCOL_RN); /* Заполняем рег. номер показателя */ PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NMARK_RN_' || SCOL_CODE, NVALUE => RRRPCONFSCTNMRK.RN); /* Если ошибка считывания показателя */ if (RRRPCONFSCTNMRK.RN is not null) then /* Заполняем мнемокод показателя */ PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SMARK_CODE_' || SCOL_CODE, SVALUE => RRRPCONFSCTNMRK.CODE); /* Добавляем атрибут состава показателей */ PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'MARK_CNS_' || SCOL_CODE, SVALUE => null); end if; end loop; /* Освобождаем курсор */ PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR_C); /* Добавим строку для раздела */ PKG_P8PANELS_VISUAL.TDG_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); /* Инкрементируем счётчик позиции строки */ NROW_POS := NROW_POS + 1; end loop; /* Освобождаем курсор */ PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR_R); exception when others then PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR_R); PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR_C); raise; end; end if; /* Сериализуем описание */ CDG := PKG_P8PANELS_VISUAL.TDG_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1); /* Заполняем контейнер данными о разделе */ PKG_CONTVALLOC2NS.PUTN(RCONTAINER => CXML, NTABID => S.RNUM, SROWID => 'RN', NVALUE => S.NRN); PKG_CONTVALLOC2NS.PUTS(RCONTAINER => CXML, NTABID => S.RNUM, SROWID => 'CODE', SVALUE => S.SCODE); PKG_CONTVALLOC2NS.PUTS(RCONTAINER => CXML, NTABID => S.RNUM, SROWID => 'NAME', SVALUE => S.SNAME); PKG_CONTVALLOC2NS.PUTLC(RCONTAINER => CXML, NTABID => S.RNUM, SROWID => 'CLOB', LCVALUE => CDG); end loop; /* Формируем XML с данными */ PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); PKG_XFAST.DOWN_NODE(SNAME => 'DATA'); /* Цикл по контейнеру с данными о разделах */ for X in 1 .. PKG_CONTVALLOC2NS.COUNT_(RCONTAINER => CXML) loop /* Ид. раздела */ if (X = 1) then NCURRENT_SECTION := PKG_CONTVALLOC2NS.FIRST_(RCONTAINER => CXML); else NCURRENT_SECTION := PKG_CONTVALLOC2NS.NEXT_(RCONTAINER => CXML, NTABID => NCURRENT_SECTION); end if; /* Рег. номер раздела */ NSECTION_RN := PKG_CONTVALLOC2NS.GETN(RCONTAINER => CXML, NTABID => NCURRENT_SECTION, SROWID => 'RN'); /* Мнемокод раздела */ SSECTION_CODE := PKG_CONTVALLOC2NS.GETS(RCONTAINER => CXML, NTABID => NCURRENT_SECTION, SROWID => 'CODE'); /* Наименование раздела */ SSECTION_NAME := PKG_CONTVALLOC2NS.GETS(RCONTAINER => CXML, NTABID => NCURRENT_SECTION, SROWID => 'NAME'); /* Clob с показателями раздела */ CSECTION_CLOB := PKG_CONTVALLOC2NS.GETLC(RCONTAINER => CXML, NTABID => NCURRENT_SECTION, SROWID => 'CLOB'); /* Формирование элемента XML с данными о разделе */ PKG_XFAST.DOWN_NODE(SNAME => 'SECTIONS'); PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => NSECTION_RN); PKG_XFAST.ATTR(SNAME => 'SCODE', SVALUE => SSECTION_CODE); PKG_XFAST.ATTR(SNAME => 'SNAME', SVALUE => SSECTION_NAME); PKG_XFAST.ATTR(SNAME => 'NDELETE_ALLOW', NVALUE => UTL_UNIT_ACTION_GET_ALLOW(SUNIT => SUNIT_RRPCONFSCTN, SACTION => SACTION_DELETE, NRN => NSECTION_RN)); PKG_XFAST.VALUE_XML(LCVALUE => CSECTION_CLOB); /* Добавляем информацию о составах показателей */ PKG_XFAST.DOWN_NODE(SNAME => 'MARK_CNS'); /* Цикл по составам показателей раздела */ for REC in (select T.PRN, T.RN, T.NUMB from RRPCONFSCTNMRK M, RRPCONFSCTNMRKCN T where M.PRN = NSECTION_RN and T.PRN = M.RN order by M.RN, T.NUMB asc) loop /* Добавляем состав */ PKG_XFAST.DOWN_NODE(SNAME => 'MARK_CN'); PKG_XFAST.ATTR(SNAME => 'NPRN', NVALUE => REC.PRN); PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.RN); PKG_XFAST.ATTR(SNAME => 'SNUMB', SVALUE => REC.NUMB); PKG_XFAST.ATTR(SNAME => 'SDESC', SVALUE => UTL_RRPCONFSCTNMRKCN_GET_DESC(NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => REC.RN)); PKG_XFAST.UP(); end loop; PKG_XFAST.UP(); PKG_XFAST.UP(); end loop; PKG_XFAST.UP(); /* Сериализуем описание */ COUT := PKG_XFAST.SERIALIZE_TO_CLOB(); PKG_XFAST.EPILOGUE(); /* Очистка контейнера */ PKG_CONTVALLOC2NS.PURGE(RCONTAINER => CXML); end RRPCONF_GET_SECTIONS; /* Добавление раздела регламентированного отчёта */ procedure RRPCONFSCTN_INSERT ( NPRN in number, -- Рег. номер настройки форм регламентированного отчёта SCODE in varchar2, -- Мнемокод SNAME in varchar2, -- Наименование NRN out number -- Рег. номер созданной записи ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации begin /* Добавим раздел */ P_RRPCONFSCTN_INSERT(NCOMPANY => NCOMPANY, NPRN => NPRN, SCODE => SCODE, SNAME => SNAME, SRRPCONFSCTN => null, SRRPPRMGRP => null, SNOTE => null, NHTML_HIDE => 0, NHTML_HIDE_NAME_COL => 0, NHTML_MAKE_HIER_GRP => 0, SCLSF_CODE => null, NLINKS_UPDATE => 0, NDUP_RN => null, NRN => NRN); end RRPCONFSCTN_INSERT; /* Исправление раздела регламентированного отчёта */ procedure RRPCONFSCTN_UPDATE ( NRN in number, -- Рег. номер раздела SCODE in varchar2, -- Мнемокод раздела SNAME in varchar2 -- Наименование раздела ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации RRES RRPCONFSCTN%rowtype; -- Запись раздела настройки формы регламентированного отчета RRRPCONFSCTN RRPCONFSCTN%rowtype; -- Запись родительского раздела настройки регламентированного отчета RRRPPRMGRP RRPPRMGRP%rowtype; -- Запись группы параметров регламентированного отчета begin /* Считаем исправляемую запись */ RRES := GET_RRPCONFSCTN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRN); /* Считаем запись родительского этапа */ if (RRES.RRPCONFSCTN is not null) then RRRPCONFSCTN := GET_RRPCONFSCTN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RRES.RRPCONFSCTN); end if; /* Считаем запись группы параметров */ if (RRES.RRPPRMGRP is not null) then RRRPPRMGRP := GET_RRPPRMGRP_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RRES.RRPPRMGRP); end if; /* Исправим раздел */ P_RRPCONFSCTN_UPDATE(NRN => RRES.RN, NCOMPANY => NCOMPANY, SCODE => SCODE, SNAME => SNAME, SRRPCONFSCTN => RRRPCONFSCTN.CODE, SRRPPRMGRP => RRRPPRMGRP.CODE, SNOTE => RRES.NOTE, NHTML_HIDE => RRES.HTML_HIDE, NHTML_HIDE_NAME_COL => RRES.HTML_HIDE_NAME_COL, NHTML_MAKE_HIER_GRP => RRES.HTML_MAKE_HIER_GRP, SCLSF_CODE => RRES.CLSF_CODE, NFORMULA_UPDATE => 1, NMARK_UPDATE => 1); end RRPCONFSCTN_UPDATE; /* Удаление раздела регламентированного отчёта */ procedure RRPCONFSCTN_DELETE ( NRN in number -- Рег. номер раздела ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации begin /* Если действие недоступно для удаления */ if (UTL_UNIT_ACTION_GET_ALLOW(SUNIT => SUNIT_RRPCONFSCTN, SACTION => SACTION_DELETE, NRN => NRN) = 0) then P_EXCEPTION(0, 'Данный раздел используется в сформированных документах/параметрах документа/дочерний раздел. Удаление запрещено.'); end if; /* Удалим раздел */ P_RRPCONFSCTN_DELETE(NRN => NRN, NCOMPANY => NCOMPANY); end RRPCONFSCTN_DELETE; /* Получение кодов настройки, раздела и показателя раздела по ид. показателя раздела */ procedure RRPCONFSCTNMRK_GET_CODES ( NRN in number, -- Рег. номер показателя раздела SRRPCONF out varchar2, -- Мнемокод настройки формы регламентированного отчёта SRRPCONFSCTN out varchar2, -- Мнемокод раздела SRRPCONFSCTNMRK out varchar2 -- Мнемокод показателя раздела ) is begin /* Считываем данные показателя/раздела/настройки */ begin select C.CODE, S.CODE, M.CODE into SRRPCONF, SRRPCONFSCTN, SRRPCONFSCTNMRK from RRPCONF C, RRPCONFSCTN S, RRPCONFSCTNMRK M where M.RN = NRN and S.RN = M.PRN and C.RN = S.PRN; exception when others then P_EXCEPTION(0, 'Не определен показатель настройки регламентированного отчета.'); end; end RRPCONFSCTNMRK_GET_CODES; /* Формирование кода и наименования показателя раздела регламентированного отчёта */ procedure RRPCONFSCTNMRK_GET_CODE_NAME ( NRRPCONFSCTN in number, -- Рег. номер раздела NRRPROW in number, -- Рег. номер строки NRRPCOLUMN in number, -- Рег. номер графы SCODE out varchar2, -- Мнемокод показателя раздела SNAME out varchar2 -- Наименование показателя раздела ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации RRRPCONFSCTN RRPCONFSCTN%rowtype; -- Запись раздела регламентированного отчета RRRPROW RRPROW%rowtype; -- Запись строки регламентированного отчета RRRPCOLUMN RRPCOLUMN%rowtype; -- Запись графы регламентированного отчета begin /* Считываем запись раздела регламентированного отчета */ RRRPCONFSCTN := GET_RRPCONFSCTN_ID(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, NRN => NRRPCONFSCTN); /* Считываем запись строки регламентированного отчета */ RRRPROW := GET_RRPROW_ID(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, NRN => NRRPROW); /* Считываем запись графы регламентированного отчета */ RRRPCOLUMN := GET_RRPCOLUMN_ID(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, NRN => NRRPCOLUMN); /* Если все записи считаны */ if ((RRRPCONFSCTN.RN is not null) and (RRRPROW.RN is not null) and (RRRPCOLUMN.RN is not null)) then /* Сформируем код показателя */ P_RRPCONFSCTNMRK_MAKE_CODE(SRRPCONFSCTN => RRRPCONFSCTN.CODE, SRRPROW => RRRPROW.CODE, SRRPCOLUMN => RRRPCOLUMN.CODE, SCODE => SCODE); /* Сформируем наименование показателя */ P_RRPCONFSCTNMRK_MAKE_NAME(NCOMPANY => NCOMPANY, NRRPROW => RRRPROW.RN, NRRPCOLUMN => RRRPCOLUMN.RN, NCHANGE_NAME => 1, NCHANGE_NAME_PARENT => 0, SNAME => SNAME); end if; end RRPCONFSCTNMRK_GET_CODE_NAME; /* Формирование кода и наименования показателя раздела регламентированного отчёта */ procedure RRPCONFSCTNMRK_GET_NAME ( NRRPCONFSCTNMRK in number, -- Рег. номер показателя SNAME out varchar2 -- Наименование показателя раздела ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации RRRPCONFSCTNMRK RRPCONFSCTNMRK%rowtype; -- Запись показателя регламентированного отчета begin /* Считываем запись раздела регламентированного отчета */ RRRPCONFSCTNMRK := GET_RRPCONFSCTNMRK_ID(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, NRN => NRRPCONFSCTNMRK); /* Указываем наименование показателя */ SNAME := RRRPCONFSCTNMRK.NAME; end RRPCONFSCTNMRK_GET_NAME; /* Добавление показателя раздела регламентированного отчёта */ procedure RRPCONFSCTNMRK_INSERT ( NPRN in number, -- Рег. номер раздела SCODE in varchar2, -- Мнемокод показателя раздела SNAME in varchar2, -- Наименование показателя раздела NRRPROW in number, -- Рег. номер строки NRRPCOLUMN in number, -- Рег. номер графы NRN out number -- Рег. номер созданной записи ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации RRRPROW RRPROW%rowtype; -- Запись строки регламентированного отчета RRRPVERSION_ROW RRPVERSION%rowtype; -- Запись редакции строки регламентированного отчета RRRPCOLUMN RRPCOLUMN%rowtype; -- Запись графы регламентированного отчета RRRPVERSION_COL RRPVERSION%rowtype; -- Запись редакции графы регламентированного отчета begin /* Если строка не указана */ if (NRRPROW is null) then P_EXCEPTION(0, 'Ошибка считывания строки регламентированного отчета.'); end if; /* Если графа не указана */ if (NRRPCOLUMN is null) then P_EXCEPTION(0, 'Ошибка считывания графы регламентированного отчета.'); end if; /* Считываем запись строки регламентированного отчета */ RRRPROW := GET_RRPROW_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRRPROW); /* Считываем запись графы регламентированного отчета */ RRRPCOLUMN := GET_RRPCOLUMN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRRPCOLUMN); /* Считываем запись редакции строки регламентированного отчета */ RRRPVERSION_ROW := GET_RRPVERSION_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RRRPROW.RRPVERSION); /* Считываем запись редакции графы регламентированного отчета */ RRRPVERSION_COL := GET_RRPVERSION_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RRRPCOLUMN.RRPVERSION); /* Добавим показатель */ P_RRPCONFSCTNMRK_INSERT(NCOMPANY => NCOMPANY, NPRN => NPRN, NNUMB => F_RRPCONFSCTNMRK_NEXT_NUMB(NCOMPANY => NCOMPANY, NPRN => NPRN), SCODE => SCODE, SNAME => SNAME, SRRPROW => RRRPROW.CODE, SRRPVERSION_ROW => RRRPVERSION_ROW.CODE, SRRPCOLUMN => RRRPCOLUMN.CODE, SRRPVERSION_COLUMN => RRRPVERSION_COL.CODE, SPKG_ROW => null, SPRC_ROW => null, SPKG_COL => null, SPRC_COL => null, SRRPPRM => null, NIGNORE_ZOOM => 0, NIGNORE_SHARP => 0, SCLSF_CODE => null, SNOTE => null, NDUP_RN => null, NRN => NRN); end RRPCONFSCTNMRK_INSERT; /* Исправление показателя раздела регламентированного отчёта */ procedure RRPCONFSCTNMRK_UPDATE ( NRN in number, -- Рег. номер показателя раздела SNAME in varchar2 -- Новое наименование ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации RESSCTNMRK RRPCONFSCTNMRK%rowtype; -- Запись настройки показателя регламентированного отчета RESROW RRPROW%rowtype; -- Запись строки регламентированного отчета RESCOLUMN RRPCOLUMN%rowtype; -- Запись графы регламентированного отчета RRRPPRM RRPPRM%rowtype; -- Запись типового параметра регламентированного отчета SROWVER PKG_STD.TSTRING; -- Мнемокод редакции строки SCOLVER PKG_STD.TSTRING; -- Мнемокод редакции графы begin /* Получение записи параметра раздела */ RESSCTNMRK := GET_RRPCONFSCTNMRK_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRN); /* Получение записи строки */ RESROW := GET_RRPROW_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RESSCTNMRK.RRPROW); /* Получение записи графы */ RESCOLUMN := GET_RRPCOLUMN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RESSCTNMRK.RRPCOLUMN); /* Получение мнемокода редакции строки */ if (RESROW.RRPVERSION is not null) then SROWVER := GET_RRPVERSION_CODE_ID(NFLAG_SMART => 0, NRN => RESROW.RRPVERSION); end if; /* Получение мнемокода редакции графы */ if (RESCOLUMN.RRPVERSION is not null) then SCOLVER := GET_RRPVERSION_CODE_ID(NFLAG_SMART => 0, NRN => RESCOLUMN.RRPVERSION); end if; /* Получение записи типового параметра */ if (RESSCTNMRK.RRPPRM is not null) then RRRPPRM := GET_RRPPRM_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RESSCTNMRK.RRPPRM); end if; /* Исправим показатель */ P_RRPCONFSCTNMRK_UPDATE(NRN => NRN, NCOMPANY => NCOMPANY, NNUMB => RESSCTNMRK.NUMB, SCODE => RESSCTNMRK.CODE, SNAME => SNAME, SRRPROW => RESROW.CODE, SRRPVERSION_ROW => SROWVER, SRRPCOLUMN => RESCOLUMN.CODE, SRRPVERSION_COLUMN => SCOLVER, SPKG_ROW => RESSCTNMRK.PKG_ROW, SPRC_ROW => RESSCTNMRK.PRC_ROW, SPKG_COL => RESSCTNMRK.PKG_COL, SPRC_COL => RESSCTNMRK.PRC_COL, SRRPPRM => RRRPPRM.CODE, NIGNORE_ZOOM => RESSCTNMRK.IGNORE_ZOOM, NIGNORE_SHARP => RESSCTNMRK.IGNORE_SHARP, SCLSF_CODE => RESSCTNMRK.CLSF_CODE, NFORMULA_UPDATE => 0, SNOTE => RESSCTNMRK.NOTE); end RRPCONFSCTNMRK_UPDATE; /* Удаление показателя раздела регламентированного отчёта */ procedure RRPCONFSCTNMRK_DELETE ( NRN in number -- Рег. номер показателя раздела ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации begin /* Если действие недоступно для удаления */ if (UTL_UNIT_ACTION_GET_ALLOW(SUNIT => SUNIT_RRPCONFSCTNMRK, SACTION => SACTION_DELETE, NRN => NRN) = 0) then P_EXCEPTION(0, 'Данный показатель используется в сформированных документах. Удаление запрещено.'); end if; /* Удалим показатель */ P_RRPCONFSCTNMRK_DELETE(NCOMPANY => NCOMPANY, NRN => NRN); end RRPCONFSCTNMRK_DELETE; end PKG_P8PANELS_RRPCONFED; /