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

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

View File

@ -2216,79 +2216,58 @@ 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)
loop
/* Áåð¸ì ïåðâóþ íàéäåííóþ è âûõîäèì */
NCT := C.RN;
exit;
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);
/* Ïîäáèðàåì àêòèâíóþ ñòðóêòóðó öåíû ýòàïà ïðîåêòà è å¸ îáõîäèì ñòàòüè */
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
/* Добавим строку в коллекцию */
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);
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
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);
/* Отклонение затрат (план-факт) */
@ -2301,10 +2280,11 @@ text="
end if;
end if;
/* Если просили включить сведения о контрактах и статья поддерживает это */
if (NINC_CONTR = 1) and (UPPER(F_DOCS_PROPS_GET_STR_VALUE(NPROPERTY => NCTL_CONTR_DP,
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
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);
/* Осталось законтрактовать */
@ -2316,12 +2296,7 @@ text="
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;
/* Список статей калькуляции этапа проекта */