// Чтение  данных из Excel и запись в таблицу

var Tabl; // объект класса для работы таблицей

int idxTN  =0, // табельный номер
    idxORD=1,  // порядк номер
    idxFIO =2, // ФИО
    idxOTP =3,
    idxKOM =4,
    idxBOL =5,
    idxUCH =6,
    idxPOS =7,
    idxARE =8,

    idxN20  = 9,
    idxN36  = 10,
    idxN37  = 11,
    idxPIT  = 12,
    idxN42  = 13,
    idxN43  = 14,
    idxPOS2  =15,
    idxARE2  =16, 

    idxFV  =17,
    idxVZ  =18, 

    idxN19 = 19,
    idxSTG = 20,
    idxPRO = 21,
    idxPRZ = 22,
    idxNOH = 23,
    idxPSR = 24,
    idxLTR = 25,
    idxDOP = 26,
    idxDON = 27,

    idxVYH = 28,


    CntIdx =29;
 
  int nStart = 10;  // стартовый номер читаемой строки

  var CTabl = CreateObject("CurPrnTbl");

int fld[CntIdx];

int len=256;
char str[len];




ReadExc()
{

  var xls=CreateObject("Excel.Application");  // создаем объект Excel.Application, т.е. запускаем Excel, если он установлен конечно
  char Dir[len];                              // строка для текущей директории
  GetCurrentDirectory(len,Dir);               // получаем текущую директорию (это корень каталога ZPL из которого запустили АМБу)
  string nm="tula.xls";
  var WorkDir ="D:\\KBM\\";

  xls.Workbooks.Add(WorkDir+nm);              // открываем в Excel'е наш файл prim15.xls

  string name=xls.Workbooks.Item(1).Name;              // читаем имя workbook'а, чтобы обращатья потом к нему по имени
  var wsh=xls.Workbooks.Item(name).Worksheets.Item(1); // создаем ссылку на на наш worksheet чтобы избежать впоследствии длинных записей

  Tabl = CreateObject("CurPrnTbl");
  int cnt=Tabl.Count_Rcr(); // полное число записей   

  FillFld();

  int nPor=0, NumStr=0, IndEnd=0;
  //for ( long rcr=0; rcr<cnt; ++rcr) // идем по всей таблице
  for ( long rcr=0; IndEnd != 99999; ++rcr)
  {
    nPor   = atoi(Tabl.Text(fld[idxORD],rcr));
    NumStr = rcr+1;    // NumStr = nStart + nPor -1;

    char  cellA[9], cellB[35], cellC[35], cellD[35];
    char  cellF[20], cellG[20], cellH[20], cellL[20];
    char  cellI[20], cellJ[200];
    char  cellM[20], cellN[20], cellO[20];
    sprintf(cellA,"A%d",NumStr);
    sprintf(cellB,"B%d",NumStr);
    sprintf(cellC,"C%d",NumStr);
    sprintf(cellD,"D%d",NumStr);
    sprintf(cellF,"F%d",NumStr);
    sprintf(cellG,"G%d",NumStr);
    sprintf(cellH,"H%d",NumStr);
    sprintf(cellL,"L%d",NumStr);
    sprintf(cellI,"I%d",NumStr);
    sprintf(cellJ,"J%d",NumStr);
    sprintf(cellN,"N%d",NumStr);
    sprintf(cellO,"O%d",NumStr);
    sprintf(cellM,"M%d",NumStr);

   // string fio =Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellB)).Value);      
    string tn =  xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellA)).Value;      
    string fa =  Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellB)).Value);
    string im =  Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellC)).Value);
    string ot =  Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellD)).Value);
    string inn = Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellF)).Value);
    string stn = Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellG)).Value);
    string dr  = Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellH)).Value);
    string pol = Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellL)).Value);
    string dpr = Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellM)).Value);
    string sernm = Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellI)).Value);
    string kemko = Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellJ)).Value);
       string psp = DatPSP(sernm,kemko);
       int kdok   =21;

    string st2007 =  xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellN)).Value;
    string st2010 =  xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellO)).Value;
    FreeSpaceString(st2010,3,"");
    char dtss[20];   
    sprintf(dtss,"01.01.2007");
    int len = strlen(st2010);
    if ( strlen(st2010) == 8 ) sprintf(dtss,"01.01.2010");
    string data_st;
    if ( strlen(st2010) == 8 )  data_st = DatSSt(st2010);
    if ( strlen(st2007) == 8 )  data_st = DatSSt(st2007);

    CTabl.Add_Rcr(rcr,1);        
    CTabl.SText(fld[idxFIO],rcr,static_cast_to_string(fa)); 
    CTabl.STextS("C_FIO",rcr,static_cast_to_string(tn)); //заполн поля ТН
    CTabl.STextS("FCf",rcr,static_cast_to_string(fa));
    CTabl.STextS("FCi",rcr,static_cast_to_string(im));
    CTabl.STextS("FCo",rcr,static_cast_to_string(ot));
    CTabl.STextS("FCinn_fl",rcr,static_cast_to_string(inn));
    CTabl.STextS("FCstrah_n",rcr,static_cast_to_string(stn));
    CTabl.STextS("FCdata_r",rcr,static_cast_to_string(dr));
    CTabl.STextS("FCpol",rcr,static_cast_to_string(pol));
    CTabl.STextS("Dt_Rab",rcr,static_cast_to_string(dpr));
    CTabl.STextS("FCdatavys",rcr,static_cast_to_string(dpr));
    CTabl.STextS("FCdoc_code",rcr, static_cast_to_string(kdok));
    CTabl.STextS("FCpasport",rcr, static_cast_to_string(psp));
    CTabl.STextS("Dt_SS",rcr, static_cast_to_string(dtss));
    CTabl.STextS("FCdata_st",rcr, static_cast_to_string(data_st));

    CTabl.Rewrite();

    IndEnd = atoi(tn);


  }


}



ReadExc2()
{

  var xls=CreateObject("Excel.Application");  // создаем объект Excel.Application, т.е. запускаем Excel, если он установлен конечно
  char Dir[len];                              // строка для текущей директории
  GetCurrentDirectory(len,Dir);               // получаем текущую директорию (это корень каталога ZPL из которого запустили АМБу)
  string nm="MFCM.xls";
  var WorkDir ="D:\\ROLL\\";

  xls.Workbooks.Add(WorkDir+nm);              // открываем в Excel'е наш файл prim15.xls

  string name=xls.Workbooks.Item(1).Name;              // читаем имя workbook'а, чтобы обращатья потом к нему по имени
  var wsh=xls.Workbooks.Item(name).Worksheets.Item(1); // создаем ссылку на на наш worksheet чтобы избежать впоследствии длинных записей

  Tabl = CreateObject("CurPrnTbl");
  int cnt=Tabl.Count_Rcr(); // полное число записей   

  FillFld();

  int nPor=0, NumStr=0, IndEnd=0;
  //for ( long rcr=0; rcr<cnt; ++rcr) // идем по всей таблице
  for ( long rcr=0; IndEnd != 99999; ++rcr)
  {
    nPor   = atoi(Tabl.Text(fld[idxORD],rcr));
    NumStr = nStart + nPor -1;

    char cellB[35], cellM[9];
    char cellT[9], cellAP[9], cellAJ[9], cellAK[9], cellAQ[9], cellAU[9];
    char cellAW[9], cellAN[9];

    sprintf(cellB,"B%d",NumStr);  // ФИО
    sprintf(cellM,"M%d",NumStr);  // ТН

    sprintf(cellT,"T%d",NumStr);  // E15
    sprintf(cellAP,"AP%d",NumStr);  // E37
    sprintf(cellAJ,"AJ%d",NumStr);  // E31
    sprintf(cellAK,"AK%d",NumStr);  // E32
    sprintf(cellAQ,"AQ%d",NumStr);  // E38
    sprintf(cellAU,"AU%d",NumStr);  // E42
    sprintf(cellAW,"AW%d",NumStr);  // E44
    sprintf(cellAN,"AN%d",NumStr);  // E35

    string fio =Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellB)).Value);      
    string tn = xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellM)).Value;      
    string n20 = xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellT)).Value;
    string n36 = xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellAJ)).Value;
    string n37 = xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellAK)).Value;
    string pit = xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellAN)).Value;
    string n42 = xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellAP)).Value;
    string n43 = xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellAQ)).Value;
    string pos2 = xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellAU)).Value;
    string are2 = xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cellAW)).Value;
    
    double n20t = atof(n20);   round2(n20t,0,1,n20t);
    double n36t = atof(n36);   round2(n36t,0,1,n36t);
    double n37t = atof(n37);   round2(n37t,0,1,n37t);
    double pitt = atof(pit);   round2(pitt,0,1,pitt);
    double n42t = atof(n42);   round2(n42t,0,1,n42t);
    double n43t = atof(n43);   round2(n43t,0,1,n43t);
    double pos2t = atof(pos2);   round2(pos2t,0,1,pos2t);
    double are2t = atof(are2);   round2(are2t,0,1,are2t);


    CTabl.Add_Rcr(rcr,1);        
    CTabl.SText(fld[idxFIO],rcr,static_cast_to_string(fio)); 
    CTabl.SText(fld[idxTN],rcr,static_cast_to_string(tn)); //заполн поля ТН
    CTabl.SText(fld[idxN20],rcr,n20t);
    CTabl.SText(fld[idxN36],rcr,n36t);
    CTabl.SText(fld[idxN37],rcr,n37t);
    CTabl.SText(fld[idxPIT],rcr,pitt);
    CTabl.SText(fld[idxN42],rcr,n42t);
    CTabl.SText(fld[idxN43],rcr,n43t);
    CTabl.SText(fld[idxPOS2],rcr,pos2t);
    CTabl.SText(fld[idxARE2],rcr,are2t);


    CTabl.Rewrite();

    IndEnd = atoi(tn);


  }


}





FillFld()
// находим поля в таблице и определяем их номера
{
  fld[idxTN]   = Tabl.Find_Name_Fld("C_FIO");
  fld[idxORD] = Tabl.Find_Name_Fld("Order");
  fld[idxFIO]  = Tabl.Find_Name_Fld("FIO");
 // fld[idxFA]  = Tabl.Find_Name_Fld("FCf");
 // fld[idxIM]  = Tabl.Find_Name_Fld("FCi");
 // fld[idxOT]  = Tabl.Find_Name_Fld("FCo");
  fld[idxOTP]   = Tabl.Find_Name_Fld("Otp");
  fld[idxKOM] = Tabl.Find_Name_Fld("Komand");
  fld[idxBOL]  = Tabl.Find_Name_Fld("Boln");
  fld[idxUCH]   = Tabl.Find_Name_Fld("Uchen");
  fld[idxPOS] = Tabl.Find_Name_Fld("SocPrik");
  fld[idxARE]  = Tabl.Find_Name_Fld("Arend1");

  fld[idxN20]  = Tabl.Find_Name_Fld("N20");
  fld[idxN36]  = Tabl.Find_Name_Fld("N36");
  fld[idxN37]  = Tabl.Find_Name_Fld("N37");
  fld[idxPIT]  = Tabl.Find_Name_Fld("Pitan");
  fld[idxN42]  = Tabl.Find_Name_Fld("N42");
  fld[idxN43]  = Tabl.Find_Name_Fld("N43");
  fld[idxPOS2]  = Tabl.Find_Name_Fld("SocPrem");
  fld[idxARE2]  = Tabl.Find_Name_Fld("Arend2");

  fld[idxFV]  = Tabl.Find_Name_Fld("FaktVyd");
  fld[idxVZ]  = Tabl.Find_Name_Fld("VzaimZa");

  fld[idxN19] = Tabl.Find_Name_Fld("N19");
  fld[idxSTG] = Tabl.Find_Name_Fld("Stage");
  fld[idxPRO] = Tabl.Find_Name_Fld("Prostoi");
  fld[idxPRZ] = Tabl.Find_Name_Fld("Prazdn");
  fld[idxNOH] = Tabl.Find_Name_Fld("Nochn");
  fld[idxPSR] = Tabl.Find_Name_Fld("PremShR");
  fld[idxLTR] = Tabl.Find_Name_Fld("LegTrud");
  fld[idxDOP] = Tabl.Find_Name_Fld("Doplat");
  fld[idxDON] = Tabl.Find_Name_Fld("Donor");

  fld[idxVYH] = Tabl.Find_Name_Fld("VyhPos");
  fld[idxPIT] = Tabl.Find_Name_Fld("Pitan");


}


Ansi( Str )
// функция перекодирует значение Str в windows-кодировку и возвращает перекодированное значение
// Str - строка, которую нужно перекодировать
{
   string Ans=Str;
   OemToChar(Str,Ans);
   return Ans;
}


Vdos(Str)
{
   string Ans=Str;
   CharToOem(Str,Ans);
   return Ans;
}




DatPSP(ser,kem)
{
      char p2[90];
      sprintf(p2,"%s",static_cast_to_string(ser));
      FreeSpaceString(p2,3,"");
      unsigned len = strlen(p2);

      int izm=0;
      for (unsigned idx=0; idx<len; ++idx)
       {
         if ( p2[idx]==' ' )   
          {
            izm++;
            if (izm==2) p2[idx]=',';  // заменяем пробел на запятую
          }
       }                     

      char p3[150];
      sprintf(p3,"%s",static_cast_to_string(kem));
      FreeSpaceString(p3,3,"");

     // char p4[90];
     // sprintf(p4,"%s",static_cast_to_string(kog));
     // FreeSpaceString(p4,3,"");

      char p5[90];
      sprintf(p5,"%s,%s",p2,p3);  
      FreeSpaceString(p5,3,"");

      return p5;
}

DatSSt(dts)
{
      char p2[90];
      sprintf(p2,"%s",static_cast_to_string(dts));
      FreeSpaceString(p2,3,"");
      unsigned len = strlen(p2);

      int izm=0;
      for (unsigned idx=0; idx<len; ++idx)
       {
         if ( p2[idx]=='/' )  p2[idx]=' ';  // заменяем слэш на пробел  
       }                     
      
      char p5[90];
      sprintf(p5,"%s",p2);  
      FreeSpaceString(p5,3,"");

      return p5;

}
