БД: Отображение структуры цены из этапа проекта, а не из РТ

This commit is contained in:
Mikhail Chechnev 2023-09-25 00:21:44 +03:00
parent acbcc35703
commit 4758cf71c8

View File

@ -2216,112 +2216,87 @@ text="
RSTAGE_ARTS out TSTAGE_ARTS -- Список статей этапа проекта RSTAGE_ARTS out TSTAGE_ARTS -- Список статей этапа проекта
) )
is is
RPRJ PROJECT%rowtype; -- Çàïèñü ïðîåêòà
RSTG PROJECTSTAGE%rowtype; -- Запись этапа проекта RSTG PROJECTSTAGE%rowtype; -- Запись этапа проекта
NCTL_COST_DP PKG_STD.TREF; -- Рег. номер доп. свойства, определяющего необходимость контроля затрат по статье NCTL_COST_DP PKG_STD.TREF; -- Рег. номер доп. свойства, определяющего необходимость контроля затрат по статье
NCTL_CONTR_DP PKG_STD.TREF; -- Рег. номер доп. свойства, определяющего необходимость контроля контрактации по статье NCTL_CONTR_DP PKG_STD.TREF; -- Рег. номер доп. свойства, определяющего необходимость контроля контрактации по статье
NCT PKG_STD.TREF; -- Ðåã. íîìåð ðàñ÷¸òíîé òàáëèöû
RCURSOR PRSG_CALCTAB.TCURSOR; -- Êóðñîð äëÿ îáõîäà ñòðîê ðàñ÷¸òíîé òàáëèöû
I PKG_STD.TNUMBER; -- Счётчик статей в результирующей коллекции I PKG_STD.TNUMBER; -- Счётчик статей в результирующей коллекции
begin begin
/* ×èòàåì ïðîåêò è ýòàï */ /* ×èòàåì ýòàï */
RSTG := STAGES_GET(NRN => NSTAGE); RSTG := STAGES_GET(NRN => NSTAGE);
RPRJ := GET(NRN => RSTG.PRN);
/* Определим дополнительные свойства - контроль затрат */ /* Определим дополнительные свойства - контроль затрат */
if (NINC_COST = 1) then 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; end if;
/* Îïðåäåëèì äîïîëíèòåëüíûå ñâîéñòâà - êîíòðîëü çàòðàò */ /* Îïðåäåëèì äîïîëíèòåëüíûå ñâîéñòâà - êîíòðîëü êîíòðàêòàöèè */
if (NINC_CONTR = 1) then if (NINC_CONTR = 1) then
FIND_DOCS_PROPS_CODE(NFLAG_SMART => 1, FIND_DOCS_PROPS_CODE(NFLAG_SMART => 1,
NCOMPANY => RPRJ.COMPANY, NCOMPANY => RSTG.COMPANY,
SCODE => 'ПУП.CTL_CONTR', SCODE => 'ПУП.CTL_CONTR',
NRN => NCTL_CONTR_DP); NRN => NCTL_CONTR_DP);
end if; end if;
/* Инициализируем коллекцию */ /* Инициализируем коллекцию */
RSTAGE_ARTS := TSTAGE_ARTS(); RSTAGE_ARTS := TSTAGE_ARTS();
/* Ïîäáèðàåì ðàñ÷¸òíóþ òàáëèöó */ /* Ïîäáèðàåì àêòèâíóþ ñòðóêòóðó öåíû ýòàïà ïðîåêòà è å¸ îáõîäèì ñòàòüè */
for C in (select CT.RN for C in (select CSPA.NUMB SNUMB,
from CALCTABCPYS CT A.RN NARTICLE,
where CT.COMPANY = RPRJ.COMPANY A.NAME SARTICLE,
and exists (select null CSPA.COST_SUM NCOST_SUM
from V_CALCTABCPYPRMS P from PROJECTSTAGE PS,
where P.SPARAMETER_NAME = SSTAGES_CT_CALC_PRM_PRJ STAGES CS,
and P.SSTR_VALUE = RPRJ.CODE CONTRPRSTRUCT CSP,
and P.NPRN = CT.RN) CONTRPRCLC CSPA,
and exists (select null FPDARTCL A
from V_CALCTABCPYPRMS P where PS.RN = RSTG.RN
where P.SPARAMETER_NAME = SSTAGES_CT_CALC_PRM_STG and PS.FACEACCCUST = CS.FACEACC
and trim(P.SSTR_VALUE) = trim(RSTG.NUMB) and CSP.PRN = CS.RN
and P.NPRN = CT.RN) and CSP.SIGN_ACT = 1
order by CT.DOC_DATE desc) and CSPA.PRN = CSP.RN
and CSPA.COST_ARTICLE = A.RN
order by CSPA.NUMB)
loop loop
/* Áåð¸ì ïåðâóþ íàéäåííóþ è âûõîäèì */ /* Äîáàâèì ñòðîêó â êîëëåêöèþ */
NCT := C.RN; RSTAGE_ARTS.EXTEND();
exit; 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; 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; end STAGE_ARTS_GET;
/* Список статей калькуляции этапа проекта */ /* Список статей калькуляции этапа проекта */