Корректировка алгоритмов подбора геопонятия и инвентарной карточки при импорте данных инвентаризации
This commit is contained in:
parent
f87daee873
commit
23481129d9
@ -7,6 +7,16 @@ create or replace package UDO_PKG_EXS_INV as
|
||||
NGEOGRTYPE in number -- Тип искомого структурного элемента адреса (1 - страна, 2 - регион, 3 - район, 4 - населенный пункт, 5 - улица, 6 - административный округ, 7 - муниципальный округ, 8 - город, 9 - уровень внутригородской территории, 10 - уровень дополнительных территорий, 11 - уровень подчиненных дополнительным территориям объектов)
|
||||
) return varchar2; -- Наименование найденного стуктурного элемента адреса
|
||||
|
||||
/* Ïîèñê ãåîïîíÿòèÿ ïî ñòóêòóðíûì ýëåìåíòàì */
|
||||
function UTL_GEOGRAFY_FIND_BY_HIER_ITEM
|
||||
(
|
||||
NCOMPANY in number, -- Ðåã. íîìåð îðãàíèçàöèè
|
||||
SADDR_COUNTRY in varchar2, -- Ñòðàíà ìåñòîíàõîæäåíèÿ
|
||||
SADDR_REGION in varchar2, -- Ðåãèîí ìåñòîíàõîæäåíèÿ
|
||||
SADDR_LOCALITY in varchar2, -- Íàñåë¸ííûé ïóíêò ìåñòîíàõîæäåíèÿ
|
||||
SADDR_STREET in varchar2 -- Óëèöà ìåñòîíàõîæäåíèÿ
|
||||
) return number; -- Ãåîãðàôè÷åñêîå ïîíÿòèå
|
||||
|
||||
/* Получение данных о местонахождении позиции ведомости инвентаризации */
|
||||
function UTL_ELINVOBJECT_DICPLACE_GET
|
||||
(
|
||||
@ -338,6 +348,89 @@ create or replace package body UDO_PKG_EXS_INV as
|
||||
return SRES;
|
||||
end UTL_GEOGRAFY_GET_HIER_ITEM;
|
||||
|
||||
/* Ïîèñê ãåîïîíÿòèÿ ïî ñòóêòóðíûì ýëåìåíòàì */
|
||||
function UTL_GEOGRAFY_FIND_BY_HIER_ITEM
|
||||
(
|
||||
NCOMPANY in number, -- Ðåã. íîìåð îðãàíèçàöèè
|
||||
SADDR_COUNTRY in varchar2, -- Ñòðàíà ìåñòîíàõîæäåíèÿ
|
||||
SADDR_REGION in varchar2, -- Ðåãèîí ìåñòîíàõîæäåíèÿ
|
||||
SADDR_LOCALITY in varchar2, -- Íàñåë¸ííûé ïóíêò ìåñòîíàõîæäåíèÿ
|
||||
SADDR_STREET in varchar2 -- Óëèöà ìåñòîíàõîæäåíèÿ
|
||||
) return number -- Ãåîãðàôè÷åñêîå ïîíÿòèå
|
||||
is
|
||||
NRES PKG_STD.TREF; -- Ðåã. íîìåð íàéäåííîãî ãåîãðàôè÷åñêîãî ïîíÿòèÿ
|
||||
NVERSION PKG_STD.TREF; -- Ðåã. íîìåð âåðñèè ñëîâàðÿ ãåîãðàôè÷åñêèõ ïîíÿòèé
|
||||
begin
|
||||
/* Ïðîâåðèì ïàðàìåòðû */
|
||||
if (NCOMPANY is null) then
|
||||
return null;
|
||||
end if;
|
||||
if ((SADDR_COUNTRY is null) and (SADDR_REGION is null) and (SADDR_LOCALITY is null) and (SADDR_STREET is null)) then
|
||||
return null;
|
||||
end if;
|
||||
/* Îïðåäåëèì âåðñèþ ñëîâàðÿ ãåîãðàôè÷åñêèõ ïîíÿòèé */
|
||||
FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'GEOGRAFY', NVERSION => NVERSION);
|
||||
/* Ïîäáåðåì ãåîãðàôè÷åñêîå ïîíÿòèå - ñíà÷àëà ñòðàíû */
|
||||
for C in (select G.RN
|
||||
from GEOGRAFY G
|
||||
where G.VERSION = NVERSION
|
||||
and ((SADDR_COUNTRY is null) or
|
||||
((SADDR_COUNTRY is not null) and (LOWER(G.GEOGRNAME) like LOWER('%' || SADDR_COUNTRY || '%'))))
|
||||
and G.GEOGRTYPE = 1)
|
||||
loop
|
||||
/* Òåïåðü ðåãèîíû ñòðàíû */
|
||||
for R in (select G.RN
|
||||
from GEOGRAFY G
|
||||
where G.VERSION = NVERSION
|
||||
and ((SADDR_REGION is null) or
|
||||
((SADDR_REGION is not null) and (LOWER(G.GEOGRNAME) like LOWER('%' || SADDR_REGION || '%'))))
|
||||
and G.GEOGRTYPE = 2
|
||||
and G.RN in (select GG.RN
|
||||
from GEOGRAFY GG
|
||||
where GG.GEOGRTYPE = 2
|
||||
connect by prior GG.RN = GG.PRN
|
||||
start with GG.RN = C.RN))
|
||||
loop
|
||||
/* Ñïóñêàåìñÿ â íàñåëåííûå ïóíêòû */
|
||||
for L in (select G.RN
|
||||
from GEOGRAFY G
|
||||
where G.VERSION = NVERSION
|
||||
and ((SADDR_LOCALITY is null) or ((SADDR_LOCALITY is not null) and
|
||||
(LOWER(G.GEOGRNAME) like LOWER('%' || SADDR_LOCALITY || '%'))))
|
||||
and G.GEOGRTYPE in (8, 4, 3, 2)
|
||||
and G.RN in (select GG.RN
|
||||
from GEOGRAFY GG
|
||||
where GG.GEOGRTYPE in (8, 4, 3, 2)
|
||||
connect by prior GG.RN = GG.PRN
|
||||
start with GG.RN = R.RN)
|
||||
|
||||
)
|
||||
loop
|
||||
/* Òåïåðü - óëèöû */
|
||||
for S in (select G.RN
|
||||
from GEOGRAFY G
|
||||
where G.VERSION = NVERSION
|
||||
and ((SADDR_STREET is null) or
|
||||
((SADDR_STREET is not null) and (LOWER(G.GEOGRNAME) like LOWER('%' || SADDR_STREET || '%'))))
|
||||
and G.GEOGRTYPE = 5
|
||||
and G.RN in (select GG.RN
|
||||
from GEOGRAFY GG
|
||||
where GG.GEOGRTYPE = 5
|
||||
connect by prior GG.RN = GG.PRN
|
||||
start with GG.RN = L.RN)
|
||||
|
||||
)
|
||||
loop
|
||||
/* Âîçâðàò ðåçóëüòàòà */
|
||||
return S.RN;
|
||||
end loop;
|
||||
end loop;
|
||||
end loop;
|
||||
end loop;
|
||||
/* Âåðí¸ì ïóñòîé ðåçóëüòàò - ñþäà ïðèõîäèì òîëüêî åñëè íè÷åãî íå íàøëè */
|
||||
return NRES;
|
||||
end UTL_GEOGRAFY_FIND_BY_HIER_ITEM;
|
||||
|
||||
/* Проверка идентификатора устройства */
|
||||
procedure UTL_CHECK_DEVICEID
|
||||
(
|
||||
@ -392,7 +485,7 @@ create or replace package body UDO_PKG_EXS_INV as
|
||||
/* Считаем запись очереди */
|
||||
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
||||
/* Возьмем текст запроса */
|
||||
CREQ := BLOB2CLOB(LBDATA => REXSQUEUE.MSG);
|
||||
CREQ := BLOB2CLOB(LBDATA => REXSQUEUE.MSG, SCHARSET => 'UTF8');
|
||||
/* Создаем инстанс XML парсера */
|
||||
XMLPARCER := DBMS_XMLPARSER.NEWPARSER;
|
||||
/* Разбираем XML из запроса */
|
||||
@ -1044,25 +1137,12 @@ create or replace package body UDO_PKG_EXS_INV as
|
||||
SADDR_STREET in varchar2 -- Улица местонахождения
|
||||
) return number -- Географическое понятие
|
||||
is
|
||||
NRES PKG_STD.TREF; -- Ðåã. íîìåð íàéäåííîãî ãåîãðàôè÷åñêîãî ïîíÿòèÿ
|
||||
NVERSION PKG_STD.TREF; -- Ðåã. íîìåð âåðñèè ñëîâàðÿ ãåîãðàôè÷åñêèõ ïîíÿòèé
|
||||
begin
|
||||
/* Îïðåäåëèì âåðñèþ ñëîâàðÿ ãåîãðàôè÷åñêèõ ïîíÿòèé */
|
||||
FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'GEOGRAFY', NVERSION => NVERSION);
|
||||
/* Ïîäáåðåì ãåîãðàôè÷åñêîå ïîíÿòèå */
|
||||
begin
|
||||
select G.RN
|
||||
into NRES
|
||||
from GEOGRAFY G
|
||||
where G.VERSION = NVERSION
|
||||
and G.FULLNAME like SADDR_COUNTRY || '%' || SADDR_REGION || '%' || SADDR_LOCALITY || '%' || SADDR_STREET
|
||||
and ROWNUM <= 1;
|
||||
exception
|
||||
when NO_DATA_FOUND then
|
||||
NRES := null;
|
||||
end;
|
||||
/* Âåðí¸ì ðåçóëüòàò */
|
||||
return NRES;
|
||||
return UTL_GEOGRAFY_FIND_BY_HIER_ITEM(NCOMPANY => NCOMPANY,
|
||||
SADDR_COUNTRY => SADDR_COUNTRY,
|
||||
SADDR_REGION => SADDR_REGION,
|
||||
SADDR_LOCALITY => SADDR_LOCALITY,
|
||||
SADDR_STREET => SADDR_STREET);
|
||||
end FIND_GEOGRAFY;
|
||||
|
||||
/* Обработка местонахождения - поиск и при необходимости добавление местонахождения ОС */
|
||||
@ -1130,13 +1210,14 @@ create or replace package body UDO_PKG_EXS_INV as
|
||||
SADDR_BUILDING => null,
|
||||
SADDR_FLAT => null,
|
||||
SADDR_POST => SADDR_POSTCODE,
|
||||
SPLACE_DESCRIPT => null,
|
||||
SPLACE_DESCRIPT => SADDR_COUNTRY || '/' || SADDR_REGION || '/' || SADDR_LOCALITY || '/' ||
|
||||
SADDR_STREET,
|
||||
NRN => NDICPLACE);
|
||||
else
|
||||
P_EXCEPTION(0,
|
||||
'Местонахождение инвентарных объектов с штрих-кодом "%s" или мнемокодом "%s" не найдено.',
|
||||
NVL(SBARCODE, '<НЕ УКАЗАН>'),
|
||||
NVL(SMNEMO, '<ÍÅ ÓÊÀÇÀÍ>'));
|
||||
NVL(SMNEMO, '<ÍÅ ÓÊÀÇÀÍÎ>'));
|
||||
end if;
|
||||
end;
|
||||
when TOO_MANY_ROWS then
|
||||
@ -1154,19 +1235,30 @@ create or replace package body UDO_PKG_EXS_INV as
|
||||
/* Актуализируем его */
|
||||
for C in (select T.* from DICPLACE T where T.RN = NDICPLACE)
|
||||
loop
|
||||
/* Ïîäáåðåì äàòó øòðèõ-êîäà */
|
||||
if (NVL(SBARCODE, C.BARCODE) is not null) then
|
||||
if (SBARCODE = C.BARCODE) then
|
||||
C.LABEL_DATE := NVL(C.LABEL_DATE, sysdate);
|
||||
else
|
||||
C.LABEL_DATE := sysdate;
|
||||
end if;
|
||||
else
|
||||
C.LABEL_DATE := null;
|
||||
end if;
|
||||
/* Актуализируем запись */
|
||||
P_DICPLACE_BASE_UPDATE(NCOMPANY => C.COMPANY,
|
||||
NRN => C.RN,
|
||||
SMNEMO => NVL(SMNEMO, C.PLACE_MNEMO),
|
||||
SNAME => NVL(SNAME, C.PLACE_NAME),
|
||||
SBARCODE => NVL(SBARCODE, C.BARCODE),
|
||||
DLABEL_DATE => NVL(C.LABEL_DATE, sysdate),
|
||||
DLABEL_DATE => C.LABEL_DATE,
|
||||
SCAD_NUMB => C.CAD_NUMB,
|
||||
NGEOGRAFY => FIND_GEOGRAFY(NCOMPANY => C.COMPANY,
|
||||
SADDR_COUNTRY => SADDR_COUNTRY,
|
||||
SADDR_REGION => SADDR_REGION,
|
||||
SADDR_LOCALITY => SADDR_LOCALITY,
|
||||
SADDR_STREET => SADDR_STREET),
|
||||
NGEOGRAFY => NVL(FIND_GEOGRAFY(NCOMPANY => C.COMPANY,
|
||||
SADDR_COUNTRY => SADDR_COUNTRY,
|
||||
SADDR_REGION => SADDR_REGION,
|
||||
SADDR_LOCALITY => SADDR_LOCALITY,
|
||||
SADDR_STREET => SADDR_STREET),
|
||||
C.GEOGRAFY),
|
||||
SADDR_HOUSE => SADDR_HOUSE,
|
||||
SADDR_BLOCK => C.ADDR_BLOCK,
|
||||
SADDR_BUILDING => C.ADDR_BUILDING,
|
||||
@ -1204,6 +1296,7 @@ create or replace package body UDO_PKG_EXS_INV as
|
||||
(
|
||||
RELINVENTORY in ELINVENTORY%rowtype, -- Запись обрабатываемой ведомости
|
||||
SBARCODE in varchar2, -- Штрих-код ОС
|
||||
SINV_NUMBER in varchar2, -- Èíâåíòàðíûé íîìåð ÎÑ
|
||||
NELINVOBJECT out number -- Рег. номер позиции ведомости инвентаризации
|
||||
)
|
||||
is
|
||||
@ -1241,9 +1334,31 @@ create or replace package body UDO_PKG_EXS_INV as
|
||||
NRN => NELINVOBJECT);
|
||||
exception
|
||||
when NO_DATA_FOUND then
|
||||
P_EXCEPTION(0,
|
||||
'Èíâåíòàðíàÿ êàðòî÷êà ñ øòðèõ-êîäîì "%s" íå íàéäåíà.',
|
||||
SBARCODE);
|
||||
begin
|
||||
/* Èùåì ðåã. íîìåð ÈÊ ïî èíâåíòàðíîìó íîìåðó */
|
||||
select T.RN
|
||||
into NINVENTORY
|
||||
from INVENTORY T
|
||||
where trim(T.INV_NUMBER) = trim(SINV_NUMBER)
|
||||
and T.COMPANY = RELINVENTORY.COMPANY;
|
||||
/* Äîáàâëÿåì å¸ â âåäîìîñòü èíâåíòàðèçàöèè */
|
||||
P_ELINVOBJECT_BASE_INSERT(NCOMPANY => RELINVENTORY.COMPANY,
|
||||
NPRN => RELINVENTORY.RN,
|
||||
NINVENTORY => NINVENTORY,
|
||||
NINVSUBST => null,
|
||||
NINVPACK => null,
|
||||
DUNLOAD_DATE => null,
|
||||
DINV_DATE => null,
|
||||
NINVPERSONS => null,
|
||||
SBARCODE => null,
|
||||
NIS_LOADED => 1,
|
||||
NRN => NELINVOBJECT);
|
||||
exception
|
||||
when NO_DATA_FOUND then
|
||||
P_EXCEPTION(0,
|
||||
'Èíâåíòàðíàÿ êàðòî÷êà ñ øòðèõ-êîäîì "%s" íå íàéäåíà.',
|
||||
SBARCODE);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end PROCESS_INVENTORY;
|
||||
@ -1433,7 +1548,10 @@ create or replace package body UDO_PKG_EXS_INV as
|
||||
SLONGITUDE => SREQ_STORAGE_LONGITUDE,
|
||||
SDICPLACE_BARCODE => SDICPLACE_BARCODE);
|
||||
/* Обрабатываем ОС */
|
||||
PROCESS_INVENTORY(RELINVENTORY => RELINVENTORY, SBARCODE => SREQ_ITEM_CODE, NELINVOBJECT => NELINVOBJECT);
|
||||
PROCESS_INVENTORY(RELINVENTORY => RELINVENTORY,
|
||||
SBARCODE => SREQ_ITEM_CODE,
|
||||
SINV_NUMBER => SREQ_ITEM_NUMBER,
|
||||
NELINVOBJECT => NELINVOBJECT);
|
||||
/* Обрабатываем элемент ведомости */
|
||||
PROCESS_ELINVOBJECT(RELINVENTORY => RELINVENTORY,
|
||||
NELINVOBJECT => NELINVOBJECT,
|
||||
|
Loading…
x
Reference in New Issue
Block a user