P8-Panels/db/PKG_P8PANELS_RRPCONFED.pck

1497 lines
93 KiB
SQL
Raw 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 RRPCONFSCTNMRK_INSERT
(
NPRN in number, -- Рег. номер раздела
SCODE in varchar2, -- Мнемокод показателя раздела
SNAME in varchar2, -- Наименование показателя раздела
NRRPROW in number, -- Рег. номер строки
SRRPROW in varchar2, -- Код строки (игнорируется, если указан рег. номер строки)
SRRPVERSION_ROW in varchar2, -- Код редакции строки (игнорируется, если указан рег. номер строки)
NRRPCOLUMN in number, -- Рег. номер графы
SRRPCOLUMN in varchar2, -- Код графы
SRRPVERSION_COLUMN in varchar2, -- Код редакции графы
NRN out number -- Рег. номер созданной записи
);
/* Исправление показателя раздела регламентированного отчёта */
procedure RRPCONFSCTNMRK_UPDATE
(
NRN in number, -- Рег. номер показателя раздела
SCODE in varchar2, -- Мнемокод показателя раздела
SNAME in varchar2, -- Наименование показателя раздела
SRRPROW in varchar2, -- Код строки
SRRPVERSION_ROW in varchar2, -- Код редакции строки
SRRPCOLUMN in varchar2, -- Код графы
SRRPVERSION_COLUMN in varchar2 -- Код редакции графы
);
/* Удаление показателя раздела регламентированного отчёта */
procedure RRPCONFSCTNMRK_DELETE
(
NRN in number -- Рег. номер показателя раздела
);
/* Получение раздела регламентированного отчёта */
procedure RRPCONFSCTN_GET
(
NRRPCONFSCTN in number, -- Рег. номер раздела настройки форм регламентированного отчёта
NROW_ORDER in number := 0, -- Порядок сортировки строк (0 - по номеру, 1 - по коду, 2 - по мнемокоду)
NCOL_ORDER in number := 0, -- Порядок сортировки граф (0 - по номеру, 1 - по коду, 2 - по мнемокоду)
COUT out clob -- Данные раздела
);
/* Добавление раздела регламентированного отчёта */
procedure RRPCONFSCTN_INSERT
(
NPRN in number, -- Рег. номер настройки форм регламентированного отчёта
SCODE in varchar2, -- Мнемокод
SNAME in varchar2, -- Наименование
NRN out number -- Рег. номер созданной записи
);
/* Исправление раздела регламентированного отчёта */
procedure RRPCONFSCTN_UPDATE
(
NRN in number, -- Рег. номер раздела
SCODE in varchar2, -- Мнемокод раздела
SNAME in varchar2 -- Наименование раздела
);
/* Удаление раздела регламентированного отчёта */
procedure RRPCONFSCTN_DELETE
(
NRN in number -- Рег. номер раздела
);
/* Получение описания настройки регламентированного отчета */
procedure RRPCONF_GET
(
NRRPCONF in number, -- Рег. номер настройки форм регламентированного отчёта
COUT out clob -- Описание настройки
);
end PKG_P8PANELS_RRPCONFED;
/
create or replace package body PKG_P8PANELS_RRPCONFED as
/* Константы - общие параметры формирования данных */
NSECTION_NAME_MAX_LEN constant PKG_STD.TNUMBER := 100; -- Максимальный отображаемый размер наименования раздела настройки (символов)
/* Константы - параметры таблицы показателей раздела настройки РО */
NMRKS_DG_COL_WIDTH constant PKG_STD.TNUMBER := 250; -- Ширина колонки (пикселей)
/* Константы - маски для формирования представления параметров состава показателя */
SPRM_MASK_ACC_DC constant PKG_STD.TSTRING := 'ДЕБЕТ_КРЕДИТ'; -- Маска для параметров "Счет дебет" и "Счет кредит"
SPRM_MASK_ACC constant PKG_STD.TSTRING := 'СЧЕТ'; -- Маска для параметров "Счет"
SPRM_MASK_ACC_WO_ANL constant PKG_STD.TSTRING := 'СЧЕТЕЗ_АНЛ'; -- Маска для параметров "Счет" без учета аналитик
SPRM_MASK_DATE_FROM constant PKG_STD.TSTRING := 'ДАТА_С'; -- Маска для параметров "Дата с"
SPRM_MASK_DATE_TO constant PKG_STD.TSTRING := 'ДАТАО'; -- Маска для параметров "Дата по"
SPRM_MASK_RRPCONF constant PKG_STD.TSTRING := 'НАСТРОЙКА'; -- Маска для параметров настройки РО
/* Константы - мнемокоды разделов */
SUNIT_RRPCONFSCTN constant PKG_STD.TSTRING := 'RRPConfigSection'; -- Раздел настройки регламентированного отчета
SUNIT_RRPCONFSCTNMRK constant PKG_STD.TSTRING := 'RRPConfigSectionMark'; -- Показатель раздела настройки регламентированного отчета
/* Константы - действия разделов */
SACTION_DELETE constant PKG_STD.TSTRING := 'DELETE'; -- Удаление
/* Получение доступности действия раздела */
function UTL_UNIT_ACTION_GET_ALLOW
(
NCOMPANY in number, -- Рег. номер организации
NRN in number, -- Рег. номер записи
SUNIT in varchar2, -- Мнемокод раздела (см. константы SUNIT_*)
SACTION in varchar2 -- Действие (см. константы SACTION_*)
) return number -- Доступность действия (0 - недоступно, 1 - доступно)
is
NRESULT PKG_STD.TNUMBER; -- Доступность действия (0 - недоступно, 1 - доступно)
begin
/* Исходим отраздела */
case SUNIT
/* Раздел настройки регламентированного отчета */
when SUNIT_RRPCONFSCTN then
/* Исходим от действия */
case SACTION
/* Удаление */
when SACTION_DELETE then
begin
/* Выполним типовую проверку */
P_RRPCONFSCTN_BASE_CHECK(SMODE => 'D',
RREC => GET_RRPCONFSCTN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRN));
/* Проверка пройдена - можно удалять */
NRESULT := 1;
exception
/* Если проверка выдала ошибку - удаление невозможно */
when others then
NRESULT := 0;
end;
/* Действие неопределено - нельзя выполнять */
else
NRESULT := 0;
end case;
/* Показатель раздела настройки регламентированного отчета */
when SUNIT_RRPCONFSCTNMRK then
/* Исходим от действия */
case SACTION
/* Удаление */
when SACTION_DELETE then
begin
/* Выполним типовую проверку */
P_RRPCONFSCTNMRK_BASE_CHECK(SMODE => 'D',
RREC => GET_RRPCONFSCTNMRK_ID(NFLAG_SMART => 0,
NCOMPANY => NCOMPANY,
NRN => NRN));
/* Проверка пройдена - можно удалять */
NRESULT := 1;
exception
/* Если проверка выдала ошибку - удаление невозможно */
when others then
NRESULT := 0;
end;
/* Действие неопределено - нельзя выполнять */
else
NRESULT := 0;
end case;
/* Раздел неопределен - нельзя делать */
else
NRESULT := 0;
end case;
/* Возвращаем результат */
return NRESULT;
end UTL_UNIT_ACTION_GET_ALLOW;
/* Считывание типа источинка состава показателя в текстовом представлении */
function RRPCONFSCTNMRKCN_GET_ST
(
NSOURCE_TYPE in number, -- Тип источника
SSOURCE_UNIT in varchar2 -- Раздел источника
) return varchar2 -- Тип источника в текстовом представлении
is
SRESULT PKG_STD.TSTRING; -- Тип источника в текстовом представлении
begin
/* Строковое представление источника значения */
case NSOURCE_TYPE
when 0 then
/* Исходим от раздела */
case SSOURCE_UNIT
when 'EconomicOperations' then
SRESULT := 'ХО';
when 'DebitorsCreditorsAccounts' then
SRESULT := 'РСДК';
when 'AccountsRemnants' then
SRESULT := 'ОС';
when 'ValuesRemnants' then
SRESULT := 'ТМЦ';
when 'DebitorsCreditorsRemnants' then
SRESULT := 'ДКЗ';
when 'Inventory' then
SRESULT := 'ИК';
when 'ItemsCards' then
SRESULT := 'МБП';
when 'OperCards' then
SRESULT := 'КОБП';
when 'DeclarationIncome' then
SRESULT := 'ДПНП';
when 'RRPDocuments' then
SRESULT := 'РО';
else
SRESULT := null;
end case;
when 1 then
SRESULT := 'РП';
when 2 then
SRESULT := 'ХП';
when 3 then
SRESULT := 'СЗ';
when 4 then
SRESULT := 'fx';
else
SRESULT := null;
end case;
/* Возвращаем результат */
return SRESULT;
end RRPCONFSCTNMRKCN_GET_ST;
/* Считывание знака состава показателя в текстовом представлении */
function RRPCONFSCTNMRKCN_GET_SIGN
(
NSIGN in number -- Знак состава показателя
) return varchar2 -- Знак состава показателя в текстовом представлении
is
SRESULT PKG_STD.TSTRING; -- Знак состава показателя в текстовом представлении
begin
/* Опеределяем знак */
case NSIGN
when 0 then
SRESULT := '+';
when 1 then
SRESULT := '-';
else
SRESULT := '+/-';
end case;
/* Возвращаем результат */
return SRESULT;
end RRPCONFSCTNMRKCN_GET_SIGN;
/* Формирование описателя состава показателя регламентированного отчета */
function RRPCONFSCTNMRKCN_GET_DESC
(
NCOMPANY in number, -- Рег. номер организации
NRRPCONFSCTNMRKCN in number -- Рег. номер состава показателя регламентированного отчета
) return varchar2 -- Описатель показателя
is
SRESULT PKG_STD.TSTRING; -- Описатель показателя
SCN_DESC PKG_STD.TSTRING; -- Основные параметры состава показателя
RREC RRPCONFSCTNMRKCN%rowtype; -- Запись состава показателя регламентированного отчета
RRRPCONFSCTNMRK RRPCONFSCTNMRK%rowtype; -- Запись показателя регламентированного отчета
/* Считывание мнемокода показателя по рег. номеру состава показателя */
function MARK_GET_CODE_BY_CN
(
NRRPCONFSCTNMRKCN in number -- Рег. номер состава показателя
) return varchar2 -- Мнемокод показателя
is
SRESULT PKG_STD.TSTRING; -- Мнемокод показателя
begin
/* Считываем мнемокод показателя */
begin
select M.CODE
into SRESULT
from RRPCONFSCTNMRKCN T,
RRPCONFSCTNMRK M
where T.RN = NRRPCONFSCTNMRKCN
and M.RN = T.PRN;
exception
when others then
SRESULT := null;
end;
/* Возвращаем результат */
return SRESULT;
end MARK_GET_CODE_BY_CN;
/* Считывание мнемокода настройки по рег. номеру состава показателя */
function CONF_GET_CODE_BY_CN
(
NRRPCONFSCTNMRKCN in number -- Рег. номер состава показателя
) return varchar2 -- Мнемокод настройки регламентированного отчета
is
SRESULT PKG_STD.TSTRING; -- Мнемокод настройки регламентированного отчета
begin
/* Считываем мнемокод настройки регламентированного отчета */
begin
select C.CODE
into SRESULT
from RRPCONFSCTNMRKCN T,
RRPCONFSCTNMRK M,
RRPCONF C
where T.RN = NRRPCONFSCTNMRKCN
and M.RN = T.PRN
and C.RN = M.RRPCONF;
exception
when others then
SRESULT := null;
end;
/* Возвращаем результат */
return SRESULT;
end CONF_GET_CODE_BY_CN;
/* Формирование представления параметров состава показателя */
procedure MAKE_PRMS_BY_MASK
(
SPRMS_DESC in out varchar2, -- Строковое представление параметров
NCOMPANY in number, -- Рег. номер организации
NRRPCONFSCTNMRKCN in number, -- Рег. номер состава показателя
SMASK in varchar2 -- Маска (см. константы SPRM_MASK_*)
)
is
SDATE_FROM PKG_STD.TSTRING; -- Строковое представление "Дата с"
SDATE_TO PKG_STD.TSTRING; -- Строковое представление "Дата по"
DDATE_FROM PKG_STD.TLDATE; -- ДАТА_С
SDATE_FROM_PATTERN PKG_STD.TSTRING; -- ДАТА_САБЛОН
DDATE_TO PKG_STD.TLDATE; -- ДАТАО
SDATE_TO_PATTERN PKG_STD.TSTRING; -- ДАТАОАБЛОН
SACCOUNT_DEBIT PKG_STD.TSTRING; -- СЧЕТЕБЕТ
SANALYTIC_DEBIT1 PKG_STD.TSTRING; -- АНАЛИТИКА1_ДЕБЕТ
SANALYTIC_DEBIT2 PKG_STD.TSTRING; -- АНАЛИТИКА2_ДЕБЕТ
SANALYTIC_DEBIT3 PKG_STD.TSTRING; -- АНАЛИТИКА3_ДЕБЕТ
SANALYTIC_DEBIT4 PKG_STD.TSTRING; -- АНАЛИТИКА4_ДЕБЕТ
SANALYTIC_DEBIT5 PKG_STD.TSTRING; -- АНАЛИТИКА5_ДЕБЕТ
SACCOUNT_CREDIT PKG_STD.TSTRING; -- СЧЕТ_КРЕДИТ
SANALYTIC_CREDIT1 PKG_STD.TSTRING; -- АНАЛИТИКА1_КРЕДИТ
SANALYTIC_CREDIT2 PKG_STD.TSTRING; -- АНАЛИТИКА2_КРЕДИТ
SANALYTIC_CREDIT3 PKG_STD.TSTRING; -- АНАЛИТИКА3_КРЕДИТ
SANALYTIC_CREDIT4 PKG_STD.TSTRING; -- АНАЛИТИКА4_КРЕДИТ
SANALYTIC_CREDIT5 PKG_STD.TSTRING; -- АНАЛИТИКА5_КРЕДИТ
SACCOUNT PKG_STD.TSTRING; -- СЧЕТ
SANALYTIC1 PKG_STD.TSTRING; -- АНАЛИТИКА1
SANALYTIC2 PKG_STD.TSTRING; -- АНАЛИТИКА2
SANALYTIC3 PKG_STD.TSTRING; -- АНАЛИТИКА3
SANALYTIC4 PKG_STD.TSTRING; -- АНАЛИТИКА4
SANALYTIC5 PKG_STD.TSTRING; -- АНАЛИТИКА5
SRRPCONF PKG_STD.TSTRING; -- НАСТРОЙКА
NRRPCONF_RD PKG_STD.TNUMBER; -- НАСТРОЙКА_ТЕК
SMARK_CODE PKG_STD.TSTRING; -- ПОКАЗАТЕЛЬ
NMARK_CODE_RD PKG_STD.TNUMBER; -- ПОКАЗАТЕЛЬ_ТЕК
SMARK_ROW_CODE PKG_STD.TSTRING; -- СТРОКАОКАЗАТЕЛЯ
SMARK_COL_CODE PKG_STD.TSTRING; -- ГРАФАОКАЗАТЕЛЯ
begin
/* Получаем представление параметров исходя из маски */
case SMASK
/* "Счет дебет" и "Счет кредит" */
when SPRM_MASK_ACC_DC then
/* Считывание значения - Счет дебет */
SACCOUNT_DEBIT := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SACCOUNT_DEBIT_P);
/* Считывание значения - Аналитический счет 1 дебет */
SANALYTIC_DEBIT1 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_DEBIT1_P);
/* Считывание значения - Аналитический счет 2 дебет */
SANALYTIC_DEBIT2 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_DEBIT2_P);
/* Считывание значения - Аналитический счет 3 дебет */
SANALYTIC_DEBIT3 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_DEBIT3_P);
/* Считывание значения - Аналитический счет 4 дебет */
SANALYTIC_DEBIT4 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_DEBIT4_P);
/* Считывание значения - Аналитический счет 5 дебет */
SANALYTIC_DEBIT5 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_DEBIT5_P);
/* Считывание значения - Счет кредит */
SACCOUNT_CREDIT := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SACCOUNT_CREDIT_P);
/* Считывание значения - Аналитический счет 1 кредит */
SANALYTIC_CREDIT1 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_CREDIT1_P);
/* Считывание значения - Аналитический счет 2 кредит */
SANALYTIC_CREDIT2 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_CREDIT2_P);
/* Считывание значения - Аналитический счет 3 кредит */
SANALYTIC_CREDIT3 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_CREDIT3_P);
/* Считывание значения - Аналитический счет 4 кредит */
SANALYTIC_CREDIT4 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_CREDIT4_P);
/* Считывание значения - Аналитический счет 5 кредит */
SANALYTIC_CREDIT5 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC_CREDIT5_P);
/* Если указан счет дебет */
if ((SACCOUNT_DEBIT is not null) or (SANALYTIC_DEBIT1 is not null) or (SANALYTIC_DEBIT2 is not null) or
(SANALYTIC_DEBIT3 is not null) or (SANALYTIC_DEBIT4 is not null) or (SANALYTIC_DEBIT5 is not null)) then
/* Добавляем */
SPRMS_DESC := SPRMS_DESC || 'Д:' || SACCOUNT_DEBIT || '';
/* Добавляем информацию об аналитиках */
SPRMS_DESC := SPRMS_DESC || '(' || SANALYTIC_DEBIT1 || ',' || SANALYTIC_DEBIT2 || ',' || SANALYTIC_DEBIT3 || ',' ||
SANALYTIC_DEBIT4 || ',' || SANALYTIC_DEBIT5 || '),';
end if;
/* Если указан счет кредит */
if ((SACCOUNT_CREDIT is not null) or (SANALYTIC_CREDIT1 is not null) or (SANALYTIC_CREDIT2 is not null) or
(SANALYTIC_CREDIT3 is not null) or (SANALYTIC_CREDIT4 is not null) or (SANALYTIC_CREDIT5 is not null)) then
/* Добавляем */
SPRMS_DESC := SPRMS_DESC || 'К:' || SACCOUNT_CREDIT || ',';
/* Добавляем информацию об аналитиках */
SPRMS_DESC := SPRMS_DESC || '(' || SANALYTIC_CREDIT1 || ',' || SANALYTIC_CREDIT2 || ',' ||
SANALYTIC_CREDIT3 || ',' || SANALYTIC_CREDIT4 || ',' || SANALYTIC_CREDIT5 || '),';
end if;
/* "Счет" */
when SPRM_MASK_ACC then
/* Считывание значения - Счет */
SACCOUNT := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SACCOUNT_P);
/* Считывание значения - Аналитический счет 1 */
SANALYTIC1 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC1_P);
/* Считывание значения - Аналитический счет 2 */
SANALYTIC2 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC2_P);
/* Считывание значения - Аналитический счет 3 */
SANALYTIC3 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC3_P);
/* Считывание значения - Аналитический счет 4 */
SANALYTIC4 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC4_P);
/* Считывание значения - Аналитический счет 5 */
SANALYTIC5 := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SANALYTIC5_P);
/* Если указан счет */
if ((SACCOUNT is not null) or (SANALYTIC1 is not null) or (SANALYTIC2 is not null) or
(SANALYTIC3 is not null) or (SANALYTIC4 is not null) or (SANALYTIC5 is not null)) then
/* Добавляем */
SPRMS_DESC := SPRMS_DESC || 'С:' || SACCOUNT || '';
/* Добавляем информацию об аналитиках */
SPRMS_DESC := SPRMS_DESC || '(' || SANALYTIC1 || ',' || SANALYTIC2 || ',' || SANALYTIC3 || ',' ||
SANALYTIC4 || ',' || SANALYTIC5 || '),';
end if;
/* "Счет" без аналитик */
when SPRM_MASK_ACC_WO_ANL then
/* Считывание значения - Счет */
SACCOUNT := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SACCOUNT_P);
/* Если счет не пустой */
if (SACCOUNT is not null) then
/* Добавляем информацию по счету */
SPRMS_DESC := SPRMS_DESC || 'С:' || SACCOUNT || ',';
end if;
/* "Дата с" */
when SPRM_MASK_DATE_FROM then
/* Считывание значения - Дата с */
DDATE_FROM := PKG_RRPCONFSCTNMRKCN.PARAM_GET_DATE_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SDATE_FROM_P);
/* Считывание значения - Дата с (шаблон) */
SDATE_FROM_PATTERN := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SDATE_FROM_PATTERN_P);
/* Определяем "Дата с" */
SDATE_FROM := COALESCE(TO_CHAR(DDATE_FROM, 'dd.mm.yyyy'), SDATE_FROM_PATTERN);
/* Если указана дата с */
if (SDATE_FROM is not null) then
/* Добавляем дату с */
SPRMS_DESC := SPRMS_DESC || 'ДС:' || SDATE_FROM || ',';
end if;
/* "Дата по" */
when SPRM_MASK_DATE_TO then
/* Считывание значения - Дата по */
DDATE_TO := PKG_RRPCONFSCTNMRKCN.PARAM_GET_DATE_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SDATE_TO_P);
/* Считывание значения - Дата по (шаблон) */
SDATE_TO_PATTERN := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SDATE_TO_PATTERN_P);
/* пределяем "Дата по" */
SDATE_TO := COALESCE(TO_CHAR(DDATE_TO, 'dd.mm.yyyy'), SDATE_TO_PATTERN);
/* Если указана дата по */
if (SDATE_TO is not null) then
/* Добавляем дату по */
SPRMS_DESC := SPRMS_DESC || 'ДП:' || SDATE_TO || ',';
end if;
/* Параметры настройки РО */
when SPRM_MASK_RRPCONF then
/* Считывание значения - Настройка регламентированного отчета */
SRRPCONF := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SRRPCONF_P);
/* Считывание значения - Настройка регламентированного отчета (текущее) */
NRRPCONF_RD := PKG_RRPCONFSCTNMRKCN.PARAM_GET_NUM_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SRRPCONF_RD_P);
/* Если указана текущая настройка */
if (NRRPCONF_RD = 1) then
/* Считываем мнемокод текущей настройки */
SRRPCONF := CONF_GET_CODE_BY_CN(NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN);
end if;
/* Считывание значения - Мнемокод показателя */
SMARK_CODE := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SMARK_CODE_P);
/* Считывание значения - Мнемокод показателя (текущее) */
NMARK_CODE_RD := PKG_RRPCONFSCTNMRKCN.PARAM_GET_NUM_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SMARK_CODE_RD_P);
/* Если указан текущий показатель */
if (NMARK_CODE_RD = 1) then
/* Считываем мнемокод текущей настройки */
SMARK_CODE := MARK_GET_CODE_BY_CN(NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN);
end if;
/* Считывание значения - Мнемокод строки показателя */
SMARK_ROW_CODE := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SMARK_ROW_CODE_P);
/* Считывание значения - Мнемокод графы показателя */
SMARK_COL_CODE := PKG_RRPCONFSCTNMRKCN.PARAM_GET_STR_VALUE(NCOMPANY => NCOMPANY,
NPRN => NRRPCONFSCTNMRKCN,
SPARAM => PKG_RRPCONFSCTNMRKCN.SMARK_COL_CODE_P);
/* Если настройка указана */
if (SRRPCONF is not null) then
/* Добавляем */
SPRMS_DESC := SPRMS_DESC || 'Н:' || SRRPCONF || ',';
end if;
/* Если мнемокод показателя указан */
if (SMARK_CODE is not null) then
/* Добавляем */
SPRMS_DESC := SPRMS_DESC || 'П:' || SRRPCONF || ',';
end if;
/* Если строка показателя указана */
if (SMARK_ROW_CODE is not null) then
/* Добавляем */
SPRMS_DESC := SPRMS_DESC || 'СТР:' || SMARK_ROW_CODE || ',';
end if;
/* Если графа показателя указана */
if (SMARK_COL_CODE is not null) then
/* Добавляем */
SPRMS_DESC := SPRMS_DESC || 'ГРФ:' || SMARK_COL_CODE || ',';
end if;
else
/* Незвестная маска */
null;
end case;
end MAKE_PRMS_BY_MASK;
/* Формирование строки основных параметров для учетного раздела состава показателя */
function SOURCE_UNIT_GET_PRMS
(
NCOMPANY in number, -- Рег. номер организации
NRRPCONFSCTNMRKCN in number, -- Рег. номер состава показателя регламентированного отчета
SSOURCE_UNIT in varchar2 -- Учетный раздел
) return varchar2 -- Строковое представление основных параметров учетного раздела
is
SRESULT PKG_STD.TSTRING; -- Строковое представление основных параметров учетного раздела
begin
/* Открываем параметры */
SRESULT := '(';
/* Собираем параметры исходя из раздела */
case SSOURCE_UNIT
/* Хозяйственные операции */
when 'EconomicOperations' then
/* Получаем информацию по "Счет дебет" и "Счет кредит" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_ACC_DC);
/* Добавляем информацию по "Дата с" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_DATE_FROM);
/* Добавляем информацию по "Дата по" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_DATE_TO);
/* Расчёты с дебиторами/кредиторами */
when 'DebitorsCreditorsAccounts' then
/* Получаем информацию по "Счет" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_ACC);
/* Добавляем информацию по "Дата с" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_DATE_FROM);
/* Добавляем информацию по "Дата по" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_DATE_TO);
/* Остатки средств по счетам */
when 'AccountsRemnants' then
/* Получаем информацию по "Счет" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_ACC);
/* Добавляем информацию по "Дата с" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_DATE_FROM);
/* Остатки товарно-материальных ценностей */
when 'ValuesRemnants' then
/* Получаем информацию по "Счет" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_ACC);
/* Добавляем информацию по "Дата с" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_DATE_FROM);
/* Дебиторская/кредиторская задолженность */
when 'DebitorsCreditorsRemnants' then
/* Получаем информацию по "Счет" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_ACC);
/* Добавляем информацию по "Дата с" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_DATE_FROM);
/* Добавляем информацию по "Дата по" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_DATE_TO);
/* Инвентарная картотека */
when 'Inventory' then
/* Получаем информацию по "Счет" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_ACC);
/* Добавляем информацию по "Дата с" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_DATE_FROM);
/* Добавляем информацию по "Дата по" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_DATE_TO);
/* Картотека МБП */
when 'ItemsCards' then
/* Получаем информацию по "Счет" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_ACC_WO_ANL);
/* Добавляем информацию по "Дата с" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_DATE_FROM);
/* Картотека операций будущих периодов */
when 'OperCards' then
/* Получаем информацию по "Счет" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_ACC);
/* Добавляем информацию по "Дата с" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_DATE_FROM);
/* Добавляем информацию по "Дата по" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_DATE_TO);
/* Регламентированный отчет */
when 'RRPDocuments' then
/* Добавляем информацию по настройке */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_RRPCONF);
/* Добавляем информацию по "Дата с" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_DATE_FROM);
/* Добавляем информацию по "Дата по" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_DATE_TO);
/* Декларация по налогу на прибыль */
when 'DeclarationIncome' then
/* Добавляем информацию по настройке */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_RRPCONF);
/* Добавляем информацию по "Дата с" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_DATE_FROM);
/* Добавляем информацию по "Дата по" */
MAKE_PRMS_BY_MASK(SPRMS_DESC => SRESULT,
NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => NRRPCONFSCTNMRKCN,
SMASK => SPRM_MASK_DATE_TO);
/* Неизвестный раздел */
else
SRESULT := null;
end case;
/* Убираем лишний знак */
SRESULT := RTRIM(SRESULT, ',');
/* Закрываем параметры */
SRESULT := SRESULT || ')';
/* Возвращаем результат */
return SRESULT;
end SOURCE_UNIT_GET_PRMS;
begin
/* Считывание записи состава показателя регламентированного отчета */
RREC := GET_RRPCONFSCTNMRKCN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRRPCONFSCTNMRKCN);
/* Формируем представление состава показателя в виде формулы */
case RREC.SOURCE_TYPE
/* Учетный раздел */
when 0 then
/* Собираем представление из параметров составов */
SCN_DESC := SOURCE_UNIT_GET_PRMS(NCOMPANY => NCOMPANY,
NRRPCONFSCTNMRKCN => RREC.RN,
SSOURCE_UNIT => RREC.SOURCE_UNIT);
/* Расчетный показатель */
when 1 then
/* Считываем запись расчетного показателя */
RRRPCONFSCTNMRK := GET_RRPCONFSCTNMRK_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RREC.RRPCONFSCTNMRK);
/* Указываем мнемокод показателя */
SCN_DESC := '(' || RRRPCONFSCTNMRK.CODE || ')';
/* Хранимая процедура */
when 2 then
/* Формируем из пакета и процедуры */
SCN_DESC := '(' || PKG_OBJECT_DESC.STORED_NAME(SPACKAGE_NAME => RREC.PKG, SSTORED_NAME => RREC.PRC) || ')';
/* Статическое значение */
when 3 then
/* Указываем статическое значение */
SCN_DESC := '(' || COALESCE(RREC.STATIC_STR,
COALESCE(TO_CHAR(RREC.STATIC_NUM), TO_CHAR(RREC.STATIC_DATE, 'dd.mm.yyyy'))) || ')';
/* Формула */
when 4 then
/* Указываем формулу */
SCN_DESC := '(' || RREC.FORMULA || ')';
else
SCN_DESC := null;
end case;
/* Формируем описатель */
SRESULT := RRPCONFSCTNMRKCN_GET_SIGN(NSIGN => RREC.SIGN) || ' ' ||
RRPCONFSCTNMRKCN_GET_ST(NSOURCE_TYPE => RREC.SOURCE_TYPE, SSOURCE_UNIT => RREC.SOURCE_UNIT) || SCN_DESC;
/* Возвращаем результат */
return SRESULT;
end RRPCONFSCTNMRKCN_GET_DESC;
/* Поиск рег. номера показателя по разделу РО/строке/графе */
function RRPCONFSCTNMRK_GET_ROWCOL
(
NRRPCONFSCTN in number, -- Рег. номер раздела
NRRPROW in number, -- Рег. номер строки
NRRPCOLUMN in number -- Рег. номер графы
) return number -- Рег. номер показателя
is
NRESULT PKG_STD.TREF; -- Рег. номер показателя
begin
/* Считываем запись показателя */
begin
select T.RN
into NRESULT
from RRPCONFSCTNMRK T
where T.PRN = NRRPCONFSCTN
and T.RRPROW = NRRPROW
and T.RRPCOLUMN = NRRPCOLUMN;
exception
when others then
NRESULT := null;
end;
/* Возвращаем результат */
return NRESULT;
end RRPCONFSCTNMRK_GET_ROWCOL;
/* Формирование описания показателя */
function RRPCONFSCTNMRK_GET_DESC
(
NCOMPANY in number, -- Рег. номер организации
NRRPCONFSCTN in number, -- Рег. номер раздела
NRRPROW in number, -- Рег. номер строки
NRRPCOLUMN in number -- Рег. номер графы
) return varchar2 -- Сериализованное описание показателя
is
SRES PKG_STD.TLSTRING; -- Буфер для результата
NRRPCONFSCTNMRK PKG_STD.TREF; -- Рег. номер показателя настройки
begin
/* Найдём показатель */
NRRPCONFSCTNMRK := RRPCONFSCTNMRK_GET_ROWCOL(NRRPCONFSCTN => NRRPCONFSCTN,
NRRPROW => NRRPROW,
NRRPCOLUMN => NRRPCOLUMN);
/* Начинаем формирование */
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);
/* Показатель */
PKG_XFAST.DOWN_NODE(SNAME => 'XMARK');
/* Атрибуты со сведениями о строке и графе */
PKG_XFAST.ATTR(SNAME => 'NRRPROW', NVALUE => NRRPROW);
PKG_XFAST.ATTR(SNAME => 'NRRPCOLUMN', NVALUE => NRRPCOLUMN);
/* Обратимся к показателю */
for MARK in (select T.RN NRN,
T.CODE SCODE,
T.NAME SNAME,
R.CODE SRRPROW,
RV.CODE SRRPVERSION_ROW,
C.CODE SRRPCOLUMN,
CV.CODE SRRPVERSION_COLUMN
from RRPCONFSCTNMRK T,
RRPROW R,
RRPCOLUMN C,
RRPVERSION RV,
RRPVERSION CV
where T.RN = NRRPCONFSCTNMRK
and T.RRPROW = R.RN
and T.RRPCOLUMN = C.RN
and R.RRPVERSION = RV.RN(+)
and C.RRPVERSION = CV.RN(+))
loop
/* Атрибуты со сведениями о показателе */
PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => MARK.NRN);
PKG_XFAST.ATTR(SNAME => 'SCODE', SVALUE => MARK.SCODE);
PKG_XFAST.ATTR(SNAME => 'SNAME', SVALUE => MARK.SNAME);
PKG_XFAST.ATTR(SNAME => 'SRRPROW', SVALUE => MARK.SRRPROW);
PKG_XFAST.ATTR(SNAME => 'SRRPVERSION_ROW', SVALUE => MARK.SRRPVERSION_ROW);
PKG_XFAST.ATTR(SNAME => 'SRRPCOLUMN', SVALUE => MARK.SRRPCOLUMN);
PKG_XFAST.ATTR(SNAME => 'SRRPVERSION_COLUMN', SVALUE => MARK.SRRPVERSION_COLUMN);
/* Цикл по составам показателей раздела */
for CN in (select T.PRN,
T.RN,
T.NUMB
from RRPCONFSCTNMRKCN T
where T.PRN = NRRPCONFSCTNMRK
order by T.NUMB asc)
loop
/* Добавляем состав */
PKG_XFAST.DOWN_NODE(SNAME => 'CONSTITUTION');
PKG_XFAST.ATTR(SNAME => 'NPRN', NVALUE => CN.PRN);
PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => CN.RN);
PKG_XFAST.ATTR(SNAME => 'SNUMB', SVALUE => CN.NUMB);
PKG_XFAST.ATTR(SNAME => 'SDESC',
SVALUE => RRPCONFSCTNMRKCN_GET_DESC(NCOMPANY => NCOMPANY, NRRPCONFSCTNMRKCN => CN.RN));
PKG_XFAST.UP();
end loop;
end loop;
PKG_XFAST.UP();
/* Сериализуем описание */
SRES := PKG_XFAST.SERIALIZE_TO_VARCHAR();
/* Завершаем формирование */
PKG_XFAST.EPILOGUE();
/* Возвращаем сформированное */
return SRES;
end RRPCONFSCTNMRK_GET_DESC;
/* Автоматическое формирование мнемокода и наименования показателя, если не указаны */
procedure RRPCONFSCTNMRK_BUILD_CODE_NAME
(
NCOMPANY in number, -- Рег. номер организации
NRRPCONFSCTN in number, -- Рег. номер раздела отчета
NRRPROW in number, -- Рег. номер строки показателя
NRRPCOLUMN in number, -- Рег. номер графы показателя
SCODE in out varchar2, -- Мнемокод показателя раздела (null - будет сформировано автоматически, иначе - вернётся без изменений)
SNAME in out varchar2 -- Наименование показателя раздела (null - будет сформировано автоматически, иначе - вернётся без изменений)
)
is
RRRPCONFSCTN RRPCONFSCTN%rowtype; -- Запись раздела настройки
RRRPROW RRPROW%rowtype; -- Запись строки показателя
RRRPCOLUMN RRPCOLUMN%rowtype; -- Запись графы показателя
begin
/* Сформируем автоматический мнемокод, если пользователь не указал его */
if (SCODE is null) then
/* Считаем указанные раздел, строку и графу */
RRRPCONFSCTN := GET_RRPCONFSCTN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRRPCONFSCTN);
RRRPROW := GET_RRPROW_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRRPROW);
RRRPCOLUMN := GET_RRPCOLUMN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRRPCOLUMN);
/* Формируем мнемокод */
P_RRPCONFSCTNMRK_MAKE_CODE(SRRPCONFSCTN => RRRPCONFSCTN.CODE,
SRRPROW => RRRPROW.CODE,
SRRPCOLUMN => RRRPCOLUMN.CODE,
SCODE => SCODE);
end if;
/* Сформируем автоматическое наименование, если пользователь не указал его */
if (SNAME is null) then
P_RRPCONFSCTNMRK_MAKE_NAME(NCOMPANY => NCOMPANY,
NRRPROW => NRRPROW,
NRRPCOLUMN => NRRPCOLUMN,
NCHANGE_NAME => 1,
NCHANGE_NAME_PARENT => 0,
SNAME => SNAME);
end if;
end RRPCONFSCTNMRK_BUILD_CODE_NAME;
/* Разыменовывание ссылок показателя, переданных пользователем */
procedure RRPCONFSCTNMRK_JOINS
(
NCOMPANY in number, -- Рег. номер организации
NRRPROW in number, -- Рег. номер строки
SRRPROW in varchar2, -- Код строки (игнорируется, если указан рег. номер строки)
SRRPVERSION_ROW in varchar2, -- Код редакции строки (игнорируется, если указан рег. номер строки)
NRRPCOLUMN in number, -- Рег. номер графы
SRRPCOLUMN in varchar2, -- Код графы (игнорируется, если указан рег. номер графы)
SRRPVERSION_COLUMN in varchar2, -- Код редакции графы (игнорируется, если указан рег. номер графы)
RRRPROW out RRPROW%rowtype, -- Запись строки регламентированного отчета
RRRPVERSION_ROW out RRPVERSION%rowtype, -- Запись редакции строки регламентированного отчета
RRRPCOLUMN out RRPCOLUMN%rowtype, -- Запись графы регламентированного отчета
RRRPVERSION_COLUMN out RRPVERSION%rowtype -- Запись редакции графы регламентированного отчета
)
is
NRRPVERSION PKG_STD.TREF; -- Рег. номер редакции строки/графы
NRRPROW_ PKG_STD.TREF; -- Буфер для рег. номера строки
NRRPCOLUMN_ PKG_STD.TREF; -- Буфер для рег. номера графы
begin
/* Считываем запись строки и редакции строки регламентированного отчета */
if (NRRPROW is null) then
FIND_RRPVERSION_CODE(NFLAG_SMART => 0,
NFLAG_OPTION => 1,
NCOMPANY => NCOMPANY,
SCODE => SRRPVERSION_ROW,
NRN => NRRPVERSION);
FIND_RRPROW_CODE(NFLAG_SMART => 0,
NFLAG_OPTION => 0,
NCOMPANY => NCOMPANY,
NRRPVERSION => NRRPVERSION,
SCODE => SRRPROW,
NRN => NRRPROW_);
else
NRRPROW_ := NRRPROW;
end if;
RRRPROW := GET_RRPROW_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRRPROW_);
RRRPVERSION_ROW := GET_RRPVERSION_ID(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, NRN => RRRPROW.RRPVERSION);
/* Считываем запись графы и редакции графы регламентированного отчета */
if (NRRPCOLUMN is null) then
FIND_RRPVERSION_CODE(NFLAG_SMART => 0,
NFLAG_OPTION => 1,
NCOMPANY => NCOMPANY,
SCODE => SRRPVERSION_COLUMN,
NRN => NRRPVERSION);
FIND_RRPCOLUMN_CODE(NFLAG_SMART => 0,
NFLAG_OPTION => 0,
NCOMPANY => NCOMPANY,
NRRPVERSION => NRRPVERSION,
SCODE => SRRPCOLUMN,
NRN => NRRPCOLUMN_);
else
NRRPCOLUMN_ := NRRPCOLUMN;
end if;
RRRPCOLUMN := GET_RRPCOLUMN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRRPCOLUMN_);
RRRPVERSION_COLUMN := GET_RRPVERSION_ID(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, NRN => RRRPCOLUMN.RRPVERSION);
end RRPCONFSCTNMRK_JOINS;
/* Добавление показателя раздела регламентированного отчёта */
procedure RRPCONFSCTNMRK_INSERT
(
NPRN in number, -- Рег. номер раздела
SCODE in varchar2, -- Мнемокод показателя раздела
SNAME in varchar2, -- Наименование показателя раздела
NRRPROW in number, -- Рег. номер строки
SRRPROW in varchar2, -- Код строки (игнорируется, если указан рег. номер строки)
SRRPVERSION_ROW in varchar2, -- Код редакции строки (игнорируется, если указан рег. номер строки)
NRRPCOLUMN in number, -- Рег. номер графы
SRRPCOLUMN in varchar2, -- Код графы (игнорируется, если указан рег. номер графы)
SRRPVERSION_COLUMN in varchar2, -- Код редакции графы (игнорируется, если указан рег. номер графы)
NRN out number -- Рег. номер созданной записи
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
RRRPROW RRPROW%rowtype; -- Запись строки регламентированного отчета
RRRPVERSION_ROW RRPVERSION%rowtype; -- Запись редакции строки регламентированного отчета
RRRPCOLUMN RRPCOLUMN%rowtype; -- Запись графы регламентированного отчета
RRRPVERSION_COLUMN RRPVERSION%rowtype; -- Запись редакции графы регламентированного отчета
SCODE_ PKG_STD.TSTRING; -- Буфер для фактического мнемокода
SNAME_ PKG_STD.TSTRING; -- Буфер для фактического наименования
begin
/* Получим НСИ (строки, графы, редакции и т.п.) по данным, полученным от пользователя */
RRPCONFSCTNMRK_JOINS(NCOMPANY => NCOMPANY,
NRRPROW => NRRPROW,
SRRPROW => SRRPROW,
SRRPVERSION_ROW => SRRPVERSION_ROW,
NRRPCOLUMN => NRRPCOLUMN,
SRRPCOLUMN => SRRPCOLUMN,
SRRPVERSION_COLUMN => SRRPVERSION_COLUMN,
RRRPROW => RRRPROW,
RRRPVERSION_ROW => RRRPVERSION_ROW,
RRRPCOLUMN => RRRPCOLUMN,
RRRPVERSION_COLUMN => RRRPVERSION_COLUMN);
/* Сформируем автоматические мнемокод и наименование, если пользователь не указал их */
SCODE_ := SCODE;
SNAME_ := SNAME;
RRPCONFSCTNMRK_BUILD_CODE_NAME(NCOMPANY => NCOMPANY,
NRRPCONFSCTN => NPRN,
NRRPROW => RRRPROW.RN,
NRRPCOLUMN => RRRPCOLUMN.RN,
SCODE => SCODE_,
SNAME => SNAME_);
/* Добавим показатель */
P_RRPCONFSCTNMRK_INSERT(NCOMPANY => NCOMPANY,
NPRN => NPRN,
NNUMB => F_RRPCONFSCTNMRK_NEXT_NUMB(NCOMPANY => NCOMPANY, NPRN => NPRN),
SCODE => SCODE_,
SNAME => SNAME_,
SRRPROW => RRRPROW.CODE,
SRRPVERSION_ROW => RRRPVERSION_ROW.CODE,
SRRPCOLUMN => RRRPCOLUMN.CODE,
SRRPVERSION_COLUMN => RRRPVERSION_COLUMN.CODE,
SPKG_ROW => null,
SPRC_ROW => null,
SPKG_COL => null,
SPRC_COL => null,
SRRPPRM => null,
NIGNORE_ZOOM => 0,
NIGNORE_SHARP => 0,
SCLSF_CODE => null,
SNOTE => null,
NDUP_RN => null,
NRN => NRN);
end RRPCONFSCTNMRK_INSERT;
/* Исправление показателя раздела регламентированного отчёта */
procedure RRPCONFSCTNMRK_UPDATE
(
NRN in number, -- Рег. номер показателя раздела
SCODE in varchar2, -- Мнемокод показателя раздела
SNAME in varchar2, -- Наименование показателя раздела
SRRPROW in varchar2, -- Код строки
SRRPVERSION_ROW in varchar2, -- Код редакции строки
SRRPCOLUMN in varchar2, -- Код графы
SRRPVERSION_COLUMN in varchar2 -- Код редакции графы
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
RMRK RRPCONFSCTNMRK%rowtype; -- Запись настройки показателя регламентированного отчета
RRRPPRM RRPPRM%rowtype; -- Запись типового параметра регламентированного отчета
RRRPROW RRPROW%rowtype; -- Запись строки регламентированного отчета
RRRPVERSION_ROW RRPVERSION%rowtype; -- Запись редакции строки регламентированного отчета
RRRPCOLUMN RRPCOLUMN%rowtype; -- Запись графы регламентированного отчета
RRRPVERSION_COLUMN RRPVERSION%rowtype; -- Запись редакции графы регламентированного отчета
SCODE_ PKG_STD.TSTRING; -- Буфер для фактического мнемокода
SNAME_ PKG_STD.TSTRING; -- Буфер для фактического наименования
begin
/* Получение записи параметра раздела */
RMRK := GET_RRPCONFSCTNMRK_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRN);
/* Получим НСИ (строки, графы, редакции и т.п.) по данным, полученным от пользователя */
RRPCONFSCTNMRK_JOINS(NCOMPANY => NCOMPANY,
NRRPROW => null,
SRRPROW => SRRPROW,
SRRPVERSION_ROW => SRRPVERSION_ROW,
NRRPCOLUMN => null,
SRRPCOLUMN => SRRPCOLUMN,
SRRPVERSION_COLUMN => SRRPVERSION_COLUMN,
RRRPROW => RRRPROW,
RRRPVERSION_ROW => RRRPVERSION_ROW,
RRRPCOLUMN => RRRPCOLUMN,
RRRPVERSION_COLUMN => RRRPVERSION_COLUMN);
/* Сформируем автоматические мнемокод и наименование, если пользователь не указал их */
SCODE_ := SCODE;
SNAME_ := SNAME;
RRPCONFSCTNMRK_BUILD_CODE_NAME(NCOMPANY => NCOMPANY,
NRRPCONFSCTN => RMRK.PRN,
NRRPROW => RRRPROW.RN,
NRRPCOLUMN => RRRPCOLUMN.RN,
SCODE => SCODE_,
SNAME => SNAME_);
/* Считаем код типового параметра, если задан в показателе (чтобы не затереть существующий, т.к. пользователь нам его не передает сейчас) */
if (RMRK.RRPPRM is not null) then
RRRPPRM := GET_RRPPRM_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RMRK.RRPPRM);
else
RRRPPRM.CODE := null;
end if;
/* Исправим показатель */
P_RRPCONFSCTNMRK_UPDATE(NRN => RMRK.RN,
NCOMPANY => NCOMPANY,
NNUMB => RMRK.NUMB,
SCODE => SCODE_,
SNAME => SNAME_,
SRRPROW => SRRPROW,
SRRPVERSION_ROW => SRRPVERSION_ROW,
SRRPCOLUMN => SRRPCOLUMN,
SRRPVERSION_COLUMN => SRRPVERSION_COLUMN,
SPKG_ROW => RMRK.PKG_ROW,
SPRC_ROW => RMRK.PRC_ROW,
SPKG_COL => RMRK.PKG_COL,
SPRC_COL => RMRK.PRC_COL,
SRRPPRM => RRRPPRM.CODE,
NIGNORE_ZOOM => RMRK.IGNORE_ZOOM,
NIGNORE_SHARP => RMRK.IGNORE_SHARP,
SCLSF_CODE => RMRK.CLSF_CODE,
NFORMULA_UPDATE => 1,
SNOTE => RMRK.NOTE);
end RRPCONFSCTNMRK_UPDATE;
/* Удаление показателя раздела регламентированного отчёта */
procedure RRPCONFSCTNMRK_DELETE
(
NRN in number -- Рег. номер показателя раздела
)
is
begin
/* Удалим показатель */
P_RRPCONFSCTNMRK_DELETE(NCOMPANY => GET_SESSION_COMPANY(), NRN => NRN);
end RRPCONFSCTNMRK_DELETE;
/* Получение раздела регламентированного отчёта */
procedure RRPCONFSCTN_GET
(
NRRPCONFSCTN in number, -- Рег. номер раздела настройки форм регламентированного отчёта
NROW_ORDER in number := 0, -- Порядок сортировки строк (0 - по номеру, 1 - по коду, 2 - по мнемокоду)
NCOL_ORDER in number := 0, -- Порядок сортировки граф (0 - по номеру, 1 - по коду, 2 - по мнемокоду)
COUT out clob -- Данные раздела
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
RDG PKG_P8PANELS_VISUAL.TDG; -- Описание таблицы
RDG_ROW PKG_P8PANELS_VISUAL.TDG_ROW; -- Строка таблицы
ICURSOR integer; -- Курсор для исполнения запроса
NROW_RN PKG_STD.TREF; -- Рег. номер строки
SROW_NAME PKG_STD.TSTRING; -- Наименование строки
NCOL_RN PKG_STD.TREF; -- Рег. номер графы
/* Получение наименования колонки таблицы "Код" для строк/граф */
function TABCOL_ROWCOL_CODE_GET
(
STABLE in varchar2 -- Таблица (RRPROW - по строкам, RRPCOLUMN - по графам)
) return varchar2 -- Наименование колонки таблицы для хранения "Кода"
is
begin
/* Смотрим от имени таблицы */
if (STABLE = 'RRPCOLUMN') then
/* Код графы */
return 'COLUMN_CODE';
elsif (STABLE = 'RRPROW') then
/* Код строки */
return 'ROW_CODE';
else
/* Неизвестная таблица */
P_EXCEPTION(0,
'Таблица "%s" не поддерживается.',
COALESCE(STABLE, '<НЕ УКАЗАНА>'));
end if;
end TABCOL_ROWCOL_CODE_GET;
/* Формирование условия сортировки для SQL-запроса по строкам/графам */
function ORDER_CLAUSE_GET
(
STABLE in varchar2, -- Таблица (RRPROW - по строкам, RRPCOLUMN - по графам)
NORDER in number, -- Порядок сортировки (0 - по номеру, 1 - по коду, 2 - по мнемокоду)
SALIAS in varchar2 -- Алиас таблицы в формируемом запросе
) return varchar2 -- Текстовое представление сортировки
is
SRESULT PKG_STD.TSTRING; -- Текстовое представление сортировки
STABLE_COLUMN_CODE PKG_STD.TSTRING; -- Наименование колонки таблицы, содержащую код
begin
/* Определяем наименование колонки, содержающую код */
STABLE_COLUMN_CODE := TABCOL_ROWCOL_CODE_GET(STABLE => STABLE);
/* Формируем представление сортировки */
case NORDER
/* Код - номер сортировки - мнемокод */
when 1 then
SRESULT := PKG_SQL_BUILD.LPAD_() || '(' || SALIAS || '.' || STABLE_COLUMN_CODE || ', 40, ''0''),' || SALIAS ||
'.SORT_NUMB,' || PKG_SQL_BUILD.LPAD_() || '(' || SALIAS || '.CODE, 20, ''0'')';
/* Мнемокод - номер сортировки - код */
when 2 then
SRESULT := PKG_SQL_BUILD.LPAD_() || '(' || SALIAS || '.CODE, 20, ''0''),' || SALIAS || '.SORT_NUMB,' ||
PKG_SQL_BUILD.LPAD_() || '(' || SALIAS || '.' || STABLE_COLUMN_CODE || ', 40, ''0'')';
/* Номер сортировки - код - мнемокод */
else
SRESULT := SALIAS || '.SORT_NUMB,' || PKG_SQL_BUILD.LPAD_() || '(' || SALIAS || '.' || STABLE_COLUMN_CODE ||
', 40, ''0''),' || PKG_SQL_BUILD.LPAD_() || '(' || SALIAS || '.CODE, 20, ''0'')';
end case;
/* Возвращаем результат */
return SRESULT;
end ORDER_CLAUSE_GET;
/* Открытие курсора по строкам/графам раздела */
procedure OPEN_ROWS_COLS_CUR
(
NRRPCONFSCTN in number, -- Рег. номер раздела настройки форм регламентированного отчёта
STABLE in varchar2, -- Таблица (RRPROW - по строкам, RRPCOLUMN - по графам)
NORDER in number, -- Порядок сортировки (0 - по номеру, 1 - по коду, 2 - по мнемокоду)
ICURSOR in out integer -- Открытый курсор
)
is
CSQL clob; -- Запрос
SORDERS PKG_STD.TSTRING; -- Условия сортировки
begin
/* Закроем курсор если открыт */
if (PKG_SQL_DML.IS_OPEN(ICURSOR => ICURSOR)) then
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
end if;
/* Определим условия сортировки */
SORDERS := ORDER_CLAUSE_GET(STABLE => STABLE, NORDER => NORDER, SALIAS => 'T');
/* Соберем запрос */
CSQL := PKG_SQL_BUILD.COMPATIBLE();
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select T.RN,');
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.NAME');
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from RRPCONFSCTNMRK M,');
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ' || STABLE || ' T');
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where M.PRN = ' || TO_CHAR(NRRPCONFSCTN));
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.RN = M.' || STABLE);
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' group by T.RN,');
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.CODE,');
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.NAME,');
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.' || TABCOL_ROWCOL_CODE_GET(STABLE => STABLE) || ',');
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.SORT_NUMB');
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' order by ' || SORDERS);
/* Разбираем его */
ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT');
PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL);
/* Описываем структуру записи курсора */
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1);
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2);
/* Делаем выборку по курсору */
if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then
null;
end if;
end OPEN_ROWS_COLS_CUR;
/* Формирование наименования колонки таблицы данных по рег. номеру графы показателя */
function DG_COL_NAME_BY_RRPCOLUMN
(
NRRPCOLUMN in number -- Рег. номер графы
) return varchar2 -- Имя колонки для таблицы данных
is
begin
return 'SCOL_' || TO_CHAR(NRRPCOLUMN);
end DG_COL_NAME_BY_RRPCOLUMN;
/* Получение рег. номера графы показателя по наименованию колонки таблицы данных */
function RRPCOLUMN_BY_DG_COL_NAME
(
SDG_COL_NAME in varchar2 -- Имя колонки таблицы данных
) return number -- Рег. номер графы
is
begin
return TO_NUMBER(replace(SDG_COL_NAME, 'SCOL_', ''));
end RRPCOLUMN_BY_DG_COL_NAME;
/* Инициализация колонок выходной таблицы */
procedure COLUMNS_INIT
(
RDG in out nocopy PKG_P8PANELS_VISUAL.TDG, -- Описание таблицы
NRRPCONFSCTN in number, -- Рег. номер раздела
NCOL_ORDER in number, -- Порядок сортировки граф (0 - по номеру, 1 - по коду, 2 - по мнемокоду)
NCOL_WIDTH in number -- Ширина колонки (пикселей)
)
is
ICURSOR integer; -- Курсор для исполнения запроса по графам показателей раздела
NCOL_RN PKG_STD.TREF; -- Рег. номер графы
SCOL_NAME PKG_STD.TSTRING; -- Наименование графы
begin
/* Наименование строки будет отображаться в первой колонке */
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SROW_NAME',
SCAPTION => 'Наименование строки',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
NWIDTH => NCOL_WIDTH);
/* Остальные колонки это графы настройки РО - строим запрос по графам показателей */
OPEN_ROWS_COLS_CUR(NRRPCONFSCTN => NRRPCONFSCTN, STABLE => 'RRPCOLUMN', NORDER => NCOL_ORDER, ICURSOR => ICURSOR);
/* Обходим графы показателей раздела */
while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0)
loop
/* Считываем рег. номер строки */
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 1, NVALUE => NCOL_RN);
/* Считываем наименование строки */
PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 2, SVALUE => SCOL_NAME);
/* Наименование графы */
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => DG_COL_NAME_BY_RRPCOLUMN(NRRPCOLUMN => NCOL_RN),
SCAPTION => SCOL_NAME,
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
NWIDTH => NCOL_WIDTH);
end loop;
/* Освобождаем курсор */
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
exception
when others then
if (PKG_SQL_DML.IS_OPEN(ICURSOR => ICURSOR)) then
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
end if;
raise;
end COLUMNS_INIT;
begin
/* Обращаемся к настройке */
for S in (select T.RN NRN
from RRPCONFSCTN T
where T.RN = NRRPCONFSCTN
and exists (select null from RRPCONFSCTNMRK M where M.PRN = T.RN)
and exists (select null from V_USERPRIV UP where UP.CATALOG = T.CRN))
loop
/* Инициализируем таблицу данных */
RDG := PKG_P8PANELS_VISUAL.TDG_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 1);
/* Инициализируем колонки таблицы данных */
COLUMNS_INIT(RDG => RDG, NRRPCONFSCTN => S.NRN, NCOL_ORDER => NCOL_ORDER, NCOL_WIDTH => NMRKS_DG_COL_WIDTH);
/* Открываем запрос по составу уникальных строк раздела */
OPEN_ROWS_COLS_CUR(NRRPCONFSCTN => NRRPCONFSCTN, STABLE => 'RRPROW', NORDER => NROW_ORDER, ICURSOR => ICURSOR);
/* Обходим выбранные записи строк */
while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0)
loop
/* Считываем рег. номер строки */
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 1, NVALUE => NROW_RN);
/* Считываем наименование строки */
PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 2, SVALUE => SROW_NAME);
/* Заполняем наименование строки */
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SROW_NAME', SVALUE => SROW_NAME, BCLEAR => true);
/* Обходим сформированные колонки таблицы данных */
for I in RDG.RCOL_DEFS.FIRST .. RDG.RCOL_DEFS.LAST
loop
/* Первую пропускаем - она зарезервирована под наименование строки */
if (I > RDG.RCOL_DEFS.FIRST) then
/* Определим рег. номер графы по её наименованию */
NCOL_RN := RRPCOLUMN_BY_DG_COL_NAME(SDG_COL_NAME => RDG.RCOL_DEFS(I).SNAME);
/* Заполняем графу описанием показателя */
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW,
SNAME => RDG.RCOL_DEFS(I).SNAME,
SVALUE => RRPCONFSCTNMRK_GET_DESC(NCOMPANY => NCOMPANY,
NRRPCONFSCTN => S.NRN,
NRRPROW => NROW_RN,
NRRPCOLUMN => NCOL_RN));
end if;
end loop;
/* Добавим строку для раздела */
PKG_P8PANELS_VISUAL.TDG_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
end loop;
/* Освобождаем курсор */
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
/* Сериализуем описание */
COUT := PKG_P8PANELS_VISUAL.TDG_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1);
end loop;
exception
when others then
if (PKG_SQL_DML.IS_OPEN(ICURSOR => ICURSOR)) then
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
end if;
raise;
end RRPCONFSCTN_GET;
/* Добавление раздела регламентированного отчёта */
procedure RRPCONFSCTN_INSERT
(
NPRN in number, -- Рег. номер настройки форм регламентированного отчёта
SCODE in varchar2, -- Мнемокод
SNAME in varchar2, -- Наименование
NRN out number -- Рег. номер созданной записи
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
begin
/* Добавим раздел */
P_RRPCONFSCTN_INSERT(NCOMPANY => NCOMPANY,
NPRN => NPRN,
SCODE => SCODE,
SNAME => SNAME,
SRRPCONFSCTN => null,
SRRPPRMGRP => null,
SNOTE => null,
NHTML_HIDE => 0,
NHTML_HIDE_NAME_COL => 0,
NHTML_MAKE_HIER_GRP => 0,
SCLSF_CODE => null,
NLINKS_UPDATE => 0,
NDUP_RN => null,
NRN => NRN);
end RRPCONFSCTN_INSERT;
/* Исправление раздела регламентированного отчёта */
procedure RRPCONFSCTN_UPDATE
(
NRN in number, -- Рег. номер раздела
SCODE in varchar2, -- Мнемокод раздела
SNAME in varchar2 -- Наименование раздела
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
RRES RRPCONFSCTN%rowtype; -- Запись раздела настройки формы регламентированного отчета
RRRPCONFSCTN RRPCONFSCTN%rowtype; -- Запись родительского раздела настройки регламентированного отчета
RRRPPRMGRP RRPPRMGRP%rowtype; -- Запись группы параметров регламентированного отчета
begin
/* Считаем исправляемую запись */
RRES := GET_RRPCONFSCTN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRN);
/* Считаем запись родительского этапа */
if (RRES.RRPCONFSCTN is not null) then
RRRPCONFSCTN := GET_RRPCONFSCTN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RRES.RRPCONFSCTN);
end if;
/* Считаем запись группы параметров */
if (RRES.RRPPRMGRP is not null) then
RRRPPRMGRP := GET_RRPPRMGRP_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RRES.RRPPRMGRP);
end if;
/* Исправим раздел */
P_RRPCONFSCTN_UPDATE(NRN => RRES.RN,
NCOMPANY => NCOMPANY,
SCODE => SCODE,
SNAME => SNAME,
SRRPCONFSCTN => RRRPCONFSCTN.CODE,
SRRPPRMGRP => RRRPPRMGRP.CODE,
SNOTE => RRES.NOTE,
NHTML_HIDE => RRES.HTML_HIDE,
NHTML_HIDE_NAME_COL => RRES.HTML_HIDE_NAME_COL,
NHTML_MAKE_HIER_GRP => RRES.HTML_MAKE_HIER_GRP,
SCLSF_CODE => RRES.CLSF_CODE,
NFORMULA_UPDATE => 1,
NMARK_UPDATE => 1);
end RRPCONFSCTN_UPDATE;
/* Удаление раздела регламентированного отчёта */
procedure RRPCONFSCTN_DELETE
(
NRN in number -- Рег. номер раздела
)
is
begin
/* Удалим раздел */
P_RRPCONFSCTN_DELETE(NCOMPANY => GET_SESSION_COMPANY(), NRN => NRN);
end RRPCONFSCTN_DELETE;
/* Получение описания настройки регламентированного отчета */
procedure RRPCONF_GET
(
NRRPCONF in number, -- Рег. номер настройки форм регламентированного отчёта
COUT out clob -- Описание настройки
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
SNAME_SHORT PKG_STD.TSTRING; -- Краткое наименование раздела
begin
/* Формируем XML с данными */
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);
PKG_XFAST.DOWN_NODE(SNAME => 'XDATA');
/* Обратимся к настройке */
for CONF in (select C.RN NRN,
C.NAME SNAME
from RRPCONF C
where C.RN = NRRPCONF
and exists (select null from V_USERPRIV UP where UP.CATALOG = C.CRN))
loop
/* Добавим в выдачу сведения о настройке */
PKG_XFAST.DOWN_NODE(SNAME => 'XCONF');
PKG_XFAST.ATTR(SNAME => 'SNAME', SVALUE => CONF.SNAME);
PKG_XFAST.UP();
/* Обходим разделы настройки */
for C in (select T.RN NRN,
T.CODE SCODE,
T.NAME SNAME
from RRPCONFSCTN T
where T.PRN = CONF.NRN
and exists (select null from V_USERPRIV UP where UP.CATALOG = T.CRN)
order by T.CODE,
T.NAME)
loop
/* Составим краткое наименование */
SNAME_SHORT := SUBSTR(C.SNAME, 1, NSECTION_NAME_MAX_LEN);
if (LENGTH(C.SNAME) > NSECTION_NAME_MAX_LEN) then
SNAME_SHORT := SNAME_SHORT || '...';
end if;
/* Формирование элемента XML с данными о разделе */
PKG_XFAST.DOWN_NODE(SNAME => 'XSECTIONS');
PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => C.NRN);
PKG_XFAST.ATTR(SNAME => 'SCODE', SVALUE => C.SCODE);
PKG_XFAST.ATTR(SNAME => 'SNAME', SVALUE => C.SNAME);
PKG_XFAST.ATTR(SNAME => 'SNAME_SHORT', SVALUE => SNAME_SHORT);
PKG_XFAST.ATTR(SNAME => 'NDELETE_ALLOW',
NVALUE => UTL_UNIT_ACTION_GET_ALLOW(NCOMPANY => NCOMPANY,
NRN => C.NRN,
SUNIT => SUNIT_RRPCONFSCTN,
SACTION => SACTION_DELETE));
PKG_XFAST.UP();
end loop;
end loop;
/* Закрываем описание */
PKG_XFAST.UP();
/* Сериализуем описание */
COUT := PKG_XFAST.SERIALIZE_TO_CLOB();
/* Завершаем формирование XML */
PKG_XFAST.EPILOGUE();
end RRPCONF_GET;
end PKG_P8PANELS_RRPCONFED;
/