Корректировка алгоритмов подбора геопонятия и инвентарной карточки при импорте данных инвентаризации
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 - уровень подчиненных дополнительным территориям объектов)
|
NGEOGRTYPE in number -- Тип искомого структурного элемента адреса (1 - страна, 2 - регион, 3 - район, 4 - населенный пункт, 5 - улица, 6 - административный округ, 7 - муниципальный округ, 8 - город, 9 - уровень внутригородской территории, 10 - уровень дополнительных территорий, 11 - уровень подчиненных дополнительным территориям объектов)
|
||||||
) return varchar2; -- Наименование найденного стуктурного элемента адреса
|
) 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
|
function UTL_ELINVOBJECT_DICPLACE_GET
|
||||||
(
|
(
|
||||||
@ -338,6 +348,89 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
return SRES;
|
return SRES;
|
||||||
end UTL_GEOGRAFY_GET_HIER_ITEM;
|
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
|
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);
|
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
||||||
/* Возьмем текст запроса */
|
/* Возьмем текст запроса */
|
||||||
CREQ := BLOB2CLOB(LBDATA => REXSQUEUE.MSG);
|
CREQ := BLOB2CLOB(LBDATA => REXSQUEUE.MSG, SCHARSET => 'UTF8');
|
||||||
/* Создаем инстанс XML парсера */
|
/* Создаем инстанс XML парсера */
|
||||||
XMLPARCER := DBMS_XMLPARSER.NEWPARSER;
|
XMLPARCER := DBMS_XMLPARSER.NEWPARSER;
|
||||||
/* Разбираем XML из запроса */
|
/* Разбираем XML из запроса */
|
||||||
@ -1044,25 +1137,12 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
SADDR_STREET in varchar2 -- Улица местонахождения
|
SADDR_STREET in varchar2 -- Улица местонахождения
|
||||||
) return number -- Географическое понятие
|
) return number -- Географическое понятие
|
||||||
is
|
is
|
||||||
NRES PKG_STD.TREF; -- Ðåã. íîìåð íàéäåííîãî ãåîãðàôè÷åñêîãî ïîíÿòèÿ
|
|
||||||
NVERSION PKG_STD.TREF; -- Ðåã. íîìåð âåðñèè ñëîâàðÿ ãåîãðàôè÷åñêèõ ïîíÿòèé
|
|
||||||
begin
|
begin
|
||||||
/* Îïðåäåëèì âåðñèþ ñëîâàðÿ ãåîãðàôè÷åñêèõ ïîíÿòèé */
|
return UTL_GEOGRAFY_FIND_BY_HIER_ITEM(NCOMPANY => NCOMPANY,
|
||||||
FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'GEOGRAFY', NVERSION => NVERSION);
|
SADDR_COUNTRY => SADDR_COUNTRY,
|
||||||
/* Ïîäáåðåì ãåîãðàôè÷åñêîå ïîíÿòèå */
|
SADDR_REGION => SADDR_REGION,
|
||||||
begin
|
SADDR_LOCALITY => SADDR_LOCALITY,
|
||||||
select G.RN
|
SADDR_STREET => SADDR_STREET);
|
||||||
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;
|
|
||||||
end FIND_GEOGRAFY;
|
end FIND_GEOGRAFY;
|
||||||
|
|
||||||
/* Обработка местонахождения - поиск и при необходимости добавление местонахождения ОС */
|
/* Обработка местонахождения - поиск и при необходимости добавление местонахождения ОС */
|
||||||
@ -1130,13 +1210,14 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
SADDR_BUILDING => null,
|
SADDR_BUILDING => null,
|
||||||
SADDR_FLAT => null,
|
SADDR_FLAT => null,
|
||||||
SADDR_POST => SADDR_POSTCODE,
|
SADDR_POST => SADDR_POSTCODE,
|
||||||
SPLACE_DESCRIPT => null,
|
SPLACE_DESCRIPT => SADDR_COUNTRY || '/' || SADDR_REGION || '/' || SADDR_LOCALITY || '/' ||
|
||||||
|
SADDR_STREET,
|
||||||
NRN => NDICPLACE);
|
NRN => NDICPLACE);
|
||||||
else
|
else
|
||||||
P_EXCEPTION(0,
|
P_EXCEPTION(0,
|
||||||
'Местонахождение инвентарных объектов с штрих-кодом "%s" или мнемокодом "%s" не найдено.',
|
'Местонахождение инвентарных объектов с штрих-кодом "%s" или мнемокодом "%s" не найдено.',
|
||||||
NVL(SBARCODE, '<НЕ УКАЗАН>'),
|
NVL(SBARCODE, '<НЕ УКАЗАН>'),
|
||||||
NVL(SMNEMO, '<ÍÅ ÓÊÀÇÀÍ>'));
|
NVL(SMNEMO, '<ÍÅ ÓÊÀÇÀÍÎ>'));
|
||||||
end if;
|
end if;
|
||||||
end;
|
end;
|
||||||
when TOO_MANY_ROWS then
|
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)
|
for C in (select T.* from DICPLACE T where T.RN = NDICPLACE)
|
||||||
loop
|
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,
|
P_DICPLACE_BASE_UPDATE(NCOMPANY => C.COMPANY,
|
||||||
NRN => C.RN,
|
NRN => C.RN,
|
||||||
SMNEMO => NVL(SMNEMO, C.PLACE_MNEMO),
|
SMNEMO => NVL(SMNEMO, C.PLACE_MNEMO),
|
||||||
SNAME => NVL(SNAME, C.PLACE_NAME),
|
SNAME => NVL(SNAME, C.PLACE_NAME),
|
||||||
SBARCODE => NVL(SBARCODE, C.BARCODE),
|
SBARCODE => NVL(SBARCODE, C.BARCODE),
|
||||||
DLABEL_DATE => NVL(C.LABEL_DATE, sysdate),
|
DLABEL_DATE => C.LABEL_DATE,
|
||||||
SCAD_NUMB => C.CAD_NUMB,
|
SCAD_NUMB => C.CAD_NUMB,
|
||||||
NGEOGRAFY => FIND_GEOGRAFY(NCOMPANY => C.COMPANY,
|
NGEOGRAFY => NVL(FIND_GEOGRAFY(NCOMPANY => C.COMPANY,
|
||||||
SADDR_COUNTRY => SADDR_COUNTRY,
|
SADDR_COUNTRY => SADDR_COUNTRY,
|
||||||
SADDR_REGION => SADDR_REGION,
|
SADDR_REGION => SADDR_REGION,
|
||||||
SADDR_LOCALITY => SADDR_LOCALITY,
|
SADDR_LOCALITY => SADDR_LOCALITY,
|
||||||
SADDR_STREET => SADDR_STREET),
|
SADDR_STREET => SADDR_STREET),
|
||||||
|
C.GEOGRAFY),
|
||||||
SADDR_HOUSE => SADDR_HOUSE,
|
SADDR_HOUSE => SADDR_HOUSE,
|
||||||
SADDR_BLOCK => C.ADDR_BLOCK,
|
SADDR_BLOCK => C.ADDR_BLOCK,
|
||||||
SADDR_BUILDING => C.ADDR_BUILDING,
|
SADDR_BUILDING => C.ADDR_BUILDING,
|
||||||
@ -1204,6 +1296,7 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
(
|
(
|
||||||
RELINVENTORY in ELINVENTORY%rowtype, -- Запись обрабатываемой ведомости
|
RELINVENTORY in ELINVENTORY%rowtype, -- Запись обрабатываемой ведомости
|
||||||
SBARCODE in varchar2, -- Штрих-код ОС
|
SBARCODE in varchar2, -- Штрих-код ОС
|
||||||
|
SINV_NUMBER in varchar2, -- Èíâåíòàðíûé íîìåð ÎÑ
|
||||||
NELINVOBJECT out number -- Рег. номер позиции ведомости инвентаризации
|
NELINVOBJECT out number -- Рег. номер позиции ведомости инвентаризации
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
@ -1241,9 +1334,31 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
NRN => NELINVOBJECT);
|
NRN => NELINVOBJECT);
|
||||||
exception
|
exception
|
||||||
when NO_DATA_FOUND then
|
when NO_DATA_FOUND then
|
||||||
P_EXCEPTION(0,
|
begin
|
||||||
'Èíâåíòàðíàÿ êàðòî÷êà ñ øòðèõ-êîäîì "%s" íå íàéäåíà.',
|
/* Èùåì ðåã. íîìåð ÈÊ ïî èíâåíòàðíîìó íîìåðó */
|
||||||
SBARCODE);
|
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;
|
end;
|
||||||
end PROCESS_INVENTORY;
|
end PROCESS_INVENTORY;
|
||||||
@ -1433,7 +1548,10 @@ create or replace package body UDO_PKG_EXS_INV as
|
|||||||
SLONGITUDE => SREQ_STORAGE_LONGITUDE,
|
SLONGITUDE => SREQ_STORAGE_LONGITUDE,
|
||||||
SDICPLACE_BARCODE => SDICPLACE_BARCODE);
|
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,
|
PROCESS_ELINVOBJECT(RELINVENTORY => RELINVENTORY,
|
||||||
NELINVOBJECT => NELINVOBJECT,
|
NELINVOBJECT => NELINVOBJECT,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user