[Gelöst] RTC: Zusammenspiel Page mit Report ohne RDL-Layout

14. März 2011 13:23

Ich habe eine Page, die mir bestimmte Sätze des PurchaseHeaders anzeigt.
Nun markiere ich 1 oder mehrere Sätze und übergebe diese dann an einen Report, der diese weiterverarbeiten soll:

Code:
recPurchHeader.RESET;

recPurchHeader.SETFILTER(recPurchHeader."Document Type",'%1',"Document Type");
recPurchHeader.SETFILTER(recPurchHeader."No.","No.");

CurrPage.SETSELECTIONFILTER(recPurchHeader);

recPurchHeader.SETCURRENTKEY("Buy-from Vendor No.");

IF recPurchHeader.FINDSET THEN BEGIN
   REPORT.RUNMODAL(70409, TRUE, FALSE, recPurchHeader);
END;


Dies funktioniert problemlos, wenn nur 1 Satz markiert ist.

Wenn ich mehrere Sätze markiert habe, dann funktioniert es nicht immer richtig ...
Wenn der aufgerufene Report nicht auf den RTC auslegt ist (hat kein RDL-Layout, etc.), dann verarbeitet er immer alle Datensätze des PurchaseHeaders - ohne irgendeine Selektion zu beachten.
Wenn der aufgerufene Report auf den RTC auslegt ist, dann funktioniert es problemlos - verarbeitet nur die selektierten Sätze.

Da viele Kunden ihre "alten" (classic) Reports behalten wollen - der Aufwand für die Umsetzung komplezierter Layout in RDL ist ja schon recht groß ..., habe ich nun ein Problem bei allen diesen Kunden :roll:
Zuletzt geändert von raggy am 14. März 2011 19:10, insgesamt 1-mal geändert.

Re: RTC: Zusammenspiel Page mit Report ohne RDL-Layout

14. März 2011 14:00

Wenn du den RTC verwendest und einen Report ohne RTC-Layout aufrufst, so können keine Satzmarken berücksichtigt werden (nichts anderes ist SETSELECTIONFILTER).

Arbeite mit einer zweiten Recordvariable recPurchHeader2; beachte die Kommentare:

Code:
recPurchHeader.RESET;

// raus, das nützt mit nachgeschaltetem SETSELECTIONFILTER nichts
//recPurchHeader.SETFILTER(recPurchHeader."Document Type",'%1',"Document Type");
//recPurchHeader.SETFILTER(recPurchHeader."No.","No.");

CurrPage.SETSELECTIONFILTER(recPurchHeader);

recPurchHeader.SETCURRENTKEY("Buy-from Vendor No.");

IF recPurchHeader.FINDSET THEN BEGIN
   REPEAT // NEU
     recPurchHeader2 := recPurchHeader; // NEU
     recPurchHeader.SETRECFILTER; // filtert auf Primärschlüssel NEU
     REPORT.RUNMODAL(70409, TRUE, FALSE, recPurchHeader2); // geändert
   UNTIL recPurchHeader.NEXT = 0; // NEU
END;


Hat leider zur Folge, dass der Report x-mal aufgerufen wird ....

Edit:
Da der Aufruf im CC nach wie vor funktioniert, hier folgender Vorschlag, so wie ich es gemacht hätte:

Code:
CurrPage.SETSELECTIONFILTER(recPurchHeader);

recPurchHeader.SETCURRENTKEY("Buy-from Vendor No.");

IF ISSERVICETIER THEN BEGIN
  IF recPurchHeader.FINDSET THEN BEGIN
     REPEAT
       recPurchHeader2 := recPurchHeader;
       recPurchHeader.SETRECFILTER;
       REPORT.RUNMODAL(70409, TRUE, FALSE, recPurchHeader2);
    UNTIL recPurchHeader.NEXT = 0;
  END;
END ELSE BEGIN
  REPORT.RUNMODAL(70409, TRUE, FALSE, recPurchHeader);
END;

Re: RTC: Zusammenspiel Page mit Report ohne RDL-Layout

14. März 2011 14:24

Hallo Natalie,

schade ... das ist leider keine Lösung.

Der Report soll nämlich nur 1 mal aufgerufen werden und alle Purchase Header zu einem Kreditoren sollen dann im Ausdruck in 1 Beleg zusammengefasst werden.

z.B. Ich habe 2 PurchaseHeader markiert zu Kreditor 4711 und 3 PurchaseHeader markiert zu Kreditor 4712.
Ausgedruckt werden soll
- 1 Beleg für die 2 PurchaseHeader markiert zu Kreditor 4711
- 1 Beleg für die 3 PurchaseHeader markiert zu Kreditor 4712

Irgendwas mit einer temp-Tabelle wird dann auch nicht gehen - oder ??
Also dass ich die selektierten Sätze in einen temporären PurchaseHeader schreibe und den Report nur mit diesen Sätzen aufrufe.

Oder dass ich die selektierten Sätze irgendwie anders "markiere" - z.B. indem ich ein neues Feld in PurchaseHeader hinzufüge, dieses mit der USERID fülle, im Report nur die Sätze mit dieser USERID abarbeite und den Feldinhalt abschließend wieder lösche ...
Kommt mir aber irgendwie als "unschöne" Lösung vor :-(

Re: RTC: Zusammenspiel Page mit Report ohne RDL-Layout

14. März 2011 14:31

raggy hat geschrieben:Irgendwas mit einer temp-Tabelle wird dann auch nicht gehen - oder ??
Also dass ich die selektierten Sätze in einen temporären PurchaseHeader schreibe und den Report nur mit diesen Sätzen aufrufe.

Probiers aus; ich meine aber, es würde nicht gehen. Sonst bitte korrigieren!

Oder dass ich die selektierten Sätze irgendwie anders "markiere" - z.B. indem ich ein neues Feld in PurchaseHeader hinzufüge, dieses mit der USERID fülle, im Report nur die Sätze mit dieser USERID abarbeite und den Feldinhalt abschließend wieder lösche ...

Würde in jedem Fall funktionieren.

Kommt mir aber irgendwie als "unschöne" Lösung vor :-(

Die schönste Lösung bleibt (leider), mit dem RTC-Layout zu arbeiten. Damit löst du nämlich noch ganz andere Probleme.

Re: RTC: Zusammenspiel Page mit Report ohne RDL-Layout

14. März 2011 18:30

Natalie hat geschrieben:
raggy hat geschrieben:Irgendwas mit einer temp-Tabelle wird dann auch nicht gehen - oder ??
Also dass ich die selektierten Sätze in einen temporären PurchaseHeader schreibe und den Report nur mit diesen Sätzen aufrufe.

Probiers aus; ich meine aber, es würde nicht gehen. Sonst bitte korrigieren!

Nein, das geht tatsächlich nicht. :-(
Wahrscheinlich - einfach ausgedrückt - weil den CC die temp-Tabellen aus dem RTC nicht interessieren :-)

Oder dass ich die selektierten Sätze irgendwie anders "markiere" - z.B. indem ich ein neues Feld in PurchaseHeader hinzufüge, dieses mit der USERID fülle, im Report nur die Sätze mit dieser USERID abarbeite und den Feldinhalt abschließend wieder lösche ...

Würde in jedem Fall funktionieren.

Kommt mir aber irgendwie als "unschöne" Lösung vor :-(

Das ging. Nicht schön, aber ...
Und vor allem: weil der CC-Report erst zeitverzögert aufgerufen wird, darf man in der Page die "Markierung" nicht direkt nach dem Aufruf des Reports rausnehmen. Sonst sind sie weg, bevor der Report im CC startet :-? . Man darf die "alten" Markierungen erst vor dem nächsten Aufruf löschen

Die schönste Lösung bleibt (leider), mit dem RTC-Layout zu arbeiten. Damit löst du nämlich noch ganz andere Probleme.

Was aber bedeutet, dass man einen Aufwand treiben muss, der bei im CC schon aufwändig gestalteten Reports im RTC auch nochmal ganz schön heftig ist ... :roll:
DAS zahlt der Kunde ungern noch ein zweites mal, wenn er bei der Umstellung auf 5.xx erst neue Reports bekommen und bezahlt hat ... :-(

Re: RTC: Zusammenspiel Page mit Report ohne RDL-Layout

14. März 2011 19:53

raggy hat geschrieben:Nein, das geht tatsächlich nicht. :-(
Wahrscheinlich - einfach ausgedrückt - weil den CC die temp-Tabellen aus dem RTC nicht interessieren :-)

Naja, es hat indirekt etwas hiermit zu tun:
Und vor allem: weil der CC-Report erst zeitverzögert aufgerufen wird, darf man in der Page die "Markierung" nicht direkt nach dem Aufruf des Reports rausnehmen. Sonst sind sie weg, bevor der Report im CC startet :-?

Wie du festgestellt hat, wartet der RTC nicht auf deinen CC-Report. Genauer gesagt, wartet der CC-Report, bis die RTC-Transaktion zu Ende ist.
Wenn der CC-Report dann endlich (mit einer neuen Session übrigens) startet, hat er keinen direkten Datenbezug mehr zum RTC. Der RTC kann zwar Filter und Schlüssel mitgeben (eben den TableView) und irgendwo als Text puffern, mehr aber auch nicht.
Hier arbeiten CC und RTC halt nur an der Oberfläche zusammen ;-)
(Dies war übrigens meine ganz eigene Interpretation, für die mich Microsoft bitte nicht steinigen möge ;-))

Was aber bedeutet, dass man einen Aufwand treiben muss, der bei im CC schon aufwändig gestalteten Reports im RTC auch nochmal ganz schön heftig ist ... :roll: (

Reine RTC-Projekte ohne Mitnahme alter Reports sind reporttechnisch am einfachsten: In den Sections werden grob Textboxen und Labels platziert; schön gemacht wird es nur noch in Visual Studio.
Kommt dann endlich Routine rein, ist es auch nicht mehr ganz so aufwändig.