-- Шаблон создан мастером бланков
-- 26.02.2006 10:59:01
--
БланкСШаблоном [14.06.2006] "Объявление на взнос наличными (3352-У)", Редактор ВЗНОСНАЛ;

var FlagEdit:L=[False];

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

var МаскаСчДеб  :S="(???.01.05.02.*&(*.?.201.?1.51*|*.?.201.?7.61*))|*.?.304.05.*|*.?.304.04.*|*.?.210.02.*";
var МаскаСчКре  :S="*.?.210.03.66*";

--Дебет:S;
--ШифрДок:S;

var НовыйШаблон:I;
var fПолуч:L;
var fУлучшенПечать:L=True;

var НастрGUID:S;

var Талон:S="наличными №"+НомерБум;

var СК_:I=Int((Сумма-Trunc(Сумма))*100);
var СК:S=if(СК_=0 and not (НовыйШаблон=2 or НовыйШаблон=3),"=",Format("%.2D",СК_));
--var СК:S=Format("%.2D",Int((Сумма-Trunc(Сумма))*100));

Func MyFormat(Val:N; W:I):S;
var СР,СК,СК2,sp:S;
var СК_:I;
 СР=Str(Trunc(Val),0);
 СК_=Int((Val-Trunc(Val))*100);
 СК2=Format("%.2D",СК_);
 СК=if(СК_=0 and not (НовыйШаблон=2 or НовыйШаблон=3),"=",СК2);
 sp=if(FlagEdit,".",if(СК_=0 and not (НовыйШаблон=2 or НовыйШаблон=3),"","-"));
 ^if(FlagEdit,СР+sp+СК2,СР+sp+СК+if(НовыйШаблон=0 or НовыйШаблон=3,"",RepStr("=",W-Length(СР+sp+СК))));
end;

var Сумма_:S=MyFormat(Сумма,19);
var Сумма__:S=MyFormat(Сумма,23);

var Сумма1_:s=if(not Символ1="" or not Сумма1=0,MyFormat(Сумма1,13),"");
var Сумма2_:s=if(not Символ2="" or not Сумма2=0,MyFormat(Сумма2,13),"");
var Сумма3_:s=if(not Символ3="" or not Сумма3=0,MyFormat(Сумма3,13),"");
var Сумма4_:s=if(not Символ4="" or not Сумма4=0,MyFormat(Сумма4,13),"");

var БанкИмя_ :S=if(ФИОЧерез="",if(Банк=nil,Рекв.КорИмя,Банк.БанкИмя),ФИОЧерез);
var Банк_   :S=Банк.Банк+" "+Банк.Город;
var БанкИмяП_:S=if(БанкП=nil,РеквП.КорИмя,БанкП.БанкИмя);
var БанкП_   :S=БанкП.Банк+" "+БанкП.Город;
var ИННП     :S=if(БанкП.РПО_ИНН_БАНКА=False,РеквП.ИНН,БанкП.РПО_БАНК_ИНН);
var КППП     :S=if(БанкП.РПО_ИНН_БАНКА=False,РеквП.КПП,БанкП.РПО_БАНК_КПП);
var ОКАТОП   :S=if(БанкП.РПО_ИНН_БАНКА=False,РеквП.ОКАТО,БанкП.РПО_БАНК_ОКАТО);
var Пропись[]:S;
var Пропись2[]:S;

var A:S=if(РПО_Проводить,"","+");
var D:S=if(РПО_Проводить,"","-");
var пп[]:I=$;
var Призн_[]:S=РПО_Позиции[$].Призн;
var ИтогСумПр:N=SumOfArray(РПО_Позиции[].Сумма);

var ЭкспортИст:S=if(РПО_Проводить,"","Экспорт КБК в ист. взноса");

StoreСчДеб:S;
StoreСчКре:S;

StoreПризнБК:S;
StoreПризнКОСГУ:S;

var Buf[]:S;
var BufСум[]:N;

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

var SelfCrd:S="ВЗНОСНАЛ";

cbПроводить: Object;
btnДатОпер : Object;
edДатОпер  : Object;
cbПолуч    : Object;
cbКакБО    : Object;
btnПревью  : Object;

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;
--
--Процедуры и функции ------------- 
Proc Настр(aСохр:L);
var Flag:L;
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать("ДОКУМЕНТЫ.БАНК.ВЗНОС_3352_У",0,0,"",НастрGUID):
    Раб.Настр.Добавить("НовыйШаблон","I");
    Раб.Настр.Добавить("fПолуч","L");
    Раб.Настр.Добавить("fУлучшенПечать","L");
    if aСохр: 
       Раб.Настр.Сохранить; 
      else 
       НастрGUID=Раб.Настр.Загрузить("","");
    fi;
 fi;
end;

Proc Инициализация;
var Obj:Object;
var s,r,rr,c,cc,n,l,bgColor:i;
var Field:S;
 ClearVariable(BufField);
 ClearVariable(BufColorBg);
 ClearVariable(BufColorFo);
 for s=1..13 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
       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 ОформБанкИмя;
 if not РПО_Проводить:
    S3.Cell(2,2,CellFontColor,if(Рекв=nil,coWhite,coBlack));
    S3.Cell(2,2,CellBgColor,if(Рекв=nil,coTeal,coAqua));
 fi;
end;

Proc Оформление;
var s,c,r,cc,rr,n:i;
var Obj: Object;
 btnДатОпер.Enabled=not РПО_Проводить;
 edДатОпер.Enabled=not РПО_Проводить;
 cbПолуч.Enabled=not РПО_Проводить;
 btnПревью.Enabled=fУлучшенПечать;
 for s=1..13 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
       n=SearchInArray(BufField,asString(Obj.Cell(r,c,CellContents,"")),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;
      od;
     od;
  fi;
 od;
 ОформБанкИмя;
end;

Proc НеПустаяТаблица;
 if РПО_Позиции<1: InsertFrame(РПО_Позиции, 1); fi;
end;

Proc УдалитьПустыеСтроки;
var n:i;
 n=1; 
 while n<=РПО_Позиции do
  if Round(РПО_Позиции[n].Сумма,2)=0 and
     РПО_Позиции[n].Призн=""  and
     РПО_Позиции[n].Примеч="" and
     РПО_Позиции[n].СчДеб=""  and
     РПО_Позиции[n].СчКре="": DeleteFrame(РПО_Позиции,n);
   else 
    n=n+1; 
  fi; 
 od;
 НеПустаяТаблица;
end;

Proc БанкToПризн (Iter:I);
var tmp,Mask:S;
var n,nn:i;
 if РПО_Позиции[iter].СчДеб="" or РПО_Позиции[iter].СчКре="": Exit; fi;
 Mask=Раб.Бюджет2005.СписокСправ(РПО_Позиции[iter].СчДеб+"|"+РПО_Позиции[iter].СчКре,0,"");
 RefreshAna;
 nn=RecSignsCount("БАНК_СЧЕТА",Банк);
 for n=1..nn do
  tmp=RecSign("БАНК_СЧЕТА",Банк,n);
  if Раб.Бюджет2005.MatchMask(tmp,Mask):
     if SignCardFile(tmp,False)="БАНК_СЧЕТА": РПО_Позиции[iter].Призн=Раб.Бюджет.ДобавитьПризнак(РПО_Позиции[iter].Призн,tmp); fi;
  fi;
 od;
end;

Proc БанкToПризнТабл;
var iter:i;
 for iter=1..РПО_Позиции do
  if РПО_Позиции[iter].СчДеб<>"" and РПО_Позиции[iter].СчКре<>"": БанкToПризн(Iter); fi;
 od;
end;

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

Func ПроверитьКакБО:L;
var Iter:I;
var ВД_,БК_,КОСГУ_,СчД_,СчК_:S;
 ClearVariable(Buf);
 if Name_A("БО.000")=" ": Message("Неизвестный идентификатор аналитического признака (бюджетного) обязательства БО.000",mtError); ^False; fi;
 Раб.КСА.Начать;
 for Iter=1..РПО_Позиции do
  if РПО_Позиции[Iter].СчДеб="": Message("Введите счет дебета",mtError); Template.Field="СчДеб"; Template.Frame=Iter;  ^False; fi;
  ВД_=Раб.Бюджет2005.ВзятьКодСчета(РПО_Позиции[Iter].СчДеб,"","ВД",False);
  if not ВД_="1" and not ВД_="2": Message("Для вида средств ("+ВД_+") принятое (бюджетное) обязательство не предусмотрено",mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
  if Match(РПО_Позиции[Iter].СчДеб,"*.?.304.05.*"):
     БК_=Раб.Бюджет2005.ВзятьКодСчета(РПО_Позиции[Iter].СчДеб,"","БК",False);
     КОСГУ_=Раб.Бюджет2005.ВзятьКодСчета(РПО_Позиции[Iter].СчДеб,"","КОСГУ",False);
    |Match(РПО_Позиции[Iter].СчДеб,"*.?.201.?1.*"):
     БК_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(РПО_Позиции[Iter].Призн," ","ФКР.*","");
     БК_=SubStr(БК_,5,20);
     if БК_="": Message("Не найден аналитический признак классификации расходов",mtError); Template.Field="Призн_"; Template.Frame=Iter; ^False; fi;
     КОСГУ_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(РПО_Позиции[Iter].Призн," ","КОСГУ.*","");
     КОСГУ_=SubStr(КОСГУ_,7,3);
     if КОСГУ_="": Message("Не найден аналитический признак КОСГУ",mtError); Template.Field="Призн_"; Template.Frame=Iter; ^False; fi;
    |True: Message("Не удалось определить банковский счет",mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False;
  fi;
  if ВД_="1":
     Раб.КСА.Добавить(БК_+"."+ВД_+".501.13."+КОСГУ_);
     Раб.КСА.Добавить(БК_+"."+ВД_+".502.11."+КОСГУ_);
     Buf[Iter]=БК_+"."+ВД_+".501.13."+КОСГУ_+" "+БК_+"."+ВД_+".502.11."+КОСГУ_;
    |ВД_="2":
     Раб.КСА.Добавить(БК_+"."+ВД_+".506.10."+КОСГУ_);
     Раб.КСА.Добавить(БК_+"."+ВД_+".502.11."+КОСГУ_);
     Buf[Iter]=БК_+"."+ВД_+".506.10."+КОСГУ_+" "+БК_+"."+ВД_+".502.11."+КОСГУ_;
  fi;
 od;
 if Раб.КСА.Закончить(True): Message("Добавление новых счетов закончено"); fi;
 for Iter=1..РПО_Позиции do
  СчД_=ExtractWord(1,Buf[Iter]," ");
  СчК_=ExtractWord(2,Buf[Iter]," ");
  if Name_S(СчД_)=" ": Message("Неизвестный идентификатор счета "+СчД_,mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
  if Name_S(СчК_)=" ": Message("Неизвестный идентификатор счета "+СчК_,mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
  if not Correspond(СчД_,СчК_): Message("Счета не могут корреспондировать "+СчД_+"/"+СчК_,mtError);  Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
  if Раб.Бюджет.ПроверитьПризнакиОбязательные(СчД_,СчК_,РПО_Позиции[Iter].Призн,"БО.*")=False : Template.Field="Призн_"; Template.Frame=Iter; ^False; fi;
  if Раб.Бюджет.ПроверитьПризнакиСвязанные(СчД_,СчК_,РПО_Позиции[Iter].Призн,"БО.*")=False : Template.Field="Призн_"; Template.Frame=Iter;  ^False; fi;
 od;
 ^True;
end;

Func Проверить:L;
var Iter :I;
 if ДатОпер=1.1.100: Message("Введите дату операции",mtError); Template.Object="btnДатОпер"; ^False; fi;
 УдалитьПустыеСтроки;
 Раб.КСА.Начать;
 for Iter=1..РПО_Позиции do
  Раб.КСА.Добавить(РПО_Позиции[Iter].СчДеб);
  Раб.КСА.Добавить(РПО_Позиции[Iter].СчКре);
 od;
 if Раб.КСА.Закончить(True): Message("Добавление новых счетов закончено"); fi;
 Раб.Бюджет.ПроверитьПризнакиНачать;
 for Iter=1..РПО_Позиции do
  if РПО_Позиции[Iter].Сумма=0: Message('Введите сумму',mtError); Template.Name="S6"; 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 Name_S(РПО_Позиции[Iter].СчДеб)=" ": Message("Неизвестный идентификатор счета "+РПО_Позиции[Iter].СчДеб,mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
  if Name_S(РПО_Позиции[Iter].СчКре)=" ": Message("Неизвестный идентификатор счета "+РПО_Позиции[Iter].СчКре,mtError); Template.Field="СчКре"; Template.Frame=Iter; ^False; fi;
  if Correspond(РПО_Позиции[Iter].СчДеб,РПО_Позиции[Iter].СчКре)=False: Message("Счета '"+РПО_Позиции[Iter].СчДеб+"/"+РПО_Позиции[Iter].СчКре+"' не могут корреспондировать",mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
  if Раб.Бюджет.ПроверитьПризнакиОбязательные(РПО_Позиции[Iter].СчДеб,РПО_Позиции[Iter].СчКре,РПО_Позиции[Iter].Призн,"")=False : Template.Field="Призн_"; Template.Frame=Iter; ^False; fi;
  if Раб.Бюджет.ПроверитьПризнакиСвязанные(РПО_Позиции[Iter].СчДеб,РПО_Позиции[Iter].СчКре,РПО_Позиции[Iter].Призн,"")=False : Template.Field="Призн_"; Template.Frame=Iter; ^False; fi;
 od;
 if not Round(ИтогСумПр,2)=Round(Сумма,2): Message("Сумма проводок отлична от суммы объявления",mtError); Template.Name="S4"; Template.Field="Сумма "; ^False; fi;
 if РПО_КакБО:
    if not ПроверитьКакБО: ^False; fi;
 fi;
 ^True;
end;

Func ВыборКОСГУ (Voc:S):S;
var tmp:S;
 if Voc="ФКР": tmp=Раб.Бюджет2005.МаскаРасхКОСГУ;
   |Voc="КД": tmp=Раб.Бюджет2005.МаскаДоходКОСГУ;
   |Voc="КИФД": tmp=Раб.Бюджет2005.МаскаДефицитКОСГУ;
   |True: tmp="КОСГУ.*";
 fi;
 tmp=AnaElection(tmp,False,False,StoreПризнКОСГУ);
 if tmp="": ^""; fi;
 StoreПризнКОСГУ=tmp;
 ^SubStr(tmp,7,3);
end;

Proc СоздатьПропись;
var ww,w,l,ll,s:i;
var Пропись_:S;
var Ret,tmp:S;
 ClearVariable(Пропись);
 ClearVariable(Пропись2);
 Пропись[1]=RepStr("=",62);
 Пропись[2]=RepStr("=",76);
 Пропись2[1]=RepStr("=",82);
 Пропись2[2]=RepStr("=",76);
 Пропись_=Slo_(Trunc(Сумма),"РУБ1");
 Пропись_=SubStr(Пропись_,1,Pos("руб",Пропись_)-1);
 ww=WordsCount(Пропись_," ");
 s=1;
 Ret="";
 ll=0;
 for w=1..ww do
  tmp=ExtractWord(w,Пропись_," ");
  l=Length(tmp);
  if (s=1 and ll+l+if(ll=0,0,1)<63) or (not s=1 and ll+l+if(ll=0,0,1)<77):
     Ret=Ret+if(ll=0,""," ")+tmp;
     ll=ll+l+if(ll=0,0,1);
    else
     Пропись[s]=Ret;
     Ret=tmp;
     ll=l;
     s=s+1;
  fi;
 od;
 Пропись[s]=Ret;
 if s<3:
    tmp=RepStr("=",if(s=1,62,76)-Length(Пропись[s]));
    Пропись[s]=Пропись[s]+tmp;
 fi;
 --
 s=1;
 Ret="";
 ll=0;
 for w=1..ww do
  tmp=ExtractWord(w,Пропись_," ");
  l=Length(tmp);
  if (s=1 and ll+l+if(ll=0,0,1)<83) or (not s=1 and ll+l+if(ll=0,0,1)<77):
     Ret=Ret+if(ll=0,""," ")+tmp;
     ll=ll+l+if(ll=0,0,1);
    else
     Пропись2[s]=Ret;
     Ret=tmp;
     ll=l;
     s=s+1;
  fi;
 od;
 Пропись2[s]=Ret;
 if s<3:
    tmp=RepStr("=",if(s=1,82,76)-Length(Пропись2[s]));
    Пропись2[s]=Пропись2[s]+tmp;
 fi;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func НомерБум_onVerify(Field:S; Iter:I; Value:S):L;
var tmp:I;
 НомерБум=Value;
 tmp=Int(НомерБум);
 if tmp>0 And Номер<>tmp: Номер=tmp; fi;
 if Раб.Бюджет2005.Сетевая: EditorApply; fi;
 ^True;
end;

func НомерБум_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Cur=Str(Раб.Обл.СледСУчетомГодаФ(SelfCrd,"Номер","Дата","UKey<>"+RecordToString(Current)));
 ^Cur;
end;

Func Дата_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:D;
 Template.HideEditor(False);
 tmp=Calendar(Дата);
 if tmp=1.1.100: ^Cur; fi;
 Дата=tmp;
 Return Cur;
end;

Func БанкИмя_onEnter(FieldName: String; Iter: Integer): logical;
var rec:record;
 ОформБанкИмя;
 if not Рекв=nil: ^True; fi;
 Rec=ОткрытьКартотеку("Контрагент","Наше",Рекв,crdRecordOnly);
 if Rec=nil: ^False; fi;
 Рекв=Rec;
 Банк=Раб.Бюджет2005.БанкСчет(Рекв,False);
 if fПолуч:
    РеквП=Рекв;
    БанкП=Банк;
 fi;
 Return False;
end;

Func БанкИмя_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
 FlagEdit=True;
 ФИОЧерез=Value;
 Return True;
end;

Proc БанкИмя_OnExit(FieldName: String; Iter: Integer);
 if FlagEdit: 
    FlagEdit=False;
   else
    ФИОЧерез="";
 fi;
end;

Func БанкИмя_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec:Record;
 Template.HideEditor(False);
 Rec=ОткрытьКартотеку("Контрагент","Наше",Рекв,crdRecordOnly);
 if not Rec=nil:
    Рекв=Rec;
    Банк=Раб.Бюджет2005.БанкСчет(Рекв,False);
    if fПолуч:
       РеквП=Рекв;
       БанкП=Банк;
    fi;
 fi;
 ОформБанкИмя;
 Return Cur;
end;


Func БанкИмяП_onEnter (Field:S; Iter:I):L;
var Rec:Record;
 Rec=ОткрытьКартотеку("Контрагент","",РеквП,crdRecordOnly);
 if Rec=nil: ^False; fi;
 РеквП=Rec;
 БанкП=Раб.Бюджет2005.БанкСчет(РеквП,False);
 ^False;
End;

Func Сумма_OnEnter(FieldName: String; Iter: Integer): logical;
 FlagEdit=True; --так надо (неправильно работает del) иначе не остаются знаки равно
 Return True;
end;

Func Сумма_OnVerify(FieldName: String; Iter: Integer; Value: String):Logical;
 FieldName=SubStr(FieldName,1,Length(FieldName)-1);
 PutVariableN(FieldName,Round(Value,2));
 Return True;
end;

Proc Сумма_OnExit(FieldName: String; Iter: Integer);
 if FieldName="Сумма_": СоздатьПропись; fi;
 if FlagEdit: FlagEdit=False; Exit; fi;
 FieldName=SubStr(FieldName,1,Length(FieldName)-1);
 PutVariableN(FieldName,0);
end;

Func Банк_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec:Record;
 if Рекв=nil: Message("Заполните 'От кого",mtError); Template.Field="БанкИмя_"; ^False; fi;
 Rec=ОткрытьКартотеку("Банк_Счета","Контрагент="+RecordToString(Рекв),Банк);
 if Rec=nil: ^False; fi;
 Банк=Rec;
 if fПолуч:
    РеквП=Рекв;
    БанкП=Банк;
 fi;
 Return False;
end;

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

Func Источник_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp,Voc,Val:S;
 Template.HideEditor(False);
 tmp=AnaElection("ФКР.*|КД.*|КИФД.*|КОСГУ.*|ПГР.*",False,False,StoreПризнБК);
 if tmp="": ^Cur; fi;
 StoreПризнБК=tmp;
 Voc=SubStr(tmp,1,Pos(".",tmp)-1);
 Val=SubStr(tmp,Pos(".",tmp)+1,255);
 if Voc="ФКР" or Voc="КД" or Voc="КИФД":
    Источник=Раб.Бюджет2005.Объединить(Источник,Val,"; ");
    tmp=ВыборКОСГУ(Voc);
    Источник=Раб.Бюджет2005.Объединить(Источник,tmp,".");
   |Voc="ПГР":
    tmp=SubStr(Val,1,Pos(".",Val)-1);
    if tmp="": tmp=Val; fi;
    Источник=Раб.Бюджет2005.Объединить(Источник,"п."+tmp," ");
   |True: 
    Источник=Раб.Бюджет2005.Объединить(Источник,Val," ");
 fi;
 Return Cur;
end;

Func Примечание_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n:i;
 Template.HideEditor(False);
 ClearVariable(Buf);
 Buf[1]="проставить КПП";
 Buf[2]="проставить ОКАТО";
 Buf[3]="проставить ОКТМО";
 n=Alternate("Проставить...",Buf,-1,1,12);
 if n=1: Примечание=Раб.Бюджет2005.Объединить(Примечание,"КПП "+КППП," ");
   |n=2: Примечание=Раб.Бюджет2005.Объединить(Примечание,"ОКАТО "+ОКАТОП," ");
   |n=3: Примечание=Раб.Бюджет2005.Объединить(Примечание,"ОКТМО "+РеквП.ОКТМО," ");
 fi;
 Return Cur;
end;


Func ЭкспортИст_OnEnter(FieldName: String; Iter: Integer): logical;
var z,zz:I;
var БК,ЭК,ТипБК,ПГР,Key:S;
 if РПО_Проводить: ^False; fi;
 УдалитьПустыеСтроки;
 if РПО_Позиции[1].СчДеб="" or РПО_Позиции[1].СчКре="": Message("Заполните таблицу проводок",mtError); Template.Field="СчДеб"; Template.Frame=1; ^False; fi;
 Источник="";
 ClearVariable(Buf);
 ClearVariable(BufСум);
 for Iter=1..РПО_Позиции do
  if not РПО_Позиции[Iter].СчДеб="" and not РПО_Позиции[Iter].СчКре="":
     if Match(РПО_Позиции[Iter].СчДеб,"*.?.304.05.*"):
        ТипБК=Раб.Бюджет2005.ТипКБКСчета(РПО_Позиции[Iter].СчДеб);
        ЭК=Раб.Бюджет2005.ВзятьКодСчета(РПО_Позиции[Iter].СчДеб,ТипБК,"КОСГУ",False);
        БК=Раб.Бюджет2005.ВзятьКодСчета(РПО_Позиции[Iter].СчДеб,ТипБК,"КБК",False);
       else
        ЭК=Раб.Бюджет.ВзятьПризнакИзНабораПоМаске(РПО_Позиции[Iter].Призн,"КОСГУ.*"," ");
        ЭК=SubStr(ЭК,7,255);
        БК=Раб.Бюджет.ВзятьПризнакИзНабораПоМаске(РПО_Позиции[Iter].Призн,"ФКР.*"," "); БК=SubStr(БК,5,255);
        if БК="": БК=Раб.Бюджет.ВзятьПризнакИзНабораПоМаске(РПО_Позиции[Iter].Призн,"КД.*"," "); БК=SubStr(БК,4,255); fi;
        if БК="": БК=Раб.Бюджет.ВзятьПризнакИзНабораПоМаске(РПО_Позиции[Iter].Призн,"КИФД.*"," "); БК=SubStr(БК,6,255); fi;
        ТипБК=Раб.Бюджет2005.ТипКБКСчета(БК);
     fi; --if Match(РПО_Позиции[Iter].СчДеб,"*.?.304.05.*"):
     ПГР=Раб.Бюджет.ВзятьПризнакИзНабораПоМаске(РПО_Позиции[Iter].Призн,"ПГР.*"," "); ПГР=SubStr(ПГР,5,255);
     if not Pos(".",ПГР)=0: ПГР=SubStr(ПГР,1,Pos(".",ПГР)-1); fi;
     if not ПГР="": ПГР="п."+ПГР; fi;
     Key=Раб.Бюджет2005.Объединить(БК,ЭК,".");
     Key=Раб.Бюджет2005.Объединить(Key,ПГР," ");
     z=SearchInArray(Buf,Key,True);
     if z=-1:
        z=InsertInArraySort(Buf,Key);
        InsertInArray(BufСум,z,РПО_Позиции[Iter].Сумма);
       else
        BufСум[z]=BufСум[z]+РПО_Позиции[Iter].Сумма;
     fi;
     zz=LengthOfArray(Buf);
     Источник="";
     for z=1..zz do
      Источник=Раб.Бюджет2005.Объединить(Источник,Buf[z]+if(zz=1,"","="+Str(BufСум[z],2)),"; ");
     od; --for z=1..zz do
  fi; --if not РПО_Позиции[Iter].СчДеб="" and not РПО_Позиции[Iter].СчКре="":
 od; --for Iter=1..РПО_Позиции do
 Return False;
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
 if РПО_Проводить: ^False; fi;
 InsertFrame(РПО_Позиции, Iter+1);
 ^False;
end;

Func D_onEnter (Field:S; Iter:I) :L;
 if РПО_Проводить: ^False; fi;
 if РПО_Позиции>1: DeleteFrame(РПО_Позиции, Iter); else DeleteFrame(РПО_Позиции, Iter); InsertFrame(РПО_Позиции, Iter); fi;
 ^False;
end;

Func СчДеб_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:s;
 if not РПО_Позиции[Iter].СчДеб="": tmp=РПО_Позиции[Iter].СчДеб; else tmp=StoreСчДеб; fi;
 if РПО_Позиции[Iter].СчКре="":
    tmp=AccountElection(МаскаСчДеб,False,tmp);
   else
    tmp=PickCorrAccount(РПО_Позиции[Iter].СчКре,True,tmp);
 fi;
 if tmp="": ^False; fi;
 StoreСчДеб=tmp;
 РПО_Позиции[Iter].СчДеб=tmp;
 if not РПО_Позиции[Iter].СчКре="":
    tmp=Раб.Бюджет.НаборПризнаков(РПО_Позиции[Iter].СчДеб,РПО_Позиции[Iter].СчКре,"");
    РПО_Позиции[Iter].Призн=Раб.Бюджет.МухиОтКотлет(РПО_Позиции[Iter].Призн,tmp);
    ПолучитьДопАн(РПО_Позиции[Iter].СчДеб,РПО_Позиции[Iter].СчКре,Iter);
    БанкToПризн(Iter);
 fi;
 ^False;
end;

Func СчКре_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:s;
 if not РПО_Позиции[Iter].СчКре="": tmp=РПО_Позиции[Iter].СчКре; else tmp=StoreСчКре; fi;
 tmp=AccountElection(МаскаСчКре,False,tmp);
 if tmp="": ^False; fi;
 РПО_Позиции[Iter].СчКре=tmp;
 StoreСчКре=tmp;
 if not РПО_Позиции[Iter].СчДеб="":
    if Correspond(РПО_Позиции[Iter].СчДеб,РПО_Позиции[Iter].СчКре)=False: Message("Счета '"+РПО_Позиции[Iter].СчДеб+"/"+РПО_Позиции[Iter].СчКре+"' не могут корреспондировать",mtError); РПО_Позиции[Iter].СчДеб=""; ^False; fi;
    tmp=Раб.Бюджет.НаборПризнаков(РПО_Позиции[Iter].СчДеб,РПО_Позиции[Iter].СчКре,"");
    РПО_Позиции[Iter].Призн=Раб.Бюджет.МухиОтКотлет(РПО_Позиции[Iter].Призн,tmp);
    ПолучитьДопАн(РПО_Позиции[Iter].СчДеб,РПО_Позиции[Iter].СчКре,Iter);
    БанкToПризн(Iter);
 fi;
 ^False;
end;

Func Призн_OnEnter(FieldName: String; Iter: Integer): logical;
var Mask,tmp :S;
 if РПО_Позиции[Iter].СчКре="": Message("Введите субсчет кредита",mtError); Template.Field="СчКре"; Template.Frame=Iter; ^False; fi;
 if РПО_Позиции[Iter].СчДеб="": Message("Введите субсчет дебета",mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
 Mask=Раб.Бюджет.НаборПризнаков(РПО_Позиции[Iter].СчДеб,РПО_Позиции[Iter].СчКре,"");
 if Mask="": Message("Аналитические признаки не требуются"); ^False; fi;
 tmp=AnaElection(Mask);
 if tmp="": ^False; fi;
 РПО_Позиции[Iter].Призн=Раб.Бюджет.ДобавитьПризнак(РПО_Позиции[Iter].Призн,tmp);
 ^False;
end;

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

Proc Рекв_onClick(Row: Integer; Col: Integer; Double: Logical);
var n:i;
var Field:S;
var Rec: Record;
 Field=AsString(Template.Field);
 if Рекв=nil: Message("Заполните 'От кого",mtError); Template.Field="БанкИмя_"; Exit; fi;
 if РеквП=nil: Message("Выберите получателя",mtError); Template.Field="БанкИмяП_"; Exit; fi;
 if Банк=nil: Message("Выберите банк-вноситель",mtError); Template.Field="Банк_"; Exit; fi;
 if БанкП=nil: Message("Выберите банк-получатель",mtError); Template.Field="БанкП_"; Exit; fi;
 if Field="БанкП.РСчет": ИНФО.БАНКСЧЕТА.Вызвать(БанкП,"РСчет",1);
   |Field="ИННП": 
    ClearVariable(Buf);
    Buf[1]="ИНН контрагента";
    Buf[2]="ИНН органа Федерального казначейства";
    n=Alternate("Выберите режим показа ИНН",Buf,-1,if(БанкП.РПО_ИНН_БАНКА,2,1),12);
    if n=1: 
       OpenBlank("Инфо.Контрагент",True,РеквП);
      |n=2: 
       if not БанкП.РПО_ИНН_БАНКА:
          Message("Для отображения ИНН (КПП) органа Федерального казначейства, установите переключатель 'ИНН / КПП / ОКАТО в платежно-расчетных документах' в позицию 'ОФК (Банка)'",mtWarning);
       fi;
       Инфо.БанкСчета.Вызвать(БанкП,"РПО_БАНК_ИНН",1);
    fi;
    if БанкП.РПО_ИНН_БАНКА:  else OpenBlank("Инфо.Контрагент",True,РеквП); fi;
   |Field="КППП": if БанкП.РПО_ИНН_БАНКА: ИНФО.БАНКСЧЕТА.Вызвать(БанкП,"РПО_БАНК_КПП",1); else OpenBlank("Инфо.Контрагент",True,РеквП); fi;
   |Field="ОКАТОП": if БанкП.РПО_ИНН_БАНКА: ИНФО.БАНКСЧЕТА.Вызвать(БанкП,"РПО_БАНК_ОКАТО",1); else OpenBlank("Инфо.Контрагент",True,РеквП); fi;
   |Field="Банк.БИК": ИНФО.БАНКСЧЕТА.Вызвать(Банк,"БИК",1);
   |Field="БанкП.БИК": ИНФО.БАНКСЧЕТА.Вызвать(БанкП,"БИК",1);
 fi;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc cbПроводить_onChange (Sender:S);
var Flag:L;
var n   :I;
 if РПО_Проводить=False:
    n=EnqOkCancel("Вы уверены, что хотите исключить данный документ из обработки?");
    Flag=n=cmCancel;
   else
    Flag=Проверить;
 fi;
 РПО_Проводить=Flag; cbПроводить.State=РПО_Проводить;
 Оформление;
 EditorApply;
end;

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

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

Proc btnПечать_OnClick(Sender: String);
 FlagEdit=False;
 if fУлучшенПечать:
    EditorApply;
    PutVariableI("ДОКУМЕНТЫ.БАНК.ВЗНОС_ПЕЧАТЬ_3352_У.НовыйШаблон",НовыйШаблон);
    if Sender="btnПревью":
       OpenBlank("ДОКУМЕНТЫ.БАНК.ВЗНОС_ПЕЧАТЬ_3352_У",True,Current);
      else
       PrintCardBlank("ДОКУМЕНТЫ.БАНК.ВЗНОС_ПЕЧАТЬ_3352_У",Current,"ТББ.ДОКУМЕНТЫ.КАССА.ВЗНОС_318П.000.cfg");
    fi;
    if not GetVariableI("ДОКУМЕНТЫ.БАНК.ВЗНОС_ПЕЧАТЬ_3352_У.НовыйШаблон")=НовыйШаблон:
       НовыйШаблон=GetVariableI("ДОКУМЕНТЫ.БАНК.ВЗНОС_ПЕЧАТЬ_3352_У.НовыйШаблон");
    fi;
   else
    Раб.Настр_Печать.Prn("","","ТББ.ДОКУМЕНТЫ.КАССА.ВЗНОС_318П.000.cfg","",1);
 fi;
end;

Proc cbУлучшенПечать_OnChange(Sender: String);
 Настр(True);
 Оформление;
end;

Proc rbШаблон_OnChange(Sender: String);
 Настр(True);
end;

Proc cbПолуч_OnChange(Sender: String);
 Настр(True);
 if fПолуч:
    РеквП=Рекв;
    БанкП=Банк;
 fi;
end;

Func S11_OnInsert(SectName: String): Logical;
 Return not РПО_Проводить;
end;

Func S11_OnDelete(SectName: String; Iter: Integer): Logical;
 Return not РПО_Проводить;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc onOpen(Create:L);
 Раб.Настр_Печать.Cfg("","ТББ.ДОКУМЕНТЫ.КАССА.ВЗНОС_318П.000.cfg");
 FlagInit=True;
end;

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

Proc OnRead;
 if Дата<1.11.2014 and not НоваяЗапись:
    OpenBlank("ДОКУМЕНТЫ.БАНК.ВЗНОС",ModalMode,Current);
    Close;
 fi;
 Настр(False);
 FlagEdit=False;
 if НоваяЗапись:
    if Рекв=Nil:
       Дата=ToDay;
       Рекв=Раб.Бюджет2005.НашРекв;
       Банк=Раб.Бюджет2005.БанкСчет(Рекв,False);
       if fПолуч:
          РеквП=Рекв;
          БанкП=Банк;
       fi;
    fi;
    Номер=Раб.Обл.СледСУчетомГода(SelfCrd,"Номер","Дата");
    НомерБум=Str(Номер);
    РПО_Проводить=False;
    if Раб.Бюджет2005.Сетевая: EditorApply; fi;
 fi;
 НеПустаяТаблица;
 if not FlagInit: Оформление; fi;
 СоздатьПропись;
end;

Func OnVerify: Logical;
 FlagEdit=False;
 Return True;
end;
--Обработчики событий шаблона -----
--

Конец
