ACP RECALC
Материал из Фабиус wiki
ACP_RECALC - это программа из справочника R266
Пересчет счета-фактуры по RGNUM-y
ACP_RECALC(Массив RGNUM-ов)
Текст
Parameters rarr
local ACP,i,kd,docs,arr_sum,ttl_sum,j,arr_names,sdb
sdb:=SaveStateDB()
ACP:=OpenChildDoc('ACP','1',)
For i:=1 to Len(rarr)
if Empty(rarr[i]); loop; end
(ACP)->(SetFilter('KINDDOC="ACP" .and. LVLNUM="1" .and. RGNUM="'+rarr[i]+'"'))
if Empty(acp) or (acp)->Eof() or Empty(kd:=(ACP)->CATTR1); loop; end
arr_names:=RET_NAKL_NAMES(kd) // Ради имени реквизита, в котором RGNUM счета фактуры
if Len(kd)>=4 //Есть ссылка на документ
ttl_sum:={0,0,0,0,0,0,0,0,0}
docs:=OpenChildDoc(SubStr(kd,1,3),SubStr(kd,4,1),)
if Empty(docs) or (docs)->Eof(); loop; end
(docs)->(SetFilter('KINDDOC="'+SubStr(kd,1,3)+'" .and. LVLNUM="'+SubStr(kd,4,1)+'" .and. '+arr_names[8]+'="'+(ACP)->RGNUM+'"'))
(docs)->(DBGoTop())
While (docs)->(!EoF)
arr_sum:=(docs)->(ACP_FROM_DOCS())
if (arr_sum[6]+arr_sum[8]+arr_sum[9])>0 or kd<>'MTR2'
For j:=1 to 9
ttl_sum[j]:=ttl_sum[j]+arr_sum[j]
Next
endif
(docs)->(DBSkip())
EndDo
(ACP)->(Add_Replace({||Field->ExtSum:=ttl_sum[1],;
Field->NDSSum:=ttl_sum[2],;
Field->Sum:=ttl_sum[3],;
Field->NSPSUM:=ttl_sum[4],;
Field->NATTR1:=ttl_sum[5],;
Field->NATTR2:=ttl_sum[6],;
Field->NATTR3:=ttl_sum[7],;
Field->NATTR4:=ttl_sum[8],;
Field->NATTR7:=ttl_sum[9]}))
MakePrvs(acp,,1)
endif
Next
RestStateDB(sdb)