Extra null characters in dataport

cowenscowens Member Posts: 6
I'm trying to modify a dataport written by someone else. The dataport doesn't actually use any of the dataport functions, it merely writes directly to a given file. The dataport is intended to export invoices and receipts for import into Intuit QuickBooks. At the end of the last line I have to issue a carriage return and line feed for the file to correctly import into QuickBooks. The issue I'm having is that for some reason I'm getting 8 NULL characters after the CRLF. No matter how many items I write to the file it is always 8 NULL characters and this is the only place in the file where his occurs. The problem with these 8 NULL characters is that they keep the file from importing into QuickBooks at all. The characters are HEX value 00. Any insight into why this might be would be very helpful.

Thanks,
Chris Owens
Christopher Owens
Support Technician
Camelot Consulting, Inc.
http://www.3plsoftware.com

Answers

  • SavatageSavatage Member Posts: 7,142
    What does your code look like?
  • cowenscowens Member Posts: 6
    Documentation()
    
    Sales Invoice Header - OnPreDataItem()
    IF gPWSetupRec.GET('') THEN
       IF gPWSetupRec."Acct Intf Customer Export" = 0 THEN
          BEGIN
             ERROR(CustExp);
             CurrDataport.QUIT;
          END;
    
    gCR := 13;
    gLF := 10;
    gDot := 183;
    gCTab := 9;
    gTab := FORMAT(gCTab);
    
    gFirstTime := TRUE;
    
    WriteHdrs;
    
    Sales Invoice Header - OnBeforeExportRecord()
    IF "Sales Invoice Header"."QB Interface" THEN
       CurrDataport.SKIP;
    
    ClearVariables;
    
    //>>Fill TRNS variables and write to file
    gHdrNo := "Sales Invoice Header"."No.";
    gHdrPostDate := FORMAT("Sales Invoice Header"."Posting Date",0,'<Month,2>/<Day,2>/<Year4>');
    IF gCustPostGroup.GET("Sales Invoice Header"."Customer Posting Group") THEN
       gHdrAcct := gCustPostGroup."Receivables Account" + ' ' + FORMAT(gDot) + ' Accounts Receivable';
    
    CASE gPWSetupRec."Acct Intf Customer Export" OF
       1:
          gHdrBillToCustNo := "Sales Invoice Header"."Bill-to Customer No.";
       2:
          gHdrBillToCustNo := "Sales Invoice Header"."Bill-to Name";
    END;
    
    CASE gPWSetupRec."Acct Intf Dimension Export" OF
       0:
          gHdrClass := '';
       1:
          gHdrClass := "Sales Invoice Header"."Shortcut Dimension 1 Code";
       2:
          gHdrClass := "Sales Invoice Header"."Shortcut Dimension 2 Code";
    END;
    
    IF "Sales Invoice Header".CALCFIELDS("Sales Invoice Header"."Amount Including VAT") THEN
       gHdrAmountInclVAT := FORMAT("Sales Invoice Header"."Amount Including VAT",0,'<Sign><Integer><Decimal>');
    
    gHdrPostDesc := "Sales Invoice Header"."Posting Description";
    
    gHdrNameIsTaxable := 'N';
    
    gHdrDueDate := FORMAT("Sales Invoice Header"."Due Date",0,'<Month,2>/<Day,2>/<Year4>');
    
    gHdrPaymentTermsCode := "Sales Invoice Header"."Payment Terms Code";
    
    WriteTrns;
    //<<
    
    //Fill SPL variables and write to file
    CLEAR(gSeq);
    gSeq := 1;
    gSalesIvcLine.SETFILTER(gSalesIvcLine."Document No.","Sales Invoice Header"."No.");
    IF gSalesIvcLine.FIND('-') THEN
    REPEAT
       BEGIN
          ClearVariables;
    
          gLineSeq := FORMAT(gSeq,0,'<Integer>');
    //      IF STRLEN(gLineSeq) = 1 THEN
    //         gLineSeq := '0' + gLineSeq;
    
          gLineDate := FORMAT("Sales Invoice Header"."Posting Date",0,'<Month,2>/<Day,2>/<Year4>');
          
          IF(gSalesIvcLine."No." <> '') THEN
          BEGIN
              gGenLedg.GET(gSalesIvcLine."No.");
              gLineAcct := FORMAT(gSalesIvcLine."No.") + ' ' + FORMAT(gDot) + ' ' + FORMAT(gGenLedg.Name);
          END;
    
          CASE gPWSetupRec."Acct Intf Customer Export" OF
             1:
                gLineName := "Sales Invoice Header"."Bill-to Customer No.";
             2:
                gLineName := "Sales Invoice Header"."Bill-to Name";
          END;
    
          IF(gSalesIvcLine."Location Code" <> '')THEN
              gWarehouse.GET(gSalesIvcLine."Location Code");
    
          gLineClass := gWarehouse.Contact;
    
    //      CASE gPWSetupRec."Acct Intf Dimension Export" OF
    //         0:
    //            gLineClass := '';
    //         1:
    //            gLineClass := gSalesIvcLine."Shortcut Dimension 1 Code";
    //         2:
    //            gLineClass := gSalesIvcLine."Shortcut Dimension 2 Code";
    //      END;
    
          gLineAmt := FORMAT((-1 * gSalesIvcLine."Amount Including VAT"),0,'<Sign><Integer><Decimal>');
    
          gLineDocNo := gSalesIvcLine."Document No.";
    
          gLineMemo := gSalesIvcLine.Description;
    
          gLinePrice := FORMAT((gSalesIvcLine."Amount Including VAT"),0,'<Integer><Decimal>');
    
          gLineItem := FORMAT(gSalesIvcLine."PW Service code");
    
          CASE gPWSetupRec."Acct Intf Sales Item Export" OF
             0:
                gLineInvItem := '';
             1:
                gLineInvItem := gSalesIvcLine."No.";
          END;
    
          gLineTaxable := 'N';
    
          WriteSpl;
          
          gSeq := gSeq + 1;
       END;
    UNTIL gSalesIvcLine.NEXT = 0;
    //<<
    
    WriteEndTrns;
    
    Sales Invoice Header - OnAfterExportRecord()
    gSlsPost.UpdateQBInterface("Sales Invoice Header");
    
    Sales Invoice Header - OnBeforeImportRecord()
    
    Sales Invoice Header - OnAfterImportRecord()
    
    Sales Invoice Header - OnPostDataItem()
    
    ClearVariables()
    CLEAR(gHdrNo);
    CLEAR(gHdrPostDate);
    CLEAR(gHdrAcct);
    CLEAR(gHdrBillToCustNo);
    CLEAR(gHdrClass);
    CLEAR(gHdrAmountInclVAT);
    CLEAR(gHdrPostDesc);
    CLEAR(gHdrNameIsTaxable);
    CLEAR(gHdrDueDate);
    CLEAR(gHdrPaymentTermsCode);
    CLEAR(gHdrPONo);
    
    CLEAR(gLineSeq);
    CLEAR(gLineDate);
    CLEAR(gLineAcct);
    CLEAR(gLineName);
    CLEAR(gLineClass);
    CLEAR(gLineAmt);
    CLEAR(gLineDocNo);
    CLEAR(gLineMemo);
    CLEAR(gLineTaxable);
    CLEAR(gLineExtra);
    CLEAR(gGenLedg);
    CLEAR(gWarehouse);
    CLEAR(gLinePrice);
    
    WriteHdrs()
    CurrFile.WRITE('!TRNS');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('TRNSID');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('TRNSTYPE');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('DATE');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('ACCNT');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('NAME');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('CLASS');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('AMOUNT');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('DOCNUM');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('MEMO');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('CLEAR');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('TOPRINT');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('NAMEISTAXABLE');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('DUEDATE');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('TERMS');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('PAYMETH');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('SHIPVIA');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('SHIPDATE');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('REP');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('FOB');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('PONUM');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('INVMEMO');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('ADDR1');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('ADDR2');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('ADDR3');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('ADDR4');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('ADDR5');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('SADDR1');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('SADDR2');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('SADDR3');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('SADDR4');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('SADDR5');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('TOSEND');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('ISAJE');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gCR);
    CurrFile.WRITE(gLF);
    
    CurrFile.WRITE('!SPL');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('SPLID');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('TRNSTYPE');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('DATE');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('ACCNT');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('NAME');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('CLASS');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('AMOUNT');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('DOCNUM');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('MEMO');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('CLEAR');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('QNTY');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('PRICE');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('INVITEM');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('PAYMETH');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('TAXABLE');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('EXTRA');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('VATCODE');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('VATRATE');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('VATAMOUNT');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('VALADJ');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('SERVICEDATE');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('TAXCODE');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('TAXRATE');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('TAXAMOUNT');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('OTHER2');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('OTHER3');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('REIMBEXP');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gCR);
    CurrFile.WRITE(gLF);
    
    CurrFile.WRITE('!ENDTRNS');
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gCR);
    CurrFile.WRITE(gLF);
    
    WriteTrns()
    CurrFile.WRITE('TRNS');//TRNS
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gHdrNo);//TRNSID
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gHdrNo) - STRLEN(gHdrNo)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('INVOICE');//TRNSTYPE
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gHdrPostDate);//DATE
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gHdrPostDate) - STRLEN(gHdrPostDate)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gHdrAcct);//ACCNT
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gHdrAcct) - STRLEN(gHdrAcct)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gHdrBillToCustNo);//NAME
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gHdrBillToCustNo) - STRLEN(gHdrBillToCustNo)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gHdrClass);//CLASS
    //CurrFile.WRITE('Omni Warehouse');
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gHdrClass) - STRLEN(gHdrClass)) - 1);
    //CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gHdrAmountInclVAT);//AMOUNT
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gHdrAmountInclVAT) - STRLEN(gHdrAmountInclVAT)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gHdrNo);//DOCNUM
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gHdrNo) - STRLEN(gHdrNo)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gHdrPostDesc);//MEMO
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gHdrPostDesc) - STRLEN(gHdrPostDesc)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('');//CLEAR
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('N');//TOPRINT
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gHdrNameIsTaxable);//NAMEISTAXABLE
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gHdrNameIsTaxable) - STRLEN(gHdrNameIsTaxable)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gHdrDueDate);//DUEDATE
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gHdrDueDate) - STRLEN(gHdrDueDate)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gHdrPaymentTermsCode);//TERMS
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gHdrPaymentTermsCode) - STRLEN(gHdrPaymentTermsCode)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//PAYMETH
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//SHIPVIA
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//SHIPDATE
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//REP
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//FOB
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gHdrPONo);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gHdrPONo) - STRLEN(gHdrPONo)) - 1);
    CurrFile.WRITE(gTab);//INVMEMO
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//ADDR1
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//ADDR2
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//ADDR3
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//ADDR4
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//ADDR5
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//SADDR1
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//SADDR2
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//SADDR3
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//SADDR4
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//SADDR5
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//TOSEND
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//ISAJE
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gCR);
    CurrFile.WRITE(gLF);
    
    WriteSpl()
    CurrFile.WRITE('SPL');//SPL
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gLineSeq);//SPLID
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gLineSeq) - STRLEN(gLineSeq)) - 1);
    //CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('INVOICE');//TRNSTYPE
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gLineDate);//DATE
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gLineDate) - STRLEN(gLineDate)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gLineAcct);//ACCNT
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gLineAcct) - STRLEN(gLineAcct)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    //CurrFile.WRITE(gLineName);//NAME
    //CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gLineName) - STRLEN(gLineName)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gLineClass);//CLASS
    //CurrFile.WRITE('Omni Warehouse');
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gLineClass) - STRLEN(gLineClass)) - 1);
    //CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gLineAmt);//AMOUNT
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gLineAmt) - STRLEN(gLineAmt)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gLineDocNo);//DOCNUM
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gLineDocNo) - STRLEN(gLineDocNo)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gLineMemo);//MEMO
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gLineMemo) - STRLEN(gLineMemo)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('');//CLEAR
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE('-1');//QNTY
    CurrFile.SEEK(CurrFile.POS - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gLinePrice);//PRICE
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gLinePrice) - STRLEN(gLinePrice)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gLineItem);//INVITEM
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gLineItem) - STRLEN(gLineItem)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//Paymeth
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gLineTaxable);//TAXABLE
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gLineTaxable) - STRLEN(gLineTaxable)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gLineExtra);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gLineExtra) - STRLEN(gLineExtra)) - 1);
    CurrFile.WRITE(gTab);
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//VATCODE
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//VATRATE
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//VATAMOUNT
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//VALADJ
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//SERVICEDATE
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//TAXCODE
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//TAXRATE
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//TAXAMOUNT
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//OTHER2
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//OTHER3
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gTab);//REIMBEXP
    CurrFile.SEEK(CurrFile.POS - (MAXSTRLEN(gTab) - STRLEN(gTab)) - 1);
    CurrFile.WRITE(gCR);
    CurrFile.WRITE(gLF);
    
    WriteEndTrns()
    CurrFile.WRITE('ENDTRNS');
    CurrFile.SEEK(CurrFile.POS - 1);
    IF gFirstTime THEN
       BEGIN
          gFirstTime := FALSE;
          CurrFile.WRITE(gCR);
          CurrFile.WRITE(gLF);
       END;
    
    
    Christopher Owens
    Support Technician
    Camelot Consulting, Inc.
    http://www.3plsoftware.com
  • kinekine Member Posts: 12,562
    It seems that the file is opened in binary mode, in this mode the whole variable is written into the file. It means if you are writing Text30 with only 5 characters, it will result in text string with 5 characters + 25x00 chars... :wink:
    Kamil Sacek
    MVP - Dynamics NAV
    My BLOG
    NAVERTICA a.s.
  • cowenscowens Member Posts: 6
    This is how it appears to me as well, but I'm not sure how to go about fixing this. It also seems odd to me that it is consistently 8 null characters at the end when the last thing written is a literal string.



    EDIT: Well I figured out how to make it write ASCII instead of binary but now at the end of each WRITE statement it's placing a CRLF.
    Christopher Owens
    Support Technician
    Camelot Consulting, Inc.
    http://www.3plsoftware.com
  • kinekine Member Posts: 12,562
    Because your variable isdefined as CODE 10 or TEXT 10. You need to define it as CODE 2 or Text 2 when you want to write only two characters... or you need to change file mode to text... :wink:
    Kamil Sacek
    MVP - Dynamics NAV
    My BLOG
    NAVERTICA a.s.
  • cowenscowens Member Posts: 6
    I added a line
    CurrFile.TEXTMODE(TRUE);
    

    That is what changed the output to add a CRLF at the end of each CurrFile.WRITE
    Christopher Owens
    Support Technician
    Camelot Consulting, Inc.
    http://www.3plsoftware.com
  • kinekine Member Posts: 12,562
    Yes, in this case you need to write whole line with one Write (something like WRITE(Myvar1+';'+MyVar2....) )
    Or you need to keep it in binary mode and create function WriteChar(MyText)

    with this code:
    for i:=1 to STRLEN(MyText) do
      File.WRITE(MyText[i]);
    

    In this case it will write byte by byte without no 00 chars... ;-)
    Kamil Sacek
    MVP - Dynamics NAV
    My BLOG
    NAVERTICA a.s.
  • cowenscowens Member Posts: 6
    =D> It works! thank you so much!
    Christopher Owens
    Support Technician
    Camelot Consulting, Inc.
    http://www.3plsoftware.com
Sign In or Register to comment.