-- Шаблон создан мастером бланков
-- 28.11.2008 15:39:22
--
БланкСШаблоном "Уведомление об уточнении...", Редактор РПО_УВЕДОМ_УТОЧ_ПЛАТ;

var f15н:L=(ДатаДок>=1.7.2010);
inТипДок:I;

var typdoc:I=Int(trunc(ver/100));
var ver_:I=ver-typdoc*100;

var is1809:L=typdoc=0;
var is1852:L=typdoc=1;

var КФД:S=if(is1809,"0531809","0531852");

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

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

var fУтвДок:L;
var fУтвДок_:S=if(fУтвДок,"Да","Нет");
var fКлиентКорИмя:L;
var fКлиентКорИмя_:S=if(fКлиентКорИмя,"Да","Нет");
var fНеОтбрЛС:L;
var fНеОтбрЛС_:S=if(fНеОтбрЛС,"Да","Нет");
var fuseGUID:L=[False];
var fuseGUID_:S=if(fuseGUID,"Да","Нет");
var СчБанк:S=["*.?.201.?1.610|*.?.201.?7.610|*.?.304.05.*"];
var extКлюч:S;
var txtОКАТО:S=if(ver_<12: 'ОКАТО', 'код по ОКТМО');

fQCMF:L;

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

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

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

var Док_Ист_:S=if(Док_Ист="1":"средства от бюджетной деятельности"
                 |Док_Ист="2":"средства от приносящей доход деятельности"
                 |Док_Ист="3":"средства за счет дополнительного бюджетного финансирования"
                 |Док_Ист="4":"средства на обеспечение оперативно-розыскных мероприятий"
                 |Док_Ист="5":"средства во временном распоряжении"
                 |Док_Ист="6":"средства юридических лиц"
                 |True:"");

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

var nДок_Исх:I=Док_Исх;
var nДок_Изм:I=Док_Изм;


var пп[]:i=$;
var headnum1[]:S;
var headnum2[]:S;
var Призн_[]:S=Док_Исх[$].Призн;
var ПризнИ_[]:S=Док_Изм[$].Призн;

var Изм_Ист_[]:S=if(Док_Изм[$].Ист="1":"средства от бюджетной деятельности"
                   |Док_Изм[$].Ист="2":"средства от приносящей доход деятельности"
                   |Док_Изм[$].Ист="3":"средства за счет дополнительного бюджетного финансирования"
                   |Док_Изм[$].Ист="4":"средства на обеспечение оперативно-розыскных мероприятий"
                   |Док_Изм[$].Ист="5":"средства во временном распоряжении"
                   |Док_Изм[$].Ист="6":"средства юридических лиц"
                   |True:"");

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

hГлава:S;
hГРБС:S;
hКБК:S;
hЭКР:S;
hЭКД:S;
hЭКИФД:S;

var SelfCrd:S="РПО_УВЕДОМ_УТОЧ_ПЛАТ";
var SelfBln:S="ДОКУМЕНТЫ.БАНК.УВЕДОМ_УТОЧ_ПЛАТ";
var SelfCfg:S="ТББ.ДОКУМЕНТЫ.БАНК.УВЕДОМ_УТОЧ_ПЛАТ.000.cfg";

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

SУтвДок: Section;
S0: Section;
S1: Section;--(ex4_1)
S2: Section;
S3: Section;
S4: Section;
S5: Section;
S6: Section;
S6T1: Section;
S7: Section;
S7T1: Section;
S8: Section;
S8T1: Section;

var nS:I=8;
var nSt:I=5;
S4P: Section;
S4_1P:Section;
S4_2P:Section;
S5P: Section;
S5_1P:Section;
S5_2P:Section;
S4P1: Section;
S4_1P1:Section;
S4_2P1:Section;
S5P1: Section;
S5_1P1:Section;
S5_2P1:Section;

--S4_1:Section;
S4_2:Section;

S5_1:Section;
S5_2:Section;

SC1: Section;
SC2: Section;

SH2:Section;
var Key[]:S;
var BufИст[]:S;
var BufКБК[]:S;
var BufКБКП[]:S;
var BufСум[]:N;
var BufСумРуб[]:N;
var BufНазнПл[]:S;
var BufПримеч[]:S;

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

--var XS:I=2100; --Размер листа
--var YS:I=2970; --Размер листа
var Pages:I=[2];
var Page:I=Pages;

var visПрСум:L;

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

var isДок:L=not (ЗКР=nil and ЗВЗ=nil and ЗНЛ=nil and ПП_ВХ=nil and ПП_ИСХ=nil);

var ИсклПризн:S;

var hПризн:S;
var hСчДеб:S;
var hСчКре:S;

var НастрGUID:S;
--Процедуры и функции -------------

Proc Настр(aСохр:L);
var Flag:L;
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать(SelfBln,0,0,"",НастрGUID):
    Раб.Настр.Добавить("fУтвДок","L");
    Раб.Настр.Добавить("fКлиентКорИмя","L");
    Раб.Настр.Добавить("fНеОтбрЛС","L");
    Раб.Настр.Добавить("fuseGUID","L");
    Раб.Настр.Добавить("СчБанк","S");
    Раб.Настр.Добавить("extКлюч","S");
    if aСохр: 
       Раб.Настр.Сохранить; 
      else 
       НастрGUID=Раб.Настр.Загрузить("","");
       if НастрGUID="":
          Flag=ExecuteFuncL("НастрПоУмолч_OnEnter","",1);
       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;
 btnПечать.Visible=not Flag;
 edКолКопий.Visible=not Flag;
 btnНастр.Visible=not Flag;
 cbЗакрытьДок.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 FindObject("S"+Str(s)+if(s>nSt and is1852,"T1",""),Obj):
--  if FindObject("S"+Str(s),Obj):
     rr=asInteger(Obj.RowsCount);
     cc=asInteger(Obj.ColsCount);
     for r=1 ..rr  do
      for c=1 ..cc  do
       BgColor=asInteger(Obj.Cell(r,c,CellBgColor,""));
       if BgColor=coAqua or BgColor=coTeal:
          Field=asString(Obj.Cell(r,c,CellContents,""));
          if SearchInArray(BufField,Field,True)=-1:
             n=InsertInArraySort(BufField,Field); 
             InsertInArray(BufColorBg,n,BgColor);
          fi;
       fi;
      od;
     od;
  fi;
 od;
 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,s1,c,r,cc,rr,n:i;
var Obj: Object;
var Field:S;
 cbУчитывать.Enabled=not Проводить;
 cbВБанк.Enabled=not Проводить;
 btnДатаОпер.Enabled=not Проводить;
 edДатаОпер.Enabled=not Проводить;
 for s=1..nS do

  if FindObject("S"+Str(s)+if(s>nSt and is1852,"T1",""),Obj):
     rr=asInteger(Obj.RowsCount);
     cc=asInteger(Obj.ColsCount);
     for r=1 .. rr do
      for c=1 .. cc do
       Field=asString(Obj.Cell(r,c,CellContents,""));
       if s<>1 or Field="Знак_Исх" then
         n=SearchInArray(BufField,Field,True);
         if not n=-1:
            if Учитывать or (s=4 and isДок and (Field="Дат" or Field="Наим" or Field="БанкИмя" or Field="ИНН" or Field="КПП" or Field="ОКАТО" or Field="Призн_" or Field="НазнПл" or Field="СчДеб" or Field="СчКре")):
               Obj.Cell(r,c,CellFontColor,coBlack);
               Obj.Cell(r,c,CellBgColor,coTransparent);
               Obj.Cell(r,c,CellReadOnly,True);
              else
               Obj.Cell(r,c,CellFontColor,BufColorFo[n]);
               Obj.Cell(r,c,CellBgColor,BufColorBg[n]);
               Obj.Cell(r,c,CellReadOnly,False);
            fi;
         fi;
       fi;
      od;
     od;
  fi;
 od;

 cc=1;
 for c=1..18 do
   if c = 2 or (c = 9 and is1852) or c = 10 or c > 15:
     headnum1[c] = '*';
   else
     headnum1[c] = str(cc);
     cc = cc + 1;
   fi;
 od;

 cc=1;
 for c=1..12 do
   if (c = 5 and is1852) or c = 6 or c = 7 or (c=12 and not is1852):
     headnum2[c] = '*';
   else
     headnum2[c] = str(cc);
     cc = cc + 1;
   fi;
 od;
 S7.Row(13,RowVisible,ver_>=6);
 S7.Row(8,RowVisible,ver_>=12);
 --
 S1.Column(12,ColVisible,ver_<6);
 S4.Column(12+2,ColVisible,ver_<6);
 S4_2.Column(12,ColVisible,ver_<6);
 --
 S5_1.Column(9,ColVisible,ver_>=6);
 S5.Column(9+3,ColVisible,ver_>=6);
 S5_2.Column(9,ColVisible,ver_>=6);

-- S5_1.Column(15,ColVisible,visПрСум);
--   S5.Column(15,ColVisible,visПрСум);
-- S5_2.Column(15,ColVisible,visПрСум);
end;

Func Name2Handle:S;
var S:S;
 S=AsString(Template.Name);
 if s="s4": ^"Док_Исх";
   |s="s5": ^"Док_Изм";
 fi;
end;

Func Handle2Name(aHandle:S):S;
 if aHandle="Док_Исх": ^"S4";
   |aHandle="Док_Изм": ^"S5";
 fi;
end;

Proc УдалитьПустыеСтроки;
var Iter:I;
 Iter=1;
 While Iter<=Док_Исх do
  if Док_Исх[Iter].Тип="" and
     Док_Исх[Iter].Наим="" and
     Док_Исх[Iter].Ном="" and
     Док_Исх[Iter].Дат=1.1.100 and
     Док_Исх[Iter].РеквП=nil and
     Док_Исх[Iter].ОКАТО="" and
     Док_Исх[Iter].БанкП=nil and
     Док_Исх[Iter].КБК="" and
     Док_Исх[Iter].ДопКл="" and
     Round(Док_Исх[Iter].Сум,2)=0 and
     Док_Исх[Iter].НазнПл="" and
     Док_Исх[Iter].Примеч="" and
     Док_Исх[Iter].Заяв_КР_Ном="" and
     Док_Исх[Iter].Заяв_КР_Дат=1.1.100: DeleteFrame(Док_Исх,Iter);
    else
     Iter=Iter+1;
  fi;
 od;
 --
 Iter=1;
 While Iter<=Док_Изм do
  if Док_Изм[Iter].N=0 and
     Док_Изм[Iter].БанкИмя="" and
     Док_Изм[Iter].ИНН="" and
     Док_Изм[Iter].КПП="" and
     Док_Изм[Iter].ОКАТО="" and
     Док_Изм[Iter].ЛСчет="" and
     Док_Изм[Iter].Ист="" and
     Док_Изм[Iter].КБК="" and
     Док_Изм[Iter].ДопКл="" and
     Round(Док_Изм[Iter].Сум,2)=0 and
     Round(Док_Изм[Iter].СумПров,2)=0 and
     Док_Изм[Iter].НазнПл="": DeleteFrame(Док_Изм,Iter);
    else
     Iter=Iter+1;
  fi;
 od;
end;

Proc ОчиститьСтроку(aHandle:S; Iter:I);
var Arr:S;
 Arr=aHandle+"["+Str(Iter)+"].";
 if aHandle="Док_Исх":
    Док_Исх[Iter].Тип="";
    Док_Исх[Iter].Наим="";
    Док_Исх[Iter].Ном="";
    Док_Исх[Iter].Дат=1.1.100;
    Док_Исх[Iter].Примеч="";
    Док_Исх[Iter].Заяв_КР_Ном="";
    Док_Исх[Iter].Заяв_КР_Дат=1.1.100;
   else
    Док_Изм[Iter].Ист="";
 fi;
 PutVariableS(Arr+"БанкИмя","");
 PutVariableS(Arr+"ИНН","");
 PutVariableS(Arr+"КПП","");
 PutVariableS(Arr+"ОКАТО","");
 PutVariableS(Arr+"ЛСчет","");
 PutVariableS(Arr+"ТипКБК","");
 PutVariableS(Arr+"КБК","");
 PutVariableS(Arr+"ДопКл","");
 PutVariableS(Arr+"Призн","");
 PutVariableS(Arr+"НазнПл","");
 PutVariableS(Arr+"СчДеб","");
 PutVariableS(Arr+"СчКре","");
end;

Proc НеПустаяТаблица(aHandle:S);
 if aHandle="Док_Исх": if Док_Исх<1: InsertFrame(Док_Исх,1); fi;
   |aHandle="Док_Изм": if Док_Изм<1: InsertFrame(Док_Изм,1); fi;
 fi;
end;

Func ВысотаОбласти (S1: S; r1:I; S2: S; r2:i): I;
var Obj1,Obj2:Object;
var y1,y2:i;
 if not FindObject(S1,Obj1): Message("Секция '"+s1+"' не найдена",mtError); ^0; fi;
 if not FindObject(S2,Obj2): Message("Секция '"+s2+"' не найдена",mtError); ^0; fi;
 y1=AsInteger(Obj1.Row(r1,RowTop,""));
 y2=AsInteger(Obj2.Row(r2,RowTop,""));
 ^y2-y1;
end;

Proc ЗаполнитьНаимКлиента(Flag:L);
var ww,w,s:i;
var tmp:S;
var Obj:Object;
 if FindObject(if(is1809,"S7","S7T1"),Obj):
    Obj.Row(1,RowVisible,not Flag);
    Obj.Row(2,RowVisible,False);
    Obj.Row(3,RowVisible,False);
    Obj.Row(4,RowVisible,False);
    if not Flag: Exit; fi;
    if fКлиентКорИмя or (Length(Рекв.ПолнИмя)+Length(Рекв.РПО_ПолнИмя2)<=255):
       Obj.Row(1,RowVisible,True);
      else
       Раб.Бюджет2005.BufS[1]=Рекв.ПолнИмя;
       Раб.Бюджет2005.BufS[2]=Рекв.РПО_ПолнИмя2;
       ww=Раб.Бюджет2005.Str2Word(2," ");
       ww=Раб.Бюджет2005.Word2SingleStr(1,2,Obj,ww," ");
       s=0;
       ClearVariable(Buf);
       tmp=Раб.Бюджет2005.BufS[1];
       for w=2..ww do
        if Length(tmp)+1+Length(Раб.Бюджет2005.BufS[w])>255:
           s=s+1;
           Buf[s]=tmp;
           tmp=Раб.Бюджет2005.BufS[w];
          else
           tmp=tmp+" "+Раб.Бюджет2005.BufS[w];
        fi;
       od;
       s=s+1;
       Buf[s]=tmp;
       Obj.Cell(2,2,CellContents,Buf[1],True);
       Obj.Row(2,RowVisible,True);
       Obj.CellLinks(2,2,2,2);
       Obj.Cell(3,2,CellContents,Buf[2],True);
       Obj.Row(3,RowVisible,not Buf[2]="");
       Obj.CellLinks(2,3,2,3);
       Obj.Cell(4,2,CellContents,Buf[3],True);
       Obj.Row(4,RowVisible,not Buf[3]="");
       Obj.CellLinks(2,4,2,4);
    fi;
 fi;
end;

var НаимP[]:S;
var НомP[]:S;
var ДатP[]:D;
var БанкИмяP[]:S;
var ИННP[]:S;
var КППP[]:S;
var ОКАТОP[]:S;
var КБКP[]:S;
var ДопКлP[]:S;
var СумP[]:N;
var НазнПлP[]:S;
var ПримечP[]:S;
var ППЛинк[]:S;
var KeyP[]:S;
var S4Hand:I;

func свернутыйID(ID:I):I;
var res:I;
var i:I;
  for i=1..S4Hand do
    if ExtractWord(1,ППЛинк[i]," ")=Str(ID) then
       res=i;
       break;
    fi;
    if Pos(" "+Str(ID),ППЛинк[i])>0 then
       res=i;
       break;
    fi;

  od;
  ^res;
end;


proc Свертка1;
var i,n,l:I;
var Key_:S;
ClearVariable(S4Hand);
ClearVariable(KeyP);
  for i=1..Док_Исх do
    Key_=Док_Исх[i].Наим+"_"+Док_Исх[i].Ном+"_"+DateToString(Док_Исх[i].Дат)+"_"+Док_Исх[i].КБК+"_"+Док_Исх[i].ДопКл;
    n=SearchInArray(KeyP,Key_);
    if n=-1 then
       Insertframe(S4Hand,S4Hand+1);
       n=S4Hand;
       KeyP[n] =Key_;
       НаимP[n]   =Док_Исх[i].Наим;
       НомP[n]    =Док_Исх[i].Ном;
       ДатP [n]   =Док_Исх[i].Дат;
       БанкИмяP[n]=Док_Исх[i].БанкИмя;
       ИННP[n]    =Док_Исх[i].ИНН;
       КППP[n]    =Док_Исх[i].КПП;
       ОКАТОP[n]  =Док_Исх[i].ОКАТО;
       КБКP[n]    =Док_Исх[i].КБК;
       ДопКлP[n]  =Док_Исх[i].ДопКл;

       СумP[n]    =Док_Исх[i].Сум;
       НазнПлP[n] =Док_Исх[i].НазнПл;
       ПримечP[n] =Док_Исх[i].Примеч;
       ППЛинк[n]  =Str(i);
      else
       СумP[n]    =Док_Исх[i].Сум+СумP[n];
       НазнПлP[n] =Док_Исх[i].НазнПл+НазнПлP[n];
       ПримечP[n] =Док_Исх[i].Примеч+ПримечP[n];
       ППЛинк[n]  =ППЛинк[n]+" "+Str(i);
    fi;
  od;
end;

var NiP[]:I;
var БанкИмяiP[]:S;
var ИННiP[]:S;
var КППiP[]:S;
var ОКАТОiP[]:S;
var КБКiP[]:S;
var ДопКлiP[]:S;
var СумiP[]:N;
var НазнПлiP[]:S;
var ПримечiP[]:S;
var KeyiP[]:S;
var S5Hand:I;

proc Свертка2;
var i,n,l:I;
var Key_:S;
var NewID:I;
ClearVariable(S5Hand);
ClearVariable(KeyP);
  for i=1..Док_Изм do
    NewID=свернутыйID(Док_Изм[i].N);
    Key_=Str(NewID)+"_"+Док_Изм[i].КБК+"_"+Док_Изм[i].ДопКл;
    n=SearchInArray(KeyP,Key_);
    if n=-1 then
       Insertframe(S5Hand,S5Hand+1);
       n=S5Hand;
       KeyiP[n]    =Key_;
       БанкИмяiP[n]=Док_Изм[i].БанкИмя;
       ИННiP[n]    =Док_Изм[i].ИНН;
       КППiP[n]    =Док_Изм[i].КПП;
       ОКАТОiP[n]  =Док_Изм[i].ОКАТО;
       КБКiP[n]    =Док_Изм[i].КБК;
       ДопКлiP[n]  =Док_Изм[i].ДопКл;
       NiP[n]      =NewID;

       СумiP[n]    =Док_Изм[i].Сум;
       НазнПлiP[n] =Док_Изм[i].НазнПл;
      else
       СумiP[n]    =Док_Изм[i].Сум+СумiP[n];
       НазнПлiP[n] =Док_Изм[i].НазнПл+НазнПлiP[n];
    fi;
  od;
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 ПоУмолчанию;
 if Глава="":
    Глава=hГлава;
    ГРБС=hГРБС;
 fi;
end;

Proc ЗаполнитьКлиента (vRec: Record);
 if not vRec=nil:
    Глава=Рекв.РПО_ППП;
    ГРБС=Раб.Бюджет.НаимКБК("ППП2006",Глава);
    ДолжнРук=Рекв.ДолжнРук;
    ФИОРук=Рекв.ФИОРук;
    Банк=Раб.Бюджет2005.БанкСчет(Рекв,False);
 fi;
 if Глава="":
    Глава=hГлава;
    ГРБС=hГРБС;
 fi;
end;

Func ИстВБух (aИст:S):S;
 if  aИст="3": ^"1"; 
    |aИст="4": ^"2";
    |aИст="5": ^"3";
 fi;
 ^aИст;
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Тип="30" or 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Тип="30" or aТип="31" or aТип="32": hЭКИФД=Buf[z];
 fi;
 ^Buf[z];
end;

Func Проверить(Full:L):L;
var Iter:I;
var Flag:L;

var ErrF:S;
var ErrS:S;
var isError:L;

 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 Глава="" and Flag and is1809: Message("Заполните главу по БК",mtError); Template.Field="Глава"; ^False; fi;
 if ГРБС=" "and is1809: Message("Заполните наименование главного распорядителя бюджетных средств, главного администратора источников финансирования дефицита бюджета",mtError); Template.Field="ГРБС"; ^False; fi;
 if Банк.РПО_НаимБюдж="" and is1809: Message("Заполните наименование бюджета",mtError); Template.Field="Банк.РПО_НаимБюдж"; ^False; fi;
 if Банк.РПО_КодБюдж="" and Flag: Message("Заполните код бюджета",mtError); Template.Field="Банк.РПО_НаимБюдж"; ^False; fi;
 if ФинОрган="" and Flag: Message("Заполните поле 'Финансовый орган'",mtError); Template.Field="ФинОрган"; ^False; fi;
 if Банк.РПО_ОФК_Код="": Message("Заполните код федерального казначейства, органа федерального казначейства",mtError); Template.Field="Банк.РПО_ОФК_Код"; ^False; fi;
 if (Match(Банк.РСчет,"40105*") or Match(Банк.РСчет,"40201*") or Match(Банк.РСчет,"40204*")) and ver_>=6:
    if Док_Ист="":
       if EnqOkCancel("При уточнении с единого счета бюджета необходимо указать вид средств, игнорировать ?",mtWarning)=cmCancel: Template.Field="Док_Ист_"; ^False; fi;
    fi;
 fi;
 if ДолжнРук="" and ДатаДок<10.08.2009 and is1809: 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 ТелИсп="" and is1809: Message("Заполните телефон исполнителя",mtError); Template.Field="ТелИсп"; ^False; fi;
 if ДатаПодписи=1.1.100: Message("Заполните дату подписи",mtError); Template.Field="ДатаПодписи"; ^False; fi;
 if ДатаПодписи<ДатаДок: Message("Дата подписи не может быть ранее даты документа",mtError); Template.Field="ДатаПодписи"; ^False; fi;
 УдалитьПустыеСтроки;
 Template.Name = "S4";
 if Док_Исх=0: 
    Message("Заполните реквизиты платежного документа",mtError);
    НеПустаяТаблица("Док_Исх");
    Template.Field="Тип";
    Template.Frame=1;
    ^False;
 fi;
 ClearVAriable(BufI);
 for Iter=1..Док_Исх do
  --if Док_Исх[Iter].Тип="": Message("Введите тип платежного документа",mtError); Template.Field="Тип"; Template.Frame=Iter; ^False; fi;
  --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].БанкИмя="": Message("Введите наименование получателя",mtError); Template.Field="БанкИмя"; Template.Frame=Iter; ^False; fi;
  --if Док_Исх[Iter].ИНН="" and ДатаДок<10.08.2009: Message("Введите ИНН получателя",mtError); Template.Field="ИНН"; Template.Frame=Iter; ^False; fi;
  --if Док_Исх[Iter].КПП="" and ДатаДок<10.08.2009: Message("Введите КПП получателя",mtError); Template.Field="КПП"; Template.Frame=Iter; ^False; fi;
  --if Док_Исх[Iter].КБК="" and Док_Ист<>"5": Message("Введите код по БК",mtError); Template.Name="S4"; Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
  --if Док_Исх[Iter].ТипКБК="" and Док_Ист<>"5": Message("Введите тип КБК",mtError); Template.Name="S4"; Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
  if Round(Док_Исх[Iter].Сум,2)=0: Message("Введите сумму",mtError); Template.Name="S4"; Template.Field="Сум"; Template.Frame=Iter; ^False; fi;
  if fuseGUID: if Trim(Док_Исх[Iter].ФК_GUID)="": Message("Введите^Mглобальный уникальный идентификатор^M(присваивается органом ФК)",mtError); Template.Name="S4"; Template.Field="ФК_GUID"; Template.Frame=Iter; ^False; fi; fi;
  BufI[Iter]=Iter;
 od;
 if Док_Изм=0: Message("Заполните 'изменить на реквизиты:'",mtError); Template.Field="N"; Template.Frame=1; ^False; fi;
 for Iter=1..Док_Изм do
  if Док_Изм[Iter].N=0: Message("Введите номер записи",mtError); Template.Field="N"; Template.Frame=Iter; ^False; fi;
  if SearchInArray(BufI,Док_Изм[Iter].N,True)=-1: Message("Запись №"+Str(Док_Изм[Iter].N)+" не найдена в разделе реквизитов платежного документа",mtError); Template.Field="N"; Template.Frame=Iter; ^False; fi;
  if not Док_Ист="" and Док_Изм[Iter].Ист="": Message("Введите вид средств",mtError); Template.Field="Изм_Ист_"; Template.Frame=Iter; ^False; fi;
 od;

 if not Full then ^True; fi;
 --проверка для проводок
 --Счета
 Раб.КСА.Начать;
 if Знак_Исх<>1:
   for Iter=1..Док_Исх do
    Раб.КСА.Добавить(Док_Исх[Iter].СчДеб);
    Раб.КСА.Добавить(Док_Исх[Iter].СчКре);
   od;
 fi;
 for Iter=1..Док_Изм do
  Раб.КСА.Добавить(Док_Изм[Iter].СчДеб);
  Раб.КСА.Добавить(Док_Изм[Iter].СчКре);
 od;
 if Раб.КСА.Закончить(True): RefreshAna; Message("Добавление новых счетов закончено"); fi;
 --Признаки и корреспонденция
 Раб.Бюджет.ПроверитьПризнакиНачать;
 if Знак_Исх<>1:
    Template.Name="S4";
    for Iter=1..Док_Исх do
     if Док_Исх[Iter].СчДеб="": 
        Message("Введите счет дебета",mtError); 
        Template.Name = "S4"; Template.Field="СчДеб"; Template.Frame=Iter;
        ^False; 
     fi;
     if Name_S(Док_Исх[Iter].СчДеб)=" ":
        Message("Неизвестный идентификатор счета "+Док_Исх[Iter].СчДеб,mtError);
        Template.Name = "S4"; Template.Field="СчДеб"; Template.Frame=Iter;
        ^False; 
     fi;
     if Док_Исх[Iter].СчКре="":
        Message("Введите счет кредита",mtError);
        Template.Name = "S4"; Template.Field="СчКре"; Template.Frame=Iter;
        ^False;
     fi;
     if Name_S(Док_Исх[Iter].СчКре)=" ":
        Message("Неизвестный идентификатор счета "+Док_Исх[Iter].СчКре,mtError);
        Template.Name = "S4"; Template.Field="СчКре"; Template.Frame=Iter;
        ^False;
     fi;
     if not Correspond(Док_Исх[Iter].СчДеб,Док_Исх[Iter].СчКре):
        Message("Счета не могут корреспондировать "+Док_Исх[Iter].СчДеб+"/"+Док_Исх[Iter].СчКре,mtError);
        Template.Name = "S4"; Template.Field="СчДеб"; Template.Frame=Iter;
        ^False;
     fi;
     if not Раб.Бюджет.ПроверитьПризнакиОбязательные(Док_Исх[Iter].СчДеб, Док_Исх[Iter].СчКре, Trim(Док_Исх[Iter].Призн), ИсклПризн):
        Template.Name = "S4"; Template.Field="Призн_"; Template.Frame=Iter;
        ^False;
     fi;
     if not Раб.Бюджет.ПроверитьПризнакиСвязанные(Док_Исх[Iter].СчДеб, Док_Исх[Iter].СчКре, Trim(Док_Исх[Iter].Призн), ИсклПризн):
        Template.Name = "S4"; Template.Field="Призн_"; Template.Frame=Iter;
        ^False;
     fi;
    od;
 fi;
 Template.Name="S5";
 for Iter=1..Док_Изм do
  if Док_Изм[Iter].СчДеб="":
     Message("Введите счет дебета",mtError);
     Template.Name = "S5"; Template.Field="СчДеб"; Template.Frame=Iter;
     ^False;
  fi;
  if Name_S(Док_Изм[Iter].СчДеб)=" ":
     Message("Неизвестный идентификатор счета "+Док_Изм[Iter].СчДеб,mtError);
     Template.Name = "S5"; Template.Field="СчДеб"; Template.Frame=Iter;
     ^False;
  fi;
  if Док_Изм[Iter].СчКре="":
     Message("Введите счет кредита",mtError);
     Template.Name = "S5"; Template.Field="СчКре"; Template.Frame=Iter;
     ^False;
  fi;
  if Name_S(Док_Изм[Iter].СчКре)=" ":
     Message("Неизвестный идентификатор счета "+Док_Изм[Iter].СчКре,mtError);
     Template.Name = "S5"; Template.Field="СчКре"; Template.Frame=Iter;
     ^False;
  fi;
  if not Correspond(Док_Изм[Iter].СчДеб,Док_Изм[Iter].СчКре):
     Message("Счета не могут корреспондировать "+Док_Изм[Iter].СчДеб+"/"+Док_Изм[Iter].СчКре,mtError);
     Template.Name = "S5"; Template.Field="СчДеб"; Template.Frame=Iter;
     ^False;
  fi;
  if not Раб.Бюджет.ПроверитьПризнакиОбязательные(Док_Изм[Iter].СчДеб,Док_Изм[Iter].СчКре,Trim(Док_Изм[Iter].Призн),ИсклПризн):
     Template.Name = "S5"; Template.Field="Призн_"; Template.Frame=Iter;
     ^False;
  fi;
  if not Раб.Бюджет.ПроверитьПризнакиСвязанные(Док_Изм[Iter].СчДеб,Док_Изм[Iter].СчКре,Trim(Док_Изм[Iter].Призн),ИсклПризн):
     Template.Name = "S5"; Template.Field="Призн_"; Template.Frame=Iter;
     ^False;
  fi;
 od;
 if not Full then ^True; fi;
 if ДатаОпер=1.1.100 then Message("Введите дату выписки",mtError); Template.Object="edДатаОпер"; ^False; fi;
 ^True;
end;

Proc ПолучитьДопАн(aСчБанк:S; aСчКорр:S; Iter:I; sect:S);
var Справ,ПризнКБК,ТипКБК,tmp:S;
 if not aСчБанк="" and not aСчКорр="":
    Справ=Раб.Бюджет2005.СписокСправ(aСчБанк+"|"+aСчКорр,0,"");
    if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|","ФКР.*|КД.*|КИФД.*","|")="":
       ТипКБК=Раб.Бюджет2005.ТипКБКСчета(aСчБанк);
       if ТипКБК="КИФД":
          ТипКБК=Раб.Бюджет2005.ТипКБКСчета(aСчКорр);
          ПризнКБК=Раб.Бюджет2005.ВзятьКодСчета(aСчКорр,ТипКБК,"КБК",False);
         else
          ПризнКБК=Раб.Бюджет2005.ВзятьКодСчета(aСчБанк,ТипКБК,"КБК",False);
       fi;
       if not ПризнКБК="" and (ТипКБК="ФКР" or ТипКБК="КД"):
          ПризнКБК=ТипКБК+"."+ПризнКБК;
          if Sect="Док_Исх":
             Док_Исх[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Док_Исх[Iter].Призн," ",ПризнКБК,"ФКР.*|КД.*|КИФД.*","|");
            |Sect="Док_Изм":
             Док_Изм[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Док_Изм[Iter].Призн," ",ПризнКБК,"ФКР.*|КД.*|КИФД.*","|");
          fi;
       fi;
    fi;
    if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|","КОСГУ.*","")="":
       ПризнКБК=Раб.КБК.ВзятьЭКСчета(СчБанк,"КР");
       if ПризнКБК="": ПризнКБК=Раб.КБК.ВзятьЭКСчета(aСчКорр,"КР"); fi;
       if not ПризнКБК="":
          ПризнКБК="КОСГУ."+ПризнКБК;
          tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(if(Sect="Док_Исх": Док_Исх[Iter].Призн|Sect="Док_Изм": Док_Изм[Iter].Призн)," ","КОСГУ.*","");
          if not Match(tmp,ПризнКБК+"!"):
             if Sect="Док_Исх":
                Док_Исх[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Док_Исх[Iter].Призн," ",ПризнКБК,"КОСГУ.*","|");
               |Sect="Док_Изм":
                Док_Изм[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Док_Изм[Iter].Призн," ",ПризнКБК,"КОСГУ.*","|");
             fi;
          fi;
       fi;
    fi;
 fi;
end;

Proc ОбработатьПризн(Sect:S;Iter:I);
var tmp:S;
 if Sect="Док_Исх":
    if not Док_Исх[Iter].СчДеб="" and not Док_Исх[Iter].СчКре="":
       tmp=Раб.Бюджет2005.СписокСправ(Док_Исх[Iter].СчДеб+"|"+Док_Исх[Iter].СчКре,0,"");
       Док_Исх[Iter].Призн=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Док_Исх[Iter].Призн," ",tmp,"|");
       ПолучитьДопАн(Док_Исх[Iter].СчКре,Док_Исх[Iter].СчДеб,Iter,Sect);
    fi;
   |Sect="Док_Изм":
    if not Док_Изм[Iter].СчДеб="" and not Док_Изм[Iter].СчКре="":
       tmp=Раб.Бюджет2005.СписокСправ(Док_Изм[Iter].СчДеб+"|"+Док_Изм[Iter].СчКре,0,"");
       Док_Изм[Iter].Призн=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Док_Изм[Iter].Призн," ",tmp,"|");
       ПолучитьДопАн(Док_Изм[Iter].СчКре,Док_Изм[Iter].СчДеб,Iter,Sect);
    fi;
 fi;
end;

Proc Sig2Acc(Sect:S;Iter:I);
var Signs_,Sign_,КБК_,ТБК_,КОСГУ_,AccD_,AccC_,AccT_:S;
var i:I;
  Signs_=GetVariableS(Sect+"["+Str(Iter)+"].Призн");
  for i=1 .. WordsCount(Signs_," ") do
    Sign_=ExtractWord(i,Signs_," ");
    if Match(Sign_,"КОСГУ.*"):
       КОСГУ_=Sign_;
      |Match(Sign_,"ФКР.*"):
       КБК_=Sign_;ТБК_="ФКР";
      |Match(Sign_,"КД.*"):
       КБК_=Sign_;ТБК_="КД";
      |Match(Sign_,"КИФД.*"):
       КБК_=Sign_;ТБК_="КИФД";
    fi;
  od;
  AccD_=GetVariableS(Sect+"["+Str(Iter)+"].СчДеб");
  AccC_=GetVariableS(Sect+"["+Str(Iter)+"].СчКре");
  if Раб.Бюджет2005.ТипКБКСчета(AccD_)=ТБК_ then
     AccT_=Раб.Бюджет2005.ВзятьКодСчета(AccD_,ТБК_,"СИНТ",False);
     AccD_=ExtractWords(2,255,КБК_,".")+"."+Раб.Бюджет2005.ВзятьКодСчета(AccD_,ТБК_,"СЧ9",False);

     if AccT_ = "206"  or AccT_= "302" then
        AccD_=Раб.Бюджет2005.ВзятьКодСчета(AccD_,ТБК_,"СИНТ",True)+
              "."+Раб.Бюджет2005.Соотв_КОСГУ_Ан(AccT_,ExtractWord(2,КОСГУ_,"."))+
              "."+Раб.Бюджет2005.ВзятьКодСчета(AccD_,ТБК_,"КОСГУ",False);
     fi;

  fi;
  if Раб.Бюджет2005.ТипКБКСчета(AccC_)=ТБК_ then
     AccC_=ExtractWords(2,255,КБК_,".")+"."+Раб.Бюджет2005.ВзятьКодСчета(AccC_,ТБК_,"СЧ9",False);
     if Раб.Бюджет2005.ВзятьКодСчета(AccC_,ТБК_,"СЧ5",False)="304.05" then
        AccC_=Раб.Бюджет2005.ВзятьКодСчета(AccC_,ТБК_,"АН",True)+"."+ExtractWord(2,КОСГУ_,".");
     fi;

  fi;
  РАБ.КСА.НАЧАТЬ;
  РАБ.КСА.Добавить(AccD_);
  РАБ.КСА.Добавить(AccC_);

  Раб.КСА.Закончить(True);
  PutVariableS(Sect+"["+Str(Iter)+"].СчДеб",AccD_);
  PutVariableS(Sect+"["+Str(Iter)+"].СчКре",AccC_);
  ОбработатьПризн(Sect,Iter);
 -- fi;
end;

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

Func ЗаполнитьКлючДок:L;
 if FuncExists(extКлюч): ^ExecuteFuncL(extКлюч); fi;
 ^True;
end;

proc Рендер;
var t,t0:i;
var tL:L;
  Свертка1;
  Свертка2;
  ЗаполнитьНаимКлиента(true);
  tL=fУтвДок;
  Раб.Вспом.Печать2.SelfCfg=SelfCfg;
  if is1809: Раб.Вспом.Печать2.Инициализация(SelfBln,"SУтвДок@S8@S2@S7@S3@S4_1P@S4P@S4_2P@SH2@S5_1P@S5P@S5_2P@S6@SC2");
    |is1852: Раб.Вспом.Печать2.Инициализация(SelfBln,"SУтвДок@S8T1@S2@S7T1@S3@S4_1P1@S4P1@S4_2P1@S5_1P1@S5P1@S5_2P1@S6T1@SC2");
  fi;
  fУтвДок=tL;
  if fУтвДок then 
     Раб.Вспом.Печать2.ВывестиСекцию(SelfBln,"SУтвДок"); 
  fi;

  if is1809:Раб.Вспом.Печать2.ВывестиСекцию(SelfBln,"S8");
    |is1852:Раб.Вспом.Печать2.ВывестиСекцию(SelfBln,"S8T1");
  fi;
  Раб.Вспом.Печать2.ВывестиСекцию(SelfBln,"S2");
  if is1809:Раб.Вспом.Печать2.ВывестиСекцию(SelfBln,"S7");
    |is1852:Раб.Вспом.Печать2.ВывестиСекцию(SelfBln,"S7T1");
  fi;
  Раб.Вспом.Печать2.ВывестиСекцию(SelfBln,"S3");
  S4_1P.Visible=True;
  S4P.Visible  =True;
  S4_2P.Visible=True;
  S5_1P.Visible=True;
  S5P.Visible  =True;
  S5_2P.Visible=True;
  S4_1P1.Visible=True;
  S4P1.Visible  =True;
  S4_2P1.Visible=True;
  S5_1P1.Visible=True;
  S5P1.Visible  =True;
  S5_2P1.Visible=True;
  if is1809:Раб.Вспом.Печать2.ВывестиТаблицу(SelfBln,"S4_1P#3","S4P","S4_2P#5","SC2",-1,"");
    |is1852:Раб.Вспом.Печать2.ВывестиТаблицу(SelfBln,"S4_1P1#3","S4P1","S4_2P1#5","SC2",-1,"");
  fi;
  Раб.Вспом.Печать2.НоваяСтраница;
  if is1809:Раб.Вспом.Печать2.ВывестиТаблицу(SelfBln,"SH2#3@S5_1P#3","S5P","S5_2P#5@S6#5","SC2",0,"");
    |is1852:Раб.Вспом.Печать2.ВывестиТаблицу(SelfBln,"S5_1P1#3","S5P1","S5_2P1#5@S6T1#5","SC2",0,"");
  fi;
  S4_1P.Visible=False;
  S4P.Visible  =False;
  S4_2P.Visible=False;
  S5_1P.Visible=False;
  S5P.Visible  =False;
  S5_2P.Visible=False;
  S4_1P1.Visible=False;
  S4P1.Visible  =False;
  S4_2P1.Visible=False;
  S5_1P1.Visible=False;
  S5P1.Visible  =False;
  S5_2P1.Visible=False;
  ЗаполнитьНаимКлиента(False);
end;

--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func НастрПоУмолч_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="НастрПоУмолч":
    if EnqOkCancel("Восстановить значения по умолчанию ?",mtWarning)=cmCancel: ^False; fi;
 fi;
 fУтвДок=False;
 fКлиентКорИмя=False;
 СчБанк="*.?.201.?1.610|*.?.201.?7.610|*.?.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 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;

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

Func СчБанк_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var z:n;
 z=Saldo(Value,1.1.100);
 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);
 if not ДатаДок=1.1.100 and not ДатаПодписи=ДатаДок:
    if ДатаПодписи=1.1.100:
       ДатаПодписи=ДатаДок;
      else
       if EnqOkCancel("Изменить дату подписи с "+DateToString(ДатаПодписи)+" на "+DateToString(ДатаДок)+" ?",mtWarning)=cmOk:
          ДатаПодписи=ДатаДок;
       fi;
    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);
 tmp=Calendar;
 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;

Proc Контр_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Prefix,Field,bln,msg:S;
var Rec: Record;
 if Double:
    Field=AsString(Template.Field);
    Prefix=SubStr(Field,1,Pos(".",Field)-1);
    if Prefix="": 
       Prefix=SubStr(Field,1,Pos("_",Field)-1); 
       Field=SubStr(Field,Pos("_",Field)+1,255);
      else
       Field=SubStr(Field,Pos(".",Field)+1,255);
    fi;
    Rec=GetVariableR(Prefix);
    if Rec=nil: 
       if Prefix="Рекв": Msg="Выберите получателя бюджетных средств..."; Field="Клиент";
       fi;
       Message(Msg,mtError);
       Template.Field=Field;
       Exit;
    fi;
    if Field="РПО_Страна" or Field="РПО_ОКСМ" or Field="РПО_Статус": Bln="РАБ.ВСПОМ.КОНТРАГЕНТ_ИНФОДОП"; else bln=""; fi;
    ExecuteProc("Инфо.Контрагент.Вызвать",Rec,bln,Field,1);
 fi;
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;
 fi;
end;

Func Глава_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
 Template.HideEditor(False);
 Rec=OpenCardFile("РПО_БЮДЖ_КЛАСС_000","NAME_VOC='ППП2006'",nil,crdRecordOnly);
 if not Rec=nil:
    Глава=GetCardFieldS("РПО_БЮДЖ_КЛАСС",Rec,"CODE");
    ГРБС=GetCardFieldS("РПО_БЮДЖ_КЛАСС",Rec,"TXT");
    hГлава=Глава;
    hГРБС=ГРБС;
 fi;
 Return Cur;
end;

Proc Банк_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field:S;
 if Double:
    if Банк=nil: Message("Выберите банковские реквизиты",mtError); Template.Field="Банк.РПО_ОФК_Имя"; Exit; fi;
    Field=AsString(Template.Field);
    if Field="Банк.РПО_ЛСчет": Field="РПО_ЛСчет";
      |Field="Банк.РПО_НаимБюдж": Field="РПО_НаимБюдж";
      |Field="ФинОрган": Field="РПО_ФО_Наим1";
      |Field="Банк.РПО_ФО_ЛСчет": Field="РПО_ФО_ЛСчет";
      |Field="Банк.РПО_ОФК_Код": Field="РПО_ОФК_Код";
      |True: Field="";
    fi;
    ExecuteProc("ИНФО.БАНКСЧЕТА.Вызвать",Банк,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;
 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 -- средства во временном распоряжении";
 Buf[6]="6 -- средства юридических лиц";
 if FieldName="Док_Ист_": n=Int(Док_Ист); else n=Int(Док_Изм[Iter].Ист); fi;
 n=Alternate("Вид средств",Buf,-1,n,12);
 if not n=0:
    if FieldName="Док_Ист_": Док_Ист=Str(n);
      |FieldName="Изм_Ист_": НеПустаяТаблица("Док_Изм"); Док_Изм[Iter].Ист=Str(n);
    fi;
 fi;
 Return False;
end;

Proc Ист_OnExit(FieldName: String; Iter: Integer);
 if FieldName="Док_Ист_": Док_Ист="";
   |FieldName="Изм_Ист_": Док_Изм[Iter].Ист="";
                          Док_Изм[Iter].СчДеб="";
                          Док_Изм[Iter].СчКре="";
 fi;
end;

Proc Плат_OnExit(FieldName: String; Iter: Integer);
 Плат=nil;
 ПлатБанк=nil;
end;

Func Плат_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
 Template.HideEditor(False);
 if Плат=nil:
    Rec=Раб.Поиск.ВыборИзКартотеки("Выбор плательщика","КОНТРАГЕНТ","ПРИЗНАК|ПОЛНИМЯ|КОРИМЯ|ИНН","Код|Полное имя|Краткое имя|ИНН","");
   else
    Rec=OpenCardFile("Контрагент","",Плат,crdRecordOnly);
 fi;
 if not Rec=nil:
    Плат=Rec;
    ПлатБанк=Раб.Бюджет2005.БанкСчет(Плат,False);
    if not ПлатБанк=nil:
       Плат_БанкИмя=ПлатБанк.БанкИмя;
       ПлатБанк_РСчет=ПлатБанк.РСчет;
      else
       Плат_БанкИмя=Плат.КорИмя;
    fi;
    Плат_ИНН=Плат.ИНН;
    Плат_КПП=Плат.КПП;
 fi;
 Return Cur;
end;

Proc ПлатБанк_OnExit(FieldName: String; Iter: Integer);
 ПлатБанк=nil;
end;

Func ПлатБанк_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
 Template.HideEditor(False);
 if Плат=nil: Message("Выберите плательщика",mtError); Template.Field="Плат_БанкИмя"; ^Cur; fi;
 Rec=OpenCardFile("Банк_Счета","Контрагент="+RecordToString(Плат),ПлатБанк,crdRecordOnly);
 if not Rec=nil:
    ПлатБанк=Rec;
    Плат_БанкИмя=GetCardFieldS("Банк_Счета",ПлатБанк,"БанкИмя");
 fi;
 Return Cur;
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
var vHandle:S;
var Iter_:I;
 if not Учитывать:
    vHandle=Name2Handle;
    if vHandle="Док_Исх": 
       Iter_=Iter;
       Iter=InsertFrame(Док_Исх,Iter+1);
       if isДок: 
          Док_Исх[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;
      |vHandle="Док_Изм": 
       Iter=InsertFrame(Док_Изм,Iter+1);
    fi;
 fi;
 Return False;
end;

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
var vHandle:S;
 if not Учитывать:
    vHandle=Name2Handle;
    if vHandle="Док_Исх": 
       DeleteFrame(Док_Исх,Iter);
       if Док_Исх=0: ЗКР=nil; ЗВЗ=nil; ЗНЛ=nil; ПП_ВХ=nil; ПП_ИСХ=nil; Оформление; fi;
      |vHandle="Док_Изм": 
       DeleteFrame(Док_Изм,Iter);
    fi;
    НеПустаяТаблица(vHandle);
 fi;
 Return False;
end;

Func Тип_OnEnter(FieldName: String; Iter: Integer): logical;
var n,z:i;
 НеПустаяТаблица("Док_Исх");
 ClearVariable(Buf);
 z=0;
 if isДок:
    for n=1..Док_Исх do
     if not Док_Исх[n].Тип="":
        AddInArray(Buf,False,False,Док_Исх[n].Тип+" --"+Док_Исх[n].Наим);
        z=z+1;
     fi;
    od;
    if z=1 and Док_Исх[Iter].Тип="": z=2; fi;
 fi;
 if z<2:
    Buf[1]="PP --Платежное поручение";
    Buf[2]="ZR --Заявка на кассовый расход";
    Buf[3]="ZS --Заявка на получение наличных денег";

    --Организация не может делать оба документа на одном ЛС, 
    --так что каждым типом уведомления можно уточнять только такой же.
    if is1809:
      Buf[4]="UF --Уведомление об уточнении вида и принадлежности платежа";
    else
      Buf[4]="UK --Уведомление об уточнении операций клиента";
    fi;

    Buf[5]="ZV --Заявка на возврат";
    --С 07.2012
    Buf[6]="ZK --Сводная заявка на кассовый расход (для уплаты налогов)";
    Buf[7]="ZN --Заявка на получение наличных денежных средств, перечисляемых на карту";
    Buf[8]="SP --Справка ф. 0504833 по внебанковским операциям";
    Buf[9]="AT --Акт приемки-передачи";

 fi;
 n=Alternate("Код платежного документа",Buf,-1,1,12);
 if not n=0:
    ОчиститьСтроку("Док_Исх",Iter);
    Док_Исх[Iter].Тип=SubStr(Buf[n],1,2);
    Док_Исх[Iter].Наим=SubStr(Buf[n],6,255);
    if z<2: 
       ЗКР=nil; ЗВЗ=nil; ЗНЛ=nil; ПП_ВХ=nil; ПП_ИСХ=nil;
       Оформление;
    fi;
 fi;
 Return False;
end;

Func Док_onEnter(FieldName: String; Iter: Integer): logical;
 if Док_Исх[Iter].Тип="": Message("Выберите тип документа",mtError); Template.Field="Тип"; Template.Frame=Iter; ^False; fi;
 Return True;
end;

Proc Ном_OnExit(FieldName: String; Iter: Integer);
 ЗКР=nil; ЗВЗ=nil; ЗНЛ=nil; ПП_ВХ=nil; ПП_ИСХ=nil;
 Оформление;
end;

func ЗагрузкаСтрДок(Rec:Record;typ:S;Crd:S;SubCrd:S):L; --загрузка бухгалтерской информации из документа
var OWA,OA:I;
var i,ii,z,k:I;
var Key_,tmpS,tmpS1,tmpS2:S;
var КБК_,ТипКБК_,Ист_,Призн_,ОбщПризн_,СчД_,СчК_,ДопКл_,НазнПл_:S;
var Сум_:N;
 ClearVariable(Buf);  --ключ
 ClearVariable(Buf2); --для альтернейт
 ClearVariable(Buf3); --хранятся признаки
 ClearVariable(BufN); --хранятся сумма
 Раб.Договор.НачатьИндексацию;
OWA=OpenWorkArea(Crd,"","Ukey="+RecordToString(Rec));
try
  if Records(OWA)=0: ^False; fi;
  if typ="PP":
     ОбщПризн_=Trim(GetFieldS(OWA,1,"РПО_ПРИЗН_ЛС"));
     if Crd="ПОРУЧ":
       ОбщПризн_=Trim(ОбщПризн_+" "+GetFieldS(OWA,1,"РПО_ПРИЗН_БО"));
     fi;
     ОбщПризн_=Trim(ОбщПризн_+" "+GetFieldS(OWA,1,"РПО_ПРИЗН_К"));
    else
     ОбщПризн_=Trim(GetFieldS(OWA,1,"ПРИЗН_ЛС")+" "+GetFieldS(OWA,1,"ПРИЗН_БО"));
     if Crd<>"РПО_ЗАЯВКА_НАЛ":
       ОбщПризн_=Trim(ОбщПризн_+" "+GetFieldS(OWA,1,"ПРИЗН_К"));
     fi;
  fi;
  OA=OpenArray(OWA,1,SubCrd,"");
  ii=Records(OA);
  try
    for i=1 .. ii do
      СчД_=GetFieldS(OA,i,"СчДеб");
      СчК_=GetFieldS(OA,i,"СчКре");
      if typ="ZR":
         Ист_=GetFieldS(OA,i,"ИСТ");
        else
         Ист_=РАБ.Бюджет2005.ВЗЯТЬКОДСЧЕТА(СчД_,"","ИСТ",False);
      fi;
      КБК_=GetFieldS(OA,i,"КБК");
      КБК_=Раб.Формат.ReplaceSubstr(КБК_,".","");
      if КБК_="": КБК_=" "; fi;
      ТипКБК_=GetFieldS(OA,i,"ТИПКБК");
      if ТипКБК_="": ТипКБК_=" "; fi;
      ДопКл_=GetFieldS(OA,i,"ДопКл");
      if ДопКл_="": ДопКл_=" "; fi;
      if typ="PP":
         НазнПл_=GetFieldS(OA,i,"Кмнт");
        else
         НазнПл_=GetFieldS(OA,i,"НазнПл");
      fi;
      if Crd="ПрихПлПОРУЧения":
         Призн_=Trim(Призн_+" "+GetFieldS(OA,i,"ПРИЗН"));
        |Crd="ПОРУЧ":
         Призн_=Trim(GetFieldS(OA,i,"ПРИЗН_ОСНДОК")+" "+GetFieldS(OA,i,"ПРИЗНАК"));
        |Crd="РПО_ЗАЯВКА_НАЛ":
         Призн_=Trim(GetFieldS(OA,i,"ПРИЗН"));
        else
         Призн_=Trim(GetFieldS(OA,i,"ПРИЗН_ОСНДОК")+" "+GetFieldS(OA,i,"ПРИЗН"));
      fi;
      tmpS=Раб.Бюджет2005.СортироватьНаборСлов(Trim(ОбщПризн_+" "+Призн_)," ",True);
      if tmpS="": tmpS=" "; fi;
      Раб.Договор.idxЗнач[1]=tmpS;
      Сум_=GetFieldN(OA,i,"Сум");
      Key_=Ист_+"#"+ТипКБК_+"#"+КБК_+"#"+ДопКл_+"#"+Раб.Договор.ПолучитьИндекс(1,2)+"#"+СчД_+"#"+СчК_;
      z=SearchInArray(Buf,Key_,true);
      if z=-1:
         z=InsertInArraySort(Buf,Key_);
         tmpS1=Ист_+" "+КБК_+" {";
         tmpS2="} "+if(ДопКл_=" ","","["+ДопКл_+"] ")+ "("+Раб.Бюджет2005.ВзятьКодСчета(СчД_,"","Сч8",False)+"/"+Раб.Бюджет2005.ВзятьКодСчета(СчК_,"",if(Match(СчК_,"*.?.201.??.*"),"Сч8","Сч5"),False)+")";
         k=255-Length(tmpS1)-Length(tmpS2);
         InsertInArray(Buf2,z,tmpS1+if(Length(tmpS)>=k,Substr(tmpS,1,k-3)+"...",tmpS)+tmpS2);
         InsertInArray(Buf3,z,tmpS);
         InsertInArray(BufN,z,Сум_);
        else
         BufN[z]=BufN[z]+Сум_;
      fi;

    od;
  finally
    CloseWorkArea(OA);
  end;
finally
  CloseWorkArea(OWA);
end;
^true;
end;

func ЗагрузкаДокБух(Rec:Record;typ:S;Crd:S):L; --загрузка бухгалтерской информации из документа
var OWA,OA:I;
var SubCrd:S;
var i,i1,i1_,n,n1,t,t1,t2:I;
var КБК_,Written,Found,tmpS:S;
 if Crd="РПО_ЗАЯВКА_КР" then SubCrd="Расшифр";
   |Crd="ПОРУЧ" then SubCrd="РПО_Позиции";
   |Crd="ПРИХПЛПОРУЧЕНИЯ" then SubCrd="РПО_Расшифр";
   |Crd="РПО_ЗАЯВКА_НАЛ" then SubCrd="РАСШИФР";
   else ^False;
 fi;
 if not ЗагрузкаСтрДок(Rec,typ,Crd,SubCrd): ^False; fi;
 n=LengthOfArray(BUF);
 n1=Док_Исх;
 --Корректируем число записей
 if n>n1 then
    for i=n1+1..n do
      InsertFrame(Док_Исх,i);
      --Копируем значение строки
      Док_Исх[i].Тип=    Док_Исх[1].Тип    ;
      Док_Исх[i].Наим=   Док_Исх[1].Наим   ;
      Док_Исх[i].Ном=    Док_Исх[1].Ном    ;
      Док_Исх[i].Дат=    Док_Исх[1].Дат    ;
      Док_Исх[i].РеквП=  Док_Исх[1].РеквП  ;
      Док_Исх[i].БанкП=  Док_Исх[1].БанкП  ;
      Док_Исх[i].БанкИмя=Док_Исх[1].БанкИмя;
      Док_Исх[i].ИНН=    Док_Исх[1].ИНН    ;
      Док_Исх[i].КПП=    Док_Исх[1].КПП    ;
      Док_Исх[i].ОКАТО=  Док_Исх[1].ОКАТО  ;
    od;
   |n<n1 then    for i=n+1..n1 do DeleteFrame(Док_Исх,i); od;
 fi;
 Written="";
 Found="";
 for i=1..n do
   КБК_=Trim(ExtractWord(3,Buf[n],"#"));
   i1=1;
   while i1<=n do
     --Пропуск уже записанных строк
     while Pos("_"+Str(i1),Written)>0 do
       i1=i1+1;
     od;
     if Док_Исх[i1].КБК=КБК_ then
        Found="_"+Str(i)+"@"+Str(i1);
        Written="_"+Str(i1);
     fi;
     i1=i1+1;
   od;
 od;
 for i=1..n do
  КБК_=Trim(ExtractWord(3,Buf[n],"#"));
  t=Pos("_"+Str(i),Found);
  if t>0 then
    t1=Pos("@",Substr(Found,t,255));
    t2=Pos("_",Substr(Found,t+t1,255));
    i1=Int(Substr(Found,t+t1,if(t2=0,255,t2-1)));
   else
     i1=i;
     --Пропуск уже записанных строк
     while Pos("_"+Str(i1),Written)>0 do
       i1=i1+1;
     od;
     for i1_=1..i1 do
       if Pos("_"+Str(i1_),Written)=0 then
          if Док_Исх[i1_].КБК=КБК_ then
             i1=i1_;
             break;
          fi;
       fi;
     od;
  fi;
  ---
  Док_Исх[i1].ТипКБК=ExtractWord(2,Buf[n],"#");
  Док_Исх[i1].КБК=Trim(ExtractWord(3,Buf[n],"#"));
  Док_Исх[i1].ДопКл=Trim(ExtractWord(4,Buf[n],"#"));
  Док_Исх[i1].Призн=Buf3[n];
  Док_Исх[i1].Сум=BufN[n];
  Док_Исх[i1].СчДеб=if(Знак_Исх=2,Раб.Бюджет2005.Счет_ПереворотКосгу(Trim(ExtractWord(7,Buf[n],"#"))),Trim(ExtractWord(6,Buf[n],"#")));
  Док_Исх[i1].СчКре=if(Знак_Исх=2,Раб.Бюджет2005.Счет_ПереворотКосгу(Trim(ExtractWord(6,Buf[n],"#"))),Trim(ExtractWord(7,Buf[n],"#")));
--      Док_Исх[i1].НазнПл=GetFieldS(OA,i,"НазнПл");
  Written=Written+"_"+Str(i1);
 od;
 --Копирование старых реквизитов в новые
 n1=Док_Изм;
 n=Док_Исх;
 if n>n1 then
    for i=n1+1..n do
      InsertFrame(Док_Изм,i);
    od;
   |n<n1 then    for i=n+1..n1 do DeleteFrame(Док_Изм,i); od;
 fi;
 Written="";
 for i=1..n do
     i1=1;
     --Пропуск уже записанных строк
     while Pos("_"+Str(i1),Written)>0 do
       i1=i1+1;
     od;
     --Поиск N совпадающих с i
     t1=i1;
     for t=t1..n do
         if Док_Изм[t].N=i then
            --проверить на обязательность!!!!!
            --Проверить на связность КБК\аналитики!!!!!
            i1=t1;
            break;
         fi;
     od;
     --Копируем значение строки
     if Док_Изм[i1].Призн="" then Док_Изм[i1].Призн= Док_Исх[i].Призн; fi;
     if Док_Изм[i1].СчДеб="" then Док_Изм[i1].СчДеб= if(Знак_Исх=2,Раб.Бюджет2005.Счет_ПереворотКосгу(Док_Исх[i].СчКре),Док_Исх[i].СчДеб); fi;
     if Док_Изм[i1].СчКре="" then Док_Изм[i1].СчКре= if(Знак_Исх=2,Раб.Бюджет2005.Счет_ПереворотКосгу(Док_Исх[i].СчДеб),Док_Исх[i].СчКре); fi;
     if Док_Изм[i1].Ист=""   then Док_Изм[i1].Ист=   Док_Ист; fi;
     if Док_Изм[i1].N=0      then Док_Изм[i1].N=     i; fi;
     Written=Written+"_"+Str(i1);
 od;

^True;
end;

Func Ном_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter,n,z:I;
var Rec: Record;
var Crd,Fl,Fn,F,Fdoc,tmp:S;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 if Док_Исх[Iter].Тип="ZR": Crd="РПО_ЗАЯВКА_КР";     Fl="НомерДок|ДатаДок:D"; Fn="Номер документа|Дата документа"; F="Учитывать";
   |Док_Исх[Iter].Тип="ZS": Crd="РПО_ЗАЯВКА_НАЛ";    Fl="НомерДок|ДатаДок:D"; Fn="Номер документа|Дата документа"; F="Учитывать";
   |Док_Исх[Iter].Тип="ZV": Crd="РПО_ЗАЯВКА_ВОЗВРАТ";Fl="НомерДок|ДатаДок:D"; Fn="Номер документа|Дата документа"; F="Учитывать";
   |Док_Исх[Iter].Тип="PP": 
    n=Enquiry("Выберите тип платежки","Уточните входящее или исходящее платежное поручение?","Входящее;Исходящее",mtCustom);
    if n=2:      Crd="ПОРУЧ";             Fl="НомерБум|Дата:D";    Fn="Номер документа|Дата документа"; F="Проводить";
      |n=1:      Crd="ПРИХПЛПОРУЧЕНИЯ";   Fl="НомерБум|ДатаДок:D"; Fn="Номер документа|Дата документа"; F="РПО_Проводить";
      else ^Cur;
    fi;
   |True: Message("Для выбранного платежного документа ("+Док_Исх[Iter].Наим+") данная возможность пока не реализована",mtWarning); Template.Field="Тип"; Template.Frame=Iter; ^Cur;
 fi;
 Fdoc="";
 if isДок:
    z=0;
    for n=1..Док_Исх do
     if not Док_Исх[n].Ном="": z=z+1; fi;
    od;
    if z>1 or (z=1 and Док_Исх[Iter].Ном=""):
       Rec=if(not ЗКР=nil:ЗКР|not ЗНЛ=nil:ЗНЛ|not ЗВЗ=nil:ЗВЗ|not ПП_ИСХ=nil:ПП_ИСХ|not ПП_ВХ=nil:ПП_ВХ|true:nil); --!!!!!
       if not Rec=nil: Fdoc="UKey="+RecordToString(Rec); fi; --!!!!
    fi;
 fi;
 if Fdoc="":
    Rec=Раб.Поиск.ВыборИзКартотеки(Док_Исх[Iter].Наим,Crd,Fl,Fn,F);
   else
    Rec=OpenCardFile(Crd,Fdoc,Rec,crdRecordOnly);
 fi;
 if not Rec=nil:
    ЗКР=nil; ЗВЗ=nil; ЗНЛ=nil; ПП_ВХ=nil; ПП_ИСХ=nil;ПП_ВХ=nil;
    tmp=ExtractWord(1,Fl,"|");
    Док_Исх[Iter].Ном=GetCardFieldS(Crd,Rec,tmp); --заполнение номера документа
    tmp=ExtractWord(2,Fl,"|");
    tmp=ExtractWord(1,tmp,":");
    Док_Исх[Iter].Дат=GetCardFieldD(Crd,Rec,tmp); --заполнение даты документа
    if Crd="ПРИХПЛПОРУЧЕНИЯ":
       Док_Исх[Iter].РеквП=GetCardFieldR(Crd,Rec,"Рекв");--заполнение реквизитов контрагента из документа
       Док_Исх[Iter].БанкП=GetCardFieldR(Crd,Rec,"РеквБанк");
      |Crd="РПО_ЗАЯВКА_НАЛ":
       Док_Исх[Iter].РеквП=GetCardFieldR(Crd,Rec,"Рекв");--заполнение реквизитов контрагента из документа
       Док_Исх[Iter].БанкП=GetCardFieldR(Crd,Rec,"Банк");
      else
       Док_Исх[Iter].РеквП=GetCardFieldR(Crd,Rec,"РеквП");--заполнение реквизитов контрагента из документа
       Док_Исх[Iter].БанкП=GetCardFieldR(Crd,Rec,"БанкП");
    fi;
    Док_Исх[Iter].БанкИмя=Док_Исх[Iter].БанкП.БанкИмя;
    Док_Исх[Iter].ИНН=Док_Исх[Iter].РеквП.ИНН;
    Док_Исх[Iter].КПП=Док_Исх[Iter].РеквП.КПП;
    Док_Исх[Iter].ОКАТО="";
    tmp=if(CRD="ПОРУЧ":"РПО_НазнПлат"|Crd="ПРИХПЛПОРУЧЕНИЯ":"НазначПлат"|Crd="РПО_ЗАЯВКА_КР":"Док_НазнПл","");--заполнение назначения плтежа по документу
    if tmp<>"": Док_Исх[Iter].НазнПл=GetCardFieldS(Crd,Rec,tmp); fi;
    --так как корректное исправление может быть только один-к-одному, прерываем выполнение, если есть несовпадающие строки
    for n=1..Док_Исх do
     if not Док_Исх[Iter].Тип=Док_Исх[n].Тип or
        not Док_Исх[Iter].Наим=Док_Исх[n].Наим or
        not Док_Исх[Iter].Ном=Док_Исх[n].Ном or
        not Док_Исх[Iter].Дат=Док_Исх[n].Дат or
        not Док_Исх[Iter].РеквП=Док_Исх[n].РеквП or
        not Док_Исх[Iter].БанкП=Док_Исх[n].БанкП or
        not Док_Исх[Iter].БанкИмя=Док_Исх[n].БанкИмя or
        not Док_Исх[Iter].ИНН=Док_Исх[n].ИНН or
        not Док_Исх[Iter].КПП=Док_Исх[n].КПП or
        not Док_Исх[Iter].ОКАТО=Док_Исх[n].ОКАТО: ^Cur; --or
--        not Док_Исх[Iter].НазнПл=Док_Исх[n].НазнПл
     fi;
    od;
    ЗагрузкаДокБух(Rec,Док_Исх[Iter].Тип,Crd);
    if Док_Исх[Iter].Тип="ZR": ЗКР=Rec;
      |Док_Исх[Iter].Тип="ZS": ЗНЛ=Rec;
      |Док_Исх[Iter].Тип="ZV": ЗВЗ=Rec;
      |Crd="ПОРУЧ":            ПП_ИСХ=Rec;
      |Crd="ПРИХПЛПОРУЧЕНИЯ":  ПП_ВХ=Rec;
    fi;
    Оформление;
 fi;
 Return Cur;
end;

Proc РеквП_OnExit(FieldName: String; Iter: Integer);
var vHandle,Arr:S;
 Template.HideEditor(False);
 vHandle=Name2Handle;
 НеПустаяТаблица(vHandle);
 Arr=vHandle+"["+Str(Iter)+"].";
 PutVariableR(Arr+"РеквП",nil);
 PutVariableR(Arr+"БанкП",nil);
end;

Func РеквП_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec1,Rec2: Record;
var vHandle,Arr:S;
var Iter:I;
 Template.HideEditor(False);
 vHandle=Name2Handle;
 НеПустаяТаблица(vHandle);
 Iter=AsInteger(Template.Frame);
 Arr=vHandle+"["+Str(Iter)+"].";
 Rec1=GetVariableR(Arr+"РеквП");
 if Rec1=nil:
    Rec1=Раб.Поиск.ВыборИзКартотеки("Выбор получателя","КОНТРАГЕНТ","ПРИЗНАК|ПОЛНИМЯ|КОРИМЯ|ИНН","Код|Полное имя|Краткое имя|ИНН","");
   else
    Rec1=OpenCardFile("Контрагент","",Rec1,crdRecordOnly);
 fi;
 if not Rec1=nil:
    PutVariableR(Arr+"РеквП",Rec1);
    Rec2=Раб.Бюджет2005.БанкСчет(Rec1,False);
    PutVariableR(Arr+"БанкП",Rec2);
    if not Rec2=nil:
       PutVariableS(Arr+"БанкИмя",GetVariableS(Arr+"БанкП.БанкИмя"));
       PutVariableS(Arr+"ЛСчет",GetVariableS(Arr+"БанкП.РПО_ЛСчет"));
      else
       PutVariableS(Arr+"БанкИмя",GetVariableS(Arr+"РеквП.КорИмя"));
    fi;
    PutVariableS(Arr+"ИНН",GetVariableS(Arr+"РеквП.ИНН"));
    PutVariableS(Arr+"КПП",GetVariableS(Arr+"РеквП.КПП"));
 fi;
 Template.HideEditor(False);
 Return Cur;
end;

Func ОКАТО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var vHandle,Arr:S;
var Iter:I;
var Rec: Record;
 Template.HideEditor(False);
 vHandle=Name2Handle;
 НеПустаяТаблица(vHandle);
 Iter=AsInteger(Template.Frame);
 Arr=vHandle+"["+Str(Iter)+"].";
 Rec=GetVariableR(Arr+"РеквП");
 if Rec=nil: Message("Заполните получателя",mtError); Template.Name=Handle2Name(vHandle); Template.Field="БанкИмя"; Template.Frame=Iter; ^Cur; fi;
 PutVariableS(Arr+"ОКАТО",GetVariableS(Arr+"РеквП.ОКАТО"));
 Return Cur;
end;

Proc БанкП_OnExit(FieldName: String; Iter: Integer);
var vHandle:S;
 Template.HideEditor(False);
 vHandle=Name2Handle;
 НеПустаяТаблица(vHandle);
 PutVariableR(vHandle+"["+Str(Iter)+"].БанкП",nil);
end;

Func БанкП_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec1,Rec2: Record;
var vHandle,Arr:S;
var Iter:I;
 Template.HideEditor(False);
 vHandle=Name2Handle;
 НеПустаяТаблица(vHandle);
 Iter=AsInteger(Template.Frame);
 Arr=vHandle+"["+Str(Iter)+"].";
 Rec1=GetVariableR(Arr+"РеквП");
 if Rec1=nil: Message("Заполните получателя",mtError); Template.Name=Handle2Name(vHandle); Template.Field="БанкИмя"; Template.Frame=Iter; ^Cur; fi;
 Rec2=GetVariableR(Arr+"БанкП");
 Rec2=OpenCardFile("Банк_Счета","Контрагент="+RecordToString(Rec1),Rec2,crdRecordOnly);
 if not Rec2=nil:
    PutVariableR(Arr+"БанкП",Rec2);
    PutVariableS(Arr+"БанкИмя",GetVariableS(Arr+"БанкП.БанкИмя"));
    PutVariableS(Arr+"ЛСчет",GetVariableS(Arr+"БанкП.РПО_ЛСчет"));
 fi;
 Return Cur;
end;

Func ВыборКБКизДок(Iter:I):L;
var OWA,OA,n,nn,z:i;
var tmp,Key,ОбщПризн_,Ист_,ТипКБК_,КБК_,ДопКл_,Призн_,СчД_,СчК_:S;
var Сум_:N;
var Crd,SubCrd:S;
var Rec:Record;
 if not ЗКР=nil:
    Rec=ЗКР;
    Crd="РПО_ЗАЯВКА_КР";
    SubCrd="Расшифр";
   |not ЗВЗ=nil:  ^False;
--    Crd="РПО_ЗАЯВКА_ВОЗВРАТ";
--    Sub="ПОЗИЦИИ";
--    flПризн="ПРИЗН_ЛС|ПРИЗН_К";
--    flsПризн="ПРИЗН";
   |not ЗНЛ=nil: ^False;
--    Crd="РПО_ЗАЯВКА_НАЛ";
--    Sub="РАСШИФР";
--    flПризн="ПРИЗН_ЛС|ПРИЗН_БО";
--    flsПризн="ПРИЗН";
   |not ПП_ВХ=nil:
    Rec=ПП_ВХ;
    Crd="ПРИХПЛПОРУЧЕНИЯ";
    SubCrd="РПО_РАСШИФР";
--    flПризн="РПО_ПРИЗН_К|РПО_ПРИЗН_ЛС";
--    flsПризн="ПРИЗН";
   |not ПП_ИСХ=nil: ^False;
--    Rec=ПП_ИСХ;
--    Crd="ПОРУЧ";
--    SubCrd="РПО_ПОЗИЦИИ";
--    flПризн="РПО_ПРИЗН_ЛС|РПО_ПРИЗН_БО|РПО_ПРИЗН_К";
--    flsПризн="ПРИЗНАК|ПРИЗН_ОСНДОК";
   |true: ^False;
 fi;
 if not ЗагрузкаСтрДок(Rec,Док_Исх[Iter].Тип,Crd,SubCrd): ^True;  fi;
 nn=LengthOfArray(Buf);
 for n=1..nn do
  Buf2[n]=Buf2[n]+" ="+Format("%.2N",BufN[n]);
 od;
 n=Alternate("",Buf2,-1,1,11);
 if not n=0:
    tmp=ExtractWord(1,Buf[n],"#");
    if Док_Ист="": Док_Ист=tmp; fi;
    --!!!!!ДокИстВБух для ЗКР! А также средсва юрлиц!
    if not tmp=Док_Ист: Message("Вид средств уведомления ("+Док_Ист+") отличен от вида средств платежного документа ("+tmp+")",mtError); Template.Field="Док_Ист_"; ^True; fi;
    Док_Исх[Iter].ТипКБК=ExtractWord(2,Buf[n],"#");
    Док_Исх[Iter].КБК=Trim(ExtractWord(3,Buf[n],"#"));
    Док_Исх[Iter].ДопКл=Trim(ExtractWord(4,Buf[n],"#"));
    Док_Исх[Iter].Призн=Buf3[n];
    Док_Исх[Iter].Сум=BufN[n];
    Док_Исх[Iter].СчДеб=Trim(ExtractWord(6,Buf[n],"#"));
    Док_Исх[Iter].СчКре=Trim(ExtractWord(7,Buf[n],"#"));
 fi;
 ^True;
end;

Func Знак_OnEnter(FieldName: String; Iter: Integer): logical;
var n:I;
  ClearVariable(Buf);
  Buf[1]="Сторно";
  Buf[2]="Не проводить";
  Buf[3]="Проводить";
  n=Alternate("Вид проведения",Buf,20,Знак_Исх+1,12);
  if n<>0 :
     Знак_Исх=n-1;
  fi;
  Return  False;
end;

Func КБК_OnEnter(FieldName: String; Iter: Integer): logical;
var КОСГУ_,КБК_,ТипКБК_,Ист_,tmp,Field,vHandle,Arr:S;
var lПризн:S;
 vHandle=Name2Handle;
 if vHandle="Док_Исх":
    if isДок:
       if ВыборКБКизДок(Iter): ^False; fi;
    fi;
 fi;
 НеПустаяТаблица(vHandle);
 Arr=vHandle+"["+Str(Iter)+"].";
 FieldName=Arr+FieldName;
 КБК_=GetVariableS(FieldName);
 if КБК_="":
    КБК_=hКБК;
   else
    ТипКБК_=GetVariableS(Arr+"ТипКБК");
    if ТипКБК_="10": КБК_="ФКР."+SubStr(КБК_,1,3)+"."+SubStr(КБК_,4,4)+"."+SubStr(КБК_,8,7)+"."+SubStr(КБК_,15,3);
      |ТипКБК_="20": КБК_="КД."+SubStr(КБК_,1,3)+"."+SubStr(КБК_,4,1)+"."+SubStr(КБК_,5,2)+"."+SubStr(КБК_,7,5)+"."+SubStr(КБК_,12,2)+"."+SubStr(КБК_,14,4);
      |ТипКБК_="31" or ТипКБК_="32": КБК_="КИФД."+SubStr(КБК_,1,3)+"."+SubStr(КБК_,4,2)+"."+SubStr(КБК_,6,2)+"."+SubStr(КБК_,8,2)+"."+SubStr(КБК_,10,2)+"."+SubStr(КБК_,12,2)+"."+SubStr(КБК_,14,4);
    fi;
    КОСГУ_=SubStr(КБК_,18,3);
 fi;
 Ист_=GetVariableS(Arr+"Ист");
 Ист_=ИстВБух(Ист_);
 if Ист_="1": tmp="(ФКР.???.????.???????.???|КД.???.?.??.?????.??.????|КИФД.???.??.??.??.??.??.????)&~ФКР.???.0000.0000000.000";
   |Ист_="2": tmp="ФКР.???.0000.0000000.000|КД.???.?.??.?????.??.????|КИФД.???.??.??.??.??.??.????";
   |True:     tmp="ФКР.???.????.???????.???|КД.???.?.??.?????.??.????|КИФД.???.??.??.??.??.??.????";
 fi;
 КБК_=AnaElection(tmp,False,False,КБК_);
 if not КБК_="":
    hКБК=КБК_;
    if Match(КБК_,"ФКР.*"):         ТипКБК_="10"; if КОСГУ_="": КОСГУ_=hЭКР; fi;
      |Match(КБК_,"КД.*"):          ТипКБК_="20"; if КОСГУ_="": КОСГУ_=hЭКД; fi;
      |Match(КБК_,"КИФД.000.00.*"): ТипКБК_="30"; if КОСГУ_="": КОСГУ_=hЭКИФД; fi;
      |Match(КБК_,"КИФД.???.01.*"): ТипКБК_="31"; if КОСГУ_="": КОСГУ_=hЭКИФД; fi;
      |Match(КБК_,"КИФД.???.02.*"): ТипКБК_="32"; if КОСГУ_="": КОСГУ_=hЭКИФД; fi;
    fi;
    КОСГУ_=ВыборЭК(ТипКБК_,КОСГУ_);
    if КОСГУ_="": ^False; fi;
    --Заменить КБК в аналитике/счетах
    lПризн=GetVariableS(vHandle+"["+Str(Iter)+"].Призн");
    --Удалить все признаки роли КБК
    lПризн=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(lПризн," ","ФКР.* КД.* КИФД.*"," ");

    lПризн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(lПризн," ",КБК_,SubStr(КБК_,1,Pos(".",КБК_))+"*","");
    lПризн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(lПризн," ","КОСГУ."+КОСГУ_,"КОСГУ.*","");
    PutVariableS(vHandle+"["+Str(Iter)+"].Призн",lПризн);
    КБК_=SubStr(КБК_,Pos(".",КБК_)+1,255);
    КБК_=Раб.Формат.ReplaceSubstr(КБК_,".","");
    PutVariableS(FieldName,КБК_+КОСГУ_);
    PutVariableS(Arr+"ТипКБК",ТипКБК_);
    Sig2Acc(vHandle,Iter);
 fi;
 Return False;
end;

Proc КБК_OnExit(FieldName: String; Iter: Integer);
var vHandle,Arr:S;
 vHandle=Name2Handle;
 НеПустаяТаблица(vHandle);
 Arr=vHandle+"["+Str(Iter)+"].";
 PutVariableS(Arr+"ТипКБК","");
end;

Func Призн_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if Знак_Исх=1: Message("Для выбранного режима, вводить значение не требуется"); Template.Name="S4"; Template.Field="Знак_Исх"; ^False; fi;
 if Док_Исх[Iter].СчДеб="": Message("Выберите счет дебета",mtError); Template.Name="S4"; Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
 if Док_Исх[Iter].СчКре="": Message("Выберите счет кредита",mtError); Template.Name="S4"; Template.Field="СчКре"; Template.Frame=Iter; ^False; fi;
 tmp=Раб.Бюджет2005.СписокСправ(Док_Исх[Iter].СчДеб+"|"+Док_Исх[Iter].СчКре,0,ИсклПризн);
 if tmp="": Message("Аналитические признаки не требуются"); ^False; fi;
 tmp=AnaElection(tmp,False,False,hПризн);
 if not tmp="":
    Док_Исх[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Док_Исх[Iter].Призн," ",tmp,SubStr(tmp,1,Pos(".",tmp))+"*","");
    hПризн=tmp;
 fi;
 Return False;
end;

Proc Призн_OnExit(Field:S; Iter:I);
var vHandle,Arr:S;
 vHandle=Name2Handle;
 НеПустаяТаблица(vHandle);
 Arr=vHandle+"["+Str(Iter)+"].";
 PutVariableS(Arr+"Призн",Раб.Бюджет2005.УдалитьСловоИзНабора_Диалог2(GetVariableS(Arr+"Призн")," ","Name_A"));
end;

Func ПризнИ_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp,КБК_:S;
var updКБК:L;
 if Док_Изм[Iter].СчДеб="": Message("Выберите счет дебета",mtError); Template.Name="S5"; Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
 if Док_Изм[Iter].СчКре="": Message("Выберите счет кредита",mtError); Template.Name="S5"; Template.Field="СчКре"; Template.Frame=Iter; ^False; fi;
 tmp=Раб.Бюджет2005.СписокСправ(Док_Изм[Iter].СчДеб+"|"+Док_Изм[Iter].СчКре,0,ИсклПризн);
 if tmp="": Message("Аналитические признаки не требуются"); ^False; fi;
 tmp=AnaElection(tmp,False,False,hПризн);
 --Для смены КБК - сделать подстановку
 if Match(tmp,"ФКР.*"):         Док_Изм[Iter].ТипКБК="10"; updКБК=true;
   |Match(tmp,"КД.*"):          Док_Изм[Iter].ТипКБК="20"; updКБК=true;
   |Match(tmp,"КИФД.???.01.*"): Док_Изм[Iter].ТипКБК="31"; updКБК=true;
   |Match(tmp,"КИФД.???.02.*"): Док_Изм[Iter].ТипКБК="32"; updКБК=true;
   |Match(tmp,"КОСГУ.*"): updКБК=true;
   else updКБК=false;
 fi;
 if not tmp="":
    Док_Изм[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Док_Изм[Iter].Призн," ",tmp,SubStr(tmp,1,Pos(".",tmp))+"*","");
    hПризн=tmp;
    Sig2Acc("Док_Изм",Iter);
 fi;
 --Для смены КБК - сделать подстановку
 if updКБК then
    tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Док_Изм[Iter].Призн," ","ФКР.* КД.* КИФД.*"," ");
    tmp=ExtractWords(2,100,tmp,".");
    tmp=Раб.Формат.ReplaceSubstr(tmp,".","")+ExtractWord(2,Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Док_Изм[Iter].Призн," ","КОСГУ.*"," "),".");
    Док_Изм[Iter].КБК=tmp;
 fi;

 Return False;
end;

Func ПредикторСчета(Sect:S; Iter:I; Сч:S; isБанк:L; isДеб:L):S;
var ВДd,ВДa,КБК,КОСГУ:S;
var Ист,ТБК,lКБК:S;
 if Sect="Док_Исх":
    Ист=Док_Ист;
   |Sect="Док_Изм":
    Ист=Док_Изм[Iter].Ист;
 fi;
 if Ист="": ^Сч; fi;
 ВДd=ИстВБух(Ист);
 ВДa=Раб.Бюджет2005.ВзятьКодСчета(Сч,"","ВД",False);
 ТБК=GetVariableS(Sect+"["+Str(Iter)+"].ТипКБК");
 lКБК=GetVariableS(Sect+"["+Str(Iter)+"].КБК");
 if ТБК="10": КБК=SubStr(lКБК,1,3)+"."+SubStr(lКБК,4,4)+"."+SubStr(lКБК,8,7)+"."+SubStr(lКБК,15,3);
   |ТБК="20": КБК=SubStr(lКБК,1,3)+"."+SubStr(lКБК,4,1)+"."+SubStr(lКБК,5,2)+"."+SubStr(lКБК,7,5)+"."+SubStr(lКБК,12,2)+"."+SubStr(lКБК,14,4);
   |ТБК="31" or ТБК="32": КБК=SubStr(lКБК,1,3)+"."+SubStr(lКБК,4,2)+"."+SubStr(lКБК,6,2)+"."+SubStr(lКБК,8,2)+"."+SubStr(lКБК,10,2)+"."+SubStr(lКБК,12,2)+"."+SubStr(lКБК,14,4);
 fi;
 КОСГУ=SubStr(lКБК,18,3);
 if ВДd="1":
    if ВДd=ВДa:
       if isБанк :
          Сч=КБК+".1."+Раб.Бюджет2005.ВзятьКодСчета(Сч,"","СЧ5",False)+"."+КОСГУ;
         else
          Сч=КБК+".1."+Раб.Бюджет2005.ВзятьКодСчета(Сч,"","СЧ8",False);
       fi;
      else
       if isБанк :
          Сч=КБК+".1.304.05."+КОСГУ;
         else
          Сч=КБК+".1.";
       fi;
    fi;
   |ВДd="2":
    if ВДd=ВДa:
       if not isБанк :
          Сч=КБК+".2."+Раб.Бюджет2005.ВзятьКодСчета(Сч,"","СЧ8",False);
       fi;
      else
       if isБанк: 
          Сч=Глава+".01.05.02.01.0"+Банк.РПО_КодБюдж+".0000.2.201.11."+if(isДеб,"510","610");
         else 
          Сч=КБК;
       fi;
    fi;
   |ВДd="3":
    if not ВДd=ВДa:
       if isБанк: Сч=Глава+".01.05.02.01.0"+Банк.РПО_КодБюдж+".0000.3.201.11."+if(isДеб,"510","610"); else Сч=Глава+".0000.0000000.000.3.304.01."+if(isДеб,"830","730"); fi;
    fi;
 fi;
 ^Сч;
end;

Func СчДеб_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if Знак_Исх=1: Message("Для выбранного режима, вводить значение не требуется"); Template.Name="S4"; Template.Field="Знак_Исх"; ^False; fi;
 if Глава="": Message("Заполните главу по БК",mtError); Template.Field="Глава"; ^False; fi;
 if Док_Исх[Iter].КБК="" and not Док_Ист="5": Message("Введите КБК",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
 НеПустаяТаблица(Name2Handle);
 if Док_Исх[Iter].СчДеб="": tmp=hСчДеб; else tmp=Док_Исх[Iter].СчДеб; fi;
 if Док_Исх[Iter].СчКре="":
    tmp=ПредикторСчета("Док_Исх",Iter,tmp,True,True);
    tmp=AccountElection(СчБанк,False,tmp);
   else
    tmp=ПредикторСчета("Док_Исх",Iter,tmp,False,True);
    tmp=PickCorrAccount(Док_Исх[Iter].СчКре,True,tmp);
 fi;
 if not tmp="":
    Док_Исх[Iter].СчДеб=tmp;
    hСчДеб=tmp;
    ОбработатьПризн("Док_Исх",Iter);
 fi;
 Return False;
end;

Func СчКре_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp,Mask:S;
 if Знак_Исх=1: Message("Для выбранного режима, вводить значение не требуется"); Template.Name="S4"; Template.Field="Знак_Исх"; ^False; fi;
 if Глава="": Message("Заполните главу по БК",mtError); Template.Field="Глава"; ^False; fi;
-- if Док_Исх[Iter].КБК="" and not Док_Ист="5": Message("Введите КБК",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
 НеПустаяТаблица(Name2Handle);
 if Док_Исх[Iter].СчКре="": tmp=hСчКре; else tmp=Док_Исх[Iter].СчКре; fi;
 if Док_Исх[Iter].СчДеб="":
    tmp=ПредикторСчета("Док_Исх",Iter,tmp,True,False);
    tmp=AccountElection(СчБанк,False,tmp);
   else
    tmp=ПредикторСчета("Док_Исх",Iter,tmp,False,False);
    tmp=PickCorrAccount(Док_Исх[Iter].СчДеб,False,tmp);
 fi;
 if not tmp="":
    Док_Исх[Iter].СчКре=tmp;
    hСчКре=tmp;
    ОбработатьПризн("Док_Исх",Iter);
 fi;
 Return False;
end;

Func СчДебИ_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if Глава="": Message("Заполните главу по БК",mtError); Template.Field="Глава"; ^False; fi;
 --if Док_Изм[Iter].КБК="" and not Док_Изм[Iter].Ист="5": Message("Введите КБК",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
 НеПустаяТаблица(Name2Handle);
 if Док_Изм[Iter].СчДеб="": tmp=hСчДеб; else tmp=Док_Изм[Iter].СчДеб; fi;
 if Док_Изм[Iter].СчКре="":
    tmp=ПредикторСчета("Док_Изм",Iter,tmp,True,True);
    tmp=AccountElection(СчБанк,False,tmp);
   else
    tmp=ПредикторСчета("Док_Изм",Iter,tmp,False,True);
    tmp=PickCorrAccount(Док_Изм[Iter].СчКре,True,tmp);
 fi;
 if not tmp="":
    Док_Изм[Iter].СчДеб=tmp;
    hСчДеб=tmp;
    ОбработатьПризн("Док_Изм",Iter);
 fi;
 Return False;
end;

Func СчКреИ_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp,Mask:S;
 if Глава="": Message("Заполните главу по БК",mtError); Template.Field="Глава"; ^False; fi;
-- if Док_Изм[Iter].КБК="" and not Док_Ист="5": Message("Введите КБК",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
 НеПустаяТаблица(Name2Handle);
 if Док_Изм[Iter].СчКре="": tmp=hСчКре; else tmp=Док_Изм[Iter].СчКре; fi;
 if Док_Изм[Iter].СчДеб="":
    tmp=ПредикторСчета("Док_Изм",Iter,tmp,True,False);
    tmp=AccountElection(СчБанк,False,tmp);
   else
    tmp=ПредикторСчета("Док_Изм",Iter,tmp,False,False);
    tmp=PickCorrAccount(Док_Изм[Iter].СчДеб,False,tmp);
 fi;
 if not tmp="":
    Док_Изм[Iter].СчКре=tmp;
    hСчКре=tmp;
    ОбработатьПризн("Док_Изм",Iter);
 fi;
 Return False;
end;

Func N_OnEnter(FieldName: String; Iter: Integer): logical;
var n:I;
 НеПустаяТаблица("Док_Изм");
 ClearVariable(Buf);
 for n=1..Док_Исх do
  Buf[n]=Format("%3D",n)+" --"+Док_Исх[n].Наим+" №"+Док_Исх[n].Ном+" от "+DateToString(Док_Исх[n].Дат)+" "+Док_Исх[n].КБК+"="+Format("%.2N",Док_Исх[n].Сум)+" "+Док_Исх[n].НазнПл;
 od;
 if LengthOfArray(Buf)=0: Message("Заполните таблицу 'Реквизиты платежного документа'",mtError); Template.Field="Тип"; Template.Frame=1; ^False; fi;
 n=Alternate("Номер записи",Buf,-1,1,12);
 if not n=0:
    Док_Изм[Iter].N=n;
 fi;
 Return False;
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="ФИОИсп" or Field="ТелИсп": ДолжнИсп=v1; ФИОИсп=v2; ТелИсп=GetCardFieldS("Сотрудники",rec,"ТелефонРабочий");
    fi;
 fi;
 Return Cur;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc cbУчитывать_OnChange(Sender: String);
var Flag:L;
 Try
  if Учитывать:
     Flag=True;
     Учитывать=Проверить(False);
    else
     if EnqOkCancel("Вы уверены, что хотите исключить документ из обработки ?",mtWarning)=cmCancel:
        EditorCancel;
     fi;
  fi;
 Finally
  cbУчитывать.State=Учитывать;
  Оформление;
 end;
 if Flag and Sender=AsString(Template.Object): EditorApply; fi;
end;

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

end;

Proc cbВБанк_OnChange(Sender: String);
 --ClearVariable(ДатаРейс);
 --ClearVariable(НомРейс);
 --ClearVariable(ВЛВС);
 if НомРейс>0: НомРейс=-НомРейс; fi;
 if not Учитывать and ВБанк:
    Учитывать=True;
    cbУчитывать.State=Учитывать;
    ВБанк=Учитывать;
    cbВБанк.State=ВБанк;
 fi;
 EditorApply;
end;

Proc btnДата_OnClick(Sender: String);
var tmp:D;
 tmp=Calendar;
 if not tmp=1.1.100:
    if Sender="btnДатаОпер": ДатаОпер=tmp;
    fi;
 fi;
end;

Proc btnПечать_onClick (Obj:S);
 if not Проверить(False) then Exit; fi;
 if КолКопий<=0: КолКопий=1; fi;
 if КолКопий>2:
    if EnqOkCancel("Вы уверены, что хотите распечатать "+Str(КолКопий)+" копий документа ?")=cmCancel:
       Message("Отказ от печати"); 
       Exit;
    fi;
 fi;
 Рендер;
 Раб.Настр_Печать.Prn("Раб.Вспом.Печать2","",SelfCfg,"",КолКопий);
end;

Proc btnPreview_OnClick(Sender: String);
  if not Проверить(False) then Exit; fi;
  Рендер;
  OpenBlank("Раб.Вспом.Печать2");
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;
 EditorApply;
end;

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

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

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

Proc OnRead;
var Iter:i;
 ОткрНастр(False);
 Настр(False);
 if НоваяЗапись:
    if Номер=0:
       ДатаДок=ToDay;
       ДатаПодписи=ДатаДок;
       Рекв=Раб.Бюджет2005.НашРекв;
       ЗаполнитьКлиента(Рекв);
       ПоУмолчанию;
    fi;
    if Раб.Настр.Начать("УПРАВЛЕНИЕ.БАНК",0,0,"",GetGUID):
       ver=inТипДок*100;
       if Раб.Настр.ВзятьЗначение("Ver")='6' and ver_<6: ver=inТипДок*100+6; fi;
       if Int(Раб.Настр.ВзятьЗначение("Ver"))>=7 and ver_<7: ver=inТипДок*100+7; fi;
       if Int(Раб.Настр.ВзятьЗначение("Ver"))>=12 and ver_<12: ver=inТипДок*100+12; fi;
      else
       ver=inТипДок*100;
    fi;
    Номер=РАБ.Обл.СледСУчетомДаты(SelfCrd,"Номер","ДатаДок",ДатаДок);
    НомерДок=Str(Номер);
    Проводить=False;
    ВБанк=False;
    Учитывать=False;
    НомРейс=0;
    ДатаРейс=1.1.100;
    if Раб.Бюджет2005.Сетевая: EditorApply; fi;
 fi;
 НеПустаяТаблица("Док_Исх");
 НеПустаяТаблица("Док_Изм");
 if not FlagInit: Оформление; fi;
end;

Func OnVerify: Logical;
var Iter:I;
 for Iter=1..Док_Исх do
  Док_Исх[Iter].N=Iter;
 od;
 СумДок=SumOfArray(Док_Исх[].Сум);
 Return ЗаполнитьКлючДок;
end;
--Обработчики событий шаблона -----
--

Func КФД_OnEnter(FieldName: String; Iter: Integer): logical;
var n:I;
  ClearVariable(Buf);
  Buf[1]="Уведомление об уточнении вида и принадлежности платежа (0531809)";
  Buf[2]="Уведомление об уточнении операций клиента (0531852)";
  n=Alternate("Выберите форму",Buf,50,TypDoc+1,12);
  if n<>0 :
     ver=ver_+(n-1)*100;
  fi;
  Return False;
end;


Func varvisПрСум_OnEnter(FieldName: String; Iter: Integer): logical;
  visПрСум=not visПрСум;
  Оформление;
  Return False;
end;


Func Сум_OnVerify(FieldName: String; Iter: Integer; Value: N):L;
  if Round(Value,2)=0:
    if Док_Изм[Iter].N > 0 and Док_Изм[Iter].N <= Док_Исх:
       Док_Изм[Iter].СумПров=Док_Исх[Док_Изм[Iter].N].Сум;
    fi;
    --visПрСум=True;
    Оформление;
   else
    Док_Изм[Iter].СумПров=Value;
  fi;
  Return True ;
end;


Конец
