Markierte Zeilen im Auftrag bei der AB andrucken

19. Juli 2007 10:52

Hallo

Ich habe für diese Anforderungen den Beitrag http://www.msdynamics.de/viewtopic.php? ... highlight= gefunden und umgesetzt. Eigentlich funktioniert es, nur haben wir eine Lösung damit man die Reports auch über PDF (Amyuni PDF Converter) versenden kann. Ich möchte dies nun auch hier implementieren. Nur leider bin ich mit dem C/AL ein wenig auf Kriegsfuss. Vielleicht könnte mir jemand diesen Codeabschnitt erklären.

Code:
PrintMarkSalesLine()
CLEAR(OrderConfirmation);
CurrForm.SETSELECTIONFILTER(Rec);
SalesHeader2.GET("Document Type", "Document No.");
SalesHeader2.SETRECFILTER;
SalesHeader2.FIND('-');
OrderConfirmation.Def(Rec);
OrderConfirmation.SETTABLEVIEW(SalesHeader2);
OrderConfirmation.RUNMODAL;
Rec.RESET


mfg
stony

Re: Markierte Zeilen im Auftrag bei der AB andrucken

19. Juli 2007 12:00

Ich kommentiere mal direkt daneben:

OrderConfirmation = Variable vom Typ Report (Auftragsbestätigung)

Code:
PrintMarkSalesLine()
CLEAR(OrderConfirmation); // Report-Variable löschen, gehört hier in jede gute Programmierung, da später ein OrderConfirmation.RUN folgt.
CurrForm.SETSELECTIONFILTER(Rec); // Hole alle markierten Zeilen von der Form. Dies geht nur über SETSELECTIONFILTER. Deine markierten Zeilen befinden sich nun in Rec
SalesHeader2.GET("Document Type", "Document No.");  // Lese aus der Rec-Variable den Aufträgsbestätigungs KOPF
SalesHeader2.SETRECFILTER; // Setzte Filter, dass auch nur dieser eine Kopf in Rec enahteln ist
SalesHeader2.FIND('-'); // Rufe diese einen Kopf in SalesHeader2-Variable
OrderConfirmation.Def(Rec); // "Def"  ist eine Funktion, die im Report erst einmal geschrieben werden muss. Diese teilt dem Report mit, welche Zeilen du markiert hattest und übergibt sie damit dem Report.
OrderConfirmation.SETTABLEVIEW(SalesHeader2); // Der Report wird stets mit dem Auftragskopf aufgerufen (da oberstestes DataItem). Hier also deinen einen Auftragskopf übergeben.
OrderConfirmation.RUNMODAL; // Aufrufen - fertig!
Rec.RESET

10. September 2007 11:12

Danke für die Erklärung.

Nur schaffe ich es leider nicht, das nur die markierten Zeilen über PDF generiert werden. Wir habe eine eigene Codeunit dafür. Und wenn ich diese richtig verstehe wird über die Funktion FillRecord die Daten aufbereitet.

FillRecord-Function
Code:
CASE Typ OF
  1,2,3,4,14:
    BEGIN
      SalesHeader.INIT;
      CASE Typ OF
        1: SalesHeader.SETRANGE("Document Type",SalesHeader."Document Type"::Quote);             // Sales Quote
        2: SalesHeader.SETRANGE("Document Type",SalesHeader."Document Type"::"Blanket Order");   // Sales Blanket Order
        3: SalesHeader.SETRANGE("Document Type",SalesHeader."Document Type"::Order);             // Sales Order
        4: SalesHeader.SETRANGE("Document Type",SalesHeader."Document Type"::"Return Order");    // Sales Return Order
//SCHEU001-
        14:SalesHeader.SETRANGE("Document Type",SalesHeader."Document Type"::Order);             // Sales Order w/o Confirmation
//SCHEU002+
      END;
      SalesHeader.SETRANGE("No.",No);
      SalesHeader.FIND('-');
      ProcessMailAddress(SalesHeader."E-Mail",
        SalesHeader."Sell-to Customer No.",SalesHeader."No.");
    END;


Wie kann ich hier dies nun nur auf die markierten Zeilen einschräncken.

mfg
stony

10. September 2007 11:21

Auf der Form musst du die Funktion SETSELECTIONFILTER aufrufen und den Filter entsprechend mitgeben.

10. September 2007 11:58

Leider verstehe ich das nicht ganz.

In der Form 46 gibt es die Funktion (wie oben zu sehen) PrintMarkSalesLine() , welche die Funktion Setselectionfilter beinhaltet.
Die PDF-Druckfunktion wird bei uns über eine Button im Auftragskopf gesteuert.
Wie schon erwähnet wird diese Function FillRecord aufgerufen und danach

Code:
CASE Typ OF
  1:   REPORT.RUNMODAL(ReportID,FALSE,FALSE,SalesHeader);
  2:   REPORT.RUNMODAL(ReportID,FALSE,FALSE,SalesHeader);


Wie kann ich hier den Filter übergeben.