var CFile;      // объект класса для работы с текущим файлом печати
var CTabl;      // объект класса для работы с текущей таблицей
unsigned long FileSize; // размер созданного файла
string NaznPlat="Зарплата";//назначение платежа

int idxAcc    =  0, // номер счета
    idxF      =  1, // Фамилия
    idxI      =  2, // Имя
    idxO      =  3, // Отчество
    idxSum    =  4, // Сумма
    idxDr     =  5, // Дата рождения
    AllIdx    =  6;
int fld[AllIdx];

TransfUF_ved( AdrCTabl,     // адрес передаваемой таблицы
              AdrCListTabl, // адрес списка таблиц
              RcrInList      // номер записи в списке таблиц
             )
{
   CTabl=CreateObject("CurPrnTbl");
   CTabl.Initial(AdrCTabl);
   // определяем необходимые нам номера полей
   if ( !FillNumFld() ) return false;

   //CTabl.Sort_Field(fld[idxAcc]); // сортировка по таб.номеру 

   char s[256],d[256];
   s=CTabl.TextS("NumVed",0);
   d=CTabl.TextS("DataVed",0);
   if (ESC==Panel_Zapros(" Введите дополнительные данные ","",
                    "  Номер ведомости",s, 20,
                    "  Дата ведомости",d,10,
                    "  Назначение платежа",NaznPlat,25)
      ) return ESC;
   CTabl.STextS("NumVed",0, static_cast_to_string(s));
   CTabl.STextS("DataVed",0, static_cast_to_string(d));
   CTabl.STextS("NaznPlat",0, static_cast_to_string(NaznPlat));
   CTabl.Rewrite();

   var DateZ=Createobject("KDate");
   DateZ.SetDate(static_cast_to_string(datatek));

   // заводим переменную, которая будет показывать процент выполнения (ProgressBar)
   var CMsg  = CreateObject("ProgressBar");
   CMsg.Initial(0,100,5);
   CMsg.SetShowTime(static_cast_to_int(0));

   char Str1[512];
   // создадим временный файл в текущей директории
   char TmpFileName[200];
   sprintf(TmpFileName,"SkbVed.tmp");
   DeleteFile(TmpFileName);
   int hf;
   if ((hf = CreateFile(TmpFileName,1073741824,1 ,0 ,1 ,128 ,0 )) == -1)
   {
      AmbaMessageBox("Невозможно создать файл SkbVed.tmp.","ошибка",0, 0);
      return false;
   }

   char str[256];

   //формируем шапку файла
   Str1 = "Загрузка зарплаты\r\n";
   unsigned long dwBytes;
   WriteFile(hf,Str1,strlen(Str1),dwBytes,0);

   if (NaznPlat=="Зарплата")
   {
     GetEnterpriseVar("РСЧ",str,200); 
     FreeSpaceString(str,3,""); 
   }
   else               
   {
      str= "счет не определен...";
   }
   sprintf(Str1,"Номер счета:%s;\r\n",str);
   WriteFile(hf,Str1,strlen(Str1),dwBytes,0); 

   GetEnterpriseVar("ИМЯП",str,200);   
   FreeSpaceString(str,3,""); 
   sprintf(Str1,"Название организации:%s\r\n",str);
   WriteFile(hf,Str1,strlen(Str1),dwBytes,0);
  
   sprintf(Str1,"Назначение платежа:%s;\r\n",NaznPlat);  
   WriteFile(hf,Str1,strlen(Str1),dwBytes,0);

   //подсчитываем итог
   int cntRcr=CTabl.Count_Rcr();  // число рабочих зaписей в таблице   
   double sum_it  =  0.0; // итоговая сумма в файле
   for (int Rcr=0; Rcr<cntRcr; ++Rcr )
   {
     if ( CTabl.Flag_Action_1(Rcr) )
     sum_it=sum_it+atof(CTabl.Text(fld[idxSum],Rcr)); 
   }  
   sprintf(Str1,"Общая сумма:%.2f;\r\n\r\n",sum_it);  
   WriteFile(hf,Str1,strlen(Str1),dwBytes,0);

   sprintf(Str1,"ФИО;Номер счета;Сумма;Дата рождения;Номер полиса\r\n------------\r\n");  
   WriteFile(hf,Str1,strlen(Str1),dwBytes,0);

   for (int Rcr=0; Rcr<cntRcr; ++Rcr )
   {
     if ( CTabl.Flag_Action_1(Rcr) ) WriteOneLS(hf, Rcr);
     if ( CMsg.Msg_Proc(" Подождите немного. Идет формирование файла.",100.*(Rcr+1)/cntRcr)==ESC )
           return false;
   }  

   // определяем размер файла и заканчиваем работу с ним
   FileSize=SetFilePointer(hf,0,0,1);
   CloseHandle(hf);

   // переписываем временный файл в файл заданный в панели запросов
   SaveTmpFile(TmpFileName);
   return true;
}
    
WriteOneLS( &hf, &Rcr )
//=============================================================================
// Запись в файл информации по одному ЛС
//=============================================================================

{
   char Str[512], nnn[256];
   unsigned long dwBytes;

   string Value[AllIdx];

   for (int idx=0; idx<AllIdx; ++idx)
   {
      nnn = CTabl.Text(fld[idx],Rcr);
      FreeSpaceString(nnn,3,""); 
      Value[idx]= nnn;
   }
   sprintf(Str,"%s %s %s;%s;%.2f;%s\r\n",Value[idxF],Value[idxI],Value[idxO],Value[idxAcc],atof(Value[idxSum]),Value[idxDr]);
   WriteFile(hf,Str,strlen(Str),dwBytes,0);
}




FillNumFld()
//=============================================================================
// Находим поля в таблице
//=============================================================================
{
   fld[idxF]  = CTabl.Find_Name_Fld("FCf"),     
   fld[idxI]  = CTabl.Find_Name_Fld("FCi"),        
   fld[idxO]  = CTabl.Find_Name_Fld("FCo"),       
   fld[idxAcc]  = CTabl.Find_Name_Fld("Account"), 
   fld[idxSum]  = CTabl.Find_Name_Fld("Summa");
   fld[idxDr]   = CTabl.Find_Name_Fld("FCdata_r");
   for ( int ii=0; ii<AllIdx; ii++ )
      if ( fld[ii]==-1 )
      {
         AmbaMessageBox("Нет необходимых полей в таблице!","Ошибка!!!",MB_OK|MB_ICONERROR,0);
         return false;
      }
   return true;
}

MakeNameUFVed ( AdrCTabl,     // адрес передаваемой таблицы    
                 AdrCListTabl, // адрес списка таблиц           
                 RcrInList      // номер записи в списке таблиц 
               )                                                
{
   var OptionsT = CreateObject("TransferOptions");
   char DatTek[11];
   R_SYS_DATA("6",DatTek,10,0);
   DatTek[2]=DatTek[3];
   DatTek[3]=DatTek[4];
   DatTek[4]=DatTek[6];
   DatTek[5]=DatTek[7];
   DatTek[6]=DatTek[8];
   DatTek[7]=DatTek[9];
   DatTek[8]=0;
   char Path[256];
   Path = OptionsT.GetNameFile();
   FreeSpaceString(Path,2," ");
   char drive[80],dir[256],fname[256],ext[256];
   splitpath(Path,drive,dir,fname,ext);
   char NameFile[512];
   makepath(NameFile,drive,dir,DatTek,"txt");
   OptionsT.SetNameFile(static_cast_to_string(NameFile));
}                  
