SBSL FINDFIRST/FINDNEXT

48 views
Skip to first unread message

Panagiotis Maniatakos

unread,
Mar 31, 2026, 8:32:00 AM (6 days ago) Mar 31
to Softone Developers Network
Με SBSL, απο ένα φάκελο διαβάζω κάποια csv και τα κάνω import.
Παίζει κανονικά και δεν έχω κανένα θέμα, δεν γνωρίζω όμως πόσα αρχεία csv θα υπάρχουν στον συγκεκριμένο φάκελο.

Γνωρίζει κάποιος αν υπάρχει τρόπος που θα λουπάρει όσα αρχεία υπάρχουν στον φάκελο και να τρέχω σε κάθε επανάληψη τον κώδικά μου;

Tassos Kapetanis

unread,
Mar 31, 2026, 1:29:52 PM (6 days ago) Mar 31
to so...@googlegroups.com
    var folder = fso.GetFolder(folderPath);
    var files = new Enumerator(folder.Files);

    for (; !files.atEnd(); files.moveNext()) {
        var file = files.item();
        var filename = file.Name;

εγώ αυτό το κάνω μέ JS και παίζει άψογα ...

Και σε sbsl........ πιστεύω  αυτό ΄θέλεις.  αν σου κάνει κάτι  θα χαρώ πολύ 
καλό  βράδυ 

 
Form
    {
[TABLES]
ImpTable=;;;;Master;3;0

[ImpTable]
vImpOk=2;15;1;1;0;Επιβεβαίωση εργασίας;$Y;;1;
vFile2=1;255;1;1;0;Αρχείο(να τελειώνει πάντα με \ );;;;X:\
vHeaderRows=3;30;0;1;0;Πρώτη γραμμή;;;;1


[PANELS]
PANEL11=0;;0;70,30
PANEL12=0;Διαδρομή αρχείου;0;50
PANEL13=0;Επικεφαλίδα αρχείου;0;20

[PANEL11]
ImpTable.vImpOk

[PANEL12]
ImpTable.vFile2

[PANEL13]
ImpTable.vHeaderRows



//[STRINGS]


}

Var
   vErrors ,vFileName;
include 'Pilib';
include 'ModuleIntf';

Converter ConvCustomer (TRDR,    'COMPANY;CODE;SODTYPE=13', TRDR);
Converter ConvItem     (MTRL,    'COMPANY;CODE;SODTYPE=51', MTRL);
Converter ConvBranch   (TRDBRANCH,    'TRDR;COMPANY;CODE;SODTYPE=13', TRDBRANCH);
Converter ConvVat      (VAT,       'PERCNT', VAT);

Import ImpSales(sSalDoc,sIteLines) into 'SALDOC,IMPORT:1,WARNINGS:OFF'
       {
       
        }

Connect Xplorer Orders
                      {
                  connect();

                         sSalDoc = select 1;
                       }

Var
   x, SQL, vID, TxtRead, vRow, vRowCancel, UserResp, vLine, vLen,vitem_code ,vlineval,vprice ,vfincode ,vdate ,vinsdate, vFile ,vFlag ,x1 ,vinscompany;
   

{
 If (:ImpTable.vImpOK=0)
     {
     UserResp=SendResponse('Δεν έχετε επιλέξει επιβεβαίωση εργασίας', 'RESULTS.LABELTEXT');
     }
 else if (:ImpTable.vHeaderRows=Null Or :ImpTable.vHeaderRows < 1)
         {
          UserResp=SendResponse('Η πρώτη γραμμή πρέπει να είναι μεγαλύτερη είτε ίση με 1', 'RESULTS.LABELTEXT');
          }
 else
     {
      UserResp=SendResponse('Έναρξη διαδικασίας...', 'RESULTS.LABELTEXT');    

  //    x=SafeExecSql('Orders','drop table Docs', Null);


//  x=SafeExecSql('Orders', SQL, Null);

      //------ευρεση αρχειου----------------

 vRow = 0;

vFile = FindFirst(:ImpTable.vFile2+'*.txt',63);       //H FindFirst (της Pilib) ψαχνει στο φακελο να βρει το πρωτο αρχειο  [0]=Filename, [1]=Date, [2]=Size, [3]=Attributes.Epistrefei με αυτο το ονομα
     vFileName = getindexvar(vFile,0);                             //με το 0 θα γυρισει το File Name (getindexvar γιατι η απο πανω γυριζει array) π.χ apografi_11122023.xlsx

if (FileExists(VarToStr(:ImpTable.vFile2+vFileName))='True')   //εαν το βρει
 
  {
    vFlag = 0;                                              //μεταβλητη για να μπει σε loop για να διαβάζει από το φάκελο τα αρχεια με τη σειρά
while(vFlag = 0)

{

// x=ShowWarning(VarToStr(:ImpTable.vFile2+vFileName));
// x=ShowWarning(VarToStr(vFileName));
// x=ShowWarning(pos('_',vFileName));
// x=ShowWarning(VarToStr(copy(vFileName,pos('_',vFileName)+1,6)));

      UserResp=SendResponse('Ανάγνωση αρχείου ASCII...', 'RESULTS.LABELTEXT');
      TxtRead=CallPublished('PILib.OpenText', :ImpTable.vFile2+vFileName);
     
       
      while (CallPublished('PILib.Eof', TxtRead)=0)
            {
             vLine=CallPublished('PILib.ReadLine', TxtRead)+';';
             
             vLen=Len(vLine);

             vitem_code=Copy(vLine,1,Pos(';',vLine)-1);
             vLine = Copy(vLine,Pos(';',vLine)+1,vLen);

             vlineval=Copy(vLine,1,Pos(';',vLine)-1);
             vLine = Copy(vLine,Pos(';',vLine)+1,vLen);

             vprice = Copy(vLine,1,Pos(';',vLine)-1);
             vLine = Copy(vLine,Pos(';',vLine)+1,vLen);

             vfincode = Copy(vLine,1,Pos(';',vLine)-1);
             vLine = Copy(vLine,Pos(';',vLine)+1,vLen);
             
             vdate = Copy(vLine,1,Pos(';',vLine)-1);
             vdate=Copy(vdate,1,4)+ Copy(vdate,5,2)+Copy(vdate,7,2);
             vLine = Copy(vLine,Pos(';',vLine)+1,vLen);

             vinscompany = VarToStr(:X.SYS.COMPANY);
vinsdate = VarToStr(:X.SYS.LOGINDATE);



           //  x=ExecSql('Orders', 'insert into Docs values (:1,:2,:3,:4,:5,:6)' ,
//                                        VarArray( vitem_code,vlineval,vprice,vfincode ,vinscompany ,vdate,vinsdate,7)); //-->δεν μου ενημερωνε σωστα το price


x=ExecSql('Orders', 'insert into CCCDOCS values (' +
                                  QuotedStr(Trim(vitem_code))     + ',' +
                                  QuotedStr(Trim(vlineval))    + ',' +
                                  QuotedStr(Trim(vprice))     + ',' +
                                  QuotedStr('0')     + ',' +
QuotedStr(Trim(vfincode))      + ',' +
QuotedStr(Trim(vdate))      + ',' +
                                  QuotedStr(Trim(vinscompany))     + ',Convert(datetime,' +
                                  QuotedStr(Trim(vinsdate))     + ',103))',null);


           
             }

             x=CallPublished('PILib.CloseText', TxtRead);

 vRow = vRow + 1;
UserResp=SendResponse( vRow, vRow, 0, 'Εισαγωγή εγγραφών ..... παρακαλώ περιμένετε.', 'RESULTS.TOTREC;RESULTS.CURREC;RESULTS.CANREC;RESULTS.LABELTEXT');

x= DeleteFile(:ImpTable.vFile2+vFileName);    //------διαγραφή αρχείου

//----------εναλλακτικα με bat αρχειο---------
// x1=CreateText(:ImpTable.vFile2+'not_ok.bat');
// x=Writeline(x1,'DEL '+:ImpTable.vFile2+ vFileName);
// x=Closetext(x1);
// x=ExecPrg(:ImpTable.vFile2+'not_ok.bat', '');  //μεταφορα αρχείου με εκτελση Bat
// x = DeleteFile(:ImpTable.vFile2+'not_ok.bat');

//---ευρεση επόμενου------

              vFile = FindNext(vFile);
vFileName = getindexvar(vFile,0);
if (FileExists(VarToStr(:ImpTable.vFile2+vFileName))='True')
{
 vFlag = 0;
}
else
 vFlag = 1;   //---εχουν τελειωσει ολα τα αρχεια
}
x = FindClose(vFile);
 
UserResp=SendResponse( vRow, vRow, 0, 'Η εργασία ολοκληρώθηκε', 'RESULTS.TOTREC;RESULTS.CURREC;RESULTS.CANREC;RESULTS.LABELTEXT');
}

       else
  {
    //---- δεν βρέθηκε κανένα αρχείο ------
    UserResp=SendResponse( 0, 0, 0, 'Δεν βρέθηκε κανένα αρχείο', 'RESULTS.TOTREC;RESULTS.CURREC;RESULTS.CANREC;RESULTS.LABELTEXT');
 
       }
}

}

--
Softone Developers Network group.
To post to this group, send email to so...@googlegroups.com
---
Λάβατε αυτό το μήνυμα επειδή έχετε εγγραφεί στην ομάδα "Softone Developers Network" των Ομάδων Google.
Για να απεγγραφείτε απ' αυτή την ομάδα και να σταματήσετε να λαμβάνετε μηνύματα ηλεκτρονικού ταχυδρομείου απ' αυτή, στείλτε ένα μήνυμα ηλεκτρονικού ταχυδρομείου στη διεύθυνση soft1+un...@googlegroups.com.
Για να δείτε αυτή τη συζήτηση, επισκεφτείτε το https://groups.google.com/d/msgid/soft1/36a2358b-a004-47a3-89d2-b566ee28e16en%40googlegroups.com.

Panagiotis Maniatakos

unread,
Mar 31, 2026, 2:30:56 PM (6 days ago) Mar 31
to Softone Developers Network
Σε ευχαριστώ πολύ!!
Έπαιξε μια χαρά κι απο SBSL. (Δεν είχα κάνει ποτέ χρήστη της while)

Reply all
Reply to author
Forward
0 new messages