forked from CITKParus/P8-Panels
ЦИТК-826 - Доработка панели "Производственный план цеха"
This commit is contained in:
commit
a464dc961f
@ -9,13 +9,12 @@
|
|||||||
|
|
||||||
import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React
|
import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React
|
||||||
import PropTypes from "prop-types"; //Контроль свойств компонента
|
import PropTypes from "prop-types"; //Контроль свойств компонента
|
||||||
import { Typography, Box, Paper, Dialog, DialogContent, DialogActions, Button, TextField } from "@mui/material"; //Интерфейсные элементы
|
import { Typography, Box, Paper, Dialog, DialogContent, DialogActions, Button, TextField, IconButton, Icon } from "@mui/material"; //Интерфейсные элементы
|
||||||
import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных
|
import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных
|
||||||
import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения
|
import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения
|
||||||
import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером
|
import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером
|
||||||
import { object2Base64XML } from "../../core/utils"; //Вспомогательные функции
|
import { object2Base64XML } from "../../core/utils"; //Вспомогательные функции
|
||||||
import { CostRouteListsOrdDataGrid } from "./fcroutlstord"; //Состояние таблицы заказов маршрутных листов
|
import { CostRouteListsSpecsDataGrid } from "./fcroutlstsp"; //Состояние таблицы заказов маршрутных листов
|
||||||
import { ApplicationСtx } from "../../context/application"; //Контекст приложения
|
|
||||||
|
|
||||||
//---------
|
//---------
|
||||||
//Константы
|
//Константы
|
||||||
@ -26,7 +25,6 @@ const STYLES = {
|
|||||||
CONTAINER: { textAlign: "center" },
|
CONTAINER: { textAlign: "center" },
|
||||||
TABLE: { paddingTop: "15px" },
|
TABLE: { paddingTop: "15px" },
|
||||||
TABLE_SUM: { textAlign: "right", paddingTop: "5px", paddingRight: "15px" },
|
TABLE_SUM: { textAlign: "right", paddingTop: "5px", paddingRight: "15px" },
|
||||||
DIALOG_EDITOR: { maxWidth: "250px" },
|
|
||||||
DIALOG_BUTTONS: { marginTop: "10px", width: "240px" }
|
DIALOG_BUTTONS: { marginTop: "10px", width: "240px" }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -38,37 +36,27 @@ const STYLES = {
|
|||||||
export const rowExpandRender = ({ row }) => {
|
export const rowExpandRender = ({ row }) => {
|
||||||
return (
|
return (
|
||||||
<Paper elevation={4}>
|
<Paper elevation={4}>
|
||||||
<CostRouteListsOrdDataGrid mainRowRN={row.NRN} />
|
<CostRouteListsSpecsDataGrid mainRowRN={row.NRN} />
|
||||||
</Paper>
|
</Paper>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
//Форматирование значений колонок
|
//Форматирование значений колонок
|
||||||
const dataCellRender = ({ row, columnDef /*, handlePriorEditOpen, handleOrderEditOpen */ }) => {
|
const dataCellRender = ({ row, columnDef, handlePriorEditOpen }) => {
|
||||||
//!!! Пока отключено - не удалять
|
//!!! Пока отключено - не удалять
|
||||||
// switch (columnDef.name) {
|
switch (columnDef.name) {
|
||||||
// case "NPRIOR_PARTY":
|
case "NPRIOR_PARTY":
|
||||||
// return {
|
return {
|
||||||
// data: (
|
data: (
|
||||||
// <>
|
<>
|
||||||
// {row["NPRIOR_PARTY"]}
|
{row["NPRIOR_PARTY"]}
|
||||||
// <IconButton edge="end" title="Изменить приоритет" onClick={() => handlePriorEditOpen(row["NRN"], row["NPRIOR_PARTY"])}>
|
<IconButton edge="end" title="Изменить приоритет" onClick={() => handlePriorEditOpen(row["NRN"], row["NPRIOR_PARTY"])}>
|
||||||
// <Icon>edit</Icon>
|
<Icon>edit</Icon>
|
||||||
// </IconButton>
|
</IconButton>
|
||||||
// </>
|
</>
|
||||||
// )
|
)
|
||||||
// };
|
};
|
||||||
// case "NCHANGE_FACEACC":
|
}
|
||||||
// return {
|
|
||||||
// data: (
|
|
||||||
// <Box sx={{ textAlign: "center" }}>
|
|
||||||
// <IconButton title="Изменить заказ" onClick={() => handleOrderEditOpen(row["NRN"], row["SPROD_ORDER"])}>
|
|
||||||
// <Icon>inventory</Icon>
|
|
||||||
// </IconButton>
|
|
||||||
// </Box>
|
|
||||||
// )
|
|
||||||
// };
|
|
||||||
// }
|
|
||||||
return {
|
return {
|
||||||
data: row[columnDef]
|
data: row[columnDef]
|
||||||
};
|
};
|
||||||
@ -90,17 +78,12 @@ const CostRouteListsDataGrid = ({ task }) => {
|
|||||||
pageNumber: 1,
|
pageNumber: 1,
|
||||||
morePages: true,
|
morePages: true,
|
||||||
editPriorNRN: null,
|
editPriorNRN: null,
|
||||||
editPriorValue: null,
|
editPriorValue: null
|
||||||
editOrderNRN: null,
|
|
||||||
editOrderValue: null
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//Подключение к контексту взаимодействия с сервером
|
//Подключение к контексту взаимодействия с сервером
|
||||||
const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx);
|
const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx);
|
||||||
|
|
||||||
//Подключение к контексту приложения
|
|
||||||
const { pOnlineShowDictionary } = useContext(ApplicationСtx);
|
|
||||||
|
|
||||||
//Размер страницы данных
|
//Размер страницы данных
|
||||||
const DATA_GRID_PAGE_SIZE = 5;
|
const DATA_GRID_PAGE_SIZE = 5;
|
||||||
|
|
||||||
@ -191,38 +174,10 @@ const CostRouteListsDataGrid = ({ task }) => {
|
|||||||
priorChange(costRouteLists.editPriorNRN, costRouteLists.editPriorValue, costRouteLists.rows);
|
priorChange(costRouteLists.editPriorNRN, costRouteLists.editPriorValue, costRouteLists.rows);
|
||||||
};
|
};
|
||||||
|
|
||||||
//При открытии изменения заказа
|
|
||||||
const handleOrderEditOpen = (NRN, sProdOrderValue) => {
|
|
||||||
setCostRouteLists(pv => ({ ...pv, editOrderNRN: NRN, editOrderValue: sProdOrderValue }));
|
|
||||||
};
|
|
||||||
|
|
||||||
//При закрытии изменения заказа
|
|
||||||
const handleOrderEditClose = () => {
|
|
||||||
setCostRouteLists(pv => ({ ...pv, editOrderNRN: null, editOrderValue: null }));
|
|
||||||
};
|
|
||||||
|
|
||||||
//Изменение заказа
|
|
||||||
const setEditOrderValue = value => {
|
|
||||||
setCostRouteLists(pv => ({ ...pv, editOrderValue: value }));
|
|
||||||
};
|
|
||||||
|
|
||||||
//При изменении значения заказа
|
|
||||||
const handleOrderFormChanged = e => {
|
|
||||||
setEditOrderValue(e.target.value);
|
|
||||||
};
|
|
||||||
|
|
||||||
//При нажатии на изменение заказа
|
|
||||||
const handleOrderChange = () => {
|
|
||||||
//Изменяем значение
|
|
||||||
//priorChange(costRouteLists.editPriorNRN, costRouteLists.editPriorValue);
|
|
||||||
//Закрываем окно
|
|
||||||
handleOrderEditClose();
|
|
||||||
};
|
|
||||||
|
|
||||||
//Генерация содержимого
|
//Генерация содержимого
|
||||||
return (
|
return (
|
||||||
<div style={STYLES.CONTAINER}>
|
<div style={STYLES.CONTAINER}>
|
||||||
<Typography variant={"h6"}>Маршрутные листы</Typography>
|
<Typography variant={"h6"}>В производстве</Typography>
|
||||||
{costRouteLists.dataLoaded ? (
|
{costRouteLists.dataLoaded ? (
|
||||||
<>
|
<>
|
||||||
<Box sx={STYLES.TABLE}>
|
<Box sx={STYLES.TABLE}>
|
||||||
@ -237,13 +192,13 @@ const CostRouteListsDataGrid = ({ task }) => {
|
|||||||
rowExpandRender={rowExpandRender}
|
rowExpandRender={rowExpandRender}
|
||||||
onOrderChanged={handleOrderChanged}
|
onOrderChanged={handleOrderChanged}
|
||||||
onPagesCountChanged={handlePagesCountChanged}
|
onPagesCountChanged={handlePagesCountChanged}
|
||||||
dataCellRender={prms => dataCellRender({ ...prms, handlePriorEditOpen, handleOrderEditOpen })}
|
dataCellRender={prms => dataCellRender({ ...prms, handlePriorEditOpen })}
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
</>
|
</>
|
||||||
) : null}
|
) : null}
|
||||||
{costRouteLists.editPriorNRN ? (
|
{costRouteLists.editPriorNRN ? (
|
||||||
<Dialog open onClose={() => handlePriorEditClose(null)} sx={STYLES.DIALOG_EDITOR}>
|
<Dialog open onClose={() => handlePriorEditClose(null)}>
|
||||||
<DialogContent>
|
<DialogContent>
|
||||||
<Box>
|
<Box>
|
||||||
<TextField
|
<TextField
|
||||||
@ -267,45 +222,6 @@ const CostRouteListsDataGrid = ({ task }) => {
|
|||||||
</DialogActions>
|
</DialogActions>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
) : null}
|
) : null}
|
||||||
{costRouteLists.editOrderNRN ? (
|
|
||||||
<Dialog open onClose={() => handleOrderEditClose(null)} sx={STYLES.DIALOG_EDITOR}>
|
|
||||||
<DialogContent>
|
|
||||||
<Box>
|
|
||||||
<TextField
|
|
||||||
name="editOrderValue"
|
|
||||||
label="Заказ"
|
|
||||||
variant="standard"
|
|
||||||
fullWidth
|
|
||||||
value={costRouteLists.editOrderValue}
|
|
||||||
onChange={handleOrderFormChanged}
|
|
||||||
/>
|
|
||||||
<Box>
|
|
||||||
<Button
|
|
||||||
sx={STYLES.DIALOG_BUTTONS}
|
|
||||||
variant="contained"
|
|
||||||
onClick={() => {
|
|
||||||
pOnlineShowDictionary({
|
|
||||||
unitCode: "FaceAccounts",
|
|
||||||
inputParameters: [{ name: "in_NUMB", value: costRouteLists.editOrderValue }],
|
|
||||||
callBack: res => (res.success === true ? setEditOrderValue(res.outParameters.out_NUMB) : null)
|
|
||||||
});
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
Лицевые счета
|
|
||||||
</Button>
|
|
||||||
<Box>
|
|
||||||
<Button sx={STYLES.DIALOG_BUTTONS} onClick={handleOrderChange} variant="contained">
|
|
||||||
Изменить
|
|
||||||
</Button>
|
|
||||||
</Box>
|
|
||||||
</Box>
|
|
||||||
</Box>
|
|
||||||
</DialogContent>
|
|
||||||
<DialogActions>
|
|
||||||
<Button onClick={() => handleOrderEditClose(null)}>Закрыть</Button>
|
|
||||||
</DialogActions>
|
|
||||||
</Dialog>
|
|
||||||
) : null}
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Парус 8 - Панели мониторинга - ПУП - Производственный план цеха
|
Парус 8 - Панели мониторинга - ПУП - Производственный план цеха
|
||||||
Компонент панели: Таблица заказов маршрутного листа
|
Компонент панели: Таблица строк маршрутного листа
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//---------------------
|
//---------------------
|
||||||
@ -28,10 +28,10 @@ const STYLES = {
|
|||||||
//Тело модуля
|
//Тело модуля
|
||||||
//-----------
|
//-----------
|
||||||
|
|
||||||
//Таблица заказов маршрутного листа
|
//Таблица строк маршрутного листа
|
||||||
const CostRouteListsOrdDataGrid = ({ mainRowRN }) => {
|
const CostRouteListsSpecsDataGrid = ({ mainRowRN }) => {
|
||||||
//Собственное состояние - таблица данных
|
//Собственное состояние - таблица данных
|
||||||
const [costRouteListsOrd, setCostRouteListsOrd] = useState({
|
const [costRouteListsSpecs, setCostRouteListsSpecs] = useState({
|
||||||
dataLoaded: false,
|
dataLoaded: false,
|
||||||
columnsDef: [],
|
columnsDef: [],
|
||||||
orders: null,
|
orders: null,
|
||||||
@ -49,19 +49,19 @@ const CostRouteListsOrdDataGrid = ({ mainRowRN }) => {
|
|||||||
|
|
||||||
//Загрузка данных таблицы с сервера
|
//Загрузка данных таблицы с сервера
|
||||||
const loadData = useCallback(async () => {
|
const loadData = useCallback(async () => {
|
||||||
if (costRouteListsOrd.reload) {
|
if (costRouteListsSpecs.reload) {
|
||||||
const data = await executeStored({
|
const data = await executeStored({
|
||||||
stored: "PKG_P8PANELS_MECHREC.FCROUTLSTORD_DEPT_DG_GET",
|
stored: "PKG_P8PANELS_MECHREC.FCROUTLSTSP_DEPT_DG_GET",
|
||||||
args: {
|
args: {
|
||||||
NFCROUTLST: mainRowRN,
|
NFCROUTLST: mainRowRN,
|
||||||
CORDERS: { VALUE: object2Base64XML(costRouteListsOrd.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB },
|
CORDERS: { VALUE: object2Base64XML(costRouteListsSpecs.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB },
|
||||||
NPAGE_NUMBER: costRouteListsOrd.pageNumber,
|
NPAGE_NUMBER: costRouteListsSpecs.pageNumber,
|
||||||
NPAGE_SIZE: DATA_GRID_PAGE_SIZE,
|
NPAGE_SIZE: DATA_GRID_PAGE_SIZE,
|
||||||
NINCLUDE_DEF: costRouteListsOrd.dataLoaded ? 0 : 1
|
NINCLUDE_DEF: costRouteListsSpecs.dataLoaded ? 0 : 1
|
||||||
},
|
},
|
||||||
respArg: "COUT"
|
respArg: "COUT"
|
||||||
});
|
});
|
||||||
setCostRouteListsOrd(pv => ({
|
setCostRouteListsSpecs(pv => ({
|
||||||
...pv,
|
...pv,
|
||||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||||
@ -72,11 +72,11 @@ const CostRouteListsOrdDataGrid = ({ mainRowRN }) => {
|
|||||||
}
|
}
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [
|
}, [
|
||||||
costRouteListsOrd.reload,
|
costRouteListsSpecs.reload,
|
||||||
costRouteListsOrd.filters,
|
costRouteListsSpecs.filters,
|
||||||
costRouteListsOrd.orders,
|
costRouteListsSpecs.orders,
|
||||||
costRouteListsOrd.dataLoaded,
|
costRouteListsSpecs.dataLoaded,
|
||||||
costRouteListsOrd.pageNumber,
|
costRouteListsSpecs.pageNumber,
|
||||||
executeStored,
|
executeStored,
|
||||||
SERV_DATA_TYPE_CLOB
|
SERV_DATA_TYPE_CLOB
|
||||||
]);
|
]);
|
||||||
@ -84,26 +84,26 @@ const CostRouteListsOrdDataGrid = ({ mainRowRN }) => {
|
|||||||
//При необходимости обновить данные таблицы
|
//При необходимости обновить данные таблицы
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
loadData();
|
loadData();
|
||||||
}, [costRouteListsOrd.reload, loadData]);
|
}, [costRouteListsSpecs.reload, loadData]);
|
||||||
|
|
||||||
//При изменении состояния сортировки
|
//При изменении состояния сортировки
|
||||||
const handleOrderChanged = ({ orders }) => setCostRouteListsOrd(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true }));
|
const handleOrderChanged = ({ orders }) => setCostRouteListsSpecs(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true }));
|
||||||
|
|
||||||
//При изменении количества отображаемых страниц
|
//При изменении количества отображаемых страниц
|
||||||
const handlePagesCountChanged = () => setCostRouteListsOrd(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true }));
|
const handlePagesCountChanged = () => setCostRouteListsSpecs(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true }));
|
||||||
|
|
||||||
//Генерация содержимого
|
//Генерация содержимого
|
||||||
return (
|
return (
|
||||||
<div style={STYLES.CONTAINER}>
|
<div style={STYLES.CONTAINER}>
|
||||||
<Typography variant={"subtitle2"}>Заказы</Typography>
|
<Typography variant={"subtitle2"}>Операции</Typography>
|
||||||
{costRouteListsOrd.dataLoaded ? (
|
{costRouteListsSpecs.dataLoaded ? (
|
||||||
<P8PDataGrid
|
<P8PDataGrid
|
||||||
{...P8P_DATA_GRID_CONFIG_PROPS}
|
{...P8P_DATA_GRID_CONFIG_PROPS}
|
||||||
columnsDef={costRouteListsOrd.columnsDef}
|
columnsDef={costRouteListsSpecs.columnsDef}
|
||||||
rows={costRouteListsOrd.rows}
|
rows={costRouteListsSpecs.rows}
|
||||||
size={P8P_DATA_GRID_SIZE.SMALL}
|
size={P8P_DATA_GRID_SIZE.SMALL}
|
||||||
morePages={costRouteListsOrd.morePages}
|
morePages={costRouteListsSpecs.morePages}
|
||||||
reloading={costRouteListsOrd.reload}
|
reloading={costRouteListsSpecs.reload}
|
||||||
onOrderChanged={handleOrderChanged}
|
onOrderChanged={handleOrderChanged}
|
||||||
onPagesCountChanged={handlePagesCountChanged}
|
onPagesCountChanged={handlePagesCountChanged}
|
||||||
/>
|
/>
|
||||||
@ -112,8 +112,8 @@ const CostRouteListsOrdDataGrid = ({ mainRowRN }) => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
//Контроль свойств - Таблица заказов маршрутного листа
|
//Контроль свойств - Таблица строк маршрутного листа
|
||||||
CostRouteListsOrdDataGrid.propTypes = {
|
CostRouteListsSpecsDataGrid.propTypes = {
|
||||||
mainRowRN: PropTypes.number.isRequired
|
mainRowRN: PropTypes.number.isRequired
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -121,4 +121,4 @@ CostRouteListsOrdDataGrid.propTypes = {
|
|||||||
//Интерфейс модуля
|
//Интерфейс модуля
|
||||||
//----------------
|
//----------------
|
||||||
|
|
||||||
export { CostRouteListsOrdDataGrid };
|
export { CostRouteListsSpecsDataGrid };
|
@ -218,7 +218,8 @@ const MechRecDeptCostProdPlans = () => {
|
|||||||
stored: "PKG_P8PANELS_MECHREC.FCPRODPLAN_DEPT_INIT",
|
stored: "PKG_P8PANELS_MECHREC.FCPRODPLAN_DEPT_INIT",
|
||||||
args: {},
|
args: {},
|
||||||
respArg: "COUT",
|
respArg: "COUT",
|
||||||
isArray: name => name === "XFCPRODPLANS"
|
isArray: name => name === "XFCPRODPLANS",
|
||||||
|
attributeValueProcessor: (name, val) => (name === "SPERIOD" ? undefined : val)
|
||||||
});
|
});
|
||||||
setState(pv => ({ ...pv, init: true, planList: [...(data?.XFCPRODPLANS || [])], planListLoaded: true }));
|
setState(pv => ({ ...pv, init: true, planList: [...(data?.XFCPRODPLANS || [])], planListLoaded: true }));
|
||||||
}
|
}
|
||||||
@ -352,7 +353,7 @@ const MechRecDeptCostProdPlans = () => {
|
|||||||
<div style={STYLES.CONTAINER}>
|
<div style={STYLES.CONTAINER}>
|
||||||
{state.dataLoaded ? (
|
{state.dataLoaded ? (
|
||||||
<Typography variant={"h6"}>
|
<Typography variant={"h6"}>
|
||||||
{`Производственный план цеха "${state.selectedPlan.SSUBDIV}" на ${state.selectedPlan.SPERIOD}`}
|
{`Производственный план цеха №${state.selectedPlan.SSUBDIV} на ${state.selectedPlan.SPERIOD}`}
|
||||||
</Typography>
|
</Typography>
|
||||||
) : null}
|
) : null}
|
||||||
<Grid container spacing={1}>
|
<Grid container spacing={1}>
|
||||||
|
@ -85,14 +85,6 @@ create or replace package PKG_P8PANELS_MECHREC as
|
|||||||
SPRIOR_PARTY in varchar -- Новое значение приоритета партии
|
SPRIOR_PARTY in varchar -- Новое значение приоритета партии
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Изменение заказа маршрутного листа */
|
|
||||||
procedure FCROUTLST_FACEACC_UPDATE
|
|
||||||
(
|
|
||||||
NFCROUTLST in number, -- Рег. номер маршрутного листа
|
|
||||||
SFACEACC_NUMB in varchar, -- Номер заказа
|
|
||||||
NFCPRODPLANSP in number -- Рег. номер строки плана
|
|
||||||
);
|
|
||||||
|
|
||||||
/* Получение таблицы маршрутных листов, связанных со спецификацией плана */
|
/* Получение таблицы маршрутных листов, связанных со спецификацией плана */
|
||||||
procedure FCROUTLST_DEPT_DG_GET
|
procedure FCROUTLST_DEPT_DG_GET
|
||||||
(
|
(
|
||||||
@ -104,8 +96,8 @@ create or replace package PKG_P8PANELS_MECHREC as
|
|||||||
COUT out clob -- Сериализованная таблица данных
|
COUT out clob -- Сериализованная таблица данных
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Получение таблицы заказов маршрутного листа */
|
/* Получение таблицы строк маршрутного листа */
|
||||||
procedure FCROUTLSTORD_DEPT_DG_GET
|
procedure FCROUTLSTSP_DEPT_DG_GET
|
||||||
(
|
(
|
||||||
NFCROUTLST in number, -- Рег. номер маршрутного листа
|
NFCROUTLST in number, -- Рег. номер маршрутного листа
|
||||||
NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0)
|
NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0)
|
||||||
@ -333,7 +325,8 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
STASK_ATTR_MEAS constant PKG_STD.TSTRING := 'meas'; -- Единица измнения
|
STASK_ATTR_MEAS constant PKG_STD.TSTRING := 'meas'; -- Единица измнения
|
||||||
|
|
||||||
/* Константы - дополнительные параметры */
|
/* Константы - дополнительные параметры */
|
||||||
SCOL_PATTERN_DATE constant PKG_STD.TSTRING := 'dd_mm_yyyy'; -- Паттерн для динамической колонки граф ("день_месяц_год")
|
SCOL_PATTERN_DATE constant PKG_STD.TSTRING := 'dd_mm_yyyy'; -- Паттерн для динамической колонки граф ("день_месяц_год")
|
||||||
|
SFCROUTLSTSP_STATE_DOMAIN constant PKG_STD.TSTRING := 'TFCROUTLSTSP_STATE'; -- Мнемокод домена состояния спецификации маршрутного листа
|
||||||
|
|
||||||
/* Константы - типовые присоединённые документы */
|
/* Константы - типовые присоединённые документы */
|
||||||
SFLINKTYPE_PREVIEW constant PKG_STD.TSTRING := 'Предпросмотр'; -- Тип ПД для изображений предпросмотра
|
SFLINKTYPE_PREVIEW constant PKG_STD.TSTRING := 'Предпросмотр'; -- Тип ПД для изображений предпросмотра
|
||||||
@ -662,7 +655,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
and T.OUT_UNITCODE = 'CostProductPlansSpecs'
|
and T.OUT_UNITCODE = 'CostProductPlansSpecs'
|
||||||
and S.RN = T.IN_DOCUMENT
|
and S.RN = T.IN_DOCUMENT
|
||||||
and P.RN = S.PRN
|
and P.RN = S.PRN
|
||||||
and P.CATEGORY = 1
|
and P.CATEGORY = NFCPRODPLAN_CATEGORY
|
||||||
and P.COMPANY = NCOMPANY
|
and P.COMPANY = NCOMPANY
|
||||||
and ROWNUM = 1;
|
and ROWNUM = 1;
|
||||||
exception
|
exception
|
||||||
@ -2744,8 +2737,6 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
is
|
is
|
||||||
RFCROUTLST FCROUTLST%rowtype; -- Запись маршрутного листа
|
RFCROUTLST FCROUTLST%rowtype; -- Запись маршрутного листа
|
||||||
begin
|
begin
|
||||||
/* Дорабатывается */
|
|
||||||
P_EXCEPTION(0, 'На стадии разработки.');
|
|
||||||
/* Проверяем нет ли лишних символов */
|
/* Проверяем нет ли лишних символов */
|
||||||
if ((SPRIOR_PARTY is not null) and (REGEXP_COUNT(SPRIOR_PARTY, '[^0123456789]+') > 0)) then
|
if ((SPRIOR_PARTY is not null) and (REGEXP_COUNT(SPRIOR_PARTY, '[^0123456789]+') > 0)) then
|
||||||
P_EXCEPTION(0, 'Значение приоритета должно быть целым числом.');
|
P_EXCEPTION(0, 'Значение приоритета должно быть целым числом.');
|
||||||
@ -2803,61 +2794,6 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
SINT_NUMB => RFCROUTLST.INT_NUMB);
|
SINT_NUMB => RFCROUTLST.INT_NUMB);
|
||||||
end FCROUTLST_PRIOR_PARTY_UPDATE;
|
end FCROUTLST_PRIOR_PARTY_UPDATE;
|
||||||
|
|
||||||
/* Изменение заказа маршрутного листа */
|
|
||||||
procedure FCROUTLST_FACEACC_UPDATE
|
|
||||||
(
|
|
||||||
NFCROUTLST in number, -- Рег. номер маршрутного листа
|
|
||||||
SFACEACC_NUMB in varchar, -- Номер заказа
|
|
||||||
NFCPRODPLANSP in number -- Рег. номер строки плана
|
|
||||||
)
|
|
||||||
is
|
|
||||||
RFCROUTLST FCROUTLST%rowtype; -- Запись маршрутного листа
|
|
||||||
NFACEACC PKG_STD.TREF; -- Рег. номер лицевого счета
|
|
||||||
|
|
||||||
/* Проверка наличия связей с другими строками плана */
|
|
||||||
function FCROUTLST_CHECK_OTHER_PROD
|
|
||||||
(
|
|
||||||
NFCROUTLST in number, -- Рег. номер маршрутного листа
|
|
||||||
NFCPRODPLANSP in number -- Рег. номер строки плана
|
|
||||||
) return number -- Наличие других связей (0 - нет, 1 - да)
|
|
||||||
is
|
|
||||||
NRESULT PKG_STD.TNUMBER; -- Наличие других связей (0 - нет, 1 - да)
|
|
||||||
begin
|
|
||||||
/* Проверка наличия других связей */
|
|
||||||
begin
|
|
||||||
select 1
|
|
||||||
into NRESULT
|
|
||||||
from DUAL
|
|
||||||
where exists (select null
|
|
||||||
from DOCLINKS D
|
|
||||||
where D.OUT_UNITCODE = 'CostRouteLists'
|
|
||||||
and D.OUT_DOCUMENT = NFCROUTLST
|
|
||||||
and D.IN_UNITCODE = 'CostProductPlansSpecs'
|
|
||||||
and D.IN_DOCUMENT <> NFCPRODPLANSP);
|
|
||||||
exception
|
|
||||||
when others then
|
|
||||||
NRESULT := 0;
|
|
||||||
end;
|
|
||||||
/* Возвращаем результат */
|
|
||||||
return NRESULT;
|
|
||||||
end FCROUTLST_CHECK_OTHER_PROD;
|
|
||||||
begin
|
|
||||||
/* Дорабатывается */
|
|
||||||
P_EXCEPTION(0, 'На стадии разработки.');
|
|
||||||
/* Считываем запись маршрутного листа */
|
|
||||||
UTL_FCROUTLST_GET(NFCROUTLST => NFCROUTLST, RFCROUTLST => RFCROUTLST);
|
|
||||||
/* Определяем рег. номер лицевого счета */
|
|
||||||
FIND_FACEACC_NUMB(NFLAG_SMART => 0,
|
|
||||||
NFLAG_OPTION => 1,
|
|
||||||
NCOMPANY => RFCROUTLST.COMPANY,
|
|
||||||
SNUMB => SFACEACC_NUMB,
|
|
||||||
NRN => NFACEACC);
|
|
||||||
/* Если есть связи с другими строками плана */
|
|
||||||
if (FCROUTLST_CHECK_OTHER_PROD(NFCROUTLST => NFCROUTLST, NFCPRODPLANSP => NFCPRODPLANSP) = 1) then
|
|
||||||
null;
|
|
||||||
end if;
|
|
||||||
end FCROUTLST_FACEACC_UPDATE;
|
|
||||||
|
|
||||||
/* Получение таблицы маршрутных листов, связанных со спецификацией плана */
|
/* Получение таблицы маршрутных листов, связанных со спецификацией плана */
|
||||||
procedure FCROUTLST_DEPT_DG_GET
|
procedure FCROUTLST_DEPT_DG_GET
|
||||||
(
|
(
|
||||||
@ -3140,8 +3076,8 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
raise;
|
raise;
|
||||||
end FCROUTLST_DEPT_DG_GET;
|
end FCROUTLST_DEPT_DG_GET;
|
||||||
|
|
||||||
/* Получение таблицы заказов маршрутного листа */
|
/* Получение таблицы строк маршрутного листа */
|
||||||
procedure FCROUTLSTORD_DEPT_DG_GET
|
procedure FCROUTLSTSP_DEPT_DG_GET
|
||||||
(
|
(
|
||||||
NFCROUTLST in number, -- Рег. номер маршрутного листа
|
NFCROUTLST in number, -- Рег. номер маршрутного листа
|
||||||
NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0)
|
NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0)
|
||||||
@ -3159,62 +3095,32 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
NROW_TO PKG_STD.TREF; -- Номер строки по
|
NROW_TO PKG_STD.TREF; -- Номер строки по
|
||||||
CSQL clob; -- Буфер для запроса
|
CSQL clob; -- Буфер для запроса
|
||||||
ICURSOR integer; -- Курсор для исполнения запроса
|
ICURSOR integer; -- Курсор для исполнения запроса
|
||||||
SPROD_ORDER PKG_STD.TSTRING; -- Заказ МЛ
|
NSTATE PKG_STD.TNUMBER; -- Состояние
|
||||||
NQUANT PKG_STD.TLNUMBER; -- Количество МЛ
|
|
||||||
NPRIOR_ORDER PKG_STD.TLNUMBER; -- Приоритет заказа МЛ
|
|
||||||
|
|
||||||
/* Проверка наличия записей спецификации "Заказы" */
|
/* Считывание текстового представления состояния строки маршрутного листа */
|
||||||
function FCROUTLSTORD_EXISTS
|
function FCROUTLSTSP_STATE_NAME_GET
|
||||||
(
|
(
|
||||||
NFCROUTLST in number -- Рег. номер маршрутного листа
|
NSTATE in number -- Состояние строки маршрутного листа
|
||||||
) return number -- Наличие записей спецификации заказы (0 - нет, 1 - да)
|
) return varchar2 -- Наименование состояния строки маршрутного листа
|
||||||
is
|
is
|
||||||
NRESULT PKG_STD.TNUMBER; -- Наличие записей спецификации заказы (0 - нет, 1 - да)
|
SRESULT PKG_STD.TSTRING; -- Наименование состояния строки маршрутного листа
|
||||||
begin
|
begin
|
||||||
/* Проверяем наличие */
|
/* Считываем наименование состояния по домену */
|
||||||
begin
|
begin
|
||||||
select 1
|
select V.NAME
|
||||||
into NRESULT
|
into SRESULT
|
||||||
from DUAL
|
from DMSDOMAINS T,
|
||||||
where exists (select null
|
DMSENUMVALUES V
|
||||||
from FCROUTLSTORD T
|
where T.CODE = SFCROUTLSTSP_STATE_DOMAIN
|
||||||
where T.PRN = NFCROUTLST
|
and V.PRN = T.RN
|
||||||
and ROWNUM = 1);
|
and V.VALUE_NUM = NSTATE;
|
||||||
exception
|
exception
|
||||||
when others then
|
when others then
|
||||||
NRESULT := 0;
|
SRESULT := null;
|
||||||
end;
|
end;
|
||||||
/* Возвращаем результат */
|
/* Возвращаем результат */
|
||||||
return NRESULT;
|
return SRESULT;
|
||||||
end FCROUTLSTORD_EXISTS;
|
end FCROUTLSTSP_STATE_NAME_GET;
|
||||||
|
|
||||||
/* Получение значений из заголовка МЛ */
|
|
||||||
procedure FCROUTLST_INFO_GET
|
|
||||||
(
|
|
||||||
NFCROUTLST in number, -- Рег. номер маршрутного листа
|
|
||||||
SPROD_ORDER out varchar2, -- Заказ
|
|
||||||
NQUANT out number, -- Количество
|
|
||||||
NPRIOR_ORDER out number -- Приоритет заказа
|
|
||||||
)
|
|
||||||
is
|
|
||||||
begin
|
|
||||||
/* Считываем информацию из заголовка */
|
|
||||||
begin
|
|
||||||
select (select F.NUMB from FACEACC F where T.FACEACC = F.RN),
|
|
||||||
T.QUANT,
|
|
||||||
T.PRIOR_ORDER
|
|
||||||
into SPROD_ORDER,
|
|
||||||
NQUANT,
|
|
||||||
NPRIOR_ORDER
|
|
||||||
from FCROUTLST T
|
|
||||||
where T.RN = NFCROUTLST;
|
|
||||||
exception
|
|
||||||
when others then
|
|
||||||
SPROD_ORDER := null;
|
|
||||||
NQUANT := null;
|
|
||||||
NPRIOR_ORDER := null;
|
|
||||||
end;
|
|
||||||
end FCROUTLST_INFO_GET;
|
|
||||||
begin
|
begin
|
||||||
/* Читем сортировки */
|
/* Читем сортировки */
|
||||||
RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS);
|
RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS);
|
||||||
@ -3232,106 +3138,151 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||||
BVISIBLE => false);
|
BVISIBLE => false);
|
||||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
SNAME => 'SPROD_ORDER',
|
SNAME => 'SSTATE',
|
||||||
SCAPTION => 'Заказ',
|
SCAPTION => 'Состояние',
|
||||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||||
BVISIBLE => true,
|
BVISIBLE => true);
|
||||||
BORDER => true);
|
|
||||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
SNAME => 'NQUANT',
|
SNAME => 'SOPER_NUMB',
|
||||||
SCAPTION => 'Количество',
|
SCAPTION => 'Номер операции',
|
||||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||||
BVISIBLE => true,
|
BVISIBLE => true);
|
||||||
BORDER => true);
|
|
||||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
SNAME => 'NPRIOR_ORDER',
|
SNAME => 'SROUTSHTSP_NAME',
|
||||||
SCAPTION => 'Приоритет заказа',
|
SCAPTION => 'Операция',
|
||||||
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||||
|
BVISIBLE => true);
|
||||||
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
|
SNAME => 'SSUBDIV',
|
||||||
|
SCAPTION => 'Цех, участок',
|
||||||
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||||
|
BVISIBLE => true);
|
||||||
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
|
SNAME => 'NQUANT_PLAN',
|
||||||
|
SCAPTION => 'План',
|
||||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||||
BVISIBLE => true,
|
BVISIBLE => true);
|
||||||
BORDER => true);
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
/* Если у маршрутного листа есть записи спецификации "Заказы" - работаем по ним */
|
SNAME => 'NQUANT_FACT',
|
||||||
if (FCROUTLSTORD_EXISTS(NFCROUTLST => NFCROUTLST) = 1) then
|
SCAPTION => 'Факт',
|
||||||
/* Обходим данные */
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||||
begin
|
BVISIBLE => true);
|
||||||
/* Добавляем подсказку совместимости */
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL);
|
SNAME => 'NT_SHT_PLAN',
|
||||||
/* Формируем запрос */
|
SCAPTION => 'Трудоемкость план',
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *');
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,');
|
BVISIBLE => true);
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW');
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,');
|
SNAME => 'NLABOUR_FACT',
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' F.NUMB SPROD_ORDER,');
|
SCAPTION => 'Трудоемкость факт',
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT NQUANT,');
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.PRIOR_ORDER NPRIOR_ORDER,');
|
BVISIBLE => true);
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCROUTLSTORD T');
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' left outer join FACEACC F on T.PROD_ORDER = F.RN');
|
SNAME => 'SMUNIT',
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.PRN = :NFCROUTLST');
|
SCAPTION => 'ЕИ трудоемкости',
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.COMPANY = :NCOMPANY');
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F');
|
BVISIBLE => true);
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO');
|
/* Обходим данные */
|
||||||
/* Учтём сортировки */
|
begin
|
||||||
PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL);
|
/* Добавляем подсказку совместимости */
|
||||||
/* Разбираем его */
|
CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL);
|
||||||
ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT');
|
/* Формируем запрос */
|
||||||
PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL);
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *');
|
||||||
/* Делаем подстановку параметров */
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,');
|
||||||
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY);
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW');
|
||||||
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM);
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,');
|
||||||
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO);
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.STATE NSTATE,');
|
||||||
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCROUTLST', NVALUE => NFCROUTLST);
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.OPER_NUMB SOPER_NUMB,');
|
||||||
/* Описываем структуру записи курсора */
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' trim(T.OPER_NUMB) || '', '' || ');
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1);
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' trim(COALESCE(( select O.NAME from FCOPERTYPES O where T.OPER_TPS = O.RN ), T.OPER_UK)) SROUTSHTSP_NAME,');
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2);
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ( select I.CODE from INS_DEPARTMENT I where T.SUBDIV = I.RN ) SSUBDIV,');
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 3);
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT_PLAN NQUANT_PLAN,');
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4);
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT_FACT NQUANT_FACT,');
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5);
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.T_SHT_PLAN NT_SHT_PLAN,');
|
||||||
/* Делаем выборку */
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.LABOUR_FACT NLABOUR_FACT,');
|
||||||
if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ( select D.MEAS_MNEMO from DICMUNTS D where T.MUNIT = D.RN ) SMUNIT');
|
||||||
null;
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCROUTLSTSP T');
|
||||||
end if;
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.PRN = :NFCROUTLST');
|
||||||
/* Обходим выбранные записи */
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.COMPANY = :NCOMPANY');
|
||||||
while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0)
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F');
|
||||||
loop
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO');
|
||||||
/* Добавляем колонки с данными */
|
/* Учтём сортировки */
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL);
|
||||||
SNAME => 'NRN',
|
/* Разбираем его */
|
||||||
ICURSOR => ICURSOR,
|
ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT');
|
||||||
NPOSITION => 1,
|
PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL);
|
||||||
BCLEAR => true);
|
/* Делаем подстановку параметров */
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY);
|
||||||
SNAME => 'SPROD_ORDER',
|
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM);
|
||||||
ICURSOR => ICURSOR,
|
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO);
|
||||||
NPOSITION => 2);
|
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCROUTLST', NVALUE => NFCROUTLST);
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, SNAME => 'NQUANT', ICURSOR => ICURSOR, NPOSITION => 3);
|
/* Описываем структуру записи курсора */
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1);
|
||||||
SNAME => 'NPRIOR_ORDER',
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 2);
|
||||||
ICURSOR => ICURSOR,
|
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3);
|
||||||
NPOSITION => 4);
|
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 4);
|
||||||
/* Добавляем строку в таблицу */
|
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 5);
|
||||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6);
|
||||||
end loop;
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 7);
|
||||||
exception
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 8);
|
||||||
when others then
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 9);
|
||||||
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
|
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 10);
|
||||||
raise;
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 11);
|
||||||
end;
|
/* Делаем выборку */
|
||||||
else
|
if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then
|
||||||
/* Считываем значения из заголовка МЛ */
|
null;
|
||||||
FCROUTLST_INFO_GET(NFCROUTLST => NFCROUTLST,
|
end if;
|
||||||
SPROD_ORDER => SPROD_ORDER,
|
/* Обходим выбранные записи */
|
||||||
NQUANT => NQUANT,
|
while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0)
|
||||||
NPRIOR_ORDER => NPRIOR_ORDER);
|
loop
|
||||||
/* Добавляем колонки с данными */
|
/* Добавляем колонки с данными */
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN', NVALUE => NFCROUTLST, BCLEAR => true);
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SPROD_ORDER', SVALUE => SPROD_ORDER);
|
SNAME => 'NRN',
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NQUANT', NVALUE => NQUANT);
|
ICURSOR => ICURSOR,
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NPRIOR_ORDER', NVALUE => NPRIOR_ORDER);
|
NPOSITION => 1,
|
||||||
/* Добавляем строку в таблицу */
|
BCLEAR => true);
|
||||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
|
/* Читаем состояние из курсора */
|
||||||
end if;
|
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 2, NVALUE => NSTATE);
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW,
|
||||||
|
SNAME => 'SSTATE',
|
||||||
|
SVALUE => FCROUTLSTSP_STATE_NAME_GET(NSTATE => NSTATE));
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
||||||
|
SNAME => 'SOPER_NUMB',
|
||||||
|
ICURSOR => ICURSOR,
|
||||||
|
NPOSITION => 3);
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
||||||
|
SNAME => 'SROUTSHTSP_NAME',
|
||||||
|
ICURSOR => ICURSOR,
|
||||||
|
NPOSITION => 4);
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SSUBDIV', ICURSOR => ICURSOR, NPOSITION => 5);
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
||||||
|
SNAME => 'NQUANT_PLAN',
|
||||||
|
ICURSOR => ICURSOR,
|
||||||
|
NPOSITION => 6);
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
||||||
|
SNAME => 'NQUANT_FACT',
|
||||||
|
ICURSOR => ICURSOR,
|
||||||
|
NPOSITION => 7);
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
||||||
|
SNAME => 'NT_SHT_PLAN',
|
||||||
|
ICURSOR => ICURSOR,
|
||||||
|
NPOSITION => 8);
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
||||||
|
SNAME => 'NLABOUR_FACT',
|
||||||
|
ICURSOR => ICURSOR,
|
||||||
|
NPOSITION => 9);
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SMUNIT', ICURSOR => ICURSOR, NPOSITION => 10);
|
||||||
|
/* Добавляем строку в таблицу */
|
||||||
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
|
||||||
|
end loop;
|
||||||
|
exception
|
||||||
|
when others then
|
||||||
|
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
|
||||||
|
raise;
|
||||||
|
end;
|
||||||
/* Сериализуем описание */
|
/* Сериализуем описание */
|
||||||
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF);
|
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF);
|
||||||
end FCROUTLSTORD_DEPT_DG_GET;
|
end FCROUTLSTSP_DEPT_DG_GET;
|
||||||
|
|
||||||
/* Получение таблицы ПиП на основании маршрутного листа, связанных со спецификацией плана */
|
/* Получение таблицы ПиП на основании маршрутного листа, связанных со спецификацией плана */
|
||||||
procedure INCOMEFROMDEPS_DEPT_DG_GET
|
procedure INCOMEFROMDEPS_DEPT_DG_GET
|
||||||
@ -3370,6 +3321,11 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
SCAPTION => 'Рег. номер',
|
SCAPTION => 'Рег. номер',
|
||||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||||
BVISIBLE => false);
|
BVISIBLE => false);
|
||||||
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
|
SNAME => 'SSTATE',
|
||||||
|
SCAPTION => 'Состояние',
|
||||||
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||||
|
BVISIBLE => true);
|
||||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
SNAME => 'SDOC_INFO',
|
SNAME => 'SDOC_INFO',
|
||||||
SCAPTION => 'Документ (тип, №, дата)',
|
SCAPTION => 'Документ (тип, №, дата)',
|
||||||
@ -3403,6 +3359,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,');
|
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 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,');
|
||||||
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SUBSTR(F_DOCSTATE_PLAN_FACT(T.DOC_STATE), 1, 20) SSTATE,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DT.DOCCODE ||');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DT.DOCCODE ||');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' '', '' || TRIM(T.DOC_PREF) ||');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' '', '' || TRIM(T.DOC_PREF) ||');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ''-'' || TRIM(T.DOC_NUMB) ||');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ''-'' || TRIM(T.DOC_NUMB) ||');
|
||||||
@ -3444,9 +3401,10 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
/* Описываем структуру записи курсора */
|
/* Описываем структуру записи курсора */
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1);
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1);
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2);
|
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 => 3);
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 4);
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4);
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5);
|
PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 5);
|
||||||
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6);
|
||||||
/* Делаем выборку */
|
/* Делаем выборку */
|
||||||
if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then
|
if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then
|
||||||
null;
|
null;
|
||||||
@ -3461,17 +3419,21 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
NPOSITION => 1,
|
NPOSITION => 1,
|
||||||
BCLEAR => true);
|
BCLEAR => true);
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
||||||
SNAME => 'SDOC_INFO',
|
SNAME => 'SSTATE',
|
||||||
ICURSOR => ICURSOR,
|
ICURSOR => ICURSOR,
|
||||||
NPOSITION => 2);
|
NPOSITION => 2);
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
||||||
|
SNAME => 'SDOC_INFO',
|
||||||
|
ICURSOR => ICURSOR,
|
||||||
|
NPOSITION => 3);
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
||||||
SNAME => 'NQUANT_FACT',
|
SNAME => 'NQUANT_FACT',
|
||||||
ICURSOR => ICURSOR,
|
ICURSOR => ICURSOR,
|
||||||
NPOSITION => 3);
|
NPOSITION => 4);
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLD(RROW => RDG_ROW,
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLD(RROW => RDG_ROW,
|
||||||
SNAME => 'DDUE_DATE',
|
SNAME => 'DDUE_DATE',
|
||||||
ICURSOR => ICURSOR,
|
ICURSOR => ICURSOR,
|
||||||
NPOSITION => 4);
|
NPOSITION => 5);
|
||||||
/* Добавляем строку в таблицу */
|
/* Добавляем строку в таблицу */
|
||||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
|
||||||
end loop;
|
end loop;
|
||||||
@ -3533,7 +3495,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
begin
|
begin
|
||||||
select F.NOMEN_MODIF
|
select F.NOMEN_MODIF
|
||||||
into NRESULT
|
into NRESULT
|
||||||
from FCPRODPLANSP T,
|
from FCPRODPLANSP T,
|
||||||
FCMATRESOURCE F
|
FCMATRESOURCE F
|
||||||
where T.RN = NFCPRODPLANSP
|
where T.RN = NFCPRODPLANSP
|
||||||
and F.RN = T.MATRES;
|
and F.RN = T.MATRES;
|
||||||
@ -3579,7 +3541,40 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
SPARENT => 'NVALUE_BY_DAYS');
|
SPARENT => 'NVALUE_BY_DAYS');
|
||||||
end loop;
|
end loop;
|
||||||
end INIT_DAYS;
|
end INIT_DAYS;
|
||||||
|
|
||||||
|
/* Расчет факта выпусков плана */
|
||||||
|
procedure FCPRODPLANSP_CALC
|
||||||
|
(
|
||||||
|
NFCPRODPLAN in number, -- Рег. номер планов и отчетов производства изделий
|
||||||
|
NCOMPANY in number -- Рег. номер организации
|
||||||
|
)
|
||||||
|
is
|
||||||
|
NIDENT PKG_STD.TREF; -- Идентификатор отмеченных записей
|
||||||
|
NTMP PKG_STD.TREF; -- Буфер
|
||||||
|
begin
|
||||||
|
/* Генерируем идентификатор отмеченных записей */
|
||||||
|
NIDENT := GEN_IDENT();
|
||||||
|
/* Цикл по записям спецификации плана */
|
||||||
|
for REC in (select T.RN from FCPRODPLANSP T where T.PRN = NFCPRODPLAN)
|
||||||
|
loop
|
||||||
|
/* Добавляем запись в отмеченные записи */
|
||||||
|
P_SELECTLIST_INSERT(NIDENT => NIDENT, NDOCUMENT => REC.RN, SUNITCODE => 'CostProductPlansSpecs', NRN => NTMP);
|
||||||
|
end loop;
|
||||||
|
/* Расчет факта */
|
||||||
|
P_FCPRODPLANSP_BASE_CALC_FACT(NCOMPANY => NCOMPANY, NIDENT => NIDENT);
|
||||||
|
/* Очистка отмеченных записей */
|
||||||
|
P_SELECTLIST_CLEAR(NIDENT => NIDENT);
|
||||||
|
exception
|
||||||
|
when others then
|
||||||
|
/* Очистка отмеченных записей */
|
||||||
|
P_SELECTLIST_CLEAR(NIDENT => NIDENT);
|
||||||
|
end FCPRODPLANSP_CALC;
|
||||||
begin
|
begin
|
||||||
|
/* Если это выбор плана */
|
||||||
|
if (NINCLUDE_DEF = 1) then
|
||||||
|
/* Расчет факта выпусков плана */
|
||||||
|
FCPRODPLANSP_CALC(NFCPRODPLAN => NFCPRODPLAN, NCOMPANY => NCOMPANY);
|
||||||
|
end if;
|
||||||
/* Читем сортировки */
|
/* Читем сортировки */
|
||||||
RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS);
|
RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS);
|
||||||
/* Преобразуем номер и размер страницы в номер строк с и по */
|
/* Преобразуем номер и размер страницы в номер строк с и по */
|
||||||
@ -3588,7 +3583,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
NROW_FROM => NROW_FROM,
|
NROW_FROM => NROW_FROM,
|
||||||
NROW_TO => NROW_TO);
|
NROW_TO => NROW_TO);
|
||||||
/* Инициализируем таблицу данных */
|
/* Инициализируем таблицу данных */
|
||||||
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 6);
|
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 7);
|
||||||
/* Описываем колонки таблицы данных */
|
/* Описываем колонки таблицы данных */
|
||||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
SNAME => 'NRN',
|
SNAME => 'NRN',
|
||||||
@ -3629,6 +3624,13 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
BVISIBLE => true,
|
BVISIBLE => true,
|
||||||
BORDER => true,
|
BORDER => true,
|
||||||
NWIDTH => 200);
|
NWIDTH => 200);
|
||||||
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
|
SNAME => 'SSUBDIV',
|
||||||
|
SCAPTION => 'Цех-получатель',
|
||||||
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||||
|
BVISIBLE => true,
|
||||||
|
BORDER => true,
|
||||||
|
NWIDTH => 180);
|
||||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
SNAME => 'NMAIN_QUANT',
|
SNAME => 'NMAIN_QUANT',
|
||||||
SCAPTION => 'План',
|
SCAPTION => 'План',
|
||||||
@ -3646,7 +3648,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
SCAPTION => 'Запущено',
|
SCAPTION => 'Запущено',
|
||||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||||
BVISIBLE => true,
|
BVISIBLE => true,
|
||||||
NWIDTH => 80);
|
NWIDTH => 90);
|
||||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
SNAME => 'NVALUE_BY_DAYS',
|
SNAME => 'NVALUE_BY_DAYS',
|
||||||
SCAPTION => 'План/факт по дням',
|
SCAPTION => 'План/факт по дням',
|
||||||
@ -3682,6 +3684,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select PORD.NUMB from FACEACC PORD where (PORD.RN = T.PROD_ORDER)) SPROD_ORDER,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select PORD.NUMB from FACEACC PORD where (PORD.RN = T.PROD_ORDER)) SPROD_ORDER,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' MRES.CODE SMATRES_CODE,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' MRES.CODE SMATRES_CODE,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' MRES."NAME" SMATRES_NAME,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' MRES."NAME" SMATRES_NAME,');
|
||||||
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select INS_D.CODE from INS_DEPARTMENT INS_D where INS_D.RN = T.SUBDIV) SSUBDIV,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.MAIN_QUANT NMAIN_QUANT,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.MAIN_QUANT NMAIN_QUANT,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.REL_FACT NREL_FACT,');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.REL_FACT NREL_FACT,');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select COALESCE(sum(F.QUANT), ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ')');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select COALESCE(sum(F.QUANT), ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ')');
|
||||||
@ -3702,6 +3705,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where P.RN = :NFCPRODPLAN');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where P.RN = :NFCPRODPLAN');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and P.COMPANY = :NCOMPANY');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and P.COMPANY = :NCOMPANY');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.PRN = P.RN');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.PRN = P.RN');
|
||||||
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.MAIN_QUANT <> ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0));
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.MATRES = MRES.RN');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.MATRES = MRES.RN');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UP I_USERPRIV_CATALOG_ROLEID)') || ' null');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UP I_USERPRIV_CATALOG_ROLEID)') || ' null');
|
||||||
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP');
|
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP');
|
||||||
@ -3744,10 +3748,11 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2);
|
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2);
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3);
|
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3);
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 4);
|
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 4);
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5);
|
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 5);
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6);
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6);
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 7);
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 7);
|
||||||
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 8);
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 8);
|
||||||
|
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 9);
|
||||||
/* Делаем выборку */
|
/* Делаем выборку */
|
||||||
if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then
|
if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then
|
||||||
null;
|
null;
|
||||||
@ -3772,18 +3777,19 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
SNAME => 'SMATRES_NAME',
|
SNAME => 'SMATRES_NAME',
|
||||||
ICURSOR => ICURSOR,
|
ICURSOR => ICURSOR,
|
||||||
NPOSITION => 4);
|
NPOSITION => 4);
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SSUBDIV', ICURSOR => ICURSOR, NPOSITION => 5);
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
||||||
SNAME => 'NMAIN_QUANT',
|
SNAME => 'NMAIN_QUANT',
|
||||||
ICURSOR => ICURSOR,
|
ICURSOR => ICURSOR,
|
||||||
NPOSITION => 5);
|
NPOSITION => 6);
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
||||||
SNAME => 'NREL_FACT',
|
SNAME => 'NREL_FACT',
|
||||||
ICURSOR => ICURSOR,
|
ICURSOR => ICURSOR,
|
||||||
NPOSITION => 6);
|
NPOSITION => 7);
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
||||||
SNAME => 'NFCROUTLST_QUANT',
|
SNAME => 'NFCROUTLST_QUANT',
|
||||||
ICURSOR => ICURSOR,
|
ICURSOR => ICURSOR,
|
||||||
NPOSITION => 7);
|
NPOSITION => 8);
|
||||||
/* Считываем рег. номер связанной спецификации из "Производственная программа" */
|
/* Считываем рег. номер связанной спецификации из "Производственная программа" */
|
||||||
NFCPRODPLANSP_MAIN := UTL_FCPRODPLANSP_MAIN_GET(NCOMPANY => NCOMPANY, NFCPRODPLANSP => NFCPRODPLANSP);
|
NFCPRODPLANSP_MAIN := UTL_FCPRODPLANSP_MAIN_GET(NCOMPANY => NCOMPANY, NFCPRODPLANSP => NFCPRODPLANSP);
|
||||||
/* Если есть связанная спецификация из производственной программы */
|
/* Если есть связанная спецификация из производственной программы */
|
||||||
@ -3798,39 +3804,54 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
NSUM_FACT := 0;
|
NSUM_FACT := 0;
|
||||||
/* Добавляем значения по графику сдачи */
|
/* Добавляем значения по графику сдачи */
|
||||||
for REC in (select TMP.DOC_DATE,
|
for REC in (select TMP.DOC_DATE,
|
||||||
COALESCE(SUM(TMP.QUANT_PLAN), 0) QUANT_PLAN,
|
COALESCE(sum(TMP.QUANT_PLAN), 0) QUANT_PLAN,
|
||||||
COALESCE(SUM(TMP.QUANT_FACT), 0) QUANT_FACT
|
COALESCE(sum(TMP.QUANT_FACT), 0) QUANT_FACT
|
||||||
from (select T.DOC_DATE,
|
from ( /* Указаны в спецификации */
|
||||||
T.QUANT_PLAN,
|
select T.DOC_DATE,
|
||||||
0 QUANT_FACT
|
T.QUANT_PLAN,
|
||||||
|
0 QUANT_FACT
|
||||||
from FCPRODPLANDLVSH T
|
from FCPRODPLANDLVSH T
|
||||||
where T.PRN = NFCPRODPLANSP
|
where T.PRN = NFCPRODPLANSP
|
||||||
and T.DOC_DATE >= DDATE_FROM
|
and T.DOC_DATE >= DDATE_FROM
|
||||||
and T.DOC_DATE <= DDATE_TO
|
and T.DOC_DATE <= DDATE_TO
|
||||||
union
|
union
|
||||||
|
/* Связаны со спецификацией плана или связанной строкой "Производственная программа" */
|
||||||
select D.WORK_DATE,
|
select D.WORK_DATE,
|
||||||
0,
|
0,
|
||||||
SUM(S.QUANT_FACT)
|
sum(S.QUANT_FACT)
|
||||||
from FCROUTLST FL,
|
from INCOMEFROMDEPS D,
|
||||||
DOCLINKS DL,
|
INCOMEFROMDEPSSPEC S
|
||||||
INCOMEFROMDEPS D,
|
where ( /* Связь по МЛ связанной строки "Производственная программа" */
|
||||||
INCOMEFROMDEPSSPEC S
|
(D.RN in (select DL.OUT_DOCUMENT
|
||||||
where FL.RN in (select SL.DOCUMENT
|
from SELECTLIST SL,
|
||||||
from SELECTLIST SL
|
FCROUTLST FL,
|
||||||
where SL.IDENT = NFCROUTLST_IDENT
|
DOCLINKS DL
|
||||||
and SL.UNITCODE = 'CostRouteLists')
|
where SL.IDENT = NFCROUTLST_IDENT
|
||||||
and FL.STATE = 1
|
and SL.UNITCODE = 'CostRouteLists'
|
||||||
and DL.IN_DOCUMENT = FL.RN
|
and FL.RN = SL.DOCUMENT
|
||||||
and DL.IN_UNITCODE = 'CostRouteLists'
|
and FL.STATE = 1
|
||||||
and DL.OUT_UNITCODE = 'IncomFromDeps'
|
and DL.IN_DOCUMENT = FL.RN
|
||||||
and D.RN = DL.OUT_DOCUMENT
|
and DL.IN_UNITCODE = 'CostRouteLists'
|
||||||
and D.DOC_STATE = 2
|
and DL.OUT_UNITCODE = 'IncomFromDeps')) or
|
||||||
|
/* Прямая связь со связанной строкой "Производственная программа" */
|
||||||
|
(D.RN in (select L.OUT_DOCUMENT
|
||||||
|
from DOCLINKS L
|
||||||
|
where L.IN_DOCUMENT = NFCPRODPLANSP_MAIN
|
||||||
|
and L.IN_UNITCODE = 'CostProductPlansSpecs'
|
||||||
|
and L.OUT_UNITCODE = 'IncomFromDeps')) or
|
||||||
|
/* Прямая связь с обрабатываемой строкой */
|
||||||
|
(D.RN in (select L.OUT_DOCUMENT
|
||||||
|
from DOCLINKS L
|
||||||
|
where L.IN_DOCUMENT = NFCPRODPLANSP
|
||||||
|
and L.IN_UNITCODE = 'CostProductPlansSpecs'
|
||||||
|
and L.OUT_UNITCODE = 'IncomFromDeps')))
|
||||||
|
and D.DOC_STATE = NFCPRODPLAN_STATUS
|
||||||
and D.WORK_DATE >= DDATE_FROM
|
and D.WORK_DATE >= DDATE_FROM
|
||||||
and D.WORK_DATE <= DDATE_TO
|
and D.WORK_DATE <= DDATE_TO
|
||||||
and S.PRN = D.RN
|
and S.PRN = D.RN
|
||||||
and S.NOMMODIF = NMODIF
|
and S.NOMMODIF = NMODIF
|
||||||
group by D.WORK_DATE) TMP
|
group by D.WORK_DATE) TMP
|
||||||
group by TMP.DOC_DATE)
|
group by TMP.DOC_DATE)
|
||||||
loop
|
loop
|
||||||
/* Добавляем значение план/факт в соответствующую колонку */
|
/* Добавляем значение план/факт в соответствующую колонку */
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW,
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW,
|
||||||
@ -3870,9 +3891,13 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
is
|
is
|
||||||
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
|
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
|
||||||
NVERSION PKG_STD.TREF; -- Версия контрагентов
|
NVERSION PKG_STD.TREF; -- Версия контрагентов
|
||||||
|
DDATE_FROM PKG_STD.TLDATE; -- Дата с
|
||||||
|
DDATE_TO PKG_STD.TLDATE; -- Дата по
|
||||||
begin
|
begin
|
||||||
/* Считываем версию контрагентов */
|
/* Считываем версию контрагентов */
|
||||||
FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'AGNLIST', NVERSION => NVERSION);
|
FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'AGNLIST', NVERSION => NVERSION);
|
||||||
|
/* Определяем период записей */
|
||||||
|
P_FIRST_LAST_DAY(DCALCDATE => sysdate, DBGNDATE => DDATE_FROM, DENDDATE => DDATE_TO);
|
||||||
/* Начинаем формирование XML */
|
/* Начинаем формирование XML */
|
||||||
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);
|
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);
|
||||||
/* Открываем корень */
|
/* Открываем корень */
|
||||||
@ -3882,7 +3907,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
DT.DOCCODE || ', ' || trim(P.PREFIX) || '-' || trim(P.NUMB) || ', ' ||
|
DT.DOCCODE || ', ' || trim(P.PREFIX) || '-' || trim(P.NUMB) || ', ' ||
|
||||||
TO_CHAR(P.DOCDATE, 'dd.mm.yyyy') SDOC_INFO,
|
TO_CHAR(P.DOCDATE, 'dd.mm.yyyy') SDOC_INFO,
|
||||||
D.CODE as SSUBDIV,
|
D.CODE as SSUBDIV,
|
||||||
E.CODE as SPERIOD
|
TO_CHAR(E.STARTDATE, 'mm.yyyy') as SPERIOD
|
||||||
from FCPRODPLAN P,
|
from FCPRODPLAN P,
|
||||||
FINSTATE FS,
|
FINSTATE FS,
|
||||||
DOCTYPES DT,
|
DOCTYPES DT,
|
||||||
@ -3891,7 +3916,6 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
where P.CATEGORY = NFCPRODPLAN_DEPT_CTGR
|
where P.CATEGORY = NFCPRODPLAN_DEPT_CTGR
|
||||||
and P.STATUS = NFCPRODPLAN_STATUS
|
and P.STATUS = NFCPRODPLAN_STATUS
|
||||||
and P.COMPANY = NCOMPANY
|
and P.COMPANY = NCOMPANY
|
||||||
and P.DOCDATE >= trunc(sysdate, 'mm')
|
|
||||||
and P.SUBDIV in (select C.DEPTRN
|
and P.SUBDIV in (select C.DEPTRN
|
||||||
from CLNPSPFM C,
|
from CLNPSPFM C,
|
||||||
CLNPSPFMTYPES CT
|
CLNPSPFMTYPES CT
|
||||||
@ -3914,6 +3938,8 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
|||||||
and D.RN = P.SUBDIV
|
and D.RN = P.SUBDIV
|
||||||
and DT.RN = P.DOCTYPE
|
and DT.RN = P.DOCTYPE
|
||||||
and E.RN = P.CALC_PERIOD
|
and E.RN = P.CALC_PERIOD
|
||||||
|
and E.STARTDATE >= DDATE_FROM
|
||||||
|
and E.ENDDATE <= DDATE_TO
|
||||||
and exists (select /*+ INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */
|
and exists (select /*+ INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */
|
||||||
null
|
null
|
||||||
from USERPRIV UP
|
from USERPRIV UP
|
||||||
|
Loading…
x
Reference in New Issue
Block a user