import "useful.dll"
import "layer92.dll"

sub21a()
{
   return PriorityCall("UserSub21a","SysSub21a");
}

sub21()
{
   return PriorityCall("UserSub21","SysSub21");
}

sub21b()
{
   return PriorityCall("UserSub21b","SysSub21b");
}



SysSub21a()  /* Первоначальные запросы для аванса, если нужны */
////////////////////////////////////////////////////////////
//  vspom[0] - процент аванса*100(чтобы м.б.дробные доли указывать)
//             ( или 0, если аванс суммой )
//  vspom[1] - 0 - округлять, 1 - отбрасывать
//  vspom[2] - округлять до ...
//  vspom[3] - вид аванса
////////////////////////////////////////////////////////////
{
  var AVANS_CNTR_CNF = "аванс";
  int vidavans = 201;
  int i, pos;
  var oHelp = CreateObject("IKSimpleHelp");
  oHelp.HelpInitial("Аванс");
  char StrProc[81];
  GetCommonCnf("PROC_AV",AVANS_CNTR_CNF,StrProc,80);
  double Proc = atof(StrProc);
  vspom[0] = Proc*100+0.0001;
  vspom[1] = GetCommonCnfInt("ROUND_AV",AVANS_CNTR_CNF);
  vspom[2] = GetCommonCnfInt("S_ROUND",AVANS_CNTR_CNF);
  vspom[2] = max ( vspom[2], GetStdControl(4) );
  if ( (pos=poisk1(vidavans,kodnu1,cntplus,1))==EOF ) return ESC;
  i=kodnu4[pos];
  if ( sub252spec(scr04,5,15,"Укажите вид аванса",i,pos) == ESC ) return ESC;
  vspom[3]=kodnu1[pos];

  if ( vspom[0] ) {
    if (zaprosd(scr04,7,20,
            "Процент ###### ( 0 - суммой ) ",
            // 3,vspom[0],vspom[0],0,1000,10)==ESC) return ESC;
            6,Proc,Proc,0,1000,10)==ESC) return ESC;
    vspom[0] = Proc*100+0.0001;
  }
  vclear ( scr04 );

  return 1;

}

SysSub21()
{
  int kod,row,i,da40;
  char t[20],str1[81];
  double r[4],r9,k,d1,d2,bz;
  var oHelp = CreateObject("IKSimpleHelp");
  oHelp.HelpInitial("Аванс");

  int nRet=1;

  if ( func[4]+func[5]+func[6]==0 )  return(0);

  // учет источника, выбранного в панели запроса
  var Src=GetCommonProp(CMN_SRC_MASS_LS);

  var ts1 = CreateObject("TempCommonSrc");
  ts1.TempCommonSrcInitial(CMN_SRC_C_WORK);
  SetCommonProp(CMN_SRC_C_WORK,Src);

  var ts2 = CreateObject("TempCommonSrc");
  ts2.TempCommonSrcInitial(CMN_SRC_INT_LS);
  SetCommonProp(CMN_SRC_INT_LS,Src);

  var ts3 = CreateObject("TempCommonSrc");
  ts3.TempCommonSrcInitial(CMN_SRC_COUNT_LS);
  SetCommonProp(CMN_SRC_COUNT_LS,Src);

  kod=vspom[3];
  r[1]=0.;
  s50(mtek);

  if ((row=poisk_row(kod,0,data,0))==EOF)
  {
     vclear(scr04);
     return(nRet);
  }


  var Prop=GetPropOfCod(GetCode(row));
  var Combine=CreateObject("TmpCurCombine");
  if (Prop.GetCombine()!=GetGeneralCombineLS()) // код совместительства строки аванса не основной
    Combine.Init(Prop.GetCombine());
  d1 = GetBegDate(row);
  d2 = GetEndDate(row);
  bz = GetBase(row);
  bz_kod(GetCode(row),data,bz,bz);

  //stccpy(str1,kch+poskch[10],11);
  kch_from("data_uv",str1); /* дата увольнения */
  s69(r9,str1,1);

  if (r9!=0. && r9<data+.31)
  {
    vwritec(scr02,"Уволен");
    if (func[4]) { pause(2); nRet=1000; vclear(scr04); Combine=0; return(nRet); }
  }

  CheckOtpSummProp(da40, Src);

/*
  // Пока убрано, т.к. возможна ситуация, когда не заполняют столбец ТВХ, предназначенный
  // для расчета ФРВ, в этом случае s98 вернет значение ничему не соответствующее, возможно
  // здесь необходимо сделать двойной расчет: по видам и по табелю и взять максимальную
  // величину
  double aratio = 1.;
  s98(0, aratio);
  if (aratio < 0.5)
  {
    vwritec(scr02,"Отработано меньше половины месяца");
    if (func[4]) { pause(2); nRet=1000; vclear(scr04); return(nRet); }
    else pause(5);
  }
*/

  s50(mtek);

  if (da40==0)
  {
    for ( i=15; i>1; i--)
      if ( poiskc(calm[i-1],simv_vyhodn,strlen(simv_vyhodn))!=EOF
           || poiskc(calm[i-1],simv_otpsub,strlen(simv_otpsub))!=EOF
           || calm[i-1]==static_cast_to_char('Н')
           || calm[i-1]==static_cast_to_char('Б') ) continue;
      else break;
      if (calm[i-1]==static_cast_to_char('О')) da40=1;
   }

   if (da40) { vwritec(scr02,"В отпуске");
             if (func[4]) { pause(2); nRet=1000; vclear(scr04); Combine=0; return(nRet); } }



 initcrow(row,r,0);
 if ( !test_c3(row,mrasch,colc2) ){vclear(scr04); Combine=0; return(nRet);}
 if (vspom[0])
 { 
    r[2]=vspom[0]/100.+0.0001;
    round(r[2]);
      /*--- если bz меньше 1, то воспринимается как % для этого ЛС */
      if (bz && bz<=1.) r[2]=bz*100.;
 }
 else r[2]=norm(0);

 probely(t,1,' ');
 var LSForm;
 if ( func[5]+func[6] )
 { 
     LSForm=CreateObject("LS_Form"); //для WIN создали окно где будет происходить корректировка сумм
     char buf[100];
     rname0(buf,3, 80);
     LSForm.SetCaption("╨рёўхЄ ртрэёр"+" "+OemToAnsi(buf));
     indstr(scr05,mrasch,1,r,t,0);
     indstr(scr04,mrasch,5,r,t,1);
     if (indstr(scr04,mrasch,5,r,t,2)==ESC) {vclear(scr04);Combine=0; return(ESC);}
     indstr(scr04,mrasch,5,r,t,1); 
  }
  vclear(scr02);
  if ( vspom[0] ) 
  {                // Аванс = % от ставки месяца
    s97(d1,d2,r9,k,1);
    r[1] = r9*norm(1)*r[2]/100.;
  }
  else {                           // Аванс суммой из БЗ
    if (norm(0)) r[1]=bz*r[2]/norm(0);
    else r[1]=bz;
  }

  /*----------------------------------------------*/
  /* vspom[1] - 0-округлять, 1-отбрасывать        */
  /* vspom[2] - до скольки округлять, отбрасывать */
  /*----------------------------------------------*/
  if (vspom[0]) round2(r[1],vspom[1],vspom[2],r[1]);
  else   round2(r[1],0,do_chisla(kod),r[1]);

  if (func[6]) if ( indstr(scr04,mrasch,5,r,t,3)==ESC) {Combine=0;return(ESC);}
  indstr(scr04,mrasch,5,r,t,1);

  PutSumm(row,colc1,r[1]);
  if ( r[1] == 0. ) r[2]=r[0]=0.;
  PutTime(row,colc2,r[2]);
  PutCashMonth(row,colc2,r[0]);
  korrls=2;  /* менялись значения для строк Н-У в ЛС */
  izls(1,0); /* "ЛС не рассчитан" */

  vclear(scr04);
  Combine=0;
  return(nRet);

}


SysSub21b()
{ return(1); }


