[gelöst] Buchstaben abschneiden

23. September 2009 10:15

Wie sage ich einem Feldinhalt, dass nur die ersten 3 Buchstaben des Inhaltes ausgegeben werden? Kann man gleichzeitig auch die Ausgabe in Großbuchstaben erreichen?

Also: Siemens => SIE
Zuletzt geändert von misterelektro1981 am 23. September 2009 11:40, insgesamt 1-mal geändert.

Re: Buchstaben abschneiden

23. September 2009 10:26

Teil eine Strings auslesen:
COPYSTR
String in Großbuchstaben umwandeln:
UPPERCASE

Schau hierzu auch in die Online-Hilfe von Navision.

Re: Buchstaben abschneiden

23. September 2009 10:36

Was meinst du mit "ausgegeben"?
Die Ausgabe in einer Form/einem Report oder die Ausgabe in einem Dataport?

Soll in dem Feld weiterhin der gesamte Text stehen, jedoch nur die ersten drei Zeichen angezeigt werden (ohne den Inhalt zu ändern)?

Prinzipiell funktioniert es mit folgendem Code:
Code:
IF STRLEN(Text) >=3 THEN
  Text := COPYSTR(Text,1,3);
Text := UPPERCASE(Text);

Je nach genauer Anforderung muss dieser Code nur an der richtigen Stelle eingebaut werden.
(z. B. im OnFormat-Trigger der anzeigenden Textbox auf einer Form)

Edit: Mist, mikka war schneller und hat es sich recht einfach gemacht.

Re: Buchstaben abschneiden

23. September 2009 10:41

Ist meine Deutung so richtig? Ich frag nur, bevor ich etwas zerschiesse.
Code:
Str := Feldname;
Position := 1;
Length := 3;
NewStr := COPYSTR(Str,Position,Length);

Lower := Feldname;
Upper := Uppercase(Lower);


An Timo Lässer:
Es geht um einen DataPort. Die Feldinhalte sollen nicht geändert werden, sondern nur vorn der Ausagabe etwas verändert werden.

Re: Buchstaben abschneiden

23. September 2009 10:53

Wenn es nur im Dataport sein soll:
Da brauchst du noch nicht einmal eine neue Variable anlegen.
Einfach im entsprechenden Dataport-Field folgendes eintragen:
Code:
UPPERCASE(COPYSTR(Feldname,1,3))

Re: Buchstaben abschneiden

23. September 2009 11:01

Timo Lässer hat geschrieben:
Code:
UPPERCASE(COPYSTR(Feldname,1,3))

Führt das nicht zum Laufzeitfehler, wenn das Feld weniger als 3 Zeichen Inhalt hat? Hast du in deiner Lösung vorher auch eine Abfrage gemacht.

Re: Buchstaben abschneiden

23. September 2009 11:07

<offtoppcic>
Timo Lässer hat geschrieben:...
Edit: Mist, mikka war schneller und hat es sich recht einfach gemacht.


Einfach gemacht?
1. Ich habe die Links liebevoll in URL-Tags verpackt
2. habe dann noch die Webseite Quergelesen (in der Hoffnung, ich kann auch noch was lernen :-) )
3. Den Button "Vorschau" gedrückt und meine (liebevolle) Arbeit überprüft
4. Den Beitrag gepostet (und auf Lob und Anerkennung gewartet :mrgreen: )

Tss, tss, tss, du gönnst mir nicht, das ich auch mal schneller bin :-P
(sonst bin ich der immer letzter ist, weil ich die Beiträge ausformuliere)

</offtoppcic>

Re: Buchstaben abschneiden

23. September 2009 11:11

Natalie hat geschrieben:
Timo Lässer hat geschrieben:
Code:
UPPERCASE(COPYSTR(Feldname,1,3))

Führt das nicht zum Laufzeitfehler, wenn das Feld weniger als 3 Zeichen Inhalt hat? Hast du in deiner Lösung vorher auch eine Abfrage gemacht.

Nein, denn wenn das Feld weniger als die gewünschte Länge aufweist, wird alles genommen.
In meinem ersten Code hatte ich diese Prüfung zwar eingebaut, jedoch mit etwas anderem verwechselt.
Es würde zu einem Fehler kommen, wenn ich erst ab der dritten Stelle kopiere und der String kürzer ist.
Da wir aber von Anfang an lesen ist das egal.

Re: Buchstaben abschneiden

23. September 2009 11:12

Natalie hat geschrieben:
Timo Lässer hat geschrieben:
Code:
UPPERCASE(COPYSTR(Feldname,1,3))

Führt das nicht zum Laufzeitfehler, wenn das Feld weniger als 3 Zeichen Inhalt hat? Hast du in deiner Lösung vorher auch eine Abfrage gemacht.


Nein, das führt zu keinem Fehler. Ich habe es eben getestet (da ich mir die gleiche Frage gestellt habe).
(Vermutlich weil kein "boolscher" Rückgabewert abgefangen werden muß)

Edit: Ok, Timo nun hast du es geschafft schneller zu sein :-)

Re: Buchstaben abschneiden

23. September 2009 11:13

Timo Lässer hat geschrieben:Es würde zu einem Fehler kommen, wenn ich erst ab der dritten Stelle kopiere und der String kürzer ist.
Da wir aber von Anfang an lesen ist das egal.

Ah OK, dann hab ich das bisher immer zu umständlich programmiert :oops:

Re: Buchstaben abschneiden

23. September 2009 11:27

Code:
ManuFac := Item.Manufacturer;
ManufacShort := Item.Manufacturer;

UPPERCASE(COPYSTR(ManufacShort,1,3));
UPPERCASE(ManuFac);


Globals:
Code:
Name   DataType   Subtype   Length
ManufacShort   Record   Item   
ManuFac   Record   Item   


Fehlermeldung:
Die Variable Record muss zu 27 gehören und nicht zu 0???

Re: Buchstaben abschneiden

23. September 2009 11:31

misterelektro1981 hat geschrieben:
Code:
ManuFac := Item.Manufacturer;
ManufacShort := Item.Manufacturer;

UPPERCASE(COPYSTR(ManufacShort,1,3));
UPPERCASE(ManuFac);


Globals:
Code:
Name   DataType   Subtype   Length
ManufacShort   Record   Item   
ManuFac   Record   Item   


Fehlermeldung:
Die Variable Record muss zu 27 gehören und nicht zu 0???


ManuFac und ManuFacShort müssen als Textvariablen deklariert sein. Wie bist du auf Record Item gekommen?

Timo Lässer hat geschrieben:Es würde zu einem Fehler kommen, wenn ich erst ab der dritten Stelle kopiere und der String kürzer ist.

Halt - und wenn der String aber leer ist? Dann müsste doch theoretisch schon die StartPos=1 auf einen Fehler laufen ...

Re: Buchstaben abschneiden

23. September 2009 11:38

Habe Record zu Textvariablen geändert.

Jetzt Fehlermeldung:
Der Rückgabewert sollte für diese Funktion verwendet werden.

Re: Buchstaben abschneiden

23. September 2009 11:38

Natalie hat geschrieben:
Timo Lässer hat geschrieben:Es würde zu einem Fehler kommen, wenn ich erst ab der dritten Stelle kopiere und der String kürzer ist.

Halt - und wenn der String aber leer ist? Dann müsste doch theoretisch schon die StartPos=1 auf einen Fehler laufen ...


Ich weiß schon, warum du unsere "Perle" bis :-)

Du hast recht, es "knallt" tatsächlich, wenn das Feld leer ist.
Im meinem Test, Tabelle Item Feld "Beschreibung".

Edit: Wenn ich das COPYSTR entferne, funktioniert der DP, also doch wie von Natalie vorgeschlagen über eine Variable arbeiten
(Ausser es könnte 100%ig sichergestellt werden, das Feld ist immer gefüllt)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.