// модуль предназначен для приема табеля из dbf-файлов
//                                 
// вызов:                             
//        "Ф-ция для приема из файла"_:  user\read_tab_dbf,Dialog,0                          
//
   char NameFileDBF[256];
   var TablDbf = CreateObject("CurPrnTbl");
   var CTabl   = CreateObject("CurPrnTbl");

   char Buf3[256];   
   string sim[33];
   string sim2[33];
   string ssii="си";
 int dn_si = 0;


Dialog( AdrCTabl,        // адрес передаваемой таблицы
        AdrCListTabl,    // адрес списка таблиц
        RcrInList        // номер записи в списке таблиц
     )
{
  CTabl.Initial(AdrCTabl);    // текущая таблица
  CTabl.Clear();              // очистка таблицы
  ReadDBF();
  return 1;
}


ReadDBF()
{
// char NmFl[256];
// sprintf(NmFl,"%s",static_cast_to_string(NumFil));
// FreeSpaceString(NmFl,2," ");
// var WorFl = "y:\\zatr\\" + NmFl + ".dbf";
// TablDbf.InitialNameFile(WorFl);

 TablDbf.InitialNameFile("c:\\tabel\\tab.dbf");    // место расположения dbf-файла

 // симв в dbf  ->  POD TABN DEN SOB VR_SOB

 int tn_old = 0;
 int pod = 0;
 int dn = 0;
 string si;
 double rv = 0.0;

 // Если у нас получилась всего одна строка да и та пустая   (т.е. в файле нет информации), то выходим
 if ( TablDbf.Count_Rcr()<2 &&  TablDbf.Check_Empty_Rcr(0)==-1 ) return ESC;

     // Начинаем обработку файла построчно
     for ( int RcrDbf=0; RcrDbf<TablDbf.Count_Rcr(); ++RcrDbf )
      {
       int tn  = atoi(TablDbf.TextS("TABN",RcrDbf));

       if(tn_old == 0)  {            // для самой первой записи в dbf
         tn_old = tn;
         sprintf(Buf3,"1111111111111111111111111111111");
        }

       if((tn != tn_old)) {          // если поменялся  tn        
         WriTabl(pod,tn_old,dn,sim,rv,dn_si);
         tn_old = tn;
         Clear_sim();
         sprintf(Buf3,"1111111111111111111111111111111");
        }

       pod = atoi(TablDbf.TextS("POD",RcrDbf));
       dn  = atoi(TablDbf.TextS("DEN",RcrDbf));
        
       si  = TablDbf.TextS("SOB",RcrDbf);  CharToOem(si,si);    FreeSpaceString(si,3,"");
       rv  = atof(TablDbf.TextS("VR_SOB",RcrDbf));
       
       sim[dn] = si;
       if(si == "си") {
         Buf3[dn-1] = 'Ы';   
         dn_si++;   
       }  
      }
   WriTabl(pod,tn_old,dn,sim,rv,dn_si);


}



WriTabl(a1,a2,a3,a4,a5,a6)
{
     // инициал ТН и находим табель тек мес
       int tn = atoi(a2);   
       char ls1[90];
       lsname(Find_Full_TN(tn),ls1);   FreeSpaceString(ls1,3,"");    

       char Func[1024],Buf[256],Buf2[256];    // Buf->Tabel_1 ;  Buf2->Tabel_2

       int ls_false =0;                       // проверяем наличие ТН в списке ЛС 
       if ((strlen(ls1) == 10) || (substr(ls1,1,1) == 0)) ls_false =1; // т.е. если  Z0\p00000/
                                                                 
       if(ls_false ==0)
       {
        lsread(ls1,0);                  // инициализация ТН

        int m=0; 
        sprintf(Func,"R_Caln(%s)",m);      FreeSpaceString(Func,2,"");
        CallFuncReceive(Func,Buf,255,0);   FreeSpaceString(Buf,2,"");        
        CallFuncReceive(Func,Buf2,255,0);  FreeSpaceString(Buf2,2,"");        
       }
       else
       {
        string no_tn="нет такого ТН в списке ЛС";
        sprintf(Buf,"%s",to_string(no_tn)); FreeSpaceString(Buf,2,"");
       }
     // инициал ТН и находим табель тек мес

     char fio[250];
     if(ls_false ==0)
       {
          char  fa[50];  kch_from("f",fa);  FreeSpaceString(fa,3,"");
          char  im[50];  kch_from("i",im);  FreeSpaceString(im,3,"");
          char  ot[50];  kch_from("o",ot);  FreeSpaceString(ot,3,"");

          sprintf(fio,"%s %s %s",fa,im,ot); FreeSpaceString(fio,3,"");
       }

        int den=atoi(a3);
                 //char tt[33];
                 //sprintf(tt,"t%d",to_string(a3));  FreeSpaceString(tt,3,"");    

        int CurRcr = CTabl.Count_Rcr()-1;
        CTabl.Add_Rcr(CurRcr,1);

        CTabl.STextS("FCpodr",CurRcr, to_string(a1));  
        CTabl.STextS("C_FIO",CurRcr, to_string(a2));
        CTabl.STextS("FIO",CurRcr, to_string(fio));
        CTabl.STextS("den",CurRcr, to_string(a6));
        //CTabl.STextS("si",CurRcr, to_string(a4));
        //CTabl.STextS("RV",CurRcr, to_string(a5));

       for ( int den=1; den <= 31; den++)   //цикл по дням          
        {
          if (den == 1) CTabl.STextS("t1",CurRcr,to_string(a4[1]));
          if (den == 2) CTabl.STextS("t2",CurRcr,to_string(a4[2]));
          if (den == 3) CTabl.STextS("t3",CurRcr,to_string(a4[3]));
          if (den == 4) CTabl.STextS("t4",CurRcr,to_string(a4[4]));
          if (den == 5) CTabl.STextS("t5",CurRcr,to_string(a4[5]));
          if (den == 6) CTabl.STextS("t6",CurRcr,to_string(a4[6]));
          if (den == 7) CTabl.STextS("t7",CurRcr,to_string(a4[7]));
          if (den == 8) CTabl.STextS("t8",CurRcr,to_string(a4[8]));
          if (den == 9) CTabl.STextS("t9",CurRcr,to_string(a4[9]));
          if (den == 10) CTabl.STextS("t10",CurRcr,to_string(a4[10]));
          if (den == 11) CTabl.STextS("t11",CurRcr,to_string(a4[11]));
          if (den == 12) CTabl.STextS("t12",CurRcr,to_string(a4[12]));
          if (den == 13) CTabl.STextS("t13",CurRcr,to_string(a4[13]));
          if (den == 14) CTabl.STextS("t14",CurRcr,to_string(a4[14]));
          if (den == 15) CTabl.STextS("t15",CurRcr,to_string(a4[15]));
          if (den == 16) CTabl.STextS("t16",CurRcr,to_string(a4[16]));
          if (den == 17) CTabl.STextS("t17",CurRcr,to_string(a4[17]));
          if (den == 18) CTabl.STextS("t18",CurRcr,to_string(a4[18]));
          if (den == 19) CTabl.STextS("t19",CurRcr,to_string(a4[19]));
          if (den == 20) CTabl.STextS("t20",CurRcr,to_string(a4[20]));
          if (den == 21) CTabl.STextS("t21",CurRcr,to_string(a4[21]));
          if (den == 22) CTabl.STextS("t22",CurRcr,to_string(a4[22]));
          if (den == 23) CTabl.STextS("t23",CurRcr,to_string(a4[23]));
          if (den == 24) CTabl.STextS("t24",CurRcr,to_string(a4[24]));
          if (den == 25) CTabl.STextS("t25",CurRcr,to_string(a4[25]));
          if (den == 26) CTabl.STextS("t26",CurRcr,to_string(a4[26]));
          if (den == 27) CTabl.STextS("t27",CurRcr,to_string(a4[27]));
          if (den == 28) CTabl.STextS("t28",CurRcr,to_string(a4[28]));
          if (den == 29) CTabl.STextS("t29",CurRcr,to_string(a4[29]));
          if (den == 30) CTabl.STextS("t30",CurRcr,to_string(a4[30]));
          if (den == 31) CTabl.STextS("t31",CurRcr,to_string(a4[31]));

          if(Buf3[den-1] == 'Ы')  Buf2[den-1]='С'; 

        }
      CTabl.STextS("Tabel_1",CurRcr,to_string(Buf));
      if(ls_false ==0)  CTabl.STextS("Tabel_2",CurRcr,to_string(Buf2));
      if(ls_false ==1)  CTabl.STextS("NoTN",CurRcr,to_string("1"));
}



Clear_sim()   
{
 for(int ii=1; ii <= 31; ii++)
  {
   sim[ii]="";
   sim2[ii]="";
   dn_si=0;
  }
} 