-- Шаблон создан мастером бланков
-- 27.09.2006 11:52:56
--
БланкСШаблоном "Отчет по кассе в разрезе КБК";

СверткаКОСГУ:L;

ДН:D;
ДК:D;

ВД:S;
ВД_:S;

Призн:S;

var МаскаСч:S="*."+ВД+".201.34.*";
var МаскаСправ:S;


var Упр:I;
var пп[]:I=$;
var КБК[]:S;
var ОстН[]:N;
var Прих[]:N;
var Расх[]:N;
var ОстК[]:N=ОстН[$]+Прих[$]-Расх[$];
var RepСч[]:S;
var RepАн[]:S;
var Key[]:S;

var ВсегоОстН:N=SumOfArray(ОстН,Упр);
var ВсегоПрих:N=SumOfArray(Прих,Упр);
var ВсегоРасх:N=SumOfArray(Расх,Упр);
var ВсегоОстК:N=SumOfArray(ОстК,Упр);

var Buf[]:S;
--
--Процедуры и функции -------------
Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(КБК);
 ClearVariable(ОстН);
 ClearVariable(Прих);
 ClearVariable(Расх);
 ClearVariable(RepСч);
 ClearVariable(RepАн);
 ClearVariable(Key);
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 Расчет;
var n,nn,z:i;
var УслСч,УслАн,Призн_,ПризнКОСГУ,ПризнФКР,ПризнКД,ПризнКИФД,БК,КОСГУ,tmp:S;
var ОстН_,Прих_,Расх_:N;
var FlagErr:L;
 FlagErr=False;
 Очистить;
 УслСч=МаскаСч;
 Призн_=if(Призн="","","("+Призн+")");
 Раб.Свертка.РазрешитьПрогресс=True;
 Раб.Свертка.ЗакрыватьПрогресс=False;
 Раб.Свертка.МножительПрогресса=2;
 Раб.Свертка.ПозицияПрогресса=1;
 Раб.Свертка.СообщениеПрогресса="Расчет...";
 Раб.Свертка.ВыполнитьОбновление=True;
 Раб.Свертка.ДН=1.1.100;
 Раб.Свертка.ДК=ДК;
 Раб.Свертка.УслСч=УслСч;
 Раб.Свертка.УслАн=Раб.Бюджет2005.Объединить("(ФКР.*|КД.*|КИФД.*|КОСГУ.*)",Призн_,"&");
 Раб.Свертка.Расщепление=TujRepBalAccount+TujRepNoNullBal+TujRepZabalance+TujRepCombinedAna;
 Раб.Свертка.МаскаСправ="ФКР.*|КД.*|КИФД.*|КОСГУ.*";
 Раб.Свертка.ПолнСоотвМаскеСправ=False;
 Раб.Свертка.spМаскаСправ="|";
 Раб.Свертка.ИсключитьСправ="";
 Раб.Свертка.ПорядокПоМаскеСправ=False;
 Раб.Свертка.РазрешитьСинтетику=True;
 Раб.Свертка.РазрешитьАналитику=True;
 nn=Раб.Свертка.Расчет;
 ShowProgress(nn,"Расчет....");
 Try
  for n=1..nn do
   ProgressPos(nn+n);
   ПризнКОСГУ=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске (Раб.Свертка.Список_Ан[n]," ","КОСГУ.*","");
   ПризнФКР=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске (Раб.Свертка.Список_Ан[n]," ","ФКР.*","");
   ПризнКД=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске (Раб.Свертка.Список_Ан[n]," ","КД.*","");
   ПризнКИФД=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске (Раб.Свертка.Список_Ан[n]," ","КИФД.*","");
   if not ПризнФКР="" and not ПризнКД="" and not ПризнКИФД="": FlagErr=True; fi;
   УслАн=Призн_;
   if not ПризнФКР="" : УслАн=Раб.Бюджет2005.Объединить(УслАн,ПризнФКР+"&~КД.*&~КИФД.*","&"); БК=SubStr(ПризнФКР,5,255);
     |not ПризнКД=""  : УслАн=Раб.Бюджет2005.Объединить(УслАн,ПризнКД+"&~ФКР.*&~КИФД.*","&"); БК=SubStr(ПризнКД,4,255);
     |not ПризнКИФД="": УслАн=Раб.Бюджет2005.Объединить(УслАн,ПризнКИФД+"&~КД.*&~ФКР.*","&"); БК=SubStr(ПризнКД,6,255);
     |True: УслАн=Раб.Бюджет2005.Объединить(УслАн,"~КД.*&~ФКР.*&~КИФД.*","&"); БК="";
   fi;
   if СверткаКОСГУ and not ПризнКОСГУ="": ПризнКОСГУ=SubStr(ПризнКОСГУ,1,9)+"!"; fi;
   if ПризнКОСГУ="":
      УслАн=Раб.Бюджет2005.Объединить(УслАн,"~КОСГУ.*","&");
     else
      УслАн=Раб.Бюджет2005.Объединить(УслАн,ПризнКОСГУ,"&");
   fi;
   if not ПризнКОСГУ="": КОСГУ=SubStr(ПризнКОСГУ,7,if(СверткаКОСГУ,3,255)); else КОСГУ=""; fi;
   ОстН_=Round(Saldo(УслСч+"{"+УслАн+"}",ДН),2);
   Прих_=Round(Turn("+"+УслСч+"{"+УслАн+"}",ДН,ДК),2);
   Расх_=Round(Turn("-"+УслСч+"{"+УслАн+"}",ДН,ДК),2);
   if not ОстН_=0 or not Прих_=0 or not Расх_=0:
      tmp=Раб.Бюджет2005.Объединить(БК,КОСГУ,".");
      z=SearchInArray(Key,tmp,True);
      if z=-1:
         z=InsertInArraySort(Key,tmp);
         InsertFrame(Упр,z);
         КБК[z]=tmp;
         ОстН[z]=ОстН_;
         Прих[z]=Прих_;
         Расх[z]=-Расх_;
         RepСч[z]=УслСч;
         RepАн[z]=УслАн;
     fi;
   fi;
  od;
 Finally
  CloseProgress;
 end;
 if FlagErr: Trace("Ошибка. В проводках обнаружены признаки с одной ролью"); fi;
 Message("Расчет завершен");
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Proc Д_OnExit(FieldName: String; Iter: Integer);
 Очистить;
end;

Func Д_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Field:S;
var tmp:D;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 tmp=Calendar(GetVariableD(Field));
 if tmp=1.1.100: ^Cur; fi;
 PutVariableD(Field,tmp);
 Очистить;
 Return Cur;
end;

Func ВД_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=Раб.КБК.Список("","","ВД+?");
 if tmp="": ^False; fi;
 ВД=tmp;
 if ВД="?":
    tmp="Все виды деятельности";
   else
    tmp=Раб.Бюджет.НаимКБК("СЧ",ВД);
 fi;
 ВД_="Вид деятельности: "+tmp+" ("+ВД+")";
 МаскаСправ=Раб.Бюджет2005.СписокСправ(МаскаСч,0,"");
 МаскаСправ=if(not МаскаСправ="","("+МаскаСправ+")|","")+"(~*.*)";
 Призн="";
 Очистить;
 ^False;
end;

Proc ВД_OnExit(FieldName: String; Iter: Integer);
 ВД="?";
 ВД_="Вид деятельности: Все виды деятельности (?)";
end;


Func Призн_OnVerify(FieldName: String; Iter: Integer; Value: S): Logical;
var z:n;
 Try
  z=Saldo("{"+Value+"}",1.1.100);
 Except
  if ErrorCode<>23759:
     Raise;
    else
     Message("Недопустимо использовать '+' или '-' в данном условие отбора счетов !",mtError);
  fi;
  ^False;
 end;
 ^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(МаскаСправ);
 if tmp="": ^Cur; fi;
 Призн=Объединить(Призн,tmp);
 Очистить;
 ^Cur;
end;

Func OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter,n:I;
var Field,УслСч,УслАн,Rep:S;
var ДН_,ДК_:D;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 УслСч=RepСч[Iter];
 УслАн=RepАн[Iter];
 ДН_=ДН; ДК_=ДК;
 if Field="ОстН": ДН_=1.1.100; ДК_=ДН;
   |Field="Прих": УслСч="+"+УслСч;
   |Field="Расх": УслСч="-"+УслСч;
   |Field="ОстК":
   |True: ^Cur;
 fi;
 ClearVariable(Buf);
 Buf[1]="Расшифровка по дням";
 Buf[2]="Расшифровка по проводкам";
 n=Alternate("Уточняющий отчет",Buf,25);
 if n=0: ^Cur; fi;
 if n=1: Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."000"',ДН_,ДК_,УслСч,УслАн);
   |n=2: Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."001"',ДН_,ДК_,УслСч,УслАн);
 fi;
 Return Cur;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_OnClick(Sender: String);
 if ДН=1.1.100: Message("Введите начальную дату периода",mtError); Template.Field="ДН"; Exit; fi;
 if ДК=1.1.100: Message("Введите конечную дату периода",mtError); Template.Field="ДК"; Exit; fi;
 if ДН>=ДК: Message("Начальная дата превышает конечную",mtError); Template.Field="ДН"; Exit; fi;
 if ВД="": Message("Введите вид деятельности",mtError); Template.Field="ВД_"; Exit; fi;
 Расчет;
end;

Proc btnПечать_OnClick(Sender: String);
 Раб.Настр_Печать.Prn('','','РПО.ОТЧЕТЫ.СПРАВКИ.КАССА_КБК.000.cfg','',1);
end;

Proc cbСверткаКОСГУ_OnChange(Sender: String);
 btnРасчет_OnClick(Sender);
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 МаскаСправ=Раб.Бюджет2005.СписокСправ(МаскаСч,0,"");
 МаскаСправ=if(not МаскаСправ="","("+МаскаСправ+")|","")+"(~*.*)";
 Раб.Настр_Печать.Cfg('','РПО.ОТЧЕТЫ.СПРАВКИ.КАССА_КБК.000.cfg');
end;
--Обработчики событий шаблона -----
--

Конец
