// МКБ Банк
// ОСР_07.07.2021

var CFile;      // объект класса для работы с текущим файлом печати
var CTabl;      // объект класса для работы с текущей таблицей

int 
   idsOrder = 1,
   idsTN = 2,
   idsFCf = 3,
   idsFCi = 4,
   idsFCo = 5,
   idsSUM_PAY = 6,
   idsBankCard = 7,
   idsIncomeType = 8,
   idsPenaltySum = 9,
   idsFCpasport = 10,
   idsFCdata_r = 11,
   idsnum_reestr = 12,
   idsperiod = 13,
   idsdate_reest = 14,
   sFld = 15;
   
int    Fls[sFld];

//======================================================
// ПЕЧАТНЫЕ ФОРМЫ
PrintMKBSum()
{
  CFile=CreateObject("CurPrnFile"); // объект класса для работы с текущим файлом печати
  CFile.SetFlagBrowse(0);               // запрещаем просмотр
  CFile.SetFlag_Print(0);

  CTabl=CreateObject("CurPrnTbl");  // объект класса для работы с текущей таблицей
  int cr=CTabl.Count_Rcr();         // число рабочих записей в таблице   

  var xls=CreateObject("Excel.Application");  // создаем объект Excel.Application, т.е. запускаем Excel, если он установлен конечно
  char Dir[128];                              // строка для текущей директории
  GetCurrentDirectory(128,Dir);               // получаем текущую директорию (это корень каталога ZPL из которого запустили АМБу)
  string nm="mkb_sum.xlt";                        // имя Excel'евского файла
  var WorkDir = Dir + "\\"+NameCommonDir()+"\\";         
  xls.Caption=OemToAnsi("Зачисление сумм в МКБ Банк");// заголовок (в 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 ( !FillNumFldSumm(CTabl) ) return false; //определяем необходимые нам номера полей

  // Номер реестра
    char num_reestr[256];
    num_reestr = CTabl.TextS("num_reestr",0);
	WriteToCell(wsh,"E1",num_reestr);
     
  // Организация
     char Org[1024];
     GetEnterpriseVar("ИМЯП", Org,160);  // Наименование предприятия или отделения иностранной организации
     FreeSpaceString(Org,3,""); OemToChar(Org,Org);
	 WriteToCell(wsh,"C2",Org);
   // Дата реестра   
    char date_reestr[256];
    date_reestr = CTabl.TextS("date_reest",0);
	WriteToCell(wsh,"E6",date_reestr);
   // Код вида дохода   
    char vid_dox[256];
    vid_dox = CTabl.TextS("IncomeType",0);
	WriteToCell(wsh,"E8",vid_dox);
   // Период с ... по ...
     char month[256];
     month =CTabl.TextS("period",0);
     var DPeriod = CreateObject("KDate");
          DPeriod.SetDate(to_string("01."+month));
      string s1 = DPeriod.GetStr(); int count_d = DPeriod.CountDay();
	  string s2 = to_string(count_d)+"."+month;
	  var d2 = CreateObject("KDate"); d2.SetDate(s2); d2.ImproveDay();
	  string s3 =d2.GetStr();
	  WriteToCell(wsh,"C4",s1); WriteToCell(wsh,"F4",s3);
	 
  // Начало заполнения 
  int ShStr=12; int j=1;
  char str[256], nnn[256];
  double sum;
  try
  {
  // цикл по записям таблицы
  for (int zap=0; zap<cr; zap++)
  {
    // progress bar - чтобы видеть процент выполненной работы до того как появится результат
    if ( CMsg.Msg_Proc(" Подождите немного. Идет подготовка к печати. ",100.*zap/cr)==ESC )
    {
      return 0;
    }
    
	// Таб. Номер
    str = CTabl.Text(Fls[idsTN],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"B%d",ShStr);
    WriteToCell(wsh,nnn,str);
    
	// Фамилия
    str = CTabl.Text(Fls[idsFCf],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"C%d",ShStr);
    WriteToCell(wsh,nnn,str);
	
	// Имя
    str = CTabl.Text(Fls[idsFCi],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"D%d",ShStr);
    WriteToCell(wsh,nnn,str);
	
	// Отчество
    str = CTabl.Text(Fls[idsFCo],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"E%d",ShStr);
    WriteToCell(wsh,nnn,str);
	
	// Сумма
    str = CTabl.Text(Fls[idsSUM_PAY],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"F%d",ShStr);
    WriteToCell(wsh,nnn,str);
	
	// Дата Рождения (dd.mm.yyyy)
    str = CTabl.Text(Fls[idsFCdata_r],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"H%d",ShStr);
    WriteToCell(wsh,nnn,str);
		
	// Паспорт
	   var pasp=CreateObject("Pasport");  //объект для работы с паспортом
	   pasp.Initial(to_string(CTabl.Text(Fls[idsFCpasport],zap)));
	// Серия документа - удостоверения личности
	     str = pasp.GetPasport("СЕРИЯ");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"I%d",ShStr);
		 WriteToCell(wsh,nnn,str);
	// Номер документа - удостоверения личности
	     str = pasp.GetPasport("НОМЕР");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"J%d",ShStr);
		 WriteToCell(wsh,nnn,str);
	
	// Номер счета
    str = CTabl.Text(Fls[idsBankCard],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"M%d",ShStr);
    WriteToCell(wsh,nnn,str);
	
	// Сумма удержания
    str = CTabl.Text(Fls[idsPenaltySum],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"N%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();
  
  xls.Visible=true;           // делаем Excel видимым
  }
 catch(object err)
   {
      SayError(err);
   }
   catch(...)
   {
      ;
   }

   return 0;
}

//***Формирование файла xml на зачисление сумм
MakeNameSummMKB(   AdrCTabl,         // адрес передаваемой таблицы    
              AdrCListTabl,   // адрес списка таблиц           
              RcrInList)                                                
{
 var CTabl=CreateObject("CurPrnTbl");  // объект класса для работы с текущей таблицей
  CTabl.Initial(AdrCTabl); 
  CTabl.VarGMain=0;
  
 char x[256], y[256], z[256];
   var d  = CreateObject("KDate");
       d.SetDate(static_cast_to_string(R_SYS_DATA("6",y,10,0)));
	   	   
   x=CTabl.TextS("num_reestr",0); 
   y=CTabl.TextS("date_reest",0); y = d.GetStr();
   z=CTabl.TextS("period",0); 
     sprintf(z,"%s.%s",static_cast_to_string(d.GetMonth()),static_cast_to_string(d.GetYear()));
	 FreeSpaceString(z,3,"");
	 
  if (ESC==Panel_Zapros(" Введите дополнительные данные ","",
                    "  Номер реестра за день ", x, 10,
					"  Дата реестра (dd.mm.yyyy) ", y, 10,
					"  Период выплаты (mm.yyyy) ", z, 7)
      ) return ESC;
  FreeSpaceString(x,3,""); FreeSpaceString(y,3,""); FreeSpaceString(z,3,"");
  
   CTabl.STextS("num_reestr",0, static_cast_to_string(x));
   CTabl.STextS("date_reest",0, static_cast_to_string(y));
   CTabl.STextS("period",0, static_cast_to_string(z));
   CTabl.Rewrite();
  
  
  var OptionsT = CreateObject("TransferOptions");
  char NameFile[512];
  char month[256]; 
  MakeNameDirMonth(month);
  
  char dir[256];dir=GetDirTransf(AdrCListTabl,RcrInList);
  if(!strlen(dir)) dir="c:\\MKB";  //каталог по умолчанию
  
   sprintf(NameFile,"%s%s\\РеестрСуммыМКБ_%s_%s_%s%s",dir,month,"z",ModifDateYYYYMMDD(y),x,".xml");
  
  OptionsT.SetNameFile(static_cast_to_string(NameFile));
}

ToMKB_SummXML(AdrCTabl, AdrCListTabl, RcrInList)
{
  //создаем объект для работы с таблицей
   var CTabl=CreateObject("CurPrnTbl");  // объект класса для работы с текущей таблицей
   CTabl.Initial(AdrCTabl); 
   CTabl.VarGMain=0;
   
  int count_rec=CTabl.Count_Rcr();
  if ( !FillNumFldSumm(CTabl) ) return false; //определяем необходимые нам номера полей
  try
  {
    char Org[256],Inn[256];
            
    string WorkFile;
        
    int bTime  = false; // false-показывать процент,
                        // true-показывать оставшееся время
    //Инициализируем ProgressBar
    var CMsg  = CreateObject("ProgressBar");
    CMsg.Initial(0,100,1);
    CMsg.SetShowTime(static_cast_to_int(bTime));
    
	// Организация
     Org[1024];
     GetEnterpriseVar("ИМЯП", Org,160);  // Наименование предприятия или отделения иностранной организации
     FreeSpaceString(Org,3,""); 
	
	// Реквизиты для заголовка
	  char docnum[256], docdate[256], month[256], type[256];
	     docnum = CTabl.TextS("num_reestr",0); docdate = CTabl.TextS("date_reest",0); 
		 month =CTabl.TextS("period",0); type = CTabl.TextS("IncomeType",0);
		 FreeSpaceString(docnum,2,""); FreeSpaceString(docdate,2,""); FreeSpaceString(month,2,"");
		 FreeSpaceString(type,2,"");
	
      var DPeriod = CreateObject("KDate");
          DPeriod.SetDate(to_string("01."+month));
      string s1 = DPeriod.GetStr(); int count_d = DPeriod.CountDay();
	  string s2 = to_string(count_d)+"."+month;
	  var d2 = CreateObject("KDate"); d2.SetDate(s2); d2.ImproveDay();
	  string s3 =d2.GetStr();
	
    // Заголовок файла
	var XMLDoc= CreateXMLobj();
    XMLDoc.documentElement=CreateElemXML(XMLDoc,OemToAnsi("ZPDocument")); //корневой элемент
	
	var XMLElemOtkr = CreateChildElemXML(XMLDoc,XMLDoc.documentElement,OemToAnsi("Version"));
	    SetValueElemXML(XMLElemOtkr,toUTF8(OemToAnsi("Контур-Зарплата")));
	    XMLElemOtkr = CreateChildElemXML(XMLDoc,XMLDoc.documentElement,OemToAnsi("DOCNUM"));
		SetValueElemXML(XMLElemOtkr,toUTF8(OemToAnsi(docnum)));
		XMLElemOtkr = CreateChildElemXML(XMLDoc,XMLDoc.documentElement,OemToAnsi("FirmName"));
		SetValueElemXML(XMLElemOtkr,toUTF8(OemToAnsi(Org)));
		XMLElemOtkr = CreateChildElemXML(XMLDoc,XMLDoc.documentElement,OemToAnsi("BD"));
		SetValueElemXML(XMLElemOtkr,toUTF8(OemToAnsi(s1)));
		XMLElemOtkr = CreateChildElemXML(XMLDoc,XMLDoc.documentElement,OemToAnsi("ED"));
		SetValueElemXML(XMLElemOtkr,toUTF8(OemToAnsi(s3)));
		XMLElemOtkr = CreateChildElemXML(XMLDoc,XMLDoc.documentElement,OemToAnsi("DOCDATE"));
		SetValueElemXML(XMLElemOtkr,toUTF8(OemToAnsi(docdate)));
		XMLElemOtkr = CreateChildElemXML(XMLDoc,XMLDoc.documentElement,OemToAnsi("INCOMETYPECODE"));
		SetValueElemXML(XMLElemOtkr,toUTF8(OemToAnsi(type)));
	
	// Роспись по сотрудникам
	var XMLElemSum = CreateChildElemXML(XMLDoc,XMLDoc.documentElement,OemToAnsi("EmployeeRowList"));
	
    char str[256];    
    //цикл по строкам таблицы
    for (int zap=0; zap<count_rec; zap++)
    {
      if ( CMsg.Msg_Proc(" Подождите немного. Идет формирование файла.",100.*(zap+1)/count_rec)==ESC )
          return false;

      if (!CTabl.Flag_Action_1(zap)) continue;
    
	  var XMLElemOtkr2 = CreateChildElemXML(XMLDoc,XMLElemSum,OemToAnsi("EmployeeRow"));
      
      // Фамилия   
      var XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("SURNAME"));
      str = CTabl.Text(Fls[idsFCf],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
      
	  // Имя
      XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("FIRSTNAME"));
      str = CTabl.Text(Fls[idsFCi],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
      
	  // Отчество
      XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("SECONDNAME"));
      str = CTabl.Text(Fls[idsFCo],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  // Счет
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("PeopleAccount"));
      str = CTabl.Text(Fls[idsBankCard],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  // Сумма выплаты
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("DOCSUMM"));
      str = CTabl.Text(Fls[idsSUM_PAY],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  // Дата рождения
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("BDATE"));
      str = CTabl.Text(Fls[idsFCdata_r],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  // Паспортные данные
	  var pasp=CreateObject("Pasport");  //объект для работы с паспортом
	  pasp.Initial(to_string(CTabl.Text(Fls[idsFCpasport],zap)));
	  // Серия
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("DOCNUMSER"));
      str = pasp.GetPasport("СЕРИЯ"); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  // Номер
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("PDOCNUM"));
      str = pasp.GetPasport("НОМЕР"); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  // Табельный номер
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("TABNUM"));
      str = CTabl.Text(Fls[idsTN],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  // Видимо сумма удержания
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("RETENTIONSUMM"));
      str = CTabl.Text(Fls[idsPenaltySum],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
     }
    
   
    //формируем имя файла
    char NameFile[256];
    var OptionsTR = CreateObject("TransferOptions");
    stccpy(NameFile,OptionsTR.GetNameFile(),256);
    FreeSpaceString(NameFile,3," ");

    str=NameFile;
    mkdirAll(str);//создаем каталог если его нет

    char Path[256];
    Path=str;
    if ( Path[0]=='.' && Path[1]=='.' )
    {
      fullpath(Path,Path,255);
      FreeSpaceString(Path,3,"");
      str=Path;
    }
    if (!SaveFileXMLFine(XMLDoc,str," "))
    {   
      AmbaMessageBox("Невозможно сохранить файл "+NameFile,"ошибка",0, 0);
      return false;
    }
  }
  catch(object err)
  {
    SayError(err);
    return 0;
  }
  catch(...)
  {
    SayUndefinedScriptError();
    return 0;
  }
  return 1;
}


int 
	idoOrder = 0,
	idoTN = 1,
	idoFCf = 2,
	idoFCi = 3,
	idoFCo = 4,
	idoFCdolgnost = 5,
	idoFCdata_r = 6,
	idoFCpasport = 7,
	idoFCdata_rb = 8,
	idoFCadres = 9,
	idoStrah_n = 10,
	idoFCgorod_r = 11,
	idoFCoblast_r = 12,
	idoFCstrana_r = 13,
	idoFCphone = 14,
	idoFCadres_f = 15,
	idoFCinn_fl = 16,
	idoFCstatus = 17,
	idoSummZP = 18,
	idoFCcitizen = 19,
	idokeyword = 20,
	idoFCrajon_r = 21,
	oFld = 22;

int    Fld[oFld];

//***Формирование файла xml на открытие счетов
MakeNameOpenMKB(   AdrCTabl,         // адрес передаваемой таблицы    
              AdrCListTabl,   // адрес списка таблиц           
              RcrInList)                                                
{
 var CTabl=CreateObject("CurPrnTbl");  // объект класса для работы с текущей таблицей
  CTabl.Initial(AdrCTabl); 
  CTabl.VarGMain=0;
  
  char num[11];
  if (ESC==Panel_Zapros(" Введите дополнительные данные ","",
                    "  Номер реестра за день",num, 10)
      ) return ESC;
  FreeSpaceString(num,3,"");	  
  
  
  var OptionsT = CreateObject("TransferOptions");
  char NameFile[512];
  char month[256]; 
  MakeNameDirMonth(month);
  
  char dir[256];dir=GetDirTransf(AdrCListTabl,RcrInList);
  if(!strlen(dir)) dir="c:\\MKB";  //каталог по умолчанию
  
   sprintf(NameFile,"%s%s\\РеестрОткрытиеМКБ_%s_%s%s",dir,month,"o",num,".xml");
  
  OptionsT.SetNameFile(static_cast_to_string(NameFile));
}

ToMKB_OtkrXML(AdrCTabl, AdrCListTabl, RcrInList)
{
  //создаем объект для работы с таблицей
   var CTabl=CreateObject("CurPrnTbl");  // объект класса для работы с текущей таблицей
   CTabl.Initial(AdrCTabl); 
   CTabl.VarGMain=0;
   
  int count_rec=CTabl.Count_Rcr();
  if ( !FillNumFldOpen(CTabl) ) return false; //определяем необходимые нам номера полей
  try
  {
    char Org[256],Inn[256];
            
    string WorkFile;
        
    var XMLDoc= CreateXMLobj();
    XMLDoc.documentElement=CreateElemXML(XMLDoc,OemToAnsi("LSDocument")); //корневой элемент

       var XMLElemOtkr = CreateChildElemXML(XMLDoc,XMLDoc.documentElement,OemToAnsi("ERowList"));
	
	       
	
    int bTime  = false; // false-показывать процент,
                        // true-показывать оставшееся время
    //Инициализируем ProgressBar
    var CMsg  = CreateObject("ProgressBar");
    CMsg.Initial(0,100,1);
    CMsg.SetShowTime(static_cast_to_int(bTime));
    
	// Организация
     Org[1024];
     GetEnterpriseVar("ИМЯП", Org,160);  // Наименование предприятия или отделения иностранной организации
     FreeSpaceString(Org,3,""); OemToChar(Org,Org);
	
    
    char str[256];    
    //цикл по строкам таблицы
    for (int zap=0; zap<count_rec; zap++)
    {
      if ( CMsg.Msg_Proc(" Подождите немного. Идет формирование файла.",100.*(zap+1)/count_rec)==ESC )
          return false;

      if (!CTabl.Flag_Action_1(zap)) continue;
    
	  var XMLElemOtkr2 = CreateChildElemXML(XMLDoc,XMLElemOtkr,OemToAnsi("ERow"));
      
      var XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("FIRMNAME"));
      str = CTabl.Text(Fld[idoFCf],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(Org));
	  
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("POST"));
      str = CTabl.Text(Fld[idoFCdolgnost],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("DATE_BEGIN"));
      str = CTabl.Text(Fld[idoFCdata_rb],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("SUMMZP"));
      str = CTabl.Text(Fld[idoSummZP],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("TABNUM"));
      str = CTabl.Text(Fld[idoTN],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	   
      XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("SURNAME"));
      str = CTabl.Text(Fld[idoFCf],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
      
      XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("FIRSTNAME"));
      str = CTabl.Text(Fld[idoFCi],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
      
      XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("SECONDNAME"));
      str = CTabl.Text(Fld[idoFCo],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("CITIZENSHIP"));
      str = CTabl.Text(Fld[idoFCcitizen],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("TAX_RESIDENCY_COUNTRY"));
      str = CTabl.Text(Fld[idoFCcitizen],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  // Паспорт
	   var pasp=CreateObject("Pasport");  //объект для работы с паспортом
	   pasp.Initial(to_string(CTabl.Text(Fld[idoFCpasport],zap)));
	   
	    // Тип документа
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("DOCTYPE"));
		str = pasp.GetPasport("КОДДОК"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		
		// Серия
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("DOCNUMSER"));
		str = pasp.GetPasport("СЕРИЯ"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		
		// Номер
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("DOCNUM"));
		str = pasp.GetPasport("НОМЕР"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		
		// Дата выдачи
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("DOCDATE"));
		str = pasp.GetPasport("КОГДА"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		
		// Дата окончания срока паспорт
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("DATEDOCVALIDTO"));
		
		// Код подразделения выдавшего паспорт
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("PassportDivisionCode"));
		str = pasp.GetPasport("КЕМКОД"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		
		// Кем выдан ДУЛ
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("DOCGIVENBY"));
		str = pasp.GetPasport("КЕМ_БК"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  // Дата рождения
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("BDATE"));
      str = CTabl.Text(Fld[idoFCdata_r],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));	
	  
	  // Место рождения
	  char tmp[256];
	  str=CTabl.Text(Fld[idoFCgorod_r],zap); FreeSpaceString(str,3,"");
      tmp=CTabl.Text(Fld[idoFCrajon_r],zap); FreeSpaceString(tmp,3,""); 
      if ( tmp!="" ) str += ","+tmp;
      tmp=CTabl.Text(Fld[idoFCoblast_r],zap); FreeSpaceString(tmp,3,""); 
      if ( tmp!="" ) str += ","+tmp;
      tmp=CTabl.Text(Fld[idoFCstrana_r],zap); FreeSpaceString(tmp,3,""); 
      if ( tmp!="" ) str += ","+tmp;
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("BIRTH_PLACE"));
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));	
	  
	  // Страна рождения
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("BIRTH_PLACE_COUNTRY"));
      str = CTabl.Text(Fld[idoFCstrana_r],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  // Поля для заполнения документов нерезидентов (миграционная карта)
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("DOPDOCTYPE"));
      XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("DOPDOCNUMSER"));
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("DOPDOCNUM"));
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("DOPDOCDATE"));
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("DateDopDocValidTo"));
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("DOPDOCAUTHORITY"));
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("MCNUM"));
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("MCSERIES"));
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("MCBDATE"));
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("MCEDATE"));
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("VISASERIES"));
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("VISANUM"));
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("VISAODATE"));
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("VISAEDATE"));
	  
	  // ИНН
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("INN"));
      str = CTabl.Text(Fld[idoFCinn_fl],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  // TIN
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("TIN"));
	  
	  // СНИЛС
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("SNILS"));
      str = CTabl.Text(Fld[idoStrah_n],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  // EXTRACT_DELIVERY_TYPE
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("EXTRACT_DELIVERY_TYPE"));
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi("ВЫДАВАТЬ НА РУКИ")));
	  
	  // EMAIL
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("EMAIL"));
	  
	  // Кодовое слово
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("CODEWORD"));
      str = CTabl.Text(Fld[idokeyword],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  // Телефон
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("Cellular"));
      str = CTabl.Text(Fld[idoFCphone],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  // СМС информирование
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("USE_SMS_INFORM"));
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi("0")));
	  
	  // Резидент / нерезидент
	  XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("RESIDENT"));
      str = CTabl.Text(Fld[idoFCstatus],zap); FreeSpaceString(str,2,"");
      SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	  
	  // Адрес регистрации
	    var Adr = CreateObject("Adres");
	        Adr.Initial(to_string(CTabl.Text(Fld[idoFCadres],zap))); 
		// Код страны
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OCOUNTRYCODE_"));
		str = Adr.GetAdres("КОДСТР","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// Код региона
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OREGIONCODE_"));
		str = Adr.GetAdres("КОДРЕГ","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str+"000000000")));
		// Признак совпадения адреса регистрации и факта
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OYES_"));
		// Код региона
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OREGION_"));
		str = Adr.GetAdres("КОДРЕГ","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// Район, область
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_ODISTRICT_"));
		str = Adr.GetAdres("РАЙОН","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// Город
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OCITY_"));
		str = Adr.GetAdres("ГОРОД","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// Населенный пункт
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OVILLAGE_"));
		str = Adr.GetAdres("НПУНКТ","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// Улица
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OSTREET_"));
		str = Adr.GetAdres("УЛИЦА","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// Дом
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OHOUSE_"));
		str = Adr.GetAdres("ДОМ","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// Корпус
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OBLOCK_"));
		str = Adr.GetAdres("КОРПУС","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// квартира
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OAPPT_"));
		str = Adr.GetAdres("КВ-РА","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// индекс
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OZIPCODE_"));
		str = Adr.GetAdres("ИНДЕКС","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
	
	// Адрес фактический
	    var AdrF = CreateObject("Adres");
	        AdrF.Initial(to_string(CTabl.Text(Fld[idoFCadres_f],zap))); 
		// Код страны
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OCOUNTRYCODE_FACT_"));
		str = AdrF.GetAdres("КОДСТР","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// Код региона
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OREGIONCODE_FACT_"));
		str = AdrF.GetAdres("КОДРЕГ","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str+"000000000")));
		// Код региона
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OREGION_FACT_"));
		str = AdrF.GetAdres("КОДРЕГ","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// Район, область
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_ODISTRICT_FACT_"));
		str = AdrF.GetAdres("РАЙОН","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// Город
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OCITY_FACT_"));
		str = AdrF.GetAdres("ГОРОД","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// Населенный пункт
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OVILLAGE_FACT_"));
		str = AdrF.GetAdres("НПУНКТ","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// Улица
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OSTREET_FACT_"));
		str = AdrF.GetAdres("УЛИЦА","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// Дом
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OHOUSE_FACT_"));
		str = AdrF.GetAdres("ДОМ","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// Корпус
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OBLOCK_FACT_"));
		str = AdrF.GetAdres("КОРПУС","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// квартира
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OAPPT_FACT_"));
		str = AdrF.GetAdres("КВ-РА","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));
		// индекс
		XMLElem = CreateChildElemXML(XMLDoc,XMLElemOtkr2,OemToAnsi("_OZIPCODE_FACT_"));
		str = AdrF.GetAdres("ИНДЕКС","ПРОСТО"); FreeSpaceString(str,2,"");
		SetValueElemXML(XMLElem,toUTF8(OemToAnsi(str)));	
     }
    
   
    //формируем имя файла
    char NameFile[256];
    var OptionsTR = CreateObject("TransferOptions");
    stccpy(NameFile,OptionsTR.GetNameFile(),256);
    FreeSpaceString(NameFile,3," ");

    str=NameFile;
    mkdirAll(str);//создаем каталог если его нет

    char Path[256];
    Path=str;
    if ( Path[0]=='.' && Path[1]=='.' )
    {
      fullpath(Path,Path,255);
      FreeSpaceString(Path,3,"");
      str=Path;
    }
    if (!SaveFileXMLFine(XMLDoc,str," "))
    {   
      AmbaMessageBox("Невозможно сохранить файл "+NameFile,"ошибка",0, 0);
      return false;
    }
  }
  catch(object err)
  {
    SayError(err);
    return 0;
  }
  catch(...)
  {
    SayUndefinedScriptError();
    return 0;
  }
  return 1;
}

//======================================================
// ПЕЧАТНЫЕ ФОРМЫ
PrintMKBOpen()
{
  CFile=CreateObject("CurPrnFile"); // объект класса для работы с текущим файлом печати
  CFile.SetFlagBrowse(0);               // запрещаем просмотр
  CFile.SetFlag_Print(0);

  CTabl=CreateObject("CurPrnTbl");  // объект класса для работы с текущей таблицей
  int cr=CTabl.Count_Rcr();         // число рабочих записей в таблице   

  var xls=CreateObject("Excel.Application");  // создаем объект Excel.Application, т.е. запускаем Excel, если он установлен конечно
  char Dir[128];                              // строка для текущей директории
  GetCurrentDirectory(128,Dir);               // получаем текущую директорию (это корень каталога ZPL из которого запустили АМБу)
  string nm="mkb_open.xlsx";                        // имя Excel'евского файла
  var WorkDir = Dir + "\\"+NameCommonDir()+"\\";         
  xls.Caption=OemToAnsi("Открытие счетов в МКБ Банк");// заголовок (в 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 ( !FillNumFldOpen(CTabl) ) return false; //определяем необходимые нам номера полей

  // Организация
     char Org[1024];
     GetEnterpriseVar("ИМЯП", Org,160);  // Наименование предприятия или отделения иностранной организации
     FreeSpaceString(Org,3,""); OemToChar(Org,Org);
  // Начало заполнения 
  int ShStr=7; int j=1;
  char str[256], nnn[256];
  double sum;
  try
  {
  // цикл по записям таблицы
  for (int zap=0; zap<cr; zap++)
  {
    // progress bar - чтобы видеть процент выполненной работы до того как появится результат
    if ( CMsg.Msg_Proc(" Подождите немного. Идет подготовка к печати. ",100.*zap/cr)==ESC )
    {
      return 0;
    }
    // Фирма
	str=Org;
    sprintf(nnn,"A%d",ShStr);
    WriteToCell(wsh,nnn,str);  

    // Должность
    str=CTabl.Text(Fld[idoFCdolgnost],zap);
    FreeSpaceString(str,3,""); OemToChar(str,str);
    sprintf(nnn,"B%d",ShStr);
    WriteToCell(wsh,nnn,str);  

    // Дата приема на работу
    str=CTabl.Text(Fld[idoFCdata_rb],zap);
	FreeSpaceString(str,3,""); sprintf(nnn,"C%d",ShStr);
    WriteToCell(wsh,nnn,str);

	// Сумма заработной платы
    sum = atof(CTabl.Text(Fld[idoSummZP],zap));
	sprintf(nnn,"D%d",ShStr); sprintf(str,"%14.2f",sum);
    WriteToCell(wsh,nnn,str);
	
	// Таб. Номер
    str = CTabl.Text(Fld[idoTN],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"E%d",ShStr);
    WriteToCell(wsh,nnn,str);
    
	// Фамилия
    str = CTabl.Text(Fld[idoFCf],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"G%d",ShStr);
    WriteToCell(wsh,nnn,str);
	
	// Имя
    str = CTabl.Text(Fld[idoFCi],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"H%d",ShStr);
    WriteToCell(wsh,nnn,str);
	
	// Отчество
    str = CTabl.Text(Fld[idoFCo],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"I%d",ShStr);
    WriteToCell(wsh,nnn,str);
	
	// Гражданство
    str = CTabl.Text(Fld[idoFCcitizen],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"J%d",ShStr);
    WriteToCell(wsh,nnn,str);
	
	// Паспорт
	   var pasp=CreateObject("Pasport");  //объект для работы с паспортом
	   pasp.Initial(to_string(CTabl.Text(Fld[idoFCpasport],zap)));
	// Тип удостоверения личности
	     str = pasp.GetPasport("КОДДОК");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"K%d",ShStr);
		 WriteToCell(wsh,nnn,str);
	// Серия документа - удостоверения личности
	     str = pasp.GetPasport("СЕРИЯ");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"L%d",ShStr);
		 WriteToCell(wsh,nnn,str);
	// Номер документа - удостоверения личности
	     str = pasp.GetPasport("НОМЕР");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"M%d",ShStr);
		 WriteToCell(wsh,nnn,str);
	// Дата документа - удостоверения личности (dd.mm.yyyy)
	     str = pasp.GetPasport("КОГДА");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"N%d",ShStr);
		 WriteToCell(wsh,nnn,str);		 
	// Код подразделения (выдавший паспорт)
	     str = pasp.GetPasport("КЕМКОД");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"P%d",ShStr);
		 WriteToCell(wsh,nnn,str);
	// Кем выдан документ - удостоверение личности
	     str = pasp.GetPasport("КЕМ_БК");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"Q%d",ShStr);
		 WriteToCell(wsh,nnn,str);	

    // ИНН
    str = CTabl.Text(Fld[idoFCinn_fl],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"X%d",ShStr);
    WriteToCell(wsh,nnn,str);

	// СНИЛС
    str = CTabl.Text(Fld[idoStrah_n],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"Y%d",ShStr);
    WriteToCell(wsh,nnn,str);

	// Страна налогового резидентства
    str = CTabl.Text(Fld[idoFCcitizen],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"Z%d",ShStr);
    WriteToCell(wsh,nnn,str);

	// Дата Рождения (dd.mm.yyyy)
    str = CTabl.Text(Fld[idoFCdata_r],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"AB%d",ShStr);
    WriteToCell(wsh,nnn,str);	
	
	// Страна места рождения
    str = CTabl.Text(Fld[idoFCstrana_r],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"AC%d",ShStr);
    WriteToCell(wsh,nnn,str);
	
	// Место рождения
    str = CTabl.Text(Fld[idoFCgorod_r],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"AD%d",ShStr);
    WriteToCell(wsh,nnn,str);
	
	// Место рождения
    str = CTabl.Text(Fld[idoFCgorod_r],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"AD%d",ShStr);
    WriteToCell(wsh,nnn,str);
	
	// Кодовое слово для карты
    str = CTabl.Text(Fld[idokeyword],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"AH%d",ShStr);
    WriteToCell(wsh,nnn,str);
	
	// Телефон для SMS-информирования
    str = CTabl.Text(Fld[idoFCphone],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"AI%d",ShStr);
    WriteToCell(wsh,nnn,str);
	
	// Признак - резидент ("1" - Да, "0" - Нет )
    str = CTabl.Text(Fld[idoFCstatus],zap);
	FreeSpaceString(str,3,""); OemToChar(str,str);
	sprintf(nnn,"AK%d",ShStr);
    WriteToCell(wsh,nnn,str);

    // Адрес прописки
	  var Adr = CreateObject("Adres");
	  Adr.Initial(to_string(CTabl.Text(Fld[idoFCadres],zap)));
		 // Адрес прописки	
	     str = Adr.GetAdres("ПОЛН_АДРЕС","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"AT%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр Код страны
	     str = Adr.GetAdres("КОДСТР","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"AU%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр Код региона (Москва=77000000000)
	     str = Adr.GetAdres("КОДРЕГ","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"AV%d",ShStr);
		 WriteToCell(wsh,nnn,str+"000000000");
		 // Параметр Регион
	     str = Adr.GetAdres("КОДРЕГ","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"AX%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр Район
	     str = Adr.GetAdres("РАЙОН","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"AY%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр Город
	     str = Adr.GetAdres("ГОРОД","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"AZ%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр Населенный пункт
	     str = Adr.GetAdres("НПУНКТ","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BA%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр Улица
	     str = Adr.GetAdres("УЛИЦА","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BB%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр Дом
	     str = Adr.GetAdres("ДОМ","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BC%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр Корпус
	     str = Adr.GetAdres("КОРПУС","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BD%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр квартира
	     str = Adr.GetAdres("КВ-РА","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BE%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр индекс
	     str = Adr.GetAdres("ИНДЕКС","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BF%d",ShStr);
		 WriteToCell(wsh,nnn,str);
	// Адрес фактический
      var AdrF = CreateObject("Adres");
	  AdrF.Initial(to_string(CTabl.Text(Fld[idoFCadres_f],zap)));
		 // Адрес прописки	
	     str = AdrF.GetAdres("ПОЛН_АДРЕС","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BK%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр Код страны
	     str = AdrF.GetAdres("КОДСТР","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BL%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр Код региона (Москва=77000000000)
	     str = AdrF.GetAdres("КОДРЕГ","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BM%d",ShStr);
		 WriteToCell(wsh,nnn,str+"000000000");
		 // Параметр Регион
	     str = AdrF.GetAdres("КОДРЕГ","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BN%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр Район
	     str = AdrF.GetAdres("РАЙОН","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BO%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр Город
	     str = AdrF.GetAdres("ГОРОД","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BP%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр Населенный пункт
	     str = AdrF.GetAdres("НПУНКТ","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BQ%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр Улица
	     str = AdrF.GetAdres("УЛИЦА","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BR%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр Дом
	     str = AdrF.GetAdres("ДОМ","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BS%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр Корпус
	     str = AdrF.GetAdres("КОРПУС","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BT%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр квартира
	     str = AdrF.GetAdres("КВ-РА","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BU%d",ShStr);
		 WriteToCell(wsh,nnn,str);
		 // Параметр индекс
	     str = AdrF.GetAdres("ИНДЕКС","ПРОСТО");
         FreeSpaceString(str,3,""); OemToChar(str,str);
		 sprintf(nnn,"BV%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();
  
  xls.Visible=true;           // делаем Excel видимым
  }
 catch(object err)
   {
      SayError(err);
   }
   catch(...)
   {
      ;
   }

   return 0;
}

FillNumFldOpen(&CTabl)
//=============================================================================
// Находим поля в таблице
//=============================================================================
{
   Fld[idoOrder]      = CTabl.Find_Name_Fld("Order");    
   Fld[idoTN]         = CTabl.Find_Name_Fld("C_FIO");
   Fld[idoFCf]        = CTabl.Find_Name_Fld("FCf");
   Fld[idoFCi]        = CTabl.Find_Name_Fld("FCi");
   Fld[idoFCo]        = CTabl.Find_Name_Fld("FCo");
   Fld[idoFCdolgnost] = CTabl.Find_Name_Fld("FCdolgnost");
   Fld[idoFCdata_r]   = CTabl.Find_Name_Fld("FCdata_r");
   Fld[idoFCpasport]  = CTabl.Find_Name_Fld("FCpasport");
   Fld[idoFCdata_rb]  = CTabl.Find_Name_Fld("FCdata_rb");
   Fld[idoFCadres]    = CTabl.Find_Name_Fld("FCadres");
   Fld[idoStrah_n]    = CTabl.Find_Name_Fld("FCstrah_n");
   Fld[idoFCgorod_r]  = CTabl.Find_Name_Fld("FCgorod_r");
   Fld[idoFCrajon_r]  = CTabl.Find_Name_Fld("FCrajon_r");
   Fld[idoFCoblast_r] = CTabl.Find_Name_Fld("FCoblast_r");
   Fld[idoFCstrana_r] = CTabl.Find_Name_Fld("FCstrana_r");
   Fld[idoFCphone]    = CTabl.Find_Name_Fld("FCphone");
   Fld[idoFCadres_f]  = CTabl.Find_Name_Fld("FCadres_f");
   Fld[idoFCinn_fl]   = CTabl.Find_Name_Fld("FCinn_fl");
   Fld[idoFCstatus]   = CTabl.Find_Name_Fld("FCstatus");
   Fld[idoSummZP]     = CTabl.Find_Name_Fld("SummZP");
   Fld[idoFCcitizen]  = CTabl.Find_Name_Fld("FCcitizen"); 
   Fld[idokeyword]    = CTabl.Find_Name_Fld("keyword");
   
   for ( int ii=0; ii<oFld; ii++ )
     if ( Fld[ii]==-1 )
     {
        AmbaMessageBox("Нет необходимых полей в таблице!","Ошибка!!!",MB_OK|MB_ICONERROR,0);
        return false;
     }
   return true;
}

FillNumFldSumm(&CTabl)
//=============================================================================
// Находим поля в таблице
//=============================================================================
{
   Fls[idsOrder]      = CTabl.Find_Name_Fld("Order");    
   Fls[idsTN]         = CTabl.Find_Name_Fld("TAB_N");
   Fls[idsFCf]        = CTabl.Find_Name_Fld("FCf");
   Fls[idsFCi]        = CTabl.Find_Name_Fld("FCi");
   Fls[idsFCo]        = CTabl.Find_Name_Fld("FCo");
   Fls[idsSUM_PAY]    = CTabl.Find_Name_Fld("SUM_PAY");
   Fls[idsBankCard]   = CTabl.Find_Name_Fld("FCBankCard");
   Fls[idsIncomeType] = CTabl.Find_Name_Fld("IncomeType");
   Fls[idsPenaltySum] = CTabl.Find_Name_Fld("PenaltySum");
   Fls[idsFCpasport]  = CTabl.Find_Name_Fld("FCpasport");
   Fls[idsFCdata_r]   = CTabl.Find_Name_Fld("FCdata_r");
   Fls[idsnum_reestr] = CTabl.Find_Name_Fld("num_reestr");
   Fls[idsperiod]     = CTabl.Find_Name_Fld("period");
   Fls[idsdate_reest] = CTabl.Find_Name_Fld("date_reest");
   
   
   for ( int ii=0; ii<sFld; ii++ )
     if ( Fls[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;
}

CreateXMLobj()
// Создание XML файла
{   
   UnloadScriptModule("msxml");
   LoadScriptModule("msxml");
   var XMLDoc = CreateXML(toUTF8("version=\"1.0\" encoding=\"UTF-8\""));
   return XMLDoc;
}

toUTF8(st)
{
  string s = "";
  CP1251ToUTF8(TrimN(st),s);
  return to_string(s);
}

ModifDateYYYYMMDD(date)
//на входе дата в виде строки ДД.ММ.ГГГГ(разделитель не важен)
//на выходе дата в формате YYMMDD
{
  FreeSpaceString(date,2,"");
  if (strlen(date)==0) return "";
  
  var d=KDateFromStr(date);
  if (!d.IsValid()) return "";
  
  char rez[256];
  sprintf(rez,"%02d%02d%02d",d.GetYear(), d.GetMonth(),d.GetDay());
  return rez;
}
