// Вывод на печать (в Excel)      
// - печ форма таблицы "Спр об уплаченных алиментах"    на основе kbm_srzp_e
// 
// изменения от 12.08.2017 - по разному печатаются справки:
//   - если суммы принадлежат одному году 
//   - если суммы переходящие

char nnn[90];
int maxLs  = 20;          //  max количество лс получателей
int maxSum = 90;          //  max количество строк с суммами
string ls_alim[maxLs];    //  массив для лс получателей
string fio_alim[maxLs];   //  массив для фио получателей

double ls_sum[maxSum];     //  массив сумм для лс
string ls_mon[maxSum];     //  массив месяцев для лс
int ls_mm[maxSum];         //  массив номеров  месяцев для лс
string ls_mes[maxSum];     //  массив наименов месяцев для лс

string name_m[14];         //  наименов месяцев            // 20170806
int prz_god = 0;           //  признак переходящего года   // 20170809

int count_ls = 0;       //  счетчик кол-ва лс получателей
int ls_n = 1;           //  № получателя алиментов в массиве для печати
int rec_zap = 1;        //  счетчик записей 

int cnt_mon = 0;        //  счетчик кол-ва месяцев

string fio;             //  ФИО плательщика
string fio2;
double sumIt = 0.0;

string dattek;

Dialog(array_param)
{

  ls_alim[1] = array_param[1]; 
  ls_alim[2] = array_param[2]; 
  ls_alim[3] = array_param[3]; 
  ls_alim[4] = array_param[4]; 
  ls_alim[5] = array_param[5]; 
  ls_n = array_param[6]; 
  fio  = array_param[7]; 
  fio2 = array_param[8]; 

  //CreaMas1();        //  перенесен в Form

  name_m[1]  = "Январь";
  name_m[2]  = "Февраль";
  name_m[3]  = "Март";
  name_m[4]  = "Апрель";
  name_m[5]  = "Май";
  name_m[6]  = "Июнь";
  name_m[7]  = "Июль";
  name_m[8]  = "Август";
  name_m[9]  = "Сентябрь";
  name_m[10] = "Октябрь";
  name_m[11] = "Ноябрь";
  name_m[12] = "Декабрь";

  for( int i=1; i <= 12; i++) ls_sum[i] = 0.00;


  if (ls_n > 0) CreaMas3();
  if (ls_n > 0) PrintIt();    

}

PrintIt()
{
  var File;                             //  привет
  File = CreateObject("CurPrnFile");    //        от 
  File.SetFlagBrowse(0);                //          Вита
  File.SetFlag_Print(0);                //              лия


  char Dir[128];                              // строка для текущей директории
  GetCurrentDirectory(128,Dir);               // получаем текущую директорию (это корень каталога ZPL из которого запустили АМБу)
  string nm="kbm_alim_e.xlt";                 // имя Excel'евского файла
  var WorkDir = Dir + "\\TAB_LS\\";      

  tPrepereOfficeForWork(); // определяем работать на Excel или на Calc (определяем какой из офисов (MS Office или OpenOffice) установлен и какой предпочтительнее)
  tCreateXlsObjects(WorkDir+nm,"Алим"); // создание основных объектов

  int n_wsh = 1;
  tGetWshByIndex(1);   // получаем ссылку на лист (worksheet)
  tWshSelect();

  var CMsg = 0;        // Процент выполненной работы
  int bTime = false;   // false-показывать процент,
                       // true-показывать оставшееся время
  CMsg=CreateObject("ProgressBar");
  CMsg.Initial(0,100,1);
  CMsg.SetShowTime(static_cast_to_int(bTime));



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

  try
  {
   int monIt  = 0;
   rec_zap = 0;
   
   
   if( (cnt_mon < 12) && (prz_god == 0) )  // если суммы не переходящие и колич месяцев < 12
   {
     string l_m = ls_mon[1];
     // переписываем массив - индексы в соотв с номерами месяцев
     for (int zap=cnt_mon; zap >= 1; zap--)
     {
      int n_m = ls_mm[zap];

      ls_mm[n_m]  = n_m;
      ls_mes[n_m] = name_m[n_m];
      ls_sum[n_m] = ls_sum[zap];
      ls_mon[n_m] = l_m;

      ls_sum[zap] = 0.00;
     }
   
   
     for ( int zap=1; zap <= 12; zap++ )
     {
      if(ls_sum[zap] == 0.00)
      {
       ls_mm[zap] = zap;
       ls_mes[zap] = name_m[zap];
       ls_mon[zap] = l_m;
      }
     }
     cnt_mon = 12;
   }
   

   // цикл по записям массива 
   for (int zap=1; zap <= cnt_mon; zap++)
   {
     string month = ls_mon[zap];                    
     double sum   = ls_sum[zap];                        
     string mes   = ls_mes[zap];                    
     int mon      = ls_mm[zap];                       

     string god = substr(month,3,4);
     god =  god + " г.";

      rec_zap++;
      PrnStr(mes, mon, god, sum, rec_zap);     //  печатаем очередную строку
    
   }


   PrnIt(sumIt, fio, fio2);

   tWshCellSelect(1,1);   // чтобы не было выделенной строки после всех манипуляций с копированием  выделим отдельную ячейку.  
  }
  catch(object err)
  {
     SayError(err);
  }
  catch(...)
  {
     ;
  }
  tEndXlsWork(1); // делаем форму видимой

  return 0;
}

PrnStr(ms, mn, gd, sm, zp)
{
  if(zp < 7 )   
  {
   sprintf(nnn,"A%d",zp+11);  tWriteStringToCell(nnn,OemToAnsi(ms));  //tBordersCell(nnn,1,1,1,1,1);
   sprintf(nnn,"B%d",zp+11);  tWriteStringToCell(nnn,OemToAnsi(gd));  //tBordersCell(nnn,1,1,1,1,1);
   sprintf(nnn,"C%d",zp+11);  tWriteStringToCell(nnn,OemToAnsi(sm));  //tBordersCell(nnn,1,1,1,1,1);
  }
  else
  {
   sprintf(nnn,"E%d",zp+5);  tWriteStringToCell(nnn,OemToAnsi(ms));  //tBordersCell(nnn,1,1,1,1,1);
   sprintf(nnn,"F%d",zp+5);  tWriteStringToCell(nnn,OemToAnsi(gd));  //tBordersCell(nnn,1,1,1,1,1);
   sprintf(nnn,"G%d",zp+5);  tWriteStringToCell(nnn,OemToAnsi(sm));  //tBordersCell(nnn,1,1,1,1,1);
  }

  return 0;
}


PrnIt(si, fi, fi2)
{
   char dat[90]; sprintf(dat,"%s",to_string(dattek));
   R_DATA_PROPIS(dat,dat,20,0);  dat += "г.";
   sprintf(nnn,"A%d",2);  tWriteStringToCell(nnn,OemToAnsi(dat));  //tBordersCell(nnn,1,1,1,1,1);

   char f1[90];
   sprintf(f1,"Дана  гр.  %s",to_string(fi));
   sprintf(nnn,"A%d",7);  tWriteStringToCell(nnn,OemToAnsi(f1));  //tBordersCell(nnn,1,1,1,1,1);

   sprintf(nnn,"E%d",11);  tWriteStringToCell(nnn,OemToAnsi(fi2));  //tBordersCell(nnn,1,1,1,1,1);


   int SumRub = 0;   SumRub = atoi(si);  
   int SumKop  = (si - SumRub) * 100;
   sprintf(nnn,"G%d",19);  tWriteStringToCell(nnn,OemToAnsi(si));  //tBordersCell(nnn,1,1,1,1,1);

   double sm1 = si - SumRub;
   double sm2 = sm1 * 100;   round2(sm2,0,1,sm2);
  // sprintf(nnn,"G%d",20);  tWriteStringToCell(nnn,OemToAnsi(sm2));  //tBordersCell(nnn,1,1,1,1,1);
  // sprintf(nnn,"H%d",20);  tWriteStringToCell(nnn,OemToAnsi(sm2));  //tBordersCell(nnn,1,1,1,1,1);

   char Buf[250];
   propisi(SumRub,1,Buf);
   sprintf(Buf,"( %s руб.  %s коп.)",to_string(Buf),to_string(sm2));
   sprintf(nnn,"A%d",21);  tWriteStringToCell(nnn,OemToAnsi(Buf));  //tBordersCell(nnn,1,1,1,1,1);
}


PrnBot(aa1,aa2)
{
 return 0;
}


PrnTitle(aa1,aa2)
{
 return 0;
}


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


  fio   = CTabl.TextS("FIO",0);

   // цикл по записям таблицы
   for (int zap=0; zap<cr; zap++)
   {
     string ls_fio   = CTabl.TextS("Requisite4",zap);
     string ls    = CTabl.TextS("ls",zap);  
     string month = CTabl.TextS("Month",zap);
     double sum   = atof(CTabl.TextS("Sum",zap));    

     string mes   = CTabl.TextS("Mes",zap);
     int mon      = atoi(CTabl.TextS("Mon",zap));  


     //_______________________________________ блок записи ls и ls_fio в массив
     int record = 1;      // флаг для записи лс в массив
     for (int cls=0; cls<maxLs;  cls++)    //  цикл по массиву лс - проверяем наличие этог лс в массиве
     {
      if (ls == ls_alim[cls]) record = 0;  //  если лс в массиве есть то записывать снова не надо
     }

     if (record == 1)
     {
      count_ls++;
      ls_alim[count_ls]  = ls;
      fio_alim[count_ls] = ls_fio;
     }
   }
  //    if (ESC==Panel_Zapros(" Получатели алиментов ","",
  //                      " Получатель_1  ",fio_alim[1], 20,
  //                      " Получатель_2  ",fio_alim[2], 20,
  //                      " Получатель_3  ",fio_alim[3], 20,
  //                      " Получатель_4  ",fio_alim[4], 20,
  //                      " Получатель_5  ",fio_alim[5], 20)
  //                                                            ) return ESC;

}

CreaMas3()
{

 //AmbaMessageBox("CreaMas3 ","CreaMas3()",0, 0);

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

  dattek = CTabl.TextS("dattek",0);

  // если суммы переходящие, устанавл признак
  if( atoi(substr(CTabl.TextS("Month",0),3,4)) != atoi(substr(CTabl.TextS("Month",cr-1),3,4)) ) prz_god = 1;
  if( prz_god == 1 ) AmbaMessageBox("Обнаружены переходящие суммы","Предупрежление",0, 0);


  // цикл по записям таблицы
  for (int zap=0; zap<cr; zap++)
  {
     string ls_fio = CTabl.TextS("Requisite4",zap);
     string ls     = CTabl.TextS("ls",zap);  
     string month  = CTabl.TextS("Month",zap);
     double sum    = atof(CTabl.TextS("Sum",zap));    

     string mes    = CTabl.TextS("Mes",zap);
     int mon       = atoi(CTabl.TextS("Mon",zap));  


     int new_rec = 1;   // новая строка в таблице - новая запись в массиве

     //if((ls == ls_alim[ls_n]) && (sum != 0))    //  если ls совпад с выбранным и  sum не 0
     if((ls == ls_alim[ls_n]) )                   //  если ls совпад с выбранным 
     {
       sumIt += sum;

       for (int cnt_ls=0; cnt_ls<maxSum;  cnt_ls++)  {
         if( month == ls_mon[cnt_ls] )                  // если в массиве уже есть такой месяц -> month 
          {
             //   if (ESC==Panel_Zapros(" Проверка  cnt_mon","",
             //                "  zap (№ зап в таблице) == : ",zap, 15,  
             //                "  cnt_ls (счетчик_цикла) == : ",cnt_ls, 15,  
             //                "  cnt_mon (счетчик_мес) == : ",cnt_mon, 15,  
             //                "  month == : ",month, 15,  
             //                "  ls_mon[cnt_ls] == : ",ls_mon[cnt_ls], 15)
             //                                                   ) return ESC;
            ls_sum[cnt_ls] += sum;
            new_rec = 0;
          }
       }

       if ( new_rec == 1 )
        {
         cnt_mon++;         
         ls_mon[cnt_mon] = month;
         ls_sum[cnt_mon] = sum;
         ls_mm[cnt_mon]  = mon;
         ls_mes[cnt_mon] = mes;
        }

     }
  }
  
}






