Страница 1 из 1

Ошибка при компиляции

Добавлено: 24 фев 2009, 14:00
korvanakorvana
При компиляции выдается ошибка таблица TDOLG отсутствует в словаре стр.49 , поз1.... ,basefin.

Код: Выделить всё

/*   */
Function XLCREATEMATRIX(longint, longint) : boolean; external;
Function XLCLEARMATRIX : boolean; external;
Function XLFREEMATRIX : boolean; external;
Function XLSTWRITETOMATRIX(longint, longint, string) : boolean; external;
Function XLDOWRITETOMATRIX(longint, longint, double) : boolean; external;
Function XLREADFROMMATRIX(longint, longint, var AnyType) : boolean; external;
Function XLWRITEMATRIXTOEXCEL(longint, longint) : boolean; external;
Function XLREADMATRIXFROMEXCEL(longint, longint, longint, longint) : boolean; external;

Const
  #INCLUDE excel.inc
  ColorSysBlack    =   46;
  ColorSysBlue     =   58;
  xlColorBlack     = 0;
  xlColorWhite     = 16777215;

End;

Interface _gt_premexel_kor 'Расчет премии по менеджерам' escclose;
//show at(,,35,);
show at(,,33,);

create view
var 
t1,t2:time
dat1:date 
dat2:date 
date1:date 
date2:date 
days:longint
delta:longint
//proc,tekplat,sum:double;
proc,tekplat,tekplatnds,sum:double;
formula:string;
  StrCount, ColCount, HeaderStrCount : LongInt;
  XlRes                              : Boolean;
  aFileName                          : String;
  i, j, l, r, u, b, k                : longint;
as
Select *
From 
usertune
, x$users
, katorg katorg1
, katcity katcity1
, basedoc basedoc1
, tdolg
, basefin
, kathozd
, stepdoc
, spstep
, katmc
Where
((
usertune.ownname/==x$users.xu$loginname(noindex)
and word(1)==basefin.direct
and dat1<<=basefin.ddoc
and dat2>>=basefin.ddoc

and word(1)==kathozd.sysnum
//and basefin.tipdoc==kathozd.tidk
and basefin.tidkgal==kathozd.tidk

and basefin.cbasedoc==basedoc.nrec

and word(201)==basedoc.viddoc (noindex)
and usertune.descr==basedoc.descr (noindex)

and basedoc.corg==katorg.nrec
and katorg.ccity==katcity.nrec
and basedoc.nrec == stepdoc.cbasedoc
and stepdoc.nrec == spstep.cstepdoc
and spstep.cmcusl == katmc.nrec

and tdolg.cbasedoc==basedoc1.nrec
and basedoc1.corg==katorg1.nrec
and katorg1.ccity==katcity1.nrec

));

Form prem ('out\dolg.out');

//**********************************************************************

procedure PrintHeader(var i:longint);
{
xlSTWriteToMatrix (i,1,'Вид док.');
xlSTWriteToMatrix (i,2,'Дата');
xlSTWriteToMatrix (i,3,'№');
xlSTWriteToMatrix (i,4,'Сумма');
xlSTWriteToMatrix (i,5,'Контрагент');
xlSTWriteToMatrix (i,6,'Город');
xlSTWriteToMatrix (i,7,'Дата ДО');
xlSTWriteToMatrix (i,8,'№ ДО');
xlSTWriteToMatrix (i,9,'Получ.');
xlSTWriteToMatrix (i,10,'Сумм.ДО');
xlSTWriteToMatrix (i,11,'Дни');
xlSTWriteToMatrix (i,12,'%');
xlSTWriteToMatrix (i,13,'Премия');
i:=i+1;
}


procedure PrintSpecHeader (var i : longint);
{
xlSTWriteToMatrix(i, 1,'Наименование МЦ');
xlSTWriteToMatrix(i, 2,'Кол-во');
xlSTWriteToMatrix(i, 3,'Цена');
xlSTWriteToMatrix(i, 4,'Сумма');
xlSTWriteToMatrix(i, 5,'Производитель');
xlSTWriteToMatrix(i, 6,'НДС');
xlSTWriteToMatrix(i,10,'Всего');
xlSTWriteToMatrix(i,12,'%%');
xlSTWriteToMatrix(i,13,'Премия');
i:=i+1;
}


procedure PrintTekPlat (var i:longint);
{
xlSTWriteToMatrix(i,1,kathozd.name); //Вид
xlSTWriteToMatrix(i,2,DateToStr(basefin.ddoc,'DD.MM.YY')); //Дата оплаты
xlSTWriteToMatrix(i,3,basefin.nodoc); //№ плат.док.
xlDOWriteToMatrix(i,4,basefin.summa); //Сумма платежа
xlSTWriteToMatrix(i,5,katorg.name); //Контрагент
xlSTWriteToMatrix(i,6,katcity.name); //Город
xlSTWriteToMatrix(i,7,DateToStr(basedoc.ddoc,'DD.MM.YY')); //Дата ДО
xlSTWriteToMatrix(i,8,basedoc.nodoc); //№ ДО       
xlSTWriteToMatrix(i,9,DateToStr(add_day(basedoc.ddoc,delta),'DD.MM.YY')); //Дата получ 
xlDOWriteToMatrix(i,10,basedoc.total); //Сумма по ДО
xlSTWriteToMatrix(i,11,String(days)); //Дни       
i:=i+1;
}

Procedure PrintTekSpec(var i:longint);
{
var X1,X2,X3,K1,K2,K3,B1,B2,B3:string;
var xx1,xx2,xx3,b:double;

xlSTWriteToMatrix(i,  1,katmc.name);
xlDOWriteToMatrix(i,  2,spstep.kol);
xlDOWriteToMatrix(i,  3,if(basedoc.vHodNal=1,spstep.price-spstep.nds/spstep.kol,spstep.price));
xlDOWriteToMatrix(i,  4,if(basedoc.vHodNal=1,spstep.summa-spstep.nds,spstep.summa));
xlSTWriteToMatrix(i,  5,katmc.remmc);
xlDOWriteToMatrix(i,  6,spstep.nds);
xlDOWriteToMatrix(i,  10,if(basedoc.vHodNal=1,spstep.summa,spstep.nds+spstep.summa));

Proc:=0;


if katorg.name='Дальсибфармация ЗАО' 
or katorg.name='Амурфармация ОАО' 
or katorg.name='Фарм-СКД ООО' 
or katorg.name='Экс-Мар ЗАО' 
or katorg.name='Эко-Хим ООО'
then 
{
	if (InStr('РИДОСТИН',upcase(katmc.name)) or InStr('РЕАФЕРОН-ЕС',upcase(katmc.name)) )>0 and InStr('ЛИПИНТ',upcase(katmc.name))=0
	then B1:='2,076'
		else if InStr('ИНФАГЕЛЬ',upcase(katmc.name)) >0 or InStr('ЛИПИНТ',upcase(katmc.name)) >0
		then {B1:='2,491';
                     if InStr('ТУБ',upcase(katmc.name)) >0
                     then B1:='4,152';
                     }
		 else if InStr('СЛОВЕНИЯ',upcase(katmc.remmc))>0 or InStr('ГЕДЕОН',upcase(katmc.remmc))>0 or InStr('РИХТЕР',upcase(katmc.remmc))>0 or InStr('ЯНССЕН',upcase(katmc.remmc))>0 or InStr('СИЛАГ',upcase(katmc.remmc))>0 then  
			B1:='0,9936';  
				else B1:='2,106'; 
         

         if (Instr('ЛИПИНТ 0,25',upcase(katmc.name))>0 or Instr('ЛИПИНТ 1,0',upcase(katmc.name))>0)
            then B1:='4,152';
	 if InStr('ЛАЙФФЕРОН',upcase(katmc.name))>0  then 
           { if(InStr('ЛАЙФФЕРОН РАСТВОР',upcase(katmc.name))>0)
              then
               {
           B1:='4,152';
               }
              else{ B1:='2,076';
                  }
              formula:=B1;
           }
        else  
	formula:=B1;
}

// перенесено из расчёта премии Москва по заявке Свинцовой 27.11.07
else if pos('СИА ИНТЕР', upcase(katorg.name)) > 0 then 
{
	X1:='100';
	X2:='140';


	if (InStr('РИДОСТИН',upcase(katmc.name)) or InStr('РЕАФЕРОН-ЕС',upcase(katmc.name)) )>0 and InStr('ЛИПИНТ',upcase(katmc.name))=0 then 
                {
		B1:='1,6608';
		B2:='5,8128';
		K2:='-0,04152';
		Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';0))';
        	}

	else if InStr('ИНФАГЕЛЬ',upcase(katmc.name)) >0 or InStr('ЛИПИНТ',upcase(katmc.name)) >0 then 
                {
		B1:='2,196';
		B2:='7,686';
		K2:='-0,0549';
                if (Instr('ЛИПИНТ 0,25',upcase(katmc.name))>0 or Instr('ЛИПИНТ 1,0',upcase(katmc.name))>0)
                 then
                {
                  B1:='3,66'; 
                  B2:='12,81';
		  K2:='-0,0915';
                }

                if InStr('ТУБ',upcase(katmc.name)) >0
                then
                  {B1:='3,66';
		B2:='12,81';
		K2:='-0,0915';
                  }
		Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';0))';	
	         }

	     else if InStr('СЛОВЕНИЯ',upcase(katmc.remmc))>0 then 
                 {
			B1:='1,1592';
			K1:='-0,01932';
			Formula:='=ЕСЛИ(K'+String(j)+'<60;'+B1+K1+'*K'+String(j)+';0)';
		 } 
                  

 else  if InStr('ЛАЙФФЕРОН',upcase(katmc.name))>0  then 
                           {
                            if InStr('ЛАЙФФЕРОН РАСТВОР',upcase(katmc.name))>0 then
                               {     B1:='3,66';
		                     B2:='12,81';
		                     K2:='-0,0915';
		                     Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';0))';	
	                        }
                            else {B1:='1,6608';
		                  B2:='5,8128';
		                  K2:='-0,04152';
		                  Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';0))';
	                         }
	                    }
                             
       else {
			B1:='2';
			B2:='7';
			K2:='-0,05';
			Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';0))';	
	               	}
}

else if katorg.name='ЗАО НПК "Катрен"' or katorg.name='Россиб Фармация , ЗАО' or katorg.name='РОСТА, ЗАО (консигнация)'
	then 
	{
	X1:='100';
	X2:='140';

	if (InStr('РИДОСТИН',upcase(katmc.name)) or InStr('РЕАФЕРОН-ЕС',upcase(katmc.name)) )>0 and InStr('ЛИПИНТ',upcase(katmc.name))=0
	then 
	{
	B1:='1,6608';
	B2:='5,8128';
	K2:='-0,04152';
	}
	else 
		if InStr('ИНФАГЕЛЬ',upcase(katmc.name)) >0 or InStr('ЛИПИНТ',upcase(katmc.name)) >0
		then 
		{
		B1:='2,196';
		B2:='7,686';
		K2:='-0,0549';
                if (Instr('ЛИПИНТ 0,25',upcase(katmc.name))>0 or Instr('ЛИПИНТ 1,0',upcase(katmc.name))>0)
                 then
                {
                  B1:='3,66'; 
                  B2:='12,81';
		  K2:='-0,0915';
                }
                if InStr('ТУБ',upcase(katmc.name)) >0
                then
                  {B1:='3,66';
		B2:='12,81';
		K2:='-0,0915';
                  }
                
		}
			else if InStr('СЛОВЕНИЯ',upcase(katmc.remmc))>0 or InStr('ГЕДЕОН',upcase(katmc.remmc))>0 or InStr('РИХТЕР',upcase(katmc.remmc))>0 or InStr('ЯНССЕН',upcase(katmc.remmc))>0 or InStr('СИЛАГ',upcase(katmc.remmc))>0 then 
			{
			B1:='0,6624';
			B2:='2,3184';
			K2:='-0,01656';
			}

        else  if InStr('ЛАЙФФЕРОН',upcase(katmc.name))>0  then 
                           {
                            if InStr('ЛАЙФФЕРОН РАСТВОР',upcase(katmc.name))>0 then
                               {     B1:='3,66';
		                     B2:='12,81';
		                     K2:='-0,0915';
		               }
                            else {B1:='1,6608';
		                  B2:='5,8128';
		                  K2:='-0,04152';
		                  }
	                    }
                        
				else
				{
				B1:='2';
				B2:='7';
				K2:='-0,05';
				}
        Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';0))';
	}

else if katorg.name='РОСТА, ЗАО' then {

	xx1:=130;
	xx2:=170;

//	xx1:=100;
//	xx2:=140;

	X1:=replace(string(xx1), '.', ',');
	X2:=replace(string(xx2), '.', ',');

//	X1:=doubletostr(xx1,'66666666,8888');
//	X2:=doubletostr(xx2,'66666666,8888');


//	более 170 штраф 1.5%

// формула для расчёта исходя из общей  y-y0 = k (x-x0) приведённая к  y = kx + b
// 
// K2 = - B1 / (X2 - X1)
// B2 = B1 * X2 / (X2 - X1)

	if (InStr('РИДОСТИН',upcase(katmc.name)) or InStr('РЕАФЕРОН-ЕС',upcase(katmc.name)) )>0 and InStr('ЛИПИНТ',upcase(katmc.name))=0 then {
		b:=1.6608;
//		B1:='1,6608';
//		B2:='5,8128';
//		K2:='-0,04152';
	}
	else if InStr('ИНФАГЕЛЬ',upcase(katmc.name)) >0 or InStr('ЛИПИНТ',upcase(katmc.name)) >0 then 
        {
		b:=2.196;
//		B2:='12,8128';
//		K2:='-0,09152';
              if (Instr('ЛИПИНТ 0,25',upcase(katmc.name))>0 or Instr('ЛИПИНТ 1,0',upcase(katmc.name))>0)
                 then
                {
                  b:=3.6608; 
                //  B2:='12,8128';
		 // K2:='-0,09152';
                }
              if InStr('ТУБ',upcase(katmc.name)) >0
                then
                  {b:=3.66;
		//B2:='12,8128';
		//K2:='-0,09152';
                  } 
	}
	else if InStr('СЛОВЕНИЯ',upcase(katmc.remmc))>0 or InStr('ГЕДЕОН',upcase(katmc.remmc))>0 or InStr('РИХТЕР',upcase(katmc.remmc))>0 or InStr('ЯНССЕН',upcase(katmc.remmc))>0 or InStr('СИЛАГ',upcase(katmc.remmc))>0 then {
		b:=0.6624;
//		B1:='0,6624';
//		B2:='2,3184';
//		K2:='-0,01656';
	}

        else  if InStr('ЛАЙФФЕРОН',upcase(katmc.name))>0  then 
                           {
                            if InStr('ЛАЙФФЕРОН РАСТВОР',upcase(katmc.name))>0 then
                               {     b:=3.6608;
                                   //  B1:='3,66';
		                    // B2:='12,8128';
		                    // K2:='-0,09152';
		               }
                            else {b:=1.6608;
                                 // B1:='1,6608';
		                 // B2:='5,8128';
		                 // K2:='-0,04152';
		                  }
	                    }


	else {
		b:=2;
//		B1:='2';
//		B2:='7';
//		K2:='-0,05';
	}
       

//	B1:=replace(string(B1), '.', ',');             	
//	B2:=replace(string(b*xx2/(xx2-xx1)), '.', ',');
//	K2:=replace(string(-b/(xx2-xx1)), '.', ',');

	B1:=doubletostr(b,'66666666,8888');
	B2:=doubletostr(b*xx2/(xx2-xx1),'66666666,8888');
	K2:=doubletostr(b/(xx1-xx2),'66666666,8888');

        Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+'-'+K2+'*K'+String(j)+';0 ))';
//        message('X1='+X1+' X2='+X2+' B1='+B1+' B2='+B2+' K2='+ K2 + Formula);
        
}

else    {
	X1:='20';
	X2:='40';
	X3:='60';

	if (InStr('РИДОСТИН',upcase(katmc.name)) or InStr('РЕАФЕРОН-ЕС',upcase(katmc.name)) )>0 and InStr('ЛИПИНТ',upcase(katmc.name))=0
	then 
	{
	B1:='2,5';
	B2:='2,514';
	B3:='5,79';
	K1:='-0,0139';
	K2:='-0,0146';
	K3:='-0,0965';
	}
	else if InStr('ИНФАГЕЛЬ',upcase(katmc.name)) >0 or InStr('ЛИПИНТ',upcase(katmc.name)) >0 
	then 
	{
	B1:='3';
	B2:='3,014';
	B3:='7,29';
	K1:='-0,0139';
	K2:='-0,0146';
	K3:='-0,1215';
	if InStr('ТУБ',upcase(katmc.name)) >0
                then
                  {
        B1:='5';
	B2:='5,014';
	B3:='13,29';
	K1:='-0,0139';
	K2:='-0,0146';
	K3:='-0,2215';
                  }
         if (Instr('ЛИПИНТ 0,25',upcase(katmc.name))>0 or Instr('ЛИПИНТ 1,0',upcase(katmc.name))>0)
              then
       {
        B1:='5'; 
	B2:='5,014';
	B3:='13,29';
	K1:='-0,0139';
	K2:='-0,0146';
	K3:='-0,2215';

          }
       

        }

	else
		if InStr('СЛОВЕНИЯ',upcase(katmc.remmc))>0 or InStr('ГЕДЕОН',upcase(katmc.remmc))>0 or InStr('РИХТЕР',upcase(katmc.remmc))>0 or InStr('ЯНССЕН',upcase(katmc.remmc))>0 or InStr('СИЛАГ',upcase(katmc.remmc))>0 then 
		{
		B1:='1,196';
		B2:='1,21';      
		B3:='1,878';  
		K1:='-0,0139';   
		K2:='-0,0146';   
		K3:='-0,0313';	
		}
			else
			{
			B1:='2,536';
			B2:='2,55';
			B3:='5,898';
			K1:='-0,0139';
			K2:='-0,0146';
			K3:='-0,0983';
			}

	// Входные данные 
	// X1 - кол-во Дни первого "скачка" - по умолчанию 20
	// X2 - кол-во Дни второго "скачка" - по умолчанию 40
	// K1, B1 - коэффициент и смещение для периода Дни от 0  до X1
	// K2, B2 - коэффициент и смещение для периода Дни от X1 до X2
	// K3, B3 - коэффициент и смещение для периода Дни от X2 до X3
	 if(InStr('ЛАЙФФЕРОН',upcase(katmc.name)) >0)	  
               then{
 
        B1:='2,5';
	B2:='2,514';
	B3:='5,79';
	K1:='-0,0139';
	K2:='-0,0146';
	K3:='-0,0965';
	           if(InStr('ЛАЙФФЕРОН РАСТВОР',upcase(katmc.name)) >0)
                    then{
        B1:='5';
        B2:='5,014';
	B3:='13,29';
	K1:='-0,0139';
	K2:='-0,0146';
	K3:='-0,2215'; 
                        }
        Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+K1+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<'+X3+';'+B3+K3+'*K'+String(j)+';0)))';
	
                    }

      else{
        Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+K1+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<'+X3+';'+B3+K3+'*K'+String(j)+';0)))';
	  }

}         


if (InStr('СТОПСОРИЯ',upcase(katmc.name)) >0 or InStr('РИНФОЛТИЛ',upcase(katmc.name)) >0 or InStr('ЛИПРИНА',upcase(katmc.name)) >0 or InStr('ТРИС КАЛОРИ',upcase(katmc.name)) >0 or InStr('СОФТБЕНЕР',upcase(katmc.name)) >0 )
then {
        X1:='20';
	X2:='40';
	X3:='52';
                        B1:='3';
			B2:='3,014';
			B3:='7,29';
			K1:='-0,0139';
			K2:='-0,0146';
			K3:='-0,1215';


  Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+K1+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<'+X3+';'+B3+K3+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<360;1;0))))';

if ( InStr('СОФТБЕНЕР',upcase(katmc.name)) >0 or InStr('РИНФОЛТИЛ 850',upcase(katmc.name)) >0 )
then {

        X1:='20';
	X2:='40';
	X3:='56';
                        B1:='5';
			B2:='5,014';
			B3:='13,29';
			K1:='-0,0139';
			K2:='-0,0146';
			K3:='-0,2215';


  Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+K1+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<'+X3+';'+B3+K3+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<360;1;0))))';




}
	
if katorg.name='РОСТА, ЗАО' then {

	xx1:=130;
	xx2:=170;
        b:=2.196;
        B1:=doubletostr(b,'66666666,8888');
	B2:=doubletostr(b*xx2/(xx2-xx1),'66666666,8888');
	K2:=doubletostr(b/(xx1-xx2),'66666666,8888');

        Formula:='=ЕСЛИ(K'+String(j)+'<131;'+B1+';ЕСЛИ(K'+String(j)+'<=151;'+B2+'-'+K2+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<360;1;0) ))';

if ( InStr('СОФТБЕНЕР',upcase(katmc.name)) >0 or InStr('РИНФОЛТИЛ 850',upcase(katmc.name)) >0 )
then {
     xx1:=130;
	xx2:=170;
        b:=3.66;
        B1:=doubletostr(b,'66666666,8888');
	B2:=doubletostr(b*xx2/(xx2-xx1),'66666666,8888');
	K2:=doubletostr(b/(xx1-xx2),'66666666,8888');

        Formula:='=ЕСЛИ(K'+String(j)+'<131;'+B1+';ЕСЛИ(K'+String(j)+'<=159;'+B2+'-'+K2+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<360;1;0) ))';

        


}



}
	
else

 if( pos('СИА ИНТЕР', upcase(katorg.name)) > 0 or  katorg.name='ЗАО НПК "Катрен"' or katorg.name='Россиб Фармация , ЗАО' or katorg.name='РОСТА, ЗАО (консигнация)' )then 
{
	X1:='100';
	X2:='140';
        B1:='2,196';
		B2:='7,686';
		K2:='-0,0549';
    Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<=121;'+B2+K2+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<360;1;0)))';	            

if ( InStr('СОФТБЕНЕР',upcase(katmc.name)) >0 or InStr('РИНФОЛТИЛ 850',upcase(katmc.name)) >0 )
then {


        X1:='100';
	X2:='140';
        B1:='3,66';
		B2:='12,81';
		K2:='-0,0915';
    Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<=129;'+B2+K2+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<360;1;0)))';	   

}
}


xlDOWriteToMatrix(i, 14, 0);
}

if (InStr('ФЛ',upcase(basedoc.nodoc)) >0 ) xlDOWriteToMatrix(i, 14, 1);

xlSTWriteToMatrix(i, 12,Formula);
TekPlat:=basefin.summa*if(basedoc.vHodNal=1,spstep.summa-spstep.nds,spstep.summa)/basedoc.total;
xlSTWriteToMatrix(i, 13,'=RC[-1]*'+DoubleToStr(TekPlat,'66666666666,8888')+'/100');

xlSTWriteToMatrix(i, 15, '=ЕСЛИ(RC[-1]=1;RC[-2];0)');
//xlSTWriteToMatrix(i, 16, '=ЕСЛИ(RC[-2]=1;RC[-12]+RC[-10];0)');
TekPlatNDS:=basefin.summa*if(basedoc.vHodNal=1,spstep.summa,spstep.summa+spstep.nds)/basedoc.total;
xlSTWriteToMatrix(i, 16, '=ЕСЛИ(RC[-2]=1;'+DoubleToStr(TekPlatNDS,'66666666666,8888')+';0)');

i:=i+1;
}


screen params show at(,,,4);
fields date1:,noprotect;
       date2:,noprotect;
buttons 
cmOK, default;
cmCancel;
<<
 c .@@@@@@@@@@  по .@@@@@@@@@@
 <.Формировать.> <.  Закрыть  .>

>>
end;

panel P1
show at(1,5,32,);
//show at(,5,,);
 browse Bro1
  table UserTune;
  fields
  UserTune.Descr 'Дескриптор':[5],protect;
  UserTune.FIO 'Фамилия Имя Отчество':[30],protect;
 end;
end;

handleevent

cmInit:
{
date1:=DATE(1,1,YEAR(Cur_Date)); 
date2:=Cur_Date;                 
}

cmOK:
{
	var s:longint;
	var myorg:string;
	var uslov:string;

	myorg := sGetTune('MyOrg');

	if (instr('ФАРМ', upcase(myorg)) > 0) 
			then {
				myorg := 'farm'; 
				uslov := '5% препараты';
			}
			else {
				myorg := 'med';
				uslov := 'ФЛ';
			}

	dat1:=date1;
	dat2:=date2;

	runinterface(_gt_dolgexel,dat2,trim(usertune.descr));

        XlRes := True;

	aFileName := GetStringParameter('Files','OutputFilesDirectory',0) +'prem-'+myorg+'-'+trim(UserTune.Descr)+string(month(date1))+'.xls';
	DeleteFile(aFileName);
	XlRes := xlCreateExcel((aFileName), True);
	if (XlRes) XlRes := xlIsExcelValid;
	If (not XlRes)  
		{
		StopVisual('',0);
		Exit;
		}

	xlAddSheet;	

	xlSetSheetName(1, 'Титул'); 
	xlSetSheetName(2, 'Начислено'); 
	xlSetSheetName(3, 'Подробно'); 
	xlSetSheetName(4, 'Долги'); 


//////////////////////////////////////////////////////////////////////////
///////////////////////////////////// работаем с 2м листом ///////////////
/////////////////////////////////////   НАЧИСЛЕНО
//////////////////////////////////////////////////////////////////////////

//xlSetActiveSheet(2); 
xlSetActiveSheetByName('Начислено');

//if not xlImportModule('c:\GAL582\Modules\page.bas') then message ('Ошибка импорта макроса');
//xlRunMacro('SetPage');

xlCreateMatrix ( 1000, 20 );

i:=2;
PrintHeader(i);

t1:=cur_time;
StartNewVisual( vtNumericVisual, vfTimer+vfBreak+vfConfirm,''#3'Подготовка отчета к печати', 1);


_loop basefin
{
_loop basedoc
{	
	case longint(substr(katcity.tel,length(katcity.tel),1)) of
	1:delta:=6;
	2:delta:=8;
	3:delta:=4;
	4:delta:=9;
	5:delta:=3;
	6:delta:=1;
	end;

	days:=to_days(basefin.ddoc)-to_days(basedoc.ddoc)-delta;
	if days<0 then days:=0;

	PrintTekPlat (i);

	if (not NextVisual)
	{
	StopVisual('',0);
	Message('Формирование отчета прервано пользователем.',OKButton)
	xlKillExcel;
	Exit;
	}
}
}

xlWriteMatrixToExcel ( 2, 1 );
xlFreeMatrix;

 xlFrameCells ( xlBorderL, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
 xlFrameCells ( xlBorderR, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
 xlFrameCells ( xlBorderT, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
 xlFrameCells ( xlBorderB, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
 xlFrameCells ( xlInsideV, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
 xlFrameCells ( xlInsideH, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );

 XLSETBACKCOLOR (16370100, 3 , 1 , 3 , 13);

 xlSetFontSize  ( 8 , HeaderStrCount , 1 , MaxExcelRow , MaxExcelCol ); // по всему файлу - шрифт "8"

// xlMergeCells(1,1,1,13);
 xlAlignCells(xlCenter,2,1,3,13);
 xlSetFontSize  ( 12 , 1 , 1 , 1 , 13);
 xlSetFontStyle ( xlBold, 1 , 1 , 3 , 13);
 xlSetCellStringValue('Расчет доплаты к окладу', 1, 1, 1, 1);
 xlFreeze(4,1);

 xlSetNumberFormat	( '# ##0,00',		4,  4, i, 4 ); 
 xlSetNumberFormat	( '# ##0,00',		4,  10, i, 10 ); 
 xlSetNumberFormat	( '# ##0,00',		4,  13, i, 13 ); 

 xlAutoFit(4,1,MaxExcelRow , MaxExcelCol);

 xlSetColumnWidth(0,1,10,MaxExcelRow,10); // скрываем сумму по ДО
 xlSetColumnWidth(0,1,12,MaxExcelRow,12); // скрываем %

 xlSetColumnWidth(15,1,1,MaxExcelRow,1); // ширина колонки Вид
 xlSetColumnWidth(20,1,5,MaxExcelRow,5); // ширина колонки контрагент


//////////////////////////////////////////////////////////////////////////
///////////////////////////////////// работаем с 3м листом ///////////////
//////////////////////////////////////////////////////////////////////////

 xlCreateMatrix ( 10000, 20 );

// xlSetActiveSheet(3); 
 xlSetActiveSheetByName('Подробно');


 i:=2;

 PrintHeader(i);

k:=3; // счетчик строк на странице Начислено

_loop basefin
_loop basedoc
{	
	k:=k+1;

	case longint(substr(katcity.tel,length(katcity.tel),1)) of
	1:delta:=6;
	2:delta:=8;
	3:delta:=4;
	4:delta:=9;
	5:delta:=3;
	6:delta:=1;
	end;

	days:=to_days(basefin.ddoc)-to_days(basedoc.ddoc)-delta;
	if days<0 then days:=0;

//	if (InStr('ФЛ',upcase(basedoc.nodoc)) >0 ) then	{
//		xlDOWriteToMatrix(i, 14, 1);
//		xlSTWriteToMatrix(i, 16, '=ЕСЛИ(RC[-2]=1;RC[-12];0)');
//	}

        PrintTekPlat (i);

        xlSTWriteToMatrix(i-1,11,'=Начислено!K'+string(k)); // дни подставляются из листа 2 

        j:=i;

	xlSetFontStyle (xlBold, i , 1 , i , 13);

	PrintSpecHeader (i);

	xlAlignCells(xlCenter,i,1,i,13);
        	       	
_loop stepdoc
_loop spstep
	{
        PrintTekSpec(i);
       	if (not NextVisual)
		{
		StopVisual('',0);
		Message('Формирование отчета прервано пользователем.',OKButton)
		xlKillExcel;
		Exit;
		}

	} 

	xlSTWriteToMatrix(j-1, 13,'=СУММ(M'+string(i)+':M'+string(j+2)+')');

//	xlSetActiveSheet(2); 
	xlSetActiveSheetByName('Начислено');
	xlSetCellFormula ('=Подробно!M'+string(j), k, 13, k, 13); //%%         
//	xlSetActiveSheet(3); 
	xlSetActiveSheetByName('Подробно');
}

 xlWriteMatrixToExcel ( 2, 1 );
 xlFreeMatrix;

 i:=i+1;

 xlFrameCells ( xlBorderL, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
 xlFrameCells ( xlBorderR, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
 xlFrameCells ( xlBorderT, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
 xlFrameCells ( xlBorderB, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
 xlFrameCells ( xlInsideV, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
 xlFrameCells ( xlInsideH, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );

 XLSETBACKCOLOR (16370100, 3 , 1 , 3 , 13);

 xlSetFontSize  ( 8 , HeaderStrCount , 1 , MaxExcelRow , MaxExcelCol ); // по всему файлу - шрифт "8"

// xlMergeCells(1,1,1,13);
 xlAlignCells(xlCenter,2,1,3,13);
 xlSetFontSize  ( 13 , 1 , 1 , 1 , 13);
 xlSetFontStyle ( xlBold, 1 , 1 , 3 , 13);
 xlSetCellStringValue('Расчет доплаты к окладу', 1, 1, 1, 1);
 xlFreeze(4,1);

 xlSetNumberFormat	( '# ##0,00',		4,  4, i, 4 ); 
 xlSetNumberFormat	( '# ##0,00',		4,  6, i, 6 ); 
 xlSetNumberFormat	( '# ##0,00',		4,  10, i, 10 ); 
 xlSetNumberFormat	( '# ##0,00',		4,  13, i, 16 );


 xlAutoFit(4,1,MaxExcelRow , MaxExcelCol);

//////////////////////////////////////////////////////////////////////////
///////////////////////////////////// работаем с 4м листом ///////////////
//////////////////////////////////////////////////////////////////////////

 xlCreateMatrix ( recordsintable(#tDolg)+10, 10 );

	xlSTWriteToMatrix(1,1, 'Задолженность по оплате счетов');

	xlSTWriteToMatrix(3,1,'Дата сч.');
	xlSTWriteToMatrix(3,2,'№ сч.');
	xlSTWriteToMatrix(3,3,'Организация');
	xlSTWriteToMatrix(3,4,'Город');
	xlSTWriteToMatrix(3,5,'Сумма');
	xlSTWriteToMatrix(3,6,'Оплачено');
	xlSTWriteToMatrix(3,7,'Возврат');
	xlSTWriteToMatrix(3,8,'Остаток');
	xlSTWriteToMatrix(3,9,'Дни');
	xlSTWriteToMatrix(3,10,'Штраф');

 i:=4	;


 _loop tDolg
 {
 	sum:=tdolg.total-tdolg.plat-tdolg.rekl;
 	if sum<0 then sum:=0;
 	if sum>1 then
 	{
 	days:=to_days(dat2)-to_days(basedoc1.ddoc);
 	if days<0 then days:=0;
 	if days>60 then
 	{
	xlSTWriteToMatrix(i,1,DateToStr(basedoc1.ddoc,'DD.MM.YY'));
	xlSTWriteToMatrix(i,2,basedoc1.nodoc);
	xlSTWriteToMatrix(i,3,katorg1.name);
	xlSTWriteToMatrix(i,4,katcity1.name);
	xlDOWriteToMatrix(i,5,tdolg.total);
	xlDOWriteToMatrix(i,6,tdolg.plat);
	xlDOWriteToMatrix(i,7,tdolg.rekl);
	xlDOWriteToMatrix(i,8,sum);
	xlDOWriteToMatrix(i,9,days);
	xlSTWriteToMatrix(i,10,'=ЕСЛИ(RC[-1]>60;ЕСЛИ(RC[-1]<90;RC[-2]*0,005;RC[-2]*0,015);0)');
	i:=i+1;
	}
	}
 }

// xlSetActiveSheet(4); 
 xlSetActiveSheetByName('Долги');
 xlWriteMatrixToExcel ( 1, 1 );
 xlFreeMatrix;

 i:=i-1;

 xlFrameCells ( xlBorderL, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 10 );
 xlFrameCells ( xlBorderR, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 10 );
 xlFrameCells ( xlBorderT, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 10 );
 xlFrameCells ( xlBorderB, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 10 );
 xlFrameCells ( xlInsideV, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 10 );
 xlFrameCells ( xlInsideH, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 10 );

 XLSETBACKCOLOR (16370100, 3 , 1 , 3 , 10);

 xlSetFontSize  ( 8 , HeaderStrCount , 1 , MaxExcelRow , MaxExcelCol ); // по всему файлу - шрифт "8"

// xlMergeCells(1,1,1,10);
 xlAlignCells(xlCenter,2,1,3,10);
 xlSetFontSize  ( 13 , 1 , 1 , 1 , 10);
 xlSetFontStyle ( xlBold, 1 , 1 , 3 , 10);
 xlFreeze(4,1);

 xlSetNumberFormat	( '# ##0,00',		4,  5, i, 8 ); 
 xlSetNumberFormat	( '# ##0,00',		4,  10, i, 10 ); 

 xlAutoFit(2,1,MaxExcelRow , MaxExcelCol);

//////////////////////////////////////////////////////////////////////////
///////////////////////////////////// работаем с 1м листом ///////////////
//////////////////////////////////////////////////////////////////////////

// xlSetActiveSheet(1); 

 xlSetActiveSheetByName('Титул');

 xlCreateMatrix ( 100, 5 );

 xlSTWriteToMatrix(1,3,'Утверждаю ');
 xlSTWriteToMatrix(2,3, if (myorg = 'med', 'Гутова Е.А.', 'Войтенко А.В.') );


 xlSTWriteToMatrix(4,1,'Расчет доплаты к окладу менеджера - '+usertune.fio);
 xlSTWriteToMatrix(5,1,'за период с '+DateToStr(date1,'DD.MM.YYг.')+' по '+DateToStr(date2,'DD.MM.YYг.'));

 xlSTWriteToMatrix(7,1,'Сумма поступившей оплаты:');
 xlSTWriteToMatrix(7,2,'=СУММ(Начислено!D:D)'); 

// xlSTWriteToMatrix(8,1,'В том числе по '+uslov+':');
//xlSTWriteToMatrix(8,2,'=СУММ(Подробно!P:P)');

// xlSTWriteToMatrix(9,1,'Остаток:');
//xlSTWriteToMatrix(9,2,'=R[-2]C-R[-1]C');


 xlSTWriteToMatrix(11,1,'Начислено всего:');
 xlSTWriteToMatrix(11,2,'=СУММ(Начислено!M:M)');

// xlSTWriteToMatrix(12,1,'В том числе '+uslov+':');
// xlSTWriteToMatrix(12,2,'=СУММ(Подробно!O:O)');

// xlSTWriteToMatrix(13,1,'Остаток:');
// xlSTWriteToMatrix(13,2,'=R[-2]C-R[-1]C');

 xlSTWriteToMatrix(15,1,'Начислен штраф согласно приказа:');
 xlDOWriteToMatrix(15,2,0);
 xlSTWriteToMatrix(16,1,'Оклад:');
 xlDOWriteToMatrix(16,2,0);
 xlSTWriteToMatrix(17,1,'Начислен штраф по долгам:');
 xlSTWriteToMatrix(17,2,'=СУММ(Долги!J:J)/1,1');

 xlSTWriteToMatrix(18,1,'Итого к начислению за указанный период: ');
 xlSTWriteToMatrix(18,2,'=R[-7]C-R[-3]C-R[-2]C-R[-1]C');

 xlSTWriteToMatrix(19,1,'Итого к начислению (без '+uslov+') 60%: ');
 xlSTWriteToMatrix(19,2,'=(R[-8]C-R[-4]C-R[-3]C-R[-2]C)*0,6');

 xlWriteMatrixToExcel ( 1, 1 );
 xlFreeMatrix;


// xlMergeCells(1,1,1,6);
// xlMergeCells(2,1,2,2);
 xlAlignCells(xlCenter,5,1,5,2);
 xlSetFontStyle ( xlBold, 1 , 1 , MaxExcelRow , MaxExcelCol);
 xlSetFontSize  ( 10 , 1 , 1 , MaxExcelRow , MaxExcelCol ); // по всему файлу - шрифт "10"
 xlSetFontSize  ( 13 , 4 , 1 , 4 , 2);
 xlSetFontSize  ( 12 , 5 , 1 , 5, 2);
 xlSetFontSize  ( 12 , 12 , 2 , 12 , 2);
 xlSetNumberFormat	( '# ##0,00',		2,  2, MaxExcelRow, 2 ); 

 xlFrameCells ( xlBorderB, xlThin, xlLineStyleNone, xlColorBlack, 2, 2, 2, 2 );
 
 xlAutoFit(2,1,MaxExcelRow , MaxExcelCol);

 xlKillExcel;

 t2:=cur_time;
 StopVisual('',0);
// message(timetostr(sub_time(t2,t1),'HH:MM:SS:SSSS'));

}
cmCancel:
{
closeinterface(cmDone);
mtChangeRefCount( #tDolg,  -1 );
}
end;

end.




Добавлено: 24 фев 2009, 14:17
korvanakorvana
упс извеняюсь) нашла причину)


table struct tdolg
(
cbasedoc:comp,
total:double,
plat:double,
rekl:double)
with index (idx1=cbasedoc);

Добавлено: 25 фев 2009, 01:09
Masygreen
Вот это безумие .. неужели я пишу так же??????????????
:o

Добавлено: 25 фев 2009, 05:55
Алексей
А разве обязательно приводить для примера всю портянку листинга программы? А если там пара десятков тысяч строк будет? :sad: