mojaSymfonia FORUM
https://forum.mix-soft.pl/

Gdzie znajdę dane korekty
https://forum.mix-soft.pl/viewtopic.php?f=15&t=4223
Strona 1 z 1

Autor:  xmaniek [ 2012-10-09, 15:58 ]
Tytuł:  Gdzie znajdę dane korekty

Handel 2012. W bazie DP w rekordzie pozycji faktury korygującej w ilości ma -1 czyli tyle o ile skorygowałem pozycję.
Gdzie jest informacja ile zostało po korekcie?

Autor:  wrob [ 2012-10-09, 16:23 ]
Tytuł:  Re: Gdzie znajdę dane korekty

taka informacja to chyba redundancja by była - przecież zawsze możesz sobie odjąć korektę od głównego dokumentu :)

Autor:  rafal [ 2012-10-10, 16:49 ]
Tytuł:  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
hmcalakor01.jpg [ 35.61 KiB | Przeglądany 2113 razy ]


Mechanizm ten używany jest w rozwiązaniu drukującym fakturę korygującą z wszystkimi pozycjami przed korektą i wszystkimi po.

Załączniki:
Komentarz: Przykład faktury korygującej z wszystkimi pozycjami przed korektą i wszystkimi po.
03 Druga KOREKTA.pdf [27.35 KiB]
Pobrany 184 razy

Strona 1 z 1 Strefa czasowa UTC+1godz. [letni]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/