-- Шаблон создан мастером бланков
-- 28.11.2008 15:39:22
--
БланкСШаблоном "Заявка на кассовый расход", Редактор РПО_ЗАЯВКА_КР;

var f15н:L=(ДатаДок>=1.7.2010 and ДатаДок<1.1.2011);
var f13н:L=(ДатаДок>=1.1.2011);

var УпрНастр:L;

var НастрПоУмолч:S="Настройка по умолчанию";
var НастрЗакр:S="Закрыть настройку";

var fСкрытьРаздел:L=[True];
var fСкрытьРаздел_:S=if(fСкрытьРаздел,"Да","Нет");
var fУтвДок:L;
var fУтвДок_:S=if(fУтвДок,"Да","Нет");
var fДобГородВБанк:L=[True];
var fДобГородВБанк_:S=if(fДобГородВБанк,"Да","Нет");
var ДесятРазд:S=["."];
var fКлиентКорИмя:L;
var fКлиентКорИмя_:S=if(fКлиентКорИмя,"Да","Нет");
var fОдинЛист:L;
var fОдинЛист_:S=if(fОдинЛист,"Да","Нет");
var РазмерШрифта:I=[8];
var ПДИ:I;
var fСокращен:L=[True];
var fСокращен_:S=if(fСокращен,"Да","Нет");
var fР2_Договор:L=[True];
var fР2_Договор_:S=if(fР2_Договор,"Да","Нет");
var fКакБО:L=[True];
var fКакБО_:S=if(fКакБО,"Да","Нет");
var fКБКЛСНазнПл:L=[True];
var fКБКЛСНазнПл_:S=if(fКБКЛСНазнПл,"Да","Нет");
var fСумКБКНазнПл:L;
var fСумКБКНазнПл_:S=if(fСумКБКНазнПл,"Да","Нет");
var fР2_НазнПл:L;
var fР2_НазнПл_:S=if(fР2_НазнПл,"Да","Нет");
var fРегБО:L;
var fРегБО_:S=if(fРегБО,"Да","Нет");
var fКонтрольЛБО:I;
var fКонтрольЛБО_:S=if(fКонтрольЛБО=-1:"Отключен"|fКонтрольЛБО=1:"Жесткий"|True:"Мягкий");
var fБезКБК:I;
var fБезКБК_:S=if(fБезКБК=0:"Выгружать"|fБезКБК=2:"Заменять на 0");
var fАС:L=[True];
var fАС_:S=if(fАС,"Да","Нет");
var КБК_Р:S = if(fБезКБК=2 and Расшифр[$].Ист = "6":"00000000000000000"+Substr(Расшифр[$].КБК,18,255), Расшифр[$].КБК);
var СчКр:S=["???.01.05.02.*.?.201.11.610|???.01.05.02.*.?.201.?7.610|*.?.304.04.*|*.?.304.05.*"];
var extНазнПл:S;
var extПредм:S;
var extКБК_В_Текст:S;
var extКлюч:S;

fQCMF:L;
var FlagEdit:L;

var НоваяЗапись:L=(CurrentState=crdusInserted);

КолКопий:I=[2];

var ТекстСокращ:s=if(ф0531851,"(сокращенная)     ","");

var КФД:S=if(ф0531851,"0531851","0531801");

var Клиент:S=if(fКлиентКорИмя,Рекв.КорИмя,Рекв.ПолнИмя+Рекв.РПО_ПолнИмя2);
var КБП:S=if(Банк.РПО_КодБюдж="1",Рекв.РПО_КБП,"");
var НаимБюдж:S=if(Банк.РПО_КодБюдж="6","",Банк.РПО_НаимБюдж);
var ФинОрган:S=if(Банк.РПО_КодБюдж="6","",Банк.РПО_ФО_Наим1+Банк.РПО_ФО_Наим2);
var Банк_РПО_ФО_ОКПО_:S=if(ver>=12,"по ОКПО","");
var Банк_РПО_ФО_ОКПО:S=if(ver>=12,Банк.РПО_ФО_ОКПО,"");

var РеквИНН:S=Рекв.ИНН;
var РеквКПП:S=Рекв.КПП;

var БО_ГЭК:i;
var БО_ГЭК_:S="Листы: "+Str(БО_ГЭК);
var isБО:S=if(БО=nil,"","@");

var Док_ВидПл_:S=if(Док_ВидПл="0":""|Док_ВидПл="1":"почтой"|Док_ВидПл="2":"телеграфом"|Док_ВидПл="3":"электронно"|Док_ВидПл="4":"срочно"|true:"???");

var fОКВ:I;

var nГЭК:I;
var nГЭК_:S="Листы: "+Str(nГЭК);

var Загл1_3:S=if(ver<12,"Сумма","Сумма в рублевом эквиваленте");
var Гр1_6:I=if(ver<12,6,5);
var Гр1_7:I=if(ver<12,7,6);
var Гр1_8:I=if(ver<12,8,7);

var nОсн_Док:I=Осн_Док; --счетик податблицы для внешнего вызова

var ОчиститьР2:S=if(Учитывать,"","Очистить разд. 2");
var РеестрОснДок:S=if(ver>=6,"","Реестр документов");
var РедГЭК:S=if(Учитывать,"Просмотр ГЭК","Сканировать / Редактировать");
var СканГЭК:S=if(Учитывать or not nГЭК=0,"","Сканировать");

var ЗаглСумОпл:S="Сумма оплат на "+DateToString(ДатаДок);

var Осн_ДокСум_:N=if(Осн_Док=0 or ver>=6,Осн_ДокСум,SumOfArray(Осн_Док[].Сум));
var Осн_ДокОпл_:N=if(Осн_Док=0 or ver>=6,Осн_ДокОпл,SumOfArray(Осн_Док[].Опл));
var Осн_ДокОплТек_:N=if(Осн_Док=0 and ver<6,Осн_ДокОплТек,SumOfArray(Осн_Док[].ОплТек));
var Сум_[]:N=Осн_Док[$].Сум;
var Опл_[]:N=Осн_Док[$].Опл;
var Осн_Док_ГЭК:I;
var Осн_Док_ГЭК_:S="Листы: "+Str(Осн_Док_ГЭК);
var Скрыть_:S=if(Осн_ДокСкрывать,"Нет","Да");
var Реестр_ГЭК[]:I;
var Реестр_ГЭК_[]:S="Листы: "+Str(Реестр_ГЭК[$]);
var Скрыть2_[]:S=if(Осн_Док[$].Скрывать,"Нет","Да");

var Р2:L=not (Осн_ДокВид="" and Осн_ДокНом="" and Осн_ДокДат=1.1.100 and Осн_ДокПредм="") or (ver<6 and Осн_Док>0) or (ver>=6 and not (Осн_Док[1].Вид="" and Осн_Док[1].Ном="" and Осн_Док[1].Дат=1.1.100 and Осн_Док[1].Предм=""));

var isДоговор:s=if(Договор=nil and ДО=nil,"","@");
var ОтчДоговорПров:S=if(Р2,"Отчет по проводкам","");
var ОтчДоговорСч:S=if(Р2,"Отчет по счетам","");
var isДО[]:s=if(Осн_Док[$].ДО=nil,"","@");
var ОтчДОПров:S=if(Р2,"Отчет по проводкам","");
var ОтчДОСч:S=if(Р2,"Отчет по счетам","");

var РеквП_:S=if(БанкП=nil,РеквП.КорИмя,БанкП.БанкИмя);
var БанкП_:S=БанкП.Банк+if(fДобГородВБанк," "+БанкП.Город,"");

var ОчиститьР4:S=if(Учитывать,"","Очистить разд. 4");

var Р4:L=not Нал_Статус="";

var Загл4_3:s=if(ver>=12,"Код по ОКТМО","Код ОКАТО");

var Нал_ДатДок_:S=if(Р4 and Нал_ДатДок=1.1.100,"0",DateToString(Нал_ДатДок));

var nРасшифр:I=Расшифр;  --счетик податблицы для внешнего вызова

var A:S=if(Учитывать,"","+");
var AA:S=if(Учитывать,"","++");
var D:S=if(Учитывать,"","-");

var ОчиститьР5:S=if(Учитывать,"","Очистить разд. 5");
var Загл5_5:S=if(ver<12,"Код цели субсидии / субвенции плательщика","Код цели (аналитический код)");

var ОбновОпл:S=if(Учитывать,"","Обновить");

var пп[]:i=$;

var КБК_:S="";
var Призн_[]:S=Trim(Расшифр[$].Призн_ОснДок+" "+Расшифр[$].Призн);
var ДокОпл_[]:N=Расшифр[$].ДокОпл;

var ИстОбщ:S;
var Ист_:S=if(ИстОбщ="1":"средства бюджета"
             |ИстОбщ="2":"средства от приносящей доход деятельности"
             |ИстОбщ="3":"средства дополнительного бюджетного финансирования"
             |ИстОбщ="4":"средства для финансирования мероприятий по оперативно-розыскной деятельности"
             |ИстОбщ="5":"средства, поступающие во временное распоряжение "+if(f13н:"казенных учреждений"|f15н:"бюджетных учреждений"|true:"получателя средств федерального бюджета")
             |ИстОбщ="6":"средства юридических лиц"
             |True:"");
var Р5_ВсегоСум:N=SumOfArray(Расшифр[].Сум,Расшифр);
var Р5_ВсегоСумРуб:N=SumOfArray(Расшифр[].СумРуб,Расшифр);

var ИсклПризн:S="БО.*|ЛС.*|К.*|ФАИП.*|СОП.*";

var Buf[]:S;
var Buf2[]:S;
var Buf3[]:S;
var BufN[]:N;
var BufN2[]:N;
var BufI[]:I;

hГлава:S;
hГРБС:S;
hКБК:S;
hЭКР:S;
hЭКД:S;
hЭКИФД:S;
hКОСГУ:S;
hСчДеб:S;
hСчКре:S;
hПризн:S;

var SelfCrd:S="РПО_ЗАЯВКА_КР";
var SelfBln:S="ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР";
var SelfCfg:S="ТББ.ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР.000.cfg";
var SelfPrn:S=if(Ф0531851 and ver>=6,"ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР_ПЕЧАТЬ0531851","ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР_ПЕЧАТЬ");


cbУчитывать  :Object;
cbВБанк      :Object;
cbПроводить  :Object;
btnДатаОпер  :Object;
edДатаОпер   :Object;
edДокОперНом :Object;
btnДокОперДат:Object;
edДокОперДат :Object;
cbКакБО      :Object;
cbАннул      :Object;
btnАннулДата :Object;
edАннулДата  :Object;
btnУдалить   :Object;
bvlДок       :Object;
lbНомерДок   :Object;
btnДок       :Object;
cbЗакрытьДок :Object;
btnНастр     :Object;
btnПечать    :Object;
edКолКопий   :Object;
btnПросмотр  :Object;
edБанк_Кмнт  :Object;
cbФ0531851   :Object;

S0 : Section;
S1 : Section;
S2 : Section;
S3 : Section;
S4 : Section;
S5 : Section;
S6 : Section;
S7 : Section;
S8 : Section;
S9 : Section;
S10: Section;
S11: Section;
S12: Section;
S13: Section;
S14: Section;
S15: Section;

var nS:I=15;

var BufField[]:S;
var BufColorBg[]:I;
var BufColorFo[]:I;
var FlagInit:L;

ДолжнИспФК:S;
ФИОИспФК:S;
ТелИспФК:S;

var НастрGUID:S;

var ГЭКCrd:S;
var ГЭКRec:Record;

var Call:S;
var КонтрольОстАв:N;

var infДок:S;
var infДоговор:Record;
var infБО:Record;
var infВид:S;
var infСч:Record;
var infНСч:S;
var infДСч:D;

var SkipEvent:L;

var fGUID_FK:L;
--
--Процедуры и функции -------------
Proc Настр(aСохр:L);
var Flag:L;
var tmp:S;
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать(SelfBln,0,0,"",НастрGUID):
    Раб.Настр.Добавить("fСкрытьРаздел","L");
    Раб.Настр.Добавить("fУтвДок","L");
    Раб.Настр.Добавить("fДобГородВБанк","L");
    Раб.Настр.Добавить("ДесятРазд","S");
    Раб.Настр.Добавить("fКлиентКорИмя","L");
    Раб.Настр.Добавить("fОдинЛист","L");
    Раб.Настр.Добавить("РазмерШрифта","I");
    Раб.Настр.Добавить("ПДИ","I");
    Раб.Настр.Добавить("fСокращен","L");
    Раб.Настр.Добавить("fР2_Договор","L");
    Раб.Настр.Добавить("fКакБО","L");
    Раб.Настр.Добавить("fКБКЛСНазнПл","L");
    Раб.Настр.Добавить("fСумКБКНазнПл","L");
    Раб.Настр.Добавить("fР2_НазнПл","L");
    Раб.Настр.Добавить("fРегБО","L");
    Раб.Настр.Добавить("fКонтрольЛБО","I");
    Раб.Настр.Добавить("fБезКБК","I");
    Раб.Настр.Добавить("fАС","L");
    Раб.Настр.Добавить("СчКр","S");
    Раб.Настр.Добавить("extНазнПл","S");
    Раб.Настр.Добавить("extПредм","S");
    Раб.Настр.Добавить("extКБК_В_Текст","S");
    Раб.Настр.Добавить("extКлюч","S");
    if Рекв.РПО_ТипУчр="БУ" or Рекв.РПО_ТипУчр="АУ":
       Раб.Настр.Добавить("hГРБС","S");
    fi;
    if aСохр: 
       Раб.Настр.Сохранить; 
      else 
       НастрGUID=Раб.Настр.Загрузить("","");
       if НастрGUID="":
          Flag=ExecuteFuncL("НастрПоУмолч_OnEnter","",1);
       fi;
       if ДесятРазд="": ДесятРазд="."; fi;
       if РазмерШрифта<=0: РазмерШрифта=8; fi;
       if ПДИ<0: ПДИ=0; fi;
       fGUID_FK=False;
       if Раб.Настр.Начать("ДОКУМЕНТЫ.ЛБО.СВЕД_БО",0,0,"",GetGUID):
          tmp=Раб.Настр.ВзятьЗначение("fGUID_FK");
          fGUID_FK=(tmp="True");
       fi;
    fi;
 fi;
end;

Proc ОткрНастр (Flag:L);
 cbУчитывать.Visible=not Flag;
 cbВБанк.Visible=not Flag;
 cbПроводить.Visible=not Flag;
 btnДатаОпер.Visible=not Flag;
 edДатаОпер.Visible=not Flag;
 edДокОперНом.Visible=not Flag;
 btnДокОперДат.Visible=not Flag;
 edДокОперДат.Visible=not Flag;
 cbКакБО.Visible=not Flag;
 cbАннул.Visible=not Flag;
 btnАннулДата.Visible=not Flag;
 edАннулДата.Visible=not Flag;
 btnУдалить.Visible=not Flag;
 bvlДок.Visible=not Flag;
 lbНомерДок.Visible=not Flag;
 btnДок.Visible=not Flag;
 cbЗакрытьДок.Visible=not Flag;
 btnНастр.Visible=not Flag;
 btnПечать.Visible=not Flag;
 edКолКопий.Visible=not Flag;
 btnПросмотр.Visible=not Flag;
 edБанк_Кмнт.Visible=not Flag;
 cbФ0531851.Visible=not Flag;
 S0.Visible=not Flag;
 УпрНастр=Flag;
 if Flag=True: Template.Field="НастрЗакр"; Template.Frame=1; fi;
end;

Proc Инициализация;
var Obj:Object;
var s,r,rr,c,cc,n,l,bgColor:i;
var Field:S;
 cbЗакрытьДок.Visible=Раб.Бюджет2005.Сетевая;
 ClearVariable(BufField);
 ClearVariable(BufColorBg);
 ClearVariable(BufColorFo);
 for s=1..nS do
  if not s=7 or (s=7 and not Осн_Док=0):
     if FindObject("S"+Str(s),Obj):
        rr=asInteger(Obj.RowsCount);
        cc=asInteger(Obj.ColsCount);
        for r=1 ..rr  do
         for c=1 ..cc  do
          Try
           BgColor=asInteger(Obj.Cell(r,c,CellBgColor,""));
           if BgColor=coAqua or BgColor=coTeal:
              Field=asString(Obj.Cell(r,c,CellContents,"",False));
              if SearchInArray(BufField,Field,True)=-1:
                 n=InsertInArraySort(BufField,Field);
                 InsertInArray(BufColorBg,n,BgColor);
              fi;
           fi;
          Except
          end;
         od;
        od;
     fi;
  fi;
 od;
 if Осн_Док=0:
    n=InsertInArraySort(BufField,"Вид");   InsertInArray(BufColorBg,n,coAqua);
    n=InsertInArraySort(BufField,"Ном");   InsertInArray(BufColorBg,n,coAqua);
    n=InsertInArraySort(BufField,"Дат");   InsertInArray(BufColorBg,n,coAqua);
    n=InsertInArraySort(BufField,"Предм"); InsertInArray(BufColorBg,n,coAqua);
 fi;
 l=LengthOfArray(BufField);
 for n=1..l do
  if BufColorBg[n]=coTeal: BufColorFo[n]=coWhite;
    |True: BufColorFo[n]=coBlack;
  fi;
 od;
end;

Proc Оформление;
var s,c,r,cc,rr,n:i;
var Obj: Object;
var Field:S;
var Flag:L;
 cbУчитывать.Enabled=not Проводить and not Аннул;
 cbВБанк.Enabled=not Проводить and not Аннул;
 cbПроводить.Enabled=not Аннул;
 btnДатаОпер.Enabled=not Проводить and not Аннул;
 edДатаОпер.Enabled=not Проводить and not Аннул;
 edДокОперНом.Enabled=not Проводить and not Аннул;
 btnДокОперДат.Enabled=not Проводить and not Аннул;
 edДокОперДат.Enabled=not Проводить and not Аннул;
 cbАннул.Enabled=not Проводить;
 btnАннулДата.Enabled=not Проводить and not Аннул;
 edАннулДата.Enabled=not Проводить and not Аннул;
 btnУдалить.Enabled=not Учитывать and not Проводить and not Аннул;
 btnДок.Enabled=not Аннул;
 cbФ0531851.Visible=ver>=6;
 cbФ0531851.Enabled=not Учитывать;
 Flag=Int(Банк.РПО_КодБюдж)>1;
 for s=1..nS do
  if FindObject("S"+Str(s),Obj):
     rr=asInteger(Obj.RowsCount);
     cc=asInteger(Obj.ColsCount);
     for r=1 .. rr do
      for c=1 .. cc do
       Try
        Field=asString(Obj.Cell(r,c,CellContents,"",False));
        n=SearchInArray(BufField,Field,True);
        if not n=-1:
           if Учитывать:
              Obj.Cell(r,c,CellFontColor,coBlack);
              Obj.Cell(r,c,CellBgColor,coTransparent);
             else
              Obj.Cell(r,c,CellFontColor,BufColorFo[n]);
              Obj.Cell(r,c,CellBgColor,BufColorBg[n]);
           fi;
           Obj.Cell(r,c,CellReadOnly,Учитывать);
        fi;
       Except
       end;
      od;
     od;
     if s>=11 and s<=13:
        Obj.Column(8 ,ColVisible,not Ф0531851);
        Obj.Column(9 ,ColVisible,not Ф0531851);
        Obj.Column(10 ,ColVisible,Flag);
        Obj.Column(11 ,ColVisible,Flag and not Ф0531851);
        Obj.Column(15,ColVisible,not Ф0531851);
        Obj.Column(16,ColVisible,not Ф0531851);
        Obj.Column(17,ColVisible,not Ф0531851);
     fi;
  fi;
 od;
 S3.Row(3 ,RowVisible,Ф0531851); --ИНН
 S3.Row(4 ,RowVisible,Ф0531851); --КПП
 S3.Row(9 ,RowVisible,not Ф0531851);  --Финансовый орган
 S3.Row(15,RowVisible,ver<6); --Графическая электронная копия бюджетного обязательства
 S3.Row(16,RowVisible,not Ф0531851); --Приоритет исполнения
 S3.Row(17,RowVisible,not Ф0531851); --Периодичность: ежедневная
 S3.Row(19,RowVisible,not Ф0531851); --денежные единицы в иностранной валюте
 --
-- S4.Column(6,ColVisible,ver<12); --Сумма НДС в валюте заявки
-- S4.Column(9,ColWidth,1160+if(ver<12,0,260)); --Назначение платежа (примечание)
 --
 S6.Row(4,RowVisible,ver>=6);
 S6.Row(6,RowVisible,ver>=6);
 S6.Column(1,ColVisible,ver<6);
 S6.Column(2,ColVisible,ver<6);
 S6.Column(3,ColVisible,ver>=6);
 S6.Column(4,ColVisible,ver>=6);
 --
 S12.Cell(1,18,CellBorder,if(Ф0531851,"2,1,1,1","1,1,1,1"));
 S13.Cell(1,18,CellBorder,if(Ф0531851,"2,0,0,0","0,0,0,0"));
 --
 S14.Column(3,ColVisible,not Ф0531851);
end;

Proc УдалитьПустыеСтроки;
var Iter:I;
 Iter=1;
 While Iter<=Расшифр do
  if Расшифр[Iter].КБК="" and
     Расшифр[Iter].Призн="" and
     Расшифр[Iter].КБКП="" and
     Расшифр[Iter].Сум=0 and
     Расшифр[Iter].СумРуб=0 and
     Расшифр[Iter].НазнПл="" and
     Расшифр[Iter].Примеч="" and
     Расшифр[Iter].СчДеб="" and
     Расшифр[Iter].СчКре="": DeleteFrame(Расшифр,Iter);
    else
     Iter=Iter+1;
  fi;
 od;
 Iter=1;
 While Iter<=Осн_Док do
  if Осн_Док[Iter].Вид="" and
     Осн_Док[Iter].Ном="" and
     Осн_Док[Iter].Дат=1.1.100 and
     Осн_Док[Iter].Предм="": DeleteFrame(Осн_Док,Iter);
    else
     Iter=Iter+1;
  fi;
 od;
end;

Proc НеПустаяТаблица;
 if Расшифр<1: 
    InsertFrame(Расшифр,1);
    if ИстОбщ="5":
       Расшифр[1].Ист=ИстОбщ;
       ExecuteProc("ОбновитьСч",1);
    fi;
 fi;
 if ver>=6 and Осн_Док<1:
    InsertFrame(Осн_Док,1);
 fi;
end;

Proc ОчиститьОснДок(Iter:I);
 if Iter<=0:
    ClearVariable(Осн_ДокВид);
    ClearVariable(Осн_ДокНом);
    ClearVariable(Осн_ДокДат);
    ClearVariable(Осн_ДокСум);
    ClearVariable(Осн_ДокОпл);
    ClearVariable(Осн_ДокОплТек);
    ClearVariable(Осн_ДокПредм);
    ClearVariable(Осн_ДокCrd);
    ClearVariable(ДО);
    ClearVariable(ДО_GUID);
    ClearVariable(Договор);
    ClearVariable(Осн_Док_ГЭК);
 fi;
 if Iter<0:
    ClearVariable(Осн_Док);
    ClearVariable(Реестр_ГЭК);
    InsertFrame(Осн_Док,1);
 fi;
 if Iter>0:
    Осн_Док[Iter].Вид="";
    Осн_Док[Iter].Ном="";
    Осн_Док[Iter].Дат=1.1.100;
    Осн_Док[Iter].Сум=0;
    Осн_Док[Iter].Опл=0;
    Осн_Док[Iter].ОплТек=0;
    Осн_Док[Iter].Предм="";
    Осн_Док[Iter].Crd="";
    Осн_Док[Iter].ДО=nil;
    Осн_Док[Iter].ДО_GUID="";
    Реестр_ГЭК[Iter]=0;
 fi;
end;

Proc ОчиститьБО;
 БО=nil;
 БО_ГЭК=0;
 Призн_БО="";
 НомерБО="";
 GUID_FKБО="";
end;

Proc ОбработатьНомер (aНомерДок:S);
var tmp:i;
 tmp=Int(aНомерДок);
 if tmp=0:
    if ДатаДок=1.1.100:
       tmp=РАБ.ОБЛ.СледСУчетомГодаФ(SelfCrd,"Номер","ДатаДок","not UKey="+RecordToString(Current));
      else
       tmp=РАБ.ОБЛ.СледСУчетомДатыФ(SelfCrd,"Номер","ДатаДок",ДатаДок,"not UKey="+RecordToString(Current));
    fi;
 fi;
 if not Номер=tmp:
    Номер=tmp;
    if Раб.Бюджет2005.Сетевая: EditorApply; fi;
 fi;
end;

Proc ОбработатьДату (prevДата:D; newДата:D);
var prevYYYY,newYYYY:I;
 prevYYYY=Year(prevДата);
 newYYYY=Year(newДата);
 if prevYYYY=newYYYY: Exit; fi;
 if not prevYYYY=100:
    if EnqOkCancel("Изменился отчетный год ("+Str(prevYYYY)+") документа, получить номер документа соответствуещего года ("+Str(newYYYY)+") ?",mtWarning)=cmCancel: Exit; fi;
 fi;
 НомерДок=Str(Раб.Обл.СледСУчетомДатыФ(SelfCrd,"Номер","ДатаДок",ДатаДок,"not UKey="+RecordToString(Current)));
 ОбработатьНомер(НомерДок);
 Template.Field="НомерДок";
end;

Proc ПоУмолчанию;
 Док_ОКВ="643";
 Док_ОчрПл="5";
 Док_ВидПл="0";
 ф0531851=fСокращен and ver>=6;
 КакБО=fКакБО;
end;

func ДоговорChk(aRec:Record):Record;
var Rec,Should:Record;
  Rec=aRec;
  Should=Раб.Договор.ДогНаДату(Rec,ДатаДок);
  if Should<>Rec then
     if Enquiry("Предупреждение!","Выбранная версия договора не действует на дату заявки","Исправить;Оставить",mtWarning)=1 then
       Rec=Should;
     fi;
  fi;
^Rec;
end;

Proc ЗаполнитьКлиента (vRec: Record);
var new:l;
 if vRec=nil: new=true; vRec=Раб.Бюджет2005.НашРекв; fi;
 if not vRec=nil:
    Рекв=vRec;
    if Рекв.РПО_ТипУчр="КУ" or Рекв.РПО_ТипУчр="":
       Глава=Рекв.РПО_ППП;
       ГРБС=Раб.Бюджет.НаимКБК("ППП2006",Глава);
      else
       Глава="";
       ГРБС=Рекв.Учредители;
    fi;
    if not new or ФИОРук="":
       ДолжнРук=Рекв.ДолжнРук;
       ФИОРук=Рекв.ФИОРук;
    fi;
    if not new or (ДолжнБух="" or ФИОБух=""):
       ДолжнБух=Рекв.ДолжнБух;
       ФИОБух=Рекв.ФИОБух;
    fi;
    Банк=Раб.Бюджет2005.БанкСчет(Рекв,False);
    Призн_ЛС=РАБ.Бюджет2005.БанкВПризн(Банк);
 fi;
 if Глава="" and (Рекв.РПО_ТипУчр="КУ" or Рекв.РПО_ТипУчр=""):
    Глава=hГлава;
    ГРБС=hГРБС;
 fi;
 if ГРБС="" and (Рекв.РПО_ТипУчр="АУ" or Рекв.РПО_ТипУчр="БУ"):
    ГРБС=hГРБС;
 fi;
end;

Func ИстВБух (aИст:S):S;
 if  aИст="3": ^"1"; 
    |aИст="4": ^"2";
    |aИст="5": ^"3";
    |aИст="6": ^"";
 fi;
 ^aИст;
end;

Func БухИст(Iter: I):S;
 var aИст:S;
 if Iter = 0:
    aИст = ИстВБух(ИстОбщ);
 else
    aИст = Расшифр[Iter].Ист;
    if aИст = "":
       aИст = ИстОбщ;
    fi;
    aИст = ИстВБух(aИст);
 fi;
 if aИст = "":
    if Iter = 0:
      Iter = 1;
    fi;

    if Расшифр[Iter].СчДеб <> "":
       return Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,"","ВД",False);
      |Расшифр[Iter].СчКре <> "":
       return Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчКре,"","ВД",False);
    fi;
 fi;
 ^aИст;
end;


Func ЕстьДО:L;
var n:I;
var isДО:L;
 isДО=not ДО=nil and ver<6;
 if not isДО:
    for n=1..Осн_Док do
     if not Осн_Док[n].ДО=nil: isДО=True; Break; fi;
    od;
 fi;
 ^isДО;
end;

Func ВзятьТипКБК(aКБК:S):S;
 if Match(aКБК,"???.????.*"): ^"10";
   |Match(aКБК,"???.?.*"):    ^"20";
   |Match(aКБК,"???.00.*"):   ^"31";
   |Match(aКБК,"???.01.*"):   ^"31";
   |Match(aКБК,"???.02.*"):   ^"32";
 fi;
 ^"";
end;


Proc ПолучитьДопАн(Iter:I);
var Справ,ПризнБК,ПризнКОСГУ,tmp,ВД_,БК_,КОСГУ_,СчД_,СчК_,СчДО_:S;
 tmp=""; СчД_=""; СчК_=""; СчДО_="";
 if КакБО and not Расшифр[Iter].Ист="5" and not Расшифр[Iter].ТипКБК="20":
    ВД_=БухИст(Iter);
    БК_=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК");
    КОСГУ_=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"КОСГУ");
    if ВД_="1": СчД_=БК_+"."+ВД_+".501.13."+КОСГУ_; СчК_=БК_+"."+ВД_+".502.11."+КОСГУ_; СчДО_=БК_+"."+ВД_+".502.12."+КОСГУ_;
      |not ВД_="3": СчД_=БК_+"."+ВД_+".506.10."+КОСГУ_; СчК_=БК_+"."+ВД_+".502.11."+КОСГУ_; СчДО_=БК_+"."+ВД_+".502.12."+КОСГУ_;
    fi;
    if not Name_S(СчД_)=" " and not Name_S(СчК_)=" " and not Name_S(СчДО_)=" ": tmp="|"+СчД_+"|"+СчК_+"|"+СчДО_; fi;
 fi;
 if not Расшифр[Iter].КБК="" and (not Name_S(Расшифр[Iter].СчДеб)=" " and not Name_S(Расшифр[Iter].СчКре)=" "):
    if Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Расшифр[Iter].Призн_ОснДок," ","ФКР.*|КД.*|КИФД.*","|")="":
       Справ=Раб.Бюджет2005.СписокСправ(Расшифр[Iter].СчДеб+"|"+Расшифр[Iter].СчКре+tmp,0,"");
       ПризнБК="";
       if Расшифр[Iter].ТипКБК="10":
          if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|","ФКР.*","")="":
             ПризнБК="ФКР.";
          fi;
         |Расшифр[Iter].ТипКБК="20":
          if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|","КД.*","")="":
             ПризнБК="КД.";
          fi;
         |Расшифр[Iter].ТипКБК="31" or Расшифр[Iter].ТипКБК="32":
          if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|","КИФД.*","")="":
             ПризнБК="КИФД.";
          fi;
       fi;
       if not ПризнБК="" and not Match(Расшифр[Iter].КБК,"00000000000000000???"):  -- нулевой КБК - почти наверняка подгонка под казначейство
          ПризнБК=ПризнБК+Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК");
          Расшифр[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расшифр[Iter].Призн," ",ПризнБК,"ФКР.*|КД.*|КИФД.*","|");
       fi;
    fi;
    if Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Расшифр[Iter].Призн_ОснДок," ","КОСГУ.*","|")="":
       if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|","КОСГУ.*","")="":
          ПризнКОСГУ="КОСГУ."+Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"КОСГУ");
          tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Расшифр[Iter].Призн," ","КОСГУ.*","");
          if not Match(tmp,ПризнКОСГУ+"!"):
             Расшифр[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расшифр[Iter].Призн," ",ПризнКОСГУ,"КОСГУ.*","|");
          fi;
       fi;
    fi;
 fi;
end;

Proc ОбновитьПризн (Iter:I);
var tmp,ВД_,БК_,КОСГУ_,СчД_,СчК_,СчДО_:S;
var n1,n2:i;
 if Iter=-1: n1=1; n2=Расшифр; else n1=Iter; n2=Iter; fi;
 for Iter=n1..n2 do
  tmp=""; СчД_=""; СчК_=""; СчДО_="";
  if КакБО and not Расшифр[Iter].Ист="5" and not Расшифр[Iter].ТипКБК="20":
     ВД_=БухИст(Iter);
     БК_=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК");
     КОСГУ_=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"КОСГУ");
     if ВД_="1": СчД_=БК_+"."+ВД_+".501.13."+КОСГУ_; СчК_=БК_+"."+ВД_+".502.11."+КОСГУ_; СчДО_=БК_+"."+ВД_+".502.12."+КОСГУ_;
       |not ВД_="3": СчД_=БК_+"."+ВД_+".506.10."+КОСГУ_; СчК_=БК_+"."+ВД_+".502.11."+КОСГУ_; СчДО_=БК_+"."+ВД_+".502.12."+КОСГУ_;
     fi;
     if not Name_S(СчД_)=" " and not Name_S(СчК_)=" " and not Name_S(СчДО_)=" ": tmp="|"+СчД_+"|"+СчК_+"|"+СчДО_; fi;
  fi;
  if (not Name_S(Расшифр[Iter].СчДеб)=" " and not Name_S(Расшифр[Iter].СчКре)=" "):
     tmp=Раб.Бюджет2005.СписокСправ(Расшифр[Iter].СчДеб+"|"+Расшифр[Iter].СчКре+tmp,0,ИсклПризн);
     Расшифр[Iter].Призн=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Расшифр[Iter].Призн," ",tmp,"|");
     ПолучитьДопАн(Iter);
  fi;
 od;
end;

Proc ОбновитьСч (Iter:I);
var n1,n2,Iter_:i;
var ВД_,БК,КОСГУ,Гл,Синт:S;
var AccWrong:L;
 if ИстОбщ="" or Док_ОКВ="": Exit; fi;
 Iter_=Iter;
 if Iter=-1: n1=1; n2=Расшифр; else n1=Iter; n2=Iter; fi;
 Раб.КСА.Начать;
 for Iter=n1..n2 do
  Расшифр[Iter].Ист=ИстОбщ;
  ВД_ = ИстВБух(ИстОбщ); -- Попытка угадать бухгалтерский ВД по типу средств
                         -- каждый раз заново, т.к. позже можем переопределять ВД по дебету
  БК=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК");
  КОСГУ=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"КОСГУ");
  -- Пытаемся взять главу по КБК, если не получается - берем из шапки
  ГЛ=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"ППП");
  if ГЛ="":
     ГЛ=Глава;
  fi;

  --Формируем счет дебета
  if ВД_ <> "3" and ВД_ <> "" and БК <> "":
  -- любая деятельность кроме временного распоряжения создается как дебеторка/кредиторка

     -- Определяем а надо ли вообще пересоздавать счет
     AccWrong=БК<>Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,"","БК",Ложь); --если не тот КБК
     if not AccWrong then
        Синт=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,"","СИНТ",Ложь);
        if Синт="206" or  Синт="302":  --если дебеторка/кредиторка и смысл поменялся
           if Синт<>if(Док_Аванс,"206","302") then AccWrong=True; fi;
           if Раб.Бюджет2005.Соотв_КОСГУ_Ан(Синт,КОСГУ)<>Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,"","АН",Ложь):
              AccWrong=True;
           fi;

        fi;
     fi;
     if AccWrong:
        if Р2:
           if Match(КОСГУ,"21?") or Match(КОСГУ,"26?"):
              Расшифр[Iter].СчДеб="";
             else
              if Раб.Бюджет2005.Соотв_КОСГУ_Ан(if(Док_Аванс,"206","302"),КОСГУ)="":
                 Расшифр[Iter].СчДеб="";
                else
                 Расшифр[Iter].СчДеб=БК+"."+ВД_+"."+if(Док_Аванс,"206","302")+"."+Раб.Бюджет2005.Соотв_КОСГУ_Ан(if(Док_Аванс,"206","302"),КОСГУ)+"."+if(Док_Аванс,"560","830");
              fi;
           fi;
          else
           Расшифр[Iter].СчДеб="";
        fi;
     fi;
    |ВД_ = "3":
    --Временное распоряжение имеет свой счет, а других иметь не может
     if ГЛ <> "":
        Расшифр[Iter].СчДеб = ГЛ + ".0000.0000000.000.3.304.01.830";
     fi;
  fi;
  --Формируем счет кредита (банк)
  if ВД_ = "" and Расшифр[Iter].СчДеб<>"":
     -- Если для дебета мы были вынуждены довольствоваться угадыванием,
     -- то для кредита можем взять по дебету (если он заполнен)
     ВД_ = Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,"","ВД",False);
  fi;
  if ГЛ<>"" and ВД_<>"":
     if Док_ОКВ="643":
        if ВД_="1":
           if БК<>"":
             Расшифр[Iter].СчКре=БК+".1.304.05."+КОСГУ;
           fi;
          else
           Расшифр[Iter].СчКре=ГЛ+".01.05.02.01.01.0000."+ВД_+".201.11.610";
        fi;
       else
        Расшифр[Iter].СчКре=ГЛ+".01.05.02.01.01.0000."+ВД_+".201.27.610";
     fi;
  fi;
  if КакБО and not Расшифр[Iter].Ист="5" and not Расшифр[Iter].ТипКБК="20" and not БК="" and ВД_<>"":
     if ВД_="1": Раб.КСА.Добавить(БК+"."+ВД_+".501.13."+КОСГУ); Раб.КСА.Добавить(БК+"."+ВД_+".502.11."+КОСГУ); Раб.КСА.Добавить(БК+"."+ВД_+".502.12."+КОСГУ);
       |not ВД_="3": Раб.КСА.Добавить(БК+"."+ВД_+".506.10."+КОСГУ); Раб.КСА.Добавить(БК+"."+ВД_+".502.11."+КОСГУ); Раб.КСА.Добавить(БК+"."+ВД_+".502.12."+КОСГУ);
     fi;
  fi;
  Раб.КСА.Добавить(Расшифр[Iter].СчДеб);
  Раб.КСА.Добавить(Расшифр[Iter].СчКре);
 od;
 if Раб.КСА.Закончить(True): 
    RefreshAna;
    Message("Добавление счетов завершено");
 fi;
 ОбновитьПризн(Iter_);
end;

Func ВыборЭК(aТип:S; hЭК:S):S;
var z:i;
var tmp,tmp2:s;
 ClearVariable(Buf);
 ClearVariable(Buf2);
 if aТип="10": tmp2=Раб.Бюджет2005.МаскаРасхКОСГУ;
   |aТип="20": tmp2=Раб.Бюджет2005.МаскаДоходКОСГУ;
   |aТип="31" or aТип="32": tmp2=Раб.Бюджет2005.МаскаДефицитКОСГУ;
 fi;
 for Sign tmp=tmp2,Sort do
  tmp=SubStr(tmp,7,3);
  z=SearchInArray(Buf,tmp,True);
  if z=-1:
     z=InsertInArraySort(Buf,tmp);
     InsertInArray(Buf2,z,tmp+" --"+Name_A("КОСГУ."+tmp));
  fi;
 od;
 z=Alternate("Выбор ЭК",Buf2,-1,SearchInArray(Buf,hЭК,True),12);
 if z=0: ^""; fi;
 if aТип="10": hЭКР=Buf[z];
   |aТип="20": hЭКД=Buf[z];
   |aТип="31" or aТип="32": hЭКИФД=Buf[z];
 fi;
 ^Buf[z];
end;

Proc РасчетГЭК (Field:S; Iter:I);
var Rec: Record;
var Crd: String;
var n:i;
var Flag:L;
 ГЭКCrd="";  Rec=nil;
 ГЭКRec=nil; Crd="";
 Flag=(Field="");
 if (Field="БО_ГЭК" or Flag) and ver<6:
    Field="БО_ГЭК";
    БО_ГЭК=0;
    if not Призн_БО="":
       Rec=SignToRecord(Призн_БО,True);
       Crd=SignCardFile(Призн_БО,False);
    fi;
    if not Rec=nil:
       if not GetCardFieldR(Crd,Rec,"Договор")=nil:
          Rec=GetCardFieldR(Crd,Rec,"Договор");
          Crd=Раб.Договор.crdДоговор;
         else
          Crd="";
          Rec=nil;
       fi;
    fi;
   |Field="Осн_Док_ГЭК":
    Осн_Док_ГЭК=0;
    if ver<6:
       if not ДО=nil:
          Rec=ДО;
          Crd=Раб.Договор.crdДО;
       fi;
      else
       if not Договор=nil:
          Rec=Договор;
          Crd=Раб.Договор.crdДоговор;
       fi;
    fi;
   |Field="Реестр_ГЭК":
    Реестр_ГЭК[Iter]=0;
    if not Осн_Док[Iter].ДО=nil:
       Rec=Осн_Док[Iter].ДО;
       Crd=Раб.Договор.crdДО;
    fi;
   |Field="nГЭК":
    nГЭК=0;
    Crd=SelfCrd;
    Rec=Current;
 fi;
 n=0;
 if not Crd="" and not Rec=nil:
    n=Max(Раб.Вспом.Сканер.ЧитатьГЭК(Crd,RecordToInteger(Rec),"jpg",True),0);
    PutVariableI(Field+"["+Str(Iter)+"]",n);
    ГЭКCrd=Crd;
    ГЭКRec=Rec;
 fi;
 if Flag:
    РасчетГЭК("Осн_Док_ГЭК",1);
    for Iter=1..Осн_Док do
     РасчетГЭК("Реестр_ГЭК",Iter);
    od;
    РасчетГЭК("nГЭК",1);
 fi;
end;

Proc ВзятьИнфоДокОсн(Iter:I);
var n,z:i;
 ClearVariable(infДок);
 ClearVariable(infДоговор);
 ClearVariable(infБО);
 ClearVariable(infВид);
 ClearVariable(infСч);
 ClearVariable(infНСч);
 ClearVariable(infДСч);
 if ver>=6 or not Осн_Док=0:
    for n=1..Осн_Док do
     if not Осн_Док[n].ДО=nil and not n=Iter:
        z=z+1;
        infДок="ДО";
        if infДоговор=nil: infДоговор=Осн_Док[n].ДО.Договор; fi;
        if infБО=nil: infБО=Осн_Док[n].ДО.БО; fi;
        if infСч=nil:
           infСч=Осн_Док[n].ДО.НаимСчет;
           infНСч=Осн_Док[n].ДО.НомерСчет;
           infДСч=Осн_Док[n].ДО.ДатаСчет;
        fi;
     fi;
     if not Осн_Док[n].Вид="" and infВид="" and not n=Iter:
        infВид=Осн_Док[n].Вид;
     fi;
    od;
    if z=0:
       infДок="Договор";
       infДоговор=Договор;
       if infДоговор=nil: infБО=БО; fi;
    fi;
   else
    infДоговор=ДО.Договор;
    infБО=ДО.БО;
    infСч=ДО.НаимСчет;
    infНСч=ДО.НомерСчет;
    infДСч=ДО.ДатаСчет;
    infВид=Осн_ДокВид;
 fi;
end;

Func КБК_В_Текст(Msg:L; isExt:L):S;
var z,Iter:I;
var Ret,tmp:S;
 if not isExt and FuncExists(extКБК_В_Текст) and not Match(extКБК_В_Текст,"*postfix*"):
    Ret=ExecuteFuncS(extКБК_В_Текст,"",isExt);
   else
    if ИстОбщ="": if Msg: Message("Заполните наименование вида средств для исполнения обязательства",mtError); Template.Field="Ист_"; fi; ^"err"; fi;
    Ret="";
    if not ИстОбщ="5":
       ClearVariable(Buf);
       ClearVariable(BufN);
       for Iter=1..Расшифр do
        if not Расшифр[Iter].КБК="":
           z=SearchInArray(Buf,Расшифр[Iter].КБК,True);
           if z=-1:
              z=InsertInArraySort(Buf,Расшифр[Iter].КБК);
              InsertInArray(BufN,z,Расшифр[Iter].Сум);
             else
              BufN[z]=BufN[z]+Расшифр[Iter].Сум;
           fi;
        fi;
       od;
       z=LengthOfArray(Buf);
       if z=0: if Msg: Message("Заполните код по БК плательщика",mtError); Template.Field="КБК"; Template.Frame=Iter; fi; ^"err"; fi;
       for Iter=1..z do
        if z>1 and fСумКБКНазнПл:
           tmp="="+Раб.Формат.ReplaceSubStr(Str(BufN[Iter],2),".","-");
          else
           tmp="";
        fi;
        Ret=Раб.Бюджет2005.Объединить(Ret,Buf[Iter]+tmp,",");
       od;
    fi;
    if not isExt and FuncExists(extКБК_В_Текст) and Match(extКБК_В_Текст,"*postfix*"):
       Ret=ExecuteFuncS(extКБК_В_Текст,Ret,isExt);
    fi;
 fi;
 ^Ret;
end;

Func ОснДок_В_Предм(vПредм:S; Iter:I; isExt:L):S;
var n,nn:i;
 if not isExt and FuncExists(extПредм) and not Match(extПредм,"*postfix*"):
    vПредм=ExecuteFuncS(extПредм,vПредм,Iter,isExt);
   else
    if ver<6:
       if Iter=0:
          if not ДО=nil:
             vПредм=ДО.Содерж;
             if not ДО.УчетБО:
                vПредм=Раб.Бюджет2005.Объединить(vПредм,ДО.Договор.НаимДок.Наим+" №"+ДО.Договор.НомерДок+" от "+DateToString(ДО.Договор.ДатаДок)," ");
             fi;
            else
             ClearVariable(Buf);
             for Iter=1..Осн_Док do
              if not Осн_Док[Iter].Предм="":
                 AddInArray(Buf,False,False,Lo(Осн_Док[Iter].ДО.Содерж));
              fi;
             od;
             vПредм=Buf[1];
             nn=LengthOfArray(Buf);
             for n=2..nn do
              vПредм=vПредм+", "+Buf[n];
             od;
             vПредм=vПредм+" "+Осн_Док[1].ДО.Договор.НаимДок.Наим+" №"+Осн_Док[1].ДО.Договор.НомерДок+" от "+DateToString(Осн_Док[1].ДО.Договор.ДатаДок);
          fi;
         else
          if not Осн_Док[Iter].ДО=nil:
             vПредм=Осн_Док[Iter].ДО.Содерж;
             if not Осн_Док[Iter].ДО.Договор=nil:
                vПредм=Раб.Бюджет2005.Объединить(vПредм,Осн_Док[Iter].ДО.Договор.НаимДок.Наим+" №"+Осн_Док[Iter].ДО.Договор.НомерДок+" от "+DateToString(Осн_Док[Iter].ДО.Договор.ДатаДок)," ");
             fi;
          fi;
       fi;
      else
       if Iter=0:
          vПредм=Договор.Содерж;
         else
          if not Осн_Док[Iter].ДО=nil:
             vПредм=Осн_Док[Iter].ДО.Содерж;
             if not fР2_Договор:
                vПредм=Раб.Бюджет2005.Объединить(vПредм,Осн_Док[Iter].ДО.Договор.НаимДок.Наим+" №"+Осн_Док[Iter].ДО.Договор.НомерДок+" от "+DateToString(Осн_Док[Iter].ДО.Договор.ДатаДок)," ");
             fi;
          fi;
       fi;
    fi;
    if not isExt and FuncExists(extПредм) and Match(extПредм,"*postfix*"):
       vПредм=ExecuteFuncS(extПредм,vПредм,Iter,isExt);
    fi;
 fi;
 ^vПредм;
end;

Func НДС_В_НазнПл(vНазнПл:S; Force:L):S;
var p,l:i;
var текстНДС,текстНДС18,текстНДС10,текстНДСсум,текстНДС00,текстНДС__:s;
 текстНДС18="в т.ч. НДС 18%=";
 текстНДС10="в т.ч. НДС 10%=";
 текстНДС00="в т.ч. НДС 0%";
 текстНДСсум="в т.ч. НДС=";
 текстНДС__="НДС не облагается";
 if Док_СтавкаНДС="0":ТекстНДС="в т.ч. НДС 0%";
   |Док_СтавкаНДС="": ТекстНДС="НДС не облагается";
   |Док_СтавкаНДС=".": ТекстНДС=текстНДСсум+Раб.Формат.ReplaceSubStr(Str(Док_СумНДС,2),".","-");
   |True: ТекстНДС="в т.ч. НДС "+Док_СтавкаНДС+"%="+Раб.Формат.ReplaceSubStr(Str(Док_СумНДС,2),".","-");
 fi;
 if Pos(текстНДС18,vНазнПл)>0: p=Pos(текстНДС18,vНазнПл); l=Length(текстНДС18);
   |Pos(текстНДС10,vНазнПл)>0: p=Pos(текстНДС10,vНазнПл); l=Length(текстНДС10);
   |Pos(текстНДСсум,vНазнПл)>0: p=Pos(текстНДСсум,vНазнПл); l=Length(текстНДСсум);
   |Pos(текстНДС00,vНазнПл)>0: p=Pos(текстНДС00,vНазнПл)*(-1); l=0;
   |Pos(текстНДС__,vНазнПл)>0: p=Pos(текстНДС__,vНазнПл)*(-1); l=-1;
   |True: p=0;
 fi;
 if p>0:
    ТекстНДС=SubStr(vНазнПл,1,p-1)+ТекстНДС;
    vНазнПл=SubStr(vНазнПл,p+l,255);
    p=Pos("-",vНазнПл)+3;
    vНазнПл=ТекстНДС+SubStr(vНазнПл,p,255);
   |p<0:
    if l=0:
       vНазнПл=Раб.Формат.ReplaceSubStr(vНазнПл,текстНДС00,ТекстНДС);
      else
       vНазнПл=Раб.Формат.ReplaceSubStr(vНазнПл,текстНДС__,ТекстНДС);
    fi;
   |True:
    if Force:
       vНазнПл=vНазнПл+if(SubStr(vНазнПл,Length(vНазнПл),1)=" ",""," ")+ТекстНДС;
    fi;
 fi;
 ^vНазнПл;
end;

Func КлассОснДок(Val:S; isСокр:L):S;
var Ret:S;
 val=Trim(val);
 if Val="дополнительное соглашение": ret="A";
   |Val="допсоглашение": ret="A";
   |Val="доп.соглашение": ret="A";
   |Val="доп. соглашение": ret="A";
   |Val="счет": ret="B";
   |True: ret="Z";
 fi;
 if isСокр:
    if ret="A": ret="доп.с.";
      |ret="B": ret="сч.";
      |true: ret=val;
    fi;
 fi;
 ^Ret;
end;

Func ОснДок_В_НазнПл(vНазнПл:S; isExt:L):S;
var Iter,n,nn: I;
var sp,tmp,tmp2,hПредм,Предм,hДок,Док,hДат,Дат,Ном,Сч,hКласс,Класс,txtКБК:S;
 if not isExt and FuncExists(extНазнПл) and not Match(extНазнПл,"*postfix*"):
    vНазнПл=ExecuteFuncS(extНазнПл,vНазнПл,isExt);
   else
    if Банк.РПО_ЛСчет="": ^vНазнПл; fi;
    if ver<6:
       if Осн_Док=0:
          if ДО=nil: ^vНазнПл; fi;
         else
          for Iter=1..Осн_Док do
           if not Осн_Док[Iter].ДО=nil: Break; fi;
          od;
          if Iter>Осн_Док: ^vНазнПл; fi;
       fi;
    fi;
    vНазнПл="";
    sp="";
    if fКБКЛСНазнПл: txtКБК=КБК_В_Текст(False,False); fi;
    if Осн_Док=0:
       tmp="";
       if not ДО.УчетБО:
          tmp=ДО.Договор.НаимДок.НаимК;
          if tmp="": tmp=ДО.Договор.НаимДок.Наим; fi;
          tmp=tmp+" "+ДО.Договор.НомерДок+" от "+Раб.Формат.ДатаСтр(ДО.Договор.ДатаДок,Раб.Формат.dfDDMMYY);
       fi;
       if fКБКЛСНазнПл:
          vНазнПл="("+if(txtКБК="" or txtКБК="err","",txtКБК+" ")+"л/с "+Банк.РПО_ЛСчет+") "+tmp+if(tmp="",""," ");
         else
          vНазнПл=tmp+if(tmp="",""," ");
       fi;
       if not ДО.НаимСчет=nil:
          tmp=ДО.НаимСчет.НаимК;
          if tmp="": tmp=ДО.НаимСчет.Наим; fi;
          tmp=tmp+" "+ДО.НомерСчет+" от "+Раб.Формат.ДатаСтр(ДО.ДатаСчет,Раб.Формат.dfDDMMYY);
          vНазнПл=vНазнПл+tmp+" ";
       fi;
       tmp=ДО.НаимДок.НаимК;
       if tmp="": tmp=ДО.НаимДок.Наим; fi;
       tmp=tmp+" "+Осн_ДокНом+" от "+Раб.Формат.ДатаСтр(Осн_ДокДат,Раб.Формат.dfDDMMYY);
       vНазнПл=vНазнПл+tmp+" ("+ДО.Содерж+")";
      else
       ClearVariable(Buf);
       for Iter=1..Осн_Док do
        if not Осн_Док[Iter].Вид="":
           if Осн_Док[Iter].ДО.НаимСчет=nil or ver>=6:
              tmp="0#0#0#0#";
             else
              tmp=Раб.Формат.DateToSQLStr(Осн_Док[Iter].ДО.ДатаСчет)+"#"; --1
              tmp=tmp+Раб.Формат.ДатаСтр(Осн_Док[Iter].ДО.ДатаСчет,Раб.Формат.dfDDMMYY)+"#"; --2
              tmp=tmp+if(Осн_Док[Iter].ДО.НаимСчет.НаимК="",Осн_Док[Iter].ДО.НаимСчет.Наим,Осн_Док[Iter].ДО.НаимСчет.НаимК)+"#"; --3
              tmp=tmp+Осн_Док[Iter].ДО.НомерСчет+"#"; --4
           fi;
           tmp=tmp+КлассОснДок(Осн_Док[Iter].Вид,False)+"#"; --5 класс документа
           tmp=tmp+Раб.Формат.DateToSQLStr(Осн_Док[Iter].Дат)+"#"; --6 дата документа для сортировки
           tmp=tmp+Раб.Формат.ДатаСтр(Осн_Док[Iter].Дат,Раб.Формат.dfDDMMYY)+"#"; --7 hДат
           tmp=tmp+if(Осн_Док[Iter].ДО.НаимДок.НаимК="",КлассОснДок(Осн_Док[Iter].Вид,True),Осн_Док[Iter].ДО.НаимДок.НаимК)+"#"; --8 hДок
           tmp=tmp+if(ver<6,Осн_Док[Iter].ДО.Содерж,if(Осн_Док[Iter].Предм=""," ",Осн_Док[Iter].Предм))+"#"; --9 hПредм
           tmp=tmp+Осн_Док[Iter].Ном; --10
           AddInArray(Buf,True,False,tmp);
           if vНазнПл="":
              if ver<6:
                 tmp=Осн_Док[Iter].ДО.Договор.НаимДок.НаимК;
                 if tmp="": tmp=Осн_Док[Iter].ДО.Договор.НаимДок.Наим; fi;
                 tmp=tmp+" "+Осн_Док[Iter].ДО.Договор.НомерДок+" от "+Раб.Формат.ДатаСтр(Осн_Док[Iter].ДО.Договор.ДатаДок,Раб.Формат.dfDDMMYY);
                else
                 tmp="";
                 if not Осн_ДокВид="":
                    tmp=Договор.НаимДок.НаимК;
                    if tmp="": tmp=Осн_ДокВид; fi;
                    tmp=tmp+" "+Осн_ДокНом+" от "+Раб.Формат.ДатаСтр(Осн_ДокДат,Раб.Формат.dfDDMMYY);
                    if not Договор.НаимИзм=nil: --дополнительное соглашение
                       tmp2=Договор.НаимИзм.НаимК;
                       if tmp2="": tmp2=Договор.НаимИзм.Наим; fi;
                       tmp2=tmp2+" "+Договор.НомерИзм+" от "+Раб.Формат.ДатаСтр(Договор.ДатаДИзм,Раб.Формат.dfDDMMYY);
                       tmp=tmp+" "+tmp2;
                    fi;
                 fi;
              fi;
              if fКБКЛСНазнПл:
                 vНазнПл="("+if(txtКБК="" or txtКБК="err","",txtКБК+" ")+"л/с "+Банк.РПО_ЛСчет+") "+tmp+if(tmp="",""," ");
                else
                 vНазнПл=tmp+if(tmp="",""," ");
              fi;
           fi;
        fi;
       od;
       nn=LengthOfArray(Buf);
       Сч=ExtractWord(3,Buf[1],"#");
       if Сч="0": Сч=""; else Сч=Сч+" "+ExtractWord(4,Buf[1],"#")+" от "+ExtractWord(2,Buf[1],"#"); fi;
       hКласс=ExtractWord(5,Buf[1],"#");
       hДат=ExtractWord(7,Buf[1],"#");
       hДок=ExtractWord(8,Buf[1],"#");
       hПредм="";
       if (hКласс="Z" or not ExtractWord(5,Buf[nn],"#")="Z") and not hКласс="A":
          hПредм=Trim(ExtractWord(9,Buf[1],"#"));
       fi;
       sp="";
       tmp=Раб.Бюджет2005.Объединить(Сч,hДок," ");
       for n=1..nn do
        Класс=ExtractWord(5,Buf[n],"#");
        Дат=ExtractWord(7,Buf[n],"#");
        Док=ExtractWord(8,Buf[n],"#");
        Предм="";
        if (Класс="Z" or not ExtractWord(5,Buf[nn],"#")="Z") and not Класс="A":
           Предм=Trim(ExtractWord(9,Buf[n],"#"));
        fi;
        Ном=ExtractWord(10,Buf[n],"#");
        if not Док=hДок:
           tmp=Док;
           hДок=Док;
        fi;
        tmp=Раб.Бюджет2005.Объединить(tmp,Ном," ");
        if not Дат=hДат or not Класс=hКласс:
           vНазнПл=Раб.Бюджет2005.Объединить(vНазнПл,hДат," от ");
           hДат=Дат;
           hКласс=Класс;
        fi;
        if not Предм=hПредм:
           vНазнПл=Раб.Бюджет2005.Объединить(vНазнПл,hПредм," (")+if(hПредм="","",")");
           hПредм=Предм;
        fi;
        vНазнПл=Раб.Бюджет2005.Объединить(vНазнПл,tmp,sp);
        if n=nn:
           vНазнПл=Раб.Бюджет2005.Объединить(vНазнПл,Дат," от ");
           vНазнПл=Раб.Бюджет2005.Объединить(vНазнПл,Предм," (")+if(Предм="","",")");
        fi;
        tmp="";
        sp=",";
       od;
    fi;
    vНазнПл=НДС_В_НазнПл(vНазнПл,True);
    if not isExt and FuncExists(extНазнПл) and Match(extНазнПл,"*postfix*"):
       vНазнПл=ExecuteFuncS(extНазнПл,vНазнПл,isExt);
    fi;
 fi;
 if Length(vНазнПл)>210: 
    Message("Длина назначения платежа ("+Str(Length(vНазнПл))+") превысило разрешенную длину (210) символов",mtWarning); 
    if not isExt: Template.Field="Док_НазнПл"; fi;
 fi;
 ^vНазнПл;
end;

Proc СоотвОснДокРасшифр;
var Iter,z:i;
var isДО:L;
 Осн_ДокОплТек=0;
 if Осн_Док=0:
    Iter=1;
    While Iter<=Расшифр do
     if not ДО=Расшифр[Iter].ДО:
        if ДО=nil:
           Расшифр[Iter].ДО=nil; 
           Расшифр[Iter].Призн_ОснДок="";
           Расшифр[Iter].ДокСум=0;
           Расшифр[Iter].ДокОпл=0;
           Iter=Iter+1;
          else
           DeleteFrame(Расшифр,Iter);
        fi;
       else
        Осн_ДокОплТек=Осн_ДокОплТек+Расшифр[Iter].Сум;
        Iter=Iter+1;
     fi;
    od;
   else
    for Iter=1..Осн_Док do
     Осн_Док[Iter].ОплТек=0;
    od;
    Iter=1;
    isДО=False;
    While Iter<=Расшифр do
     if not Расшифр[Iter].ДО=nil: isДО=True; fi;
     z=SearchInArray(Осн_Док[].ДО,Расшифр[Iter].ДО,False,1);
     if z=-1 or (Расшифр[Iter].ДО=nil and isДО):
        DeleteFrame(Расшифр,Iter); 
       else 
        Осн_Док[z].ОплТек=Осн_Док[z].ОплТек+Расшифр[Iter].Сум;
        Iter=Iter+1; 
     fi;
    od;
 fi;
end;

Func СоотвБОРасшифр (fMsg:L):L;
var Iter,z,n,nn:i;
var tmp,tmp2,error:S;
var Flag:L;
 if not БО=nil:
    ClearVariable(Buf);
    ClearVariable(Buf2);
    for n=1..БО.Расшифр do
     tmp=Trim(БО.Расшифр[n].Призн+" "+БО.Призн_Договор);
     tmp=Раб.Бюджет2005.СортироватьНаборСлов(tmp," ",True);
     AddInArray(Buf2,True,False,БО.Расшифр[n].Ист+"#"+БО.Расшифр[n].КБК+"#"+tmp);
    od;
    nn=LengthOfArray(Buf2);
    for n=1..nn do
     Buf[n]=ExtractWords(1,2,Buf2[n],"#");
     Buf2[n]=ExtractWord(3,Buf2[n],"#");
    od;
    Iter=1;
    While Iter<=Расшифр do
     if Расшифр[Iter].ДО=nil:
        z=SearchInArray(Buf,Расшифр[Iter].Ист+"#"+Расшифр[Iter].КБК,True);
        if z=-1:
           if fMsg:
              Message("Классификация "+Расшифр[Iter].Ист+" "+Расшифр[Iter].КБК+" не найдена в бюджетном обязательстве "+Призн_БО,mtError); 
              ^False;
             else
              DeleteFrame(Расшифр,Iter);
           fi;
          else
           Flag=False;
           error="";
           While Buf[z]=Расшифр[Iter].Ист+"#"+Расшифр[Iter].КБК do
            tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Призн_[Iter]," ","ДОГОВОР.*",""); --нормализуем ДО до уровня договора
            if tmp="":
               tmp=Призн_[Iter];
              else
               tmp=ExtractWords(1,4,tmp,".");
               tmp=Trim(tmp+" "+Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Призн_[Iter]," ","ДОГОВОР.*",""));
            fi;
            tmp=Раб.Бюджет2005.СортироватьНаборСлов(tmp," ",True);
            tmp2=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(tmp," ",Раб.Бюджет2005.ПризнВСправ(Buf2[z]," ",".*")," ");
            if tmp2=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Buf2[z]," ",Раб.Бюджет2005.ПризнВСправ(tmp2," ",".*")," "):
               Iter=Iter+1;
               Flag=True;
               Break;
              else
               error=Раб.Бюджет2005.Объединить(error,Buf2[z],Chr(13));
            fi;
            z=z+1;
           od;
           if not Flag:
              if fMsg:
                 Message("Аналитические признаки ("+Призн_[Iter]+") отличаются от заданных в бюджетном обязательстве ("+error+") для КБК "+Расшифр[Iter].Ист+" "+Расшифр[Iter].КБК,mtError);
                 ^False;
                else
                 DeleteFrame(Расшифр,Iter);
              fi;
           fi;
        fi;
      else
       Iter=Iter+1;
     fi;
    od;
 fi;
 ^True;
end;

Proc ЗаполнитьКонтр(aИст:S; Iter:I);
var Flag:L;
var i:i;
 if aИст="БО":
    if БО.Раздел2=0 or РеквП=nil:
       if (РеквП=nil or not РеквП=БО.РеквП) and not БО.РеквП=nil:
          if БО.Раздел2=0:
             РеквП=БО.РеквП;
             БанкП=БО.БанкП;
            else
             Message("Выберите контрагента");
             Flag=ExecuteFuncL("РеквП_OnEnter",aИст,1);
             Flag=False;
          fi;
         else
          Flag=not БанкП=БО.БанкП and not БО.БанкП=nil;
       fi;
      else
       if not РеквП=БО.РеквП:
          for i=1..БО.Раздел2 do
           if РеквП=БО.Раздел2[i].РеквП: Break; fi;
          od;
          if i>БО.Раздел2:
             РеквП=БО.РеквП;
             БанкП=БО.БанкП;
            else
             for i=1..БО.Раздел2 do
              if РеквП=БО.Раздел2[i].РеквП and БанкП=БО.Раздел2[i].БанкП: Break; fi;
             od;
             if i>БО.Раздел2:
                Flag=True;
             fi;
          fi;
         else
          Flag=not БанкП=БО.БанкП and not БО.БанкП=nil;
       fi;
    fi;
   |aИст="Договор":
    if (Договор.Контр2=0 and Договор.Контр_Банк2=0) or РеквП=nil:
       if not РеквП=Договор.Контр:
          if Договор.Контр2=0:
             РеквП=Договор.Контр;
             БанкП=Договор.Контр_Банк;
            else
             Message("Выберите контрагента");
             Flag=ExecuteFuncL("РеквП_OnEnter",aИст,1);
             Flag=False;
          fi;
         else
          Flag=not БанкП=Договор.Контр_Банк;
       fi;
      else
       if РеквП=Договор.Контр:
          if not БанкП=Договор.Контр_Банк:
             for i=1..Договор.Контр_Банк2 do
              if БанкП=Договор.Контр_Банк2[i].Контр_Банк: Break; fi;
             od;
             if i>Договор.Контр_Банк2:
                Flag=True;
             fi;
          fi;
         else
          for i=1..Договор.Контр2 do
           if РеквП=Договор.Контр2[i].Контр: Break; fi;
          od;
          if i>Договор.Контр_Банк2:
             РеквП=Договор.Контр;
             БанкП=Договор.Контр_Банк;
            else
             for i=1..Договор.Контр2 do
              if БанкП=Договор.Контр2[i].Контр_Банк: Break; fi;
             od;
             if i>Договор.Контр2:
                Flag=True;
             fi;
          fi;
       fi;
    fi;
   |aИст="ДО" and Iter=0 and ver<6:
    if not РеквП=ДО.Контр:
       РеквП=ДО.Контр;
       БанкП=ДО.Контр_Банк;
      else
       Flag=not БанкП=ДО.Контр_Банк;
    fi;
   |aИст="ДО":
    if not РеквП=Осн_Док[Iter].ДО.Контр:
       РеквП=Осн_Док[Iter].ДО.Контр;
       БанкП=Осн_Док[Iter].ДО.Контр_Банк;
      else
       Flag=not БанкП=Осн_Док[Iter].ДО.Контр_Банк;
    fi;
 fi;
 if not РеквП=nil: Призн_К=CardFileRecSign("Контрагент","Признак","К",РеквП,""); fi;
 if Flag: Message("Внимание !^MБанковские реквизиты контрагента отличны от банковских реквизитов контрагента указанных в сведениях о принятом бюджетном обязательстве",mtWarning); fi;
end;

Proc ЗаполнитьДоговор (Rec: Record; Depends:L);
 Осн_ДокCrd=Раб.Договор.crdДоговор;
 Раб.Договор.Договор_СуммаСроки(Rec,ДатаДок);
 Договор=Rec;
 Договор_GUID=Договор.GUID;
 Осн_ДокВид=Договор.НаимДок.Наим;
 Осн_ДокНом=Договор.НомерДок;
 Осн_ДокДат=Договор.ДатаДок;
 Осн_ДокСум=Раб.Договор.СумТек;
 Осн_ДокОпл=0;
 Осн_ДокПредм=Договор.Содерж;
 РасчетГЭК("Осн_Док_ГЭК",1);
 Раб.Договор.ВалОпл=Вал;
 Раб.Договор.exclЗачетАв=True;
 Раб.Договор.Договор_Оплата(Договор,Dat(1,1,Year(ДатаДок)),ДатаДок,"","","",0,False,False,True);
 Осн_ДокОпл=Раб.Договор.lstСум[1];
 if Depends:
    ExecuteProc("ЗаполнитьБО",Договор.БО,False);
 fi;
 if fР2_НазнПл:
    Док_НазнПл=ОснДок_В_НазнПл(Док_НазнПл,False);
 fi;
end;

Func ВзятьСчетИзДО(Iter:I):I;
var i,z:i;
 if Осн_Док[Iter].ДО.НаимСчет=nil: ^Iter; fi;
 z=0;
 for i=1..Осн_Док do
  if Осн_Док[i].ДО=nil:
     z=i;
     if Осн_Док[Iter].ДО.НаимСчет.Наим=Осн_Док[i].Вид and Осн_Док[Iter].ДО.НомерСчет=Осн_Док[i].Ном and Осн_Док[Iter].ДО.ДатаСчет=Осн_Док[i].Дат: ^Iter; fi;
  fi;
 od;
 if z<Iter: Iter=Iter+1; fi;
 z=InsertFrame(Осн_Док,z+1);
 Осн_Док[z].Вид=Осн_Док[Iter].ДО.НаимСчет.Наим;
 Осн_Док[z].Ном=Осн_Док[Iter].ДО.НомерСчет;
 Осн_Док[z].Дат=Осн_Док[Iter].ДО.ДатаСчет;
 Осн_Док[z].Предм=Осн_Док[Iter].ДО.Содерж;
 ^Iter;
end;

Func ЗаполнитьДО(Rec: Record; Iter:I; Depends:L):I;
 if Iter=0:
    Осн_ДокCrd=Раб.Договор.crdДО;
    ДО=Rec;
    ДО_GUID=ДО.GUID;
    Осн_ДокВид=ДО.НаимДок.Наим;
    Осн_ДокНом=ДО.НомерДок;
    Осн_ДокДат=ДО.ДатаДок;
    Осн_ДокСум=ДО.СумДок;
    Осн_ДокОпл=0;
    Осн_ДокОплТек=0;
    Осн_ДокПредм=ОснДок_В_Предм(Осн_ДокПредм,0,False);
    РасчетГЭК("Осн_Док_ГЭК",1);
    Раб.Договор.ДО_Оплата(ДО,ДатаДок,"","","",False,False,True);
    Осн_ДокОпл=Раб.Договор.lstСум[1];
    if Depends:
       ExecuteProc("ЗаполнитьБО",if(ДО.УчетБО,ДО.БО,Договор.БО),False);
    fi;
   else
    Осн_Док[Iter].Crd=Раб.Договор.crdДО;
    Осн_Док[Iter].ДО=Rec;
    Осн_Док[Iter].ДО_GUID=Осн_Док[Iter].ДО.GUID;
    Осн_Док[Iter].Вид=Осн_Док[Iter].ДО.НаимДок.Наим;
    Осн_Док[Iter].Ном=Осн_Док[Iter].ДО.НомерДок;
    Осн_Док[Iter].Дат=Осн_Док[Iter].ДО.ДатаДок;
    Осн_Док[Iter].Сум=Осн_Док[Iter].ДО.СумДок;
    Осн_Док[Iter].Опл=0;
    Осн_Док[Iter].ОплТек=0;
    Осн_Док[Iter].Предм=ОснДок_В_Предм(Осн_Док[Iter].Предм,Iter,False);
    РасчетГЭК("Реестр_ГЭК",Iter);
    Раб.Договор.ДО_Оплата(Осн_Док[Iter].ДО,ДатаДок,"","","",False,False,True);
    Осн_Док[Iter].Опл=Раб.Договор.lstСум[1];
    if ver>=6: Iter=ВзятьСчетИзДО(Iter); fi;
    if Depends:
       if ver>=6: ЗаполнитьДоговор(Осн_Док[Iter].ДО.Договор,False); fi;
       ExecuteProc("ЗаполнитьБО",if(Осн_Док[Iter].ДО.УчетБО,Осн_Док[Iter].ДО.БО,Договор.БО),False);
    fi;
 fi;
 СоотвОснДокРасшифр;
 if fР2_НазнПл:
    Док_НазнПл=ОснДок_В_НазнПл(Док_НазнПл,False);
 fi;
 ^Iter;
end;

Proc ЗаполнитьБО(Rec: Record; Depends:L);
var Iter:I;
 БО=Rec;
 НомерБО="";
 GUID_FKБО="";
 if БО.Рег or БО.ТипДок>0:
    НомерБО=БО.РегНомер; 
   else
    if БО.УчетФК and (fGUID_FK or БО.GUID_FK_Разреш):
       GUID_FKБО=БО.GUID_FK;
    fi;
 fi;
 Призн_БО=CardFileRecSign(Раб.Договор.crdБО,"Признак","БО",БО,"");
 ФАИП=БО.Расшифр[1].ФАИП;
 if ФАИП=nil:
    Призн_ФАИП="";
   else
    Призн_ФАИП="";
    Призн_ФАИП=CardFileRecSign("РПО_ФАИП","Признак","ФАИП",ФАИП);
    if Призн_ФАИП="ФАИП.": Призн_ФАИП=""; fi;
 fi;
 БО_ГЭК=0;
 if Depends:
    if ((not БО.Договор=nil and not Договор=БО.Договор) or (not БО.ДО.Договор=nil and not Договор=БО.ДО.Договор)) and ver>=6:
       ЗаполнитьДоговор(БО.Договор,False);
      else
       if Осн_ДокВид="" and Осн_ДокНом="":
          ДОГОВОР=nil; ДО=nil; ДОГОВОР_GUID=""; ДО_GUID="";
          if БО.Осн_ДокВид="":
             Осн_ДокВид="";
             Осн_ДокНом=БО.Исп_ДокНом;
             Осн_ДокДат=БО.Исп_ДокДат;
            else
             Осн_ДокВид=if(БО.Осн_ДокВид="1","Государственный контракт",БО.Осн_ДокНаим);
             Осн_ДокНом=БО.Осн_ДокНом;
             Осн_ДокДат=БО.Осн_ДокДат;
             Осн_ДокПредм=БО.Расшифр[1].Предм1;
          fi;
       fi;
    fi;
    if not БО.ДО=nil and ver>=6:
       Iter=1;
       While Iter<=Осн_Док do
        if not Осн_Док[Iter].ДО=БО.ДО:
           DeleteFrame(Осн_Док,Iter);
          else
           Iter=Iter+1;
        fi;
       od;
       if Iter>Осн_Док:
          Iter=InsertFrame(Осн_Док,Iter);
          ЗаполнитьДО(БО.ДО,Iter,False);
       fi;
    fi;
 fi;
 if ver<6: РасчетГЭК("БО_ГЭК",1); fi;
 СоотвБОРасшифр(False);
end;

Proc ОбновитьТекОпл;
var Iter,z:I;
 Осн_ДокОплТек=0;
 if Осн_Док=0 :
    for Iter=1..Расшифр do
     Осн_ДокОплТек=Осн_ДокОплТек+Расшифр[Iter].Сум;
    od;
   else
    for Iter=1..Осн_Док do
     Осн_Док[Iter].ОплТек=0;
    od;
    for Iter=1..Расшифр do
     z=SearchInArray(Осн_Док[].ДО,Расшифр[Iter].ДО);
     if not z=-1:
        Осн_Док[z].ОплТек=Осн_Док[z].ОплТек+Расшифр[Iter].Сум;
     fi;
    od;
 fi;
end;

Func ОбновитьОснДок:S;
var Iter:I;
var Ret:S;
 Ret="";
 Осн_ДокСум=0;
 Осн_ДокОпл=0;
 if ver>=6 and not Договор=nil:
    Раб.Договор.Договор_СуммаСроки(Договор,ДатаДок);
    Осн_ДокСум=Раб.Договор.СумТек;
    Раб.Договор.ВалОпл=Вал;
    Раб.Договор.exclЗачетАв=True;
    Раб.Договор.Договор_Оплата(Договор,Dat(1,1,Year(ДатаДок)),ДатаДок,"","","",0,False,False,True);
    Осн_ДокОпл=Раб.Договор.lstСум[1];
 fi;
 if Осн_Док=0:
    if not ДО=nil:
       Осн_ДокВид=ДО.НаимДок.Наим;
       Осн_ДокНом=ДО.НомерДок;
       Осн_ДокДат=ДО.ДатаДок;
       Осн_ДокСум=ДО.СумДок;
       ДО_GUID=ДО.GUID;
       if not Раб.Договор.ДО_Оплата(ДО,ДатаДок,"","","",False,False,True)=0: Осн_ДокОпл=Раб.Договор.lstСум[1]; fi;
       Ret="Рег and UKey="+RecordToString(ДО);
    fi;
   else
    Refresh(False,ДатаДок+1);
    for Iter=1..Осн_Док do
     Осн_Док[Iter].Сум=0;
     Осн_Док[Iter].Опл=0;
     if not Осн_Док[Iter].ДО=nil:
        Осн_Док[Iter].Вид=Осн_Док[Iter].ДО.НаимДок.Наим;
        Осн_Док[Iter].Ном=Осн_Док[Iter].ДО.НомерДок;
        Осн_Док[Iter].Дат=Осн_Док[Iter].ДО.ДатаДок;
        Осн_Док[Iter].Сум=Осн_Док[Iter].ДО.СумДок;
        Осн_Док[Iter].ДО_GUID=Осн_Док[Iter].ДО.GUID;
        if not Раб.Договор.ДО_Оплата(Осн_Док[Iter].ДО,ДатаДок,"","","",False,False,False)=0: Осн_Док[Iter].Опл=Раб.Договор.lstСум[1]; fi;
        Ret=Раб.Бюджет2005.Объединить(Ret,"UKey="+RecordToString(Осн_Док[Iter].ДО)," or ");
     fi;
    od;
    if not Ret="":
       Ret="("+Ret+")";
       if Length(Ret)+Length("Рег and ")>255: Message("Слишком много документов в реестре документов оснований.^MУменьшите количестово документов",mtError); Template.Field="Осн_ДокВид"; ^""; fi;
       Ret="Рег and "+Ret;
    fi;
 fi;
 ^Ret;
end;

Func ОбновитьРасшифрОснДок(aДок:S; aErr:I):L;
var Iter,n:I;
var ВД_,tmp:S;
var isДО:L;
 if aДок="": ^False; fi;
 ВД_=БухИст(0);
 Раб.Договор.inclПризнОКДП=if(Док_Аванс,2,0);
 Раб.Договор.ДО_КБК(aДок,"ВД='"+ВД_+"'",ДатаДок,True,False);
-- Раб.Договор.ДО_КБК(aДок,"ВД='"+ВД_+"'",ДатаДок,True,False,"");
 isДО=False;
 ClearVariable(Buf);
 ClearVariable(Buf2);
 for Iter=1..Расшифр do
  Расшифр[Iter].ДокСум=0;
  Расшифр[Iter].ДокОпл=0;
  if not Расшифр[Iter].ДО=nil:
     tmp=Trim(Расшифр[Iter].ДО.Общ_Призн1+" "+Расшифр[Iter].ДО.Общ_Призн2);
     tmp=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расшифр[Iter].Призн_ОснДок," ",Trim("ДОГОВОР.* "+tmp)," ");
     Buf[Iter]=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК+КОСГУ");
     tmp=Раб.Формат.ДатаСтр(Расшифр[Iter].ДО.ДатаРег,Раб.Формат.dfYYYYMMDD)+"#"+Раб.Формат.ДатаСтр(Расшифр[Iter].ДО.ДатаДок,Раб.Формат.dfYYYYMMDD)+"#"+RecordToString(Расшифр[Iter].ДО)+"#"+ВД_+"#"+Buf[Iter]+"#"+tmp;
     Buf2[Iter]=RecordToString(Расшифр[Iter].ДО)+"#"+ВД_+"#"+Расшифр[Iter].КБК+"#"+Расшифр[Iter].Призн_ОснДок;
     n=SearchInArray(Раб.Договор.LstКлюч,tmp,True);
     if n=-1 and aErr=1:
        Message("Классификация, вид средств "+ВД_+"   КБК "+Buf[Iter]+" {"+Расшифр[Iter].Призн_ОснДок+"} не найдена в документе - основании "+Расшифр[Iter].ДО.НаимДок.Наим+" №"+Расшифр[Iter].ДО.НомерДок+" от "+DateToString(Расшифр[Iter].ДО.ДатаДок),mtError);
        Template.Field="КБК"; 
        Template.Frame=Iter; 
        ^False;
       else
        Расшифр[Iter].ДокСум=Раб.Договор.lstСум[n];
        isДО=True;
     fi;
  fi;
 od;
 if isДО:
    Refresh(False,ДатаДок+1);
    for Iter=1..Расшифр do
     if not Расшифр[Iter].ДО=nil:
        Раб.Договор.ДО_Оплата(Расшифр[Iter].ДО,ДатаДок,ВД_,Buf[Iter],Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(Расшифр[Iter].Призн_ОснДок," ","&"),False,False,False);
        Расшифр[Iter].ДокОпл=Расшифр[Iter].ДокОпл+Раб.Договор.lstСум[1];
        tmp=RecordToString(Расшифр[Iter].ДО)+"#"+ВД_+"#"+Расшифр[Iter].КБК+"#"+Расшифр[Iter].Призн_ОснДок;
        n=SearchInArray(Buf2,tmp,False,Iter+1);
        While not n=-1 do
         Расшифр[n].ДокОпл=Расшифр[n].ДокОпл+Расшифр[Iter].Сум;
         n=SearchInArray(Buf2,tmp,False,n+1);
        od;

     fi;
    od;
 fi;
 ^True;
end;

Func ПроверитьКакБО(Full:L; Msg:L):L;
var Iter:I;
var ВД_,БК_,КОСГУ_,СчД_,СчК_,СчДО_:S;
 if ИстОбщ="5": if Msg: Message("Для средств во временном распоряжении принятое (бюджетное) обязательство не предусмотрено",mtError); Template.Field="Ист_"; fi; ^False; fi;
 if Расшифр[1].ТипКБК="20": if Msg: Message("Для доходов принятое (бюджетное) обязательство не предусмотрено",mtError); Template.Field="КБК"; Template.Frame=1; fi; ^False; fi;
 if ИстОбщ="2" and (Расшифр[1].ТипКБК="31" or Расшифр[1].ТипКБК="32"): if Msg: Message("Для классификации дефицитов принятое (бюджетное) обязательство не предусмотрено",mtError); Template.Field="КБК"; Template.Frame=1; fi; ^False; fi;
 if (not Договор=nil or not ДО=nil):
    if not БО=nil: if Msg: Message("Заявка уже содержит информацию об исполнении принятого (бюджетного) обязательства ("+Осн_ДокВид+" №"+Осн_ДокНом+" от "+DateToString(Осн_ДокДат)+")",mtError); Template.Field="Осн_ДокВид"; fi; ^False; fi;
    if БО=nil: if Msg: Message("Для формирования принятого (бюджетного) обязательства установите в карточке документа "+Осн_ДокВид+" №"+Осн_ДокНом+" от "+DateToString(Осн_ДокДат)+" флаг 'Учитывать как бюджетное обязательство'",mtError); Template.Field="Осн_ДокВид"; fi; ^False; fi;
 fi;
 for Iter=1..Осн_Док do
  if not Осн_Док[1].ДО=nil:
     if not БО=nil: if Msg: Message("Заявка уже содержит информацию об исполнении принятого (бюджетного) обязательства ("+Осн_Док[Iter].Вид+" №"+Осн_Док[Iter].Ном+" от "+DateToString(Осн_Док[Iter].Дат)+")",mtError); Template.Field="Вид"; Template.Frame=Iter; fi; ^False; fi;
     if БО=nil: if Msg: Message("Для формирования принятого (бюджетного) обязательства установите в карточке документа "+Осн_Док[Iter].Вид+" №"+Осн_Док[Iter].Ном+" от "+DateToString(Осн_Док[Iter].Дат)+" флаг 'Учитывать как бюджетное обязательство'",mtError); Template.Field="Вид"; Template.Frame=Iter; fi; ^False; fi;
     Break;
  fi;
 od;
 if not БО=nil or (not Призн_БО="БО.000" and not Призн_БО=""): if Msg: Message("Заявка уже содержит информацию об исполнении принятого (бюджетного) обязательства "+Призн_БО,mtError); Template.Field="Призн_БО"; fi; ^False; fi;
 if Name_A("БО.000")=" ": if Msg: Message("Неизвестный идентификатор аналитического признака (бюджетного) обязательства БО.000",mtError); fi; ^False; fi;
 if Призн_БО="": Призн_БО="БО.000"; fi;
 if Full:
    Раб.КСА.Начать;
    for Iter=1..Расшифр do
     ВД_=БухИст(Iter);
     БК_=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК");
     КОСГУ_=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"КОСГУ");
     if ВД_="1":
        Раб.КСА.Добавить(БК_+"."+ВД_+".501.13."+КОСГУ_);
        Раб.КСА.Добавить(БК_+"."+ВД_+".502.11."+КОСГУ_);
        Раб.КСА.Добавить(БК_+"."+ВД_+".502.12."+КОСГУ_);
       |not ВД_="3":
        Раб.КСА.Добавить(БК_+"."+ВД_+".506.10."+КОСГУ_);
        Раб.КСА.Добавить(БК_+"."+ВД_+".502.11."+КОСГУ_);
        Раб.КСА.Добавить(БК_+"."+ВД_+".502.12."+КОСГУ_);
     fi;
    od;
    if Раб.КСА.Закончить(True): RefreshAna; Message("Добавление новых счетов закончено"); fi;
    for Iter=1..Расшифр do
     ВД_=БухИст(Iter);
     БК_=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК");
     КОСГУ_=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"КОСГУ");
     if ВД_="1":
        СчД_ =БК_+"."+ВД_+".501.13."+КОСГУ_;
        СчК_ =БК_+"."+ВД_+".502.11."+КОСГУ_;
        СчДО_=БК_+"."+ВД_+".502.12."+КОСГУ_;
       |not ВД_="3":
        СчД_ =БК_+"."+ВД_+".506.10."+КОСГУ_;
        СчК_ =БК_+"."+ВД_+".502.11."+КОСГУ_;
        СчДО_=БК_+"."+ВД_+".502.12."+КОСГУ_;
     fi;
     if Name_S(СчД_) =" ": if Msg: Message("Неизвестный идентификатор счета "+СчД_,mtError);  Template.Field="КБК"; Template.Frame=Iter; fi; ^False; fi;
     if Name_S(СчК_) =" ": if Msg: Message("Неизвестный идентификатор счета "+СчК_,mtError);  Template.Field="КБК"; Template.Frame=Iter; fi; ^False; fi;
     if Name_S(СчДО_)=" ": if Msg: Message("Неизвестный идентификатор счета "+СчДО_,mtError); Template.Field="КБК"; Template.Frame=Iter; fi; ^False; fi;
     if not Correspond(СчД_,СчК_):  if Msg: Message("Счета не могут корреспондировать "+СчД_+"/"+СчК_,mtError);  Template.Field="КБК"; Template.Frame=Iter; fi; ^False; fi;
     if not Correspond(СчК_,СчДО_): if Msg: Message("Счета не могут корреспондировать "+СчК_+"/"+СчДО_,mtError);  Template.Field="КБК"; Template.Frame=Iter; fi; ^False; fi;
     if Msg:
        if Раб.Бюджет.ПроверитьПризнакиОбязательные(СчД_,СчК_,Trim(Расшифр[Iter].Призн_ОснДок+" "+Расшифр[Iter].Призн),ИсклПризн)=False : Template.Field="Призн_"; Template.Frame=Iter; ^False; fi;
        if Раб.Бюджет.ПроверитьПризнакиОбязательные(СчК_,СчДО_,Trim(Расшифр[Iter].Призн_ОснДок+" "+Расшифр[Iter].Призн),ИсклПризн)=False : Template.Field="Призн_"; Template.Frame=Iter; ^False; fi;
        if Раб.Бюджет.ПроверитьПризнакиСвязанные(СчД_,СчК_,Trim(Расшифр[Iter].Призн_ОснДок+" "+Расшифр[Iter].Призн),ИсклПризн)=False : Template.Field="Призн_"; Template.Frame=Iter;  ^False; fi;
        if Раб.Бюджет.ПроверитьПризнакиСвязанные(СчК_,СчДО_,Trim(Расшифр[Iter].Призн_ОснДок+" "+Расшифр[Iter].Призн),ИсклПризн)=False : Template.Field="Призн_"; Template.Frame=Iter;  ^False; fi;
       else
        if not Раб.Бюджет.ПроверитьПризнаки(СчД_,СчК_,Trim(Расшифр[Iter].Призн_ОснДок+" "+Расшифр[Iter].Призн),ИсклПризн): ^False; fi;
        if not Раб.Бюджет.ПроверитьПризнаки(СчК_,СчДО_,Trim(Расшифр[Iter].Призн_ОснДок+" "+Расшифр[Iter].Призн),ИсклПризн): ^False; fi;
     fi;
    od;
 fi;
 ^True;
end;

Func Проверить0531851(Msg:L):L;
var Iter:I;
var tmp,msg_:S;
 if not Док_ОКВ="643": if Msg: Message("Для сокращенной заявки допускается только код валюты равный 643 (рубль)",mtError); Template.Field="Док_ОКВ"; fi; ^False; fi;
 if not Осн_ДокВид="":
--    if not (Осн_ДокВид="договор" or Осн_ДокВид="госконтракт"): if Msg: Message("Для сокращенной заявки значение вида документа основания должно быть 'договор' или 'госконтракт'",mtError); Template.Field="Осн_ДокВид"; fi; ^False; fi;
--в ред. Приказа Казначейства РФ от 27.12.2011 N 19н)
 fi;
 if Осн_Док>1: if Msg: Message("Для сокращенной заявки допускается наличие только одного документа основания",mtError); Template.Field="Вид"; Template.Frame=Осн_Док; fi; ^False; fi;
 msg_="Для сокращенной заявки недопускается заполнение поля ";
 tmp=Расшифр[1].КБК;
 for Iter=1..Расшифр do
  if not tmp=Расшифр[Iter].КБК: if Msg: Message("Для сокращенной заявки допускается только один код по БК",mtError); Template.Field="КБК"; Template.Frame=Iter; fi; ^False; fi;
  if not Расшифр[Iter].КБКП="": if Msg: Message(msg_+"'Код по БК получателя'",mtError); Template.Field="КБКП"; Template.Frame=Iter; fi; ^False; fi;
  if not Расшифр[Iter].ТипКБКП="": if Msg: Message(msg_+"'Тип КБК получателя'",mtError); Template.Field="ТипКБКП"; Template.Frame=Iter; fi; ^False; fi;
  if not Расшифр[Iter].ДопКлП="": if Msg: Message(msg_+"'Код цели субсидии / субвенции получателя'",mtError); Template.Field="ДопКлП"; Template.Frame=Iter; fi; ^False; fi;
  if not Расшифр[Iter].НазнПл="": if Msg: Message(msg_+"'Назначение платежа'",mtError); Template.Field="НазнПл"; Template.Frame=Iter; fi; ^False; fi;
  if not Расшифр[Iter].Примеч="": if Msg: Message(msg_+"'Примечание'",mtError); Template.Field="Примеч"; Template.Frame=Iter; fi; ^False; fi;
 od;
 ^True;
end;

Func ПроверитьОплКБКДоговор:L;
var Iter,w,ww,z,zz:I;
var Key,ВД_,КБК_,Призн_,tmp:S;
var Flag:L;
var Сум_:N;
 if Договор=nil: ^True; fi;
 ClearVariable(Buf);
 ClearVariable(Buf2);
 ClearVariable(BufN);
 ClearVariable(BufN2);
 zz=Раб.Договор.Договор_КБК("Рег and ДатаРег<="+DateToString(ДатаДок)+" and Договор="+RecordToString(Договор),"",False);
 for Iter=1..Расшифр do
  if not Расшифр[Iter].ДО=nil:
     ВД_=БухИст(Iter);
     КБК_=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК+КОСГУ");
     Призн_="";
     ww=WordsCount(Расшифр[Iter].Призн_ОснДок," ");
     for w=1..ww do
      tmp=ExtractWord(w,Расшифр[Iter].Призн_ОснДок," ");
      if not Pos("ДОГОВОР.",tmp)=1: Призн_=Призн_+" "+tmp; fi;
     od;
     Сум_=0;
     for z=1..zz do
      Flag=True;
      if not Раб.Договор.LstВД[z]=ВД_: Flag=False; fi;
      if not Раб.Договор.LstКБК[z]=КБК_: Flag=False; fi;
      if Flag:
         tmp=Trim(Раб.Договор.LstОбщПризн1[z]+" "+Раб.Договор.LstОбщПризн2[z]);
         tmp=Trim(tmp+" "+Раб.Договор.LstПризн[z]);
         Flag=Раб.Бюджет2005.ПроверитьНаборСлов(Призн_," ",tmp," ","");
      fi;
      if Flag: Сум_=Раб.Договор.LstСум[z]; Призн_=tmp; Break; fi;
     od;
     Призн_=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(Trim(Призн_)," ","&");
     Key=ВД_+"#"+КБК_+"#"+Призн_;
     z=SearchInArray(Buf,Key,True);
     if z=-1:
        z=InsertInArraySort(Buf,Key);
        InsertInArray(Buf2,z,Str(Iter));
        InsertInArray(BufN ,z,Сум_);
        InsertInArray(BufN2,z,Расшифр[Iter].Сум);
       else
        BufN2[z]=BufN2[z]+Расшифр[Iter].Сум;
     fi;
  fi; --if not Расшифр[Iter].ДО=nil:
 od; --for Iter=1..Расшифр do
 ww=LengthOfArray(Buf);
 for w=1..ww do
  Раб.Договор.exclЗачетАв=True;
  Раб.Договор.Договор_Оплата(Договор,Dat(1,1,Year(ДатаДок)),Dat(1,1,Year(ДатаДок)+1)-1,ExtractWord(1,Buf[w],"#"),ExtractWord(2,Buf[w],"#"),ExtractWord(3,Buf[w],"#"),0,False,False,False);
  if Round(BufN[w],2)<Round(Раб.Договор.lstСум[1]+BufN2[w],2): Message("Сумма оплат по ("+ExtractWord(1,Buf[w],"#")+" "+ExtractWord(2,Buf[w],"#")+" {"+ExtractWord(3,Buf[w],"#")+"}) с начала года "+Format("%.2N",Раб.Договор.lstСум[1]+BufN2[w])+" превышает сумму документа ("+Осн_ДокВид+") на текущий год "+Format("%.2N",BufN[w])+" на "+Format("%.2N",Раб.Договор.lstСум[1]+BufN2[w]-BufN[w]),mtError); КонтрольОстАв=-1.11; Template.Field="КБК"; Template.Frame=Int(Buf2[w]); ^False; fi;
 od;
 ^True;
end;

Func Проверить:L;
var Iter,i:I;
var isДО:L;
var tmp,ПризнДоговор:S;
var Rec: Record;
var НДС_:N;
var ВД_,БК_,КОСГУ_:S;
var Flag:L;
 Refresh;
 isДО=False;
 ПризнДоговор="";
 КонтрольОстАв=0;
 Flag=Рекв.РПО_ТипУчр="КУ" or Рекв.РПО_ТипУчр="";
 if НомерДок="": Message("Заполните номер заявки",mtError); Template.Field="НомерДок"; ^False; fi;
 if ДатаДок=1.1.100: Message("Заполните дату заявки",mtError); Template.Field="ДатаДок"; ^False; fi;
 if Рекв=nil or Клиент="": Message("Заполните наименование клиента",mtError); Template.Field="Клиент"; ^False; fi;
 if Банк=nil: Message("Заполните поле 'Федеральное казначейство, орган Федерального казначейства'",mtError); Template.Field="Банк.РПО_ОФК_Имя"; ^False; fi;
 if Банк.РПО_КодБюдж="1" and Рекв.РПО_КБП="": Message("Заполните код клиента по сводному реестру",mtError); Template.Field="КБП"; ^False; fi;
 if Банк.РПО_ЛСчет="": Message("Заполните номер лицевого счета",mtError); Template.Field="Банк.РПО_ЛСчет"; ^False; fi;
 if Призн_ЛС="": Message("Введите аналитический признак лицевого счета",mtError); Template.Field="Призн_ЛС"; ^False; fi;
 if Name_A(Призн_ЛС)=" ": Message("Неизвестный идентификатор аналитического признака лицевого счета '"+Призн_ЛС+"'",mtError); Template.Field="Призн_ЛС"; ^False; fi;
 if Глава="" and Flag: Message("Заполните главу по БК",mtError); Template.Field="Глава"; ^False; fi;
-- if not Глава="" and not Flag and ver>=7: Message("Глава по БК для бюджетного (автономного) учреждения не заполняется",mtError); Template.Field="Глава"; ^False; fi;
 if ГРБС="": 
    if Flag:
       Message("Заполните наименование главного распорядителя бюджетных средств, главного администратора источников финансирования дефицита бюджета",mtError);
      else
       Message("Заполните наименование органа, осуществляющего функции и полномочия учредителя",mtError);
    fi;
    Template.Field="ГРБС"; 
    ^False;
 fi;
 if НаимБюдж="" and Flag: Message("Заполните наименование бюджета",mtError); Template.Field="НаимБюдж"; ^False; fi;
 if not НаимБюдж="" and not Flag and ver>=7: Message("Наименование бюджета для бюджетного (автономного) учреждения не заполняется",mtError); Template.Field="НаимБюдж"; ^False; fi;
 if Банк.РПО_КодБюдж="": Message("Заполните код бюджета",mtError); ExecuteProc("Инфо.БанкСчета.Вызвать",Банк,"РПО_КодБюдж",0); ^False; fi;
 if ФинОрган="" and (Flag or ver<7): Message("Заполните поле 'Финансовый орган'",mtError); Template.Field="ФинОрган"; ^False; fi;
 if not ФинОрган="" and not Flag and ver>=7: Message("Финансовый орган для бюджетного (автономного) учреждения не заполняется",mtError); Template.Field="ФинОрган"; ^False; fi;
 if Банк.РПО_ОФК_Код="": Message("Заполните код федерального казначейства, органа федерального казначейства",mtError); Template.Field="Банк.РПО_ОФК_Код"; ^False; fi;
 if ДатаИспол=1.1.100 and ДатаДок<10.08.2009: Message("Заполните предельную дату исполнения",mtError); Template.Field="ДатаИспол"; ^False; fi;
 if not ДатаИспол=1.1.100 and not Flag and ver>=7: Message("Предельная дата исполнения не заполняется для бюджетного (автономного) учреждения",mtError); Template.Field="ДатаИспол"; ^False; fi;
 if ДатаИспол<ДатаДок and not ДатаИспол=1.1.100: Message("Предельная дата исполнения не может быть ранее даты документа",mtError); Template.Field="ДатаИспол"; ^False; fi;
 if not НомерБО="" and not Flag and ver>=7: Message("Учетный номер обязательства для бюджетного (автономного) учреждения не заполняется",mtError); Template.Field="НомерБО"; ^False; fi;
 if not GUID_FKБО="" and not Flag and ver>=7: Message("Идентификатор бюджетного обязательства для бюджетного (автономного) учреждения не заполняется",mtError); Template.Field="GUID_FKБО"; ^False; fi;
 if not НомерБО="" and not GUID_FKБО="":  Message("Идентификатор бюджетного обязательства не заполняется, в случае, если заполнен учетный номер обязательства",mtError); Template.Field="GUID_FKБО"; ^False; fi;
 if not Призн_БО="" and Name_A(Призн_БО)=" ": Message("Неизвестный идентификатор аналитического признака бюджетного обязательства '"+Призн_БО+"'",mtError); Template.Field="Призн_БО"; ^False; fi;
 if not GUID_FKБО="" and not fGUID_FK and not БО.GUID_FK_Разреш: Message("Идентификатор бюджетного обязательства не должен заполняется",mtError); Template.Field="GUID_FKБО"; ^False; fi;
 if not ФАИП=nil and Name_A(Призн_ФАИП)=" ": Message("Неизвестный идентификатор аналитического признака ФАИП '"+Призн_ФАИП+"'",mtError); Template.Field="ФАИП.Код"; ^False; fi;
 if Round(Док_Сум,2)=0: Message("Заполните сумму в валюте выплаты",mtError); Template.Field="Док_Сум"; ^False; fi;
 if Док_ОКВ="": Message("Заполните код валюты по ОКВ",mtError); Template.Field="Док_ОКВ"; ^False; fi;
 if not Док_ОКВ="643" and Round(Док_СумРуб,2)=0: Message("Заполните сумму",mtError); Template.Field="Док_СумРуб"; ^False; fi;
 if Док_ОчрПл="": Message("Заполните очередность платежа",mtError); Template.Field="Док_ОчрПл"; ^False; fi;
 if Док_ВидПл="": Message("Заполните вид платежа",mtError); Template.Field="Док_ВидПл_"; ^False; fi;
 if Док_НазнПл="": Message("Заполните назначение платежа (примечание)",mtError); Template.Field="Док_НазнПл"; ^False; fi;
 if Length(Док_НазнПл)>210: 
    if EnqOkCancel("Длина назначения платежа ("+Str(Length(Док_НазнПл))+") превысило разрешенную длину (210) символов. Игнорировать ?",mtWarning)=cmCancel: Template.Field="Док_НазнПл"; ^False; fi;
 fi;
 НДС_=Round(Док_СумНДС*100/(Док_Сум-Док_СумНДС),2);
 if not (НДС_=18 or НДС_=10 or НДС_=0) or (НДС_=0 and not Round(Док_СумНДС,2)=0):
    if EnqOkCancel("Ставка НДС "+Str(НДС_,2)+"% указанная в заявке, отличается от допустимой 18%, 10%, 0%^MИгнорировать ?",mtWarning)=cmCancel: Template.Field="Док_СумНДС"; ^False; fi;
 fi;
 if Match(Док_НазнПл,"*аванс*"):
    if not Док_Аванс:
       if EnqOkCancel("Внимание! В назначение платежа найдено упоминание об авансе, однако в документе НЕ УСТАНОВЛЕН признак авансового платежа ^MИгнорировать данное предпуреждение ?",mtWarning)=cmCancel: Template.Field="Док_Аванс"; ^False; fi;
    fi;
   else
    if Док_Аванс:
       if EnqOkCancel("Внимание! В документе УСТАНОВЛЕН признак авансового платежа, однако в назначение платежа аванс не упоминается^MИгнорировать данное предпуреждение ?",mtWarning)=cmCancel: Template.Field="Док_Аванс"; ^False; fi;
    fi;
 fi;
 if ДолжнРук="" and ДатаДок<10.08.2009: Message("Заполните должность руководителя",mtError); Template.Field="ДолжнРук"; ^False; fi;
 if ФИОРук="": Message("Заполните ФИО руководителя",mtError); Template.Field="ФИОРук"; ^False; fi;
 if ДолжнБух="" and not ф0531851: Message("Заполните должность бухгалтера",mtError); Template.Field="ДолжнБух"; ^False; fi;
 if ФИОБух="": Message("Заполните ФИО бухгалтера",mtError); Template.Field="ФИОБух"; ^False; fi;
 if ДатаПодписи=1.1.100: Message("Заполните дату подписи",mtError); Template.Field="ДатаПодписи"; ^False; fi;
 if ДатаПодписи<ДатаДок: Message("Дата подписи не может быть ранее даты документа",mtError); Template.Field="ДатаПодписи"; ^False; fi;
 if not (Осн_ДокВид="" and Осн_ДокНом="" and Осн_ДокДат=1.1.100 and Осн_ДокПредм=""):
    if Осн_ДокВид="": Message("Заполните вид документа - основания",mtError); Template.Field="Осн_ДокВид"; ^False; fi;
    if Осн_ДокНом="": Message("Заполните номер документа - основания",mtError); Template.Field="Осн_ДокНом"; ^False; fi;
--    if Осн_ДокДат=1.1.100: Message("Заполните дату документа - основания",mtError); Template.Field="Осн_ДокДат"; ^False; fi;
    if Осн_ДокПредм="" and not Ф0531851: Message("Заполните предмет документа - основания",mtError); Template.Field="Осн_ДокПредм"; ^False; fi;
    if Осн_ДокДат>ДатаДок: Message("Дата документа - основания не может превышать дату заявки",mtError); Template.Field="Осн_ДокДат"; ^False; fi;
 fi;
 СоотвОснДокРасшифр;
 tmp=ОбновитьОснДок;
 if not ДО=nil:
    if not RecordExists(Раб.Договор.crdДО,ДО): Message("Документ - основание "+Осн_ДокВид+" №"+Осн_ДокНом+" от "+DateToString(Осн_ДокДат)+" не найден в картотеке",mtError); Template.Field="Осн_ДокВид"; ^False; fi;
    if not ДО.Рег: Message("Документ - основание "+Осн_ДокВид+" №"+Осн_ДокНом+" от "+DateToString(Осн_ДокДат)+" не зарегистрован",mtError); OpenBlank(Раб.Договор.blnДО,True,ДО); Template.Field="Осн_ДокВид"; ^False; fi;
    if ДО.Аннул: Message("Документ - основание "+Осн_ДокВид+" №"+Осн_ДокНом+" от "+DateToString(Осн_ДокДат)+" аннулирован",mtError); OpenBlank(Раб.Договор.blnДО,True,ДО); Template.Field="Осн_ДокВид"; ^False; fi;
    if not Док_Аванс=ДО.Аванс: Message("Признак авансового платежа отличен от документа - основания",mtError); Template.Field="Док_Аванс"; ^False; fi;
    if ДО.УчетБО: Rec=ДО.БО; else Rec=ДО.Договор.БО; fi;
    if Rec=nil:
       if not Призн_БО="": Message("Для документа - основания "+Осн_ДокВид+" №"+Осн_ДокНом+" от "+DateToString(Осн_ДокДат)+" бюджетное обязательство не предусмотрено, удалите признак бюджетного обязательства",mtError); Template.Field="Призн_БО"; ^False; fi;
      else
       if not Rec=nil and Призн_БО="":
          if EnqOkCancel("Для документа - основания "+Осн_ДокВид+" №"+Осн_ДокНом+" от "+DateToString(Осн_ДокДат)+" существует бюджетное обязательство, проставить признак данного обязательства в заявку ?",mtWarning)=cmOk:
             ЗаполнитьБО(Rec,False);
          fi;
          if not Rec=nil and Призн_БО="": Message("Заполните признак бюджетного обязательства",mtError); Template.Field="Призн_БО"; ^False; fi;
       fi;
       if not Призн_БО=CardFileRecSign(Раб.Договор.crdБО,"Признак","БО",Rec,""): Message("Признак бюджетного обязательства "+Призн_БО+" указанный в заявке отличается от признака бюджетного обязательства документа-основания "+CardFileRecSign(Раб.Договор.crdБО,"Признак","БО",Rec,""),mtError); Template.Field="Призн_БО"; ^False; fi;
    fi;
    if SearchInArray(Расшифр[].ДО,ДО,False)=-1: Message("Не найдена расшифровка (раздел 5) для документа - основания: "+Осн_ДокВид+" №"+Осн_ДокНом+" от "+DateToString(Осн_ДокДат)+" не найдена",mtError); Template.Field="Осн_ДокВид"; ^False; fi;
    isДО=True;
    ПризнДоговор=ExtractWords(1,3,ДО.Признак,".");
 fi;
 if not Договор=nil:
    if not Договор.Рег: Message("Договор должен быть зарегистрован",mtError); OpenBlank(Раб.Договор.blnДоговор,True,Договор); Template.Field="Осн_ДокВид"; ^False; fi;
    if Договор.ДатаРег>ДатаДок: Message("Дата принятия к учету документа - основания "+Осн_ДокВид+" №"+Осн_ДокНом+" от "+DateToString(Осн_ДокДат)+" не может превышать дату заявки",mtError); Template.Field="Осн_ДокВид"; Template.Frame=Iter; ^False; fi;
    if not Рекв=Договор.Учр: Message("Клиент по договору отличен от клиента в заявке",mtError); Template.Field="Клиент"; ^False; fi;
    if not Док_ОКВ=Договор.ОКВ and not Договор.ОКВ="": Message("Код валюты по ОКВ по договору ("+Договор.ОКВ+") отличен от кода ОКВ в заявке ("+Док_ОКВ+")",mtError); Template.Field="Док_ОКВ"; ^False; fi;
    if Док_Аванс and Round(Договор.СумАв,2)=0 and not Flag:
       if EnqOkCancel("Аванс по договору не предусмотрен, игнорировать ?",mtWarning)=cmCancel: Template.Field="Док_Аванс"; ^False; fi;
    fi;
    if not РеквП=Договор.Контр:
       for Iter=1..Договор.Контр2 do
        if РеквП=Договор.Контр2[Iter].Контр: Break; fi;
       od;
       if Iter>Договор.Контр2: Message("Контрагент по договору отличен от контрагента в заявке",mtError); Template.Field="РеквП_"; ^False; fi;
    fi;
    if Договор.Контр2=0:
       if not БанкП=Договор.Контр_Банк:
          if EnqOkCancel("Банковские реквизиты контрагента по договору отличны от реквизитов контрагента в заявке, игнорировать ?",mtWarning)=cmCancel:
             Template.Field="БанкП.РСчет";
             ^False;
          fi;
       fi;
      else
       for Iter=1..Договор.Контр2 do
        if РеквП=Договор.Контр2[Iter].Контр:
           if not БанкП=Договор.Контр2[Iter].Контр_Банк:
              if EnqOkCancel("Банковские реквизиты контрагента по договору отличны от реквизитов контрагента в заявке, игнорировать ?",mtWarning)=cmCancel:
                 Template.Field="БанкП.РСчет";
                 ^False;
              fi;
           fi;
           Break;
        fi;
       od;
    fi;
 fi;
 if not ДО=nil or not Договор=nil:
    if Round(Осн_ДокСум,2)<Round(Осн_ДокОпл+Осн_ДокОплТек_,2): Message("Сумма оплат "+Format("%.2N",Осн_ДокОпл+Осн_ДокОплТек_)+" превышает сумму документа ("+Осн_ДокВид+") "+Format("%.2N",Осн_ДокСум)+" на "+Format("%.2N",Осн_ДокОпл+Осн_ДокОплТек_-Осн_ДокСум),mtError); Template.Field="Осн_ДокОпл_"; ^False; fi;
    --проверка оплат с начала года
    if not Договор=nil:
       Раб.Договор.exclЗачетАв=True;
       Раб.Договор.Договор_СуммаСроки(Договор,Dat(1,1,Year(ДатаДок)+1));
       Раб.Договор.Договор_Оплата(Договор,Dat(1,1,Year(ДатаДок)),Dat(1,1,Year(ДатаДок)+1)-1,"","","",0,False,False,False);
       if Round(Раб.Договор.СумТек,2)<Round(Раб.Договор.lstСум[1]+Осн_ДокОплТек_,2): Message("Сумма оплат с начала года "+Format("%.2N",Раб.Договор.lstСум[1]+Осн_ДокОплТек_)+" превышает сумму документа на текущий год ("+Осн_ДокВид+") "+Format("%.2N",Раб.Договор.СумТек)+" на "+Format("%.2N",Раб.Договор.lstСум[1]+Осн_ДокОплТек_-Раб.Договор.СумТек),mtError); КонтрольОстАв=-1.11; ^False; fi;
    fi;
 fi;
 if Р2:
    for Iter=1..Осн_Док do
     if not (Осн_Док[Iter].Вид="" and Осн_Док[Iter].Ном="" and Осн_Док[Iter].Дат=1.1.100 and Осн_Док[Iter].Предм="") and Осн_Док>1:
        if Осн_Док[Iter].Вид="": Message("Заполните вид документа - основания",mtError); Template.Field="Вид"; Template.Frame=Iter; ^False; fi;
        if Осн_Док[Iter].Ном="": Message("Заполните номер документа - основания",mtError); Template.Field="Ном"; Template.Frame=Iter; ^False; fi;
   --     if Осн_Док[Iter].Дат=1.1.100: Message("Заполните дату документа - основания",mtError); Template.Field="Дат"; Template.Frame=Iter; ^False; fi;
        if Осн_Док[Iter].Предм="" and not Ф0531851: Message("Заполните предмет документа - основания",mtError); Template.Field="Предм"; Template.Frame=Iter; ^False; fi;
        if Осн_Док[Iter].Дат>ДатаДок: Message("Дата документа - основания не может превышать дату заявки",mtError); Template.Field="Дат"; Template.Frame=Iter; ^False; fi;
     fi;
     if not Осн_Док[Iter].ДО=nil:
        if not RecordExists(Раб.Договор.crdДО,Осн_Док[Iter].ДО): Message("Документ - основание "+Осн_Док[Iter].Вид+" №"+Осн_Док[Iter].Ном+" от "+DateToString(Осн_Док[Iter].Дат)+" не найден в картотеке",mtError); Template.Field="Вид"; Template.Frame=Iter; ^False; fi;
        if not Осн_Док[Iter].ДО.Рег: Message("Документ - основание "+Осн_Док[Iter].Вид+" №"+Осн_Док[Iter].Ном+" от "+DateToString(Осн_Док[Iter].Дат)+" не зарегистрован",mtError); OpenBlank(Раб.Договор.blnДО,True,Осн_Док[Iter].ДО); Template.Field="Вид"; Template.Frame=Iter; ^False; fi;
        if Осн_Док[Iter].ДО.ДатаРег>ДатаДок: Message("Дата принятия к учету документа - основания "+Осн_Док[Iter].Вид+" №"+Осн_Док[Iter].Ном+" от "+DateToString(Осн_Док[Iter].Дат)+" не может превышать дату заявки",mtError); Template.Field="Вид"; Template.Frame=Iter; ^False; fi;
        if Осн_Док[Iter].ДО.Аннул: Message("Документ - основание "+Осн_Док[Iter].Вид+" №"+Осн_Док[Iter].Ном+" от "+DateToString(Осн_Док[Iter].Дат)+" аннулирован",mtError); OpenBlank(Раб.Договор.blnДО,True,Осн_Док[Iter].ДО); Template.Field="Вид"; Template.Frame=Iter; ^False; fi;
        if not Док_Аванс=Осн_Док[Iter].ДО.Аванс: Message("Признак авансового платежа отличен от документа - основания",mtError); Template.Field="Док_Аванс"; ^False; fi;
        if Iter>1:
           if not Осн_Док[Iter-1].ДО=nil:
              if not Осн_Док[Iter].ДО.Контр=Осн_Док[Iter-1].ДО.Контр: Message("Поставщик по "+Осн_Док[Iter].Вид+" №"+Осн_Док[Iter].Ном+" от "+DateToString(Осн_Док[Iter].Дат)+" отличается от указанного в "+Осн_Док[Iter-1].Вид+" №"+Осн_Док[Iter-1].Ном+" от "+DateToString(Осн_Док[Iter-1].Дат),mtError); Template.Field="Вид"; Template.Frame=Iter; ^False; fi;
              if not Осн_Док[Iter].ДО.Контр_Банк=Осн_Док[Iter-1].ДО.Контр_Банк: Message("Банковский реквизит поставщика по "+Осн_Док[Iter].Вид+" №"+Осн_Док[Iter].Ном+" от "+DateToString(Осн_Док[Iter].Дат)+" отличаются от указанных в "+Осн_Док[Iter-1].Вид+" №"+Осн_Док[Iter-1].Ном+" от "+DateToString(Осн_Док[Iter-1].Дат),mtError); Template.Field="Вид"; Template.Frame=Iter; ^False; fi;
              if not Осн_Док[Iter].ДО.Договор=Осн_Док[Iter-1].ДО.Договор: Message("Договор по "+Осн_Док[Iter].Вид+" №"+Осн_Док[Iter].Ном+" от "+DateToString(Осн_Док[Iter].Дат)+" отличается от указанного в "+Осн_Док[Iter-1].Вид+" №"+Осн_Док[Iter-1].Ном+" от "+DateToString(Осн_Док[Iter-1].Дат),mtError); Template.Field="Вид"; Template.Frame=Iter; ^False; fi;
           fi;
        fi;
        if not Осн_Док[Iter].ДО=nil:
           if Round(Осн_Док[Iter].Сум,2)<Round(Осн_Док[Iter].Опл+Осн_Док[Iter].ОплТек,2): Message("Сумма оплат документа "+Format("%.2N",Осн_Док[Iter].Опл+Осн_Док[Iter].ОплТек)+" превышает сумму документа "+Format("%.2N",Осн_Док[Iter].Сум)+" на "+Format("%.2N",Осн_Док[Iter].Опл+Осн_Док[Iter].ОплТек-Осн_Док[Iter].Сум),mtError); Template.Field="ОплТек"; Template.Frame=Iter; ^False; fi;
           --проверка оплат с начала года
           Раб.Договор.ДО_Оплата(Осн_Док[Iter].ДО,Dat(1,1,Year(ДатаДок)+1),"","","",False,False,False);
           if Round(Осн_Док[Iter].Сум,2)<Round(Раб.Договор.lstСум[1]+Осн_Док[Iter].ОплТек,2): Message("Сумма оплат документа с начала года "+Format("%.2N",Раб.Договор.lstСум[1]+Осн_Док[Iter].ОплТек)+" превышает сумму документа "+Format("%.2N",Осн_Док[Iter].Сум)+" на "+Format("%.2N",Раб.Договор.lstСум[1]+Осн_Док[Iter].ОплТек-Осн_Док[Iter].Сум),mtError); Template.Field="ОплТек"; Template.Frame=Iter; ^False; fi;
        fi;
        if SearchInArray(Расшифр[].ДО,Осн_Док[Iter].ДО,False)=-1: Message("Не найдена расшифровка (раздел 5) для документа - основания: "+Осн_Док[Iter].Вид+" №"+Осн_Док[Iter].Ном+" от "+DateToString(Осн_Док[Iter].Дат),mtError); Template.Field="Вид"; Template.Frame=Iter; ^False; fi;
        isДО=True;
        if ПризнДоговор="":
           ПризнДоговор=ExtractWords(1,3,Осн_Док[Iter].ДО.Признак,".");
        fi;
        if Осн_Док[Iter].ДО.УчетБО: Rec=Осн_Док[Iter].ДО.БО; else Rec=Осн_Док[Iter].ДО.Договор.БО; fi;
        if Rec=nil:
           if not Призн_БО="": Message("Для документа - основания "+Осн_Док[Iter].Вид+" №"+Осн_Док[Iter].Ном+" от "+DateToString(Осн_Док[Iter].Дат)+" бюджетное обязательство не предусмотрено, удалите признак бюджетного обязательства",mtError); Template.Field="Призн_БО"; ^False; fi;
          else
           if Призн_БО="":
              if EnqOkCancel("Для документа - основания "+Осн_Док[Iter].Вид+" №"+Осн_Док[Iter].Ном+" от "+DateToString(Осн_Док[Iter].Дат)+" существует бюджетное обязательство, проставить признак данного обязательства в заявку ?",mtWarning)=cmOk:
                 ЗаполнитьБО(Rec,False);
              fi;
              if Призн_БО="": Message("Заполните признак бюджетного обязательства",mtError); Template.Field="Призн_БО"; ^False; fi;
           fi;
           if not Призн_БО=CardFileRecSign(Раб.Договор.crdБО,"Признак","БО",Rec,""): Message("Признак бюджетного обязательства "+Призн_БО+" указанный в заявке отличается от признака бюджетного обязательства "+CardFileRecSign(Раб.Договор.crdБО,"Признак","БО",Rec,"")+" документа-основания "+Осн_Док[Iter].Вид+" №"+Осн_Док[Iter].Ном+" от "+DateToString(Осн_Док[Iter].Дат),mtError); Template.Field="Призн_БО"; ^False; fi;
        fi;
        if ver>=6:
           if Осн_Док[Iter].ДО.Договор=nil:
              if not Договор=nil: Message("Для документа - основания "+Осн_Док[Iter].Вид+" №"+Осн_Док[Iter].Ном+" от "+DateToString(Осн_Док[Iter].Дат)+" договор не предусмотрен, удалите реквизиты договора",mtError); Template.Field="Осн_ДокВид"; ^False; fi;
             else
              if Договор=nil:
                 if EnqOkCancel("Для документа - основания "+Осн_Док[Iter].Вид+" №"+Осн_Док[Iter].Ном+" от "+DateToString(Осн_Док[Iter].Дат)+" существует договор, проставить реквизиты данного договора в заявку ?",mtWarning)=cmOk:
                    ЗаполнитьДоговор(Осн_Док[Iter].ДО.Договор,False);
                 fi;
              fi;
              if not Договор=nil:
                 if not Договор=Осн_Док[Iter].ДО.Договор: Message("Запись договора "+RecordToString(Договор)+" указанная в заявке отличается от договора "+RecordToString(Осн_Док[Iter].ДО.Договор)+" по документу-основанию "+Осн_Док[Iter].Вид+" №"+Осн_Док[Iter].Ном+" от "+DateToString(Осн_Док[Iter].Дат),mtError); Template.Field="Вид"; Template.Frame=Iter; ^False; fi;
              fi;
           fi;
        fi;
     fi;
    od;
 fi;
 Flag=False;
 if not БО=nil:
    if not БО.Учитывать: Message("Обязательство (бюджетное) должно быть принято к учету",mtError); OpenBlank(Раб.Договор.blnБО,True,БО); Template.Field="НомерБО"; ^False; fi;
    if not Рекв=БО.Рекв: Message("Клиент по обязательству (бюджетному) отличен от клиента в заявке",mtError); Template.Field="Клиент"; ^False; fi;
    if not БО.ТекГод=Year(ДатаДок): Message("Текущий год обязательства "+Str(БО.ТекГод)+" должен быть  равен текущему году заявки "+Str(Year(ДатаДок))+"^MВыполните процедуру перерегистрации обязательства на очередной год",mtError); Template.Field="НомерБО"; ^False; fi;
    if БО.ДатаДок>ДатаДок: Message("Дата заявки "+DateToString(ДатаДок)+" не может быть ранее даты бюджетного обязательства "+DateToString(БО.ДатаДок),mtError); Template.Field="НомерБО"; ^False; fi;
    if БО.Рег:
       if БО.РегНомер="": Message("В бюджетном обязательстве заполните учетный номер",mtError); OpenBlank(Раб.Договор.blnБО,True,БО); Template.Field="НомерБО"; ^False; fi;
      else
       if БО.УчетФК and БО.GUID_FK="" and (fGUID_FK or БО.GUID_FK_Разреш): Message("В бюджетном обязательстве заполните идентификатор документа",mtError); OpenBlank(Раб.Договор.blnБО,True,БО); Template.Field="GUID_FKБО"; ^False; fi;
    fi;
    if not GUID_FKБО="" and (fGUID_FK or БО.GUID_FK_Разреш):
        if БО.УчетФК and not БО.GUID_FK=GUID_FKБО: Message("Идентификатор бюджетного обязательства '"+БО.GUID_FK+"' отличается от указанного в заявке '"+GUID_FKБО+"'",mtError); Template.Field="GUID_FKБО"; ^False; fi;
       |not НомерБО="":
        if (БО.Рег or БО.ТипДок>0) and not БО.РегНомер=НомерБО: Message("Учетный номер обязательства '"+БО.РегНомер+"' отличается от указанного в заявке '"+НомерБО+"'",mtError); Template.Field="НомерБО"; ^False; fi;
       |True:
        if БО.Рег or (БО.УчетФК and (fGUID_FK or БО.GUID_FK_Разреш)): Message("Заполните идентификатор бюджетного обязательства или учетный номер обязательства",mtError); Template.Field="НомерБО"; ^False; fi;
    fi;
    if fРегБО:
       if БО.УчетФК and (БО.РегНомер="" or (not БО.Рег and БО.ТипДок=0) or (not БО.Учитывать and БО.ТипДок>0)): Message("Бюджетное обязательство должно быть зарегистрировано в ФК (получен учетный номер)",mtError); Template.Field="НомерБО"; ^False; fi;
       if НомерБО="": НомерБО=БО.РегНомер; fi;
    fi;
    if not Призн_БО="БО."+БО.Признак: Призн_БО="БО."+БО.Признак; fi;
--    if not Раб.Бюджет2005.АктуалБО(БО,ДатаДок)=БО: Message("Выбранное бюджетное обязательство не актуально (перевыберите БО)",mtError); Template.Field="НомерБО"; ^False; fi;
    if not Док_ОКВ=БО.Осн_ДокОКВ and not БО.Осн_ДокОКВ="": Message("Код валюты по ОКВ по обязательству ("+БО.Осн_ДокОКВ+") отличен от кода ОКВ в заявке ("+Док_ОКВ+")",mtError); Template.Field="Док_ОКВ"; ^False; fi;
    if Док_Аванс and Round(БО.Осн_ДокСумАв,2)=0: 
       if EnqOkCancel("Аванс по обязательству не предусмотрен, игнорировать ?",mtWarning)=cmCancel: Template.Field="Док_Аванс"; ^False; fi;
       Flag=True;
    fi;
    if not БО.Расшифр[1].ФАИП=nil and ФАИП=nil:
       if EnqOkCancel("Бюджетное обязательство сформировано по ФАИПу, однако в заявке ФАИП не указан, игнорировать ?",mtWarning)=cmCancel: Template.Field="ФАИП.Код"; ^False; fi;
    fi;
    if БО.Расшифр[1].ФАИП=nil and not ФАИП=nil:
       if EnqOkCancel("В бюджетном обязательстве ФАИП не указан, однако в заявке  указан ФАИП, игнорировать ?",mtWarning)=cmCancel: Template.Field="ФАИП.Код"; ^False; fi;
    fi;
    if not БО.Расшифр[1].ФАИП=nil and not ФАИП=nil:
       if not БО.Расшифр[1].ФАИП.Код=ФАИП.Код: Message("Код ФАИП по обязательству ("+БО.Расшифр[1].ФАИП.Код+") отличен от кода указанного в заявке ("+ФАИП.Код+")",mtError); Template.Field="ФАИП.Код"; ^False; fi;
    fi;
    if Договор=nil: --реквизиты будут проверены по договору (в договоре можеть быть несколько реквизитов а в БО только один)
       if БО.Раздел2=0:
          if not РеквП=БО.РеквП and not БО.РеквП=nil: Message("Контрагент по обязательству отличен от контрагента в заявке",mtError); Template.Field="РеквП_"; ^False; fi;
          if not БанкП=БО.БанкП and not БО.БанкП=nil:
             if EnqOkCancel("Банковские реквизиты контрагента по обязательству отличны от реквизитов контрагента в заявке, игнорировать ?",mtWarning)=cmCancel:
                Template.Field="БанкП.РСчет";
                ^False;
             fi;
          fi;
         else
          for i=1..БО.Раздел2 do
           if РеквП=БО.Раздел2[i].РеквП: Break; fi;
          od;
          if i>БО.Раздел2: Message("Контрагент по обязательству отличен от контрагента в заявке",mtError); Template.Field="РеквП_"; ^False; fi;
          for i=1..БО.Раздел2 do
           if РеквП=БО.Раздел2[i].РеквП and БанкП=БО.Раздел2[i].БанкП: Break; fi;
          od;
          if i>БО.Раздел2:
             if EnqOkCancel("Банковские реквизиты контрагента по обязательству отличны от реквизитов контрагента в заявке, игнорировать ?",mtWarning)=cmCancel:
                Template.Field="БанкП.РСчет";
                ^False;
             fi;
          fi;
       fi;
    fi;
--    for Iter=1..Расшифр do
--     if not Расшифр[Iter].Ист="" and not Расшифр[Iter].КБК="" and not Расшифр[Iter].ТипКБК="":
--        for i=1..БО.Расшифр do
--         if Расшифр[Iter].Ист=БО.Расшифр[i].Ист and Расшифр[Iter].КБК=БО.Расшифр[i].КБК and Расшифр[Iter].ТипКБК=БО.Расшифр[i].ТипКБК: Break; fi;
--        od;
--        if i>БО.Расшифр: Message("КБК "+Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК")+"."+Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"КОСГУ")+" не найдено в бюджетном обязательстве "+Призн_БО,mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
--     fi;
--    od;
 fi;
 if РеквП=nil or РеквП_="": Message("Заполните наименование / фамилия, имя, отчество",mtError); Template.Field="РеквП_"; ^False; fi;
 if Призн_К="": Message("Заполните аналитический признак контрагента",mtError); Template.Field="Призн_К"; ^False; fi;
 if Name_A(Призн_К)=" ": Message("Неизвестный идентификатор аналитического признака контрагента '"+Призн_К+"'",mtError); Template.Field="Призн_К"; ^False; fi;
 if not CardFileRecSign("Контрагент","Признак","К",РеквП,"")=Призн_К:
    if EnqOkCancel("Аналитический признак контрагента по реквизитам ("+CardFileRecSign("Контрагент","Признак","К",РеквП,"")+") отличен от выбранного признака ("+Призн_К+")^MИгнорировать ?",mtWarning)=cmCancel: Template.Field="Призн_К"; ^False; fi;
 fi;
 if РеквП.ИНН="" and РеквП.Тип=0: Message("Заполните ИНН контрагента",mtError); Template.Field="РеквП.ИНН"; ^False; fi;
 if РеквП.КПП="" and РеквП.Тип=0: Message("Заполните КПП контрагента",mtError); Template.Field="РеквП.КПП"; ^False; fi;
 if БанкП=nil: Message("Заполните банковские реквизиты контрагента",mtError); Template.Field="БанкП.РСчет"; ^False; fi;
 if БанкП_="": Message("Заполните наименование банка контрагента",mtError); Template.Field="БанкП_"; ^False; fi;
 if БанкП.БИК="": Message("Заполните БИК банка контрагента",mtError); Template.Field="БанкП.БИК"; ^False; fi;
 i=Раб.Вспом.Справ_БИК.Контроль(БанкП,"банковских реквизитов контрагента");
 if i=-2: Template.Field="БанкП.БИК"; ^False;
   |i=-6: Template.Field="БанкП.КСчет"; ^False;
   |i< 0: Template.Field="БанкП_"; ^False;
 fi;

 if isДО:
    if Осн_Док=0:
       if not ДО.Контр=РеквП: Message("Реквизиты контрагента в заявке отличны от реквизитов в документе - основании",mtError); Template.Field="Осн_ДокВид"; ^False; fi;
       if not ДО.Контр_Призн=Призн_К: Message("Аналитический признак контрагента ("+Призн_К+") в заявке отличен от признака контрагента в документе - основании ("+ДО.Контр_Призн+")",mtError); Template.Field="Осн_ДокВид"; ^False; fi;
       if not ДО.Контр_Банк=БанкП: Message("Банковские реквизиты контрагента в заявке отличны от реквизитов в документе - основании",mtError); Template.Field="Осн_ДокВид"; ^False; fi;
      else
       for Iter=1..Осн_Док do
        if not Осн_Док[Iter].ДО=nil:
           if not Осн_Док[Iter].ДО.Контр=РеквП: Message("Реквизиты контрагента в заявке отличны от реквизитов в документе - основании",mtError); Template.Field="Вид"; Template.Frame=Iter; ^False; fi;
           if not Осн_Док[Iter].ДО.Контр_Призн=Призн_К: Message("Аналитический признак контрагента ("+Призн_К+") в заявке отличен от признака контрагента в документе - основании ("+Осн_Док[Iter].ДО.Контр_Призн+")",mtError); Template.Field="Вид"; Template.Frame=Iter; ^False; fi;
           if not Осн_Док[Iter].ДО.Контр_Банк=БанкП: Message("Банковские реквизиты контрагента в заявке отличны от реквизитов в документе - основании",mtError); Template.Field="Вид"; Template.Frame=Iter; ^False; fi;
        fi;
       od;
    fi;
 fi;
 if Match(БанкП.РСчет,"40822*"):
    if not Осн_ДокВид="УИН": Message("Для банковского счета контрагента 40822, вид документа основания должен быть равен 'УИН'",mtError); Template.Field="Осн_ДокВид"; ^False; fi;
 fi;
 if Р4:
    if Нал_Статус="": Message("Заполните статус налогоплательщика",mtError); Template.Field="Нал_Статус"; ^False; fi;
    if Нал_КБК="": Message("Заполните код по БК",mtError); Template.Field="Нал_КБК"; ^False; fi;
    if Нал_ОКАТО="" and ver<12: Message("Заполните код ОКАТО",mtError); Template.Field="Нал_ОКАТО"; ^False; fi;
    if Нал_ОКАТО="" and ver>=12: Message("Заполните код ОКТМО",mtError); Template.Field="Нал_ОКАТО"; ^False; fi;
    if Нал_ОснПл="": Message("Заполните основание платежа",mtError); Template.Field="Нал_ОснПл"; ^False; fi;
    if Нал_Пер="": Message("Заполните налоговый период",mtError); Template.Field="Нал_Пер"; ^False; fi;
    if Нал_НомДок="": Message("Заполните номер документа - основания",mtError); Template.Field="Нал_НомДок"; ^False; fi;
    if Нал_ТипПл="": Message("Заполните тип платежа",mtError); Template.Field="Нал_ТипПл"; ^False; fi;
 fi;
 if ИстОбщ="": Message("Заполните наименование вида средств для исполнения обязательства",mtError); Template.Field="Ист_"; ^False; fi;
 УдалитьПустыеСтроки;
 if Расшифр=0: Message("Заполните расшифровку заявки на кассовый расход",mtError); Template.Field="КБК"; Template.Frame=1; ^False; fi;
 for Iter=1..Расшифр do
  Расшифр[Iter].Ист=ИстОбщ;
  if Расшифр[Iter].Ист="": Message("Заполните наименование вида средств для исполнения обязательства",mtError); Template.Field="Ист_"; ^False; fi;
  if Расшифр[Iter].КБК="" and not Расшифр[Iter].Ист="5": Message("Заполните код по БК плательщика",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
  if Расшифр[Iter].Ист="5" and not Расшифр[Iter].КБК="":   Message("Для данного наименования вида средств заполнение кода по БК плательщика не требуется ",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
  if Расшифр[Iter].КБКП="" and not Расшифр[Iter].ТипКБКП="": Message("Введите код по БК получателя",mtError); Template.Field="КБКП"; Template.Frame=Iter; ^False; fi;
  if not Расшифр[Iter].КБКП="" and Расшифр[Iter].ТипКБКП="": Message("Введите тип КБК получателя",mtError); Template.Field="ТипКБКП"; Template.Frame=Iter; ^False; fi;
  if (SubStr(Банк.РПО_ЛСчет,1,2)="21" or SubStr(Банк.РПО_ЛСчет,1,2)="31" or SubStr(Банк.РПО_ЛСчет,1,2)="41") and ver>=7 and Расшифр[Iter].ДопКл="": Message("Для лицевых счетов '21, 31, 41' заполните код цели субсидии/субвенции плательщика",mtError); Template.Field="ДопКл"; Template.Frame=Iter; ^False; fi;
  if Round(Расшифр[Iter].Сум,2)=0: Message("Заполните сумму в валюте заявки",mtError); Template.Name="S14"; Template.Field="Сум"; Template.Frame=Iter; ^False; fi;
 od;
 if not tmp="":
    if not ОбновитьРасшифрОснДок(tmp,1): ^False; fi;
 fi;
 Раб.КСА.Начать;
 for Iter=1..Расшифр do
  if not Расшифр[Iter].СчДеб="" and not Расшифр[Iter].СчКре="":
     Раб.КСА.Добавить(Расшифр[Iter].СчДеб);
     Раб.КСА.Добавить(Расшифр[Iter].СчКре);
     Раб.КСА.Добавить(Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,"","ВД",True)+".ЗАБ.00."+Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,"","КОСГУ",False));
     Раб.КСА.Добавить(Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчКре,"","ВД",True)+".ЗАБ.КР."+Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчКре,"","КОСГУ",False));
     if КакБО and not ИстОбщ="5" and not Расшифр[Iter].ТипКБК="20":
        ВД_=БухИст(Iter);
        БК_=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК");
        КОСГУ_=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"КОСГУ");
        if ВД_="1":
           Раб.КСА.Добавить(БК_+"."+ВД_+".501.13."+КОСГУ_);
           Раб.КСА.Добавить(БК_+"."+ВД_+".502.11."+КОСГУ_);
           Раб.КСА.Добавить(БК_+"."+ВД_+".502.12."+КОСГУ_);
          |not ВД_="3":
           Раб.КСА.Добавить(БК_+"."+ВД_+".506.10."+КОСГУ_);
           Раб.КСА.Добавить(БК_+"."+ВД_+".502.11."+КОСГУ_);
           Раб.КСА.Добавить(БК_+"."+ВД_+".502.12."+КОСГУ_);
        fi;
     fi;
  fi;
 od;
 if Раб.КСА.Закончить(True): RefreshAna; Message("Добавление новых счетов закончено"); fi;
 Раб.Бюджет.ПроверитьПризнакиНачать;
 for Iter=1..Расшифр do
  if not Расшифр[Iter].ДО=nil and Round(Расшифр[Iter].ДокСум,2)<Round(Расшифр[Iter].ДокОпл+Расшифр[Iter].Сум,2): Message("Сумма оплат документа по КБК "+Format("%.2N",Расшифр[Iter].ДокОпл+Расшифр[Iter].Сум)+" превышает сумму документа по КБК "+Format("%.2N",Расшифр[Iter].ДокСум)+" на "+Format("%.2N",Расшифр[Iter].ДокОпл+Расшифр[Iter].Сум-Расшифр[Iter].ДокСум),mtError); Template.Field="Сум"; Template.Frame=Iter; ^False; fi;
  if Расшифр[Iter].СчДеб="": Message("Введите счет дебета",mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
  if Name_S(Расшифр[Iter].СчДеб)=" ": Message("Неизвестный идентификатор счета "+Расшифр[Iter].СчДеб,mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
  if Расшифр[Iter].СчКре="": Message("Введите счет кредита",mtError); Template.Field="СчКре"; Template.Frame=Iter; ^False; fi;
  if Name_S(Расшифр[Iter].СчКре)=" ": Message("Неизвестный идентификатор счета "+Расшифр[Iter].СчКре,mtError); Template.Field="СчКре"; Template.Frame=Iter; ^False; fi;
  if not Correspond(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре): Message("Счета не могут корреспондировать "+Расшифр[Iter].СчДеб+"/"+Расшифр[Iter].СчКре,mtError);  Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
  if Раб.Бюджет.ПроверитьПризнакиОбязательные(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре,Trim(Расшифр[Iter].Призн_ОснДок+" "+Расшифр[Iter].Призн),ИсклПризн)=False : Template.Field="Призн_"; Template.Frame=Iter; ^False; fi;
  if Раб.Бюджет.ПроверитьПризнакиСвязанные(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре,Trim(Расшифр[Iter].Призн_ОснДок+" "+Расшифр[Iter].Призн),ИсклПризн)=False : Template.Field="Призн_"; Template.Frame=Iter; ^False; fi;
  if Int(Банк.РПО_КодБюдж)<2: Расшифр[Iter].ДопКл=""; fi;
 od;
 if not СоотвБОРасшифр(True): ^False; fi;
 if Док_ОКВ="643": Вал=""; fi;
 if not Док_ОКВ="643" and Вал="": Message("Введите идентификатор валюты",mtError); Template.Field="Вал"; ^False; fi;
 if not Round(Док_Сум,2)=Round(Р5_ВсегоСум,2): Message("Сумма расшифровки заявки на кассовый расход "+Str(Р5_ВсегоСум,2)+" отличается от суммы документа "+Str(Док_Сум,2),mtError); Template.Field="Р5_ВсегоСум"; ^False; fi;
 if not Round(Док_СумРуб,2)=Round(Р5_ВсегоСумРуб,2): Message("Сумма в рублях расшифровки заявки на кассовый расход "+Str(Р5_ВсегоСумРуб,2)+" отличается от суммы в рублях документа "+Str(Док_СумРуб,2),mtError); Template.Field="Р5_ВсегоСумРуб"; ^False; fi;
 if not ПроверитьОплКБКДоговор: ^False; fi;
 if isДО and not ПризнДоговор="":
    КонтрольОстАв=Saldo("*.?.206.??.*{ДОГОВОР."+ПризнДоговор+"!}",ДатаДок+1);
    if not Round(КонтрольОстАв,2)=0:
       if EnqOkCancel("Внимание !^MОстаток аванса по договору (контракту) на дату "+DateToString(ДатаДок+1)+" составляет "+Format("%.2N",КонтрольОстАв)+"^MИгнорировать ?",mtWarning)=cmCancel: ^False; fi;
    fi;
 fi;
 if КакБО:
    if not ПроверитьКакБО(True,True): ^False; fi;
 fi;
 if ф0531851 and not Проводить:
    ф0531851=Проверить0531851(False);
    cbФ0531851.State=ф0531851;
 fi;
 if not fКонтрольЛБО=-1:
    Раб.Вспом.ОстЛБО.ОчиститьВх;
    Раб.Вспом.ОстЛБО.ОчиститьВх2;
    for Iter=1..Расшифр do
     if Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчКре,"","ВД",False)="1":
        tmp=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК+КОСГУ");
        Раб.Вспом.ОстЛБО.ДобавитьЗКР(ДатаДок+1,tmp,Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].Призн_ОснДок),if(Призн_БО="" or Призн_БО="БО.000",0,Расшифр[Iter].Сум),Расшифр[Iter].Сум);
        if not (Призн_БО="" or Призн_БО="БО.000"):
           Раб.Вспом.ОстЛБО.ДобавитьЗКР2(ДатаДок+1,Призн_БО,tmp,Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].Призн_ОснДок),Расшифр[Iter].Сум);
        fi;
     fi;
    od;
    i=Раб.Вспом.ОстЛБО.Проверить;
    if fКонтрольЛБО=1 and i=-1: 
       ^False;
      |not i=1:
       if EnqOkCancel("Игнорировать данное предупреждение ?",mtWarning)=cmCancel: ^False; fi;
    fi;
 fi;
 ^True;
end;

Func ПолучитьНомерПП(Val:s):I;
var n:i;
 Try
  n=Int(Val);
 Except
  n=0;
 end;
 if n=0 and not ДокОперДат=1.1.100: n=-1*Раб.Обл.СледСУчетомДатыФ("Поруч","Номер","Дата",ДокОперДат,"not UKey="+RecordToString(Current)); fi;
 ^n;
end;

Func СоздатьПП(enMsg: L): L;
var OWA,OA1,OA2: I;
var n,nr,n1,n2,Iter,nn: I;
var ПризнОбщ,Призн: S;
var Rec: Record;
  if not (Проводить or not ДокОпер1=nil): Return True; fi;
  OWA=OpenWorkArea("Поруч","","РПО_ЗАЯВКА_КР="+RecordToString(Current));
  Try
    BeginChanging(OWA, True);
    Try
      nr=Records(OWA);
      if nr=0: n=InsertRecord(OWA); fi;
      nn=ПолучитьНомерПП(ДокОперНом);
      if nn>0 or ДокОпер1.Номер=0: n=PutFieldI(OWA,1,"НОМЕР",Abs(nn)); fi;
      n=PutFieldS(OWA,1,"НОМЕРБУМ",ДокОперНом);
      n=PutFieldR(OWA,1,"РЕКВ",Рекв);
      n=PutFieldR(OWA,1,"РЕКВП",РеквП);
      n=PutFieldR(OWA,1,"БАНК",Банк);
      n=PutFieldR(OWA,1,"БАНКП",БанкП);
      n=PutFieldL(OWA,1,"БЮДЖЕТ",Р4);
      n=PutFieldD(OWA,1,"ДАТОПЕР",ДатаОпер);
      n=PutFieldD(OWA,1,"ДАТА",ДокОперДат);
      n=PutFieldN(OWA,1,"СУММА",Док_Сум);
--      n=PutFieldS(OWA,1,"ВАЛЮТА","РУБ");
      n=PutFieldN(OWA,1,"НДС",Док_СумНДС);
      n=PutFieldS(OWA,1,"Т",Док_НазнПл);
      n=PutFieldS(OWA,1,"ДАТАО",Док_ОчрПл);
      n=PutFieldS(OWA,1,"ВИДПЛ",Док_ВидПл_);
      n=PutFieldS(OWA,1,"ВИДОП","01");
      n=PutFieldS(OWA,1,"П1",Нал_Статус);
      n=PutFieldS(OWA,1,"П2",Нал_КБК);
      n=PutFieldS(OWA,1,"П3",Нал_ОКАТО);
      n=PutFieldS(OWA,1,"П4",Нал_ОснПл);
      n=PutFieldS(OWA,1,"П5",Нал_Пер);
      n=PutFieldS(OWA,1,"П6",Нал_НомДок);
      n=PutFieldS(OWA,1,"П7",if(Р4 and Нал_ДатДок = 1.1.100,"0",DateToString(Нал_ДатДок)));
      n=PutFieldS(OWA,1,"П8",Нал_ТипПл);
      n=PutFieldL(OWA,1,"ПРОВОДИТЬ",if(Аннул,False,Проводить));
      n=PutFieldS(OWA,1,"РПО_НАЗНПЛАТ",Док_НазнПл);
      n=PutFieldL(OWA,1,"РПО_MULTISTR",False);
      n=PutFieldL(OWA,1,"РПО_УЧИТЫВАТЬ",if(Аннул,False,Учитывать));
      n=PutFieldL(OWA,1,"РПО_ВБАНК",if(Аннул,False,ВБанк));
      ClearVAriable(Buf);
      OA1=OpenArray(OWA,1,"РПО_ПОЗИЦИИ","");
      if not Records(OA1) = 0: DeleteAllRecords(OA1); fi;
      OA2=OpenArray(OWA,1,"РПО_СТРОКИ_БК","");
      if not Records(OA2)=0: DeleteAllRecords(OA2); fi;
      ПризнОбщ=Раб.Бюджет2005.Объединить(Призн_ЛС,Призн_БО," ");
      ПризнОбщ=Раб.Бюджет2005.Объединить(ПризнОбщ,Призн_К," ");
      ПризнОбщ=Раб.Бюджет2005.Объединить(ПризнОбщ,Призн_ФАИП," ");
      for Iter=1 to Расшифр do
       n1=InsertRecord(OA1);
       n1=PutFieldN(OA1,n1,"СУМ",Расшифр[Iter].Сум);
       n1=PutFieldS(OA1,n1,"СЧДЕБ",Расшифр[Iter].СчДеб);
       n1=PutFieldS(OA1,n1,"СЧКРЕ",Расшифр[Iter].СчКре);
       Призн=Trim(Расшифр[Iter].Призн_ОснДок+" "+Расшифр[Iter].Призн);
       n1=PutFieldS(OA1,n1,"ПРИЗНАК",Раб.Бюджет2005.Объединить(ПризнОбщ,Призн," "));
       n1=PutFieldS(OA1,n1,"КМНТ","ПП №" + ДокОперНом + " от " + DateToString(ДокОперДат) + " (Заявка на КР №" + НомерДок + " от " + DateToString(ДатаДок) + ") " + if(Расшифр[Iter].Кмнт = "", if(Расшифр[Iter].НазнПл = "", Док_НазнПл, Расшифр[Iter].НазнПл), Расшифр[Iter].Кмнт));
       n2=SearchInArray(Buf,Расшифр[Iter].КБК+"#"+Расшифр[Iter].ДопКл,True);
       if n2=-1:
          n2=InsertInArraySort(Buf,Расшифр[Iter].КБК+"#"+Расшифр[Iter].ДопКл);
          n2=InsertRecord(OA2,n2);
          n2=PutFieldN(OA2,n2,"СУМ",Расшифр[Iter].Сум);
          n2=PutFieldS(OA2,n2,"ДОПКЛАСС",Расшифр[Iter].ДопКл);
          n2=PutFieldS(OA2,n2,"НОМБО",НомерБО);
          n2=PutFieldS(OA2,n2,"КИФ",Расшифр[Iter].ИСТ);
          if Расшифр[Iter].ТИПКБК="10":
             n2=PutFieldS(OA2,n2,"КОДГЛАВЫ",SubStr(Расшифр[Iter].КБК,1,3));
             n2=PutFieldS(OA2,n2,"КОДПРД",SubStr(Расшифр[Iter].КБК,4,4));
             n2=PutFieldS(OA2,n2,"КОДЦСТ",SubStr(Расшифр[Iter].КБК,8,7));
             n2=PutFieldS(OA2,n2,"КОДВР",SubStr(Расшифр[Iter].КБК,15,3));
             n2=PutFieldS(OA2,n2,"КОДЭК",SubStr(Расшифр[Iter].КБК,18,3));
            |Расшифр[Iter].ТИПКБК="32":
             n2=PutFieldS(OA2,n2,"КОДКИВНФ",Расшифр[Iter].КБК);
            |Расшифр[Iter].ТИПКБК="31":
             n2=PutFieldS(OA2,n2,"КОДКИВФ",Расшифр[Iter].КБК);
            |Расшифр[Iter].ТИПКБК="20":
             n2=PutFieldS(OA2,n2,"КОДКД",Расшифр[Iter].КБК);
          fi;
         else
          n2=PutFieldN(OA2,n2,"СУМ",GetFieldN(OA2,n2,"СУМ")+Расшифр[Iter].Сум);
       fi;
      od;
      n=PutFieldR(OWA,1,"РПО_ЗАЯВКА_КР",Current);
      n=PutFieldL(OWA,1,"CLOSEDMODFOB",ClosedModFob);
      Rec=GetRecordKey(OWA,1);
      EndChanging(OWA);
    Except
      CancelChanging(OWA);
      Raise;
    end;
  Finally
    CloseWorkArea(OWA);
  end;
  ДокОпер1=Rec;
  ДокОперКарт1="Поруч";
  EditorApply;
  if nr=0 and enMsg: Message("Платежное поручение №" + ДокОперНом + " от " + DateToString(ДокОперДат) + " успешно создано");  fi;
  Return True;
end;

Proc УдалитьЗаписи(vCrd:String);
var F :String;
var OWA:Integer;
 F=if(vCrd=SelfCrd,"UKey",SelfCrd)+"="+RecordToString(Current);
 OWA=OpenWorkArea(vCrd,"",F);
 try
  if not Records(OWA)=0:
     BeginChanging(OWA);
     try
      DeleteAllRecords(OWA);
      EndChanging(OWA);
     except
      CancelChanging(OWA);
      Raise;
     end;
  fi;
 finally
  CloseWorkArea(OWA);
 end;
end;

Proc ПечатьРеестраОснДок(PreView:L);
var Iter:I;
var Bln:S;
 Bln="РАБ.ВСПОМ.ЗАЯВКА_КР_РЕЕСТР_ОСН_ДОК";
 if not Осн_Док=0:
    if not BlankExist(Bln): Message("Форма для печати реестра документов-оснований не найдена",mtError); Exit; fi;
    ExecuteProc(Bln+".Очистить");
    PutVariableS(Bln+".НаимДок",Осн_ДокВид);
    PutVariableS(Bln+".НомерДок",НомерДок);
    PutVariableD(Bln+".ДатаДок",Осн_ДокДат);
    PutVariableS(Bln+".ДолжнРук",ДолжнРук);
    PutVariableS(Bln+".ФИОРук",ФИОРук);
    PutVariableS(Bln+".ДолжнБух",ДолжнБух);
    PutVariableS(Bln+".ФИОБух",ФИОБух);
    PutVariableD(Bln+".ДатаПодписи",ДатаПодписи);
    PutVariableS(Bln+".НомерРеестр",Осн_ДокНом);
    PutVariableD(Bln+".ДатаРеестр",Осн_ДокДат);
    PutVariableI(Bln+".Упр",Осн_Док);
    for Iter=1..Осн_Док do
     PutVariableS(Bln+".Вид["+Str(Iter)+"]",Осн_Док[Iter].Вид);
     PutVariableS(Bln+".Ном["+Str(Iter)+"]",Осн_Док[Iter].Ном);
     PutVariableD(Bln+".Дат["+Str(Iter)+"]",Осн_Док[Iter].Дат);
     PutVariableN(Bln+".Сум["+Str(Iter)+"]",Осн_Док[Iter].ОплТек);
     PutVariableS(Bln+".Предм["+Str(Iter)+"]",Осн_Док[Iter].Предм);
    od;
    if PreView:
       OpenBlank(Bln,True);
      else
       OpenBlank(Bln,False);
       ExecuteProc(Bln+".btnПечать_OnClick","");
       Close(Bln);
    fi;
 fi;
end;

Func ТекЗапись:Record;
 ^Current;
end;

Proc ЗадатьИстОбщ;
var Iter:I;
 ИстОбщ="";
 for Iter=1..Расшифр do
  if not Расшифр[Iter].Ист="": ИстОбщ=Расшифр[Iter].Ист; fi;
 od;
end;

Func ЗаполнитьКлючДок:L;
var Flag:L;
 Flag=True;
 if FuncExists(extКлюч): 
    Flag=ExecuteFuncL(extКлюч);
    if not Flag and (Учитывать or ВБанк or Проводить):
       SkipEvent=true;
       Try
        Проводить=Flag; cbПроводить.State=Проводить;
        ВБанк=Flag;     cbВБанк.State=ВБанк;
        Учитывать=Flag; cbУчитывать.State=Учитывать;
       Finally
        SkipEvent=False;
       end;
       Оформление;
       СоздатьПП(False);
    fi;
 fi;
 ^Flag;
end;

Proc Вызов_Из_ДО;
var Iter:I;
 Call="";
 if not Осн_Док=0 and ver<6:
    if Осн_Док[1].ДО.НаимДок.Наим_Мн_Чего="":
       Осн_ДокВид="Реестр "+Осн_Док[1].ДО.НаимДок.Наим;
       Trace("Внимание! Не заданы склонения наименования документа. Исправте в ручную наименование реестра");
      else
       Осн_ДокВид="Реестр "+Осн_Док[1].ДО.НаимДок.Наим_Мн_Чего;
    fi;
    if Осн_ДокВид="": Осн_ДокВид="Реестр документов-оснований"; fi;
    Осн_ДокНом=НомерДок;
    Осн_ДокДат=ДатаДок;
 fi;
 for Iter=1..Осн_Док do
  Осн_Док[Iter].Предм=ОснДок_В_Предм(Осн_Док[Iter].Предм,Iter,False);
 od;
 Осн_ДокПредм=ОснДок_В_Предм(Осн_ДокПредм,0,False);
 if fР2_НазнПл:
    Док_НазнПл=ОснДок_В_НазнПл(Док_НазнПл,False);
 fi;
 ОбновитьСч(-1);
 ОбновитьРасшифрОснДок(ОбновитьОснДок,0);
 ОбновитьТекОпл;
 EditorApply;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func НастрПоУмолч_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="НастрПоУмолч":
    if EnqOkCancel("Восстановить значения по умолчанию ?",mtWarning)=cmCancel: ^False; fi;
 fi;
 fСкрытьРаздел=True;
 fУтвДок=False;
 fДобГородВБанк=True;
 ДесятРазд=".";
 fКлиентКорИмя=False;
 fОдинЛист=False;
 РазмерШрифта=8;
 ПДИ=0;
 fСокращен=True;
 fР2_Договор=True;
 fКакБО=True;
 fСумКБКНазнПл=False;
 СчКр="???.01.05.02.*.?.201.11.610|???.01.05.02.*.?.201.?7.610|*.?.304.04.*|*.?.304.05.*";
 if FieldName="НастрПоУмолч":
    Message("Значения по умолчанию восстановлены");
 fi;
 Return False;
end;

Func НастрЗакр_OnEnter(FieldName: String; Iter: Integer): logical;
 ОткрНастр(False);
 Настр(True);
 Return False;
end;

Func Flags_OnEnter(FieldName: String; Iter: Integer): logical;
 FieldName=SubStr(FieldName,1,Length(FieldName)-1);
 PutVariableL(FieldName,not GetVariableL(FieldName));
 Return False;
end;

Func fКонтрольЛБО_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Отключить";
 Buf[2]="Мягкий контроль (предупреждать)";
 Buf[3]="Жесткий контроль (сообщение об ошибке)";
 n=Alternate("Выберите режим контроля",Buf,-1,if(fКонтрольЛБО=1:3|fКонтрольЛБО=-1:1|True:2),12);
 if not n=0:
    fКонтрольЛБО=if(n=1:-1|n=2:0|n=3:1);
 fi;
 Return False;
end;

Func fБезКБК__OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Выгружать";
 Buf[2]="Заменять на 0";
 n=Alternate("Выберите режим контроля",Buf,-1,if(fБезКБК=0:1|fБезКБК=2:2|True:1),12);
 if not n=0:
    fБезКБК=if(n=1:0|n=2:2);
 fi;
 Return False;
end;

Proc ДесятРазд_OnExit(FieldName: String; Iter: Integer);
 if ДесятРазд="": ДесятРазд="."; fi;
end;

Func РазмерШрифта_OnVerify(FieldName: String; Iter: Integer; Value: Integer): Logical;
 if Value<=2: Message("Значение не может меньше 3",mtError); ^False; fi;
 Return True;
end;

Func ПДИ_OnVerify(FieldName: String; Iter: Integer; Value: Integer): Logical;
 if Value<0: Message("Значение должно быть больше 0",mtError); ^False; fi;
 Return True;
end;

Func СчКр_OnVerify(FieldName: String; Iter: Integer; Value: S): Logical;
var z:n;
 z=Saldo(Value,1.1.100);
 ^True;
end;

Func СчКр_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Cur=Раб.КБК.Список("*.?.???.??.*","","СЧ9 ИГ");
 if Match(Cur,"?."): Cur=Cur+"???.??.*";
   |Match(Cur,"?.???."): Cur=Cur+"??.*";
   |Match(Cur,"?.???.??."): Cur=Cur+"*";
 fi;
 if Cur="": Template.HideEditor(False); ^Cur; fi;
 Cur=Раб.Бюджет2005.Объединить_Диалог(GetVariableS(AsString(Template.Field)),Cur,"|=ИЛИ;&~=И ИСКЛЮЧИТЬ;_=ЗАМЕНИТЬ","_");
 if Раб.Бюджет2005.HideEditor: 
    Template.HideEditor(False);
    PutVariableS(AsString(Template.Field),Cur);
 fi;
 Return Cur;
end;

Func extFunc_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
 if not Value="":
    if not FuncExists(Value): Message("Функция '"+Value+"' не найдена",mtError); ^False; fi;
 fi;
 Return True;
end;

Proc НомерДок_OnExit(FieldName: String; Iter: Integer);
 ОбработатьНомер(НомерДок);
end;

func НомерДок_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Template.HideEditor(False);
 if ДатаДок=1.1.100:
    НомерДок=Str(РАБ.ОБЛ.СледСУчетомГодаФ(SelfCrd,"Номер","ДатаДок","not UKey="+RecordToString(Current)));
   else
    НомерДок=Str(РАБ.ОБЛ.СледСУчетомДатыФ(SelfCrd,"Номер","ДатаДок",ДатаДок,"not UKey="+RecordToString(Current)));
 fi;
 ОбработатьНомер(НомерДок);
 ^Cur;
end;

Func ДатаДок_OnVerify(FieldName: String; Iter: Integer; Value: Date):Logical;
var prevД:D;
 prevД=ДатаДок;
 ДатаДок=Value;
 ОбработатьДату(prevД,ДатаДок);
 Return True;
end;

Proc ДатаДок_OnExit(FieldName: String; Iter: Integer);
var Rec:Record;
 if not ДатаДок=1.1.100 and not ДатаПодписи=ДатаДок:
    if ДатаПодписи=1.1.100:
       ДатаПодписи=ДатаДок;
      else
       if EnqOkCancel("Изменить дату подписи с "+DateToString(ДатаПодписи)+" на "+DateToString(ДатаДок)+" ?",mtWarning)=cmOk:
          ДатаПодписи=ДатаДок;
       fi;
    fi;
 fi;
 if ДатаДок=1.1.100 then 
    Rec=nil;
   else 
    if Договор<>nil then
       rec=ДоговорChk(Договор);
      else
       rec=nil;
    fi;
 fi;
 if Rec<> nil and Rec<>Договор then
    ЗаполнитьДоговор(Rec,True); ЗаполнитьКонтр("Договор",0);
 fi;
 if ПДИ>0: 
    ДатаИспол=ДатаДок+ПДИ;
    if ДатаИспол>Dat(31,12,Year(ДатаДок)): ДатаИспол=Dat(31,12,Year(ДатаДок)); fi;
 fi;
end;

Func Дата_OnLookup(Sect:S; Row:I; Col:I; Cur:S) :S;
var tmp,prevД:d;
var Field:S;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 if Field="ДатаИспол" and not ДатаДок=1.1.100:
    tmp=Calendar(if(ДатаДок+ПДИ>Dat(31,12,Year(ДатаДок)),Dat(31,12,Year(ДатаДок)),ДатаДок+ПДИ));
   else
    tmp=Calendar;
 fi;
 if tmp=1.1.100: ^Cur; fi;
 prevД=GetVariableD(Field);
 PutVariableD(Field,tmp);
 if Field="ДатаДок":
    ОбработатьДату(prevД,tmp);
    ДатаДок_OnExit(Field,1);
 fi;
end;

Func Клиент_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec:Record;
 Rec=OpenCardFile("Контрагент","Наше",Рекв,crdRecordOnly);
 if not Rec=nil:
    ЗаполнитьКлиента(Rec);
 fi;
 Return False;
end;

Func Рекв_ИНН_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Field:S;
 Template.HideEditor(False);
 if Рекв=nil: Message("Заполните наименование клиента",mtError); Template.Field="Клиент"; ^Cur; fi;
 Field=AsString(Template.Field);
 PutVariableS(Field,if(Field="Рекв_ИНН",Рекв.ИНН,Рекв.КПП));
 Return Cur;
end;

Func Призн_ЛС_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if Банк=nil: Message("Заполните поле 'Федеральное казначейство, орган Федерального казначейства'",mtError); Template.Field="Банк.РПО_ОФК_Имя"; ^False; fi;
 tmp=AnaElection("ЛС.*",False,False,Призн_ЛС);
 if not tmp="":
    Призн_ЛС=tmp;
 fi;
 Return False;
end;

Func Глава_OnEnter(FieldName: String; Iter: Integer): logical;
 if (Рекв.РПО_ТипУчр="БУ" or Рекв.РПО_ТипУчр="АУ") and ver>=7: Message("Для бюджетного (автономного) учреждения данное поле не заполняется",mtError); fi;
 Return not Рекв.РПО_ТипУчр="БУ" and not Рекв.РПО_ТипУчр="АУ";
end;

Proc Глава_OnExit(FieldName: String; Iter: Integer);
var tmp:S;
 tmp=GetVariableS(FieldName);
 if not tmp="":
    PutVariableS("h"+FieldName,tmp);
    if FieldName="Глава": 
       ГРБС=Раб.Бюджет.НаимКБК("ППП2006",Глава);
       hГРБС=ГРБС;
    fi;
    if Рекв.РПО_ТипУчр="АУ" or Рекв.РПО_ТипУчр="БУ": Настр(True); fi;
 fi;
end;

Func Глава_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
 Template.HideEditor(False);
 if Рекв.РПО_ТипУчр="АУ" or Рекв.РПО_ТипУчр="БУ":
    if Рекв=nil: Message("Выберите клиента",mtError); Template.Field="Клиент"; ^Cur; fi;
    ExecuteProc("Инфо.Контрагент.Вызвать",Рекв,"РАБ.ВСПОМ.КОНТРАГЕНТ_ИНФОДОП","Учредители",0);
    ГРБС=Рекв.Учредители;
   else
    Rec=OpenCardFile("РПО_БЮДЖ_КЛАСС_000","NAME_VOC='ППП2006'",nil,crdRecordOnly);
    if not Rec=nil:
       Глава=GetCardFieldS("РПО_БЮДЖ_КЛАСС",Rec,"CODE");
       ГРБС=GetCardFieldS("РПО_БЮДЖ_КЛАСС",Rec,"TXT");
       hГлава=Глава;
       hГРБС=ГРБС;
    fi;
 fi;
 Return Cur;
end;

Proc Рекв_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field,Bln,Prefix:S;
 if Double:
    Field=AsString(Template.Field);
    if (Match(Field,"Рекв*") or Field="КБП") and Рекв=nil: Message("Выберите клиента",mtError); Template.Field="Клиент"; Exit;
      |Match(Field,"РеквП*") and РеквП=nil: Message("Выберите реквизиты контрагента",mtError); Template.Field="РеквП_"; Exit;
    fi;
    if Field="КБП": Prefix="Рекв"; Field="РПО_КБП";
      |True: Prefix=SubStr(Field,1,Pos(".",Field)-1); Field=SubStr(Field,Pos(".",Field)+1,255);
    fi;
    ExecuteProc("Инфо.Контрагент.Вызвать",GetVariableR(Prefix),Bln,Field,0);
 fi;
end;

Proc Банк_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field,Prefix:S;
 if Double:
    Field=AsString(Template.Field);
    if (Match(Field,"Банк*") or Field="НаимБюдж" or Field="ФинОрган") and Банк=nil: Message("Выберите банковские реквизиты",mtError); Template.Field="Банк.РПО_ОФК_Имя"; Exit;
      |(Match(Field,"БанкП*") or Field="БанкП_") and БанкП=nil: Message("Выберите банковские реквизиты контрагента",mtError); Template.Field="БанкП.РСчет"; Exit;
    fi;
    if Field="НаимБюдж"        : Prefix="Банк"; Field="РПО_НаимБюдж";
      |Field="ФинОрган"        : Prefix="Банк"; Field="РПО_ФО_Наим1";
      |Field="Банк_РПО_ФО_ОКПО": Prefix="Банк"; Field="РПО_ФО_ОКПО";
      |Field="БанкП_"          : Prefix="БанкП"; Field="Банк";
      |True                    : Prefix=SubStr(Field,1,Pos(".",Field)-1); Field=SubStr(Field,Pos(".",Field)+1,255);
    fi;
    ExecuteProc("Инфо.БанкСчета.Вызвать",GetVariableR(Prefix),Field,0);
 fi;
end;

Func Банк_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 if Рекв=nil: Message("Выберите клиента",mtError); Template.Field="Клиент"; ^False; fi;
 Rec=OpenCardFile("Банк_Счета","Контрагент="+RecordToString(Рекв),Банк,crdRecordOnly);
 if not Rec=nil:
    Банк=Rec;
    Призн_ЛС=РАБ.Бюджет2005.БанкВПризн(Банк);
 fi;
 Оформление;
 Return False;
end;

Proc НомерБО_OnExit(FieldName: String; Iter: Integer);
 if (FieldName="НомерБО" and not НомерБО="") or (FieldName="GUID_FKБО" and not GUID_FKБО="") or FieldName="Призн_БО":
    БО=nil;
    БО_ГЭК=0;
 fi;
 if FieldName="Призн_БО": Призн_БО=""; fi;
end;

Func НомерБО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
var Crd,F:S;
 Template.HideEditor(False);
 if Рекв=nil: Message("Введите наименование клиента",mtError);  Template.Field="Клиент"; ^Cur; fi;
 Crd=Раб.Договор.crdБО;
 F="Учитывать and Рекв="+RecordToString(Рекв);
 if not РеквП=nil: F=F+" and РеквП="+RecordToString(РеквП); fi;
 ВзятьИнфоДокОсн(0);
 if not infБО=nil: F=F+" and UKey="+RecordToString(infБО); 
   |not infДоговор=nil: F=F+" and Договор="+RecordToString(infДоговор);
   |True: F=F+" and (ТипДок=0 or ТипДок=2)";
 fi;
 if БО=nil:
    Rec=Раб.Поиск.ВыборИзКартотеки("Выбор обязательства",Crd,"НомерДок|ДатаДок:D|РегНомер|Осн_ДокНом","Номер сведений|Дата сведений|Учетный номер|Номер документа основания",F);
   else
    Rec=OpenCardFile(Crd,F,БО);
 fi;
 if not Rec=nil:
    Rec=Раб.Бюджет2005.АктуалБО(Rec,ДатаДок);
    ЗаполнитьБО(Rec,True);
    ЗаполнитьКонтр("БО",0);
 fi;
 Return Cur;
end;

Func ПризнБО_OnEnter(FieldName: String; Iter: Integer): logical;
var i:i;
var tmp,БО_:S;
var Rec: Record;
 tmp=Призн_БО;
 if Осн_Док=0 and ver<6:
    if ДО.УчетБО: Rec=ДО.БО; else Rec=ДО.Договор.БО; fi;
   else
    for i=1..Осн_Док do
     if not Осн_Док[i].ДО=nil:
        if Осн_Док[i].ДО.УчетБО: Rec=Осн_Док[i].ДО.БО; else Rec=Осн_Док[i].ДО.Договор.БО; fi;
        Break;
     fi;
    od;
    if Rec=nil and not Договор=nil and ver>=6 :
       Rec=Договор.БО;
    fi;
 fi;
 БО_=CardFileRecSign(Раб.Договор.crdБО,"Признак","БО",Rec,"");
 if Призн_БО="": tmp=БО_; fi;
 RefreshAna;
 tmp=AnaElection("БО.*",False,False,tmp);
 if not tmp="":
    if not БО_="" and not БО_=tmp: Message("Выбранный признак бюджетного обязательства "+tmp+" отличается от признака бюджетного обязательства документа-основания "+БО_,mtError); ^False; fi;
    Призн_БО=tmp;
    if SignCardFile(Призн_БО,True)=Раб.Договор.crdБО:
       Rec=Раб.Бюджет2005.АктуалБО(SignToRecord(Призн_БО,False),ДатаДок);
       ЗаполнитьБО(Rec,True);
       ЗаполнитьКонтр("БО",0);
      else
       БО=nil;
       НомерБО="";
       БО_ГЭК=0;
    fi;
 fi;
 Return False;
end;

Proc isДок_OnClick(Row: Integer; Col: Integer; Double: Logical);
var crd,FieldName:S;
var Iter:I;
var Rec: Record;
 FieldName=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 if not GetVariableS(FieldName+"["+Str(Iter)+"]")="@": Message("Вызов документа невозможет т.к. реквизиты документа введены вручную",mtWarning); Exit; fi;
 if FieldName="isБО": 
    crd="РПО_СВЕД_БО"; 
    rec=БО;
   |FieldName="isДоговор": 
    crd=Осн_ДокCrd; 
    rec=Договор; 
    if rec=nil: rec=ДО; fi;
   |FieldName="isДО": 
    crd=Осн_Док[Iter].Crd; 
    rec=Осн_Док[Iter].ДО;
   |true: Exit;
 fi;
 OpenCardFile(crd,"--UKey="+RecordToString(Rec),Rec);
end;

Func ГЭК_OnEnter(FieldName: String; Iter: Integer): logical;
var Name:S;
 FieldName=SubStr(FieldName,1,Length(FieldName)-1);
 РасчетГЭК(FieldName,Iter);
 if GetVariableI(FieldName+"["+Str(Iter)+"]")=0: 
    Message("Документ не был отсканирован"); 
    ^False;
   else
    Name=if(FieldName="БО_ГЭК":"Бюджетное обязательство (Контракт, договор...)"|FieldName="Осн_Док_ГЭК":Осн_ДокВид|FieldName="Осн_ДокР_ГЭК":Осн_Док[Iter].Вид|True:"");
    Раб.Вспом.Сканер.Вызвать(Name,ГЭКCrd,RecordToInteger(ГЭКRec),"jpg",if(FieldName="nГЭК",Учитывать,True),True);
 fi;
 Return False;
end;

Func ФАИП_Код_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: record;
 rec=OpenCardFile("РПО_ФАИП","",ФАИП,crdRecordOnly);
 if not Rec=nil:
    ФАИП=Rec;
    Призн_ФАИП=CardFileRecSign("РПО_ФАИП","Признак","ФАИП",Rec);
 fi;
 Return False;
end;

Proc ФАИП_Код_OnExit(FieldName: String; Iter: Integer);
 ФАИП=nil;
 Призн_ФАИП="";
end;

Proc ver_OnExit(FieldName: String; Iter: Integer);
 Оформление;
end;

Proc Док_Сум_OnExit(FieldName: String; Iter: Integer);
var tmp:S;
var Ставка:N;
 if Док_Сум=0:
    Док_СумНДС=0;
    Док_СтавкаНДС="";
   else
    if not Round(Док_СумНДС,2)=0:
       if Док_СтавкаНДС="":
          tmp=ExecuteFuncS("Док_СумНДС_OnLookup","",1,1,"");
         else
          Ставка=Round(Док_СтавкаНДС,4);
          Док_СумНДС=Round(Ставка*Док_Сум/(100+Ставка),2);
          Док_НазнПл=НДС_в_НазнПл(Док_НазнПл,False);
       fi;
    fi;
 fi;
end;

Proc Док_ОКВ_OnExit(FieldName: String; Iter: Integer);
 if Док_ОКВ="643":
    Вал="";
 fi;
end;

Func Док_ОКВ_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
var Iter:I;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 if fОКВ=0: fОКВ=Раб.Договор.ЗагрузСправ("РПО_ОКВ",PlanVar("Std_Rpo")+"\DBF\РПО_ОКВ",ieCRD,"Загрузить справочник видов валют ОКВ ?"); fi;
 if fОКВ=1:
    Rec=Раб.Поиск.ВыборИзКартотеки("Выбор валюты","РПО_ОКВ","КОД|ИМЯ|НАИМЕНОВАНИЕ","Цифровой код|Буквенный код|Наименование","");
    if not Rec=nil:
       Док_ОКВ=GetCardFieldS("РПО_ОКВ",Rec,"КОД");
    fi;
 fi;
 Док_ОКВ_OnExit(Док_ОКВ,1);
 Return Cur;
end;

Func Док_СумРуб_OnEnter(FieldName: String; Iter: Integer): logical;
 if Док_ОКВ="": Message("Заполните код валюты по ОКВ",mtError); Template.Field="Док_ОКВ"; ^False; fi;
 if Док_ОКВ="643": Message("Заполнение данного поля для кода валюты 643 (Российский рубль) не обязательно"); ^True; fi;
 Return True;
end;

Func Док_Аванс_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 Док_Аванс=not Док_Аванс;
 if Осн_Док=0:
    if not ДО=nil:
       ОчиститьОснДок(0);
       ОчиститьБО;
    fi;
   else
    n=0;
    for Iter=1..Осн_Док do
     if Осн_Док[Iter].ДО=nil:
        ОчиститьОснДок(Iter);
        n=n+1;
     fi;
    od;
    if n=Осн_Док:
       ОчиститьБО;
    fi;
 fi;
 ОбновитьСч(-1);
 Return False;
end;

Proc Док_СумНДС_OnExit(FieldName: String; Iter: Integer);
var НДС_:N;
 НДС_=Round(Док_СумНДС*100/(Док_Сум-Док_СумНДС),2);
 if Док_СумНДС=0: 
    Док_СтавкаНДС="";
   |НДС_=18:
    Док_СтавкаНДС="18";
   |НДС_=10:
    Док_СтавкаНДС="10";
   |True:
    Док_СтавкаНДС=".";
 fi;
 Док_НазнПл=НДС_В_НазнПл(Док_НазнПл,False);
end;

Func Док_СумНДС_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter,n:I;
var Ставка:N;
var Field:S;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 Field=AsString(Template.Field);
 if Round(Док_Сум,2)=0: Message("Заполните сумму в валюте выплаты",mtError); Template.Field="Док_Сум"; Template.Frame=Iter; ^Cur; fi;
 ClearVariable(Buf);
 Buf[1]="НДС=18*Сумма/118";
 Buf[2]="НДС=10*Сумма/110";
 Buf[3]="НДС=0 %";
 Buf[4]="Без НДС";
 n=Alternate("НДС платежа",Buf,20,1,12);
 if n=1: Ставка=18;
   |n=2: Ставка=10;
   |n=3: Ставка=0;
   |n=4: Ставка=0;
   |True: ^Cur;
 fi;
 Док_СумНДС=Round(Ставка*Док_Сум/(100+Ставка),2);
 Док_СтавкаНДС=if(n=4,"",Str(Ставка));
 Док_НазнПл=НДС_В_НазнПл(Док_НазнПл,False);
 Return Cur;
end;

Func Док_ОчрПл_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n:i;
 Template.HideEditor(False);
 ClearVariable(Buf);
 Buf[1]="1 -- исполнительные документы по причинению вреда здоровью, жизни; алименты";
 Buf[2]="2 -- исполнительные документы по выходным пособиям, оплате труда с работающими и бывшими работниками; выплата вознаграждений авторам за результаты интеллектуальной деятельности";
 Buf[3]="3 -- платежные документы по оплате труда; поручения налоговых органов по налогам, сборам; поручения органов контроля по страховым взносам в гос. внебюджетные фонды (в предыдущей редакции указаны ПФР, ФСС, ФОМС)";
 Buf[4]="4 -- другие исполнительные документы";
 Buf[5]="5 -- остальные платежные документы в порядке календарной очереди";
 n=Alternate("Очередность платежа",Buf,-1,Int(Док_ОчрПл),12);
 if not n=0: 
    Док_ОчрПл=SubStr(Buf[n],1,2);
 fi;
 Return Cur;
end;

Func Док_ВидПл_onEnter (Field:s;Iter:i):L;
var n:i;
 ClearVariable(Buf);
 Buf[1]="<пусто>";
 Buf[2]="срочно";
 n=Alternate("Вид платежа",Buf,-1,1,12);
 if n=1: Док_ВидПл="0";
   |n=2: Док_ВидПл="4";
 fi;
 ^False;
end;

Func Док_НазнПл_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var Flag:L;
 Flag=True;
 if Length(Value)>210:
    Flag=EnqOkCancel("Длина назначения платежа ("+Str(Length(Value))+") превышает разрешенную длину 210 символов"+Chr(13)+"Игнорировать данное предупреждение ?",mtWarning)=cmOk;
 fi;
 Return Flag;
end;

Func Док_НазнПл_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n,Iter:i;
var tmp,f:S;
var rec: record;
 Template.HideEditor(False);
 if Банк.РПО_ЛСчет="": Message("Укажите номер лицевого счета",mtError); Template.Field="Банк.РПО_ЛСчет"; ^Cur; fi;
 if Round(Док_Сум,2)=0: Message("Укажите сумму в валюте выплаты",mtError); Template.Field="Док_Сум"; ^Cur; fi;
 ClearVariable(Buf);
 Buf[1]="Проставить в назначение платежа КБК+лицевой счет";
 Buf[2]="Проставить в назначение платежа НДС";
 Buf[3]="Проставить в назначение платежа КБК+лицевой счет+НДС";
 Buf[4]="Заполнить назначение платежа на основе данных раздела 2";
 Buf[5]="Проставить номер БО (небанковская операции уточнения БО)";
 Buf[6]="Проставить код объекта ФАИП (небанковская операции уточнения кода объекта ФАИП)";
 Buf[7]="Автосанкционирование";
 n=Alternate("Вариант заполнения назначения платежа",Buf,-1,1,12);
 if n=1 or n=3: 
    tmp=КБК_В_Текст(True,False);
    if tmp="err": ^Cur; fi;
    if not tmp="":
       Док_НазнПл=Док_НазнПл+"("+tmp;
    fi;
    Док_НазнПл=Док_НазнПл+if(tmp="","("," ")+"л/с "+Банк.РПО_ЛСчет+")";
 fi;
 if n=2 or n=3: 
    Док_НазнПл=НДС_В_НазнПл(Док_НазнПл,True);  
 fi;
 if n=4: 
    Док_НазнПл=ОснДок_В_НазнПл(Док_НазнПл,False); 
 fi;
 if n=5:
    if Рекв=nil: Message("Введите наименование клиента",mtError);  Template.Field="Клиент"; ^Cur; fi;
    F="Учитывать and Рекв="+RecordToString(Рекв);
    if not РеквП=nil: F=F+" and РеквП="+RecordToString(РеквП); fi;
    F=F+" and (ТипДок=0 or ТипДок=2)";
    Rec=Раб.Поиск.ВыборИзКартотеки("Выбор обязательства",Раб.Договор.crdБО,"НомерДок|ДатаДок:D|РегНомер|Осн_ДокНом","Номер сведений|Дата сведений|Учетный номер|Номер документа основания",F);
    if not Rec=nil:
       Док_НазнПл=Раб.Бюджет2005.Объединить("("+GetCardFieldS(Раб.Договор.crdБО,Rec,"РегНомер")+")",Док_НазнПл," ");
    fi;
 fi;
 if n=6:
    rec=OpenCardFile("РПО_ФАИП","",ФАИП,crdRecordOnly);
    if not Rec=nil:
       Док_НазнПл=Раб.Бюджет2005.Объединить("ФАИП"+GetCardFieldS("РПО_ФАИП",Rec,"Код"),Док_НазнПл," ");
    fi;
 fi;
 if n=7:
    ClearVariable(Buf);
    for Iter=1..Расшифр do
     if not Расшифр[Iter].КБК="":
        AddInArray(Buf,True,False,SubStr(Расшифр[Iter].КБК,18,3));
     fi;
    od;
    n=LengthOfArray(Buf);
    if n=0: Message("Заполните 5 раздел",mtError); Template.Field="КБК"; Template.Frame=1; ^Cur; fi;
    if n>1: Message("Автосанкционирование допустимо только для одного КОСГУ в 5 разделе",mtError); Template.Field="КБК"; Template.Frame=1; ^Cur; fi;
    if БанкП=nil: Message("Заполните банковские реквизиты контрагента",mtError); Template.Field="БанкП.РСчет"; ^Cur; fi;
    tmp=Раб.Вспом.АС.Вызвать(Buf[1],БанкП.РСчет,SelfBln);
    if tmp=" ": Message("Для КОСГУ "+Buf[1]+if(БанкП.РСчет="",""," (банковский счет "+SubStr(БанкП.РСчет,1,5)+")")+" списка направлений выплат не найдено",mtError); fi;
    Док_НазнПл=Раб.Бюджет2005.Объединить(Док_НазнПл,tmp," ");
 fi;
 Return Cur;
end;

Func ФИО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Field:S;
var Rec:Record;
var v1,v2:S;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 Template.HideEditor(False);
 Rec=OpenCardFile("Сотрудники");
 if not Rec=nil:
    v1=GetCardFieldS("Сотрудники",rec,"ДОЛЖНОСТЬ.Долж");
    v2=GetCardFieldS("Сотрудники",rec,"ФАМИЛИЯ")+" "+GetCardFieldS("Сотрудники",rec,"ИНИЦИАЛЫ");
    if Field="ДолжнРук" or Field="ФИОРук": ДолжнРук=v1; ФИОРук=v2;
      |Field="ДолжнБух" or Field="ФИОБух": ДолжнБух=v1; ФИОБух=v2;
    fi;
 fi;
 Return Cur;
end;

Func ОчиститьР2_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Учитывать:
    if not FieldName="":
       if EnqOkCancel("Очистить раздел 2 ?",mtWarning)=cmCancel: ^False; fi;
    fi;
    ОчиститьОснДок(-1);
    СоотвОснДокРасшифр;
 fi;
 Return False;
end;

Func РеестрОснДок_OnEnter(FieldName: String; Iter: Integer): logical;
var Flag:L;
 if ver>=6: ^False; fi;
 if Осн_Док=0:
    if Учитывать:
       Message("Заявка не содержит реестра документов-оснований");
      else
       if EnqOkCancel("Создать реестр документов-оснований ?",mtWarning)=cmOk:
          Template.Name="S6";
          Template.Field="A";
          Flag=ExecuteFuncL("A_Осн_OnEnter",FieldName,Iter);
          Template.Field="Вид";
          Template.Frame=1;
       fi;
    fi;
   else
    ПечатьРеестраОснДок(True);
 fi;
 Return False;
end;

Func РедГЭК_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="СканГЭК" and СканГЭК="":
    Template.Field="РедГЭК";
    ^False;
 fi;
 if Учитывать and nГЭК=0:
    Message("Документ не был отсканирован");
    ^False;
 fi;
 if not CurrentState=crdusUnmodified:
    EditorApply;
 fi;
 Раб.Вспом.Сканер.Вызвать("Сканирование документа - основания",SelfCrd,RecordToInteger(Current),"",Учитывать,FieldName="РедГЭК");
 РасчетГЭК("nГЭК",1);
 Return False;
end;

Func Предм_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=Раб.Вспом.Основание.Выполнить("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР."+Field);
 if not tmp="" then 
    if Field="Предм": Field="Осн_Док["+Str(Iter)+"]."+Field; fi;
    PutVariableS(Field,tmp); 
 fi;
 Return Cur;
end;

Func A_Осн_OnEnter(FieldName: String; Iter: Integer): logical;
var txt:S;
var Iter_:I;
 if not Учитывать:
    if Осн_Док=0 and ver<6:
       Txt="";
       if not ДО=nil:
          if ДО.НаимДок.Наим_Мн_Чего="": 
             Txt="Реестр "+ДО.НаимДок.Наим; 
             Trace("Внимание! Не заданы склонения наименования документа. Исправте в ручную наименование реестра");
            else 
             Txt="Реестр "+ДО.НаимДок.Наим_Мн_Чего; 
          fi;
       fi;
       if Txt="": Txt="Реестр документов-оснований"; fi;
       InsertFrame(Осн_Док,1);
       if not Осн_ДокВид=Txt:
          Осн_Док[1].Вид=Осн_ДокВид;
          Осн_Док[1].Ном=Осн_ДокНом;
          Осн_Док[1].Дат=Осн_ДокДат;
          Осн_Док[1].Сум=Осн_ДокСум;
          Осн_Док[1].Опл=Осн_ДокОпл;
          Осн_Док[1].ОплТек=Осн_ДокОплТек;
          Осн_Док[1].Предм=Осн_ДокПредм;
          Осн_Док[1].Crd=Осн_ДокCrd;
          Осн_Док[1].ДО=ДО;
          Осн_Док[1].ДО_GUID=ДО_GUID;
          Реестр_ГЭК[1]=Осн_Док_ГЭК;
       fi;
       ОчиститьОснДок(0);
       Осн_ДокВид=Txt;
       Осн_ДокНом=НомерДок;
       Осн_ДокДат=ДатаДок;
       Осн_ДокПредм=Осн_Док[1].Предм;
       Template.Field="Вид";
       Template.Frame=1;
      else
       if AsString(Template.Name)="S6": 
          if ver>=6: 
             Iter=0;
            else
             Iter=Осн_Док+1;
          fi;
       fi;
       Iter_=Iter;
       Iter=InsertFrame(Осн_Док,Iter+1);
       if FieldName="AA":
          Осн_Док[Iter].Вид=Осн_Док[Iter_].Вид;
          Осн_Док[Iter].Ном=Осн_Док[Iter_].Ном;
          Осн_Док[Iter].Дат=Осн_Док[Iter_].Дат;
          Осн_Док[Iter].Предм=Осн_Док[Iter_].Предм;
          Осн_Док[Iter].Скрывать=Осн_Док[Iter_].Скрывать;
       fi;
    fi;
 fi;
 Return False;
end;

Func D_Осн_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Учитывать:
    if AsString(Template.Name)="S6": 
       if ver>=6: ^False; fi;
       Iter=Осн_Док;
    fi;
    if Осн_Док=1 and ver<6:
       Осн_ДокВид=Осн_Док[1].Вид;
       Осн_ДокНом=Осн_Док[1].Ном;
       Осн_ДокДат=Осн_Док[1].Дат;
       Осн_ДокСум=Осн_Док[1].Сум;
       Осн_ДокОпл=Осн_Док[1].Опл;
       Осн_ДокОплТек=Осн_Док[1].ОплТек;
       Осн_ДокПредм=Осн_Док[1].Предм;
       Осн_ДокCrd=Осн_Док[1].Crd;
       ДО=Осн_Док[1].ДО;
       ДО_GUID=Осн_Док[1].ДО_GUID;
       Осн_Док_ГЭК=Реестр_ГЭК[1];
    fi;
    DeleteFrame(Осн_Док,Iter);
    if Осн_Док=0 and ver>=6: InsertFrame(Осн_Док,1); fi;
    if fР2_НазнПл:
       Док_НазнПл=ОснДок_В_НазнПл(Док_НазнПл,False);
    fi;
    СоотвОснДокРасшифр;
 fi;
 Return False;
end;

Proc Осн_Док_onExit(FieldName: String; Iter: Integer);
var ss:S;
var dd:d;
 if Match(FieldName,"Осн_Док*"):
    if (not ДО=nil and Осн_Док=0 and ver<6) or (not Договор=nil):
       if Match(FieldName,"*Дат"): dd=GetVariableD(FieldName); else ss=GetVariableS(FieldName); fi; --сохраняем вручную введенное значение поля (перед отчисткой)
       ОчиститьОснДок(0);
       ОчиститьБО;
       if Match(FieldName,"*Дат"): PutVariableD(FieldName,dd); else PutVariableS(FieldName,ss); fi; --восстанавливаем вручную введенное значение поля (после отчистки)
       СоотвОснДокРасшифр;
    fi;
   else
    if not Осн_Док[Iter].ДО=nil:
       FieldName="Осн_Док["+Str(Iter)+"]."+FieldName;
       if Match(FieldName,"*Дат"): dd=GetVariableD(FieldName); else ss=GetVariableS(FieldName); fi;
       ОчиститьОснДок(Iter);
       if Match(FieldName,"*Дат"): PutVariableD(FieldName,dd); else PutVariableS(FieldName,ss); fi;
       СоотвОснДокРасшифр;
       for Iter=1..Осн_Док do
        if not Осн_Док[Iter].ДО=nil:
           Break;
        fi;
       od;
       if Iter>Осн_Док:
          if ver>=6: ОчиститьОснДок(0); fi; --чистим договор
          ОчиститьБО;
       fi;
    fi;
 fi;
 ОбновитьСч(-1);
end;

Func Осн_Док_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
var Crd,F,F_,Field:S;
var Iter,n:I;
var Flag:L;
 if Match(AsString(Template.Field),"Осн_Док*"): 
    if ver<6: Field="Осн_Док"; else Field="Договор"; fi;
   else 
    Field="Реестр"; 
 fi;
 if not Осн_Док=0 and Field="Осн_Док": ^Cur; fi;
 Template.HideEditor(False);
 if Рекв=nil: Message("Введите наименование клиента",mtError); Template.Field="Клиент"; ^Cur; fi;
 Iter=AsInteger(Template.Frame);
 ВзятьИнфоДокОсн(Iter);
 F="Рег and Учр="+RecordToString(Рекв);
 if not РеквП=nil: F=F+" and Контр="+RecordToString(РеквП); fi;
 if Field="Договор":
    Crd=Раб.Договор.crdДоговор;
--    F=F+" and not Недейств";
    F_=F;
    if not infДок="Договор" and not infДоговор=nil: F=F+" and UKey="+RecordToString(infДоговор); fi;
    if not infБО=nil: F=F+" and БО="+RecordToString(infБО); fi;
    if Договор=nil and F_=F:
       Rec=Раб.Поиск.ВыборИзКартотеки("Выбор госконтракта, договора...",Crd,"НомерДок","Номер документа",F);
      else
       Rec=OpenCardFile(Crd,F,Договор);
    fi;
   else
    Crd=Раб.Договор.crdДО;
    Flag=True;
    if Field="Реестр":
       if infДок="ДО" or not Договор=nil:
          if not infДоговор=nil: F=F+" and Договор="+RecordToString(infДоговор); Flag=False; fi;
          if not infБО=nil: F=F+" and БО="+RecordToString(infБО); Flag=False; fi;
          if not infСч=nil: F=Раб.Бюджет2005.Объединить(F,"НаимСчет="+RecordToString(infСч)+" and НомерСчет='"+infНСч+"' and ДатаСчет="+DateToString(infДСч)," and "); Flag=False; fi;
       fi;
       if not Осн_Док[Iter].ДО=nil or not Flag: Rec=OpenCardFile(Crd,F,Осн_Док[Iter].ДО); Flag=False; fi;
      else
       if not ДО=nil: Rec=OpenCardFile(Crd,F,ДО); Flag=False; fi;
    fi;
    if Flag: Rec=Раб.Поиск.ВыборИзКартотеки("Выбор документа основания"+if(Док_Аванс," (аванс)",""),Crd,"НомерДок","Номер документа",F); fi;
    if not Rec=nil:
       if not GetCardFieldL(Crd,Rec,"Аванс")=Док_Аванс: Message("Признак авансового платежа отличен от выбранного документа - основания",mtError); Template.Field="Док_Аванс"; ^Cur; fi;
       if GetCardFieldL(Crd,Rec,"Аннул"): Message("Выбранный документ - основание аннулирован",mtError); ^Cur; fi;
    fi;
 fi;
 if not Rec=nil:
    if Field="Осн_Док": 
       ЗаполнитьДО(Rec,0,True); ЗаполнитьКонтр("ДО",0);
      |Field="Договор":
       Rec=ДоговорChk(Rec);
       if Rec<>Договор:
          ЗаполнитьДоговор(Rec,True);
          ЗаполнитьКонтр("Договор",0);
       fi;
      |True:
       n=SearchInArray(Осн_Док[].ДО,Rec,False,1);
       if n=Iter: n=SearchInArray(Осн_Док[].ДО,Rec,False,n+1);fi;
       if not n=-1: Message("Повторный ввод документа-основания",mtError); Template.Field="Ном"; Template.Frame=n; ^Cur; fi;
       if not infВид="" and  not infВид=GetCardFieldS(Crd,Rec,"НаимДок.Наим") and infДок="ДО" and ver<6: Message("В реестр допустимо добавлять только однотипные документы ("+infВид+")",mtError); Template.Field="Вид"; Template.Frame=n; ^Cur; fi;
       Iter=ЗаполнитьДО(Rec,Iter,True);
       ЗаполнитьКонтр("ДО",Iter);
    fi;
 fi;
 Return Cur;
end;

Func Осн_ДокСум_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Field:S;
var Iter:i;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 if Field="Осн_ДокСум_":
    if ver<6: 
       if ДО=nil: Message("Выберите документ основание из картотеки денежных обязательств",mtError); Template.Field="Осн_ДокВид"; ^Cur; fi;
       if not RecordExists(Раб.Договор.crdДО,ДО): Message("Документ - основание "+Осн_ДокВид+" №"+Осн_ДокНом+" от "+DateToString(Осн_ДокДат)+" не найден в картотеке",mtError); Template.Field="Осн_ДокВид"; ^Cur; fi;
       OpenBlank(Раб.Договор.blnДО,True,ДО);
      else 
       if Договор=nil: Message("Выберите документ из картотеки государственных контрактов, договоров",mtError); Template.Field="Осн_ДокВид"; ^Cur; fi;
       if not RecordExists(Раб.Договор.crdДоговор,Договор): Message("Документ - основание "+Осн_ДокВид+" №"+Осн_ДокНом+" от "+DateToString(Осн_ДокДат)+" не найден в картотеке",mtError); Template.Field="Осн_ДокВид"; ^Cur; fi;
       OpenBlank(Раб.Договор.blnДоговор,True,Договор);
    fi;
   else
    if Осн_Док[Iter].ДО=nil: Message("Выберите документ основание из картотеки денежных обязательств",mtError); Template.Field="Вид"; Template.Frame=Iter; ^Cur; fi;
    if not RecordExists(Раб.Договор.crdДО,Осн_Док[Iter].ДО): Message("Документ - основание "+Осн_Док[Iter].Вид+" №"+Осн_Док[Iter].Ном+" от "+DateToString(Осн_Док[Iter].Дат)+" не найден в картотеке",mtError); Template.Field="Вид"; Template.Frame=Iter; ^Cur; fi;
    OpenBlank(Раб.Договор.blnДО,True,Осн_Док[Iter].ДО);
 fi;
 Return Cur;
end;

Func Осн_ДокОпл_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Field:S;
var n,nn,Iter:i;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 Раб.Договор.altЗагл="Зарегистрованные оплаты на "+DateToString(ДатаДок);
 Раб.Договор.exclОплКарт=SelfCrd;
 Раб.Договор.exclОплДок=Current;
 if Field="Осн_ДокОпл_":
    if ver<6:
       if not Осн_Док=0: Template.Field="Опл"; Template.Frame=1; ^Cur; fi;
       if ДО=nil: Message("Выберите документ основание из картотеки денежных обязательств",mtError); Template.Field="Осн_ДокВид"; ^Cur; fi;
       n=Раб.Договор.ДО_Оплата(ДО,ДатаДок,"","","",True,True,True);
      else
       if Договор=nil: Message("Выберите документ основание из картотеки договоров",mtError); Template.Field="Осн_ДокВид"; ^Cur; fi;
       Раб.Договор.ВалОпл=Вал;
       Раб.Договор.exclЗачетАв=True;
       n=Раб.Договор.Договор_Оплата(Договор,Dat(1,1,Year(ДатаДок)),ДатаДок,"","","",0,True,True,True);
    fi;
   |Field="Опл_":
    if Осн_Док[Iter].ДО=nil: Message("Выберите документ основание из картотеки денежных обязательств",mtError); Template.Field="Вид"; Template.Frame=Iter; ^Cur; fi;
    n=Раб.Договор.ДО_Оплата(Осн_Док[Iter].ДО,ДатаДок,"","","",True,True,True);
   |Field="ДокОпл_":
    if Расшифр[Iter].КБК="" or Расшифр[Iter].ДО=nil: Message("Выберите КБК документа основания",mtError); Template.Field="КБК"; Template.Frame=Iter; ^Cur; fi;
    nn=Раб.Договор.ДО_Оплата(Расшифр[Iter].ДО,ДатаДок,БухИст(Iter),Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК+КОСГУ"),Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(Расшифр[Iter].Призн_ОснДок," ","&"),True,False,True);
    for n=1..Iter-1 do
     if not Расшифр[Iter].ДО=nil:
        if Расшифр[Iter].ДО=Расшифр[n].ДО and
           Расшифр[Iter].Ист=Расшифр[n].Ист and
           Расшифр[Iter].КБК=Расшифр[n].КБК and
           Расшифр[Iter].Призн_ОснДок=Расшифр[n].Призн_ОснДок:
           nn=nn+1;
           Раб.Договор.lstТекст[nn]="+ Текущий документ, строка";
           Раб.Договор.lstСум[nn]=Расшифр[n].Сум;
           Раб.Договор.lstНомДок[nn]=Str(n);
        fi;
     fi;
    od;
    if nn=0:
       n=-1;
      else
       ClearVariable(Buf);
       for n=1..nn do
        Buf[n]=if(Раб.Договор.lstДатРег[n]=1.1.100,"",DateToString(Раб.Договор.lstДатРег[n])+"  ")+Раб.Договор.LstТекст[n]+" №"+Раб.Договор.lstНомДок[n]+if(Раб.Договор.lstДатДок[n]=1.1.100,""," от "+DateToString(Раб.Договор.lstДатДок[n]))+" =";
        Buf[n]=Buf[n]+Format("%.2N",Раб.Договор.lstСум[n])+" "+Вал;
       od;
       n=Alternate(Раб.Договор.altЗагл,Buf,-1,1,12);
    fi;
   |True: ^Cur;
 fi;
 if n=-1:
    Message("Зарегистрированных оплат не найдено");
   else
    if not n=0:
       if Раб.Договор.lstКарт[n]="":
          if Раб.Договор.lstДок[n]=nil:
             Template.Field="Сум";
             Template.Frame=Int(Раб.Договор.lstНомДок[n]);
            else
             TransOpenJur(RecordToInteger(Раб.Договор.lstДок[n]));
          fi;
         else
          OpenCardFile(Раб.Договор.lstКарт[n],"",Раб.Договор.lstДок[n]);
       fi;
    fi;
 fi;
 Return Cur;
end;

Func Скрыть_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="Скрыть_":
    Осн_ДокСкрывать=not Осн_ДокСкрывать;
   else
    Осн_Док[Iter].Скрывать=not Осн_Док[Iter].Скрывать;
 fi;
 Return False;
end;

Func ОтчДоговор_OnEnter(FieldName: String; Iter: Integer): logical;
var ДН,ДК:D;
var Rep:S;
 if Р2:
    ДК=if(ДатаОпер=1.1.100,ДатаДок,ДатаОпер);
    ДН=if(Match(FieldName,"*Пров"),1.1.1900,Dat(1,1,Year(ДК)));
    if ДК=1.1.100: Message("Заполните дату",mtError);  Template.Field="ДатаДок"; ^False; fi;
    Refresh;
    rep=if(Match(FieldName,"*Пров"),"001","010");
    if Match(FieldName,"ОтчДоговор*") and not isДоговор="":
       Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."'+rep+'"',ДН,ДК+1,if(Док_Аванс,"*.206.??.*","*.302.??.*")+"|(*/*.ЗАБ.КР.*)",CardFileRecSign(Раб.Договор.crdДоговор,"Признак","ДОГОВОР",Договор,"")+"!");
       ^False;
      |Match(FieldName,"ОтчДО*") and not isДО[Iter]="":
       Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."'+rep+'"',ДН,ДК+1,if(Док_Аванс,"*.206.??.*","*.302.??.*")+"|(*/*.ЗАБ.КР.*)",CardFileRecSign(Раб.Договор.crdДО,"Признак","ДОГОВОР",Осн_Док[Iter].ДО,""));
       ^False;
    fi;
    if Призн_К="": Message("Заполните признак контрагента",mtError); Template.Field="Призн_К"; ^False; fi;
    Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."'+rep+'"',ДН,ДК+1,if(Док_Аванс,"*.206.??.*","*.302.??.*")+"|(*/*.ЗАБ.КР.*)",Призн_К);
 fi;
 Return False;
end;

Proc Осн_Док_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Iter:I;
var bln,Name:S;
var Rec: Record;
 Name=AsString(Template.Name);
 if Name="S7":
    Iter=AsInteger(Template.Frame);
    if not Осн_Док[Iter].ДО=nil: bln="ДОКУМЕНТЫ.ДОГОВОРПОСТ.ДО"; Rec=Осн_Док[Iter].ДО;
      |true: Exit;
    fi;
   else
    if not ДОГОВОР=nil: bln="ИНФО.ДОГОВОР";  Rec=ДОГОВОР;
      |not ДО=nil: bln="ДОКУМЕНТЫ.ДОГОВОРПОСТ.ДО"; Rec=ДО;
      |true: Exit;
    fi;
 fi;
 OpenBlank(bln,True,rec);
end;

Func РеквП_OnEnter(FieldName: String; Iter: Integer): logical;
var i,ii:i;
var ff:S;
var rec, oldrec:record;
 ClearVariable(Buf);
 ff="";
 if not БО=nil:
    if not БО.РеквП=nil:
       AddInArray(Buf,True,False,RecordToString(БО.РеквП));
    fi;
    ii=БО.Раздел2;
    for i=1..ii do
     if not БО.Раздел2[i].РеквП=nil:
        AddInArray(Buf,True,False,RecordToString(БО.Раздел2[i].РеквП));
     fi;
    od;
   else
    if not Договор=nil:
       if not Договор.Контр=nil:
          AddInArray(Buf,True,False,RecordToString(Договор.Контр));
       fi;
       ii=Договор.Контр2;
       for i=1..ii do
        if not Договор.Контр2[i].Контр=nil:
           AddInArray(Buf,True,False,RecordToString(Договор.Контр2[i].Контр));
        fi;
       od;
    fi;
    for i=1..Осн_Док do
     if not Осн_Док[i].ДО=nil:
        if not Осн_Док[i].ДО.Контр=nil:
           AddInArray(Buf,True,False,RecordToString(Осн_Док[i].ДО.Контр));
        fi;
     fi;
    od;
 fi;
 ii=LengthOfArray(Buf);
 for i=1..ii do
  ff=Раб.Бюджет2005.Объединить(ff,"UKey="+Buf[i],"or ");
 od;
 oldrec = РеквП;
 if not РеквП=nil or FieldName="БО" or FieldName="Договор":
    rec=OpenCardFile("Контрагент",ff,РеквП,crdRecordOnly);
   else
    rec=Раб.Поиск.ВыборИзКартотеки("Выбор контрагента","КОНТРАГЕНТ","ПРИЗНАК|ПОЛНИМЯ|КОРИМЯ|ИНН","Код|Полное имя|Краткое имя|ИНН",ff);
 fi;
 if Rec=nil or Rec=oldrec: ^False; fi;
 РеквП=Rec;
 БанкП=Раб.Бюджет2005.БанкСчет(РеквП,False);
 Призн_К=CardFileRecSign("Контрагент","Признак","К",РеквП,"");
 if (not Договор=nil or ЕстьДО) and ff="":
    ОчиститьР2_OnEnter("",Iter);
    НомерБО_OnExit(FieldName,Iter);
    ClearVariable(Расшифр);
 fi;
 Return  False;
end;

Proc РеквП_OnExit(FieldName: String; Iter: Integer);
 РеквП=nil;
 БанкП=nil;
 Призн_К="";
end;

Func Призн_К_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if РеквП=nil: Message("Выберите контрагента",mtError); Template.Field="РеквП_"; ^False; fi;
 if EnqOkCancel("Изменение аналитического признака контрагента может привести к ошибке^MВы уверены, что хотите изменить признак ?",mtWarning)=cmOk:
    tmp=AnaElection("К.*",False,False,Призн_К);
    if not tmp="":
       Призн_К=tmp;
    fi;
 fi;
 Return False;
end;

Proc Призн_К_OnExit(FieldName: String; Iter: Integer);
 if not РеквП=nil:
    Призн_К=CardFileRecSign("Контрагент","Признак","К",РеквП,"");
 fi;
end;

Func БанкП_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 if РеквП=nil: Message("Выберите контрагента",mtError); Template.Field="РеквП_"; ^False; fi;
 Rec=OpenCardFile("Банк_Счета","Контрагент="+RecordToString(РеквП),БанкП,crdRecordOnly);
 if not Rec=nil:
    БанкП=Rec;
 fi;
 Return False;
end;

Func ОчиститьР4_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Учитывать:
    if EnqOkCancel("Очистить раздел 4 ?",mtWarning)=cmOk:
       Нал_Статус="";
       Нал_КБК="";
       Нал_ОКАТО="";
       Нал_ОснПл="";
       Нал_Пер="";
       Нал_НомДок="";
       Нал_ДатДок=1.1.100;
       Нал_ТипПл="";
       ОбновитьСч(-1);
    fi;
 fi;
 Return False;
end;

Func Р4_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Р4 and FieldName="Нал_Статус":
    if Нал_Статус="": Нал_Статус="00"; fi;
    if Нал_КБК=""   : Нал_КБК="0"; fi;
    if Нал_ОКАТО="" : Нал_ОКАТО="0"; fi;
    if Нал_ОснПл="" : Нал_ОснПл="0"; fi;
    if Нал_Пер=""   : Нал_Пер="0"; fi;
    if Нал_НомДок="": Нал_НомДок="0"; fi;
    if Нал_ТипПл="" : Нал_ТипПл="0"; fi;
 fi;
 Return True;
end;

Proc Нал_OnExit(FieldName: String; Iter: Integer);
 ОбновитьСч(-1);
end;


Func Нал_Статус_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n:i;
 Template.HideEditor(False);
 ClearVariable(Buf);
 ClearVariable(Buf2);
 Buf2[01]="01"; Buf[01]="01 -- налогоплательщик (плательщик сборов) - юридическое лицо";
 Buf2[02]="02"; Buf[02]="02 -- налоговый агент";
 Buf2[03]="06"; Buf[03]="06 -- участник внешнеэкономической деятельности - юридическое лицо";
 Buf2[04]="08"; Buf[04]="08 -- плательщик - юридическое лицо (индивидуальный предприниматель), осуществляющее перевод денежных средств в уплату страховых взносов и иных платежей в бюджетную систему Российской Федерации";
 Buf2[05]="09"; Buf[05]="09 -- налогоплательщик (плательщик сборов) - индивидуальный предприниматель";
 Buf2[06]="10"; Buf[06]="10 -- налогоплательщик (плательщик сборов) - нотариус, занимающийся частной практикой";
 Buf2[07]="11"; Buf[07]="11 -- налогоплательщик (плательщик сборов) - адвокат, учредивший адвокатский кабинет";
 Buf2[08]="12"; Buf[08]="12 -- налогоплательщик (плательщик сборов) - глава крестьянского (фермерского) хозяйства";
 Buf2[09]="13"; Buf[09]="13 -- налогоплательщик (плательщик сборов) - иное физическое лицо - клиент банка (владелец счета)";
 Buf2[10]="14"; Buf[10]="14 -- налогоплательщик, производящий выплаты физическим лицам";
 Buf2[11]="16"; Buf[11]="16 -- участник внешнеэкономической деятельности - физическое лицо";
 Buf2[12]="17"; Buf[12]="17 -- участник внешнеэкономической деятельности - индивидуальный предприниматель";
 Buf2[13]="19"; Buf[13]="19 -- организации и их филиалы, составившие распоряжение о переводе денежных средств, удержанных из заработной платы (дохода) должника - физического лица в счет погашения задолженности по платежам в бюджетную систему РФ на основании исполнительного документа";
 Buf2[14]="21"; Buf[14]="21 -- ответственный участник консолидированной группы налогоплательщиков";
 Buf2[15]="22"; Buf[15]="22 -- участник консолидированной группы налогоплательщиков";
 Buf2[16]="24"; Buf[16]="24 -- плательщик - физическое лицо, осуществляющее перевод денежных средств в уплату страховых взносов и иных платежей в бюджетную систему Российской Федерации";
 n=Alternate('Статус',Buf,-1,SearchInArray(Buf2,Нал_Статус,False),12);
 if not n=0:
    Нал_Статус=SubStr(Buf[n],1,2);
    ОбновитьСч(-1);
 fi;
 Return Cur;
end;

Func Нал_КБК_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:S;
 Template.HideEditor(False);
 tmp=Раб.КБК.ВыбратьКД;
 if tmp="": ^Cur; fi;
 Нал_КБК=tmp;
 ОбновитьСч(-1);
 Return Cur;
end;

Func Нал_ОКАТО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Template.HideEditor(False);
 if РеквП=nil: Message("Выберите контрагента",mtError); Template.Field="РеквП_"; ^Cur; fi;
 if ver>=12:
    Нал_ОКАТО=РеквП.ОКТМО;
   else
    Нал_ОКАТО=РеквП.ОКАТО;
 fi;
 if Нал_ОКАТО="": Нал_ОКАТО="0"; fi;
 ОбновитьСч(-1);
 Return Cur;
end;

Func Нал_ОснПл_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n:i;
 Template.HideEditor(False);
 ClearVariable(Buf);
 ClearVariable(Buf2);
 Buf2[01]="ТП"; Buf[01]="ТП -- платежи текущего года";
 Buf2[02]="ЗД"; Buf[02]="ЗД -- добровольное погашение задолженности но истекшим налоговым, расчетным (отчетным) периодам при отсутствии требования налогового органа об уплате налогов (сборов)";
 Buf2[03]="БФ"; Buf[03]="БФ -- текущий платеж физлица - клиента банка (владельца счета), уплачиваемый со своего банковского счета";
 Buf2[04]="ТР"; Buf[04]="ТР -- погашение задолженности по требованию налогового органа об уплате налогов (сборов)";
 Buf2[05]="РС"; Buf[05]="РС -- погашение рассроченной задолженности";
 Buf2[06]="ОТ"; Buf[06]="ОТ -- погашение отсроченной задолженности";
 Buf2[07]="РТ"; Buf[07]="РТ -- погашение реструктурируемой задолженности";
 Buf2[08]="ПБ"; Buf[08]="ПБ -- погашение должником задолженности в ходе процедур, применяемых в деле о банкротстве";
 Buf2[09]="ПР"; Buf[09]="ПР -- погашение задолженности, приостановленной к взысканию";
 Buf2[10]="АП"; Buf[10]="АП -- погашение задолженности по акту проверки";
 Buf2[11]="АР"; Buf[11]="АР -- погашение задолженности но исполнительному документу";
 Buf2[12]="ИН"; Buf[12]="ИН -- погашение инвестиционного налогового кредита";
 Buf2[13]="ТЛ"; Buf[13]="ТЛ -- погашение учредителем (участником) должника, собственником имущества должника - унитарного предприятия или третьим лицом задолженности в ходе процедур, применяемых в деле о банкротстве";
 Buf2[14]="ЗТ"; Buf[14]="ЗТ -- погашение текущей задолженности в ходе процедур, применяемых в деле о банкротстве";
 Buf2[15]="0";  Buf[15]="0  -- при невозможности однозначно идентифицировать платеж";
 n=Alternate('Основание платежа',Buf,-1,SearchInArray(Buf2,Нал_ОснПл,False),12);
 if not n=0:
    Нал_ОснПл=Trim(SubStr(Buf[n],1,2));
    ОбновитьСч(-1);
 fi;
 Return Cur;
end;

Func Нал_Пер_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n,yyyy:I;
var d:D;
var tmp:s;
 Template.HideEditor(False);
 ClearVariable(Buf);
 Buf[01]="Выбрать дату";
 Buf[02]="МС.01 -- Месячный платеж за январь";
 Buf[03]="МС.02 -- Месячный платеж за февраль";
 Buf[04]="МС.03 -- Месячный платеж за март";
 Buf[05]="МС.04 -- Месячный платеж за апрель";
 Buf[06]="МС.05 -- Месячный платеж за май";
 Buf[07]="МС.06 -- Месячный платеж за июнь";
 Buf[08]="МС.07 -- Месячный платеж за июль";
 Buf[09]="МС.08 -- Месячный платеж за август";
 Buf[10]="МС.09 -- Месячный платеж за сентябрь";
 Buf[11]="МС.10 -- Месячный платеж за октярь";
 Buf[12]="МС.11 -- Месячный платеж за ноябрь";
 Buf[13]="МС.12 -- Месячный платеж за декабрь";
 Buf[14]="КВ.01 -- Квартальный платеж за I квартал";
 Buf[15]="КВ.02 -- Квартальный платеж за II квартал";
 Buf[16]="КВ.03 -- Квартальный платеж за III квартал";
 Buf[17]="КВ.04 -- Квартальный платеж за IV квартал";
 Buf[18]="ПЛ.01 -- Полугодовой платеж за I полугодие";
 Buf[19]="ПЛ.02 -- Полугодовой платеж за II полугодие";
 Buf[20]="ГД.00 -- Годовой платеж";
 n=Alternate('Основание платежа',Buf,-1,1,12);
 if not n=0:
    if n=1: 
       d=Calendar;
       if not d=1.1.100: Нал_Пер=DateToString(d); fi;
      else
       tmp=SubStr(Buf[n],1,5);
       ClearVariable(Buf);
       for n=1..5 do Buf[n]=Str(Year(ToDay)+n-4); od;
       InsertInArray(Buf,1,"Ввести год в ручную");
       n=Alternate("Год налогового периода",Buf,30,5,12);
       if n=0: ^Cur;
         |n=1: if Input(YYYY,"Введите год налогового периода")=cmCancel: ^Cur; fi;
         |True: YYYY=Int(Buf[n]);
       fi;
       Нал_Пер=tmp+"."+Str(yyyy);
    fi;
    ОбновитьСч(-1);
 fi;
 Return Cur;
end;

Func Нал_ТипПл_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n:I;
 Template.HideEditor(False);
 ClearVariable(Buf);
 ClearVariable(Buf2);
 Buf2[1]="0";  Buf[1]="0  -- уплата налогов, сборов, авансовых платежей, взносов, налоговых санкций, административных и иных штрафов, прочих платежей в налоговые органы, кроме пени и процентов (в налоговые органы); в остальных случаях (в таможенные органы)";
 Buf2[2]="ПЕ"; Buf[2]="ПЕ -- уплата пени (в налоговые и таможенные органы)";
 Buf2[3]="ПЦ"; Buf[3]="ПЦ -- уплата процентов (в налоговые органы)";
 Buf2[4]="ШТ"; Buf[4]="ШТ -- уплата штрафа (в таможенные органы)";
 Buf2[5]="ЗД"; Buf[5]="ЗД -- уплата в счет погашения задолженности (в таможенные органы)";
 n=Alternate('Тип платежа',Buf,-1,SearchInArray(Buf2,Нал_ТипПл,False),12);
 if not n=0:
    Нал_ТипПл=Trim(SubStr(Buf[n],1,2));
    ОбновитьСч(-1);
 fi;
 Return Cur;
end;

Func Нал_ДатДок_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:d;
 if Р4_OnEnter(FieldName,Iter):
    tmp=Calendar;
    if not tmp=1.1.100:
       Нал_ДатДок=tmp;
    fi;
 fi;
 Return False;
end;

Proc Нал_ДатДок_OnExit(FieldName: String; Iter: Integer);
 ClearVariable(Нал_ДатДок);
 Нал_OnExit(FieldName,Iter);
end;

Func ОчиститьР5_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Учитывать:
    if EnqOkCancel("Очистить раздел 5 ?",mtWarning)=cmOk:
       ClearVariable(Расшифр);
    fi;
 fi;
 Return False;
end;

Func ОбновОпл_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Учитывать:
    ОбновитьРасшифрОснДок(ОбновитьОснДок,0);
 fi;
 Return False;
end;

Func Ист_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="1 -- средства бюджета";
 Buf[2]="2 -- средства от приносящей доход деятельности";
 Buf[3]="3 -- средства дополнительного бюджетного финансирования";
 Buf[4]="4 -- средства для финансирования мероприятий по оперативно-розыскной деятельности";
 Buf[5]="5 -- средства, поступающие во временное распоряжение "+if(f13н:"казенных учреждений"|f15н:"бюджетных учреждений"|true:"получателя средств федерального бюджета");
 if ver>=7:
    Buf[6]="6 -- средства юридических лиц";
 fi;
 n=Alternate("Вид средств",Buf,-1,Int(Расшифр[Iter].Ист),12);
 if not n=0:
    ИстОбщ=Str(n);
    for Iter=1..Расшифр do
     if n=5 or not ИстОбщ=Расшифр[Iter].Ист: Расшифр[Iter].ТипКБК=""; Расшифр[Iter].КБК=""; fi;
     Расшифр[Iter].Ист=ИстОбщ;
     if n=5: ОбновитьСч(Iter); fi;
    od;
 fi;
 Return False;
end;

Func Вал_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
var Cur:S;
 if Док_ОКВ="": Message("Заполните код валюты по ОКВ",mtError); Template.Field="Док_ОКВ"; ^False; fi;
 if Док_ОКВ="643": Message("Заполнение данного поля для кода валюты 643 (Российский рубль) не требуется"); ^False; fi;
 ClearVariable(Buf);
 ClearVariable(Buf2);
 n=0;
 for Currencies Cur="*&~"+BaseCurrency do
  n=n+1;
  Buf[n]=Up(Cur);
  Buf2[n]=Buf[n]+" --"+Name_C(Cur);
 od;
 if n=0: Message("Список валют пуст",mtWarning); ^False; fi;
 n=Alternate("Валюта",Buf2,-1,SearchInArray(Buf,Вал),12);
 if n=0: ^False; fi;
 Вал=Buf[n];
 Return False;
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
var Iter_:I;
 if not Учитывать:
    Iter_=if(Расшифр=0,0,Iter);
    Iter=InsertFrame(Расшифр,if(Расшифр=0,1,Iter+1));
    Расшифр[Iter].Ист=ИстОбщ;
    if not Iter_=0 and FieldName="AA":
       Расшифр[Iter].ТипКБК=Расшифр[Iter_].ТипКБК;
       Расшифр[Iter].КБК=Расшифр[Iter_].КБК;
       Расшифр[Iter].ТипКБКП=Расшифр[Iter_].ТипКБКП;
       Расшифр[Iter].КБКП=Расшифр[Iter_].КБКП;
       Расшифр[Iter].ДопКЛ=Расшифр[Iter_].ДопКЛ;
       Расшифр[Iter].ДопКЛП=Расшифр[Iter_].ДопКЛП;
       Расшифр[Iter].Сум=Расшифр[Iter_].Сум;
       Расшифр[Iter].СумРуб=Расшифр[Iter_].СумРуб;
       Расшифр[Iter].НазнПл=Расшифр[Iter_].НазнПл;
       Расшифр[Iter].Примеч=Расшифр[Iter_].Примеч;
       Расшифр[Iter].СчДеб=Расшифр[Iter_].СчДеб;
       Расшифр[Iter].СчКре=Расшифр[Iter_].СчКре;
       Расшифр[Iter].Призн=Расшифр[Iter_].Призн;
       Расшифр[Iter].Кмнт=Расшифр[Iter_].Кмнт;
       Расшифр[Iter].ДокСум=Расшифр[Iter_].ДокСум;
       Расшифр[Iter].ДокСумРуб=Расшифр[Iter_].ДокСумРуб;
       Расшифр[Iter].Призн_ОснДок=Расшифр[Iter_].Призн_ОснДок;
       Расшифр[Iter].ДО=Расшифр[Iter_].ДО;
    fi;
    if ИстОбщ="5": ОбновитьСч(Iter); fi;
 fi;
 Return False;
end;

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
var Flag:L;
 if not Учитывать:
    Flag=not Расшифр[Iter].ДО=nil;
    DeleteFrame(Расшифр,Iter);
    if Flag and fР2_НазнПл: Док_НазнПл=ОснДок_В_НазнПл(Док_НазнПл,False); fi;
    ОбновитьТекОпл;
 fi;
 Return False;
end;

Func КБК_OnEnter(FieldName: String; Iter: Integer): logical;
var ВД_,КОСГУ_,КБК_,ТипКБК_,Период_,tmp:S;
var n,n1,nn:i;
var fПризнОКДП:L;
 НеПустаяТаблица;
 if Глава="" and (Рекв.РПО_ТипУчр="КУ" or Рекв.РПО_ТипУчр=""): Message("Заполните главу по БК",mtError); Template.Field="Глава"; ^False; fi;
 if ЕстьДО:
    ClearVariable(Buf);
    if ДО=nil or ver>=6:
       tmp="";
       for n=1..Осн_Док do
        if not Осн_Док[n].ДО=nil: 
           tmp=Раб.Бюджет2005.Объединить(tmp,"UKey="+RecordToString(Осн_Док[n].ДО),"or ");
        fi;
       od;
       tmp="("+tmp+")";
       if Length(tmp)+Length("Рег И ")>255: Message("Слишком много документов оснований.^MУменьшите количестово документов",mtError); Template.Field="Осн_ДокВид"; Template.Frame=Осн_Док; ^False; fi;
       tmp="Рег И "+tmp;
      else
       tmp="Рег and UKey="+RecordToString(ДО);
    fi;
    fПризнОКДП=Док_Аванс;
    Раб.Договор.altЗагл="Список КБК";
    Раб.Договор.altВсе=1;
    Раб.Договор.inclПризнОКДП=if(fПризнОКДП,2,0);
    nn=Раб.Договор.ДО_КБК(tmp,if(БухИст(0)="","","ВД='"+БухИст(0)+"'"),ДатаДок,True,True);
--    nn=Раб.Договор.ДО_КБК(tmp,if(БухИст(0)="","","ВД='"+БухИст(0)+"'"),ДатаДок,True,True,"");
    if not nn=0:
       if Раб.Договор.AltВсе=-1: 
          ClearVariable(Расшифр); 
          НеПустаяТаблица;
          Iter=1;
          n1=1; 
         else 
          if Раб.Договор.AltВсе=0 and nn>1: nn=nn-1; fi;
          n1=nn; 
       fi;
       for n=n1..nn do
        if ИстОбщ="": 
           if Рекв.РПО_ТипУчр="БУ" or Рекв.РПО_ТипУчр="АУ":
              ИстОбщ="6";
             else
              ИстОбщ=Раб.Договор.lstВД[n];
           fi;
        fi;
        if ИстОбщ=Раб.Договор.lstВД[n] or ИстОбщ="6":
           if n>n1: Iter=InsertFrame(Расшифр,Iter+1); fi;
           Buf[Iter]=Раб.Договор.lstКБК[n];
           Расшифр[Iter].Ист=ИстОбщ;
           Расшифр[Iter].КБК=Раб.Формат.ReplaceSubstr(Раб.Договор.lstКБК[n],".","");
           Расшифр[Iter].ТипКБК=ВзятьТипКБК(Раб.Договор.lstКБК[n]);
           Расшифр[Iter].Призн_ОснДок=CardFileRecSign(Раб.Договор.crdДО,"Признак","ДОГОВОР",Раб.Договор.lstДок[n],"");
           Расшифр[Iter].Призн_ОснДок=Раб.Бюджет2005.Объединить(Расшифр[Iter].Призн_ОснДок,Trim(Раб.Договор.lstОбщПризн1[n]+" "+Раб.Договор.lstОбщПризн2[n])," ");
           Расшифр[Iter].Призн_ОснДок=Раб.Бюджет2005.Объединить(Расшифр[Iter].Призн_ОснДок,Trim(Раб.Договор.lstПризн[n]+" "+Раб.Договор.lstПризнДоп[n])," ");
           if fПризнОКДП: Расшифр[Iter].Призн_ОснДок=Раб.Бюджет2005.Объединить(Расшифр[Iter].Призн_ОснДок,Раб.Договор.lstПризнОКДП[n]," "); fi;
           Расшифр[Iter].Призн_ОснДок=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расшифр[Iter].Призн_ОснДок," ",ИсклПризн,"|");
           tmp=Раб.Бюджет2005.ПризнВСправ(Расшифр[Iter].Призн_ОснДок," ",".*");
           Расшифр[Iter].Призн=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расшифр[Iter].Призн," ",tmp," ");
           Период_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Расшифр[Iter].Призн_ОснДок," ","ПЕРИОД.*","");
           if Период_="":
              Период_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Расшифр[Iter].Призн," ","ПЕРИОД.*","");
              if Период_="" or not Match(Период_,"ПЕРИОД."+Раб.Договор.lstТекГод[n]+"!"):
                 Расшифр[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расшифр[Iter].Призн," ","ПЕРИОД."+Раб.Договор.lstТекГод[n],"ПЕРИОД.*","");
              fi;
           fi;
           Расшифр[Iter].ДокСум=Раб.Договор.lstСум[n];
           Расшифр[Iter].ДО=Раб.Договор.lstДок[n];
          else
           Trace("Пропущено по причине различного вида деятельности: "+Раб.Договор.LstТекст[n+if(Раб.Договор.AltВсе=-1,1,0)]);
        fi;
       od;
       if Раб.Договор.AltВсе=-1:
          n1=1;
          nn=Расшифр;
          ОбновитьСч(-1);
         else
          n1=Iter;
          nn=Iter;
          ОбновитьСч(Iter);
       fi;
       ВД_=БухИст(0);
       Refresh(False,ДатаДок+1);
       for Iter=n1..nn do
        if Расшифр[Iter].КБК="" or Расшифр[Iter].ДО=nil:
           Расшифр[Iter].ДокОпл=0;
          else
           Раб.Договор.ДО_Оплата(Расшифр[Iter].ДО,ДатаДок,ВД_,Buf[Iter],Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(Расшифр[Iter].Призн_ОснДок," ","&"),False,False,False);
           Расшифр[Iter].ДокОпл=Раб.Договор.lstСум[1];
           Расшифр[Iter].Сум=Расшифр[Iter].ДокСум-Расшифр[Iter].ДокОпл;
        fi;
       od;
       if n1=nn and not Расшифр[n1].ДО=nil:
          for Iter=1..n1-1 do
           if Расшифр[Iter].ДО=Расшифр[n1].ДО and
              Расшифр[Iter].Ист=Расшифр[n1].Ист and
              Расшифр[Iter].КБК=Расшифр[n1].КБК and
              Расшифр[Iter].Призн_ОснДок=Расшифр[n1].Призн_ОснДок:
              Расшифр[n1].ДокОпл=Расшифр[n1].ДокОпл+Расшифр[Iter].Сум;
           fi;
          od;
       fi;
       if fР2_НазнПл:
          Док_НазнПл=ОснДок_В_НазнПл(Док_НазнПл,False);
       fi;
    fi;
   |not БО=nil:
    ClearVariable(Buf);
    nn=0;
    for n=1..БО.Расшифр do
     if ИстОбщ="" or БО.Расшифр[n].Ист=ИстОбщ:
        nn=nn+1;
        Buf[nn]=БО.Расшифр[nn].Ист+" "+Раб.Бюджет2005.ВзятьКБКФК(БО.Расшифр[nn].КБК,БО.Расшифр[nn].ТипКБК,"БК")+"."+Раб.Бюджет2005.ВзятьКБКФК(БО.Расшифр[nn].КБК,БО.Расшифр[nn].ТипКБК,"КОСГУ")+" {"+Trim(БО.Расшифр[nn].Призн+" "+БО.Призн_Договор)+"} ="+Format("%.2N",БО.Расшифр[nn].Сум1_1+БО.Расшифр[nn].Сум1_2+БО.Расшифр[nn].Сум1_3+БО.Расшифр[nn].Сум1_4+БО.Расшифр[nn].Сум1_5+БО.Расшифр[nn].Сум1_6+БО.Расшифр[nn].Сум1_7+БО.Расшифр[nn].Сум1_8+БО.Расшифр[nn].Сум1_9+БО.Расшифр[nn].Сум1_10+БО.Расшифр[nn].Сум1_11+БО.Расшифр[nn].Сум1_12);
     fi;
    od;
    if nn>1: InsertInArray(Buf,1,"Выбрать все"); nn=nn+1; fi;
    n=Alternate("Выберите КБК из бюджетного обязательства ("+Призн_БО+")",Buf,-1,1,12);
    if not n=0:
       if Buf[n]="Выбрать все":
          ClearVariable(Расшифр);
          for n=2..nn do
           Iter=InsertFrame(Расшифр,Расшифр+1);
           ИстОбщ=БО.Расшифр[n-1].Ист;
           Расшифр[Iter].КБК=БО.Расшифр[n-1].КБК;
           Расшифр[Iter].ТипКБК=БО.Расшифр[n-1].ТипКБК;
           Расшифр[Iter].Призн=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Trim(БО.Расшифр[n-1].Призн+" "+БО.Призн_Договор)," ",ИсклПризн,"|");
          od;
          ОбновитьСч(-1);
         else
          if Buf[1]="Выбрать все": n=n-1; fi;
          ИстОбщ=БО.Расшифр[n].Ист;
          Расшифр[Iter].КБК=БО.Расшифр[n].КБК;
          Расшифр[Iter].ТипКБК=БО.Расшифр[n].ТипКБК;
          Расшифр[Iter].Призн=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Trim(БО.Расшифр[n].Призн+" "+БО.Призн_Договор)," ",ИсклПризн,"|");
          ОбновитьСч(Iter);
       fi;
    fi;
   |True:
    if ИстОбщ="": Message("Выберите наименование вида средств для исполнения обязательства",mtError); Template.Field="Ист_"; ^False; fi;
    Расшифр[Iter].Ист=ИстОбщ;
    if ИстОбщ="5": Message("Для средств поступающие во временное распоряжение, указывать КБК не требуется");^False; fi;
    if ИстОбщ="6":
       КОСГУ_=AnaElection("КОСГУ.???!&~КОСГУ.000!",False,False,hКОСГУ);
       if not КОСГУ_="":
          hКОСГУ=КОСГУ_;
          КОСГУ_=SubStr(КОСГУ_,7,3);
          if Раб.Бюджет2005.MatchMask("."+КОСГУ_,Раб.Бюджет2005.МаскаРасхСч): ТипКБК_="10";
            |Раб.Бюджет2005.MatchMask("."+КОСГУ_,Раб.Бюджет2005.МаскаДоходСч): ТипКБК_="20";
            |Раб.Бюджет2005.MatchMask("."+КОСГУ_,Раб.Бюджет2005.МаскаДефицитСч): ТипКБК_="31";
            |True: ТипКБК_="10";
          fi;
          Расшифр[Iter].КБК="00000000000000000"+КОСГУ_;
          Расшифр[Iter].ТипКБК=ТипКБК_;
       fi;
      else
       if Расшифр[Iter].КБК="":
          КБК_=hКБК;
         else
          if Расшифр[Iter].ТипКБК="10": КБК_="ФКР."+SubStr(Расшифр[Iter].КБК,1,3)+"."+SubStr(Расшифр[Iter].КБК,4,4)+"."+SubStr(Расшифр[Iter].КБК,8,7)+"."+SubStr(Расшифр[Iter].КБК,15,3);
            |Расшифр[Iter].ТипКБК="20": КБК_="КД."+SubStr(Расшифр[Iter].КБК,1,3)+"."+SubStr(Расшифр[Iter].КБК,4,1)+"."+SubStr(Расшифр[Iter].КБК,5,2)+"."+SubStr(Расшифр[Iter].КБК,7,5)+"."+SubStr(Расшифр[Iter].КБК,12,2)+"."+SubStr(Расшифр[Iter].КБК,14,4);
            |Расшифр[Iter].ТипКБК="31" or Расшифр[Iter].ТипКБК="32": КБК_="КИФД."+SubStr(Расшифр[Iter].КБК,1,3)+"."+SubStr(Расшифр[Iter].КБК,4,2)+"."+SubStr(Расшифр[Iter].КБК,6,2)+"."+SubStr(Расшифр[Iter].КБК,8,2)+"."+SubStr(Расшифр[Iter].КБК,10,2)+"."+SubStr(Расшифр[Iter].КБК,12,2)+"."+SubStr(Расшифр[Iter].КБК,14,4);
          fi;
          КОСГУ_=SubStr(Расшифр[Iter].КБК,18,3);
       fi;
       if Расшифр[Iter].Ист="1": tmp="(ФКР."+Глава+".????.???????.???|КД."+Глава+".?.??.?????.??.????|КИФД."+Глава+".??.??.??.??.??.????)&~ФКР.???.0000.0000000.000";
         |Расшифр[Iter].Ист="2": tmp="ФКР."+Глава+".0000.0000000.000|КД."+Глава+".?.??.?????.??.????|КИФД."+Глава+".??.??.??.??.??.????"+if(Int(Банк.РПО_КодБюдж)>1,"|ФКР."+Глава+".????.???????.???","");
         |True: tmp="ФКР."+Глава+".????.???????.???|КД."+Глава+".?.??.?????.??.????|КИФД."+Глава+".??.??.??.??.??.????";
       fi;
       КБК_=AnaElection(tmp,False,False,КБК_);
       if not КБК_="":
          hКБК=КБК_;
          if Match(КБК_,"ФКР.*"): ТипКБК_="10"; if КОСГУ_="": КОСГУ_=hЭКР; fi;
            |Match(КБК_,"КД.*"): ТипКБК_="20"; if КОСГУ_="": КОСГУ_=hЭКД; fi;
            |Match(КБК_,"КИФД.???.00.*"): ТипКБК_="31"; if КОСГУ_="": КОСГУ_=hЭКИФД; fi;
            |Match(КБК_,"КИФД.???.01.*"): ТипКБК_="31"; if КОСГУ_="": КОСГУ_=hЭКИФД; fi;
            |Match(КБК_,"КИФД.???.02.*"): ТипКБК_="32"; if КОСГУ_="": КОСГУ_=hЭКИФД; fi;
          fi;
          КОСГУ_=ВыборЭК(ТипКБК_,КОСГУ_);
          if КОСГУ_="": ^False; fi;
          КБК_=SubStr(КБК_,Pos(".",КБК_)+1,255);
          КБК_=Раб.Формат.ReplaceSubstr(КБК_,".","");
          Расшифр[Iter].КБК=КБК_+КОСГУ_;
          Расшифр[Iter].ТипКБК=ТипКБК_;
          ОбновитьСч(Iter);
          if fАС:
             tmp=Trim(Раб.Вспом.АС.Вызвать(КОСГУ_,БанкП.РСчет,SelfBln));
             Док_НазнПл=Раб.Бюджет2005.Объединить(Док_НазнПл,tmp," ");
       fi;
    fi;
 fi;
 fi;
 Return False;
end;

Proc КБК_OnExit(FieldName: String; Iter: Integer);
 Расшифр[Iter].ТипКБК="";
 Расшифр[Iter].КБК="";
 if not Расшифр[Iter].ДО=nil:
    Расшифр[Iter].ДокСум=0;
    Расшифр[Iter].ДокОпл=0;
    Расшифр[Iter].Призн_ОснДок="";
    Расшифр[Iter].ДО=nil;
 fi;
end;

Func КБК_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n,nn,z,zz,i,ii,Iter,w,ww,y:i;
var ВД_,БК_,КОСГУ_,Призн_,Сч_,tmp:S;
var fsub:L;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 if ЕстьДО or Док_Аванс or not БО=nil:
    КБК_OnEnter(AsString(Template.Field),Iter);
   else
    if ДатаДок=1.1.100: Message("Заполните дату заявки",mtError); Template.Field="ДатаДок"; ^Cur; fi;
    ВД_=БухИст(0);
    if ВД_ = "":
       ВД_ = Раб.Бюджет2005.ВзятьКодСчета(Расшифр[1].СчДеб,"","ВД",False);
    fi;

    if Р2:
       if РеквП=nil or Призн_К="": Message("Заполните наименование / фамилия, имя, отчество",mtError); Template.Field="РеквП_"; ^Cur; fi;
       Раб.Свертка.УслСч="*."+if(ВД_="","?",ВД_)+".302.??.*";
       Раб.Свертка.УслАн=Призн_К;
      else
       Раб.Свертка.УслСч="*."+if(ВД_="","?",ВД_)+".303.??.*|*."+if(ВД_="","?",ВД_)+".304.03.*";
       Раб.Свертка.УслАн="";
    fi;
    ClearVariable(Buf);
    ClearVariable(Buf2);
    ClearVariable(Buf3);
    ClearVariable(BufN);
    Раб.Свертка.РазрешитьПрогресс=False;
    Раб.Свертка.ВыполнитьОбновление=True;
    Раб.Свертка.РазрешитьАналитику=True;
    Раб.Свертка.РазрешитьСинтетику=True;
    Раб.Свертка.ДН=1.1.1900;
    Раб.Свертка.ДК=ДатаДок+1;
    Раб.Свертка.Расщепление=TujRepBalAccount+TujRepNoNullBal+TujRepCombinedAna;
    Раб.Свертка.МаскаСправ=Раб.Бюджет2005.СписокСправ(Раб.Свертка.УслСч,0,ИсклПризн);
    Раб.Свертка.ПолнСоотвМаскеСправ=False;
    Раб.Свертка.spМаскаСправ="|";
    Раб.Свертка.СжатиеСправ=ИсклПризн;
    Раб.Свертка.ПорядокПоМаскеСправ=False;
    Раб.Свертка.ТипСинтетики="КБК+СЧ6";
    nn=Раб.Свертка.Расчет;
    --Нормализиция по аналитике
    for n=1..nn do
     z=SearchInArray(Buf,Раб.Свертка.Список_Синт[n],True);
     if z=-1:
        z=InsertInArraySort(Buf,Раб.Свертка.Список_Синт[n]);
        ClearVariable(Buf3);
        ClearVariable(BufI);
        ii=0;
        i=n;
        While not i=-1 do
         ii=ii+1;
         ww=WordsCount(Раб.Свертка.Список_Ан[i]," ");
         for w=1..ww do
          tmp=ExtractWord(w,Раб.Свертка.Список_Ан[i]," ");
          tmp=ExtractWord(1,tmp,".")+".*";
          y=SearchInArray(Buf3,tmp,True);
          if y=-1:
             y=InsertInArraySort(Buf3,tmp);
             InsertInArray(BufI,y,1);
            else
             BufI[y]=BufI[y]+1;
          fi;
         od;
         i=SearchInArray(Раб.Свертка.Список_Синт,Buf[z],True,i+1);
        od;
        tmp="";
        ww=LengthOfArray(Buf3);
        for w=1..ww do
         if ii=BufI[w]:
            tmp=tmp+" "+Buf3[w];
         fi;
        od;
        InsertInArray(Buf2,z,Trim(tmp));
     fi;
    od;
    --Дополнительная досвертка
    ClearVariable(Buf3);
    for n=1..nn do
     if Round(Раб.Свертка.Сум1[n],2)<>0:
        z=SearchInArray(Buf,Раб.Свертка.Список_Синт[n],True);
        tmp=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Раб.Свертка.Список_Ан[n]," ",Buf2[z]," ");
        z=SearchInArray(Buf3,Раб.Свертка.Список_Синт[n]+"#"+tmp,True);
        if z=-1:
           z=InsertInArraySort(Buf3,Раб.Свертка.Список_Синт[n]+"#"+tmp);
           InsertInArray(BufN,z,Раб.Свертка.Сум1[n]);
          else
           BufN[z]=BufN[z]+Раб.Свертка.Сум1[n];
        fi;
     fi;
    od;
    ClearVariable(Buf);
    ClearVariable(Buf2);
    nn=LengthOfArray(Buf3);
    for n=1..nn do
     if Round(BufN[n],2)<>0:
        z=InsertInArraySort(Buf2,Buf3[n]);
        InsertInArray(Buf,z,ExtractWord(1,Buf3[n],"#")+".730"+" {"+ExtractWord(2,Buf3[n],"#")+"} ="+Format("%.2N",-BufN[n]));
     fi;
    od;
    zz=LengthOfArray(Buf);
    if zz=0:
       if Р2:
          Message("Кредиторской задолженности за контрагентом ("+Призн_К+"), по состоянию на "+DateToString(ДатаДок)+", не числится^MВызовите отчет для уточнения",mtWarning);
         else
          Message("Кредиторской задолженности по состоянию на "+DateToString(ДатаДок)+", не числится^MВызовите отчет для уточнения",mtWarning);
       fi;
       ^Cur;
      else
       if zz>1:
          z=1; Сч_="";
          While z<=zz do
           tmp=Раб.Бюджет2005.ВзятьКодСчета(Trim(ExtractWord(1,Buf[z],"{")),"","Сч5",True);
           if not Сч_=tmp:
              InsertInArray(Buf,z,"--"+Раб.Бюджет.НаимКБК("СЧ",tmp));
              Сч_=tmp;
              z=z+1;
              zz=zz+1;
           fi;
           z=z+1;
          od;
          InsertInArray(Buf,1,"Выбрать все");
          zz=zz+1;
       fi;
       fsub=False;
       z=Alternate("Кредиторская задолженность на счетах по "+if(Призн_К="" or not Р2,"",Призн_К+" ("+Name_A(Призн_К)+")"),Buf,-1,1,12);
       if Pos("--",Buf[z])=1: z=z+1; fsub=true; fi; --выбрана подгруппа
       if not z=0:
          if Buf[z]="Выбрать все" or fsub:
             i=if(fsub,z,2);
             ii=zz;
             n=999; 
            else
             i=z; 
             ii=z;
             n=0;
          fi;
          ShowProgress(ii,"Обработка...");
         Try
          for z=i..ii do
           ProgressPos(z);
           if Round(ExtractWord(2,Buf[z],"="),2)<0:
              if n=999:
                 Trace("Кредиторская задолженность не может быть отрицательной");
                 Trace(Buf[z]);
                 Trace("Значение пропущено");
                else
                 Message("Кредиторская задолженность не может быть отрицательной",mtError);
              fi;
             else
              if Pos("--",Buf[z])=1:
                 if fsub: Break; fi; --выбрана подгруппа
                else
                 if z>i and n=999 or Расшифр=0: Iter=InsertFrame(Расшифр,Iter+1); fi;
                 Расшифр[Iter].СчДеб=Раб.Бюджет2005.ВзятьКодСчета(Trim(ExtractWord(1,Buf[z],"{")),"","АН",True)+".830";
                 ВД_=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,"","ВД",False);
                 БК_=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,"","БК",False);
                 Призн_=ExtractWord(2,Buf[z],"{");
                 Призн_=ExtractWord(1,Призн_,"}");
                 if Match(Расшифр[Iter].СчДеб,"*.?.302.??.*"):
                     КОСГУ_=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,"","АН",False);
                     КОСГУ_=Раб.Бюджет2005.Соотв_Ан_КОСГУ("302",КОСГУ_);
                   else
                    КОСГУ_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Призн_," ","КОСГУ.*","");
                    КОСГУ_=SubStr(КОСГУ_,7,3);
                 fi;
                 ИстОбщ=if(ВД_='1':'1'|ВД_='5':'3'|True:'6');
                 Расшифр[Iter].Ист=if(ВД_='1':'1'|ВД_='5':'3'|True:'6');
                 Расшифр[Iter].КБК=Раб.Формат.ReplaceSubstr(БК_+"."+КОСГУ_,".","");
                 Расшифр[Iter].ТипКБК=ВзятьТипКБК(БК_+"."+КОСГУ_);
                 if not Correspond(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре):
                    Расшифр[Iter].СчКре="";
                    Расшифр[Iter].Призн=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Расшифр[Iter].Призн," ",Раб.Бюджет2005.СписокСправ(Расшифр[Iter].СчКре,0,ИсклПризн),"|");
                 fi;
                 Расшифр[Iter].Призн=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расшифр[Iter].Призн," ",Раб.Бюджет2005.ПризнВСправ(Призн_," ",".*")," ");
                 Расшифр[Iter].Призн=Раб.Бюджет2005.Объединить(Расшифр[Iter].Призн,Призн_," ");
                 if Round(Расшифр[Iter].Сум,2)=0:
                    Расшифр[Iter].Сум=Round(ExtractWord(2,Buf[z],"="),2);
                 fi;
                 if Расшифр[Iter].СчКре="":
                    if ВД_="1": Расшифр[Iter].СчКре=БК_+"."+ВД_+".304.05."+КОСГУ_;
                      |True: Расшифр[Iter].СчКре=Глава+".01.05.02.01.01.0000."+ВД_+".201.11.610";
                    fi;
                 fi;
              fi;
           fi;
          od;
           if fАС:
              tmp=Раб.Вспом.АС.Вызвать(КОСГУ_,БанкП.РСчет,SelfBln);
              Док_НазнПл=Раб.Бюджет2005.Объединить(Док_НазнПл,tmp," ");
           fi;
         Finally
          CloseProgress;
         end;
       fi;
    fi;
 fi;
 Return Cur;
end;

Func Призн_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp,ИсклПризн_,Период_,ВД_,БК_,КОСГУ_:S;
 НеПустаяТаблица;
 if Расшифр[Iter].КБК="" and not Расшифр[Iter].Ист="5": Message("Заполните код по БК плательщика",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
 Расшифр[Iter].Ист=ИстОбщ;
 if Name_S(Расшифр[Iter].СчКре)=" ": Message("Введите счет кредита",mtError); Template.Field="СчКре"; Template.Frame=Iter; ^False; fi;
 if Name_S(Расшифр[Iter].СчДеб)=" ": Message("Введите счет дебета",mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
 ИсклПризн_=Раб.Бюджет2005.ПризнВСправ(Расшифр[Iter].Призн_ОснДок," ",".*");
 ИсклПризн_=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(ИсклПризн_," ","|");
 ИсклПризн_=Раб.Бюджет2005.Объединить(ИсклПризн,ИсклПризн_,"|");
 Период_=Раб.Бюджет2005.ВзятьСловоИзНабораПомаске(Расшифр[Iter].Призн_ОснДок," ","ПЕРИОД.*","");
 if not Период_="": Период_=Период_+".*"; fi;
 КОСГУ_=Раб.Бюджет2005.ВзятьСловоИзНабораПомаске(Расшифр[Iter].Призн_ОснДок," ","КОСГУ.*","");
 if not КОСГУ_="": КОСГУ_=КОСГУ_+".*"; fi;
 tmp="";
 if КакБО and not Расшифр[Iter].Ист="5" and not Расшифр[Iter].ТипКБК="20":
    ВД_=БухИст(Iter);
    БК_=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК");
    КОСГУ_=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"КОСГУ");
    if ВД_="1": tmp="|"+БК_+"."+ВД_+".501.13."+КОСГУ_+"|"+БК_+"."+ВД_+".502.11."+КОСГУ_+"|"+БК_+"."+ВД_+".502.12."+КОСГУ_;
      |not ВД_="3": tmp="|"+БК_+"."+ВД_+".506.10."+КОСГУ_+"|"+БК_+"."+ВД_+".502.11."+КОСГУ_+"|"+БК_+"."+ВД_+".502.12."+КОСГУ_;
      |true   : tmp="";
    fi;
 fi;
 tmp=Раб.Бюджет2005.СписокСправ(Расшифр[Iter].СчДеб+"|"+Расшифр[Iter].СчКре+tmp,0,ИсклПризн_);
 tmp=Раб.Бюджет2005.Объединить(tmp,Период_,"|");
 tmp=Раб.Бюджет2005.Объединить(tmp,КОСГУ_,"|");
 if tmp="": Message("Аналитические признаки не требуются"); ^False; fi;
 ПолучитьДопАн(Iter);
 tmp=AnaElection(tmp,False,False,hПризн);
 if not tmp="":
    Расшифр[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расшифр[Iter].Призн," ",tmp,SubStr(tmp,1,Pos(".",tmp))+"*","");
    if Match(tmp,"ПЕРИОД.*"):
       Расшифр[Iter].Призн_ОснДок=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расшифр[Iter].Призн_ОснДок," ","ПЕРИОД.*"," ");
      |Match(tmp,"КОСГУ.*"):
       Расшифр[Iter].Призн_ОснДок=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расшифр[Iter].Призн_ОснДок," ","КОСГУ.*"," ");
    fi;
 fi;
 Return False;
end;

Proc Призн_OnExit(Field:S; Iter:I);
 Расшифр[Iter].Призн=Раб.Бюджет2005.УдалитьСловоИзНабора_Диалог2(Расшифр[Iter].Призн," ","Name_A");
end;

Proc КБКП_OnExit(FieldName: String; Iter: Integer);
var vКОСГУ:S;
 vКОСГУ=SubStr(Расшифр[Iter].КБКП,18,3);
 if vКОСГУ="": Расшифр[Iter].ТипКБКП="";
   |Раб.Бюджет2005.MatchMask("."+vКОСГУ,Раб.Бюджет2005.МаскаРасхСч): Расшифр[Iter].ТипКБКП="10";
   |Раб.Бюджет2005.MatchMask("."+vКОСГУ,Раб.Бюджет2005.МаскаДоходСч): Расшифр[Iter].ТипКБКП="20";
   |Раб.Бюджет2005.MatchMask("."+vКОСГУ,Раб.Бюджет2005.МаскаДефицитСч) and Match(Расшифр[Iter].КБКП,"???01*"): Расшифр[Iter].ТипКБКП="31";
   |Раб.Бюджет2005.MatchMask("."+vКОСГУ,Раб.Бюджет2005.МаскаДефицитСч) and Match(Расшифр[Iter].КБКП,"???02*"): Расшифр[Iter].ТипКБКП="32";
 fi;
end;

Func ТипКБКП_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 if Расшифр[Iter].КБКП="": Message("Введите КБК получателя",mtError); Template.Field="КБКП"; Template.Frame=Iter; ^False; fi;
 ClearVariable(Buf);
 Buf[1]="10 --Расходы";
 Buf[2]="20 --Доходы";
 Buf[3]="31 --Источники внутреннего финансирования дефицита бюджета";
 Buf[4]="32 --Источники внешнего финансирования дефицита бюджета";
 n=Alternate("Тип КБК получателя",Buf,-1,1,12);
 if not n=0:
  Расшифр[Iter].ТипКБКП=SubStr(Buf[n],1,2);
 fi;
 Return False;
end;

Proc Сум_OnExit(FieldName: String; Iter: Integer);
 ОбновитьТекОпл;
end;

Func Сум_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
 Template.HideEditor(False);
 НеПустаяТаблица;
 if Док_Сум=0: Message("Заполните сумму в валюте выплаты",mtError); Template.Field="Док_Сум"; ^Cur; fi;
 Iter=AsInteger(Template.Frame);
 if Расшифр[Iter].ДокСум=0:
    Расшифр[Iter].Сум=Док_Сум;
    Расшифр[Iter].СумРуб=Док_СумРуб;
   else
    Расшифр[Iter].Сум=Расшифр[Iter].ДокСум-Расшифр[Iter].ДокОпл;
    Расшифр[Iter].СумРуб=Расшифр[Iter].ДокСумРуб-Расшифр[Iter].ДокОплРуб;
 fi;
 Сум_OnExit(AsString(Template.Field),AsInteger(Template.Frame));
 Return Cur;
end;

Func СумРуб_OnEnter(FieldName: String; Iter: Integer): logical;
 if Вал="" or Вал=BaseCurrency:
    Message("Для выбранной валюты документа, сумму в рублях заполнять не требуется");
    ^False;
 fi;
 Return True;
end;

Func НазнПл_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 НеПустаяТаблица;
 Template.HideEditor(False);
 if Док_НазнПл="": Message("Заполните назначение платежа",mtError); Template.Field="Док_НазнПл"; fi;
 Расшифр[asInteger(Template.Frame)].НазнПл=Док_НазнПл;
 Return Cur;
end;

Func СчДеб_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 НеПустаяТаблица;
 if Расшифр[Iter].КБК="" and not Расшифр[Iter].Ист="5": Message("Заполните код по БК плательщика",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
 Расшифр[Iter].Ист=ИстОбщ;
 Раб.КСА.Начать;
 Раб.КСА.Добавить(Расшифр[Iter].СчДеб);
 Раб.КСА.Добавить(Расшифр[Iter].СчКре);
 if Раб.КСА.Закончить(True): RefreshAna; Message("Добавление новых счетов завершено"); fi;
 if Расшифр[Iter].СчДеб="": 
    tmp=Раб.Бюджет2005.ВзятьКБКФК(Расшифр[Iter].КБК,Расшифр[Iter].ТипКБК,"БК")+"."+БухИст(Iter);
    if hСчДеб="":
       tmp=tmp+".";
      else
       tmp=tmp+"."+Раб.Бюджет2005.ВзятьКодСчета(hСчДеб,"","СЧ8",False);
    fi;
   else 
    tmp=Расшифр[Iter].СчДеб;
 fi;
 tmp=PickCorrAccount(Расшифр[Iter].СчКре,True,tmp);
 if not tmp="":
    Расшифр[Iter].СчДеб=tmp;
    hСчДеб=tmp;
    ОбновитьПризн(Iter);
 fi;
 Return False;
end;

Func СчКре_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp,Mask:S;
 НеПустаяТаблица;
 if Расшифр[Iter].КБК="" and not Расшифр[Iter].Ист="5" and not Расшифр[Iter].Ист="6": Message("Заполните код по БК плательщика",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
 Расшифр[Iter].Ист=ИстОбщ;
 Раб.КСА.Начать;
 Раб.КСА.Добавить(Расшифр[Iter].СчДеб);
 Раб.КСА.Добавить(Расшифр[Iter].СчКре);
 if Раб.КСА.Закончить(True): RefreshAna; Message("Добавление новых счетов завершено"); fi;
 if Расшифр[Iter].СчКре="": tmp=hСчКре; else tmp=Расшифр[Iter].СчКре; fi;
 if Расшифр[Iter].Ист="6":
    Mask=СчКр;
   else
    Mask="("+СчКр+")&*."+БухИст(Iter)+".???.??.*";
 fi;
 tmp=AccountElection(Mask,False,tmp);
 if not tmp="":
    Расшифр[Iter].СчКре=tmp;
    hСчКре=tmp;
    if not Correspond(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре): Расшифр[Iter].СчДеб=""; fi;
    ОбновитьПризн(Iter);
 fi;
 Return False;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc cbУчитывать_OnChange(Sender: String);
var Flag:L;
var Rec: Record;
 if SkipEvent: Exit; fi;
 if Учитывать:
    Flag=True;
    Учитывать=Проверить;
   else
    if EnqOkCancel("Вы уверены, что хотите исключить документ из обработки ?",mtWarning)=cmCancel:
       EditorCancel;
       cbУчитывать.State=Учитывать;
       Exit;
      else
       Flag=False;
       if ВБанк:
          ВБанк=False;
          cbВБанк.State=ВБанк;
       fi;
    fi;
 fi;
 cbУчитывать.State=Учитывать;
 Оформление;
 if (Flag=Учитывать) and AsString(Template.Object)=Sender:
    if not Учитывать: НеПустаяТаблица; fi;
    if ДокОпер1=nil: EditorApply; fi;
    СоздатьПП(True);
 fi;
 if Flag and not Учитывать and not Round(КонтрольОстАв,2)=0:
    if ДО=nil:
       Rec=Осн_Док[1].ДО.Договор;
      else
       Rec=ДО.Договор;
    fi;
    if not Rec=nil:
       if EnqOkCancel("Вызвать отчет по договору для уточнения ?",mtWarning)=cmOk:
          ExecuteProc("ДОКУМЕНТЫ.ДОГОВОРПОСТ.ОТЧЕТ.Вызвать",Dat(1,1,Year(ДатаДок)+1),Rec);
       fi;
    fi;
 fi;
end;

Proc cbВБанк_OnChange(Sender: String);
var Flag:L;
 if SkipEvent: Exit; fi;
 --ClearVariable(ДатаРейс);
 --ClearVariable(НомРейс);
 --ClearVariable(ВЛВС);
 if НомРейс>0: НомРейс=-НомРейс; fi;
 Flag=False;
 if not Учитывать and ВБанк:
    Flag=True;
    Учитывать=True;
    cbУчитывать.State=Учитывать;
    ВБанк=Учитывать;
    cbВБанк.State=ВБанк;
 fi;
 if ((Flag and Учитывать) or not Flag) and AsString(Template.Object)=Sender:
    if ДокОпер1=nil: EditorApply; fi;
    СоздатьПП(True);
 fi;
end;

Proc cbПроводить_OnChange(Sender: String);
var Flag:L;
 if SkipEvent: Exit; fi;
 Try
  if Проводить:
     Flag=True;
     if ДатаОпер=1.1.100: Message("Введите дату выписки",mtError); Template.Object="btnДатаОпер"; Проводить=False; Exit; fi;
     if ДокОперНом="": Message("Введите номер платежного поручения (документа, подтверждающий проведение операции)",mtError); Template.Object="edДокОперНом"; Проводить=False; Exit; fi;
     if ДокОперДат=1.1.100: Message("Введите дату платежного поручения (документа, подтверждающий проведение операции)",mtError); Template.Object="edДокОперДат"; Проводить=False; Exit; fi;
     if not ВБанк:
        ВБанк=True;
        cbВБанк.State=ВБанк;
        Проводить=ВБанк;
     fi;
    else
     if EnqOkCancel("Вы уверены, что хотите исключить документ из обработки ?",mtWarning)=cmCancel:
        EditorCancel;
     fi;
  fi;
 Finally
  if Flag=Проводить:
     if СоздатьПП(Sender="cbПроводить"):
        if Проводить: Template.Object="btnДок"; fi;
       else
        if Проводить: Проводить=False; fi;
     fi;
  fi;
  cbПроводить.State=Проводить;
  Оформление;
 end;
 if Flag=Проводить: EditorApply; fi;
end;

Proc btnДата_OnClick(Sender: String);
var tmp:D;
 tmp=Calendar;
 if not tmp=1.1.100:
    if Sender="btnДатаОпер": ДатаОпер=tmp;
      |Sender="btnДокОперДат": ДокОперДат=tmp;
      |Sender="btnАннулДата": АннулДата=tmp;
    fi;
 fi;
end;

Proc cbАннул_OnChange(Sender: String);
var Flag:L;
 Try
  if Аннул:
     if АннулДата=1.1.100: Message("Введите дату аннулирования",mtError); Template.Object="btnАннулДата"; Аннул=False; Exit; fi;
     Flag=Аннул;
     if not ВБанк:
        ВБанк=True;
        cbВБанк.State=ВБанк;
        Аннул=ВБанк;
     fi;
    else
     if EnqOkCancel("Вы уверены, что хотите исключить документ из обработки ?",mtWarning)=cmCancel:
        EditorCancel;
     fi;
  fi;
 Finally
  cbАннул.State=Аннул;
  Оформление;
 end;
 if Flag=Аннул: EditorApply; fi;
end;

Proc cbКакБО_OnChange(Sender: String);
var Flag:L;
 if not AsString(Template.Object)=Sender: Exit; fi;
 if КакБО:
    Flag=КакБО;
    КакБО=ПроверитьКакБО(True,True);
    if not КакБО=Flag and Учитывать: EditorCancel; fi;
   else
    if EnqOkCancel("Вы уверены, что хотите снять флаг ?",mtWarning)=cmCancel:
       EditorCancel;
      else
       if Призн_БО="БО.000": Призн_БО=""; fi;
    fi;
 fi;
 if (Flag and КакБО and Учитывать) or (not Flag and not КакБО): 
    EditorApply;
    СоздатьПП(False);
 fi;
 cbКакБО.State=КакБО;
end;

Proc btnУдалить_OnClick(Sender: String);
 if EnqOkCancel("Вы действительно хотите удалить заявку и связанные с ней документы ?",mtWarning)=cmCancel: Exit; fi;
 if not canUpdate("Поруч") or not canDelete("Поруч") or not canUpdate(SelfCrd) or not canDelete(SelfCrd): Message("У вас недостаточно прав на выполнение данной операции",mtError); Exit; fi;
 ДокОпер1=nil;
 EditorApply;
 УдалитьЗаписи("Поруч");
 УдалитьЗаписи(SelfCrd);
 Message("Документ успешно удален");
 Close;
end;

Proc btnДок_OnClick(Sender: String);
var Bln:S;
 if ДокОпер1=nil: Message("Документ еще не создан^MДля создания документа, установите флаг 'Проведено'",mtWarning); Template.Object="cbПроводить";
   |not RecordExists("Поруч",ДокОпер1): Message("Утеряна ссылка на документ^MДля пересоздания документа, переустановите флаг 'Проведено'",mtWarning); Template.Object="cbПроводить";
   |True:
    Bln="ДОКУМЕНТЫ.БАНК.ПОРУЧ";
    if isBlankOpen(Bln): Close(Bln); fi;
    if isBlankOpen(Bln): Message("Закройте бланк платежного поручения и повторите попытку",mtError); Exit; fi;
    PutVariableL("ДОКУМЕНТЫ.БАНК.ПОРУЧ.noMsg",True);
    OpenBlank(Bln,True,ДокОпер1);
 fi;
end;

Proc btnПечать_onClick (Sender:S);
 if not CurrentState=CrdusUnmodified: EditorApply; fi;
 if isBlankOpen(SelfPrn): Close(SelfPrn); fi;
 if not Ф0531851 or ver<6:
    PutVariableS(SelfPrn+".ДолжнИспФК",ДолжнИспФК);
    PutVariableS(SelfPrn+".ФИОИспФК",ФИОИспФК);
    PutVariableS(SelfPrn+".ТелИспФК",ТелИспФК);
 fi;
 if Sender="btnПечать":
    if КолКопий<=0: КолКопий=1; fi;
    if КолКопий>2:
       if EnqOkCancel("Вы уверены, что хотите распечатать "+Str(КолКопий)+" копий документа ?")=cmCancel:
          Message("Отказ от печати");
          Exit;
       fi;
    fi;
    OpenBlank(SelfPrn,False,Current);
    PutVariableI(SelfPrn+".КолКопий",КолКопий);
    ExecuteProc(SelfPrn+".btnПечать_onClick",Sender);
    Close(SelfPrn);
   else
    OpenBlank(SelfPrn,True,Current);
 fi;
end;

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

Proc cbЗакрытьДок_OnChange(Sender: String);
var State:I;
 if ClosedModFob and not fQCMF:
    State=Enquiry("","Документ будет закрыт от изменений^MВнимание!^MПосле установки данного флага, если вы необладаете достаточными правами, вы НЕ СМОЖЕТЕ снять данный флаг^MПродолжить ?","Отмена;Да;Больше не спрашивать",mtWarning);
    if State=1: ClosedModFob=False; cbЗакрытьДок.State=ClosedModFob; Exit;
      |State=3: fQCMF=True;
    fi;
 fi;
 СоздатьПП(True);
 EditorApply;
end;

Proc cbФ0531851_OnChange(Sender: String);
 if not AsString(Template.Object)=Sender: Exit; fi;
 if Ф0531851:
    Ф0531851=Проверить0531851(True);
    cbФ0531851.State=Ф0531851;
 fi;
 Оформление;
end;

Func OnInsert(SectName: String): Logical;
 Return not Учитывать;
end;

Proc AfterInsert(SectName: String; Iter: Integer);
 Расшифр[Iter].Ист=ИстОбщ;
 if ИстОбщ="5":
    ОбновитьСч(Iter);
 fi;
end;

Func OnDelete(SectName: String; Iter: Integer): Logical;
 Return not Учитывать;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 FlagInit=True;
 fОКВ=0;
 Раб.Настр_Печать.Cfg("",SelfCfg);
end;

Proc AfterOpen(Destroy: Logical);
 Инициализация;
 Оформление;
 FlagInit=False;
end;

var ДатаДок_:D;
var ДатаПодписи_:D;
var ДолжнРук_:S;
var ФИОРук_:S;
var ДолжнБух_:S;
var ФИОБух_:S;

Proc OnRead;
var ver_:i;
var Flag:L;
 ЗадатьИстОбщ;
 Try
  ОткрНастр(False);
  Настр(False);
  if not Call="": ExecuteProc(Call); fi;
  if НоваяЗапись:
     if Раб.Настр.Начать("УПРАВЛЕНИЕ.БАНК",0,0,"",GetGUID):
        ver=Max(12,Int(Раб.Настр.ВзятьЗначение("Ver")));
     fi;
     if Номер=0:
        Раб.Вспом.Подписи_Сегодня.Взять(ToDay,SelfBln,"ДатаДок_:Дата_Док:D|ДатаПодписи_:Дата_Подписи:D|ДолжнРук_:ДолжнРук:S|ФИОРук_:ФИОРук:S|ДолжнБух_:ДолжнБух:S|ФИОБух_:ФИОБух:S");
        ДатаДок=ДатаДок_; ДатаПодписи=ДатаПодписи_; ДолжнРук=ДолжнРук_; ФИОРук=ФИОРук_; ДолжнБух=ДолжнБух_; ФИОБух=ФИОБух_;
        if ДатаДок=1.1.100: ДатаДок=ToDay; fi;
        if ДатаПодписи=1.1.100: ДатаПодписи=ДатаДок; fi;
        ЗаполнитьКлиента(nil);
        ПоУмолчанию;
        ver_=-999;
       else
        ver_=ver;
     fi;
     if ПДИ>0: 
        ДатаИспол=ДатаДок+ПДИ;
        if ДатаИспол>Dat(31,12,Year(ДатаДок)): ДатаИспол=Dat(31,12,Year(ДатаДок)); fi;
     fi;
     Номер=РАБ.Обл.СледСУчетомДаты(SelfCrd,"Номер","ДатаДок",ДатаДок);
     НомерДок=Str(Номер);
     if not Осн_Док=0 and ver<6: Осн_ДокНом=НомерДок; fi;
     Проводить=False;
     ВБанк=False;
     Учитывать=False;
     ДатаОпер=1.1.100;
     НомРейс=0;
     ДатаРейс=1.1.100;
     Аннул=False;
     АннулДата=1.1.100;
     АннулПримеч="";
     ДокОпер1=nil;
     ДокОперНом="";
     ДокОперДат=1.1.100;
     ClosedModFob=False;
     if ver>=6: --Пробуем делать конвертацию данных, старой версии
        if Осн_Док=0:
           InsertFrame(Осн_Док,1);
           if not ДО=nil:
              Осн_Док[1].Вид=Осн_ДокВид;
              Осн_Док[1].Ном=Осн_ДокНом;
              Осн_Док[1].Дат=Осн_ДокДат;
              Осн_Док[1].Сум=Осн_ДокСум;
              Осн_Док[1].Опл=Осн_ДокОпл;
              Осн_Док[1].ОплТек=Осн_ДокОплТек;
              Осн_Док[1].Предм=Осн_ДокПредм;
              Осн_Док[1].Crd=Осн_ДокCrd;
              Осн_Док[1].ДО=ДО;
              Осн_Док[1].ДО_GUID=ДО_GUID;
              Реестр_ГЭК[1]=Осн_Док_ГЭК;
              Flag=True;
           fi;
          else
           Flag=ver_<6 and not ver_=-999;
        fi; --if Осн_Док=0:
        if Flag:
           ОчиститьОснДок(0);
           if not Осн_Док[1].ДО=nil and not Осн_Док[1].ДО.Договор=nil:
              Осн_ДокВид=Осн_Док[1].ДО.Договор.НаимДок.Наим;
              Осн_ДокНом=Осн_Док[1].ДО.Договор.НомерДок;
              Осн_ДокДат=Осн_Док[1].ДО.Договор.ДатаДок;
              Осн_ДокПредм=Осн_Док[1].ДО.Договор.Содерж;
              Договор=Осн_Док[1].ДО.Договор;
              Осн_ДокCrd=Раб.Договор.crdДоговор;
           fi;
        fi;
     fi; --if ver>=6
     if Раб.Бюджет2005.Сетевая: EditorApply; fi;
  fi;
  ЗадатьИстОбщ;
  if not Учитывать then НеПустаяТаблица; fi;
  if not FlagInit: Оформление; fi;
  РасчетГЭК("",1);
  if Проводить and ДокОпер1=nil:
     Message("Документ, подтверждающий проведение операции не найден^MДля создания документа, переустановите флаг 'Проведено'",mtError); 
     Template.Object="cbПроводить";
  fi;
  if not ДокОпер1=nil and not Проводить=ДокОпер1.Проводить:
     Message("Статус документа, подтверждающий проведение операции отличен от статуса заявки^MДля исправления, переустановите флаг 'Проведено'",mtError);
     Template.Object="cbПроводить";
  fi;
 Finally
  Call="";
 End;
end;

Func OnVerify: Logical;
var state:L;
 if (not Учитывать or НоваяЗапись):
    if ver>=6:
       state=ф0531851;
       if ф0531851:
          ф0531851=Проверить0531851(False);
         else
          if fСокращен and Проверить0531851(False) and НоваяЗапись:
             ф0531851=True;
          fi;
       fi;
       if not state=ф0531851:
          cbф0531851.state=ф0531851;
          Оформление;
       fi;
    fi;
    if fКакБО and КакБО:
       state=КакБО;
       КакБО=ПроверитьКакБО(False,False);
       if not state=КакБО:
          cbКакБО.state=КакБО;
       fi;
    fi;
 fi;
 if ver<6: ф0531851=False; fi;
 Осн_ДокСум=Осн_ДокСум_;
 Осн_ДокОпл=Осн_ДокОпл_;
 Осн_ДокОплТек=Осн_ДокОплТек_;
 if ДО=nil and Учитывать: ДО_GUID=""; fi;
 Return ЗаполнитьКлючДок;
end;

Proc OnCancel;
 ЗадатьИстОбщ;
end;
--Обработчики событий шаблона -----
--

Конец