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ź.