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

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 -- Список статей этапа проекта 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
loop and CSPA.COST_ARTICLE = A.RN
/* Áåð¸ì ïåðâóþ íàéäåííóþ è âûõîäèì */ order by CSPA.NUMB)
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);
loop loop
/* Добавим строку в коллекцию */ /* Добавим строку в коллекцию */
RSTAGE_ARTS.EXTEND(); RSTAGE_ARTS.EXTEND();
I := RSTAGE_ARTS.LAST; I := RSTAGE_ARTS.LAST;
/* Наполним её значениями из хранилища */ /* Наполним её значениями из хранилища */
RSTAGE_ARTS(I).NRN := RCURSOR.ROW_SOURCE; RSTAGE_ARTS(I).NRN := C.NARTICLE;
PRSG_CALCTAB_STORE.READ_ROW_STR(RCURSOR => RCURSOR, RSTAGE_ARTS(I).SCODE := C.SNUMB;
SCOLUMN_NAME => SSTAGES_CT_CALC_CL_NUMB, RSTAGE_ARTS(I).SNAME := C.SARTICLE;
SVALUE => RSTAGE_ARTS(I).SCODE); RSTAGE_ARTS(I).NPLAN := C.NCOST_SUM;
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 if ((NINC_COST = 1) and
(UPPER(F_DOCS_PROPS_GET_STR_VALUE(NPROPERTY => NCTL_COST_DP, (UPPER(F_DOCS_PROPS_GET_STR_VALUE(NPROPERTY => NCTL_COST_DP,
SUNITCODE => 'FinPlanArticles', SUNITCODE => 'FinPlanArticles',
NDOCUMENT => RSTAGE_ARTS(I).NRN)) = UPPER(SYES)) and RSTAGE_ARTS(I) NDOCUMENT => RSTAGE_ARTS(I).NRN)) = UPPER(SYES)) and
.NPLAN is not null) then (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_FACT := STAGE_ARTS_GET_COST_FACT(NSTAGE => NSTAGE, NFPDARTCL => RSTAGE_ARTS(I).NRN);
/* Отклонение затрат (план-факт) */ /* Отклонение затрат (план-факт) */
@ -2301,10 +2280,11 @@ text="
end if; end if;
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', SUNITCODE => 'FinPlanArticles',
NDOCUMENT => RSTAGE_ARTS(I).NRN)) = NDOCUMENT => RSTAGE_ARTS(I).NRN)) = UPPER(SYES)) and
UPPER(SYES) and RSTAGE_ARTS(I).NPLAN is not null) then (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 := STAGE_ARTS_GET_CONTR(NSTAGE => NSTAGE, NFPDARTCL => RSTAGE_ARTS(I).NRN);
/* Осталось законтрактовать */ /* Осталось законтрактовать */
@ -2316,12 +2296,7 @@ text="
RSTAGE_ARTS(I).NCTRL_CONTR := 1; RSTAGE_ARTS(I).NCTRL_CONTR := 1;
end if; end if;
end if; end if;
/* Ïåðåõîä íà ñëåäóþùóþ ñòðîêó */
if (not PRSG_CALCTAB_STORE.NEXT_ROW(RCURSOR => RCURSOR)) then
exit;
end if;
end loop; end loop;
end if;
end STAGE_ARTS_GET; end STAGE_ARTS_GET;
/* Список статей калькуляции этапа проекта */ /* Список статей калькуляции этапа проекта */