-- Шаблон создан мастером бланков
-- 10.09.2013 10:16:53
--
БланкСШаблоном "Справка об исполнении принятых на учет бюджетных обязательств";

var ДК:D=[ToDay];
var ДН:D=Dat(1,1,Year(ДК-1));

var Упр:I;
var пп[]:i=$;
var НомДокОсн[]:S;
var ДатДокОсн[]:D;
var УчетНом[]:S;
var ФАИП[]:S;
var КБК[]:S;
var Сум0[]:N;
var Сум1[]:N;
var Сум2[]:N;
var СумИспол[]:N;
var СумНеиспол[]:N=Сум0[$]-СумИспол[$];
var СумОпер[]:N;
var ПризнБО[]:S;
var Key[]:S;

var ВсегоСум0:N;
var ВсегоСум1:N;
var ВсегоСум2:N;
var ВсегоСумИспол:N;
var ВсегоСумНеиспол:N=ВсегоСум0-ВсегоСумИспол;
var ВсегоСумОпер:N;

var SelfCfg:S="ТББ.ДОКУМЕНТЫ.ЛБО.СПРАВКА_ИСПОЛ_ПБО.000.cfg";
--
--Процедуры и функции -------------
Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(НомДокОсн);
 ClearVariable(ДатДокОсн);
 ClearVariable(УчетНом);
 ClearVariable(ФАИП);
 ClearVariable(КБК);
 ClearVariable(Сум0);
 ClearVariable(Сум1);
 ClearVariable(Сум2);
 ClearVariable(СумИспол);
 ClearVariable(СумИспол);
 ClearVariable(СумОпер);
 ClearVariable(ВсегоСум0);
 ClearVariable(ВсегоСум1);
 ClearVariable(ВсегоСум2);
 ClearVariable(ВсегоСумИспол);
 ClearVariable(ВсегоСумОпер);
 ClearVariable(ПризнБО);
 ClearVariable(Key);
end;

Proc Расчет;
var n,nn,z,OWA,i:i;
var tmp,НомДокОсн_,УчетНом_,ФАИП_,БК_,КОСГУ_,Key_:S;
var ДатДокОсн_:D;
var Сум0_,Сум1_,Сум2_,СумИспол_,СумОпер_:N;
var Rec,Rec2: Record;
var is201:L;
var УчетФК:L;
 Refresh;
 tmp=Раб.Бюджет2005.СписокСправ("*.1.304.05.*",0,"");
 if Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tmp,"|","БО.*","")="": Message("Нет привязки справочника 'БО' к счетам 1.304.05",mtError); Exit; fi;
 tmp=Раб.Бюджет2005.СписокСправ("*.1.502.?1.*",0,"");
 if Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tmp,"|","БО.*","")="": Message("Нет привязки справочника 'БО' к счетам 1.502.?1",mtError); Exit; fi;
 is201=ExistsTransactions("*.1.201.11.*{БО."+Str(Year(ДК-1))+".*&ФКР.*&КОСГУ.*}",ДН,ДК);
 Очистить;
 Раб.Свертка.РазрешитьПрогресс=False;
 Раб.Свертка.ВыполнитьОбновление=False;
 Раб.Свертка.РазрешитьАналитику=True;
 Раб.Свертка.РазрешитьСинтетику=True;
 Раб.Свертка.ДН=ДН;
 Раб.Свертка.ДК=ДК;
 Раб.Свертка.Расщепление=TujRepBalAccount+TujRepCombinedAna;
 Раб.Свертка.УслСч="*.1.502.?1.*|*.1.304.05.*";
 Раб.Свертка.УслАн="БО."+Str(Year(ДК-1))+".*";
 Раб.Свертка.МаскаСправ="БО.*";
 Раб.Свертка.ПолнСоотвМаскеСправ=False;
 Раб.Свертка.spМаскаСправ=" ";
 Раб.Свертка.СжатиеСправ=Раб.Бюджет2005.СписокСправ(Раб.Свертка.УслСч,0,"БО.*");
 Раб.Свертка.ПорядокПоМаскеСправ=False;
 Раб.Свертка.ТипСинтетики="БК+КОСГУ";
 nn=Раб.Свертка.Расчет;
 ShowProgress(nn,"Расчет...");
 Try
  OWA=OpenWorkArea("РПО_СВЕД_БО","");
  for n=1..nn do
   ProgressPos(n);
   --Раб.Свертка.Список_Ан[n]=ExtractWord(1,Раб.Свертка.Список_Ан[n],":");
   Rec=SignToRecord(Раб.Свертка.Список_Ан[n],False);
   if not Rec=nil:
      Rec2=Раб.Бюджет2005.АктуалБО(Rec,ДК);
      if not Rec2=nil:
	 Rec=Rec2;
      fi;
      i=GetRecordNumber(OWA,Rec);
      if GetFieldS(OWA,i,"Исп_ДокНом")="":
	 НомДокОсн_=GetFieldS(OWA,i,"Осн_ДокНом");
	 ДатДокОсн_=GetFieldD(OWA,i,"Осн_ДокДат");
	else
	 НомДокОсн_=GetFieldS(OWA,i,"Исп_ДокНом");
	 ДатДокОсн_=GetFieldD(OWA,i,"Исп_ДокДат");
      fi;
      УчетНом_=GetFieldS(OWA,i,"РегНомер");
      ФАИП_="";
      УчетФК=GetFieldL(OWA,i,"УчетФК");
     else
      НомДокОсн_="";
      ДатДокОсн_=1.1.100;
      УчетНом_=Раб.Свертка.Список_Ан[n];
      ФАИП_="";
      УчетФК=False;
      Trace(Раб.Свертка.Список_Ан[n]);
   fi;
   if УчетФК:
      if ExistsTransactions("(*.1.501.?3.*|*.1.503.?3.*|*.1.502.?7.*/*.1.502.?1.*)|*.1.304.05.*{"+Раб.Свертка.Список_Ан[n]+"}",ДН,ДК):
	 БК_=SubStr(Раб.Свертка.Список_Синт[n],1,20);
	 КОСГУ_=SubStr(Раб.Свертка.Список_Синт[n],22,3);
	 Try Сум0_=Turn("(*.1.501.?3.*|*.1.503.?3.*|*.1.502.?7.*)/"+БК_+".1.502.11."+КОСГУ_+"{"+Раб.Свертка.Список_Ан[n]+"&~ОПЕР}",ДН,ДК); Except Сум0_=0; end;
	 Try Сум1_=Turn("(*.1.501.?3.*|*.1.503.?3.*|*.1.502.?7.*)/"+БК_+".1.502.21."+КОСГУ_+"{"+Раб.Свертка.Список_Ан[n]+"&~ОПЕР}",ДН,ДК); Except Сум1_=0; end;
	 Try Сум2_=Turn("(*.1.501.?3.*|*.1.503.?3.*|*.1.502.?7.*)/"+БК_+".1.502.31."+КОСГУ_+"{"+Раб.Свертка.Список_Ан[n]+"&~ОПЕР}",ДН,ДК); Except Сум2_=0; end;
	 Try СумИспол_=-Turn(БК_+".1.304.05."+КОСГУ_+"{"+Раб.Свертка.Список_Ан[n]+"&~ОПЕР}",ДН,ДК); Except СумИспол_=0; end;
	 if is201:
	    Try СумИспол_=СумИспол_+(-Turn("*.1.201.11.*{"+Раб.Свертка.Список_Ан[n]+"&ФКР."+БК_+"&КОСГУ."+КОСГУ_+"!&~ОПЕР}",ДН,ДК)); Except  end;
	 fi;
	 Try СумОпер_=Turn("(*.1.501.?3.*|*.1.503.?3.*|*.1.502.?7.*)/"+БК_+".1.502.?1."+КОСГУ_+"{"+Раб.Свертка.Список_Ан[n]+"&ОПЕР}",ДН,ДК); Except СумОпер_=0; end;
	 Key_=Раб.Формат.ДатаСтр(ДатДокОсн_,14)+"#"+НомДокОсн_+"#"+УчетНом_+"#"+ФАИП_+"#";
	 z=SearchInArray(Key,Key_,True);
	 if z=-1:
	    z=InsertInArraySort(Key,Key_);
	    InsertFrame(Упр,z);
	    НомДокОсн[z]=НомДокОсн_;
	    ДатДокОсн[z]=ДатДокОсн_;
	    УчетНом[z]=УчетНом_;
	    ФАИП[z]="";
	    КБК[z]="";
	    Сум0[z]=0;
	    Сум1[z]=0;
	    Сум2[z]=0;
	    СумИспол[z]=0;
	    СумОпер[z]=0;
	    ПризнБО[z]=Раб.Свертка.Список_Ан[n];
	 fi;
	 Key_=Раб.Формат.ДатаСтр(ДатДокОсн_,14)+"#"+НомДокОсн_+"#"+УчетНом_+"#"+ФАИП_+"#"+Раб.Свертка.Список_Синт[n];
	 z=SearchInArray(Key,Key_,True);
	 if z=-1:
	    z=InsertInArraySort(Key,Key_);
	    InsertFrame(Упр,z);
	    НомДокОсн[z]="";
	    ДатДокОсн[z]=1.1.100;
	    УчетНом[z]="";
	    ФАИП[z]="";
	    КБК[z]=Раб.Свертка.Список_Синт[n];
	    Сум0[z]=Сум0_;
	    Сум1[z]=Сум1_;
	    Сум2[z]=Сум2_;
	    СумИспол[z]=СумИспол_;
	    СумОпер[z]=СумОпер_;
	    ПризнБО[z]=Раб.Свертка.Список_Ан[n];
	   else
	    Сум0[z]=Сум0[z]+Сум0_;
	    Сум1[z]=Сум1[z]+Сум1_;
	    Сум2[z]=Сум2[z]+Сум2_;
	    СумИспол[z]=СумИспол[z]+СумИспол_;
	    СумОпер[z]=СумОпер[z]+СумОпер_;
	 fi;
	 Key_=Раб.Формат.ДатаСтр(ДатДокОсн_,14)+"#"+НомДокОсн_+"#"+УчетНом_+"#"+ФАИП_+"#яяя.яяяя.яяяяяяя.яяя.яяя";
	 z=SearchInArray(Key,Key_,True);
	 if z=-1:
	    z=InsertInArraySort(Key,Key_);
	    InsertFrame(Упр,z);
	    НомДокОсн[z]="";
	    ДатДокОсн[z]=1.1.100;
	    УчетНом[z]="";
	    ФАИП[z]="";
	    КБК[z]="Итого по бюджетному обязательству";
	    Сум0[z]=Сум0_;
	    Сум1[z]=Сум1_;
	    Сум2[z]=Сум2_;
	    СумИспол[z]=СумИспол_;
	    СумОпер[z]=СумОпер_;
	    ПризнБО[z]=Раб.Свертка.Список_Ан[n];
	   else
	    Сум0[z]=Сум0[z]+Сум0_;
	    Сум1[z]=Сум1[z]+Сум1_;
	    Сум2[z]=Сум2[z]+Сум2_;
	    СумИспол[z]=СумИспол[z]+СумИспол_;
	    СумОпер[z]=СумОпер[z]+СумОпер_;
	 fi;
	 ВсегоСум0=ВсегоСум0+Сум0_;
	 ВсегоСум1=ВсегоСум1+Сум1_;
	 ВсегоСум2=ВсегоСум2+Сум2_;
	 ВсегоСумИспол=ВсегоСумИспол+СумИспол_;
	 ВсегоСумОпер=ВсегоСумОпер+СумОпер_;
      fi; --if ExistsTransactions("*.1.501.?3.*|*.1.503.?3.*|*.1.502.?7.*/*.1.502.?1.*)|*.1.304.05.*{"+Раб.Свертка.Список_Ан[n]+"}",ДН,ДК):
   fi; --if УчетФК:
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 Message("Расчет завершен");
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;

Proc ДК_OnExit(FieldName: String; Iter: Integer);
 Очистить;
end;

Func ДокОсн_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec,Rec2: Record;
var Crd: S;
 Rec=SignToRecord(ПризнБО[Iter]);
 if Rec=nil:
    Message("Невозможно преобразовать признак "+ПризнБО[Iter]+" в запись",mtError);
    ^False;
   else
    Crd=SignCardFile(ПризнБО[Iter]);
    if Crd="РПО_СВЕД_БО":
       Rec2=Раб.Бюджет2005.АктуалБО(Rec,ДК);
       if not Rec2=nil:
	  Rec=Rec2;
       fi;
       Rec2=GetCardFieldR(Crd,Rec,"Договор");
       if Rec2=nil:
	  Rec2=GetCardFieldR(Crd,Rec,"ДО");
	  if Rec2=nil:
	     OpenBlank("ДОКУМЕНТЫ.ЛБО.СВЕД_БО",True,Rec);
	    else
	     OpenBlank("ДОКУМЕНТЫ.ДОГОВОРПОСТ.ДО",True,Rec2);
	  fi;
	 else
	  OpenBlank("ИНФО.ДОГОВОР",True,Rec2);
       fi;
    fi;
 fi;
 Return False;
end;

Func УчетНом_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec,Rec2: Record;
var Crd: S;
 Rec=SignToRecord(ПризнБО[Iter]);
 if Rec=nil:
    Message("Невозможно преобразовать признак "+ПризнБО[Iter]+" в запись",mtError);
    ^False;
   else
    Crd=SignCardFile(ПризнБО[Iter]);
    if Crd="РПО_СВЕД_БО":
       Rec2=Раб.Бюджет2005.АктуалБО(Rec,ДК);
       if not Rec2=nil:
	  Rec=Rec2;
       fi;
       OpenBlank("ДОКУМЕНТЫ.ЛБО.СВЕД_БО",True,Rec);
    fi;
 fi;
 Return False;
end;

Func Сум_OnEnter(FieldName: String; Iter: Integer): logical;
var БК_,КОСГУ_,УслСч,УслАн:S;
 if КБК[Iter]="" or КБК[Iter]="Итого по бюджетному обязательству":
    БК_="*";
    КОСГУ_="*";
   else
    БК_=SubStr(КБК[Iter],1,20);
    КОСГУ_=SubStr(КБК[Iter],22,3);
 fi;
 УслАн="&~ОПЕР";
 if FieldName="Сум0":
    УслСч="(*.1.501.?3.*|*.1.503.?3.*|*.1.502.?7.*)/"+БК_+".1.502.11."+КОСГУ_;
   |FieldName="Сум1":
    УслСч="(*.1.501.?3.*|*.1.503.?3.*|*.1.502.?7.*)/"+БК_+".1.502.21."+КОСГУ_;
   |FieldName="Сум2":
    УслСч="(*.1.501.?3.*|*.1.503.?3.*|*.1.502.?7.*)/"+БК_+".1.502.31."+КОСГУ_;
   |FieldName="СумИспол":
    УслСч=БК_+".1.304.05."+КОСГУ_;
   |FieldName="СумОпер":
    УслСч="(*.1.501.?3.*|*.1.503.?3.*|*.1.502.?7.*)/"+БК_+".1.502.?1."+КОСГУ_;
    УслАн="&ОПЕР";
 fi;
 if not УслСч="":
    Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."001"',ДН,ДК+1,УслСч,ПризнБО[Iter]+УслАн);
 fi;
 Return False;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_OnClick(Sender: String);
 if ДК=1.1.100: Message("Введите дату",mtError); Template.Field="ДК"; Exit; fi;
 Расчет;
end;

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

Proc btnЗакр_OnClick(Sender: String);
 Close;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 Раб.Настр_Печать.Cfg("",SelfCfg);
end;
--Обработчики событий шаблона -----
--


Конец
