БЛАНКСШАБЛОНОМ "Ведомость на выдачу денег из кассы подотчетным лицам", РЕДАКТОР РПО_ВЕДПОДОТЧЕТ;

2-- Переменные
lblTitle   :Object;
cbПроводить:Object;
Секция1    :Section;
Секция2    :Section;
Секция3    :Section;
Секция4    :Section;
Секция5    :Section;
Секция6    :Section;
Секция7    :Section;
Секция8    :Section;

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

var МаскаСчКас:S="???.01.05.02.*.?.201.34.610";
var МаскаСчМОЛ:S="*.?.208.??.56*";

SloEnabled:L=[True];

var A:S=if(Проводить,"","+");
var AA:S=if(Проводить,"","++");
var D:S=if(Проводить,"","-");
var Искл_[]:S=if(Позиции[$].Искл,"Х","");

var Гр2:S="2";
var Гр3:S="3";

var ПропТаб[]:S=if(SloEnabled=False or Позиции[$].Сумма=0,"",SLO(Позиции[$].Сумма));
var Призн_[]:S=Позиции[$].Призн;

var Итого:N=SumOfArray(Позиции[].Сумма);

var ПропИтого:S=if(SloEnabled=False or Итого=0,"",SLO(Итого));

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

var Buf[]:S;
var SelfCrd:S="РПО_ВЕДПОДОТЧЕТ";

StoreОбщСчКре:S;
2-- Общие процедуры и функции
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..8 do
  if FindObject("Секция"+Str(s),Obj) and not s=5:
     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;
 --
 n=InsertInArraySort(BufField,"Гр2");     InsertInArray(BufColorBg,n,coTransparent);
 n=InsertInArraySort(BufField,"Гр3");     InsertInArray(BufColorBg,n,coTransparent);
 --Вручную добавляем данные таблицы (если она невидна будут проблемы в автоматичском режиме)
 n=InsertInArraySort(BufField,"Искл_");   InsertInArray(BufColorBg,n,coTeal);
 n=InsertInArraySort(BufField,"ФИО");     InsertInArray(BufColorBg,n,coTeal);
 n=InsertInArraySort(BufField,"НаимПодр");InsertInArray(BufColorBg,n,coTeal);
 n=InsertInArraySort(BufField,"СчДеб");   InsertInArray(BufColorBg,n,coTeal);
 n=InsertInArraySort(BufField,"Сумма");   InsertInArray(BufColorBg,n,coAqua);
 n=InsertInArraySort(BufField,"Призн_");  InsertInArray(BufColorBg,n,coTeal);
 n=InsertInArraySort(BufField,"Примеч");  InsertInArray(BufColorBg,n,coAqua);
 --
 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..8 do
  if FindObject("Секция"+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;

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

Proc УдалитьПустыеСтроки;
var n:I;
 n=1;
 While n<=Позиции do
  if Позиции[n].ПризнМОЛ="" and
     Позиции[n].ПризнПодр="" and
     Позиции[n].СчДеб="" and
     Позиции[n].Сумма=0  and
     Позиции[n].Призн="" : DeleteFrame(Позиции, n);
    else
     n=n+1;
  fi;
 od;
end;

Func ПроверитьВедомость :L;
var n:i;
var tmp,tmp2:S;
 if НомерРКО="": Message('Введите номер расходного кассового ордера',mtError); Template.Field="НомерРКО"; ^False; fi;
 if ДатаРКО<=1.1.100: Message('Введите дату расходного кассового ордера',mtError); Template.Field="ДатаРКО"; ^False; fi;
 if ОбщСчКре="": Message("Введите счет кредита",mtError); Template.Field="ОбщСчКре"; ^False; fi;
 if Name_S(ОбщСчКре)=" ": Message("Неизвестный счет кредита '"+ОбщСчКре+"'",mtError); Template.Field="ОбщСчКре"; ^False; fi;
-- if ОбщСчДеб="": Message("Введите счет дебета"); Template.Field="ОбщСчДеб"; ^False; fi;
 УдалитьПустыеСтроки;
 if Позиции<1: НеПустаяТаблица; Message("Отсутствуют проводки с ненулевыми суммами",mtError); Template.Field="Сумма"; Template.Frame=1; ^False; fi;
 Раб.Бюджет.ПроверитьПризнакиНачать;
 for n=1..Позиции do
  if Позиции[n].Искл=False:
     if Позиции[n].ПризнМОЛ="": Message("Введите подотчетное лицо",mtError); Template.Field="ФИО"; Template.Frame=n; ^False; fi;
     if Позиции[n].СчДеб="": Message('Введите корреспондирующий счет',mtError); Template.Field="СчДеб"; Template.Frame=n; ^False; fi;
     if Name_S(Позиции[n].СчДеб)=" ": Message("Неизвестный корреспондирующий счет '"+Позиции[n].СчДеб+"'",mtError); Template.Field="СчДеб"; Template.Frame=n; ^False; fi;
     if Correspond(Позиции[n].СчДеб, ОбщСчКре)=False: Message("Счета "+Позиции[n].СчДеб+"/"+ОбщСчКре+' не могут корреспондировать',mtError); Template.Field="СчДеб"; Template.Frame=n; ^False; fi;
     if Позиции[n].Сумма=0 : Message('Введите сумму',mtError); Template.Field="Сумма"; Template.Frame=n; ^False; fi;
     if Раб.Бюджет.ПроверитьПризнакиОбязательные(Позиции[n].СчДеб,ОбщСчКре,Позиции[n].ПризнМОЛ+" "+Позиции[n].ПризнПодр+" "+Позиции[n].Призн,"")=False : Template.Field="Призн_"; Template.Frame=n; ^False; fi;
     if Раб.Бюджет.ПроверитьПризнакиСвязанные(Позиции[n].СчДеб,ОбщСчКре,Позиции[n].ПризнМОЛ+" "+Позиции[n].ПризнПодр+" "+Позиции[n].Призн,"")=False : Template.Field="Призн_"; Template.Frame=n; ^False; fi;
     if Match(Позиции[n].СчДеб,"*.?.208.??.???") or Match(Позиции[n].СчДеб,"*.?.302.??.???"):
        tmp=Раб.Бюджет2005.ВзятьСловаИзНабораПоМаске(Позиции[n].Призн," ","КОСГУ.*","");
        if not tmp="":
           tmp2=Раб.Бюджет2005.ВзятьКодСчета(Позиции[n].СчДеб,"","АН",False);
           tmp2=Раб.Бюджет2005.Соотв_Ан_КОСГУ("",tmp2);
           if not Match(tmp,"КОСГУ."+tmp2+"!"): Message("Аналитический признак "+tmp+" не соответствует КБК счета "+Позиции[n].СчДеб,mtError); Template.Field="Призн_"; Template.Frame=n; ^False; fi;
        fi;
        tmp=Раб.Бюджет2005.ВзятьСловаИзНабораПоМаске(Позиции[n].Призн," ","ФКР.*","");
        if not tmp="":
           tmp2=Раб.Бюджет2005.ВзятьКодСчета(Позиции[n].СчДеб,"","БК",False);
           if not tmp="ФКР."+tmp2: Message("Аналитический признак "+tmp+" не соответствует КБК счета "+Позиции[n].СчДеб,mtError); Template.Field="Призн_"; Template.Frame=n; ^False; fi;
        fi;
     fi;
     if Match(Позиции[n].СчДеб,"*.?.205.??.???"):
        tmp=Раб.Бюджет2005.ВзятьСловаИзНабораПоМаске(Позиции[n].Призн," ","КОСГУ.*","");
        if not tmp="":
           tmp2=Раб.Бюджет2005.ВзятьКодСчета(Позиции[n].СчДеб,"","АН",False);
           tmp2=Раб.Бюджет2005.Соотв_Ан_КОСГУ("205",tmp2);
           if not Match(tmp,"КОСГУ."+tmp2+"!"): Message("Аналитический признак "+tmp+" не соответствует КБК счета "+Позиции[n].СчДеб,mtError); Template.Field="Призн_"; Template.Frame=n; ^False; fi;
        fi;
        tmp=Раб.Бюджет2005.ВзятьСловаИзНабораПоМаске(Позиции[n].Призн," ","КД.*","");
        if not tmp="":
           tmp2=Раб.Бюджет2005.ВзятьКодСчета(Позиции[n].СчДеб,"","БК",False);
           if not tmp="КД."+tmp2: Message("Аналитический признак "+tmp+" не соответствует КБК счета "+Позиции[n].СчДеб,mtError); Template.Field="Призн_"; Template.Frame=n; ^False; fi;
        fi;
     fi;
  fi;
 od;
 ^True;
end;

Proc Ф_Инфо (Iter:I);
var tmp:S;
var Rec:Record;
 tmp=Позиции[Iter].ПризнМОЛ;
 if tmp="": Exit; fi;
 Rec=SignToRecord(tmp);
 if Rec=nil: Exit; fi;
 Rec=GetCardFieldR("СОТРУДНИКИ",Rec,"ПОДРАЗДЕЛЕНИЕ");
 if Rec=nil: Exit; fi;
 Позиции[Iter].ПризнПодр=CardFileRecSign("ПОДРАЗДЕЛЕНИЯ","КОД","П",Rec);
 Позиции[Iter].НаимПодр=Name_A(Позиции[Iter].ПризнПодр);
 if Позиции[Iter].НаимПодр=" " or Позиции[Iter].НаимПодр="": Позиции[Iter].НаимПодр=Позиции[Iter].ПризнПодр; fi;
end;

Func ПолучитьНомер:I;
var Н1,Н2:I;
 if ДатаРКО=1.1.100:
    Н1=РАБ.ОБЛ.СледСУчетомГода("РасхОрд","Номер","Д");
    Н2=РАБ.ОБЛ.СледСУчетомГодаФ(SelfCrd,"Номер","ДатаРКО","UKey<>"+RecordToString(Current));
   else
    Н1=РАБ.ОБЛ.СледСУчетомДаты("РасхОрд","Номер","Д",ДатаРКО);
    Н2=РАБ.ОБЛ.СледСУчетомДатыФ(SelfCrd,"Номер","ДатаРКО",ДатаРКО,"UKey<>"+RecordToString(Current));
 fi;
 ^Max(Н1,Н2);
end;

Func ВзятьСправМОЛ (Iter:I):S;
var Mask,tmp:S;
 if Позиции[Iter].СчДеб="": ^"МОЛ.*|Ф.*"; fi;
 Mask=Раб.Бюджет.НаборПризнаков(Позиции[Iter].СчДеб,"","П.*");
 tmp=Раб.Бюджет.ВзятьПризнакИзНабораПоМаске(Mask,"МОЛ.*","|");
 if tmp="": tmp=Раб.Бюджет.ВзятьПризнакИзНабораПоМаске(Mask,"Ф.*","|"); fi;
 if tmp="": tmp="МОЛ.*|Ф.*"; fi;
 ^tmp;
end;

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

Proc ОбновитьАналитику (Iter:I);
var Mask:S;
 Mask=ВзятьСправМОЛ(Iter);
 if Раб.Бюджет.MatchMask(Позиции[Iter].ПризнМол,Mask)=False: Позиции[Iter].ПризнМол=""; Позиции[Iter].ФИО=""; fi;
 Mask=Раб.Бюджет.НаборПризнаков(Позиции[Iter].СчДеб,ОбщСчКре,"П.*|"+Mask);
 Позиции[Iter].Призн=Раб.Бюджет.МухиОтКотлет(Позиции[Iter].Призн,Mask);
 ПолучитьДопАн(ОбщСчКре,Позиции[Iter].СчДеб,Iter);
end;

Proc ОбработатьНомер (vНомерБум:S);
var tmp:i;
 tmp=Int(vНомерБум);
 if tmp=0:
    tmp=ПолучитьНомер;
 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(ПолучитьНомер);
 ОбработатьНомер(НомерРКО);
 Template.Field="НомерРКО";
end;
2-- Обработчики событий полей, объектов и шаблона
2-- События полей
Func Дата_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:d;
var Field:S;
var prevДата:D;
 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Дата,ДатаРКО); fi;
 ^Cur;
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=ВыборПризнака("П.*");
 if tmp="": ^false; fi;
 ОбщПризнПодр=tmp;
 ОбщНаимПодр=Name_A(ОбщПризнПодр);
 if ОбщНаимПодр="" or ОбщНаимПодр="": ОбщНаимПодр=ОбщПризнПодр; fi;
end;

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

Proc ППП_OnExit (Field:S; Iter:I);
 НаимППП=Раб.Бюджет.НаимКБК("ППП2006",ППП);
end;

Func ОбщСчКре_onEnter(FieldName: String; Iter: Integer): logical;
var tmp, Mask:S;
var n:i;
 tmp=ВыборСчета(МаскаСчКас);
 if tmp="": ^false; fi;
 ОбщСчКре=tmp;
 StoreОбщСчКре=ОбщСчКре;
 if Correspond(ОбщСчДеб,tmp)=False: ОбщСчДеб=""; fi;
 for n=1..Позиции do
  if Позиции[n].СчДеб<>"": ОбновитьАналитику (Iter); fi;
 od;
 ^false;
end;

Func ОбщСчДеб_onEnter(FieldName: String; Iter: Integer): logical;
var tmp :S;
var Mask:S;
 tmp=ВыборСчета(МаскаСчМОЛ);
 if tmp="": ^False; fi;
 ОбщСчДеб=Tmp;
 ^false;
end;

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

Func НомерРКО_OnLookup(Sect:S; Row:I; Col:I; Cur:S) :S;
 Template.HideEditor(False);
 НомерРКО=Str(ПолучитьНомер);
 ОбработатьНомер(НомерРКО);
 ^Cur;
end;

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

Func Гр2_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n,Iter:i;
 Template.HideEditor(False);
 ClearVariable(Buf);
 Buf[1]="Заполнить колонку значением поля 'Структурное подразделение'";
 Buf[2]="Заполнить колонку значением взятым из картотеки 'Сотрудники'";
 n=Alternate("Значение данного колонки...",Buf,-1,1,12);
 if n=0: ^Cur; fi;
 if EnqOkCancel("Ранее введенные значения данной колонки будут удалены. Вы уверены ?",mtWarning)=cmCancel: ^Cur; fi;
 for Iter=1..Позиции do
  Позиции[Iter].ПризнПодр="";
  if n=1:
     Позиции[Iter].ПризнПодр=ОбщПризнПодр;
     Позиции[Iter].НаимПодр=ОбщНаимПодр;
    else
     Ф_Инфо(Iter);
  fi;
 od;
 Return Cur;
end;

Func Гр3_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n,Iter:i;
 Template.HideEditor(False);
 if ОбщСчКре="": Message("Введите счет кредита",mtError); Template.Field="ОбщСчКре"; ^Cur; fi;
 if ОбщСчДеб="": Message("Введите счет дебета",mtError); Template.Field="ОбщСчДеб"; ^Cur; fi;
 ClearVariable(Buf);
 Buf[1]="Заполнить колонку значением поля 'Дебет счета Расчеты с подотчетными лицами'";
 n=Alternate("Значение данной колонки...",Buf,-1,1,12);
 if n=0: ^Cur; fi;
 if EnqOkCancel("Ранее введенные значения данной колонки будут удалены. Вы уверены ?",mtWarning)=cmCancel: ^Cur; fi;
 for Iter=1..Позиции do
  Позиции[Iter].СчДеб=ОбщСчДеб;
  ОбновитьАналитику(Iter);
 od;
 Return Cur;
end;

Func AddIter(Field:S; Iter:I) :L;
var Iter_:I;
 if Проводить: ^False; fi;
 Iter_=Iter;
 Iter=InsertFrame(Позиции,Iter+1);
 Позиции[Iter].ПризнМОЛ=Позиции[Iter_].ПризнМОЛ;
 Позиции[Iter].ФИО=Позиции[Iter_].ФИО;
 Позиции[Iter].ПризнПодр=Позиции[Iter_].ПризнПодр;
 Позиции[Iter].НаимПодр=Позиции[Iter_].НаимПодр;
 Позиции[Iter].СчДеб=Позиции[Iter_].СчДеб;
 Позиции[Iter].Сумма=Позиции[Iter_].Сумма;
 Позиции[Iter].Призн=Позиции[Iter_].Призн;
 Позиции[Iter].Примеч=Позиции[Iter_].Примеч;
 ^False;
end;

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

Func Искл_onEnter(Field:S; Iter:I):L;
 if Позиции[Iter].Искл: Позиции[Iter].Искл=False; else Позиции[Iter].Искл=True; fi;
 ^False;
end;

Func ФИО_onEnter(FieldName: String; Iter: Integer): logical;
var tmp,Mask :S;
 if ОбщСчКре="": Message("Введите счет кредита",mtError); Template.Field="ОбщСчКре"; ^False; fi;
-- if ОбщСчДеб="": Message("Введите счет дебета",mtError); Template.Field="ОбщСчДеб"; ^False; fi;
 if Позиции[Iter].СчДеб="": Message("Введите счет дебета",mtError); Template.Field="СчДеб"; ^False; fi;
 Mask=ВзятьСправМОЛ(Iter);
 tmp=ВыборПризнака(Mask);
 if tmp="": ^False; fi;
 Позиции[Iter].ПризнМОЛ=tmp;
 Позиции[Iter].ФИО=Name_A(tmp);
 if Позиции[Iter].ФИО=" " or Позиции[Iter].ФИО="": Позиции[Iter].ФИО=tmp; fi;
 if Позиции[Iter].ПризнПодр="": Ф_Инфо(Iter); fi;
 ^false;
end;

Proc ФИО_onExit (Field:S; Iter:I);
 Позиции[Iter].ПризнМОЛ="";
end;

Func НаимПодр_onEnter(FieldName: String; Iter: Integer): logical;
var tmp :S;
 tmp=ВыборПризнака("П.*");
 if tmp="": ^False; fi;
 Позиции[Iter].ПризнПодр=tmp;
 Позиции[Iter].НаимПодр=Name_A(tmp);
 if Позиции[Iter].НаимПодр=" " or Позиции[Iter].НаимПодр="": Позиции[Iter].НаимПодр=tmp; fi;
 ^false;
end;

Proc НаимПодр_onExit (Field:S; Iter:I);
 Позиции[Iter].ПризнПодр="";
end;

Func СчДеб_onEnter(FieldName: String; Iter: Integer): logical;
var tmp :S;
var Mask:S;
 if ОбщСчКре="": Message("Введите счет кредита",mtError); Template.Field="ОбщСчКре"; ^False; fi;
-- if ОбщСчДеб="": Message("Введите счет дебета",mtError); Template.Field="ОбщСчДеб"; ^False; fi;
 tmp=ВыборСчета(МаскаСчМОЛ);
 if tmp="": ^False; fi;
 Позиции[Iter].СчДеб=Tmp;
 ОбновитьАналитику(Iter);
 ^false;
end;

Func Призн_onEnter(FieldName: String; Iter: Integer): logical;
var Mask:S;
var tmp :S;
 if ОбщСчКре="": Message("Введите счет кредита",mtError); Template.Field="ОбщСчКре"; ^False; fi;
-- if ОбщСчДеб="": Message("Введите счет дебета",mtError); Template.Field="ОбщСчДеб"; ^False; fi;
 if Позиции[Iter].СчДеб="": Message("Введите счет дебета",mtError); Template.Field="СчДеб"; ^False; fi;
 Mask=ВзятьСправМОЛ(Iter);
 Mask=РАБ.БЮДЖЕТ.НаборПризнаков(Позиции[Iter].СчДеб, ОбщСчКре,"П.*|"+Mask);
 if Mask="": Message("Аналитические признаки не требуются"); ^False; fi;
 tmp=ВыборПризнака(Mask);
 if tmp="": ^False; fi;
 Позиции[Iter].Призн=РАБ.БЮДЖЕТ.ДобавитьПризнак(Позиции[Iter].Призн, tmp);
 ^False;
end;

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

Func Должн_ONLOOKUP(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var REC :Record;
var v1,v2,Field :S;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 REC=OpenCardFile("Сотрудники");
 if REC=NIL: ^Cur; fi;
 v2=GetCardFieldS("Сотрудники", REC, "ФАМИЛИЯ")+" "+GetCardFieldS("Сотрудники", REC, "ИНИЦИАЛЫ");
 v1=GetCardFieldS("Сотрудники", REC, "ДОЛЖНОСТЬ.Долж");
 if Field="ФИОРук"  : ФИОРук =v2;
   |Field="ФИОБух"  : ФИОБух =v2;
   |Field="ФИОИсп"  : ФИОИсп =v2; ДолжнИсп=v1;
   |Field="ДолжнИсп": ФИОИсп =v2; ДолжнИсп=v1;
   |Field="ФИОКасс" : ФИОКасс=v2;
 fi;
 ^"";
end;
2-- События объектов
Proc cbПроводить_onChange(Obj:S);
var Flag:L;
var n   :I;
 if Проводить=False:
    n=EnqOkCancel("Вы уверены, что хотите исключить данный документ из обработки?");
    if n=cmCancel: Flag=True; else Flag=False; fi;
   else
    Flag=ПроверитьВедомость;
 fi;
 Проводить=Flag; cbПроводить.State=Проводить;
 Оформление;
 EditorApply;
end;

Proc btnПечать_OnClick(Sender: S);
 Раб.Настр_Печать.Prn("","","RPO_0504501_000.cfg","",1);
end;
2-- События шаблона
Proc Template_onOpen(Create: Logical);
 Раб.Настр_Печать.Cfg("","RPO_0504501_000.cfg");
 FlagInit=True;
end;

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

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

Func Template_OnVerify: Logical;
var n:i;
 if Валюта="": Валюта=BaseCurrency; fi;
 СумВедом=Итого;
 СумПров=0;
 for n=1..Позиции do
  if Позиции[n].Искл=False: СумПров=СумПров+Позиции[n].Сумма; fi;
 od;
 ^True;
end;


КОНЕЦ