//  Формирование файла для НовикомБанк.       На основе: novik_sbr2.s ->  На основе: sberbank2.s
//  Вызов из  "Функция для передачи в файл"
//            user\novik_202112,TransfSB_ved,0

int  g_fras = 1    ; // Расширение файла 0-не запрашивать / 1 -запрашивать.

char FOSB[6]       ; // Номер ФОСБ
char OSB[5]        ; // Государственный номер ОСБ
char ndogovor[5]   ; // Номер договора
char kod_vida[4]   ; // Код вида вклада
char kod_podv[3]   ; // Код подвида
char valuta[4]     ; // Код валюты
char kod_goroda[11]; // код города

//====================================================================
// Функция вводит некоторые данные для передачи на карточки, которые
// задаются один раз для предприятия. Функция сохраняет настройки в
// файле. Если файл существует, то она считывает настройки из этого
// файла и выводит их. Иначе делает настройки по умолчанию.


InputGlobalData()
{
   SetGlobalDefault();

   // Ищем файл ..\\SCRIPT\\BANK\\MBnastr.dat   // Если файл есть, берем настройки оттуда.   // Если файла нет, то запрашиваем.
   char curdir[200];
   string TitleForm="Введите данные";
   GetCurrentDirectory(200,curdir);
   int k=strlen(curdir);
   while (k>0 && curdir[k-1]!='\\') k--;
   curdir[k]='\0';
   string WorkFile=curdir+"SCRIPT\\BANK\\MBnastr.dat";      //   CreateFile(WorkFile,GENERIC_READ, NULL, NULL, OPEN_EXISTING, 0, 0);

   // Сделано некрасиво, чтобы не надо было открывать/закрывать файл для чтения
   // В функцию LoadGlobalFromFile передается указатель, а в SaveGlobalData - имя файла
   //  (поэтому и названия функций не похожие)
   int file = CreateFile(WorkFile,2147483648  , 0   , 0   , 3            , 0, 0);

   if (file!=-1)   {
      // Если размер файла не равен 30, это не наш файл
      int FileSize=SetFilePointer(file,0,0,2);
      SetFilePointer(file,0,0,0);
      if (FileSize==31)      {
         LoadGlobalFromFile(file); // Загружаем данные, если есть откуда
         TitleForm="Подтвердите данные:";
      }
      CloseHandle(file);
   }

   if (InputPGlobalData(TitleForm)==ESC)
      return ESC;
   SaveGlobalData(WorkFile);
   return 0;
}


//====================================================================
// Задать значения по умолчанию
SetGlobalDefault()
{
   strcpy(FOSB,"01020");      // Номер ФОСБ
   strcpy(OSB, "1234");      // Государственный номер ОСБ
   strcpy(ndogovor,"0999");  // Номер договора
   strcpy(kod_vida,"053") ;  // Код вида вклада
   strcpy(kod_podv,"01")  ;  // Код подвида
   strcpy(valuta,"810")   ;  // Код валюты
   strcpy(kod_goroda,"3432");// Код города
   return 0;
}

//====================================================================
// Ввод и данных
InputPGlobalData(caption)
{
   if (Panel_Zapros("", caption,
                    "Номер ФОСБ:",FOSB,5,
                    "Номер ОСБ:", OSB, 4,
                    "Номер договора:",ndogovor,4,
                    "Код вида вклада:",kod_vida,3,
                    "Код подвида вклада:",kod_podv,2,
                    "Код валюты:",valuta,3,
                    "Телефонный код города:",kod_goroda,10
                   )==ESC)
      return ESC;
   return 1;
}

//====================================================================
// Сохраняет глобальные данные. Принимает имя файла.
SaveGlobalData(WorkFile)
{
   int file;
   if ((file = CreateFile(WorkFile, 1073741824, 2, 0, 2, 128, 0)) == -1)
   {
       AmbaMessageBox("Не могу открыть файл "+WorkFile+" для записи.","Ошибка",1,0);
       return ESC;
   }
   int len;
   WriteFile(file,FOSB,    5,len,0);
   WriteFile(file,OSB,     4,len,0);
   WriteFile(file,ndogovor,4,len,0);
   WriteFile(file,kod_vida,3,len,0);
   WriteFile(file,kod_podv,2,len,0);
   WriteFile(file,valuta,  3,len,0);
   WriteFile(file,kod_goroda,10,len,0);
   CloseHandle(file);
   return 1;
}

//====================================================================
// Загрузка данных. Принимает дескриптор файла.
LoadGlobalFromFile(file)
{
   int len;
   ReadFile(file,FOSB,       5,len,0); FOSB[5]       ='\0';
   ReadFile(file,OSB,        4,len,0); OSB[4]        ='\0';
   ReadFile(file,ndogovor,   4,len,0); ndogovor[4]   ='\0';
   ReadFile(file,kod_vida,   3,len,0); kod_vida[3]   ='\0';
   ReadFile(file,kod_podv,   2,len,0); kod_podv[2]   ='\0';
   ReadFile(file,valuta,     3,len,0); valuta[3]     ='\0';
   ReadFile(file,kod_goroda,10,len,0); kod_goroda[10]='\0';
   return 0;
}



//====================================================================
// функция передачи сумм в Сбербанк
TransfSB_ved( AdrCTabl,     // адрес передаваемой таблицы
              AdrCListTabl, // адрес списка таблиц
              RcrInList     // номер записи в списке таблиц
             )
{
   // Ввод глобальных данных (которые у всех одинаковы и касаются   // больше предприятия)
//   if (InputGlobalData()==ESC)
//      return 0;

   var CTabl=CreateObject("CurPrnTbl");
   CTabl.Initial(AdrCTabl);
   int nzap = CTabl.Count_Rcr();

   //-----------------------------------------
   // Формируем имя файла.
   string filename,filename1,filename2;
   char temp[200];
   int len=0;
   char ttemp[200];
   string num="1";
   strcpy(temp,"C:\\Banki\\");
   if (g_fras==1)
   {
      //GetDateTime(ttemp,200);      //ttemp[0] = ttemp[6]; ttemp[1] = ttemp[7]; ttemp[2] = '\0';

      sprintf(ttemp,"txt");  FreeSpaceString(ttemp,3,"");
      panel_zapros("","Запрос пути.",
                   "Введите путь для передачи:",temp ,30,
                   "Порядковый номер реестра:",num ,2,
                   "Введите расширение:"       ,ttemp,3 
                  );
      FreeSpaceString(num,3,"");
      filename = temp+OSB+ndogovor;          //filename1=filename+"."+ttemp;    //filename1=filename+".s"+ttemp;

      char NameStr[200];    //char NameStr[10];      //sprintf(NameStr,"v%c%c%c%c%c%ca.",datatek[8],datatek[9],datatek[3],datatek[4],datatek[0],datatek[1]);  // FreeSpaceString(NameStr,3,"");

      sprintf(NameStr,"v%c%c%c%c%c%c",datatek[8],datatek[9],datatek[3],datatek[4],datatek[0],datatek[1]);
      filename1=temp+NameStr+"_"+num+"."+ttemp;    //filename1=temp+NameStr+ttemp;
      filename2=filename+".k"+ttemp;
   }
   else
   {
      //   zaprosputi("Введите путь для передачи:",temp,len,0);
      panel_zapros("","Запрос пути.","Введите путь для передачи:",temp,30);
      filename = temp+OSB+ndogovor;    
      GetDateTime(temp,200);
      temp[0] = temp[6]; temp[1] = temp[7]; temp[2] = '\0';
      filename1=filename+"."+temp;     //filename1=filename+".s"+temp;
      filename2=filename+".k"+temp;   
   }

   //-----------------------------------------
   // Пробуем открыть файлы           //if ((srm= CreateFile(name     ,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL)) == INVALID_HANDLE_VALUE)

   int f1, f2;
   if ((f1 = CreateFile(filename1, 1073741824  ,2               ,0   ,2            ,128                  ,0   )) == -1)
   {
      AmbaMessageBox("Не могу открыть файл "+filename1+" для записи.","Ошибка",1,0);
      return ESC;
   }
   //-----------------------------------!!    //WriteFile(hf, buffer, strlen(buffer), len, 0);

   int i=0; double isum=0;
   for (i=0; i<nzap; i++)
   {
      // Порядковый номер записи   и код организации
      sprintf(temp,"%d^467^",i+1);         WriteFile(f1,temp,strlen(temp),len,0);


      // Номер банковского счета
      strcpy(temp,CTabl.TextS("P002",i));    FreeSpaceString(temp,3,"");
      //Text_Text(temp,temp,25);              //WriteFile(f1,temp,25,len,0);
      sprintf(temp,"%s^",temp);              WriteFile(f1,temp,strlen(temp),len,0);

      
      // Фамилия сотрудника
      strcpy(temp,CTabl.TextS("NAM3",i));   FreeSpaceString(temp,3,"");
      sprintf(temp,"%s^",OemToAnsi(temp));             WriteFile(f1,temp,strlen(temp),len,0);

      // имя
      strcpy(temp,CTabl.TextS("NAM1",i));   FreeSpaceString(temp,3,"");
      sprintf(temp,"%s^",OemToAnsi(temp));             WriteFile(f1,temp,strlen(temp),len,0);
      
      // Отчество
      strcpy(temp,CTabl.TextS("NAM2",i));   FreeSpaceString(temp,3,"");
      sprintf(temp,"%s^",OemToAnsi(temp));             WriteFile(f1,temp,strlen(temp),len,0);
      
            
      // Сумма пополнения
      strcpy(temp,CTabl.TextS("ITRA",i));
      double sum = atof(temp);
      Double_Text(temp,sum,2,15);           FreeSpaceString(temp,3,"");
      isum += sum;    // Подсчитываем итоговую сумму
      //sprintf(temp,"%s\r\n", temp);        WriteFile(f1,temp,strlen(temp),len,0);    
      sprintf(temp,"%s^", temp);        WriteFile(f1,temp,strlen(temp),len,0);         


      // Код вида дохода      IncomeType
      strcpy(temp,CTabl.TextS("IncomeType",i));   FreeSpaceString(temp,3,"");
      sprintf(temp,"%s;",temp);             WriteFile(f1,temp,strlen(temp),len,0);

      // Сумма взыскан по исп листу  PenaltySum    
      //  strcpy(temp,CTabl.TextS("PenaltySum",i));   FreeSpaceString(temp,3,"");
      //  sprintf(temp,"%s",temp);             WriteFile(f1,temp,strlen(temp),len,0);

      char pri[99];  double p_s = atof(CTabl.TextS("PenaltySum",i)); 
      string psum = CTabl.TextS("PenaltySum",i);
      char ps[99];  sprintf(ps,"%.90s",to_string(psum));
        var PSumParam = CreateObject("ParamFuncRW");
        PSumParam.IInitial(to_string(ps),".",3);
        char rub[99];   sprintf(rub,"%s", to_string(PSumParam.Get(0))); FreeSpaceString(rub,3,"");
        char kop[99];   sprintf(kop,"%s", to_string(PSumParam.Get(1))); FreeSpaceString(kop,3,"");

      if( p_s > 0 )     
       {
        sprintf(pri,"%s-%s",to_string(rub),to_string(kop));     
        WriteFile(f1,pri,strlen(pri),len,0);  
       }


      sprintf(temp,"\r\n");        WriteFile(f1,temp,strlen(temp),len,0);
      
         
   }
   //char itogo[90]; sprintf(itogo,"%s",to_string(isum));      OemToAnsi(it)
   double itogo=atof(isum);
   //sprintf(temp,"ИТОГО ЗАЧИСЛЕНИЙ: %d  СУММА: %.2f",nzap,itogo);
   //WriteFile(f1,temp,strlen(temp),len,0);
   
   char it1[90];  sprintf(it1,"ИТОГО ЗАЧИСЛЕНИЙ: ");
   char it2[90];  sprintf(it2,"СУММА: ");
   sprintf(temp,"%s %d  %s %.2f",to_string(OemToAnsi(it1)),nzap,to_string(OemToAnsi(it2)),itogo);
   //sprintf(temp,"%s %d  %s %.2f",OemToAnsi(it1),nzap,OemToAnsi(it2),itogo);

   WriteFile(f1,temp,strlen(temp),len,0);


   CloseHandle(f1);
   //CloseHandle(f2);
   //-----------------------------------------

   return 0;
}   

