БЛАНКСШАБЛОНОМ "ф.0503176 Сведения о недостачах и хищениях денежных средств и материальных ценностей";

-- Зона авто-идентификации отчета
Ф_ОКУД: STRING = '0503176';
Ф_ИНСТР_КОД: STRING = '191н';
Ф_РЕД_КОД: STRING = '138н';
Ф_ДЕЙСТВ_С: DATE = 01.01.2014;
Ф_ДЕЙСТВ_ПО: DATE = 1.1.100;
-- конец зоны авто-идентификации отчета

2--Общие переменные-----
var ДН:D=РАБ.ПАРАМ_ОТЧ.ДН;
var ДК:D=РАБ.ПАРАМ_ОТЧ.ДК;

var УслВал:S=РАБ.ПАРАМ_ОТЧ.УслВал;
var Вал :S=РАБ.ПАРАМ_ОТЧ.Вал;
var Вал_:S=Вал;
var Показатель:S=РАБ.ПАРАМ_ОТЧ.Показатель;

var ЕдИзм:I=РАБ.ПАРАМ_ОТЧ.ЕдИзм;
var ЕдИзм_:S=if(ЕдИзм=1,Показатель,if(ЕдИзм=1000,"Тыс. "+Показатель,Str(ЕдИзм)+" "+Показатель));
var ОКЕИ:S=РАБ.ПАРАМ_ОТЧ.ОКЕИ;

var Точн:I=РАБ.ПАРАМ_ОТЧ.Точн;

var ОбщУслАн:S=РАБ.ПАРАМ_ОТЧ.ОбщУслАн;
var ОбщУслКД:S=РАБ.ПАРАМ_ОТЧ.ОбщУслКД;
var ОбщУслКР:S=РАБ.ПАРАМ_ОТЧ.ОбщУслКР;
var ОбщУслКИФД:S=РАБ.ПАРАМ_ОТЧ.ОбщУслКИФД;
var ОбщУслБС:S=РАБ.ПАРАМ_ОТЧ.ОбщУслБС;
var ОбщУслВБС:S=РАБ.ПАРАМ_ОТЧ.ОбщУслВБС;

ОбщУслСч:S;

УслСчБС []:S;
УслСчВБС[]:S;
УслАнБС []:S;
УслАнВБС[]:S;

RГ4С010; RГ5С010;
RГ4С011; RГ5С011;
RГ4С012; RГ5С012;
RГ4С013; RГ5С013;
RГ4С020; RГ5С020;
RГ4С021; RГ5С021;
RГ4С040; RГ5С040;
RГ4С050; RГ5С050;
RГ4С061; RГ5С061;
RГ4С062; RГ5С062;
RГ4С063; RГ5С063;

var RГ4С060=RГ4С010+RГ4С020-RГ4С040-RГ4С050;
var RГ5С060=RГ5С010+RГ5С020-RГ5С040-RГ5С050;

var RГ3С010=RГ4С010+RГ5С010;
var RГ3С011=RГ4С011+RГ5С011;
var RГ3С012=RГ4С012+RГ5С012;
var RГ3С013=RГ4С013+RГ5С013;
var RГ3С020=RГ4С020+RГ5С020;
var RГ3С021=RГ4С021+RГ5С021;
var RГ3С040=RГ4С040+RГ5С040;
var RГ3С050=RГ4С050+RГ5С050;
var RГ3С060=RГ4С060+RГ5С060;
var RГ3С061=RГ4С061+RГ5С061;
var RГ3С062=RГ4С062+RГ5С062;
var RГ3С063=RГ4С063+RГ5С063;

var ОтчGUID:S;

var FlagНастр:L;

btnНастр :Object;

Табл1: Section;

var Count:I;

НеУчитЗаклПр:L;
2--Процедуры и функции-----
Proc Настр;
 btnНастр.Caption=if(FlagНастр,"Закрыть настройку","Открыть настройку");
 Табл1.Column(4 ,ColVisible,not FlagНастр);
 Табл1.Column(5 ,ColVisible,not FlagНастр);
 Табл1.Column(6 ,ColVisible,not FlagНастр);
 Табл1.Column(7 ,ColVisible,FlagНастр);
 Табл1.Column(8 ,ColVisible,FlagНастр);
 Табл1.Column(9 ,ColVisible,FlagНастр);
 Табл1.Column(10,ColVisible,FlagНастр);
end;

Proc ПрисвоитьТочность;
var cf:S;
var c,r,rr:i;
 cf=",##0."+if(Точн<1,"",RepStr("0",Точн))+";;-";
 --Основная таблица
 rr=AsInteger(Табл1.RowsCount);
 for c=3..5 do
  for r=1..rr do
   if Match(AsString(Табл1.Cell(r,c,CellContents,"")),"R*"): Табл1.Cell(r,c,CellFormat,cf); fi;
  od;
 od;
end;

Proc Очистить;
 ClearVariable(RГ4С010); ClearVariable(RГ5С010);
 ClearVariable(RГ4С011); ClearVariable(RГ5С011);
 ClearVariable(RГ4С012); ClearVariable(RГ5С012);
 ClearVariable(RГ4С013); ClearVariable(RГ5С013);
 ClearVariable(RГ4С020); ClearVariable(RГ5С020);
 ClearVariable(RГ4С021); ClearVariable(RГ5С021);
 ClearVariable(RГ4С040); ClearVariable(RГ5С040);
 ClearVariable(RГ4С050); ClearVariable(RГ5С050);
 ClearVariable(RГ4С061); ClearVariable(RГ5С061);
 ClearVariable(RГ4С062); ClearVariable(RГ5С062);
 ClearVariable(RГ4С063); ClearVariable(RГ5С063);
end;

Proc Задать_Усл;
 ClearVariable(УслСчБС);
 ClearVariable(УслСчВБС);
 ClearVariable(УслАнБС);
 ClearVariable(УслАнВБС);
 --
 УслСчБС[010]="*.?.209.??.*";
 УслСчБС[020]="+*.?.209.??.*/*.?.401.10.172*";
 УслСчБС[040]="*.?.201.??.*|*.?.304.03.*|*.?.302.01.*/*.?.209.??.*";
 УслСчБС[050]="+*.?.401.10.172*/*.?.209.??.*";
 --
 CopyArray(УслСчБС,УслСчВБС);
end;

Proc ПроверитьНастр;
var n,nn:i;
 nn=Max(LengthOfArray(УслСчБС),LengthOfArray(УслСчВБС));
 for n=1..nn do
  if not УслСчБС[n]="" or not УслСчВБС[n]="": Exit; fi;
 od;
 Задать_Усл;
end;

Func MyTurn(vСтр:I; vГр:I):N;
var res:N;
var УслСч,УслАн:S;
 Count=Count+1;
 ProgressPos(Count);
 if vГр=4: 
    if УслСчБС[vСтр]="": ^0; fi;
    УслСч="("+УслСчБС[vСтр]+")&"+ОбщУслБС;
    if УслАнБС[vСтр]="": УслАн=""; else УслАн="("+УслАнБС[vСтр]+")"; fi;
   |vГр=5: 
    if УслСчВБС[vСтр]="": ^0; fi;
    УслСч="("+УслСчВБС[vСтр]+")&"+ОбщУслВБС;
    if УслАнВБС[vСтр]="": УслАн=""; else УслАн="("+УслАнВБС[vСтр]+")"; fi;
   |True: 
    Trace("Ошибка! Недопустимый номер графы "+Str(vГр)+" строка="+Str(vСтр)); ^0;
 fi;
 УслСч=Раб.Бюджет2005.Объединить(УслСч,ОбщУслСч,"&");
 УслСч=Раб.Бюджет2005.Объединить(УслСч,УслВал,"'");
 УслАн=Раб.Бюджет2005.Объединить(УслАн,ОбщУслАн,"&");
 if НеУчитЗаклПр: УслАн=Раб.Бюджет2005.Объединить(УслАн,Раб.Парам_Отч.ИсклЗакл,"&"); fi;
 if vСтр>12:
    Res=Round(Turn(УслСч+"{"+УслАн+"}",ДН,ДК,Показатель)/ЕдИзм,Точн);
   else
    Res=Round(Saldo(УслСч+"{"+УслАн+"}",ДН,Показатель)/ЕдИзм,Точн);
 fi;
 ^Res;
end;

Proc Расчет;
var ОбщУслКД_,ОбщУслКР_,ОбщУслКИФД_:S;
 ПроверитьНастр;
 ClearTrace(True);
 Очистить;
 ClearVariable(Count);
 ShowProgress(9,"Расчет...");
 Раб.Бюджет2005.РежимМаски="?";
 if not ОбщУслКД="": ОбщУслКД_=Раб.Бюджет2005.ВзятьКодКБК(ОбщУслКД,"КД","КБК",False)+"."+Раб.Бюджет2005.МаскаСч6+"."+Раб.Бюджет2005.ВзятьКодКБК(ОбщУслКД,"КД","КОСГУ",False); else ОбщУслКД_=""; fi;
 if not ОбщУслКР="": ОбщУслКР_=Раб.Бюджет2005.ВзятьКодКБК(ОбщУслКР,"ФКР","КБК",False)+"."+Раб.Бюджет2005.МаскаСч6+"."+Раб.Бюджет2005.ВзятьКодКБК(ОбщУслКР,"ФКР","КОСГУ",False); else ОбщУслКР_=""; fi;
 if not ОбщУслКИФД="": ОбщУслКИФД_=Раб.Бюджет2005.ВзятьКодКБК(ОбщУслКИФД,"КИФД","КБК",False)+"."+Раб.Бюджет2005.МаскаСч6+"."+Раб.Бюджет2005.ВзятьКодКБК(ОбщУслКИФД,"КИФД","КОСГУ",False); else ОбщУслКИФД_=""; fi;
 ОбщУслСч=Раб.Бюджет2005.Объединить(ОбщУслКД_,ОбщУслКР_,"|");
 ОбщУслСч=Раб.Бюджет2005.Объединить(ОбщУслСч,ОбщУслКИФД_,"|");
 if not ОбщУслСч="": ОбщУслСч="("+ОбщУслСч+")"; fi;
 Try
  -- Операции с доходами
  RГ4С010=MyTurn(010,4); RГ5С010=MyTurn(010,5);
  RГ4С011=MyTurn(011,4); RГ5С011=MyTurn(011,5);
  RГ4С012=MyTurn(012,4); RГ5С012=MyTurn(012,5);
  RГ4С013=MyTurn(013,4); RГ5С013=MyTurn(013,5);
  RГ4С020=MyTurn(020,4); RГ5С020=MyTurn(020,5);
  RГ4С021=MyTurn(021,4); RГ5С021=MyTurn(021,5);
  RГ4С040=MyTurn(040,4); RГ5С040=MyTurn(040,5);
  RГ4С050=MyTurn(050,4); RГ5С050=MyTurn(050,5);
  RГ4С061=MyTurn(061,4); RГ5С061=MyTurn(061,5);
  RГ4С062=MyTurn(062,4); RГ5С062=MyTurn(062,5);
  RГ4С063=MyTurn(063,4); RГ5С063=MyTurn(063,5);
 Finally
   CloseProgress;
 End;
 ОтчGUID=РАБ.ПАРАМ_ОТЧ.ОтчGUID;
 Message("Расчет завершен");
end;

Proc Перерасчет(Flag:L);
var Msg:S;
 FlagНастр=False;
 Настр;
 if ДН>ДК: Message("Дата начада периода превышает дату окончания периода",mtError); РАБ.ПАРАМ_ОТЧ.Взять("ДК",0); Exit; fi;
 if ДК=1.1.100: Message("Выберите отчетный период",mtError); РАБ.ПАРАМ_ОТЧ.Взять("ДК",0); Exit; fi;
 if ОбщУслБС="": Message("Выберите условие отбора бюджетных средств",mtError); Template.Field="ОбщУслБС"; Exit; fi;
 if ОбщУслВБС="": Message("Выберите условие отбора внебюджетных средств",mtError); Template.Field="ОбщУслВБС"; Exit; fi;
 if Flag: Msg="Параметры отчета изменились."+Chr(13); else Msg=""; fi;
 if EnqOkCancel(Msg+'Выполнить расчет?'+chr(13)+'Набранные вручную данные будут утеряны!',mtWarning)=CmOk: Расчет; fi;
end;
2--Обработчики событий полей шаблона-----
Func ПарамОтч_onEnter(FieldName: String; Iter: Integer): logical;
var Flag:L;
 if FieldName="ОбщУслБС": FieldName="БС_";
   |FieldName="ОбщУслВБС": FieldName="ВБС_";
 fi;
 Flag=РАБ.ПАРАМ_ОТЧ.Взять(FieldName,0);
 ОтчGUID=ОтчGUID; --Вызываем обновление перменных бланка!!!!
 if Flag or not ОтчGUID=РАБ.ПАРАМ_ОТЧ.ОтчGUID: ПрисвоитьТочность; Перерасчет(True); fi;
 Return False;
end;

Func Расшифр_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Field,УслСч,УслАн,Rpt:S;
var Гр,КодСтр:i;
var p1,p2:i;
var ДН_,ДК_:D;
 Template.HideEditor(false);
 Field=AsString(Template.Field);
 p1=Pos('Г',Field);
 p2=Pos('С',Field);
 Гр=Int(Substr(Field,p1+1,p2-p1-1));
 КодСтр=Int(Substr(Field,p2+1,255));
 if Гр=0 or КодСтр=0: ^Cur; fi;
 if Гр=4:
    if УслСчБС[КодСтр]="": ^Cur; fi;
    УслСч="("+УслСчБС[КодСтр]+")&"+ОбщУслБС;
    if УслАнБС[КодСтр]="": УслАн=""; else УслАн="("+УслАнБС[КодСтр]+")"; fi;
   |Гр=5:
    if УслСчВБС[КодСтр]="": ^Cur; fi;
    УслСч="("+УслСчБС[КодСтр]+")&"+ОбщУслВБС;
    if УслАнВБС[КодСтр]="": УслАн=""; else УслАн="("+УслАнВБС[КодСтр]+")"; fi;
   |True: 
    Trace("Ошибка! Недопустимый номер графы "+Str(Гр)+" строка="+Str(КодСтр)); ^Cur;
 fi;
 if КодСтр>12:
    ДН_=ДН; ДК_=ДК;
   else
    ДН_=1.1.100; ДК_=ДН;
 fi;
 УслСч=Раб.Бюджет2005.Объединить(УслСч,ОбщУслСч,"&");
 УслАн=Раб.Бюджет2005.Объединить(УслАн,ОбщУслАн,"&");
 if НеУчитЗаклПр: УслАн=Раб.Бюджет2005.Объединить(УслАн,Раб.Парам_Отч.ИсклЗакл,"&"); fi;
 if not УслВал="":
    if  УслВал=BaseCurrency: Rpt='"001"'; else Rpt='"003"'; fi;
    Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst".'+Rpt,ДН_,ДК_,УслСч+"'"+УслВал,УслАн);
   else
    Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."001"',ДН_,ДК_,УслСч,УслАн);
 fi;
  ^Cur;
end;


Func УслСч_OnVerify(FieldName: String; Iter: Integer; Value:String): logical;
var Res: N;
var КодСтр,p1,p2:I;
 p1=Pos("[",FieldName);
 p2=Pos("]",FieldName);
 КодСтр=Int(SubStr(FieldName,p1+1,p2-p1-1));
 Try
  if КодСтр>12:
     Res=Turn(Value,1.1.100,1.1.100);
    else
     Res=Saldo(Value,1.1.100);
  fi;
 Except
  Raise;
  ^False;
 end;
 Return True;
end;

Func УслСч_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var FieldName:S;
 FieldName=AsString(Template.Field);
 Cur=Раб.КБК.Список("","","СЧ8 И");
 if Cur="": Template.HideEditor(False); ^Cur; fi;
 Cur="*.?."+Cur;
 if Match(FieldName,"*01*") : 
    Cur=Раб.Бюджет2005.Объединить_Диалог(GetVariableS(FieldName),Cur,"|=ИЛИ;&~=И ИСКЛЮЧИТЬ;_=ЗАМЕНИТЬ","_");
   else
    Cur=Раб.Бюджет2005.Объединить_Диалог(GetVariableS(FieldName),Cur,"|=ИЛИ;&~=И ИСКЛЮЧИТЬ;/=В КОРРЕСПОНДЕНЦИИ;_=ЗАМЕНИТЬ","_");
 fi;
 if Раб.Бюджет2005.HideEditor:
    Try
     if УслСч_OnVerify(FieldName,AsInteger(Template.Frame),Cur):
        Template.HideEditor(False);
        PutVariableS(FieldName,Cur);
     fi;
    Except
    end;
 fi;
 Return  Cur;
end;

Func УслАн_OnVerify(FieldName: String; Iter: Integer; Value:String): logical;
var Res: N;
var КодСтр,p1,p2:I;
 p1=Pos("[",FieldName);
 p2=Pos("]",FieldName);
 КодСтр=Int(SubStr(FieldName,p1+1,p2-p1-1));
 Try
  if КодСтр>12:
     Res=Turn("{"+Value+"}",1.1.100,1.1.100);
    else
     Res=Saldo("{"+Value+"}",1.1.100);
  fi;
 Except
  Raise;
  ^False;
 end;
 Return True;
end;

Func УслАн_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var FieldName,tmp:S;
 FieldName=AsString(Template.Field);
 tmp=SubStr(FieldName,1,3)+"Сч"+SubStr(FieldName,6,255);
 tmp=GetVariableS(tmp);
 tmp=Раб.Формат.ReplaceSubstr(tmp,"/","|");
 tmp=Раб.Формат.ReplaceSubstr(tmp,"+","");
 tmp=Раб.Формат.ReplaceSubstr(tmp,"-","");
 if not tmp="": tmp=Раб.Бюджет2005.СписокСправ(tmp,0,""); fi;
 if not tmp="": tmp="("+tmp+")|~*.*"; fi;
 Cur=AnaElection(tmp);
 if Cur="": Template.HideEditor(False); ^Cur; fi;
 Cur=Раб.Бюджет2005.Объединить_Диалог(GetVariableS(FieldName),Cur,"&=И;|=ИЛИ;&~=И ИСКЛЮЧИТЬ;_=ЗАМЕНИТЬ","_");
 if Раб.Бюджет2005.HideEditor: Template.HideEditor(False); PutVariableS(FieldName,Cur); fi;
 Return  Cur;
end;
2--Обработчики объектов шаблона-----
Proc cbНеУчитЗаклПр_OnChange(Sender: String);
 Перерасчет(False);
end;

Proc btnРасчет_OnClick(Sender: String);
  Перерасчет(False);
end;

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

proc btnОчистить_OnClick(Sender: String);
 FlagНастр=False;
 Настр;
 if EnqOkCancel('Все данные будут очищены. Вы уверены?')=cmOk: Очистить; fi;
end;

Proc btnЗакрыть_OnClick(Sender: String);
  Close;
end;

Proc btnНастр_OnClick(Sender: String);
 if FlagНастр: FlagНастр=False; else FlagНастр=True; fi;
 Настр;
end;

Proc btnСтандарт_OnClick(Sender: String);
 if not FlagНастр: FlagНастр=True; Настр; fi;
 if EnqOkCancel("Восстановить стандартные условия отбора данных ?",mtWarning)=cmCancel: Exit; fi;
 Задать_Усл;
 Message("Стандартные условия восстановлены");
end;

Proc btnЗаписка_OnClick(Sender: String);
 OpenBlank("ОТЧЕТЫ.БАЛАНС.ПОЯСНИТЗАП_0503160",False);
end;
2--Обработчики событий шаблона-----
Proc OnOpen(Create: Logical);
 Раб.Настр_Печать.Cfg("","RPO_0503176_000.cfg");
 ПроверитьНастр;
end;

Proc AfterOpen(Destroy: Logical);
 ПрисвоитьТочность;
 FlagНастр=False;
 Настр;
-- if not ОтчGUID=РАБ.ПАРАМ_ОТЧ.ОтчGUID: Перерасчет(True); fi;
end;

КОНЕЦ
