// модуль предназначен для приема колич дней отпуска
// из Excel  с листа №_1      
//        
//вызов:  "Ф-ция для приема из файла"_:  user\read_dni_ot,ReadExl,0
//                                    
//char nt1[4], nt2[4], nt3[4], nt4[4], nt5[4], nt6[4];

string cel[43];
char str_01[99], str_02[99], str_03[99];
char str_11[99], str_12[99];

//  ПРИМЕР использов. cel[xx] 
// bb1++;     sprintf(Title01,"%s",static_cast_to_string(cel[bb1]));
// sprintf(nnn,"%s%s",Title01,static_cast_to_string(bb5));
// if(bb2 != 0)  tWriteStringToCell(nnn,OemToAnsi(bb2));




int idxPOD =0,  // табельный номер
    idxTN  =1,  // порядк номер
    idxFIO =2,  // 
    idxDNI =3,
    idxDAT =4,

    CntIdx =5;

int fld[CntIdx];

int len=256;
char str[len];


var CTabl   = CreateObject("CurPrnTbl");

int CountTabl = 0;


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



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

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

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

  FillFld();

  int nPor=0, NumStr=0, IndEnd=0;
  int list=0;
  char cell_dat[9]; sprintf(cell_dat,"C2");
    string dat =Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cell_dat)).Value);
    FreeSpaceString(dat,3,"");


  for ( long rcr=4; IndEnd < 999; ++rcr)    //цикл по строкам по таб ном
   {
    char cell_A[9]; 
                     sprintf(cell_A,"A%d",rcr);
    char cell_B[9];
                     sprintf(cell_B,"B%d",rcr);
    char cell_C[9];
                     sprintf(cell_C,"C%d",rcr);  // 
    char cell_D[9];
                     sprintf(cell_D,"D%d",rcr);  // 

    string pod =Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cell_A)).Value);
    FreeSpaceString(pod,3,"");
    string tab =Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cell_B)).Value);
    FreeSpaceString(tab,3,"");
    string fio =Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cell_C)).Value);
    FreeSpaceString(fio,3,"");
//    string dni =Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cell_D)).Value);
    string dni =  xls.Workbooks.Item(1).Worksheets.Item(1).Range(static_cast_to_string(cell_D)).Value;
    FreeSpaceString(dni,3,"");
    int d_ot = atoi(dni);

    if(atoi(tab) > 0)    //если ТН то обрабатываем
     {
       int CurRcr = CTabl.Count_Rcr()-1;
       CTabl.Add_Rcr(CurRcr,1);
       CTabl.SText(fld[idxPOD],CurRcr,static_cast_to_string(pod));              
       CTabl.SText(fld[idxTN],CurRcr,static_cast_to_string(tab));
       CTabl.SText(fld[idxFIO],CurRcr,static_cast_to_string(fio));       
       CTabl.SText(fld[idxDNI],CurRcr,static_cast_to_string(d_ot));  //dni

//       CTabl.SText(fld[idxDAT],CurRcr,static_cast_to_string(dat));

     }

    if( atoi(tab) <  1)  IndEnd = 999;

   }
  CTabl.Rewrite();
}






FillFld()
// находим поля в таблице и определяем их номера
{
  fld[idxPOD]  = CTabl.Find_Name_Fld("FCpodr");
  fld[idxTN]   = CTabl.Find_Name_Fld("C_FIO");
  fld[idxFIO]  = CTabl.Find_Name_Fld("FIO");
  fld[idxDNI]  = CTabl.Find_Name_Fld("DniZarOtp");
  fld[idxDAT]  = CTabl.Find_Name_Fld("DatEndPer");
}

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

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