[GELÖST] C/AL: gibt es ein Gegenteil von INCSTR?

11. Februar 2014 12:32

Hallo zusammen,

Ich versuche per Schleife automatisiert Arbeitspläne zu erstellen.

Nachdem der Header erstellt wurde, würde ich per Schleife die Zeilen anlegen.
Damit die AP-Zeile Sinn ergibt, muss ich sie enummerieren, d.h. ArbeitsgangNr, vorherige und nachfolgende ArbeitsgangNr.

Ich habe für nachfolgende ArbeitsgangNr INCSTR gefunden.
Aber für die vorhergehende gibt es kein DECSTR.

Wie kann man das lösen?

Hier mein Code:

Code:

...........................................
            Routing.INIT;
            Routing."No." := Item."No.";
            Routing.INSERT(TRUE);
           
            RoutingLine.SETRANGE("Routing No.",Routing."No.");
            IF NOT RoutingLine.FINDSET THEN
            REPEAT
              RoutingLine.INIT;
              RoutingLine."Routing No." := Routing."No.";
              RoutingLine."Operation No." := '0';
              RoutingLine."Operation No." := INCSTR(RoutingLine."Operation No."); //hier wäre das = 1
              RoutingLine."Next Operation No." := INCSTR(RoutingLine."Operation No.");  //hier wäre das = 2
              RoutingLine."Previous Operation No." := DECSTR(RoutingLine."Operation No.");  //hier wäre das = 0
              RoutingLine.INSERT;
            UNTIL RoutingLine.NEXT = 0;
...........................................


Das ist noch nicht der ganze Code, die Arbeitsplatzgruppennummern commen noch dazu sowie Einrichtungs-, Bearbeitungs-, Transport-, Stillstandszeiten etc. etc.

Oder gibt es ein INCSTR(String,Schrittlänge = + 10, + 20, + 30 etc.)?

EDIT: hab den Befehl EVALUATE gefunden.
Jetzt bräuchte ich nur noch den Rückweg, um die Zahl wieder in einen String zu verwandeln?

EDIT 2: FORMAT verwandelt zurück.
Zuletzt geändert von Freestyler am 11. Februar 2014 14:18, insgesamt 1-mal geändert.

Re: C/AL: gibt es ein Gegenteil von INCSTR?

11. Februar 2014 12:45

Zahl in String kannst du mit FORMAT lösen.


INCSTR + X gibt es nicht im Standard,da musst du dir eine eigene Funktion schreiben.

Oder einfach:

Code:
FOR i:=1 TO Step DO code:=INCSTR(code); 


mfg,
winfy

Re: C/AL: gibt es ein Gegenteil von INCSTR?

11. Februar 2014 12:55

Werden die beiden Felder vorherige/nächste Arbeitsgangnr. nicht beim Zertifizieren automatisch gefüllt?

Re: C/AL: gibt es ein Gegenteil von INCSTR?

11. Februar 2014 14:15

McClane hat geschrieben:Werden die beiden Felder vorherige/nächste Arbeitsgangnr. nicht beim Zertifizieren automatisch gefüllt?


Oha, das kann sein.
Danke für den Hinweis.
EDIT: ja, das ist tatsächlich so.
Schade um die 1.5 STD Programmierung, aber man lernt ja fürs Leben und nicht für eine bestimmte Aufgabe :-D

EDIT 2: falls es mal in Zukunft jemanden interessiert wie INCSTR, EVALUATE und FORMAT funktionieren, hier der unnötige Code:

Code:
Page: Sales Order Planning
Trigger: BuildForm ( ):
                  RoutingLine.INIT;
                  RoutingLine."Routing No." := Routing."No.";
                  RoutingLine."Operation No." := '0';
                  RoutingLine."Operation No." := INCSTR(RoutingLine."Operation No."); //Wert = 0 + 1 = 1
                  EVALUATE(NumberInt, RoutingLine."Operation No."); //speichert die 1
                  RoutingLine."Next Operation No." := INCSTR(RoutingLine."Operation No."); //Wert = 1 + 1 = 2
                  NumberInt := NumberInt - 1; //Wert = 1 - 1 = 0
                  NumberStr := FORMAT(NumberInt); //speichert die 0
                  RoutingLine."Previous Operation No." := NumberStr; //Wert = 0
                  RoutingLine.Type := RoutingLine.Type::"Work Center";
                  //RoutingLine."No." := ? hier greift die Logik, welche ich auf SalesLine programmiert habe, dort steht welche Arbeitsgänge zu tun sind
                  ....
                  RoutingLine.INSERT;

Re: [GELÖST] C/AL: gibt es ein Gegenteil von INCSTR?

27. Juli 2016 10:09

Hier wäre ein Beispielfunktion für eine "DECSTR"-Anweisung:
DECSTR – Decrease integer value in string
Erfordert den DotNet-Datentyp, geht also erst ab NAV 2009 R2. Zu dem Einsatz und Einschränkungen in dieser Version: Calling .NET Framework Members from C/AL Code