-- Шаблон создан мастером бланков
-- 17.07.2009 16:05:14
--
БланкСШаблоном "Массовый перерасчет кассовой книги";
--свое--
ДатаН:D;
ДатаК:D;
Рекв:Record;

--Вместо картотеки
var Фондовый:L;
var Валюта:S;
var ОстНачБюдж:N;
var ОстНачВнеБюдж:N;
var ОстКонБюдж:N;
var ОстКонВнеБюдж:N;
var ОстКонВсего:N;
var Current_:Record;
var Дата:D;
var НомерЛиста:I;
var КолРасх:I;
var КолПрих:I;
var GroupDoc:Record;
var GroupAttr:I;
var Коммент:S;
var ФИОКасс:S;
var ФИОБух:S;
var НомерЛистаК:I;
var ИтогПрихБюдж:n;
var ИтогРасхБюдж:n;
var ИтогПрихВнеБюдж:n;
var ИтогРасхВнеБюдж:n;
var НАЧАЛОЛИСТА:S;
var КОНЕЦЛИСТА:S;
var ИТОГОЗАДЕНЬ:S;


----
Trans:L=[False];
Проводить:L=[True];

var Первый:L;
var Последний:L;

var N1_[]:i;
var НДок_[]:s;
var Субъект_[]:s;
var КорСч_[]:s;
var ПрихБюдж_[]:n;
var РасхБюдж_[]:n;
var ПрихВнеБюдж_[]:n;
var РасхВнеБюдж_[]:n;
var Owner_[]:S;
var OwnerUkey_[]:Record;

var КолСтр:I=42;
var ПереносПрихБюдж:N=SumOfArray(ПрихБюдж_,24);
var ПереносРасхБюдж:N=SumOfArray(РасхБюдж_,24);
var ПереносПрихВнеБюдж:N=SumOfArray(ПрихВнеБюдж_,24);
var ПереносРасхВнеБюдж:N=SumOfArray(РасхВнеБюдж_,24);
var КолПрихПропись:S=Lo(СЛО_(КолПрих,"ДОК"));
var КолРасхПропись:S=Lo(СЛО_(КолРасх,"ДОК"));

--var НоваяЗапись:L=(CurrentState=crdusInserted);
var ЭтоГруппа:L;
var ЭтоНеГруппа:L=if(ЭтоГруппа,False,True);
var СчБюдж:S=if(Фондовый,"*.1.201.35.*","*.1.201.34.*");
var СчВнеБюдж:S=if(Фондовый,"*.2.201.35.*|*.3.201.35.*","*.2.201.34.*|*.3.201.34.*");
var СчБюджПрих:S=if(Фондовый,"*.1.201.35.510","*.1.201.34.510");
var СчБюджРасх:S=if(Фондовый,"*.1.201.35.610","*.1.201.34.610");
var СчВнеБюджПрих:S=if(Фондовый,"*.2.201.35.510|*.3.201.35.510","*.2.201.34.510|*.3.201.34.510");
var СчВнеБюджРасх:S=if(Фондовый,"*.2.201.35.610|*.3.201.35.610","*.2.201.34.610|*.3.201.34.610");

var StoreUKey:Record;
var SelfCrd:S="РПО_ОтчКас";
var Buf[]:S;
var BufUKey[]:S;
var Link[]:S="...";
--
var УпрV:Handle;
var V1[]:S;
var V2[]:S;
var V3[]:S;
var V4[]:N;
var V5[]:N;
var V6[]:N;
var V7[]:S;
var V8[]:Record;

var Фондовый_:S=if(Фондовый,"Фондовый","");
var Валюта_:S=if(Валюта="",BaseCurrency,Валюта);
var fВалюта:S=if(Валюта_=BaseCurrency,"(Валюта='' or Валюта='"+Валюта_+"')","Валюта='"+Валюта_+"'");

ФИОКасс_:S;
ФИОБух_:S;

Proc СохранитьТитул;
var OWA:I;
var i:I;
OWA=OpenWorkArea(SelfCrd,"","Ukey="+RecordToString(Current_));
try
  BeginChanging(OWA);
  i=PutFieldL(OWA,1,"Фондовый",Фондовый);
  i=PutFieldS(OWA,1,"Валюта",Валюта);
  i=PutFieldN(OWA,1,"ОстНачБюдж",ОстНачБюдж);
  i=PutFieldN(OWA,1,"ОстНачВнеБюдж",ОстНачВнеБюдж);
  i=PutFieldN(OWA,1,"ОстКонБюдж",ОстКонБюдж);
  i=PutFieldN(OWA,1,"ОстКонВнеБюдж",ОстКонВнеБюдж);
  i=PutFieldN(OWA,1,"ОстКонВсего",ОстКонВсего);
  i=PutFieldD(OWA,1,"Дата",Дата);
  i=PutFieldI(OWA,1,"НомерЛиста",НомерЛиста);
  i=PutFieldI(OWA,1,"КолРасх",КолРасх);
  i=PutFieldI(OWA,1,"КолПрих",КолПрих);
  i=PutFieldR(OWA,1,"GroupDoc",GroupDoc);
  i=PutFieldI(OWA,1,"GroupAttr",GroupAttr);
  i=PutFieldS(OWA,1,"Коммент",Коммент);
  i=PutFieldS(OWA,1,"ФИОКасс",ФИОКасс);
  i=PutFieldS(OWA,1,"ФИОБух",ФИОБух);
  i=PutFieldI(OWA,1,"НомерЛистаК",НомерЛистаК);
  i=PutFieldN(OWA,1,"ИтогПрихБюдж",ИтогПрихБюдж);
  i=PutFieldN(OWA,1,"ИтогРасхБюдж",ИтогРасхБюдж);
  i=PutFieldN(OWA,1,"ИтогПрихВнеБюдж",ИтогПрихВнеБюдж);
  i=PutFieldN(OWA,1,"ИтогРасхВнеБюдж",ИтогРасхВнеБюдж);
  i=PutFieldS(OWA,1,"НАЧАЛОЛИСТА",НАЧАЛОЛИСТА);
  i=PutFieldS(OWA,1,"КОНЕЦЛИСТА",КОНЕЦЛИСТА);
  i=PutFieldS(OWA,1,"ИТОГОЗАДЕНЬ",ИТОГОЗАДЕНЬ);
  EndChanging(OWA);
finally
  CloseWorkArea(OWA);
end;
end;

Func SymbolToNum (St:s; Pst:I):L;
var tmp:s;
var n:i;
 tmp=SubStr(st,pst,1);
 if tmp="0" or int(tmp)>0: ^True; fi;
 ^False;
end;

Func GetNumDoc (St:S):S;
var c1,c2,pst:i;
var Ret:s;
 c1=Pos("РКО",Up(St));
 c2=Pos("ПКО",Up(St));
 if c1=0 and c2=0: ^""; fi;
 if c1<>0: Pst=c1; Ret="рко "; else Pst=c2; Ret="пко "; fi;
 for c1=pst+3..Length(St) do
  if SymbolToNum(St,c1): Break; fi;
 od;
 for c2=c1..Length(St) do
  if SubStr(St,c2,1)=" ": Break; fi;  
 od;
 Ret=Ret+SubStr(St,c1,c2-c1);
 ^Ret;
end;

Proc Clear;
 ClearVariable(N1_);
 ClearVariable(НДок_);
 ClearVariable(Субъект_);
 ClearVariable(КорСч_);
 ClearVariable(ПрихБюдж_);
 ClearVariable(РасхБюдж_);
 ClearVariable(ПрихВнеБюдж_);
 ClearVariable(РасхВнеБюдж_);
 ClearVariable(Owner_);
 ClearVariable(OwnerUkey_);
 ClearVariable(УпрV);
 ClearVariable(V1);
 ClearVariable(V2);
 ClearVariable(V3);
 ClearVariable(V4);
 ClearVariable(V5);
 ClearVariable(V6);
 ClearVariable(V7);
 ClearVariable(V8);
end;

Proc ЗаписьЛистов (NumPage:i;Line:i);
var OWA,OWASub,NewRec,NewRecSub,n,t:I;
var ОНДБ,ОНДВБ,ИПБ,ИРБ,ИПВБ,ИРВБ:N;
var First:L;
var НЛ,КЛ,ИЗД:S;
 if NumPage<1: Exit; fi;
 ОНДБ=ОстНачБюдж;
 ОНДВБ=ОстНачВнеБюдж;
 OWA=OpenWorkArea(SelfCrd,"","False");
 Try --#1
--  ShowProgress(NumPage,"Запись листов");
  for n=1..NumPage do
--   ProgressPos(n);
   НачатьИзменения(OWA);
   Try --#2
    NewRec=InsertRecord(OWA);
    NewRec=PutFieldI(OWA,NewRec,"GroupAttr",0);
    NewRec=PutFieldR(OWA,NewRec,"GroupDoc",Current_);
    NewRec=PutFieldD(OWA,NewRec,"Дата",Дата);
    NewRec=PutFieldI(OWA,NewRec,"НомерЛиста",НомерЛиста+n-1);
    NewRec=PutFieldN(OWA,NewRec,"ОстНачБюдж",ОНДБ);
    NewRec=PutFieldN(OWA,NewRec,"ОстНачВнеБюдж",ОНДВБ);
    NewRec=PutFieldL(OWA,NewRec,"Фондовый",Фондовый);
    OWASub=OpenArray(OWA,NewRec,"Ордера","НДок");
    Try --#3
     First=True;
     ИПБ=0; ИРБ=0; ИПВБ=0; ИРВБ=0;
     Первый=True;
     for t=(n*КолСтр)-КолСтр+1..Min(n*КолСтр,Line) do
      if First: First=False; Первый=if(N1_[t]<=1,True,False); fi;
      NewRecSub=InsertRecord(OWASub);
      NewRecSub=PutFieldI(OWASub,NewRecSub,"N1",N1_[t]);
      NewRecSub=PutFieldS(OWASub,NewRecSub,"НДок",НДок_[t]);
      NewRecSub=PutFieldS(OWASub,NewRecSub,"Субъект",Субъект_[t]);
      NewRecSub=PutFieldS(OWASub,NewRecSub,"КорСч",КорСч_[t]);
      NewRecSub=PutFieldN(OWASub,NewRecSub,"ПрихБюдж",ПрихБюдж_[t]);
      NewRecSub=PutFieldN(OWASub,NewRecSub,"РасхБюдж",РасхБюдж_[t]);
      NewRecSub=PutFieldN(OWASub,NewRecSub,"ПрихВнеБюдж",ПрихВнеБюдж_[t]);
      NewRecSub=PutFieldN(OWASub,NewRecSub,"РасхВнеБюдж",РасхВнеБюдж_[t]);
      if Owner_[t]="ПРИХОРД" or Owner_[t]="РПО_ДЕНДОК_ПРИХОД": NewRecSub=PutFieldR(OWASub,NewRecSub,"ПРИХОРД",OwnerUKey_[t]);
        |Owner_[t]="РАСХОРД" or Owner_[t]="РПО_ДЕНДОК_РАСХОД": NewRecSub=PutFieldR(OWASub,NewRecSub,"РАСХОРД",OwnerUKey_[t]);
        |Owner_[t]="РПО_ВЕДПОДОТЧЕТ": NewRecSub=PutFieldR(OWASub,NewRecSub,"РПО_ВЕДПОДОТЧЕТ",OwnerUKey_[t]);
      fi;
      NewRecSub=PutFieldS(OWASub,NewRecSub,"Валюта",Валюта_);
      ИПБ=ИПБ+ПрихБюдж_[t];
      ИРБ=ИРБ+РасхБюдж_[t];
      ИПВБ=ИПВБ+ПрихВнеБюдж_[t];
      ИРВБ=ИРВБ+РасхВнеБюдж_[t];
     od;
     Последний=if(N1_[t-1]=КолРасх+КолПрих or Line=0,True,False);
    Finally --Try #3
     CloseWorkArea(OWASub);
    end;
    if Первый: NewRec=PutFieldS(OWA,NewRec,"НачалоЛиста","Остаток на начало дня"); else NewRec=PutFieldS(OWA,NewRec,"НачалоЛиста","Перенесено с предыдущего листа"); fi;
    if Последний: NewRec=PutFieldS(OWA,NewRec,"КонецЛиста","Остаток на конец дня"); else NewRec=PutFieldS(OWA,NewRec,"КонецЛиста","Перенесено на следующий лист");fi;
    if Первый and Последний: NewRec=PutFieldS(OWA,NewRec,"ИтогоЗаДень","Итого за день"); else NewRec=PutFieldS(OWA,NewRec,"ИтогоЗаДень","Итого по листу"); fi;
    ОНДБ=ОНДБ+ИПБ-ИРБ;
    ОНДВБ=ОНДВБ+ИПВБ-ИРВБ;
    NewRec=PutFieldN(OWA,NewRec,"ИтогПрихБюдж",ИПБ);
    NewRec=PutFieldN(OWA,NewRec,"ИтогРасхБюдж",ИРБ);
    NewRec=PutFieldN(OWA,NewRec,"ИтогПрихВнеБюдж",ИПВБ);
    NewRec=PutFieldN(OWA,NewRec,"ИтогРасхВнеБюдж",ИРВБ);
    NewRec=PutFieldN(OWA,NewRec,"ОстКонБюдж",ОНДБ);
    NewRec=PutFieldN(OWA,NewRec,"ОстКонВнеБюдж",ОНДВБ);
    if Последний: 
       NewRec=PutFieldN(OWA,NewRec,"ОстКонВсего",ОНДБ+ОНДВБ);
       NewRec=PutFieldI(OWA,NewRec,"КолПрих",КолПрих);
       NewRec=PutFieldI(OWA,NewRec,"КолРасх",КолРасх);
       NewRec=PutFieldS(OWA,NewRec,"ФиоКасс",ФиоКасс_);
       NewRec=PutFieldS(OWA,NewRec,"ФиоБух",ФиоБух_);
    fi;
    NewRec=PutFieldS(OWA,NewRec,"ВАЛЮТА",Валюта_);
    ЗакончитьИзменения(OWA);
   Except --Try #2
    ОтменитьИзменения(OWA);
    Raise;
   end;
  od; --for n=1..NumPage do
 Finally --Try #1
--  CloseProgress;
  CloseWorkArea(OWA);
 end;
end;

Func НаличиеЛистов:L;
var OWA,nr:i;
 OWA=OpenWorkArea(SelfCrd,"","GroupDoc="+RecordToString(Current_));
 Try
  if Records(OWA)>0: ^True; fi;
 Finally
  CloseWorkArea(OWA);
 end;
 ^False;
end;

Proc УдалитьЛисты;
var OWA,nr:i;
 OWA=OpenWorkArea(SelfCrd,"","GroupDoc="+RecordToString(Current_));
 Try
  BeginChanging(OWA);
  Try
   DeleteAllRecords(OWA);
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
end;

Func НаличиеКассыЗаДень:L;
var OWA,nr:i;
var UKey,F:S;
 UKey=RecordToString(Current_);
 F="Дата="+DateToString(Дата)+" and UKey<>"+UKey+" and GroupDoc<>"+UKey+" and "+fВалюта+" and "+if(Фондовый,"Фондовый","not Фондовый");
 OWA=OpenWorkArea(SelfCrd,"",F);
 Try
  if Records(OWA)>0: ^True; fi;
 Finally
  CloseWorkArea(OWA);
 end;
 ^False;
end;

Proc УдалитьКассуЗаДень;
var OWA,nr,n,z:i;
var UKey,F:S;
 UKey=RecordToString(Current_);
 F="Дата="+DateToString(Дата)+" and UKey<>"+UKey+" and GroupDoc<>"+UKey+" and "+fВалюта+" and "+if(Фондовый,"Фондовый","not Фондовый");
 OWA=OpenWorkArea(SelfCrd,"GROUPDOC",F);
 Try
  Nr=Records(OWA);
  z=nr;
  BeginChanging(OWA);
  Try
   for n=1..Nr do
    DeleteRecord(OWA,z);
    z=z-1;
   od;
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
end;

Proc ПоУмолчанию;
-- ОбнулитьЛист;
-- ClearVariable(Ордера);
end;

Proc РасчетПоОрдерам;
var owa,numrec,n,line,i,NumPage,OA,n2,nr2:i;
var tmp1,tmp2:S;
var tСч:S;
var ПрихБTrans,ПрихВБTrans:N;
var РасхБTrans,РасхВБTrans:N;
var MsgПрихБ,MsgПрихВБ,MsgРасхБ,MsgРасхВБ:S;
var Filter,ТипКБК:S;
 Clear;
 ОстНачБюдж=Saldo(СчБюдж+"'"+Валюта_,Дата,Валюта_);
 ОстНачВнеБюдж=Saldo(СчВнеБюдж+"'"+Валюта_,Дата,Валюта_);
 ПрихБTrans = Turn(СчБюджПрих+"'"+Валюта_,Дата,Дата+1,Валюта_);
 ПрихВБTrans= Turn(СчВнеБюджПрих+"'"+Валюта_,Дата,Дата+1,Валюта_);
 РасхБTrans =-Turn(СчБюджРасх+"'"+Валюта_,Дата,Дата+1,Валюта_);
 РасхВБTrans=-Turn(СчВнеБюджРасх+"'"+Валюта_,Дата,Дата+1,Валюта_);
 Line=0;
 КолПрих=0;
 КолРасх=0;
 if Проводить: Filter="Д="+DateToString(Дата)+" and Проводить=True"; else Filter="Д="+DateToString(Дата); fi;
 Filter=Filter+" and "+fВалюта;
 --обсчитываем приходнки
 OWA=OpenWorkArea("ПрихОрд","Номер",Filter);
 Try
  NumRec=Records(OWA);
  for n=1..NumRec do
   Line=Line+1;tСч="";
   if GetFieldL(OWA,n,"РПО_PACKETMODE"):
      ПрихБюдж_[Line]=0;
      ПрихВнеБюдж_[Line]=0;
      OA=OpenArray(OWA,n,"РПО_ПОЗИЦИИ","");
      nr2=Records(OA);
      for n2=1..nr2 do
       tmp1=GetFieldS(OA,n2,"ТДСЧЕТ");
       if n2=1 then tСч=GetFieldS(OA,n2,"ТСЧЕТ"); fi;
       if tСч<>GetFieldS(OA,n2,"ТСЧЕТ") then tСч=""; fi;
       ТипКБК=Раб.Бюджет2005.ТипКБКСчета(tmp1);
       tmp1=Раб.Бюджет2005.ВзятьКодСчета(tmp1,ТипКБК,"Ист",False);
       if tmp1="1": 
          ПрихБюдж_[Line]=ПрихБюдж_[Line]+GetFieldN(OA,n2,"ТСУММА");
         else 
          ПрихВнеБюдж_[Line]=ПрихВнеБюдж_[Line]+GetFieldN(OA,n2,"ТСУММА");
       fi;
      od;
      CloseWorkArea(OA);
     else
      tmp1=GetFieldS(OWA,n,"Де");
      ТипКБК=Раб.Бюджет2005.ТипКБКСчета(tmp1);
      tmp1=Раб.Бюджет2005.ВзятьКодСчета(tmp1,ТипКБК,"Ист",False);
      if tmp1="1": ПрихБюдж_[Line]=GetFieldN(OWA,n,"Сумма"); else ПрихВнеБюдж_[Line]=GetFieldN(OWA,n,"Сумма"); fi;
   fi;
   N1_[Line]=Line;
   НДок_[Line]="ПКО "+GetFieldS(OWA,n,"НОМЕРБУМ");
   tmp1=GetFieldS(OWA,n,"ФИО");
   if tmp1="": tmp1=GetFieldS(OWA,n,"Осн"); fi;
   Субъект_[Line]=tmp1;
   КорСч_[Line]=GetFieldS(OWA,n,"СЧЕТ");
   if tСч<>"" then КорСч_[Line]=tСч; fi;
   Owner_[Line]="ПрихОрд";
   OwnerUKey_[Line]=GetRecordKey(OWA,n);
   КолПрих=КолПрих+1;
  od; --for n=1..NumRec do
 Finally
  CloseWorkArea(OWA);
 end;
 --обсчитываем расходные ордера
 OWA=OpenWorkArea("РасхОрд","Номер",Filter);
 Try                                             
  NumRec=Records(OWA);
  for n=1..NumRec do
   InsertFrame(УпрV,УпрV+1);tСч="";
   V6[УпрV]=GetFieldI(OWA,n,"НОМЕР");
   if GetFieldL(OWA,n,"РПО_PACKETMODE"):
      V4[УпрV]=0;
      V5[УпрV]=0;
      OA=OpenArray(OWA,n,"РПО_ПОЗИЦИИ","");
      nr2=Records(OA);
      for n2=1..nr2 do
       tmp1=GetFieldS(OA,n2,"ТКСЧЕТ");
       if n2=1 then tСч=GetFieldS(OA,n2,"ТСЧЕТ"); fi;
       if tСч<>GetFieldS(OA,n2,"ТСЧЕТ") then tСч=""; fi;
       ТипКБК=Раб.Бюджет2005.ТипКБКСчета(tmp1);
       tmp1=Раб.Бюджет2005.ВзятьКодСчета(tmp1,ТипКБК,"Ист",False);
       if tmp1="1": 
          V4[УпрV]=V4[УпрV]+GetFieldN(OA,n2,"ТСУММА");
         else 
          V5[УпрV]=V5[УпрV]+GetFieldN(OA,n2,"ТСУММА");
       fi;
      od;
      CloseWorkArea(OA);
     else
      tmp1=GetFieldS(OWA,n,"Кр");
      ТипКБК=Раб.Бюджет2005.ТипКБКСчета(tmp1);
      tmp1=Раб.Бюджет2005.ВзятьКодСчета(tmp1,ТипКБК,"Ист",False);
      if tmp1="1": V4[УпрV]=GetFieldN(OWA,n,"Сумма"); else V5[УпрV]=GetFieldN(OWA,n,"Сумма"); fi;
   fi;
   V1[УпрV]="РКО "+GetFieldS(OWA,n,"НОМЕРБУМ");
   tmp1=GetFieldS(OWA,n,"ФИО");
   if tmp1="": tmp1=GetFieldS(OWA,n,"Осн"); fi;
   V2[УпрV]=tmp1;
   V3[УпрV]=GetFieldS(OWA,n,"СЧЕТ");
   if tСч<>"" then V3[УпрV]=tСч; fi;
   V7[УпрV]="РасхОрд";
   V8[УпрV]=GetRecordKey(OWA,n);
  od; --for n=1..NumRec do
 Finally
  CloseWorkArea(OWA);
 end;
 if Проводить: Filter="ДатаРКО="+DateToString(Дата)+" and Проводить=True"; else Filter="ДатаРКО="+DateToString(Дата); fi;
 if not Валюта_=BaseCurrency: Filter="1=0"; fi;
 OWA=OpenWorkArea("РПО_ВЕДПОДОТЧЕТ","Номер",Filter);
 Try
  NumRec=Records(OWA);
  for n=1..NumRec do
   InsertFrame(УпрV,УпрV+1);
   V6[УпрV]=GetFieldI(OWA,n,"НОМЕР");
   tmp1=GetFieldS(OWA,n,"ОБЩСЧКРЕ");
   ТипКБК=Раб.Бюджет2005.ТипКБКСчета(tmp1);
   tmp1=Раб.Бюджет2005.ВзятьКодСчета(tmp1,ТипКБК,"Ист",False);
   if tmp1="1": V4[УпрV]=GetFieldN(OWA,n,"СумПров"); else V5[УпрV]=GetFieldN(OWA,n,"СумПров"); fi;
   V1[УпрV]="РКО "+GetFieldS(OWA,n,"НОМЕРРКО");
   V2[УпрV]="Ведомость на выдачу денег подотчетным лицам";
   V3[УпрV]=GetFieldS(OWA,n,"ОБЩСЧДЕБ");
   V7[УпрV]="РПО_ВЕДПОДОТЧЕТ";
   V8[УпрV]=GetRecordKey(OWA,n);
  od; --for n=1..NumRec do
 Finally
  CloseWorkArea(OWA);
 end;
 --Сортируем расходники и ведомости
 SortSection(УпрV,6);
 for n=1..УпрV do
  Line=Line+1;
  N1_[Line]=Line;
  НДок_[Line]=V1[n];
  Субъект_[Line]=V2[n];
  КорСч_[Line]=V3[n];
  РасхБюдж_[Line]=V4[n]; 
  РасхВнеБюдж_[Line]=V5[n];
  Owner_[Line]=V7[n];
  OwnerUKey_[Line]=V8[n];
  КолРасх=КолРасх+1;
 od;
 NumPage=Int(Trunc(Line/КолСтр))+1;
 НомерЛистаК=НомерЛиста+NumPage-1;
 ИтогПрихБюдж=SumOfArray(ПрихБюдж_,Line);
 ИтогРасхБюдж=SumOfArray(РасхБюдж_,Line);
 ИтогПрихВнеБюдж=SumOfArray(ПрихВнеБюдж_,Line);
 ИтогРасхВнеБюдж=SumOfArray(РасхВнеБюдж_,Line);
 ОстКонБюдж=ОстНачБюдж+ИтогПрихБюдж-ИтогРасхБюдж;
 ОстКонВнеБюдж=ОстНачВнеБюдж+ИтогПрихВнеБюдж-ИтогРасхВнеБюдж;
 ОстКонВсего=ОстКонБюдж+ОстКонВнеБюдж;
 КОММЕНТ="Касса ("+Валюта_+if(Фондовый," Фондовый","")+") за "+DateToString(Дата)+", листы с "+Str(НОМЕРЛИСТА)+" по "+Str(НОМЕРЛИСТАК);
 НАЧАЛОЛИСТА="Остаток на начало дня";
 КОНЕЦЛИСТА="Остаток на конец дня";
 ИТОГОЗАДЕНЬ="Итого за день";
 ЗаписьЛистов(NumPage,Line);
 СохранитьТитул;
 tmp1=SLO_(NumPage*1000000,"ДОКН");
 tmp1=SubStr(tmp1,Pos("миллион",tmp1)+7,255);
 if NumPage=1 or NumPage=21 or NumPage=31: tmp2="Сформирован"; else tmp2="Сформировано"; fi;
-- if КолПрих=0: Message ("За данный период "+if(Фондовый,"фондовых ","")+"приходных ордеров нет"); fi;
-- if КолРасх=0: Message ("За данный период "+if(Фондовый,"фондовых ","")+"расходных ордеров нет"); fi;
-- if КолПрих=0 and КолРасх=0: Message("Расчет завершен"); else Message("Расчет завершен. "+tmp2+" "+Str(NumPage)+" лист"+tmp1); fi;
 MsgПрихБ =""; MsgПрихВБ="";  MsgРасхБ ="";  MsgРасхВБ="";
 if Round(ПрихБTrans,2) <>Round(ИтогПрихБюдж,2)   : MsgПрихБ =" приход бюджетных средст по журналам: "+Str(ПрихБTrans,2); fi;
 if Round(ПрихВБTrans,2)<>Round(ИтогПрихВнеБюдж,2): MsgПрихВБ=" приход внебюджетных средст по журналам: "+Str(ПрихВБTrans,2); fi;
 if Round(РасхБTrans,2) <>Round(ИтогРасхБюдж,2)   : MsgРасхБ =" расход бюджетных средст по журналам: "+Str(РасхБTrans,2); fi;
 if Round(РасхВБTrans,2)<>Round(ИтогРасхВнеБюдж,2): MsgРасхВБ=" расход внебюджетных средст по журналам: "+Str(РасхВБTrans,2); fi;
 if MsgПрихБ<>"" or MsgПрихВБ<>"" or MsgРасхБ<>"" or MsgРасхВБ<>"":
    Message("Внимание! "+DateToString(Дата)+" проводки в журналах не соответствуют записям в картотеках."+MsgПрихБ+MsgПрихВБ+MsgРасхБ+MsgРасхВБ,mtWarning);
 fi;
end;

Proc РасчетПоОрдерамФ;
var owa,numrec,n,line,i,NumPage,OA,n2,nr2:i;
var tmp1,tmp2:S;
var ПрихБTrans,ПрихВБTrans:N;
var РасхБTrans,РасхВБTrans:N;
var MsgПрихБ,MsgПрихВБ,MsgРасхБ,MsgРасхВБ:S;
var Filter,ТипКБК:S;
 Clear;
 ОстНачБюдж=Saldo(СчБюдж+"'"+Валюта_,Дата,Валюта_);
 ОстНачВнеБюдж=Saldo(СчВнеБюдж+"'"+Валюта_,Дата,Валюта_);
 ПрихБTrans = Turn(СчБюджПрих+"'"+Валюта_,Дата,Дата+1,Валюта_);
 ПрихВБTrans= Turn(СчВнеБюджПрих+"'"+Валюта_,Дата,Дата+1,Валюта_);
 РасхБTrans =-Turn(СчБюджРасх+"'"+Валюта_,Дата,Дата+1,Валюта_);
 РасхВБTrans=-Turn(СчВнеБюджРасх+"'"+Валюта_,Дата,Дата+1,Валюта_);
 Line=0;
 КолПрих=0;
 КолРасх=0;
 if Проводить: Filter="Дата="+DateToString(Дата)+" and Проводить=True"; else Filter="Дата="+DateToString(Дата); fi;
-- Filter=Filter+" and "+fВалюта;
 --обсчитываем приходнки
 OWA=OpenWorkArea("РПО_ДЕНДОК_ПРИХОД","Номер",Filter+" and Match(СчДеб,'*.?.201.35.*')");
 Try
  NumRec=Records(OWA);
  for n=1..NumRec do
   Line=Line+1;
   tmp1=GetFieldS(OWA,n,"СЧДЕБ");
   ТипКБК=Раб.Бюджет2005.ТипКБКСчета(tmp1);
   tmp1=Раб.Бюджет2005.ВзятьКодСчета(tmp1,ТипКБК,"Ист",False);
   if tmp1="1": ПрихБюдж_[Line]=GetFieldN(OWA,n,"СумПриход"); else ПрихВнеБюдж_[Line]=GetFieldN(OWA,n,"СумПриход"); fi;
   N1_[Line]=Line;
   НДок_[Line]="ПКО Ф"+GetFieldS(OWA,n,"НОМЕРБУМ");
   tmp1=GetFieldS(OWA,n,"ФИО");
   if tmp1="": tmp1=GetFieldS(OWA,n,"Осн"); fi;
   Субъект_[Line]=tmp1;
   КорСч_[Line]=GetFieldS(OWA,n,"СЧКРЕ");
   Owner_[Line]="РПО_ДЕНДОК_ПРИХОД";
   OwnerUKey_[Line]=GetRecordKey(OWA,n);
   КолПрих=КолПрих+1;
  od; --for n=1..NumRec do
 Finally
  CloseWorkArea(OWA);
 end;
 --обсчитываем расходные ордера
 OWA=OpenWorkArea("РПО_ДЕНДОК_РАСХОД","Номер",Filter+" and Match(СчКре,'*.?.201.35.*')");
 Try                                             
  NumRec=Records(OWA);
  for n=1..NumRec do
   Line=Line+1;
   tmp1=GetFieldS(OWA,n,"СЧКРЕ");
   ТипКБК=Раб.Бюджет2005.ТипКБКСчета(tmp1);
   tmp1=Раб.Бюджет2005.ВзятьКодСчета(tmp1,ТипКБК,"Ист",False);
   if tmp1="1": РасхБюдж_[Line]=GetFieldN(OWA,n,"СумРасход"); else РасхВнеБюдж_[Line]=GetFieldN(OWA,n,"СумРасход"); fi;
   N1_[Line]=Line;
   НДок_[Line]="РКО Ф"+GetFieldS(OWA,n,"НОМЕРБУМ");
   tmp1=GetFieldS(OWA,n,"ФИО");
   if tmp1="": tmp1=GetFieldS(OWA,n,"Осн"); fi;
   Субъект_[Line]=tmp1;
   КорСч_[Line]=GetFieldS(OWA,n,"СЧДЕБ");
   Owner_[Line]="РПО_ДЕНДОК_РАСХОД";
   OwnerUKey_[Line]=GetRecordKey(OWA,n);
   КолРасх=КолРасх+1;
  od; --for n=1..NumRec do
 Finally
  CloseWorkArea(OWA);
 end;
 NumPage=Int(Trunc(Line/КолСтр))+1;
 НомерЛистаК=НомерЛиста+NumPage-1;
 ИтогПрихБюдж=SumOfArray(ПрихБюдж_,Line);
 ИтогРасхБюдж=SumOfArray(РасхБюдж_,Line);
 ИтогПрихВнеБюдж=SumOfArray(ПрихВнеБюдж_,Line);
 ИтогРасхВнеБюдж=SumOfArray(РасхВнеБюдж_,Line);
 ОстКонБюдж=ОстНачБюдж+ИтогПрихБюдж-ИтогРасхБюдж;
 ОстКонВнеБюдж=ОстНачВнеБюдж+ИтогПрихВнеБюдж-ИтогРасхВнеБюдж;
 ОстКонВсего=ОстКонБюдж+ОстКонВнеБюдж;
 КОММЕНТ="Касса ("+Валюта_+if(Фондовый," Фондовый","")+") за "+DateToString(Дата)+", листы с "+Str(НОМЕРЛИСТА)+" по "+Str(НОМЕРЛИСТАК);
 НАЧАЛОЛИСТА="Остаток на начало дня";
 КОНЕЦЛИСТА="Остаток на конец дня";
 ИТОГОЗАДЕНЬ="Итого за день";
 ЗаписьЛистов(NumPage,Line);
 СохранитьТитул;
 tmp1=SLO_(NumPage*1000000,"ДОКН");
 tmp1=SubStr(tmp1,Pos("миллион",tmp1)+7,255);
 if NumPage=1 or NumPage=21 or NumPage=31: tmp2="Сформирован"; else tmp2="Сформировано"; fi;
-- if КолПрих=0: Message ("За данный период "+if(Фондовый,"фондовых ","")+"приходных ордеров нет"); fi;
-- if КолРасх=0: Message ("За данный период "+if(Фондовый,"фондовых ","")+"расходных ордеров нет"); fi;
-- if КолПрих=0 and КолРасх=0: Message("Расчет завершен"); else Message("Расчет завершен. "+tmp2+" "+Str(NumPage)+" лист"+tmp1); fi;
 MsgПрихБ =""; MsgПрихВБ="";  MsgРасхБ ="";  MsgРасхВБ="";
 if Round(ПрихБTrans,2) <>Round(ИтогПрихБюдж,2)   : MsgПрихБ =" приход бюджетных средст по журналам: "+Str(ПрихБTrans,2); fi;
 if Round(ПрихВБTrans,2)<>Round(ИтогПрихВнеБюдж,2): MsgПрихВБ=" приход внебюджетных средст по журналам: "+Str(ПрихВБTrans,2); fi;
 if Round(РасхБTrans,2) <>Round(ИтогРасхБюдж,2)   : MsgРасхБ =" расход бюджетных средст по журналам: "+Str(РасхБTrans,2); fi;
 if Round(РасхВБTrans,2)<>Round(ИтогРасхВнеБюдж,2): MsgРасхВБ=" расход внебюджетных средст по журналам: "+Str(РасхВБTrans,2); fi;
 if MsgПрихБ<>"" or MsgПрихВБ<>"" or MsgРасхБ<>"" or MsgРасхВБ<>"":
    Message("Внимание! "+DateToString(Дата)+" проводки в журналах не соответствуют записям в картотеках."+MsgПрихБ+MsgПрихВБ+MsgРасхБ+MsgРасхВБ,mtWarning);
 fi;
end;

Proc РасчетПоПроводкам;
var t,n,Line,NumPage:i;
var Ист:S;
var tmp,tDeb,tCre,tAnlt,tCmnt,ТипКБК,tПоказатель:S;
var Flag:L;
 Clear;
 ОстНачБюдж=Saldo(СчБюдж+"'"+Валюта_,Дата,Валюта_);
 ОстНачВнеБюдж=Saldo(СчВнеБюдж+"'"+Валюта_,Дата,Валюта_);
 Line=0;
 КолПрих=0;
 КолРасх=0;
 if not Валюта_=BaseCurrency: tПоказатель="ВАЛ"; else tПоказатель=BaseCurrency; fi;
 for Transaction t="+"+СчБюджПрих+"|"+СчВнеБюджПрих+"'"+Валюта_,Дата,Дата+1 do
  Line=Line+1;
  tDeb=TransDeb(t);
  tCre=TransCre(t);
  tCmnt=TransComment(t);
  Flag=False;
  for n=1..TransSignCount(t) do
   tmp=TransSignName(t,n);
--   if Match(tmp,"МОЛ.*") or Match(tmp,"Ф.*") or Match(tmp,"К.*"): Flag=True; fi;
   if Flag: Break; fi;
  od;
  if Flag: if Name_A(tmp)<>"": tmp=Name_A(tmp); fi; else tmp=TCmnt; fi;
  N1_[Line]=Line;
  НДок_[Line]=GetNumDoc(tCmnt);
  Субъект_[Line]=tmp;
  КорСч_[Line]=tCre;
  ТипКБК=Раб.Бюджет2005.ТипКБКСчета(tDeb);
  Ист=Раб.Бюджет2005.ВзятьКодСчета(tDeb,ТипКБК,"Ист",False);
  if Ист="1": ПрихБюдж_[Line]=TransSum(t,tПоказатель); else ПрихВнеБюдж_[Line]=TransSum(t,tПоказатель); fi;
  КолПрих=КолПрих+1;
 od; --for Transaction t=Сч120,Дата,Дата+1 do
 for Transaction t="-"+СчБюджРасх+"|"+СчВнеБюджРасх+"'"+Валюта_,Дата,Дата+1 do
  Line=Line+1;
  tDeb=TransDeb(t);
  tCre=TransCre(t);
  tCmnt=TransComment(t);
  Flag=False;
  for n=1..TransSignCount(t) do
   tmp=TransSignName(t,n);
--   if Match(tmp,"МОЛ.*") or Match(tmp,"Ф.*") or Match(tmp,"К.*"): Flag=True; fi;
   if Flag: Break; fi;
  od;
  if Flag: if Name_A(tmp)<>"": tmp=Name_A(tmp); fi; else tmp=TCmnt; fi;
  N1_[Line]=Line;
  НДок_[Line]=GetNumDoc(tCmnt);
  Субъект_[Line]=tmp;
  КорСч_[Line]=tDeb;
  ТипКБК=Раб.Бюджет2005.ТипКБКСчета(tDeb);
  Ист=Раб.Бюджет2005.ВзятьКодСчета(tDeb,ТипКБК,"Ист",False);
  if Ист="1": РасхБюдж_[Line]=TransSum(t,tПоказатель); else РасхВнеБюдж_[Line]=TransSum(t,tПоказатель); fi;
  КолРасх=КолРасх+1;
 od; --for Transaction t=Сч120,Дата,Дата+1 do
 NumPage=Int(Trunc(Line/КолСтр))+1;
 НомерЛистаК=НомерЛиста+NumPage-1;
 ИтогПрихБюдж=SumOfArray(ПрихБюдж_,Line);
 ИтогРасхБюдж=SumOfArray(РасхБюдж_,Line);
 ИтогПрихВнеБюдж=SumOfArray(ПрихВнеБюдж_,Line);
 ИтогРасхВнеБюдж=SumOfArray(РасхВнеБюдж_,Line);
 ОстКонБюдж=ОстНачБюдж+ИтогПрихБюдж-ИтогРасхБюдж;
 ОстКонВнеБюдж=ОстНачВнеБюдж+ИтогПрихВнеБюдж-ИтогРасхВнеБюдж;
 ОстКонВсего=ОстКонБюдж+ОстКонВнеБюдж;
 КОММЕНТ="Касса ("+Валюта_+if(Фондовый," Фондовый","")+") за "+DateToString(Дата)+", листы с "+Str(НОМЕРЛИСТА)+" по "+Str(НОМЕРЛИСТАК);
 НАЧАЛОЛИСТА="Остаток на начало дня";
 КОНЕЦЛИСТА="Остаток на конец дня";
 ИТОГОЗАДЕНЬ="Итого за день";
 ЗаписьЛистов(NumPage,Line);
 СохранитьТитул;
 tmp=SLO_(NumPage*1000000,"ДОКН");
 tmp=SubStr(tmp,Pos("миллион",tmp)+7,255);
 if NumPage=1 or NumPage=21 or NumPage=31: tCmnt="Сформирован"; else tCmnt="Сформировано"; fi;
-- if КолПрих=0: Message ("За данный период "+if(Фондовый,"фондовых ","")+"приходных ордеров нет"); fi;
-- if КолРасх=0: Message ("За данный период "+if(Фондовый,"фондовых ","")+"расходных ордеров нет"); fi;
-- if КолПрих=0 and КолРасх=0: Message("Расчет завершен"); else Message("Расчет завершен. "+tCmnt+" "+Str(NumPage)+" лист"+tmp); fi;
end;

Proc ПрисвоитьНомерЛиста;
var OWA,n,nr: i;
 OWA=OpenWorkArea(SelfCrd,"НОМЕРЛИСТА","GroupDoc="+RecordToString(Current_));
 Try
  Nr=Records(OWA);
  if Nr<1: Exit; fi;
  BeginChanging(OWA,True);
  Try
   for n=1..Nr do
    n=PutFieldI(OWA,n,"НОМЕРЛИСТА",НомерЛиста+n-1);
   od;
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 НомерЛистаК=НомерЛиста+n-2;
 КОММЕНТ="Касса ("+Валюта_+if(Фондовый," Фондовый","")+") за "+DateToString(Дата)+", листы с "+Str(НОМЕРЛИСТА)+" по "+Str(НОМЕРЛИСТАК);
 EditorApply;
end;

Proc ОбработатьДату (prevДата:D; newДата:D);
var prevYYYY,newYYYY:I;
 prevYYYY=Year(prevДата);
 newYYYY=Year(newДата);
 if prevYYYY=newYYYY: Exit; fi;
 if not prevYYYY=100:
    if EnqOkCancel("Изменился отчетный год ("+Str(prevYYYY)+") документа, получить номер документа соответствуещего года ("+Str(newYYYY)+") ?",mtWarning)=cmCancel: Exit; fi;
 fi;
 НомерЛиста=Раб.Обл.СледСУчетомДатыФ(SelfCrd,"НОМЕРЛИСТА","Дата",newДата,"GroupDoc<>"+RecordToString(Current_)+" and UKey<>"+RecordToString(Current_));
 ПрисвоитьНомерЛиста;
 Template.Field="НомерЛиста";
end;

Proc НовыйДень;
var OWA:I;
var i:I;
OWA=OpenWorkArea(SelfCrd,"","");
try
  BeginChanging(OWA);
  i=InsertRecord(OWA);
  EndChanging(OWA);
  Current_=GetRecordKey(OWA,i);
finally
  CloseWorkArea(OWA);
end;
GroupAttr=-1; GROUPDOC=nil;
НОМЕРЛИСТА=Раб.Обл.СледСУчетомГодаФ(SelfCrd,"НОМЕРЛИСТА","Дата","UKey<>"+RecordToString(Current_));
КОММЕНТ="Касса ("+Валюта_+if(Фондовый," Фондовый","")+") за , листы с "+Str(НОМЕРЛИСТА)+" по";
ФИОКасс_=ФИОКасс;
ФИОБух_=ФИОБух;
СохранитьТитул;
end;

Proc Расчет;
var t:D;
t=ДатаН;
ShowProgress(ДатаК-ДатаН,"Расчет кассовой книги");
while t<=ДатаК do
  Фондовый=False;
  if ExistsTransactions(СчБюджПрих+"|"+СчВнеБюджПрих,t,t+1) then
     Дата=t;
     НовыйДень;
     if Trans then РасчетПоПроводкам; else   РасчетПоОрдерам; fi;
     СохранитьТитул;
  fi;
  Фондовый=True;
  if ExistsTransactions(СчБюджПрих+"|"+СчВнеБюджПрих,t,t+1) then
     Дата=t;
     НовыйДень;
     if Trans then РасчетПоПроводкам;  else   РасчетПоОрдерамФ; fi;
     СохранитьТитул;
  fi;
  t=t+1;
  ProgressPos(t-ДатаН);
od;
CloseProgress;
end;


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

Func Фио_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec:Record;
var v,Field:S;
 Template.HideEditor(False);
 Rec=OpenCardFile("Сотрудники");
 if Rec=nil: ^Cur; fi;
 Field=AsString(Template.Field);
 PutVariableS(Field,GetCardFieldS("Сотрудники",rec,"ФАМИЛИЯ")+" "+GetCardFieldS("Сотрудники",rec,"ИНИЦИАЛЫ"));
 ^Cur;
end;


Proc OnOpen(Create: Logical);
if Рекв=nil then
   Рекв=Раб.Бюджет2005.НашРекв;
fi;
if not Рекв=nil:
   if ФИОКасс='' then ФИОКасс=GetCardFieldS("Контрагент",Рекв,"ФИОКасс"); fi;
   if ФИОБух='' then ФИОБух=GetCardFieldS("Контрагент",Рекв,"ФИОБух"); fi;
fi;
end;


Конец
