-- Шаблон создан мастером бланков
-- 20.02.2006 15:06:35
--    книга
БланкСШаблоном "Книга аналитического учета депонированной заработной платы, денежного довольствия и стипендий ф.0504048";

var УпрНастр:L;

var Def_УслСч:S="*.?.304.02.*";
var Def_УслАн:S="";
var Def_СправСотр:S="Ф.*";
var Def_СправПВ:S="ВЕД.*|ВЫПЛ.*";

var УслСч:S=[Def_УслСч];
var УслАн:S=[Def_УслАн];
var СправСотр:S=[Def_СправСотр];
var СправПВ:S=[Def_СправПВ];
var СправПВ_:S=СправПВ;
var fПериод:L;
var fТабНом:L;
var ТабНомСуффикс:S;
var период:S;
s:section;

ДН:D;
ДК:D;
fОст:L;
var ОстН:N;
var ОстК:N;

Учреждение:S;
ОКПО:S;

ПризнПодр:S;
var НаимПодр:S=if(Name_A(ПризнПодр)="" or Name_A(ПризнПодр)=" ",ПризнПодр,Name_A(ПризнПодр));

УслАнДоп:S;

Гр2:I=[1];
var Гр2_:I=2;
Гр4:I;
var Гр4_:I=4;

var Упр:I;
var ТабНом[]:S;
var ФИО[]:S;
var МесКре[]:S;
var ПВ[]:S;
var СумКре[]:N;
var Сч[]:S;
var РКО[]:S;
var СумДеб1 []:N;
var СумДеб2 []:N;
var СумДеб3 []:N;
var СумДеб4 []:N;
var СумДеб5 []:N;
var СумДеб6 []:N;
var СумДеб7 []:N;
var СумДеб8 []:N;
var СумДеб9 []:N;
var СумДеб10[]:N;
var СумДеб11[]:N;
var СумДеб12[]:N;
var СумДебОст[]:N;

var ПризнСотр[]:S;
var ПризнПер[]:S;
var ПризнПВ[]:S;
var ИтогСумДебОст: N;
var ИтогСумДебМесОст: N;

var ФИО_[]:S=if(Name_A(ПризнСотр[$])="" or Name_A(ПризнСотр[$])=" ",ПризнСотр[$],Name_A(ПризнСотр[$]));
var ФИО[]:S=if(Гр2=1,ФИО_[$],if(Гр2=2,ФИО_[$]+" ("+ПризнСотр[$]+")",if(Гр2=3,ПризнСотр[$]+" ("+ФИО_[$]+")",ПризнСотр[$])));

var ИтогСумКре:N;
var ИтогСумДеб[]:N;
var ИтогСумДебМес[]:N;

var Key0[]:S;
var KeyCre[]:S;
var KeySaldo[]:S;
var IdxCre[]:I;
var KeyDeb[]:S;

var BufСум[]:N;
var BufРКО[]:S;
var BufПризнПер[]:S;
ИтогСумМесКре:N;

var НастрGUID:S;

btnРасчет : Object;
btnНастр  : Object;
btnПечать : Object;
btnЗакрыть: Object;
cbОст	  : Object;


var Buf[]:S;

var ppp:i;
--
--Процедуры и функции ------------- 
Func DropSuffix(MyStr:S;suffix:S):S;
var mysuffix:S;
var len:I;
  len = Length(MyStr) - Length(suffix);
  mysuffix =  Substr(Mystr,len+1,255);
  if (mysuffix = suffix):
     return Substr(Mystr, 1, len);
    else
     return MyStr;
  fi;
end;

Proc РасчТабном;
var i,j:I;
var tmp1, tmp2:S;
for i=1 to LengthofArray(ПризнСотр) do
  if ПризнСотр[i]="Итого за месяц":
     ТабНом[i]="x";
    |ТабНомСуффикс = "":
     ТабНом[i]=Substr(ПризнСотр[i],3,255);
    else
     tmp1 = Substr(ПризнСотр[i],3,255);
     tmp2 = tmp1;
     j=1;
     while j <= WordsCount(ТабНомСуффикс,";") and tmp2=tmp1 do
	 tmp2 = DropSuffix(tmp1, ExtractWord(j, ТабНомСуффикс, ";"));
	 j = j + 1;
     od;
     ТабНом[i] = tmp2;
  fi;
od;

end;

Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(ТабНом);
 ClearVariable(МесКре);
 ClearVariable(ПВ);
 ClearVariable(СумКре);
 ClearVariable(Сч);
 ClearVariable(РКО);
 ClearVariable(СумДеб1);
 ClearVariable(СумДеб2);
 ClearVariable(СумДеб3);
 ClearVariable(СумДеб4);
 ClearVariable(СумДеб5);
 ClearVariable(СумДеб6);
 ClearVariable(СумДеб7);
 ClearVariable(СумДеб8);
 ClearVariable(СумДеб9);
 ClearVariable(СумДеб10);
 ClearVariable(СумДеб11);
 ClearVariable(СумДеб12);
 ClearVariable(СумДебОст);
 ClearVariable(ПризнСотр);
 ClearVariable(ПризнПер);
 ClearVariable(ПризнПВ);
 ClearVariable(ИтогСумКре);
 ClearVariable(ИтогСумДеб);
 ClearVariable(ИтогСумДебМес);
 ClearVariable(ОстН);
 ClearVariable(ОстК);
 ClearVariable(Key0);
 ClearVariable(KeyCre);
 ClearVariable(IdxCre);
 ClearVariable(KeySaldo);
 ClearVariable(KeyDeb);
 ClearVariable(BufСум);
 ClearVariable(BufРКО);
 ClearVariable(BufПризнПер);
end;

Proc НастрУмолч;
 УслСч=Def_УслСч;
 УслАн=Def_УслАн;
 СправСотр=Def_СправСотр;
 СправПВ=Def_СправПВ;
end;

Proc Настр(aСохр:L);
var tmp:S;
var Flag:L;
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать("ОТЧЕТЫ.РЕГИСТРЫ.КНИГА_УЧЕТА_ДЕПОНЕНТ",0,0,"",НастрGUID):
    Раб.Настр.Добавить("УслСч","S");
    Раб.Настр.Добавить("УслАн","S");
    Раб.Настр.Добавить("СправСотр","S");
    Раб.Настр.Добавить("fТабНом","L");
    Раб.Настр.Добавить("ТабНомСуффикс","S");
    Раб.Настр.Добавить("СправПВ","S");
    Раб.Настр.Добавить("fПериод","L");
    if aСохр: 
       Раб.Настр.Сохранить; 
      else 
       НастрGUID=Раб.Настр.Загрузить("","");
       if НастрGUID="":
	  НастрУмолч;
       fi;
    fi;
 fi;
end;

Proc ЗакрытьНастр;
 УпрНастр=False;
 btnРасчет.Visible=True;
 btnНастр.Visible=True;
 btnПечать.Visible=True;
 btnЗакрыть.Visible=True;
 cbОст.Visible=True;
 Настр(true);
end;

Proc ОткрытьНастр;
 УпрНастр=True;
 Template.Field="Справ";
 Template.Field="УслСч";
 btnРасчет.Visible=False;
 btnНастр.Visible=False;
 btnПечать.Visible=False;
 btnЗакрыть.Visible=False;
 cbОст.Visible=False;
 Настр(False);
end;

Func Оператор:S;
var n:i;
 ClearVariable(Buf);
 Buf[1]="И";
 Buf[2]="ИЛИ";
 Buf[3]="И ИСКЛЮЧИТЬ";
 n=Alternate("Выбор оператора",Buf,20,1,12);
 if n=1: ^"&";
   |n=2: ^"|";
   |n=3: ^"&~";
 fi;
 ^"";
end;

Func Объединить(Value1:s; Value2:s):S;
var z:s;
 if not Value1="": z=Оператор; else z=""; fi;
 ^Раб.Бюджет2005.Объединить(Value1,Value2,z);
end;

Proc ЗаполнитьРекв(Rec: Record);
 if Rec=nil: Rec=Раб.Бюджет2005.НашРекв; fi;
 Учреждение=GetCardFieldS('Контрагент',Rec,"ПолнИмя");
 ОКПО=GetCardFieldS('Контрагент',Rec,"ОКПО");
end;

Func DateToYYMM(vДата:D):S;
var YY,MM:I;
 YY=Year(vДата);
 MM=Mon(vДата);
 ^SubStr(Str(YY),3,2)+"."+if(MM<10,"0","")+Str(MM);
end;

Func ВзятьДокумент(OWA:I; t:i; vДок:S):S;
var Rec:Record;
var tmp:s;
var n,w,wc:i;
 if not TransCardFile(t)="РАСХОРД": ^vДок; fi;
 Rec=TransRecord(t); if Rec=nil: ^vДок; fi;
 n=GetRecordNumber(OWA,Rec); if n=0:^vДок; fi;
 tmp=GetFieldS(OWA,n,"НОМЕРБУМ");
 wc=WordsCount(vДок,"; ");
 for w=1..wc do
  if ExtractWord(w,vДок,"; ")=tmp: ^vДок; fi;
 od;
 ^Раб.Бюджет2005.Объединить(vДок,tmp,"; ");
end;

Proc ПоискКре (YYMM:S; Key:S; b:I);
var z:i;
 z=SearchInArray(KeyCre,Key,False,b);
 if z=-1: ppp=-1; Exit; fi;
 if YYMM<SubStr(МесКре[IdxCre[z]],4,2)+"."+SubStr(МесКре[IdxCre[z]],1,2): --проверяем если дата дебета окажется раньше даты кредита
    ПоискКре(YYMM,Key,z+1);
   else
    ppp=IdxCre[z];
    DeleteFromArray(KeyCre,z);
    DeleteFromArray(IdxCre,z);
 fi;
end;

Proc РасчетИтогов;
var Iter:I;
var StoreМесКре:S;
var СумКреМес,СумДебМес1,СумДебМес2,СумДебМес3,СумДебМес4,СумДебМес5,СумДебМес6,СумДебМес7,СумДебМес8,СумДебМес9,СумДебМес10,СумДебМес11,СумДебМес12:N;
var tmp:S;
 Iter=1;
 StoreМесКре=МесКре[Iter];
 СумКреМес=0; СумДебМес1=0; СумДебМес2=0; СумДебМес3=0; СумДебМес4=0; СумДебМес5=0; СумДебМес6=0; СумДебМес7=0; СумДебМес8=0; СумДебМес9=0; СумДебМес10=0; СумДебМес11=0; СумДебМес12=0;
 While Iter<=Упр+1 do
  if StoreМесКре=МесКре[Iter]:
     СумКреМес=СумКреМес+СумКре[Iter];
     СумДебМес1 =СумДебМес1 +СумДеб1 [Iter];
     СумДебМес2 =СумДебМес2 +СумДеб2 [Iter];
     СумДебМес3 =СумДебМес3 +СумДеб3 [Iter];
     СумДебМес4 =СумДебМес4 +СумДеб4 [Iter];
     СумДебМес5 =СумДебМес5 +СумДеб5 [Iter];
     СумДебМес6 =СумДебМес6 +СумДеб6 [Iter];
     СумДебМес7 =СумДебМес7 +СумДеб7 [Iter];
     СумДебМес8 =СумДебМес8 +СумДеб8 [Iter];
     СумДебМес9 =СумДебМес9 +СумДеб9 [Iter];
     СумДебМес10=СумДебМес10+СумДеб10[Iter];
     СумДебМес11=СумДебМес11+СумДеб11[Iter];
     СумДебМес12=СумДебМес12+СумДеб12[Iter];
--     if Length(Сч[Iter])=29: МесКре[Iter]="?"; fi;
    else
     tmp=StoreМесКре;
     StoreМесКре=МесКре[Iter];
     InsertFrame(Упр,Iter);
--     ТабНом[Iter]="x";
     МесКре[Iter]=tmp;
     ПризнПВ[Iter]="x";
     Сч[Iter]="x";
     РКО[Iter]="x";
     ПризнСотр[Iter]="Итого за месяц";
     СумКре[Iter]=СумКреМес;
     СумДеб1 [Iter]=СумДебМес1;
     СумДеб2 [Iter]=СумДебМес2;
     СумДеб3 [Iter]=СумДебМес3;
     СумДеб4 [Iter]=СумДебМес4;
     СумДеб5 [Iter]=СумДебМес5;
     СумДеб6 [Iter]=СумДебМес6;
     СумДеб7 [Iter]=СумДебМес7;
     СумДеб8 [Iter]=СумДебМес8;
     СумДеб9 [Iter]=СумДебМес9;
     СумДеб10[Iter]=СумДебМес10;
     СумДеб11[Iter]=СумДебМес11;
     СумДеб12[Iter]=СумДебМес12;
     СумКреМес=0; СумДебМес1=0; СумДебМес2=0; СумДебМес3=0; СумДебМес4=0; СумДебМес5=0; СумДебМес6=0; СумДебМес7=0; СумДебМес8=0; СумДебМес9=0; СумДебМес10=0; СумДебМес11=0; СумДебМес12=0;

  fi;
  Iter=Iter+1;
 od;

end;

Func ЗаполнитьПВ (Val: S; Sp: S; Mode:I):S;
var ww,w:i;
var Sgn,Res,Name,tmp:S;
 Res="";
 ww=WordsCount(Val,Sp);
 for w=1..ww do
  Sgn=ExtractWord(w,Val,Sp);
  Name=Name_A(Sgn);
  if Name=" " or Name="":  Name=Sgn; fi;
  if Mode=1: tmp=Name;
    |Mode=2: tmp=Name+" ("+Sgn+")";
    |Mode=3: tmp=Sgn+" ("+Name+")";
    |True: tmp=SubStr(Sgn,Pos(".",Sgn)+1,255);
  fi;
  Res=Res+" "+tmp;
 od;
 ^SubStr(Res,2,255);
end;


func ОпределитьПериод:I;
   var p:I;
	--за месяц
       if (day(ДН) = 1 and day(ДК) = 1 and mon(ДК) = mon(ДН)+1) or (mon(ДН) = mon(ДК) and year(ДН) = year(ДК)):
	    p=2;
       elsif (mon(ДН) = 1 and mon(ДК) = 12) or ((mon(ДН) = 1 and mon(ДК) = 1) and year(ДН)<>year(ДК)):
	    p=1;
       else
	    p=3;
       fi;
   ^p;
end;

proc РасчетИтогов_(УслАн_:s);

var dn,dk,mn,mk,y:i;
var i:i;
var ДК_:D;
var пер:i;

      dn=day(ДН);
      dk=day(ДК);
      mn=mon(ДН);
      mk=mon(ДК);
      y=year(ДН);

--     ИтогСумДеб[1]  = SumOfArray(СумДеб1);
--     ИтогСумДеб[2]  = SumOfArray(СумДеб2);
--     ИтогСумДеб[3]  = SumOfArray(СумДеб3);
--     ИтогСумДеб[4]  = SumOfArray(СумДеб4);
--     ИтогСумДеб[5]  = SumOfArray(СумДеб5);
--     ИтогСумДеб[6]  = SumOfArray(СумДеб6);
--     ИтогСумДеб[7]  = SumOfArray(СумДеб7);
--     ИтогСумДеб[8]  = SumOfArray(СумДеб8);
--     ИтогСумДеб[9]  = SumOfArray(СумДеб9);
--     ИтогСумДеб[10] = SumOfArray(СумДеб10);
--     ИтогСумДеб[11] = SumOfArray(СумДеб11);
--     ИтогСумДеб[12] = SumOfArray(СумДеб12);

     ИтогСумДебМесОст  = SumOfArray(СумДебОст);
     ИтогСумКре     = SumOfArray(СумКре);
     ИтогСумДебОст = -Saldo(УслСч+"{"+УслАн_+"}",dat(31,12,year(ДК)));
     ИтогСумМесКре = -Turn("-"+УслСч+"{"+УслАн_+"}",ДН,ДК);

     пер = ОпределитьПериод;
     s.visible = true;
     if пер = 3:  --произвольный период

	 ИтогСумДебМес[mn] = Turn("+"+УслСч+"{"+УслАн_+"}",ДН,dat(1,mn+1,y));
	 for i=mn+1..mk-1 do
	     ИтогСумДебМес[i] = Turn("+"+УслСч+"{"+УслАн_+"}",dat(1,i,y),dat(1,i+1,y));
	 od;
	 ИтогСумДебМес[mk] = Turn("+"+УслСч+"{"+УслАн_+"}",dat(1,mk,y),dat(dk,mk,y));
	 период = "Итого за период";
     fi;
     if пер = 2:
	  ИтогСумДебМес[mon(ДН)] =Turn("+"+УслСч+"{"+УслАн_+"}",ДН,ДК);
	   период = "Итого за месяц";
     fi;
     if пер = 1:
     --скрываем эту строку
     s.visible = false;
     fi;

     for i=1..11 do
	ИтогСумДеб[i] = Turn("+"+УслСч+"{"+УслАн_+"}",dat(1,i,y),dat(1,i+1,y));
     od;
	ИтогСумДеб[12] = Turn("+"+УслСч+"{"+УслАн_+"}",dat(1,12,y),dat(31,12,y));


end;

proc Расчет_;
	var t,z,n,nn,Iter,OWA,i:i;
	var tName: s;

	var s:s;
	var ДН_деп:D;
	var УслАн_,tСч,tПризн,Key_,ПризнСотр_,ПризнПер_,ПризнПВ_,m,УслАн_1:S;
	var ДК_,tДата:D;
	var tСум:N;
	var tmp,tmp1: S;
	Refresh(False);
	Очистить;
	if ДК=1.1.100: if ДН>ToDay: ДК_=ДН+1; else ДК_=ToDay; fi; else ДК_=ДК; fi;
	УслАн_=if(УслАн="",УслАн,"("+УслАн+")");
	УслАн_=Раб.Бюджет2005.Объединить(УслАн_,СправСотр,"&");
	УслАн_=Раб.Бюджет2005.Объединить(УслАн_,if(СправПВ="","","("+СправПВ+")"),"&");
	УслАн_=Раб.Бюджет2005.Объединить(УслАн_,if(УслАнДоп="",УслАнДоп,"("+УслАнДоп+")"),"&");
	ShowProgress((ДК_-ДН)*2,"Расчет...");
	ОстН=-Saldo(УслСч+"{"+УслАн_+"}",ДН);
	ОстК=-Saldo(УслСч+"{"+УслАн_+"}",ДК_);
	--расчет депонирования
	ДН_деп = dat(day(ДН),mon(ДН),year(ДН)-3);
	OWA=OpenWorkArea("РАСХОРД","","Д>="+DateToString(ДН_деп)+" and Д<"+DateToString(ДК_));
	Try
	for Transaction t="-"+УслСч+"{"+УслАн_+"}",ДН_деп,ДК_ do

		tДата=TransDate(t);
		ProgressPos((ДК_-ДН_деп)-(ДК_-tДата));
		tСч=TransCre(t);
		tПризн=TransSigns(t);
		tСум=TransSum(t);

		ПризнСотр_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ",СправСотр,"");
		if not СправПВ="":
			ПризнПВ_=Раб.Бюджет2005.ВзятьСловаИзНабораПоМаске(tПризн," ",СправПВ,"|");
			ПризнПВ_=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(ПризнПВ_," ","&");
		else
		ПризнПВ_="";
		fi;

		Key_= ПризнСотр_+" "+Раб.Бюджет2005.ВзятьКодСчета(tСч,"","АН",True)+" "+ПризнПВ_;
		z=SearchInArray(KeySaldo,Key_,True);
		if z=-1:
		   InsertInArraySort(KeySaldo,Key_);
		fi;
		if tДата>=ДН:
		z=SearchInArray(KeyCre,Key_,True);
		if z=-1:
			z=InsertInArraySort(KeyCre,Key_);
			InsertFrame(Упр,z);
			УслАн_1 = Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(УслАн_,"&",ПризнСотр_,"Ф.*","");
			МесКре[z]=DateToString(tДата);
			МесКре[z]=SubStr(МесКре[z],4,2)+"."+SubStr(МесКре[z],9,2);
			СумКре[z]=tСум;
			Сч[z]=EXtractWords(1,7,tСч,".");
			ПризнСотр[z]=ПризнСотр_;
			ПризнПер[z]=ПризнПер_;
			ПризнПВ[z]=ПризнПВ_;
			ПВ[z]=ЗаполнитьПВ(ПризнПВ_,"&",Гр4);
		else

			СумКре[z] = СумКре[z] + tСум;
			if  МесКре[z] <>  SubStr(DateToString(tДата),4,2)+"."+SubStr(DateToString(tДата),9,2):
			    МесКре[z] = МесКре[z] + "; "+SubStr(DateToString(tДата),4,2)+"."+SubStr(DateToString(tДата),9,2);
			fi;
		fi;
		fi;

	od;
      --расчет остатков по депонированию на дату открытия книги
 for i=1 to LengthofArray(KeySaldo) do
	z=SearchInArray(KeyCre,KeySaldo[i],True);
	if (-Saldo( ExtractWord(2,KeySaldo[i]," ")+".*"+"{"+ExtractWord(1,KeySaldo[i]," ")+"}",ДН)) <> 0:

	  if z = -1:
			z=InsertInArraySort(KeyCre,KeySaldo[i]);
			InsertFrame(Упр,z);
			СумКре[z]=-Saldo( ExtractWord(2,KeySaldo[i]," ")+".*"+"{"+ExtractWord(1,KeySaldo[i]," ")+"}",ДН);
			Сч[z]=ExtractWord(2,KeySaldo[i]," ");
			ПризнСотр[z]=ExtractWord(1,KeySaldo[i]," ");
	  else
			СумКре[z] =  СумКре[z] + (-Saldo(ExtractWord(2,KeySaldo[i]," ")+".*{"+ExtractWord(1,KeySaldo[i]," ")+"}",ДН));
	  fi;
       fi;
       -- расчет выдачи денежных средств
       for Transaction t="+"+ExtractWord(2,KeySaldo[i]," ")+".*{"+ExtractWord(1,KeySaldo[i]," ")+"}",ДН,ДК_ do
		       tДата=TransDate(t);
		       tСч=TransDeb(t);
		       tПризн=TransSigns(t);
		       tСум=TransSum(t);
		       ПризнПер_="";
		       if fПериод then ПризнПер_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","ПЕРИОД.*",""); fi;
		       ПризнСотр_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ",СправСотр,"");
			if not СправПВ="":
				 ПризнПВ_=Раб.Бюджет2005.ВзятьСловаИзНабораПоМаске(tПризн," ",СправПВ,"|");
				 ПризнПВ_=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(ПризнПВ_," ","&");
			else
				 ПризнПВ_="";
			fi;
			m=Str(Mon(tДата));
			tName = "СумДеб"+m+"["+str(z)+"]";
			PutVariableN(tName,GetVariableN(tName)+tСум);
			РКО[z] =ВзятьДокумент(OWA,t,s)+"; "+РКО[z];
			ProgressPos((ДК_-ДН)*2-(ДК_-tДата));

      od;
    if z<>-1: PutVariableN("СумДебОст["+Str(z)+"]",-Saldo(ExtractWord(2,KeySaldo[i]," ")+".*{"+ExtractWord(1,KeySaldo[i]," ")+"}",ДК_));fi;

 od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 РасчетИтогов_(УслАн_);
if fТабНом then РасчТабНом; fi;
Message("Расчет завершен");
end;



Proc Расчет;
var t,z,n,nn,Iter,OWA:i;
var УслАн_,tСч,tПризн,Key_,ПризнСотр_,ПризнПер_,ПризнПВ_,m:S;
var ДК_,tДата:D;
var tСум:N;
 Refresh(False);
 Очистить;
 if ДК=1.1.100: if ДН>ToDay: ДК_=ДН+1; else ДК_=ToDay; fi; else ДК_=ДК; fi;
 УслАн_=if(УслАн="",УслАн,"("+УслАн+")");
 УслАн_=Раб.Бюджет2005.Объединить(УслАн_,СправСотр,"&");
 УслАн_=Раб.Бюджет2005.Объединить(УслАн_,if(СправПВ="","","("+СправПВ+")"),"&");
 УслАн_=Раб.Бюджет2005.Объединить(УслАн_,if(УслАнДоп="",УслАнДоп,"("+УслАнДоп+")"),"&");
 ShowProgress((ДК_-ДН)*2,"Расчет...");
 ОстН=-Saldo(УслСч+"{"+УслАн_+"}",ДН);
 ОстК=-Saldo(УслСч+"{"+УслАн_+"}",ДК_);
 ИтогСумДебОст=-Saldo(УслСч+"{"+УслАн_+"}",ДК_);
 OWA=OpenWorkArea("РАСХОРД","","Д>="+DateToString(ДН)+" and Д<"+DateToString(ДК_));
 Try
  for Transaction t="-"+УслСч+"{"+УслАн_+"}",ДН,ДК_ do
   tДата=TransDate(t);
   ProgressPos((ДК_-ДН)-(ДК_-tДата));
   tСч=TransCre(t);
   tПризн=TransSigns(t);
   tСум=TransSum(t);
   ПризнПер_="";
   if fПериод then ПризнПер_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","ПЕРИОД.*",""); fi;
   if ПризнПер_<>"" then
      if WordsCount(ПризнПер_,".")=4 then
	 tДата=Dat(1,Int(ExtractWord(4,ПризнПер_,".")),Int(ExtractWord(2,ПризнПер_,".")));
	|WordsCount(ПризнПер_,".")=3 then
	 if ExtractWord(3,ПризнПер_,".")="1" then
	    tДата=Dat(1,1,Int(ExtractWord(2,ПризнПер_,".")));
	   |ExtractWord(3,ПризнПер_,".")="2" then
	    tДата=Dat(1,4,Int(ExtractWord(2,ПризнПер_,".")));
	   |ExtractWord(3,ПризнПер_,".")="3" then
	    tДата=Dat(1,7,Int(ExtractWord(2,ПризнПер_,".")));
	   |ExtractWord(3,ПризнПер_,".")="4" then
	    tДата=Dat(1,10,Int(ExtractWord(2,ПризнПер_,".")));
	 fi;
	else
	 tДата=Dat(1,1,Int(ExtractWord(2,ПризнПер_,".")));
      fi;
   fi;
   ПризнСотр_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ",СправСотр,"");
   if not СправПВ="": 
      ПризнПВ_=Раб.Бюджет2005.ВзятьСловаИзНабораПоМаске(tПризн," ",СправПВ,"|"); 
      ПризнПВ_=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(ПризнПВ_," ","&");
     else 
      ПризнПВ_=""; 
   fi;
  -- Key_=DateToYYMM(tДата)+" "+ПризнСотр_+" "+Раб.Бюджет2005.ВзятьКодСчета(tСч,"","АН",True)+" "+ПризнПВ_;
   Key_= ПризнСотр_+" "+Раб.Бюджет2005.ВзятьКодСчета(tСч,"","АН",True)+" "+ПризнПВ_;
   z=SearchInArray(KeyCre,Key_,True);
   if z=-1:
      z=InsertInArraySort(KeyCre,Key_);
      InsertFrame(Упр,z);
      МесКре[z]=DateToString(tДата);
      МесКре[z]=SubStr(МесКре[z],4,2)+"."+SubStr(МесКре[z],9,2);
      СумКре[z]=tСум;
      Сч[z]=EXtractWords(1,7,tСч,".");
      ПризнСотр[z]=ПризнСотр_;
      ПризнПер[z]=ПризнПер_;
      ПризнПВ[z]=ПризнПВ_;
      ПВ[z]=ЗаполнитьПВ(ПризнПВ_,"&",Гр4);
     else
      СумКре[z]=СумКре[z]+tСум;
   fi;
   ИтогСумКре=ИтогСумКре+tСум;
  od;
  --формируем ключ поиска (нужно отбросит дату из ключа и добавить сумму в конец)
  nn=LengthOfArray(KeyCre);
  for n=1..nn do
   Key0[n]=KeyCre[n];
   KeyCre[n]=ExtractWords(2,3,KeyCre[n]," ")+" "+Str(СумКре[n],4);
   IdxCre[n]=n; --запоминаем позиции
  od;
  --Расчет выдачи
  --вначале отбираем проводки
  ShowProgress((ДК_-ДН)*2,"Расчет...");
  ProgressPos(ДК_-ДН);
  for Transaction t="+"+УслСч+"{"+УслАн_+"}",ДН,ДК_ do
   tДата=TransDate(t);
   tСч=TransDeb(t);
   tПризн=TransSigns(t);
   tСум=TransSum(t);
   ПризнПер_="";
   if fПериод then ПризнПер_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","ПЕРИОД.*",""); fi;
   ПризнСотр_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ",СправСотр,"");
   if not СправПВ="": 
      ПризнПВ_=Раб.Бюджет2005.ВзятьСловаИзНабораПоМаске(tПризн," ",СправПВ,"|"); 
      ПризнПВ_=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(ПризнПВ_," ","&");
     else 
      ПризнПВ_=""; 
   fi;
   Key_=ПризнСотр_+" "+Раб.Бюджет2005.ВзятьКодСчета(tСч,"","АН",True)+" "+ПризнПВ_+" "+Str(tСум,4);
   ПоискКре(DateToYYMM(tДата),Key_,1);
   Iter=ppp;
   if not Iter=-1: --ищем совпадение по сумме проводки
      РКО[Iter]=ВзятьДокумент(OWA,t,"");
      m=Str(Mon(tДата));
      PutVariableN("СумДеб"+m+"["+Str(Iter)+"]",tСум);
      PutVariableN("ИтогСумДеб"+"["+m+"]",GetVariableN("ИтогСумДеб"+"["+m+"]")+tСум);
     else --если мы не нашли ни одной суммы по провдке, то объеденяем их
      Key_=DateToYYMM(tДата)+" "+ПризнСотр_+" "+Раб.Бюджет2005.ВзятьКодСчета(tСч,"","АН",True)+" "+ПризнПВ_;
      z=SearchInArray(KeyDeb,Key_,True);
      if z=-1:
	 z=InsertInArraySort(KeyDeb,Key_);
	 InsertInArray(BufСум,z,tСум);
	 InsertInArray(BufРКО,z,"");
	 InsertInArray(BufПризнПер,z,ПризнПер_);
	else
	 BufСум[z]=BufСум[z]+tСум;
      fi;
      BufРКО[z]=ВзятьДокумент(OWA,t,BufРКО[z]);
   fi;
   ProgressPos((ДК_-ДН)*2-(ДК_-tДата));
  od;
  --Совмещяем кредитовую часть с дебетовой (объеденнной по суммам)
  n=1;
  While not KeyDeb[n]="" do
   Key_=ExtractWords(2,3,KeyDeb[n]," ")+" "+Str(BufСум[n],4);
   ПоискКре(ExtractWord(1,KeyDeb[n]," "),Key_,1);
   Iter=ppp;
   if not Iter=-1:
      РКО[Iter]=BufРКО[n];
      m=SubStr(ExtractWord(1,KeyDeb[n]," "),4,2);
      m=Str(Int(m));
      PutVariableN("СумДеб"+m+"["+Str(Iter)+"]",BufСум[n]);
      PutVariableN("ИтогСумДеб"+"["+m+"]",GetVariableN("ИтогСумДеб"+"["+m+"]")+BufСум[n]);
      PutVariableN("СумДебОст["+Str(Iter)+"]",-Saldo(УслСч+"{"+ПризнСотр_+"}",StringToDate("1."+str(StringToNumeric(m)+1)+".15")));

      DeleteFromArray(KeyDeb,n);
      DeleteFromArray(BufСум,n);
      DeleteFromArray(BufРКО,n);
      DeleteFromArray(BufПризнПер,n);
     else
      n=n+1;
   fi;
  od;
  --Добавляем в отчет дебетовую часть, несовмещенную по различным причинам с кредитовой частью
  nn=LengthOfArray(KeyDeb);
  for n=1..nn do
   m=SubStr(ExtractWord(1,KeyDeb[n]," "),4,2);
   m=Str(Int(m));
   if BufПризнПер[n]<>"" then
      if WordsCount(BufПризнПер[n],".")=4 then
	 tДата=Dat(1,Int(ExtractWord(4,BufПризнПер[n],".")),Int(ExtractWord(2,BufПризнПер[n],".")));
	|WordsCount(BufПризнПер[n],".")=3 then
	 if ExtractWord(3,BufПризнПер[n],".")="1" then
	    tДата=Dat(1,1,Int(ExtractWord(2,BufПризнПер[n],".")));
	   |ExtractWord(3,BufПризнПер[n],".")="2" then
	    tДата=Dat(1,4,Int(ExtractWord(2,BufПризнПер[n],".")));
	   |ExtractWord(3,BufПризнПер[n],".")="3" then
	    tДата=Dat(1,7,Int(ExtractWord(2,BufПризнПер[n],".")));
	   |ExtractWord(3,BufПризнПер[n],".")="4" then
	    tДата=Dat(1,10,Int(ExtractWord(2,BufПризнПер[n],".")));
	 fi;
	else
	 tДата=Dat(1,1,Int(ExtractWord(2,BufПризнПер[n],".")));
      fi;
      KeyDeb[n]=DateToYYMM(tДата)+Substr(KeyDeb[n],6,255);
   fi;
   z=InsertInArraySort(Key0,KeyDeb[n]);

   InsertFrame(Упр,Упр+1);
   ПризнПер[z]=BufПризнПер[n];
   ПризнСотр[z]=ExtractWord(2,KeyDeb[n]," ");
   if ПризнПер[z]<>"" then
      МесКре[z]=DateToString(tДата);
      МесКре[z]=SubStr(МесКре[z],4,2)+"."+SubStr(МесКре[z],9,2);
     else
      МесКре[z]=ExtractWord(1,KeyDeb[n]," ");
      МесКре[z]=SubStr(МесКре[z],4,2)+"."+SubStr(МесКре[z],1,2);
   fi;
   ПризнПВ[z]=if(СправПВ="","",ExtractWord(4,KeyDeb[n]," "));
   ПризнПер[z]=BufПризнПер[n];
   ПВ[z]=ЗаполнитьПВ(ПризнПВ[z],"&",Гр4);
   Сч[z]=ExtractWord(3,KeyDeb[n]," ");
   РКО[z]=BufРКО[n];
--   m=SubStr(ExtractWord(1,KeyDeb[n]," "),4,2);
--   m=Str(Int(m));
   PutVariableN("СумДеб"+m+"["+Str(z)+"]",BufСум[n]);
   PutVariableN("ИтогСумДеб"+"["+m+"]",GetVariableN("ИтогСумДеб"+"["+m+"]")+BufСум[n]);
   PutVariableN("СумДебОст["+Str(z)+"]",-Saldo(УслСч+"{"+ПризнСотр[z]+"}",StringToDate("1."+str(StringToNumeric(m)+1)+".15")));
  od;
  РасчетИтогов;
  ProgressPos((ДК_-ДН)*2);
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 Message("Расчет завершен");
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
Proc ВосстанНастр_OnClick(Row: Integer; Col: Integer; Double: Logical);
 if EnqOkCancel("Восстановить значения по умолчанию?")=cmCancel: Exit; fi;
 НастрУмолч;
 Message("Значение по умолчанию восстановлены");
end;

Proc ЗакрытьНастр_OnClick(Row: Integer; Col: Integer; Double: Logical);
 ЗакрытьНастр;
end;

Func УслСч_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var z:N;
 Try
  z=Saldo(Value,1.1.100);
 Except
  Raise;
  ^False;
 end;
 Return True;
end;

Func УслАн_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var z:N;
 Try
  z=Saldo("{"+Value+"}",1.1.100);
 Except
  Raise;
  ^False;
 end;
 Return True;
end;

Func УслСч_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp,Field:s;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 tmp=Раб.КБК.Список("","","СЧ9 ВД+? ИГ");
 if tmp="": ^Cur; fi;
 if Match(tmp,"?."): tmp="*."+tmp+"???.??.???";
   |Match(tmp,"?.???."): tmp="*."+tmp+"??.???";
   |Match(tmp,"?.???.??."): tmp="*."+tmp+"???";
   |True: tmp="*."+tmp;
 fi;
 tmp=SubStr(tmp,1,11)+Раб.Бюджет2005.КОСГУВМаску(SubStr(tmp,12,3),"*");
 if not SubStr(tmp,Length(tmp),1)="*": tmp=tmp+"*"; fi;
 PutVariableS(Field,Объединить(GetVariableS(Field),tmp));
 Return  Cur;
end;

Func УслАн_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp,Field:s;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 tmp=Раб.Бюджет2005.СписокСправ(УслСч,0,"");
 if not tmp="": tmp="("+tmp+")|~*.*"; else tmp="*"; fi;
 tmp=AnaElection(tmp);
 if tmp="": ^Cur; fi;
 PutVariableS(Field,Объединить(GetVariableS(Field),tmp));
 if Field="АнУслДоп": Очистить; fi;
 Return  Cur;
end;

Func flag_OnEnter(FieldName: String; Iter: Integer): logical;
  var t:L;
  t = GetVariableL(FieldName);
  t = not t;
  PutVariableL(FieldName,t);

  Return False	;
end;

Func СправСотр_OnEnter(FieldName: String; Iter: Integer): logical;
var n:I;
var tmp:S;
 if УслСч="": Message("Укажите условие отбора депонетов",mtError); Template.Field="УслСч"; ^False; fi;
 Раб.Бюджет2005.СписокСправ(УслСч,0,"");
 CopyArray(Раб.Бюджет2005.BufСправ,Buf);
 n=Alternate("Аналитические справочники",Buf,-1,1,12);
 if n=0: ^False; fi;
 tmp=SubStr(Buf[n],1,Pos(" --",Buf[n])-1);
 if tmp=СправПВ: Message("Справочник "+tmp+" уже выбран как аналитический справочник платежной ведомости",mtError); Template.Field="СправПВ"; ^False; fi;
 СправСотр=SubStr(Buf[n],1,Pos(" --",Buf[n])-1);
 Return False;
end;

Func СправПВ_OnEnter(FieldName: String; Iter: Integer): logical;
var n:I;
var tmp:S;
 if УслСч="": Message("Укажите условие отбора депонетов",mtError); Template.Field="УслСч"; ^False; fi;
 Раб.Бюджет2005.СписокСправ(УслСч,0,"");
 CopyArray(Раб.Бюджет2005.BufСправ,Buf);
 n=Alternate("Аналитические справочники",Buf,-1,1,12);
 if n=0: ^False; fi;
 tmp=SubStr(Buf[n],1,Pos(" --",Buf[n])-1);
 if tmp=СправСотр: Message("Справочник "+tmp+" уже выбран как аналитический справочник сотрудника",mtError); Template.Field="СправСотр"; ^False; fi;
 if WordInString(tmp,СправПВ,"|"): Message("Повторный ввод сравочника "+tmp,mtError); ^False; fi;
 СправПВ=Раб.Бюджет2005.Объединить(СправПВ,tmp,"|");
 Return False;
end;

Proc СправПВ_OnExit(FieldName: String; Iter: Integer);
 СправПВ=Раб.Бюджет2005.УдалитьСловоИзНабора_Диалог(СправПВ,"|");
end;

Func Дата_onLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:D;
var Field:S;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 tmp=Calendar;
 if tmp=1.1.100: ^Cur; fi;
 PutVariableD(Field,tmp);
 Return Cur;
end;

Func Учреждение_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 Rec=OpenCardFile("Контрагент","НАШЕ",nil,crdRecordOnly);
 if Rec=nil: ^False; fi;
 Учреждение=GetCardFieldS("Контрагент",Rec,"КорИмя");
 ОКПО=GetCardFieldS("Контрагент",Rec,"ОКПО");
 Return False;
end;

Func НаимПодр_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=AnaElection("П!");
 if tmp="": ^False; fi;
 ПризнПодр=tmp;
 Очистить;
 ^False;
end;

Proc НаимПодр_OnExit(FieldName: String; Iter: Integer);
 ПризнПодр="";
 Очистить;
end;

Proc УслАнДоп_OnExit(FieldName: String; Iter: Integer);
 Очистить;
end;

Func Гр2_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n:I;
 Template.HideEditor(False);
 ClearVariable(Buf);
 Buf[1]="Аналитический признак";
 Buf[2]="Наименование";
 Buf[3]="Наименование (Аналитический признак)";
 Buf[4]="Аналитический признак (Наименование)";
 n=Alternate("Режим показа элемента колонки",Buf);
 if n=0: ^Cur; fi;
 Гр2=n-1;
 Return Cur;
end;

Func Гр4_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n:i;
 Template.HideEditor(False);
 ClearVariable(Buf);
 Buf[1]="Код признака";
 Buf[2]="Наименование";
 Buf[3]="Наименование (Код признака)";
 Buf[4]="Код признака (Наименование)";
 n=Alternate("Режим показа элемента колонки",Buf);
 if n=0: ^Cur; fi;
 Гр4=n-1;
 Message("Для вступления измений в силу необходимо выполнить расчет",mtWarning);
 Return Cur;
end;

Func СумКре_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var УслАн_:S;
var ДН_,ДК_:D;
var Iter:I;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 if МесКре[Iter]="?" or Сч[Iter]="x": Message("Нет данных для расшифровки",mtError); ^Cur; fi;
 УслАн_=if(УслАн="",УслАн,"("+УслАн+")");
 УслАн_=Раб.Бюджет2005.Объединить(УслАн_,if(УслАнДоп="",УслАнДоп,"("+УслАнДоп+")"),"&");
 УслАн_=Раб.Бюджет2005.Объединить(УслАн_,ПризнСотр[Iter],"&");
 УслАн_=Раб.Бюджет2005.Объединить(УслАн_,ПризнПВ[Iter],"&");
 if ПризнПер[Iter]="" then
    ДН_=Dat(1,Int(SubStr(МесКре[Iter],1,2)),Int(SubStr(МесКре[Iter],4,2)));
  --  ДК_=if(Mon(ДН_)=12,Dat(1,1,Year(ДН_)+1),Dat(1,Mon(ДН_)+1,Year(ДН_)));
    ДК_ = ДК;
   else
    ДН_=ДН;
    if ДК=1.1.100: if ДН>ToDay: ДК_=ДН+1; else ДК_=ToDay; fi; else ДК_=ДК; fi;
    УслАн_=Раб.Бюджет2005.Объединить(УслАн_,ПризнПер[Iter],"&");
 fi;
 Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."001"',ДН_,ДК_,"-"+if(Length(Сч[Iter])=29,Сч[Iter]+".*",Сч[Iter]),УслАн_);
 Return Cur;
end;

Func РКО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var УслАн_,УслСч_:S;
var ДН_,ДК_:D;
var Iter,n,z:I;
var tmp: I;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 if МесКре[Iter]="x": Message("Нет данных для расшифровки",mtError); ^Cur; fi;
 ClearVariable(Buf);
 z=0;
 for n=1..12 do
  if not Round(GetVariableN("СумДеб"+Str(n)+"["+Str(Iter)+"]"),4)=0:
     z=z+1;
     Buf[z]=Str(n)+"."+Месяц(n)+" ="+Str(GetVariableN("СумДеб"+Str(n)+"["+Str(Iter)+"]"),2);
  fi;
 od;
 if z=0: ^Cur; fi;
 if z=1:
    n=1;
   else
    n=Alternate("Выберите месяц",Buf,-1,1,12);
    if n=0: ^Cur; fi;
 fi;
 n=Int(SubStr(Buf[n],1,Pos(".",Buf[n])-1));
 if Сч[Iter]="?": УслСч_="+"+УслСч; else УслСч_="+"+Раб.Бюджет2005.ВзятьКодСчета(Сч[Iter],"","АН",True)+".*"; fi;
 УслАн_=if(УслАн="",УслАн,"("+УслАн+")");
 УслАн_=Раб.Бюджет2005.Объединить(УслАн_,if(УслАнДоп="",УслАнДоп,"("+УслАнДоп+")"),"&");
 УслАн_=Раб.Бюджет2005.Объединить(УслАн_,ПризнСотр[Iter],"&");
 УслАн_=Раб.Бюджет2005.Объединить(УслАн_,ПризнПВ[Iter],"&");
 if ДК=1.1.100: 
	if ДН>ToDay: ДК_=ДН+1; 
	else ДК_=ToDay;
	fi;
 else
	 ДК_=ДК;

 fi;
 ДН_=Dat(1,n,Year(ДК_-1));
 ДК_=Dat(1,n+1,Year(ДН_-1));
 Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."001"',ДН_,ДК_,УслСч_,УслАн_);
 Return Cur;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_OnClick(Sender: String);
 var r: i;
 r = 2;
 if ДН=1.1.100: Message("Введите дату открытия книги",mtError); Template.Field="ДН"; Exit; fi;
 if ДН>ДК and not ДК=1.1.100: Message("Начальная дата превышает конечную",mtError); Template.Field="ДН"; Exit; fi;
 if УслСч="": Message("Укажите условие отбора депонетjd",mtError); ОткрытьНастр; Template.Field="УслСч"; Exit; fi;
 if СправСотр="": Message("Аналитический справочник сотрудника",mtError); ОткрытьНастр; Template.Field="Справ"; Exit; fi;
 if r = 1: 
      Расчет;
      if fТабНом then РасчТабНом; fi;
 else Расчет_;
 fi;

end;

Proc btnНастр_OnClick(Sender: String);
 ОткрытьНастр;
end;

Proc btnПечать_OnClick(Sender: String);
 Раб.Настр_Печать.Prn('','','RPO_0504048_000.cfg','',1);
end;

Proc btnЗакрыть_OnClick(Sender: String);
 Close;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 if Учреждение="": ЗаполнитьРекв(nil); fi;
 Раб.Настр_Печать.Cfg("","RPO_0504048_000.cfg");
 Настр(False);
 ЗакрытьНастр;
end;
--Обработчики событий шаблона -----
--



Func Ост_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var УслАн_:S;
var ДК_:D;
  УслАн_=if(УслАн="",УслАн,"("+УслАн+")");
  УслАн_=Раб.Бюджет2005.Объединить(УслАн_,if(УслАнДоп="",УслАнДоп,"("+УслАнДоп+")"),"&");
  if Row=2 then
     ДК_=ДН;
    else
     if ДК=1.1.100: if ДН>ToDay: ДК_=ДН+1; else ДК_=ToDay; fi; else ДК_=ДК; fi;
  fi;
  Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."депоненты"',1.1.100,ДК_,УслСч,УслАн_);
  Return Cur;
end;





Конец
