Gelöst Gleichgewicht wird nicht übernommen

Dieses Thema im Forum ".NET (sagede.* DLLs)" wurde erstellt von Arne Drews, 22. August 2019.

  1. Arne Drews

    Arne Drews Mitglied

    Hallo,

    Wie kann ich das Gleichgewicht der Belege beim Erstellen belegen?
    Die Positionen haben zwar die Eigenschaften GleichgewichtsstatistikBestellt, -Geliefert und -Berechnet, aber wenn ich die setze:
    Code:
    p.GleichgewichtsstatistikBestellt = p.Menge;
    p.GleichgewichtsstatistikGeliefert = p.Menge;
    p.GleichgewichtsstatistikBerechnet = p.Menge;
    
    Getestet habe ich auch, VKIstSchlussrechnungGleichgewichtsstatistikErfuellt auf true zu setzen, aber es bleiben immer die entsprechenden Felder auf 0.

    Beispiel:
    Auftrag hat (Bestellt/Geliefert/Berechnet): 1/0/0

    Logisch bis dahin, erstelle ich aber den Lieferschein, hat dieser 0/1/0.
    Bei Erstellung einer Rechnung dann 0/0/1

    Die Belege werden mit Transform übernommen und mit allen Daten aufgefüllt. Bis auf das Gleichgewicht haut auch alles hin.

    Ich setze nach dem Speichern auch den Beleg auf IstErfuellt = true.

    Welche Möglichkeit übersehe ich?
    Danke
     
  2. Arne Drews

    Arne Drews Mitglied

    Zuletzt bearbeitet: 22. August 2019
  3. esc_hein

    esc_hein Mitglied Mitglieder

    Hallo,

    wie werden die Positionen übernommen?
    Code:
     oBeleg.AddBelegPositionen(lBelId, True)
    Ggf. fehlen noch das VorgangspositionsHandle der Position oder auch Mengenangaben in den Referenzen
    Code:
     For Each oPosRef In oPos.VorgangspositionsReferenzen
                   oPosRef.Menge = oPos.Menge
                   oPosRef.MengeBasis = oPos.MengeBasis
    Next oPosRef
     
  4. Arne Drews

    Arne Drews Mitglied

    Hi,

    Beleg.AddBelegPositionen() habe ich bisher nie verwendet. Ist der Parameter für das BelegHandle eigene oder ein Quell-Dokument?

    Ich übernehme die Artikel aktuell auf diese Weise aus einem Vorgängerbeleg:
    Code:
    foreach ( BelegPosition pos in source_doc.Positionen )
    {
        BelegPosition p = new BelegPosition(doc);
        p.SetArtikel(pos.Artikelnummer, pos.AuspraegungsHandle);
        p.Menge = pos.Menge;
        p.Einzelpreis = pos.Einzelpreis;
        p.Rabatt = pos.Rabatt;
        p.SetLagerplatz(20183, "INTERN;0;0;0");
        p.Bezeichnung1 = pos.Bezeichnung1;
        p.Bezeichnung2 = pos.Bezeichnung2;
        p.Langtext = pos.Langtext;
        p.LangtextHtml = pos.LangtextHtml;
    
        if (pos.LangtextIstRichtext)
            p.LangtextRtf = pos.LangtextRtf;
    
        p.Calculate();
        p.GleichgewichtsstatistikBestellt = p.Menge;
        p.GleichgewichtsstatistikGeliefert = p.Menge;
        p.GleichgewichtsstatistikBerechnet = p.Menge;
    
        p.IstErledigt = true;
        doc.Positionen.Add( p );
    }
    
    Dass ich die Mengen zusätzlich in den VorgangsPositionsReferenzen noch manuell anlegen soll, erscheint mir ein wenig FailByDesign. Das müssen doch die Sage-Prozesse machen?

    Danke
     
  5. esc_hein

    esc_hein Mitglied Mitglieder

    evtl. reicht dann schon
    Code:
    p.VorgangspositionsHandle  = pos.VorgangspositionsHandle 
    lBelId kommt aus dem Quell-Beleg
     
  6. Arne Drews

    Arne Drews Mitglied

    Teste ich, danke!

    Getestet: Das war die Lösung, danke!
    Einzige Anmerkung: Position.VorgangspositionsHandle ist read-only, man muss über den Setter gehen:
    Code:
    /*
        p  : Position neuer Beleg
        pos: Position Quellbeleg
    */
    p.SetVorgangPositionHandle( pos.VorgangspositionsHandle );
     
    Zuletzt bearbeitet: 23. August 2019

Diese Seite empfehlen