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

Tworzenie dokumentów MG z ZMO w HMF
https://forum.mix-soft.pl/viewtopic.php?f=15&t=4844
Strona 1 z 1

Autor:  wojtek [ 2013-03-29, 15:31 ]
Tytuł:  Tworzenie dokumentów MG z ZMO w HMF

Witam.
Mam problem z tworzeniem dok. MG z ZMO w HMF. W standardzie funkcjonuje możliwość stworzenia dokumentu MG poprzez OPERACJE na ZMO. Problem polega na tym, że na WZ pojawiają się wszystkie pozycje z ZMO i trzeba takie WZ modyfikować. Jeśli pozycji jest kilka-kilkanaście to nie ma problemu, ale jeśli jest kilkaset to zajmuje to sporo czasu. Napisałem dość obszerny raport. Działa z listy zamówień. Pobiera do GRIDA wszystkie pozycje danego zamówienia wraz z interesującymi mnie danymi (cena, ilość, data i inne). Grid wyposażony jest w możliwość zaczekowania odpowiednich pozycji zamówienia i utworzenia dokumentu MG tylko na wybrane pozycje. Myślałem że uda się utworzyć dokument WZ w buforze a później za pomocą opcji "Utwórz powiązanie z innym dokumentem" powiązać WZ z ZMO. Opcja nie zawsze kojarzy mi te dwa dokumenty. Szczególnie problematyczne są dokumenty ZMO na których dana karta towarowa występuje w kilku pozycjach. Wtedy nigdy nie udaje się prawidłowo powiązać dokumentów. Poniżej zamieszczam fragment kodu pobierający dane z ZMO do Grida, oraz funkcję która tworzy dokument WZ na wybrane pozycje:
Kod:
//-----------------------------------------
int sub TworzListeDanych()
//-----------------------------------------
   string s_Opis_Full, s_Opis, s_Termin_realizacji, s_Nr_zamowienia, s_nabywca, s_Nr_Poz
   int nErr
   xParametry = xFactory.NewObject("XDosTwParams")

   int i_iloscZrealixowana


   xMG = GetObjById("BDokumentZo",l_idZMO)
   long wiersz=grd_dane.currow
   grd_dane.RowCount = 0
   s_nabywca= WypiszKontrahenta(xMG.danekh)   

   for k = 1 to k > xMG.Pozycje.count()
   
      s_Nr_Poz = using "%l",xMG.Pozycje.item(k).id      
      qZap1="SELECT * FROM HM.PLK_DOKMG where idZMO="+s_id_ZMO+" and idPozZMO ="+s_Nr_Poz

      rs1.Open(qZap1, con1)
   
      if rs1.EOF >= 0 then
      i_iloscZrealixowana = rs1.Fields("sumaRealizacji").value
      else
      i_iloscZrealixowana   = 0
      endif
         
      s_Opis_Full = xMG.Pozycje.item(k).opis

      buf = s_Opis_Full
      while replace ":","DUPPA": wend
      move to 0
      
      if find regular "{*}dataDUPPA{*}zamDUPPA{*}$" then
      s_Opis = regular 1
      s_Termin_realizacji = mid((regular 2),1,10)
      s_Nr_zamowienia = regular 3
      else
      s_Opis = s_Opis_Full
      s_Termin_realizacji= ""
      s_Nr_zamowienia = ""
      endif
      
      xTw = GetObjByKod("BTowar",xMG.Pozycje.item(k).kod)
      xParametry.Clear()
      xParametry.id=xTw.id   
      xDosTw=xFactory.NewObject("BDosTw")
      nerr = xDosTw.Load("", xParametry) //Załaduj parametry obiektu
      xParametry.Clear()
      
      i=0
      grd_dane.InsertRow(grd_dane.RowCount)
      grd_dane.Rows(grd_dane.RowCount-1).Value(i)=(using "%l",xMG.Pozycje.item(k).id)
      grd_dane.Rows(grd_dane.RowCount-1).Value(i+=1)=(using "%l",0)
      grd_dane.Rows(grd_dane.RowCount-1).Value(i+=1)=k//rs1.Fields("idRozl").Value
      grd_dane.Rows(grd_dane.RowCount-1).Value(i+=1)=xMG.Pozycje.item(k).kod
      grd_dane.Rows(grd_dane.RowCount-1).Value(i+=1)=s_Opis
      grd_dane.Rows(grd_dane.RowCount-1).Value(i+=1)=xMG.Pozycje.item(k).ilosc
      grd_dane.Rows(grd_dane.RowCount-1).Value(i+=1)=s_Nr_zamowienia
      grd_dane.Rows(grd_dane.RowCount-1).Value(i+=1)=s_Termin_realizacji
      grd_dane.Rows(grd_dane.RowCount-1).Value(i+=1)= s_nabywca
      grd_dane.Rows(grd_dane.RowCount-1).Value(i+=1)=""//s_NrZamObcego//rs1.Fields("dokument").Value
      grd_dane.Rows(grd_dane.RowCount-1).Value(i+=1)=i_iloscZrealixowana//s_DataDostawy//rs1.Fields("data_dok").Value      
      
      if rs1.EOF>=0 then
         if i_iloscZrealixowana >= xMG.Pozycje.item(k).ilosc then      
            grd_dane.Rows(grd_dane.RowCount-1).SetFont(1)
            grd_dane.Rows(grd_dane.RowCount-1).Value(i+=1)="Zrealizowano"   
         else            
            grd_dane.Rows(grd_dane.RowCount-1).cell(10).SetFont(1)
            grd_dane.Rows(grd_dane.RowCount-1).cell(11).SetFont(1)
            grd_dane.Rows(grd_dane.RowCount-1).Value(i+=1)="Zrealizowano częściowo"   
         endif
      endif
      rs1.close()
   next k
   grd_dane.currow=wiersz
EndSub   

Kod:
//-----------------------------------------
int sub UtworzMG()
//-----------------------------------------

string s_opis_dok, s_Kod_nabywcy,s_id_poz
int i_sonda = 0
int suma_ilosci

s_TypDokMg = "WZ"
formZw()

zw.Clear()
   for licz=0 to licz>grd_dane.RowCount-1
         if grd_dane.Rows(licz).Value(1) then                  
            if grd_dane.Rows(licz).Value(11) !="Zrealizowano" then                  
                  s_id_poz = using "%l",grd_dane.Rows(licz).Value(0)
                  s_Kod_Nabywcy = grd_dane.Rows(licz).Value(8)
                  s_opis_dok = "Wydanie (ref: "+grd_dane.Rows(licz).Value(6)+")"
            
                  zw.SetField("typDk", s_TypDokMg)
                  zw.SetField("opis",s_opis_dok)
                  zw.BeginSection("danekh")
                  zw.SetField("khkod", s_Kod_nabywcy)
                  zw.EndSection()
               
                  zw.BeginSection("Pozycja dokumentu")
                  zw.SetField("kod",grd_dane.Rows(licz).Value(3))
                  zw.SetField("ilosc", (using "%f",grd_dane.Rows(licz).Value(9)))
                  zw.SetField("opis"   ,(grd_dane.Rows(licz).Value(4)+" data:"+grd_dane.Rows(licz).Value(7)+" zam:"+grd_dane.Rows(licz).Value(6)))
                  zw.EndSection()
                  i_sonda = 1
               
                  qZap1="SELECT * FROM HM.PLK_DOKMG WHERE idZmo = "+s_id_ZMO+" and idPozZmo="+s_id_poz
                  rs1.Open(qZap1, con1)
                  if rs1.EOF then
                     rs1.close()
                     qZap1="Insert into HM.PLK_DOKMG (idZMO,idPozZMO,sumaRealizacji) VALUES("+s_id_ZMO+","+s_Id_poz+","+(using "%f",grd_dane.Rows(licz).Value(9))+")"
                     con1.Execute(qZap1, 0, 0x80 + 0x01)
                  else
               //update                  
                     suma_ilosci = grd_dane.Rows(licz).Value(9)+rs1.fields("sumaRealizacji").value               
                     rs1.close()
                     qZap1="UPDATE HM.PLK_DOKMG SET idZMO="+s_id_ZMO+", idPozZMO="+s_Id_poz+", sumaRealizacji ="+(using "%i",suma_ilosci)+"  where idZMO="+s_id_ZMO+" and idPozZMO ="+s_id_poz
                     con1.Execute(qZap1, 0, 0x80 + 0x01)
                  endif   
            endif            
         endif
   next licz
   if i_sonda then
      zw.ImportMG()
   else
      message "Nie zaznaczono żadnej pozycji lub pozycja już wysłana!"
   endif
      TworzListeDanych()
EndSub


Interesuje mnie czy istnieje możliwość na etapie tworzenie dokumentu WZ powiązania jego pozycji z odpowiednimi pozycjami ZMO na tej samej zasadzie na której działa operacja "Wystaw dokument wydania" z ZMO. B ędę wdzięczny za odpowiedź.

Autor:  rafal [ 2013-03-29, 15:59 ]
Tytuł:  Re: Tworzenie dokumentów MG z ZMO w HMF

Proponuję odwrócić działanie:
1. Utwórz dokument MG do ZMO za pomocą Long UtworzDokumentMagazynowy(Long Id, Int Mode, Int Tryb, Int Typ)
Już teraz te dokumenty są ze sobą powiązane.

Załącznik:
hmfmgdozmo01.jpg
hmfmgdozmo01.jpg [ 78.91 KiB | Przeglądany 3266 razy ]


2. Otwożyć utworzony dokument MG w Twoim gridzie i zdecydować co ma byc wywalone co ma zostać.
3. Doknać zmian w dokumencie MG za pomocą BIoRec
4. Wystawić dokument MG za pomocą Long WystawDokumentMagazynowy(Long Id, Int Mode)

Autor:  wojtek [ 2013-03-29, 16:17 ]
Tytuł:  Re: Tworzenie dokumentów MG z ZMO w HMF

To może zadziałać. Dzięki za odpowiedź, sprawdze jak mi się to wkomponuje w pozostałą częśc kodu

Autor:  wojtek [ 2013-04-02, 10:59 ]
Tytuł:  Re: Tworzenie dokumentów MG z ZMO w HMF

Witam,
Mam problem z pobraniem id dokumentu magazynowego utworzonego w buforze.

zw.ImportMG() zwraca mi Id utworzonego dokumentu, natomiast UtworzDokumentMagazynowy nie zwraca id. Jak za pomocą id pobrac nowoutworzony dokument do edycji w IoRec lub BIorec?

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