БД: Отображение структуры цены из этапа проекта, а не из РТ
This commit is contained in:
parent
acbcc35703
commit
4758cf71c8
@ -2216,112 +2216,87 @@ text="
|
||||
RSTAGE_ARTS out TSTAGE_ARTS -- Список статей этапа проекта
|
||||
)
|
||||
is
|
||||
RPRJ PROJECT%rowtype; -- Çàïèñü ïðîåêòà
|
||||
RSTG PROJECTSTAGE%rowtype; -- Запись этапа проекта
|
||||
NCTL_COST_DP PKG_STD.TREF; -- Рег. номер доп. свойства, определяющего необходимость контроля затрат по статье
|
||||
NCTL_CONTR_DP PKG_STD.TREF; -- Рег. номер доп. свойства, определяющего необходимость контроля контрактации по статье
|
||||
NCT PKG_STD.TREF; -- Ðåã. íîìåð ðàñ÷¸òíîé òàáëèöû
|
||||
RCURSOR PRSG_CALCTAB.TCURSOR; -- Êóðñîð äëÿ îáõîäà ñòðîê ðàñ÷¸òíîé òàáëèöû
|
||||
I PKG_STD.TNUMBER; -- Счётчик статей в результирующей коллекции
|
||||
begin
|
||||
/* ×èòàåì ïðîåêò è ýòàï */
|
||||
/* ×èòàåì ýòàï */
|
||||
RSTG := STAGES_GET(NRN => NSTAGE);
|
||||
RPRJ := GET(NRN => RSTG.PRN);
|
||||
/* Определим дополнительные свойства - контроль затрат */
|
||||
if (NINC_COST = 1) then
|
||||
FIND_DOCS_PROPS_CODE(NFLAG_SMART => 1, NCOMPANY => RPRJ.COMPANY, SCODE => 'ÏÓÏ.CTL_COST', NRN => NCTL_COST_DP);
|
||||
FIND_DOCS_PROPS_CODE(NFLAG_SMART => 1, NCOMPANY => RSTG.COMPANY, SCODE => 'ÏÓÏ.CTL_COST', NRN => NCTL_COST_DP);
|
||||
end if;
|
||||
/* Îïðåäåëèì äîïîëíèòåëüíûå ñâîéñòâà - êîíòðîëü çàòðàò */
|
||||
/* Îïðåäåëèì äîïîëíèòåëüíûå ñâîéñòâà - êîíòðîëü êîíòðàêòàöèè */
|
||||
if (NINC_CONTR = 1) then
|
||||
FIND_DOCS_PROPS_CODE(NFLAG_SMART => 1,
|
||||
NCOMPANY => RPRJ.COMPANY,
|
||||
NCOMPANY => RSTG.COMPANY,
|
||||
SCODE => 'ПУП.CTL_CONTR',
|
||||
NRN => NCTL_CONTR_DP);
|
||||
end if;
|
||||
/* Инициализируем коллекцию */
|
||||
RSTAGE_ARTS := TSTAGE_ARTS();
|
||||
/* Ïîäáèðàåì ðàñ÷¸òíóþ òàáëèöó */
|
||||
for C in (select CT.RN
|
||||
from CALCTABCPYS CT
|
||||
where CT.COMPANY = RPRJ.COMPANY
|
||||
and exists (select null
|
||||
from V_CALCTABCPYPRMS P
|
||||
where P.SPARAMETER_NAME = SSTAGES_CT_CALC_PRM_PRJ
|
||||
and P.SSTR_VALUE = RPRJ.CODE
|
||||
and P.NPRN = CT.RN)
|
||||
and exists (select null
|
||||
from V_CALCTABCPYPRMS P
|
||||
where P.SPARAMETER_NAME = SSTAGES_CT_CALC_PRM_STG
|
||||
and trim(P.SSTR_VALUE) = trim(RSTG.NUMB)
|
||||
and P.NPRN = CT.RN)
|
||||
order by CT.DOC_DATE desc)
|
||||
/* Ïîäáèðàåì àêòèâíóþ ñòðóêòóðó öåíû ýòàïà ïðîåêòà è å¸ îáõîäèì ñòàòüè */
|
||||
for C in (select CSPA.NUMB SNUMB,
|
||||
A.RN NARTICLE,
|
||||
A.NAME SARTICLE,
|
||||
CSPA.COST_SUM NCOST_SUM
|
||||
from PROJECTSTAGE PS,
|
||||
STAGES CS,
|
||||
CONTRPRSTRUCT CSP,
|
||||
CONTRPRCLC CSPA,
|
||||
FPDARTCL A
|
||||
where PS.RN = RSTG.RN
|
||||
and PS.FACEACCCUST = CS.FACEACC
|
||||
and CSP.PRN = CS.RN
|
||||
and CSP.SIGN_ACT = 1
|
||||
and CSPA.PRN = CSP.RN
|
||||
and CSPA.COST_ARTICLE = A.RN
|
||||
order by CSPA.NUMB)
|
||||
loop
|
||||
/* Áåð¸ì ïåðâóþ íàéäåííóþ è âûõîäèì */
|
||||
NCT := C.RN;
|
||||
exit;
|
||||
/* Äîáàâèì ñòðîêó â êîëëåêöèþ */
|
||||
RSTAGE_ARTS.EXTEND();
|
||||
I := RSTAGE_ARTS.LAST;
|
||||
/* Íàïîëíèì å¸ çíà÷åíèÿìè èç õðàíèëèùà */
|
||||
RSTAGE_ARTS(I).NRN := C.NARTICLE;
|
||||
RSTAGE_ARTS(I).SCODE := C.SNUMB;
|
||||
RSTAGE_ARTS(I).SNAME := C.SARTICLE;
|
||||
RSTAGE_ARTS(I).NPLAN := C.NCOST_SUM;
|
||||
/* Åñëè ïðîñèëè âêëþ÷èòü ñâåäåíèÿ î çàòðàòàõ è ñòàòüÿ ïîääåðæèâàåò ýòî */
|
||||
if ((NINC_COST = 1) and
|
||||
(UPPER(F_DOCS_PROPS_GET_STR_VALUE(NPROPERTY => NCTL_COST_DP,
|
||||
SUNITCODE => 'FinPlanArticles',
|
||||
NDOCUMENT => RSTAGE_ARTS(I).NRN)) = UPPER(SYES)) and
|
||||
(RSTAGE_ARTS(I).NPLAN is not null)) then
|
||||
/* Ôàêòè÷åñêèå çàòðàòû ïî ñòàòüå */
|
||||
RSTAGE_ARTS(I).NCOST_FACT := STAGE_ARTS_GET_COST_FACT(NSTAGE => NSTAGE, NFPDARTCL => RSTAGE_ARTS(I).NRN);
|
||||
/* Îòêëîíåíèå çàòðàò (ïëàí-ôàêò) */
|
||||
RSTAGE_ARTS(I).NCOST_DIFF := RSTAGE_ARTS(I).NPLAN - RSTAGE_ARTS(I).NCOST_FACT;
|
||||
/* Êîíòðîëü çàòðàò */
|
||||
if (RSTAGE_ARTS(I).NCOST_DIFF >= 0) then
|
||||
RSTAGE_ARTS(I).NCTRL_COST := 0;
|
||||
else
|
||||
RSTAGE_ARTS(I).NCTRL_COST := 1;
|
||||
end if;
|
||||
end if;
|
||||
/* Åñëè ïðîñèëè âêëþ÷èòü ñâåäåíèÿ î êîíòðàêòàõ è ñòàòüÿ ïîääåðæèâàåò ýòî */
|
||||
if ((NINC_CONTR = 1) and
|
||||
(UPPER(F_DOCS_PROPS_GET_STR_VALUE(NPROPERTY => NCTL_CONTR_DP,
|
||||
SUNITCODE => 'FinPlanArticles',
|
||||
NDOCUMENT => RSTAGE_ARTS(I).NRN)) = UPPER(SYES)) and
|
||||
(RSTAGE_ARTS(I).NPLAN is not null)) then
|
||||
/* Çàêîíòðàêòîâàíî */
|
||||
RSTAGE_ARTS(I).NCONTR := STAGE_ARTS_GET_CONTR(NSTAGE => NSTAGE, NFPDARTCL => RSTAGE_ARTS(I).NRN);
|
||||
/* Îñòàëîñü çàêîíòðàêòîâàòü */
|
||||
RSTAGE_ARTS(I).NCONTR_LEFT := RSTAGE_ARTS(I).NPLAN - RSTAGE_ARTS(I).NCONTR;
|
||||
/* Êîíòðîëü êîíòðàêòàöèè */
|
||||
if (RSTAGE_ARTS(I).NCONTR_LEFT >= 0) then
|
||||
RSTAGE_ARTS(I).NCTRL_CONTR := 0;
|
||||
else
|
||||
RSTAGE_ARTS(I).NCTRL_CONTR := 1;
|
||||
end if;
|
||||
end if;
|
||||
end loop;
|
||||
/* Îáõîäèì ñòðîêè ðàñ÷¸òíîé òàáëèöû åñëè íàøëè */
|
||||
if (NCT is not null) then
|
||||
/* Ïîïûòàåìñÿ óñòàíîâèòü òàáëèöó èç õðàíèëèùà */
|
||||
PRSG_CALCTAB_STORE.SELECT_TABLE(NDOCUMENT => NCT,
|
||||
SSHEET_NAME => SSTAGES_CT_CALC_SH_CACL,
|
||||
STABLE_NAME => SSTAGES_CT_CALC_TBL_CLARTS);
|
||||
/* Âñòà¸ì íà ïåðâóþ ñòðîêó */
|
||||
PRSG_CALCTAB_STORE.FIRST_ROW(SROW_NAME => SSTAGES_CT_CALC_LN_ARTS, RCURSOR => RCURSOR);
|
||||
loop
|
||||
/* Äîáàâèì ñòðîêó â êîëëåêöèþ */
|
||||
RSTAGE_ARTS.EXTEND();
|
||||
I := RSTAGE_ARTS.LAST;
|
||||
/* Íàïîëíèì å¸ çíà÷åíèÿìè èç õðàíèëèùà */
|
||||
RSTAGE_ARTS(I).NRN := RCURSOR.ROW_SOURCE;
|
||||
PRSG_CALCTAB_STORE.READ_ROW_STR(RCURSOR => RCURSOR,
|
||||
SCOLUMN_NAME => SSTAGES_CT_CALC_CL_NUMB,
|
||||
SVALUE => RSTAGE_ARTS(I).SCODE);
|
||||
PRSG_CALCTAB_STORE.READ_ROW_STR(RCURSOR => RCURSOR,
|
||||
SCOLUMN_NAME => SSTAGES_CT_CALC_CL_NAME,
|
||||
SVALUE => RSTAGE_ARTS(I).SNAME);
|
||||
PRSG_CALCTAB_STORE.READ_ROW_NUM(RCURSOR => RCURSOR,
|
||||
SCOLUMN_NAME => SSTAGES_CT_CALC_CL_SUMM_PL,
|
||||
NVALUE => RSTAGE_ARTS(I).NPLAN);
|
||||
/* Åñëè ïðîñèëè âêëþ÷èòü ñâåäåíèÿ î çàòðàòàõ è ñòàòüÿ ïîääåðæèâàåò ýòî */
|
||||
if ((NINC_COST = 1) and
|
||||
(UPPER(F_DOCS_PROPS_GET_STR_VALUE(NPROPERTY => NCTL_COST_DP,
|
||||
SUNITCODE => 'FinPlanArticles',
|
||||
NDOCUMENT => RSTAGE_ARTS(I).NRN)) = UPPER(SYES)) and RSTAGE_ARTS(I)
|
||||
.NPLAN is not null) then
|
||||
/* Ôàêòè÷åñêèå çàòðàòû ïî ñòàòüå */
|
||||
RSTAGE_ARTS(I).NCOST_FACT := STAGE_ARTS_GET_COST_FACT(NSTAGE => NSTAGE, NFPDARTCL => RSTAGE_ARTS(I).NRN);
|
||||
/* Îòêëîíåíèå çàòðàò (ïëàí-ôàêò) */
|
||||
RSTAGE_ARTS(I).NCOST_DIFF := RSTAGE_ARTS(I).NPLAN - RSTAGE_ARTS(I).NCOST_FACT;
|
||||
/* Êîíòðîëü çàòðàò */
|
||||
if (RSTAGE_ARTS(I).NCOST_DIFF >= 0) then
|
||||
RSTAGE_ARTS(I).NCTRL_COST := 0;
|
||||
else
|
||||
RSTAGE_ARTS(I).NCTRL_COST := 1;
|
||||
end if;
|
||||
end if;
|
||||
/* Åñëè ïðîñèëè âêëþ÷èòü ñâåäåíèÿ î êîíòðàêòàõ è ñòàòüÿ ïîääåðæèâàåò ýòî */
|
||||
if (NINC_CONTR = 1) and (UPPER(F_DOCS_PROPS_GET_STR_VALUE(NPROPERTY => NCTL_CONTR_DP,
|
||||
SUNITCODE => 'FinPlanArticles',
|
||||
NDOCUMENT => RSTAGE_ARTS(I).NRN)) =
|
||||
UPPER(SYES) and RSTAGE_ARTS(I).NPLAN is not null) then
|
||||
/* Çàêîíòðàêòîâàíî */
|
||||
RSTAGE_ARTS(I).NCONTR := STAGE_ARTS_GET_CONTR(NSTAGE => NSTAGE, NFPDARTCL => RSTAGE_ARTS(I).NRN);
|
||||
/* Îñòàëîñü çàêîíòðàêòîâàòü */
|
||||
RSTAGE_ARTS(I).NCONTR_LEFT := RSTAGE_ARTS(I).NPLAN - RSTAGE_ARTS(I).NCONTR;
|
||||
/* Êîíòðîëü êîíòðàêòàöèè */
|
||||
if (RSTAGE_ARTS(I).NCONTR_LEFT >= 0) then
|
||||
RSTAGE_ARTS(I).NCTRL_CONTR := 0;
|
||||
else
|
||||
RSTAGE_ARTS(I).NCTRL_CONTR := 1;
|
||||
end if;
|
||||
end if;
|
||||
/* Ïåðåõîä íà ñëåäóþùóþ ñòðîêó */
|
||||
if (not PRSG_CALCTAB_STORE.NEXT_ROW(RCURSOR => RCURSOR)) then
|
||||
exit;
|
||||
end if;
|
||||
end loop;
|
||||
end if;
|
||||
end STAGE_ARTS_GET;
|
||||
|
||||
/* Список статей калькуляции этапа проекта */
|
||||
|
Loading…
x
Reference in New Issue
Block a user