-- Шаблон создан мастером бланков
-- 25.07.2002 10:08:43
--
БланкСШаблоном "Многографная карточка";

S1: Section;

var MaxСч:I=30;

Табл01: Section;
Табл02: Section;
Табл03: Section;

Упр:I;

НК:s;

НИ:L;

MM:I;
var MMTxt:S=Месяц(MM);
YYYY:I=[Year(ToDay)];
ДН:D=if(НИ,Dat(1,1,YYYY),Dat(1,MM,YYYY)); -- начало периода
ДК:D=if(MM<12,Dat(1,MM+1,YYYY),Dat(1,1,YYYY+1)); -- конец периода

Учреждение:S;
ОКПО:S;

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

РежимСч:L;

КБК:S;
КОСГУ:S;
Сч:S;
Призн:s;
var НаимПризн:S=if(Name_A(Призн)="" or Name_A(Призн)=" ",Призн,Name_A(Призн));
УслАнДоп:S;

ДебКре:L;
var КорСч_Загл:S=if(ДебКре,"Дебет","Кредит");
var Сч_Загл   :S=if(ДебКре,"Номер счета по кредиту","Номер счета по дебету");

var СчУсл:S=if(РежимСч,Сч,if(КБК="","*",КБК)+"."+Сч+"."+if(КОСГУ="","*",КОСГУ));
АнУсл:S;

КорСч []:S;

ДЖО   []:D;
НЖО   []:S;
Содерж[]:S;
Сум01 []:N;
Сум02 []:N;
Сум03 []:N;
Сум04 []:N;
Сум05 []:N;
Сум06 []:N;
Сум07 []:N;
Сум08 []:N;
Сум09 []:N;
Сум10 []:N;
Сум11 []:N;
Сум12 []:N;
Сум13 []:N;
Сум14 []:N;
Сум15 []:N;
Сум16 []:N;
Сум17 []:N;
Сум18 []:N;
Сум19 []:N;
Сум20 []:N;
Сум21 []:N;
Сум22 []:N;
Сум23 []:N;
Сум24 []:N;
Сум25 []:N;
Сум26 []:N;
Сум27 []:N;
Сум28 []:N;
Сум29 []:N;
Сум30 []:N;
Сумxx []:N;
Ост   []:N;

var ИтогСум01[]:N=SumOfArray(Сум01,Упр);
var ИтогСум02[]:N=SumOfArray(Сум02,Упр);
var ИтогСум03[]:N=SumOfArray(Сум03,Упр);
var ИтогСум04[]:N=SumOfArray(Сум04,Упр);
var ИтогСум05[]:N=SumOfArray(Сум05,Упр);
var ИтогСум06[]:N=SumOfArray(Сум06,Упр);
var ИтогСум07[]:N=SumOfArray(Сум07,Упр);
var ИтогСум08[]:N=SumOfArray(Сум08,Упр);
var ИтогСум09[]:N=SumOfArray(Сум09,Упр);
var ИтогСум10[]:N=SumOfArray(Сум10,Упр);
var ИтогСум11[]:N=SumOfArray(Сум11,Упр);
var ИтогСум12[]:N=SumOfArray(Сум12,Упр);
var ИтогСум13[]:N=SumOfArray(Сум13,Упр);
var ИтогСум14[]:N=SumOfArray(Сум14,Упр);
var ИтогСум15[]:N=SumOfArray(Сум15,Упр);
var ИтогСум16[]:N=SumOfArray(Сум16,Упр);
var ИтогСум17[]:N=SumOfArray(Сум17,Упр);
var ИтогСум18[]:N=SumOfArray(Сум18,Упр);
var ИтогСум19[]:N=SumOfArray(Сум19,Упр);
var ИтогСум20[]:N=SumOfArray(Сум20,Упр);
var ИтогСум21[]:N=SumOfArray(Сум21,Упр);
var ИтогСум22[]:N=SumOfArray(Сум22,Упр);
var ИтогСум23[]:N=SumOfArray(Сум23,Упр);
var ИтогСум24[]:N=SumOfArray(Сум24,Упр);
var ИтогСум25[]:N=SumOfArray(Сум25,Упр);
var ИтогСум26[]:N=SumOfArray(Сум26,Упр);
var ИтогСум27[]:N=SumOfArray(Сум27,Упр);
var ИтогСум28[]:N=SumOfArray(Сум28,Упр);
var ИтогСум29[]:N=SumOfArray(Сум29,Упр);
var ИтогСум30[]:N=SumOfArray(Сум30,Упр);
var ИтогСумxx[]:N=SumOfArray(Сумxx,Упр);

IDt[]:I; --для поиска проводки

ФИОБух:S;
ФИОИсп:S;
ДолжнИсп:S;

var Buf[]:S;
var Buf2[]:S;
var Buf3[]:S;
var Buf4[]:S;
var Buf5[]:S;
var Buf6[]:S;
var Buf7[]:S;

var BufAcc[]:S;
var BufVoc[]:S;
--
--Процедуры и функции -------------
Proc ВнешнийВид;
var n,Col:I;
 for n=7..MaxСч do
  Col=3+n;
  if КорСч[n]<>"":
     Табл01.Column(Col,ColVisible,True);
     Табл02.Column(Col,ColVisible,True);
     Табл03.Column(Col,ColVisible,True);
    else
     Табл01.Column(Col,ColVisible,False);
     Табл02.Column(Col,ColVisible,False);
     Табл03.Column(Col,ColVisible,False);
  fi;
 od;
 if LengthOfArray(КорСч)>MaxСч:
     Табл01.Column(22,ColVisible,True);
     Табл02.Column(22,ColVisible,True);
     Табл03.Column(22,ColVisible,True);
   else
     Табл01.Column(22,ColVisible,False);
     Табл02.Column(22,ColVisible,False);
     Табл03.Column(22,ColVisible,False);
 fi;
end;

Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(КорСч);
 ClearVariable(ДЖО);
 ClearVariable(НЖО);
 ClearVariable(Содерж);
 ClearVariable(Сум01);
 ClearVariable(Сум02);
 ClearVariable(Сум03);
 ClearVariable(Сум04);
 ClearVariable(Сум05);
 ClearVariable(Сум06);
 ClearVariable(Сум07);
 ClearVariable(Сум08);
 ClearVariable(Сум09);
 ClearVariable(Сум10);
 ClearVariable(Сум11);
 ClearVariable(Сум12);
 ClearVariable(Сум13);
 ClearVariable(Сум14);
 ClearVariable(Сум15);
 ClearVariable(Сум16);
 ClearVariable(Сум17);
 ClearVariable(Сум18);
 ClearVariable(Сум19);
 ClearVariable(Сум20);
 ClearVariable(Сум21);
 ClearVariable(Сум22);
 ClearVariable(Сум23);
 ClearVariable(Сум24);
 ClearVariable(Сум25);
 ClearVariable(Сум26);
 ClearVariable(Сум27);
 ClearVariable(Сум28);
 ClearVariable(Сум29);
 ClearVariable(Сум30);
 ClearVariable(Сумxx);
 ClearVariable(Ост);
 ВнешнийВид;
end;

Func СписокКорСчетов(Mask:S):I;
var t,nT,n:i;
var Acc,tmp:S;
 ClearVariable(КорСч);
 ClearVariable(Buf);
 nt=0;
 for Transaction t=Mask,ДН,ДК do
  nt=nt+1;
  if ДебКре: Acc=TransDeb(t); else Acc=TransCre(t); fi;
  tmp=Раб.Бюджет2005.ВзятьКодСчета(Acc,"","СЧ9",False)+"."+Раб.Бюджет2005.ВзятьКодСчета(Acc,"","КБК",False);
  if SearchInArray(Buf,tmp,True)=-1:
     n=InsertInArraySort(Buf,tmp);
     InsertInArray(КорСч,n,Acc);
  fi;
 od;
 ВнешнийВид;
 ^nt;
end;

Proc Расчет;
var Mask,Acc:S;
var t,nt,nAcc,Col:i;
var Сум_:N;
 Очистить;
 nt=0;
 АнУсл=Раб.Бюджет2005.Объединить(Призн,ПризнПодр,"&");
 if not УслАнДоп="": АнУсл=Раб.Бюджет2005.Объединить(АнУсл,"("+УслАнДоп+")","&"); fi;
 Mask=if(ДебКре,"-","+")+СчУсл+"{"+АнУсл+"}";
 ShowProgress(1,"Расчет...");
 Try
  СписокКорСчетов(Mask);
  nAcc=LengthOfArray(КорСч);
  ShowProgress(nAcc,"Расчет...");
  InsertFrame(Упр,Упр+1);
  ДЖО[Упр]=ДН;
  Содерж[Упр]="Остаток на начало периода";
  Ост[Упр]=if(ДебКре,Sep_Cre_Sal(СчУсл+"{"+АнУсл+"}",ДН,""),Sep_Deb_Sal(СчУсл+"{"+АнУсл+"}",ДН,""));
  IDt[Упр]=-1;
  for Transaction t=Mask,ДН,ДК do
   nt=nt+1;
   ProgressPos(nt);
   if ДебКре: Acc=TransDeb(t); else Acc=TransCre(t); fi;
   InsertFrame(Упр,Упр+1);
   ДЖО[Упр]=TransDate(t);
   Содерж[Упр]=TransComment(t);
   Сум_=TransSum(t);
   Col=SearchInArray(КорСч,Acc);
   if Col=01: Сум01[Упр]=Сум_;
     |Col=02: Сум02[Упр]=Сум_;
     |Col=03: Сум03[Упр]=Сум_;
     |Col=04: Сум04[Упр]=Сум_;
     |Col=05: Сум05[Упр]=Сум_;
     |Col=06: Сум06[Упр]=Сум_;
     |Col=07: Сум07[Упр]=Сум_;
     |Col=08: Сум08[Упр]=Сум_;
     |Col=09: Сум09[Упр]=Сум_;
     |Col=10: Сум10[Упр]=Сум_;
     |Col=11: Сум11[Упр]=Сум_;
     |Col=12: Сум12[Упр]=Сум_;
     |Col=13: Сум13[Упр]=Сум_;
     |Col=14: Сум14[Упр]=Сум_;
     |Col=15: Сум15[Упр]=Сум_;
     |Col=16: Сум16[Упр]=Сум_;
     |Col=17: Сум17[Упр]=Сум_;
     |Col=18: Сум18[Упр]=Сум_;
     |Col=19: Сум19[Упр]=Сум_;
     |Col=20: Сум20[Упр]=Сум_;
     |Col=21: Сум21[Упр]=Сум_;
     |Col=22: Сум22[Упр]=Сум_;
     |Col=23: Сум23[Упр]=Сум_;
     |Col=24: Сум24[Упр]=Сум_;
     |Col=25: Сум25[Упр]=Сум_;
     |Col=26: Сум26[Упр]=Сум_;
     |Col=27: Сум27[Упр]=Сум_;
     |Col=28: Сум28[Упр]=Сум_;
     |Col=29: Сум29[Упр]=Сум_;
     |Col=30: Сум30[Упр]=Сум_;
     |True:   Сумxx[Упр]=Сум_;
   fi;
   Ост[Упр]=if(ДебКре,Ост[Упр-1]-Сум_,Ост[Упр-1]+Сум_);
   IDt[Упр]=t;
  od;
  InsertFrame(Упр,Упр+1);
  ДЖО[Упр]=ДК;
  Содерж[Упр]="Остаток на конец периода";
  Ост[Упр]=Ост[Упр-1];
  IDt[Упр]=-1;
 Finally
  CloseProgress;
 end;
 Message("Расчет завершен");
 if nAcc>MaxСч: Message("Недостаточно колонок для отображения корресподирующих счетов ("+Str(nAcc)+")^MКонкретизируйте условие отбора проводок.",mtWarning); fi;
end;

Func Оператор:S;
var n:i;
 ClearVariable(Buf);
 Buf[1]="И";
 Buf[2]="ИЛИ";
 Buf[3]="И ИСКЛЮЧИТЬ";
 n=Alternate("Выбор оператора",Buf,20,1,12);
 if n=1: ^"&";
   |n=2: ^"|";
   |n=3: ^"&~";
 fi;
 ^"";
end;

Func Объединить(Value1:s; Value2:s):S;
var z:s;
 if not Value1="": z=Оператор; else z=""; fi;
 ^Раб.Бюджет2005.Объединить(Value1,Value2,z);
end;
--Процедуры и функции -------------
--
--Обработчики событий объектов--------
Proc btnРасчет_onClick (Obj:S);
 if MM=0: Message("Введите месяц расчета",mtError); Template.Field="MMTxt"; Exit; fi;
 if YYYY=0  : Message("Введите год расчета",mtError); Template.Field="YYYY"; Exit;  fi;
 if Сч="": Message("Не выбран номер счета",mtError); Template.Field="Сч"; Exit; fi;
 Refresh;
 Расчет;
end;

Proc cbНИ_OnChange(Sender: String);
 if EnqOkCancel("Выполнить перерасчет ?",mtConfirmation)=cmCancel: Exit; fi;
 btnРасчет_onClick(Sender);
end;

Proc btnПечать_OnClick(Sender: String);
 Раб.Настр_Печать.Prn('','','Rpo_0511807_000.cfg','',1);
end;

Proc btnЗакрыть_onClick (Obj:S);
 Close;
end;

Proc РежимСч_OnChange(Sender: String);
var bg:i;
 Сч=""; КБК=""; КОСГУ=""; Призн=""; УслАнДоп="";
 bg=if(РежимСч,coTransparent,coTeal);
 S1.Cell(1,4,CellBgColor,bg); S1.Cell(1,4,CellReadOnly,РежимСч);
 S1.Cell(1,6,CellBgColor,bg); S1.Cell(1,6,CellReadOnly,РежимСч);
 Очистить;
end;
--Обработчики событий объектов--------
--Обработчики событий полей--------
Func MMTxt_onEnter (Field:S; Iter:I):L;
var i:I;
 ClearVariable(Buf);
 for i=1..12 do Buf[i]=Месяц(i); od;
 I=Alternate("Выбор месяца расчета",Buf,-1,Mon(ToDay),12);
 if I<>0: MM=I; fi;
 ClearVariable(Buf);
 Очистить;
 ^False;
end;

Func YYYY_onEnter (Field:S; Iter:I):L;
var i:i;
 ClearVariable(Buf);
 for i=1..5 do  Buf[i]=Str(Year(ToDay)+I-4); od;
 i=Alternate("Выбор года расчета",Buf,-1,4,12);
 if I<>0: YYYY=Int(Buf[i]); fi;
 ClearVariable(Buf);
 Очистить;
 ^False;
end;

Func Учреждение_onEnter(FieldName: S; Iter: I): L;
var Rec:Record;
 Rec=OpenCardFile('Контрагент','Наше',nil,crdRecordOnly);
 if Rec=nil: ^False; fi;
 Учреждение=GetCardFieldS('Контрагент',Rec,'КорИмя');
 ОКПО=GetCardFieldS('Контрагент',Rec,'ОКПО');
 ФИОБух=GetCardFieldS('Контрагент',Rec,'ФИОБух');
 ^False;
end;

Func НаимПодр_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=AnaElection("П.*");
 if tmp="": ^False; fi;
 ПризнПодр=tmp;
 Очистить;
 ^False;
end;

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

Func КБК_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
var tmp:S;
 ClearVariable(Buf);
 Buf[1]="ФКР --Классификация расходов";
 Buf[2]="КД --Классификация доходов";
 Buf[3]="КИФД --Классификация источников финансирования дефицитов";
 n=Alternate("Тип классификации",Buf,-1,1,12);
 if n=0: ^False; fi;
 tmp="*."+if(Сч="","?.???.??",Сч)+"."+if(КОСГУ="","*",КОСГУ);
 КБК=Раб.КБК.ВыбратьМаскуКБК(SubStr(Buf[n],1,Pos(" --",Buf[n])-1),tmp,КБК,False);
 Призн="";
 Очистить;
 ^False;
end;

Func КОСГУ_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=if(КБК="","*",КБК)+"."+if(Сч="","?.???.??",Сч)+".*";
 tmp=Раб.КБК.Список(tmp,"","КОСГУ");
 if tmp="": ^False; fi;
 КОСГУ=tmp;
 Призн="";
 Очистить;
 ^False;
end;

Func Сч_onEnter (Field:S;Iter:I):L;
var tmp:s;
 if РежимСч:
    tmp=AccountElection("");
   else
    tmp=if(КБК="","*",КБК)+".?.???.??."+if(КОСГУ="","*",КОСГУ);
    tmp=Раб.КБК.Список(tmp,"","СЧ6 ВД+? ИГ");
    if tmp="": ^False; fi;
    if Match(tmp,"?."): tmp=tmp+"???.??";
      |Match(tmp,"?.???."): tmp=tmp+"??";
    fi;
 fi;
 Сч=tmp;
 Призн="";
 УслАнДоп="";
 Очистить;
 ^False;
end;

Func НаимПризн_onEnter(Field:s;Iter:I):l;
var tmp:s;
 if Сч="": Message("Введите счет",mtError); Template.Field="Сч"; ^False; fi;
 tmp=Раб.Бюджет2005.СписокСправ(СчУсл,0,"");
 tmp=AnaElection(tmp);
 if tmp="": ^False; fi;
 Призн=tmp;
 Очистить;
^False;
end;

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

Func ДебКре_OnEnter(FieldName: String; Iter: Integer): logical;
 if ДебКре: ДебКре=False; else ДебКре=True; fi;
 Очистить;
 ^False;
end;

Func УслАн_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var z:N;
 Try
  z=Saldo("{"+Value+"}",1.1.100);
 Except
  Raise;
  ^False;
 end;
 Return True;
end;

Proc УслАнДоп_OnExit(FieldName: String; Iter: Integer);
 Очистить;
end;

Func УслАн_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp,Field:s;
 Template.HideEditor(False);
 if Сч="": Message("Введите счет",mtError); Template.Field="Сч"; ^Cur; fi;
 Field=AsString(Template.Field);
 tmp=Раб.Бюджет2005.СписокСправ(СчУсл,0,"");
 if not tmp="": tmp=Раб.Бюджет2005.Объединить(tmp,"(~*.*)","|"); fi;
 tmp=AnaElection(tmp);
 if tmp="": ^Cur; fi;
 PutVariableS(Field,Объединить(GetVariableS(Field),tmp));
 if Field="АнУслДоп": Очистить; fi;
 Return  Cur;
end;

Func Проводка (Field: S; Iter: I): L;
 if IDt[Iter]=-1: Message('Строка является итогом. Поиск проводки невозможен'); ^False; fi;
 TransOpenJur(IDt[Iter]);
^False;
end;

Func Сотрудник_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec:Record;
var tmp,FieldName:S;
 Template.HideEditor(Ложь);
 FieldName=AsString(Template.Field);
 Rec=OpenCardFile('Сотрудники',"",nil,crdRecordOnly);
 if Rec=nil: ^Cur; fi;
 tmp=GetCardFieldS('Сотрудники',Rec,'ФАМИЛИЯ')+' '+GetCardFieldS('Сотрудники',Rec,'ИНИЦИАЛЫ');
 if FieldName='ФИОБух': ФИОБух=tmp;
   |FieldName='ФИОИсп' or FieldName='ДолжнИсп': ФИОИсп=tmp; ДолжнИсп=GetCardFieldS('Сотрудники',Rec,'ДОЛЖНОСТЬ.ДОЛЖ');
 fi;
 ^Cur;
end;
--Обработчики событий полей--------
--
--Обработчики событий шаблона---------
Proc AfterOpen(Destroy: Logical);
var bg:i;
 bg=if(РежимСч,coTransparent,coTeal);
 S1.Cell(1,4,CellBgColor,bg); S1.Cell(1,4,CellReadOnly,РежимСч);
 S1.Cell(1,6,CellBgColor,bg); S1.Cell(1,6,CellReadOnly,РежимСч);
 ВнешнийВид;
end;

Proc Template_OnOpen(Create: Logical);
var Rec:Record;
 if Учреждение="": 
    Rec=Раб.Бюджет2005.НашРекв;
    Учреждение=GetCardFieldS("Контрагент",Rec,"КорИмя");
    ОКПО=GetCardFieldS("Контрагент",Rec,"ОКПО");
 fi;
 Раб.Настр_Печать.Cfg('','Rpo_0511807_000.cfg');
end;
--Обработчики событий шаблона---------
--


Конец
