P8-Panels/db/PKG_P8PANELS_RRPCONFED.pck

1359 lines
83 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.TDG; -- Описание таблицы
RDG_ROW PKG_P8PANELS_VISUAL.TDG_ROW; -- Строка таблицы
CDG clob; -- XML данных раздела
CXML PKG_CONTVALLOC2NS.TCONTAINER; -- Контейнер для данных XML
RRRPCONFSCTNMRK RRPCONFSCTNMRK%rowtype; -- Рег. номер показателя
NCURRENT_SECTION PKG_STD.TNUMBER; -- Идентификатор раздела настройки в контейнере
NSECTION_RN PKG_STD.TREF; -- Рег. номер раздел настройки
SSECTION_CODE PKG_STD.TSTRING; -- Мнемокод раздела настройки
SSECTION_NAME PKG_STD.TSTRING; -- Наименование раздела настройки
CSECTION_CLOB clob; -- Данные по разделу настройки
/* Инициализация колонок граф показателей */
procedure MARKS_COLUMNS_INIT
(
RDG in out nocopy PKG_P8PANELS_VISUAL.TDG, -- Описание таблицы
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.TDG_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.TDG_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.TDG_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.TDG_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.TDG_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.TDG_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 1);
/* Формируем структуру заголовка */
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SROW_NAME',
SCAPTION => '',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
NWIDTH => 150);
/* Формируем структуру заголовка */
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SROW_CODE',
SCAPTION => 'Мнемокод строки',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => false);
/* Формируем структуру заголовка */
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'NROW_RN',
SCAPTION => 'Рег. номер строки',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
BVISIBLE => false);
/* Если раздел содержит показатели */
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.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SROW_NAME', SVALUE => R.NAME, BCLEAR => true);
/* Заполняем мнемокод строки */
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SROW_CODE', SVALUE => R.CODE);
/* Заполняем рег. номер строки */
PKG_P8PANELS_VISUAL.TDG_ROW_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.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SCOL_' || C.CODE, SVALUE => C.NAME);
/* Заполняем рег. номер графы */
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NCOL_RN_' || C.CODE, NVALUE => C.RN);
/* Заполняем рег. номер показателя */
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW,
SNAME => 'NMARK_RN_' || C.CODE,
NVALUE => RRRPCONFSCTNMRK.RN);
/* Если ошибка считывания показателя */
if (RRRPCONFSCTNMRK.RN is not null) then
/* Заполняем мнемокод показателя */
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW,
SNAME => 'SMARK_CODE_' || C.CODE,
SVALUE => RRRPCONFSCTNMRK.CODE);
/* Добавляем атрибут состава показателей */
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'MARK_CNS_' || C.CODE, SVALUE => null);
end if;
end loop;
/* Добавим строку для раздела */
PKG_P8PANELS_VISUAL.TDG_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
end loop;
end if;
/* Сериализуем описание */
CDG := PKG_P8PANELS_VISUAL.TDG_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1);
/* Заполняем контейнер данными о разделе */
PKG_CONTVALLOC2NS.PUTN(RCONTAINER => CXML, NTABID => S.RNUM, SROWID => 'RN', NVALUE => S.NRN);
PKG_CONTVALLOC2NS.PUTS(RCONTAINER => CXML, NTABID => S.RNUM, SROWID => 'CODE', SVALUE => S.SCODE);
PKG_CONTVALLOC2NS.PUTS(RCONTAINER => CXML, NTABID => S.RNUM, SROWID => 'NAME', SVALUE => S.SNAME);
PKG_CONTVALLOC2NS.PUTLC(RCONTAINER => CXML, NTABID => S.RNUM, SROWID => 'CLOB', LCVALUE => CDG);
end loop;
/* Формируем XML с данными */
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);
PKG_XFAST.DOWN_NODE(SNAME => 'DATA');
/* Цикл по контейнеру с данными о разделах */
for X in 1 .. PKG_CONTVALLOC2NS.COUNT_(RCONTAINER => CXML)
loop
/* Ид. раздела */
if (X = 1) then
NCURRENT_SECTION := PKG_CONTVALLOC2NS.FIRST_(RCONTAINER => CXML);
else
NCURRENT_SECTION := PKG_CONTVALLOC2NS.NEXT_(RCONTAINER => CXML, NTABID => NCURRENT_SECTION);
end if;
/* Рег. номер раздела */
NSECTION_RN := PKG_CONTVALLOC2NS.GETN(RCONTAINER => CXML, NTABID => NCURRENT_SECTION, SROWID => 'RN');
/* Мнемокод раздела */
SSECTION_CODE := PKG_CONTVALLOC2NS.GETS(RCONTAINER => CXML, NTABID => NCURRENT_SECTION, SROWID => 'CODE');
/* Наименование раздела */
SSECTION_NAME := PKG_CONTVALLOC2NS.GETS(RCONTAINER => CXML, NTABID => NCURRENT_SECTION, SROWID => 'NAME');
/* Clob с показателями раздела */
CSECTION_CLOB := PKG_CONTVALLOC2NS.GETLC(RCONTAINER => CXML, NTABID => NCURRENT_SECTION, SROWID => 'CLOB');
/* Формирование элемента XML с данными о разделе */
PKG_XFAST.DOWN_NODE(SNAME => 'SECTIONS');
PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => NSECTION_RN);
PKG_XFAST.ATTR(SNAME => 'SCODE', SVALUE => SSECTION_CODE);
PKG_XFAST.ATTR(SNAME => 'SNAME', SVALUE => SSECTION_NAME);
PKG_XFAST.ATTR(SNAME => 'NDELETE_ALLOW',
NVALUE => UTL_UNIT_ACTION_GET_ALLOW(SUNIT => SUNIT_RRPCONFSCTN,
SACTION => SACTION_DELETE,
NRN => NSECTION_RN));
PKG_XFAST.VALUE_XML(LCVALUE => CSECTION_CLOB);
/* Добавляем информацию о составах показателей */
PKG_XFAST.DOWN_NODE(SNAME => 'MARK_CNS');
/* Цикл по составам показателей раздела */
for REC in (select T.PRN,
T.RN,
T.NUMB
from RRPCONFSCTNMRK M,
RRPCONFSCTNMRKCN T
where M.PRN = NSECTION_RN
and T.PRN = M.RN
order by M.RN,
T.NUMB asc)
loop
/* Добавляем состав */
PKG_XFAST.DOWN_NODE(SNAME => 'MARK_CN');
PKG_XFAST.ATTR(SNAME => 'NPRN', NVALUE => REC.PRN);
PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.RN);
PKG_XFAST.ATTR(SNAME => 'SNUMB', SVALUE => REC.NUMB);
PKG_XFAST.ATTR(SNAME => 'SDESC',
SVALUE => UTL_RRPCONFSCTNMRKCN_GET_DESC(NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => REC.RN));
PKG_XFAST.UP();
end loop;
PKG_XFAST.UP();
PKG_XFAST.UP();
end loop;
PKG_XFAST.UP();
/* Сериализуем описание */
COUT := PKG_XFAST.SERIALIZE_TO_CLOB();
PKG_XFAST.EPILOGUE();
/* Очистка контейнера */
PKG_CONTVALLOC2NS.PURGE(RCONTAINER => CXML);
end RRPCONF_GET_SECTIONS;
/* Добавление раздела регламентированного отчёта */
procedure RRPCONFSCTN_INSERT
(
NPRN in number, -- Ид. настройки форм регламентированного отчёта
SCODE in varchar2, -- Мнемокод
SNAME in varchar2, -- Наименование
NRN out number -- Ид. созданной записи
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
begin
/* Добавим раздел */
P_RRPCONFSCTN_INSERT(NCOMPANY => NCOMPANY,
NPRN => NPRN,
SCODE => SCODE,
SNAME => SNAME,
SRRPCONFSCTN => null,
SRRPPRMGRP => null,
SNOTE => null,
NHTML_HIDE => 0,
NHTML_HIDE_NAME_COL => 0,
NHTML_MAKE_HIER_GRP => 0,
SCLSF_CODE => null,
NLINKS_UPDATE => 0,
NDUP_RN => null,
NRN => NRN);
end RRPCONFSCTN_INSERT;
/* Исправление раздела регламентированного отчёта */
procedure RRPCONFSCTN_UPDATE
(
NRN in number, -- Ид. раздела
SCODE in varchar2, -- Мнемокод раздела
SNAME in varchar2 -- Наименование раздела
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
RRES RRPCONFSCTN%rowtype; -- Запись раздела настройки формы регламентированного отчета
RRRPCONFSCTN RRPCONFSCTN%rowtype; -- Запись родительского раздела настройки регламентированного отчета
RRRPPRMGRP RRPPRMGRP%rowtype; -- Запись группы параметров регламентированного отчета
begin
/* Считаем исправляемую запись */
RRES := GET_RRPCONFSCTN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRN);
/* Считаем запись родительского этапа */
if (RRES.RRPCONFSCTN is not null) then
RRRPCONFSCTN := GET_RRPCONFSCTN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RRES.RRPCONFSCTN);
end if;
/* Считаем запись группы параметров */
if (RRES.RRPPRMGRP is not null) then
RRRPPRMGRP := GET_RRPPRMGRP_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RRES.RRPPRMGRP);
end if;
/* Исправим раздел */
P_RRPCONFSCTN_UPDATE(NRN => RRES.RN,
NCOMPANY => NCOMPANY,
SCODE => SCODE,
SNAME => SNAME,
SRRPCONFSCTN => RRRPCONFSCTN.CODE,
SRRPPRMGRP => RRRPPRMGRP.CODE,
SNOTE => RRES.NOTE,
NHTML_HIDE => RRES.HTML_HIDE,
NHTML_HIDE_NAME_COL => RRES.HTML_HIDE_NAME_COL,
NHTML_MAKE_HIER_GRP => RRES.HTML_MAKE_HIER_GRP,
SCLSF_CODE => RRES.CLSF_CODE,
NFORMULA_UPDATE => 1,
NMARK_UPDATE => 1);
end RRPCONFSCTN_UPDATE;
/* Удаление раздела регламентированного отчёта */
procedure RRPCONFSCTN_DELETE
(
NRN in number -- Ид. раздела
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
begin
/* Если действие недоступно для удаления */
if (UTL_UNIT_ACTION_GET_ALLOW(SUNIT => SUNIT_RRPCONFSCTN, SACTION => SACTION_DELETE, NRN => NRN) = 0) then
P_EXCEPTION(0,
'Данный раздел используется в сформированных документах/параметрах документа/дочерний раздел. Удаление запрещено.');
end if;
/* Удалим раздел */
P_RRPCONFSCTN_DELETE(NRN => NRN, NCOMPANY => NCOMPANY);
end RRPCONFSCTN_DELETE;
/* Получение кодов настройки, раздела и показателя раздела по ид. показателя раздела */
procedure RRPCONFSCTNMRK_GET_CODES
(
NRN in number, -- Ид. показателя раздела
SRRPCONF out varchar2, -- Код настройки формы регламентированного отчёта
SRRPCONFSCTN out varchar2, -- Код раздела
SRRPCONFSCTNMRK out varchar2 -- Код показателя раздела
)
is
begin
/* Считываем данные показателя/раздела/настройки */
begin
select C.CODE,
S.CODE,
M.CODE
into SRRPCONF,
SRRPCONFSCTN,
SRRPCONFSCTNMRK
from RRPCONF C,
RRPCONFSCTN S,
RRPCONFSCTNMRK M
where M.RN = NRN
and S.RN = M.PRN
and C.RN = S.PRN;
exception
when others then
P_EXCEPTION(0,
'Не определен показатель настройки регламентированного отчета.');
end;
end RRPCONFSCTNMRK_GET_CODES;
/* Формирование кода и наименования показателя раздела регламентированного отчёта */
procedure RRPCONFSCTNMRK_GET_CODE_NAME
(
NRRPCONFSCTN in number, -- Рег. номер раздела
NRRPROW in number, -- Рег. номер строки
NRRPCOLUMN in number, -- Рег. номер графы
SCODE out varchar2, -- Мнемокод показателя раздела
SNAME out varchar2 -- Наименование показателя раздела
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
RRRPCONFSCTN RRPCONFSCTN%rowtype; -- Запись раздела регламентированного отчета
RRRPROW RRPROW%rowtype; -- Запись строки регламентированного отчета
RRRPCOLUMN RRPCOLUMN%rowtype; -- Запись графы регламентированного отчета
begin
/* Считываем запись раздела регламентированного отчета */
RRRPCONFSCTN := GET_RRPCONFSCTN_ID(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, NRN => NRRPCONFSCTN);
/* Считываем запись строки регламентированного отчета */
RRRPROW := GET_RRPROW_ID(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, NRN => NRRPROW);
/* Считываем запись графы регламентированного отчета */
RRRPCOLUMN := GET_RRPCOLUMN_ID(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, NRN => NRRPCOLUMN);
/* Если все записи считаны */
if ((RRRPCONFSCTN.RN is not null) and (RRRPROW.RN is not null) and (RRRPCOLUMN.RN is not null)) then
/* Сформируем код показателя */
P_RRPCONFSCTNMRK_MAKE_CODE(SRRPCONFSCTN => RRRPCONFSCTN.CODE,
SRRPROW => RRRPROW.CODE,
SRRPCOLUMN => RRRPCOLUMN.CODE,
SCODE => SCODE);
/* Сформируем наименование показателя */
P_RRPCONFSCTNMRK_MAKE_NAME(NCOMPANY => NCOMPANY,
NRRPROW => RRRPROW.RN,
NRRPCOLUMN => RRRPCOLUMN.RN,
NCHANGE_NAME => 1,
NCHANGE_NAME_PARENT => 0,
SNAME => SNAME);
end if;
end RRPCONFSCTNMRK_GET_CODE_NAME;
/* Формирование кода и наименования показателя раздела регламентированного отчёта */
procedure RRPCONFSCTNMRK_GET_NAME
(
NRRPCONFSCTNMRK in number, -- Рег. номер показателя
SNAME out varchar2 -- Наименование показателя раздела
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
RRRPCONFSCTNMRK RRPCONFSCTNMRK%rowtype; -- Запись показателя регламентированного отчета
begin
/* Считываем запись раздела регламентированного отчета */
RRRPCONFSCTNMRK := GET_RRPCONFSCTNMRK_ID(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, NRN => NRRPCONFSCTNMRK);
/* Указываем наименование показателя */
SNAME := RRRPCONFSCTNMRK.NAME;
end RRPCONFSCTNMRK_GET_NAME;
/* Добавление показателя раздела регламентированного отчёта */
procedure RRPCONFSCTNMRK_INSERT
(
NPRN in number, -- Ид. раздела
SCODE in varchar2, -- Мнемокод показателя раздела
SNAME in varchar2, -- Наименование показателя раздела
NRRPROW in number, -- Рег. номер строки
NRRPCOLUMN in number, -- Рег. номер графы
NRN out number -- Ид. созданной записи
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
RRRPROW RRPROW%rowtype; -- Запись строки регламентированного отчета
RRRPVERSION_ROW RRPVERSION%rowtype; -- Запись редакции строки регламентированного отчета
RRRPCOLUMN RRPCOLUMN%rowtype; -- Запись графы регламентированного отчета
RRRPVERSION_COL RRPVERSION%rowtype; -- Запись редакции графы регламентированного отчета
begin
/* Если строка не указана */
if (NRRPROW is null) then
P_EXCEPTION(0,
'Ошибка считывания строки регламентированного отчета.');
end if;
/* Если графа не указана */
if (NRRPCOLUMN is null) then
P_EXCEPTION(0,
'Ошибка считывания графы регламентированного отчета.');
end if;
/* Считываем запись строки регламентированного отчета */
RRRPROW := GET_RRPROW_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRRPROW);
/* Считываем запись графы регламентированного отчета */
RRRPCOLUMN := GET_RRPCOLUMN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRRPCOLUMN);
/* Считываем запись редакции строки регламентированного отчета */
RRRPVERSION_ROW := GET_RRPVERSION_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RRRPROW.RRPVERSION);
/* Считываем запись редакции графы регламентированного отчета */
RRRPVERSION_COL := GET_RRPVERSION_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RRRPCOLUMN.RRPVERSION);
/* Добавим показатель */
P_RRPCONFSCTNMRK_INSERT(NCOMPANY => NCOMPANY,
NPRN => NPRN,
NNUMB => F_RRPCONFSCTNMRK_NEXT_NUMB(NCOMPANY => NCOMPANY, NPRN => NPRN),
SCODE => SCODE,
SNAME => SNAME,
SRRPROW => RRRPROW.CODE,
SRRPVERSION_ROW => RRRPVERSION_ROW.CODE,
SRRPCOLUMN => RRRPCOLUMN.CODE,
SRRPVERSION_COLUMN => RRRPVERSION_COL.CODE,
SPKG_ROW => null,
SPRC_ROW => null,
SPKG_COL => null,
SPRC_COL => null,
SRRPPRM => null,
NIGNORE_ZOOM => 0,
NIGNORE_SHARP => 0,
SCLSF_CODE => null,
SNOTE => null,
NDUP_RN => null,
NRN => NRN);
end RRPCONFSCTNMRK_INSERT;
/* Исправление показателя раздела регламентированного отчёта */
procedure RRPCONFSCTNMRK_UPDATE
(
NRN in number, -- Ид. показателя раздела
SNAME in varchar2 -- Новое наименование
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
RESSCTNMRK RRPCONFSCTNMRK%rowtype; -- Запись настройки показателя регламентированного отчета
RESROW RRPROW%rowtype; -- Запись строки регламентированного отчета
RESCOLUMN RRPCOLUMN%rowtype; -- Запись графы регламентированного отчета
RRRPPRM RRPPRM%rowtype; -- Запись типового параметра регламентированного отчета
SROWVER PKG_STD.TSTRING; -- Мнемокод редакции строки
SCOLVER PKG_STD.TSTRING; -- Мнемокод редакции графы
begin
/* Получение записи параметра раздела */
RESSCTNMRK := GET_RRPCONFSCTNMRK_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRN);
/* Получение записи строки */
RESROW := GET_RRPROW_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RESSCTNMRK.RRPROW);
/* Получение записи графы */
RESCOLUMN := GET_RRPCOLUMN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RESSCTNMRK.RRPCOLUMN);
/* Получение мнемокода редакции строки */
if (RESROW.RRPVERSION is not null) then
SROWVER := GET_RRPVERSION_CODE_ID(NFLAG_SMART => 0, NRN => RESROW.RRPVERSION);
end if;
/* Получение мнемокода редакции графы */
if (RESCOLUMN.RRPVERSION is not null) then
SCOLVER := GET_RRPVERSION_CODE_ID(NFLAG_SMART => 0, NRN => RESCOLUMN.RRPVERSION);
end if;
/* Получение записи типового параметра */
if (RESSCTNMRK.RRPPRM is not null) then
RRRPPRM := GET_RRPPRM_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RESSCTNMRK.RRPPRM);
end if;
/* Исправим показатель */
P_RRPCONFSCTNMRK_UPDATE(NRN => NRN,
NCOMPANY => NCOMPANY,
NNUMB => RESSCTNMRK.NUMB,
SCODE => RESSCTNMRK.CODE,
SNAME => SNAME,
SRRPROW => RESROW.CODE,
SRRPVERSION_ROW => SROWVER,
SRRPCOLUMN => RESCOLUMN.CODE,
SRRPVERSION_COLUMN => SCOLVER,
SPKG_ROW => RESSCTNMRK.PKG_ROW,
SPRC_ROW => RESSCTNMRK.PRC_ROW,
SPKG_COL => RESSCTNMRK.PKG_COL,
SPRC_COL => RESSCTNMRK.PRC_COL,
SRRPPRM => RRRPPRM.CODE,
NIGNORE_ZOOM => RESSCTNMRK.IGNORE_ZOOM,
NIGNORE_SHARP => RESSCTNMRK.IGNORE_SHARP,
SCLSF_CODE => RESSCTNMRK.CLSF_CODE,
NFORMULA_UPDATE => 0,
SNOTE => RESSCTNMRK.NOTE);
end RRPCONFSCTNMRK_UPDATE;
/* Удаление показателя раздела регламентированного отчёта */
procedure RRPCONFSCTNMRK_DELETE
(
NRN in number -- Ид. показателя раздела
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
begin
/* Если действие недоступно для удаления */
if (UTL_UNIT_ACTION_GET_ALLOW(SUNIT => SUNIT_RRPCONFSCTNMRK, SACTION => SACTION_DELETE, NRN => NRN) = 0) then
P_EXCEPTION(0,
'Данный показатель используется в сформированных документах. Удаление запрещено.');
end if;
/* Удалим показатель */
P_RRPCONFSCTNMRK_DELETE(NCOMPANY => NCOMPANY, NRN => NRN);
end RRPCONFSCTNMRK_DELETE;
end PKG_P8PANELS_RRPCONFED;
/