Import wielu zamówień przez API

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

pawel.wilk
Posty: 38
Rejestracja: 06 sie 2008, 14:06
Rola: Administrator CDN XL
Wersja: 10
Lokalizacja: Kraków

Import wielu zamówień przez API

Post autor: pawel.wilk »

Witajcie

Mam taki problem którego nie mogę przeskoczyć. Chcę importować prosto z excela nowych użytkowników i od razu tworzyć dla nich zamówienie na jedną pozycję. W skrócie jeden kontrahent, jedno zamówienie na jedną pozycje.
Robię to w taki sposób że najpierw importuję tych kontrahentów, po prostu lecę po wszystkich wierszach z góry na dół i zasysam ich do XLa. I to Fajnie działa. A później kolej na zamówienia, więc w podobny sposób czeszę po arkuszu z góry na dół, biorę kolumnę z akronimem kontrahenta, towarem, ceną itp... wszystkie wymagane wartości przez XLNowyDokumentZam, XLDodajPozycjeZam mam wypełnione poprawnie. Dokument na końcu zamykam poprawnie, nie zwraca żadnych błędów.
Ale wynik jest trochę inny od oczekiwanego - mianowicie generują się zamówienia, ale nie zmienia mi się akronim kontrahenta - wszystkie są wygenerowane na tego samego - pierwszego w kolejce, tak samo z pozycjami na dokumencie - zamówienia zawierają pierwszą napotkaną wartość w tabeli. Ale zmienia się już wartość i ilość pozycji na przykład.
Nie pomaga zerowanie zmiennej po każdej iteracji, a jak wstawię breakpointa gdzieś w pętli to widzę że wartość w zmiennej jest poprawna - pomimo tego i tak wpisuje mi się kontrahent i towar z pierwszego wiersza.... O co chodzi ?

:evil:
elmiq
Posty: 1025
Rejestracja: 23 sie 2010, 10:04
Rola: Administrator CDN XL
Lokalizacja: Warszawa

Re: Import wielu zamówień przez API

Post autor: elmiq »

Najlepiej byłoby wkleić fragment kodu odpowiedzialny za tworzenie zamówienia :)

Pozdrawiam,
Mateusz
Mateusz Świerkosz

http://elmiq.blogspot.com/
pawel.wilk
Posty: 38
Rejestracja: 06 sie 2008, 14:06
Rola: Administrator CDN XL
Wersja: 10
Lokalizacja: Kraków

Re: Import wielu zamówień przez API

Post autor: pawel.wilk »

no to wklejam aktualny na którym rzeźbie:

Kod: Zaznacz cały

licznik = Pierwszy_wolny_rekord()
For x = 2 To licznik - 1
    Range("A" & x).Select
    With Selection.Interior
        .ColorIndex = 48
        .Pattern = xlSolid
    End With


        DokumentZamNagInfo.AkronimDocelowego = Range("K" & x) + Chr(0)
        
        With DokumentZamNagInfo
            .Wersja = Worksheets("Ogólne").Range("f16").Value
            .Typ = 6
            .Tryb = 3
            .OpeNumerW = 280
            .OpeNumerM = 280
            .OpiNumer = 860
            .FRSID = 9
            .Akronim = "xxx"
            .ZamSeria = "PL"
            
        End With
        
        Wynik = XLNowyDokumentZam_23(Sesja, IDDokumentuZam, DokumentZamNagInfo)
        DokumentZamNagInfo.AkronimDocelowego = ""
        DokumentZamNagInfo.Numer = DokumentZamNagInfo.Numer + 1
        
        
        With DokZamElemInfo
            .Wersja = Worksheets("Ogólne").Range("f16").Value
            .Towar = Range("H" & x) + Chr(0)
            .Ilosc = Str(Range("I" & x)) + Chr(0)
            .Wartosc = Str(Range("J" & x)) + Chr(0)
        
        End With

        Wynik = XLDodajPozycjeZam_23(IDDokumentuZam, DokZamElemInfo)
        DokZamElemInfo.Towar = ""
        
        
        With ZamkniecieDokumentuZamInfo
            .Wersja = Worksheets("Ogólne").Range("f16").Value
        End With
        
        Wynik = XLZamknijDokumentZam_23(IDDokumentuZam, ZamkniecieDokumentuZamInfo)
               
Next x
elmiq
Posty: 1025
Rejestracja: 23 sie 2010, 10:04
Rola: Administrator CDN XL
Lokalizacja: Warszawa

Re: Import wielu zamówień przez API

Post autor: elmiq »

Albo zmodyfikowałeś przed wklejeniem, albo zawsze robisz zamówienie dla

Kod: Zaznacz cały

.Akronim = "xxx"
EDIT: Warto też zwrócić uwagę, że propem obowiązkowym jest Akronim, a nie AkronimDocelowego, z tym że nawet on ustępuje pierwszeństwa jeżeli wypełniasz GID kontrahenta.
Mateusz Świerkosz

http://elmiq.blogspot.com/
pawel.wilk
Posty: 38
Rejestracja: 06 sie 2008, 14:06
Rola: Administrator CDN XL
Wersja: 10
Lokalizacja: Kraków

Re: Import wielu zamówień przez API

Post autor: pawel.wilk »

Tak, zawsze robie zamówienia na XXX, zmieniać ma się tylko kontrahent docelowy. Główny to cały czas xxx.

Kod: Zaznacz cały

DokumentZamNagInfo.AkronimDocelowego = Range("K" & x) + Chr(0)
Wywaliłem go z pętli bo sprawdzałem różne opcje z nim, ale czy to w pętli czy poza nią, zawsze podkłada się pierwszy z listy. Pomimo ze przy breakpoincie w podglądzie wartości tej zmiennej mam porawne wartości...

Tak, wiem że obowiązkowym polem jest Akronim. Ale gid akronimu nie ma nic wspólnego z AkronimDocelowego. Gdyby tak było to już w pierwszym przejściu pętli w akronimie docelowym miałbym xxx, a mam poprawną wartość, przyjmijmy "XXX_Docelowy1". W drugim przejściu Akronim to nadal XXX (tak ma być), ale AkronimDocelowy to nadal "XXX_Docelowy1", a powinno być "XXX_Docelowy2"
Ostatnio zmieniony 11 gru 2013, 14:19 przez pawel.wilk, łącznie zmieniany 1 raz.
elmiq
Posty: 1025
Rejestracja: 23 sie 2010, 10:04
Rola: Administrator CDN XL
Lokalizacja: Warszawa

Re: Import wielu zamówień przez API

Post autor: elmiq »

A działa to tak samo, jeżeli wypełnisz propy "Knd" GID-ami, zamiast przypisywać kontrahenta docelowego akronimem?

W ostateczności po prostu zrób update na ZaN_KnDNumer :)
Mateusz Świerkosz

http://elmiq.blogspot.com/
pawel.wilk
Posty: 38
Rejestracja: 06 sie 2008, 14:06
Rola: Administrator CDN XL
Wersja: 10
Lokalizacja: Kraków

Re: Import wielu zamówień przez API

Post autor: pawel.wilk »

Jak zamiast Akronim użyje KntNumer i wypełnie go gidem to w ogóle głupieje i wystawia zamówienia na docelowego...
Awatar użytkownika
STAY_PJE
Posty: 651
Rejestracja: 24 wrz 2009, 12:08
Rola: Konsultant CDN XL
Lokalizacja: Warszawa i od Helu do Wawelu
Kontakt:

Re: Import wielu zamówień przez API

Post autor: STAY_PJE »

Przyczyną takiego stanu rzeczy jest automatyczne uzupełnianie wszystkich wartości w strukturze DokumentZamNagInfo. Jeśli wprowadzisz do struktury pierwszego kontrahenta wskazując jego akronim to automatycznie zostaną ustawione wszystkie inne pola (w tym knt_gidnumer, knt_docelowyNumer, itd.). Przy kolejnym kontrahencie wartości tych pól pozostają takie same. Nawet jeśli wprowadzisz inny akronim to kontrahent jest pobierany z innych pól (np. knt_gidnumer).
Rozwiązaniem jest czyszczenie całej struktury DokumentZamNagInfo po wykonaniu każdej operacji.
pawel.wilk
Posty: 38
Rejestracja: 06 sie 2008, 14:06
Rola: Administrator CDN XL
Wersja: 10
Lokalizacja: Kraków

Re: Import wielu zamówień przez API

Post autor: pawel.wilk »

Dobra, działa!

Potrzebowałem jeszcze knttyp, dla głównego, dla docelowego zresztą też. Nie wiem czemu tak się zachowuje jeżeli wczytuje po akronimie, jeżeli używam gidów to wszystko jest w porzadku. Analogicznie dla towarów.

Aaaa.... @STAY_PJE to by tłumaczyło dlaczego po gidach działa skoro mają pierwszeństwo. Dzięki.
elmiq
Posty: 1025
Rejestracja: 23 sie 2010, 10:04
Rola: Administrator CDN XL
Lokalizacja: Warszawa

Re: Import wielu zamówień przez API

Post autor: elmiq »

Najlepiej tworzyć przy każdym obrocie pętli nowy obiekt DokumentZamNagInfo - wtedy będzie działało po samych akronimach, a nie zwróciłem uwagi, że tego nie robisz.
Mateusz Świerkosz

http://elmiq.blogspot.com/
ODPOWIEDZ