-- Шаблон создан мастером бланков
-- 09.06.2010 12:43:26
--
БланкСШаблоном "Реестр депонированных сумм", Редактор РПО_РЕЕСТР_ДЕПОНЕНТ;

Спр_НомВ:String=["НОМВЕД.*"];


MaskДеб:S="*302.*";
MaskКре:S="*304.*";
DefДеб:S="302.11.830";
DefКре:S="304.02.730";
var НоваяЗапись:L=(CurrentState=crdusInserted);
var Дата_:D=Дата;
var Период_:S=Name_A(ПериодПр);
АнДуб:L;
var АнДуб_:S=if(АнДуб,"Дублировать", "Не дублировать");
СчДуб:L;
var СчДуб_:S=if(СчДуб,"Дублировать", "Не дублировать");


S1:Section;
S2:Section;
S3:Section;
S4:Section;
cbПроводить:Object;
btnНастр:Object;

var BufField[]:S;
var BufColorBg[]:I;
var BufColorFo[]:I;
var FlagInit:L;
var Add:S=if(Проводить,"","+");
var Del:S=if(Проводить,"","-");
var Аналит_[]:S=Позиции[$].Аналит;
var Итого=SumOfArray(Позиции[].Сумма);
var ВД[]:S=Substr(Позиции[$].СчДеб,22,1);
var КБК[]:S=Substr(Позиции[$].СчДеб,1,20);
var Настр:L;

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

proc РазобратьСчета;
  ЗаписьполяSChk("СчДебКод",Раб.Бюджет2005.ВЗЯТЬКОДСЧЕТА(Позиции[1].СЧДеб,"ФКР","СЧ8",False));
  ЗаписьполяSChk("СчКреКод",Раб.Бюджет2005.ВЗЯТЬКОДСЧЕТА(Позиции[1].СЧКре,"ФКР","СЧ8",false));
end;



2Func0 ВзятьПериодПоДате(dd:d;ТочностьПериода:s):s; 
--ТочностьПериода: гг - год, кв - квартал, мм - месяц
--ТочностьПериода пусто => с максимальной точностью!
var ii:i;
var ss:s;
 ss='ПЕРИОД.'+str(год(dd));
 if ТочностьПериода='гг':^ss;fi;
 ii=мес(dd);
 if ii<4 :ss=ss+'.1';
  | ii<7 :ss=ss+'.2';
  | ii<10:ss=ss+'.3';
  | ii<13:ss=ss+'.4';
 fi;
 if ТочностьПериода='кв':^ss;fi;
 if ii<10:ss=ss+'.0'+str(ii);
  | true :ss=ss+'.' +str(ii);
 fi;
 if ТочностьПериода='мм':^ss;fi;
  ^ss;
2End0;

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Настр.Visible=not Настр;
 cbПроводить.Visible=not Настр;
 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;

func ПроверитьНастр:L;
^True;
end;

Func Проверить:L;
var Iter:I;
var РасхСумм:N;
 if not ПроверитьНастр then ^False; fi;
 if Дата=1.1.100 then Message('Введите дату реестра',mtError); Template.Field='Дата'; ^False; fi;
 if not Match(СчДебКод,MaskДеб) then Message('Проверьте правильность заполнения счета дебета',mtError); Template.Field='СчДебКод'; ^False; fi;
 if not Match(СчКреКод,MaskКре) then Message('Проверьте правильность заполнения счета кредита',mtError); Template.Field='СчКреКод'; ^False; fi;
 Раб.Кса.Начать;
 for Iter=1 to Позиции do
   if Позиции[Iter].СчДеб="" or Позиции[Iter].СчКре="" then
      Message('Выберите Код бюджетной классификации',mtError);
      Template.Name='S3'; Template.Field="КБК"; Template.Frame=Iter; ^False;
   fi;
   Раб.КСА.Добавить(Позиции[Iter].СЧКРЕ);   Раб.КСА.Добавить(Позиции[Iter].СЧДеб);
 od;
 if Раб.КСА.Закончить(False):  Refresh; fi;
 РАБ.БЮДЖЕТ.ПроверитьПризнакиНачать;
 for Iter=1 to Позиции do
   if not Correspond(Позиции[Iter].СчДеб,Позиции[Iter].СчКре): Message("Счета не могут корреспондировать "+Позиции[Iter].СчДеб+"/"+Позиции[Iter].СчКре,mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
   if РАБ.БЮДЖЕТ.ПроверитьПризнакиОбязательные(Позиции[Iter].СчДеб,Позиции[Iter].СчКре,Позиции[Iter].Аналит,"ПЕРИОД.*")=False: 
      Template.Name='S3'; Template.Field="Аналит_"; Template.Frame=Iter; ^False; 
   fi;
   if РАБ.БЮДЖЕТ.ПроверитьПризнакиСвязанные(Позиции[Iter].СчДеб,Позиции[Iter].СчКре,Позиции[Iter].Аналит,"ПЕРИОД.*")=False: 
      Template.Name='S3'; Template.Field="Аналит_"; Template.Frame=Iter; ^False; 
   fi;
 od;
 ^True;
end;


Proc Непусто;
  if Позиции=0 then InsertFrame(Позиции,Позиции+1); fi;
end;

Proc ПоляПоАн(Ан:S;Iter:I);
var i:I;
var tmpE:S;
  for i=1..WordsCount(Ан," ") do
    tmpE=ExtractWord(i,Ан," ");
    if Match(tmpE,"П.*"):
       Позиции[Iter].Подр=Name_A(tmpE);
    fi;
    if Match(tmpE,Спр_НомВ):
       Позиции[Iter].НомВед=Substr(tmpE,Length(Спр_НомВ),255);
    fi;
    if Match(tmpE,"Ф.*"):
       Позиции[Iter].ТабНом=Substr(tmpE,3,255);
       Позиции[Iter].ФИО=Name_A(tmpE);
    fi;

  od;
end;

Proc ВыбАналит(Mask:S;Iter:I);
var tmp:S;
var tmpE:S;
var tmpE1:S;

 if Iter<> 0 then
    tmp=Позиции[Iter].Аналит;
 fi;
 if WordsCount(Mask," ")>1 then tmpE=""; else tmpE=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(tmp," ",Mask,""); fi;
 tmpE=AnaElection(Mask,False,False,tmpE);
 tmp=Раб.Бюджет.ДобавитьПризнак(tmp,tmpE);
 if Iter<> 0 then
    ПоляПоАн(tmpE,Iter);
    Позиции[Iter].Аналит=tmp;
 fi;
end;

Func Подр_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
  template.hideeditor(False);
  ВыбАналит("П.*",AsInteger(Template.Frame));
  Return "";-- Name_A(t);
end;


Func НомВед_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
  template.hideeditor(False);
  ВыбАналит(Спр_НомВ,AsInteger(Template.Frame));
  Return "";-- Name_A(t);
end;


Func ФИО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
  template.hideeditor(False);
  ВыбАналит("Ф.*",AsInteger(Template.Frame));
  Return "";-- Name_A(t);
end;


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


Func Аналит_OnEnter(FieldName: String; Iter: Integer): logical;
var m:S;
 m=Раб.Бюджет.НаборПризнаков("*."+СчДебКод+"!","*."+СчКреКод+"!","ПЕРИОД.*");
 if m<>'' then
   ВыбАналит(m,Iter);
 fi;
 Return False ;
end;

Func СчКод_OnEnter(FieldName: String; Iter: Integer): logical;
var mask,tmp:S;
  mask=GetVariableS('Mask'+SubStr(FieldName,3,3));
  tmp=Раб.КБК.Список(mask,"","СЧ8 И");
  if tmp<>"" then PutVariableS(FieldName,tmp); fi;
  Return False  ;
end;


Func Add_OnEnter(FieldName: String; Iter: Integer): logical;
  if not Проводить then
     InsertFrame(Позиции,Iter+1);
     if АнДуб then
        Позиции[Iter+1].Аналит=Позиции[Iter].Аналит;
        ПоляПоАн(Позиции[Iter+1].Аналит,Iter+1);
       else
        if ПодрО<>"" and ПодрПр<>"" then
           Позиции[Iter+1].Аналит=ПодрПр;
        fi;
     fi;
     if СчДуб then
        Позиции[Iter+1].СчДеб=Позиции[Iter].СчДеб;
     fi;
  fi;
  Return False;
end;


Func Del_OnEnter(FieldName: String; Iter: Integer): logical;
  if not Проводить then
     DeleteFrame(Позиции,Iter);
     НеПусто;
  fi;
  Return False ;
end;

Func ПодрО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmpE:S;
  template.hideeditor(False);
  tmpE=ПодрПр;
  tmpE=AnaElection("П.*",False,False,tmpE);
  if tmpE<>'' then
     ПодрПр=tmpE;
     ПодрО=Name_A(tmpE);

  fi;
  Return "";-- Name_A(t);
end;


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


Func КБК_OnEnter(FieldName: String; Iter: Integer): logical;
var КБК_,tmp:S;
  tmp="ФКР.*";
  КБК_=AnaElection(tmp,False,False,"Фкр."+КБК[Iter]);
  if Позиции[Iter].СчДеб<>"" then
     Позиции[Iter].СчДеб=Substr(КБК_,5,255)+"."+Substr(Позиции[$].СчДеб,22,1)+"."+СчДебКод;
     Позиции[Iter].СчКре=Substr(КБК_,5,255)+"."+Substr(Позиции[$].СчДеб,22,1)+"."+СчКреКод;
    else
     tmp=Раб.КБК.Список("","","ВД");
     if tmp<>"" then
        Позиции[Iter].СчДеб=Substr(КБК_,5,255)+"."+tmp+"."+СчДебКод;
        Позиции[Iter].СчКре=Substr(КБК_,5,255)+"."+tmp+"."+СчКреКод;
     fi;
  fi;
  Return False;
end;


Proc OnOpen(Create: Logical);
 FlagInit=True;
end;

Proc AfterOpen(Destroy: Logical);
 РАБ.НАСТР_ПЕЧАТЬ.Cfg("","ТББ.ДОКУМЕНТЫ.КАССА.РЕЕСТР_ДЕП.000.cfg"); -- настройка печати
 Инициализация;
 Оформление;
 FlagInit=False;
end;

Proc OnRead;
 if НоваяЗапись: 
    Проводить=False; 
 fi;
 НеПусто;
 if not Match(СчДебКод,MaskДеб) then СчДебКод=DefДеб; fi;
 if not Match(СчКреКод,MaskКре) then СчКреКод=DefКре; fi;
 if Дата=1.1.100 then Дата=Сегодня;  ПериодПр=ВзятьПериодПоДате(Дата,""); fi;

 if not FlagInit: Оформление; fi;
end;


Func УчрКоримя_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec:Record;
 Rec=OpenCardFile("Контрагент","Наше",Учр,crdRecordOnly);
 if not Rec=nil:
    Учр=Rec;
 fi;
 Return False;
end;


Proc УчрКоримя_OnExit(FieldName: String; Iter: Integer);
  Учр=nil;
end;

Func Период_OnEnter(FieldName: String; Iter: Integer): logical;
var tmpE:S;
  template.hideeditor(False);
  tmpE=ПериодПр;
  tmpE=AnaElection("ПЕРИОД.*",False,False,tmpE);
  if tmpE<>'' then
     ПериодПр=tmpE;
  fi;
  Return False  ;
end;



Proc Дата_OnExit(FieldName: String; Iter: Integer);
  ПериодПр=ВзятьПериодПоДате(Дата,"");
end;


Func ВД_OnEnter(FieldName: String; Iter: Integer): logical;
var КБК_,mask,tmp:S;
--  mask=GetVariableS('Mask'+SubStr(FieldName,3,3));
  tmp=Раб.КБК.Список("","","ВД");
  if tmp<>"" then 
  if Позиции[Iter].СчДеб<>"" then
     Позиции[Iter].СчДеб=Substr(Позиции[iter].СчДеб,1,20)+"."+tmp+"."+СчДебКод;
     Позиции[Iter].СчКре=Substr(Позиции[iter].СчКре,1,20)+"."+tmp+"."+СчКреКод;
    else
     mask="ФКР.*";
     КБК_=AnaElection(mask,False,False,"");
     if tmp<>"" then
        Позиции[Iter].СчДеб=Substr(КБК_,5,255)+"."+tmp+"."+СчДебКод;
        Позиции[Iter].СчКре=Substr(КБК_,5,255)+"."+tmp+"."+СчКреКод;
     fi;
  fi;

  fi;
  Return False  ;
end;


Proc ВД_OnExit(FieldName: String; Iter: Integer);
  Позиции[Iter].СчДеб="";Позиции[Iter].СчКре="";
end;


Proc btnНастр_OnClick(Sender: String);
  Настр=not Настр;
  Оформление;
end;


Proc Закрытьнастройку_OnClick(Row: Integer; Col: Integer; Double: Logical);
  Настр=not Настр;
  Оформление;

end;

Func НомВед_С_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
  tmp=GetVariableS(FieldName);
  tmp=AnaElection("*",True,True,tmp);
  if tmp<>"" then  PutVariableS(FieldName,tmp+".*"); fi;
  Return False ;
end;



Proc btnПечать_OnClick(Sender: String);
  РАБ.НАСТР_ПЕЧАТЬ.Prn("","","ТББ.ДОКУМЕНТЫ.КАССА.РЕЕСТР_ДЕП.000.cfg","",1);
end;


Func АнДуб_OnEnter(FieldName: String; Iter: Integer): logical;
  АнДуб=not АнДуб;
  Return  False;
end;


Func СчДуб_OnEnter(FieldName: String; Iter: Integer): logical;
  СчДуб=not СчДуб;
  Return  False;
end;


Конец

