-- Шаблон создан мастером бланков
-- 19.09.2014 16:04:29
--
БланкСШаблоном "Отчет по исполнительным документа";

var ДК:D=[ToDay];
var ДН:D=Dat(1,1,Year(ДК-1));

var ПризнДоп:S;

var МаскаСч:S="*.1.502.11.*|*.?.506.10.*|*.1.304.05.*|*.?.201.11.*|*.?.201.21.*|*.?.302.??.*";

var Упр:I;
var пп[]:i=$;
var ДатВх[]:D;
var Наим[]:S;
var Ном[]:S;
var Дат[]:D;
var Сум[]:N;
var Дат1[]:D;
var Дат2[]:D;
var Контр[]:S;
var СумБО[]:N;
var СумКЗ[]:N;
var СумОпл[]:N;
var СумЗКР[]:N;
var ДатОпл[]:D;
var ОстКЗ[]:N=СумКЗ[$]-СумОпл[$];
var ОстБО[]:N=СумБО[$]-СумОпл[$];
var ПризнИспДок[]:S;

var ВсегоСумБО:N=SumOfArray(СумБО,Упр);
var ВсегоСумКЗ:N=SumOfArray(СумКЗ,Упр);
var ВсегоСумОпл:N=SumOfArray(СумОпл,Упр);
var ВсегоСумЗКР:N=SumOfArray(СумЗКР,Упр);
var ВсегоОстБО:N=SumOfArray(ОстБО,Упр);
var ВсегоОстКЗ:N=SumOfArray(ОстКЗ,Упр);

var Отч:S;

var Run:L;

var SelfCfg:S="ТББ.ОТЧЕТЫ.СПРАВКИ.ИСПДОК.000.cfg";
--
--Процедуры и функции -------------
Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(ДатВх);
 ClearVariable(Наим);
 ClearVariable(Ном);
 ClearVariable(Дат);
 ClearVariable(Сум);
 ClearVariable(Дат1);
 ClearVariable(Дат2);
 ClearVariable(Контр);
 ClearVariable(СумБО);
 ClearVariable(СумКЗ);
 ClearVariable(СумОпл);
 ClearVariable(СумЗКР);
 ClearVariable(ДатОпл);
 ClearVariable(ПризнИспДок);
end;

Proc Расчет;
var ИспДок_,tmp:S;
var p,pp,OWA,n,t:i;
var Rec: Record;
 Очистить;
 Refresh;
 pp=0; p=0;
 for sign ИспДок_="ИСПДОК.*" do
  pp=pp+1;
 od;
 OWA=OpenWorkArea("РПО_ИСПДОК","");
 Try
  ShowProgress(pp,"Расчет...");
  for sign ИспДок_="ИСПДОК.*" do
   p=p+1;
   ProgressPos(p);
   if ПризнДоп="":
      tmp=ИспДок_;
     else
      tmp="("+ПризнДоп+")&"+ИспДок_;
   fi;
   if ExistsTransactions(МаскаСч+"{"+tmp+"}",ДН,ДК):
      Rec=SignToRecord(ИспДок_,False);
      n=GetRecordNumber(OWA,Rec);
      InsertFrame(Упр,Упр+1);
      if n=0:
         Ном[Упр]=ИспДок_;
        else
         ДатВх[Упр]=GetFieldD(OWA,n,"ДатВх");
         Наим[Упр]=GetFieldS(OWA,n,"Наим.Наим");
         Ном[Упр]=GetFieldS(OWA,n,"Ном");
         Дат[Упр]=GetFieldD(OWA,n,"Дат");
         Сум[Упр]=GetFieldN(OWA,n,"Сум");
         Дат1[Упр]=GetFieldD(OWA,n,"Срок1");
         Дат2[Упр]=GetFieldD(OWA,n,"Срок2");
         Контр[Упр]=GetFieldS(OWA,n,"Контр.КорИмя");
      fi;
      СумБО[Упр]=Turn("*.1.501.13.*|*.1.506.10.*/*.?.502.11.*{"+tmp+"}",ДН,ДК);
      СумКЗ[Упр]=-(Saldo("*.?.302.??.730{"+tmp+"}",ДН)+Turn("*.?.302.??.730{"+tmp+"}",ДН,ДК));
      СумОпл[Упр]=Turn("*.?.302.??.830/*.1.304.05.*|*.?.201.11.*|*.?.201.21.*{"+tmp+"}",ДН,ДК);
      СумЗКР[Упр]=-Turn("*.?.ЗАБ.КР.*{"+tmp+"}",ДН,ДК);
      СумОпл[Упр]=СумОпл[Упр]+СумЗКР[Упр];
      for transaction t="(*.?.302.??.830/*.1.304.05.*|*.?.201.11.*|*.?.201.21.*)|(*.?.ЗАБ.КР.*){"+tmp+"}",ДН,ДК,Reverse do
       ДатОпл[Упр]=TransDate(t);
       Break;
      od;
      ПризнИспДок[Упр]=ИспДок_;
   fi;
  od;
 Finally
  CloseProgress;
  CloseWorkArea(OWA);
 end;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Proc ДК_OnExit(FieldName: String; Iter: Integer);
 Очистить;
end;

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

Func ПризнДоп_OnVerify(FieldName: String; Iter: Integer; Value: String): 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;
 tmp=Раб.Бюджет2005.СписокСправ(МаскаСч,0,"");
 if not tmp="": tmp="("+tmp+")|~*.*"; fi;
 Cur=AnaElection(tmp,false,true);
 if Cur="": Template.HideEditor(False); ^Cur; fi;
 if SubStr(cur,length(cur),1)=".": cur=SubStr(cur,1,length(cur)-1)+"!"; fi;
 Cur=Раб.Бюджет2005.Объединить_Диалог(ПризнДоп,Cur,"&=И;|=ИЛИ;&~=И ИСКЛЮЧИТЬ;_=ЗАМЕНИТЬ","_");
 if Раб.Бюджет2005.HideEditor: 
    Template.HideEditor(False);
    ПризнДоп=Cur;
 fi;
 Очистить;
 Return Cur;
end;

Func Док_onEnter(FieldName: String; Iter: Integer): logical;
var Rec:Record;
 Rec=SignToRecord(ПризнИспДок[Iter],False);
 if Rec=nil:
    Message("Карточка исполнительного документа не найдена ("+ПризнИспДок[Iter]+")");
   else
    OpenBlank("ИНФО.ИСПДОК",True,Rec);
 fi;
 Return False;
end;

Func Отч_OnEnter(FieldName: String; Iter: Integer): logical;
var УслСч:S;
var ДН_:D;
 ДН_=ДН;
 if FieldName="СумБО": УслСч="*.1.501.13.*|*.1.506.10.*/*.?.502.11.*";
   |FieldName="СумКЗ": УслСч="*.?.302.??.730"; ДН_=1.1.100;
   |FieldName="СумОпл": УслСч="(*.?.302.??.830/*.1.304.05.*|*.?.201.11.*|*.?.201.21.*)|*.?.ЗАБ.КР.*";
   |FieldName="СумЗКР": УслСч="*.?.ЗАБ.КР.*";
   |FieldName="ДатОпл": УслСч="(*.?.302.??.830/*.1.304.05.*|*.?.201.11.*|*.?.201.21.*)|*.?.ЗАБ.КР.*";
   |True: ^False;
 fi;
 Refresh;
 Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',ДН_,ДК,УслСч,ПризнИспДок[Iter]);
 Return False;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_OnClick(Sender: String);
 if ДК=1.1.100: Message("Введите дату",mtError); Template.Field="ДК"; Exit; fi;
 Try
  Расчет;
 Finally
  Отч="Составлен: "+DateToString(ToDay)+" в "+Раб.Бюджет2005.TimeToStr(Time,"")+" Пользователь: "+UserName(AliasName("РПО_БЮДЖ_КЛАСС"));
 end;
 Message("Расчет завершен");
end;

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

Proc btnЗакрыть_OnClick(Sender: String);
 Close;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 Раб.Настр_Печать.Cfg("",SelfCfg);
end;

Proc AfterOpen(Destroy: Logical);
 if Run:
    Run=False;
    btnРасчет_OnClick("Run");
 fi;
end;
--Обработчики событий шаблона -----
--


Конец
