БЛАНКСШАБЛОНОМ "ф.0503178 Сведения об остатках денежных средств на счетах получателя средств бюджета";

-- Зона авто-идентификации отчета
Ф_ОКУД: STRING = '0503178';
Ф_ИНСТР_КОД: STRING = '191н';
Ф_РЕД_КОД: STRING = '138н';
Ф_ДЕЙСТВ_С: DATE = 01.01.2014;
Ф_ДЕЙСТВ_ПО: DATE = 1.1.100;
-- конец зоны авто-идентификации отчета

2--Общие переменные-----
var ДН:D=РАБ.ПАРАМ_ОТЧ.ДН;
var ДК:D=РАБ.ПАРАМ_ОТЧ.ДК;

var УслВал:S=РАБ.ПАРАМ_ОТЧ.УслВал;
var Вал :S=РАБ.ПАРАМ_ОТЧ.Вал;
var Вал_:S=Вал;
var Показатель:S=РАБ.ПАРАМ_ОТЧ.Показатель;

var ОбщУслВД:S=РАБ.ПАРАМ_ОТЧ.ОбщУслВД;
var ВД:S=РАБ.ПАРАМ_ОТЧ.ВД;
var НаимВД:S=РАБ.ПАРАМ_ОТЧ.ВД_;

var ЕдИзм:I=РАБ.ПАРАМ_ОТЧ.ЕдИзм;

var Точн:I=РАБ.ПАРАМ_ОТЧ.Точн;

var ОбщУслАн:S=if(РАБ.ПАРАМ_ОТЧ.ОбщУслАн="","","("+РАБ.ПАРАМ_ОТЧ.ОбщУслАн+")");

var ОбщУслКИФД:S=РАБ.ПАРАМ_ОТЧ.ОбщУслКИФД;

var МаскаСч:S="*.?.201.1?.*|*.?.201.2?.*";

Н1:Section;
Н2:Section;
Н3:Section;
Н4:Section;
Н5:Section;

var A1:S="+";
var D1:S="-";

УпрН1:I;
УслСчБанк1[]:S;
УслАнБанк1[]:S;
УслСчВПути1[]:S;
УслАнВПути1[]:S;
СправЛС1[]:S;

var A2:S="+";
var D2:S="-";

УпрН2:I;
УслСчБанк2[]:S;
УслАнБанк2[]:S;
УслСчВПути2[]:S;
УслАнВПути2[]:S;
СправЛС2[]:S;


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

М1:I;
SГ1С100М1[]:S;
SГ2С100М1[]:S;
RГ3С100М1[]:N;
RГ4С100М1[]:N;
RГ5С100М1[]:N;
RГ6С100М1[]:N;
ПризнЛС1[]:S;

var RГ3С190:N=SumOfArray(RГ3С100М1,М1);
var RГ4С190:N=SumOfArray(RГ4С100М1,М1);
var RГ5С190:N=SumOfArray(RГ5С100М1,М1);
var RГ6С190:N=SumOfArray(RГ6С100М1,М1);

М2:I;
SГ1С200М2[]:S;
SГ2С200М2[]:S;
RГ3С200М2[]:N;
RГ4С200М2[]:N;
RГ5С200М2[]:N;
RГ6С200М2[]:N;
ПризнЛС2[]:S;

var RГ3С290:N=SumOfArray(RГ3С200М2,М2);
var RГ4С290:N=SumOfArray(RГ4С200М2,М2);
var RГ5С290:N=SumOfArray(RГ5С200М2,М2);
var RГ6С290:N=SumOfArray(RГ6С200М2,М2);

var RГ3С300:N=RГ3С190+RГ3С290;
var RГ4С300:N=RГ4С190+RГ4С290;
var RГ5С300:N=RГ5С190+RГ5С290;
var RГ6С300:N=RГ6С190+RГ6С290;

var Buf[]:S;

var ОтчGUID:S;
2--Процедуры и функции-----
Proc ПрисвоитьТочность;
var Obj:Object;
var cf:S;
var s,c,r,cc,rr:i;
 cf=",##0."+if(Точн<1,"",RepStr("0",Точн))+";;-";
 for s=1..5 do
  if FindObject("S"+Str(s),Obj):
    cc=AsInteger(Obj.ColsCount);
    rr=AsInteger(Obj.RowsCount);
    for r=1..rr do
     for c=1..cc do
      if Match(AsString(Obj.Cell(r,c,CellContents,"")),"R*"): Obj.Cell(r,c,CellFormat,cf); fi;
     od;
    od;
  fi;
 od;
end;

Proc Очистить;
 ClearVariable(М1);
 ClearVariable(SГ1С100М1);
 ClearVariable(SГ2С100М1);
 ClearVariable(RГ3С100М1);
 ClearVariable(RГ4С100М1);
 ClearVariable(RГ5С100М1);
 ClearVariable(RГ6С100М1);
 ClearVariable(ПризнЛС1);
 ClearVariable(М2);
 ClearVariable(SГ1С200М2);
 ClearVariable(SГ2С200М2);
 ClearVariable(RГ3С200М2);
 ClearVariable(RГ4С200М2);
 ClearVariable(RГ5С200М2);
 ClearVariable(RГ6С200М2);
 ClearVariable(ПризнЛС2);
end;

Proc Настр(Flag:L);
var s:i;
var Obj: Object;
 for s=1..5 do
  if FindObject("Н"+Str(s),Obj):
     Obj.Visible=Flag;
  fi;
 od;
 Template.Field="УслСчБанк2";
 Template.Frame=УпрН2;
 Template.Field="УслСчБанк1";
 Template.Frame=1;
end;

Proc НастрУмолч;
 ClearVariable(УпрН1);
 ClearVariable(УслСчБанк1);
 ClearVariable(УслАнБанк1);
 ClearVariable(УслСчВПути1);
 ClearVariable(УслАнВПути1);
 ClearVariable(СправЛС1);
 InsertFrame(УпрН1,УпрН1+1); УслСчБанк1[УпрН1]="*.?.201.21.*"; УслАнБанк1[УпрН1]=""; УслСчВПути1[УпрН1]="*.?.201.23.*"; УслАнВПути1[УпрН1]=""; СправЛС1[УпрН1]="ЛС.*";
 InsertFrame(УпрН1,УпрН1+1); УслСчБанк1[УпрН1]="*.?.201.22.*"; УслАнБанк1[УпрН1]=""; УслСчВПути1[УпрН1]="";             УслАнВПути1[УпрН1]=""; СправЛС1[УпрН1]="ЛС.*";
 InsertFrame(УпрН1,УпрН1+1); УслСчБанк1[УпрН1]="*.?.201.26.*"; УслАнБанк1[УпрН1]=""; УслСчВПути1[УпрН1]="";             УслАнВПути1[УпрН1]=""; СправЛС1[УпрН1]="ЛС.*";
 InsertFrame(УпрН1,УпрН1+1); УслСчБанк1[УпрН1]="*.?.201.27.*"; УслАнБанк1[УпрН1]=""; УслСчВПути1[УпрН1]="";             УслАнВПути1[УпрН1]=""; СправЛС1[УпрН1]="ЛС.*";
 ClearVariable(УпрН2);
 ClearVariable(УслСчБанк2);
 ClearVariable(УслАнБанк2);
 ClearVariable(УслСчВПути2);
 ClearVariable(УслАнВПути2);
 ClearVariable(СправЛС2);
 InsertFrame(УпрН2,УпрН2+1); УслСчБанк2[УпрН2]="*.?.201.11.*"; УслАнБанк2[УпрН2]=""; УслСчВПути2[УпрН2]="*.?.201.13.*"; УслАнВПути2[УпрН2]="";  СправЛС2[УпрН2]="ЛС.*";
end;

Func ПроверитьУсл(varСч:S; varАн:S; Iter1:I; Iter2:I; Txt:S):L;
var Acc,Sgn,Mask,vСч1,vСч2,vАн1,vАн2:S;
var FlagAcc:L;
var z:i;
 vСч1=GetVariableS(varСч+"["+Str(Iter1)+"]");
 vСч2=GetVariableS(varСч+"["+Str(Iter2)+"]");
 if vСч1="" or vСч2="": ^True; fi;
 FlagAcc=False;
 ClearVariable(Buf);
 if Length(vСч1)+Length(vСч2)>254:
    z=0;
    for Account Acc=vСч1,Sort do
     z=z+1;
     Buf[z]=Acc;
    od;
    for Account Acc=vСч2,Sort do
     if not SearchInArray(Buf,Acc,True)=-1: FlagAcc=True; Break; fi;
    od;
   else
    for Account Acc="("+vСч1+")&("+vСч2+")" do
     FlagAcc=True;
     Break;
    od;
 fi;
 if FlagAcc=False: ^True; fi;
 vАн1=GetVariableS(varАн+"["+Str(Iter1)+"]");
 vАн2=GetVariableS(varАн+"["+Str(Iter2)+"]");
 if vАн1="" and vАн2="": Trace("Ошибка! Условие отбора "+txt+" по счетам "+vСч1+" (стр.№"+Str(Iter1)+") пересекается с условием отбора "+vСч2+" (стр.№"+Str(Iter2)+")"); ^False; fi;
 if not vАн1="": vАн1="("+vАн1+")"; fi;
 if not vАн2="": vАн2="("+vАн2+")"; fi;
 for Sign Sgn=Раб.Бюджет2005.Объединить(vАн1,vАн2,"&") do
  Trace("Ошибка! Условие отбора "+txt+" по счетам "+vСч1+" и аналитике "+vАн1+" (стр.№"+Str(Iter1)+") пересекается с условием отбора счетов "+vСч2+" и аналитике "+vАн2+" (стр.№"+Str(Iter2)+")");
  ^False;
 od;
 ^True;
end;

Func ПроверитьНастр:L;
var Iter1,Iter2:I;
var Err:L;
 ClearTrace(True);
 Iter1=1;
 While Iter1<=УпрН1 do
  if УслСчБанк1[Iter1]="" and
     УслАнБанк1[Iter1]="" and
     УслСчВПути1[Iter1]="" and
     УслАнВПути1[Iter1]="" and
     СправЛС1[Iter1]="": DeleteFrame(УпрН1,Iter1);
    else
     if УслСчБанк1[Iter1]="" and УслСчВПути1[Iter1]="": Message("Условие отбора по счетам",mtError); Template.Field="УслСчБанк1"; Template.Frame=Iter1; ^False; fi;
     Iter1=Iter1+1;
  fi;
 od;
 --
 Iter2=1;
 While Iter2<=УпрН2 do
  if УслСчБанк2[Iter2]="" and
     УслАнБанк2[Iter2]="" and
     УслСчВПути2[Iter2]="" and
     УслАнВПути2[Iter2]="" and
     СправЛС2[Iter2]="": DeleteFrame(УпрН2,Iter2);
    else
     if УслСчБанк2[Iter2]="" and УслСчВПути2[Iter2]="": Message("Условие отбора по счетам",mtError); Template.Field="УслСчБанк2"; Template.Frame=Iter2; ^False; fi;
     Iter2=Iter2+1;
  fi;
 od;
 --
 if УпрН1=0 and УпрН2=0:
    if УпрН1=0: InsertFrame(УпрН1,УпрН1+1); fi;
    if УпрН2=0: InsertFrame(УпрН2,УпрН2+1); fi;
    Message("Необходимо выполнить настройку формы",mtWarning);
    ^False;
 fi;
 --
 Err=False;
 for Iter1=1..УпрН1 do
  for Iter2=Iter1+1..УпрН1 do
   if ПроверитьУсл("УслСчБанк1","УслАнБанк1",Iter1,Iter2,"средств на счете кредитных организациях")=False: Err=True; fi;
   if ПроверитьУсл("УслСчВПути1","УслАнВПути1",Iter1,Iter2,"средств в пути кредитных организациях")=False: Err=True; fi;
  od;
 od;
 --
 for Iter1=1..УпрН2 do
  for Iter2=Iter1+1..УпрН2 do
   if ПроверитьУсл("УслСчБанк2","УслАнБанк2",Iter1,Iter2,"средств на счете кредитных организациях")=False: Err=True; fi;
   if ПроверитьУсл("УслСчВПути2","УслАнВПути2",Iter1,Iter2,"средств в пути кредитных организациях")=False: Err=True; fi;
  od;
 od;
 if Err: Message("Обнаружены ошибки в условиях",mtError); ^False; fi;
 ^True;
end;

Func ДобавитьСтр(Призн:S; Сч:S; Банк_Н:N; Банк_К:N; ВПути_Н:N; ВПути_К:N; Разд:I):I;
var z:i;
var Key:S;
 Призн=ExtractWords(1,2,Призн,".");
 Key=Призн+" "+Сч;
 z=SearchInArray(Buf,Key,True);
 if z=-1:
    z=InsertInArraySort(Buf,Key);
    if Разд=1:
       InsertFrame(М1,z);
       SГ1С100М1[z]=SubStr(Призн,Pos(".",Призн)+1,255);
       SГ2С100М1[z]=Сч;
       RГ3С100М1[z]=Банк_Н;
       RГ4С100М1[z]=ВПути_Н;
       RГ5С100М1[z]=Банк_К;
       RГ6С100М1[z]=ВПути_К;
       ПризнЛС1[z]=Призн+"!";
      else
       InsertFrame(М2,z);
       SГ1С200М2[z]=SubStr(Призн,Pos(".",Призн)+1,255);
       SГ2С200М2[z]=Сч;
       RГ3С200М2[z]=Банк_Н;
       RГ4С200М2[z]=ВПути_Н;
       RГ5С200М2[z]=Банк_К;
       RГ6С200М2[z]=ВПути_К;
       ПризнЛС2[z]=Призн+"!";
    fi;
   else
    if Разд=1:
       RГ3С100М1[z]=RГ3С100М1[z]+Банк_Н;
       RГ4С100М1[z]=RГ4С100М1[z]+ВПути_Н;
       RГ5С100М1[z]=RГ5С100М1[z]+Банк_К;
       RГ6С100М1[z]=RГ6С100М1[z]+ВПути_К;
      else
       RГ3С200М2[z]=RГ3С200М2[z]+Банк_Н;
       RГ4С200М2[z]=RГ4С200М2[z]+ВПути_Н;
       RГ5С200М2[z]=RГ5С200М2[z]+Банк_К;
       RГ6С200М2[z]=RГ6С200М2[z]+ВПути_К;
    fi;
 fi;
 ^z;
end;

Proc РасчетРазд (УслСч:S; УслВал_:S; УслАн:S; Справ:S; Тип:S; Разд:I);
var Сч,КодСч,Призн:S;
var ОстН,ОстК:N;
  for Account Сч=УслСч do
   if AccountUsed(Сч):
      if Справ="":
         ОстН=Round(Saldo(Сч+УслВал_+"{"+УслАн+"}",ДН,Показатель)/ЕдИзм,Точн);
         ОстК=Round(Saldo(Сч+УслВал_+"{"+УслАн+"}",ДК,Показатель)/ЕдИзм,Точн);
         if not ОстН=0 or not ОстК=0:
            КодСч=Раб.Бюджет2005.ВзятьКодСчета(Сч,"","СЧ6",False)+".510";
            if Тип="Банк":
               ДобавитьСтр("",КодСч,ОстН,ОстК,0,0,Разд);
              else
               ДобавитьСтр("",КодСч,0,0,ОстН,ОстК,Разд);
            fi;
         fi;
        else
         for Sign Призн=Справ, Sort do
          if SignUsed(Призн):
             ОстН=Round(Saldo(Сч+УслВал_+"{"+Раб.Бюджет2005.Объединить(Призн,УслАн,"&")+"}",ДН,Показатель)/ЕдИзм,Точн);
             ОстК=Round(Saldo(Сч+УслВал_+"{"+Раб.Бюджет2005.Объединить(Призн,УслАн,"&")+"}",ДК,Показатель)/ЕдИзм,Точн);
             if not ОстН=0 or not ОстК=0:
                КодСч=Раб.Бюджет2005.ВзятьКодСчета(Сч,"","СЧ6",False)+".510";
                if Тип="Банк":
                   ДобавитьСтр(Призн,КодСч,ОстН,ОстК,0,0,Разд);
                  else
                   ДобавитьСтр(Призн,КодСч,0,0,ОстН,ОстК,Разд);
                fi;
             fi;
          fi; --if SignUsed(Призн):
         od; --for Sign Призн=СправЛС1[i], Sort do
      fi;
   fi; --if AccountUsed(Сч):
  od; --for Account Сч=УслСч do
end;

Proc Расчет;
var УслСч,УслАн,УслВал_,ОбщУслСч_,ОбщУслСчКИФД:S;
var i,z:i;
var ОстН,ОстК:N;
 Настр(False);
 if not ПроверитьНастр: Настр(True); Exit; fi;
 Очистить;
 ShowProgress(УпрН1+УпрН2,"Расчет...");
 Try
  if not ОбщУслКИФД="": ОбщУслСчКИФД=Раб.Бюджет2005.ВзятьКодКБК(ОбщУслКИФД,"КИФД","КБК",False)+".*"; else ОбщУслСчКИФД=""; fi;
  ОбщУслСч_=Раб.Бюджет2005.Объединить(ОбщУслСчКИФД,ОбщУслВД,"&");
  if УслВал="": УслВал_=""; else УслВал_="'"+УслВал; fi;
  ClearVariable(Buf);
  for i=1..УпрН1 do
   ProgressPos(i);
   if not УслСчБанк1[i]="":
      УслСч=Раб.Бюджет2005.Объединить(ОбщУслСч_,"("+УслСчБанк1[i]+")","&");
      УслАн=Раб.Бюджет2005.Объединить(ОбщУслАн,if(УслАнБанк1[i]="","","("+УслАнБанк1[i]+")"),"&");
      РасчетРазд(УслСч,УслВал_,УслАн,СправЛС1[i],"Банк",1);
   fi;
   if not УслСчВПути1[i]="":
      УслСч=Раб.Бюджет2005.Объединить(ОбщУслСч_,"("+УслСчВПути1[i]+")","&");
      УслАн=Раб.Бюджет2005.Объединить(ОбщУслАн,if(УслАнВПути1[i]="","","("+УслАнВПути1[i]+")"),"&");
      РасчетРазд(УслСч,УслВал_,УслАн,СправЛС1[i],"ВПути",1);
   fi;
  od;
  --
  ClearVariable(Buf);
  for i=1..УпрН2 do
   ProgressPos(УпрН1+i);
   if not УслСчБанк2[i]="":
      УслСч=Раб.Бюджет2005.Объединить(ОбщУслСч_,"("+УслСчБанк2[i]+")","&");
      УслАн=Раб.Бюджет2005.Объединить(ОбщУслАн,if(УслАнБанк2[i]="","","("+УслАнБанк2[i]+")"),"&");
      РасчетРазд(УслСч,УслВал_,УслАн,СправЛС2[i],"Банк",2);
   fi;
   if not УслСчВПути2[i]="":
      УслСч=Раб.Бюджет2005.Объединить(ОбщУслСч_,"("+УслСчВПути2[i]+")","&");
      УслАн=Раб.Бюджет2005.Объединить(ОбщУслАн,if(УслАнВПути2[i]="","","("+УслАнВПути2[i]+")"),"&");
      РасчетРазд(УслСч,УслВал_,УслАн,СправЛС2[i],"ВПути",2);
   fi;
  od;
  --
  i=1;
  While i<=М1 do
   if RГ3С100М1[i]=0 and RГ4С100М1[i]=0 and RГ5С100М1[i]=0 and RГ6С100М1[i]=0: DeleteFrame(М1,i); else i=i+1; fi;
  od;
  i=1;
  While i<=М2 do
   if RГ3С200М2[i]=0 and RГ4С200М2[i]=0 and RГ5С200М2[i]=0 and RГ6С200М2[i]=0: DeleteFrame(М2,i); else i=i+1; fi;
  od;
 Finally
  CloseProgress;
 end;
 ОтчGUID=РАБ.ПАРАМ_ОТЧ.ОтчGUID;
 Message("Расчет завершен");
end;

Proc Перерасчет(Flag:L);
var Msg:S;
 if ДН>ДК: Message("Дата начада периода превышает дату окончания периода",mtError); РАБ.ПАРАМ_ОТЧ.Взять("ДК",1); Exit; fi;
 if ДК=1.1.100: Message("Выберите отчетный период",mtError); РАБ.ПАРАМ_ОТЧ.Взять("ДК",1); Exit; fi;
 if ВД="": Message("Выберите вид детятельности"); Template.Field="НаимВД"; Exit; fi;
 if Flag: Msg="Параметры отчета изменились."+Chr(13); else Msg=""; fi;
 if EnqOkCancel(Msg+'Выполнить расчет ?'+chr(13)+'Набранные вручную данные будут утеряны',mtWarning)=CmOk: Расчет; fi;
end;
2--Обработчики событий полей шаблона-----
Func ПарамОтч_onEnter(FieldName: String; Iter: Integer): logical;
var Flag:L;
 if FieldName="НаимВД": FieldName="ВД"; fi;
 Flag=РАБ.ПАРАМ_ОТЧ.Взять(FieldName,1);
 ОтчGUID=ОтчGUID;
 if Flag or not ОтчGUID=РАБ.ПАРАМ_ОТЧ.ОтчGUID: ПрисвоитьТочность; Перерасчет(True); fi;
 Return False;
end;

Func SГ1Сx00М1_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp,Field:S;
var Iter:I;
 Template.HideEditor(False);
 Field=asString(Template.Field);
 Iter=asInteger(Template.Frame);
 tmp=AnaElection("ЛС.*");
 if tmp="": ^Cur; fi;
 if Field="SГ1С100М1": ПризнЛС1[Iter]=tmp;
   |Field="SГ1С200М1": ПризнЛС2[Iter]=tmp;
 fi;
 tmp=SubStr(tmp,Pos(".",tmp)+1,255);
 PutVariableS(Field+"["+Str(Iter)+"]",tmp);
 Return Cur;
end;

Proc SГ1Сx00М1_OnExit(FieldName: String; Iter: Integer);
 if GetVariableS(FieldName)="":
    if FieldName="SГ1С100М1": ПризнЛС1[Iter]="";
      |FieldName="SГ1С200М2": ПризнЛС2[Iter]="";
    fi;
 fi;
end;

Func SГ2Сx00М1_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:S;
 Template.HideEditor(False);
 tmp=Раб.КБК.Список(МаскаСч,"","СЧ9 И");
 if tmp="": ^Cur; fi;
 PutVariableS(asString(Template.Field)+"["+Str(asInteger(Template.Frame))+"]",tmp);
 Return Cur;
end;

Func RГxСx00Мx_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Field,ОбщУслСчКИФД,УслСч,УслАн,NameRep,tmp,Acc,Sgn:S;
var Iter,i,Разд:I;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 if Match(Field,"*100М1"):
    if SГ2С100М1[Iter]="": Message("Заполните код счета бюджетного учета",mtError); Template.Field="SГ2С100М1"; Template.Frame=Iter; ^Cur; fi;
    УслСч="*."+SubStr(SГ2С100М1[Iter],1,8)+".*";
    if not SГ1С100М1[Iter]="" and not ПризнЛС1[Iter]="":
       УслАн=Раб.Бюджет2005.Объединить(ОбщУслАн,ПризнЛС1[Iter],"&");
      else
       УслАн=ОбщУслАн;
    fi;
    Разд=1;
   |Match(Field,"*200М2"):
    if SГ2С200М2[Iter]="": Message("Заполните код счета бюджетного учета",mtError); Template.Field="SГ2С200М2"; Template.Frame=Iter; ^Cur; fi;
    УслСч="*."+SubStr(SГ2С200М2[Iter],1,8)+".*";
    if not SГ1С200М2[Iter]="" and not ПризнЛС2[Iter]="":
       УслАн=Раб.Бюджет2005.Объединить(ОбщУслАн,ПризнЛС2[Iter],"&");
      else
       УслАн=ОбщУслАн;
    fi;
    Разд=2;
 fi;
 if not ОбщУслКИФД="": ОбщУслСчКИФД=Раб.Бюджет2005.ВзятьКодКБК(ОбщУслКИФД,"КИФД","КБК",False)+".*"; else ОбщУслСчКИФД=""; fi;
 УслСч=Раб.Бюджет2005.Объединить(УслСч,ОбщУслСчКИФД,"&");
 tmp="";
 if Разд=1:
    if Match(Field,"RГ3*") or Match(Field,"RГ5*"):
       for i=1..УпрН1 do
        if not УслСчБанк1[i]="" and not УслАнБанк1[i]="":
           for Account Acc=Раб.Бюджет2005.Объединить(УслСч,"("+УслСчБанк1[i]+")","&") do
            for Sign Sgn=Раб.Бюджет2005.Объединить(УслАн,"("+УслАнБанк1[i]+")","&") do
             tmp=Раб.Бюджет2005.Объединить(tmp,"("+УслАнБанк1[i]+")","|");
             Break;
            od;
            Break;
           od;
        fi;
       od;
      else
       for i=1..УпрН1 do
        if not УслСчВПути1[i]="" and not УслАнВПути1[i]="":
           for Account Acc=Раб.Бюджет2005.Объединить(УслСч,"("+УслСчВПути1[i]+")","&") do
            for Sign Sgn=Раб.Бюджет2005.Объединить(УслАн,"("+УслАнВПути1[i]+")","&") do
             tmp=Раб.Бюджет2005.Объединить(tmp,"("+УслАнВПути1[i]+")","|");
             Break;
            od;
            Break;
           od;
        fi;
       od;
     fi;
   else
    if Match(Field,"RГ3*") or Match(Field,"RГ5*"):
       for i=1..УпрН2 do
        if not УслСчБанк2[i]="" and not УслАнБанк2[i]="":
           for Account Acc=Раб.Бюджет2005.Объединить(УслСч,"("+УслСчБанк2[i]+")","&") do
            for Sign Sgn=Раб.Бюджет2005.Объединить(УслАн,"("+УслАнБанк2[i]+")","&") do
             tmp=Раб.Бюджет2005.Объединить(tmp,"("+УслАнБанк2[i]+")","|");
             Break;
            od;
            Break;
           od;
        fi;
       od;
      else
       for i=1..УпрН2 do
        if not УслСчВПути2[i]="" and not УслАнВПути2[i]="":
           for Account Acc=Раб.Бюджет2005.Объединить(УслСч,"("+УслСчВПути2[i]+")","&") do
            for Sign Sgn=Раб.Бюджет2005.Объединить(УслАн,"("+УслАнВПути2[i]+")","&") do
             tmp=Раб.Бюджет2005.Объединить(tmp,"("+УслАнВПути2[i]+")","|");
             Break;
            od;
            Break;
           od;
        fi;
       od;
     fi;
 fi;
 УслАн=Раб.Бюджет2005.Объединить(УслАн,tmp,"&");
 if not УслВал="":
    if УслВал=BaseCurrency: NameRep='"009"'; else NameRep='"009В"'; fi;
    Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst".'+NameRep,ДН,ДК,УслСч,УслАн);
   else
    Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."009"',ДН,ДК,УслСч,УслАн);
 fi;
 Return Cur;
end;

Proc ВосстанНастр_OnClick(Row: Integer; Col: Integer; Double: Logical);
 if EnqOkCancel("Восстановить значения по умолчанию ?",mtWarning)=cmCancel: Exit; fi;
 НастрУмолч;
 Message("Значение по умолчанию восстановлены");
end;

Proc ЗакрытьНастр_OnClick(Row: Integer; Col: Integer; Double: Logical);
 if ПроверитьНастр: Настр(False); fi;
end;

Proc ПроверитьНастр_onClick(Row: Integer; Col: Integer; Double: Logical);
 if ПроверитьНастр: Message("Ошибок не обнаружено"); fi;
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="A1": InsertFrame(УпрН1,Iter+1);
   |FieldName="A2": InsertFrame(УпрН2,Iter+1);
 fi;
 Return False;
end;

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="D1": DeleteFrame(УпрН1,Iter);
   |FieldName="D2": DeleteFrame(УпрН2,Iter);
 fi;
 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 FieldName:S;
var Iter,l:I;
 Iter=AsInteger(Template.Frame);
 FieldName=AsString(Template.Field)+"["+Str(Iter)+"]";
 Cur=Раб.КБК.Список(МаскаСч,"","СЧ5");
 if Cur="": Template.HideEditor(False); ^Cur; fi;
 Cur="*.?."+Cur+".*";
 Cur=Раб.Бюджет2005.Объединить_Диалог(GetVariableS(FieldName),Cur,"|=ИЛИ;_=ЗАМЕНИТЬ","_");
 if Раб.Бюджет2005.HideEditor: Template.HideEditor(False); PutVariableS(FieldName,Cur); fi;
 Return  Cur;
end;

Func УслАн_OnEnter(FieldName: String; Iter: Integer): logical;
var Val:S;
 if FieldName="УслАнБанк1":  Val=УслСчБанк1[Iter];  FieldName="УслСчБанк1";
   |FieldName="УслАнБанк2":  Val=УслСчБанк2[Iter];  FieldName="УслСчБанк2";
   |FieldName="УслАнВПути1": Val=УслСчВПути1[Iter]; FieldName="УслСчВПути1";
   |FieldName="УслАнВПути2": Val=УслСчВПути2[Iter]; FieldName="УслСчВПути2";
 fi;
 if Val="": Message("Заполните условие отбора по счетам",mtError); Template.Field=FieldName; Template.Frame=Iter; ^False; fi;
 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 FieldName,tmp:S;
var Iter:I;
 Iter=AsInteger(Template.Frame);
 FieldName=AsString(Template.Field);
 if FieldName="УслАнБанк1":  tmp=УслСчБанк1[Iter];
   |FieldName="УслАнБанк2":  tmp=УслСчБанк2[Iter];
   |FieldName="УслАнВПути1": tmp=УслСчВПути1[Iter];
   |FieldName="УслАнВПути2": tmp=УслСчВПути2[Iter];
 fi;
 FieldName=FieldName+"["+Str(Iter)+"]";
 if not tmp="": tmp=Раб.Бюджет2005.СписокСправ(tmp,0,""); fi;
 if not tmp="": tmp="("+tmp+")|~*.*"; fi;
 Cur=AnaElection(tmp);
 if Cur="": Template.HideEditor(False); ^Cur; fi;
 Cur=Раб.Бюджет2005.Объединить_Диалог(GetVariableS(FieldName),Cur,"&=И;|=ИЛИ;&~=И ИСКЛЮЧИТЬ;_=ЗАМЕНИТЬ","_");
 if Раб.Бюджет2005.HideEditor: Template.HideEditor(False); PutVariableS(FieldName,Cur); fi;
 Return Cur;
end;

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

Proc btnРасчет_OnClick(Sender: String);
 ПереРасчет(False);
end;

Proc btnПечать_OnClick(Sender: String);
 Настр(False);
 Раб.Настр_Печать.Prn("","","ТББ.ОТЧЕТЫ.БАЛАНС.128Н.0503178.000.cfg","",1);
end;

Proc btnОчистить_OnClick(Sender: String);
 if EnqOkCancel("Все данные будут очищены. Вы уверены?")=cmOk: Очистить; fi;
end;

Proc btnНастр_OnClick(Sender: String);
 Настр(True);
end;

Proc btnЗаписка_OnClick(Sender: String);
 OpenBlank("ОТЧЕТЫ.БАЛАНС.ПОЯСНИТЗАП_0503160",False);
end;
2--Обработчики0 2событий шаблона-----
Proc OnOpen(Create: Logical);
 Раб.Настр_Печать.Cfg("","ТББ.ОТЧЕТЫ.БАЛАНС.128Н.0503178.000.cfg");
end;

Proc AfterOpen(Destroy: Logical);
 ПрисвоитьТочность;
 Настр(False);
end;

КОНЕЦ