ЦИТК-832

This commit is contained in:
Vladislav 2024-04-24 14:16:03 +03:00
parent ae7121ac98
commit 06f0b35f92
3 changed files with 164 additions and 187 deletions

View File

@ -54,18 +54,6 @@ const EqsPrfrm = () => {
// Состояние информации о трудоёмкости // Состояние информации о трудоёмкости
const [info, setInfo] = useState({ cntP: 0, sumP: 0, cntF: 0, sumF: 0 }); const [info, setInfo] = useState({ cntP: 0, sumP: 0, cntF: 0, sumF: 0 });
// Состояние фильтра (для отладки)
// const [filter, setFilter] = useState({
// belong: "Демопример",
// prodObj: "Карьер",
// techServ: "",
// respDep: "",
// fromMonth: 1,
// fromYear: 2024,
// toMonth: 12,
// toYear: 2024
// });
// Состояние фильтра // Состояние фильтра
const [filter, setFilter] = useState({ const [filter, setFilter] = useState({
belong: "", belong: "",
@ -79,7 +67,7 @@ const EqsPrfrm = () => {
}); });
// Состояние открытия фильтра // Состояние открытия фильтра
const [filterOpen, setFilterOpen] = useState(true); const [filterOpen, setFilterOpen] = useState(true);
// Состояние данных по умолчанию для фильтра (true - для отладки) // Состояние данных по умолчанию для фильтра
const [defaultLoaded, setDefaultLoaded] = useState(false); const [defaultLoaded, setDefaultLoaded] = useState(false);
// Состояние хранения копии фильтра // Состояние хранения копии фильтра
const [filterCopy, setFilterCopy] = useState({ ...filter }); const [filterCopy, setFilterCopy] = useState({ ...filter });
@ -177,19 +165,10 @@ const EqsPrfrm = () => {
respArg: "COUT" respArg: "COUT"
}); });
setFilter(pv => ({ ...pv, belong: data.JURPERS, fromMonth: data.MONTH, fromYear: data.YEAR, toMonth: data.MONTH, toYear: data.YEAR })); setFilter(pv => ({ ...pv, belong: data.JURPERS, fromMonth: 1, fromYear: data.YEAR, toMonth: 12, toYear: data.YEAR }));
setDefaultLoaded(true); setDefaultLoaded(true);
}, [executeStored]); }, [executeStored]);
//пользовательский параметр JuridicalPerson системы
// const getJurPers = useCallback(async () => {
// const data = await executeStored({
// stored: "PKG_P8PANELS_EQUIPSRV.GET_JUR_PERS_PRM",
// respArg: "CRES"
// });
// setFilter(pv => ({ ...pv, belong: data }));
// }, [executeStored]);
// Отбор документа (ТОиР или Ремонтных ведомостей) по ячейке даты // Отбор документа (ТОиР или Ремонтных ведомостей) по ячейке даты
const showEquipSrv = async ({ date, workType, info }) => { const showEquipSrv = async ({ date, workType, info }) => {
const [techName, servKind] = info.split("_"); const [techName, servKind] = info.split("_");
@ -279,7 +258,6 @@ const EqsPrfrm = () => {
if (!refIsDeprecated) { if (!refIsDeprecated) {
if (activeRef) { if (activeRef) {
var cellRect = activeRef.getBoundingClientRect(); var cellRect = activeRef.getBoundingClientRect();
//console.log(window.scrollX + cellRect.left + activeRef.clientWidth / 2 - window.innerWidth / 2);
window.scrollTo(window.scrollX + cellRect.left + activeRef.clientWidth / 2 - window.innerWidth / 2, 0); window.scrollTo(window.scrollX + cellRect.left + activeRef.clientWidth / 2 - window.innerWidth / 2, 0);
setRidFlag(true); setRidFlag(true);
} }

View File

@ -54,53 +54,13 @@ export const headCellRender = ({ columnDef }, hClick, podr, cntP, sumP, cntF, su
stackStyle = { flexDirection: "column" }; stackStyle = { flexDirection: "column" };
} }
if (columnDef.name == "STEST") cellStyle = { display: "none" }; if (columnDef.name == "SOBJINFO") cellStyle = { display: "none" };
if (columnDef.name == "SINFO" || columnDef.name == "SINFO2") { if (columnDef.name == "SINFO" || columnDef.name == "SWRKTYPE") {
cellProps = { colSpan: 2 }; cellProps = { colSpan: 2 };
if (columnDef.name == "SINFO") cellProps = { ...cellProps, rowSpan: 2 }; if (columnDef.name == "SINFO") cellProps = { ...cellProps, rowSpan: 2 };
//if (columnDef.name == "SINFO") {
//cellStyle = { display: "none" };
// cellStyle = { ...cellStyle, padding: "unset" };
// data = (
// <Stack sx={{ justifyContent: "center" }} direction="row" width={300}>
// <Grid container>
// <Grid item xs={4}>
// Подразделение:
// </Grid>
// <Grid item xs={8}>
// {podr}
// </Grid>
// <Grid item xs={4}>
// Кол-во ремонтов, план:
// </Grid>
// <Grid item xs={2}>
// {cntP}
// </Grid>
// <Grid item xs={4}>
// Трудоемкость, час. план:
// </Grid>
// <Grid item xs={2}>
// {sumP}
// </Grid>
// <Grid item xs={4}>
// Кол-во ремонтов, факт:
// </Grid>
// <Grid item xs={2}>
// {cntF}
// </Grid>
// <Grid item xs={4}>
// Трудоемкость, час. факт:
// </Grid>
// <Grid item xs={2}>
// {sumF}
// </Grid>
// </Grid>
// </Stack>
// );
//}
} }
if (columnDef.name == "SINFO2") cellStyle = { display: "none" }; if (columnDef.name == "SWRKTYPE") cellStyle = { display: "none" };
if (columnDef.visible && DAY_NAME_REG_EXP.test(columnDef.name)) { if (columnDef.visible && DAY_NAME_REG_EXP.test(columnDef.name)) {
cellStyle = { ...cellStyle, padding: "5px", minWidth: "25px", maxWidth: "25px" }; cellStyle = { ...cellStyle, padding: "5px", minWidth: "25px", maxWidth: "25px" };
@ -119,16 +79,16 @@ export const dataCellRender = ({ row, columnDef }, showEquipSrv) => {
let cellProps = {}; let cellProps = {};
let data = " "; let data = " ";
if (row["SINFO2"] == undefined) { if (row["SWRKTYPE"] == undefined) {
if (columnDef.name == "STEST") { if (columnDef.name == "SOBJINFO") {
cellProps = { colSpan: 2 }; cellProps = { colSpan: 2 };
cellStyle = { ...cellStyle, textAlign: "right", fontWeight: "bold" }; cellStyle = { ...cellStyle, textAlign: "right", fontWeight: "bold" };
} }
if (columnDef.name == "SINFO2") cellStyle = { display: "none" }; if (columnDef.name == "SWRKTYPE") cellStyle = { display: "none" };
if (columnDef.parent == "" && columnDef.expandable == true && columnDef.expanded == false) { if (columnDef.parent == "" && columnDef.expandable == true && columnDef.expanded == false) {
curParent = columnDef.name; curParent = columnDef.name;
return { cellStyle: { ...cellStyle, height: "25px" }, data }; return { cellStyle: { ...cellStyle, height: "25px" }, data };
} else if (columnDef.name != "SINFO2" && columnDef.parent != "" && columnDef.expandable == false && columnDef.expanded == true) { } else if (columnDef.name != "SWRKTYPE" && columnDef.parent != "" && columnDef.expandable == false && columnDef.expanded == true) {
if (columnDef.name.endsWith("_1")) { if (columnDef.name.endsWith("_1")) {
curParent = columnDef.parent; curParent = columnDef.parent;
const [year, month] = curParent.substring(1).split("_"); const [year, month] = curParent.substring(1).split("_");
@ -141,39 +101,39 @@ export const dataCellRender = ({ row, columnDef }, showEquipSrv) => {
} }
} }
} }
if (columnDef.name == "STEST" && row["SINFO2"] == "План") { if (columnDef.name == "SOBJINFO" && row["SWRKTYPE"] == "План") {
cellStyle = { ...cellStyle }; cellStyle = { ...cellStyle };
cellProps = { rowSpan: 2 }; cellProps = { rowSpan: 2 };
} }
if (columnDef.name == "STEST" && row["SINFO2"] == "Факт") { if (columnDef.name == "SOBJINFO" && row["SWRKTYPE"] == "Факт") {
cellStyle = { display: "none" }; cellStyle = { display: "none" };
} }
switch (row[columnDef.name]) { switch (row[columnDef.name]) {
case "blue": case "blue":
cellStyle = { ...cellStyle, backgroundColor: "lightblue", border: "1px solid rgba(0, 0, 0) !important" }; cellStyle = { ...cellStyle, cursor: "pointer", backgroundColor: "lightblue", border: "1px solid rgba(0, 0, 0) !important" };
cellProps = { cellProps = {
title: formatDate(columnDef.name), title: formatDate(columnDef.name),
onClick: () => { onClick: () => {
showEquipSrv({ date: columnDef.name, workType: row["SINFO2"], info: row["groupName"] }); showEquipSrv({ date: columnDef.name, workType: row["SWRKTYPE"], info: row["groupName"] });
} }
}; };
return { cellStyle, cellProps, data }; return { cellStyle, cellProps, data };
case "green": case "green":
cellStyle = { ...cellStyle, backgroundColor: "green", border: "1px solid rgba(0, 0, 0) !important" }; cellStyle = { ...cellStyle, cursor: "pointer", backgroundColor: "green", border: "1px solid rgba(0, 0, 0) !important" };
cellProps = { cellProps = {
title: formatDate(columnDef.name), title: formatDate(columnDef.name),
onClick: () => { onClick: () => {
showEquipSrv({ date: columnDef.name, workType: row["SINFO2"], info: row["groupName"] }); showEquipSrv({ date: columnDef.name, workType: row["SWRKTYPE"], info: row["groupName"] });
} }
}; };
return { cellStyle, cellProps, data }; return { cellStyle, cellProps, data };
case "red": case "red":
cellStyle = { ...cellStyle, backgroundColor: "crimson", border: "1px solid rgba(0, 0, 0) !important" }; cellStyle = { ...cellStyle, cursor: "pointer", backgroundColor: "crimson", border: "1px solid rgba(0, 0, 0) !important" };
cellProps = { cellProps = {
title: formatDate(columnDef.name), title: formatDate(columnDef.name),
onClick: () => { onClick: () => {
showEquipSrv({ date: columnDef.name, workType: row["SINFO2"], info: row["groupName"] }); showEquipSrv({ date: columnDef.name, workType: row["SWRKTYPE"], info: row["groupName"] });
} }
}; };
return { cellStyle, cellProps, data }; return { cellStyle, cellProps, data };
@ -187,16 +147,16 @@ export const dataCellRender = ({ row, columnDef }, showEquipSrv) => {
<Grid <Grid
item item
xs={6} xs={6}
sx={{ backgroundColor: "green" }} sx={{ cursor: "pointer", backgroundColor: "green" }}
onClick={() => showEquipSrv({ date: columnDef.name, workType: row["SINFO2"], info: row["groupName"] })} onClick={() => showEquipSrv({ date: columnDef.name, workType: row["SWRKTYPE"], info: row["groupName"] })}
> >
<p style={{ display: "none" }}>g</p> <p style={{ display: "none" }}>g</p>
</Grid> </Grid>
<Grid <Grid
item item
xs={6} xs={6}
sx={{ backgroundColor: "crimson" }} sx={{ cursor: "pointer", backgroundColor: "crimson" }}
onClick={() => showEquipSrv({ date: columnDef.name, workType: row["SINFO2"], info: row["groupName"] })} onClick={() => showEquipSrv({ date: columnDef.name, workType: row["SWRKTYPE"], info: row["groupName"] })}
> >
<p style={{ display: "none" }}>r</p> <p style={{ display: "none" }}>r</p>
</Grid> </Grid>

View File

@ -54,10 +54,9 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
is is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
SJUR_PERS PKG_STD.TSTRING := null; -- Юр. лицо (наименование) SJUR_PERS PKG_STD.TSTRING := null; -- Юр. лицо (наименование)
NJUR_PERS PKG_STD.TREF := null; -- Юр. лицо (идентификатор)
begin begin
/* Находим юр. лицо */ /* Находим юр. лицо */
FIND_JURPERSONS_MAIN(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, SJUR_PERS => SJUR_PERS, NJUR_PERS => NJUR_PERS); SJUR_PERS := GET_OPTIONS_STR(SCODE => 'JuridicalPerson', NCOMP_VERS => NCOMPANY);
/* Формируем XML */ /* Формируем XML */
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);
PKG_XFAST.DOWN_NODE(SNAME => 'DATA'); PKG_XFAST.DOWN_NODE(SNAME => 'DATA');
@ -84,10 +83,11 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
is is
SRESULT PKG_STD.TSTRING; -- Строка результат SRESULT PKG_STD.TSTRING; -- Строка результат
begin begin
if ((mod(NHOURS, 10) = 1) and (mod(NHOURS, 100) != 11)) then if ((mod(TRUNC(NHOURS), 10) = 1) and (mod(TRUNC(NHOURS), 100) != 11)) then
SRESULT := NHOURS || ' час'; SRESULT := NHOURS || ' час';
elsif (((mod(NHOURS, 10) = 2) and (mod(NHOURS, 100) != 12)) or ((mod(NHOURS, 10) = 3) and (mod(NHOURS, 100) != 13)) or elsif (((mod(TRUNC(NHOURS), 10) = 2) and (mod(TRUNC(NHOURS), 100) != 12)) or
((mod(NHOURS, 10) = 4) and (mod(NHOURS, 100) != 14))) then ((mod(TRUNC(NHOURS), 10) = 3) and (mod(TRUNC(NHOURS), 100) != 13)) or
((mod(TRUNC(NHOURS), 10) = 4) and (mod(TRUNC(NHOURS), 100) != 14))) then
SRESULT := NHOURS || ' часа'; SRESULT := NHOURS || ' часа';
else else
SRESULT := NHOURS || ' часов'; SRESULT := NHOURS || ' часов';
@ -138,17 +138,19 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
and J.CODE = SBELONG and J.CODE = SBELONG
and T.EQCONFIG = C1.RN and T.EQCONFIG = C1.RN
and C1.CODE = SPRODOBJ and C1.CODE = SPRODOBJ
and T.DEPTTCSRV = DS.RN and T.DEPTTCSRV = DS.RN(+)
and (DS.CODE = STECHSERV or STECHSERV is null) and (DS.CODE = STECHSERV or STECHSERV is null)
and T.DEPTRESP = DR.RN and T.DEPTRESP = DR.RN(+)
and (DR.CODE = SRESPDEP or SRESPDEP is null) and (DR.CODE = SRESPDEP or SRESPDEP is null)
and T.EQCONFIG_TECH = C2.RN and T.EQCONFIG_TECH = C2.RN
and C2.NAME = STECHNAME and C2.NAME = STECHNAME
and T.EQTECSRVKIND = SK.RN and T.EQTECSRVKIND = SK.RN
and SK.CODE = SSRVKIND and SK.CODE = SSRVKIND
and ((NDAY is not null and TO_DATE(SDATE, 'dd.mm.yyyy') between TRUNC(T.DATEPRD_BEG) and and ((NDAY is not null and TO_DATE(SDATE, 'dd.mm.yyyy') between TRUNC(T.DATEPRD_BEG) and
TRUNC(T.DATEPRD_END)) or (NDAY is null and (SDATE = TO_CHAR(T.DATEPRD_BEG, 'mm.yyyy') or TRUNC(T.DATEPRD_END)) or
SDATE = TO_CHAR(T.DATEPRD_END, 'mm.yyyy'))))) (NDAY is null and TRUNC(T.DATEPRD_BEG, 'MONTH') <= TRUNC(TO_DATE(SDATE, 'mm.yyyy'), 'MONTH') and
TRUNC(TO_DATE(SDATE, 'mm.yyyy'), 'MONTH') <= TRUNC(LAST_DAY(T.DATEPRD_END)))))
loop loop
/* Сформируем идентификатор буфера */ /* Сформируем идентификатор буфера */
if (NIDENT is null) then if (NIDENT is null) then
@ -183,8 +185,9 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
and T.TECSRVKIND = SK.RN and T.TECSRVKIND = SK.RN
and SK.CODE = SSRVKIND and SK.CODE = SSRVKIND
and ((NDAY is not null and TO_DATE(SDATE, 'dd.mm.yyyy') between TRUNC(T.DATEFACT_BEG) and and ((NDAY is not null and TO_DATE(SDATE, 'dd.mm.yyyy') between TRUNC(T.DATEFACT_BEG) and
TRUNC(T.DATEFACT_END)) or (NDAY is null and (SDATE = TO_CHAR(T.DATEFACT_BEG, 'mm.yyyy') or TRUNC(T.DATEFACT_END)) or
SDATE = TO_CHAR(T.DATEFACT_END, 'mm.yyyy'))))) (NDAY is null and TRUNC(T.DATEFACT_BEG, 'MONTH') <= TRUNC(TO_DATE(SDATE, 'mm.yyyy'), 'MONTH') and
TRUNC(TO_DATE(SDATE, 'mm.yyyy'), 'MONTH') <= TRUNC(LAST_DAY(T.DATEFACT_END)))))
loop loop
/* Сформируем идентификатор буфера */ /* Сформируем идентификатор буфера */
if (NIDENT is null) then if (NIDENT is null) then
@ -245,83 +248,105 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
SFACT_CLR PKG_STD.TSTRING; -- Цвет закрашивания фактических дат SFACT_CLR PKG_STD.TSTRING; -- Цвет закрашивания фактических дат
NROWS PKG_STD.TNUMBER := 0; -- Кол-во строк в курсоре NROWS PKG_STD.TNUMBER := 0; -- Кол-во строк в курсоре
NWORKPERDAY PKG_STD.TNUMBER(17,2) := null; -- Работы в день NWORKPERDAY PKG_STD.TNUMBER(17,2) := null; -- Работы в день
SGROUP_FILLED PKG_STD.TLSTRING; -- Группы, заполненные строками план/факт
SCOLS PKG_STD.TLSTRING; -- Заполнение периодов работ
YM PKG_CONTVALLOC1S.TCONTAINER; -- Коллекция для подсчёта работ за месяц YM PKG_CONTVALLOC1S.TCONTAINER; -- Коллекция для подсчёта работ за месяц
MCLR PKG_CONTVALLOC1S.TCONTAINER; -- Коллекция для закрашивания месяцев MCLR PKG_CONTVALLOC1S.TCONTAINER; -- Коллекция для закрашивания месяцев
CR PKG_STD.TSTRING; -- Текущий ключ коллекции MCLR CR PKG_STD.TSTRING; -- Текущий ключ коллекции MCLR
GF PKG_CONTVALLOC1S.TCONTAINER; -- Коллекция заполнения групп по объекту ремонта
COLS PKG_CONTVALLOC1S.TCONTAINER; -- Коллекция закрашивания колонок
/* Курсор с работами ТОиР */ /* Курсор с работами ТОиР */
cursor C1 is cursor C1 is
select TT.NEQV_RN, select TT.NEQV_RN NEQV_RN,
TT.NEQS_RN, TT.NEQS_RN NEQS_RN,
TT.NWRK_RN NRN, TT.NWRK_RN NRN,
TT.COMPANY NCOMPANY, TT.NCOMPANY NCOMPANY,
TT.NAME_WORK SWORKNAME, TT.SNAME_WORK SWORKNAME,
EC2.CODE STECHOBJCODE, EC2.CODE STECHOBJCODE,
EC2.NAME STECHOBJNAME, EC2.NAME STECHOBJNAME,
JP.CODE SBELONG, JP.CODE SBELONG,
EC1.CODE SPRODOBJ, EC1.CODE SPRODOBJ,
DS.CODE STECHSERV, DS.CODE STECHSERV,
DR.CODE SRESPDEP, DR.CODE SRESPDEP,
TT.DATEPRD_BEG DDATEPLANBEG, TT.DDATEPRD_BEG DDATEPLANBEG,
TT.DATEPRD_END DDATEPLANEND, TT.DDATEPRD_END DDATEPLANEND,
EQJ.DATEFACT_BEG DDATEFACTBEG, EQJ.DATEFACT_BEG DDATEFACTBEG,
EQJ.DATEFACT_END DDATEFACTEND, COALESCE(EQJ.DATEFACT_END, EQJ.DATEFACT_BEG) DDATEFACTEND, --
EK.CODE STECSRVKINDCODE, EK.CODE STECSRVKINDCODE,
EK.NAME STECSRVKINDNAME, EK.NAME STECSRVKINDNAME,
COALESCE(EW.NSUM, (TT.DATEPRD_END - TT.DATEPRD_BEG) * 24) NSUMWORKPLAN, COALESCE(EW.NSUM, (TT.DDATEPRD_END - TT.DDATEPRD_BEG) * 24) NSUMWORKPLAN,
COALESCE(EWJ.NSUMF, (EQJ.DATEFACT_END - EQJ.DATEFACT_BEG) * 24) NSUMWORKFACT COALESCE(EWJ.NSUMF, (EQJ.DATEFACT_END - EQJ.DATEFACT_BEG) * 24) NSUMWORKFACT
from (select B.*, from (select B.NEQV_RN NEQV_RN,
B.NCOMPANY NCOMPANY,
B.NJUR_PERS NJUR_PERS,
B.NSTATE NSTATE,
B.DDATEPRD_BEG DDATEPRD_BEG,
B.DDATEPRD_END DDATEPRD_END,
B.NEQS_RN NEQS_RN,
C.RN NWRK_RN, C.RN NWRK_RN,
C.PRN NWRK_PRN, C.PRN NWRK_PRN,
C.NAME_WORK, C.NAME_WORK SNAME_WORK,
C.DATEPLAN_BEG, C.DATEPLAN_BEG DDATEPLAN_BEG,
C.DATEPLAN_END, C.DATEPLAN_END DDATEPLAN_END,
C.TECSRVKIND, COALESCE(C.TECSRVKIND, B.NEQTECSRVKIND) NTECSRVKIND,
C.EQCONFIG, COALESCE(C.EQCONFIG, B.NEQCONFIG_TECH) NEQCONFIG,
C.DEPTPERF, C.DEPTPERF NDEPTPERF,
C.DEPTTCSRV, C.DEPTTCSRV NDEPTTCSRV,
C.RESP_AGN C.RESP_AGN NRESP_AGN
from (select EQV.RN NEQV_RN, from (select EQV.RN NEQV_RN,
EQV.COMPANY, EQV.COMPANY NCOMPANY,
EQV.JUR_PERS, EQV.JUR_PERS NJUR_PERS,
EQV.STATE, EQV.STATE NSTATE,
EQV.DATEPRD_BEG, EQV.DATEPRD_BEG DDATEPRD_BEG,
EQV.DATEPRD_END, EQV.DATEPRD_END DDATEPRD_END,
EQV.EQTECSRVKIND NEQTECSRVKIND,
EQV.EQCONFIG_TECH NEQCONFIG_TECH,
EQS.RN NEQS_RN EQS.RN NEQS_RN
from EQTCHSRV EQV, from EQTCHSRV EQV,
JURPERSONS J,
DOCLINKS DL, DOCLINKS DL,
EQRPSHEETS EQS EQRPSHEETS EQS
where EQV.RN = DL.IN_DOCUMENT(+) where EQV.JUR_PERS = J.RN
and J.CODE = SBELONG
and EQV.RN = DL.IN_DOCUMENT(+)
and DL.OUT_UNITCODE(+) = 'EquipRepairSheets' and DL.OUT_UNITCODE(+) = 'EquipRepairSheets'
and DL.OUT_DOCUMENT = EQS.RN(+)) B, and DL.OUT_DOCUMENT = EQS.RN(+)) B,
EQTCHSRWRK C EQTCHSRWRK C
where B.NEQV_RN = C.PRN(+) where B.NEQV_RN = C.PRN(+)
union all union all
select B.*, select B.NEQV_RN NEQV_RN,
B.NCOMPANY NCOMPANY,
B.NJUR_PERS NJUR_PERS,
B.NSTATE NSTATE,
B.DDATEPLAN_BEG DDATEPLAN_BEG,
B.DDATEPLAN_END DDATEPLAN_END,
B.NEQS_RN NEQS_RN,
C.RN NWRK_RN, C.RN NWRK_RN,
C.PRN NWRK_PRN, C.PRN NWRK_PRN,
C.NAME_WORK, C.NAME_WORK SNAME_WORK,
C.DATEPLAN_BEG, C.DATEPLAN_BEG DDATEPLAN_BEG,
C.DATEPLAN_END, C.DATEPLAN_END DDATEPLAN_END,
C.TECSRVKIND, COALESCE(C.TECSRVKIND, B.NTECSRVKIND) NTECSRVKIND,
C.EQCONFIG, COALESCE(C.EQCONFIG, B.NEQCONFIG) NEQCONFIG,
C.DEPTPERF, C.DEPTPERF NDEPTPERF,
null DEPTTCSRV, null NDEPTTCSRV,
C.RESP_AGN C.RESP_AGN NRESP_AGN
from (select null NEQV_RN, from (select null NEQV_RN,
EQS.COMPANY, EQS.COMPANY NCOMPANY,
EQS.JURPERSONS JUR_PERS, EQS.JURPERSONS NJUR_PERS,
EQS.STATE, EQS.STATE NSTATE,
EQS.DATEPLAN_BEG, EQS.DATEPLAN_BEG DDATEPLAN_BEG,
EQS.DATEPLAN_END, EQS.DATEPLAN_END DDATEPLAN_END,
EQS.RN NEQS_RN EQS.RN NEQS_RN,
from EQRPSHEETS EQS EQS.EQCONFIG NEQCONFIG,
EQS.TECSRVKIND NTECSRVKIND
from EQRPSHEETS EQS,
JURPERSONS J
where not exists (select 1 where not exists (select 1
from DOCLINKS DL from DOCLINKS DL
where DL.OUT_DOCUMENT = EQS.RN where DL.OUT_DOCUMENT = EQS.RN
and DL.IN_UNITCODE = 'EquipTechServices')) B, and DL.IN_UNITCODE = 'EquipTechServices')
and EQS.JURPERSONS = J.RN
and J.CODE = SBELONG) B,
EQRPSHWRK C EQRPSHWRK C
where B.NEQS_RN = C.PRN(+)) TT, where B.NEQS_RN = C.PRN(+)) TT,
EQTECSRVKIND EK, EQTECSRVKIND EK,
@ -332,28 +357,28 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
INS_DEPARTMENT DR, INS_DEPARTMENT DR,
DOCLINKS DL, DOCLINKS DL,
EQTECSRVJRNL EQJ, EQTECSRVJRNL EQJ,
(select T.PRN, (select T.PRN NPRN,
sum(T.WORKTIMEPLAN * T.PERFORM_QUANT) NSUM sum(T.WORKTIMEPLAN * T.PERFORM_QUANT) NSUM
from EQTCHSRWRC T from EQTCHSRWRC T
group by T.PRN) EW, group by T.PRN) EW,
(select T.PRN, (select T.PRN NPRN,
sum(T.WORKTIMEFACT * T.QUANTFACT) NSUMF sum(T.WORKTIMEFACT * T.QUANTFACT) NSUMF
from EQTCHSRJRNLWRC T from EQTCHSRJRNLWRC T
group by T.PRN) EWJ group by T.PRN) EWJ
where TT.COMPANY = NCOMPANY where TT.NCOMPANY = NCOMPANY
and ((TT.STATE in (1, 2) and NEQV_RN is not null) or (TT.STATE in (0, 2, 3) and NEQV_RN is null)) and ((TT.NSTATE in (1, 2) and TT.NEQV_RN is not null) or (TT.NSTATE in (0, 2, 3) and TT.NEQV_RN is null))
and TT.DATEPRD_BEG >= NFROMDATE and TT.DDATEPRD_BEG >= NFROMDATE
and TT.DATEPRD_END <= NTODATE and TT.DDATEPRD_END <= NTODATE
and JP.CODE = SBELONG and JP.CODE = SBELONG
and EC1.CODE = SPRODOBJ and EC1.CODE = SPRODOBJ
and (DS.CODE = STECHSERV or STECHSERV is null) and (DS.CODE = STECHSERV or STECHSERV is null)
and (DR.CODE = SRESPDEP or SRESPDEP is null) and (DR.CODE = SRESPDEP or SRESPDEP is null)
and TT.EQCONFIG = EC2.RN(+) and TT.NEQCONFIG = EC2.RN(+)
and TT.DEPTPERF = DR.RN(+) and TT.NDEPTPERF = DR.RN(+)
and TT.DEPTTCSRV = DS.RN(+) and TT.NDEPTTCSRV = DS.RN(+)
and TT.NWRK_RN = EW.PRN(+) and TT.NWRK_RN = EW.NPRN(+)
and EQJ.RN = EWJ.PRN(+) and EQJ.RN = EWJ.NPRN(+)
and TT.TECSRVKIND = EK.RN(+) and TT.NTECSRVKIND = EK.RN(+)
and TT.NWRK_RN = DL.IN_DOCUMENT(+) and TT.NWRK_RN = DL.IN_DOCUMENT(+)
and ((DL.OUT_UNITCODE = 'EquipTechServiceJournal' and DL.RN is not null) or and ((DL.OUT_UNITCODE = 'EquipTechServiceJournal' and DL.RN is not null) or
(DL.OUT_UNITCODE is null and DL.RN is null)) (DL.OUT_UNITCODE is null and DL.RN is null))
@ -369,16 +394,16 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE();
/* Формируем структуру заголовка */ /* Формируем структуру заголовка */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'STEST', SNAME => 'SOBJINFO',
SCAPTION => 'ТЕСТ', SCAPTION => 'Информация по объекту ремонта',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SINFO', SNAME => 'SINFO',
SCAPTION => 'Объект ремонта', SCAPTION => 'Объект ремонта',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SINFO2', SNAME => 'SWRKTYPE',
SCAPTION => 'Объект ремонта', SCAPTION => 'Тип работ',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
SPARENT => 'SINFO'); SPARENT => 'SINFO');
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
@ -459,6 +484,8 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
/* Очистка коллекций */ /* Очистка коллекций */
PKG_CONTVALLOC1S.PURGE(RCONTAINER => YM); PKG_CONTVALLOC1S.PURGE(RCONTAINER => YM);
PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR); PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR);
PKG_CONTVALLOC1S.PURGE(RCONTAINER => GF);
PKG_CONTVALLOC1S.PURGE(RCONTAINER => COLS);
/* Текущий год */ /* Текущий год */
NCURYEAR := EXTRACT(year from sysdate); NCURYEAR := EXTRACT(year from sysdate);
/* Текущий месяц */ /* Текущий месяц */
@ -554,10 +581,12 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M); SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0, PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0,
SNAME => SPERIODNAME, SNAME => SPERIODNAME,
SVALUE => 'план: ' || SVALUE => 'план: ' || HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_P')) || SROWID => SPERIODNAME || '_P'),
' факт: ' || 1)) || ' факт: ' ||
HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_F'))); HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
SROWID => SPERIODNAME || '_F'),
1)));
/* Добавление в коллекцию трудоёмкость план */ /* Добавление в коллекцию трудоёмкость план */
PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => SPERIODNAME || '_P', NVALUE => 0); PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => SPERIODNAME || '_P', NVALUE => 0);
/* Добавление в коллекцию трудоёмкость факт */ /* Добавление в коллекцию трудоёмкость факт */
@ -575,12 +604,12 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
SCAPTION => QQ.STECHOBJNAME, SCAPTION => QQ.STECHOBJNAME,
BEXPANDABLE => false); BEXPANDABLE => false);
RDG_ROW0 := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); RDG_ROW0 := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0, SNAME => 'STEST', SVALUE => SCURTECHOBJ); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0, SNAME => 'SOBJINFO', SVALUE => SCURTECHOBJ);
end if; end if;
/* Формируем имя группы для вида ремонта */ /* Формируем имя группы для вида ремонта */
SCURTSKCODE := SCURTECHOBJ || '_' || QQ.STECSRVKINDCODE; SCURTSKCODE := SCURTECHOBJ || '_' || QQ.STECSRVKINDCODE;
/* Если по данной группе еще нет строк плана и факта */ /* Если по данной группе еще нет строк плана и факта */
if (STRIN(SSUBSTR => SCURTSKCODE, SSOURCE => SGROUP_FILLED, SDELIM => ';') = 0) then if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => GF, SROWID => SCURTSKCODE) = false) then
/* Добавляем строку плана */ /* Добавляем строку плана */
if (RDG_ROW.RCOLS is not null) then if (RDG_ROW.RCOLS is not null) then
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);
@ -607,13 +636,13 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
BEXPANDABLE => false); BEXPANDABLE => false);
/* Строка плана */ /* Строка плана */
RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'STEST', SVALUE => QQ.STECSRVKINDCODE); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SOBJINFO', SVALUE => QQ.STECSRVKINDCODE);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SINFO2', SVALUE => 'План'); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SWRKTYPE', SVALUE => 'План');
/* Строка факта */ /* Строка факта */
RDG_ROW2 := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); RDG_ROW2 := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW2, SNAME => 'SINFO2', SVALUE => 'Факт'); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW2, SNAME => 'SWRKTYPE', SVALUE => 'Факт');
/* Добавляем в заполненные группы */ /* Добавляем в заполненные группы */
SGROUP_FILLED := SGROUP_FILLED || SPRJ_GROUP_NAME || ';'; PKG_CONTVALLOC1S.PUTS(RCONTAINER => GF, SROWID => SPRJ_GROUP_NAME, SVALUE => '');
end if; end if;
/* Плановые работы */ /* Плановые работы */
if (QQ.NEQV_RN is not null) then if (QQ.NEQV_RN is not null) then
@ -634,16 +663,22 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
QQ.NSUMWORKPLAN); QQ.NSUMWORKPLAN);
end if; end if;
/* Закрашивание месяца плана синим */ /* Закрашивание месяца плана синим */
if (STRIN(SSUBSTR => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN', SSOURCE => SCOLS, SDELIM => ';') = 0) then if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => COLS, SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN') =
false) then
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => SPERIODNAME, SVALUE => 'blue'); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => SPERIODNAME, SVALUE => 'blue');
SCOLS := SCOLS || SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN;'; PKG_CONTVALLOC1S.PUTS(RCONTAINER => COLS,
SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN',
SVALUE => '');
end if; end if;
end if; end if;
SPERIODNAME := '_' || TO_CHAR(NYEAR_PLAN) || '_' || TO_CHAR(NMONTH_PLAN) || '_' || TO_CHAR(NDAY_PLAN); SPERIODNAME := '_' || TO_CHAR(NYEAR_PLAN) || '_' || TO_CHAR(NMONTH_PLAN) || '_' || TO_CHAR(NDAY_PLAN);
/* Закрашивание дня плана синим */ /* Закрашивание дня плана синим */
if (STRIN(SSUBSTR => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN', SSOURCE => SCOLS, SDELIM => ';') = 0) then if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => COLS, SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN') =
false) then
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => SPERIODNAME, SVALUE => 'blue'); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => SPERIODNAME, SVALUE => 'blue');
SCOLS := SCOLS || SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN;'; PKG_CONTVALLOC1S.PUTS(RCONTAINER => COLS,
SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN',
SVALUE => '');
end if; end if;
end loop; end loop;
end if; end if;
@ -739,12 +774,12 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M); SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0, PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0,
SNAME => SPERIODNAME, SNAME => SPERIODNAME,
SVALUE => 'план: ' || SVALUE => 'план: ' || HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
HOURS_STR(NHOURS => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, SROWID => SPERIODNAME || '_P'),
SROWID => SPERIODNAME || '_P')) || 1)) || ' факт: ' ||
' факт: ' || HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
HOURS_STR(NHOURS => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, SROWID => SPERIODNAME || '_F'),
SROWID => SPERIODNAME || '_F'))); 1)));
end loop; end loop;
end loop; end loop;
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW0); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW0);
@ -768,7 +803,11 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
end loop; end loop;
/* Сериализуем описание */ /* Сериализуем описание */
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1); COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1);
/* Очищаем контейнеры */
PKG_CONTVALLOC1S.PURGE(RCONTAINER => YM); PKG_CONTVALLOC1S.PURGE(RCONTAINER => YM);
PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR);
PKG_CONTVALLOC1S.PURGE(RCONTAINER => GF);
PKG_CONTVALLOC1S.PURGE(RCONTAINER => COLS);
end EQUIPSRV_GRID; end EQUIPSRV_GRID;
end PKG_P8PANELS_EQUIPSRV; end PKG_P8PANELS_EQUIPSRV;