-- Шаблон создан мастером бланков
-- 03.02.2012 17:58:46
--
БланкСШаблоном "Сведения об операциях с целевыми субсидиями", Редактор РПО_СВЕД_СУБС;

var ИНН_КПП:S=Учр.Инн+"/"+Учр.КПП ;
var ОстНа:S="Разрешенный к использованию остаток субсидии прошлых лет на начало "+Год+" года";
var СУМПРЕДГОД_ВСЕГО=SumOfArray(ПОЗИЦИИ[].СУМПРЕДГОД);
var СУМПОСТ_ВСЕГО=SumOfArray(ПОЗИЦИИ[].СУМПОСТ);
var СУМВЫПЛ_ВСЕГО=SumOfArray(ПОЗИЦИИ[].СУМВЫПЛ);
var СУМВДЕБ_ВСЕГО=SumOfArray(ПОЗИЦИИ[].СУМВДЕБ);
var Page:I=1;
var PageS:I=1;
var ДатаДок_:D=ДатаДок;

var ЧислоСтрок:I=[1]; --число подстрок

ДолжнИспФК:S;
ФИОИспФК:S;
ТелИспФК:S;
var Add:S=if(Учитывать,"","+");
var Del:S=if(Учитывать,"","-");
var SelfCfg:S="ТББ.Документы.лбо.Свед_субс.000.cfg";
var SelfBln:S="ДОКУМЕНТЫ.ЛБО.СВЕД_СУБСИДИИ";

S1:Section;
S2:Section;
S3:Section;
S4:Section;
S5:Section;
S6:Section;
S7:Section;
var nS:I=7;
var BufField[]:S;
var BufColorBg[]:I;
var BufColorFo[]:I;
var FlagInit:L;

var freb:L;

Proc Непусто;
  if ПОЗИЦИИ=0:
     InsertFrame(Позиции,1);
  fi;
end;

Proc ЧислоПодстрок;
--Пересчет числа подстрок
var i,j:I;
var tmp:S;
  ЧислоСтрок=1;
  for i=1 to Позиции do
    for j=ЧислоСтрок to 8 do
       tmp=GetVariableS("Позиции["+Str(i)+"].Наим" + if(j-1>0, Str(j-1), ""));
       if trim(tmp)<>"" and ЧислоСтрок<j then ЧислоСтрок=j; fi;
    od;
  od;
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..nS 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 Оформление;
--var НеПервый:Logical;
--  НеПервый= D8Вх <> 0 or D8Вх<>0 or Sto18Вх<>0 or Sum18Вх<>0 or Sto2Вх<>0 or Sum2Вх<>0 or Sum3Вх<>0 or Sto1Вх<>0 or Sum1Вх<>0 ;
--  SНепервый2.Visible=( and not ДополнительныйЛист);
var Obj:Object;
var s,r,rr,c,cc,n,l,bgColor:i;
var Field:S;

--  кнЗаполнение.Enabled=not проводить;
--  S1.Visible=not ДополнительныйЛист;
--  S1a.Visible=ДополнительныйЛист;
--  S4.Visible=not ДополнительныйЛист;
--  S5.Visible=ДополнительныйЛист;
--  S6.Visible=ДополнительныйЛист;
--  SНеПервый_.Visible=ДополнительныйЛист;
--  SНеПервый2.Visible=Page>1 and not ДополнительныйЛист;
  for s=1..nS 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
        Field=asString(Obj.Cell(r,c,CellContents,""));
        n=SearchInArray(BufField,Field,True);
        if not n=-1:
           if not asInteger(Obj.Cell(r,c,CellFieldType,""))=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;
  for n=1..4 do
     if n>ЧислоСтрок then
        S4.Row(n,RowVisible,False);
       else
        S4.Row(n,RowVisible,True);
     fi;
  od;

end;

func Рендер:I;
var tmpL:L;
var res:I;
  Раб.Вспом.Печать2.SelfCfg=SelfCfg;
  Раб.Вспом.Печать2.Инициализация(SelfBln,"S1@S2@S3@S4@S5@S6@S7");

  Раб.Вспом.Печать2.ВывестиСекцию(SelfBln,"S1");
  Раб.Вспом.Печать2.ВывестиСекцию(SelfBln,"S2");
  res=Раб.Вспом.Печать2.ВывестиТаблицу(SelfBln,"S3#3","S4","S5#4@S7#8","S6",-1,"");
  ^res;
end;


Func УчрПолнИмя_OnEnter(FieldName: String; Iter: Integer): logical;
var rec: record;
 if Учр=nil:
    rec=Раб.Документы.ВыборСФильтром("Контрагент","КорИмя","Наше");
   else
    rec=OpenCardFile("Контрагент","Наше",Учр,crdRecordOnly);
 fi;
 if rec=nil: ^False; fi;
 Учр=Rec;
-- Шапка;
 ^False;

end;


Func Учр_Банк_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec:Record;
 if Учр=nil: Message("Выберите учреждение",mtError); Template.Field="УчрПолнИмя"; ^False; fi;
 Rec=OpenCardFile("Банк_Счета","Контрагент="+RecordToString(Учр),Учр_Банк,crdRecordOnly);
 if not Rec=nil:
    Учр_Банк=Rec;
--    Призн_ЛС=РАБ.Бюджет2005.БанкВПризн(Банк);
 fi;
-- Оформление;
 Return False;

end;


Func Add_OnEnter(FieldName: String; Iter: Integer): logical;
  InsertFrame(ПОЗИЦИИ,Iter+1);
  Return  False;
end;


Func Del_OnEnter(FieldName: String; Iter: Integer): logical;
  DeleteFrame(ПОЗИЦИИ,Iter);
  Непусто;
  Return False ;
end;



Func МНОГО_ONTYPE(Sect: String; Row: Integer; Col: Integer; Code: Integer; Cur: String): String;
var NameC,NameN:S;
var i:I;
var Frame:I;
  NameC=AsString(Template.Field);
  Frame=AsInteger(Template.Frame);
 -- If Code=13 then ^Cur; fi;
  if Length(Cur)>=250 or Code=13 then
     i=Length(NameC);
     if ЧислоСтрок<Int(Substr(NameC,i,1))+2 then ЧислоСтрок=Int(Substr(NameC,i,1)) + 2; fi; -- 1 за 0-основу и 1 за инкремент.
     Оформление;
     freb=false;
     NameN="НАИМ"+Str(Int(Substr(NameC,i,1))+1);
     Template.Field=NameN;
     Template.Frame=Frame;
  fi;
  if Length(Cur)=1 and GetVariableS("Позиции["+Str(AsInteger(Template.Frame))+"]."+NameC)<>"" then
     Cur=GetVariableS("Позиции["+Str(AsInteger(Template.Frame))+"]."+NameC);
  fi;
  If Code=13 then 
     Template.Field=NameC;
     Template.Frame=Frame;
     ЧислоПодстрок;
     Оформление;
  fi;
  freb=true;
  Return Cur;
end;

Proc Много_OnExit(FieldName: String; Iter: Integer);
 if freb then ЧислоПодстрок; fi;
 Оформление;
end;


hКОСГУ:S;
Func КОСГУ_OnEnter(FieldName: String; Iter: Integer): logical;
var КОСГУ_:S;
   if not Match(hКОСГУ,ПОЗИЦИИ[iter].КОСГУ+"!"):
      КОСГУ_=ПОЗИЦИИ[iter].КОСГУ+"!";
     else
      КОСГУ_=hКОСГУ;
   fi;
   КОСГУ_=AnaElection("КОСГУ.???!&~КОСГУ.000!",False,False,КОСГУ_);
   if not КОСГУ_="":
      hКОСГУ=КОСГУ_;
      КОСГУ_=SubStr(КОСГУ_,7,3);
      ПОЗИЦИИ[iter].КОСГУ=КОСГУ_;
--      if Раб.Бюджет2005.MatchMask("."+КОСГУ_,Раб.Бюджет2005.МаскаРасхСч): ТипКБК_="10";
--        |Раб.Бюджет2005.MatchMask("."+КОСГУ_,Раб.Бюджет2005.МаскаДоходСч): ТипКБК_="20";
--        |Раб.Бюджет2005.MatchMask("."+КОСГУ_,Раб.Бюджет2005.МаскаДефицитСч): ТипКБК_="31";
--        |True: ТипКБК_="10";
--      fi;
--      Расшифр[Iter].КБК="00000000000000000"+КОСГУ_;
--      Расшифр[Iter].ТипКБК=ТипКБК_;

   fi;

  Return false;
end;


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




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


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


Proc btnPreview_OnClick(Sender: String);
  Рендер;
 -- t=time-t;
 -- Trace(str(t));
  if Sender="btnPrint":
     Раб.Настр_Печать.Prn("Раб.Вспом.Печать2","",Раб.Вспом.Печать2.SelfCfg,"",1);
     Close("Раб.Вспом.Печать2");
    |Sender="btnPreview":
     OpenBlank("Раб.Вспом.Печать2");
  fi;
end;


Proc cbУчитывать_OnChange(Sender: String);
  EditorApply;
  Оформление;
end;

Func ФИО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Field:S;
var Rec:Record;
var v1,v2:S;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 Template.HideEditor(False);
 Rec=OpenCardFile("Сотрудники");
 if not Rec=nil:
    v1=GetCardFieldS("Сотрудники",rec,"ДОЛЖНОСТЬ.Долж");
    v2=GetCardFieldS("Сотрудники",rec,"ФАМИЛИЯ")+" "+GetCardFieldS("Сотрудники",rec,"ИНИЦИАЛЫ");
    if Field="ДолжнРук" or Field="ФИОРук": ФИОРук=v2;
      |Field="ДолжнБух" or Field="ФИОБух": ФИОБух=v2;
      |Field="ДолжнИсп" or Field="ФИОИсп": ДолжнИсп=v1; ФИОИсп=v2;
    fi;
 fi;
 Return Cur;
end;



Конец
