ЦИТК-957, ЦИТК-953, ЦИТК-939 - Исправление панели "Производственная программа"
Reviewed-on: #34
This commit is contained in:
commit
c6688bd451
@ -48,7 +48,8 @@ const useCostRouteLists = (task, taskType) => {
|
|||||||
NPAGE_SIZE: DATA_GRID_PAGE_SIZE,
|
NPAGE_SIZE: DATA_GRID_PAGE_SIZE,
|
||||||
NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1
|
NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1
|
||||||
},
|
},
|
||||||
attributeValueProcessor: (name, val) => (["DEXEC_DATE", "DREL_DATE"].includes(name) ? formatDateRF(val) : val),
|
attributeValueProcessor: (name, val) =>
|
||||||
|
["DEXEC_DATE", "DREL_DATE"].includes(name) ? formatDateRF(val) : ["SDOCPREF", "SDOCNUMB"].includes(name) ? undefined : val,
|
||||||
respArg: "COUT"
|
respArg: "COUT"
|
||||||
});
|
});
|
||||||
setCostRouteLists(pv => ({
|
setCostRouteLists(pv => ({
|
||||||
|
@ -84,7 +84,26 @@ const STYLES = {
|
|||||||
TASK_DIALOG_ACTION_CONTAINER: { border: 1, borderColor: "text.primary", borderRadius: "5px", width: "100%" },
|
TASK_DIALOG_ACTION_CONTAINER: { border: 1, borderColor: "text.primary", borderRadius: "5px", width: "100%" },
|
||||||
FILTERS: { display: "table", float: "right" },
|
FILTERS: { display: "table", float: "right" },
|
||||||
FILTERS_DATE: { display: "table-cell", verticalAlign: "middle" },
|
FILTERS_DATE: { display: "table-cell", verticalAlign: "middle" },
|
||||||
FILTERS_LEVEL: { display: "table-cell", verticalAlign: "middle", paddingLeft: "15px" }
|
FILTERS_LEVEL: { display: "table-cell", verticalAlign: "middle", paddingLeft: "15px" },
|
||||||
|
FILTERS_LEVEL_CAPTION: { display: "flex", alignItems: "center" },
|
||||||
|
FILTERS_LEVEL_LIMIT_ICON: { padding: "0px 8px", color: "#9f9c9c" },
|
||||||
|
FILTERS_LIMIT_SELECT: nOutOfLimit => {
|
||||||
|
return nOutOfLimit === 1
|
||||||
|
? {
|
||||||
|
".MuiOutlinedInput-notchedOutline": {
|
||||||
|
borderColor: "#e9863c"
|
||||||
|
},
|
||||||
|
"&:hover .MuiOutlinedInput-notchedOutline": {
|
||||||
|
borderColor: "#e9863c",
|
||||||
|
borderWidth: "0.15rem"
|
||||||
|
},
|
||||||
|
"&.Mui-focused .MuiOutlinedInput-notchedOutline": {
|
||||||
|
borderColor: "#e9863c",
|
||||||
|
borderWidth: "0.15rem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
: {};
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//------------------------------------
|
//------------------------------------
|
||||||
@ -236,6 +255,7 @@ const MechRecCostProdPlans = () => {
|
|||||||
selectedPlanCtlg: null,
|
selectedPlanCtlg: null,
|
||||||
selectedPlanCtlgMaxLevel: null,
|
selectedPlanCtlgMaxLevel: null,
|
||||||
selectedPlanCtlgLevel: null,
|
selectedPlanCtlgLevel: null,
|
||||||
|
selectedPlanCtlgOutOfLimit: 0,
|
||||||
selectedPlanCtlgSort: null,
|
selectedPlanCtlgSort: null,
|
||||||
selectedPlanCtlgMenuItems: null,
|
selectedPlanCtlgMenuItems: null,
|
||||||
gantt: {},
|
gantt: {},
|
||||||
@ -258,6 +278,9 @@ const MechRecCostProdPlans = () => {
|
|||||||
//Подключение к контексту навигации
|
//Подключение к контексту навигации
|
||||||
const { getNavigationSearch } = useContext(NavigationCtx);
|
const { getNavigationSearch } = useContext(NavigationCtx);
|
||||||
|
|
||||||
|
//Подключение к контексту сообщений
|
||||||
|
const { showMsgInfo } = useContext(MessagingСtx);
|
||||||
|
|
||||||
//Инициализация каталогов планов
|
//Инициализация каталогов планов
|
||||||
const initPlanCtlgs = useCallback(async () => {
|
const initPlanCtlgs = useCallback(async () => {
|
||||||
if (!state.init) {
|
if (!state.init) {
|
||||||
@ -280,6 +303,7 @@ const MechRecCostProdPlans = () => {
|
|||||||
selectedPlanCtlgSpecsLoaded: false,
|
selectedPlanCtlgSpecsLoaded: false,
|
||||||
selectedPlanCtlgMaxLevel: null,
|
selectedPlanCtlgMaxLevel: null,
|
||||||
selectedPlanCtlgLevel: null,
|
selectedPlanCtlgLevel: null,
|
||||||
|
selectedPlanCtlgOutOfLimit: 0,
|
||||||
selectedPlanCtlgSort: null,
|
selectedPlanCtlgSort: null,
|
||||||
selectedPlanCtlgMenuItems: null,
|
selectedPlanCtlgMenuItems: null,
|
||||||
gantt: {},
|
gantt: {},
|
||||||
@ -297,6 +321,7 @@ const MechRecCostProdPlans = () => {
|
|||||||
selectedPlanCtlg: null,
|
selectedPlanCtlg: null,
|
||||||
selectedPlanCtlgMaxLevel: null,
|
selectedPlanCtlgMaxLevel: null,
|
||||||
selectedPlanCtlgLevel: null,
|
selectedPlanCtlgLevel: null,
|
||||||
|
selectedPlanCtlgOutOfLimit: 0,
|
||||||
selectedPlanCtlgSort: null,
|
selectedPlanCtlgSort: null,
|
||||||
selectedPlanCtlgMenuItems: null,
|
selectedPlanCtlgMenuItems: null,
|
||||||
gantt: {},
|
gantt: {},
|
||||||
@ -317,6 +342,7 @@ const MechRecCostProdPlans = () => {
|
|||||||
...pv,
|
...pv,
|
||||||
selectedPlanCtlgMaxLevel: data.NMAX_LEVEL,
|
selectedPlanCtlgMaxLevel: data.NMAX_LEVEL,
|
||||||
selectedPlanCtlgLevel: level || level === 0 ? level : data.NMAX_LEVEL,
|
selectedPlanCtlgLevel: level || level === 0 ? level : data.NMAX_LEVEL,
|
||||||
|
selectedPlanCtlgOutOfLimit: data.NOUT_OF_LIMIT,
|
||||||
selectedPlanCtlgSort: sort,
|
selectedPlanCtlgSort: sort,
|
||||||
selectedPlanCtlgMenuItems: state.selectedPlanCtlgMenuItems
|
selectedPlanCtlgMenuItems: state.selectedPlanCtlgMenuItems
|
||||||
? state.selectedPlanCtlgMenuItems
|
? state.selectedPlanCtlgMenuItems
|
||||||
@ -370,6 +396,17 @@ const MechRecCostProdPlans = () => {
|
|||||||
setState(pv => ({ ...pv, selectedTaskDetail: taskRn, selectedTaskDetailType: taskType }));
|
setState(pv => ({ ...pv, selectedTaskDetail: taskRn, selectedTaskDetailType: taskType }));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//При открытии окна информации об ограничении уровня
|
||||||
|
const handleLevelLimitInfoOpen = () => {
|
||||||
|
//Отображаем информацию
|
||||||
|
showMsgInfo(
|
||||||
|
`Размер производственной программы превышает предельно допустимый для одновременного отображения в виде диаграммы Ганта.
|
||||||
|
Доступные для просмотра уровни вложенности ограничены.
|
||||||
|
Вы можете просматривать производственную программу частями, используя действие "Открытие панели Производственная программа" в спецификации "Выпуск"
|
||||||
|
раздела "Планы и отчеты производства изделий".`
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
//Генерация содержимого
|
//Генерация содержимого
|
||||||
return (
|
return (
|
||||||
<Box>
|
<Box>
|
||||||
@ -434,8 +471,16 @@ const MechRecCostProdPlans = () => {
|
|||||||
</Select>
|
</Select>
|
||||||
</Box>
|
</Box>
|
||||||
<Box sx={STYLES.FILTERS_LEVEL}>
|
<Box sx={STYLES.FILTERS_LEVEL}>
|
||||||
<InputLabel id="select-label-level">До уровня</InputLabel>
|
<Box sx={STYLES.FILTERS_LEVEL_CAPTION}>
|
||||||
|
<InputLabel id="select-label-level">До уровня</InputLabel>
|
||||||
|
{state.selectedPlanCtlgOutOfLimit === 1 ? (
|
||||||
|
<IconButton sx={STYLES.FILTERS_LEVEL_LIMIT_ICON} onClick={handleLevelLimitInfoOpen}>
|
||||||
|
<Icon>info</Icon>
|
||||||
|
</IconButton>
|
||||||
|
) : null}
|
||||||
|
</Box>
|
||||||
<Select
|
<Select
|
||||||
|
sx={STYLES.FILTERS_LIMIT_SELECT(state.selectedPlanCtlgOutOfLimit)}
|
||||||
labelId="select-label-level"
|
labelId="select-label-level"
|
||||||
id="select-level"
|
id="select-level"
|
||||||
value={state.selectedPlanCtlgLevel}
|
value={state.selectedPlanCtlgLevel}
|
||||||
|
@ -85,7 +85,8 @@ create or replace package PKG_P8PANELS_MECHREC as
|
|||||||
NLEVEL in number := null, -- Уровень отбора
|
NLEVEL in number := null, -- Уровень отбора
|
||||||
SSORT_FIELD in varchar2 := 'DREP_DATE_TO', -- Поле сортировки
|
SSORT_FIELD in varchar2 := 'DREP_DATE_TO', -- Поле сортировки
|
||||||
COUT out clob, -- Список задач
|
COUT out clob, -- Список задач
|
||||||
NMAX_LEVEL out number -- Максимальный уровень иерархии
|
NMAX_LEVEL out number, -- Максимальный уровень иерархии
|
||||||
|
NOUT_OF_LIMIT out number -- Признак превышения лимита (0 - нет, 1 - да)
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Инициализация каталогов раздела "Планы и отчеты производства изделий" для панели "Производственная программа" */
|
/* Инициализация каталогов раздела "Планы и отчеты производства изделий" для панели "Производственная программа" */
|
||||||
@ -1403,11 +1404,6 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
NSTORAGE_IN := null;
|
NSTORAGE_IN := null;
|
||||||
NNOMENCLATURE := null;
|
NNOMENCLATURE := null;
|
||||||
end;
|
end;
|
||||||
/* Если номенклатура не указана */
|
|
||||||
if ((NNOMENCLATURE is null) or ((NSTORAGE is null) and (NSTORAGE_IN is null))) then
|
|
||||||
/* Не идем дальше */
|
|
||||||
return;
|
|
||||||
end if;
|
|
||||||
/* Инициализируем даты */
|
/* Инициализируем даты */
|
||||||
DDATE := TRUNC(sysdate);
|
DDATE := TRUNC(sysdate);
|
||||||
/* Читем сортировки */
|
/* Читем сортировки */
|
||||||
@ -1455,125 +1451,128 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||||
BVISIBLE => true,
|
BVISIBLE => true,
|
||||||
BORDER => true);
|
BORDER => true);
|
||||||
/* Обходим данные */
|
/* Если номенклатура или хранилища указаны */
|
||||||
begin
|
if ((NNOMENCLATURE is not null) or ((NSTORAGE is not null) and (NSTORAGE_IN is not null))) then
|
||||||
/* Добавляем подсказку совместимости */
|
/* Обходим данные */
|
||||||
CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL);
|
begin
|
||||||
/* Формируем запрос */
|
/* Добавляем подсказку совместимости */
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *');
|
CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL);
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,');
|
/* Формируем запрос */
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select I.CODE SINDOC,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' AZ.AZS_NUMBER SSTORE,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' least(H.MIN_RESTPLAN,H.MIN_RESTFACT) NSALE,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select I.CODE SINDOC,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' H.RESTFACT NRESTFACT,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' AZ.AZS_NUMBER SSTORE,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' H.RESERV NRESERV,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' least(H.MIN_RESTPLAN,H.MIN_RESTFACT) NSALE,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' case coalesce(GRP.NMEASTYPE, 0)');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' H.RESTFACT NRESTFACT,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when 0 then MU1.MEAS_MNEMO');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' H.RESERV NRESERV,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when 1 then MU2.MEAS_MNEMO');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' case coalesce(GRP.NMEASTYPE, 0)');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when 2 then MU3.MEAS_MNEMO');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when 0 then MU1.MEAS_MNEMO');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' end SPRICEMEAS');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when 1 then MU2.MEAS_MNEMO');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from GOODSPARTIES G,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when 2 then MU3.MEAS_MNEMO');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' NOMMODIF MF,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' end SPRICEMEAS');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DICNOMNS NOM left outer join DICMUNTS MU2 on NOM.UMEAS_ALT = MU2.RN,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from GOODSPARTIES G,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' GOODSSUPPLYHIST H left outer join NOMNMODIFPACK PAC on H.NOMNMODIFPACK = PAC.RN');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' NOMMODIF MF,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' left outer join NOMNPACK NPAC on PAC.NOMENPACK = NPAC.RN');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DICNOMNS NOM left outer join DICMUNTS MU2 on NOM.UMEAS_ALT = MU2.RN,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' left outer join DICMUNTS MU3 on NPAC.UMEAS = MU3.RN');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' GOODSSUPPLYHIST H left outer join NOMNMODIFPACK PAC on H.NOMNMODIFPACK = PAC.RN');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' left outer join V_GOODSSUPPLY_REGPRICE GRP on H.RN = GRP.NGOODSSUPPLYHIST,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' left outer join NOMNPACK NPAC on PAC.NOMENPACK = NPAC.RN');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' INCOMDOC I,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' left outer join DICMUNTS MU3 on NPAC.UMEAS = MU3.RN');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' GOODSSUPPLY S,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' left outer join V_GOODSSUPPLY_REGPRICE GRP on H.RN = GRP.NGOODSSUPPLYHIST,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DICMUNTS MU1,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' INCOMDOC I,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' AZSAZSLISTMT AZ');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' GOODSSUPPLY S,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where G.COMPANY = :NCOMPANY');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DICMUNTS MU1,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and G.NOMMODIF = MF.RN');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' AZSAZSLISTMT AZ');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and NOM.RN = MF.PRN');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where G.COMPANY = :NCOMPANY');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and NOM.RN = :NNOMENCLATURE');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and G.NOMMODIF = MF.RN');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and I.RN = G.INDOC');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and NOM.RN = MF.PRN');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and S.PRN = G.RN');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and NOM.RN = :NNOMENCLATURE');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and (((:NSTORAGE is not null) and (S.STORE = :NSTORAGE)) or ((:NSTORAGE_IN is not null) and (S.STORE = :NSTORAGE_IN)))');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and I.RN = G.INDOC');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and H.PRN = S.RN');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and S.PRN = G.RN');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and AZ.RN = S.STORE');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and (((:NSTORAGE is not null) and (S.STORE = :NSTORAGE)) or ((:NSTORAGE_IN is not null) and (S.STORE = :NSTORAGE_IN)))');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and H.DATE_FROM <= :DDATE');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and H.PRN = S.RN');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and (H.DATE_TO >= :DDATE or H.DATE_TO is null)');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and AZ.RN = S.STORE');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and NOM.UMEAS_MAIN = MU1.RN');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and H.DATE_FROM <= :DDATE');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and H.RESTFACT <> ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0));
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and (H.DATE_TO >= :DDATE or H.DATE_TO is null)');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UP I_USERPRIV_JUR_PERS_ROLEID)') || ' null');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and NOM.UMEAS_MAIN = MU1.RN');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and H.RESTFACT <> ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0));
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UP.JUR_PERS = G.JUR_PERS');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UP I_USERPRIV_JUR_PERS_ROLEID)') || ' null');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'GoodsParties'));
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.ROLEID in (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UR I_USERROLES_AUTHID_FK)') || ' UR.ROLEID');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UP.JUR_PERS = G.JUR_PERS');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERROLES UR');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'GoodsParties'));
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UR.AUTHID = UTILIZER())');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.ROLEID in (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UR I_USERROLES_AUTHID_FK)') || ' UR.ROLEID');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' union all');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERROLES UR');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UP I_USERPRIV_JUR_PERS_AUTHID)') || ' null');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UR.AUTHID = UTILIZER())');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' union all');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UP.JUR_PERS = G.JUR_PERS');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UP I_USERPRIV_JUR_PERS_AUTHID)') || ' null');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'GoodsParties'));
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.AUTHID = UTILIZER())');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UP.JUR_PERS = G.JUR_PERS');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'GoodsParties'));
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.AUTHID = UTILIZER())');
|
||||||
/* Учтём сортировки */
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F');
|
||||||
PKG_P8PANELS_VISUAL.TDG_ORDERS_SET_QUERY(RDATA_GRID => RDG,
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO');
|
||||||
RORDERS => RO,
|
/* Учтём сортировки */
|
||||||
SPATTERN => '%ORDER_BY%',
|
PKG_P8PANELS_VISUAL.TDG_ORDERS_SET_QUERY(RDATA_GRID => RDG,
|
||||||
CSQL => CSQL);
|
RORDERS => RO,
|
||||||
/* Разбираем его */
|
SPATTERN => '%ORDER_BY%',
|
||||||
ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT');
|
CSQL => CSQL);
|
||||||
PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL);
|
/* Разбираем его */
|
||||||
/* Делаем подстановку параметров */
|
ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT');
|
||||||
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY);
|
PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL);
|
||||||
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM);
|
/* Делаем подстановку параметров */
|
||||||
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO);
|
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY);
|
||||||
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NNOMENCLATURE', NVALUE => NNOMENCLATURE);
|
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM);
|
||||||
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NSTORAGE', NVALUE => NSTORAGE);
|
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO);
|
||||||
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NSTORAGE_IN', NVALUE => NSTORAGE_IN);
|
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NNOMENCLATURE', NVALUE => NNOMENCLATURE);
|
||||||
PKG_SQL_DML.BIND_VARIABLE_DATE(ICURSOR => ICURSOR, SNAME => 'DDATE', DVALUE => DDATE);
|
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NSTORAGE', NVALUE => NSTORAGE);
|
||||||
/* Описываем структуру записи курсора */
|
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NSTORAGE_IN', NVALUE => NSTORAGE_IN);
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 1);
|
PKG_SQL_DML.BIND_VARIABLE_DATE(ICURSOR => ICURSOR, SNAME => 'DDATE', DVALUE => DDATE);
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2);
|
/* Описываем структуру записи курсора */
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 3);
|
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 1);
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4);
|
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2);
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5);
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 3);
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 6);
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4);
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 7);
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5);
|
||||||
/* Делаем выборку */
|
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 6);
|
||||||
if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 7);
|
||||||
null;
|
/* Делаем выборку */
|
||||||
end if;
|
if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then
|
||||||
/* Обходим выбранные записи */
|
null;
|
||||||
while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0)
|
end if;
|
||||||
loop
|
/* Обходим выбранные записи */
|
||||||
/* Добавляем колонки с данными */
|
while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0)
|
||||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
loop
|
||||||
SNAME => 'SINDOC',
|
/* Добавляем колонки с данными */
|
||||||
ICURSOR => ICURSOR,
|
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
||||||
NPOSITION => 1,
|
SNAME => 'SINDOC',
|
||||||
BCLEAR => true);
|
ICURSOR => ICURSOR,
|
||||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
NPOSITION => 1,
|
||||||
SNAME => 'SSTORE',
|
BCLEAR => true);
|
||||||
ICURSOR => ICURSOR,
|
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
||||||
NPOSITION => 2);
|
SNAME => 'SSTORE',
|
||||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLN(RROW => RDG_ROW, SNAME => 'NSALE', ICURSOR => ICURSOR, NPOSITION => 3);
|
ICURSOR => ICURSOR,
|
||||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
NPOSITION => 2);
|
||||||
SNAME => 'NRESTFACT',
|
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLN(RROW => RDG_ROW, SNAME => 'NSALE', ICURSOR => ICURSOR, NPOSITION => 3);
|
||||||
ICURSOR => ICURSOR,
|
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
||||||
NPOSITION => 4);
|
SNAME => 'NRESTFACT',
|
||||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
ICURSOR => ICURSOR,
|
||||||
SNAME => 'NRESERV',
|
NPOSITION => 4);
|
||||||
ICURSOR => ICURSOR,
|
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
||||||
NPOSITION => 5);
|
SNAME => 'NRESERV',
|
||||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
ICURSOR => ICURSOR,
|
||||||
SNAME => 'SPRICEMEAS',
|
NPOSITION => 5);
|
||||||
ICURSOR => ICURSOR,
|
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
||||||
NPOSITION => 6);
|
SNAME => 'SPRICEMEAS',
|
||||||
/* Добавляем строку в таблицу */
|
ICURSOR => ICURSOR,
|
||||||
PKG_P8PANELS_VISUAL.TDG_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
|
NPOSITION => 6);
|
||||||
end loop;
|
/* Добавляем строку в таблицу */
|
||||||
exception
|
PKG_P8PANELS_VISUAL.TDG_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
|
||||||
when others then
|
end loop;
|
||||||
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
|
exception
|
||||||
raise;
|
when others then
|
||||||
end;
|
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
|
||||||
|
raise;
|
||||||
|
end;
|
||||||
|
end if;
|
||||||
/* Сериализуем описание */
|
/* Сериализуем описание */
|
||||||
COUT := PKG_P8PANELS_VISUAL.TDG_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF);
|
COUT := PKG_P8PANELS_VISUAL.TDG_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF);
|
||||||
end GOODSPARTIES_DG_GET;
|
end GOODSPARTIES_DG_GET;
|
||||||
@ -2264,7 +2263,8 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
NLEVEL in number := null, -- Уровень отбора
|
NLEVEL in number := null, -- Уровень отбора
|
||||||
SSORT_FIELD in varchar2 := 'DREP_DATE_TO', -- Поле сортировки
|
SSORT_FIELD in varchar2 := 'DREP_DATE_TO', -- Поле сортировки
|
||||||
COUT out clob, -- Список задач
|
COUT out clob, -- Список задач
|
||||||
NMAX_LEVEL out number -- Максимальный уровень иерархии
|
NMAX_LEVEL out number, -- Максимальный уровень иерархии
|
||||||
|
NOUT_OF_LIMIT out number -- Признак превышения лимита (0 - нет, 1 - да)
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
/* Переменные */
|
/* Переменные */
|
||||||
@ -2305,15 +2305,20 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
end MAKE_INFO;
|
end MAKE_INFO;
|
||||||
|
|
||||||
/* Считывание максимального уровня иерархии плана по каталогу */
|
/* Считывание максимального уровня иерархии плана по каталогу */
|
||||||
function PRODPLAN_MAX_LEVEL_GET
|
procedure PRODPLAN_MAX_LEVEL_GET
|
||||||
(
|
(
|
||||||
NCRN in number, -- Рег. номер каталога планов
|
NCRN in number, -- Рег. номер каталога планов
|
||||||
NFCPRODPLANSP in number -- Рег. номер позиции спецификации
|
NFCPRODPLANSP in number, -- Рег. номер позиции спецификации
|
||||||
) return number -- Максимальный уровень иерархии
|
NMAX_LEVEL out number, -- Максимальный уровень иерархии
|
||||||
|
NOUT_OF_LIMIT out number -- Признак превышения лимита (0 - нет, 1 - да)
|
||||||
|
)
|
||||||
is
|
is
|
||||||
NRESULT PKG_STD.TNUMBER := 1; -- Максимальный уровень иерархии
|
|
||||||
NTOTAL PKG_STD.TNUMBER := 0; -- Сумма документов по проверяемому уровню
|
NTOTAL PKG_STD.TNUMBER := 0; -- Сумма документов по проверяемому уровню
|
||||||
begin
|
begin
|
||||||
|
/* Обнуляем признак привышения лимита */
|
||||||
|
NOUT_OF_LIMIT := 0;
|
||||||
|
/* Инициализируем максимальный уровень иерархии */
|
||||||
|
NMAX_LEVEL := 1;
|
||||||
/* Цикл по уровням каталога планов */
|
/* Цикл по уровням каталога планов */
|
||||||
for REC in (select level,
|
for REC in (select level,
|
||||||
count(TMP.RN) COUNT_DOCS
|
count(TMP.RN) COUNT_DOCS
|
||||||
@ -2358,14 +2363,14 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
NTOTAL := NTOTAL + REC.COUNT_DOCS;
|
NTOTAL := NTOTAL + REC.COUNT_DOCS;
|
||||||
/* Если сумма документов по текущему уровню превышает максимальное количество задач */
|
/* Если сумма документов по текущему уровню превышает максимальное количество задач */
|
||||||
if (NTOTAL >= NMAX_TASKS) then
|
if (NTOTAL >= NMAX_TASKS) then
|
||||||
|
/* Устанавливаем признак превышения лимита */
|
||||||
|
NOUT_OF_LIMIT := 1;
|
||||||
/* Выходим из цикла */
|
/* Выходим из цикла */
|
||||||
exit;
|
exit;
|
||||||
end if;
|
end if;
|
||||||
/* Указываем текущий уровень */
|
/* Указываем текущий уровень */
|
||||||
NRESULT := REC.LEVEL;
|
NMAX_LEVEL := REC.LEVEL;
|
||||||
end loop;
|
end loop;
|
||||||
/* Возвращаем результат */
|
|
||||||
return NRESULT;
|
|
||||||
end PRODPLAN_MAX_LEVEL_GET;
|
end PRODPLAN_MAX_LEVEL_GET;
|
||||||
|
|
||||||
/* Определение дат спецификации плана */
|
/* Определение дат спецификации плана */
|
||||||
@ -2745,7 +2750,10 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
/* Инициализируем описания цветов */
|
/* Инициализируем описания цветов */
|
||||||
TASK_COLORS_INIT(RG => RG);
|
TASK_COLORS_INIT(RG => RG);
|
||||||
/* Определяем максимальный уровень иерархии */
|
/* Определяем максимальный уровень иерархии */
|
||||||
NMAX_LEVEL := PRODPLAN_MAX_LEVEL_GET(NCRN => NCRN, NFCPRODPLANSP => NFCPRODPLANSP);
|
PRODPLAN_MAX_LEVEL_GET(NCRN => NCRN,
|
||||||
|
NFCPRODPLANSP => NFCPRODPLANSP,
|
||||||
|
NMAX_LEVEL => NMAX_LEVEL,
|
||||||
|
NOUT_OF_LIMIT => NOUT_OF_LIMIT);
|
||||||
/* Определяем уровень фильтра */
|
/* Определяем уровень фильтра */
|
||||||
NLEVEL_FILTER := COALESCE(NLEVEL, NMAX_LEVEL);
|
NLEVEL_FILTER := COALESCE(NLEVEL, NMAX_LEVEL);
|
||||||
/* Обходим данные */
|
/* Обходим данные */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user