SETSELECTIONFILTER kombiniert mit anderen Filterarten

19. Februar 2014 17:29

Moin zusammen,

gibt es die Möglichkeit, SETSELECTIONFILTER im Zusammenspiel mit SETFILTER oder SETRANGE anzuwenden? Ich habe das hier einmal versucht. "Rec" sind SalesShipmentLines. Es wird versucht, die vom Nutzer markierten Lieferzeilen nach "Power Range" zu sortieren und pro "Power Range" in eine eigene Rechnung einzufügen. Das Ganze klappt... allerdings nur auf alles, nicht auf die Nutzerselektion.

Code:
  Rec.SETCURRENTKEY("Power Range", "Document No.", "Line No.");
  PowerRange := '';
  REPEAT
    IF PowerRange <> Rec."Power Range" THEN BEGIN
      PowerRange := Rec."Power Range";

      SalesShipmentLineLoc.RESET;
      CurrForm.SETSELECTIONFILTER(SalesShipmentLineLoc);
      SalesShipmentLineLoc.SETRANGE("Power Range", PowerRange);

      SalesGetShpt.SetSalesHeader(SalesHeader);
      SalesGetShpt.CreateInvLines(SalesShipmentLineLoc);

      CLEAR(SalesHeader);
      [...]
      SalesHeader.INSERT(TRUE);
    END;
  UNTIL Rec.NEXT = 0;

Re: SETSELECTIONFILTER kombiniert mit anderen Filterarten

20. Februar 2014 12:01

Aus der Online-Hilfe:
If either all or no records are selected, marks will not be used.

If one or more records are selected on the form, then SetSelectionFilter does the following:
  • Copies the current key from the form source table to the destination record
  • Copies the current sort order from the table to the destination record
  • Copies the current filters that are set in all filter groups
  • Copies the current filter group
  • Marks the selected records and sets the "marked only" filter

If no record is selected on the form, then SetSelectionFilter does the following:
  • Sets the current filter group to 0 on the destination record
  • Adds filters on the primary key fields that point to the current record of the form

Das sollte also funktionieren. Vielleicht liegt es an etwas anderem? Setzt doch mal den Filter auf "Power Range" vorab auf Rec. Kannst ihn ja danach wieder lösen.

Re: SETSELECTIONFILTER kombiniert mit anderen Filterarten

20. Februar 2014 13:35

Du meinst den Teil?

Code:
        PowerRange := Rec."Power Range";
        Rec.SETRANGE("Power Range", PowerRange);

        SalesGetShpt.SetSalesHeader(SalesHeader);
        SalesGetShpt.CreateInvLines(Rec);

        Rec.SETRANGE("Power Range");


Das klappt leider nicht, dann filtert er zwar einmal korrekt, aber nur für die erste "Power Range". Für die anderen tut er dann nichts mehr.

Re: SETSELECTIONFILTER kombiniert mit anderen Filterarten

20. Februar 2014 14:37

So fehlt dir doch dann der Teil mit SETSELECTIONFILTER. Ich meinte eher so:
Code:
PowerRange := Rec."Power Range";
SETRANGE("Power Range", PowerRange);

SalesShipmentLineLoc.RESET;
CurrForm.SETSELECTIONFILTER(SalesShipmentLineLoc);

SalesGetShpt.SetSalesHeader(SalesHeader);
SalesGetShpt.CreateInvLines(SalesShipmentLineLoc);

SETRANGE("Power Range");

Re: SETSELECTIONFILTER kombiniert mit anderen Filterarten

20. Februar 2014 14:55

Ah, okay. Ja, das hatte ich zwischenzeitlich auch probiert (jetzt auch nochmal).
Damit legt Navision die korrekte Anzahl an Rechnungen an, aber die sind leer. Als ob Navision in SalesShipmentLineLoc dann gar nichts mehr hat.

Re: SETSELECTIONFILTER kombiniert mit anderen Filterarten

24. Februar 2014 10:40

Sind da vielleicht noch mehr Filter, die zu einer leeren Ergebnismenge führen? Bspw. welche, die im weiteren Verlauf der Verarbeitung gesetzt werden. Laß dir doch mal per MESSAGE ausgeben, welche Filter auf SalesShipmentLineLoc angewandt sind.

Re: SETSELECTIONFILTER kombiniert mit anderen Filterarten

24. Februar 2014 17:19

Moin,

Danke für die Hilfe. Im Endeffekt lag das Problem darin, daß er die Markierung nicht übernommen hat und in einer Codestelle in der Codeunit "Sales-Get Shipment". Ein Kollege und ich saßen da heute zu zweit nochmal drei Stunden dran, aber jetzt klappt's. :roll: