-- Шаблон создан мастером бланков
-- 19.03.2003 11:19:21
--
БланкСШаблоном "Отчет по контракту, договору ...";

fИсклЗКР:L;

var Run:L;

ДОтчет:D;

recДоговор0  :Record;
recДоговор   :Record;
ПризнДоговор :S;
var ПризнДоговор_:S=Up(SubStr(ПризнДоговор,9,255));
НаимДок      :S;
НомерДок     :S;
var НомерДок_:S="";
ДатаДок      :D;
НаимПост     :S;
ПризнПост    :S;
recПост      :Record;
ДатаРег      :D;
ДатаН	     :D;
ДатаК	     :D;
Сум	     :N;
ЗаглСумГод   :S;
СумГод	     :N;
НомРеестр    :S;
ДатаРеестр   :D;
ОбщСправНаим1:S;
ОбщПризн1    :S;
var упрОбщПризн1:L=not ОбщПризн1="";
ОбщСправНаим2:S;
ОбщПризн2    :S;
var упрОбщПризн2:L=not ОбщПризн2="";
Содерж	     :S;
Статус	     :S;
---------------
var УпрДоп	:I;
var пп	      []:i=$;
var ДатаРегДоп[]:D;
var НаимДоп   []:S;
var НомДоп    []:S;
var ДатаДоп   []:D;
var ДатаНДоп  []:D;
var ДатаКДоп  []:D;
var ИзмКДоп   []:I;
var СумДоп    []:N;
var СумИзмДоп []:N;
var ТипСведДоп[]:S;
var ОснДоп    []:S;
var RecДоп    []:Record;

var УпрКБК	 :I;
var keyКБК     []:S;
var ВД	       []:S;
var КБК        []:S;
var Призн      []:S;
var Год_Кт     []:S;
var isТекГод_Кт[]:L;
var СумКБК_Кт  []:N;
var КорКБК_Кт  []:N;
var СумКБК_Ав  []:N;
var ОплКБК_Ав  []:N;
var СумКБК_ДО  []:N;
var ОплКБК_ДО  []:N;
var СумКБК_ЗА  []:N;
var СумКБК_СА  []:N;
var СумКБК_ДЗ  []:N=ОплКБК_Ав[$]-СумКБК_ЗА[$]-СумКБК_СА[$];
var СумКБК_КЗ  []:N=СумКБК_ДО[$]-ОплКБК_ДО[$]-СумКБК_ЗА[$];
var СумКБК_Кт_И[]:N=if(isТекГод_Кт[$],СумКБК_Кт[$]+КорКБК_Кт[$]-СумКБК_ДО[$],СумКБК_КЗ[$]);
var ОплКБК_Кт  []:N=if(isТекГод_Кт[$],ОплКБК_Ав[$]+ОплКБК_ДО[$],0);
var СумКБК_Кт_О[]:N=if(isТекГод_Кт[$],СумКБК_Кт[$]+КорКБК_Кт[$]-ОплКБК_Кт[$],Deb(СумКБК_КЗ[$]-СумКБК_ДЗ[$]));

var Всего_СумКБК_Кт:N=SumOfArray(СумКБК_Кт,УпрКБК);
var Всего_КорКБК_Кт:N=SumOfArray(КорКБК_Кт,УпрКБК);
var Всего_СумКБК_Ав:N=SumOfArray(СумКБК_Ав,УпрКБК);
var Всего_ОплКБК_Ав:N=SumOfArray(ОплКБК_Ав,УпрКБК);
var Всего_СумКБК_ДО:N=SumOfArray(СумКБК_ДО,УпрКБК);
var Всего_ОплКБК_ДО:N=SumOfArray(ОплКБК_ДО,УпрКБК);
var Всего_СумКБК_ЗА:N=SumOfArray(СумКБК_ЗА,УпрКБК);
var Всего_СумКБК_СА:N=SumOfArray(СумКБК_СА,УпрКБК);
var Всего_СумКБК_ДЗ:N=SumOfArray(СумКБК_ДЗ,УпрКБК);
var Всего_СумКБК_КЗ:N=SumOfArray(СумКБК_КЗ,УпрКБК);
var Всего_СумКБК_Кт_И:N=SumOfArray(СумКБК_Кт_И,УпрКБК);
var Всего_ОплКБК_КТ:N=SumOfArray(ОплКБК_Кт,УпрКБК);
var Всего_СумКБК_КТ_О:N=SumOfArray(СумКБК_Кт_О,УпрКБК);
---------------
var УпрДО	:I;
var keyДО     []:S;
var ДО_ДатРег []:S;
var ДО_Наим   []:S;
var ДО_Ном    []:S;
var ДО_Дат    []:S;
var ДО_Сум    []:N;
var ДО_UKey   []:Record;
var ДО_Crd    []:S;
var ДО_Аванс  []:L;
var ДО_Аннул  []:L;
var Опл_ДатОпр[]:D;
var Опл_Наим  []:S;
var Опл_Ном   []:S;
var Опл_Дат   []:D;
var Опл_Сум   []:N;
var Опл_UKey  []:Record;
var Опл_Crd   []:S;
var ЗКР_UKey  []:Record;
var ЗКР       []:S;
var КЗ	      []:N;
var ДЗ	      []:N;
var ЗД	      []:N=ДЗ[$]-КЗ[$];
var Исп       []:N;
var Опл       []:N;

var Отч:S;

var ДС_УпрОбеспеч	:I;
var ДС_СумОбеспеч     []:N;
var ДС_Сум1Обеспеч    []:N;
var ДС_Дат1Обеспеч    []:D;
var ДС_Сум2Обеспеч    []:N;
var ДС_Дат2Обеспеч    []:D;
var ДС_ОстОбеспеч     []:N=ДС_Сум1Обеспеч[$]-ДС_Сум2Обеспеч[$];
var ДС_ПризнОбеспеч   []:S;
var ДС_ПП1Обеспеч     []:S;
var ДС_ПП2Обеспеч     []:S;
var ДС_UKeyОбеспеч    []:Record;
var ДС_ВсегоСумОбеспеч	:N=SumOfArray(ДС_СумОбеспеч ,ДС_УпрОбеспеч);
var ДС_ВсегоСум1	:N=SumOfArray(ДС_Сум1Обеспеч,ДС_УпрОбеспеч);   
var ДС_ВсегоСум2	:N=SumOfArray(ДС_Сум2Обеспеч,ДС_УпрОбеспеч);
var ДС_ВсегоОстОбеспеч	:N=SumOfArray(ДС_ОстОбеспеч ,ДС_УпрОбеспеч);

var УпрОбеспеч	      :I;
var ВидОбеспеч	    []:S;
var НомОбеспеч	    []:S;
var ДатОбеспеч	    []:D;
var СумОбеспеч	    []:N;
var НеустойкаОбеспеч[]:N;
var Срок1Обеспеч    []:D;
var Срок2Обеспеч    []:D;
var ГарантОбеспеч   []:S;
var Сум1Обеспеч     []:N;
var Дат1Обеспеч     []:D;
var Сум2Обеспеч     []:N;
var Дат2Обеспеч     []:D;
var ОстОбеспеч	    []:N=Сум1Обеспеч[$]-Сум2Обеспеч[$];
var ПризнОбеспеч    []:S;
var UKeyОбеспеч     []:Record;
var ВсегоОстОбеспеч   :N=SumOfArray(ОстОбеспеч,УпрОбеспеч);

var SelfCfg:S="ТББ.ДОКУМЕНТЫ.ДОГОВОРПОСТ.ОТЧЕТ.001.cfg";
--
--Процедуры и функции -------------			      
Proc ОчиститьОбеспеч;
 ClearVariable(ДС_УпрОбеспеч);
 ClearVariable(ДС_СумОбеспеч);
 ClearVariable(ДС_Сум1Обеспеч);
 ClearVariable(ДС_Дат1Обеспеч);
 ClearVariable(ДС_Сум2Обеспеч);
 ClearVariable(ДС_Дат2Обеспеч);
 ClearVariable(ДС_ПризнОбеспеч);
 ClearVariable(ДС_ПП1Обеспеч);
 ClearVariable(ДС_ПП2Обеспеч);
 ClearVariable(ДС_UKeyОбеспеч);

 ClearVariable(УпрОбеспеч);
 ClearVariable(ВидОбеспеч);
 ClearVariable(НомОбеспеч);
 ClearVariable(ДатОбеспеч);
 ClearVariable(СумОбеспеч);
 ClearVariable(НеустойкаОбеспеч);
 ClearVariable(Срок1Обеспеч);
 ClearVariable(Срок2Обеспеч);
 ClearVariable(ГарантОбеспеч);
 ClearVariable(Сум1Обеспеч);
 ClearVariable(Дат1Обеспеч);
 ClearVariable(Сум2Обеспеч);
 ClearVariable(Дат2Обеспеч);
 ClearVariable(ПризнОбеспеч);
 ClearVariable(UKeyОбеспеч);
end;

Proc ОчиститьДоп;
 ClearVariable(УпрДоп);
 ClearVariable(ДатаРегДоп);
 ClearVariable(НаимДоп);
 ClearVariable(НомДоп);
 ClearVariable(ДатаДоп);
 ClearVariable(ДатаНДоп);
 ClearVariable(ДатаКДоп);
 ClearVariable(ИзмКДоп);
 ClearVariable(СумДоп);
 ClearVariable(СумИзмДоп);
 ClearVariable(ТипСведДоп);
 ClearVariable(ОснДоп);
 ClearVariable(RecДоп);
end;

Proc ОчиститьКБК;
 ClearVariable(keyКБК);
 ClearVariable(УпрКБК);
 ClearVariable(ВД);
 ClearVariable(КБК);
 ClearVariable(Призн);
 ClearVariable(Год_Кт);
 ClearVariable(СумКБК_Кт);
 ClearVariable(КорКБК_Кт);
 ClearVariable(СумКБК_Ав);
 ClearVariable(ОплКБК_Ав);
 ClearVariable(СумКБК_ДО);
 ClearVariable(ОплКБК_ДО);
 ClearVariable(СумКБК_ЗА);
 ClearVariable(СумКБК_СА);
 ClearVariable(isТекГод_Кт);
end;

Proc ОчиститьДО;
 ClearVariable(УпрДО);
 ClearVariable(keyДО);
 ClearVariable(ДО_ДатРег);
 ClearVariable(ДО_Наим);
 ClearVariable(ДО_Ном);
 ClearVariable(ДО_Дат);
 ClearVariable(ДО_Сум);
 ClearVariable(ДО_UKey);
 ClearVariable(ДО_Crd);
 ClearVariable(ДО_Аванс);
 ClearVariable(ДО_Аннул);
 ClearVariable(Опл_ДатОпр);
 ClearVariable(Опл_Наим);
 ClearVariable(Опл_Ном);
 ClearVariable(Опл_Дат);
 ClearVariable(Опл_Сум);
 ClearVariable(Опл_UKey);
 ClearVariable(Опл_Crd);
 ClearVariable(ЗКР_UKey);
 ClearVariable(ЗКР);
 ClearVariable(КЗ);
 ClearVariable(ДЗ);
 ClearVariable(Исп);
 ClearVariable(Опл);
end;

Proc Очистить;
 ОчиститьОбеспеч;
 ОчиститьДоп;
 ОчиститьКБК;
 ОчиститьДО;
end;

Proc РасчетОбеспеч;
var OWA,n,nn,Iter,t:I;
var Призн_,tmp,Crd,tД,tК:S;
var Rec: Record;
 ОчиститьОбеспеч;
 OWA=OpenWorkArea("РПО_ОБЕСП_ИСПОЛ_ОБЯЗ","");
 Try
  for sign Призн_="СВР.ОИО.*" do
   if ExistsTransactions("*.3.304.01.*|(*.3.ЗАБ.00.830/*.3.ЗАБ.КР.*){"+Призн_+"}",1.1.100,ДОтчет+1):
      Rec=SignToRecord(Призн_,False);
      n=GetRecordNumber(OWA,Rec);
      if not n=0:
	 if not GetFieldS(OWA,n,"Обяз_Призн")=ПризнДоговор:
	    n=0;
	 fi;
      fi;
      if not n=0:
	 InsertFrame(ДС_УпрОбеспеч,ДС_УпрОбеспеч+1);
	 Iter=ДС_УпрОбеспеч;
	 ДС_СумОбеспеч[Iter]=GetFieldN(OWA,n,"Сум");
	 ДС_ПризнОбеспеч[Iter]=Призн_;
	 ДС_Сум1Обеспеч[Iter]=-Turn("*.3.304.01.730{"+ДС_ПризнОбеспеч[Iter]+"}",1.1.100,ToDay+1);
	 ДС_Сум2Обеспеч[Iter]= Turn("*.3.304.01.830{"+ДС_ПризнОбеспеч[Iter]+"}",1.1.100,ToDay+1);
	 ДС_Сум2Обеспеч[Iter]=ДС_Сум2Обеспеч[Iter]+Turn("*.3.ЗАБ.00.830/*.3.ЗАБ.КР.*{"+ДС_ПризнОбеспеч[Iter]+"}",1.1.100,ToDay+1);
	 ДС_UKeyОбеспеч[Iter]=Rec;
	 for transaction t="*.3.304.01.*|(*.3.ЗАБ.00.830/*.3.ЗАБ.КР.*){"+Призн_+"}",1.1.100,ДОтчет+1,Reverse do
	  crd=TransCardFile(t);
	  rec=TransRecord(t);
	  tД=TransDeb(t);
	  tК=TransCre(t);
	  if not rec=nil:
	     tmp=Раб.ИмяПолеКарт.ИмяПоля(Crd,"НаимКр")+" №"+Раб.ИмяПолеКарт.ЗначПоляС(Crd,"Номер",Rec)+" от "+DateToString(Раб.ИмяПолеКарт.ЗначПоляД(Crd,"Дата",Rec));
	    else
	     tmp="Проводка №"+Str(t);
	  fi;
	  if Match(tК,"*.3.304.01.730"):
	     if ДС_Дат1Обеспеч[Iter]=1.1.100:
		ДС_Дат1Обеспеч[Iter]=TransDate(t);
	     fi;
	     ДС_ПП1Обеспеч[Iter]=Раб.Бюджет2005.Объединить(ДС_ПП1Обеспеч[Iter],tmp," ");
	  fi;
	  if Match(tД,"*.3.304.01.830") or Match(tД,"*.3.ЗАБ.00.830"):
	     if ДС_Дат2Обеспеч[Iter]=1.1.100:
		ДС_Дат2Обеспеч[Iter]=TransDate(t);
	     fi;
	     ДС_ПП2Обеспеч[Iter]=Раб.Бюджет2005.Объединить(ДС_ПП2Обеспеч[Iter],tmp," ");
	  fi;
	 od;
	 if Round(ДС_ОстОбеспеч[Iter],2)<0:
	    Trace("Внимание! Таблица 'Обеспечение исполнения обязательства (денежные средства)' строка №"+Str(Iter)+" Отрицательный остаток");
	 fi;
      fi; --if not n=0:
   fi; --if ExistsTransactions("*.3.304.01.*|*.3.ЗАБ.00.830{"+Призн_+"}",1.1.100,ДОтчет+1):
  od;
  --
  for sign Призн_="ЗАБ10.*" do
   if ExistsTransactions("ЗАБ.10!{"+Призн_+"&"+ПризнДоговор+"}",1.1.100,ДОтчет+1):
      InsertFrame(УпрОбеспеч,УпрОбеспеч+1);
      Iter=УпрОбеспеч;
      Rec=SignToRecord(Призн_,False);
      n=GetRecordNumber(OWA,Rec);
      if n=0:
	 ВидОбеспеч[Iter]=ExtractWord(2,Призн_,".");
	 НомОбеспеч[Iter]=Призн_;
	else
	 ВидОбеспеч[Iter]=GetFieldS(OWA,n,"Вид");
	 НомОбеспеч[Iter]=GetFieldS(OWA,n,"НомДок");
	 ДатОбеспеч[Iter]=GetFieldD(OWA,n,"ДатДок");
	 СумОбеспеч[Iter]=GetFieldN(OWA,n,"Сум");
	 НеустойкаОбеспеч[Iter]=GetFieldN(OWA,n,"Неустойка");
	 Срок1Обеспеч[Iter]=GetFieldD(OWA,n,"ДатН");
	 Срок2Обеспеч[Iter]=GetFieldD(OWA,n,"ДатК");
	 if ВидОбеспеч[Iter]="БГ":
	    ГарантОбеспеч[Iter]=GetFieldS(OWA,n,"Гарант_Наим");
	   else
	    ГарантОбеспеч[Iter]=GetFieldS(OWA,n,"Гарант_Рекв.КорИмя");
	 fi;
      fi;
      ВидОбеспеч[Iter]=if(ВидОбеспеч[Iter]="ЗАДАТОК":"Задаток"|ВидОбеспеч[Iter]="ЗАЛОГ":"Залог"|ВидОбеспеч[Iter]="БГ":"Банковская гарантия"|ВидОбеспеч[Iter]="ПОРУЧ":"Поручительство"|ВидОбеспеч[Iter]="ИНОЕ":"Иное обеспечение"|True:"");
      ПризнОбеспеч[Iter]=Призн_;
      Сум1Обеспеч[Iter]=Turn("+ЗАБ.10!{"+ПризнОбеспеч[Iter]+"&"+ПризнДоговор+"}",1.1.100,ToDay+1);
      for transaction t="+ЗАБ.10!{"+ПризнОбеспеч[Iter]+"&"+ПризнДоговор+"}",1.1.100,ToDay+1,Reverse do
       Дат1Обеспеч[Iter]=TransDate(t);
       Break;
      od;
      Сум2Обеспеч[Iter]=-Turn("-ЗАБ.10!{"+ПризнОбеспеч[Iter]+"&"+ПризнДоговор+"}",1.1.100,ToDay+1);
      for transaction t="-ЗАБ.10!{"+ПризнОбеспеч[Iter]+"&"+ПризнДоговор+"}",1.1.100,ToDay+1,Reverse do
       Дат2Обеспеч[Iter]=TransDate(t);
       Break;
      od;
      UKeyОбеспеч[Iter]=Rec;
      if Round(ДС_ОстОбеспеч[Iter],2)<0:
	 Trace("Внимание! Таблица 'Обеспечение исполнения обязательства (забаланс)' строка №"+Str(Iter)+" Отрицательный остаток");
      fi;
   fi;
  od;
 Finally
  CloseWorkArea(OWA);
 end;
end;

Proc РасчетДоп;
var OWA,ТипИзм_,Iter:I;
var Rec: Record;
var First:L;
 ОчиститьДоп;
 OWA=OpenWorkArea(Раб.Договор.crdДоговор,"","UKey="+RecordToString(recДоговор));
 Try
  Rec=GetFieldR(OWA,1,"ДОГОВОР_ПРЕ");
  if not RecordExists(Раб.Договор.crdДоговор,Rec): Exit; fi;
  First=True;
  While not Rec=nil do
   ТипИзм_=GetFieldI(OWA,1,"ТипИзм");
   InsertFrame(УпрДоп,1);
   ДатаРегДоп[1]=if(ТипИзм_=4 or ТипИзм_=0,GetFieldD(OWA,1,"ДатаРег"),GetFieldD(OWA,1,"ДатаИзм"));
   if ТипИзм_=4 or ТипИзм_=0:
      if not GetFieldR(OWA,1,"НаимДок")=nil: НаимДоп[1]=GetFieldS(OWA,1,"НаимДок.Наим"); fi;
     else
      if not GetFieldR(OWA,1,"НаимИзм")=nil: 
	 НаимДоп[1]=GetFieldS(OWA,1,"НаимИзм.Наим");
	else
	 if not GetFieldR(OWA,1,"НаимДок")=nil: 
	    НаимДоп[1]=GetFieldS(OWA,1,"НаимДок.Наим");
	 fi;
      fi;
   fi;
   НомДоп[1]=if(ТипИзм_=4 or ТипИзм_=0,GetFieldS(OWA,1,"НомерДок"),if(GetFieldS(OWA,1,"НомерИзм")="",GetFieldS(OWA,1,"НомерДок"),GetFieldS(OWA,1,"НомерИзм")));
   ДатаДоп[1]=if(ТипИзм_=4 or ТипИзм_=0,GetFieldD(OWA,1,"ДатаДок"),if(GetFieldD(OWA,1,"ДатаДИзм")=1.1.100,GetFieldD(OWA,1,"ДатаДок"),GetFieldD(OWA,1,"ДатаДИзм")));
   ДатаНДоп[1]=GetFieldD(OWA,1,"ДатаН");
   ДатаКДоп[1]=GetFieldD(OWA,1,"ДатаК");
   if GetFieldL(OWA,1,"Исполнен"): СумДоп[1]=GetFieldN(OWA,1,"ИсполФактОпл");
     |GetFieldL(OWA,1,"Аннулирован"): СумДоп[1]=GetFieldN(OWA,1,"АннулФактОпл");
     |True: СумДоп[1]=GetFieldN(OWA,1,"СумДок");
   fi;
   ТипСведДоп[1]=if(GetFieldI(OWA,1,"ТипСвед")=0:"Первич."|ТипИзм_=1:"Доп. согл."|ТипИзм_=2:"Исправл."|ТипИзм_=3:"Внутр. изм."|ТипИзм_=4:"Перерег."|ТипИзм_=99:"Исполн."|ТипИзм_=-99:"Аннул."|True:"");
   ОснДоп[1]=if(ТипИзм_=0:GetFieldS(OWA,1,"Содерж")|ТипИзм_=4:"Перерегистрация на очередной год ("+GetFieldS(OWA,1,"ТекГод")+")"|ТипИзм_=99:GetFieldS(OWA,1,"ИсполКмнт")|ТипИзм_=-99:GetFieldS(OWA,1,"АннулКмнт")|True:if(GetFieldS(OWA,1,"ОснИзм")="",GetFieldS(OWA,1,"Содерж"),GetFieldS(OWA,1,"ОснИзм")));
   RecДоп[1]=GetRecordKey(OWA,1);
   if not First:
      Rec=GetFieldR(OWA,1,"ДОГОВОР_ПРЕ");
      if not RecordExists(Раб.Договор.crdДоговор,Rec): Exit; fi;
   fi;
   SetFilter(OWA,"UKey="+RecordToString(Rec));
   First=False;
  od;
 Finally
  CloseWorkArea(OWA);
  for Iter=2..УпрДоп do
   ИзмКДоп[Iter]=ДатаКДоп[Iter]-ДатаКДоп[Iter-1];
   СумИзмДоп[Iter]=СумДоп[Iter]-СумДоп[Iter-1];
  od;
 end;
end;

Proc ВзятьЗКР(Iter:I);
var zz,z:i;
 if Опл_Crd[Iter]="Поруч" and not Опл_Ukey[Iter]=nil:
    zz=SearchInArray(Раб.ИмяПолеКарт.Crd,"ПОРУЧ",true);
    if not zz=-1:
       z=GetRecordNumber(Раб.ИмяПолеКарт.OWA[zz],Опл_Ukey[Iter]);
       if not z=0:
	  ЗКР_UKey[Iter]=GetFieldR(Раб.ИмяПолеКарт.OWA[zz],z,"РПО_ЗАЯВКА_КР");
	  if not ЗКР_UKey[Iter]=nil:
	     ЗКР[Iter]="ЗКР №"+GetFieldS(Раб.ИмяПолеКарт.OWA[zz],z,"РПО_ЗАЯВКА_КР.НомерДок")+" от "+DateToString(GetFieldD(Раб.ИмяПолеКарт.OWA[zz],z,"РПО_ЗАЯВКА_КР.ДатаДок"));
	  fi;
       fi;
    fi;
 fi;
end;

Proc ЗаполнитьОпл(iter:i; t:i; k:i; isЗА:L);
var zz,z:i;
var tДат:D;
var tСум:N;
 tДат=TransDate(t);
 tСум=TransSum(t);
 Опл_UKey[Iter]=TransRecord(t);
 Опл_Crd[Iter]=TransCardFile(t);
 Опл_ДатОпр[Iter]=tДат;
 Опл_Наим[Iter]=Раб.ИмяПолеКарт.ИмяДокумента(Up(Опл_Crd[Iter]));
 Опл_Ном[Iter]=Раб.ИмяПолеКарт.ЗначПоляС(Опл_Crd[Iter],"Номер",Опл_UKey[Iter]);
 Опл_Дат[Iter]=Раб.ИмяПолеКарт.ЗначПоляД(Опл_Crd[Iter],"Дата",Опл_UKey[Iter]);
 if Опл_Crd[Iter]="РПО_ДО_ЗАЧЕТ_АВАНСА" and not Опл_UKey[Iter]=nil:
    zz=SearchInArray(Раб.ИмяПолеКарт.Crd,Опл_Crd[Iter],true);
    if not zz=-1:
       z=GetRecordNumber(Раб.ИмяПолеКарт.OWA[zz],Опл_Ukey[Iter]);
       if not z=0:
	  Опл_Наим[Iter]=GetFieldS(Раб.ИмяПолеКарт.OWA[zz],z,"Аванс.НаимДок.Наим")+Chr(13)+"("+Опл_Наим[Iter]+")";
	  Опл_Ном[Iter]=GetFieldS(Раб.ИмяПолеКарт.OWA[zz],z,"Аванс.НомерДок");
	  Опл_Дат[Iter]=GetFieldD(Раб.ИмяПолеКарт.OWA[zz],z,"Аванс.ДатаДок");
       fi;
    fi;
   |Опл_Crd[Iter]="РПО_ДО" and not Опл_UKey[Iter]=nil:
    Опл_Наим[Iter]="остатки";
    Опл_Ном[Iter]="";
    Опл_Дат[Iter]=1.1.100;
   |Опл_Crd[Iter]="Table_OPER" or Опл_UKey[Iter]=nil:
    Опл_Crd[Iter]="";
    Опл_UKey[Iter]=IntegerToRecord(t);
    Опл_Ном[Iter]=Str(t);
    Опл_Дат[Iter]=tДат;
 fi;
 Опл_Сум[Iter]=tСум*k;
 ВзятьЗКР(Iter);
 if isЗА: 
    КЗ[Iter]=КЗ[Iter]-Опл_Сум[Iter];
    ДЗ[Iter]=ДЗ[Iter]-Опл_Сум[Iter];
   else
    ДЗ[Iter]=ДЗ[Iter]+Опл_Сум[Iter];
    Опл[Iter]=Опл_Сум[Iter];
 fi;
end;

Proc РасчетОпл(t:i);
var k,Iter,Iter_:i;
var tДат:D;
var tСум:N;
var tДеб,tКре,tПризн,ПризнДО_,КартДО_,Crd:S;
var ДО_,Rec:Record;
var Flag,isЗА:L;
 isЗА=False;
 tДеб=TransDeb(t);
 tКре=TransCre(t);
 if  Pos(".ЗАБ.КР.",tКре)>1 and Pos(".3.ЗАБ.КР.",tКре)=0: k= 1;
    |Match(tДеб,"*.?.302.??.830"): k= 1; isЗА=Match(tКре,"*.?.206.??.660");
    |Match(tДеб,"*.?.206.??.560"): k= 1;
    |Match(tКре,"*.?.302.??.830"): k=-1; isЗА=Match(tДеб,"*.?.206.??.660");
    |Match(tКре,"*.?.206.??.560"): k=-1;
    |Match(tКре,"*.?.206.??.660"): k=-1;
    |True: Exit;
 fi;
 tСум=TransSum(t);
 tПризн=TransSigns(t);
 ПризнДО_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","+ДОГОВОР.*|ДОГОВОР.*","|");
 if ПризнДО_="":
    ДО_=nil;
    КартДО_="";
   else
    if Pos("+",ПризнДО_)=1: ПризнДО_=SubStr(ПризнДО_,2,255); fi;
    ДО_=SignToRecord(ПризнДО_,False);
    КартДО_=SignCardFile(ПризнДО_,False);
 fi;
 if not ДО_=nil and КартДО_="РПО_ДО":
    Iter=SearchInArray(ДО_UKey,ДО_,False);
    if Round(tСум,2)<0: --попытка найти аннулирование
       Iter_=SearchInArray(ДО_UKey,ДО_,False,Iter+1);
       if not Iter_=-1:
	  if Round(ДО_Сум[Iter_],2)=Round(tСум,2): Iter=Iter_; fi;
       fi;
    fi;
   else
    Iter=-1;
 fi;
 if Iter=-1:
    InsertFrame(УпрДО,УпрДО+1);
    Iter=УпрДО;
    ДО_UKey[Iter]=ДО_;
    ДО_Crd[Iter]=КартДО_;
    ДО_ДатРег[Iter]="?";
    ДО_Наим[Iter]="?";
    ДО_Ном[Iter]="?";
    ДО_Дат[Iter]="?";
    Опл_UKey[Iter]=nil;
 fi;
 if Опл_UKey[Iter]=nil:
    ЗаполнитьОпл(Iter,t,k,isЗА);
   else
    Crd=TransCardFile(t);
    Rec=TransRecord(t);
    Flag=False;
    While ДО_UKey[Iter]=ДО_ and not ДО_Аннул[Iter] do
     if Опл_UKey[Iter]=Rec and Опл_Crd[Iter]=Crd:
	Опл_Сум[Iter]=Опл_Сум[Iter]+(tСум*k);
	if isЗА:
	   КЗ[Iter]=КЗ[Iter]-(tСум*k);
	   ДЗ[Iter]=ДЗ[Iter]-(tСум*k);
	  else
	   ДЗ[Iter]=ДЗ[Iter]+(tСум*k);
	   Опл[Iter]=Опл[Iter]+(tСум*k);
	fi;
	Flag=True;
	Break;
     fi;
     Iter=Iter+1;
    od;
    if not Flag and (not ДО_UKey[Iter]=Rec or ДО_Аннул[Iter]):
       InsertFrame(УпрДО,Iter);
       ДО_ДатРег[Iter]="--//--";
       ДО_Наим[Iter]="--//--";
       ДО_Ном[Iter]="--//--";
       ДО_Дат[Iter]="--//--";
       ДО_UKey[Iter]=ДО_UKey[Iter-1];
       ДО_Crd[Iter]=ДО_Crd[Iter-1];
       ЗаполнитьОпл(Iter,t,k,isЗА);
    fi;
 fi;
end;

Proc Расчет;
var y,yy,n,nn,t,z:i;
var tmp,tmp2:S;
var ДН_,ДК_:D;
 ОчиститьКБК;
 ОчиститьДО;
 Раб.ИмяПолеКарт.Начать;
 Try
  yy=Max(1,LengthOfArray(Раб.Договор.Года));
  if Раб.Договор.Года[1]="": Раб.Договор.Года[1]=" "; fi;
  for y=1..yy do
   --if Раб.Договор.Года[y]>Раб.Договор.Года[Раб.Договор.ГодТек]: Break; fi;
   nn=Раб.Договор.Договор_КБК("Рег and Договор="+RecordToString(recДоговор),Раб.Договор.Года[y],False);
   for n=1..nn do
    z=SearchInArray(keyКБК,Раб.Договор.Года[y]+"#"+Раб.Договор.LstКлюч[n],True);
    if z=-1:
       z=InsertInArraySort(keyКБК,Раб.Договор.Года[y]+"#"+Раб.Договор.LstКлюч[n]);
       InsertFrame(УпрКБК,z);
       ВД[z]=Раб.Договор.LstВД[n];
       КБК[z]=Раб.Договор.LstКБК[n];
       Призн[z]=Раб.Договор.LstПризн[n];
       Год_Кт[z]=Раб.Договор.Года[y];
       СумКБК_Кт[z]=Раб.Договор.LstСум[n];
       if not Статус="ТЕКУЩИЙ" and Год_Кт[z]=Раб.Договор.Года[Раб.Договор.ГодТек]:
	  КорКБК_Кт[z]=Раб.Договор.LstОпл[n]-Раб.Договор.LstСум[n];
       fi;
       isТекГод_Кт[z]=(Год_Кт[z]=Раб.Договор.Года[Раб.Договор.ГодТек]);
    fi;
   od;
  od; --for y=1..yy do
  --Расчет корректировки
  if not Статус="ТЕКУЩИЙ":
     for y=1..УпрКБК do
      if not Год_Кт[y]=Раб.Договор.Года[Раб.Договор.ГодТек]:
	 for z=y+1..УпрКБК do
	  if ВД[y]=ВД[z] and КБК[y]=КБК[z] and Призн[y]=Призн[z] and Год_Кт[z]=Раб.Договор.Года[Раб.Договор.ГодТек]:
	     КорКБК_Кт[z]=КорКБК_Кт[z]-СумКБК_Кт[y];
	  fi;
	 od;
      fi;
     od;
  fi;
  --Смотрим обязательства
  --nn=Раб.Договор.ДО_КБК("Рег and ДатаРег<="+DateToString(ДОтчет)+" and Договор="+RecordToString(recДоговор),"",True,False);
  nn=Раб.Договор.ДО_КБК("Рег and ДатаРег<"+DateToString(ДОтчет)+" and Pos('"+ПризнДоговор_+".',Up(Признак))=1","",ДОтчет,True,False);
  ShowProgress(nn*3,"Расчет...");
  for n=1..nn do
   ProgressPos(n);
   z=SearchInArray(keyКБК,Раб.Договор.lstТекГод[n]+"#"+Раб.Договор.LstКлюч1[n],True);
   if z=-1:
      z=InsertInArraySort(keyКБК,Раб.Договор.lstТекГод[n]+"#"+Раб.Договор.LstКлюч1[n]);
      InsertFrame(УпрКБК,z);
      Год_Кт[z]=Раб.Договор.lstТекГод[n];
      ВД[z]=Раб.Договор.LstВД[n];
      КБК[z]=Раб.Договор.LstКБК[n];
      Призн[z]=Раб.Договор.LstПризн[n];
   fi;
   if Раб.Договор.LstАванс[n]:
      СумКБК_Ав[z]=СумКБК_Ав[z]+Раб.Договор.LstСум[n];
     else
      СумКБК_ДО[z]=СумКБК_ДО[z]+Раб.Договор.LstСум[n];
   fi;
   --
   z=SearchInArray(keyДО,ExtractWords(1,3,Раб.Договор.LstКлюч[n],"#"),True);
   if z=-1:
      z=InsertInArraySort(keyДО,ExtractWords(1,3,Раб.Договор.LstКлюч[n],"#"));
      InsertFrame(УпрДО,z);
      ДО_UKey[z]=StringToRecord(ExtractWord(3,Раб.Договор.LstКлюч[n],"#"));
      ДО_Crd[z]=Раб.Договор.lstКарт[n];
      ДО_ДатРег[z]=DateToString(Раб.Договор.lstДатРег[n]);
      ДО_Наим[z]=Раб.Договор.lstТекст[n]+if(Раб.Договор.LstАванс[n],Chr(13)+"(аванс)","")+if(Раб.Договор.LstАннул[n]," "+"(аннулировано)","");
      ДО_Ном[z]=Раб.Договор.lstНомДок[n];
      ДО_Дат[z]=DateToString(Раб.Договор.lstДатДок[n]);
      ДО_Аванс[z]=Раб.Договор.LstАванс[n];
      ДО_Аннул[z]=Раб.Договор.LstАннул[n];
      Опл_Crd[z]="null";
   fi;
   ДО_Сум[z]=ДО_Сум[z]+Раб.Договор.lstСум[n];
   КЗ[z]=if(ДО_Аванс[z],0,ДО_Сум[z]);
   Исп[z]=КЗ[z];
  od;
  --Смотрим оплаты
  ShowProgress(УпрКБК*3,"Расчет...");
  for n=1..УпрКБК do
   ProgressPos(УпрКБК+n);
   ДН_=Dat(1,1,Int(Год_Кт[n]));
   ДК_=if(Год_Кт[n]<Str(Year(ДОтчет-1)),Dat(1,1,Int(Год_Кт[n])+1)-1,ДОтчет);

   tmp=Trim(Trim(ОбщПризн1+" "+ОбщПризн2)+" "+Призн[n]);
   tmp=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(tmp," ","&");
   --смотрим остатки аванса (по периоду)
   tmp2=Раб.Бюджет2005.Объединить(tmp,"ПЕРИОД."+Год_Кт[n]+"!","&");
   if not Раб.Договор.Договор_Оплата(recДоговор,1.1.100,ДОтчет,ВД[n],КБК[n],tmp2, 1,False,False,False)=0: ОплКБК_Ав[n]=Раб.Договор.lstСум[1];  fi;
   --смотрим оплату аванса в текущем периоде
--   if isТекГод_Кт[n]:
   if ДН_<=ДК_:
      tmp2=Раб.Бюджет2005.Объединить(tmp,"~ПЕРИОД.*","&");
      if not Раб.Договор.Договор_Оплата(recДоговор,ДН_,ДК_,ВД[n],КБК[n],tmp2, 1,False,False,False)=0: ОплКБК_Ав[n]=ОплКБК_Ав[n]+Раб.Договор.lstСум[1];	fi;
   fi;
   Раб.Договор.exclЗачетАв=True;
   if ДН_<=ДК_:
      if not Раб.Договор.Договор_Оплата(recДоговор,ДН_,ДК_,ВД[n],КБК[n],tmp,-1,False,False,False)=0: ОплКБК_ДО[n]=Раб.Договор.lstСум[1];  fi;
   fi;
   if isТекГод_Кт[n]:
      tmp2=Раб.Бюджет2005.Объединить(tmp,"(ПЕРИОД."+Год_Кт[n]+"!","&");
      tmp2=Раб.Бюджет2005.Объединить(tmp2,"~ПЕРИОД.*)","|");
     else
      tmp2=Раб.Бюджет2005.Объединить(tmp,"ПЕРИОД."+Год_Кт[n]+"!","&");
   fi;
   Раб.Договор.exclСписанАв=True;
   if not Раб.Договор.Договор_ЗачетАванса(recДоговор,1.1.100,ДОтчет,ВД[n],КБК[n],tmp2,True,False,False,False)=0: СумКБК_ЗА[n]=Раб.Договор.lstСум[1];  fi;
   Раб.Договор.exclЗачетАв=True;
   if not Раб.Договор.Договор_ЗачетАванса(recДоговор,1.1.100,ДОтчет,ВД[n],КБК[n],tmp2,True,False,False,False)=0: СумКБК_СА[n]=Раб.Договор.lstСум[1];  fi;
  od;
  --Смотрим оплаты по документа
  nn=0;
  tmp="(*.?.206.??.560|*.?.302.??.830"+if(fИсклЗКР,"","|(*.?.ЗАБ.КР.*&~*.3.ЗАБ.КР.*)")+")|(*.?.206.??.660/~*.?.302.??.*){"+ПризнДоговор+"!}";
  for Transaction t=tmp,1.1.100,ДОтчет do
   if nn=0: nn=ДОтчет+1-TransDate(t); ShowProgress(nn*3,"Расчет..."); fi;
   ProgressPos(nn+nn+(nn-(ДОтчет+1-TransDate(t))));
   РасчетОпл(t);
  od;
  --
--Для чего это нуно?
--  for y=1..УпрКБК do
--   if Match(Статус,"ТЕКУЩИЙ*"):
--	if Год_Кт[y]<Str(Раб.Договор.ТекГод):
--	   КорКБК_Кт[y]=-(СумКБК_Кт[y]-Max(ОплКБК_Ав[y],СумКБК_ДО[y]));
--	fi;
--     else
--	isТекГод_Кт[y]=False;
--   fi;
--  od;
  ProgressPos(nn*3);
 Finally
  Раб.ИмяПолеКарт.Закончить;
  CloseProgress;
 end;
end;

Func ЭкземплярНаДату(aДоговор:Record; aДата:D):Record;
var OWA:I;
var d:d;
var Pre: Record;
 Pre=aДоговор;
 OWA=OpenWorkArea(Раб.Договор.crdДоговор,"","UKey="+RecordToString(aДоговор));
 Try
  if Records(OWA)=0: aДоговор=nil; fi;
  While not Records(OWA)=0 do
   aДоговор=Pre;
   Pre=GetFieldR(OWA,1,"Договор_Пре");
   d=GetFieldD(OWA,1,if(Pre=nil,"ДатаРег","ДатаИзм"));
   if d<aДата or Pre=nil: Break; fi;
   SetFilter(OWA,"Рег and UKey="+RecordToString(Pre));
  od;
 Finally
  CloseWorkArea(OWA);
 end;
 ^aДоговор;
end;

Proc ВзятьДоговор(Rec: Record);
var OWA:I;
var RecSig:Record;
 recДоговор=ЭкземплярНаДату(Rec,ДОтчет);
 Раб.Договор.Договор_СуммаСроки(recДоговор,ДОтчет+1);
 OWA=OpenWorkArea(Раб.Договор.crdДоговор,"","UKey="+RecordToString(recДоговор));
 Try
  RecSig=GetFieldR(OWA,1,"ПРИЗНАК_Ref");
  НаимДок=GetFieldS(OWA,1,"НаимДок.Наим");
  НомерДок=GetFieldS(OWA,1,"НомерДок");
  ДатаДок=GetFieldD(OWA,1,"ДатаДок");
  recПост=GetFieldR(OWA,1,"Контр");
  ПризнПост=GetFieldS(OWA,1,"Контр_Призн");
  НаимПост=Name_A(ПризнПост);
  if НаимПост=" " or НаимПост="": НаимПост=ПризнПост; fi;
  ДатаРег=GetFieldD(OWA,1,"ДатаРег");
  ДатаН=GetFieldD(OWA,1,"ДатаН");
  ДатаК=GetFieldD(OWA,1,"ДатаК");
  Сум=GetFieldN(OWA,1,"СумДок");
  ЗаглСумГод="Сумма на "+GetFieldS(OWA,1,"ТекГод")+" год:";
  СумГод=GetFieldN(OWA,1,"СумТек");
  НомРеестр=GetFieldS(OWA,1,"Ном_Реестр_ОФК");
  ДатаРеестр=GetFieldD(OWA,1,"Дата_Реестр_ОФК");
  Try
   ОбщСправНаим1=GetFieldS(OWA,1,"Настр.Общ_Справ_Наим1");
   ОбщПризн1=GetFieldS(OWA,1,"Общ_Призн1");
   ОбщСправНаим2=GetFieldS(OWA,1,"Настр.Общ_Справ_Наим2");
   ОбщПризн2=GetFieldS(OWA,1,"Общ_Призн2");
  Except
  end;
  Содерж=GetFieldS(OWA,1,"Содерж");
  if GetFieldL(OWA,1,"Исполнен"): Статус="ИСПОЛНЕН "+DateToString(GetFieldD(OWA,1,"ИсполДата"));
    |GetFieldL(OWA,1,"Аннулирован"): Статус="АННУЛИРОВАН "+DateToString(GetFieldD(OWA,1,"АннулДата"));
    |True: Статус="ТЕКУЩИЙ";
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 if RecSig=nil:
    ПризнДоговор=CardFileRecSign(Раб.Договор.crdДоговор,"Признак","ДОГОВОР",Rec);
   else
    ПризнДоговор=CardFileRecSign(GetCardFileByRefField(Раб.Договор.crdДоговор,"Признак_Ref"),"Признак","ДОГОВОР",RecSig);
 fi;
end;

Proc Вызвать (aДата:D; aДоговор: Record);
 Run=True;
 ДОтчет=aДата;
 recДоговор0=aДоговор;
 OpenBlank("ДОКУМЕНТЫ.ДОГОВОРПОСТ.ОТЧЕТ",True);
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
Proc ДОтчет_onExit (Field:S; Iter:I);
 Очистить;
end;

Func ДОтчет_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:d;
 Template.HideEditor(False);
 tmp=Calendar;
 if not tmp=1.1.100:
    ДОтчет=tmp;
    Очистить;
 fi;
 Return Cur;
end;

Func НомерДок_onEnter(FieldName: String; Iter: Integer): logical;
var rec:record;
var ff:s;
 ff="Рег and not НеДейств";
 if not recПост=nil: ff=ff+" and Контр="+RecordToString(recПост); fi;
 if recПост=nil or FieldName="НомерДок_":
    Rec=Раб.Поиск.ВыборИзКартотеки("Выбор договора, контракта...",Раб.Договор.crdДоговор,"НомерДок","Номер документа",ff);
   else
    Rec=OpenCardFile(Раб.Договор.crdДоговор,ff,recДоговор);
 fi;
 if not Rec=nil:
    recДоговор0=Rec;
    ВзятьДоговор(recДоговор0);
    Очистить;
 fi;
 ^false;
end;

Proc НомерДок_onExit(FieldName: String; Iter: Integer);
 recДоговор=nil;
 ПризнДоговор="";
 Очистить;
end;

Func НомерДок_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Template.HideEditor(False);
 НомерДок_onEnter(AsString(Template.Field),AsInteger(Template.Frame));
 Return Cur;
end;

Func НаимПост_onEnter(FieldName: String; Iter: Integer): logical;
var Rec:record;
 Rec=Раб.Поиск.ВыборИзКартотеки("Выбор контрагента","КОНТРАГЕНТ","ПРИЗНАК|ПОЛНИМЯ|КОРИМЯ|ИНН","Код|Полное имя|Краткое имя|ИНН","");
 if not Rec=nil:
    recПост=Rec;
    ПризнПост=CardFileRecSign("Контрагент","Признак","К",Rec);
    НаимПост=Name_A(ПризнПост);
    if НаимПост=" " or НаимПост="": НаимПост=ПризнПост; fi;
    recДоговор=nil;
    ПризнДоговор="";
    НомерДок="";
 fi;
 Очистить;
 ^False;
end;

Proc НаимПост_onExit (Field:S; Iter:I);
 recПост=nil;
 ПризнПост="";
 recДоговор=nil;
 НомерДок="";
 Очистить;
end;

Func Обеспеч_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="ДС_Сум1Обеспеч" or FieldName="ДС_Дат1Обеспеч" or FieldName="ДС_ПП1Обеспеч":
    Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',1.1.100,ДОтчет+1,"*.3.304.01.730",ДС_ПризнОбеспеч[Iter]);
   |FieldName="ДС_Сум2Обеспеч" or FieldName="ДС_Дат2Обеспеч" or FieldName="ДС_ПП2Обеспеч":
    Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',1.1.100,ДОтчет+1,"*.3.304.01.830|*.3.ЗАБ.00.830",ДС_ПризнОбеспеч[Iter]);
   |FieldName="ДС_ОстОбеспеч": 
    Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',1.1.100,ДОтчет+1,"*.3.304.01.*|*.3.ЗАБ.00.830",ДС_ПризнОбеспеч[Iter]);
   |FieldName="Сум1Обеспеч" or FieldName="Дат1Обеспеч": 
    Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',1.1.100,ДОтчет+1,"+ЗАБ.10!",ПризнДоговор+"&"+ПризнОбеспеч[Iter]);
   |FieldName="Сум2Обеспеч" or FieldName="Дат2Обеспеч": 
    Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',1.1.100,ДОтчет+1,"-ЗАБ.10!",ПризнДоговор+"&"+ПризнОбеспеч[Iter]);
   |FieldName="ОстОбеспеч": 
    Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',1.1.100,ДОтчет+1,"ЗАБ.10!",ПризнДоговор+"&"+ПризнОбеспеч[Iter]);
   |True: 
    if IsBlankOpen("ИНФО.ОБЕСП_ИСПОЛ_ОБЯЗ"):
       Message("Карточка обеспечение исполнения обязательств уже открыта, закройте текущий бланк");
      else
       OpenBlank("ИНФО.ОБЕСП_ИСПОЛ_ОБЯЗ",True,if(Match(FieldName,"ДС_*"),ДС_UKeyОбеспеч[Iter],UKeyОбеспеч[Iter]));
    fi;
 fi;
 Return False;
end;

Func Доп_onEnter(FieldName: String; Iter: Integer): logical;
 OpenBlank(Раб.Договор.blnДоговор,True,recДоп[Iter]);
 Return False;
end;

Test: Section;
Test2: Section;

Proc Сум_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field,Name,tmp:S;
var Iter,n:I;
var Obj: Object;
var ДН_,ДК_:D;
 Name=AsString(Template.Name);
 if not FindObject(Name,Obj): Exit; fi;
 Field=AsString(Obj.Cell(Row,Col-1,CellContents,"",False));
 Iter=AsInteger(Template.Frame);
 ДН_=Dat(1,1,Int(Год_Кт[Iter]));
 ДК_=if(Год_Кт[Iter]<Str(Year(ДОтчет-1)),Dat(1,1,Int(Год_Кт[Iter])+1)-1,ДОтчет);
 n=0;
 if Field="СумКБК_Кт":
    Раб.Договор.altЗагл="Зарегистрированные договоры (ВД "+ВД[Iter]+" КБК "+КБК[Iter]+" {"+Призн[Iter]+"})";
    n=Раб.Договор.Договор_Сум("Рег and ДатаРег<="+DateToString(ДОтчет)+" and Договор="+RecordToString(recДоговор)+" and ВД='"+ВД[Iter]+"' and КБК='"+КБК[Iter]+"' and Призн='"+Призн[Iter]+"'",Год_Кт[Iter],True);
   |Field="СумКБК_Ав":
    Раб.Договор.altЗагл="Зарегистрированные авансы (ВД "+ВД[Iter]+" КБК "+КБК[Iter]+" {"+Призн[Iter]+"})";
    --n=Раб.Договор.ДО_СумКол("Рег and Договор="+RecordToString(recДоговор)+" and Аванс and ДатаРег<="+DateToString(ДОтчет)+" and ТекГод='"+Год_Кт[Iter]+"'","ВД='"+ВД[Iter]+"' and КБК='"+КБК[Iter]+"' and Призн='"+Призн[Iter]+"'","Сум",True);
    n=Раб.Договор.ДО_СумКол("Рег and Pos('"+ПризнДоговор_+".',Up(Признак))=1 and Аванс and ДатаРег<="+DateToString(ДОтчет)+" and ТекГод='"+Год_Кт[Iter]+"'","ВД='"+ВД[Iter]+"' and КБК='"+КБК[Iter]+"' and Призн='"+Призн[Iter]+"'",ДОтчет,"Сум",True);
   |Field="ОплКБК_Ав":
    Раб.Договор.altЗагл="Зарегистрированные оплаты авансов (ВД "+ВД[Iter]+" КБК "+КБК[Iter]+" {"+Призн[Iter]+"})";
    Раб.Договор.exclЗКР=fИсклЗКР;
    n=Раб.Договор.Договор_Оплата(recДоговор,ДН_,ДК_,ВД[Iter],КБК[Iter],Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(Призн[Iter]," ","&"),1,True,True,True);
   |Field="СумКБК_ДО":
    Раб.Договор.altЗагл="Принятые обязательства (ВД "+ВД[Iter]+" КБК "+КБК[Iter]+" {"+Призн[Iter]+"})";
    --n=Раб.Договор.ДО_СумКол("Рег and Договор="+RecordToString(recДоговор)+" and not Аванс and ДатаРег<="+DateToString(ДОтчет)+" and ТекГод='"+Год_Кт[Iter]+"'","ВД='"+ВД[Iter]+"' and КБК='"+КБК[Iter]+"' and Призн='"+Призн[Iter]+"'","Сум",True);
    n=Раб.Договор.ДО_СумКол("Рег and Pos('"+ПризнДоговор_+".',Up(Признак))=1 and not Аванс and ДатаРег<="+DateToString(ДОтчет)+" and ТекГод='"+Год_Кт[Iter]+"'","ВД='"+ВД[Iter]+"' and КБК='"+КБК[Iter]+"' and Призн='"+Призн[Iter]+"'",ДОтчет,"Сум",True);
   |Field="ОплКБК_ДО":
    Раб.Договор.altЗагл="Зарегистрированные оплаты обязательств (ВД "+ВД[Iter]+" КБК "+КБК[Iter]+" {"+Призн[Iter]+"})";
    Раб.Договор.exclЗКР=fИсклЗКР;
    Раб.Договор.exclЗачетАв=True;
    n=Раб.Договор.Договор_Оплата(recДоговор,ДН_,ДК_,ВД[Iter],КБК[Iter],Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(Призн[Iter]," ","&"),-1,True,True,True);
   |Field="СумКБК_ЗА":
    Раб.Договор.altЗагл="Зарегистрированные зачеты авансов (ВД "+ВД[Iter]+" КБК "+КБК[Iter]+" {"+Призн[Iter]+"})";
    tmp=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(Призн[Iter]," ","&");
    if isТекГод_Кт[Iter]:
       tmp=Раб.Бюджет2005.Объединить(tmp,"(ПЕРИОД."+Год_Кт[Iter]+"!","&");
       tmp=Раб.Бюджет2005.Объединить(tmp,"~ПЕРИОД.*)","|");
      else
       tmp=Раб.Бюджет2005.Объединить(tmp,"ПЕРИОД."+Год_Кт[Iter]+"!","&");
    fi;
    Раб.Договор.exclСписанАв=True;
    n=Раб.Договор.Договор_ЗачетАванса(recДоговор,1.1.100,ДОтчет,ВД[Iter],КБК[Iter],tmp,True,True,True,True);
   |Field="СумКБК_СА":
    Раб.Договор.altЗагл="Зарегистрированные списания авансов (ВД "+ВД[Iter]+" КБК "+КБК[Iter]+" {"+Призн[Iter]+"})";
    tmp=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(Призн[Iter]," ","&");
    if isТекГод_Кт[Iter]:
       tmp=Раб.Бюджет2005.Объединить(tmp,"(ПЕРИОД."+Год_Кт[Iter]+"!","&");
       tmp=Раб.Бюджет2005.Объединить(tmp,"~ПЕРИОД.*)","|");
      else
       tmp=Раб.Бюджет2005.Объединить(tmp,"ПЕРИОД."+Год_Кт[Iter]+"!","&");
    fi;
    Раб.Договор.exclЗачетАв=True;
    n=Раб.Договор.Договор_ЗачетАванса(recДоговор,1.1.100,ДОтчет,ВД[Iter],КБК[Iter],tmp,True,True,True,True);
   |Field="ДО_Сум":
    if ДО_Crd[Iter]="": TransOpenJur(RecordToInteger(ДО_UKey[Iter]));
      |ДО_Crd[Iter]="null": Exit;
      |True: OpenCardFile(ДО_Crd[Iter],"",ДО_UKey[Iter]);
    fi;
   |Field="Опл_Сум":
    if Опл_Crd[Iter]="": TransOpenJur(RecordToInteger(Опл_UKey[Iter]));
      |Опл_Crd[Iter]="null": Exit;
      |True: OpenCardFile(Опл_Crd[Iter],"",Опл_UKey[Iter]);
    fi;
 fi;
 if n>0:
    if Раб.Договор.lstКарт[n]="":
       TransOpenJur(RecordToInteger(Раб.Договор.lstДок[n]));
      else
       OpenCardFile(Раб.Договор.lstКарт[n],"",Раб.Договор.lstДок[n]);
    fi;
 fi;
end;

Func ЗКР_OnEnter(FieldName: String; Iter: Integer): logical;
 if not ЗКР_UKey[Iter]=nil:
    OpenBlank("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР",True,ЗКР_UKey[Iter]);
 fi;
 Return False;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_OnClick (Obj:S);
var Iter:I;
var Всего_Сум_Кт_:N;
 if ДОтчет=1.1.100: Message("Введите дату отчета",mtError); Template.Field="ДОтчет"; Exit; fi;
 if recДоговор0=nil or НомерДок="" or recПост=nil or НаимПост="": Message("Выберите контракт, договор...",mtError); Template.Field="НомерДок"; Exit; fi;
 Refresh(False,ДОтчет+1);
 Отч="Составлен: "+DateToString(ToDay)+" в "+Раб.Бюджет2005.TimeToStr(Time,"")+" Пользователь: "+UserName(AliasName("РПО_БЮДЖ_КЛАСС"));
 ClearTrace;
 ВзятьДоговор(recДоговор0);
 РасчетОбеспеч;
 РасчетДоп;
 Расчет;
 Всего_Сум_Кт_=0;
 Iter=1;
 While Iter<=УпрКБК do
  if СумКБК_Кт[Iter]=0 and СумКБК_Ав[Iter]=0 and ОплКБК_Ав[Iter]=0 and СумКБК_ДО[Iter]=0 and ОплКБК_ДО[Iter]=0 and СумКБК_ЗА[Iter]=0:
     DeleteFrame(УпрКБК,Iter);
    else
     Всего_Сум_Кт_=Всего_Сум_Кт_+if(isТекГод_Кт[Iter],СумКБК_Кт[Iter]+КорКБК_Кт[Iter],СумКБК_ДО[Iter]);
     Iter=Iter+1;
  fi;
 od;
 for Iter=1..УпрДО do
  if Iter=1:
     Исп[Iter]=Всего_Сум_Кт_-Исп[Iter];
     Опл[Iter]=Всего_Сум_Кт_-Опл[Iter];
    else
     ДЗ[Iter]=ДЗ[Iter-1]+ДЗ[Iter];
     КЗ[Iter]=КЗ[Iter-1]+КЗ[Iter];
     Исп[Iter]=Исп[Iter-1]-Исп[Iter];
     Опл[Iter]=Опл[Iter-1]-Опл[Iter];
  fi;
 od;
 Message("Расчет завершен");
 for Iter=1..УпрКБК do
  if not Round(СумКБК_ДЗ[Iter],2)=0 and not Round(СумКБК_КЗ[Iter],2)=0:
     Message("Внимание ! Обнаружен не закрытый аванс по виду деятельности "+ВД[Iter]+" КБК "+КБК[Iter]+" {"+Призн[Iter]+"}",mtWarning); Template.Field="СумКБК_ДЗ"; Template.Frame=Iter; Exit;
  fi;
  if Round(СумКБК_Кт_И[Iter],2)<0:
     Message("Внимание ! Обнаружена перевыполнение по виду деятельности "+ВД[Iter]+" КБК "+КБК[Iter]+" {"+Призн[Iter]+"}",mtWarning); Template.Field="СумКБК_Кт_И"; Template.Frame=Iter; Exit;
  fi;
  if Round(СумКБК_Кт_О[Iter],2)<0:
     Message("Внимание ! Обнаружена переплата по виду деятельности "+ВД[Iter]+" КБК "+КБК[Iter]+" {"+Призн[Iter]+"}",mtWarning); Template.Field="СумКБК_Кт_О"; Template.Frame=Iter; Exit;
  fi;
 od;
end;

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

Proc cbИсклЗКР_OnChange(Sender: String);
 btnРасчет_OnClick(Sender);
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc onOpen (Create:L);
 Раб.Настр_Печать.Cfg("",SelfCfg);
 if ДОтчет=1.1.100: ДОтчет=ToDay; fi;
 if Run:
    Run=False;
    btnРасчет_OnClick("");
 fi;
end;
--Обработчики событий шаблона -----
--


Конец
