// модуль предназначен для приема информации из таблицы "Контроль СЗВ-м"    выделенной в списке таблиц
//   в таблицу "СЗВ-М" для сверки Таб№ в обеих таблицах
//        
//   Вызывается по Alt-F10.  Вызов из "Ф-ция приема из файла" :  user\ctrl_SZVm2,Dialog,0 
//   
//   //на основе sta_705
char nt1[4], nt2[4], nt3[4], nt4[4], nt5[4], nt6[4];


   var CTabl   = CreateObject("CurPrnTbl");
   var SpTabl  = CreateObject("CurPrnTbl");     // таблицы из списка

   int CountTabl = 0;
   int NumZap = 0;

   int MaxSZVM = 99999;
   int SZVM_tn[MaxSZVM];     // массив для данных из табл СЗВ_М  
   string RSV_tn[MaxSZVM];      // массив для данных из табл  RSV

   int Nmes = 0;        // № проверяемого месяца (в квартале)
   int KolZap=0;

Dialog( AdrCTabl,     // адрес передаваемой таблицы
       AdrCListTabl, // адрес списка таблиц
       RcrInList      // номер записи в списке таблиц
      )
{
   // подготавливаем предварительно массивы
   for ( int LRcr=0; LRcr<MaxSZVM; LRcr++ )
    {
     SZVM_tn[LRcr]=0;
     RSV_tn[LRcr]="";
    }


   CTabl.Initial(AdrCTabl);    // текущая таблица
   //таблицу не чистим, т.к. в ней инфо для сравнения          CTabl.Clear(); // очистка таблицы



   var CListTabl = CreateObject("CurPrnTbl");   // список таблиц
   CListTabl.Initial(AdrCListTabl);

   for ( int LRcr=0; LRcr<CListTabl.Count_Rcr(); LRcr++ )
   {
      if( CListTabl.Check_Empty_Rcr(LRcr) || !CListTabl.Flag_Action_0(LRcr) ) continue;

      long newt = CListTabl.GetTableFromList(LRcr);
      if ( !newt ) continue;

      SpTabl.Initial(newt);

      CountTabl = CountTabl + 1;
                                    
      if (ESC==Panel_Zapros(" Прием информации из таблиц ","",
                        "  Таблица_N: ",CountTabl, 3)
                                                              ) return ESC;

      ReadTbl();  
   }



   Nmes = atoi(CTabl.TextS("Nmes",0));    // № проверяемого месяца (в квартале)
   KolZap=0;

   for ( int RcrSZVM=0; RcrSZVM<CTabl.Count_Rcr(); ++RcrSZVM )        //  просматр таблицу  SZVM
    {                                                                   
     int TN_szvm = atoi(CTabl.TextS("C_FIO",RcrSZVM));                 //  заполняем массив SZVM_tn[]  данными из табл "СЗВ-М"  
     SZVM_tn[TN_szvm] = RcrSZVM+1;                                      //  где  индекс=ТН  значение=Order_в_табл
     KolZap++;

       
     char citi[9];  sprintf(citi,"%s",to_string(RSV_tn[TN_szvm]));   FreeSpaceString(citi,3,"");
     CTabl.STextS("CITIZEN",RcrSZVM, to_string(citi));

     string st1="";
     if(Nmes == 1)  st1=substr(citi,0,1);
     if(Nmes == 2)  st1=substr(citi,1,1);
     if(Nmes == 3)  st1=substr(citi,2,1);

     CTabl.STextS("RSV",RcrSZVM, to_string(st1));
     
                 
    }

   if (ESC==Panel_Zapros(" Формиров массива  SZVM_tn[tn] закончено","",
                        "  всего записей: ",KolZap, 5)
                                                              ) return ESC;


   // сверка массивов  RSV_tn и SZVM_tn
   int prz_0=0;
   char SZVM_null[500];
   for ( int LRcr=0; LRcr<MaxSZVM; LRcr++ )
    {
     char RSVstg[9];  sprintf(RSVstg,"%s",to_string(RSV_tn[LRcr]));   FreeSpaceString(RSVstg,3,"");
     string st2="";
     if(Nmes == 1)  st2=substr(RSVstg,0,1);
     if(Nmes == 2)  st2=substr(RSVstg,1,1);
     if(Nmes == 3)  st2=substr(RSVstg,2,1);


     //if ( (strlen(st2) > 0) && (SZVM_tn[LRcr] == 0) )
     if ( (atoi(st2) > 0) && (SZVM_tn[LRcr] == 0) )
      {
       sprintf(SZVM_null,"%s;_%i",to_string(SZVM_null),LRcr);   FreeSpaceString(SZVM_null,3,"");
       prz_0 = 1;
      }     
    }

  string mess = to_string(SZVM_null);
  if( prz_0 > 0 )
   {
    AmbaMessageBox("ТН, отсутствующие в СЗВМ: "+mess,"Расхождения",0, 0);
   }




  return 1;
}




ReadTbl()
{
           // Если у нас получилась всего одна строка да и та пустая   (т.е. в файле нет информации), то выходим
           // if ( SpTabl.Count_Rcr()<2 &&  SpTabl.Check_Empty_Rcr(0)==-1 ) return ESC;

   KolZap=0;
     
     // Начинаем обработку файла построчно
     for ( int RcrTbl=0; RcrTbl<SpTabl.Count_Rcr(); ++RcrTbl )
      {
       int NewTN = atoi(SpTabl.TextS("C_FIO",RcrTbl));

       int StgON1  = atoi(SpTabl.TextS("StgON1",RcrTbl));                            
       int StgON2  = atoi(SpTabl.TextS("StgON2",RcrTbl));
       int StgON3  = atoi(SpTabl.TextS("StgON3",RcrTbl));
                                                            //int StgRSV = (StgON1*100)+(StgON2*10)+StgON3 ;
       char StgRSV[9];
      if((StgON1==1) || (StgON2==1) || (StgON3==1) )
       {
        sprintf(StgRSV,"%i%i%i",StgON1,StgON2,StgON3);  FreeSpaceString(StgRSV,3,"");

        RSV_tn[NewTN]=StgRSV;
       }

   //if (ESC==Panel_Zapros(" Формиров массива  RSV_tn[tn] ","",
   //                     "  StgON1: ",StgON1, 3,
   //                     "  StgON2: ",StgON2, 3,
   //                     "  StgON3: ",StgON3, 3,
   //                     "  StgRSV: ",StgRSV, 3   )
   //                                                           ) return ESC;



//       if ( (SZVM_tn[NewTN] > 0) &&  (StgRSV == 1) )     CTabl.STextS("RSV",NumZap, static_cast_to_string(Nmes));
        

      // WriTabl(NewTN,FIO,Fio1,Fio2,Fio3,CountStag,Stag1,Stag2,Stag3,Stag4,Stag5,Stag6,Stag7,Stag8,Stag9,Stag10,Stag11,Stag12,
      //         MBeg,MEnd,mBA,mEA,Year,
      //         StgON1,StgON2,StgON3,KolZapSt);

       KolZap++;
      }

   if (ESC==Panel_Zapros(" Формиров массива  RSV_tn[tn] закончено","",
                        "  всего записей: ",KolZap, 5)
                                                              ) return ESC;

}


WriTabl(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,MBeg,MEnd,mBA,mEA,Year,StgON1,StgON2,StgON3,KolZapSt)
{
        int CurRcr = CTabl.Count_Rcr()-1;
        CTabl.Add_Rcr(CurRcr,1);

        CTabl.STextS("C_FIO",CurRcr, static_cast_to_string(a1));  
        CTabl.STextS("FIO",CurRcr, static_cast_to_string(a2));
        CTabl.STextS("Fio1",CurRcr, static_cast_to_string(a3));
        CTabl.STextS("Fio2",CurRcr, static_cast_to_string(a4));
        CTabl.STextS("Fio3",CurRcr, static_cast_to_string(a5));

        CTabl.STextS("CountStag",CurRcr, static_cast_to_string(a6));
        CTabl.STextS("Stag1",CurRcr, static_cast_to_string(a7));
        CTabl.STextS("Stag2",CurRcr, static_cast_to_string(a8));
        CTabl.STextS("Stag3",CurRcr, static_cast_to_string(a9));
        CTabl.STextS("Stag4",CurRcr, static_cast_to_string(a10));
        CTabl.STextS("Stag5",CurRcr, static_cast_to_string(a11));
        CTabl.STextS("Stag6",CurRcr, static_cast_to_string(a12));
        CTabl.STextS("Stag7",CurRcr, static_cast_to_string(a13));
        CTabl.STextS("Stag8",CurRcr, static_cast_to_string(a14));
        CTabl.STextS("Stag9",CurRcr, static_cast_to_string(a15));
        CTabl.STextS("Stag10",CurRcr, static_cast_to_string(a16));
        CTabl.STextS("Stag11",CurRcr, static_cast_to_string(a17));
        CTabl.STextS("Stag12",CurRcr, static_cast_to_string(a18));


        CTabl.STextS("MonthBeg",CurRcr, static_cast_to_string(MBeg));
        CTabl.STextS("MonthEnd",CurRcr, static_cast_to_string(MEnd));                                                                          
        CTabl.STextS("MBegAbs",CurRcr, static_cast_to_string(mBA));
        CTabl.STextS("MEndAbs",CurRcr, static_cast_to_string(mEA));
        CTabl.STextS("Year",CurRcr, static_cast_to_string(Year));

        //CTabl.STextS("LStag1",CurRcr, static_cast_to_string(st3));
                                                                 

        CTabl.STextS("StgON1",CurRcr, static_cast_to_string(StgON1));
        CTabl.STextS("StgON2",CurRcr, static_cast_to_string(StgON2));
        CTabl.STextS("StgON3",CurRcr, static_cast_to_string(StgON3));
        CTabl.STextS("KolZapSt",CurRcr, static_cast_to_string(KolZapSt));
                                                                        
}
