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)