-- Шаблон создан мастером бланков
-- 05.12.2005 11:02:01
--
БланкСШаблоном "Карточка учета ЛБО. Форма 0504062";

РБС_ПБС:L;

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

НаимРБС:S;
РБС:Record;
ОКПО_РБС:S;

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

НаимБюдж_РБС:S;
ПризнБюдж_РБС:S;

ВидСредств:I;
var ВидСредств_:S=if(ВидСредств=0,"Полученные","Переданные");

НаимПБС:S;
ПБС:Record;
ПризнПБС:S;
ОКПО_ПБС:S;

НаимБюдж_ПБС:S;
ПризнБюдж_ПБС:S;

Упр:I;
НомСч[]:S;
ЛБО_Год[]:N;
ЛБО_Тек[]:N;
Примеч[]:S;

var Итого_ЛБО_Год:N=SumOfArray(ЛБО_Год,Упр);
var Итого_ЛБО_Тек:N=SumOfArray(ЛБО_Тек,Упр);

СчДеб:S;
СчКре:S;
КБК:S;
ДопАн:S;

var УслСч:S;
var УслАн:S;

var Buf[]:S;
--
--Процедуры и функции ------------- 
Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(НомСч);
 ClearVariable(ЛБО_Год);
 ClearVariable(ЛБО_Тек);
 ClearVariable(Примеч);
 ClearVariable(УслСч);
 ClearVariable(УслАн);
end;

Proc Расчет;
var n:i;
var Acc,УслСч_,КБК_:S;
 Очистить;
 УслСч="("+СчДеб+")";
 if not КБК="": 
    КБК_=Раб.Бюджет2005.ВзятьКодКБК(КБК,"ФКР","КБК",False)+"."+Раб.Бюджет2005.МаскаСч6+"."+Раб.Бюджет2005.ВзятьКодКБК(КБК,"ФКР","КОСГУ",False);
   else
    КБК_="";
 fi;
 УслСч=Раб.Бюджет2005.Объединить(УслСч,КБК_,"&");
 УслАн=ПризнПодр;
 if ВидСредств=1: УслАн=Раб.Бюджет2005.Объединить(УслАн,ПризнПБС,"&"); fi;
 УслАн=Раб.Бюджет2005.Объединить(УслАн,if(ДопАн="","","("+ДопАн+")"),"&");
 ShowProgress(0,"Расчет....");
 n=0;
 for Account Acc=УслСч do n=n+1; od;
 Try
  ShowProgress(n,"Расчет....");
  n=0;
  for Account Acc=УслСч,Sort do
   n=n+1;
   ProgressPos(n);
   УслСч_=Раб.Бюджет2005.Объединить(Acc,СчКре,"/");
   if AccountUsed(Acc) and ExistsTransactions(УслСч_+"{"+УслАн+"}",ДНГ,ДК):
      InsertFrame(Упр,Упр+1);
      НомСч[Упр]=Acc;
      ЛБО_Год[Упр]=Turn(УслСч_+"{"+УслАн+"}",ДНГ,ДК);
      ЛБО_Тек[Упр]=Turn(УслСч_+"{"+УслАн+"}",ДН,ДК);
   fi;
  od;
 Finally
  CloseProgress;
 end;
 Message("Расчет завершен");
end;

Proc ВидОперЛБО;
 if РБС_ПБС:
    if ВидСредств=0: 
       СчДеб="*.?.501.15.*";
       СчКре="*.?.501.12.*";
      else 
       СчДеб="*.?.501.12.*";
       СчКре="*.?.501.14.*";
    fi;
   else
    СчДеб="*.?.501.15.*";
    СчКре="*.?.501.13.*";
 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;
 if Value1="" or Value2="":
    ^Раб.Бюджет2005.Объединить(Value1,Value2,"");
   else
    ^Раб.Бюджет2005.Объединить(Value1,Value2,Оператор);
 fi;
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,30,Mon(ToDay));
 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,30,4);
 if I<>0: YYYY=Int(Buf[i]); fi;
 ClearVariable(Buf);
 ВидОперЛБО;
 Очистить;
 ^False;
end;

Func НаимПодр_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=AnaElection("П!");
 if tmp="": ^False; fi;
 ПризнПодр=tmp;
 Return False;
end;

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

Func НаимРБС_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
var tmp: S;
 if ВидСредств=0:
    Rec=OpenCardFile("Контрагент","",РБС,crdRecordOnly);
   else
    Rec=OpenCardFile("Контрагент","Наше",РБС,crdRecordOnly);
 fi;
 if Rec=nil: ^False; fi;
 РБС=Rec;
 НаимРБС=GetCardFieldS("Контрагент",Rec,"КорИмя");
 ОКПО_РБС=GetCardFieldS("Контрагент",Rec,"ОКПО");
 Return False;
end;

Proc НаимРБС_OnExit(FieldName: String; Iter: Integer);
 РБС=nil;
 ОКПО_РБС="";
end;

Func НаимПБС_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
var tmp: S;
 if ВидСредств=0:
    Rec=OpenCardFile("Контрагент","Наше",ПБС,crdRecordOnly);
    if Rec=nil: ^False; fi;
    ПБС=Rec;
    НаимПБС=GetCardFieldS("Контрагент",Rec,"КорИмя");
    ПризнПБС="";
    ОКПО_ПБС=GetCardFieldS("Контрагент",Rec,"ОКПО");
   else
    tmp=AnaElection("ПБС");
    if tmp="": ^False; fi;
    ПБС=nil;
    НаимПБС=Name_A(tmp);
    if НаимПБС=" " or НаимПБС="": НаимПБС=tmp; fi;
    ПризнПБС=tmp;
    Rec=SignToRecord(ПризнПБС);
    if Rec=nil: ОКПО_ПБС=""; else ОКПО_ПБС=GetCardFieldS("Контрагент",Rec,"ОКПО"); fi;
    Очистить;
 fi;
 Return False;
end;

Proc НаимПБС_OnExit(FieldName: String; Iter: Integer);
 ПБС=nil;
 ПризнПБС="";
 ОКПО_ПБС="";
end;

Func ВидСредств_OnEnter(FieldName: String; Iter: Integer): logical;
var n:I;
var Store:I;
 Store=ВидСредств;
 ClearVariable(Buf);
 Buf[1]="Полученные";
 if РБС_ПБС: Buf[2]="Переданные"; fi;
 n=Alternate("Вид средств",Buf,-1,1,12);
 if n=0: ^False; fi;
 ВидСредств=n-1;
 if not Store=ВидСредств:
    Очистить;
    НаимРБС="";
    НаимПБС="";
    НаимРБС_OnExit(FieldName,Iter);
    НаимПБС_OnExit(FieldName,Iter);
    ВидОперЛБО;
 fi;
 Return False;
end;

Func Сч_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var Ret:N;
 Try
  Ret=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:S;
 Template.HideEditor(False);
 tmp=Раб.КБК.Список("*.?.501.??.*","ФКР","СЧ6");
 if tmp="": ^Cur; fi;
 tmp="*."+tmp+".*";
 СчДеб=Объединить(СчДеб,tmp);
 Return  Cur;
end;

Func СчКре_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:S;
 Template.HideEditor(False);
 tmp=Раб.КБК.Список("*.?.501.??.*","ФКР","СЧ6");
 if tmp="": ^Cur; fi;
 tmp="*."+tmp+".*";
 СчКре=Объединить(СчКре,tmp);
 Return  Cur;
end;

Func КБК_OnEnter(FieldName: String; Iter: Integer): logical;
 if СчДеб="": Message("Введите условие отбора счетов",mtError); Template.Field="СчДеб"; ^False;  fi;
 КБК=Раб.КБК.ВыбратьМаскуКБК("ФКР",СчДеб,КБК,True);
 Return False;
end;

Proc КБК_OnExit(FieldName: String; Iter: Integer);
 Очистить;
end;

Func ДопАн_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var Ret:N;
 Try
  Ret=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:S;
 Template.HideEditor(False);
 tmp=AnaElection(tmp);
 if tmp="": ^Cur; fi;
 ДопАн=Объединить(ДопАн,tmp);
 Return Cur;
end;

Func ЛБО_Год_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var УслСч_:S;
var Iter:I;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 УслСч_=Раб.Бюджет2005.Объединить(НомСч[Iter],СчКре,"/");
 Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."001"',ДНГ,ДК,УслСч_,УслАн);
 Return Cur;
end;

Func ЛБО_Тек_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var УслСч_:S;
var Iter:I;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 УслСч_=Раб.Бюджет2005.Объединить(НомСч[Iter],СчКре,"/");
 Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."001"',ДН,ДК,УслСч_,УслАн);
 Return Cur;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc rbРБС_ПБС_onChange(Sender: String);
 Очистить;
 НаимРБС="";
 НаимПБС="";
 НаимРБС_OnExit(Sender,0);
 НаимПБС_OnExit(Sender,0);
 if not РБС_ПБС: ВидСредств=0; fi;
 ВидОперЛБО;
end;

Proc btnРасчет_OnClick(Sender: String);
 if MM=0: Message("Введите месяц расчета !",mtError); Template.Field="MMTxt"; Exit; fi;
 if YYYY=0  : Message("Введите год расчета!",mtError); Template.Field="YYYY"; Exit;  fi;
 if ВидСредств=1 and ПризнПБС="": Message("Введите получателя средств бюджета",mtError); Template.Field="НаимПБС"; Exit; fi;
 if СчДеб="": Message("Введите условие отбора счетов",mtError); Template.Field="СчДеб"; Exit;  fi;
 Расчет;
end;

Proc tbnПечать_OnClick(Sender: String);
 Раб.Настр_Печать.Prn('','','Rpo_0504062_000.cfg','',1);
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 Раб.Настр_Печать.Cfg('','Rpo_0504062_000.cfg');
 ВидОперЛБО;
end;
--Обработчики событий шаблона -----
--

Конец
