-- Шаблон создан мастером бланков
-- 20.10.2003 18:24:23
--
БланкСШаблоном "Расход денежных документов (бланков строгой отчетности)", Редактор РПО_ДенДок_Расход;

cbПроводить: Object;

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

var НаимПодр_:S=if(Name_A(ПризнПодр)="",ПризнПодр,Name_A(ПризнПодр));
var ОбщПризн_:S=ОбщПризн;

var A:S=if(Проводить,"","+");
var D:S=if(Проводить,"","-");
var пп[]:i=$;
var ДенДокВид_Номинал_[]:S=Str(Расход[$].ДенДок_Вид.Номинал,Расход[$].ДенДок_Вид.Точ)+" "+Расход[$].ДенДок_Вид.ЕдИзм;
var FlagКол_[]:S=if(Расход[$].FlagКол=False,"№№","Кол");
var Номер_Н[]:N=Round(Расход[$].НомерБум_Н);
var Номер_К[]:N=Round(Расход[$].НомерБум_К);
var Кол_[]:S=Str(Расход[$].КолДок*Расход[$].ДенДок_Вид.Номинал,Расход[$].ДенДок_Вид.Точ)+" "+Расход[$].ДенДок_Вид.ЕдИзм;
var Сумма_[]:N=Расход[$].Цена*Расход[$].КолДок;

var Призн_[]:S=Расход[$].Призн;
var ПризнДеб_[]:S=Расход[$].ПризнДеб;
var ПризнКре_[]:S=Расход[$].ПризнКре;

var МаскаСчДенДок:S="*.?.201.35.610|ЗАБ.03!|ЗАБ.08!";
var ИсклПризн:S="ДенДок.*";

var SelfCrd:S="РПО_ДенДок_Расход";
var SelfBln:S="ДОКУМЕНТЫ.ДЕНДОК.РАСХОД";

var Buf[]:S;

S1: Section;
S2: Section;

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

var NumSplitVoc:I=3;

var hПризн:S;
--
--Процедуры и функции ------------- 
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..2 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 or BgColor=coLime:
          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,c,r,cc,rr,n:i;
var Obj: Object;
 for s=1..2 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); 
             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;
      od;
     od;
  fi;
 od;
end;
                          
Func IsInteger (Value:S):L;
var n:i;
var S:S;
 for n=1..Length(Value) do
  S=SubStr(Value,n,1);
  if S<"0" or S>"9": ^False; fi;
 od;
 ^True;
end;

Func IntToStr (Value:I; R:I):S;
var tmp:S;
 tmp=Str(Value);
 tmp=RepStr("0",R-Length(tmp))+tmp;
 ^tmp;
end;

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

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

Func ПроверитьСерии:L;
var Iter1,Iter2:i;
var Flag1,Flag2:L;
 for Iter1=1..Расход do
  for Iter2=Iter1+1..Расход do
   if Расход[Iter1].СерияБум=Расход[Iter2].СерияБум and 
      Расход[Iter1].ДенДокВид_Призн=Расход[Iter2].ДенДокВид_Призн and
      Расход[Iter1].FlagКол=False and Расход[Iter2].FlagКол=False:
      if (Round(Расход[Iter2].НомерБум_Н)>=Round(Расход[Iter1].НомерБум_Н) and Round(Расход[Iter2].НомерБум_К)<=Round(Расход[Iter1].НомерБум_К))or
         (Round(Расход[Iter2].НомерБум_Н)=Round(Расход[Iter1].НомерБум_К) or  Round(Расход[Iter2].НомерБум_К)=Round(Расход[Iter1].НомерБум_Н)):
         Message("Номера одной серии не могут пересекаться"+Chr(13)+Расход[Iter1].СерияБум+" №"+Расход[Iter1].НомерБум_Н+"-"+Расход[Iter1].НомерБум_К+" = "+Расход[Iter2].СерияБум+" №"+Расход[Iter2].НомерБум_Н+"-"+Расход[Iter2].НомерБум_К);
         Template.Field="НомерБум_Н";
         Template.Frame=Iter1;
         ^False;
      fi;
   fi;
  od;
 od;
 ^True;
end;

Func Проверить:L;
var Iter:i;
 if Дата=1.1.100: Message("Введите дату",mtError); Template.Field="Дата"; fi;
 if СчДеб="": Message("Введите счет дебета",mtError); Template.Field="СчДеб"; ^False; fi;
 if СчКре="": Message("Введите счет кредита",mtError); Template.Field="СчКре"; ^False; fi;
 if Correspond(СчДеб,СчКре)=False: Message("Счета "+СчДеб+"/"+СчКре+" не могут корреспондировать",mtError); Template.Field="СчДеб"; ^False; fi;
 УдалитьПустыеСтроки;
 НеПустаяТаблица;
 Раб.Бюджет.ПроверитьПризнакиНачать;
 for Iter=1..Расход do
  if Расход[Iter].ДенДокВид_Призн="": Message("Введите признак документа",mtError); Template.Field="ДенДокВид_Призн"; Template.Frame=Iter; ^False; fi;
  if not Расход[Iter].FlagКол:
     if Расход[Iter].НомерБум_Н="": Message("Введите начальный номер",mtError); Template.Field="НомерБум_Н"; Template.Frame=Iter; ^False; fi;
     if Расход[Iter].НомерБум_К="": Message("Введите конечный номер",mtError); Template.Field="НомерБум_К"; Template.Frame=Iter; ^False; fi;
     if not Length(Расход[Iter].НомерБум_Н)=Length(Расход[Iter].НомерБум_К): Message("Разрядность начального и конечного номера должны совпадать",mtError); Template.Field="НомерБум_Н"; Template.Frame=Iter; ^False; fi;
     Расход[Iter].КолДок=Int(Номер_К[Iter]-Номер_Н[Iter]+1);
  fi;
  if Round(Расход[Iter].НомерБум_Н)>Round(Расход[Iter].НомерБум_К) and not Расход[Iter].FlagКол: Message("Начальный номер превышает конечный",mtError); Template.Field="НомерБум_К"; Template.Frame=Iter; ^False; fi;
  if Расход[Iter].КолДок=0: Message("Введите количество документов",mtError); Template.Field="КолДок"; Template.Frame=Iter; ^False; fi;
  if Расход[Iter].ПризнДеб="" and Расход[Iter].ПризнКре="":
     if not Раб.Бюджет.ПроверитьПризнакиОбязательные(СчДеб,СчКре,Trim(ПризнПодр+" "+ОбщПризн+" "+Расход[Iter].ДенДокВид_Призн+" "+Расход[Iter].Призн),""): Template.Field="Призн_"; Template.Frame=Iter; ^False; fi;
     if not Раб.Бюджет.ПроверитьПризнакиСвязанные(СчДеб,СчКре,Trim(ПризнПодр+" "+ОбщПризн+" "+Расход[Iter].ДенДокВид_Призн+" "+Расход[Iter].Призн),""): Template.Field="Призн_"; Template.Frame=Iter; ^False; fi;
    else
     if not Раб.Бюджет.ПроверитьПризнакиОбязательные(СчДеб,"",Trim(ПризнПодр+" "+ОбщПризн+" "+Расход[Iter].ДенДокВид_Призн+" "+Расход[Iter].Призн+" "+Расход[Iter].ПризнДеб),""): Template.Field="ПризнДеб_"; Template.Frame=Iter; ^False; fi;
     if not Раб.Бюджет.ПроверитьПризнакиОбязательные("",СчКре,Trim(ПризнПодр+" "+ОбщПризн+" "+Расход[Iter].ДенДокВид_Призн+" "+Расход[Iter].Призн+" "+Расход[Iter].ПризнКре),""): Template.Field="ПризнКре_"; Template.Frame=Iter; ^False; fi;
     if not Раб.Бюджет.ПроверитьПризнакиСвязанные(СчДеб,"",Trim(ПризнПодр+" "+ОбщПризн+" "+Расход[Iter].ДенДокВид_Призн+" "+Расход[Iter].Призн+" "+Расход[Iter].ПризнДеб),""): Template.Field="ПризнДеб_"; Template.Frame=Iter; ^False; fi;
     if not Раб.Бюджет.ПроверитьПризнакиСвязанные("",СчКре,Trim(ПризнПодр+" "+ОбщПризн+" "+Расход[Iter].ДенДокВид_Призн+" "+Расход[Iter].Призн+" "+Расход[Iter].ПризнКре),""): Template.Field="ПризнКре_"; Template.Frame=Iter; ^False; fi;
  fi;
-- if Match(СчКре,"ЗАБ.03!"): Расход[Iter].Цена=1; fi;
 od;
 if ПроверитьСерии=False: ^False; fi;
 ^True;
end;

Proc Ф_Инфо(S: String);
var Rec: Record;
var s1,s2:s;
 Rec=SignToRecord(S);
 if Rec=nil: ФИО=""; Exit; fi;
 s1=GetCardFieldS("Сотрудники",Rec,"ФОтКого",Дата);
 s2=GetCardFieldS("Сотрудники",Rec,"ИОтКого",Дата);
 if S1="" or S2="": ФИО=GetCardFieldS("Сотрудники",Rec,"ФИОТ",Дата); else ФИО=s1+" "+s2; fi;
end;

Proc ОбработатьНомер (vНомерБум:S);
var tmp:i;
 tmp=Int(vНомерБум);
 if tmp=0:
    if Дата=1.1.100:
       tmp=РАБ.ОБЛ.СледСУчетомГодаФ(SelfCrd,"Номер","Дата","UKey<>"+RecordToString(Current));
      else
       tmp=РАБ.ОБЛ.СледСУчетомДатыФ(SelfCrd,"Номер","Дата",Дата,"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;

Func ВыборРасхода:S;
var n:i;
var tmp:S;
 ClearVariable(Buf);
 Buf[1]="Расход";
 Buf[2]="Расход по контрагенту";
 Buf[3]="Расход по МОЛу";
 Buf[4]="Расход по сотруднику";
 Buf[5]="Расход по централизованному снабжению";
 Buf[6]="Выбор из плана счетов";
 n=Alternate("Выберите источник Расхода",Buf,-1,1,12);
 if n=1: tmp="ЗАБАЛАНС";
   |n=2: tmp="ЗАБ.К";
   |n=3: tmp="ЗАБ.МОЛ";
   |n=4: tmp="ЗАБ.Ф";
   |n=5: tmp="ЗАБ.ПБС";
   |n=6: tmp=PickCorrAccount(СчДеб,False);
   |True:tmp="";
 fi;
 ^tmp;
end;

Proc ПолучитьДопАн(СчДенДок:S; СчКорр:S);
var Справ,ПризнКБК,ТипКБК:S;
var Iter:I;
 if СчДенДок="" or СчКорр="": Exit; fi;
 Справ=Раб.Бюджет2005.СписокСправ(СчДенДок+"|"+СчКорр,0,"");
 if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|","ФКР.*|КД.*","|")="":
    ТипКБК=Раб.Бюджет2005.ТипКБКСчета(СчКорр);
    ПризнКБК=Раб.Бюджет2005.ВзятьКодСчета(СчКорр,ТипКБК,"КБК",False);
    if not ПризнКБК="" and (ТипКБК="ФКР" or ТипКБК="КД"):
       ПризнКБК=ТипКБК+"."+ПризнКБК;
       ОбщПризн=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(ОбщПризн," ","ФКР.*|КД.*","|");
       for Iter=1..Расход do
        Расход[Iter].Призн=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расход[Iter].Призн," ","ФКР.*|КД.*","|");
        Расход[Iter].ПризнДеб=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расход[Iter].ПризнДеб," ","ФКР.*|КД.*","|");
        Расход[Iter].ПризнКре=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расход[Iter].ПризнКре," ","ФКР.*|КД.*","|");
       od;
       ОбщПризн=Раб.Бюджет2005.Объединить(ОбщПризн,ПризнКБК," ");
    fi;
 fi;
 if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|","КОСГУ.*","")="":
    ПризнКБК=Раб.КБК.ВзятьЭКСчета(СчКорр,"");
    if not ПризнКБК="":
       ПризнКБК="КОСГУ."+ПризнКБК;
       for Iter=1..Расход do
        Расход[Iter].Призн=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расход[Iter].Призн," ","КОСГУ.*","");
        Расход[Iter].ПризнДеб=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расход[Iter].ПризнДеб," ","КОСГУ.*","");
        Расход[Iter].ПризнКре=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расход[Iter].ПризнКре," ","КОСГУ.*","");
       od;
       ОбщПризн=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(ОбщПризн," ","КОСГУ.*","");
       ОбщПризн=Раб.Бюджет2005.Объединить(ОбщПризн,ПризнКБК," ");
    fi;
 fi;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func Рекв_onEnter(FieldName: String; Iter: Integer): logical;
var Rec:Record;
 Rec=OpenCardFile("Контрагент", "Наше", Рекв, crdRecordOnly);
 if Rec=NIL: ^False; fi;
 Рекв=Rec;
 ФИОБух=Рекв.ФИОБух;
 ДолжнБух=Рекв.ДолжнБух;
 ФИОРук=Рекв.ФИОРук;
 ДолжнРук=Рекв.ДолжнРук;
 ФИОКасс=Рекв.ФИОКАСС;
 ^False;
end;

Func НаимПодр_onEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=AnaElection("П.*");
 if tmp="": ^False; fi;
 ПризнПодр=tmp;
 ОбщПризн=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(ОбщПризн," ","П.*","");
 for Iter=1..Расход do
  Расход[Iter].Призн=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расход[Iter].Призн," ","П.*","");
  Расход[Iter].ПризнДеб=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расход[Iter].ПризнДеб," ","П.*","");
  Расход[Iter].ПризнКре=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расход[Iter].ПризнКре," ","П.*","");
 od;
 ^False;
end;

Proc НаимПодр_OnExit(FieldName: String; Iter: Integer);
 ПризнПодр="";
end;

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

Func Дата_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp,prevДата:d;
 Template.HideEditor(False);
 tmp=Calendar;
 if tmp=1.1.100: ^Cur; fi;
 prevДата=Дата;
 Дата=tmp;
 ОбработатьДату(prevДата,Дата);
 ^Cur;
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,"Номер","Дата","UKey<>"+RecordToString(Current)));
   else
    НомерБум=Str(РАБ.ОБЛ.СледСУчетомДатыФ(SelfCrd,"Номер","Дата",Дата,"UKey<>"+RecordToString(Current)));
 fi;
 ОбработатьНомер(НомерБум);
 ^Cur;
end;

Func СчДеб_onEnter (Field:S; Iter:I):L;
var tmp:S;
 if СчКре="": Message("Введите счет кредита",mtError); Template.Field="СчКре"; ^False; fi;
-- if Match(СчКре,"ЗАБ.*"):
--    tmp=ВыборРасхода;
--   else
--    tmp=PickCorrAccount(СчКре,True,СчДеб);
-- fi;
 tmp=PickCorrAccount(СчКре,True,СчДеб);
 СчДеб=tmp;
 tmp=Раб.Бюджет.НаборПризнаков(СчДеб,СчКре,"ДенДок.*|П.*");
 ОбщПризн=Раб.Бюджет.МухиОтКотлет(ОбщПризн,tmp);
 for Iter=1..Расход do
  Расход[Iter].Призн=Раб.Бюджет.МухиОтКотлет(Расход[Iter].Призн,tmp);
 od;
 ПолучитьДопАн(СчКре,СчДеб);
 ^False;
end;

Func СчКре_onEnter (Field:S; Iter:I):L;
var tmp:S;
 tmp=AccountElection(МаскаСчДенДок,False,СчКре);
 if tmp="": ^False; fi;
 СчКре=tmp;
 if Correspond(СчДеб,СчКре)=False: СчДеб=""; fi;
 if not СчКре="":
    tmp=Раб.Бюджет.НаборПризнаков(СчДеб,СчКре,"ДенДок.*|П.*");
    ОбщПризн=Раб.Бюджет.МухиОтКотлет(ОбщПризн,tmp);
    for Iter=1..Расход do
     Расход[Iter].Призн=Раб.Бюджет.МухиОтКотлет(Расход[Iter].Призн,tmp);
     Расход[Iter].ПризнДеб=Раб.Бюджет.МухиОтКотлет(Расход[Iter].ПризнДеб,tmp);
     Расход[Iter].ПризнКре=Раб.Бюджет.МухиОтКотлет(Расход[Iter].ПризнКре,tmp);
    od;
 fi;
 if Match(СчКре,"ЗАБ.03!"):
    for Iter=1..Расход do
     Расход[Iter].Цена=1;
    od;
 fi;
 ПолучитьДопАн(СчКре,СчДеб);
 ^False;
end;

Func ОбщПризн_onEnter (Field:S; Iter:I):L;
var tmp:S;
 if СчДеб="": Message("Введите счет дебета",mtError); Template.Field="СчДеб"; ^False; fi;
 if СчКре="": Message("Введите счет кредита",mtError); Template.Field="СчКре"; ^False; fi;
 tmp=Раб.Бюджет.НаборПризнаков(СчДеб,СчКре,"ДенДок.*|П.*");
 if tmp="": Message("Дополнительные аналитические признаки не требуются");  ^False; fi;
 tmp=AnaElection(tmp);
 if tmp="": ^False; fi;
 ОбщПризн=Раб.Бюджет.ДобавитьПризнак(ОбщПризн,tmp);
 for Iter=1..Расход do
  Расход[Iter].Призн=Раб.Бюджет.УдалитьПризнак(Расход[Iter].Призн,tmp);
  Расход[Iter].ПризнДеб=Раб.Бюджет.УдалитьПризнак(Расход[Iter].ПризнДеб,tmp);
  Расход[Iter].ПризнКре=Раб.Бюджет.УдалитьПризнак(Расход[Iter].ПризнКре,tmp);
 od;
 if Match(tmp,"Ф.*") or Match(tmp,"МОЛ.*"): Ф_Инфо(tmp);
   |Match(tmp,"К.*") or Match(tmp,"ПБС.*"): ФИО=Name_A(tmp);
 fi;
 ^False;
end;

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

Func A_onEnter(FieldName: String; Iter: Integer): logical;
 if Проводить: ^False; fi;
 InsertFrame(Расход,Iter+1);
 Расход[Iter+1].Призн=Расход[Iter].Призн;
 ^False;
end;

Func D_onEnter(FieldName: String; Iter: Integer): logical;
 if Проводить: ^False; fi;
 if Расход>1: DeleteFrame(Расход,Iter); else DeleteFrame(Расход,Iter); InsertFrame(Расход,Iter); fi;
 ^False;
end;

Func FlagКол_onEnter (Field:S; Iter:I):L;
 if Расход[Iter].FlagКол: 
    Расход[Iter].FlagКол=False; 
    Расход[Iter].КолДок=0;
   else 
    Расход[Iter].FlagКол=True; 
    Расход[Iter].СерияБум="";
    Расход[Iter].НомерБум_Н="";
    Расход[Iter].НомерБум_К="";
    Расход[Iter].КолДок=0;
 fi;
 ^False;
end;

Func ДенДокВидПризн_onEnter (Field:S; Iter:I):L;
var tmp:S;
 tmp=AnaElection("ДенДок.*");
 if tmp="": ^False; fi;
 Расход[Iter].ДенДокВид_Призн=tmp;
 tmp=Name_A(tmp);
 if tmp="" or tmp=" ": tmp=Расход[Iter].ДенДокВид_Призн; fi;
 Расход[Iter].ДенДокВид_Наим=tmp;
 Расход[Iter].ДенДок_Вид=SignToRecord(Расход[Iter].ДенДокВид_Призн);
 ^False;
end;

Func Цена_OnEnter(FieldName: String; Iter: Integer): logical;
-- if Match(СчКре,"ЗАБ.03!"): РАСХОД[Iter].Цена=1; Message("Условная цена бланков строгой отчетности 1 руб."); ^False; fi;
 Return True;
end;

Proc Цена_OnExit(FieldName: String; Iter: Integer);
-- if Match(СчКре,"ЗАБ.03!"): РАСХОД[Iter].Цена=1; Message("Условная цена бланков строгой отчетности 1 руб."); fi;
end;

Func СерияБум_onEnter (Field:S; Iter:I):L;
 if Расход[Iter].FlagКол=True: Message("Для данного режима ввода задавать серию не требуется",mtWarning); Template.Field="FlagКол_"; Template.Frame=Iter; ^False; fi;
 ^True;
end;

Proc СерияБум_OnExit(FieldName: String; Iter: Integer);
 Расход[Iter].СерияБум=Up(Расход[Iter].СерияБум);
end;

Func РасхНомерБум_onEnter(FieldName: String; Iter: Integer): logical;
 if Расход[Iter].FlagКол=True: Message("Для данного режима ввода задавать номер не требуется",mtWarning); Template.Field="FlagКол_"; Template.Frame=Iter; ^False; fi;
 Return True;
end;

Func РасхНомерБум_onVerify(FieldName: String; Iter: Integer; Value: S): Logical;
 if IsInteger(Value)=False: Message("Недопустимый формат числа",mtError); ^False; fi;
 Return True;
end;

Proc РасхНомерБум_onExit(FieldName: String; Iter: Integer);
 if not Расход[Iter].FlagКол:
    if not Расход[Iter].НомерБум_Н="" and not Расход[Iter].НомерБум_К="":
       Расход[Iter].КолДок=Int(Номер_К[Iter]-Номер_Н[Iter]+1);
      else
       Расход[Iter].КолДок=0;
    fi;
 fi;
end;

Func КолДок_onEnter (Field:S; Iter:I):L;
 if Расход[Iter].FlagКол=False: Message("Для данного режима ввода количество документов вводить не требуется",mtWarning); Template.Field="FlagКол_"; Template.Frame=Iter; ^False; fi;
 ^True;
end;

Func Призн_onEnter(Field:S; Iter:I):L;
var tmp,Voc:s;
 НеПустаяТаблица;
 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 Field="ПризнДеб_": tmp=СчДеб; if WordsCount(Расход[Iter].ПризнДеб," ")>=NumSplitVoc: Message("Превышено максимальное количество справочников ("+Str(NumSplitVoc)+") для аналитики по дебету",mtError); ^False; fi;
   |Field="ПризнКре_": tmp=СчКре; if WordsCount(Расход[Iter].ПризнКре," ")>=NumSplitVoc: Message("Превышено максимальное количество справочников ("+Str(NumSplitVoc)+") для аналитики по кредиту",mtError); ^False; fi;
   |True: tmp=СчДеб+"|"+СчКре;
 fi;
 tmp=Раб.Бюджет2005.СписокСправ(tmp,0,ИсклПризн+if(Field="Призн_","|П.*",""));
 if tmp="": Message("Аналитические признаки не требуются"); ^False; fi;
 tmp=AnaElection(tmp+"|(*&~*.*)",False,False,hПризн);
 if not tmp="":
    Voc=SubStr(tmp,1,Pos(".",tmp));
    if Voc="": Voc=tmp; else Voc=Voc+"*"; fi;
    if Field="Призн_":
       Расход[Iter].Призн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расход[Iter].Призн," ",tmp,Voc,"");
       Расход[Iter].ПризнДеб=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расход[Iter].ПризнДеб," ",Voc,"");
       Расход[Iter].ПризнКре=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расход[Iter].ПризнКре," ",Voc,"");
      |True:
       if Field="ПризнДеб_": Расход[Iter].ПризнДеб=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расход[Iter].ПризнДеб," ",tmp,Voc,"");
         |Field="ПризнКре_": Расход[Iter].ПризнКре=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расход[Iter].ПризнКре," ",tmp,Voc,"");
       fi;
       Расход[Iter].Призн=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расход[Iter].Призн," ",Voc,"");
    fi;
    ОбщПризн=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(ОбщПризн," ",Voc,"");
    if Voc="П.*": ПризнПодр=""; fi;
    if ФИО="" and (Field="Призн_" or Field="ПризнКре_"):
       if Voc="Ф.*" or Voc="МОЛ.*": Ф_Инфо(tmp);
         |Voc="К.*" or Voc="ПБС.*": ФИО=Name_A(tmp);
       fi;
    fi;
 fi;
end;

Proc Призн_OnExit(Field:S; Iter:I);
 НеПустаяТаблица;
 Field="Расход["+Str(Iter)+"]."+SubStr(Field,1,Length(Field)-1);
 PutVariableS(Field,Раб.Бюджет2005.УдалитьСловоИзНабора_Диалог2(GetVariables(Field)," ","Name_A"));
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc cbПроводить_onChange (Obj:S);
var n:i;
 if Проводить=False:
    n=EnqOkCancel("Вы уверены что хотите исключить данный документ из обработки ?",mtWarning);
    if n=cmCancel: Проводить=True; cbПроводить.State=Проводить; Exit; fi;
 fi;
 if Проводить=True: Проводить=Проверить; cbПроводить.State=Проводить; fi;
 EditorApply;
 Оформление;
end;

Proc btnОрдер_onClick (Obj:S);
 ДОКУМЕНТЫ.ДенДок.ОрдРасх.Очистить;
 ДОКУМЕНТЫ.ДенДок.ОрдРасх.Рекв=Рекв;
 ДОКУМЕНТЫ.ДенДок.ОрдРасх.НаимОрг=Рекв.КорИмя;
 ДОКУМЕНТЫ.ДенДок.ОрдРасх.Проводить=Проводить;
 ДОКУМЕНТЫ.ДенДок.ОРДРасх.НомерБум="Ф"+НомерБум;
 ДОКУМЕНТЫ.ДенДок.ОРДРасх.Д=Дата;
 ДОКУМЕНТЫ.ДенДок.ОРДРасх.ПО=ПризнПодр;
 ДОКУМЕНТЫ.ДенДок.ОРДРасх.Счет=СчДеб;
 ДОКУМЕНТЫ.ДенДок.ОРДРасх.Призн=ОбщПризн;
 ДОКУМЕНТЫ.ДенДок.ОРДРасх.КСчет=СчКре;
 ДОКУМЕНТЫ.ДенДок.ОРДРасх.Сумма=SumOfArray(Сумма_);
 ДОКУМЕНТЫ.ДенДок.ОРДРасх.Цель="";
 ДОКУМЕНТЫ.ДенДок.ОРДРасх.ФИО=ФИО;
 ДОКУМЕНТЫ.ДенДок.ОРДРасх.Осн=Осн;
 ДОКУМЕНТЫ.ДенДок.ОРДРасх.Прил=Прил;
 ДОКУМЕНТЫ.ДенДок.ОРДРасх.Паспорт=Паспорт;
 ДОКУМЕНТЫ.ДенДок.ОрдРасх.ДолжнРук=ДолжнРук;
 ДОКУМЕНТЫ.ДенДок.ОрдРасх.ДолжнБух=ДолжнБух;
 ДОКУМЕНТЫ.ДенДок.ОрдРасх.ФиоРук=ФиоРук;
 ДОКУМЕНТЫ.ДенДок.ОрдРасх.ФиоБух=ФиоБух;
 ДОКУМЕНТЫ.ДенДок.ОрдРасх.ФиоКасс=ФиоКасс;
 OpenBlank("ДОКУМЕНТЫ.ДенДок.ОрдРасх",True);
 if Проводить=False:
    if not Рекв=ДОКУМЕНТЫ.ДенДок.ОрдРасх.Рекв: Рекв=ДОКУМЕНТЫ.ДенДок.ОрдРасх.Рекв; fi;
    if not ФИО=ДОКУМЕНТЫ.ДенДок.ОрдРасх.ФИО: ФИО=ДОКУМЕНТЫ.ДенДок.ОрдРасх.ФИО; fi;
    if not Прил=ДОКУМЕНТЫ.ДенДок.ОрдРасх.Прил: Прил=ДОКУМЕНТЫ.ДенДок.ОрдРасх.Прил; fi;
    if not Паспорт=ДОКУМЕНТЫ.ДенДок.ОрдРасх.Паспорт: Паспорт=ДОКУМЕНТЫ.ДенДок.ОрдРасх.Паспорт; fi;
    if not ДолжнРук=ДОКУМЕНТЫ.ДенДок.ОрдРасх.ДолжнРук: ДолжнРук=ДОКУМЕНТЫ.ДенДок.ОрдРасх.ДолжнРук; fi;
    if not ДолжнБух=ДОКУМЕНТЫ.ДенДок.ОрдРасх.ДолжнБух: ДолжнБух=ДОКУМЕНТЫ.ДенДок.ОрдРасх.ДолжнБух; fi;
    if not ФиоРук=ДОКУМЕНТЫ.ДенДок.ОрдРасх.ФиоРук: ФиоРук=ДОКУМЕНТЫ.ДенДок.ОрдРасх.ФиоРук; fi;
    if not ФиоБух=ДОКУМЕНТЫ.ДенДок.ОрдРасх.ФиоБух: ФиоБух=ДОКУМЕНТЫ.ДенДок.ОрдРасх.ФиоБух; fi;
    if not ФиоКасс=ДОКУМЕНТЫ.ДенДок.ОрдРасх.ФиоКасс: ФиоКасс=ДОКУМЕНТЫ.ДенДок.ОрдРасх.ФиоКасс; fi;
 fi;
 ДОКУМЕНТЫ.ДенДок.ОрдРасх.Очистить;
end;

Proc btnАкт_OnClick(Sender: String);
 if not Проводить: Message("Сначала необходимо провести документ",mtError); Template.Object="cbПроводить"; Exit; fi;
 if BlankExist("ОТЧЕТЫ.РЕГИСТРЫ.АКТ_0504816"):
    PutVariableR("ОТЧЕТЫ.РЕГИСТРЫ.АКТ_0504816.Run",Current);
    OpenBlank("ОТЧЕТЫ.РЕГИСТРЫ.АКТ_0504816",True);
   else
    Message("Акт не найден",mtError);
 fi;
end;

Proc btnИзв_OnClick(Sender: String);
var OWA,nr,OA,n,n2,Iter,ФорматНомер:I;
var ОбщПБС,ПБС,ПБС_Д,ПБС_К,tmp,Разделит:S;
var Rec: Record;
 RefreshAna;
 if Рекв=nil: Message("Выберите учреждение",mtError); Template.Field="Рекв.КорИмя"; Exit; fi;
 if Дата=1.1.100: Message("Выберите дату",mtError); Template.Field="Дату"; Exit; fi;
 ПБС=""; ПБС_Д=""; ПБС_К="";
 ОбщПБС=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(ОбщПризн," ","ПБС.*","");
 if ОбщПБС="":
    for Iter=1..Расход do
     tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Расход[Iter].Призн," ","ПБС.*","");
     if not tmp="":
        if ПБС="": ПБС=tmp; fi;
        if not ПБС=tmp: Message("В документе указаны несколько признаков ПБС, формирование извещения невозможно",mtError); Exit; fi;
       else
        tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Расход[Iter].ПризнДеб," ","ПБС.*","");
        if not tmp="":
           if ПБС_Д="": ПБС_Д=tmp; fi;
           if not ПБС_Д=tmp: Message("В документе указаны несколько признаков ПБС (по дебету), формирование извещения невозможно",mtError); Exit; fi;
           tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Расход[Iter].ПризнКре," ","ПБС.*","");
           if not tmp="":
              if ПБС_К="": ПБС_К=tmp; fi;
              if not ПБС_К=tmp: Message("В документе указаны несколько признаков ПБС (по кредиту), формирование извещения невозможно",mtError); Exit; fi;
           fi;
        fi;
     fi;
    od;
 fi;
 if ОбщПБС="" and ПБС="" and ПБС_Д="" and ПБС_К="": Message("В документе не указан ни один из признаков справочника ПБС, формирование извещения невозможно",mtError); Exit; fi;
 if not ОбщПБС="" and SignToRecord(ОбщПБС)=nil: Message("Признак "+ОбщПБС+" должен быть картотечным, формирование извещения невозможно",mtError); Exit; fi;
 if not ПБС="" and SignToRecord(ПБС)=nil: Message("Признак "+ПБС+" должен быть картотечным, формирование извещения невозможно",mtError); Exit; fi;
 if not ПБС_Д="" and SignToRecord(ПБС_Д)=nil: Message("Признак "+ПБС_Д+" должен быть картотечным, формирование извещения невозможно",mtError); Exit; fi;
 if not ПБС_К="" and SignToRecord(ПБС_К)=nil: Message("Признак "+ПБС_К+" должен быть картотечным, формирование извещения невозможно",mtError); Exit; fi;
 EditorApply;
 if Раб.Настр.Начать("ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ИСХ_69Н",0,0,"",GetGUID):
    ФорматНомер=Int(Раб.Настр.ВзятьЗначение("ФорматНомер"));
    Разделит=Раб.Настр.ВзятьЗначение("storeРазделит");
   else
    ФорматНомер=0;
    Разделит="";
 fi;
 OWA=OpenWorkArea("РПО_ИЗВЕЩЕНИЯ_ИСХ","","CRD='"+SelfCrd+"' and RECCRD="+Str(RecordToInteger(Current)));
 Try
  nr=Records(OWA);
  if not nr=0:
     nr=-1;
     n=1;
     if not GetFieldL(OWA,n,"Проводить"):
        if EnqOkCancel("Извещение к данному расходу уже существует^MОбновить данные ?",mtWarning)=cmOk:
           nr=1;
        fi;
     fi;
     Rec=GetRecordKey(OWA,n);
  fi;
  if nr=1 or nr=0:
     BeginChanging(OWA);
     Try
      if nr=0:
         n=InsertRecord(OWA);
         if ФорматНомер=0:
            Iter=РАБ.ОБЛ.СледСУчетомДаты("РПО_ИЗВЕЩЕНИЯ_ИСХ","Номер","ДатаИзв",Дата);
            n=PutFieldI(OWA,n,"НОМЕР",Iter);
            n=PutFieldS(OWA,n,"НОМЕРБУМ",Str(Iter));
           else
            tmp=GetVariableS("ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ИСХ_69Н.storeПрефикс");
            n=PutFieldS(OWA,n,"ПРЕФИКС",tmp);
            if Разделит="": Разделит=GetVariableS("ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ИСХ_69Н.storeРазделит"); fi;
            n=PutFieldS(OWA,n,"РАЗДЕЛИТ",Разделит);
            Iter=РАБ.ОБЛ.СледСУчетомДатыФ("РПО_ИЗВЕЩЕНИЯ_ИСХ","Номер","ДатаИзв",Дата,"Префикс='"+tmp+"'");
            n=PutFieldI(OWA,n,"НОМЕР",Iter);
            n=PutFieldS(OWA,n,"НОМЕРП",Str(Iter));
            n=PutFieldS(OWA,n,"НОМЕРБУМ",tmp+Разделит+Str(Iter));
         fi;
         n=PutFieldD(OWA,n,"ДАТАИЗВ",Дата);
         n=PutFieldD(OWA,n,"ДАТАОРД",Дата);
      fi;
      if ПБС_К="":
         n=PutFieldR(OWA,n,"ОТПРАВРЕКВ",Рекв);
         n=PutFieldS(OWA,n,"ОТПРАВПРИЗНАК",CardFileRecSign("Контрагент","Признак","ПБС",Рекв,""));
        else
         n=PutFieldR(OWA,n,"ОТПРАВРЕКВ",SignToRecord(ПБС_К,False));
         n=PutFieldS(OWA,n,"ОТПРАВПРИЗНАК",ПБС_К);
      fi;
      tmp="";
      if not ОбщПБС="": tmp=ОбщПБС;
        |not    ПБС="": tmp=ПБС;
        |not  ПБС_Д="": tmp=ПБС_Д;
      fi;
      n=PutFieldR(OWA,n,"ПОЛУЧРЕКВ",SignToRecord(tmp,False));
      n=PutFieldS(OWA,n,"ПОЛУЧПРИЗНАК",tmp);
      --
      OA=OpenArray(OWA,n,"ПОЗИЦИИ","");
      if not nr=0: DeleteAllRecords(OA); fi;
      for Iter=1..Расход do
       n2=InsertRecord(OA);
       n2=PutFieldS(OA,n2,"СОДЕРЖ",Расход[Iter].ДенДокВид_Наим+", "+ДенДокВид_Номинал_[Iter]+" x "+Str(Расход[Iter].КолДок)+if(Расход[Iter].FlagКол,""," ("+Расход[Iter].СерияБум+" №"+Расход[Iter].НомерБум_Н+" - "+Расход[Iter].НомерБум_К+")"));
       n2=PutFieldS(OA,n2,"СЧДЕБ",СчДеб);
       n2=PutFieldS(OA,n2,"СЧКРЕ",СчКре);
       tmp=Trim(ПризнПодр+" "+ОбщПризн);
       tmp=Trim(tmp+" "+Расход[Iter].Призн);
       tmp=Trim(tmp+" "+Расход[Iter].ДенДокВид_Призн);
       tmp=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(tmp," ","ПБС.*","");
       n2=PutFieldS(OA,n2,"ПРИЗН",tmp);
       n2=PutFieldS(OA,n2,"ПРИЗНДЕБ",Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расход[Iter].ПризнДеб," ","ПБС.*",""));
       n2=PutFieldS(OA,n2,"ПРИЗНКРЕ",Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расход[Iter].ПризнКре," ","ПБС.*",""));
       n2=PutFieldN(OA,n2,"СУМ",Расход[Iter].Сумма);
       n2=PutFieldS(OA,n2,"GUID",GetGUID);
      od;
      --
      if nr=0:
         n=PutFieldS(OWA,n,"ОТПРАВФИОРУК",Рекв.ФИОРук);
         n=PutFieldS(OWA,n,"ОТПРАВФИОБУХ",Рекв.ФИОБух);
         n=PutFieldD(OWA,n,"ДАТАОТПРАВ",Дата);
         n=PutFieldS(OWA,n,"ИСПОЛНИТЕЛЬ",GetVariableS("ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ИСХ_69Н.hИсполнитель"));
         n=PutFieldS(OWA,n,"ВАЛЮТА",BaseCurrency);
        else
         OA=OpenArray(OWA,n,"Обороты","");
         DeleteAllRecords(OA);
      fi;
      n=PutFieldN(OWA,n,"СУММА",СумРасход);
      n=PutFieldI(OWA,n,"RECCRD",RecordToInteger(Current));
      n=PutFieldS(OWA,n,"CRD",SelfCrd);
      n=PutFieldS(OWA,n,"BLNCRD",SelfBln);
      n=PutFieldL(OWA,n,"is69Н",True);
      Rec=GetRecordKey(OWA,n);
      EndChanging(OWA);
     Except
      CancelChanging(OWA);
      Raise;
     end;
     PutVariableL("ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ИСХ_69Н.RefreshTurnOnRead",True);
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 OpenBlank("ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ИСХ_69Н",True,Rec);
end;

Proc btnМ11_OnClick(Sender: String);
var bln:s;
var Iter:I;
var Подр,tmp:S;
 ClearTrace(True);
 bln="ДОКУМЕНТЫ.ДЕНДОК.ОКУД_0315006";
 if not BlankExist(bln): Message("Требование-накладная (М-11) не найдена",mtError); Exit; fi;
 if isBlankOpen(bln): Close(bln); fi;
 ExecuteProc(bln+".Очистить");
 PutVariableS(bln+".Учр",Рекв.КорИмя);
 PutVariableS(bln+".ОКПО",Рекв.ОКПО);
 PutVariableD(bln+".ДатаДок",Дата);
 PutVariableS(bln+".ПодрОтпр",ПризнПодр);
 PutVariableS(bln+".ПодрПолуч",ПризнПодр);
 PutVariableI(bln+".Упр",Расход);
 for Iter=1..Расход do
  Подр=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Расход[Iter].ПризнДеб," ","П.*","");
  if not Подр="":
     tmp=GetVariableS(bln+".ПодрПолуч");
     if not tmp="" and not tmp=Подр: Trace("Внимание! Указано несколько подразделений получателей ("+Подр+"), в накладную будет добавлено последнее"); fi;
     PutVariableS(bln+".ПодрПолуч",Подр);
  fi;
  Подр=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Расход[Iter].ПризнКре," ","П.*","");
  if not Подр="":
     tmp=GetVariableS(bln+".ПодрОтпр");
     if not tmp="" and not tmp=Подр: Trace("Внимание! Указано несколько подразделений отправителей ("+Подр+"), в накладную будет добавлено последнее"); fi;
     PutVariableS(bln+".ПодрОтпр",Подр);
  fi;
  PutVariableS(bln+".Сч["+Str(Iter)+"]",СчКре);
  PutVariableS(bln+".Ан["+Str(Iter)+"]",SubStr(Расход[Iter].ДенДокВид_Призн,Pos(".",Расход[Iter].ДенДокВид_Призн)+1,255));
  PutVariableS(bln+".Наим["+Str(Iter)+"]",Расход[Iter].ДенДокВид_Наим);
  PutVariableS(bln+".Наим["+Str(Iter)+"]",Расход[Iter].ДенДокВид_Наим);
  PutVariableS(bln+".Номенкл["+Str(Iter)+"]",if(Расход[Iter].FlagКол,"",Расход[Iter].СерияБум+" № "+Расход[Iter].НомерБум_Н+" - "+Расход[Iter].НомерБум_К));
  PutVariableS(bln+".ЕдИзмНаим["+Str(Iter)+"]","шт");
  PutVariableN(bln+".Кол_З["+Str(Iter)+"]",Расход[Iter].КолДок);
  PutVariableN(bln+".Кол_О["+Str(Iter)+"]",Расход[Iter].КолДок);
  PutVariableN(bln+".Цена["+Str(Iter)+"]",Расход[Iter].Цена);
  PutVariableN(bln+".Сумма["+Str(Iter)+"]",Сумма_[Iter]);
 od;
 OpenBlank(bln,True);
end;

Func S2_OnInsert(SectName: String): Logical;
 Return not Проводить;
end;

Func S2_OnDelete(SectName: String; Iter: Integer): Logical;
 Return not Проводить;
end;

Proc S2_AfterDelete(SectName: String);
 НеПустаяТаблица;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 FlagInit=True;
end;

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

Proc Template_onRead;
 if НоваяЗапись:
    if Номер=0: Дата=ToDay; fi;
    Номер=РАБ.ОБЛ.СледСУчетомДаты(SelfCrd,"Номер","Дата",Дата);
    НомерБум=Str(Номер);
    РЕКВ=Раб.Бюджет2005.НашРекв;
    if not РЕКВ=nil:
       ФИОБух=Рекв.ФИОБух;
       ДолжнБух=Рекв.ДолжнБух;
       ФИОРук=Рекв.ФИОРук;
       ДолжнРук=Рекв.ДолжнРук;
       ФИОКасс=Рекв.ФИОКАСС;
    fi;
    Проводить=False;
    if Раб.Бюджет2005.Сетевая: EditorApply; fi;
 fi;
 НеПустаяТаблица;
 if not FlagInit: Оформление; fi;
end;

Func Template_onValidate:L;
var Iter:i;
 СумРасход=0;
 for Iter=1..Расход do
  if not Расход[Iter].FlagКол:
    if not Расход[Iter].НомерБум_Н="" and not Расход[Iter].НомерБум_К="":
        Расход[Iter].КолДок=Int(Номер_К[Iter]-Номер_Н[Iter]+1);
       else
        Расход[Iter].КолДок=0;
     fi;
  fi;
  Расход[Iter].Кол=Расход[Iter].КолДок*Расход[Iter].ДенДок_Вид.Номинал;
  Расход[Iter].Сумма=Расход[Iter].Цена*Расход[Iter].КолДок;
  СумРасход=СумРасход+Расход[Iter].Сумма;
 od;
 ^True;
end;
--Обработчики событий шаблона -----
--



Func По_Остаткам(out:S):S;
var t,Iter:I;
var УслСч:S;
var tmp:S;
var n,n0,nn,z:I;
var oldrow:L;
  if СчКре="": Message("Введите счет кредита",mtError); Template.Field="СчКре"; ^""; fi;
  Iter=AsInteger(Template.Frame);
  УслСч=Раб.Бюджет2005.ВзятьКодСчета(СчКре,"","АН",True);
  if УслСч="": УслСч=СчКре; else УслСч=УслСч+"!"; fi;
  if УслСч="": УслСч="*"; fi;
  Раб.Вспом.Дендок_ост.РасчетОст(УслСч,if(out="ПРИЗН","",Расход[Iter].ДенДокВид_Призн),Дата+1);
  for n=1..Расход do
    if n<>Iter and (out="ПРИЗН" or Расход[Iter].ДенДокВид_Призн="" or Расход[Iter].ДенДокВид_Призн=Расход[n].ДенДокВид_Призн):
       z = РАБ.ДИАПАЗОНЫ.КолД;
       РАБ.ДИАПАЗОНЫ.буфСер1 = Расход[n].СерияБум;
       РАБ.ДИАПАЗОНЫ.буфНач1 = Номер_Н[n];
       РАБ.ДИАПАЗОНЫ.буфКон1 = Номер_К[n];
       РАБ.ДИАПАЗОНЫ.буфКол1 = int(-1*Расход[n].ДенДок_Вид.Номинал);
       РАБ.ДИАПАЗОНЫ.буфРазм1 = Max(Length(Расход[n].НомерБум_Н),Length(Расход[n].НомерБум_К));
       РАБ.ДИАПАЗОНЫ.буфПризн1 = Расход[n].ДенДокВид_Призн;
       РАБ.ДИАПАЗОНЫ.буфЦена1 = Round(Расход[n].Цена/Расход[n].ДенДок_Вид.Номинал,Accuracy);
       РАБ.ДИАПАЗОНЫ.Сохранить(z + 1, 1);
    fi;
  od;
  Раб.Вспом.Дендок_ост.КПоказу(3,"",False);
  Раб.Вспом.Дендок_ост.Выбрать;
  nn=РАБ.ДИАПАЗОНЫ.КолД;
  oldrow=True;
  for n=1..nn do
    if not oldrow:
       Iter=InsertFrame(Расход,Iter+1);
      else
       oldrow=False;
    fi;
    РАБ.ДИАПАЗОНЫ.Извлечь(n, 1);
    Расход[Iter].ДенДокВид_Призн=РАБ.ДИАПАЗОНЫ.буфПризн1;
    tmp=Расход[Iter].ДенДокВид_Призн;
    tmp=Name_A(tmp);
    if tmp="" or tmp=" ": tmp=Расход[Iter].ДенДокВид_Призн; fi;
    Расход[Iter].ДенДокВид_Наим=tmp;
    Расход[Iter].ДенДок_Вид=SignToRecord(Расход[Iter].ДенДокВид_Призн);
    Расход[Iter].Цена=РАБ.ДИАПАЗОНЫ.буфЦена1;
    Расход[Iter].СерияБум=РАБ.ДИАПАЗОНЫ.буфСер1;
    Расход[Iter].НомерБум_Н=Раб.Вспом.Дендок_ост.NumToStr(РАБ.ДИАПАЗОНЫ.буфНач1,РАБ.ДИАПАЗОНЫ.буфРазм1);
    Расход[Iter].НомерБум_К=Раб.Вспом.Дендок_ост.NumToStr(РАБ.ДИАПАЗОНЫ.буфКон1,РАБ.ДИАПАЗОНЫ.буфРазм1);
    Расход[Iter].КолДок=Int(Номер_К[Iter]-Номер_Н[Iter]+1);
  od;

  if out="ПРИЗН":
     ^Расход[Iter].ДенДокВид_Призн;
    |out="НОМ_Н":
     ^Расход[Iter].НомерБум_Н;
    |out="НОМ_К":
     ^Расход[Iter].НомерБум_К;
  fi;
end;


Func ДенДокВид_Призн_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
  Template.HideEditor(False);
  Return   По_Остаткам("ПРИЗН");
end;


Func НомерБум_Н_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
  Template.HideEditor(False);
  Return   По_Остаткам("НОМ_Н");
end;


Func НомерБум_К_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
  Template.HideEditor(False);
  Return   По_Остаткам("НОМ_К");
end;


Конец
