[gelöst] Auffüllen einer Nummer

7. Oktober 2009 07:29

Auf einen Report soll ein Barcode (z.B. Lfd. Nr in der Projektstruktur) drauf, der wie folgt aufgebaut werden sein muss, damit er richtig gelesen werden kann.

*$$$$$$Lfd. Nr.*

Wenn die Lfd. Nummer eine feste Anzahl an Stellen hätte, könnte ich dieses Problem selbst lösen. Die Zahl variiert aber ständig.

Wichtig ist daher, dass die Ldf. Nr. immer mit sovielen Dollarzeichen ($) aufgefüllt wird, das der Inhalt zwischen dem Start- und dem Enddolarzeichen 10 Zeichen lang ist und das ganze in den Sternchen (*) steht.

Bsp:
*$$$$$$$999*
*$$$$$$$$99*
*$$$$$$$$$9*
Zuletzt geändert von Kowa am 13. Oktober 2009 09:48, insgesamt 2-mal geändert.
Grund: Typo im Betreff korrigiert

Re: Auffüllen eienr Nummer

7. Oktober 2009 07:53

ca. so:

Code:
Filler := PADSTR(rec."entry No.", 10-STRLEN(rec."entry No."), '$');
newBarcode := Filler + rec."entry No.";

Re: Auffüllen eienr Nummer

7. Oktober 2009 08:11

Danke, ich werde es so schnell wie möglich ausprobieren (heute wirds wahrscheinlich nichts mehr damit) und dann gebe ich ein Feedback.

Re: Auffüllen eienr Nummer

7. Oktober 2009 09:09

Alternativ (und mit Berücksichtigung der Sternchen):
Code:
WHILE STRLEN(Barcode) < 10 DO
  Barcode := '$' + Barcode;
Barcode := '*' + Barcode + '*';

Re: Auffüllen eienr Nummer

7. Oktober 2009 10:17

dann halt :P ( ;) )
Code:
Filler := PADSTR(rec."entry No.", 10-STRLEN(rec."entry No."), '$');
newBarcode := '*'+Filler + rec."entry No."+'*';

Re: Auffüllen einer Nummer

8. Oktober 2009 15:25

Wahrscheinlich bin ich zu blöd. Ich habe beide Wege ausprobiert und bekomme dieselbe Fehlermeldung jedesmal. Eine Typkonvertierung kann nicht... ihr kennt den Text denke ich.

MatthiasKönig:
Name DataType
Res_Barcode Integer
Filler Text

Code:
Code:
Res_Barcode := "Job Structure Line"."Entry No.";
Filler := PADSTR(Res_Barcode, 10-STRLEN(Res_Barcode), '$');
Res_Barcode := '*'+Filler + rec."entry No."+'*';


Nathalie:
Name DataType
Res_Barcode Integer

Code:
Res_Barcode := "Job Structure Line"."Entry No.";
WHILE STRLEN(Res_Barcode) < 10 then begin
Res_Barcode := '$' + Res_Barcode;
Res_Barcode := '*' + Res_Barcode + '*';


Kleiner Tip?

Re: Auffüllen eienr Nummer

8. Oktober 2009 15:33

Hallo misterelektro1981,

ein Barcode kann kein integer sein, auch wenn einige Programmierer das immer noch nicht kapiert haben :evil: .
Da ein Barcode auch führende Nullen haben kann (UPC, von 8 auf 13 Stellen erweiterte EANs), kannst die nur als Text oder besser Code abbilden. Bei einem Integer würden die führenden Nullen sofort bei der Zuweisung mit EVALUATE wieder gelöscht werden, und du bist wieder da wo du angefangen hast.

Gruß, Fiddi

Re: Auffüllen eienr Nummer

8. Oktober 2009 15:42

Danke für die Antwort fiddi. Der Barcode soll eine laufende Nummer codieren, dort ist keine führende 0 etc. vorgesehen.

Jetzt sind die gl. Variablen von Typ Code und trotzdem kommt die Fehlermeldung: Eine Typkonvert.....Text=Integer??

Code:
Filler := PADSTR("Job Structure Line"."Entry No.", 10-STRLEN("Job Structure Line"."Entry No."), '$');
Res_Barcode := '*'+Filler +"Job Structure Line"."Entry No."+'*';

Re: Auffüllen eienr Nummer

8. Oktober 2009 15:58

Ich vermute mal, dass deine "Job Structure Line"."Entry No." vom Typ Integer ist.
PADSTR erwartet dort aber einen Text.

Lösung:
FORMAT("Job Structure Line"."Entry No.")

[Edit] Das gilt auch für die zweite Zeile.

Re: Auffüllen eienr Nummer

8. Oktober 2009 16:07

@misterelektro.

trotzdem kannst du nicht eine Textvariable einem Integer zuweisen, das geht nur mit EVALUATE.
Außerdem kann ein Integer keine '$'- oder '*'-Zeichen enthalten, dort gehen nur Zahlen von -2^31 bis 2^31 rein.

Welchen Barcodetyp willst du denn auf deinem Beleg haben? EAN, Code 39, 2/5, Code 128, EAN 128???
Du musst dich auch darüber informieren, welche Zeichen für deinen gewünschten Barcode zulässig sind, und ob du evtl. eine Prüfziffer berechnen musst. Wenn du einen Barcode in Strichform auf deine Belege drucken willst, benötigst du einen passenden Font. Der benötigt i.d.R. aber etwas ganz anderes als deinen berechneten Code.
Das alles ist notwendig, damit ein Scanner deinen gedruckten Barcode später lesen kann.

Gruß, Fiddi

Re: Auffüllen eienr Nummer

8. Oktober 2009 16:10

Timo Lässer: Deine Vermutung ist richtig.

Folgende Änderungen habe ich vorgenommen.

Code:
Filler := PADSTR(Format("Job Structure Line"."Entry No."), 10-STRLEN(Format("Job Structure Line"."Entry No.")), '$');
Res_Barcode := '*'+Filler+Format("Job Structure Line"."Entry No.") +'*';


Alle laufenden Nummer werden nun aber als *0$$$$$$$$0* ausgegeben.

Re: Auffüllen eienr Nummer

8. Oktober 2009 16:28

Hallo misterelektro,

ich finde PADSTR ist für dein Problem nicht geeignet, da es die Füll- Zeichen an deinen Wert anhängt, du willst ihn aber davor haben, verstehe ich das richtig :?:

Res_Barcode muss mindestens vom Typ Text[12] oder Code[12] sein.
Code:
Res_Barcode := CopyStr('*$$$$$$$$$$',1,11-strlen(Format("Job Structure Line"."Entry No.")))+Format("Job Structure Line"."Entry No.")+'*';


Gruß, Fiddi

Edit: fehlende Klammer hinzugefügt. Ich wundere mich allerdings, warum der Compiler das nicht merkt :shock:
Zuletzt geändert von fiddi am 8. Oktober 2009 16:54, insgesamt 2-mal geändert.

Re: Auffüllen eienr Nummer

8. Oktober 2009 16:43

Hallo fiddi,
Res_Barcode ost jetzt vom Typ Text mit 30 Zeichen. Es kommt immer noch die Fehlermeldung: Eine Typenkonv..... Integer + Text

Ziel soll sein eine laufende Nummer, die in der Stellenanzahlt unterschiedlich sein kann, als Barcode zu codieren.

Der Aufau soll wie folgt sein:
für lauf Nr. 4 => *$$$$$$$$$4*
für lauf Nr. 14 => *$$$$$$$$14*
für lauf Nr. 144 => *$$$$$$$144*

Re: Auffüllen eienr Nummer

8. Oktober 2009 17:00

hab meinen Code oben noch mal korrigiert.

Gruß, Fiddi

Re: Auffüllen eienr Nummer

12. Oktober 2009 07:36

Hallo fiddi,

konnte erst jetzt antworten, da erst jetzt die Zeit zum testen da war.

Egal wie die laufenden Nummer ausssieht, ob 1, 10 oder 100 das Ergebnis ist jetzt immer *$$$$$$$$$0*

Hast du noch einen Tip?

Re: Auffüllen eienr Nummer

12. Oktober 2009 08:21

Dann wird wohl zum Zeitpunkt des Aufrufens der Funktion die Record- Variable nicht gefüllt sein, d.h. es wurde kein Get oder Find auf einen Record aus der Tabelle gemacht.

Gruß, Fiddi

Re: Auffüllen eienr Nummer

12. Oktober 2009 08:37

Das hatte ich auch schon probiert. dazu habe ich eine Record Variable auf die Table Job Structure LIne im OnInitReport trigger durch einen GET Befehl aufgerufen.

Dann kommt die Fehlermeldung: Projektstrukturzeile Lfd. Nr. '0' existiert nicht.

Re: Auffüllen eienr Nummer

12. Oktober 2009 08:41

Dann will ich auch mal meine Version zum Besten geben:

Code:
ResBarcode := FORMAT(JobStructLine."Entry No.");
ResBarcode := '*' + PADSTR('', 10 - STRLEN(ResBarcode), '$') + ResBarcode + '*';


Das GET welches du erwähnst muss schon sinnvoll sein. Du musst sicherstellen, dass der Primärschlüssel (gern auch mehrere Felder umfassend) den du holen möchtest auch existiert. Für FIND(FIRST/SET) sollte der Record mit gleichen Daten gefiltert sein.

Schau dir doch mal die Doku zu GET/FIND... an, da findest du vielleicht dein Problem. Falls du gar nicht weiter kommst, kannst du ja mal den ganzen Report anhängen, damit wir sehen, was genau abläuft.

Re: Auffüllen eienr Nummer

12. Oktober 2009 08:44

Hallo Marcus,

da ich deinen Report nicht kenne, kann ich nicht sagen, ob der Get an der Stelle Sinn machen würde. Ich vermute aber mal, NEIN.

Gruß, Fiddi

Re: Auffüllen eienr Nummer

12. Oktober 2009 08:54

An SilverX: Der Code hat die gleiche Funktion wie der von fiddi.

Es geht um den Report Projektstruktur, diesen habe ich unter einen neuen ID abgespeichert und möchte hieraus einen Werksauftrag erstellen. Hier habe ich (im Originalzustand) nur ein Feld hinzugefügt, das mir die laufende Nr. als Barcode anzeigen soll, hoffe das reicht an Info.

Wo soll der Get Befehl, momentan im OnInitReport => Entry_Nr.GET (Record auf Job Structure Line), den sonst stehen.

Re: Auffüllen eienr Nummer

12. Oktober 2009 09:00

misterelektro1981 hat geschrieben:An SilverX: Der Code hat die gleiche Funktion wie der von fiddi.

Stimmt :)

misterelektro1981 hat geschrieben:Wo soll der Get Befehl, momentan im OnInitReport => Entry_Nr.GET (Record auf Job Structure Line), den sonst stehen.

Idealerweise in einem Bereich in dem die Kriterien für den Datensatz bekannt sind, also dort, wo bereits mit der Job Structure Line gearbeitet wird. Dort ist dann entweder bereits ein Datensatz gelesen oder es stehen alle Daten zur Filterung zur Verfügung.

Re: Auffüllen eienr Nummer

12. Oktober 2009 09:19

Die Record Variable heißt Ressource.

Ich habe es jetzt an mehreren Stellen probiert, aber es klappt nicht, deshalb habe ich mal den report angehangen. Vielleicht kannst du/ihr mir sagen, wo ich diesen Get Befehl hinschrieben muss.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: [gelöst] Auffüllen eienr Nummer

12. Oktober 2009 16:24

Kannst du mir die bitte als text schicken die bitte als Text an deinen Beitrag hängen? Ich habe keine Datenbank die eurer entspricht, also auch keine Möglichkeit dort reinzuschauen die fehlerhaften Referenzen zu korrigieren.

8-)
Zuletzt geändert von SilverX am 12. Oktober 2009 20:22, insgesamt 2-mal geändert.

Re: [gelöst] Auffüllen eienr Nummer

12. Oktober 2009 19:07

SilverX hat geschrieben:Kannst du mir die bitte als text schicken?

Gegenvorschlag: Bitte das Objekt im Textformat an den Beitrag mit der FOB-Datei anhängen, so haben alle mehr davon ;-)

Re: [gelöst] Auffüllen eienr Nummer

12. Oktober 2009 20:19

Timo Lässer hat geschrieben:
SilverX hat geschrieben:Kannst du mir die bitte als text schicken?

Gegenvorschlag: Bitte das Objekt im Textformat an den Beitrag mit der FOB-Datei anhängen, so haben alle mehr davon ;-)
Och mensch Timo, das mein ich doch :mrgreen: