[Gelöst] Tabellenfelder über Report in Textdatei ausgeben

19. Oktober 2008 02:31

Hallo zusammen,

ich möchte verschiedene Felder des Sales Invoice Headers in einer Text Datei ausgeben für die ich in der Debitoren und Verkaufeinrichtung einen Pfad hinterlegt habe. Bisher habe ich folgendes schon geschafft:

Code:

SalesSetup.GET;

OnAfterGetRecord()
Filename := SalesSetup."UPS Path+File";

Datei.TEXTMODE(TRUE);
Datei.WRITEMODE(TRUE);

IF Datei.OPEN(Filename) THEN BEGIN
  Datei.SEEK(Datei.LEN);
  Datei.TRUNC;
END ELSE
  Datei.CREATE(Filename);

SchreibString := DELCHR("Sales Invoice Header"."No.",'<>') + ';' +
                 DELCHR("Sales Invoice Header"."Sell-to Customer No.",'<>') + ';' +
                 DELCHR("Sales Invoice Header"."Ship-to Name",'<>') + ';' +
                 DELCHR("Sales Invoice Header"."Ship-to Name 2",'<>') + ';';
IF DELCHR("Sales Invoice Header"."Ship-to Address") <> '' THEN
  SchreibString := SchreibString + DELCHR("Sales Invoice Header"."Ship-to Address",'<>') + ';'
ELSE
  SchreibString := SchreibString + DELCHR("Sales Invoice Header"."Ship-to Address 2",'<>') + ';';

IF "Sales Invoice Header"."Ship-to Country Code" = '' THEN
  SchreibString := SchreibString + 'DE' + ';'
ELSE
  SchreibString := SchreibString + DELCHR("Sales Invoice Header"."Ship-to Country Code",'<>') + ';';

SchreibString := SchreibString + DELCHR("Sales Invoice Header"."Ship-to Post Code",'<>') + ';' +
                                 DELCHR("Sales Invoice Header"."Ship-to City",'<>') + ';' +
                                 DELCHR("Sales Invoice Header"."Shipment Method Code",'<>') + ';' +
                                 DELCHR("Sales Invoice Header"."Sell-to Phone No.",'<>') + ';' +
                                 DELCHR("Sales Invoice Header"."Sell-to E-Mail",'<>') + ';';

Datei.WRITE(DELCHR(SchreibString,'>'));

OnPostDataItem()
Datei.CLOSE;


Jetzt möchte ich aber noch den Wert "Amount including VAT" in dieser Datei mit ausgeben, jedoch gelingt es mir nicht, weil das Feld Decimal ist. Für einen Denkanstoß wäre ich dankbar.

Gruß

Andy
Zuletzt geändert von andyypsilon am 20. Oktober 2008 18:13, insgesamt 1-mal geändert.

Re: Tabellenfelder über Report in Textdatei ausgeben

19. Oktober 2008 09:40

Hallo andyypsilon,

mit FORMAT sollte das gehen.

LG Jens

Re: Tabellenfelder über Report in Textdatei ausgeben

20. Oktober 2008 15:34

Hallo Jens,

vielen Dank für die Antwort. Hab das mit Format versucht. Hab mir ein paar Threads dazu schon im Forum angeschaut, aber egal was ich auch mache. Ich erhalte immer den Wert 0 in meiner Datei wenn ich versuche das Feld "Sales Invoice Header"."Amount including VAT" als Text auszugeben. Ich habe auch schon versucht alle anderen Felder die ich in der Datei mit ausgeben möchte wegzulassen und nur das Feld als Wert auszugeben. Aber auch hier bekomme ich nur ne 0 in der Datei. ;-(

Also hier mal mein Versuch die Format Funktion zu nutzen.

Code:
Documentation()

OnPreDataItem()
SalesSetup.GET;

OnAfterGetRecord()
Filename := SalesSetup."UPS Path+File";

Datei.TEXTMODE(TRUE);
Datei.WRITEMODE(TRUE);

IF Datei.OPEN(Filename) THEN BEGIN
  Datei.SEEK(Datei.LEN);
  Datei.TRUNC;
END ELSE
  Datei.CREATE(Filename);

SchreibString := DELCHR("Sales Invoice Header"."No.",'<>') + ';' +
                 DELCHR("Sales Invoice Header"."Sell-to Customer No.",'<>') + ';' +
                 DELCHR("Sales Invoice Header"."Ship-to Name",'<>') + ';' +
                 DELCHR("Sales Invoice Header"."Ship-to Name 2",'<>') + ';';
IF DELCHR("Sales Invoice Header"."Ship-to Address") <> '' THEN
  SchreibString := SchreibString + DELCHR("Sales Invoice Header"."Ship-to Address",'<>') + ';'
ELSE
  SchreibString := SchreibString + DELCHR("Sales Invoice Header"."Ship-to Address 2",'<>') + ';';

IF "Sales Invoice Header"."Ship-to Country Code" = '' THEN
  SchreibString := SchreibString + 'DE' + ';'
ELSE
  SchreibString := SchreibString + DELCHR("Sales Invoice Header"."Ship-to Country Code",'<>') + ';';

SchreibString := SchreibString + DELCHR("Sales Invoice Header"."Ship-to Post Code",'<>') + ';' +
                                 DELCHR("Sales Invoice Header"."Ship-to City",'<>') + ';' +
                                 DELCHR("Sales Invoice Header"."Shipment Method Code",'<>') + ';' +
                                 DELCHR("Sales Invoice Header"."Sell-to Phone No.",'<>') + ';' +
                                 DELCHR("Sales Invoice Header"."Sell-to E-Mail",'<>') + ';';


SchreibStringdec := FORMAT("Sales Invoice Header"."Amount Including VAT",1,'<Integer Thousand><Decimals,3>');

Datei.WRITE(DELCHR(SchreibString + SchreibStringdec,'>'));

OnPostDataItem()
Datei.CLOSE;


Was rauskommt kann man hier dann sehen.
Test.TXT


Vielleicht kann mir ja jmd noch einen Tip geben wo es klemmt.

Danke schon mal im Voraus.

Gruß

andy
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Tabellenfelder über Report in Textdatei ausgeben

20. Oktober 2008 15:41

Da fehlt eine entscheidende Zeile:

Code:
"Sales Invoice Header".CALCFIELDS("Amount Including VAT"); // NEU
SchreibStringdec := FORMAT("Sales Invoice Header"."Amount Including VAT",1,'<Integer Thousand><Decimals,3>');


Grund: "Amount Including VAT" ist ein FlowField. Dessen Berechnung muss erst veranlasst werden.

Übrigens: Alle "Sales Incoice Header"-Stücke können weggelassen werden, wenn sich der Quelltext im gleichnamigen DataItem befindet. Das heißt, dein Quelltext könnte kürzer werden:

OnAfterGetRecord:
Code:
Filename := SalesSetup."UPS Path+File";

Datei.TEXTMODE(TRUE);
Datei.WRITEMODE(TRUE);

IF Datei.OPEN(Filename) THEN BEGIN
  Datei.SEEK(Datei.LEN);
  Datei.TRUNC;
END ELSE
  Datei.CREATE(Filename);

SchreibString := DELCHR("No.",'<>') + ';' +
                 DELCHR("Sell-to Customer No.",'<>') + ';' +
                 DELCHR("Ship-to Name",'<>') + ';' +
                 DELCHR("Ship-to Name 2",'<>') + ';';
IF DELCHR("Ship-to Address") <> '' THEN
  SchreibString := SchreibString + DELCHR("Ship-to Address",'<>') + ';'
ELSE
  SchreibString := SchreibString + DELCHR("Ship-to Address 2",'<>') + ';';

IF "Ship-to Country Code" = '' THEN
  SchreibString := SchreibString + 'DE' + ';'
ELSE
  SchreibString := SchreibString + DELCHR("Ship-to Country Code",'<>') + ';';

SchreibString := SchreibString + DELCHR("Ship-to Post Code",'<>') + ';' +
                                 DELCHR("Ship-to City",'<>') + ';' +
                                 DELCHR("Shipment Method Code",'<>') + ';' +
                                 DELCHR("Sell-to Phone No.",'<>') + ';' +
                                 DELCHR("Sell-to E-Mail",'<>') + ';';

CALCFIELDS("Amount Including VAT");
SchreibStringdec := FORMAT("Amount Including VAT",1,'<Integer Thousand><Decimals,3>');

Datei.WRITE(DELCHR(SchreibString + SchreibStringdec,'>'));


PS:
Mal für Blöde und Faule wie mich - was möchtest du damit grundsätzlich bezwecken?
Code:
DELCHR(Feldname,'<>')

[gelöst!] Re: Tabellenfelder über Report in Textdatei ausgeb

20. Oktober 2008 18:11

Hallo Natalie,

vielen Dank für die schnelle Hilfe und die Anmerkungen. Finds Klasse, wenn Lösungen so wie von Dir noch kommentiert werden, denn nur so kann man dazu lernen.

Es hat im übrigen wunderbar geklappt!

PS:
Mal für Blöde und Faule wie mich - was möchtest du damit grundsätzlich bezwecken?

Code: Alles auswählen
DELCHR(Feldname,'<>')



Also ich hab mir das so gedacht, dass alles entfernt wird, was ungleich des Feldnamens ist.

Wehe es lacht jemand.. ;-)

Aber wie Du gesehen hast bin ich noch Programmier Rookie und schreib daher wohl gerne etwsa mehr, auch wenns net gebraucht wird.. ;-)

Gruß

Andy

PS: Weiss nicht ob ich dafür jetzt noch nen eigenen Beitrag aufmachen muß, aber jetzt mal ne Frage an Dich. Woher weiß man, solche Dinge wie mit dem Calc Field!? Erfahrung, Dokumentionen, Leitfäden!?

Re: [gelöst!] Re: Tabellenfelder über Report in Textdatei ausgeb

20. Oktober 2008 19:40

andyypsilon hat geschrieben:vielen Dank für die schnelle Hilfe und die Anmerkungen. Finds Klasse, wenn Lösungen so wie von Dir noch kommentiert werden, denn nur so kann man dazu lernen.

Es hat im übrigen wunderbar geklappt!

Eine positive Rückmeldung freut einen doch immer :-)

Also ich hab mir das so gedacht, dass alles entfernt wird, was ungleich des Feldnamens ist.

Wahrscheinlich denk ich zu komliziert ... Kannst du mir ein einfaches Beispiel geben?

PS: Weiss nicht ob ich dafür jetzt noch nen eigenen Beitrag aufmachen muß, aber jetzt mal ne Frage an Dich. Woher weiß man, solche Dinge wie mit dem Calc Field!? Erfahrung, Dokumentionen, Leitfäden!?

In chronologischer Reihenfolge: Schulung, Kollegen, Erfahrung :-)
Und wenn ich mir nicht sicher bin, ob ein Feld ein FlowField ist, dann schau ich halt nach :-)

Wenn du beim Stichwort Schulung hellhörig geworden sein solltest, kannst du hier stöbern: NAV Schulungen & Zertifizierungen

Re: [Gelöst] Tabellenfelder über Report in Textdatei ausgeben

21. Oktober 2008 08:49

Wahrscheinlich denk ich zu komliziert ... Kannst du mir ein einfaches Beispiel geben?


Das denke ich nicht, dass Du zu kompliziert denkst. Liegt wohl eher daran, dass ich zu wenig Erfahrung habe um es Beispielhaft erklären zu können.

Ich habe mir im Navision das Format angeschaut, wie die Funktion aufgebaut ist.

Code:
NewString := DELCHR(String [, Where] [, Which])NewString := DELCHR(String [, Where] [, Which])


und bin dann einfach davon ausgegangen, dass ich bei [Where] mit '<>' alles eliminiere, was ungleich des Feldnamens ist.

Gruß

and.Y

Re: [Gelöst] Tabellenfelder über Report in Textdatei ausgeben

21. Oktober 2008 09:08

andyypsilon hat geschrieben:und bin dann einfach davon ausgegangen, dass ich bei [Where] mit '<>' alles eliminiere, was ungleich des Feldnamens ist.

Nein, bitte ein funktionales Beispiel.
Was könnte in einem Feld drin stehen, was möchtest du aber nicht drin haben? Wozu verwendest du also DELCHR?

Re: [Gelöst] Tabellenfelder über Report in Textdatei ausgeben

27. Oktober 2008 14:47

Nein, bitte ein funktionales Beispiel.
Was könnte in einem Feld drin stehen, was möchtest du aber nicht drin haben? Wozu verwendest du also DELCHR?


Also da ich mich wie gesagt mit Beispielen sehr schwer tue anbei die Erklärung aus dem C/AL Symbol Menu.

Code:

Example
This example shows how to use the DELCHR function.

String := Text000;
Where := '<>';
Which := 'Ws';
NewString := DELCHR(String, Where, Which);
MESSAGE(Text001, String,NewString);

Create the following text constants in the C/AL Globals window:

Text Constant
 ENU Value
 
Text000
 'Windy Solutions'
 
Text001
 '>%1<, is transformed to: >%2<'
 

The two strings are shown in the message window as:

>Windy Solutions<, is transformed to: >indy Solution<


Gruß

and.Y

Re: [Gelöst] Tabellenfelder über Report in Textdatei ausgeben

27. Oktober 2008 15:00

Aber schau mal, du rufst DELCHR immer ohne den Which-Paramer auf (zähl mal nach).
Onlinehilfe hat geschrieben:If you do not define any characters, the system uses the equals sign (=) as the default for Where and spaces as the default for Which. It then deletes all spaces.


Wolltest du in deinem SchreibString alle Leerzeichen innerhalb allen Feldern löschen?

Ich glaube (noch immer), dass du das DELCHR schlichtweg auslassen kannst ...