P8-Panels/db/PKG_P8PANELS_RRPCONFED.pck

1359 lines
83 KiB
SQL
Raw Normal View History

create or replace package PKG_P8PANELS_RRPCONFED as
/* Получение разделов регламентированного отчёта */
procedure RRPCONF_GET_SECTIONS
(
NRN_RRPCONF in number, -- Ид. нстройки форм регламентированного отчёта
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, -- Ид. нстройки форм регламентированного отчёта
COUT out clob -- Список разделов
)
is
NVERSION PKG_STD.TREF; -- Рег. номер версии словаря контрагентов
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы
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; -- Данные по разделу настройки
/* Инициализация колонок граф показателей */
procedure MARKS_COLUMNS_INIT
(
RDG in out nocopy PKG_P8PANELS_VISUAL.TDATA_GRID, -- Описание таблицы
NRRPCONFSCTN in number -- Рег. номер раздела
)
is
begin
/* Цикл по графам показателей раздела */
for REC in (select C.CODE,
C.NAME
from RRPCONFSCTNMRK T,
RRPCOLUMN C
where T.PRN = NRRPCONFSCTN
and T.RRPCOLUMN = C.RN
group by C.RN,
C.CODE,
C.NAME
order by C.CODE)
loop
/* Наименование графы */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SCOL_' || REC.CODE,
SCAPTION => REC.NAME,
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
NWIDTH => 200);
/* Рег. номер графы */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'NCOL_RN_' || REC.CODE,
SCAPTION => REC.NAME || ' рег. номер',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
BVISIBLE => false);
/* Рег. номер показателя */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'NMARK_RN_' || REC.CODE,
SCAPTION => REC.NAME || ' рег. номер показателя',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
BVISIBLE => false);
/* Мнемокод показателя */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SMARK_CODE_' || REC.CODE,
SCAPTION => REC.NAME || ' мнемокод показателя',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => false);
/* Для составов показтелей */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'MARK_CNS_' || REC.CODE,
SCAPTION => REC.NAME || ' состав показателя',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => false);
end loop;
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.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 1);
/* Формируем структуру заголовка */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SROW_NAME',
SCAPTION => '',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
NWIDTH => 150);
/* Формируем структуру заголовка */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SROW_CODE',
SCAPTION => 'Мнемокод строки',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => false);
/* Формируем структуру заголовка */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'NROW_RN',
SCAPTION => 'Рег. номер строки',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
BVISIBLE => false);
/* Если раздел содержит показатели */
if (S.NMARKS_EXISTS = 1) then
/* Инициализируем колонки граф */
MARKS_COLUMNS_INIT(RDG => RDG, NRRPCONFSCTN => S.NRN);
/* Обходим строки раздела */
for R in (select R.RN,
R.CODE,
R.NAME
from RRPCONFSCTNMRK T,
RRPROW R
where T.PRN = S.NRN
and R.RN = T.RRPROW
group by R.RN,
R.CODE,
R.NAME,
R.ROW_CODE,
R.SORT_NUMB
order by R.SORT_NUMB,
LPAD(R.ROW_CODE, 40, '0'),
LPAD(R.CODE, 20, '0'))
loop
/* Заполняем наименование строки */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SROW_NAME', SVALUE => R.NAME, BCLEAR => true);
/* Заполняем мнемокод строки */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SROW_CODE', SVALUE => R.CODE);
/* Заполняем рег. номер строки */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NROW_RN', NVALUE => R.RN);
/* Обходим графы раздела */
for C in (select C.RN,
C.CODE,
C.NAME
from RRPCONFSCTNMRK T,
RRPCOLUMN C
where T.PRN = S.NRN
and C.RN = T.RRPCOLUMN
group by C.RN,
C.CODE,
C.NAME,
C.COLUMN_CODE,
C.SORT_NUMB
order by C.SORT_NUMB,
LPAD(C.COLUMN_CODE, 40, '0'),
LPAD(C.CODE, 20, '0'))
loop
/* Считываем показатель по строке/графе */
RRRPCONFSCTNMRK := RRPCONFSCTNMRK_GET_ROWCOL(NRRPCONFSCTN => S.NRN, NRRPROW => R.RN, NRRPCOLUMN => C.RN);
/* Заполняем рег. номер графы */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SCOL_' || C.CODE, SVALUE => C.NAME);
/* Заполняем рег. номер графы */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NCOL_RN_' || C.CODE, NVALUE => C.RN);
/* Заполняем рег. номер показателя */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW,
SNAME => 'NMARK_RN_' || C.CODE,
NVALUE => RRRPCONFSCTNMRK.RN);
/* Если ошибка считывания показателя */
if (RRRPCONFSCTNMRK.RN is not null) then
/* Заполняем мнемокод показателя */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW,
SNAME => 'SMARK_CODE_' || C.CODE,
SVALUE => RRRPCONFSCTNMRK.CODE);
/* Добавляем атрибут состава показателей */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'MARK_CNS_' || C.CODE, SVALUE => null);
end if;
end loop;
/* Добавим строку для раздела */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
end loop;
end if;
/* Сериализуем описание */
CDG := PKG_P8PANELS_VISUAL.TDATA_GRID_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;
/