Bemerkung für Report 405

7. September 2017 11:06

Hallo,

ich versuch mich gerade in der Anpassung des Reports 405 Einkaufsbestellung. Ich möchte gerne die ersten 4 Zeilen aus den Bemerkungen ("Purch. Comment Line") in den Report übergeben. Folgende Variablen habe ich dazu angelegt:
- PurchComm - Record - Purch. Comment Line
- PurchCommData - Text - 80

mit "FINDFIRST" bekomme ich die 1. Zeile der Bemerkung. Aber wie kann ich die 2., 3. und 4. Zeile ansprechen?

Re: Bemerkung für Report 405

7. September 2017 20:38

Mit einem Zähler (Integer Variable). Ganz grob so in etwa:

Code:
PurchCommData := '';
Zaehler := 1;
PurchCommentLine.setrange(Document Type, ...
PurchCommentLine.setrange(No., ...
if PurchCommentLine.findset then
repeat
  if Zaehler > 1 then PurchCommData[Zaehler] += '\';
  PurchCommData[Zaehler] += PurchCommentLine.Comment;
  Zaehler += 1;
until (PurchCommentLine.next = 0) or (Zaehler = 4);

Re: Bemerkung für Report 405

8. September 2017 20:35

Hallo,

die Daten hast Du dann zwar, aber... die sind dann noch nicht im ResultSet. Am einfachsten ist es wohl ein DataItem auf die Bemerkungen zu machen, mit MaxIterations=4. Und Dann als Column in diesem DataItem den Text auszugeben.

LG Jens

Re: Bemerkung für Report 405

9. September 2017 22:11

Hallo,

Entschuldigung aber das mit dem DataItem und dem Array finde ich ein wenig "OldSchool"- NAV CC- Reporting.

RDLC und NAV-C/AL bieten so schönen Möglichkeiten, das ganze erheblich zu verienfachen:

Code:
    PROCEDURE GetPurchComment@5109000(VAR pPurchHeader@115109000 : Record 38;pRDLCFieldIsHTML@115109003 : Boolean) CommentString : Text;
    VAR
      lCommentLine@115109001 : Record 43;
      lNewLine@115109002 : Text[4];
      lLineCounter@115109004 : Integer;
    BEGIN
      IF pRDLCFieldIsHTML THEN
        lNewLine :='<br>'
      ELSE BEGIN
        lNewLine :='  ';
        lNewLine[1] := 13;
        lNewLine[2] := 10;
      END;

      lCommentLine.SETRANGE("Document Type",pPurchHeader."Document Type");
      lCommentLine.SETRANGE("No.",pPurchHeader."No.");
      IF lCommentLine.FINDSET THEN
        REPEAT
          IF CommentString <>'' THEN
            CommentString += lNewLine;
          CommentString += lCommentLine.Comment;
          lLineCounter +=1;
        UNTIL (lCommentLine.NEXT = 0) OR (lLineCounter >=4);
    END;

Das Ergebnis der Funktion übergibst du an eine Textvariable oder direkt im "Purchase Header" ans RDLC. Im Reportdesigner gibst du die Bemerkung in einem Textfeld aus.


Gruß Fiddi

Re: Bemerkung für Report 405

10. September 2017 16:54

:lol: Wennn OldSchool heisst, dass man praktisch keinen Code schreiben muss (ausser die Struktur im Designer anlegen und verlinken), im Gegensasatz zu einer extra Funktion, bin ich für OldSchool.

LG Jens

Re: Bemerkung für Report 405

10. September 2017 19:36

Dafür wird es im Designer aber aufwändiger, und wenn du mit HTML arbeiten, oder den Text frei positionieren möchtest, dann ist das schon wieder gar nicht mehr so einfach.

Die Funktion ist eigentlich ein Basis um jegliche Form von Texten an irgend einer Stelle im Beleg auszugeben.

EDIT:Besonders Interessant ist das bei Adressen. Man benötigt nur noch EIN Textfeld, das an den RDLC- Report übergeben wird, und im RDLC auch nur noch EIN Textfeld, mit dem man evtl. mit variabler Größe Platz auf dem Beleg schaffen kann, außerdem stimmen die Abstände zwischen den Textzeilen im RDLC ohne komplizierte Feldschubserei.

Gruß Fiddi

Re: Bemerkung für Report 405

11. September 2017 08:33

+1 für fiddis Lösung...