diff --git a/db/PKG_P8PANELS_EQUIPSRV.pck b/db/PKG_P8PANELS_EQUIPSRV.pck
index 05183ee..7593cb7 100644
--- a/db/PKG_P8PANELS_EQUIPSRV.pck
+++ b/db/PKG_P8PANELS_EQUIPSRV.pck
@@ -1,48 +1,80 @@
create or replace package PKG_P8PANELS_EQUIPSRV as
- /* Получение значения системного параметра "JuridicalPerson" */
- procedure GET_JUR_PERS_PRM
+ /* Получение параметров фильтра по умолчанию */
+ procedure GET_DEFAULT_FP
(
- CRES out clob -- Значение параметра "JuridicalPerson" (null - если не нашли)
+ COUT out clob -- XML с параметрами фильтра по умолчанию
);
+ /* Формирование строки с кол-вом часов */
function HOURS_STR
(
- NHOURS in number -- Кол-во часов
- ) return varchar2;
+ NHOURS in number -- Кол-во часов
+ ) return varchar2; -- Результат работы
+
+ /* Отбор документов (ТОиР или Графики ремонтов) по дате */
+ 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 - не найдено)
+ );
/* Выполнение работ по ТОиР */
procedure EQUIPSRV_GRID
(
- SBELONG in varchar2, -- Принадлежность к Юр. лицу
- SPRODOBJ in varchar2, -- Производственный объект
- STECHSERV in varchar2, -- Техническая служба
- SRESPDEP in varchar2, -- Ответственное подразделение
- NFROMMONTH in number, -- Месяц начала периода
- NFROMYEAR in number, -- Год начала периода
- NTOMONTH in number, -- Месяц окончания периода
- NTOYEAR in number, -- Год окончания периода
- COUT out clob -- График проектов
+ 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 -- График проектов
);
+
end PKG_P8PANELS_EQUIPSRV;
/
create or replace package body PKG_P8PANELS_EQUIPSRV as
- /* Получение значения системного параметра "JuridicalPerson" */
- procedure GET_JUR_PERS_PRM
+ /* Получение параметров фильтра по умолчанию */
+ procedure GET_DEFAULT_FP
(
- CRES out clob -- Значение параметра "JuridicalPerson" (null - если не нашли)
+ COUT out clob -- XML с параметрами фильтра по умолчанию
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
- SPARAMCODE PKG_STD.TSTRING := 'JuridicalPerson'; -- Код параметра
+ SJUR_PERS PKG_STD.TSTRING := null; -- Юр. лицо (наименование)
+ NJUR_PERS PKG_STD.TREF := null; -- Юр. лицо (идентификатор)
begin
- CRES := GET_OPTIONS_STR(SCODE => SPARAMCODE,
- NCOMP_VERS => NCOMPANY);
- if (CRES is null) then
- P_EXCEPTION(0, 'Пользовательский параметр не указан.');
- end if;
- end GET_JUR_PERS_PRM;
+ /* Находим юр. лицо */
+ FIND_JURPERSONS_MAIN(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, SJUR_PERS => SJUR_PERS, NJUR_PERS => NJUR_PERS);
+ /* Формируем 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;
/* Формирование строки с кол-вом часов */
function HOURS_STR
@@ -50,28 +82,136 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
NHOURS in number -- Кол-во часов
) return varchar2 -- Строка с кол-вом часов
is
- SRESULT PKG_STD.tSTRING; -- Строка результат
+ SRESULT PKG_STD.TSTRING; -- Строка результат
begin
- if (MOD(NHOURS, 10) = 1 and MOD(NHOURS, 100) != 11) then
+ if ((mod(NHOURS, 10) = 1) and (mod(NHOURS, 100) != 11)) then
SRESULT := NHOURS || ' час';
- elsif ((MOD(NHOURS, 10) = 2 and MOD(NHOURS, 100) != 12)
- or (MOD(NHOURS, 10) = 3 and MOD(NHOURS, 100) != 13)
- or (MOD(NHOURS, 10) = 4 and MOD(NHOURS, 100) != 14)) then
+ elsif (((mod(NHOURS, 10) = 2) and (mod(NHOURS, 100) != 12)) or ((mod(NHOURS, 10) = 3) and (mod(NHOURS, 100) != 13)) or
+ ((mod(NHOURS, 10) = 4) and (mod(NHOURS, 100) != 14))) then
SRESULT := NHOURS || ' часа';
else
SRESULT := NHOURS || ' часов';
end if;
- /* Возвращаем результат */
return SRESULT;
end HOURS_STR;
+
+ /* Отбор документов (ТОиР или Графики ремонтов) по дате */
+ 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; -- Рег. номер добавленной записи буфера подобранных
+ SDATE PKG_STD.TSTRING; -- Строка даты
+ 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,
+ T.COMPANY
+ 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
+ and T.DEPTTCSRV = DS.RN
+ and (DS.CODE = STECHSERV or STECHSERV is null)
+ and T.DEPTRESP = DR.RN
+ 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
+ TRUNC(T.DATEPRD_END)) or (NDAY is null and (SDATE = TO_CHAR(T.DATEPRD_BEG, 'mm.yyyy') or
+ SDATE = TO_CHAR(T.DATEPRD_END, 'mm.yyyy')))))
+ 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,
+ NCRN => null,
+ NDOCUMENT1 => null,
+ SUNITCODE1 => null,
+ SACTIONCODE1 => null,
+ NRN => NSELECTLIST);
+ end loop;
+ /* Иначе ремонтные ведомости */
+ else
+ for C in (select T.RN,
+ T.COMPANY
+ 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
+ TRUNC(T.DATEFACT_END)) or (NDAY is null and (SDATE = TO_CHAR(T.DATEFACT_BEG, 'mm.yyyy') or
+ SDATE = TO_CHAR(T.DATEFACT_END, 'mm.yyyy')))))
+ 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,
+ NCRN => null,
+ NDOCUMENT1 => null,
+ SUNITCODE1 => null,
+ SACTIONCODE1 => null,
+ NRN => NSELECTLIST);
+ end loop;
+ end if;
+ end SELECT_EQUIPSRV;
/* Выполнение работ по ТОиР */
procedure EQUIPSRV_GRID
(
SBELONG in varchar2, -- Принадлежность к Юр. лицу
SPRODOBJ in varchar2, -- Производственный объект
- STECHSERV in varchar2, -- Техническая служба
- SRESPDEP in varchar2, -- Ответственное подразделение
+ STECHSERV in varchar2 := null, -- Техническая служба
+ SRESPDEP in varchar2 := null, -- Ответственное подразделение
NFROMMONTH in number, -- Месяц начала периода
NFROMYEAR in number, -- Год начала периода
NTOMONTH in number, -- Месяц окончания периода
@@ -86,41 +226,36 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
RDG_ROW0 PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы0
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы
RDG_ROW2 PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы2
- NCURYEAR PKG_STD.tNUMBER; -- Текущий год
- NCURMONTH PKG_STD.tNUMBER; -- Текущий месяц
- NTOTALDAYS PKG_STD.tNUMBER; -- Дней в текущем месяце
+ NCURYEAR PKG_STD.TNUMBER; -- Текущий год
+ NCURMONTH PKG_STD.TNUMBER; -- Текущий месяц
+ NTOTALDAYS PKG_STD.TNUMBER; -- Дней в текущем месяце
SCURTECHOBJ PKG_STD.TSTRING := null; -- Текущий технический объект
SCURTSKCODE PKG_STD.TSTRING := null; -- Текущий вид ремонта
- NFROMDATE date := TO_DATE('01.'
- || LPAD(TO_CHAR(NFROMMONTH), 2, '0')
- || '.' || TO_CHAR(NFROMYEAR),
- 'dd.mm.yyyy'); -- Дата начала периода
- NTODATE date := LAST_DAY(TO_DATE('01.'
- || LPAD(TO_CHAR(NTOMONTH), 2, '0')
- || '.' || TO_CHAR(NTOYEAR),
- 'dd.mm.yyyy')); -- Дата конца периода
- 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; -- День факт
+ 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; -- День факт
SPERIODNAME PKG_STD.TSTRING; -- Имя периода
SFACT_CLR PKG_STD.TSTRING; -- Цвет закрашивания фактических дат
- NROWS PKG_STD.tNUMBER := 0; -- Кол-во строк в курсоре
- NWORKPERDAY PKG_STD.tNUMBER(17,2) := null; -- Работы в день
- CR PKG_STD.TSTRING;
- SGROUP_FILLED PKG_STD.tLSTRING; -- Группы, заполненные строками план/факт
- SCOLS PKG_STD.tLSTRING; -- Заполнение периодов работ
- YM PKG_CONTVALLOC1S.tCONTAINER; -- Коллекция для подсчёта работ за месяц
- MCLR PKG_CONTVALLOC1S.tCONTAINER; -- Коллекция для закрашивания месяцев
+ NROWS PKG_STD.TNUMBER := 0; -- Кол-во строк в курсоре
+ NWORKPERDAY PKG_STD.TNUMBER(17,2) := null; -- Работы в день
+ SGROUP_FILLED PKG_STD.TLSTRING; -- Группы, заполненные строками план/факт
+ SCOLS PKG_STD.TLSTRING; -- Заполнение периодов работ
+ YM PKG_CONTVALLOC1S.TCONTAINER; -- Коллекция для подсчёта работ за месяц
+ MCLR PKG_CONTVALLOC1S.TCONTAINER; -- Коллекция для закрашивания месяцев
+ CR PKG_STD.TSTRING; -- Текущий ключ коллекции MCLR
+ /* Курсор с работами ТОиР */
cursor C1 is
- select TT.NEQV_RN,
- TT.NEQS_RN,
- TT.NWRK_RN NRN,
+ select TT.NEQV_RN,
+ TT.NEQS_RN,
+ TT.NWRK_RN NRN,
TT.COMPANY NCOMPANY,
TT.NAME_WORK SWORKNAME,
EC2.CODE STECHOBJCODE,
@@ -135,63 +270,60 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
EQJ.DATEFACT_END DDATEFACTEND,
EK.CODE STECSRVKINDCODE,
EK.NAME STECSRVKINDNAME,
- coalesce(EW.NSUM,
- (TT.DATEPRD_END - TT.DATEPRD_BEG) * 24) NSUMWORKPLAN,
- coalesce(EWJ.NSUMF,
- (EQJ.DATEFACT_END - EQJ.DATEFACT_BEG) * 24) NSUMWORKFACT
- from
- (select B.*,
- C.RN nWRK_RN,
- C.PRN nWRK_PRN,
- C.NAME_WORK,
- C.DATEPLAN_BEG,
- C.DATEPLAN_END,
- C.TECSRVKIND,
- C.EQCONFIG,
- C.DEPTPERF,
- C.DEPTTCSRV,
- C.RESP_AGN
- from (select EQV.RN nEQV_RN,
- EQV.COMPANY,
- EQV.JUR_PERS,
- EQV.STATE,
- EQV.DATEPRD_BEG,
- EQV.DATEPRD_END,
- EQS.RN nEQS_RN
- from EQTCHSRV EQV, -- Графики ТОиР
- DOCLINKS DL,
- EQRPSHEETS EQS -- Ремонтные ведомости
- where EQV.RN = DL.IN_DOCUMENT (+)
- and DL.OUT_UNITCODE (+) = 'EquipRepairSheets'
- and DL.OUT_DOCUMENT = EQS.RN (+)) B,
+ COALESCE(EW.NSUM, (TT.DATEPRD_END - TT.DATEPRD_BEG) * 24) NSUMWORKPLAN,
+ COALESCE(EWJ.NSUMF, (EQJ.DATEFACT_END - EQJ.DATEFACT_BEG) * 24) NSUMWORKFACT
+ from (select B.*,
+ C.RN NWRK_RN,
+ C.PRN NWRK_PRN,
+ C.NAME_WORK,
+ C.DATEPLAN_BEG,
+ C.DATEPLAN_END,
+ C.TECSRVKIND,
+ C.EQCONFIG,
+ C.DEPTPERF,
+ C.DEPTTCSRV,
+ C.RESP_AGN
+ from (select EQV.RN NEQV_RN,
+ EQV.COMPANY,
+ EQV.JUR_PERS,
+ EQV.STATE,
+ EQV.DATEPRD_BEG,
+ EQV.DATEPRD_END,
+ EQS.RN NEQS_RN
+ from EQTCHSRV EQV,
+ DOCLINKS DL,
+ EQRPSHEETS EQS
+ where EQV.RN = DL.IN_DOCUMENT(+)
+ and DL.OUT_UNITCODE(+) = 'EquipRepairSheets'
+ and DL.OUT_DOCUMENT = EQS.RN(+)) B,
EQTCHSRWRK C
- where B.nEQV_RN = C.PRN (+)
- union all
- select B.*,
- C.RN nWRK_RN,
- C.PRN nWRK_PRN,
- C.NAME_WORK,
- C.DATEPLAN_BEG,
- C.DATEPLAN_END,
- C.TECSRVKIND,
- C.EQCONFIG,
- C.DEPTPERF,
- null DEPTTCSRV,
- C.RESP_AGN
- from (select null nEQV_RN,
- EQS.COMPANY,
- EQS.JURPERSONS JUR_PERS,
- EQS.STATE,
- EQS.DATEPLAN_BEG,
- EQS.DATEPLAN_END,
- EQS.RN nEQS_RN
- from EQRPSHEETS EQS -- Ремонтные ведомости
- where not exists (select 1
- from DOCLINKS DL
- where DL.OUT_DOCUMENT = EQS.RN
- and DL.IN_UNITCODE = 'EquipTechServices')) B,
+ where B.NEQV_RN = C.PRN(+)
+ union all
+ select B.*,
+ C.RN NWRK_RN,
+ C.PRN NWRK_PRN,
+ C.NAME_WORK,
+ C.DATEPLAN_BEG,
+ C.DATEPLAN_END,
+ C.TECSRVKIND,
+ C.EQCONFIG,
+ C.DEPTPERF,
+ null DEPTTCSRV,
+ C.RESP_AGN
+ from (select null NEQV_RN,
+ EQS.COMPANY,
+ EQS.JURPERSONS JUR_PERS,
+ EQS.STATE,
+ EQS.DATEPLAN_BEG,
+ EQS.DATEPLAN_END,
+ EQS.RN NEQS_RN
+ from EQRPSHEETS EQS
+ where not exists (select 1
+ from DOCLINKS DL
+ where DL.OUT_DOCUMENT = EQS.RN
+ and DL.IN_UNITCODE = 'EquipTechServices')) B,
EQRPSHWRK C
- where B.nEQS_RN = C.PRN (+)) TT,
+ where B.NEQS_RN = C.PRN(+)) TT,
EQTECSRVKIND EK,
JURPERSONS JP,
EQCONFIG EC1,
@@ -200,49 +332,55 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
INS_DEPARTMENT DR,
DOCLINKS DL,
EQTECSRVJRNL EQJ,
- (select t.prn,
- sum(t.Worktimeplan * t.perform_quant) NSUM
- from EQTCHSRWRC t
- group by t.prn) EW,
- (select t.prn,
- sum(t.worktimefact * t.quantfact) NSUMF
- from EQTCHSRJRNLWRC t
- group by t.prn) EWJ
+ (select T.PRN,
+ sum(T.WORKTIMEPLAN * T.PERFORM_QUANT) NSUM
+ from EQTCHSRWRC T
+ group by T.PRN) EW,
+ (select T.PRN,
+ sum(T.WORKTIMEFACT * T.QUANTFACT) NSUMF
+ from EQTCHSRJRNLWRC T
+ group by T.PRN) EWJ
where TT.COMPANY = 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.STATE in (1, 2) and NEQV_RN is not null) or (TT.STATE in (0, 2, 3) and NEQV_RN is null))
and TT.DATEPRD_BEG >= NFROMDATE
and TT.DATEPRD_END <= NTODATE
and JP.CODE = SBELONG
and EC1.CODE = SPRODOBJ
and (DS.CODE = STECHSERV or STECHSERV is null)
and (DR.CODE = SRESPDEP or SRESPDEP is null)
- and TT.EQCONFIG = EC2.RN (+)
- and TT.DEPTPERF = DR.RN (+)
- and TT.DEPTTCSRV = DS.RN (+)
- and TT.NWRK_RN = EW.PRN (+)
- and EQJ.RN = EWJ.PRN (+)
- and TT.TECSRVKIND = EK.RN (+)
- 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;
+ and TT.EQCONFIG = EC2.RN(+)
+ and TT.DEPTPERF = DR.RN(+)
+ and TT.DEPTTCSRV = DS.RN(+)
+ and TT.NWRK_RN = EW.PRN(+)
+ and EQJ.RN = EWJ.PRN(+)
+ and TT.TECSRVKIND = EK.RN(+)
+ 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;
begin
+ /* Определим дату начала периода */
+ 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'));
/* Инициализируем таблицу данных */
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE();
/* Формируем структуру заголовка */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'STEST',
- SCAPTION => 'ТЕСТ',
+ SCAPTION => 'ТЕСТ',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SINFO',
- SCAPTION => 'Информация',
+ SCAPTION => 'Объект ремонта',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SINFO2',
SCAPTION => 'Объект ремонта',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
- SPARENT => 'SINFO');
+ SPARENT => 'SINFO');
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'NRN',
SCAPTION => 'Рег. номер',
@@ -317,15 +455,15 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
SNAME => 'STECSRVKINDNAME',
SCAPTION => 'Наименование типа работы',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
- BVISIBLE => false);
- /* Очистка коллекций */
- PKG_CONTVALLOC1S.PURGE(YM);
- PKG_CONTVALLOC1S.PURGE(MCLR);
-
+ BVISIBLE => false);
+ /* Очистка коллекций */
+ PKG_CONTVALLOC1S.PURGE(RCONTAINER => YM);
+ PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR);
+ /* Текущий год */
NCURYEAR := EXTRACT(year from sysdate);
- NCURMONTH := EXTRACT(month from sysdate);
-
- /* Цикл по годам периода */
+ /* Текущий месяц */
+ NCURMONTH := EXTRACT(month from sysdate);
+ /* Цикл по годам периода */
for Y in NFROMYEAR .. NTOYEAR
loop
if (NFROMYEAR = NTOYEAR) then
@@ -335,220 +473,249 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
if (Y = NFROMYEAR) then
NMS := NFROMMONTH;
NME := 12;
- elsif (NFROMYEAR < Y and Y < NTOYEAR) then
+ elsif ((NFROMYEAR < Y) and (Y < NTOYEAR)) then
NMS := 1;
NME := 12;
elsif (Y = NTOYEAR) then
NMS := 1;
- NME := NTOMONTH;
+ NME := NTOMONTH;
end if;
end if;
-
/* Цикл по месяцам года */
for M in NMS .. NME
loop
-
- PKG_CONTVALLOC1S.PUTN(YM, '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_P', 0);
- PKG_CONTVALLOC1S.PUTN(YM, '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_F', 0);
-
- if (Y = NCURYEAR and M = NCURMONTH) then
+ 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
BEXPANDED := true;
else
BEXPANDED := false;
end if;
-
- 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,
+ 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,
BEXPANDABLE => true,
- 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');
+ 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');
/* Цикл по дням месяца */
for D in 1 .. NTOTALDAYS
loop
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
- SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_' || TO_CHAR(D),
+ SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_' ||
+ TO_CHAR(D),
SCAPTION => TO_CHAR(D, '99'),
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
SPARENT => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M));
end loop;
- end loop;
+ end loop;
end loop;
-
- /* Подсчёт кол-ва записей в курсоре */
+ /* Подсчёт кол-ва записей в курсоре */
for Q1 in C1
loop
NROWS := NROWS + 1;
end loop;
-
/* Цикл по курсору */
for QQ in C1
loop
NROWS := NROWS - 1;
- if (SCURTECHOBJ != QQ.STECHOBJNAME or SCURTECHOBJ is null) then
+ /* Если новый объект ремонта */
+ if ((SCURTECHOBJ != QQ.STECHOBJNAME) or (SCURTECHOBJ is null)) then
+ /* Если строка с трудоёмкостью по объекту ремонта сформирована */
if (RDG_ROW0.RCOLS is not null) then
- /* Цикл по годам периода */
+ /* Цикл по годам периода */
for Y in NFROMYEAR .. NTOYEAR
loop
+ /* Если отчёт в пределах года */
if (NFROMYEAR = NTOYEAR) then
NMS := NFROMMONTH;
NME := NTOMONTH;
+ /* Иначе вычисляем кол-во месяцев в каждом году периода отчёта*/
else
if (Y = NFROMYEAR) then
NMS := NFROMMONTH;
NME := 12;
- elsif (NFROMYEAR < Y and Y < NTOYEAR) then
+ elsif ((NFROMYEAR < Y) and (Y < NTOYEAR)) then
NMS := 1;
NME := 12;
elsif (Y = NTOYEAR) then
NMS := 1;
- NME := NTOMONTH;
+ NME := NTOMONTH;
end if;
end if;
-
- /* Цикл по месяцам года */
+ /* Цикл по месяцам года, заполнение трудоёмкости с привязкой к месяцу */
for M in NMS .. NME
loop
SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M);
- PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0,
- SNAME => SPERIODNAME,
- SVALUE => 'план: ' || HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_P')) || ' факт: ' || HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_F')));
- PKG_CONTVALLOC1S.PUTN(YM, SPERIODNAME || '_P', 0);
- PKG_CONTVALLOC1S.PUTN(YM, SPERIODNAME || '_F', 0);
- end loop;
+ PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0,
+ SNAME => SPERIODNAME,
+ SVALUE => 'план: ' ||
+ HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_P')) ||
+ ' факт: ' ||
+ HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_F')));
+ /* Добавление в коллекцию трудоёмкость план */
+ PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => SPERIODNAME || '_P', NVALUE => 0);
+ /* Добавление в коллекцию трудоёмкость факт */
+ PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => SPERIODNAME || '_F', NVALUE => 0);
+ end loop;
end loop;
-
+ /* Добавление строки с трудоёмкостью */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW0);
end if;
- SCURTECHOBJ := QQ.STECHOBJNAME;
+ /* Добавление группы с объектом ремонта */
+ SCURTECHOBJ := QQ.STECHOBJNAME;
SPRJ_GROUP_NAME := SCURTECHOBJ;
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG,
SNAME => SPRJ_GROUP_NAME,
SCAPTION => QQ.STECHOBJNAME,
- BEXPANDABLE => false);
+ BEXPANDABLE => false);
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 => 'STEST', SVALUE => SCURTECHOBJ);
end if;
/* Формируем имя группы для вида ремонта */
SCURTSKCODE := SCURTECHOBJ || '_' || QQ.STECSRVKINDCODE;
/* Если по данной группе еще нет строк плана и факта */
- if (STRIN(sSUBSTR => SCURTSKCODE, sSOURCE => SGROUP_FILLED, sDELIM => ';') = 0) then
+ if (STRIN(SSUBSTR => SCURTSKCODE, SSOURCE => SGROUP_FILLED, SDELIM => ';') = 0) then
/* Добавляем строку плана */
if (RDG_ROW.RCOLS is not null) then
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
end if;
/* Добавляем строку факта */
if (RDG_ROW2.RCOLS is not null) then
- CR := PKG_CONTVALLOC1S.FIRST_(MCLR);
+ CR := PKG_CONTVALLOC1S.FIRST_(RCONTAINER => MCLR);
/* Цикл по коллекции для закрашивания месяцев */
- for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(MCLR)
+ for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(RCONTAINER => MCLR)
loop
- PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW2, SNAME => CR, SVALUE => PKG_CONTVALLOC1S.GETS(MCLR, CR));
- CR := PKG_CONTVALLOC1S.NEXT_(MCLR, CR);
+ PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW2,
+ SNAME => CR,
+ SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => CR));
+ CR := PKG_CONTVALLOC1S.NEXT_(RCONTAINER => MCLR, SROWID => CR);
end loop;
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW2);
end if;
- PKG_CONTVALLOC1S.PURGE(MCLR);
+ PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR);
/* Добвим группу для вида ремонта */
SPRJ_GROUP_NAME := SCURTSKCODE;
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG,
SNAME => SPRJ_GROUP_NAME,
SCAPTION => QQ.STECSRVKINDCODE,
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 => 'SINFO2', SVALUE => 'План');
- RDG_ROW2 := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME);
+ PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SINFO2', SVALUE => 'План');
+ /* Строка факта */
+ RDG_ROW2 := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW2, SNAME => 'SINFO2', SVALUE => 'Факт');
/* Добавляем в заполненные группы */
SGROUP_FILLED := SGROUP_FILLED || SPRJ_GROUP_NAME || ';';
-
end if;
/* Плановые работы */
if (QQ.NEQV_RN is not null) then
- for x in 0 .. trunc(QQ.DDATEPLANEND) - trunc(QQ.DDATEPLANBEG)
+ /* Цикл по периоду */
+ for X in 0 .. TRUNC(QQ.DDATEPLANEND) - TRUNC(QQ.DDATEPLANBEG)
loop
- 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
+ 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
SPERIODNAME := '_' || TO_CHAR(NYEAR_PLAN) || '_' || NMONTH_PLAN;
-
+ /* Подсчёт трудоёмкости за месяц */
if (QQ.NSUMWORKPLAN is not null) then
- PKG_CONTVALLOC1S.PUTN(YM, SPERIODNAME || '_P', PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_P') + QQ.NSUMWORKPLAN);
+ PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM,
+ SROWID => SPERIODNAME || '_P',
+ NVALUE => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, SROWID => SPERIODNAME || '_P') +
+ QQ.NSUMWORKPLAN);
end if;
-
- if (STRIN(sSUBSTR => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN', sSOURCE => SCOLS, sDELIM => ';') = 0) then
+ /* Закрашивание месяца плана синим */
+ if (STRIN(SSUBSTR => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN', SSOURCE => SCOLS, SDELIM => ';') = 0) then
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => SPERIODNAME, SVALUE => 'blue');
- SCOLS := SCOLS || SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN;';
+ SCOLS := SCOLS || SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN;';
end if;
end if;
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 (STRIN(SSUBSTR => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN', SSOURCE => SCOLS, SDELIM => ';') = 0) then
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => SPERIODNAME, SVALUE => 'blue');
- SCOLS := SCOLS || SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN;';
- end if;
+ SCOLS := SCOLS || SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN;';
+ end if;
end loop;
end if;
-
/* Фактические и внеплановые работы */
- if (QQ.DDATEFACTEND is not null and QQ.DDATEFACTBEG is not null) then
- if (QQ.nEQV_RN is not null) then
+ if ((QQ.DDATEFACTEND is not null) and (QQ.DDATEFACTBEG is not null)) then
+ /* Фактические - зелёный, внеплановые - красный */
+ if (QQ.NEQV_RN is not null) then
SFACT_CLR := 'green';
else
SFACT_CLR := 'red';
- end if;
-
+ end if;
NWORKPERDAY := null;
+ /* Если период не в одном месяце, то считаем трудоёмкость в день */
if (EXTRACT(month from QQ.DDATEFACTBEG) != EXTRACT(month from QQ.DDATEFACTEND)) then
- 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)
+ 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)
loop
- 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
+ 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
+ /* Обновляется текущий месяц */
if (NCURMONTH != NMONTH_FACT) then
NCURMONTH := NMONTH_FACT;
end if;
SPERIODNAME := '_' || TO_CHAR(NYEAR_FACT) || '_' || NMONTH_FACT;
-
- if (QQ.NSUMWORKFACT is not null and NWORKPERDAY is null) then
- PKG_CONTVALLOC1S.PUTN(YM, SPERIODNAME || '_F', PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_F') + QQ.NSUMWORKFACT);
+ /* Подсчёт трудоёмкости за месяц если период в одном месяце */
+ 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);
end if;
-
/* Добавление в коллекцию окрашивания месяца */
- if (PKG_CONTVALLOC1S.EXISTS_(rCONTAINER => MCLR, sROWID => SPERIODNAME) = false) then
- PKG_CONTVALLOC1S.PUTS(MCLR, SPERIODNAME, SFACT_CLR);
+ if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => MCLR, SROWID => SPERIODNAME) = false) then
+ PKG_CONTVALLOC1S.PUTS(RCONTAINER => MCLR, SROWID => SPERIODNAME, SVALUE => SFACT_CLR);
else
+ /* Если второй цвет для месяца */
if (STRIN(trim(SFACT_CLR), trim(PKG_CONTVALLOC1S.GETS(MCLR, SPERIODNAME))) = 0) then
- PKG_CONTVALLOC1S.PUTS(MCLR, SPERIODNAME, PKG_CONTVALLOC1S.GETS(MCLR, SPERIODNAME) || ' ' || SFACT_CLR);
+ PKG_CONTVALLOC1S.PUTS(RCONTAINER => MCLR,
+ SROWID => SPERIODNAME,
+ SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => SPERIODNAME) || ' ' ||
+ SFACT_CLR);
end if;
end if;
end if;
+ /* Подсчёт трудоёмкости за месяц если период не в одном месяце */
if (NWORKPERDAY is not null) then
- PKG_CONTVALLOC1S.PUTN(YM, SPERIODNAME || '_F', PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_F') + NWORKPERDAY);
+ PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM,
+ SROWID => SPERIODNAME || '_F',
+ NVALUE => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, SROWID => SPERIODNAME || '_F') +
+ NWORKPERDAY);
end if;
SPERIODNAME := '_' || TO_CHAR(NYEAR_FACT) || '_' || TO_CHAR(NMONTH_FACT) || '_' || TO_CHAR(NDAY_FACT);
- /* Добавление окрашивания дней факта */
- if (PKG_CONTVALLOC1S.EXISTS_(rCONTAINER => MCLR, sROWID => SPERIODNAME) = false) then
- PKG_CONTVALLOC1S.PUTS(MCLR, SPERIODNAME, SFACT_CLR);
+ /* Добавление в коллекцию окрашивания дней факта */
+ if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => MCLR, SROWID => SPERIODNAME) = false) then
+ PKG_CONTVALLOC1S.PUTS(RCONTAINER => MCLR, SROWID => SPERIODNAME, SVALUE => SFACT_CLR);
else
- if (trim(PKG_CONTVALLOC1S.GETS(MCLR, SPERIODNAME)) = 'green' and trim(SFACT_CLR) = 'red') then
- PKG_CONTVALLOC1S.PUTS(MCLR, SPERIODNAME, SFACT_CLR);
+ /* Если второй цвет для месяца */
+ 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);
end if;
- end if;
+ end if;
end loop;
- end if;
-
- if (RDG_ROW0.RCOLS is not null and NROWS = 0) then
- /* Цикл по годам периода */
+ end if;
+ if ((RDG_ROW0.RCOLS is not null) and (NROWS = 0)) then
+ /* Цикл по годам периода */
for Y in NFROMYEAR .. NTOYEAR
loop
if (NFROMYEAR = NTOYEAR) then
@@ -558,45 +725,51 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
if (Y = NFROMYEAR) then
NMS := NFROMMONTH;
NME := 12;
- elsif (NFROMYEAR < Y and Y < NTOYEAR) then
+ elsif ((NFROMYEAR < Y) and (Y < NTOYEAR)) then
NMS := 1;
NME := 12;
elsif (Y = NTOYEAR) then
NMS := 1;
- NME := NTOMONTH;
+ NME := NTOMONTH;
end if;
end if;
-
/* Цикл по месяцам года */
for M in NMS .. NME
loop
SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M);
- PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0,
- SNAME => SPERIODNAME,
- SVALUE => 'план: ' || HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_P')) || ' факт: ' || HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_F')));
- end loop;
+ PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0,
+ SNAME => SPERIODNAME,
+ SVALUE => 'план: ' ||
+ HOURS_STR(NHOURS => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
+ SROWID => SPERIODNAME || '_P')) ||
+ ' факт: ' ||
+ HOURS_STR(NHOURS => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
+ SROWID => SPERIODNAME || '_F')));
+ end loop;
end loop;
-
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW0);
end if;
- /* План для последней записи */
- if (RDG_ROW.RCOLS is not null and NROWS = 0) then
+ /* План для последней записи */
+ if ((RDG_ROW.RCOLS is not null) and (NROWS = 0)) then
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
end if;
/* Факт для последней записи */
- if (RDG_ROW2.RCOLS is not null and NROWS = 0) then
- CR := PKG_CONTVALLOC1S.FIRST_(MCLR);
- for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(MCLR)
+ if ((RDG_ROW2.RCOLS is not null) and (NROWS = 0)) then
+ CR := PKG_CONTVALLOC1S.FIRST_(RCONTAINER => MCLR);
+ for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(RCONTAINER => MCLR)
loop
- PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW2, SNAME => CR, SVALUE => PKG_CONTVALLOC1S.GETS(MCLR, CR));
- CR := PKG_CONTVALLOC1S.NEXT_(MCLR, cr);
+ PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW2,
+ SNAME => CR,
+ SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => CR));
+ CR := PKG_CONTVALLOC1S.NEXT_(RCONTAINER => MCLR, SROWID => CR);
end loop;
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW2);
- end if;
+ end if;
end loop;
/* Сериализуем описание */
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1);
- PKG_CONTVALLOC1S.PURGE(YM);
+ PKG_CONTVALLOC1S.PURGE(RCONTAINER => YM);
end EQUIPSRV_GRID;
+
end PKG_P8PANELS_EQUIPSRV;
/