[gelöst]Report druckt nicht jeden Wert an

4. Januar 2010 12:15

Frohes Neues Jahr 2010,

ich habe ein Problem mit einem Report (wahrscheinlich ein Denkfehler :-( ). Die Report hat als Dataitem Customer und Sales Header. Es soll von jedem Customer geprüft werden, ob es einen Auftrag gibt. Wenn Ja, dann soll jeder Auftrag angedruckt werden: Auftragsnummer, Summe Zeilenbetrag,usw....

Im Dataitemtableview vom SalesHeader habe ich folgende Eigenschaft: SORTING(Document Type,Sell-to Customer No.,No.) WHERE(Document Type=FILTER(Order))
Im Dataitemlink diese: Sell-to Customer No.=FIELD(No.)

Im onPreDataItem vom Sales Header ist folgender Code:
Code:
// Soll Customer ausschließen, wo es keine Aufträge gibt
"Sales Header".RESET;
"Sales Header".SETRANGE("Document Type","Sales Header"."Document Type"::Order);
"Sales Header".SETRANGE("Sell-to Customer No.",Customer."No.");
IF NOT "Sales Header".FINDFIRST THEN
 CurrReport.SKIP;


Im onAfterGetRecord vom Sales Header habe ich folgenden Code
Code:

gDeLineAmount := 0;
gboFoundBecken := FALSE;

greSalesLine.RESET;
greSalesLine.SETRANGE("Document Type","Sales Header"."Document Type");
greSalesLine.SETRANGE("Document No.","Sales Header"."No.");
greSalesLine.SETRANGE("Sell-to Customer No.","Sales Header"."Sell-to Customer No.");
IF greSalesLine.FINDFIRST THEN BEGIN
 REPEAT
  gDeLineAmount += greSalesLine."Line Amount";
  greItem.RESET;
  greItem.SETRANGE("No.",greSalesLine."No.");
  IF greItem.FINDFIRST THEN BEGIN
    IF greItem."Product Group Code" = 'BECKEN' THEN BEGIN
      gboFoundBecken := TRUE;
      gReItemVariant.RESET;
      gReItemVariant.SETRANGE("Item No.",greItem."No.");
      gReItemVariant.SETRANGE(Code,greSalesLine."Variant Code");
      IF gReItemVariant.FINDFIRST THEN BEGIN
        gTxDescription := greItem.Description + ' ' + gReItemVariant."Description 2";
        gboFoundBecken := TRUE;
      END ELSE BEGIN
        gTxDescription := greItem.Description;
        gboFoundBecken := TRUE;
      END;
    END ELSE BEGIN
     IF NOT gboFoundBecken THEN
      gTxDescription := Text001;
    END;
  END;
 UNTIL NEXT = 0;
END;

gDeCustAmount += gDeLineAmount;

// Wenn kein Zeilebetrag dann Sales Header ignorieren
IF gDeLineAmount = 0 THEN
  CurrReport.SKIP;


Im Sectiondesigner habe ich eine Section vom Customer Header und Body, vom Sales Header habe ich ein Section vom Header,Body und Footer.
Im onAftergetRecord geht der Report auch jeden Sales Header durch. Er druckt mir allerdings immer nur den letzten Datensatz an.

Hat jemand eine Idee, was ich vergessen haben könnte?

Vielen Dank schon mal!
Lg Rom
Zuletzt geändert von rom am 4. Januar 2010 12:41, insgesamt 1-mal geändert.

Re: Report druckt nicht jeden Wert an

4. Januar 2010 12:28

Mal im "Überflug":
rom hat geschrieben:Im onPreDataItem vom Sales Header ist folgender Code:
Code:
// Soll Customer ausschließen, wo es keine Aufträge gibt
"Sales Header".RESET;
"Sales Header".SETRANGE("Document Type","Sales Header"."Document Type"::Order);
"Sales Header".SETRANGE("Sell-to Customer No.",Customer."No.");
IF NOT "Sales Header".FINDFIRST THEN
 CurrReport.SKIP;

Bilde dies doch über die Eigenschaft PrintOnlyIfDetail = Yes für das erste DataItem ab.

Im onAfterGetRecord vom Sales Header habe ich folgenden Code

Ich seh da am Ende einen Fehler:
Code:
...IF greSalesLine.FINDFIRST THEN BEGIN
 REPEAT
   UNTIL NEXT = 0;
END;
gDeCustAmount += gDeLineAmount;

Es muss heißen
Code:
UNTIL greSalesLine.NEXT = 0;

Re: Report druckt nicht jeden Wert an

4. Januar 2010 12:40

Natalie hat geschrieben:Mal im "Überflug":

Ich seh da am Ende einen Fehler:
Code:
...IF greSalesLine.FINDFIRST THEN BEGIN
 REPEAT
   UNTIL NEXT = 0;
END;
gDeCustAmount += gDeLineAmount;

Es muss heißen
Code:
UNTIL greSalesLine.NEXT = 0;



Danke, ich glaube ich brauche ein neue Brille :oops:
Das war es....