// модуль предназначен для приема информации из Excel  с листа №_1      
// и разноски в ЛС сумм  выплат (сторонних) бух_Наташа
//вызов:  "Ф-ция для приема из файла"_:  user\vypl_read,ReadExl,0
//таблица:  TAB_LS/
//Excel-файл:  C:/kbm_vypl/vypl_kbm.xlsx

string cel[43];

int idxTN  =0,  // 
    idxPOD =1,  // 
    idxFIO =2,  // 
    idxMON =3,  // 
    idxSUM =4,  // 
    idxDAT =5,  // 
    idxVID =6,  // 

    CntIdx =7;

int fld[CntIdx];

int len=256;
char str[len];


var CTabl   = CreateObject("CurPrnTbl");


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="vypl_kbm.xlsx";              
  var WorkDir ="C:\\kbm_vypl\\";   
  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 чтобы избежать впоследствии длинных записей

  FillFld();

  int nStart = 4;                     // № первой строки в Excel
  int nPor=0, NumStr=0, IndEnd=0;

  for ( long rcr=0; IndEnd < 9999; ++rcr)       {
    
    NumStr = nStart + rcr;

    char cellC[35], cellD[35], cellE[35], cellF[35], cellH[35], cellJ[35];

    sprintf(cellC,"C%d",NumStr);
    sprintf(cellD,"D%d",NumStr);
    sprintf(cellE,"E%d",NumStr);
    sprintf(cellF,"F%d",NumStr);
    sprintf(cellH,"H%d",NumStr);
    sprintf(cellJ,"J%d",NumStr);


    string tn  = xls.Workbooks.Item(1).Worksheets.Item(1).Range(to_string(cellE)).Value;      
    string pod = xls.Workbooks.Item(1).Worksheets.Item(1).Range(to_string(cellD)).Value;      
    string fio =Vdos( xls.Workbooks.Item(1).Worksheets.Item(1).Range(to_string(cellC)).Value);      
    string vid = xls.Workbooks.Item(1).Worksheets.Item(1).Range(to_string(cellF)).Value;      
    string sum = xls.Workbooks.Item(1).Worksheets.Item(1).Range(to_string(cellH)).Value;
    string dat =Vdos(  xls.Workbooks.Item(1).Worksheets.Item(1).Range(to_string(cellJ)).Value);

    char dat_tek[90];
    sprintf(dat_tek,"%s",datatek);    
    string st1;  st1=substr(dat_tek,3,7);      

       CTabl.Add_Rcr(rcr,1);        
       CTabl.SText(fld[idxFIO],rcr,to_string(fio)); 
       CTabl.SText(fld[idxSUM],rcr,to_string(sum)); 
       CTabl.SText(fld[idxPOD],rcr,to_string(pod)); 
       CTabl.SText(fld[idxTN],rcr,to_string(tn));
       CTabl.SText(fld[idxVID],rcr,to_string(vid));
       CTabl.SText(fld[idxDAT],rcr,to_string(dat));
       CTabl.SText(fld[idxMON],rcr,to_string(st1));

       CTabl.Rewrite();

    IndEnd++;
    if( atoi(pod) <  1)  IndEnd = 9999;
  }
}


FillFld()  {
  // находим поля в таблице и определяем их номера
  fld[idxTN]   = CTabl.Find_Name_Fld("C_FIO");
  fld[idxPOD]  = CTabl.Find_Name_Fld("FCpodr");
  fld[idxFIO]  = CTabl.Find_Name_Fld("FIO");
  fld[idxMON]  = CTabl.Find_Name_Fld("Month");
  fld[idxSUM]  = CTabl.Find_Name_Fld("Sum");
  fld[idxDAT]  = CTabl.Find_Name_Fld("Date_Vyp");
  fld[idxVID]  = CTabl.Find_Name_Fld("Extern_Cod");

}


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

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


SepareFa(FIO)
{
        // Записываем ФИО
      char fio[91];
      sprintf(fio,"%.90s",static_cast_to_string(FIO));

      // Выделим из fio фамилию, имя и отчество:
      // ParamList[0] - фамилия, ParamList[1] - полное имя или его первая
      // буква, ParamList[2] - полное отчество или его первая буква ( это
      // зависит от того в каком виде представ ФИО в касс ведом и ордерах )
      var FIOParam = CreateObject("ParamFuncRW");
      FIOParam.IInitial(static_cast_to_string(fio)," .",3);

      char f[31];
      sprintf(f,"%.30s", static_cast_to_string(FIOParam.Get(0)));
          
      return f;  
}
