[Gelöst]Versandkostenrechner

5. September 2019 14:55

Hallo :D,

Ich habe einen Button in den Verkaufsaufträgen erstellt, der die Versandkosten für alle Artikel im Auftrag berechnet, und diese dann in eine neue Zeile einfügt.
Und nun zu meinen Problemen:
1. Der Button gibt beim ersten Aufruf(wenn mehr als ein Artikel in den Zeilen ist) folgenden Fehlercode: "'Verkaufszeile' ist bereits vorhanden . Identifizierte Felder und Werte: Belegart='Auftrag',Belegnr.='1003',Zeilennr.='20000'.
Beim zweiten Aufruf trägt er die richtigen Werte ein, da er wahrscheinlich auf die nächste freie Zeile geht (bei 2 Artikeln Zeilennr. 30000).
2. Nachdem eine Zeile mit den Versandkosten eingefügt wurde soll es nicht mehr möglich sein eine neue einzufügen, da die Versandkosten bereits für alle Artikel berechnet wurden.(Zurzeit kann man die Versandkosten beliebig oft einfügen).

Hier mein Code:
Code:
SalesLine.SETRANGE(SalesLine."Document Type",Rec."Document Type");
SalesLine.SETRANGE(SalesLine."Document No.","No.");
SalesLine.SETRANGE(SalesLine.Type,SalesLine.Type::Item);
IF SalesLine.FINDFIRST THEN BEGIN
  REPEAT
  Artikel.SETRANGE("No.",SalesLine."No.");
  Artikel.FINDSET;
    IF Artikel.FINDSET THEN BEGIN
    Debitoren.SETRANGE(Debitoren."No.",SalesLine."Sell-to Customer No.");
    Debitoren.FINDSET;
    Versandkosten.SETRANGE(Versandkosten.Ländercode,"Bill-to Country/Region Code");
    Versandkosten.SETRANGE(Versandkosten.Zustellercode,Debitoren."Shipping Agent Code");
    Versandkosten.FINDSET;
    END;
  UNTIL SalesLine.NEXT=0;
END;
SalesLine.SETRANGE(SalesLine."Document Type",Rec."Document Type");
SalesLine.SETRANGE(SalesLine."Document No.","No.");
SalesLine.SETRANGE(SalesLine.Type,SalesLine.Type::Item);
IF SalesLine.FINDFIRST THEN BEGIN
  REPEAT
  SLLetzte.RESET;
    IF SLLetzte.FINDLAST THEN
    SalesLine1.INIT;
    Artikel.SETRANGE("No.",SalesLine."No.");
    IF Artikel.FINDFIRST THEN
    GesGewicht:=GesGewicht + (Artikel."Gross Weight" * SalesLine."Qty. to Ship");
  UNTIL SalesLine.NEXT=0;
  Versandkosten.SETFILTER(Minimalgewicht, '<=%1' ,GesGewicht);
    IF Versandkosten.FINDLAST THEN
    SLLetzte.RESET;
    IF SLLetzte.FINDLAST THEN
    SalesLine1.INIT;
    SalesLine1."Document Type" := "Document Type";
    SalesLine1."Document No." := "No.";
    SalesLine1."Line No." += SLLetzte."Line No." + 10000;
    SalesLine1.INSERT;
    SalesLine1.VALIDATE(SalesLine1.Type, SalesLine.Type::"G/L Account"); 
    SalesLine1.VALIDATE("No.", '4730');
    SalesLine1.VALIDATE(SalesLine1.Quantity,1);
    SalesLine1.VALIDATE(SalesLine1."Unit Price",Versandkosten.Preis);
    SalesLine1.MODIFY;
  END;

Re: [Gelöst]Versandkostenrechner

6. September 2019 10:14

Ich habe es mit folgendem Code gelöst:

Code:
IF GesGewicht = 0 THEN BEGIN  //Löst Problem 2
SalesLine.RESET;
SalesLine.SETRANGE(SalesLine."Document Type",Rec."Document Type");
SalesLine.SETRANGE(SalesLine."Document No.","No.");
SalesLine.SETRANGE(SalesLine.Type,SalesLine.Type::Item);
IF SalesLine.FINDFIRST THEN BEGIN
  REPEAT
    Artikel.SETRANGE("No.",SalesLine."No.");
    IF Artikel.FINDFIRST THEN
      GesGewicht:=GesGewicht + (Artikel."Gross Weight" * SalesLine."Qty. to Ship");
  UNTIL SalesLine.NEXT=0;
END;
IF GesGewicht <> 0 THEN BEGIN
   Versandkosten.SETFILTER(Minimalgewicht, '<=%1' ,GesGewicht);
    IF Versandkosten.FINDLAST THEN;
      SLLetzte.SETRANGE("Document Type",Rec."Document Type"); {
      SLLetzte.SETRANGE("Document No.",Rec."No.");                        Löst Problem 1
      SLLetzte.SETRANGE(SLLetzte.Type,SLLetzte.Type::Item);
    IF SLLetzte.FINDLAST THEN                                                     }
      SalesLine1.INIT;
      SalesLine1."Document Type" := "Document Type";
      SalesLine1."Document No." := "No.";
      SalesLine1."Line No." += SLLetzte."Line No." + 10000;
      SalesLine1.INSERT;
      SalesLine1.VALIDATE(SalesLine1.Type, SalesLine.Type::"G/L Account"); 
      SalesLine1.VALIDATE("No.", '4730');
      SalesLine1.VALIDATE(SalesLine1.Quantity,1);
      SalesLine1.VALIDATE(SalesLine1."Unit Price",Versandkosten.Preis);
      SalesLine1.MODIFY;
      "Total Weight" := GesGewicht;
END;
END;