[gelöst] Excel Ausgabe Endlosschleife

23. Januar 2012 09:54

Ich arbeite gerade an einer Excel Ausgabe über einen Bericht. Dies soll mit untem stehendem Code geschehen.
1) Beim ausführen wird zwar etwas nach Excel ausgegeben, jedoch in einer Endlosschleife, d.h. es wird Excel-Mappe nach Excel-Mappe erzeugt, wieso?
2) Dann habe ich noch eine Frage zu einem Filter der nicht greift. In der Projektstrukturzeile hole ich mir mit dem GET Befehl Zugang auf die Tabelle Item. Es soll nur eine Ausgabe für Artikel mit einer bestimmten Produktgruppe erfolgen. Wieso greift der Filter nicht.

Der Bericht hat folgenden Aufbau:
1 Ebene: Projektstrukturkopf
2 Ebene: Projektstrukturzeile

Code:
Job Structure Line - OnPreDataItem()
"Job Structure Line".SETFILTER(Type,'Artikel');
"Job Structure Line".SETFILTER("Job Replenishment System",'Projektfertigung');

ExcelBuffer.DELETEALL;
EnterCell(1, 1, Z, '', TRUE, FALSE, FALSE);
EnterCell(1, 2, FIELDCAPTION(Description), '', TRUE, FALSE, FALSE);
EnterCell(1, 3, FIELDCAPTION("Description 2"), '', TRUE, FALSE, FALSE);
RowNo := 1;
//Formatierung der Überschriften

Job Structure Line - OnAfterGetRecord()
Item.GET("No.");
Item.SETFILTER(Item."Product Group Code",'HF01');

RowNo += 1;
//Nach jedem Datensatz "Springen in die nächste Zeile"
EnterCell(RowNo, 1, Item."Construction Plan No.", '', FALSE, FALSE, FALSE);
EnterCell(RowNo, 2, Description, '', FALSE, FALSE, FALSE);
EnterCell(RowNo, 3, "Description 2", '', FALSE, FALSE, FALSE);
//Definition der Felder

Job Structure Line - OnPostDataItem()
RowNo += 1;
//Wichtig
ExcelBuffer.CreateBook;
ExcelBuffer.CreateSheet(TABLECAPTION, TABLECAPTION, COMPANYNAME, USERID);
ExcelBuffer.GiveUserControl();
//Erstelle neue Arbeitsmappe

EnterCell(RowNo : Integer;ColumnNo : Integer;CellValue : Text[250];CellFormula : Text[250];Bold : Boolean;Italic : Boolean;UnderLine :
// Definition der Parameter (Reihenfolge!):
ExcelBuffer.INIT;
//Aufruf der Funktion
ExcelBuffer.VALIDATE("Row No.",RowNo);
//Zeile
ExcelBuffer.VALIDATE("Column No.",ColumnNo);
//Spalte
ExcelBuffer."Cell Value as Text" := CellValue;
//Feldernamen
ExcelBuffer.Formula := CellFormula;
ExcelBuffer.Bold := Bold;
//Fett
ExcelBuffer.Italic := Italic;
//Kursiv
ExcelBuffer.Underline := UnderLine;
//Unterstrichen
ExcelBuffer.INSERT;
//Ausführen der Funktion
Zuletzt geändert von misterelektro1981 am 23. Januar 2012 12:57, insgesamt 1-mal geändert.

Re: Excel Ausgabe Endlosschleife

23. Januar 2012 10:18

misterelektro1981 hat geschrieben:1) Beim ausführen wird zwar etwas nach Excel ausgegeben, jedoch in einer Endlosschleife, d.h. es wird Excel-Mappe nach Excel-Mappe erzeugt, wieso?

Der Bericht hat folgenden Aufbau:
1 Ebene: Projektstrukturkopf
2 Ebene: Projektstrukturzeile

Code:
Job Structure Line - OnPostDataItem()
...
//Wichtig
ExcelBuffer.CreateBook;
ExcelBuffer.CreateSheet(TABLECAPTION, TABLECAPTION, COMPANYNAME, USERID);
ExcelBuffer.GiveUserControl();
//Erstelle neue Arbeitsmappe
...

Ich gehe mal davon aus, dass die Projektstrukturzeile unter dem Projektstrukturkopf eingerückt ist!?
D.h. der OnPostDataItem-Trigger wird mehrmals durchlaufen. Ins Blaue geraten, müsstest du genau so viele Excelmappen erhalten wie du Projektstruktur-köpfe hast.
Die Lösung wäre den Code in "Job Structure Header - OnPostDataItem()" auszuführen.

misterelektro1981 hat geschrieben:2) Dann habe ich noch eine Frage zu einem Filter der nicht greift. In der Projektstrukturzeile hole ich mir mit dem GET Befehl Zugang auf die Tabelle Item. Es soll nur eine Ausgabe für Artikel mit einer bestimmten Produktgruppe erfolgen. Wieso greift der Filter nicht.

Code:

Job Structure Line - OnAfterGetRecord()
Item.GET("No.");
Item.SETFILTER(Item."Product Group Code",'HF01');

Was soll diese Programmierung bezwecken? Hier holst du dir _einen_ Artikel und filterst dann auf die Produktgruppe. Das macht für mich keinen Sinn. Bitte erläutere es mir.

Re: Excel Ausgabe Endlosschleife

23. Januar 2012 10:28

m_schneider hat geschrieben:
misterelektro1981 hat geschrieben:1) Beim ausführen wird zwar etwas nach Excel ausgegeben, jedoch in einer Endlosschleife, d.h. es wird Excel-Mappe nach Excel-Mappe erzeugt, wieso?

Der Bericht hat folgenden Aufbau:
1 Ebene: Projektstrukturkopf
2 Ebene: Projektstrukturzeile

Code:
Job Structure Line - OnPostDataItem()
...
//Wichtig
ExcelBuffer.CreateBook;
ExcelBuffer.CreateSheet(TABLECAPTION, TABLECAPTION, COMPANYNAME, USERID);
ExcelBuffer.GiveUserControl();
//Erstelle neue Arbeitsmappe
...

Ich gehe mal davon aus, dass die Projektstrukturzeile unter dem Projektstrukturkopf eingerückt ist!?
D.h. der OnPostDataItem-Trigger wird mehrmals durchlaufen. Ins Blaue geraten, müsstest du genau so viele Excelmappen erhalten wie du Projektstruktur-köpfe hast.
Die Lösung wäre den Code in "Job Structure Header - OnPostDataItem()" auszuführen.

misterelektro1981 hat geschrieben:2) Dann habe ich noch eine Frage zu einem Filter der nicht greift. In der Projektstrukturzeile hole ich mir mit dem GET Befehl Zugang auf die Tabelle Item. Es soll nur eine Ausgabe für Artikel mit einer bestimmten Produktgruppe erfolgen. Wieso greift der Filter nicht.

Code:

Job Structure Line - OnAfterGetRecord()
Item.GET("No.");
Item.SETFILTER(Item."Product Group Code",'HF01');

Was soll diese Programmierung bezwecken? Hier holst du dir _einen_ Artikel und filterst dann auf die Produktgruppe. Das macht für mich keinen Sinn. Bitte erläutere es mir.


zu 1)
Jetzt habe ich den Code im Job Structure Header - OnPostDataItem()" auszuführen lassen. Es bringt aber auch nichts, da nun (nach vorhiger Auswahl des Projektes auf dem Druckmenü) etliche Seiten durchlaufen werden (ich habe bei ca. Seite 1500 abgebrochen). Gibt es da sonst noch einen Weg?

zu 2)
Ich will eigentlich nur damit bezwecken das nur bestimmte Artikel mit einem bestimmten Produktgruppencode ausgegeben werden. Wenn das anders geht bitte ich um Hilfe.

Re: Excel Ausgabe Endlosschleife

23. Januar 2012 10:37

misterelektro1981 hat geschrieben:zu 1)
Jetzt habe ich den Code im Job Structure Header - OnPostDataItem()" auszuführen lassen. Es bringt aber auch nichts, da nun (nach vorhiger Auswahl des Projektes auf dem Druckmenü) etliche Seiten durchlaufen werden (ich habe bei ca. Seite 1500 abgebrochen). Gibt es da sonst noch einen Weg?

Jetzt wäre erstmal zu klären warum so viele Seiten kommen. Meine Vermutung wäre, dass die Dataitems nicht vernünftig verknüpft sind. (Begriffe: DataItemLinkReference und DataitemLink)

misterelektro1981 hat geschrieben:zu 2)
Ich will eigentlich nur damit bezwecken das nur bestimmte Artikel mit einem bestimmten Produktgruppencode ausgegeben werden. Wenn das anders geht bitte ich um Hilfe.

Die Artikel werden aber lt. deinem Code nirgendwo "durchlaufen" sondern du holst dir einen und filterst dann. richtiger wäre:
Code:
Item.Setrange("Product Group Code", 'HF01');
IF Item.FIND('-') THEN
  // Todo

Hierbei sollten nur Artikel gefunden werden, welche einer bestimmten Produktgruppe zugehörig sind.

Re: Excel Ausgabe Endlosschleife

23. Januar 2012 11:08

Danke für dein Bemühen.
1) habe ich nun hinbekommen
2) ich steh leider noch etwas auf dem Schlauch.
Ich habe nun folgendes im OnAfter.. stehen:
Code:
Item.Setrange("Product Group Code", 'HF01');
IF Item.FIND('-') THEN
CurrReport.SKIP;
Item.GET("No.");

Ich weiß nicht genau ob das Item.GET richtig ist, hiermit bekomme ich aber Daten aus der Tabelle Artikel, die auch scheinbar richtig ausgegeben werden.
Ich weiß nicht ob der SKIP Befehl der richtige ist. Der Bericht bricht immer nach dem starten sofort ab. Er sol aber die Artikel übersrpingen, gibt es dafür einen anderen Befehl?

Re: Excel Ausgabe Endlosschleife

23. Januar 2012 11:21

misterelektro1981 hat geschrieben:Danke für dein Bemühen.
1) habe ich nun hinbekommen

Sehr gut.

misterelektro1981 hat geschrieben:2) ich steh leider noch etwas auf dem Schlauch.
Ich habe nun folgendes im OnAfter.. stehen:
Code:
Item.Setrange("Product Group Code", 'HF01');
IF Item.FIND('-') THEN
CurrReport.SKIP;
Item.GET("No.");

Ich weiß nicht genau ob das Item.GET richtig ist, hiermit bekomme ich aber Daten aus der Tabelle Artikel, die auch scheinbar richtig ausgegeben werden.
Ich weiß nicht ob der SKIP Befehl der richtige ist. Der Bericht bricht immer nach dem starten sofort ab. Er sol aber die Artikel übersrpingen, gibt es dafür einen anderen Befehl?

Nur nochmal für mein Verständnis: Du hast einen Report welcher Projektstruktur-Köpfe und die zugehörigen Zeilen ausgibt. Du möchtest aber nur Zeilen ausgeben, in denen Artikel mit bestimmten Produktgruppen stehen. Die Produktgruppe der Artikel wird nicht mit auf der Projektstruktur-Zeile geführt.
Ausgehend von diesem Sachverhalt denke ich ist folgender Code notwendig.
Code:
Item.Setrange("No.", "Job Structure Line"."No."); //Auf Artikelnr. der Projektstruktur-Zeile filtern
Item.Setrange("Product Group Code", 'HF01');
IF Item.ISEMPTY THEN
  CurrReport.BREAK;

Re: Excel Ausgabe Endlosschleife

23. Januar 2012 11:40

Scheint mal wieder ne schwere Geburt zu werden :-)
Also ich habe das nun mit deinem Code versucht. Zuvor habe ich noch mein erstes DataItem gelöscht, so dass ich nun nur noch Projektstrukturzeile habe.
Nach 1% Abarbeitung bricht alles ab, es öffnet sich dann eine Excel MAppe in der nur die Überschriften ausgegeben werden.

Code:

Job Structure Line - OnAfterGetRecord()
Item.Setrange("No.", "Job Structure Line"."No."); //Auf Artikelnr. der Projektstruktur-Zeile filtern
Item.Setrange("Product Group Code", 'HF01');
IF Item.ISEMPTY THEN
  CurrReport.BREAK;

RowNo += 1;
//Nach jedem Datensatz "Springen in die nächste Zeile"
EnterCell(RowNo, 1, Item."Construction Plan No.", '', FALSE, FALSE, FALSE);
EnterCell(RowNo, 2, Description, '', FALSE, FALSE, FALSE);
EnterCell(RowNo, 3, "Description 2", '', FALSE, FALSE, FALSE);
//Definition der Felder

Re: Excel Ausgabe Endlosschleife

23. Januar 2012 11:47

misterelektro1981 hat geschrieben:Scheint mal wieder ne schwere Geburt zu werden :-)
Also ich habe das nun mit deinem Code versucht. Zuvor habe ich noch mein erstes DataItem gelöscht, so dass ich nun nur noch Projektstrukturzeile habe.
Nach 1% Abarbeitung bricht alles ab, es öffnet sich dann eine Excel MAppe in der nur die Überschriften ausgegeben werden.

Code:

Job Structure Line - OnAfterGetRecord()
Item.Setrange("No.", "Job Structure Line"."No."); //Auf Artikelnr. der Projektstruktur-Zeile filtern
Item.Setrange("Product Group Code", 'HF01');
IF Item.ISEMPTY THEN
  CurrReport.BREAK;

RowNo += 1;
//Nach jedem Datensatz "Springen in die nächste Zeile"
EnterCell(RowNo, 1, Item."Construction Plan No.", '', FALSE, FALSE, FALSE);
EnterCell(RowNo, 2, Description, '', FALSE, FALSE, FALSE);
EnterCell(RowNo, 3, "Description 2", '', FALSE, FALSE, FALSE);
//Definition der Felder


versuch mal
Code:
IF NOT Item.FINDFIRST THEN
  CurrReport.BREAK;

anstatt dem vorigen Beispiel. Ich habe übersehen, dass du die Artikelinformationen weiter unten noch verwendest.

Re: Excel Ausgabe Endlosschleife

23. Januar 2012 11:49

Muss dich leider enttäuschen, ist das gleiche Verhalten wie vorher.

Re: Excel Ausgabe Endlosschleife

23. Januar 2012 11:53

Werden denn überhaupt Zeilen durchlaufen?

Re: Excel Ausgabe Endlosschleife

23. Januar 2012 11:55

Nein, scheinbar nicht. Es wird nur die erste Zeile mit den Überschriften nach Excel geschoben. Ohne diesen Code werden alle Zeilen durchlaufen und alle Artikel übergeben.

EDIT: Ich habe es nun mit dem SKIP Befehl hinbekommen.

Re: Excel Ausgabe Endlosschleife

23. Januar 2012 12:00

Dabei wäre noch anzumerken, dass mein Code als Beispiel zu sehen ist, und du natürlich noch prüfen musst ob das alles mit deiner Datenbank übereinstimmt.
Z.B. gibt es überhaupt Artikel mit der Produktgruppe und ist die "Job Structure Line"."No." überhaupt die Artikelnummer.

Re: Excel Ausgabe Endlosschleife

23. Januar 2012 12:09

Das ist richtig.

Jetzt habe ich doch noch eine Frage.
Hiermit scheint es ja nun zu klappen. Wenn ich jetzt die Bedigung erweitern möchte, so dass auch Artikel mit dem Produktgruppencode z.B. MA09 ausgegeben werden, wird wieder nur die Überschrift ausgegeben. Wie muss ich denn dann die Bedingung erweitern? Hatte es mit s.u. im Code versucht.
Code:
Item.Setrange("No.", "Job Structure Line"."No."); //Auf Artikelnr. der Projektstruktur-Zeile filtern
Item.Setrange("Product Group Code", 'HF01'); => Item.Setrange("Product Group Code", 'HF01|MA09');
IF NOT Item.FINDFIRST THEN
CurrReport.SKIP;

Re: Excel Ausgabe Endlosschleife

23. Januar 2012 12:29

misterelektro1981 hat geschrieben:Das ist richtig.

Jetzt habe ich doch noch eine Frage.
Hiermit scheint es ja nun zu klappen. Wenn ich jetzt die Bedigung erweitern möchte, so dass auch Artikel mit dem Produktgruppencode z.B. MA09 ausgegeben werden, wird wieder nur die Überschrift ausgegeben. Wie muss ich denn dann die Bedingung erweitern? Hatte es mit s.u. im Code versucht.
Code:
Item.Setrange("No.", "Job Structure Line"."No."); //Auf Artikelnr. der Projektstruktur-Zeile filtern
Item.Setrange("Product Group Code", 'HF01'); => Item.Setrange("Product Group Code", 'HF01|MA09');
IF NOT Item.FINDFIRST THEN
CurrReport.SKIP;

Da muss aus dem "SETRANGE" wieder ein "SETFILTER" werden.
Code:
Item.Setrange("No.", "Job Structure Line"."No."); //Auf Artikelnr. der Projektstruktur-Zeile filtern
Item.Setfilter("Product Group Code", 'HF01|MA09');
IF NOT Item.FINDFIRST THEN
CurrReport.SKIP;


wobei grundsätzlich zu beachten gilt, dass man solche harten Filterkriterien besser irgendwo in einem Setup hinterlegt, oder wenigstens in der Requestform änderbar gestaltet.

Re: Excel Ausgabe Endlosschleife

23. Januar 2012 12:35

Das muss man erst mal wissen. So klappt es jetzt. yippi und vielen thx