NAV Ein paar Grundfunktionen Teil 2

Eine weitere immer wieder auftauchende Anforderung ist das automatische Splitten von Kommentaren.

Hier allerdings doch bitte nicht alle X Zeichen, sondern zwischen den Wörtern.

Eine Funktion hierfür kann z.B. so aussehen (Beispiel mit Sales Comment Line).

AddHeaderText(SalesHeader : Record "Sales Header";CommentCode : Code[10];NewText : Text;OrderLineNo : Integer)

Local Variables
Name			DataType	Subtype			Length
SalesCommentLine	Record		Sales Comment Line	
RemainingText		Text		
LastSpacePos		Integer		
SpacePos		Integer		
LineNo			Integer		

IF NewHeaderText = '' THEN
  EXIT; // NO TEXT -> NO COMMENT -> NO EMPTY LINES
// INSERT EMPTY COMMENT LINE BEFORE EXIT, IF YOU WANT TO ALLOW EMPTY LINES  
SalesCommentLine.SETRANGE("Document Type",SalesHeader."Document Type");
SalesCommentLine.SETRANGE("Document No.",SalesHeader."No.");
SalesCommentLine.SETRANGE("Document Line No.",OrderLineNo);
IF SalesCommentLine.FINDLAST THEN
  LineNo := SalesCommentLine."Line No."
ELSE
  LineNo := 0;
SalesCommentLine.RESET;
SalesCommentLine."Document Type" := SalesHeader."Document Type";
SalesCommentLine."Document No." := SalesHeader."No.";
SalesCommentLine."Document Line No." := OrderLineNo;
SalesCommentLine.Date := WORKDATE;
SalesCommentLine.Code := CommentCode;
RemainingText := NewText;
REPEAT
  IF STRLEN(RemainingText) > 80 THEN BEGIN // COMMENT HAS MORE THEN 80  CHARACTERS
    LastSpacePos := 0;
    REPEAT
      SpacePos := STRPOS(COPYSTR(RemainingText,LastSpacePos + 1),' '); // FIND NEXT SPACE
      IF LastSpacePos + SpacePos < 80 THEN
        LastSpacePos := LastSpacePos + SpacePos + 1;
    UNTIL (SpacePos = 0) OR (LastSpacePos + SpacePos >= 80);
	IF LastSpacePos = 0 THEN
		LastSpacePos = 80; // NO SPACE IN THE FIRST 80 CHARACTERS FOUND
    LineNo := LineNo + 10000;
    SalesCommentLine."Line No." := LineNo;
    SalesCommentLine.Comment := COPYSTR(RemainingText,1,LastSpacePos - 2);
    RemainingText := COPYSTR(RemainingText,LastSpacePos);
    SalesCommentLine.INSERT;
  END ELSE BEGIN // LESS THEN 80 CHARACTERS LEFT, NO MORE SPLITTING NEEDED
    LineNo := LineNo + 10000;
    SalesCommentLine."Line No." := LineNo;
    SalesCommentLine.Comment := RemainingText;
    SalesCommentLine.INSERT;
    RemainingText := '';
  END;
UNTIL RemainingText = '';