-- Шаблон создан мастером бланков
-- 19.09.2014 16:04:29
--
БланкСШаблоном "Отчет по обеспечению исполнения обязательств";

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

cbТек  : Object;
cbИспол: Object;
cbАннул: Object;

fОст     :L;
fСтатусБГ:L;
fСрокБГ  :L;
fБезОб   :L;
fТек     :L;
fИспол   :L;
fАннул   :L;
fДС_Вид  :I;
var fДС_Вид_:S=if(fДС_Вид=1:"СВР.ОИО.*"|fДС_Вид=2:"СВР.ОБЗ.*"|fДС_Вид=3:"~(СВР.ОИО.*|СВР.ОБЗ.*)"|True:"(СВР.ОИО.*|СВР.ОБЗ.*)");
fВид     :I;
var fВид_:S=if(fВид=1:"ЗАБ10.ЗАДАТОК.*"|fВид=2:"ЗАБ10.ЗАЛОГ.*"|fВид=3:"ЗАБ10.БГ.*"|fВид=4:"ЗАБ10.ПОРУЧ.*"|fВид=5:"ЗАБ10.ИНОЕ.*"|True:"ЗАБ10.*");
fСорт    :I;
fСортЗаб :I;


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

ПризнДоп:S;
var ПризнДопК :S="К";
var ПризнДопКт:S="Кт";
УслБГ:S;
var УслБГ_:S;

var МаскаСч:S="ЗАБ.10!";
var ДС_МаскаСч :S="*.3.304.01.*|*.3.ЗАБ.00.830";
var ДС_УслСч   :S="*.3.304.01.*|(*.3.ЗАБ.00.830/*.3.ЗАБ.КР.*)";
var ДС_УслСчБал:S="*.3.304.01.*";
var ДС_УслСчЗаб:S="*.3.ЗАБ.00.830/*.3.ЗАБ.КР.*";

var Упр:I;
var пп[]:i=$;
var Вид[]:S;
var Вид_[]:S=if(Вид[$]="ЗАДАТОК":"Задаток"|Вид[$]="ЗАЛОГ":"Залог"|Вид[$]="БГ":"Банковская гарантия"|Вид[$]="ПОРУЧ":"Поручительство"|Вид[$]="ИНОЕ":"Иное обеспечение"|True:"");
var Ном[]:S;
var Дат[]:D;
var Сум[]:N;
var Неустойка[]:N;
var Срок1[]:D;
var Срок2[]:D;
var Гарант[]:S;
var ГарантСтатус[]:S;
var ГарантБИК[]:S;
var Принципал[]:S;
var НаимОбяз[]:S;
var НомОбяз[]:S;
var ДатОбяз[]:D;
var СтатусОбяз[]:S;
var ДатСтатусОбяз[]:D;
var Сум1[]:N;
var Дат1[]:D;
var Сум2[]:N;
var Дат2[]:D;
var ОстК[]:N=Сум1[$]-Сум2[$];
var Призн[]:S;
var recОбяз[]:Record;
var crdОбяз[]:S;
var crdОбяз[]:S;

var keyПризн[]:S;
var idxПризн[]:I;

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 ГарантСтатус_Сорт[]:S;
var ГарантБИК_Сорт[]:S;
var Принципал_Сорт[]:S;
var НаимОбяз_Сорт[]:S;
var НомОбяз_Сорт[]:S;
var ДатОбяз_Сорт[]:D;
var СтатусОбяз_Сорт[]:S;
var ДатСтатусОбяз_Сорт[]:D;
var Сум1_Сорт[]:N;
var Дат1_Сорт[]:D;
var Сум2_Сорт[]:N;
var Дат2_Сорт[]:D;
var ОстК_Сорт[]:N=Сум1_Сорт[$]-Сум2_Сорт[$];
var idx_Сорт[]:I;

var УпрДС:I;
var ДС_НаимОбяз[]:S;
var ДС_НомОбяз[]:S;
var ДС_ДатОбяз[]:D;
var ДС_СтатусОбяз[]:S;
var ДС_ДатСтатусОбяз[]:D;
var ДС_Вид[]:S;
var ДС_Принципал[]:S;
var ДС_Сум[]:N;
var ДС_Сум1[]:N;
var ДС_Дат1[]:D;
var ДС_ПП1[]:S;
var ДС_Сум2[]:N;
var ДС_Дат2[]:D;
var ДС_ПП2[]:S;
var ДС_ОстК[]:N=ДС_Сум1[$]-ДС_Сум2[$];
var ДС_Призн[]:S;
var ДС_recОбяз[]:Record;
var ДС_crdОбяз[]:S;

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 ДС_СтатусОбяз_Сорт[]:S;
var ДС_ДатСтатусОбяз_Сорт[]:D;
var ДС_Вид_Сорт[]:S;
var ДС_Принципал_Сорт[]:S;
var ДС_Сум_Сорт[]:N;
var ДС_Сум1_Сорт[]:N;
var ДС_Дат1_Сорт[]:D;
var ДС_ПП1_Сорт[]:S;
var ДС_Сум2_Сорт[]:N;
var ДС_Дат2_Сорт[]:D;
var ДС_ПП2_Сорт[]:S;
var ДС_ОстК_Сорт[]:N=ДС_Сум1_Сорт[$]-ДС_Сум2_Сорт[$];
var ДС_idx_Сорт[]:I;

var Отч:S;

var cacheVer     :S;
var cacheNEWNUM[]:S;
var cacheNAMEP []:S;
var cacheREAL  []:S;
var cacheDT_IZM[]:D;

var Buf []:S;
var Buf2[]:S;

var Run:L;

var SelfCfg:S="ТББ.ОТЧЕТЫ.СПРАВКИ.ОБЕСП_ИСПОЛ_ОБЯЗ.000.cfg";
--
--Процедуры и функции -------------
Proc Оформление;
 S1.Visible=    fСорт=0;
 S2.Visible=not fСорт=0;
 S3.Visible=    fСорт=0 and fСортЗаб=0;
 S4.Visible=not fСорт=0 or not fСортЗаб=0;
 cbТек.Enabled=not fБезОб;
 cbИспол.Enabled=not fБезОб;
 cbАннул.Enabled=not fБезОб;
end;

Proc ОчиститьСорт;
 ClearVariable(Упр_Сорт);
 ClearVariable(Вид_Сорт);
 ClearVariable(Ном_Сорт);
 ClearVariable(Дат_Сорт);
 ClearVariable(Сум_Сорт);
 ClearVariable(Неустойка_Сорт);
 ClearVariable(Срок1_Сорт);
 ClearVariable(Срок2_Сорт);
 ClearVariable(Гарант_Сорт);
 ClearVariable(ГарантСтатус_Сорт);
 ClearVariable(ГарантБИК_Сорт);
 ClearVariable(Принципал_Сорт);
 ClearVariable(НаимОбяз_Сорт);
 ClearVariable(НомОбяз_Сорт);
 ClearVariable(ДатОбяз_Сорт);
 ClearVariable(СтатусОбяз_Сорт);
 ClearVariable(ДатСтатусОбяз_Сорт);
 ClearVariable(Сум1_Сорт);
 ClearVariable(Дат1_Сорт);
 ClearVariable(Сум2_Сорт);
 ClearVariable(Дат2_Сорт);
 ClearVariable(idx_Сорт);

 ClearVariable(УпрДС_Сорт);
 ClearVariable(ДС_НаимОбяз_Сорт);
 ClearVariable(ДС_НомОбяз_Сорт);
 ClearVariable(ДС_ДатОбяз_Сорт);
 ClearVariable(ДС_СтатусОбяз_Сорт);
 ClearVariable(ДС_ДатСтатусОбяз_Сорт);
 ClearVariable(ДС_Принципал_Сорт);
 ClearVariable(ДС_Вид_Сорт);
 ClearVariable(ДС_Сум_Сорт);
 ClearVariable(ДС_Сум1_Сорт);
 ClearVariable(ДС_Дат1_Сорт);
 ClearVariable(ДС_ПП1_Сорт);
 ClearVariable(ДС_Сум2_Сорт);
 ClearVariable(ДС_Дат2_Сорт);
 ClearVariable(ДС_ПП2_Сорт);
 ClearVariable(ДС_ОстК_Сорт);
 ClearVariable(ДС_idx_Сорт);
end;

Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(Вид);
 ClearVariable(Ном);
 ClearVariable(Дат);
 ClearVariable(Сум);
 ClearVariable(Неустойка);
 ClearVariable(Срок1);
 ClearVariable(Срок2);
 ClearVariable(Гарант);
 ClearVariable(ГарантСтатус);
 ClearVariable(ГарантБИК);
 ClearVariable(Принципал);
 ClearVariable(НаимОбяз);
 ClearVariable(НомОбяз);
 ClearVariable(ДатОбяз);
 ClearVariable(СтатусОбяз);
 ClearVariable(ДатСтатусОбяз);
 ClearVariable(Сум1);
 ClearVariable(Дат1);
 ClearVariable(Сум2);
 ClearVariable(Дат2);
 ClearVariable(Призн);
 ClearVariable(recОбяз);
 ClearVariable(crdОбяз);

 ClearVariable(УпрДС);
 ClearVariable(ДС_НаимОбяз);
 ClearVariable(ДС_НомОбяз);
 ClearVariable(ДС_ДатОбяз);
 ClearVariable(ДС_СтатусОбяз);
 ClearVariable(ДС_ДатСтатусОбяз);
 ClearVariable(ДС_Вид);
 ClearVariable(ДС_Принципал);
 ClearVariable(ДС_Сум);
 ClearVariable(ДС_Сум1);
 ClearVariable(ДС_Дат1);
 ClearVariable(ДС_ПП1);
 ClearVariable(ДС_Сум2);
 ClearVariable(ДС_Дат2);
 ClearVariable(ДС_ПП2);
 ClearVariable(ДС_Призн);
 ClearVariable(ДС_recОбяз);
 ClearVariable(ДС_crdОбяз);

 ОчиститьСорт;
end;

Proc ТолькоОстатки;
var Iter:I;
 Iter=1;
 While Iter<=УпрДС do
  if Round(ДС_ОстК[Iter],2)=0:
     DeleteFrame(УпрДС,Iter);
    else
     Iter=Iter+1;
  fi;
 od;
 Iter=1;
 While Iter<=Упр do
  if Round(ОстК[Iter],2)=0:
     DeleteFrame(Упр,Iter);
    else
     Iter=Iter+1;
  fi;
 od;
end;

Proc ТолькоСтатусБГ;
var Iter:I;
 УпрДС=0;
 Iter=1;
 While Iter<=Упр do
  if ГарантСтатус[Iter]="":
     DeleteFrame(Упр,Iter);
    else
     Iter=Iter+1;
  fi;
 od;
end;

Proc ТолькоСрокБГ;
var Iter:I;
 УпрДС=0;
 Iter=1;
 While Iter<=Упр do
  if Срок2[Iter]<ДК and not Round(ОстК[Iter],2)=0:
     Iter=Iter+1;
    else
     DeleteFrame(Упр,Iter);
  fi;
 od;
end;

Proc ТолькоОбяз;
var Iter:I;
 Iter=1;
 While Iter<=УпрДС do
  if (fБезОб and ДС_НомОбяз[Iter]="") or (not fБезОб and ((fТек and ДС_СтатусОбяз[Iter]="") or (fИспол and ДС_СтатусОбяз[Iter]="Исполнено") or (fАннул and ДС_СтатусОбяз[Iter]="Аннулировано"))):
     Iter=Iter+1;
    else
     DeleteFrame(УпрДС,Iter);
  fi;
 od;
 Iter=1;
 While Iter<=Упр do
  if (fБезОб and НомОбяз[Iter]="") or (not fБезОб and ((fТек and СтатусОбяз[Iter]="") or (fИспол and СтатусОбяз[Iter]="Исполнено") or (fАннул and СтатусОбяз[Iter]="Аннулировано"))):
     Iter=Iter+1;
    else
     DeleteFrame(Упр,Iter);
  fi;
 od;
end;

Proc КонтрольПоБИК;
var OWAБИК,Iter,z:I;
var LastUpd_:S;
 LastUpd_=Раб.Вспом.Справ_БИК.НомерКорректировки("");
 if not cacheVer=LastUpd_:
    ClearVariable(cacheVer);
    ClearVariable(cacheNEWNUM);
    ClearVariable(cacheNAMEP);
    ClearVariable(cacheREAL);
    ClearVariable(cacheDT_IZM);
    cacheVer=LastUpd_;
 fi;
 OWAБИК=OpenWorkArea("РПО_BNKSEEK","NEWNUM");
 Try
  if Records(OWAБИК)=0: Message("Справочник БИК РФ не загружен",mtError); Exit; fi;
  for Iter=1..Упр do
   if not Round(ОстК[Iter],2)=0 and not ГарантБИК[Iter]="":
      z=SearchInArray(cacheNEWNUM,ГарантБИК[Iter],True);
      if z=-1:
         SetFilter(OWAБИК,"NEWNUM='"+ГарантБИК[Iter]+"'");
         if Records(OWAБИК)=0:
            ГарантСтатус[Iter]="БИК '"+ГарантБИК[Iter]+"' в справочнике не найден";
           else
            z=InsertInArraySort(cacheNEWNUM,GetFieldS(OWAБИК,1,"NEWNUM"));
            InsertInArray(cacheNAMEP,z,GetFieldS(OWAБИК,1,"NAMEP"));
            InsertInArray(cacheREAL,z,GetFieldS(OWAБИК,1,"REAL_"));
            InsertInArray(cacheDT_IZM,z,GetFieldD(OWAБИК,1,"DT_IZM"));
         fi;
      fi;
      if not z=-1:
         if not cacheREAL[z]="":
            ГарантСтатус[Iter]="Кода контроля по БИК: "+Раб.Вспом.Справ_БИК.КодВТекст("Real",cacheREAL[z]);
         fi;
         if not ГарантСтатус[Iter]="":
            ГарантСтатус[Iter]=ГарантСтатус[Iter]+"; Дата изм.: "+DateToString(cacheDT_IZM[z]);
         fi;
      fi;
   fi;
  od;
 Finally
  CloseWorkArea(OWAБИК);
 end;
end;

Proc СортироватьОтч(fShow:L);
var Iter,z,ДС_IterErr,IterErr:I;
var Key:S;
 --SortSection рушит отчет из-за двух строк во фрейме
 if fShow:
    ShowProgress(УпрДС+Упр,"Сортировка...");
 fi;
 Try
  Оформление;
  if not fСорт=0:
     ОчиститьСорт;
     ClearVariable(Buf);
     for Iter=1..УпрДС do
      if fShow:
         ProgressPos(Iter);
      fi;
      if fСорт=1: Key=ДС_НомОбяз[Iter];
        |fСорт=2: Key=ДС_Вид[Iter];
        |fСорт=3: Key=ДС_Принципал[Iter];
        |fСорт=4: Key=Раб.Формат.ДатаСтр(ДС_Дат1[Iter],14);
        |fСорт=5: Key=if(ДС_Дат2[Iter]=1.1.100,"xx.xx.xxxx",Раб.Формат.ДатаСтр(ДС_Дат2[Iter],14));
      fi;
      z=InsertInArraySort(Buf,Key);
      InsertFrame(УпрДС_Сорт,z);
      ДС_НаимОбяз_Сорт[z]     =ДС_НаимОбяз[Iter];
      ДС_НомОбяз_Сорт[z]      =ДС_НомОбяз[Iter];
      ДС_ДатОбяз_Сорт[z]      =ДС_ДатОбяз[Iter];
      ДС_СтатусОбяз_Сорт[z]   =ДС_СтатусОбяз[Iter];
      ДС_ДатСтатусОбяз_Сорт[z]=ДС_ДатСтатусОбяз[Iter];
      ДС_Вид_Сорт[z]          =ДС_Вид[Iter];
      ДС_Принципал_Сорт[z]    =ДС_Принципал[Iter];
      ДС_Сум_Сорт[z]          =ДС_Сум[Iter];
      ДС_Сум1_Сорт[z]         =ДС_Сум1[Iter];
      ДС_Дат1_Сорт[z]         =ДС_Дат1[Iter];
      ДС_ПП1_Сорт[z]          =ДС_ПП1[Iter];
      ДС_Сум2_Сорт[z]         =ДС_Сум2[Iter];
      ДС_Дат2_Сорт[z]         =ДС_Дат2[Iter];
      ДС_ПП2_Сорт[z]          =ДС_ПП2[Iter];
      ДС_idx_Сорт[z]          =Iter;
     od;
  fi;
  if not fСорт=0 or not fСортЗаб=0:
     ClearVariable(Buf);
     for Iter=1..Упр do
      if fShow:
         ProgressPos(Упр+Iter);
      fi;
      if fСортЗаб=0:
         if fСорт=1: Key=НомОбяз[Iter];
           |fСорт=2: Key=Вид[Iter];
           |fСорт=3: Key=Принципал[Iter];
           |fСорт=4: Key=Раб.Формат.ДатаСтр(Дат1[Iter],14);
           |fСорт=5: Key=if(Дат2[Iter]=1.1.100,"xx.xx.xxxx",Раб.Формат.ДатаСтр(Дат2[Iter],14));
         fi;
        else
         if fСортЗаб=1: Key=Гарант[Iter];
           |fСортЗаб=2: Key=Раб.Формат.ДатаСтр(Срок1[Iter],14);
           |fСортЗаб=3: Key=if(Срок2[Iter]=1.1.100,"xx.xx.xxxx",Раб.Формат.ДатаСтр(Срок2[Iter],14));
         fi;
      fi;
      z=InsertInArraySort(Buf,Key);
      InsertFrame(Упр_Сорт,z);
      Вид_Сорт[z]          =Вид_[Iter];
      Ном_Сорт[z]          =Ном[Iter];
      Дат_Сорт[z]          =Дат[Iter];
      Сум_Сорт[z]          =Сум[Iter];
      Неустойка_Сорт[z]    =Неустойка[Iter];
      Срок1_Сорт[z]        =Срок1[Iter];
      Срок2_Сорт[z]        =Срок2[Iter];
      Гарант_Сорт[z]       =Гарант[Iter];
      ГарантСтатус_Сорт[z] =ГарантСтатус[Iter];
      ГарантБИК_Сорт[z]    =ГарантБИК[Iter];
      Принципал_Сорт[z]    =Принципал[Iter];
      НаимОбяз_Сорт[z]     =НаимОбяз[Iter];
      НомОбяз_Сорт[z]      =НомОбяз[Iter];
      ДатОбяз_Сорт[z]      =ДатОбяз[Iter];
      СтатусОбяз_Сорт[z]   =СтатусОбяз[Iter];
      ДатСтатусОбяз_Сорт[z]=ДатСтатусОбяз[Iter];
      Сум1_Сорт[z]         =Сум1[Iter];
      Дат1_Сорт[z]         =Дат1[Iter];
      Сум2_Сорт[z]         =Сум2[Iter];
      Дат2_Сорт[z]         =Дат2[Iter];
      idx_Сорт[z]          =Iter;
     od;
  fi;
 Finally
  if fShow:
     z=if(fСорт=0,УпрДС,УпрДС_Сорт);
     for Iter=1..z do
      if Round(if(fСорт=0,ДС_ОстК[Iter],ДС_ОстК_Сорт[Iter]),2)<0:
         if ДС_IterErr=0:
            Trace("---------");
            Trace(Отч);
            ДС_IterErr=Iter;
         fi;
         Trace("Внимание! Таблица 'Денежные средства' строка №"+Str(Iter)+" Отрицательный остаток");
      fi;
     od;
     z=if(fСорт=0,Упр,Упр_Сорт);
     for Iter=1..Упр do
      if Round(if(fСорт=0,ОстК[Iter],ОстК_Сорт[Iter]),2)<0:
         if ДС_IterErr=0 and IterErr=0:
            Trace("---------");
            Trace(Отч);
            IterErr=Iter;
         fi;
         Trace("Внимание! Таблица 'Забаланс' строка №"+Str(Iter)+" Отрицательный остаток");
      fi;
     od;
     CloseProgress;
  fi;
 end;
end;

Proc Расчет;
var Призн_,ПризнК_,ПризнОбяз_,ПризнДоп_,tmp,Crd,tД,tК:S;
var p,pp,OWA,OWAДок,n,n2,t,z,Iter:i;
var Rec,Rec2: Record;
var ДС_IterErr,IterErr:I;
 Очистить;
 Refresh;
 pp=0; p=0;
 for sign Призн_=fВид_ do
  pp=pp+1;
 od;
 Раб.ИмяПолеКарт.Начать;
 Try
  OWA=OpenWorkArea("РПО_ОБЕСП_ИСПОЛ_ОБЯЗ","",if(УслБГ="","","Вид='БГ' and Гарант_БИК='"+ExtractWord(1,УслБГ," ")+"'"));
  Try
   ShowProgress(pp*3,"Расчет...");
   ПризнДоп_=if(ПризнДоп="","","("+ПризнДоп+")&");
   for sign Призн_=fВид_, Sort do
    p=p+1;
    ProgressPos(p);
    if SignUsed(Призн_):
       tmp=ПризнДоп_+Призн_;
       if ExistsTransactions(МаскаСч+"{"+tmp+"}",ДН,ДК):
          Rec=SignToRecord(Призн_,False);
          n=GetRecordNumber(OWA,Rec);
          if n=0:
             if УслБГ="":
                InsertFrame(Упр,Упр+1);
                Вид[Упр]=ExtractWord(2,Призн_,".");
                Ном[Упр]=Призн_;
                Сум1[Упр]= Turn("+"+МаскаСч+"{"+tmp+"}",1.1.100,ДК);
                Сум2[Упр]=-Turn("-"+МаскаСч+"{"+tmp+"}",1.1.100,ДК);
                Призн[Упр]=Up(Призн_);
             fi;
            else
             InsertFrame(Упр,Упр+1);
             Вид[Упр]=GetFieldS(OWA,n,"Вид");
             Ном[Упр]=GetFieldS(OWA,n,"НомДок");
             Дат[Упр]=GetFieldD(OWA,n,"ДатДок");
             Сум[Упр]=GetFieldN(OWA,n,"Сум");
             Неустойка[Упр]=GetFieldN(OWA,n,"Неустойка");
             Срок1[Упр]=GetFieldD(OWA,n,"ДатН");
             Срок2[Упр]=GetFieldD(OWA,n,"ДатК");
             if Вид[Упр]="БГ":
                Гарант[Упр]=GetFieldS(OWA,n,"Гарант_Наим");
                ГарантБИК[Упр]=GetFieldS(OWA,n,"Гарант_БИК");
               else
                Гарант[Упр]=GetFieldS(OWA,n,"Гарант_Рекв.КорИмя");
             fi;
             Принципал[Упр]=GetFieldS(OWA,n,"Принципал_Рекв.КорИмя");
             ПризнОбяз_=GetFieldS(OWA,n,"Обяз_Призн");
             Rec2=SignToRecord(ПризнОбяз_,False);
             recОбяз[Упр]=Rec2;
             if Rec2=nil:
                НомОбяз[Упр]=ПризнОбяз_;
               else
                Crd=SignCardFile(ПризнОбяз_,False);
                crdОбяз[Упр]=Crd;
                if crd="РПО_ДОГОВОР_ПРИЗНАК":
                   OWAДок=Раб.ИмяПолеКарт.ВзятьКартОбл(crd);
                   n2=GetRecordNumber(OWAДок,Rec2);
                   НаимОбяз[Упр]=GetFieldS(OWAДок,n2,"Договор.НаимДок.Наим");
                   НомОбяз[Упр]=GetFieldS(OWAДок,n2,"Договор.НомерДок");
                   ДатОбяз[Упр]=GetFieldD(OWAДок,n2,"Договор.ДатаДок");
                   СтатусОбяз[Упр]=GetFieldS(OWAДок,n2,"Договор.ТипИзм");
                   ДатСтатусОбяз[Упр]=GetFieldD(OWAДок,n2,"Договор.ДатаИзм");
                   crdОбяз[Упр]="РПО_ДОГОВОР";
                   recОбяз[Упр]=GetFieldR(OWAДок,n2,"Договор");
                  |crd="РПО_ДОГОВОР":
                   OWAДок=Раб.ИмяПолеКарт.ВзятьКартОбл(crd);
                   n2=GetRecordNumber(OWAДок,Rec2);
                   НаимОбяз[Упр]=GetFieldS(OWAДок,n2,"НаимДок.Наим");
                   НомОбяз[Упр]=GetFieldS(OWAДок,n2,"НомерДок");
                   ДатОбяз[Упр]=GetFieldD(OWAДок,n2,"ДатаДок");
                   СтатусОбяз[Упр]=GetFieldS(OWAДок,n2,"ТипИзм");
                   ДатСтатусОбяз[Упр]=GetFieldD(OWAДок,n2,"ДатаИзм");
                fi;
                if not СтатусОбяз[Упр]="":
                   if ДатСтатусОбяз[Упр]<ДК:
                      if СтатусОбяз[Упр]= "99": СтатусОбяз[Упр]="Исполнено";
                        |СтатусОбяз[Упр]="-99": СтатусОбяз[Упр]="Аннулировано";
                        |True: СтатусОбяз[Упр]=""; ДатСтатусОбяз[Упр]=1.1.100;
                      fi;
                     else
                      СтатусОбяз[Упр]="";
                      ДатСтатусОбяз[Упр]=1.1.100;
                   fi;
                fi;
             fi;
             Сум1[Упр]= Turn("+"+МаскаСч+"{"+tmp+"}",1.1.100,ДК);
             Сум2[Упр]=-Turn("-"+МаскаСч+"{"+tmp+"}",1.1.100,ДК);
             Призн[Упр]=Up(Призн_);
          fi; --if n=0
       fi; --if ExistsTransactions(МаскаСч+"{"+tmp+"}",ДН,ДК):
    fi; --if SignUsed(Призн_):
   od;
   ClearVariable(keyПризн);
   ClearVariable(idxПризн);
   for Iter=1..Упр do
    z=InsertInArraySort(keyПризн,Призн[Iter]);
    InsertInArray(idxПризн,z,Iter);
   od;
   for transaction t=МаскаСч+"{"+ПризнДоп_+fВид_+"}",1.1.100,ДК,Reverse do
    Призн_=Up(Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(TransSigns(t)," ","ЗАБ10.*",""));
    if not Призн_=Призн[idxПризн[z]]:
       z=SearchInArray(keyПризн,Призн_,True);
    fi;
    if not z=-1:
       if Дат1[idxПризн[z]]=1.1.100 or Дат2[idxПризн[z]]=1.1.100:
          tД=TransDeb(t);
          tК=TransCre(t);
          if Match(tД,МаскаСч):
             if Дат1[idxПризн[z]]=1.1.100:
                Дат1[idxПризн[z]]=TransDate(t);
             fi;
          fi;
          if Match(tК,МаскаСч):
             if Дат2[idxПризн[z]]=1.1.100:
                Дат2[idxПризн[z]]=TransDate(t);
             fi;
          fi;
      fi;
    fi;
   od;
   --------------------------------------------------
   if not fСрокБГ and not fСтатусБГ and УслБГ="":
      if not fДС_Вид=3:
         pp=0; p=0;
         for sign Призн_=fДС_Вид_ do
          pp=pp+1;
         od;
         ShowProgress(pp*3,"Расчет...");
         for sign Призн_=fДС_Вид_, Sort do
          p=p+1;
          ProgressPos(pp+p);
          if SignUsed(Призн_):
             tmp=ПризнДоп_+Призн_;
             if ExistsTransactions(ДС_УслСч+"{"+tmp+"}",ДН,ДК):
                Rec=SignToRecord(Призн_,False);
                n=GetRecordNumber(OWA,Rec);
                InsertFrame(УпрДС,УпрДС+1);
                ДС_Вид[УпрДС]=if(Match(Призн_,"СВР.ОИО.*"):"Обеспеч. испол. обязательства"|Match(Призн_,"СВР.ОБЗ.*"):"Обеспечение заявки"|True:"");
                if n=0:
                   ДС_Принципал[УпрДС]=Призн_;
                  else
                   ДС_Сум[УпрДС]=GetFieldN(OWA,n,"Сум");
                   ДС_Принципал[УпрДС]=GetFieldS(OWA,n,"Принципал_Рекв.КорИмя");
                   ПризнОбяз_=GetFieldS(OWA,n,"Обяз_Призн");
                   Rec2=SignToRecord(ПризнОбяз_,False);
                   ДС_recОбяз[УпрДС]=Rec2;
                   if Rec2=nil:
                      ДС_НомОбяз[УпрДС]=ПризнОбяз_;
                     else
                      Crd=SignCardFile(ПризнОбяз_,False);
                      ДС_crdОбяз[УпрДС]=Crd;
                      if crd="РПО_ДОГОВОР_ПРИЗНАК":
                         OWAДок=Раб.ИмяПолеКарт.ВзятьКартОбл(crd);
                         n2=GetRecordNumber(OWAДок,Rec2);
                         ДС_НаимОбяз[УпрДС]=GetFieldS(OWAДок,n2,"Договор.НаимДок.Наим");
                         ДС_НомОбяз[УпрДС]=GetFieldS(OWAДок,n2,"Договор.НомерДок");
                         ДС_ДатОбяз[УпрДС]=GetFieldD(OWAДок,n2,"Договор.ДатаДок");
                         ДС_СтатусОбяз[УпрДС]=GetFieldS(OWAДок,n2,"Договор.ТипИзм");
                         ДС_ДатСтатусОбяз[УпрДС]=GetFieldD(OWAДок,n2,"Договор.ДатаИзм");
                         ДС_crdОбяз[УпрДС]="РПО_ДОГОВОР";
                         ДС_recОбяз[УпрДС]=GetFieldR(OWAДок,n2,"Договор");
                        |crd="РПО_ДОК_ПРИЗНАК":
                         OWAДок=Раб.ИмяПолеКарт.ВзятьКартОбл(crd);
                         n2=GetRecordNumber(OWAДок,Rec2);
                         crd=GetFieldS(OWAДок,n2,"Док");
                         if Crd="РПО_ЗАЯВКА_ЗАКУП":
                            ДС_crdОбяз[УпрДС]=crd;
                            ДС_recОбяз[УпрДС]=IntegerToRecord(GetFieldI(OWAДок,n2,"Запись"));
                            OWAДок=Раб.ИмяПолеКарт.ВзятьКартОбл(ДС_crdОбяз[УпрДС]);
                            n2=GetRecordNumber(OWAДок,ДС_recОбяз[УпрДС]);
                            ДС_НаимОбяз[УпрДС]=GetFieldS(OWAДок,n2,"НаимДок.Наим");
                            ДС_НомОбяз[УпрДС]=GetFieldS(OWAДок,n2,"НомерДок");
                            ДС_ДатОбяз[УпрДС]=GetFieldD(OWAДок,n2,"ДатаДок");
                            ДС_СтатусОбяз[УпрДС]=GetFieldS(OWAДок,n2,"ТипИзм");
                            ДС_ДатСтатусОбяз[УпрДС]=GetFieldD(OWAДок,n2,"ДатаИзм");
                         fi;
                        |crd="РПО_ДОГОВОР":
                         OWAДок=Раб.ИмяПолеКарт.ВзятьКартОбл(crd);
                         n2=GetRecordNumber(OWAДок,Rec2);
                         ДС_НаимОбяз[УпрДС]=GetFieldS(OWAДок,n2,"НаимДок.Наим");
                         ДС_НомОбяз[УпрДС]=GetFieldS(OWAДок,n2,"НомерДок");
                         ДС_ДатОбяз[УпрДС]=GetFieldD(OWAДок,n2,"ДатаДок");
                         ДС_СтатусОбяз[УпрДС]=GetFieldS(OWAДок,n2,"ТипИзм");
                         ДС_ДатСтатусОбяз[УпрДС]=GetFieldD(OWAДок,n2,"ДатаИзм");
                      fi;
                      if not ДС_СтатусОбяз[УпрДС]="":
                         if ДС_ДатСтатусОбяз[УпрДС]<ДК:
                            if ДС_СтатусОбяз[УпрДС]= "99": ДС_СтатусОбяз[УпрДС]="Исполнено";
                              |ДС_СтатусОбяз[УпрДС]="-99": ДС_СтатусОбяз[УпрДС]="Аннулировано";
                              |True: ДС_СтатусОбяз[УпрДС]=""; ДС_ДатСтатусОбяз[УпрДС]=1.1.100;
                            fi;
                           else
                            ДС_СтатусОбяз[УпрДС]="";
                            ДС_ДатСтатусОбяз[УпрДС]=1.1.100;
                         fi;
                      fi;
                   fi;
                fi;
                ДС_Сум1[УпрДС]=-Turn("("+ДС_УслСчБал+")&*.730{"+tmp+"}",1.1.100,ДК);
                ДС_Сум2[УпрДС]= Turn("("+ДС_УслСчБал+")&*.830{"+tmp+"}",1.1.100,ДК);
                ДС_Сум2[УпрДС]=ДС_Сум2[УпрДС]+Turn(ДС_УслСчЗаб+"{"+tmp+"}",1.1.100,ДК);
                ДС_Призн[УпрДС]=Up(Призн_);
             fi; -- if ExistsTransactions(ДС_УслСч+"{"+tmp+"}",ДН,ДК):
          fi; ----if SignUsed(Призн_):
         od;
         ClearVariable(keyПризн);
         ClearVariable(idxПризн);
         for Iter=1..УпрДС do
          z=InsertInArraySort(keyПризн,"0#"+ДС_Призн[Iter]);
          InsertInArray(idxПризн,z,Iter);
         od;
         for transaction t=ДС_УслСч+"{"+ПризнДоп_+fДС_Вид_+"}",1.1.100,ДК,Reverse do
          Призн_=Up(Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(TransSigns(t)," ","СВР.*",""));
          if not Призн_=ДС_Призн[idxПризн[z]]:
             z=SearchInArray(keyПризн,"0#"+Призн_,True);
          fi;
          if not z=-1:
             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 Раб.Бюджет2005.MatchMask(tК,ДС_МаскаСч) and Match(tК,"*.730"):
                if ДС_Дат1[idxПризн[z]]=1.1.100:
                   ДС_Дат1[idxПризн[z]]=TransDate(t);
                fi;
                ДС_ПП1[idxПризн[z]]=Раб.Бюджет2005.Объединить(ДС_ПП1[idxПризн[z]],tmp," ");
             fi;
             if Раб.Бюджет2005.MatchMask(tД,ДС_МаскаСч) and Match(tД,"*.830"):
                if ДС_Дат2[idxПризн[z]]=1.1.100:
                   ДС_Дат2[idxПризн[z]]=TransDate(t);
                fi;
                ДС_ПП2[idxПризн[z]]=Раб.Бюджет2005.Объединить(ДС_ПП2[idxПризн[z]],tmp," ");
             fi;
          fi;
         od;
      fi; --if not fДС_Вид=3:
      --------------------
      if fДС_Вид=3 or fДС_Вид=0:
         pp=0;
         for transaction t=ДС_УслСч+"{"+ПризнДоп_+"~(СВР.ОИО.*|СВР.ОБЗ.*)}",1.1.100,ДК do
          if pp=0:
             pp=ДК-TransDate(t);
             ShowProgress(pp*3,"Расчет...");
          fi;
          ProgressPos(pp+pp+pp-(ДК-TransDate(t)));
          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;
          ПризнК_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(TransSigns(t)," ","К.*","");
          z=SearchInArray(keyПризн,"1#"+ПризнК_,True);
          if z=-1:
             z=InsertInArraySort(keyПризн,"1#"+ПризнК_);
             InsertFrame(УпрДС,z);
             ДС_Принципал[z]=Name_A(ПризнК_);
             if ДС_Принципал[z]="": ДС_Принципал[z]=ПризнК_; fi;
             ДС_Призн[z]=ПризнК_+"&~(СВР.ОИО.*|СВР.ОБЗ.*)";
          fi;
          if Раб.Бюджет2005.MatchMask(tК,ДС_МаскаСч) and Match(tК,"*.730"):
             ДС_Сум1[z]=ДС_Сум1[z]+TransSum(t);
             if ДС_Дат1[z]=1.1.100: ДС_Дат1[z]=TransDate(t); fi;
             ДС_ПП1[z]=Раб.Бюджет2005.Объединить(ДС_ПП1[z],tmp," ");
          fi;
          if Раб.Бюджет2005.MatchMask(tД,ДС_МаскаСч) and Match(tД,"*.830"):
             ДС_Сум2[z]=ДС_Сум2[z]+TransSum(t);
             if ДС_Дат2[z]=1.1.100: ДС_Дат2[z]=TransDate(t); fi;
             ДС_ПП2[z]=Раб.Бюджет2005.Объединить(ДС_ПП2[z],tmp," ");
          fi;
         od;
      fi; --if fДС_Вид=3:
   fi; --if not fСрокБГ and not fСтатусБГ and УслБГ="":
  Finally
   CloseWorkArea(OWA);
  end;
  if fОст:
     ТолькоОстатки;
  fi;
  КонтрольПоБИК;
  if fСтатусБГ:
     ТолькоСтатусБГ;
  fi;
  if fСрокБГ:
     ТолькоСрокБГ;
  fi;
  if fБезОб or fТек or fИспол or fАннул:
     ТолькоОбяз;
  fi;
  СортироватьОтч(False);
 Finally
  Раб.ИмяПолеКарт.Закончить;
  CloseProgress;
 end;
 z=if(fСорт=0,УпрДС,УпрДС_Сорт);
 for Iter=1..z do
  if Round(if(fСорт=0,ДС_ОстК[Iter],ДС_ОстК_Сорт[Iter]),2)<0:
     if ДС_IterErr=0:
        Trace("---------");
        Trace(Отч);
        ДС_IterErr=Iter;
     fi;
     Trace("Внимание! Таблица 'Денежные средства' строка №"+Str(Iter)+" Отрицательный остаток");
  fi;
 od;
 z=if(fСорт=0,Упр,Упр_Сорт);
 for Iter=1..Упр do
  if Round(if(fСорт=0,ОстК[Iter],ОстК_Сорт[Iter]),2)<0:
     if ДС_IterErr=0 and IterErr=0:
        Trace("---------");
        Trace(Отч);
        IterErr=Iter;
     fi;
     Trace("Внимание! Таблица 'Забаланс' строка №"+Str(Iter)+" Отрицательный остаток");
  fi;
 od;
 if ДС_IterErr=0 and IterErr=0:
    Message("Расчет завершен");
   else
    if not ДС_IterErr=0:
       Message("Расчет завершен^MВ таблице 'Денежные средства' обнаружен отрицательный остаток",mtError);
       Template.Field="ДС_ОстК";
       Template.Frame=ДС_IterErr;
    fi;
    if not IterErr=0:
       Message("Расчет завершен^MВ таблице 'Забаланс' обнаружен отрицательный остаток",mtError);
       if ДС_IterErr=0:
          Template.Field="ОстК";
          Template.Frame=IterErr;
       fi;
    fi;
 fi;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Proc ДК_OnExit(FieldName: String; Iter: Integer);
 Очистить;
end;

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

Func ПризнДоп_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var z:n;
 Try
  z=Saldo("{"+Value+"}",1.1.100);
 Except
  if ErrorCode<>23759:
     Raise;
    else
     Message("Недопустимо использовать '+' или '-' в данном условии",mtError);
  fi;
  ^False;
 end;
 ^True;
end;

Proc ПризнДоп_OnExit(FieldName: String; Iter: Integer);
 Очистить;
end;

Func ПризнДоп_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:S;
 tmp=Раб.Бюджет2005.СписокСправ(МаскаСч+"|"+ДС_МаскаСч,0,"");
 if not tmp="": tmp="("+tmp+")|~*.*"; fi;
 Cur=AnaElection(tmp,false,true);
 if Cur="": Template.HideEditor(False); ^Cur; fi;
 if SubStr(cur,length(cur),1)=".": cur=SubStr(cur,1,length(cur)-1)+"!"; fi;
 Cur=Раб.Бюджет2005.Объединить_Диалог(ПризнДоп,Cur,"&=И;|=ИЛИ;&~=И ИСКЛЮЧИТЬ;_=ЗАМЕНИТЬ","_");
 if Раб.Бюджет2005.HideEditor:
    Template.HideEditor(False);
    ПризнДоп=Cur;
 fi;
 Очистить;
 Return Cur;
end;

Func ПризнДоп_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
var Rec: Record;
 if FieldName="ПризнДопКт":
    Rec=Раб.Поиск.ВыборИзКартотеки("Выбор договора, контракта...","РПО_Договор","НомерДок","Номер документа","Рег and not НеДейств");
    if not Rec=nil:
       tmp="ДОГОВОР."+GetCardFieldS("РПО_ДОГОВОР",Rec,"Признак");
    fi;
   else
    Rec=Раб.Документы.ВыборСФильтром("Контрагент","ПолнИмя","");
    if not Rec=nil:
       tmp=CardFileRecSign("Контрагент","Признак","К",Rec);
    fi;
 fi;
 if not tmp="":
    ПризнДоп=Раб.Бюджет2005.Объединить_Диалог(ПризнДоп,tmp,"&=И;|=ИЛИ;&~=И ИСКЛЮЧИТЬ;_=ЗАМЕНИТЬ","_");
    Очистить;
 fi;
 Return False;
end;

Func УслБГ_OnEnter(FieldName: String; Iter: Integer): logical;
var OWA,OWAБИК,nn,n,z:I;
var БИК_,Наим_,LastUpd_:S;
 LastUpd_=Раб.Вспом.Справ_БИК.НомерКорректировки("");
 if not cacheVer=LastUpd_:
    ClearVariable(cacheVer);
    ClearVariable(cacheNEWNUM);
    ClearVariable(cacheNAMEP);
    ClearVariable(cacheREAL);
    ClearVariable(cacheDT_IZM);
    cacheVer=LastUpd_;
 fi;
 ClearVariable(Buf);
 ClearVariable(Buf2);
 OWAБИК=OpenWorkArea("РПО_BNKSEEK","NEWNUM");
 Try
  if Records(OWAБИК)=0: Message("Справочник БИК РФ не загружен",mtError); УслБГ_=""; ^False; fi;
  OWA=OpenWorkArea("РПО_ОБЕСП_ИСПОЛ_ОБЯЗ","Гарант_БИК","Вид='БГ' and not Гарант_БИК=''");
  Try
   nn=Records(OWA);
   ShowProgress(nn,"Выборка данных...");
   for n=1..nn do
    ProgressPos(n);
    БИК_=GetFieldS(OWA,n,"Гарант_БИК");
    z=SearchInArray(Buf,БИК_,True);
    if z=-1:
       z=SearchInArray(cacheNEWNUM,БИК_,True);
       if z=-1:
          SetFilter(OWAБИК,"NEWNUM='"+БИК_+"'");
          if Records(OWAБИК)=0:
             Наим_="в справочнике БИК не найден";
            else
             Наим_=GetFieldS(OWAБИК,1,"NAMEP");
             z=InsertInArraySort(cacheNEWNUM,БИК_);
             InsertInArray(cacheNAMEP,z,Наим_);
             InsertInArray(cacheREAL,z,GetFieldS(OWAБИК,1,"REAL_"));
             InsertInArray(cacheDT_IZM,z,GetFieldD(OWAБИК,1,"DT_IZM"));
          fi;
         else
          Наим_=cacheNAMEP[z];
       fi;
       z=InsertInArraySort(Buf,БИК_);
       InsertInArray(Buf2,1,БИК_+" "+Наим_);
    fi;
   od;
  Finally
   CloseWorkArea(OWA);
   CloseProgress;
  end;
 Finally
  CloseWorkArea(OWAБИК);
 end;
 if FieldName="УслБГ_":
    CopyArray(Buf2,Buf);
    ClearVariable(Buf2);
    nn=LengthOfArray(Buf);
    z=0;
    for n=1..nn do
     if Match(Buf[n],"*"+УслБГ_+"*"):
        z=z+1;
        Buf2[z]=Buf[n];
     fi;
    od;
    if z=0: Message("Вхождение подстроки поиска '"+УслБГ_+"' в списке банков не найдено",mtWarning); УслБГ_=""; ^False; fi;
 fi;
 n=Alternate("Выберите банк",Buf2,-1,1,12);
 if not n=0:
    УслБГ=Buf2[n];
    Очистить;
 fi;
 УслБГ_="";
 Return False;
end;

Proc УслБГ_OnExit(FieldName: String; Iter: Integer);
 Очистить;
end;

Func УслБГ_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Template.HideEditor(False);
 if Input(УслБГ_,"Введите подстроку поиска")=cmOk:
    УслБГ_OnEnter("УслБГ_",1);
 fi;
 Return Cur;
end;

Func Док_onEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
var Rec:Record;
 if Match(FieldName,"ДС_*"):
    if Match(FieldName,"*_Сорт"):
       iter=ДС_idx_Сорт[Iter];
    fi;
    tmp=ДС_Призн[Iter];
   else
    if Match(FieldName,"*_Сорт"):
       iter=idx_Сорт[Iter];
    fi;
    tmp=Призн[Iter];
 fi;
 Rec=SignToRecord(tmp,False);
 if Rec=nil:
    Message("Карточка обеспечения исполнения обязательства не найдена ("+tmp+")");
   else
    if IsBlankOpen("ИНФО.ОБЕСП_ИСПОЛ_ОБЯЗ"):
       Message("Карточка обеспечение исполнения обязательств уже открыта, закройте текущий бланк");
      else
       OpenBlank("ИНФО.ОБЕСП_ИСПОЛ_ОБЯЗ",True,Rec);
    fi;
 fi;
 Return False;
end;

Func Обяз_onEnter(FieldName: String; Iter: Integer): logical;
var crd:S;
var rec: Record;
 if Match(FieldName,"ДС_*"):
    if Match(FieldName,"*_Сорт"):
       iter=ДС_idx_Сорт[Iter];
    fi;
    crd=ДС_crdОбяз[Iter];
    rec=ДС_recОбяз[Iter];
   else
    if Match(FieldName,"*_Сорт"):
       iter=idx_Сорт[Iter];
    fi;
    crd=crdОбяз[Iter];
    rec=recОбяз[Iter];
 fi;
 if crd="РПО_ДОГОВОР":
    if IsBlankOpen("ИНФО.ДОГОВОР"):
       Message("Карточка обязательства уже открыта, закройте текущий бланк");
      else
       OpenBlank("ИНФО.ДОГОВОР",True,rec);
    fi;
   |true:
    Док_onEnter(FieldName,Iter);
 fi;
 Return False;
end;

Func Отч_OnEnter(FieldName: String; Iter: Integer): logical;
var УслСч,УслАн:S;
 if Match(FieldName,"ДС_*_Сорт"):
    iter=ДС_idx_Сорт[Iter];
   |Match(FieldName,"*_Сорт"):
    iter=idx_Сорт[Iter];
 fi;

 if Match(FieldName,"Сум1*") or Match(FieldName,"Дат1*"): УслСч="+"+МаскаСч; УслАн=Призн[Iter];
   |Match(FieldName,"Сум2*") or Match(FieldName,"Дат2*"): УслСч="-"+МаскаСч; УслАн=Призн[Iter];
   |Match(FieldName,"ОстК*"): УслСч=МаскаСч; УслАн=Призн[Iter];
   |Match(FieldName,"ДС_Сум1*") or Match(FieldName,"ДС_Дат1*") or Match(FieldName,"ДС_ПП1*"): УслСч="("+ДС_МаскаСч+")&*.730"; УслАн=ДС_Призн[Iter];
   |Match(FieldName,"ДС_Сум2*") or Match(FieldName,"ДС_Дат2*") or Match(FieldName,"ДС_ПП2*"): УслСч="("+ДС_МаскаСч+")&*.830"; УслАн=ДС_Призн[Iter];
   |Match(FieldName,"ДС_ОстК*"): УслСч=ДС_МаскаСч; УслАн=ДС_Призн[Iter];
 fi;
 Refresh;
 Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',ДН,ДК,УслСч,УслАн);
 Return False;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc cbОст_OnChange(Sender: String);
 if fОст:
    ТолькоОстатки;
    СортироватьОтч(True);
   else
    Очистить;
 fi;
end;

Proc cbСтатусБГ_OnChange(Sender: String);
 if fСтатусБГ:
    ТолькоСтатусБГ;
    СортироватьОтч(True);
   else
    Очистить;
 fi;
end;

Proc cbСрокБГ_OnChange(Sender: String);
 if fСрокБГ:
    ТолькоСрокБГ;
    СортироватьОтч(True);
   else
    Очистить;
 fi;
end;

Proc cbОбяз_OnChange(Sender: String);
 Оформление;
 Очистить;
end;

Proc cmbВид_OnChange(Sender: String);
 Очистить;
end;

Proc rbСорт_OnChange(Sender: String);
 СортироватьОтч(True);
end;

Proc btnРасчет_OnClick(Sender: String);
 if ДК=1.1.100: Message("Введите дату",mtError); Template.Field="ДК"; Exit; fi;
 Отч="Составлен: "+DateToString(ToDay)+" в "+Раб.Бюджет2005.TimeToStr(Time,"")+" Пользователь: "+UserName(AliasName("РПО_БЮДЖ_КЛАСС"));
 Расчет;
end;

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

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

Proc AfterOpen(Destroy: Logical);
 Оформление;
 if Run:
    Run=False;
    btnРасчет_OnClick("Run");
 fi;
end;
--Обработчики событий шаблона -----
--


Конец
