23. Januar 2012 09:54
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
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
...
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');
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.
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?
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.
Item.Setrange("Product Group Code", 'HF01');
IF Item.FIND('-') THEN
// Todo
23. Januar 2012 11:08
Item.Setrange("Product Group Code", 'HF01');
IF Item.FIND('-') THEN
CurrReport.SKIP;
Item.GET("No.");
23. Januar 2012 11:21
misterelektro1981 hat geschrieben:Danke für dein Bemühen.
1) habe ich nun hinbekommen
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?
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;
23. Januar 2012 11:40
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
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
IF NOT Item.FINDFIRST THEN
CurrReport.BREAK;
23. Januar 2012 11:49
23. Januar 2012 11:53
23. Januar 2012 11:55
23. Januar 2012 12:00
23. Januar 2012 12:09
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;
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;
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;
23. Januar 2012 12:35