The File is not Open Error

CHADELCHADEL Posts: 16Member
edited 2019-08-09 in NAV Three Tier
Hello. I am trying to generate a csv file using Dynamics NAV report. But I'm getting a "The file is not open" error whenever I try to create the file. This is currently what I've done:

OnPreDataItem()
varFileName := recDirectoryTable."Sample Directory" + '\' + 'SampleCSVFile.csv';

IF varFile.CREATE(varFileName) THEN BEGIN
varFile.TEXTMODE(TRUE);
// header -
varFile.WRITE()
...
// header +
END;

OnAfterGetRecord()
// body -
varFile.WRITE()
...
// body +

OnPostDataItem()
varFile.CLOSE;

MESSAGE('File creation done!');

Is there something missing here? I've also checked forums but unfortunately didn't get the answer I want. Thank you.

Best Answer

  • CHADELCHADEL Posts: 16
    edited 2019-08-13 Accepted Answer
    Hello folks.
    Thank you for all the inputs. It finally worked.
    What I did is I changed the directory to 'D:\'
    ex. varFileName := 'D:\SampleCSVFile.csv';
    and the file was created (which is what I saw from @ftornero). I also tried using a table for the directory
    ex. varFileName := recDirectoryTable."Sample Directory" + '\' + 'SampleCSVFile.csv';
    and the file was created. What's missing in my first code is the FIND or GET of recDirectoryTable, my bad. Thanks @AlexDen.
    What's weird is that when I changed the directory to 'C:\', the same error appears. Which is still a problem because I want the files to be saved in Documents.

Answers

  • AluanAluan Posts: 47Member
    edited 2019-08-09
    Hello CHADEL,

    you have to open the File before u write to it.

    Example from the Documentation (https://docs.microsoft.com/en-us/dynamics-nav/textmode-function--file-):
    TestFile.TEXTMODE(TRUE);
    TestFile.WRITEMODE(TRUE);
    TestFile.OPEN('C:\TestFolder\TestFile.txt');
    TestFile.WRITE('Hello World');
    TestFile.CLOSE;
  • CHADELCHADEL Posts: 16Member
    Aluan.
    I already that but the error still exist.
  • AluanAluan Posts: 47Member
    Where exactly do you get the error? Can you debug it?
    Maybe you can post the full code as well.
  • AlexDenAlexDen Posts: 51Member
    Hi,

    Perhaps, this line returns false and you don't create a file:
    IF varFile.CREATE(varFileName) THEN BEGIN
    

    Where is FIND or GET of recDirectoryTable? Do you build correct file name?
    varFileName := recDirectoryTable."Sample Directory" + '\' + 'SampleCSVFile.csv';
    

  • ftorneroftornero Posts: 269Member
    Hello @CHADEL ,

    I don't know what the problem could be but here is an example, like yours, that works.
    OBJECT Report 50012 Write File Test
    {
      OBJECT-PROPERTIES
      {
        Date=09/08/19;
        Time=12:00:18;
        Modified=Yes;
        Version List=;
      }
      PROPERTIES
      {
        ProcessingOnly=Yes;
      }
      DATASET
      {
        { 1000000000;;DataItem;                  ;
                   DataItemTable=Table2000000026;
                   DataItemTableView=SORTING(Number)
                                     WHERE(Number=FILTER(1..10));
                   OnPreDataItem=BEGIN
                                   varFileName := 'D:\Paso\salida.txt';
                                   IF varFile.CREATE(varFileName) THEN BEGIN
                                     varFile.TEXTMODE(TRUE);
                                     // header -
                                     varFile.WRITE('Header');
                                     // header +
                                   END;
                                 END;
    
                   OnAfterGetRecord=BEGIN
                                      varFile.WRITE('Line '+ FORMAT(Integer.Number));
                                    END;
    
                   OnPostDataItem=BEGIN
                                    varFile.CLOSE;
                                    MESSAGE('File creation done!');
                                  END;
                                   }
    
      }
      REQUESTPAGE
      {
        PROPERTIES
        {
        }
        CONTROLS
        {
        }
      }
      LABELS
      {
      }
      CODE
      {
        VAR
          [email protected] : File;
          [email protected] : Text;
    
        BEGIN
        END.
      }
      RDLDATA
      {
      }
    }
    

    Regards
  • TallyHoTallyHo Posts: 304Member
    edited 2019-08-09
    If you use a static file name, my guess is that you have the file open in notepad or Excel. Try closing everything but nav. And remove the IF before create. You want an error if f.i. the path is not correct. In that case the error even makes sense.
  • CHADELCHADEL Posts: 16Member
    edited 2019-08-13 Accepted Answer
    Hello folks.
    Thank you for all the inputs. It finally worked.
    What I did is I changed the directory to 'D:\'
    ex. varFileName := 'D:\SampleCSVFile.csv';
    and the file was created (which is what I saw from @ftornero). I also tried using a table for the directory
    ex. varFileName := recDirectoryTable."Sample Directory" + '\' + 'SampleCSVFile.csv';
    and the file was created. What's missing in my first code is the FIND or GET of recDirectoryTable, my bad. Thanks @AlexDen.
    What's weird is that when I changed the directory to 'C:\', the same error appears. Which is still a problem because I want the files to be saved in Documents.
Sign In or Register to comment.