-- Шаблон создан мастером бланков
-- 03.04.2006 11:14:58
--
БланкСШаблоном "Журнал регистрации бюджетных обязательств. ф.0504064";

ДН:D;
ДК_:D;
var ДК:D=if(ДК_=1.1.100,if(ДН>ToDay,ДН+1,ToDay+1),ДК_);
var YYYY:I=Year(ДН);

var УслСчБО  :S="*.1.502.11.*";
var КодСчБО  :S="1.502.11";
var УслКоррБО:S="*.1.501.13.*|*.1.503.13.*";
var УслСчДО  :S="*.1.502.12.*";
var КодСчДО  :S="1.502.12";
var УслКоррДО:S="*.1.502.11.*";
var УслСчКР  :S="*.1.304.05.*";
var SelfCrd  :S="РПО_СВЕД_БО";
var SelfBln  :S="ДОКУМЕНТЫ.ЛБО.СВЕД_БО";

fДО:L;
fБО:L;
РегБО:L;
ИспБО:L;
НеИспБО:L;
fГруппаБО:L;

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

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

МаскаКБК:S;
УслАнДоп:S;
var УслАнДоп_:S=if(УслАнДоп="","","("+УслАнДоп+")");

var Упр:I;

var Key[]:S;
var НаимДок[]:S;
var ДатДок[]:D;
var НомДок[]:S;
var СчБО[]:S;
var СчКР[]:S;
var СумБО[]:N;
var СумКР[]:N;
var СумОст[]:N=СумБО[$]-СумКР[$];
var ДатБО1[]:D;
var ДатБО2[]:D;
var Примеч[]:S;
var Кмнт[]:S;
var ID[]:S;
var ПризнБО[]:S;
var ПризнК[]:S;
var ПризнДоговор[]:S;

var ВсегоСумБО:N=SumOfArray(СумБО,Упр);
var ВсегоСумКР:N=SumOfArray(СумКР,Упр);
var ВсегоСумОст:N=ВсегоСумБО-ВсегоСумКР;

ДолжнИсп:S;
ФИОИсп:S;
var ДатаФ:D;

S1:Section;
S2:Section;
S3:Section;
S4:Section;

cbРегБО:Object;
cbИспБО:Object;
cbНеИспБО:Object;

var Buf[]:S;

var НаимДок_:S;
var ДатДок_:D;
var НомДок_:S;
var Примеч_:S;
var СнятУчет_:L;
var Рег_:L;
var ID_:S;

var hCrd:S;
var hRec:Record;
--
--Процедуры и функции ------------- 
Proc Оформление;
var s:i;
var Obj: Object;
 for s=1..4 do
  if FindObject("S"+Str(s),Obj):
     Obj.Column(6,ColVisible,ИспБО and not fДО);
     Obj.Column(7,ColVisible,ИспБО and not fДО);
     if ИспБО and not fДО:
	Obj.Column(3 ,ColWidth,280);
	Obj.Column(5 ,ColWidth,250);
	Obj.Column(10,ColWidth,540);
       else
	Obj.Column(3 ,ColWidth,340);
	Obj.Column(5 ,ColWidth,290);
	Obj.Column(10,ColWidth,870);
     fi;
  fi;
 od;
 cbИспБО.Enabled=not fДО;
 cbНеИспБО.Enabled=ИспБО and not fДО;
 S4.Visible=not (fБО and fДО);
end;

Proc Группировать;
var Iter,c,cc,r,rr,bg:I;
var Key_,tmp,idx:S;
 S1.Visible=False;
 S2.Visible=False;
 S1.RowsCount=4+Упр;
 r=4;
 bg=coTransparent;
 if ПризнБО[1]="~БО.*" or ПризнБО[1]="БО.000":
    if ПризнДоговор[1]="~ДОГОВОР.*" or ПризнДоговор[1]="~ДОГОВОР.000" or ПризнДоговор[1]="":
       Key_=ПризнК[1]+"#"+ExtractWords(4,3,Key[1],"#"); --Контрагент#ДатаДок#НамиДок#НомДок
      else
       Key_=ПризнК[1]+"#"+ExtractWords(1,3,ПризнДоговор[1],"#"); --Контрагент#Договор
    fi;
   else
    Key_=ПризнБО[1];
 fi;
 for Iter=1..Упр do
 if ПризнБО[Iter]="~БО.*" or ПризнБО[Iter]="БО.000":
    if ПризнДоговор[Iter]="~ДОГОВОР.*" or ПризнДоговор[Iter]="~ДОГОВОР.000" or ПризнДоговор[Iter]="":
       tmp=ПризнК[Iter]+"#"+ExtractWords(4,3,Key[Iter],"#"); --Контрагент#ДатаДок#НамиДок#НомДок
      else
       tmp=ПризнК[Iter]+"#"+ExtractWords(1,3,ПризнДоговор[Iter],"#"); --Контрагент#Договор
    fi;
   else
    tmp=ПризнБО[Iter];
 fi;
  if not Key_=tmp:
     bg=if(bg=coTransparent,Раб.Цвета.co_DIC,coTransparent);
     Key_=tmp;
  fi;
  r=r+1;
  idx="["+Str(Iter)+"]";
  for c=1..10 do
   S1.Cell(r,c,CellBorder,if(c=1:"2,1,1,1"|c=10:"1,1,2,1"|true:"1,1,1,1"));
   S1.Cell(r,c,CellBgColor,bg);
  od;
  c=1;	S1.Cell(r,c,CellContents,"НаимДок"+idx,True);S1.Cell(r,c,CellFieldType,cftCommonField);  S1.Cell(r,c,CellAlignment,2);
  c=2;	S1.Cell(r,c,CellContents,"ДатДок"+idx,True); S1.Cell(r,c,CellFieldType,cftCommonField);  S1.Cell(r,c,CellAlignment,2);
  c=3;	S1.Cell(r,c,CellContents,"НомДок"+idx,True); S1.Cell(r,c,CellFieldType,cftCommonField);  S1.Cell(r,c,CellAlignment,2); S1.Cell(r,c,CellLookup,True); S1.Cell(r,c,CellEventOnLookup,"НомДок_OnLookup");
  c=4;	S1.Cell(r,c,CellContents,"СчБО"+idx,True);   S1.Cell(r,c,CellFieldType,cftCommonField);  S1.Cell(r,c,CellAlignment,2);
  c=5;	S1.Cell(r,c,CellContents,"СумБО"+idx,True);  S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellFormat,",##0.00;;-"); S1.Cell(r,c,CellLookup,True); S1.Cell(r,c,CellEventOnLookup,"СумБО_OnLookup");
  c=6;	S1.Cell(r,c,CellContents,"СумКР"+idx,True);  S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellFormat,",##0.00;;-"); S1.Cell(r,c,CellLookup,True); S1.Cell(r,c,CellEventOnLookup,"СумКР_OnLookup");
  c=7;	S1.Cell(r,c,CellContents,"СумОст"+idx,True); S1.Cell(r,c,CellFieldType,cftNumericField); S1.Cell(r,c,CellAlignment,1); S1.Cell(r,c,CellFormat,",##0.00;;-");
  c=8;	S1.Cell(r,c,CellContents,"ДатБО1"+idx,True); S1.Cell(r,c,CellFieldType,cftCommonField);  S1.Cell(r,c,CellAlignment,2);
  c=9;	S1.Cell(r,c,CellContents,"ДатБО2"+idx,True); S1.Cell(r,c,CellFieldType,cftCommonField);  S1.Cell(r,c,CellAlignment,2);
  c=10; S1.Cell(r,c,CellContents,"Примеч"+idx,True); S1.Cell(r,c,CellFieldType,cftCommonField);  S1.Cell(r,c,CellAlignment,0);
 od;
 S1.Visible=True;
end;

Proc Очистить;
 Template.Field="НаимДок";
 S1.RowsCount=4;
 S2.Visible=True;
 ClearVariable(Упр);
 ClearVariable(Key);
 ClearVariable(НаимДок);
 ClearVariable(ДатДок);
 ClearVariable(НомДок);
 ClearVariable(СчБО);
 ClearVariable(СчКР);
 ClearVariable(СумБО);
 ClearVariable(СумКР);
 ClearVariable(ДатБО1);
 ClearVariable(ДатБО2);
 ClearVariable(Примеч);
 ClearVariable(Кмнт);
 ClearVariable(ID);
 ClearVariable(ПризнБО);
 ClearVariable(ПризнК);
 ClearVariable(ПризнДоговор);
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;

Proc ВзятьИзБО(aCrd:S; aRec:Record);
var OWA,n:I;
var tmp:S;
 if not hCrd=aCrd or not hRec=aRec:
    НаимДок_=""; ДатДок_=1.1.100; НомДок_=""; Примеч_=""; СнятУчет_=False; Рег_=False;
    hCrd=aCrd;
    hRec=aRec;
    OWA=Раб.ИмяПолеКарт.ВзятьКартОбл(aCrd);
    n=GetRecordNumber(OWA,aRec);
    Рег_=GetFieldL(OWA,n,"Рег");
    tmp=GetFieldS(OWA,n,"Осн_ДокНом");
    if tmp="":
       НаимДок_="Исполнительный документ";
       ДатДок_=GetFieldD(OWA,n,"Исп_ДокДат");
       НомДок_=GetFieldS(OWA,n,"Исп_ДокНом");
      else
       if tmp="1":
	  НаимДок_="Государственный контракт";
	 else
	  НаимДок_=GetFieldS(OWA,n,"Осн_ДокНаим");
	  if НаимДок_="": НаимДок_="Иной договор"; fi;
       fi;
       ДатДок_=GetFieldD(OWA,n,"Осн_ДокДат");
       НомДок_=GetFieldS(OWA,n,"Осн_ДокНом");
       Примеч_="Свед.№: "+GetFieldS(OWA,n,"Признак")+" "+if(Рег_,"Учет.ном.: "+GetFieldS(OWA,n,"РегНомер"),"");
       Примеч_=Примеч_+if(GetFieldR(OWA,n,"РеквП")=nil,"",Chr(13)+GetFieldS(OWA,n,"РеквП.КорИмя"));
       Try
	Примеч_=Примеч_+if(not GetFieldR(OWA,n,"ДОГОВОР")=nil:Chr(13)+"("+GetFieldS(OWA,n,"Договор.Содерж")+")"|not GetFieldR(OWA,n,"ДО")=nil:Chr(13)+"("+GetFieldS(OWA,n,"ДО.Содерж")+")"|true:"");
       Except
       end;
    fi;
    СнятУчет_=GetFieldI(OWA,n,"ТипДок")=1 and (GetFieldS(OWA,n,"Доп_Статус")="1" or GetFieldS(OWA,n,"Доп_Статус")="2");
 fi;
end;

Proc ВзятьИзЗКР(aCrd:S; aRec:Record);
var OWA,n:I;
 if not hCrd=aCrd or not hRec=aRec:
    НаимДок_=""; ДатДок_=1.1.100; НомДок_=""; Примеч_=""; СнятУчет_=False; Рег_=False;
    hCrd=aCrd;
    hRec=aRec;
    OWA=Раб.ИмяПолеКарт.ВзятьКартОбл(aCrd);
    n=GetRecordNumber(OWA,aRec);
    НаимДок_=GetFieldS(OWA,n,"Осн_ДокВид");
    ДатДок_=GetFieldD(OWA,n,"Осн_ДокДат");
    НомДок_=GetFieldS(OWA,n,"Осн_ДокНом");
    Примеч_=if(GetFieldR(OWA,n,"РеквП")=nil,"",GetFieldS(OWA,n,"РеквП.КорИмя"));
    Примеч_=Раб.Бюджет2005.Объединить(Примеч_,if(GetFieldS(OWA,n,"Осн_ДокПредм")="","","("+GetFieldS(OWA,n,"Осн_ДокПредм")+")"),Chr(13));
 fi;
end;


Proc Расчет;
var t,z,OWA,n:i;
var УслСч,УслАн,tСч,tПризн,tКарт,ПризнБО_,ПризнК_,ПризнДоговор_,СчБО_,Crd,Key_,tmp1,tmp2 :S;
var tСум:N;
var tДат:D;
var tЗап,Rec:Record;
var fromПризн:L;
 Refresh;
 Раб.CRC16.Init;
 Очистить;
 УслСч="("+УслСчБО+")"+if(МаскаКБК="","","&"+Раб.Бюджет2005.ВзятьКодКБК(МаскаКБК,"КР","КБК",False)+".*."+Раб.Бюджет2005.ВзятьКодКБК(МаскаКБК,"КР","КОСГУ",False))+"/"+УслКоррБО;
 УслАн=Раб.Бюджет2005.Объединить(ПризнПодр,УслАнДоп_,"&");
 ShowProgress(if(fБО,(ДК-ДН),0)+if(ИспБО,(ДК-ДН),0)+if(fДО,(ДК-ДН),0),"Расчет...");
 Раб.ИмяПолеКарт.Начать;
 Try
  if fБО:
     for Transaction t=УслСч+"{"+УслАн+"}",ДН,ДК do
      tДат=TransDate(t);
      ProgressPos((ДК-ДН)-(ДК-tДат));
      tСум=TransSum(t);
      tСч=TransCre(t);
      if not Match(tСч,УслСчБО):
	 tСч=TransDeb(t);
	 tСум=-tСум;
      fi;
      tПризн=TransSigns(t);
      ПризнБО_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","БО.*","");
      if ПризнБО_="": ПризнБО_="~БО.*"; fi;
      ПризнК_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","К.*","");
      if ПризнК_="":
	 ПризнК_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","МОЛ.*","");
      fi;
      if ПризнК_="": ПризнК_="~К.*"; fi;
      ПризнДоговор_=" ";
      Key_=ПризнБО_+"#"+ПризнК_+"#"+ПризнДоговор_;
      tКарт=TransCardFile(t);
      tЗап=TransRecord(t);
      if tКарт=SelfCrd:
	 ВзятьИзБО(tКарт,tЗап);
	 fromПризн=False;
	|tКарт="РПО_ЗАЯВКА_КР":
	 ВзятьИзЗКР(tКарт,tЗап);
	 if НаимДок_="" and НомДок_="":
	    НаимДок_=Раб.ИмяПолеКарт.ЗначПоляС(tКарт,"Док",tЗап);
	    if НаимДок_="": НаимДок_=Раб.ИмяПолеКарт.ИмяДокумента(tКарт); fi;
	    ДатДок_=Раб.ИмяПолеКарт.ЗначПоляД(tКарт,"Дата",tЗап);
	    НомДок_=Раб.ИмяПолеКарт.ЗначПоляС(tКарт,"Номер",tЗап);
	 fi;
	 if ПризнБО_="~БО.*":
	    Примеч_=Раб.Бюджет2005.Объединить("Свед.№: "+SubStr(ПризнБО_,4,255),Примеч_,Chr(13));
	 fi;
	 fromПризн=False;
	 Key_=Key_+"#"+Раб.Формат.ДатаСтр(ДатДок_,Раб.Формат.dfYYYYMMDD)+"#"+Str16(Раб.CRC16.CRC16_(0,НаимДок_))+"#"+Str16(Раб.CRC16.CRC16_(0,НомДок_));
	|True:
	 Crd=SignCardFile(ПризнБО_,False);
	 if Crd=SelfCrd:
	    Rec=SignToRecord(ПризнБО_,False);
	    ВзятьИзБО(Crd,Rec);
	   else
	    hCrd="";
	    hRec=nil;
	    НаимДок_=Раб.ИмяПолеКарт.ЗначПоляС(tКарт,"Док",tЗап);
	    if НаимДок_="": НаимДок_=Раб.ИмяПолеКарт.ИмяДокумента(tКарт); fi;
	    ДатДок_=Раб.ИмяПолеКарт.ЗначПоляД(tКарт,"Дата",tЗап);
	    НомДок_=Раб.ИмяПолеКарт.ЗначПоляС(tКарт,"Номер",tЗап);
	    tmp1=Trim(Name_A(ПризнК_));
	    tmp2=TransComment(t);
	    if (Length(tmp1)+Length(tmp2)+5)>255: tmp2=SubStr(tmp2, 1, 256-Length(tmp1)-5); fi;
	    Примеч_=Раб.Бюджет2005.Объединить(tmp1, "("+tmp2+")",Chr(13));
	    СнятУчет_=False;
	    Рег_=False;
	    Key_=Key_+"#"+Раб.Формат.ДатаСтр(ДатДок_,Раб.Формат.dfYYYYMMDD)+"#"+Str16(Раб.CRC16.CRC16_(0,НаимДок_))+"#"+Str16(Раб.CRC16.CRC16_(0,НомДок_));
	 fi;
	 fromПризн=True;
      fi;
      Key_=Key_+"#"+tСч;
      if (РегБО and Рег_) or not РегБО:
	 z=SearchInArray(Key,Key_,True);
	 if z=-1:
	    z=InsertInArraySort(Key,Key_);
	    InsertFrame(Упр,z);
	    НаимДок[z]=НаимДок_;
	    ДатДок[z]=ДатДок_;
	    НомДок[z]=НомДок_;
	    СчБО[z]=tСч;
	    СумБО[z]=tСум;
	    СумКР[z]=0;
	    ДатБО1[z]=tДат;
	    ДатБО2[z]=if(СнятУчет_,tДат,1.1.100);
	    Примеч[z]=Примеч_;
	    ПризнБО[z]=ПризнБО_;
	    ПризнК[z]=ПризнК_;
	    ПризнДоговор[z]="";
	    ID[z]=if(tКарт="",ПризнБО_,tКарт+"#"+RecordToString(tЗап));
	    СчКр[z]="";
	   else
	    if not fromПризн:
	       НаимДок[z]=НаимДок_;
	       ДатДок[z]=ДатДок_;
	       НомДок[z]=НомДок_;
	       СчБО[z]=tСч;
	       ДатБО2[z]=if(СнятУчет_,tДат,1.1.100);
	       Примеч[z]=Примеч_;
	       ID[z]=if(tКарт="","",tКарт+"#"+RecordToString(tЗап));
	       СчКр[z]="";
	    fi;
	    СумБО[z]=СумБО[z]+tСум;
	 fi;
      fi;
     od;
  fi;
  --
  if fДО:
     УслСч="("+УслСчДО+")"+if(МаскаКБК="","","&"+Раб.Бюджет2005.ВзятьКодКБК(МаскаКБК,"КР","КБК",False)+".*."+Раб.Бюджет2005.ВзятьКодКБК(МаскаКБК,"КР","КОСГУ",False))+"/"+УслКоррДО;
     УслАн=Раб.Бюджет2005.Объединить(ПризнПодр,УслАнДоп_,"&");
     for Transaction t=УслСч+"{"+УслАн+"}",ДН,ДК do
      tДат=TransDate(t);
      ProgressPos(if(fБО,(ДК-ДН),0)+(ДК-ДН)-(ДК-tДат));
      tСум=TransSum(t);
      tСч=TransCre(t);
      if not Match(tСч,УслСчДО):
	 tСч=TransDeb(t);
	 tСум=-tСум;
      fi;
      tПризн=TransSigns(t);
      ПризнБО_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","БО.*","");
      if ПризнБО_="": ПризнБО_="~БО.*"; fi;
      ПризнК_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","К.*","");
      if ПризнК_="":
	 ПризнК_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","МОЛ.*","");
      fi;
      if ПризнК_="": ПризнК_="~К.*"; fi;
      ПризнДоговор_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","ДОГОВОР.*","");
      if ПризнДоговор_="": 
	 ПризнДоговор_="~ДОГОВОР.*";
	 Key_=ПризнБО_+"#"+ПризнК_+"#"+" ";
	else
	 Key_=ПризнБО_+"#"+ПризнК_+"#"+ПризнДоговор_;
      fi;
      tКарт=TransCardFile(t);
      tЗап=TransRecord(t);
      Crd=SignCardFile(ПризнБО_,False);
      if Crd=SelfCrd:
	 Rec=SignToRecord(ПризнБО_,False);
	 ВзятьИзБО(Crd,Rec); --нам нужно только статус регистрации
      fi;
      Crd=SignCardFile(ПризнДоговор_,False);
      if Crd="РПО_ДО":
	 Rec=SignToRecord(ПризнДоговор_,False);
	else
	 Crd=tКарт;
	 Rec=tЗап;
      fi;
      hCrd=""; hRec=nil; НаимДок_="?"; ДатДок_=1.1.100; НомДок_="?"; Примеч_=Trim(Name_A(ПризнК_)); СнятУчет_=False;
      if Crd="":
	 Примеч_=Раб.Бюджет2005.Объединить(Примеч_,"("+TransComment(t)+")",Chr(13));
	else
	 НаимДок_=Раб.ИмяПолеКарт.ЗначПоляС(Crd,"Док",Rec);
	 if НаимДок_="": НаимДок_=Раб.ИмяПолеКарт.ИмяДокумента(Crd); fi;
	 ДатДок_=Раб.ИмяПолеКарт.ЗначПоляД(Crd,"Дата",Rec);
	 НомДок_=Раб.ИмяПолеКарт.ЗначПоляС(Crd,"Номер",Rec);
	 if not ПризнБО_="~БО.*":
	    Примеч_=Раб.Бюджет2005.Объединить("Свед.№: "+SubStr(ПризнБО_,4,255),Примеч_,Chr(13));
	 fi;
	 Примеч_=Раб.Бюджет2005.Объединить(Примеч_,"("+Раб.ИмяПолеКарт.ЗначПоляС(Crd,"Коммент",Rec)+")",Chr(13));
      fi;
      if ПризнДоговор_="~ДОГОВОР.*":
	 Key_=Key_+"#"+Раб.Формат.ДатаСтр(ДатДок_,Раб.Формат.dfYYYYMMDD)+"#"+Str16(Раб.CRC16.CRC16_(0,НаимДок_))+"#"+Str16(Раб.CRC16.CRC16_(0,НомДок_));
      fi;
      Key_=Key_+"#"+tСч;
      if (РегБО and Рег_) or not РегБО:
	 z=SearchInArray(Key,Key_,True);
	 if z=-1:
	    z=InsertInArraySort(Key,Key_);
	    InsertFrame(Упр,z);
	    НаимДок[z]=НаимДок_;
	    ДатДок[z]=ДатДок_;
	    НомДок[z]=НомДок_;
	    СчБО[z]=tСч;
	    СумБО[z]=tСум;
	    СумКР[z]=0;
	    ДатБО1[z]=tДат;
	    ДатБО2[z]=1.1.100;
	    Примеч[z]=Примеч_;
	    ПризнБО[z]=ПризнБО_;
	    ПризнК[z]=ПризнК_;
	    ПризнДоговор[z]=ПризнДоговор_;
	    ID[z]=if(Crd="","",Crd+"#"+RecordToString(Rec));
	    СчКр[z]="";
	   else
	    СумБО[z]=СумБО[z]+tСум;
	 fi;
      fi;
     od;
  fi;
  --
  if ИспБО and not fДО:
     УслСч="("+УслСчКР+")"+if(МаскаКБК="","","&"+Раб.Бюджет2005.ВзятьКодКБК(МаскаКБК,"КР","КБК",False)+".*."+Раб.Бюджет2005.ВзятьКодКБК(МаскаКБК,"КР","КОСГУ",False));
     УслАн=Раб.Бюджет2005.Объединить(УслАн,"БО.*","&");
     for Transaction t=УслСч+"{"+УслАн+"}",ДН,ДК do
      tДат=TransDate(t);
      ProgressPos(if(fБО,(ДК-ДН),0)+if(fДО,(ДК-ДН),0)+(ДК-ДН)-(ДК-tДат));
      tКарт=TransCardFile(t);
      tЗап=TransRecord(t);
      tСум=TransSum(t);
      tСч=TransCre(t);
      if not Match(tСч,УслСчКР):
	 tСч=TransDeb(t);
	 tСум=-tСум;
      fi;
      СчБО_=Раб.Бюджет2005.ВзятьКодСчета(tСч,"","БК",False)+"."+КодСчБО+"."+Раб.Бюджет2005.ВзятьКодСчета(tСч,"","КОСГУ",False);
      tПризн=TransSigns(t);
      ПризнБО_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","БО.*","");
      ПризнК_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tПризн," ","К.*","");
      if ПризнК_="": ПризнК_="~К.*"; fi;
      ПризнДоговор_=" ";
      Key_=ПризнБО_+"#"+ПризнК_+"#"+ПризнДоговор_;
      Crd=SignCardFile(ПризнБО_,False);
      Rec=SignToRecord(ПризнБО_,False);
      if Crd=SelfCrd:
	 ВзятьИзБО(Crd,Rec);
	else
	 hCrd=""; hRec=nil; НаимДок_="?"; ДатДок_=1.1.100; НомДок_="?"; Примеч_=Trim(Name_A(ПризнК_)); СнятУчет_=False; Рег_=False;
	 if tКарт="ПОРУЧ":
	    OWA=Раб.ИмяПолеКарт.ВзятьКартОбл(tКарт);
	    n=GetRecordNumber(OWA,tЗап);
	    Rec=GetFieldR(OWA,n,"РПО_ЗАЯВКА_КР");
	    if not Rec=nil:
	       НаимДок_=GetFieldS(OWA,n,"РПО_Заявка_КР.Осн_ДокВид");
	       ДатДок_=GetFieldD(OWA,n,"РПО_Заявка_КР.Осн_ДокДат");
	       НомДок_=GetFieldS(OWA,n,"РПО_Заявка_КР.Осн_ДокНом");
	       Примеч_=if(GetFieldR(OWA,n,"РПО_Заявка_КР.РеквП")=nil,"",GetFieldS(OWA,n,"РПО_Заявка_КР.РеквП.КорИмя"));
	       Примеч_=Раб.Бюджет2005.Объединить(Примеч_,if(GetFieldS(OWA,n,"РПО_Заявка_КР.Осн_ДокПредм")="","","("+GetFieldS(OWA,n,"РПО_Заявка_КР.Осн_ДокПредм")+")"),Chr(13));
	       if НаимДок_="" and НомДок_="":
		  НаимДок_=Раб.ИмяПолеКарт.ЗначПоляС("РПО_ЗАЯВКА_КР","Док",Rec);
		  if НаимДок_="": НаимДок_=Раб.ИмяПолеКарт.ИмяДокумента("РПО_ЗАЯВКА_КР"); fi;
		  ДатДок_=Раб.ИмяПолеКарт.ЗначПоляД("РПО_ЗАЯВКА_КР","Дата",Rec);
		  НомДок_=Раб.ИмяПолеКарт.ЗначПоляС("РПО_ЗАЯВКА_КР","Номер",Rec);
	       fi;
	       Key_=Key_+"#"+Раб.Формат.ДатаСтр(ДатДок_,Раб.Формат.dfYYYYMMDD)+"#"+Str16(Раб.CRC16.CRC16_(0,НаимДок_))+"#"+Str16(Раб.CRC16.CRC16_(0,НомДок_));
	       if НаимДок_="" and НомДок_="": НаимДок_="?"; НомДок_="?"; fi;
	    fi;
	   else
	    НаимДок_=Раб.ИмяПолеКарт.ЗначПоляС(tКарт,"Док",tЗап);
	    if НаимДок_="": НаимДок_=Раб.ИмяПолеКарт.ИмяДокумента(tКарт); fi;
	    ДатДок_=Раб.ИмяПолеКарт.ЗначПоляД(tКарт,"Дата",tЗап);
	    НомДок_=Раб.ИмяПолеКарт.ЗначПоляС(tКарт,"Номер",tЗап);
	    Key_=Key_+"#"+Раб.Формат.ДатаСтр(ДатДок_,Раб.Формат.dfYYYYMMDD)+"#"+Str16(Раб.CRC16.CRC16_(0,НаимДок_))+"#"+Str16(Раб.CRC16.CRC16_(0,НомДок_));
	    if НаимДок_="" and НомДок_="": НаимДок_="?"; НомДок_="?"; fi;
	 fi;
	 Примеч_=Раб.Бюджет2005.Объединить("Свед.№: "+SubStr(ПризнБО_,4,255),Примеч_,Chr(13));
      fi;
      Key_=Key_+"#"+СчБО_;
      if (РегБО and Рег_) or not РегБО:
	 z=SearchInArray(Key,Key_,True);
	 if z=-1:
	    z=InsertInArraySort(Key,Key_);
	    InsertFrame(Упр,z);
	    НаимДок[z]=НаимДок_;
	    ДатДок[z]=ДатДок_;
	    НомДок[z]=НомДок_;
	    СчБО[z]=СчБО_;
	    СумБО[z]=0;
	    СумКР[z]=tСум;
	    ДатБО1[z]=tДат;
	    ДатБО2[z]=if(СнятУчет_,tДат,1.1.100);
	    Примеч[z]=Примеч_;
	    Кмнт[z]="Внимание! Сведения о обязательстве не найдено";
	    ПризнБО[z]=ПризнБО_;
	    ПризнК[z]=ПризнК_;
	    ПризнДоговор[z]="";
	    ID[z]="";
	    СчКр[z]=tСч;
	   else
	    СчКр[z]=tСч;
	    СумКР[z]=СумКР[z]+tСум;
	 fi;
      fi;
     od;
     if НеИспБО:
	n=1;
	While n<=Упр do
	 if Round(СумОст[n],2)=0:
	    DeleteFrame(Упр,n);
	   else
	    n=n+1;
	 fi;
	od;
     fi;
  fi;
 Finally
  Раб.ИмяПолеКарт.Закончить;
  CloseProgress;
 end;
 if fГруппаБО:
    if not Упр=0: Группировать; fi;
   else
    SortSection(Упр,"ДатБО1");
    СумБО[1]=СумБО[1]; --вызываем пересчет формулы, после сартировки
 fi;
 Message("Расчет завершен");
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
Proc Field_OnExit(FieldName: String; Iter: Integer);
 Очистить;
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);
 if Field="ДН" or Field="ДК_": Очистить; fi;
 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;

Func МаскаКБК_OnEnter(FieldName: String; Iter: Integer): logical;
 МаскаКБК=Раб.КБК.ВыбратьМаскуКБК("ФКР",УслСчБО,МаскаКБК,True);
 Очистить;
 Return False;
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=AnaElection("*");
 if tmp="": ^Cur; fi;
 PutVariableS(Field,Объединить(GetVariableS(Field),tmp));
 if Field="АнУслДоп": Очистить; fi;
 Return  Cur;
end;

Func НомДок_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter,p1,p2:I;
var crd,УслСч,УслАн,Field:S;
var Rec: Record;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 Field=AsString(Template.Field);
 p1=Pos("[",Field);
 if not p1=0:
    p2=Pos("]",Field);
    Iter=Int(SubStr(Field,p1+1,p2-p1-1));
 fi;
 if ID[Iter]="":
    УслСч=СчБО[Iter]+"/"+УслКоррБО;
    УслАн=Раб.Бюджет2005.Объединить(ПризнБО[Iter],ПризнК[Iter],"&");
    УслАн=Раб.Бюджет2005.Объединить(УслАн,ПризнДоговор[Iter],"&");
    УслАн=Раб.Бюджет2005.Объединить(УслАн,ПризнПодр,"&");
    УслАн=Раб.Бюджет2005.Объединить(УслАн,УслАнДоп_,"&");
    Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."001"',ДН,ДК,УслСч,УслАн);
   else
    Crd=ExtractWord(1,ID[Iter],"#");
    Rec=StringToRecord(ExtractWord(2,ID[Iter],"#"));
    if Crd=SelfCrd: OpenBlank(SelfBln,True,Rec);
      |Crd="РПО_ЗАЯВКА_КР": OpenBlank("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР",True,Rec);
      |Crd="РПО_ДО": OpenBlank("ДОКУМЕНТЫ.ДОГОВОРПОСТ.ДО",True,Rec);
      |True: OpenCardFile(Crd,"",Rec);
    fi;
 fi;
 Return Cur;
end;

Func СумБО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter,p1,p2:I;
var УслСч,УслАн,Field:S;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 Field=AsString(Template.Field);
 p1=Pos("[",Field);
 if not p1=0:
    p2=Pos("]",Field);
    Iter=Int(SubStr(Field,p1+1,p2-p1-1));
 fi;
 if ПризнБО[Iter]="": Message("Нет данных для расшифровки",mtWarning); ^Cur; fi;
 if Match(СчБО[Iter],УслСчБО):
    УслСч=СчБО[Iter]+"/"+УслКоррБО;
   else
    УслСч=СчБО[Iter]+"/"+УслКоррДО;
 fi;
 УслАн=Раб.Бюджет2005.Объединить(ПризнБО[Iter],ПризнК[Iter],"&");
 УслАн=Раб.Бюджет2005.Объединить(УслАн,ПризнДоговор[Iter],"&");
 УслАн=Раб.Бюджет2005.Объединить(УслАн,ПризнПодр,"&");
 УслАн=Раб.Бюджет2005.Объединить(УслАн,УслАнДоп_,"&");
 Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."001"',ДН,ДК,УслСч,УслАн);
 Return Cur;
end;

Func СумКР_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter,p1,p2:I;
var УслСч,УслАн,Field:S;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 Field=AsString(Template.Field);
 p1=Pos("[",Field);
 if not p1=0:
    p2=Pos("]",Field);
    Iter=Int(SubStr(Field,p1+1,p2-p1-1));
 fi;
 if ПризнБО[Iter]="": Message("Нет данных для расшифровки",mtWarning); ^Cur; fi;
 УслСч=СчКр[Iter];
 УслАн=Раб.Бюджет2005.Объединить(ПризнБО[Iter],ПризнК[Iter],"&");
 УслАн=Раб.Бюджет2005.Объединить(УслАн,ПризнДоговор[Iter],"&");
 УслАн=Раб.Бюджет2005.Объединить(УслАн,ПризнПодр,"&");
 УслАн=Раб.Бюджет2005.Объединить(УслАн,УслАнДоп_,"&");
 Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."001"',ДН,ДК,УслСч,УслАн);
 Return Cur;
end;

Func Исп_onLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Field,v1,v2:S;
var Rec: Record;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 Rec=OpenCardFile("Сотрудники");
 if Rec=nil: ^Cur; fi;
 v1=GetCardFieldS("Сотрудники",rec,"ДОЛЖНОСТЬ.Долж");
 v2=GetCardFieldS("Сотрудники",rec,"ФАМИЛИЯ")+" "+GetCardFieldS("Сотрудники",rec,"ИНИЦИАЛЫ");
 ДолжнИсп=v1;
 ФИОИсп=v2;
 Return Cur;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_OnClick(Sender: String);
 if ДН=1.1.100: Message("Введите дату открытия журнала",mtError); Template.Field="ДН"; Exit; fi;
 if ДН>ДК and not ДК=1.1.100: Message("Начальная дата превышает конечную",mtError); Template.Field="ДН"; Exit; fi;
 if not fБО and not fДО: Message("Выберите тип обязательства",mtError); Template.Object="cbБО"; Exit; fi;
 Расчет;
end;

Proc btnПечать_OnClick(Sender: String);
 Раб.Настр_Печать.Prn('','','РПО.ОТЧЕТЫ.РЕГИСТРЫ.ЖУРНАЛ_РЕГ_БО.000.cfg','',1);
end;

Proc btnЗакрыть_OnClick(Sender: String);
 Close;
end;

Proc cb_OnChange(Sender: String);
 Очистить;
 Оформление;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 Раб.ИмяПолеКарт.Инициализация;
 if Учреждение="": ЗаполнитьРекв(nil); fi;
 Раб.Настр_Печать.Cfg("","РПО.ОТЧЕТЫ.РЕГИСТРЫ.ЖУРНАЛ_РЕГ_БО.000.Cfg");
end;

Proc AfterOpen(Destroy: Logical);
 Оформление;
 Раб.Цвета.InitColor;
 if fГруппаБО:
    if not Упр=0: Группировать; fi;
 fi;
end;
--Обработчики событий шаблона -----
--
Конец
