P8-ExchangeService/db/UDO_P_FISCDOCS_BASE_SEND.prc

72 lines
2.7 KiB
Plaintext

create or replace procedure UDO_P_FISCDOCS_BASE_SEND
(
NRN in number, -- Ðåãèñòðàöèîííûé íîìåð
NCOMPANY in number -- Îðãàíèçàöèÿ
)
as
NEXSQUEUE PKG_STD.TREF; -- Ðåãèñòðàöèîííûé íîìåð çàïèñè î÷åðåäè îáìåíà
SPRC_NAME varchar2(60); -- Íàèìåíîâàíèå ïðîöåäóðû ïðîâåðêè çíà÷åíèé
PRMS PKG_CONTPRMLOC.TCONTAINER; -- Êîíòåéíåð äëÿ ïàðàìåòðîâ ïðîöåäóðû îáðàáîòêè
begin
/* Ïðîâåðêà çàïîëíåíèÿ îáÿçàòåëüíûõ àòðèáóòîâ */
UDO_P_FISCDOCSPROP_CHECK_REQ(NCOMPANY => NCOMPANY, NPRN => NRN);
/* Îïðåäåëåíèå ïðîöåäóðû ïðîâåðêè çíà÷åíèé */
for REC in (select V.PKG_CHECK,
V.PRC_CHECK
from UDO_FISCDOCS T,
UDO_FDKNDVERS V
where T.RN = NRN
and T.COMPANY = NCOMPANY
and T.TYPE_VERSION = V.RN)
loop
/* Íàèìåíîâàíèå ïðîöåäóðû */
SPRC_NAME := NULLIF(REC.PKG_CHECK || '.', '.') || REC.PRC_CHECK;
end loop;
/* Åñëè åñòü çàïîëíåíà ïðîöåäóðà ïðîâåðêè */
if (SPRC_NAME is not null) then
/* Óñòàíîâêà çíà÷åíèé ôèêñèðîâàííûõ âõîäíûõ ïàðàìåòðîâ */
PKG_CONTPRMLOC.APPENDN(RCONTAINER => PRMS, SNAME => 'NRN', NVALUE => NRN, NIN_OUT => PKG_STD.IPARAM_TYPE_IN);
PKG_CONTPRMLOC.APPENDN(RCONTAINER => PRMS,
SNAME => 'NCOMPANY',
NVALUE => NCOMPANY,
NIN_OUT => PKG_STD.IPARAM_TYPE_IN);
/* Âûïîëíåíèå ïðîöåäóðû */
begin
PKG_SQL_CALL.EXECUTE_STORED(SSTORED_NAME => SPRC_NAME, RPARAM_CONTAINER => PRMS);
exception
when others then
P_EXCEPTION(0,
'Îøèáêà âûïîëíåíèÿ ïðîöåäóðû "%s".' || CR || 'Òåêñò îøèáêè: %s',
SPRC_NAME,
sqlerrm);
end;
end if;
/* Ôîðìèðîâàíèå è îòïðàâêà ñîîáùåíèÿ äëÿ ÀÒÎË-Îíëàéí */
UDO_P_FISCDOCS_MAKE_MSG_ATOL(NCOMPANY => NCOMPANY, NFISCDOC => NRN, NEXSQUEUE => NEXSQUEUE);
/* Ñîçäàíèå ñâÿçè ìåæäó ÷åêîì è î÷åðåäüþ îáìåíà */
PKG_DOCLINKS.LINK(NFLAG_SMART => 0,
NCOMPANY => NCOMPANY,
SIN_UNITCODE => 'UDO_FiscalDocuments',
NIN_DOCUMENT => NRN,
SOUT_UNITCODE => 'EXSQueue',
NOUT_DOCUMENT => NEXSQUEUE);
/* Èçìåíåíèå ñòàòóñà */
UDO_P_FISCDOCS_BASE_SET_STATUS(NRN => NRN, NCOMPANY => NCOMPANY, NSTATUS => 1);
/* Óñòàíîâêà äàòû è âðåìåíè îòïðàâêè */
update UDO_FISCDOCS
set SEND_TIME = sysdate
where RN = NRN
and COMPANY = NCOMPANY;
if (sql%notfound) then
PKG_MSG.RECORD_NOT_FOUND(NDOCUMENT => NRN, SUNIT_TABLE => 'UDO_FiscalDocuments');
end if;
end;
/