ACP RECALC — различия между версиями

Материал из Фабиус wiki
Перейти к: навигация, поиск
(Новая страница: «ACP_RECALC - это программа из справочника R266 Пересчет счета-фактуры по RGNUM-y ACP_RECALC(Масси…»)
(нет различий)

Версия 09:11, 25 июля 2017

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)

Смотрите также

Полезные функции

Функции Delphi