Re: Gdzie znajdę dane korekty
Poniżej kod ładujący dane korekty do obiektu typu InfoPoz
Kod:
#include "Definicje rekordow"
InfoPoz mpozycjeBaza(1)
//------------------------------------------------------------
long sub WczytajDokument(long idKorek)
//------------------------------------------------------------
// idKorek id korekty
// indeks dla pozycji
mapValue mvPoz
mvPoz.Type(int)
long middok
basedk dk_drukowany
dk_drukowany.Open()
dk_drukowany.GetRecById( idKorek )
long id_pierwotny = dk_drukowany.GetField( "idDokKoryg" )
Shrink mpozycjeBaza,-1
baseDK dk_pi
baseDP dp_pi
baseDK dk_kor
baseDP dp_kor
int err_pi, err_kor
int err_pi_poz, err_kor_poz
int dalejNieLiczPrzed = 0
int dalejNieLiczPo = 0
long lPoz
dk_pi.Open()
dp_pi.Open()
dk_kor.Open()
dp_kor.Open()
dk_pi.SetKey("id")
dk_pi.SetKeySeg("id",id_pierwotny)
err_pi = dk_pi.GetRec(EQ)
if err_pi == 0 then
WczytajDokument = dk_pi.GetField("id")
mvPoz.Clear()
middok = dk_pi.GetField("id")
while middok != 0
dk_pi.GetRecById( middok )
err_pi_poz = 0
if DalejNieLiczPrzed == 1 then dalejNieLiczPo = 1
IF middok == idKorek then DalejNieLiczPrzed = 1
dp_pi.SetKey("super")
dp_pi.SetKeySeg("super", middok)
dp_pi.SetKeySeg("lp", 0)
err_pi_poz = dp_pi.GetRec(GE)
while err_pi_poz == 0
if dp_pi.GetField("super") != dk_pi.GetField("id") then exit
if mvPoz.Get( (using "%d",dp_pi.GetField("lp")), -1 ) == -1 then // nie ma jeszcze
mvPoz.Set( (using "%d",dp_pi.GetField("lp")), dp_pi.GetField("lp") )
if mpozycjeBaza(1).Lp != 0 then Grow mpozycjeBaza,1
lPoz = Size(mpozycjeBaza)
else
lPoz = mvPoz.Get( (using "%d",dp_pi.GetField("lp")) )
endif
mpozycjeBaza(lPoz).Lp = dp_pi.GetField("lp")
mPozycjeBaza(lPoz).Opis = dp_pi.GetField( "opis" )
mPozycjeBaza(lPoz).Kod = dp_pi.GetField( "kod" )
mPozycjeBaza(lPoz).idPom = dp_pi.GetField("idhandl")
mPozycjeBaza(lPoz).idtw = dp_pi.GetField ( "idtw" )
mPozycjeBaza(lPoz).sww = dp_pi.GetField( "opisDod" )
mPozycjeBaza(lPoz).Jm = dp_pi.GetField( "jm" )
mPozycjeBaza(lPoz).JmWP = dp_pi.GetField("jmwp" )
mPozycjeBaza(lPoz).cenabazapl = dp_pi.GetField("cenabazapl")
mPozycjeBaza(lPoz).kurs=1
mPozycjeBaza(lPoz).Ilosc += dp_pi.GetField( "ilosc" )
mPozycjeBaza(lPoz).IloscWP += dp_pi.GetField ("iloscwp" )
if dp_pi.GetField("jmwp" ) != dp_pi.GetField( "jm" ) then
if mPozycjeBaza(lPoz).Ilosc && mPozycjeBaza(lPoz).IloscWP then
mPozycjeBaza(lPoz).Cena += dp_pi.GetField("cena" )/(mPozycjeBaza(lPoz).Ilosc / mPozycjeBaza(lPoz).IloscWP)
mPozycjeBaza(lPoz).CenaWal += dp_pi.GetField("cenawal" )/(mPozycjeBaza(lPoz).Ilosc / mPozycjeBaza(lPoz).IloscWP)
endif
if mPozycjeBaza(lPoz).IloscWP then mPozycjeBaza(lPoz).PrzelJMDod = mPozycjeBaza(lPoz).Ilosc / mPozycjeBaza(lPoz).IloscWP
else
mPozycjeBaza(lPoz).Cena += dp_pi.GetField("cena" )
mPozycjeBaza(lPoz).CenaWal += dp_pi.GetField("cenawal" )
mPozycjeBaza(lPoz).PrzelJMDod = 1
endif
mPozycjeBaza(lPoz).cenaWWal+=dp_pi.GetField("cenawal")
mPozycjeBaza(lPoz).CenaWP += dp_pi.GetField("cena" )
mPozycjeBaza(lPoz).CenaWPWal += dp_pi.GetField("cenawal" )
mPozycjeBaza(lPoz).wartoscNetto += dp_pi.GetField("wartNetto" )
mPozycjeBaza(lPoz).Clo=dp_pi.GetField("CenaBazaPL") //clo
mPozycjeBaza(lPoz).Akcyza=dp_pi.GetField("IloscJedn") //akcyza
mPozycjeBaza(lPoz).wartoscNettoWal += dp_pi.GetField("walNetto")
mPozycjeBaza(lPoz).wartoscBruttoWal += dp_pi.GetField("walBrutto")
if dp_pi.GetField("stvati")!=255 then
mPozycjeBaza(lPoz).kwotaVAT += dp_pi.GetField("wartVAT" )
mPozycjeBaza(lPoz).wartoscBrutto += dp_pi.GetField("wartNetto" ) + dp_pi.GetField("wartVAT" )
if !( dp_pi.GetField("typi" ) & 0x10) then mPozycjeBaza(lPoz).stawka = dp_pi.GetField("stvati" ) + 1
else
if !(dp_pi.GetField("typi" ) & 0x10) then
mPozycjeBaza(lPoz).stawka = -1
mPozycjeBaza(lPoz).wartoscBrutto += dp_pi.GetField("wartNetto" )
endif
endif
err_pi_poz = dp_pi.GetRec(NX)
wend
middok = dk_pi.GetField("idkorekt")
wend
else // nie zmaleziono dokumentu pierwotnego
message using "Błąd, nie znaleziono dokumentu id=%l" + lf, idKorek
endif// nie zmaleziono dokumentu pierwotnego
dk_pi.Close()
dp_pi.Close()
dk_kor.Close()
dp_kor.Close()
int i
endsub
// TEST
WczytajDokument(65678)
int i
for i = 1 to i > Size(mpozycjeBaza)
print using "%d %s %f" + lf, mPozycjeBaza(i).lp,mPozycjeBaza(i).kod, mPozycjeBaza(i).ilosc
next i
Załącznik:
hmcalakor01.jpg [ 35.61 KiB | Przeglądany 2115 razy ]
Mechanizm ten używany jest w rozwiązaniu drukującym fakturę korygującą z wszystkimi pozycjami przed korektą i wszystkimi po.