forked from CITKParus/P8-ExchangeService
Модуль обмена с АТОЛ-онлайн - универсальная часть, процедура сборки фискального документа для постановки в очередь
This commit is contained in:
parent
8962defb1d
commit
08ccd54274
195
db/UDO_P_FISCDOCS_MAKE_MSG_ATOL.prc
Normal file
195
db/UDO_P_FISCDOCS_MAKE_MSG_ATOL.prc
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
create or replace procedure UDO_P_FISCDOCS_MAKE_MSG_ATOL
|
||||||
|
(
|
||||||
|
NCOMPANY in number, -- Îðãàíèçàöèÿ
|
||||||
|
NFISCDOC in number, -- Ðåãèñòðàöèîííûé íîìåð ôèñêàëüíîãî äîêóìåíòà
|
||||||
|
NEXSQUEUE out number -- Ðåãèñòðàöèîííûé íîìåð äîáàâëåííîé ïîçèöèè î÷åðåäè îáìåíà
|
||||||
|
)
|
||||||
|
as
|
||||||
|
/* Ëîêàëüíûå ïåðåìåííûå */
|
||||||
|
CDATA clob; -- Áóôåð äëÿ XML-ïîñûëêè
|
||||||
|
SEXSSERVICE EXSSERVICEFN.CODE%type; -- Êîä ñåðâèñà-îáðàáîò÷èêà
|
||||||
|
SEXSSERVICEFN EXSSERVICEFN.CODE%type; -- Êîä ôóíêöèè îòïðàâêè
|
||||||
|
NTMP_RN PKG_STD.TREF; -- Áóôåð äëÿ âû÷èñëåíèé
|
||||||
|
|
||||||
|
/* Äîáàâëåíèå ïóñòîé îòêðûòîé âåòêè */
|
||||||
|
procedure NODE
|
||||||
|
(
|
||||||
|
SNAME varchar2 -- Èìÿ âåòêè
|
||||||
|
)
|
||||||
|
as
|
||||||
|
begin
|
||||||
|
/* Îòêðûâàåì âåòêó */
|
||||||
|
PKG_XMLFAST.DOWN(SNAME => SNAME);
|
||||||
|
/* Äîáàâëÿåì å¸ */
|
||||||
|
PKG_XMLFAST.NODE;
|
||||||
|
end NODE;
|
||||||
|
|
||||||
|
/* Äîáàâëåíèå âåòêè ñî çíà÷åíèåì (ñòðîêà) */
|
||||||
|
procedure NODE
|
||||||
|
(
|
||||||
|
SNAME varchar2, -- Èìÿ âåòêè
|
||||||
|
SVALUE varchar2 -- Çíà÷åíèå âåòêè
|
||||||
|
)
|
||||||
|
as
|
||||||
|
begin
|
||||||
|
/* Îòêðûâàåì âåòêó */
|
||||||
|
PKG_XMLFAST.DOWN(SNAME => SNAME);
|
||||||
|
/* Äîáàâëÿåì å¸ */
|
||||||
|
PKG_XMLFAST.NODE;
|
||||||
|
/* Âûñòàâëÿåì çíà÷åíèå */
|
||||||
|
PKG_XMLFAST.VALUE(SVALUE => SVALUE);
|
||||||
|
/* Çàêðûâàåì âåòêó */
|
||||||
|
PKG_XMLFAST.UP;
|
||||||
|
end NODE;
|
||||||
|
|
||||||
|
/* Äîáàâëåíèå âåòêè ñî çíà÷åíèåì (÷èñëî) */
|
||||||
|
procedure NODE
|
||||||
|
(
|
||||||
|
SNAME varchar2, -- Èìÿ âåòêè
|
||||||
|
NVALUE number -- Çíà÷åíèå âåòêè
|
||||||
|
)
|
||||||
|
as
|
||||||
|
begin
|
||||||
|
/* Îòêðûâàåì âåòêó */
|
||||||
|
PKG_XMLFAST.DOWN(SNAME => SNAME);
|
||||||
|
/* Äîáàâëÿåì å¸ */
|
||||||
|
PKG_XMLFAST.NODE;
|
||||||
|
/* Âûñòàâëÿåì çíà÷åíèå */
|
||||||
|
PKG_XMLFAST.VALUE(NVALUE => NVALUE);
|
||||||
|
/* Çàêðûâàåì âåòêó */
|
||||||
|
PKG_XMLFAST.UP;
|
||||||
|
end NODE;
|
||||||
|
|
||||||
|
/* Äîáàâëåíèå âåòêè ñî çíà÷åíèåì (äàòà) */
|
||||||
|
procedure NODE
|
||||||
|
(
|
||||||
|
SNAME varchar2, -- Èìÿ âåòêè
|
||||||
|
DVALUE date -- Çíà÷åíèå âåòêè
|
||||||
|
)
|
||||||
|
as
|
||||||
|
begin
|
||||||
|
/* Îòêðûâàåì âåòêó */
|
||||||
|
PKG_XMLFAST.DOWN(SNAME => SNAME);
|
||||||
|
/* Äîáàâëÿåì å¸ */
|
||||||
|
PKG_XMLFAST.NODE;
|
||||||
|
/* Âûñòàâëÿåì çíà÷åíèå */
|
||||||
|
PKG_XMLFAST.VALUE(DVALUE => DVALUE);
|
||||||
|
/* Çàêðûâàåì âåòêó */
|
||||||
|
PKG_XMLFAST.UP;
|
||||||
|
end NODE;
|
||||||
|
|
||||||
|
begin
|
||||||
|
/* Ïðîâåðèì íàëè÷èå äîêóìåíòà */
|
||||||
|
UDO_P_FISCDOCS_EXISTS(NRN => NFISCDOC, NCOMPANY => NCOMPANY, NCRN => NTMP_RN, NJUR_PERS => NTMP_RN);
|
||||||
|
/* Èíèöèàëèçèðóåì ñáîðêó äîêóìåíòà äëÿ îòïðàâêè */
|
||||||
|
PKG_XMLFAST.PROLOGUE(NENCODING => PKG_XMLFAST.ENCODING_UTF8_,
|
||||||
|
NSTANDALONE => PKG_XMLFAST.STANDALONE_YES_,
|
||||||
|
BALINE => true);
|
||||||
|
/* Îòêðûâàåì êîðåíü XML äîêóìåíòà */
|
||||||
|
NODE(SNAME => 'FISCDOC');
|
||||||
|
/* Êóðñîðíûé öèêë äëÿ äîñòóïà ê äàííûì ôèñêàëüíîãî äîêóìåíòà */
|
||||||
|
for D in (select T.*
|
||||||
|
from UDO_V_FISCDOCS T
|
||||||
|
where T.NRN = UDO_P_FISCDOCS_MAKE_MSG_ATOL.NFISCDOC
|
||||||
|
and T.NCOMPANY = UDO_P_FISCDOCS_MAKE_MSG_ATOL.NCOMPANY)
|
||||||
|
loop
|
||||||
|
/* Âûáèðàåì API îáìåíà â çàâèñèìîñòè îò âåðñèè ôèñêàëüíîãî äîêóìåíòà */
|
||||||
|
case D.STYPE_VERSION
|
||||||
|
/* ÔÔÄ 1.05 */
|
||||||
|
when '1.05' then
|
||||||
|
begin
|
||||||
|
SEXSSERVICE := 'ÀÒÎË_V4_ÈÑÕ';
|
||||||
|
SEXSSERVICEFN := 'V4_ÔÔÄ1.05_Ðåãèñòðàöèÿ×åêàÐÏÂ';
|
||||||
|
end;
|
||||||
|
/* Íåèçâåñòíàÿ âåðñèÿ ÔÔÄ */
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Âåðñèÿ ôèñêàëüíîãî äîêóìåíòà "%s" íå ïîääåðæèâàåòñÿ!',
|
||||||
|
D.STYPE_VERSION);
|
||||||
|
end;
|
||||||
|
end case;
|
||||||
|
/* Äàííûå çàãîëîâêà ôèñêàëüíîãî äîêóìåíòà */
|
||||||
|
NODE(SNAME => 'NRN', NVALUE => D.NRN);
|
||||||
|
NODE(SNAME => 'NCOMPANY', NVALUE => D.NCOMPANY);
|
||||||
|
NODE(SNAME => 'NCRN', NVALUE => D.NCRN);
|
||||||
|
NODE(SNAME => 'NJUR_PERS', NVALUE => D.NJUR_PERS);
|
||||||
|
NODE(SNAME => 'SJUR_PERS', SVALUE => D.SJUR_PERS);
|
||||||
|
NODE(SNAME => 'SDOC_PREF', SVALUE => trim(D.SDOC_PREF));
|
||||||
|
NODE(SNAME => 'SDOC_NUMB', SVALUE => trim(D.SDOC_NUMB));
|
||||||
|
NODE(SNAME => 'NDOC_TYPE', NVALUE => D.NDOC_TYPE);
|
||||||
|
NODE(SNAME => 'NDOC_TYPE_CODE', NVALUE => D.NDOC_TYPE_CODE);
|
||||||
|
NODE(SNAME => 'NTYPE_VERSION', NVALUE => D.NTYPE_VERSION);
|
||||||
|
NODE(SNAME => 'STYPE_VERSION', SVALUE => D.STYPE_VERSION);
|
||||||
|
NODE(SNAME => 'DDOC_DATE', DVALUE => D.DDOC_DATE);
|
||||||
|
NODE(SNAME => 'SDDOC_DATE', SVALUE => TO_CHAR(D.DDOC_DATE, 'dd.mm.yyyy hh24:mi:ss'));
|
||||||
|
NODE(SNAME => 'NAGENT', NVALUE => D.NAGENT);
|
||||||
|
NODE(SNAME => 'SAGENT', SVALUE => D.SAGENT);
|
||||||
|
NODE(SNAME => 'NCALC_KIND', NVALUE => D.NCALC_KIND);
|
||||||
|
NODE(SNAME => 'NBASE_SUM', NVALUE => D.NBASE_SUM);
|
||||||
|
NODE(SNAME => 'SAUTHID', SVALUE => D.SAUTHID);
|
||||||
|
NODE(SNAME => 'DEDIT_TIME', DVALUE => D.DEDIT_TIME);
|
||||||
|
NODE(SNAME => 'SDEDIT_TIME', SVALUE => TO_CHAR(D.DEDIT_TIME, 'dd.mm.yyyy hh24:mi:ss'));
|
||||||
|
NODE(SNAME => 'SNOTE', SVALUE => D.SNOTE);
|
||||||
|
NODE(SNAME => 'NSTATUS', NVALUE => D.NSTATUS);
|
||||||
|
NODE(SNAME => 'DSEND_TIME', DVALUE => D.DSEND_TIME);
|
||||||
|
NODE(SNAME => 'SDSEND_TIME', SVALUE => TO_CHAR(D.DSEND_TIME, 'dd.mm.yyyy hh24:mi:ss'));
|
||||||
|
NODE(SNAME => 'DCONFIRM_DATE', DVALUE => D.DCONFIRM_DATE);
|
||||||
|
NODE(SNAME => 'SDCONFIRM_DATE', SVALUE => TO_CHAR(D.DCONFIRM_DATE, 'dd.mm.yyyy hh24:mi:ss'));
|
||||||
|
NODE(SNAME => 'SNUMB_FD', SVALUE => D.SNUMB_FD);
|
||||||
|
NODE(SNAME => 'NFACEACC', NVALUE => D.NFACEACC);
|
||||||
|
NODE(SNAME => 'SFACEACC', SVALUE => D.SFACEACC);
|
||||||
|
NODE(SNAME => 'SADD_PROP', SVALUE => D.SADD_PROP);
|
||||||
|
NODE(SNAME => 'SSRC_UNITCODE', SVALUE => D.SSRC_UNITCODE);
|
||||||
|
NODE(SNAME => 'SSRC_UNITNAME', SVALUE => D.SSRC_UNITNAME);
|
||||||
|
NODE(SNAME => 'NSRC_TYPE', NVALUE => D.NSRC_TYPE);
|
||||||
|
NODE(SNAME => 'SSRC_TYPE', SVALUE => D.SSRC_TYPE);
|
||||||
|
NODE(SNAME => 'SSRC_NUMB', SVALUE => D.SSRC_NUMB);
|
||||||
|
NODE(SNAME => 'DSRC_DATE', DVALUE => D.DSRC_DATE);
|
||||||
|
NODE(SNAME => 'SDSRC_DATE', SVALUE => TO_CHAR(D.DSRC_DATE, 'dd.mm.yyyy hh24:mi:ss'));
|
||||||
|
NODE(SNAME => 'NVALID_TYPE', NVALUE => D.NVALID_TYPE);
|
||||||
|
NODE(SNAME => 'SVALID_TYPE', SVALUE => D.SVALID_TYPE);
|
||||||
|
NODE(SNAME => 'SVALID_NUMB', SVALUE => D.SVALID_NUMB);
|
||||||
|
NODE(SNAME => 'DVALID_DATE', DVALUE => D.DVALID_DATE);
|
||||||
|
NODE(SNAME => 'SDVALID_DATE', SVALUE => TO_CHAR(D.DVALID_DATE, 'dd.mm.yyyy hh24:mi:ss'));
|
||||||
|
NODE(SNAME => 'SDOC_URL', SVALUE => D.SDOC_URL);
|
||||||
|
NODE(SNAME => 'NCORRECT_TYPE', NVALUE => D.NCORRECT_TYPE);
|
||||||
|
/* Ñïèñîê ñâîéñòâ ôèñêàëüíîãî äîêóìåíòà */
|
||||||
|
NODE('FISCDOC_PROPS');
|
||||||
|
for SP in (select T.*,
|
||||||
|
A.CODE SCODE,
|
||||||
|
A.NAME SNAME
|
||||||
|
from UDO_FISCDOCSPROP T,
|
||||||
|
UDO_FDKNDATT P,
|
||||||
|
UDO_FISCDOCATT A
|
||||||
|
where T.PRN = D.NRN
|
||||||
|
and T.PROP = P.RN
|
||||||
|
and P.ATTRIBUTE = A.RN)
|
||||||
|
loop
|
||||||
|
/* Ñâîéñòâî ôèñêàëüíîãî äîêóìåíòà */
|
||||||
|
NODE(SNAME => 'FISCDOC_PROPS');
|
||||||
|
/* Äàííûå ñâîéñòâà ôèñêàëüíîãî äîêóìåíòà */
|
||||||
|
NODE(SNAME => 'SCODE', SVALUE => SP.SCODE);
|
||||||
|
NODE(SNAME => 'SNAME', SVALUE => SP.SNAME);
|
||||||
|
NODE(SNAME => 'VALUE', SVALUE => UDO_GET_FISCDOCSPROP_VALUE(SP.RN));
|
||||||
|
NODE(SNAME => 'SVALUE', SVALUE => SP.VAL_STR);
|
||||||
|
NODE(SNAME => 'NVALUE', NVALUE => SP.VAL_NUMB);
|
||||||
|
NODE(SNAME => 'DVALUE', DVALUE => SP.VAL_DATE);
|
||||||
|
NODE(SNAME => 'DTVALUE', DVALUE => SP.VAL_DATETIME);
|
||||||
|
/* Çàêðûâàåì ñâîéñòâî ôèñêàëüíîãî äîêóìåíòà */
|
||||||
|
PKG_XMLFAST.UP;
|
||||||
|
end loop;
|
||||||
|
/* Çàêðûâàåì ñïèñîê ñâîéñòâ ôèñêàëüíîãî äîêóìåíòà */
|
||||||
|
PKG_XMLFAST.UP;
|
||||||
|
end loop;
|
||||||
|
/* Çàêðûâàåì êîðíåâîé òýã XML-äîêóìåíòà */
|
||||||
|
PKG_XMLFAST.UP;
|
||||||
|
/* Ôèíàëèçèðóåì ñáîðêó XML-äîêóìåíòà */
|
||||||
|
PKG_XMLFAST.EPILOGUE(LDATA => CDATA);
|
||||||
|
/* Îòïðàâëÿåì ñôîðìèðîâàííûé äîêóìåíò */
|
||||||
|
PKG_EXS.QUEUE_PUT(SEXSSERVICE => SEXSSERVICE,
|
||||||
|
SEXSSERVICEFN => SEXSSERVICEFN,
|
||||||
|
BMSG => CLOB2BLOB(LCDATA => CDATA, SCHARSET => 'CL8MSWIN1251'),
|
||||||
|
NNEW_EXSQUEUE => NEXSQUEUE);
|
||||||
|
end;
|
||||||
|
/
|
Loading…
x
Reference in New Issue
Block a user