2024-04-05 14:41:14 +03:00
|
|
|
|
create or replace package PKG_P8PANELS_EQUIPSRV as
|
|
|
|
|
|
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Получение параметров фильтра по умолчанию */
|
|
|
|
|
|
procedure GET_DEFAULT_FP
|
2024-04-05 14:41:14 +03:00
|
|
|
|
(
|
2024-04-17 15:57:05 +03:00
|
|
|
|
COUT out clob -- XML с параметрами фильтра по умолчанию
|
2024-04-05 14:41:14 +03:00
|
|
|
|
);
|
2024-04-24 14:16:03 +03:00
|
|
|
|
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Формирование строки с кол-вом часов */
|
2024-04-05 14:41:14 +03:00
|
|
|
|
function HOURS_STR
|
|
|
|
|
|
(
|
2024-04-17 15:57:05 +03:00
|
|
|
|
NHOURS in number -- Кол-во часов
|
|
|
|
|
|
) return varchar2; -- Результат работы
|
2024-04-24 14:16:03 +03:00
|
|
|
|
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Отбор документов (ТОиР или Графики ремонтов) по дате */
|
|
|
|
|
|
procedure SELECT_EQUIPSRV
|
|
|
|
|
|
(
|
|
|
|
|
|
SBELONG in varchar2, -- Принадлежность к Юр. лицу
|
|
|
|
|
|
SPRODOBJ in varchar2, -- Производственный объект
|
|
|
|
|
|
STECHSERV in varchar2 := null, -- Техническая служба
|
|
|
|
|
|
SRESPDEP in varchar2 := null, -- Ответственное подразделение
|
|
|
|
|
|
STECHNAME in varchar2, -- Наименование объекта ремонта
|
|
|
|
|
|
SSRVKIND in varchar2, -- Код вида ремонта
|
|
|
|
|
|
NYEAR in number, -- Год
|
|
|
|
|
|
NMONTH in number, -- Месяц
|
|
|
|
|
|
NDAY in number := null, -- День
|
|
|
|
|
|
NWORKTYPE in number, -- Тип работы (0 - план, 1 - факт)
|
|
|
|
|
|
NIDENT out number -- Идентификатор буфера подобранных (списка отмеченных записей, null - не найдено)
|
|
|
|
|
|
);
|
2024-04-24 14:16:03 +03:00
|
|
|
|
|
2024-04-05 14:41:14 +03:00
|
|
|
|
/* Выполнение работ по ТОиР */
|
|
|
|
|
|
procedure EQUIPSRV_GRID
|
|
|
|
|
|
(
|
2024-04-17 15:57:05 +03:00
|
|
|
|
SBELONG in varchar2, -- Принадлежность к Юр. лицу
|
|
|
|
|
|
SPRODOBJ in varchar2, -- Производственный объект
|
|
|
|
|
|
STECHSERV in varchar2 := null, -- Техническая служба
|
|
|
|
|
|
SRESPDEP in varchar2 := null, -- Ответственное подразделение
|
|
|
|
|
|
NFROMMONTH in number, -- Месяц начала периода
|
|
|
|
|
|
NFROMYEAR in number, -- Год начала периода
|
|
|
|
|
|
NTOMONTH in number, -- Месяц окончания периода
|
|
|
|
|
|
NTOYEAR in number, -- Год окончания периода
|
|
|
|
|
|
COUT out clob -- График проектов
|
2024-04-05 14:41:14 +03:00
|
|
|
|
);
|
2024-04-17 15:57:05 +03:00
|
|
|
|
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end PKG_P8PANELS_EQUIPSRV;
|
|
|
|
|
|
/
|
|
|
|
|
|
create or replace package body PKG_P8PANELS_EQUIPSRV as
|
|
|
|
|
|
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Получение параметров фильтра по умолчанию */
|
|
|
|
|
|
procedure GET_DEFAULT_FP
|
2024-04-05 14:41:14 +03:00
|
|
|
|
(
|
2024-04-17 15:57:05 +03:00
|
|
|
|
COUT out clob -- XML с параметрами фильтра по умолчанию
|
2024-04-05 14:41:14 +03:00
|
|
|
|
)
|
|
|
|
|
|
is
|
|
|
|
|
|
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
|
2024-04-17 15:57:05 +03:00
|
|
|
|
SJUR_PERS PKG_STD.TSTRING := null; -- Юр. лицо (наименование)
|
2024-04-05 14:41:14 +03:00
|
|
|
|
begin
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Находим юр. лицо */
|
2024-04-24 14:16:03 +03:00
|
|
|
|
SJUR_PERS := GET_OPTIONS_STR(SCODE => 'JuridicalPerson', NCOMP_VERS => NCOMPANY);
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Формируем XML */
|
|
|
|
|
|
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);
|
|
|
|
|
|
PKG_XFAST.DOWN_NODE(SNAME => 'DATA');
|
|
|
|
|
|
PKG_XFAST.DOWN_NODE(SNAME => 'JURPERS');
|
|
|
|
|
|
PKG_XFAST.VALUE(SVALUE => SJUR_PERS);
|
|
|
|
|
|
PKG_XFAST.UP();
|
|
|
|
|
|
PKG_XFAST.DOWN_NODE(SNAME => 'MONTH');
|
|
|
|
|
|
PKG_XFAST.VALUE(NVALUE => EXTRACT(month from sysdate));
|
|
|
|
|
|
PKG_XFAST.UP();
|
|
|
|
|
|
PKG_XFAST.DOWN_NODE(SNAME => 'YEAR');
|
|
|
|
|
|
PKG_XFAST.VALUE(NVALUE => EXTRACT(year from sysdate));
|
|
|
|
|
|
PKG_XFAST.UP();
|
|
|
|
|
|
PKG_XFAST.UP();
|
|
|
|
|
|
/* Сериализуем в clob */
|
|
|
|
|
|
COUT := PKG_XFAST.SERIALIZE_TO_CLOB();
|
|
|
|
|
|
PKG_XFAST.EPILOGUE();
|
|
|
|
|
|
end GET_DEFAULT_FP;
|
2024-04-24 14:16:03 +03:00
|
|
|
|
|
2024-04-05 14:41:14 +03:00
|
|
|
|
/* Формирование строки с кол-вом часов */
|
|
|
|
|
|
function HOURS_STR
|
|
|
|
|
|
(
|
|
|
|
|
|
NHOURS in number -- Кол-во часов
|
|
|
|
|
|
) return varchar2 -- Строка с кол-вом часов
|
|
|
|
|
|
is
|
2024-04-17 15:57:05 +03:00
|
|
|
|
SRESULT PKG_STD.TSTRING; -- Строка результат
|
2024-04-05 14:41:14 +03:00
|
|
|
|
begin
|
2024-04-24 14:16:03 +03:00
|
|
|
|
if ((mod(TRUNC(NHOURS), 10) = 1) and (mod(TRUNC(NHOURS), 100) != 11)) then
|
2024-04-05 14:41:14 +03:00
|
|
|
|
SRESULT := NHOURS || ' час';
|
2024-04-24 14:16:03 +03:00
|
|
|
|
elsif (((mod(TRUNC(NHOURS), 10) = 2) and (mod(TRUNC(NHOURS), 100) != 12)) or
|
|
|
|
|
|
((mod(TRUNC(NHOURS), 10) = 3) and (mod(TRUNC(NHOURS), 100) != 13)) or
|
|
|
|
|
|
((mod(TRUNC(NHOURS), 10) = 4) and (mod(TRUNC(NHOURS), 100) != 14))) then
|
2024-04-05 14:41:14 +03:00
|
|
|
|
SRESULT := NHOURS || ' часа';
|
|
|
|
|
|
else
|
|
|
|
|
|
SRESULT := NHOURS || ' часов';
|
|
|
|
|
|
end if;
|
|
|
|
|
|
return SRESULT;
|
|
|
|
|
|
end HOURS_STR;
|
2024-04-24 14:16:03 +03:00
|
|
|
|
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Отбор документов (ТОиР или Графики ремонтов) по дате */
|
|
|
|
|
|
procedure SELECT_EQUIPSRV
|
|
|
|
|
|
(
|
|
|
|
|
|
SBELONG in varchar2, -- Принадлежность к Юр. лицу
|
|
|
|
|
|
SPRODOBJ in varchar2, -- Производственный объект
|
|
|
|
|
|
STECHSERV in varchar2 := null, -- Техническая служба
|
|
|
|
|
|
SRESPDEP in varchar2 := null, -- Ответственное подразделение
|
|
|
|
|
|
STECHNAME in varchar2, -- Наименование объекта ремонта
|
|
|
|
|
|
SSRVKIND in varchar2, -- Код вида ремонта
|
|
|
|
|
|
NYEAR in number, -- Год
|
|
|
|
|
|
NMONTH in number, -- Месяц
|
|
|
|
|
|
NDAY in number := null, -- День
|
|
|
|
|
|
NWORKTYPE in number, -- Тип работы (0 - план, 1 - факт)
|
|
|
|
|
|
NIDENT out number -- Идентификатор буфера подобранных (списка отмеченных записей, null - не найдено)
|
|
|
|
|
|
)
|
|
|
|
|
|
is
|
|
|
|
|
|
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
|
|
|
|
|
|
NSELECTLIST PKG_STD.TREF; -- Рег. номер добавленной записи буфера подобранных
|
2024-04-24 14:16:03 +03:00
|
|
|
|
SDATE PKG_STD.TSTRING; -- Строка даты
|
2024-04-17 15:57:05 +03:00
|
|
|
|
begin
|
|
|
|
|
|
/* Проверка на дату с днём */
|
|
|
|
|
|
if (NDAY is not null) then
|
|
|
|
|
|
SDATE := LPAD(TO_CHAR(NDAY), 2, '0') || '.' || LPAD(TO_CHAR(NMONTH), 2, '0') || '.' || NYEAR;
|
|
|
|
|
|
else
|
|
|
|
|
|
SDATE := LPAD(TO_CHAR(NMONTH), 2, '0') || '.' || NYEAR;
|
|
|
|
|
|
end if;
|
|
|
|
|
|
/* Если графики ТОиР */
|
|
|
|
|
|
if (NWORKTYPE = 0) then
|
|
|
|
|
|
for C in (select T.RN,
|
2024-07-12 14:23:53 +03:00
|
|
|
|
T.COMPANY,
|
|
|
|
|
|
T.CRN
|
2024-04-17 15:57:05 +03:00
|
|
|
|
from EQTCHSRV T,
|
|
|
|
|
|
JURPERSONS J,
|
|
|
|
|
|
EQTECSRVKIND SK,
|
|
|
|
|
|
EQCONFIG C1,
|
|
|
|
|
|
EQCONFIG C2,
|
|
|
|
|
|
INS_DEPARTMENT DS,
|
|
|
|
|
|
INS_DEPARTMENT DR
|
|
|
|
|
|
where T.STATE in (1, 2)
|
|
|
|
|
|
and T.COMPANY = NCOMPANY
|
|
|
|
|
|
and T.JUR_PERS = J.RN
|
|
|
|
|
|
and J.CODE = SBELONG
|
|
|
|
|
|
and T.EQCONFIG = C1.RN
|
|
|
|
|
|
and C1.CODE = SPRODOBJ
|
2024-04-24 14:16:03 +03:00
|
|
|
|
and T.DEPTTCSRV = DS.RN(+)
|
2024-04-17 15:57:05 +03:00
|
|
|
|
and (DS.CODE = STECHSERV or STECHSERV is null)
|
2024-04-24 14:16:03 +03:00
|
|
|
|
and T.DEPTRESP = DR.RN(+)
|
2024-04-17 15:57:05 +03:00
|
|
|
|
and (DR.CODE = SRESPDEP or SRESPDEP is null)
|
|
|
|
|
|
and T.EQCONFIG_TECH = C2.RN
|
|
|
|
|
|
and C2.NAME = STECHNAME
|
|
|
|
|
|
and T.EQTECSRVKIND = SK.RN
|
|
|
|
|
|
and SK.CODE = SSRVKIND
|
|
|
|
|
|
and ((NDAY is not null and TO_DATE(SDATE, 'dd.mm.yyyy') between TRUNC(T.DATEPRD_BEG) and
|
2024-04-24 14:16:03 +03:00
|
|
|
|
TRUNC(T.DATEPRD_END)) or
|
|
|
|
|
|
(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)))))
|
|
|
|
|
|
|
2024-04-17 15:57:05 +03:00
|
|
|
|
loop
|
|
|
|
|
|
/* Сформируем идентификатор буфера */
|
|
|
|
|
|
if (NIDENT is null) then
|
|
|
|
|
|
NIDENT := GEN_IDENT();
|
|
|
|
|
|
end if;
|
|
|
|
|
|
/* Добавим подобранное в список отмеченных записей */
|
|
|
|
|
|
P_SELECTLIST_BASE_INSERT(NIDENT => NIDENT,
|
|
|
|
|
|
NCOMPANY => C.COMPANY,
|
|
|
|
|
|
NDOCUMENT => C.RN,
|
|
|
|
|
|
SUNITCODE => 'EquipTechServices',
|
|
|
|
|
|
SACTIONCODE => null,
|
2024-07-12 14:23:53 +03:00
|
|
|
|
NCRN => C.CRN,
|
2024-04-17 15:57:05 +03:00
|
|
|
|
NDOCUMENT1 => null,
|
|
|
|
|
|
SUNITCODE1 => null,
|
|
|
|
|
|
SACTIONCODE1 => null,
|
|
|
|
|
|
NRN => NSELECTLIST);
|
|
|
|
|
|
end loop;
|
|
|
|
|
|
/* Иначе ремонтные ведомости */
|
|
|
|
|
|
else
|
|
|
|
|
|
for C in (select T.RN,
|
2024-07-12 14:23:53 +03:00
|
|
|
|
T.COMPANY,
|
|
|
|
|
|
T.CRN
|
2024-04-17 15:57:05 +03:00
|
|
|
|
from EQRPSHEETS T,
|
|
|
|
|
|
JURPERSONS J,
|
|
|
|
|
|
EQTECSRVKIND SK,
|
|
|
|
|
|
EQCONFIG C
|
|
|
|
|
|
where T.STATE in (0, 2, 3)
|
|
|
|
|
|
and T.COMPANY = NCOMPANY
|
|
|
|
|
|
and T.JURPERSONS = J.RN
|
|
|
|
|
|
and J.CODE = SBELONG
|
|
|
|
|
|
and T.EQCONFIG = C.RN
|
|
|
|
|
|
and C.NAME = STECHNAME
|
|
|
|
|
|
and T.TECSRVKIND = SK.RN
|
|
|
|
|
|
and SK.CODE = SSRVKIND
|
|
|
|
|
|
and ((NDAY is not null and TO_DATE(SDATE, 'dd.mm.yyyy') between TRUNC(T.DATEFACT_BEG) and
|
2024-04-24 14:16:03 +03:00
|
|
|
|
TRUNC(T.DATEFACT_END)) or
|
|
|
|
|
|
(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)))))
|
2024-04-17 15:57:05 +03:00
|
|
|
|
loop
|
|
|
|
|
|
/* Сформируем идентификатор буфера */
|
|
|
|
|
|
if (NIDENT is null) then
|
|
|
|
|
|
NIDENT := GEN_IDENT();
|
|
|
|
|
|
end if;
|
|
|
|
|
|
/* Добавим подобранное в список отмеченных записей */
|
|
|
|
|
|
P_SELECTLIST_BASE_INSERT(NIDENT => NIDENT,
|
|
|
|
|
|
NCOMPANY => C.COMPANY,
|
|
|
|
|
|
NDOCUMENT => C.RN,
|
|
|
|
|
|
SUNITCODE => 'EquipRepairSheets',
|
|
|
|
|
|
SACTIONCODE => null,
|
2024-07-12 14:23:53 +03:00
|
|
|
|
NCRN => C.CRN,
|
2024-04-17 15:57:05 +03:00
|
|
|
|
NDOCUMENT1 => null,
|
|
|
|
|
|
SUNITCODE1 => null,
|
|
|
|
|
|
SACTIONCODE1 => null,
|
|
|
|
|
|
NRN => NSELECTLIST);
|
|
|
|
|
|
end loop;
|
|
|
|
|
|
end if;
|
|
|
|
|
|
end SELECT_EQUIPSRV;
|
2024-04-05 14:41:14 +03:00
|
|
|
|
|
|
|
|
|
|
/* Выполнение работ по ТОиР */
|
|
|
|
|
|
procedure EQUIPSRV_GRID
|
|
|
|
|
|
(
|
|
|
|
|
|
SBELONG in varchar2, -- Принадлежность к Юр. лицу
|
|
|
|
|
|
SPRODOBJ in varchar2, -- Производственный объект
|
2024-04-17 15:57:05 +03:00
|
|
|
|
STECHSERV in varchar2 := null, -- Техническая служба
|
|
|
|
|
|
SRESPDEP in varchar2 := null, -- Ответственное подразделение
|
2024-04-05 14:41:14 +03:00
|
|
|
|
NFROMMONTH in number, -- Месяц начала периода
|
|
|
|
|
|
NFROMYEAR in number, -- Год начала периода
|
|
|
|
|
|
NTOMONTH in number, -- Месяц окончания периода
|
|
|
|
|
|
NTOYEAR in number, -- Год окончания периода
|
|
|
|
|
|
COUT out clob -- График проектов
|
|
|
|
|
|
)
|
|
|
|
|
|
is
|
|
|
|
|
|
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
|
|
|
|
|
|
SPRJ_GROUP_NAME PKG_STD.TSTRING; -- Наименование группы для проекта
|
|
|
|
|
|
BEXPANDED boolean; -- Флаг раскрытости уровня
|
|
|
|
|
|
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы
|
2024-06-11 15:44:53 +03:00
|
|
|
|
RDG_ROW_INFO PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы с информацией по объекту ремонта
|
|
|
|
|
|
RDG_ROW_PLAN PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы с планом по объекту ремонта
|
|
|
|
|
|
RDG_ROW_FACT PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы с фактом по объекту ремонта
|
2024-04-17 15:57:05 +03:00
|
|
|
|
NCURYEAR PKG_STD.TNUMBER; -- Текущий год
|
|
|
|
|
|
NCURMONTH PKG_STD.TNUMBER; -- Текущий месяц
|
|
|
|
|
|
NTOTALDAYS PKG_STD.TNUMBER; -- Дней в текущем месяце
|
2024-04-05 14:41:14 +03:00
|
|
|
|
SCURTECHOBJ PKG_STD.TSTRING := null; -- Текущий технический объект
|
|
|
|
|
|
SCURTSKCODE PKG_STD.TSTRING := null; -- Текущий вид ремонта
|
2024-04-17 15:57:05 +03:00
|
|
|
|
NFROMDATE PKG_STD.TLDATE; -- Дата начала периода
|
|
|
|
|
|
NTODATE PKG_STD.TLDATE; -- Дата конца периода
|
|
|
|
|
|
NMS PKG_STD.TNUMBER; -- Месяц начала в цикле года
|
|
|
|
|
|
NME PKG_STD.TNUMBER; -- Месяц окончания в цикле года
|
|
|
|
|
|
NYEAR_PLAN PKG_STD.TNUMBER; -- Год план
|
|
|
|
|
|
NMONTH_PLAN PKG_STD.TNUMBER; -- Месяц план
|
|
|
|
|
|
NDAY_PLAN PKG_STD.TNUMBER; -- День план
|
|
|
|
|
|
NYEAR_FACT PKG_STD.TNUMBER; -- Год факт
|
|
|
|
|
|
NMONTH_FACT PKG_STD.TNUMBER; -- Месяц факт
|
|
|
|
|
|
NDAY_FACT PKG_STD.TNUMBER; -- День факт
|
2024-04-05 14:41:14 +03:00
|
|
|
|
SPERIODNAME PKG_STD.TSTRING; -- Имя периода
|
|
|
|
|
|
SFACT_CLR PKG_STD.TSTRING; -- Цвет закрашивания фактических дат
|
2024-04-24 14:16:03 +03:00
|
|
|
|
NROWS PKG_STD.TNUMBER := 0; -- Кол-во строк в курсоре
|
|
|
|
|
|
NWORKPERDAY PKG_STD.TNUMBER(17,2) := null; -- Работы в день
|
2024-04-17 15:57:05 +03:00
|
|
|
|
YM PKG_CONTVALLOC1S.TCONTAINER; -- Коллекция для подсчёта работ за месяц
|
|
|
|
|
|
MCLR PKG_CONTVALLOC1S.TCONTAINER; -- Коллекция для закрашивания месяцев
|
|
|
|
|
|
CR PKG_STD.TSTRING; -- Текущий ключ коллекции MCLR
|
2024-04-24 14:16:03 +03:00
|
|
|
|
GF PKG_CONTVALLOC1S.TCONTAINER; -- Коллекция заполнения групп по объекту ремонта
|
|
|
|
|
|
COLS PKG_CONTVALLOC1S.TCONTAINER; -- Коллекция закрашивания колонок
|
|
|
|
|
|
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Курсор с работами ТОиР */
|
2024-04-05 14:41:14 +03:00
|
|
|
|
cursor C1 is
|
2024-04-24 14:16:03 +03:00
|
|
|
|
select TT.NEQV_RN NEQV_RN,
|
|
|
|
|
|
TT.NEQS_RN NEQS_RN,
|
2024-04-17 15:57:05 +03:00
|
|
|
|
TT.NWRK_RN NRN,
|
2024-04-24 14:16:03 +03:00
|
|
|
|
TT.NCOMPANY NCOMPANY,
|
|
|
|
|
|
TT.SNAME_WORK SWORKNAME,
|
2024-04-05 14:41:14 +03:00
|
|
|
|
EC2.CODE STECHOBJCODE,
|
|
|
|
|
|
EC2.NAME STECHOBJNAME,
|
|
|
|
|
|
JP.CODE SBELONG,
|
|
|
|
|
|
EC1.CODE SPRODOBJ,
|
|
|
|
|
|
DS.CODE STECHSERV,
|
|
|
|
|
|
DR.CODE SRESPDEP,
|
2024-04-24 14:16:03 +03:00
|
|
|
|
TT.DDATEPRD_BEG DDATEPLANBEG,
|
|
|
|
|
|
TT.DDATEPRD_END DDATEPLANEND,
|
2024-04-05 14:41:14 +03:00
|
|
|
|
EQJ.DATEFACT_BEG DDATEFACTBEG,
|
2024-06-11 15:44:53 +03:00
|
|
|
|
COALESCE(EQJ.DATEFACT_END, EQJ.DATEFACT_BEG) DDATEFACTEND,
|
2024-04-05 14:41:14 +03:00
|
|
|
|
EK.CODE STECSRVKINDCODE,
|
|
|
|
|
|
EK.NAME STECSRVKINDNAME,
|
2024-04-24 14:16:03 +03:00
|
|
|
|
COALESCE(EW.NSUM, (TT.DDATEPRD_END - TT.DDATEPRD_BEG) * 24) NSUMWORKPLAN,
|
2024-04-17 15:57:05 +03:00
|
|
|
|
COALESCE(EWJ.NSUMF, (EQJ.DATEFACT_END - EQJ.DATEFACT_BEG) * 24) NSUMWORKFACT
|
2024-04-24 14:16:03 +03:00
|
|
|
|
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.PRN NWRK_PRN,
|
|
|
|
|
|
C.NAME_WORK SNAME_WORK,
|
|
|
|
|
|
C.DATEPLAN_BEG DDATEPLAN_BEG,
|
|
|
|
|
|
C.DATEPLAN_END DDATEPLAN_END,
|
|
|
|
|
|
COALESCE(C.TECSRVKIND, B.NEQTECSRVKIND) NTECSRVKIND,
|
|
|
|
|
|
COALESCE(C.EQCONFIG, B.NEQCONFIG_TECH) NEQCONFIG,
|
|
|
|
|
|
C.DEPTPERF NDEPTPERF,
|
|
|
|
|
|
C.DEPTTCSRV NDEPTTCSRV,
|
|
|
|
|
|
C.RESP_AGN NRESP_AGN
|
|
|
|
|
|
from (select EQV.RN NEQV_RN,
|
|
|
|
|
|
EQV.COMPANY NCOMPANY,
|
|
|
|
|
|
EQV.JUR_PERS NJUR_PERS,
|
|
|
|
|
|
EQV.STATE NSTATE,
|
|
|
|
|
|
EQV.DATEPRD_BEG DDATEPRD_BEG,
|
|
|
|
|
|
EQV.DATEPRD_END DDATEPRD_END,
|
|
|
|
|
|
EQV.EQTECSRVKIND NEQTECSRVKIND,
|
|
|
|
|
|
EQV.EQCONFIG_TECH NEQCONFIG_TECH,
|
|
|
|
|
|
EQS.RN NEQS_RN
|
2024-04-17 15:57:05 +03:00
|
|
|
|
from EQTCHSRV EQV,
|
2024-04-24 14:16:03 +03:00
|
|
|
|
JURPERSONS J,
|
2024-07-12 14:23:53 +03:00
|
|
|
|
EQCONFIG EC,
|
2024-04-17 15:57:05 +03:00
|
|
|
|
DOCLINKS DL,
|
|
|
|
|
|
EQRPSHEETS EQS
|
2024-04-24 14:16:03 +03:00
|
|
|
|
where EQV.JUR_PERS = J.RN
|
|
|
|
|
|
and J.CODE = SBELONG
|
2024-07-12 14:23:53 +03:00
|
|
|
|
and EQV.EQCONFIG = EC.RN
|
|
|
|
|
|
and EC.CODE = SPRODOBJ
|
2024-04-24 14:16:03 +03:00
|
|
|
|
and EQV.RN = DL.IN_DOCUMENT(+)
|
2024-04-17 15:57:05 +03:00
|
|
|
|
and DL.OUT_UNITCODE(+) = 'EquipRepairSheets'
|
|
|
|
|
|
and DL.OUT_DOCUMENT = EQS.RN(+)) B,
|
2024-04-05 14:41:14 +03:00
|
|
|
|
EQTCHSRWRK C
|
2024-04-17 15:57:05 +03:00
|
|
|
|
where B.NEQV_RN = C.PRN(+)
|
|
|
|
|
|
union all
|
2024-04-24 14:16:03 +03:00
|
|
|
|
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.PRN NWRK_PRN,
|
|
|
|
|
|
C.NAME_WORK SNAME_WORK,
|
|
|
|
|
|
C.DATEPLAN_BEG DDATEPLAN_BEG,
|
|
|
|
|
|
C.DATEPLAN_END DDATEPLAN_END,
|
|
|
|
|
|
COALESCE(C.TECSRVKIND, B.NTECSRVKIND) NTECSRVKIND,
|
|
|
|
|
|
COALESCE(C.EQCONFIG, B.NEQCONFIG) NEQCONFIG,
|
|
|
|
|
|
C.DEPTPERF NDEPTPERF,
|
|
|
|
|
|
null NDEPTTCSRV,
|
|
|
|
|
|
C.RESP_AGN NRESP_AGN
|
2024-04-17 15:57:05 +03:00
|
|
|
|
from (select null NEQV_RN,
|
2024-04-24 14:16:03 +03:00
|
|
|
|
EQS.COMPANY NCOMPANY,
|
|
|
|
|
|
EQS.JURPERSONS NJUR_PERS,
|
|
|
|
|
|
EQS.STATE NSTATE,
|
|
|
|
|
|
EQS.DATEPLAN_BEG DDATEPLAN_BEG,
|
|
|
|
|
|
EQS.DATEPLAN_END DDATEPLAN_END,
|
|
|
|
|
|
EQS.RN NEQS_RN,
|
|
|
|
|
|
EQS.EQCONFIG NEQCONFIG,
|
|
|
|
|
|
EQS.TECSRVKIND NTECSRVKIND
|
|
|
|
|
|
from EQRPSHEETS EQS,
|
2024-07-12 14:23:53 +03:00
|
|
|
|
JURPERSONS J,
|
|
|
|
|
|
EQCONFIG EC
|
2024-04-17 15:57:05 +03:00
|
|
|
|
where not exists (select 1
|
|
|
|
|
|
from DOCLINKS DL
|
|
|
|
|
|
where DL.OUT_DOCUMENT = EQS.RN
|
2024-04-24 14:16:03 +03:00
|
|
|
|
and DL.IN_UNITCODE = 'EquipTechServices')
|
|
|
|
|
|
and EQS.JURPERSONS = J.RN
|
2024-07-12 14:23:53 +03:00
|
|
|
|
and J.CODE = SBELONG
|
|
|
|
|
|
and EQS.EQCONFIG = EC.RN
|
|
|
|
|
|
and EC.CODE = SPRODOBJ) B,
|
2024-04-05 14:41:14 +03:00
|
|
|
|
EQRPSHWRK C
|
2024-04-17 15:57:05 +03:00
|
|
|
|
where B.NEQS_RN = C.PRN(+)) TT,
|
2024-04-05 14:41:14 +03:00
|
|
|
|
EQTECSRVKIND EK,
|
|
|
|
|
|
JURPERSONS JP,
|
|
|
|
|
|
EQCONFIG EC1,
|
|
|
|
|
|
EQCONFIG EC2,
|
|
|
|
|
|
INS_DEPARTMENT DS,
|
|
|
|
|
|
INS_DEPARTMENT DR,
|
|
|
|
|
|
DOCLINKS DL,
|
|
|
|
|
|
EQTECSRVJRNL EQJ,
|
2024-04-24 14:16:03 +03:00
|
|
|
|
(select T.PRN NPRN,
|
2024-04-17 15:57:05 +03:00
|
|
|
|
sum(T.WORKTIMEPLAN * T.PERFORM_QUANT) NSUM
|
|
|
|
|
|
from EQTCHSRWRC T
|
|
|
|
|
|
group by T.PRN) EW,
|
2024-04-24 14:16:03 +03:00
|
|
|
|
(select T.PRN NPRN,
|
2024-04-17 15:57:05 +03:00
|
|
|
|
sum(T.WORKTIMEFACT * T.QUANTFACT) NSUMF
|
|
|
|
|
|
from EQTCHSRJRNLWRC T
|
|
|
|
|
|
group by T.PRN) EWJ
|
2024-04-24 14:16:03 +03:00
|
|
|
|
where TT.NCOMPANY = NCOMPANY
|
|
|
|
|
|
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.DDATEPRD_BEG >= NFROMDATE
|
|
|
|
|
|
and TT.DDATEPRD_END <= NTODATE
|
2024-04-05 14:41:14 +03:00
|
|
|
|
and JP.CODE = SBELONG
|
|
|
|
|
|
and EC1.CODE = SPRODOBJ
|
|
|
|
|
|
and (DS.CODE = STECHSERV or STECHSERV is null)
|
|
|
|
|
|
and (DR.CODE = SRESPDEP or SRESPDEP is null)
|
2024-04-24 14:16:03 +03:00
|
|
|
|
and TT.NEQCONFIG = EC2.RN(+)
|
|
|
|
|
|
and TT.NDEPTPERF = DR.RN(+)
|
|
|
|
|
|
and TT.NDEPTTCSRV = DS.RN(+)
|
|
|
|
|
|
and TT.NWRK_RN = EW.NPRN(+)
|
|
|
|
|
|
and EQJ.RN = EWJ.NPRN(+)
|
|
|
|
|
|
and TT.NTECSRVKIND = EK.RN(+)
|
2024-04-17 15:57:05 +03:00
|
|
|
|
and TT.NWRK_RN = DL.IN_DOCUMENT(+)
|
|
|
|
|
|
and ((DL.OUT_UNITCODE = 'EquipTechServiceJournal' and DL.RN is not null) or
|
|
|
|
|
|
(DL.OUT_UNITCODE is null and DL.RN is null))
|
|
|
|
|
|
and DL.OUT_DOCUMENT = EQJ.RN(+)
|
|
|
|
|
|
order by EC2.NAME,
|
|
|
|
|
|
EK.CODE;
|
2024-04-05 14:41:14 +03:00
|
|
|
|
begin
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Определим дату начала периода */
|
|
|
|
|
|
NFROMDATE := TO_DATE('01.' || LPAD(TO_CHAR(NFROMMONTH), 2, '0') || '.' || TO_CHAR(NFROMYEAR), 'dd.mm.yyyy');
|
|
|
|
|
|
/* Определим дату конца периода */
|
|
|
|
|
|
NTODATE := LAST_DAY(TO_DATE('01.' || LPAD(TO_CHAR(NTOMONTH), 2, '0') || '.' || TO_CHAR(NTOYEAR), 'dd.mm.yyyy'));
|
2024-04-05 14:41:14 +03:00
|
|
|
|
/* Инициализируем таблицу данных */
|
2024-07-26 15:03:26 +03:00
|
|
|
|
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 2);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
/* Формируем структуру заголовка */
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
2024-04-24 14:16:03 +03:00
|
|
|
|
SNAME => 'SOBJINFO',
|
|
|
|
|
|
SCAPTION => 'Информация по объекту ремонта',
|
2024-07-26 15:03:26 +03:00
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
|
|
|
|
|
NWIDTH => 80);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => 'SINFO',
|
2024-04-17 15:57:05 +03:00
|
|
|
|
SCAPTION => 'Объект ремонта',
|
2024-07-26 15:03:26 +03:00
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
|
|
|
|
|
NWIDTH => 80);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
2024-04-24 14:16:03 +03:00
|
|
|
|
SNAME => 'SWRKTYPE',
|
|
|
|
|
|
SCAPTION => 'Тип работ',
|
2024-04-05 14:41:14 +03:00
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
2024-07-26 15:03:26 +03:00
|
|
|
|
SPARENT => 'SINFO',
|
|
|
|
|
|
NWIDTH => 80);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => 'NRN',
|
|
|
|
|
|
SCAPTION => 'Рег. номер',
|
|
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
|
|
|
|
|
BVISIBLE => false);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => 'SWORKNAME',
|
|
|
|
|
|
SCAPTION => 'Наименование работы',
|
|
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
|
|
|
|
|
BVISIBLE => false);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => 'STECHOBJCODE',
|
|
|
|
|
|
SCAPTION => 'Код тех. объекта',
|
|
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
|
|
|
|
|
BVISIBLE => false);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => 'STECHOBJNAME',
|
|
|
|
|
|
SCAPTION => 'Наименование тех. объекта',
|
|
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
|
|
|
|
|
BVISIBLE => false);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => 'SBELONG',
|
|
|
|
|
|
SCAPTION => 'Принадлежность',
|
|
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
|
|
|
|
|
BVISIBLE => false);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => 'SPRODOBJ',
|
|
|
|
|
|
SCAPTION => 'Производственный объект',
|
|
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
|
|
|
|
|
BVISIBLE => false);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => 'STECHSERV',
|
|
|
|
|
|
SCAPTION => 'Тех. служба',
|
|
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
|
|
|
|
|
BVISIBLE => false);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => 'SRESPDEP',
|
|
|
|
|
|
SCAPTION => 'Отвественное подразделение',
|
|
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
|
|
|
|
|
BVISIBLE => false);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => 'STECSERVCODE',
|
|
|
|
|
|
SCAPTION => 'Вид ремонта',
|
|
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
|
|
|
|
|
BVISIBLE => false);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => 'DDATEPLANBEG',
|
|
|
|
|
|
SCAPTION => 'Начало работы (план)',
|
|
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
|
|
|
|
|
|
BVISIBLE => false);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => 'DDATEPLANEND',
|
|
|
|
|
|
SCAPTION => 'Окончание работы (план)',
|
|
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
|
|
|
|
|
|
BVISIBLE => false);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => 'DDATEFACTBEG',
|
|
|
|
|
|
SCAPTION => 'Начало работы (факт)',
|
|
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
|
|
|
|
|
|
BVISIBLE => false);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => 'DDATEFACTEND',
|
|
|
|
|
|
SCAPTION => 'Окончание работы (факт)',
|
|
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
|
|
|
|
|
|
BVISIBLE => false);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => 'STECSRVKINDCODE',
|
|
|
|
|
|
SCAPTION => 'Код типа работы',
|
|
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
|
|
|
|
|
BVISIBLE => false);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => 'STECSRVKINDNAME',
|
|
|
|
|
|
SCAPTION => 'Наименование типа работы',
|
|
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
2024-04-17 15:57:05 +03:00
|
|
|
|
BVISIBLE => false);
|
|
|
|
|
|
/* Очистка коллекций */
|
|
|
|
|
|
PKG_CONTVALLOC1S.PURGE(RCONTAINER => YM);
|
|
|
|
|
|
PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR);
|
2024-04-24 14:16:03 +03:00
|
|
|
|
PKG_CONTVALLOC1S.PURGE(RCONTAINER => GF);
|
|
|
|
|
|
PKG_CONTVALLOC1S.PURGE(RCONTAINER => COLS);
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Текущий год */
|
2024-04-05 14:41:14 +03:00
|
|
|
|
NCURYEAR := EXTRACT(year from sysdate);
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Текущий месяц */
|
|
|
|
|
|
NCURMONTH := EXTRACT(month from sysdate);
|
|
|
|
|
|
/* Цикл по годам периода */
|
2024-04-05 14:41:14 +03:00
|
|
|
|
for Y in NFROMYEAR .. NTOYEAR
|
|
|
|
|
|
loop
|
|
|
|
|
|
if (NFROMYEAR = NTOYEAR) then
|
|
|
|
|
|
NMS := NFROMMONTH;
|
|
|
|
|
|
NME := NTOMONTH;
|
|
|
|
|
|
else
|
|
|
|
|
|
if (Y = NFROMYEAR) then
|
|
|
|
|
|
NMS := NFROMMONTH;
|
|
|
|
|
|
NME := 12;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
elsif ((NFROMYEAR < Y) and (Y < NTOYEAR)) then
|
2024-04-05 14:41:14 +03:00
|
|
|
|
NMS := 1;
|
|
|
|
|
|
NME := 12;
|
|
|
|
|
|
elsif (Y = NTOYEAR) then
|
|
|
|
|
|
NMS := 1;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
NME := NTOMONTH;
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end if;
|
|
|
|
|
|
end if;
|
|
|
|
|
|
/* Цикл по месяцам года */
|
|
|
|
|
|
for M in NMS .. NME
|
|
|
|
|
|
loop
|
2024-04-17 15:57:05 +03:00
|
|
|
|
PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_P', NVALUE => 0);
|
|
|
|
|
|
PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_F', NVALUE => 0);
|
|
|
|
|
|
/* Находим текущий месяц и делаем его развёрнутым по дням */
|
|
|
|
|
|
if ((Y = NCURYEAR) and (M = NCURMONTH)) then
|
2024-04-05 14:41:14 +03:00
|
|
|
|
BEXPANDED := true;
|
|
|
|
|
|
else
|
|
|
|
|
|
BEXPANDED := false;
|
|
|
|
|
|
end if;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M),
|
|
|
|
|
|
SCAPTION => LPAD(TO_CHAR(M), 2, '0') || ' ' || TO_CHAR(Y),
|
|
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
2024-04-05 14:41:14 +03:00
|
|
|
|
BEXPANDABLE => true,
|
2024-04-17 15:57:05 +03:00
|
|
|
|
BEXPANDED => BEXPANDED);
|
|
|
|
|
|
/* Подсчёт кол-ва дней в месяце */
|
|
|
|
|
|
NTOTALDAYS := TO_NUMBER(TO_CHAR(LAST_DAY(TO_DATE('01.' || LPAD(TO_CHAR(M), 2, '0') || '.' || TO_CHAR(Y),
|
|
|
|
|
|
'dd.mm.yyyy')),
|
|
|
|
|
|
'dd'),
|
|
|
|
|
|
'99');
|
2024-04-05 14:41:14 +03:00
|
|
|
|
/* Цикл по дням месяца */
|
|
|
|
|
|
for D in 1 .. NTOTALDAYS
|
|
|
|
|
|
loop
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
2024-04-17 15:57:05 +03:00
|
|
|
|
SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_' ||
|
|
|
|
|
|
TO_CHAR(D),
|
2024-04-05 14:41:14 +03:00
|
|
|
|
SCAPTION => TO_CHAR(D, '99'),
|
|
|
|
|
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
|
|
|
|
|
SPARENT => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M));
|
|
|
|
|
|
end loop;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
end loop;
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end loop;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Подсчёт кол-ва записей в курсоре */
|
2024-04-05 14:41:14 +03:00
|
|
|
|
for Q1 in C1
|
|
|
|
|
|
loop
|
|
|
|
|
|
NROWS := NROWS + 1;
|
|
|
|
|
|
end loop;
|
|
|
|
|
|
/* Цикл по курсору */
|
|
|
|
|
|
for QQ in C1
|
|
|
|
|
|
loop
|
|
|
|
|
|
NROWS := NROWS - 1;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Если новый объект ремонта */
|
|
|
|
|
|
if ((SCURTECHOBJ != QQ.STECHOBJNAME) or (SCURTECHOBJ is null)) then
|
|
|
|
|
|
/* Если строка с трудоёмкостью по объекту ремонта сформирована */
|
2024-06-11 15:44:53 +03:00
|
|
|
|
if (RDG_ROW_INFO.RCOLS is not null) then
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Цикл по годам периода */
|
2024-04-05 14:41:14 +03:00
|
|
|
|
for Y in NFROMYEAR .. NTOYEAR
|
|
|
|
|
|
loop
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Если отчёт в пределах года */
|
2024-04-05 14:41:14 +03:00
|
|
|
|
if (NFROMYEAR = NTOYEAR) then
|
|
|
|
|
|
NMS := NFROMMONTH;
|
|
|
|
|
|
NME := NTOMONTH;
|
2024-06-11 15:44:53 +03:00
|
|
|
|
/* Иначе вычисляем кол-во месяцев в каждом году периода отчёта */
|
2024-04-05 14:41:14 +03:00
|
|
|
|
else
|
|
|
|
|
|
if (Y = NFROMYEAR) then
|
|
|
|
|
|
NMS := NFROMMONTH;
|
|
|
|
|
|
NME := 12;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
elsif ((NFROMYEAR < Y) and (Y < NTOYEAR)) then
|
2024-04-05 14:41:14 +03:00
|
|
|
|
NMS := 1;
|
|
|
|
|
|
NME := 12;
|
|
|
|
|
|
elsif (Y = NTOYEAR) then
|
|
|
|
|
|
NMS := 1;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
NME := NTOMONTH;
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end if;
|
|
|
|
|
|
end if;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Цикл по месяцам года, заполнение трудоёмкости с привязкой к месяцу */
|
2024-04-05 14:41:14 +03:00
|
|
|
|
for M in NMS .. NME
|
|
|
|
|
|
loop
|
|
|
|
|
|
SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M);
|
2024-06-11 15:44:53 +03:00
|
|
|
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_INFO,
|
2024-04-17 15:57:05 +03:00
|
|
|
|
SNAME => SPERIODNAME,
|
2024-04-24 14:16:03 +03:00
|
|
|
|
SVALUE => 'план: ' || HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
|
|
|
|
|
|
SROWID => SPERIODNAME || '_P'),
|
|
|
|
|
|
1)) || ' факт: ' ||
|
|
|
|
|
|
HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
|
|
|
|
|
|
SROWID => SPERIODNAME || '_F'),
|
|
|
|
|
|
1)));
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Добавление в коллекцию трудоёмкость план */
|
|
|
|
|
|
PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => SPERIODNAME || '_P', NVALUE => 0);
|
|
|
|
|
|
/* Добавление в коллекцию трудоёмкость факт */
|
|
|
|
|
|
PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => SPERIODNAME || '_F', NVALUE => 0);
|
|
|
|
|
|
end loop;
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end loop;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Добавление строки с трудоёмкостью */
|
2024-06-11 15:44:53 +03:00
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_INFO);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end if;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Добавление группы с объектом ремонта */
|
|
|
|
|
|
SCURTECHOBJ := QQ.STECHOBJNAME;
|
2024-04-05 14:41:14 +03:00
|
|
|
|
SPRJ_GROUP_NAME := SCURTECHOBJ;
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => SPRJ_GROUP_NAME,
|
|
|
|
|
|
SCAPTION => QQ.STECHOBJNAME,
|
2024-04-17 15:57:05 +03:00
|
|
|
|
BEXPANDABLE => false);
|
2024-06-11 15:44:53 +03:00
|
|
|
|
RDG_ROW_INFO := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_INFO, SNAME => 'SOBJINFO', SVALUE => SCURTECHOBJ);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end if;
|
|
|
|
|
|
/* Формируем имя группы для вида ремонта */
|
|
|
|
|
|
SCURTSKCODE := SCURTECHOBJ || '_' || QQ.STECSRVKINDCODE;
|
|
|
|
|
|
/* Если по данной группе еще нет строк плана и факта */
|
2024-04-24 14:16:03 +03:00
|
|
|
|
if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => GF, SROWID => SCURTSKCODE) = false) then
|
2024-04-05 14:41:14 +03:00
|
|
|
|
/* Добавляем строку плана */
|
2024-06-11 15:44:53 +03:00
|
|
|
|
if (RDG_ROW_PLAN.RCOLS is not null) then
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_PLAN);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end if;
|
|
|
|
|
|
/* Добавляем строку факта */
|
2024-06-11 15:44:53 +03:00
|
|
|
|
if (RDG_ROW_FACT.RCOLS is not null) then
|
2024-04-17 15:57:05 +03:00
|
|
|
|
CR := PKG_CONTVALLOC1S.FIRST_(RCONTAINER => MCLR);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
/* Цикл по коллекции для закрашивания месяцев */
|
2024-04-17 15:57:05 +03:00
|
|
|
|
for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(RCONTAINER => MCLR)
|
2024-04-05 14:41:14 +03:00
|
|
|
|
loop
|
2024-06-11 15:44:53 +03:00
|
|
|
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_FACT,
|
2024-04-17 15:57:05 +03:00
|
|
|
|
SNAME => CR,
|
|
|
|
|
|
SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => CR));
|
|
|
|
|
|
CR := PKG_CONTVALLOC1S.NEXT_(RCONTAINER => MCLR, SROWID => CR);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end loop;
|
2024-06-11 15:44:53 +03:00
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_FACT);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end if;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
/* Добвим группу для вида ремонта */
|
|
|
|
|
|
SPRJ_GROUP_NAME := SCURTSKCODE;
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG,
|
|
|
|
|
|
SNAME => SPRJ_GROUP_NAME,
|
|
|
|
|
|
SCAPTION => QQ.STECSRVKINDCODE,
|
|
|
|
|
|
BEXPANDABLE => false);
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Строка плана */
|
2024-06-11 15:44:53 +03:00
|
|
|
|
RDG_ROW_PLAN := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_PLAN, SNAME => 'SOBJINFO', SVALUE => QQ.STECSRVKINDCODE);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_PLAN, SNAME => 'SWRKTYPE', SVALUE => 'План');
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Строка факта */
|
2024-06-11 15:44:53 +03:00
|
|
|
|
RDG_ROW_FACT := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME);
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_FACT, SNAME => 'SWRKTYPE', SVALUE => 'Факт');
|
2024-04-05 14:41:14 +03:00
|
|
|
|
/* Добавляем в заполненные группы */
|
2024-04-24 14:16:03 +03:00
|
|
|
|
PKG_CONTVALLOC1S.PUTS(RCONTAINER => GF, SROWID => SPRJ_GROUP_NAME, SVALUE => '');
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end if;
|
|
|
|
|
|
/* Плановые работы */
|
|
|
|
|
|
if (QQ.NEQV_RN is not null) then
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Цикл по периоду */
|
|
|
|
|
|
for X in 0 .. TRUNC(QQ.DDATEPLANEND) - TRUNC(QQ.DDATEPLANBEG)
|
2024-04-05 14:41:14 +03:00
|
|
|
|
loop
|
2024-04-17 15:57:05 +03:00
|
|
|
|
NYEAR_PLAN := EXTRACT(year from QQ.DDATEPLANBEG + X);
|
|
|
|
|
|
NMONTH_PLAN := EXTRACT(month from QQ.DDATEPLANBEG + X);
|
|
|
|
|
|
NDAY_PLAN := EXTRACT(day from QQ.DDATEPLANBEG + X);
|
|
|
|
|
|
/* Если первый день периода */
|
|
|
|
|
|
if (X = 0) then
|
2024-04-05 14:41:14 +03:00
|
|
|
|
SPERIODNAME := '_' || TO_CHAR(NYEAR_PLAN) || '_' || NMONTH_PLAN;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Подсчёт трудоёмкости за месяц */
|
2024-04-05 14:41:14 +03:00
|
|
|
|
if (QQ.NSUMWORKPLAN is not null) then
|
2024-04-17 15:57:05 +03:00
|
|
|
|
PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM,
|
|
|
|
|
|
SROWID => SPERIODNAME || '_P',
|
|
|
|
|
|
NVALUE => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, SROWID => SPERIODNAME || '_P') +
|
|
|
|
|
|
QQ.NSUMWORKPLAN);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end if;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Закрашивание месяца плана синим */
|
2024-04-24 14:16:03 +03:00
|
|
|
|
if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => COLS, SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN') =
|
|
|
|
|
|
false) then
|
2024-06-11 15:44:53 +03:00
|
|
|
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_PLAN, SNAME => SPERIODNAME, SVALUE => 'blue');
|
2024-04-24 14:16:03 +03:00
|
|
|
|
PKG_CONTVALLOC1S.PUTS(RCONTAINER => COLS,
|
|
|
|
|
|
SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN',
|
|
|
|
|
|
SVALUE => '');
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end if;
|
|
|
|
|
|
end if;
|
|
|
|
|
|
SPERIODNAME := '_' || TO_CHAR(NYEAR_PLAN) || '_' || TO_CHAR(NMONTH_PLAN) || '_' || TO_CHAR(NDAY_PLAN);
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Закрашивание дня плана синим */
|
2024-04-24 14:16:03 +03:00
|
|
|
|
if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => COLS, SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN') =
|
|
|
|
|
|
false) then
|
2024-06-11 15:44:53 +03:00
|
|
|
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_PLAN, SNAME => SPERIODNAME, SVALUE => 'blue');
|
2024-04-24 14:16:03 +03:00
|
|
|
|
PKG_CONTVALLOC1S.PUTS(RCONTAINER => COLS,
|
|
|
|
|
|
SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN',
|
|
|
|
|
|
SVALUE => '');
|
2024-04-17 15:57:05 +03:00
|
|
|
|
end if;
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end loop;
|
|
|
|
|
|
end if;
|
|
|
|
|
|
/* Фактические и внеплановые работы */
|
2024-04-17 15:57:05 +03:00
|
|
|
|
if ((QQ.DDATEFACTEND is not null) and (QQ.DDATEFACTBEG is not null)) then
|
|
|
|
|
|
/* Фактические - зелёный, внеплановые - красный */
|
|
|
|
|
|
if (QQ.NEQV_RN is not null) then
|
2024-04-05 14:41:14 +03:00
|
|
|
|
SFACT_CLR := 'green';
|
|
|
|
|
|
else
|
|
|
|
|
|
SFACT_CLR := 'red';
|
2024-04-17 15:57:05 +03:00
|
|
|
|
end if;
|
2024-04-05 14:41:14 +03:00
|
|
|
|
NWORKPERDAY := null;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Если период не в одном месяце, то считаем трудоёмкость в день */
|
2024-04-05 14:41:14 +03:00
|
|
|
|
if (EXTRACT(month from QQ.DDATEFACTBEG) != EXTRACT(month from QQ.DDATEFACTEND)) then
|
2024-04-17 15:57:05 +03:00
|
|
|
|
NWORKPERDAY := QQ.NSUMWORKFACT / (ROUND(QQ.DDATEFACTEND - QQ.DDATEFACTBEG) + 1);
|
|
|
|
|
|
NCURMONTH := EXTRACT(month from QQ.DDATEFACTBEG);
|
|
|
|
|
|
end if;
|
|
|
|
|
|
/* Цикл по периоду */
|
|
|
|
|
|
for X in 0 .. TRUNC(QQ.DDATEFACTEND) - TRUNC(QQ.DDATEFACTBEG)
|
2024-04-05 14:41:14 +03:00
|
|
|
|
loop
|
2024-04-17 15:57:05 +03:00
|
|
|
|
NYEAR_FACT := EXTRACT(year from QQ.DDATEFACTBEG + X);
|
|
|
|
|
|
NMONTH_FACT := EXTRACT(month from QQ.DDATEFACTBEG + X);
|
|
|
|
|
|
NDAY_FACT := EXTRACT(day from QQ.DDATEFACTBEG + X);
|
|
|
|
|
|
/* Если первый день периода или следующий месяц периода */
|
|
|
|
|
|
if ((X = 0) or (NCURMONTH != NMONTH_FACT)) then
|
|
|
|
|
|
/* Обновляется текущий месяц */
|
2024-04-05 14:41:14 +03:00
|
|
|
|
if (NCURMONTH != NMONTH_FACT) then
|
|
|
|
|
|
NCURMONTH := NMONTH_FACT;
|
|
|
|
|
|
end if;
|
|
|
|
|
|
SPERIODNAME := '_' || TO_CHAR(NYEAR_FACT) || '_' || NMONTH_FACT;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Подсчёт трудоёмкости за месяц если период в одном месяце */
|
|
|
|
|
|
if ((QQ.NSUMWORKFACT is not null) and (NWORKPERDAY is null)) then
|
|
|
|
|
|
PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM,
|
|
|
|
|
|
SROWID => SPERIODNAME || '_F',
|
|
|
|
|
|
NVALUE => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, SROWID => SPERIODNAME || '_F') +
|
|
|
|
|
|
QQ.NSUMWORKFACT);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end if;
|
|
|
|
|
|
/* Добавление в коллекцию окрашивания месяца */
|
2024-04-17 15:57:05 +03:00
|
|
|
|
if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => MCLR, SROWID => SPERIODNAME) = false) then
|
|
|
|
|
|
PKG_CONTVALLOC1S.PUTS(RCONTAINER => MCLR, SROWID => SPERIODNAME, SVALUE => SFACT_CLR);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
else
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Если второй цвет для месяца */
|
2024-04-05 14:41:14 +03:00
|
|
|
|
if (STRIN(trim(SFACT_CLR), trim(PKG_CONTVALLOC1S.GETS(MCLR, SPERIODNAME))) = 0) then
|
2024-04-17 15:57:05 +03:00
|
|
|
|
PKG_CONTVALLOC1S.PUTS(RCONTAINER => MCLR,
|
|
|
|
|
|
SROWID => SPERIODNAME,
|
|
|
|
|
|
SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => SPERIODNAME) || ' ' ||
|
|
|
|
|
|
SFACT_CLR);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end if;
|
|
|
|
|
|
end if;
|
|
|
|
|
|
end if;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Подсчёт трудоёмкости за месяц если период не в одном месяце */
|
2024-04-05 14:41:14 +03:00
|
|
|
|
if (NWORKPERDAY is not null) then
|
2024-04-17 15:57:05 +03:00
|
|
|
|
PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM,
|
|
|
|
|
|
SROWID => SPERIODNAME || '_F',
|
|
|
|
|
|
NVALUE => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, SROWID => SPERIODNAME || '_F') +
|
|
|
|
|
|
NWORKPERDAY);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end if;
|
|
|
|
|
|
SPERIODNAME := '_' || TO_CHAR(NYEAR_FACT) || '_' || TO_CHAR(NMONTH_FACT) || '_' || TO_CHAR(NDAY_FACT);
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Добавление в коллекцию окрашивания дней факта */
|
|
|
|
|
|
if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => MCLR, SROWID => SPERIODNAME) = false) then
|
|
|
|
|
|
PKG_CONTVALLOC1S.PUTS(RCONTAINER => MCLR, SROWID => SPERIODNAME, SVALUE => SFACT_CLR);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
else
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Если второй цвет для месяца */
|
|
|
|
|
|
if ((trim(PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => SPERIODNAME)) = 'green') and
|
|
|
|
|
|
(trim(SFACT_CLR) = 'red')) then
|
|
|
|
|
|
PKG_CONTVALLOC1S.PUTS(RCONTAINER => MCLR, SROWID => SPERIODNAME, SVALUE => SFACT_CLR);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end if;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
end if;
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end loop;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
end if;
|
2024-06-11 15:44:53 +03:00
|
|
|
|
if ((RDG_ROW_INFO.RCOLS is not null) and (NROWS = 0)) then
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* Цикл по годам периода */
|
2024-04-05 14:41:14 +03:00
|
|
|
|
for Y in NFROMYEAR .. NTOYEAR
|
|
|
|
|
|
loop
|
|
|
|
|
|
if (NFROMYEAR = NTOYEAR) then
|
|
|
|
|
|
NMS := NFROMMONTH;
|
|
|
|
|
|
NME := NTOMONTH;
|
|
|
|
|
|
else
|
|
|
|
|
|
if (Y = NFROMYEAR) then
|
|
|
|
|
|
NMS := NFROMMONTH;
|
|
|
|
|
|
NME := 12;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
elsif ((NFROMYEAR < Y) and (Y < NTOYEAR)) then
|
2024-04-05 14:41:14 +03:00
|
|
|
|
NMS := 1;
|
|
|
|
|
|
NME := 12;
|
|
|
|
|
|
elsif (Y = NTOYEAR) then
|
|
|
|
|
|
NMS := 1;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
NME := NTOMONTH;
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end if;
|
|
|
|
|
|
end if;
|
|
|
|
|
|
/* Цикл по месяцам года */
|
|
|
|
|
|
for M in NMS .. NME
|
|
|
|
|
|
loop
|
|
|
|
|
|
SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M);
|
2024-06-11 15:44:53 +03:00
|
|
|
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_INFO,
|
2024-04-17 15:57:05 +03:00
|
|
|
|
SNAME => SPERIODNAME,
|
2024-04-24 14:16:03 +03:00
|
|
|
|
SVALUE => 'план: ' || HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
|
|
|
|
|
|
SROWID => SPERIODNAME || '_P'),
|
|
|
|
|
|
1)) || ' факт: ' ||
|
|
|
|
|
|
HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
|
|
|
|
|
|
SROWID => SPERIODNAME || '_F'),
|
|
|
|
|
|
1)));
|
2024-04-17 15:57:05 +03:00
|
|
|
|
end loop;
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end loop;
|
2024-06-11 15:44:53 +03:00
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_INFO);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end if;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
/* План для последней записи */
|
2024-06-11 15:44:53 +03:00
|
|
|
|
if ((RDG_ROW_PLAN.RCOLS is not null) and (NROWS = 0)) then
|
|
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_PLAN);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end if;
|
|
|
|
|
|
/* Факт для последней записи */
|
2024-06-11 15:44:53 +03:00
|
|
|
|
if ((RDG_ROW_FACT.RCOLS is not null) and (NROWS = 0)) then
|
2024-04-17 15:57:05 +03:00
|
|
|
|
CR := PKG_CONTVALLOC1S.FIRST_(RCONTAINER => MCLR);
|
|
|
|
|
|
for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(RCONTAINER => MCLR)
|
2024-04-05 14:41:14 +03:00
|
|
|
|
loop
|
2024-06-11 15:44:53 +03:00
|
|
|
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_FACT,
|
2024-04-17 15:57:05 +03:00
|
|
|
|
SNAME => CR,
|
|
|
|
|
|
SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => CR));
|
|
|
|
|
|
CR := PKG_CONTVALLOC1S.NEXT_(RCONTAINER => MCLR, SROWID => CR);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end loop;
|
2024-06-11 15:44:53 +03:00
|
|
|
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_FACT);
|
2024-04-17 15:57:05 +03:00
|
|
|
|
end if;
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end loop;
|
|
|
|
|
|
/* Сериализуем описание */
|
|
|
|
|
|
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1);
|
2024-04-24 14:16:03 +03:00
|
|
|
|
/* Очищаем контейнеры */
|
2024-04-17 15:57:05 +03:00
|
|
|
|
PKG_CONTVALLOC1S.PURGE(RCONTAINER => YM);
|
2024-04-24 14:16:03 +03:00
|
|
|
|
PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR);
|
|
|
|
|
|
PKG_CONTVALLOC1S.PURGE(RCONTAINER => GF);
|
|
|
|
|
|
PKG_CONTVALLOC1S.PURGE(RCONTAINER => COLS);
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end EQUIPSRV_GRID;
|
2024-04-17 15:57:05 +03:00
|
|
|
|
|
2024-04-05 14:41:14 +03:00
|
|
|
|
end PKG_P8PANELS_EQUIPSRV;
|
|
|
|
|
|
/
|