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.