[gelöst] Report: Filter von Rec1 an Rec2 übergeben?

25. September 2009 14:24

Hallo zusammen,

ich habe einen Report, der über alle Artikel läuft und für jeden Artikel anzeigen soll,
wie viele sich davon in
- Aufträgen,
- Rechnungen,
- Gutschriften
befinden.

Beispiel:

Artikel 4711:
in Aufträgen | in Rechnungen | in Gutschriften | gesamt

Aufträge: 100, Rechnungen: 50, Gutschriften: 2, gesamt: 148
usw...

Da die Auswertung auch z. B. nach "Debitorenpreisgruppe" gefiltert werden soll, läuft der Report über die DataItems "Item" und "Sales Line":
Im Report Designer also:
Item
-> Sales Line
-> integer (für totals)

Im DataItem "Sales Line" suche ich mir alle "Sales Invoice Lines" sowie alle "Sales Cr. Memo Lines" des Artikels raus.

Mein Problem ist nun folgendes:
Wie bekomme ich die im DataItem "Sales Line" gesetzten Filter (z. B. "Debitorenpreisgruppe = GRUPPE1" und "Geschäftsbuchungsgruppe = EU") in die Filter der "Sales Invoice Lines" und "Sales Cr. Memo Lines" ?

COPY geht nicht, da verschiedene Records.
Und da ich ja auch nicht weiß, welche Filter der Benutzer im Report (Karteireiter "Sales Line") einstellt, weiß ich auch nicht, ob es das entsprechende Feld auch in den beiden anderen Tabellen ("Sales Invoice Line" und "Sales Cr. Memo Line") gibt.

Hatte versucht, mit "Sales Line".GEFILTERS die Filter auszulesen, sie dann auf Basis einer kommaseparierten Liste einzeln auszulesen und jeden einzelnen Filter dann in der "Sales Invoice Line" zu setzen.
Das geht aber leider auch nicht, da bei SETRANGE oder SETFILTER ja immer eine direkte Angabe des Feldnamens nötig ist.
Idee war dazu folgende:
Code:

IF "Sales Line".HASFILTER THEN BEGIN
  //separiere alle gesetzten SalesLine Filter
  //und setze sie auch in SalesInvoiceLine und SalesCrMemoLines
  NextFilter := SalesLineFilter; // "Debitorenpreisgruppe: GRUPPE1, Geschäftsbuchungsgruppe: EU"

//Filter ist z.B.: "Debitorenpreisgruppe: GRUPPE1, Geschäftsbuchungsgruppe: EU"
  REPEAT
    Position := STRPOS(NextFilter, ','); //Position = 30
    NextPos := Position+2; //NextPos = 32
    NextFilter := COPYSTR(NextFilter, NextPos); //NextFilter = "Geschäftsbuchungsgruppe: EU"
   
    Str1 := COPYSTR(NextFilter,1,Position-1); // Str1 = "Debitorenpreisgruppe: GRUPPE1"
    Position := STRPOS(Str1, ':');
    Part1 := COPYSTR(Str1,1,Position-1); //Part1 = "Debitorenpreisgruppe"
    Part2 := COPYSTR(Str1,Position+2); ////Part2 = "GRUPPE1"

//hier jetzt irgendwie den Filter auf die Debitorenpreisgruppe auf die "Sales Invoice Line" setzen
//    SalesInvoiceLine.setfilter(Part1,Part2);

  UNTIL STRPOS(NextFilter, ',') = 0;
END;


Hat jemand vielleicht eine Idee?
Der einfachste Weg wäre, im Report alle 3 Tabellen separat filtern zu lassen, aber da müsste der Benutzer alle Filter gleich 3 mal setzen.
also im Report Designer so:
Item
-> Sales Line
-> Sales Invoice Line
-> Sales Cr. Memo Line
-> integer (für totals)

Bin dankbar für jede Hilfe.
Gruß,
naviii
Zuletzt geändert von Naviii am 25. September 2009 15:38, insgesamt 1-mal geändert.

Re: Report: Filter von Rec1 an Rec2 übergeben?

25. September 2009 14:47

Probiers mal mit COPYFILTERS (das letzte "s" nicht auslassen), siehe Onlinehilfe.
Sollte das auch nicht funktionieren, dann musst du feldweise vorgehen:

Code:
"Sales Invoice Line".SETFILTER("Customer Price Group", "Sales Line".GETFILTER("Customer Price Group"));
[...] entspr. für "Sales Cr.Memo Line" usw. sowie jedes weitere Filterfeld

Re: Report: Filter von Rec1 an Rec2 übergeben?

25. September 2009 15:00

Hi Natalie,

mit COPYFILTERS gehts aufgrund der unterschiedlichen Records auch nicht.

Die Filter jedes einzelnen Felds aus der "Sales Line" in die anderen beiden Records kopieren ist zwar sehr aufwendig, ist aber glaube ich die einzige Lösung.

Danke für Deine Hilfe.
Gruß,
naviii

Re: Report: Filter von Rec1 an Rec2 übergeben?

25. September 2009 15:07

Naviii hat geschrieben:mit COPYFILTERS gehts aufgrund der unterschiedlichen Records auch nicht.

Echt nicht? Normalerweise sind in deinen Tabellen die maßgeblichen Felder doch gleich :?:

Re: Report: Filter von Rec1 an Rec2 übergeben?

25. September 2009 15:18

eine Möglicheit wäre über getview und setview, die liefern die gesetzen filter als string zurück, ggfs. auch über recordrefs

aber für dein eigentliches Problem, die Felder die du benötigst, sind m.E. bereits als Flowfields am Artikel definiert.
evtl. musst du hier nur paar Flowfilter dazu designen.