forked from CITKParus/P8-Panels
БД: Панель "Мониторинг сборки изделий" - интеграция SVG-модели, рефакторинг
This commit is contained in:
parent
dea0f3643d
commit
e6ccf979a6
@ -230,7 +230,7 @@ create or replace package PKG_P8PANELS_MECHREC as
|
||||
);
|
||||
|
||||
/* Получение таблицы маршрутных листов, связанных с производственным составом */
|
||||
procedure FCROUTLST_MON_DG_GET
|
||||
procedure FCROUTLST_DG_BY_PRDCMPSP_GET
|
||||
(
|
||||
NPRODCMPSP in number, -- Рег. номер производственного состава
|
||||
NFCPRODPLAN in number, -- Рег. номер план
|
||||
@ -242,7 +242,7 @@ create or replace package PKG_P8PANELS_MECHREC as
|
||||
);
|
||||
|
||||
/* Получение таблицы комплектовочных ведомостей, связанных с производственным составом */
|
||||
procedure FCDELIVSH_DG_GET
|
||||
procedure FCDELIVSH_DG_BY_PRDCMPSP_GET
|
||||
(
|
||||
NPRODCMPSP in number, -- Рег. номер производственного состава
|
||||
NFCPRODPLAN in number, -- Рег. номер план
|
||||
@ -253,13 +253,6 @@ create or replace package PKG_P8PANELS_MECHREC as
|
||||
COUT out clob -- Сериализованная таблица данных
|
||||
);
|
||||
|
||||
/* Считывание деталий для выбора SVG */
|
||||
procedure FCPRODCMP_DETAILS_GET
|
||||
(
|
||||
NFCPRODPLAN in number, -- Рег. номер плана
|
||||
COUT out clob -- Сериализованная таблица данных
|
||||
);
|
||||
|
||||
/* Получение таблицы записей "Планы и отчеты производства изделий" */
|
||||
procedure FCPRODPLAN_GET
|
||||
(
|
||||
@ -273,6 +266,13 @@ create or replace package PKG_P8PANELS_MECHREC as
|
||||
COUT out clob -- Список каталогов раздела "Планы и отчеты производства изделий"
|
||||
);
|
||||
|
||||
/* Считывание деталей производственного состава */
|
||||
procedure FCPRODCMP_DETAILS_GET
|
||||
(
|
||||
NFCPRODPLAN in number, -- Рег. номер плана
|
||||
COUT out clob -- Сериализованная таблица данных
|
||||
);
|
||||
|
||||
end PKG_P8PANELS_MECHREC;
|
||||
/
|
||||
create or replace package body PKG_P8PANELS_MECHREC as
|
||||
@ -335,6 +335,14 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
/* Константы - дополнительные параметры */
|
||||
SCOL_PATTERN_DATE constant PKG_STD.TSTRING := 'dd_mm_yyyy'; -- Паттерн для динамической колонки граф ("день_месяц_год")
|
||||
|
||||
/* Константы - типовые присоединённые документы */
|
||||
SFLINKTYPE_PREVIEW constant PKG_STD.TSTRING := 'Предпросмотр'; -- Тип ПД для изображений предпросмотра
|
||||
SFLINKTYPE_SVG_MODEL constant PKG_STD.TSTRING := 'Векторная модель'; -- Тип ПД для SVG-модели
|
||||
|
||||
/* Константы - дополнительные свойства */
|
||||
SDP_MODEL_ID constant PKG_STD.TSTRING := 'ПУДП.MODEL_ID'; -- Идентификатор в SVG-модели
|
||||
SDP_MODEL_BG_COLOR constant PKG_STD.TSTRING := 'ПУДП.MODEL_BG_COLOR'; -- Цвет заливки в SVG-модели
|
||||
|
||||
/* Экземпляр дня загрузки цеха */
|
||||
type TJOB_DAY is record
|
||||
(
|
||||
@ -5319,7 +5327,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
end FCPRODPLANSP_LINKED_GET;
|
||||
|
||||
/* Получение таблицы маршрутных листов, связанных с производственным составом */
|
||||
procedure FCROUTLST_MON_DG_GET
|
||||
procedure FCROUTLST_DG_BY_PRDCMPSP_GET
|
||||
(
|
||||
NPRODCMPSP in number, -- Рег. номер производственного состава
|
||||
NFCPRODPLAN in number, -- Рег. номер план
|
||||
@ -5400,11 +5408,11 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' TRIM(SH.NUMB) SNUMB,');
|
||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' COALESCE(SH.OPER_UK, FT.NAME) SOPERATION,');
|
||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select I.CODE from INS_DEPARTMENT I where SF.SUBDIV = I.RN) SEXECUTOR,');
|
||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' F_DICMUNTS_BASE_RECALC_QUANT(' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ',');
|
||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NCOMPANY,');
|
||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SF.MUNIT,');
|
||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SF.T_SHT_PLAN - SF.LABOUR_FACT,');
|
||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NDICMUNTS_WD) NREMN_LABOUR');
|
||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ROUND(F_DICMUNTS_BASE_RECALC_QUANT(' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ',');
|
||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NCOMPANY,');
|
||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SF.MUNIT,');
|
||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SF.T_SHT_PLAN - SF.LABOUR_FACT,');
|
||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NDICMUNTS_WD), 3) NREMN_LABOUR');
|
||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCROUTLST F,');
|
||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCROUTLSTSP SF,');
|
||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCROUTSHTSP SH left outer join FCOPERTYPES FT on SH.OPER_TPS = FT.RN');
|
||||
@ -5482,10 +5490,10 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
/* Очищаем отмеченные маршрутные листы */
|
||||
P_SELECTLIST_CLEAR(NIDENT => NFCROUTLST_IDENT);
|
||||
raise;
|
||||
end FCROUTLST_MON_DG_GET;
|
||||
end FCROUTLST_DG_BY_PRDCMPSP_GET;
|
||||
|
||||
/* Получение таблицы комплектовочных ведомостей, связанных с производственным составом */
|
||||
procedure FCDELIVSH_DG_GET
|
||||
procedure FCDELIVSH_DG_BY_PRDCMPSP_GET
|
||||
(
|
||||
NPRODCMPSP in number, -- Рег. номер производственного состава
|
||||
NFCPRODPLAN in number, -- Рег. номер план
|
||||
@ -5623,7 +5631,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
SNAME => 'SPROVIDER',
|
||||
ICURSOR => ICURSOR,
|
||||
NPOSITION => 5);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
||||
SNAME => 'NDEFICIT',
|
||||
ICURSOR => ICURSOR,
|
||||
NPOSITION => 6);
|
||||
@ -5638,77 +5646,44 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
end if;
|
||||
/* Сериализуем описание */
|
||||
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF);
|
||||
end FCDELIVSH_DG_GET;
|
||||
end FCDELIVSH_DG_BY_PRDCMPSP_GET;
|
||||
|
||||
/* Считывание деталий для выбора SVG */
|
||||
procedure FCPRODCMP_DETAILS_GET
|
||||
/* Получение изображения для записи "Планы и отчеты производства изделий" */
|
||||
function FCPRODPLAN_IMAGE_GET
|
||||
(
|
||||
NFCPRODPLAN in number, -- Рег. номер плана
|
||||
COUT out clob -- Сериализованная таблица данных
|
||||
)
|
||||
NRN in number, -- Рег. номер записи плана производства изделий
|
||||
SFLINKTYPE in varchar2 -- Код типа присоединённого документа изображения (см. константы SFLINKTYPE_*)
|
||||
) return blob -- Данные считанного изображения (null - если ничего не найдено)
|
||||
is
|
||||
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
|
||||
NDOC_PROP PKG_STD.TREF; -- Рег. номер свойства "ID"
|
||||
NFCPRODPLANSP PKG_STD.TREF; -- Рег. номер связанной спецификации плана
|
||||
begin
|
||||
/* Начинаем формирование XML */
|
||||
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);
|
||||
/* Считываем свойство документа */
|
||||
FIND_DOCS_PROPS_CODE_EX(NFLAG_SMART => 0,
|
||||
NCOMPVERS => NCOMPANY,
|
||||
SUNITCODE => 'CostProductCompositionSpec',
|
||||
SPROPCODE => 'ID',
|
||||
NRN => NDOC_PROP);
|
||||
/* Открываем корень */
|
||||
PKG_XFAST.DOWN_NODE(SNAME => 'XDATA');
|
||||
/* Цикл по планам и отчетам производства изделий */
|
||||
for REC in (select S.RN NRN,
|
||||
(select F.NAME from FCMATRESOURCE F where F.RN = S.MTR_RES) SNAME,
|
||||
PV.NUM_VALUE NID
|
||||
from FCPRODPLANSP T,
|
||||
FCPRODCMPSP S,
|
||||
DOCS_PROPS_VALS PV
|
||||
where T.PRN = NFCPRODPLAN
|
||||
and S.PRN = T.PRODCMP
|
||||
and PV.DOCS_PROP_RN = NDOC_PROP
|
||||
and PV.UNIT_RN = S.RN)
|
||||
/* Найдем изображение */
|
||||
for IMG in (select M.BDATA
|
||||
from FILELINKS M,
|
||||
FILELINKSUNITS U,
|
||||
FLINKTYPES FLT
|
||||
where M.FILE_TYPE = FLT.RN
|
||||
and FLT.CODE = SFLINKTYPE
|
||||
and U.TABLE_PRN = NRN
|
||||
and U.UNITCODE = 'CostProductPlans'
|
||||
and M.RN = U.FILELINKS_PRN
|
||||
and M.BDATA is not null
|
||||
and ROWNUM = 1)
|
||||
loop
|
||||
/* Получаем рег. номер связанной спецификации плана */
|
||||
NFCPRODPLANSP := FCPRODPLANSP_LINKED_GET(NPRODCMPSP => REC.NRN, NFCPRODPLAN => NFCPRODPLAN);
|
||||
/* Открываем план */
|
||||
PKG_XFAST.DOWN_NODE(SNAME => 'XFCPRODCMP');
|
||||
/* Описываем план */
|
||||
PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.NRN);
|
||||
PKG_XFAST.ATTR(SNAME => 'SNAME', SVALUE => REC.SNAME);
|
||||
PKG_XFAST.ATTR(SNAME => 'NID', NVALUE => REC.NID);
|
||||
PKG_XFAST.ATTR(SNAME => 'NFCPRODPLANSP', NVALUE => NFCPRODPLANSP);
|
||||
/* Закрываем план */
|
||||
PKG_XFAST.UP();
|
||||
/* Вернём его */
|
||||
return IMG.BDATA;
|
||||
end loop;
|
||||
/* Закрываем корень */
|
||||
PKG_XFAST.UP();
|
||||
/* Сериализуем */
|
||||
COUT := PKG_XFAST.SERIALIZE_TO_CLOB();
|
||||
/* Завершаем формирование XML */
|
||||
PKG_XFAST.EPILOGUE();
|
||||
exception
|
||||
when others then
|
||||
/* Завершаем формирование XML */
|
||||
PKG_XFAST.EPILOGUE();
|
||||
/* Вернем ошибку */
|
||||
PKG_STATE.DIAGNOSTICS_STACKED();
|
||||
P_EXCEPTION(0, PKG_STATE.SQL_ERRM());
|
||||
end FCPRODCMP_DETAILS_GET;
|
||||
/* Ничего не нашли */
|
||||
return null;
|
||||
end FCPRODPLAN_IMAGE_GET;
|
||||
|
||||
/* Получение таблицы записей "Планы и отчеты производства изделий" */
|
||||
procedure FCPRODPLAN_GET
|
||||
(
|
||||
NCRN in number, -- Рег. номер каталога
|
||||
COUT out clob -- Сериализованная таблица данных
|
||||
NCRN in number, -- Рег. номер каталога
|
||||
COUT out clob -- Сериализованная таблица данных
|
||||
)
|
||||
is
|
||||
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
|
||||
NPROGRESS PKG_STD.TNUMBER; -- Прогресс плана
|
||||
NPROGRESS PKG_STD.TNUMBER; -- Прогресс плана
|
||||
|
||||
/* Получение номера плана из примечания */
|
||||
function NUMB_BY_NOTE_GET
|
||||
@ -5718,7 +5693,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
is
|
||||
begin
|
||||
/* Возвращаем результат */
|
||||
return TRIM(SUBSTR(SNOTE, INSTR(SNOTE, '№')+1, length(SNOTE)));
|
||||
return trim(SUBSTR(SNOTE, INSTR(SNOTE, '№') + 1, LENGTH(SNOTE)));
|
||||
end NUMB_BY_NOTE_GET;
|
||||
|
||||
/* Получение детализации по прогрессу */
|
||||
@ -5753,16 +5728,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
P.NOTE SNOTE,
|
||||
D_YEAR(EN.STARTDATE) NYEAR,
|
||||
COALESCE(SUM(SP.LABOUR_FACT), 0) NLABOUR_FACT,
|
||||
COALESCE(SUM(SP.LABOUR_NORM), 0) NLABOUR_NORM,
|
||||
(select M.BDATA
|
||||
from FILELINKS M,
|
||||
FILELINKSUNITS U
|
||||
where M.COMPANY = NCOMPANY
|
||||
and U.TABLE_PRN = P.RN
|
||||
and U.UNITCODE = 'CostProductPlans'
|
||||
and M.RN = U.FILELINKS_PRN
|
||||
and M.BDATA is not null
|
||||
and rownum = 1) BIMAGE
|
||||
COALESCE(SUM(SP.LABOUR_NORM), 0) NLABOUR_NORM
|
||||
from FCPRODPLAN P left outer join FCPRODPLANSP SP on P.RN = SP.PRN and ((SP.LABOUR_NORM is not null) or (SP.LABOUR_FACT is not null)),
|
||||
FINSTATE FS,
|
||||
ENPERIOD EN
|
||||
@ -5813,7 +5779,9 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
PKG_XFAST.ATTR(SNAME => 'NPROGRESS', NVALUE => NPROGRESS);
|
||||
PKG_XFAST.ATTR(SNAME => 'SDETAIL', SVALUE => DETAIL_BY_PROGRESS_GET(NPROGRESS => NPROGRESS));
|
||||
PKG_XFAST.ATTR(SNAME => 'NYEAR', NVALUE => REC.NYEAR);
|
||||
PKG_XFAST.VALUE(lbVALUE => REC.BIMAGE);
|
||||
PKG_XFAST.DOWN_NODE(SNAME => 'BIMAGE');
|
||||
PKG_XFAST.VALUE(LBVALUE => FCPRODPLAN_IMAGE_GET(NRN => REC.NRN, SFLINKTYPE => SFLINKTYPE_PREVIEW));
|
||||
PKG_XFAST.UP();
|
||||
/* Закрываем план */
|
||||
PKG_XFAST.UP();
|
||||
end loop;
|
||||
@ -5917,5 +5885,80 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
P_EXCEPTION(0, PKG_STATE.SQL_ERRM());
|
||||
end FCPRODPLAN_CTLG_INIT;
|
||||
|
||||
/* Считывание деталей производственного состава */
|
||||
procedure FCPRODCMP_DETAILS_GET
|
||||
(
|
||||
NFCPRODPLAN in number, -- Рег. номер плана
|
||||
COUT out clob -- Сериализованная таблица данных
|
||||
)
|
||||
is
|
||||
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
|
||||
NDP_MODEL_ID PKG_STD.TREF; -- Рег. номер свойства "Идентификатор в SVG-модели"
|
||||
NDP_MODEL_BG_COLOR PKG_STD.TREF; -- Рег. номер свойства "Цвет заливки в SVG-модели"
|
||||
NFCPRODPLANSP PKG_STD.TREF; -- Рег. номер связанной спецификации плана
|
||||
begin
|
||||
/* Начинаем формирование XML */
|
||||
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);
|
||||
/* Считываем свойства детали для её позиционирования в модели */
|
||||
FIND_DOCS_PROPS_CODE_EX(NFLAG_SMART => 1,
|
||||
NCOMPVERS => NCOMPANY,
|
||||
SUNITCODE => 'CostProductCompositionSpec',
|
||||
SPROPCODE => SDP_MODEL_ID,
|
||||
NRN => NDP_MODEL_ID);
|
||||
FIND_DOCS_PROPS_CODE_EX(NFLAG_SMART => 1,
|
||||
NCOMPVERS => NCOMPANY,
|
||||
SUNITCODE => 'CostProductCompositionSpec',
|
||||
SPROPCODE => SDP_MODEL_BG_COLOR,
|
||||
NRN => NDP_MODEL_BG_COLOR);
|
||||
/* Открываем корень */
|
||||
PKG_XFAST.DOWN_NODE(SNAME => 'XDATA');
|
||||
/* Векторная модель */
|
||||
PKG_XFAST.DOWN_NODE(SNAME => 'BMODEL');
|
||||
PKG_XFAST.VALUE(LBVALUE => FCPRODPLAN_IMAGE_GET(NRN => NFCPRODPLAN, SFLINKTYPE => SFLINKTYPE_SVG_MODEL));
|
||||
PKG_XFAST.UP();
|
||||
/* Цикл по планам и отчетам производства изделий */
|
||||
for REC in (select S.RN NRN,
|
||||
(select F.NAME from FCMATRESOURCE F where F.RN = S.MTR_RES) SNAME,
|
||||
PV_MID.STR_VALUE SMODEL_ID,
|
||||
(select PV_MFC.STR_VALUE
|
||||
from DOCS_PROPS_VALS PV_MFC
|
||||
where PV_MFC.UNIT_RN = S.RN
|
||||
and PV_MFC.DOCS_PROP_RN = NDP_MODEL_BG_COLOR) SMODEL_BG_COLOR
|
||||
from FCPRODPLANSP T,
|
||||
FCPRODCMPSP S,
|
||||
DOCS_PROPS_VALS PV_MID
|
||||
where T.PRN = NFCPRODPLAN
|
||||
and S.PRN = T.PRODCMP
|
||||
and PV_MID.UNIT_RN = S.RN
|
||||
and PV_MID.DOCS_PROP_RN = NDP_MODEL_ID)
|
||||
loop
|
||||
/* Получаем рег. номер связанной спецификации плана */
|
||||
NFCPRODPLANSP := FCPRODPLANSP_LINKED_GET(NPRODCMPSP => REC.NRN, NFCPRODPLAN => NFCPRODPLAN);
|
||||
/* Открываем план */
|
||||
PKG_XFAST.DOWN_NODE(SNAME => 'XFCPRODCMP');
|
||||
/* Описываем план */
|
||||
PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.NRN);
|
||||
PKG_XFAST.ATTR(SNAME => 'SNAME', SVALUE => REC.SNAME);
|
||||
PKG_XFAST.ATTR(SNAME => 'SMODEL_ID', SVALUE => REC.SMODEL_ID);
|
||||
PKG_XFAST.ATTR(SNAME => 'SMODEL_BG_COLOR', SVALUE => REC.SMODEL_BG_COLOR);
|
||||
PKG_XFAST.ATTR(SNAME => 'NFCPRODPLANSP', NVALUE => NFCPRODPLANSP);
|
||||
/* Закрываем план */
|
||||
PKG_XFAST.UP();
|
||||
end loop;
|
||||
/* Закрываем корень */
|
||||
PKG_XFAST.UP();
|
||||
/* Сериализуем */
|
||||
COUT := PKG_XFAST.SERIALIZE_TO_CLOB();
|
||||
/* Завершаем формирование XML */
|
||||
PKG_XFAST.EPILOGUE();
|
||||
exception
|
||||
when others then
|
||||
/* Завершаем формирование XML */
|
||||
PKG_XFAST.EPILOGUE();
|
||||
/* Вернем ошибку */
|
||||
PKG_STATE.DIAGNOSTICS_STACKED();
|
||||
P_EXCEPTION(0, PKG_STATE.SQL_ERRM());
|
||||
end FCPRODCMP_DETAILS_GET;
|
||||
|
||||
end PKG_P8PANELS_MECHREC;
|
||||
/
|
||||
|
Loading…
x
Reference in New Issue
Block a user