//---nopass---11.05.2023---
//выборка сумм с учетом дат действия видов в периоде [d1;d2]
GetSumWithKoefNepoln(absM,stolb,Simv,d1,d2,flagNU,tipNepoln)
{
	//коэффициент неполноты
	double koefNepoln;
	int tmpMrasch=mrasch;

	double rezult=0.0;

   	var LS = CreateObject("LS");
   	LS.GetGlobalLS();
   	var MatrLS = LS.MatrLS();
   	int size = MatrLS.Size();

	//цикл по видам НУ
   	for (int index = 0; index<size; index++)
   	{
      	var be = MatrLS.GetBaseElem(index);
      	if (!VarHasValue(be))
			continue;
		//точный внутренний код НУ
		double intCod=be.Code;
		var datBeg=be.DateBeg();
		var datEnd=be.DateEnd();

		char Sim = Sim_For_Intern_Cod(atoi(intCod),stolb);  //определяем символ в ТВХ
    		if ( !IsSubStrPresent(Simv,CharAsString(Sim)) )
			continue;
		if ( (flagNU==CL_NACH) && !IsCodeNach(atoi(intCod)))  //смотрим флаг начисления
			continue;
		if ( (flagNU==CL_UD) && IsCodeNach(atoi(intCod)))  //смотрим флаг удержания
			continue;

        	var sumVect = be.SumVect;
		//цикл по вектору сумм
        	for(int i =  0; i<sumVect.Size() ; i++ )
        	{
          		var sumElem= sumVect.GetSum(i);
          		if ( sumElem.mv!=absM || nabs(sumElem.Sum)<0.001)
             		continue;

			//определяем коэффициент неполноты в месяце mrasch
			//т.к. НДФЛ разбивается по месяцам с учетом даты выплаты, то для видов НДФЛ месяц не меняем
			//НДФЛ рассчитывается по месяцу начисления
			if (!IsVidNdfl(intCod) && sumElem.m!=mrasch)
				s50(sumElem.m);
			nepoln(d1.GetDouble(),d2.GetDouble(),datBeg.GetDouble(),datEnd.GetDouble(),koefNepoln,tipNepoln);
			rezult+=sumElem.Sum*koefNepoln;
			if (tmpMrasch!=mrasch)
				s50(tmpMrasch);
	  	}
   	}
	
	return rezult;
}

IsVidNdfl(intCod)
{ 
    char Func[1024],Buf[256];
    sprintf(Func,"КОД_ДОХОДА(205,%d,ДОП)",Intern_To_Extern(intCod));   
    CallFuncReceive(Func,Buf,255,2);
    if ( IsSubStrPresent(Buf,"Н") )
	return true;

   return false;
}

GetProfName(Prof)
{
   char s[256];
   GetValueClassif("T_GUIDE\\prof.tab",Prof,s,255,"Value","Kod");
   return s;
}

Message ( &Arg,  &pcT, W, A)
//////////////////////////////////////////////////////////////////
// Сообщение(парам1,парам2)
// парам1 - текст сообщения
// парам2 - заголовок окна
//////////////////////////////////////////////////////////////////
{
   var FuncParam =  CreateObject("ParamFuncRW");
   FuncParam.IInitial(static_cast_to_string(Arg),",",10);
   int CountParam=FuncParam.Count();

   if ( CountParam )
   {
      AmbaMessageBox(FuncParam.Get(0),FuncParam.Get(1),1);
   }
   return pcT;
}

ToLeft( &Arg,  &pcT, W, A)
//////////////////////////////////////////////////////////////////
// Выравнивание числа по левому краю
//////////////////////////////////////////////////////////////////
{
   double Sum = atof(GetVarValue(Arg));
   char StrTmp[W+256];
   sprintf(StrTmp,"%-*.*f",W,A,Sum);
   Text_Text(pcT,StrTmp,W);
   return pcT;
}

UserCombineRefF2(&buffer,bufsize,handle,&C_Params)
{
  // функция для вызова справочника совместительств из таблицы
  // у поля Совместительство в таблице настройки написать в функции предварительной обработки:
  // CLASSIF(S:UserCombineRefF2) 
  // ЧИТАЕТ ЛИЦЕВОЙ СЧЕТ с табельным номером взятым из поля C_FIO 

  char ss[bufsize+1];
  CharToOem(buffer,ss);
  var CTabl=CreateObject("CurPrnTbl");
  CTabl.Initial(C_Params.pTabl);
  int Tn=atoi(CTabl.TextS("C_FIO",CTabl.Get_N_Rcr()));
  int er=LSRead(Tn,2);
  if (er==1)
  {
    int rc=ShowCombineRef(ss,ss, 2, 5, 70, 15);
    if (rc!=ESC)
    {
	   OemToChar(ss, buffer);
      return 1;
    }
  }
  return 0;
}
