// Открытие карт ПАО АКБ "РОСБАНК"
// ОСР_15.06.2018

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

int idxOrder      = 0,  // №№
    idxF          = 1,  // Ф
    idxI          = 2,  // И
    idxO          = 3,  // О
    idxPol        = 4,  // пол
    idxDateB      = 5,  // дата рождения
	idxStranaB    = 6,  // страна рождения
    idxGorodB     = 7,  // город рождения
	idxCitizen    = 8,  // гражданство
	idxStatus     = 9,  // статус (резидент / нерезидент)
	idxPasport    = 10, // Паспорт
	idxPhone      = 11, // Телефон
    idxAdres      = 12, // адрес регистрации
    idxAdresF     = 13, // адрес фактический
    idxVCard      = 14, // вид карты
	idxWCity      = 15, // город работы
	
    nFld=16;  // число элементов в массиве Fld

int  Fld[nFld];

// Передача в файл
OpenRosB(AdrCTabl, AdrCListTabl, RcrInList)
{
  var CFile=CreateObject("CurPrnFile"); // объект класса для работы с текущим файлом печати
  CFile.SetFlagBrowse(0);               // запрещаем просмотр
  CFile.SetFlag_Print(0);

  CTabl=CreateObject("CurPrnTbl");  // объект класса для работы с текущей таблицей
  CTabl.Initial(AdrCTabl);
  int cr=CTabl.Count_Rcr();         // число рабочих записей в таблице   
    if ( !cr || (cr==1 && CTabl.Check_Empty_Rcr(0)) ) return false;

  var xls=CreateObject("Excel.Application");  // создаем объект Excel.Application, т.е. запускаем Excel, если он установлен конечно
  char Dir[128];                              // строка для текущей директории
  GetCurrentDirectory(128,Dir);               // получаем текущую директорию (это корень каталога ZPL из которого запустили АМБу)
  string nm="rosbank_opn.xlt";                        // имя Excel'евского файла
  var WorkDir = Dir + "\\"+NameCommonDir()+"\\";         
  xls.Caption=OemToAnsi("limit");// заголовок (в windows кодировке)
  var Workb=xls.Workbooks.Add(WorkDir+nm);    // открываем в Excel'е наш файл ls.xls

  var wsh = Workb.Worksheets.Item(1);       // создаем ссылку на на наш worksheet чтобы избежать впоследствии длинных записей
  wsh.Select();

  var CMsg = 0;    // Процент выполненной работы

  int bTime = false;   // false-показывать процент,
                       // true-показывать оставшееся время

  CMsg=CreateObject("ProgressBar");
  CMsg.Initial(0,100,1);
  CMsg.SetShowTime(static_cast_to_int(bTime));

  if ( !FillNumFld() ) return false; //определяем необходимые нам номера полей

   // Запрос дополнительной информации
   char ID[256], Numdog[256], DateF[256], NumF[256], Usl[256];
    ID=CTabl.TextS("NumID",0);     // ID-клиента в банке
    Numdog=CTabl.TextS("NumDog",0); // номер контракта
    DateF=CTabl.TextS("DateF",0); // дата файла
	NumF=CTabl.TextS("NumF",0);   // номер файла за день
	Usl=CTabl.TextS("Usl",0);   // описание условий
   
   if (ESC==Panel_Zapros(" Введите дополнительные данные ","",
                    "  ID клиента",ID, 6,
                    "  Номер контракта",Numdog, 10,
					"  Дата файла",DateF, 10,
					"  Номер файла",NumF, 10,
					"  Описание условий",Usl, 25) 
      ) return ESC;
	  
   FreeSpaceString(ID,3,"");
   CTabl.STextS("NumID",0, static_cast_to_string(ID));
   FreeSpaceString(Numdog,3,"");
   CTabl.STextS("NumDog",0, static_cast_to_string(Numdog));
   FreeSpaceString(DateF,3,"");
   CTabl.STextS("DateF",0, static_cast_to_string(DateF));
   FreeSpaceString(NumF,3,"");
   CTabl.STextS("NumF",0, static_cast_to_string(NumF));  
   FreeSpaceString(Usl,3,"");
   CTabl.STextS("Usl",0, static_cast_to_string(Usl));    
   CTabl.Rewrite();
   
   char Org[256];
   GetEnterpriseVar("ИМЯП", Org,255);  // Наименование предприятия или отделения иностранной организации
   FreeSpaceString(Org,3,""); OemToChar(Org,Org);
   
   // Шапка формы
   OemToChar(ID,ID); WriteToCell(wsh,"D3",ID); // ID клиента
   WriteToCell(wsh,"D4",Org); // Наименование клиента
   OemToChar(Numdog,Numdog); WriteToCell(wsh,"D5",Numdog); // номер контракта
   OemToChar(DateF,DateF); WriteToCell(wsh,"D6",DateF); // дата файла
   OemToChar(NumF,NumF); WriteToCell(wsh,"D7",NumF); // номер файла
   OemToChar(Usl,Usl); WriteToCell(wsh,"D8",Usl); // описание условий
   
   
  int ShStr=17; int j=1;
  char nnn[256], str[256];
  try
  {
  // цикл по записям таблицы
  for (int zap=0; zap<cr; zap++)
  {
    // progress bar - чтобы видеть процент выполненной работы до того как появится результат
    if ( CMsg.Msg_Proc(" Подождите немного. Идет подготовка к печати. ",100.*zap/cr)==ESC )
    {
      return 0;
    }
    
    // Ф
    str=CTabl.Text(Fld[idxF],zap);
    FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"A%d",ShStr); WriteToCell(wsh,nnn,str);
	// И
    str=CTabl.Text(Fld[idxI],zap);
    FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"B%d",ShStr); WriteToCell(wsh,nnn,str);
	// О
    str=CTabl.Text(Fld[idxO],zap);
    FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"C%d",ShStr); WriteToCell(wsh,nnn,str);
	// Пол
	str=CTabl.Text(Fld[idxPol],zap);
    FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"D%d",ShStr); WriteToCell(wsh,nnn,str);
	// Дата рождения
	str=CTabl.Text(Fld[idxDateB],zap);
    FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"E%d",ShStr); WriteToCell(wsh,nnn,str);
	// Страна рождения
	str=CTabl.Text(Fld[idxStranaB],zap);
    FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"F%d",ShStr); WriteToCell(wsh,nnn,str);
	// Место рождения
	str=CTabl.Text(Fld[idxGorodB],zap);
    FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"G%d",ShStr); WriteToCell(wsh,nnn,str);
	// Гражданство и страна
	str=CTabl.Text(Fld[idxCitizen],zap);
    FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"H%d",ShStr); WriteToCell(wsh,nnn,str);
	sprintf(nnn,"J%d",ShStr); WriteToCell(wsh,nnn,str);
    // Резидент - нерезидент
	str=CTabl.Text(Fld[idxStatus],zap);
    FreeSpaceString(str,3,""); OemToChar(str,str);
	  if (str == "1") str = "ДА"; else str = "НЕТ"; 
	OemToChar(str,str); sprintf(nnn,"I%d",ShStr); WriteToCell(wsh,nnn,str);
	// Документ (паспорт сотрудника)
	{
		string buf="";
        buf = CTabl.Text(Fld[idxPasport],zap); FreeSpaceString(buf,3,"");
		var Pasp = CreateObject("Pasport");
	        Pasp.Initial(to_string(buf));

    	string P_vid_doc = Pasp.GetPasport("НАЗВАН"); FreeSpaceString(P_vid_doc,3,"");
		OemToChar(P_vid_doc,P_vid_doc); 
		sprintf(nnn,"K%d",ShStr); WriteToCell(wsh,nnn,P_vid_doc);
       		
		string P_ser = Pasp.GetPasport("СЕРИЯ"); FreeSpaceString(P_ser,3,"");
		OemToChar(P_ser,P_ser); 
		sprintf(nnn,"L%d",ShStr); WriteToCell(wsh,nnn,P_ser);
        
		string P_num = Pasp.GetPasport("НОМЕР"); FreeSpaceString(P_num,3,"");
	    OemToChar(P_num,P_num); 
		sprintf(nnn,"M%d",ShStr); WriteToCell(wsh,nnn,P_num);
       		
		string P_date = Pasp.GetPasport("КОГДА"); FreeSpaceString(P_date,3,"");
		OemToChar(P_date,P_date); 
		sprintf(nnn,"N%d",ShStr); WriteToCell(wsh,nnn,P_date);
       
		string P_who = Pasp.GetPasport("КЕМ_БК"); FreeSpaceString(P_who,3,"");
		OemToChar(P_who,P_who); 
		sprintf(nnn,"O%d",ShStr); WriteToCell(wsh,nnn,P_who);
		
		string P_podr = Pasp.GetPasport("КЕМКОД"); FreeSpaceString(P_podr,3,"");
		OemToChar(P_podr,P_podr); 
		sprintf(nnn,"P%d",ShStr); WriteToCell(wsh,nnn,P_podr);
	}
	// Телефон
	str=CTabl.Text(Fld[idxPhone],zap);
    FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"AA%d",ShStr); WriteToCell(wsh,nnn,str);
	// Адрес регистрации
	{
		string adr="";
	    adr = CTabl.Text(Fld[idxAdres],zap); FreeSpaceString(adr,3,"");
		var Adress = CreateObject("Adres");
	        Adress.Initial(to_string(adr));
		
		string strana = Adress.GetAdres("КОДСТР" ,"ГНИ"); FreeSpaceString(strana  ,2,"");
		OemToChar(strana,strana); sprintf(nnn,"AB%d",ShStr); WriteToCell(wsh,nnn,strana);
		
		string index = Adress.GetAdres("ИНДЕКС" ,"ГНИ"); FreeSpaceString(index  ,2,"");
		OemToChar(index,index); sprintf(nnn,"AC%d",ShStr); WriteToCell(wsh,nnn,index);
		
		string region = Adress.GetAdres("РЕГИОН" ,"ГНИ"); FreeSpaceString(region  ,2,"");
		OemToChar(region,region); sprintf(nnn,"AD%d",ShStr); WriteToCell(wsh,nnn,region);
       
	    string raion = Adress.GetAdres("РАЙОН" ,"ГНИ"); FreeSpaceString(raion  ,2,"");
		OemToChar(raion,raion); sprintf(nnn,"AE%d",ShStr); WriteToCell(wsh,nnn,raion);
		
		string gorod = Adress.GetAdres("ГОРОД" ,"ГНИ"); FreeSpaceString(gorod  ,2,"");
		OemToChar(gorod,gorod); sprintf(nnn,"AF%d",ShStr); WriteToCell(wsh,nnn,gorod);
		
		string street = Adress.GetAdres("УЛИЦА" ,"ГНИ"); FreeSpaceString(street  ,2,"");
		OemToChar(street,street); sprintf(nnn,"AG%d",ShStr); WriteToCell(wsh,nnn,street);
		
		string dom = Adress.GetAdres("ДОМ" ,"ГНИ"); FreeSpaceString(dom  ,2,"");
		OemToChar(dom,dom); sprintf(nnn,"AH%d",ShStr); WriteToCell(wsh,nnn,dom);
		
		string stroenie = Adress.GetAdres("КОРПУС" ,"ГНИ"); FreeSpaceString(stroenie  ,2,"");
		OemToChar(stroenie,stroenie); sprintf(nnn,"AI%d",ShStr); WriteToCell(wsh,nnn,stroenie);
		
		string flat = Adress.GetAdres("КВ-РА" ,"ГНИ"); FreeSpaceString(flat  ,2,"");
		OemToChar(flat,flat); sprintf(nnn,"AJ%d",ShStr); WriteToCell(wsh,nnn,flat);
	}
	// Адрес проживания
	{
		string adrf="";
	    adrf = CTabl.Text(Fld[idxAdresF],zap); FreeSpaceString(adrf,3,"");
		var Adressf = CreateObject("Adres");
	        Adressf.Initial(to_string(adrf));
		
		string strana = Adressf.GetAdres("КОДСТР" ,"ГНИ"); FreeSpaceString(strana  ,2,"");
		OemToChar(strana,strana); sprintf(nnn,"AK%d",ShStr); WriteToCell(wsh,nnn,strana);
		
		string index = Adressf.GetAdres("ИНДЕКС" ,"ГНИ"); FreeSpaceString(index  ,2,"");
		OemToChar(index,index); sprintf(nnn,"AL%d",ShStr); WriteToCell(wsh,nnn,index);
		
		string region = Adressf.GetAdres("РЕГИОН" ,"ГНИ"); FreeSpaceString(region  ,2,"");
		OemToChar(region,region); sprintf(nnn,"AM%d",ShStr); WriteToCell(wsh,nnn,region);
       
	    string raion = Adressf.GetAdres("РАЙОН" ,"ГНИ"); FreeSpaceString(raion  ,2,"");
		OemToChar(raion,raion); sprintf(nnn,"AN%d",ShStr); WriteToCell(wsh,nnn,raion);
		
		string gorod = Adressf.GetAdres("ГОРОД" ,"ГНИ"); FreeSpaceString(gorod  ,2,"");
		OemToChar(gorod,gorod); sprintf(nnn,"AO%d",ShStr); WriteToCell(wsh,nnn,gorod);
		
		string street = Adressf.GetAdres("УЛИЦА" ,"ГНИ"); FreeSpaceString(street  ,2,"");
		OemToChar(street,street); sprintf(nnn,"AP%d",ShStr); WriteToCell(wsh,nnn,street);
		
		string dom = Adressf.GetAdres("ДОМ" ,"ГНИ"); FreeSpaceString(dom  ,2,"");
		OemToChar(dom,dom); sprintf(nnn,"AQ%d",ShStr); WriteToCell(wsh,nnn,dom);
		
		string stroenie = Adressf.GetAdres("КОРПУС" ,"ГНИ"); FreeSpaceString(stroenie  ,2,"");
		OemToChar(stroenie,stroenie); sprintf(nnn,"AR%d",ShStr); WriteToCell(wsh,nnn,stroenie);
		
		string flat = Adressf.GetAdres("КВ-РА" ,"ГНИ"); FreeSpaceString(flat  ,2,"");
		OemToChar(flat,flat); sprintf(nnn,"AS%d",ShStr); WriteToCell(wsh,nnn,flat);
	}
	// Вид карты
	str=CTabl.Text(Fld[idxVCard],zap);
    FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"AT%d",ShStr); WriteToCell(wsh,nnn,str);
	// Город места работы
	str=CTabl.Text(Fld[idxWCity],zap);
    FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"AU%d",ShStr); WriteToCell(wsh,nnn,str);

    if (zap>0)
    {   
         // добaвляем строку
         wsh.Rows(ShStr+1).Insert();
    }
    j++;
    ShStr++;
   }
  wsh.Rows(ShStr+1).Delete();
  wsh.Rows(ShStr).Delete();
  //ShStr++;

  xls.Visible=true;           // делаем Excel видимым
  }
 catch(object err)
   {
      SayError(err);
   }
   catch(...)
   {
      ;
   }

   return 0;
}

FillNumFld()
//=============================================================================
// Находим поля в таблице
//=============================================================================
{
   Fld[idxOrder]      = CTabl.Find_Name_Fld("Order");    
   Fld[idxF]          = CTabl.Find_Name_Fld("FCf");
   Fld[idxI]          = CTabl.Find_Name_Fld("FCi");
   Fld[idxO]          = CTabl.Find_Name_Fld("FCo");
   Fld[idxPol]        = CTabl.Find_Name_Fld("FCpol");
   Fld[idxDateB]      = CTabl.Find_Name_Fld("FCdata_r");
   Fld[idxStranaB]    = CTabl.Find_Name_Fld("FCstrana_r");
   Fld[idxGorodB]     = CTabl.Find_Name_Fld("FCgorod_r");
   Fld[idxCitizen]    = CTabl.Find_Name_Fld("FCcitizen");
   Fld[idxStatus]     = CTabl.Find_Name_Fld("FCstatus");
   Fld[idxPasport]    = CTabl.Find_Name_Fld("FCpasport");
   Fld[idxPhone]      = CTabl.Find_Name_Fld("FCphone");
   Fld[idxAdres]      = CTabl.Find_Name_Fld("FCadres");
   Fld[idxAdresF]     = CTabl.Find_Name_Fld("FCadres_f");
   Fld[idxVCard]      = CTabl.Find_Name_Fld("VCard");
   Fld[idxWCity]      = CTabl.Find_Name_Fld("WCity");
    
   for ( int ii=0; ii<nFld; ii++ )
     if ( Fld[ii]==-1 )
     {
        AmbaMessageBox("Нет необходимых полей в таблице!","Ошибка!!!",MB_OK|MB_ICONERROR,0);
        return false;
     }
   return true;
}

WriteToCell(&WSheet,&Cell,&strok)
// WSheet - ссылка на worksheet
// Cell - имя ячейки
// str - значение, которое требуется записать в ячейку Cell рабочего листа WSheet
{
  string t = static_cast_to_string(strok);

  if ( strlen(t) )
    WSheet.Range(static_cast_to_string(Cell)).Value = t;
   
  return 0;
}


///////////////////////////////////////////////////////////
// Настраиваемые переменные
///////////////////////////////////////////////////////////

string VidKart ="";
string City    =""; 

TipKart()
{
   char VidK[256]; 
   string rez="Classic"; 
   if ( PanelZap(rez)==ESC ) return 0;
      VidK = static_cast_to_string(rez);
   VidKart = VidK;
}

PanelZap(&rez)
{
  rez = "1";
  var Map = CreateObject("MapString");
  Map.Add("1" ,"Classic");
  Map.Add("2" ,"Gold");
  Map.Add("3" ,"Platinum");
  string Title = "Выберите вид карты";
  var MapRez = CreateObject("MapString");
  if ( PanelValueFromMap(Map,MapRez,1,Title) == ESC )
     return ESC;
  if ( !MapRez.InitIterator() )
     return 0;
  rez = MapRez.GetCurValue();
  return 0;
}

CityWork()
{
	char AdrF[256];
	GetEnterpriseVar("АДРП",AdrF,255); 
    FreeSpaceString(AdrF,2,"");
	
	var Adr = CreateObject("Adres");
    Adr.Initial(to_string(AdrF));  
	City = Adr.GetAdres("ГОРОД"  ,"ЗНАЧ"); FreeSpaceString(City  ,2,"");
}