1497 lines
93 KiB
SQL
1497 lines
93 KiB
SQL
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;
|
||
/
|