Подбор сервиса отправки "Фискального документа" по организации
This commit is contained in:
parent
0beebc26e0
commit
3e8a6733bb
@ -112,6 +112,30 @@ create or replace package body UDO_PKG_EXS_ATOL as
|
||||
PKG_MSG.RECORD_NOT_FOUND(NFLAG_SMART => 0, NDOCUMENT => NFISCDOC, SUNIT_TABLE => 'UDO_FISCDOCS');
|
||||
end UTL_FISCDOC_GET;
|
||||
|
||||
/* Получение постфикса сервиса обмена для фискального документа по его принадлежности к организации */
|
||||
function UTL_FISCDOC_GET_EXS_POSTFIX
|
||||
(
|
||||
NFISCDOC in number -- Рег. номер фискального документа
|
||||
) return varchar2 -- Постфикс сервиса обмена
|
||||
is
|
||||
SRES COMPANIES.NAME%type; -- Результат работы
|
||||
begin
|
||||
/* Считаем постфик сервиса обмена (это наименование организации фискального документа) */
|
||||
select C.NAME
|
||||
into SRES
|
||||
from UDO_FISCDOCS FD,
|
||||
COMPANIES C
|
||||
where FD.RN = NFISCDOC
|
||||
and FD.COMPANY = C.RN;
|
||||
/* Возвращаем результат */
|
||||
return SRES;
|
||||
exception
|
||||
when others then
|
||||
P_EXCEPTION(0,
|
||||
'Для фискального документа (RN: %s) не определен постфикс сервиса обмена.',
|
||||
TO_CHAR(NFISCDOC));
|
||||
end UTL_FISCDOC_GET_EXS_POSTFIX;
|
||||
|
||||
/* Ïîëó÷åíèå ìíåìîêîäà ñåðâèñà îáìåíà è ìíåìîêîäà åãî ôóíêöèè ïî òèïó ôóíêöèè îáðàáîòêè è âåðñèè ÔÔÄ */
|
||||
procedure UTL_FISCDOC_GET_EXSFN
|
||||
(
|
||||
@ -120,24 +144,39 @@ create or replace package body UDO_PKG_EXS_ATOL as
|
||||
NEXSSERVICEFN out number -- Ðåã. íîìåð ôóíêöèè-îáðàáîò÷èêà
|
||||
)
|
||||
is
|
||||
SEXSRV EXSSERVICE.CODE%type; -- Мнемокод эталонного сервиса обмена из настроек фискального документа
|
||||
SEXSRVFN EXSSERVICEFN.CODE%type; -- Мнемокод эталонной функции обмена из настроек фискального документа
|
||||
begin
|
||||
begin
|
||||
select DECODE(SFN_TYPE, SFN_TYPE_REG_BILL, SFNREG.RN, SFN_TYPE_GET_BILL_INF, SFNINF.RN)
|
||||
into NEXSSERVICEFN
|
||||
/* Находим мнемокод эталонной функции и сервиса из настроек фискального документа */
|
||||
select DECODE(SFN_TYPE, SFN_TYPE_REG_BILL, SREG.CODE, SFN_TYPE_GET_BILL_INF, SINF.CODE),
|
||||
DECODE(SFN_TYPE, SFN_TYPE_REG_BILL, SFNREG.CODE, SFN_TYPE_GET_BILL_INF, SFNINF.CODE)
|
||||
into SEXSRV,
|
||||
SEXSRVFN
|
||||
from UDO_FISCDOCS FD,
|
||||
UDO_FDKNDVERS TV,
|
||||
EXSSERVICEFN SFNREG,
|
||||
EXSSERVICEFN SFNINF
|
||||
EXSSERVICEFN SFNINF,
|
||||
EXSSERVICE SREG,
|
||||
EXSSERVICE SINF
|
||||
where FD.RN = NFISCDOC
|
||||
and FD.TYPE_VERSION = TV.RN
|
||||
and TV.FUNCTION_SEND = SFNREG.RN(+)
|
||||
and TV.FUNCTION_RESP = SFNINF.RN(+);
|
||||
and SFNREG.PRN = SREG.RN(+)
|
||||
and TV.FUNCTION_RESP = SFNINF.RN(+)
|
||||
and SFNINF.PRN = SINF.RN(+);
|
||||
exception
|
||||
when others then
|
||||
NEXSSERVICEFN := null;
|
||||
SEXSRV := null;
|
||||
SEXSRVFN := null;
|
||||
end;
|
||||
/* Ïðîâåðèì, ÷òî õîòü ÷òî-òî íàøëîñü */
|
||||
if (NEXSSERVICEFN is null) then
|
||||
/* Если найдены эталонные сервис обмена и функция - подбираем то что нужно по принадлености фискального документа к организации */
|
||||
if ((SEXSRV is not null) and (SEXSRVFN is not null)) then
|
||||
NEXSSERVICEFN := PKG_EXS.SERVICEFN_FIND_BY_SRVCODE(NFLAG_SMART => 0,
|
||||
SEXSSERVICE => SEXSRV || '_' || UTL_FISCDOC_GET_EXS_POSTFIX(NFISCDOC => NFISCDOC),
|
||||
SEXSSERVICEFN => SEXSRVFN);
|
||||
else
|
||||
/* Эталоны не найдены - значит невозможен подбор реальной функции */
|
||||
P_EXCEPTION(0,
|
||||
'Äëÿ ôèñêàëüíîãî äîêóìåíòà (RN: %s) íå îïðåäåëåíàÿ òèïîâàÿ ôóíêöèÿ "%s".',
|
||||
TO_CHAR(NFISCDOC),
|
||||
|
Loading…
x
Reference in New Issue
Block a user