-- Шаблон создан мастером бланков
-- 19.12.2005 15:31:41
--
БланкСШаблоном "Заключение 109 счета", Редактор РПО_ЗАКРЫТИЕ106;

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

var A:S=if(Проводить,"","+");
var D:S=if(Проводить,"","-");
var пп[]:i=$;
var Вал_База:S=BaseCurrency;
var Mask_Код_Сч_Осн:S='*.401.*';
var Mask_Код_Сч_Расх:S='*.109.??.???';
var Mask_Код_Сч_Нал:S='*.303.*';
var Def_Код_Сч_Осн:S='2.401.10';
var Def_Код_Сч_Расх:S='2.109.60.???';
var Def_Код_Сч_Нал:S='2.303.03.730';
var Признак_[]:S=Расходы[$].Признак;
var Аналит_:S=Аналит;
var sss:S='';
var Прибыль:N;

var Счет_[]:S=Раб.Бюджет2005.ВзятьКодСчета(Расходы[$].Счет,"","СЧ9",False);

var fНал:L;
var Wrng:S;

var BufСум[]:N;
var BufСум_Вал[]:N;
var BufВал[]:S;
var BufПризн[]:S;
var BufСч[]:S;

var Buf2Кмнт[]:S;
var Buf2Призн[]:S;
var Buf2Сч[]:S;
var Buf2Сум[]:N;
var Buf2Дата[]:D;
var Key2[]:S;

var Buf[]:s;

var Key[]:S;

W1:Section;
W2:Section;

S1:Section;
S2:Section;
S3:Section;
S4:Section;
S5:Section;
S6:Section;
S7:Section;
S8:Section;

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

btnРасчет: Object;
btnОтобрать: Object;
cbПроводить: Object;
cbНал: Object;
cbОстДатаП: Object;

--Процедуры и функции ------------- 
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("S"+Str(s),Obj):
     rr=asInteger(Obj.RowsCount);
     cc=asInteger(Obj.ColsCount);
     for r=1 ..rr  do
      for c=1 ..cc  do
      if AsInteger(Obj.Cell(r,c,CellFieldType,''))>1 then
       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;
      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;
 btnРасчет.Enabled=not Проводить;
 btnОтобрать.Enabled=not Проводить;
 cbОстДатаП.Enabled=not Проводить;
 cbНал.Enabled=not Проводить;
 S3.Visible=fНал;
 for s=1..8 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
      if AsInteger(Obj.Cell(r,c,CellFieldType,''))>1 then
       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;
      fi;
      od;
     od;
  fi;
 od;
end;

Proc НеПусто;
if Расходы=0 then InsertFrame(Расходы,1); fi;
end;

Proc ЗаписьполяSChk(ИмяПоля:S;Значение:S);
var tmp:S;
tmp=GetVariableS(ИмяПоля);
if Значение<>tmp then
   PutVariableS(ИмяПоля,Значение);
fi;
end;


proc РазобратьСчета;
  ЗаписьполяSChk("КД",Раб.Бюджет2005.ВЗЯТЬКОДСЧЕТА(СЧетОсн,"КД","БК",True));
  ЗаписьполяSChk("Код_Сч_Осн",Раб.Бюджет2005.ВЗЯТЬКОДСЧЕТА(СЧетОсн,"КД","СЧ6",False));
  ЗаписьполяSChk("КОСГУ",Раб.Бюджет2005.ВЗЯТЬКОДСЧЕТА(СЧетОсн,"КД","КОСГУ",False));
  ЗаписьполяSChk("Код_Сч_Нал",Раб.Бюджет2005.ВЗЯТЬКОДСЧЕТА(СЧетНал,"КД","СЧ9",False));
end;

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

Proc Очистить;
 ClearVariable(Расходы);
 ClearVariable(ПроводТ);
 Расх=SumOfArray(Расходы[].Сумма);
end;

Proc ПроверкаАна;
var i:i;
var ПрУ:S;
var ДН:D;
W2.Visible=False;
for i=1 to WordsCount(Аналит,' ') do
   ПрУ=ExtractWord(1,ExtractWord(i,Аналит,' '),'.')+'.*';
   ДН=Dat(30,12,Year(Дата_К)-1);
   if Turn("*."+Код_Сч_Расх+" {"+ПрУ+"}",ДН,Дата_К)<>Turn("*."+Код_Сч_Расх,ДН,Дата_К) then
      W2.Visible=True;
      Wrng='Предупреждение! Есть проводки не помеченные признаком '+ExtractWord(1,ExtractWord(i,Аналит,' '),'.');
   fi;
od;
end;

func АнВУсл(Ан:S):S;
var УслАн:S;
 УслАн=Раб.Бюджет.НаборПризнToMask(Ан,'&');
 return УслАн;
end;

Func Сторнирование(aСум:N;aПризн:S):L;
var i,j:I;
var Res:L;
i=SearchInArray(Buf2Сум,-aСум);
Res=False;
while i>0 do
  j=SearchInArray(Buf2Призн,aПризн);
  while j>0 do
    if j=i then
       DeleteFromArray(Key2,i,False);
       DeleteFromArray(Buf2Кмнт,i,False);
       DeleteFromArray(Buf2Сум,i,False);
       DeleteFromArray(Buf2Дата,i,False);
       DeleteFromArray(Buf2Призн,i,False);
       Res=True;j=-1;
      else
       j=SearchInArray(Buf2Призн,aПризн,False,j+1);
    fi;
  od;
  if not Res then i=SearchInArray(Buf2Сум,-aСум,False,i+1); else i=-1; fi;
od;
^Res;


end;

Proc ДобавитьПров(vСум:N; vСум_Вал:N; vВал:S; vКмнт:S; vПризн:S;vСч:S;vДата:D);
var n:I;
var СчДеб_,ВД_,Key_,Справ_,Призн_:S;
 Призн_=vПризн;
 Справ_=Раб.Бюджет2005.СписокСправ(vСч,0,'');
 vПризн=Раб.Бюджет2005.СортироватьНаборСлов(vПризн," ",True);
 vПризн=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(vПризн," ",Справ_,"|");
 Key_=vВал+" "+vСч+" "+vПризн;
 n=SearchInArray(Key,Key_,True);
 if n=-1:
    n=InsertInArraySort(Key,Key_);
    InsertInArray(BufСум,n,vСум);
    InsertInArray(BufСум_Вал,n,vСум_Вал);
    InsertInArray(BufВал,n,vВал);
    InsertInArray(BufПризн,n,vПризн);
    InsertInArray(BufСч,n,vСч);
   else
    BufСум[n]=BufСум[n]+vСум;
    BufСум_Вал[n]=BufСум_Вал[n]+vСум_Вал;
 fi;
 if vСум<>0 and vСум_Вал=0 then
   --Проверка сторсторнирования
   if not Сторнирование(vСум,Призн_) then
     n=InsertInArraySort(Key2,Key_);
     InsertInArray(Buf2Кмнт,n,vКмнт);
     InsertInArray(Buf2Сум,n,vСум);
     InsertInArray(Buf2Дата,n,vДата);
     InsertInArray(Buf2Призн,n,Призн_);
     InsertInArray(Buf2Сч,n,vСч);
   fi;
 fi;
end;


Func ПроверитьНастр:L;
 --Счет
 if not Match(Код_Сч_Осн,Mask_Код_Сч_Осн) then Message('Проверьте правильность заполнения основной части счета темы',mtError); Template.Field='КОСГУ'; ^False; fi;
 if КОСГУ='' then Message('Выберите КОСГУ основного счета',mtError); Template.Field='КОСГУ'; ^False; fi;
 if (NAME_S(КД+'.'+Код_Сч_Осн+'.'+КОСГУ)=' ') then Message('Выберите закрываемый счет',mtError); Template.Field='КД'; ^False; fi;
 --Период
 if Дата_К=1.1.100 then Message('Введите дату окончания закрываемого периода',mtError); Template.Field='Дата_К'; ^False; fi;
 ^True;
 -- Счета корреспонденции!!!
end;

Func Проверить(Mode:I):L;
--1 - Начисление.
--2 - Закрытие.
var Iter:I;
var РасхСумм:N;
 if not ПроверитьНастр then ^False; fi;
 if ДатаОпер=1.1.100 then Message('Введите дату операции',mtError); Template.Field='ДатаОпер'; ^False; fi;
 if Mode=2 then
  if not Match(Код_Сч_Расх,Mask_Код_Сч_Расх) then Message('Проверьте правильность заполнения счета расхода',mtError); Template.Field='Код_Сч_Расх'; ^False; fi;
  if fНал then if not Match(Код_Сч_Нал,Mask_Код_Сч_Нал) then Message('Проверьте правильность заполнения счета для учета налога',mtError); Template.Field='Код_Сч_Нал'; ^False; fi; fi;
  РасхСумм=0;
  for Iter=1 to Расходы do
--    if Расходы[Iter].Сумма<0 then  Message('Отрицательная сумма расхода',mtWarning); Template.Field='Сумма'; Template.Frame=Iter; ^False; fi;
    if Расходы[Iter].Сум_Вал<>0 then  Message('Обнаружена проводка в валюте',mtError); Template.Field='Сум_Вал'; Template.Frame=Iter; ^False; fi;
    РасхСумм=РасхСумм+Расходы[Iter].Сумма;
  od;
--  if( Round(Ост_,2)<>Round(РасхСумм+Налог+Прибыль,2)) or (Ост_+Прибыль=0) then Message('Выполните расчет',mtError); Template.Object='btnРасчет'; ^False; fi;
 fi;
 ^True;
end;

Proc Расшифровка(Iter:I);
var i:I;
var СумН:N;
Прочие.ЗАКР_РАСШИФР.Провод=0;
ClearVariable(Прочие.ЗАКР_РАСШИФР.РКмнт);
ClearVariable(Прочие.ЗАКР_РАСШИФР.РПризн);
ClearVariable(Прочие.ЗАКР_РАСШИФР.РСум);
ClearVariable(Прочие.ЗАКР_РАСШИФР.РДата);
ClearVariable(Прочие.ЗАКР_РАСШИФР.РKey);
ClearVariable(Прочие.ЗАКР_РАСШИФР.УKey);
for i= 1 to ПроводТ do
  if ПроводТ[i].Строка=ПРИЗНАК_[Iter]+РАСХОДЫ[Iter].Счет then
   Прочие.ЗАКР_РАСШИФР.ДобСтроку(ПроводТ[i].Дата,ПроводТ[i].Сум,ПроводТ[i].Признаки,ПроводТ[i].Счет,ПроводТ[i].Коммент,i);
  fi;
od;
 Прочие.ЗАКР_РАСШИФР.УслСч="*."+Код_Сч_Расх;
 OpenBlank('Прочие.ЗАКР_РАСШИФР',True);
 if Прочие.ЗАКР_РАСШИФР.ModRes=cmCancel then Exit; fi;
 --Обработка сделанных изменений.
 СумН=0;
 for i= 1 to lengthofArray(Прочие.ЗАКР_РАСШИФР.РKey) do
  if not(ПроводТ[(Прочие.ЗАКР_РАСШИФР.РKey[i])].Сум=Прочие.ЗАКР_РАСШИФР.РСум[i]) then ПроводТ[(Прочие.ЗАКР_РАСШИФР.РKey[i])].Сум=Прочие.ЗАКР_РАСШИФР.РСум[i]; fi;
  СумН=СумН+Прочие.ЗАКР_РАСШИФР.РСум[i];
 od;
 if Расходы[Iter].СУММА<>СумН then Расходы[Iter].СУММА=СумН; fi;
 for i= 1 to lengthofArray(Прочие.ЗАКР_РАСШИФР.УKey) do
  DeleteFrame(ПроводТ,Прочие.ЗАКР_РАСШИФР.УKey[i]-i+1);
 od;
end;

Proc ДобСчета;
var OWA,n:I;
var key:Record;
РАБ.КСА.Начать;
if КД<>'' then
 if КОСГУ<>'' then
  if Код_Сч_Осн<>'' then Раб.КСА.Добавить(КД+'.'+Код_Сч_Осн+'.'+КОСГУ); fi;
 fi;
 if fНал then if Код_Сч_Нал<>'' then Раб.КСА.Добавить(КД+'.'+Код_Сч_Нал); fi; fi;
fi;

--if Код_Сч_Расх<>'' then Раб.КСА.Добавить(ФКР+'.'+Код_Сч_Расх); fi;

if Раб.КСА.Закончить(True): Message("Добавление новых счетов закончено"); fi;
end;

Proc Отобрать;
var Iter,p,pp,t,n,nn,z,x,xx:I;
var Вал_,СчДеб_,СчКре_,Призн_,КБК_,КОСГУ_,ВД_,tmp:S;
var Сум_,Сум_Вал_:N;
var УслАн:S;
var ДН:D;
 Refresh;
 if ПроверитьНастр=False: Exit; fi;
 ShowProgress(0,"Отбор расходов....");
 Try
  Очистить;
  ClearVariable(Key);
  ClearVariable(BufСум);
  ClearVariable(BufСум_Вал);
  ClearVariable(BufВал);
  ClearVariable(BufПризн);
  ClearVariable(BufСч);
   ClearVariable(Buf2Кмнт);
   ClearVariable(Buf2Призн);
   ClearVariable(Buf2Сч);
   ClearVariable(Buf2Сум);
   ClearVariable(Buf2Дата);
   ClearVariable(Key2);
   ДН=Dat(30,12,Year(Дата_К)-1);
   pp=Дата_К-ДН;
   ShowProgress(pp,"Отбор расходов....");
    for Transaction t="*."+Код_Сч_Расх+"{"+АнВУсл(Аналит)+"}",ДН,Дата_К do
    Hint("Отбор счетов по маске: *."+Код_Сч_Расх+DateToString(TransDate(t)));
    p=Дата_К-TransDate(t);
    ProgressPos(pp-p);
    СчДеб_=TransDeb(t);
    СчКре_=TransCre(t);
       Сум_=TransSum(t);
       Сум_Вал_=0;
    if Раб.Бюджет2005.MatchMask(СчДеб_,"*."+Код_Сч_Расх):
       Призн_="";
       nn=TransSignCount(t);
       for n=1..nn do
        tmp=TransSignName(t,n);
        if Pos("+",tmp)=1: tmp=SubStr(tmp,2,255); fi;
        Призн_=Призн_+" "+tmp;
       od;
       Призн_=SubStr(Призн_,2,255);
       ДобавитьПров(Сум_,Сум_Вал_,Вал_,TransComment(t),Призн_,СчДеб_,TransDate(t));
    fi;
    if Раб.Бюджет2005.MatchMask(СчКре_,"*."+Код_Сч_Расх):
       Призн_="";
       nn=TransSignCount(t);
       for n=1..nn do
        tmp=TransSignName(t,n);
        if Pos("-",tmp)=1: tmp=SubStr(tmp,2,255); fi;
        Призн_=Призн_+" "+tmp;
       od;
       Призн_=SubStr(Призн_,2,255);
       ДобавитьПров(-1*Сум_,-1*Сум_Вал_,Вал_,TransComment(t),Призн_,СчКре_,TransDate(t));
    fi;
   od;
   nn=LengthOfArray(Key);
   W1.Visible=False;
   for n=1..nn do
    if not Round(BufСум[n],4)=0 or not Round(BufСум_Вал[n],4)=0:
       z=InsertFrame(Расходы,Расходы+1);
       Расходы[Расходы].Сумма=(BufСум[n]);
       Расходы[Расходы].Сум_Вал=(BufСум_Вал[n]);
       Расходы[Расходы].Вал=BufВал[n];
       Расходы[Расходы].Признак=BufПризн[n];
       Расходы[Расходы].Счет=BufСч[n];
--       if Pos('КОСГУ',Расходы[Расходы].Признак)=0 then
--          W1.Visible=True;
--       fi;
       xx=LengthOfArray(Key2);t=1;
       for x = 1 to xx do
         if Key2[x]=Key[n] then
            t=InsertFrame(ПроводТ,ПроводТ+1);
            ПроводТ[t].Дата=Buf2Дата[x];
            ПроводТ[t].Коммент=Buf2Кмнт[x];
            ПроводТ[t].Сум=Buf2Сум[x];
            ПроводТ[t].Признаки=Buf2Призн[x];
            ПроводТ[t].Счет=Buf2Сч[x];
            ПроводТ[t].Строка=Расходы[Расходы].Признак+Расходы[Расходы].Счет;
          fi;
       od;
    fi;
   od;
 Finally
  CloseProgress;
 end;
 Расх=SumOfArray(Расходы[].Сумма);
 НеПусто;
 Message("Отбор расходов завершен");
end;

Func РасчНал(ВхРез:N):N;
var Res,Каф,Нал,ПрРасх:N;
var ДН:Д;
ДН=Dat(30,12,Year(Дата_К)-1);
Нал=-Turn('*.303.03.*{'+АнВУсл(Аналит)+'}',ДН,ДатаОпер);
ПрРасх=Turn('+*.401.20.2*{'+АнВУсл(Аналит)+'}',ДН,ДатаОпер);

Res=(ВхРез+Нал+ПрРасх)*(0.2)-Нал;
if Res<0 then Res=0; fi;
^if(НАлог=0,0,Res);
end;

Proc Расчет;
var Iter:I;
var Рез:N;
 Ост_=-Saldo(КД+'.'+Код_Сч_Осн+'.'+КОСГУ+'{'+АнВУсл(Аналит)+'}',if(ОстДатаП,ДатаОпер+1,Дата_К));
 Рез=Ост_;
 for Iter=1 to Расходы do
  Рез=Рез-Расходы[Iter].Сумма;
 od;
 if fНал then Налог=РасчНал(Рез); else Налог=0; fi;
 Рез=Рез-Налог;
 Прибыль=Рез;
 ДобСчета;
 Message("Расчет завершен");
end;

--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----

Func ОснСчет_OnEnter(FieldName: String; Iter: Integer): logical;
var bckp,tmp,mask,mode,val:S;
bckp=GetVariableS(Fieldname);
PutVariableS(FieldName,'');
mask=if(КД="","*",КД)+"."+if(Код_Сч_Осн="","*",Код_Сч_Осн)+'.'+if(КОСГУ="","*",КОСГУ);
mode="КД";
if FieldName="КД" then
     Val="КБК";
     Раб.КБК.Список_КБК_РазрДобав=True;
     Раб.КБК.Список_КБК_КОСГУ=КОСГУ;
     Раб.КБК.Список_КБК_КодСч=Код_Сч_Осн;
     Раб.КБК.Список_КБК_РазрКОСГУ=(КОСГУ="");
  |Fieldname="КОСГУ" then 
     Val="КОСГУ";
     mask=mask+"&("+Раб.Бюджет2005.МаскаДоходСч+")";
       Раб.КБК.Список_КОСГУ_РазрДобав=True;
     Раб.КБК.Список_КОСГУ_БК=КД;
     Раб.КБК.Список_КОСГУ_КодСч=Код_Сч_Осн;
     Раб.КБК.Список_КОСГУ_РазрБК=(КД="");
  |Fieldname="Код_Сч_Осн" then
     mask=mask+"&("+Mask_Код_Сч_Осн+")";
     Val="СЧ6";
  fi;

  tmp=Раб.КБК.Список(mask,mode,Val);
  if tmp='' then 
     PutVariableS(FieldName,bckp); 
    else 
     PutVariableS(FieldName,tmp); 
     if FieldName="КД" then ФКР=Substr(tmp,1,3)+'.0000.0000000.000'; fi; --Внебюджетный ФКР по главе
  fi;
  ДобСчета;
  Return  False;

end;


Func СчКор_OnEnter(FieldName: String; Iter: Integer): logical;
var bckp,tmp,mask,mode,val:S;
  mask=GetVariableS('Mask_'+FieldName);
  Val='СЧ9 И';
  if fieldname="Код_Сч_Расх" then Val=Val+"Г"; fi;
  tmp=Раб.КБК.Список(mask,mode,Val);
  if fieldname="Код_Сч_Расх" then  
     if tmp="":tmp="";
       |length(tmp)=6:tmp=tmp+"??.???";
       |length(tmp)=9:tmp=tmp+"???";
       |length(tmp)<>12:Message("Ошибка при выборе счета",mtError); tmp="";
     fi;
  fi;
  if tmp<>'' then PutVariableS(FieldName,tmp); fi;
  Return False;
end;

Func Призн_onEnter (Field:S; Iter:I):L;
var tmp,Mask:s;
 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 Аналит_onEnter (Field:S; Iter:I):L;
var tmp,Mask,m1,m2:s;
 if КД='' or Код_Сч_Осн='' or КОСГУ='' then Message('Выберите закрываемый счет', mtError); ^False; fi;
 Mask=Раб.Бюджет2005.СписокСправ(КД+'.'+Код_Сч_Осн+'.'+КОСГУ,0,'');
 m1=Раб.Бюджет2005.СписокСправ(ФКР+'.'+Код_Сч_Расх,0,'');
 if fНал then 
    m2=Раб.Бюджет2005.СписокСправ(КД+'.'+Код_Сч_Нал,0,'');
    m1=Раб.Бюджет2005.Объединить(m1,m2,"&");
 fi;
 if m1<>'' then m1='('+m1+')';  fi;
 Mask=Раб.Бюджет2005.Объединить(Mask,m1,"|");

 if Mask="": Message("Аналитические признаки не требуются"); ^False; fi;
 tmp=ВыборПризнака(Mask);
 if tmp="": ^False; fi;
 Аналит=Раб.Бюджет.ДобавитьПризнак(Аналит,tmp);
 ^false;
end;

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


Func СУММА_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
 Template.HideEditor(False);
 if Проводить then  Return Cur; fi;
 Iter=AsInteger(Template.Frame);
 Расшифровка(Iter);
 Расх=SumOfArray(Расходы[].Сумма);
 Return Cur;
end;

Func sss_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var УслСч,УслАн,Rpt:S;
var Iter:I;
var ДН:Д;
 Template.HideEditor(False);
 УслСч=КД+'.'+Код_Сч_Осн+'.'+КОСГУ;
 Iter=AsInteger(Template.Frame);
 Rpt='"'+PlanVar("Бух")+'\Закл106Т.lst"."Расшифр"';
 ДН=Dat(30,12,Year(Дата_К)-1);
 Report(Rpt,ДН,if(ОстДатаП,ДатаОпер+1,Дата_К),УслСч,АнВУсл(Аналит));
 Return Cur;
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
 if Проводить: ^False; fi;
 InsertFrame(Расходы,Iter+1);
 Return False;
end;

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
 if Проводить: ^False; fi;
 DeleteFrame(Расходы,Iter);
 НеПусто;
 Расх=SumOfArray(Расходы[].Сумма);
 Return False;
end;

--Обработчики событий объектов шаблона-----

Proc Button2_OnClick(Sender: String);
EditorApply;
end;


Proc Button1_OnClick(Sender: String);
EditorApply;
Close;
end;

Proc cbПроводить_OnChange(Sender: String);
var n:i;
 if Проводить:
    Проводить=Проверить(2);
   else
    n=EnqOkCancel("Вы уверены, что хотите исключить документ из обработки ?");
    if n=cmCancel: Проводить=True; fi;
 fi;
 cbПроводить.State=Проводить;
 Оформление;
 EditorApply;
end;

Proc btnРасчет_OnClick(Sender: String);
 if ПроверитьНастр=False: Exit; fi;
 if Расходы[1].Сумма=0: Отобрать; fi;
 Расчет;
end;

Proc btnОтобрать_OnClick(Sender: String);
Отобрать;
end;

--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 FlagInit=True;
 W1.Visible=False ;
 W2.Visible=False ;
end;

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

Proc OnRead;
 if НоваяЗапись: 
    Проводить=False; 
   else
    РазобратьСчета;
 fi;
 НеПусто;
 if not Match(Код_Сч_Расх,Mask_Код_Сч_Расх) then Код_Сч_Расх=Def_Код_Сч_Расх; fi;
 if not Match(Код_Сч_Нал,Mask_Код_Сч_Нал) then Код_Сч_Нал=Def_Код_Сч_Нал; fi;
 if not Match(Код_Сч_Осн,Mask_Код_Сч_Осн) then Код_Сч_Осн=Def_Код_Сч_Осн; fi;
 if ДатаОпер=1.1.100 then ДатаОпер=Сегодня; fi;
 if Дата_К=1.1.100 then Дата_К=Сегодня; fi;
 if not FlagInit: Оформление; fi;
end;



Func Дата_OnVerify(FieldName: String; Iter: Integer; Value: Date):L;
 if Value<>GetVariableD(FieldName) then Очистить; НеПусто; fi;
  Return true ;
end;


Proc cbОстДатаП_OnChange(Sender: String);
 Ост_=-Saldo(КД+'.'+Код_Сч_Осн+'.'+КОСГУ+'{'+АнВУсл(Аналит)+'}',if(ОстДатаП,ДатаОпер+1,Дата_К));
end;


Proc cbНал_OnChange(Sender: String);
  Оформление;
end;


Func OnVerify: Logical;
  СчетНал=КД+'.'+Код_Сч_Нал;
  СчетОсн=КД+'.'+Код_Сч_Осн+'.'+КОСГУ;
  Return True ;
end;


Конец
