create or replace package PKG_P8PANELS_RRPCONFED as /* Добавление показателя раздела регламентированного отчёта */ procedure RRPCONFSCTNMRK_INSERT ( NPRN in number, -- Рег. номер раздела SCODE in varchar2, -- Мнемокод показателя раздела SNAME in varchar2, -- Наименование показателя раздела NRRPROW in number, -- Рег. номер строки SRRPROW in varchar2, -- Код строки (игнорируется, если указан рег. номер строки) SRRPVERSION_ROW in varchar2, -- Код редакции строки (игнорируется, если указан рег. номер строки) NRRPCOLUMN in number, -- Рег. номер графы SRRPCOLUMN in varchar2, -- Код графы SRRPVERSION_COLUMN in varchar2, -- Код редакции графы NRN out number -- Рег. номер созданной записи ); /* Исправление показателя раздела регламентированного отчёта */ procedure RRPCONFSCTNMRK_UPDATE ( NRN in number, -- Рег. номер показателя раздела SCODE in varchar2, -- Мнемокод показателя раздела SNAME in varchar2, -- Наименование показателя раздела SRRPROW in varchar2, -- Код строки SRRPVERSION_ROW in varchar2, -- Код редакции строки SRRPCOLUMN in varchar2, -- Код графы SRRPVERSION_COLUMN in varchar2 -- Код редакции графы ); /* Удаление показателя раздела регламентированного отчёта */ procedure RRPCONFSCTNMRK_DELETE ( NRN in number -- Рег. номер показателя раздела ); /* Получение раздела регламентированного отчёта */ procedure RRPCONFSCTN_GET ( NRRPCONFSCTN in number, -- Рег. номер раздела настройки форм регламентированного отчёта NROW_ORDER in number := 0, -- Порядок сортировки строк (0 - по номеру, 1 - по коду, 2 - по мнемокоду) NCOL_ORDER in number := 0, -- Порядок сортировки граф (0 - по номеру, 1 - по коду, 2 - по мнемокоду) 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 RRPCONF_GET ( NRRPCONF in number, -- Рег. номер настройки форм регламентированного отчёта COUT out clob -- Описание настройки ); end PKG_P8PANELS_RRPCONFED; / create or replace package body PKG_P8PANELS_RRPCONFED as /* Константы - общие параметры формирования данных */ NSECTION_NAME_MAX_LEN constant PKG_STD.TNUMBER := 100; -- Максимальный отображаемый размер наименования раздела настройки (символов) /* Константы - параметры таблицы показателей раздела настройки РО */ NMRKS_DG_COL_WIDTH constant PKG_STD.TNUMBER := 250; -- Ширина колонки (пикселей) /* Константы - маски для формирования представления параметров состава показателя */ 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 ( NCOMPANY in number, -- Рег. номер организации NRN in number, -- Рег. номер записи SUNIT in varchar2, -- Мнемокод раздела (см. константы SUNIT_*) SACTION in varchar2 -- Действие (см. константы SACTION_*) ) 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 /* Выполним типовую проверку */ P_RRPCONFSCTN_BASE_CHECK(SMODE => 'D', RREC => GET_RRPCONFSCTN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRN)); /* Проверка пройдена - можно удалять */ NRESULT := 1; exception /* Если проверка выдала ошибку - удаление невозможно */ when others then NRESULT := 0; end; /* Действие неопределено - нельзя выполнять */ else NRESULT := 0; end case; /* Показатель раздела настройки регламентированного отчета */ when SUNIT_RRPCONFSCTNMRK then /* Исходим от действия */ case SACTION /* Удаление */ when SACTION_DELETE then begin /* Выполним типовую проверку */ P_RRPCONFSCTNMRK_BASE_CHECK(SMODE => 'D', RREC => GET_RRPCONFSCTNMRK_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRN)); /* Проверка пройдена - можно удалять */ NRESULT := 1; exception /* Если проверка выдала ошибку - удаление невозможно */ when others then NRESULT := 0; end; /* Действие неопределено - нельзя выполнять */ else NRESULT := 0; end case; /* Раздел неопределен - нельзя делать */ else NRESULT := 0; end case; /* Возвращаем результат */ return NRESULT; end UTL_UNIT_ACTION_GET_ALLOW; /* Считывание типа источинка состава показателя в текстовом представлении */ 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; /* Формирование описателя состава показателя регламентированного отчета */ function 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 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 MARK_GET_CODE_BY_CN; /* Считывание мнемокода настройки по рег. номеру состава показателя */ function 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 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 := 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 := 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; 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 RRPCONFSCTNMRKCN_GET_DESC; /* Поиск рег. номера показателя по разделу РО/строке/графе */ function RRPCONFSCTNMRK_GET_ROWCOL ( NRRPCONFSCTN in number, -- Рег. номер раздела NRRPROW in number, -- Рег. номер строки NRRPCOLUMN in number -- Рег. номер графы ) return number -- Рег. номер показателя is NRESULT PKG_STD.TREF; -- Рег. номер показателя begin /* Считываем запись показателя */ begin select T.RN into NRESULT from RRPCONFSCTNMRK T where T.PRN = NRRPCONFSCTN and T.RRPROW = NRRPROW and T.RRPCOLUMN = NRRPCOLUMN; exception when others then NRESULT := null; end; /* Возвращаем результат */ return NRESULT; end RRPCONFSCTNMRK_GET_ROWCOL; /* Формирование описания показателя */ function RRPCONFSCTNMRK_GET_DESC ( NCOMPANY in number, -- Рег. номер организации NRRPCONFSCTN in number, -- Рег. номер раздела NRRPROW in number, -- Рег. номер строки NRRPCOLUMN in number -- Рег. номер графы ) return varchar2 -- Сериализованное описание показателя is SRES PKG_STD.TLSTRING; -- Буфер для результата NRRPCONFSCTNMRK PKG_STD.TREF; -- Рег. номер показателя настройки begin /* Найдём показатель */ NRRPCONFSCTNMRK := RRPCONFSCTNMRK_GET_ROWCOL(NRRPCONFSCTN => NRRPCONFSCTN, NRRPROW => NRRPROW, NRRPCOLUMN => NRRPCOLUMN); /* Начинаем формирование */ PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); /* Показатель */ PKG_XFAST.DOWN_NODE(SNAME => 'XMARK'); /* Атрибуты со сведениями о строке и графе */ PKG_XFAST.ATTR(SNAME => 'NRRPROW', NVALUE => NRRPROW); PKG_XFAST.ATTR(SNAME => 'NRRPCOLUMN', NVALUE => NRRPCOLUMN); /* Обратимся к показателю */ for MARK in (select T.RN NRN, T.CODE SCODE, T.NAME SNAME, R.CODE SRRPROW, RV.CODE SRRPVERSION_ROW, C.CODE SRRPCOLUMN, CV.CODE SRRPVERSION_COLUMN from RRPCONFSCTNMRK T, RRPROW R, RRPCOLUMN C, RRPVERSION RV, RRPVERSION CV where T.RN = NRRPCONFSCTNMRK and T.RRPROW = R.RN and T.RRPCOLUMN = C.RN and R.RRPVERSION = RV.RN(+) and C.RRPVERSION = CV.RN(+)) loop /* Атрибуты со сведениями о показателе */ PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => MARK.NRN); PKG_XFAST.ATTR(SNAME => 'SCODE', SVALUE => MARK.SCODE); PKG_XFAST.ATTR(SNAME => 'SNAME', SVALUE => MARK.SNAME); PKG_XFAST.ATTR(SNAME => 'SRRPROW', SVALUE => MARK.SRRPROW); PKG_XFAST.ATTR(SNAME => 'SRRPVERSION_ROW', SVALUE => MARK.SRRPVERSION_ROW); PKG_XFAST.ATTR(SNAME => 'SRRPCOLUMN', SVALUE => MARK.SRRPCOLUMN); PKG_XFAST.ATTR(SNAME => 'SRRPVERSION_COLUMN', SVALUE => MARK.SRRPVERSION_COLUMN); /* Цикл по составам показателей раздела */ for CN in (select T.PRN, T.RN, T.NUMB from RRPCONFSCTNMRKCN T where T.PRN = NRRPCONFSCTNMRK order by T.NUMB asc) loop /* Добавляем состав */ PKG_XFAST.DOWN_NODE(SNAME => 'CONSTITUTION'); PKG_XFAST.ATTR(SNAME => 'NPRN', NVALUE => CN.PRN); PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => CN.RN); PKG_XFAST.ATTR(SNAME => 'SNUMB', SVALUE => CN.NUMB); PKG_XFAST.ATTR(SNAME => 'SDESC', SVALUE => RRPCONFSCTNMRKCN_GET_DESC(NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => CN.RN)); PKG_XFAST.UP(); end loop; end loop; PKG_XFAST.UP(); /* Сериализуем описание */ SRES := PKG_XFAST.SERIALIZE_TO_VARCHAR(); /* Завершаем формирование */ PKG_XFAST.EPILOGUE(); /* Возвращаем сформированное */ return SRES; end RRPCONFSCTNMRK_GET_DESC; /* Автоматическое формирование мнемокода и наименования показателя, если не указаны */ procedure RRPCONFSCTNMRK_BUILD_CODE_NAME ( NCOMPANY in number, -- Рег. номер организации NRRPCONFSCTN in number, -- Рег. номер раздела отчета NRRPROW in number, -- Рег. номер строки показателя NRRPCOLUMN in number, -- Рег. номер графы показателя SCODE in out varchar2, -- Мнемокод показателя раздела (null - будет сформировано автоматически, иначе - вернётся без изменений) SNAME in out varchar2 -- Наименование показателя раздела (null - будет сформировано автоматически, иначе - вернётся без изменений) ) is RRRPCONFSCTN RRPCONFSCTN%rowtype; -- Запись раздела настройки RRRPROW RRPROW%rowtype; -- Запись строки показателя RRRPCOLUMN RRPCOLUMN%rowtype; -- Запись графы показателя begin /* Сформируем автоматический мнемокод, если пользователь не указал его */ if (SCODE is null) then /* Считаем указанные раздел, строку и графу */ RRRPCONFSCTN := GET_RRPCONFSCTN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRRPCONFSCTN); RRRPROW := GET_RRPROW_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRRPROW); RRRPCOLUMN := GET_RRPCOLUMN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRRPCOLUMN); /* Формируем мнемокод */ P_RRPCONFSCTNMRK_MAKE_CODE(SRRPCONFSCTN => RRRPCONFSCTN.CODE, SRRPROW => RRRPROW.CODE, SRRPCOLUMN => RRRPCOLUMN.CODE, SCODE => SCODE); end if; /* Сформируем автоматическое наименование, если пользователь не указал его */ if (SNAME is null) then P_RRPCONFSCTNMRK_MAKE_NAME(NCOMPANY => NCOMPANY, NRRPROW => NRRPROW, NRRPCOLUMN => NRRPCOLUMN, NCHANGE_NAME => 1, NCHANGE_NAME_PARENT => 0, SNAME => SNAME); end if; end RRPCONFSCTNMRK_BUILD_CODE_NAME; /* Разыменовывание ссылок показателя, переданных пользователем */ procedure RRPCONFSCTNMRK_JOINS ( NCOMPANY in number, -- Рег. номер организации NRRPROW in number, -- Рег. номер строки SRRPROW in varchar2, -- Код строки (игнорируется, если указан рег. номер строки) SRRPVERSION_ROW in varchar2, -- Код редакции строки (игнорируется, если указан рег. номер строки) NRRPCOLUMN in number, -- Рег. номер графы SRRPCOLUMN in varchar2, -- Код графы (игнорируется, если указан рег. номер графы) SRRPVERSION_COLUMN in varchar2, -- Код редакции графы (игнорируется, если указан рег. номер графы) RRRPROW out RRPROW%rowtype, -- Запись строки регламентированного отчета RRRPVERSION_ROW out RRPVERSION%rowtype, -- Запись редакции строки регламентированного отчета RRRPCOLUMN out RRPCOLUMN%rowtype, -- Запись графы регламентированного отчета RRRPVERSION_COLUMN out RRPVERSION%rowtype -- Запись редакции графы регламентированного отчета ) is NRRPVERSION PKG_STD.TREF; -- Рег. номер редакции строки/графы NRRPROW_ PKG_STD.TREF; -- Буфер для рег. номера строки NRRPCOLUMN_ PKG_STD.TREF; -- Буфер для рег. номера графы begin /* Считываем запись строки и редакции строки регламентированного отчета */ if (NRRPROW is null) then FIND_RRPVERSION_CODE(NFLAG_SMART => 0, NFLAG_OPTION => 1, NCOMPANY => NCOMPANY, SCODE => SRRPVERSION_ROW, NRN => NRRPVERSION); FIND_RRPROW_CODE(NFLAG_SMART => 0, NFLAG_OPTION => 0, NCOMPANY => NCOMPANY, NRRPVERSION => NRRPVERSION, SCODE => SRRPROW, NRN => NRRPROW_); else NRRPROW_ := NRRPROW; end if; RRRPROW := GET_RRPROW_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRRPROW_); RRRPVERSION_ROW := GET_RRPVERSION_ID(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, NRN => RRRPROW.RRPVERSION); /* Считываем запись графы и редакции графы регламентированного отчета */ if (NRRPCOLUMN is null) then FIND_RRPVERSION_CODE(NFLAG_SMART => 0, NFLAG_OPTION => 1, NCOMPANY => NCOMPANY, SCODE => SRRPVERSION_COLUMN, NRN => NRRPVERSION); FIND_RRPCOLUMN_CODE(NFLAG_SMART => 0, NFLAG_OPTION => 0, NCOMPANY => NCOMPANY, NRRPVERSION => NRRPVERSION, SCODE => SRRPCOLUMN, NRN => NRRPCOLUMN_); else NRRPCOLUMN_ := NRRPCOLUMN; end if; RRRPCOLUMN := GET_RRPCOLUMN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRRPCOLUMN_); RRRPVERSION_COLUMN := GET_RRPVERSION_ID(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, NRN => RRRPCOLUMN.RRPVERSION); end RRPCONFSCTNMRK_JOINS; /* Добавление показателя раздела регламентированного отчёта */ procedure RRPCONFSCTNMRK_INSERT ( NPRN in number, -- Рег. номер раздела SCODE in varchar2, -- Мнемокод показателя раздела SNAME in varchar2, -- Наименование показателя раздела NRRPROW in number, -- Рег. номер строки SRRPROW in varchar2, -- Код строки (игнорируется, если указан рег. номер строки) SRRPVERSION_ROW in varchar2, -- Код редакции строки (игнорируется, если указан рег. номер строки) NRRPCOLUMN in number, -- Рег. номер графы SRRPCOLUMN in varchar2, -- Код графы (игнорируется, если указан рег. номер графы) SRRPVERSION_COLUMN in varchar2, -- Код редакции графы (игнорируется, если указан рег. номер графы) NRN out number -- Рег. номер созданной записи ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации RRRPROW RRPROW%rowtype; -- Запись строки регламентированного отчета RRRPVERSION_ROW RRPVERSION%rowtype; -- Запись редакции строки регламентированного отчета RRRPCOLUMN RRPCOLUMN%rowtype; -- Запись графы регламентированного отчета RRRPVERSION_COLUMN RRPVERSION%rowtype; -- Запись редакции графы регламентированного отчета SCODE_ PKG_STD.TSTRING; -- Буфер для фактического мнемокода SNAME_ PKG_STD.TSTRING; -- Буфер для фактического наименования begin /* Получим НСИ (строки, графы, редакции и т.п.) по данным, полученным от пользователя */ RRPCONFSCTNMRK_JOINS(NCOMPANY => NCOMPANY, NRRPROW => NRRPROW, SRRPROW => SRRPROW, SRRPVERSION_ROW => SRRPVERSION_ROW, NRRPCOLUMN => NRRPCOLUMN, SRRPCOLUMN => SRRPCOLUMN, SRRPVERSION_COLUMN => SRRPVERSION_COLUMN, RRRPROW => RRRPROW, RRRPVERSION_ROW => RRRPVERSION_ROW, RRRPCOLUMN => RRRPCOLUMN, RRRPVERSION_COLUMN => RRRPVERSION_COLUMN); /* Сформируем автоматические мнемокод и наименование, если пользователь не указал их */ SCODE_ := SCODE; SNAME_ := SNAME; RRPCONFSCTNMRK_BUILD_CODE_NAME(NCOMPANY => NCOMPANY, NRRPCONFSCTN => NPRN, NRRPROW => RRRPROW.RN, NRRPCOLUMN => RRRPCOLUMN.RN, SCODE => SCODE_, SNAME => SNAME_); /* Добавим показатель */ 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_COLUMN.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, -- Рег. номер показателя раздела SCODE in varchar2, -- Мнемокод показателя раздела SNAME in varchar2, -- Наименование показателя раздела SRRPROW in varchar2, -- Код строки SRRPVERSION_ROW in varchar2, -- Код редакции строки SRRPCOLUMN in varchar2, -- Код графы SRRPVERSION_COLUMN in varchar2 -- Код редакции графы ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации RMRK RRPCONFSCTNMRK%rowtype; -- Запись настройки показателя регламентированного отчета RRRPPRM RRPPRM%rowtype; -- Запись типового параметра регламентированного отчета RRRPROW RRPROW%rowtype; -- Запись строки регламентированного отчета RRRPVERSION_ROW RRPVERSION%rowtype; -- Запись редакции строки регламентированного отчета RRRPCOLUMN RRPCOLUMN%rowtype; -- Запись графы регламентированного отчета RRRPVERSION_COLUMN RRPVERSION%rowtype; -- Запись редакции графы регламентированного отчета SCODE_ PKG_STD.TSTRING; -- Буфер для фактического мнемокода SNAME_ PKG_STD.TSTRING; -- Буфер для фактического наименования begin /* Получение записи параметра раздела */ RMRK := GET_RRPCONFSCTNMRK_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRN); /* Получим НСИ (строки, графы, редакции и т.п.) по данным, полученным от пользователя */ RRPCONFSCTNMRK_JOINS(NCOMPANY => NCOMPANY, NRRPROW => null, SRRPROW => SRRPROW, SRRPVERSION_ROW => SRRPVERSION_ROW, NRRPCOLUMN => null, SRRPCOLUMN => SRRPCOLUMN, SRRPVERSION_COLUMN => SRRPVERSION_COLUMN, RRRPROW => RRRPROW, RRRPVERSION_ROW => RRRPVERSION_ROW, RRRPCOLUMN => RRRPCOLUMN, RRRPVERSION_COLUMN => RRRPVERSION_COLUMN); /* Сформируем автоматические мнемокод и наименование, если пользователь не указал их */ SCODE_ := SCODE; SNAME_ := SNAME; RRPCONFSCTNMRK_BUILD_CODE_NAME(NCOMPANY => NCOMPANY, NRRPCONFSCTN => RMRK.PRN, NRRPROW => RRRPROW.RN, NRRPCOLUMN => RRRPCOLUMN.RN, SCODE => SCODE_, SNAME => SNAME_); /* Считаем код типового параметра, если задан в показателе (чтобы не затереть существующий, т.к. пользователь нам его не передает сейчас) */ if (RMRK.RRPPRM is not null) then RRRPPRM := GET_RRPPRM_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RMRK.RRPPRM); else RRRPPRM.CODE := null; end if; /* Исправим показатель */ P_RRPCONFSCTNMRK_UPDATE(NRN => RMRK.RN, NCOMPANY => NCOMPANY, NNUMB => RMRK.NUMB, SCODE => SCODE_, SNAME => SNAME_, SRRPROW => SRRPROW, SRRPVERSION_ROW => SRRPVERSION_ROW, SRRPCOLUMN => SRRPCOLUMN, SRRPVERSION_COLUMN => SRRPVERSION_COLUMN, SPKG_ROW => RMRK.PKG_ROW, SPRC_ROW => RMRK.PRC_ROW, SPKG_COL => RMRK.PKG_COL, SPRC_COL => RMRK.PRC_COL, SRRPPRM => RRRPPRM.CODE, NIGNORE_ZOOM => RMRK.IGNORE_ZOOM, NIGNORE_SHARP => RMRK.IGNORE_SHARP, SCLSF_CODE => RMRK.CLSF_CODE, NFORMULA_UPDATE => 1, SNOTE => RMRK.NOTE); end RRPCONFSCTNMRK_UPDATE; /* Удаление показателя раздела регламентированного отчёта */ procedure RRPCONFSCTNMRK_DELETE ( NRN in number -- Рег. номер показателя раздела ) is begin /* Удалим показатель */ P_RRPCONFSCTNMRK_DELETE(NCOMPANY => GET_SESSION_COMPANY(), NRN => NRN); end RRPCONFSCTNMRK_DELETE; /* Получение раздела регламентированного отчёта */ procedure RRPCONFSCTN_GET ( NRRPCONFSCTN in number, -- Рег. номер раздела настройки форм регламентированного отчёта NROW_ORDER in number := 0, -- Порядок сортировки строк (0 - по номеру, 1 - по коду, 2 - по мнемокоду) NCOL_ORDER in number := 0, -- Порядок сортировки граф (0 - по номеру, 1 - по коду, 2 - по мнемокоду) COUT out clob -- Данные раздела ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса RDG PKG_P8PANELS_VISUAL.TDG; -- Описание таблицы RDG_ROW PKG_P8PANELS_VISUAL.TDG_ROW; -- Строка таблицы ICURSOR integer; -- Курсор для исполнения запроса NROW_RN PKG_STD.TREF; -- Рег. номер строки SROW_NAME PKG_STD.TSTRING; -- Наименование строки NCOL_RN PKG_STD.TREF; -- Рег. номер графы /* Получение наименования колонки таблицы "Код" для строк/граф */ function TABCOL_ROWCOL_CODE_GET ( STABLE in varchar2 -- Таблица (RRPROW - по строкам, RRPCOLUMN - по графам) ) return varchar2 -- Наименование колонки таблицы для хранения "Кода" is begin /* Смотрим от имени таблицы */ if (STABLE = 'RRPCOLUMN') then /* Код графы */ return 'COLUMN_CODE'; elsif (STABLE = 'RRPROW') then /* Код строки */ return 'ROW_CODE'; else /* Неизвестная таблица */ P_EXCEPTION(0, 'Таблица "%s" не поддерживается.', COALESCE(STABLE, '<НЕ УКАЗАНА>')); end if; end TABCOL_ROWCOL_CODE_GET; /* Формирование условия сортировки для SQL-запроса по строкам/графам */ function ORDER_CLAUSE_GET ( STABLE in varchar2, -- Таблица (RRPROW - по строкам, RRPCOLUMN - по графам) NORDER in number, -- Порядок сортировки (0 - по номеру, 1 - по коду, 2 - по мнемокоду) SALIAS in varchar2 -- Алиас таблицы в формируемом запросе ) return varchar2 -- Текстовое представление сортировки is SRESULT PKG_STD.TSTRING; -- Текстовое представление сортировки STABLE_COLUMN_CODE PKG_STD.TSTRING; -- Наименование колонки таблицы, содержащую код begin /* Определяем наименование колонки, содержающую код */ STABLE_COLUMN_CODE := TABCOL_ROWCOL_CODE_GET(STABLE => STABLE); /* Формируем представление сортировки */ 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_CLAUSE_GET; /* Открытие курсора по строкам/графам раздела */ procedure OPEN_ROWS_COLS_CUR ( NRRPCONFSCTN in number, -- Рег. номер раздела настройки форм регламентированного отчёта STABLE in varchar2, -- Таблица (RRPROW - по строкам, RRPCOLUMN - по графам) NORDER in number, -- Порядок сортировки (0 - по номеру, 1 - по коду, 2 - по мнемокоду) ICURSOR in out integer -- Открытый курсор ) is CSQL clob; -- Запрос SORDERS PKG_STD.TSTRING; -- Условия сортировки begin /* Закроем курсор если открыт */ if (PKG_SQL_DML.IS_OPEN(ICURSOR => ICURSOR)) then PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); end if; /* Определим условия сортировки */ SORDERS := ORDER_CLAUSE_GET(STABLE => STABLE, NORDER => NORDER, SALIAS => 'T'); /* Соберем запрос */ CSQL := PKG_SQL_BUILD.COMPATIBLE(); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select T.RN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.NAME'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from RRPCONFSCTNMRK M,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ' || STABLE || ' T'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where M.PRN = ' || TO_CHAR(NRRPCONFSCTN)); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.RN = M.' || STABLE); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' group by T.RN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.CODE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.NAME,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.' || TABCOL_ROWCOL_CODE_GET(STABLE => STABLE) || ','); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.SORT_NUMB'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' order by ' || SORDERS); /* Разбираем его */ ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); /* Описываем структуру записи курсора */ PKG_SQL_DML.DEFINE_COLUMN_NUM(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; end OPEN_ROWS_COLS_CUR; /* Формирование наименования колонки таблицы данных по рег. номеру графы показателя */ function DG_COL_NAME_BY_RRPCOLUMN ( NRRPCOLUMN in number -- Рег. номер графы ) return varchar2 -- Имя колонки для таблицы данных is begin return 'SCOL_' || TO_CHAR(NRRPCOLUMN); end DG_COL_NAME_BY_RRPCOLUMN; /* Получение рег. номера графы показателя по наименованию колонки таблицы данных */ function RRPCOLUMN_BY_DG_COL_NAME ( SDG_COL_NAME in varchar2 -- Имя колонки таблицы данных ) return number -- Рег. номер графы is begin return TO_NUMBER(replace(SDG_COL_NAME, 'SCOL_', '')); end RRPCOLUMN_BY_DG_COL_NAME; /* Инициализация колонок выходной таблицы */ procedure COLUMNS_INIT ( RDG in out nocopy PKG_P8PANELS_VISUAL.TDG, -- Описание таблицы NRRPCONFSCTN in number, -- Рег. номер раздела NCOL_ORDER in number, -- Порядок сортировки граф (0 - по номеру, 1 - по коду, 2 - по мнемокоду) NCOL_WIDTH in number -- Ширина колонки (пикселей) ) is ICURSOR integer; -- Курсор для исполнения запроса по графам показателей раздела NCOL_RN PKG_STD.TREF; -- Рег. номер графы SCOL_NAME PKG_STD.TSTRING; -- Наименование графы begin /* Наименование строки будет отображаться в первой колонке */ PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SROW_NAME', SCAPTION => 'Наименование строки', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, NWIDTH => NCOL_WIDTH); /* Остальные колонки это графы настройки РО - строим запрос по графам показателей */ OPEN_ROWS_COLS_CUR(NRRPCONFSCTN => NRRPCONFSCTN, STABLE => 'RRPCOLUMN', NORDER => NCOL_ORDER, ICURSOR => ICURSOR); /* Обходим графы показателей раздела */ while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) loop /* Считываем рег. номер строки */ PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 1, NVALUE => NCOL_RN); /* Считываем наименование строки */ PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 2, SVALUE => SCOL_NAME); /* Наименование графы */ PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => DG_COL_NAME_BY_RRPCOLUMN(NRRPCOLUMN => NCOL_RN), SCAPTION => SCOL_NAME, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, NWIDTH => NCOL_WIDTH); end loop; /* Освобождаем курсор */ PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); exception when others then if (PKG_SQL_DML.IS_OPEN(ICURSOR => ICURSOR)) then PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); end if; raise; end COLUMNS_INIT; begin /* Обращаемся к настройке */ for S in (select T.RN NRN from RRPCONFSCTN T where T.RN = NRRPCONFSCTN and exists (select null from RRPCONFSCTNMRK M where M.PRN = T.RN) and exists (select null from V_USERPRIV UP where UP.CATALOG = T.CRN)) loop /* Инициализируем таблицу данных */ RDG := PKG_P8PANELS_VISUAL.TDG_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 1); /* Инициализируем колонки таблицы данных */ COLUMNS_INIT(RDG => RDG, NRRPCONFSCTN => S.NRN, NCOL_ORDER => NCOL_ORDER, NCOL_WIDTH => NMRKS_DG_COL_WIDTH); /* Открываем запрос по составу уникальных строк раздела */ OPEN_ROWS_COLS_CUR(NRRPCONFSCTN => NRRPCONFSCTN, STABLE => 'RRPROW', NORDER => NROW_ORDER, ICURSOR => ICURSOR); /* Обходим выбранные записи строк */ while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) loop /* Считываем рег. номер строки */ PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 1, NVALUE => NROW_RN); /* Считываем наименование строки */ PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 2, SVALUE => SROW_NAME); /* Заполняем наименование строки */ PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SROW_NAME', SVALUE => SROW_NAME, BCLEAR => true); /* Обходим сформированные колонки таблицы данных */ for I in RDG.RCOL_DEFS.FIRST .. RDG.RCOL_DEFS.LAST loop /* Первую пропускаем - она зарезервирована под наименование строки */ if (I > RDG.RCOL_DEFS.FIRST) then /* Определим рег. номер графы по её наименованию */ NCOL_RN := RRPCOLUMN_BY_DG_COL_NAME(SDG_COL_NAME => RDG.RCOL_DEFS(I).SNAME); /* Заполняем графу описанием показателя */ PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => RDG.RCOL_DEFS(I).SNAME, SVALUE => RRPCONFSCTNMRK_GET_DESC(NCOMPANY => NCOMPANY, NRRPCONFSCTN => S.NRN, NRRPROW => NROW_RN, NRRPCOLUMN => NCOL_RN)); end if; end loop; /* Добавим строку для раздела */ PKG_P8PANELS_VISUAL.TDG_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); end loop; /* Освобождаем курсор */ PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); /* Сериализуем описание */ COUT := PKG_P8PANELS_VISUAL.TDG_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1); end loop; exception when others then if (PKG_SQL_DML.IS_OPEN(ICURSOR => ICURSOR)) then PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); end if; raise; end RRPCONFSCTN_GET; /* Добавление раздела регламентированного отчёта */ 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 begin /* Удалим раздел */ P_RRPCONFSCTN_DELETE(NCOMPANY => GET_SESSION_COMPANY(), NRN => NRN); end RRPCONFSCTN_DELETE; /* Получение описания настройки регламентированного отчета */ procedure RRPCONF_GET ( NRRPCONF in number, -- Рег. номер настройки форм регламентированного отчёта COUT out clob -- Описание настройки ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса SNAME_SHORT PKG_STD.TSTRING; -- Краткое наименование раздела begin /* Формируем XML с данными */ PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); PKG_XFAST.DOWN_NODE(SNAME => 'XDATA'); /* Обратимся к настройке */ for CONF in (select C.RN NRN, C.NAME SNAME from RRPCONF C where C.RN = NRRPCONF and exists (select null from V_USERPRIV UP where UP.CATALOG = C.CRN)) loop /* Добавим в выдачу сведения о настройке */ PKG_XFAST.DOWN_NODE(SNAME => 'XCONF'); PKG_XFAST.ATTR(SNAME => 'SNAME', SVALUE => CONF.SNAME); PKG_XFAST.UP(); /* Обходим разделы настройки */ for C in (select T.RN NRN, T.CODE SCODE, T.NAME SNAME from RRPCONFSCTN T where T.PRN = CONF.NRN and exists (select null from V_USERPRIV UP where UP.CATALOG = T.CRN) order by T.CODE, T.NAME) loop /* Составим краткое наименование */ SNAME_SHORT := SUBSTR(C.SNAME, 1, NSECTION_NAME_MAX_LEN); if (LENGTH(C.SNAME) > NSECTION_NAME_MAX_LEN) then SNAME_SHORT := SNAME_SHORT || '...'; end if; /* Формирование элемента XML с данными о разделе */ PKG_XFAST.DOWN_NODE(SNAME => 'XSECTIONS'); PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => C.NRN); PKG_XFAST.ATTR(SNAME => 'SCODE', SVALUE => C.SCODE); PKG_XFAST.ATTR(SNAME => 'SNAME', SVALUE => C.SNAME); PKG_XFAST.ATTR(SNAME => 'SNAME_SHORT', SVALUE => SNAME_SHORT); PKG_XFAST.ATTR(SNAME => 'NDELETE_ALLOW', NVALUE => UTL_UNIT_ACTION_GET_ALLOW(NCOMPANY => NCOMPANY, NRN => C.NRN, SUNIT => SUNIT_RRPCONFSCTN, SACTION => SACTION_DELETE)); PKG_XFAST.UP(); end loop; end loop; /* Закрываем описание */ PKG_XFAST.UP(); /* Сериализуем описание */ COUT := PKG_XFAST.SERIALIZE_TO_CLOB(); /* Завершаем формирование XML */ PKG_XFAST.EPILOGUE(); end RRPCONF_GET; end PKG_P8PANELS_RRPCONFED; /