From 3e8a6733bb3cf1fd9ae58c6631f42f5baa3c3149 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Mon, 4 Mar 2019 16:06:49 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=B1=D0=BE=D1=80=20=D1=81?= =?UTF-8?q?=D0=B5=D1=80=D0=B2=D0=B8=D1=81=D0=B0=20=D0=BE=D1=82=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BA=D0=B8=20"=D0=A4=D0=B8=D1=81=D0=BA=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B4=D0=BE=D0=BA=D1=83?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D0=B0"=20=D0=BF=D0=BE=20=D0=BE=D1=80?= =?UTF-8?q?=D0=B3=D0=B0=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/UDO_PKG_EXS_ATOL.pck | 53 +++++++++++++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/db/UDO_PKG_EXS_ATOL.pck b/db/UDO_PKG_EXS_ATOL.pck index e51fc26..96fc6bf 100644 --- a/db/UDO_PKG_EXS_ATOL.pck +++ b/db/UDO_PKG_EXS_ATOL.pck @@ -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),