-- Шаблон создан мастером бланков
-- 04.05.2000 10:52:37
--
БланкСШаблоном "Отчет кассира (Вкладной лист кассовой книги)", Редактор РПО_ОтчКас;

btnРасчет    : Object;
BtnТитул     : Object;
btnСохранить : Object;
btnОтмена    : Object;
rbОрдера     : Object;
rbПроводки   : Object;
cbПроведенные: Object;
cbФондовый   : Object;
cbОстЗП      : Object;
cbN1         : Object;
btnПечать    : Object;
btnПереход   : Object;
btnПредЛист  : Object;
btnСледЛист  : Object;

Секция1      : Section;
Секция2      : Section;

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

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

var Признаки_Игнор:S="К.ФИЗ_ЛИЦА";

var Гр[]:i;
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.*|*.4.201.35.*|*.5.201.35.*|*.6.201.35.*|*.7.201.35.*","*.2.201.34.*|*.3.201.34.*|*.4.201.34.*|*.5.201.34.*|*.6.201.34.*|*.7.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|*.4.201.35.510|*.5.201.35.510|*.6.201.35.510|*.7.201.35.510","*.2.201.34.510|*.3.201.34.510|*.4.201.34.510|*.5.201.34.510|*.6.201.34.510|*.7.201.34.510");
var СчВнеБюджРасх:S=if(Фондовый,"*.2.201.35.610|*.3.201.35.610|*.4.201.35.610|*.5.201.35.610|*.6.201.35.610|*.7.201.35.610","*.2.201.34.610|*.3.201.34.610|*.4.201.34.610|*.5.201.34.610|*.6.201.34.610|*.7.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 Валюта='"+Валюта_+"')","Валюта='"+Валюта_+"'");

var fОстЗП:L=[True];
var fN1:L;

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

var НастрGUID:S;
--
--Процедуры и функции -------------  
Proc Настр(aСохр:L);
var Flag:L;
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать("ДОКУМЕНТЫ.КАССА.КАССОВАЯ_КНИГА",0,0,"",НастрGUID):
    Раб.Настр.Добавить("fОстЗП","L");
    Раб.Настр.Добавить("fN1","L");
    Раб.Настр.Добавить("Trans","L");
    Раб.Настр.Добавить("Проводить","L");
    if aСохр: 
       Раб.Настр.Сохранить; 
      else 
       НастрGUID=Раб.Настр.Загрузить("","");
    fi;
 fi;
end;
                         
Proc ВнешнийВид;
var i:i;
 btnСохранить.Visible=False;
 btnОтмена.Visible=False;
 btnРасчет.Visible=ЭтоГруппа;
 rbОрдера.Visible=ЭтоГруппа;
 rbПроводки.Visible=ЭтоГруппа;
 cbПроведенные.Visible=ЭтоГруппа;
 cbФондовый.Visible=ЭтоГруппа;
 cbОстЗП.Visible=ЭтоГруппа;
 cbN1.Visible=ЭтоГруппа;
 btnПечать.Visible=not ЭтоГруппа;
 btnПредЛист.Visible=not ЭтоГруппа;
 btnСледЛист.Visible=not ЭтоГруппа;
 if ЭтоГруппа:
    BtnТитул.Left=270;
    BtnТитул.Top=120;
    btnПереход.Height=70;
    BtnПереход.Left=1380; --1190;
    BtnПереход.Top=120;
   else
    BtnТитул.Left=570;
    BtnТитул.Top=10;
    btnПереход.Height=60;
    BtnПереход.Left=360;
    BtnПереход.Top=240;
 fi;
 if Trans:
    cbПроведенные.Enabled=False;
    Секция1.Column(9,ColVisible,False);
    Секция2.Column(9,ColVisible,False);
   else
    cbПроведенные.Enabled=True;
    Секция1.Column(9,ColVisible,True);
    Секция2.Column(9,ColVisible,True);
 fi;
 if fN1:
    Секция1.Column(1,ColVisible,True);
    Секция2.Column(1,ColVisible,True);
    Секция1.Column(2,ColWidth,140);
    Секция1.Column(3,ColWidth,420);
    Секция1.Column(4,ColWidth,280);
    Секция1.Column(5,ColWidth,200);
    Секция1.Column(6,ColWidth,200);
    Секция1.Column(7,ColWidth,200);
    Секция1.Column(8,ColWidth,200);
    Секция2.Column(2,ColWidth,140);
    Секция2.Column(3,ColWidth,420);
    Секция2.Column(4,ColWidth,280);
    Секция2.Column(5,ColWidth,200);
    Секция2.Column(6,ColWidth,200);
    Секция2.Column(7,ColWidth,200);
    Секция2.Column(8,ColWidth,200);
   else
    Секция1.Column(1,ColVisible,False);
    Секция2.Column(1,ColVisible,False);
    Секция1.Column(2,ColWidth,150);
    Секция1.Column(3,ColWidth,430);
    Секция1.Column(4,ColWidth,280);
    Секция1.Column(5,ColWidth,210);
    Секция1.Column(6,ColWidth,210);
    Секция1.Column(7,ColWidth,210);
    Секция1.Column(8,ColWidth,210);
    Секция2.Column(2,ColWidth,150);
    Секция2.Column(3,ColWidth,430);
    Секция2.Column(4,ColWidth,280);
    Секция2.Column(5,ColWidth,210);
    Секция2.Column(6,ColWidth,210);
    Секция2.Column(7,ColWidth,210);
    Секция2.Column(8,ColWidth,210);
 fi;
 for i=2..8 do
  Гр[i]=i-if(fN1,0,1);
 od;
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 ReadFromCrd;
var n:i;
 Clear;
 if ЭтоГруппа: Exit; fi;
 for n=1..Ордера do
  N1_[n]=Ордера[n].N1;
  НДок_[n]=Ордера[n].НДок;
  Субъект_[n]=Ордера[n].Субъект;
  КорСч_[n]=Ордера[n].КорСч;
  ПрихБюдж_[n]=Ордера[n].ПрихБюдж;
  РасхБюдж_[n]=Ордера[n].РасхБюдж;
  ПрихВнеБюдж_[n]=Ордера[n].ПрихВнеБюдж;
  РасхВнеБюдж_[n]=Ордера[n].РасхВнеБюдж;
 od;
end;

Proc WriteToCrd;
var n,nn:i;
 if ЭтоГруппа: Exit; fi;
 for n=1..КолСтр do
  if Ордера<n: InsertFrame(Ордера,Ордера+1); fi;
  Ордера[n].N1=N1_[n];
  Ордера[n].НДок=НДок_[n];
  Ордера[n].Субъект=Субъект_[n];
  Ордера[n].КорСч=КорСч_[n];
  Ордера[n].ПрихБюдж=ПрихБюдж_[n];
  Ордера[n].РасхБюдж=РасхБюдж_[n];
  Ордера[n].ПрихВнеБюдж=ПрихВнеБюдж_[n];
  Ордера[n].РасхВнеБюдж=РасхВнеБюдж_[n];
  Ордера[n].Валюта=Валюта;
 od;
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 ЗаписьЛистов (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,"ОстКонВнеБюдж",ОНДВБ);
    NewRec=PutFieldN(OWA,NewRec,"ОстЗарпБюдж",if(fОстЗП,ОстЗарпБюдж,0));
    NewRec=PutFieldN(OWA,NewRec,"ОстЗарпВнеБюдж",if(fОстЗП,ОстЗарпВнеБюдж,0));
    NewRec=PutFieldS(OWA,NewRec,"ФиоКасс",ФиоКасс_);
    NewRec=PutFieldS(OWA,NewRec,"ФиоБух",ФиоБух_);
    if Последний: 
       NewRec=PutFieldN(OWA,NewRec,"ОстКонВсего",if(Фондовый,0,ОНДБ+ОНДВБ));
       NewRec=PutFieldI(OWA,NewRec,"КолПрих",КолПрих);
       NewRec=PutFieldI(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;

Proc ОбнулитьЛист;
 ОСТНАЧБЮДЖ=0;
 ОСТНАЧВНЕБЮДЖ=0;
 НОМЕРЛИСТАК=0;
 КОЛПРИХ=0;
 КОЛРАСХ=0;
 ОСТНАЧБЮДЖ=0;
 ОСТНАЧВНЕБЮДЖ=0;
 ОСТЗАРПБЮДЖ=0;
 ОСТЗАРПВНЕБЮДЖ=0;
 ClearVariable(Ордера);
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 ПоУмолчанию;
var Rec: Record;
 if GROUPDOC<>nil: Message("Запрещено создавать группу внутри группы",mtError); EditorCancel; Close; fi;
 GroupAttr=-1; GROUPDOC=nil;
 ЭтоГруппа=IsCardGroup(SelfCrd,Current);
 if ЭтоГруппа: 
    НОМЕРЛИСТА=Раб.Обл.СледСУчетомГодаФ(SelfCrd,"НОМЕРЛИСТА","Дата","UKey<>"+RecordToString(Current));
    КОММЕНТ="Касса ("+Валюта_+if(Фондовый," Фондовый","")+") за , листы с "+Str(НОМЕРЛИСТА)+" по";
    if ФИОКасс="" or ФИОБух="":
       Rec=Раб.Бюджет2005.НашРекв;
       if not Rec=nil:
          if ФИОКасс="": ФИОКасс=GetCardFieldS("Контрагент",Rec,"ФИОКасс"); fi;
          if ФИОБух="": ФИОБух=GetCardFieldS("Контрагент",Rec,"ФИОБух"); fi;
       fi;
    fi;
 fi;
 ОбнулитьЛист;
 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(СчВнеБюдж+"'"+Валюта_,Дата,Валюта_);
 ОстЗарпБюдж=Saldo(СчБюдж+"'"+Валюта_+"{КОСГУ.211!}",Дата,Валюта_);
 ОстЗарпВнеБюдж=Saldo(СчВнеБюдж+"'"+Валюта_+"{КОСГУ.211!}",Дата,Валюта_);
 ПрихБ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;
       if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(GetFieldS(OA,n2,"ТПризн")," ","КОСГУ.211!","")="":
          if tmp1="1": ОстЗарпБюдж=ОстЗарпБюдж+GetFieldN(OA,n2,"ТСУММА"); else ОстЗарпВнеБюдж=ОстЗарпВнеБюдж+GetFieldN(OA,n2,"ТСУММА"); fi;
       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;
      if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Trim(GetFieldS(OWA,n,"Призн")+" "+GetFieldS(OWA,n,"Цель"))," ","КОСГУ.211!","")="":
         if tmp1="1": ОстЗарпБюдж=ОстЗарпБюдж+ПрихБюдж_[Line]; else ОстЗарпВнеБюдж=ОстЗарпВнеБюдж+ПрихВнеБюдж_[Line]; fi;
      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;
       if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(GetFieldS(OA,n2,"ТПризн")," ","КОСГУ.211!","")="":
          if tmp1="1": ОстЗарпБюдж=ОстЗарпБюдж-GetFieldN(OA,n2,"ТСУММА"); else ОстЗарпВнеБюдж=ОстЗарпВнеБюдж-GetFieldN(OA,n2,"ТСУММА"); fi;
       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;
      if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Trim(GetFieldS(OWA,n,"Призн")+" "+GetFieldS(OWA,n,"Цель"))," ","КОСГУ.211!","")="":
         if tmp1="1": ОстЗарпБюдж=ОстЗарпБюдж-V4[УпрV]; else ОстЗарпВнеБюдж=ОстЗарпВнеБюдж-V5[УпрV]; fi;
      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;
   OA=OpenArray(OWA,n,"Позиции","");
    nr2=Records(OA);
    for n2=1..nr2 do
     if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(GetFieldS(OA,n2,"Призн")," ","КОСГУ.211!","")="":
        if tmp1="1": ОстЗарпБюдж=ОстЗарпБюдж-GetFieldN(OA,n2,"Сумма"); else ОстЗарпВнеБюдж=ОстЗарпВнеБюдж-GetFieldN(OA,n2,"Сумма"); fi;
     fi;
    od;
   CloseWorkArea(OA);
   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 Фондовый:
    ОстКонВсего=0;
   else
    ОстКонВсего=ОстКонБюдж+ОстКонВнеБюдж;
 fi;
 КОММЕНТ="Касса ("+Валюта_+if(Фондовый," Фондовый","")+") за "+DateToString(Дата)+", листы с "+Str(НОМЕРЛИСТА)+" по "+Str(НОМЕРЛИСТАК);
 НАЧАЛОЛИСТА="Остаток на начало дня";
 КОНЕЦЛИСТА="Остаток на конец дня";
 ИТОГОЗАДЕНЬ="Итого за день";
 ЗаписьЛистов(NumPage,Line);
 EditorApply;
 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 ПрихБTrans <>ИтогПрихБюдж   : MsgПрихБ =" приход бюджетных средст по журналам: "+Str(ПрихБTrans,2); fi;
 if ПрихВБTrans<>ИтогПрихВнеБюдж: MsgПрихВБ=" приход внебюджетных средст по журналам: "+Str(ПрихВБTrans,2); fi;
 if РасхБTrans <>ИтогРасхБюдж   : MsgРасхБ =" расход бюджетных средст по журналам: "+Str(РасхБTrans,2); fi;
 if РасхВБTrans<>ИтогРасхВнеБюдж: MsgРасхВБ=" расход внебюджетных средст по журналам: "+Str(РасхВБTrans,2); fi;
 if MsgПрихБ<>"" or MsgПрихВБ<>"" or MsgРасхБ<>"" or MsgРасхВБ<>"":
    Message("Внимание! Проводки в журналах не соответствуют записям в картотеках."+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 Фондовый:
    ОстКонВсего=0;
   else
    ОстКонВсего=ОстКонБюдж+ОстКонВнеБюдж;
 fi;
 КОММЕНТ="Касса ("+Валюта_+if(Фондовый," Фондовый","")+") за "+DateToString(Дата)+", листы с "+Str(НОМЕРЛИСТА)+" по "+Str(НОМЕРЛИСТАК);
 НАЧАЛОЛИСТА="Остаток на начало дня";
 КОНЕЦЛИСТА="Остаток на конец дня";
 ИТОГОЗАДЕНЬ="Итого за день";
 ЗаписьЛистов(NumPage,Line);
 EditorApply;
 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 ПрихБTrans <>ИтогПрихБюдж   : MsgПрихБ =" приход бюджетных средст по журналам: "+Str(ПрихБTrans,2); fi;
 if ПрихВБTrans<>ИтогПрихВнеБюдж: MsgПрихВБ=" приход внебюджетных средст по журналам: "+Str(ПрихВБTrans,2); fi;
 if РасхБTrans <>ИтогРасхБюдж   : MsgРасхБ =" расход бюджетных средст по журналам: "+Str(РасхБTrans,2); fi;
 if РасхВБTrans<>ИтогРасхВнеБюдж: MsgРасхВБ=" расход внебюджетных средст по журналам: "+Str(РасхВБTrans,2); fi;
 if MsgПрихБ<>"" or MsgПрихВБ<>"" or MsgРасхБ<>"" or MsgРасхВБ<>"":
    Message("Внимание! Проводки в журналах не соответствуют записям в картотеках."+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(СчВнеБюдж+"'"+Валюта_,Дата,Валюта_);
 ОстЗарпБюдж=Saldo(СчБюдж+"'"+Валюта_+"{КОСГУ.211!}",Дата,Валюта_);
 ОстЗарпВнеБюдж=Saldo(СчВнеБюдж+"'"+Валюта_+"{КОСГУ.211!}",Дата,Валюта_);
 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 not Flag:
      if Match(tmp,"МОЛ.*") or Match(tmp,"Ф.*") or Match(tmp,"К.*"):
         if Pos(tmp,ПРИЗНАКИ_ИГНОР)=0: Flag=True; fi;
      fi;
   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;
  if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(TransSigns(t)," ","КОСГУ.211!|+КОСГУ.211!","|")="":
     if Ист="1": ОстЗарпБюдж=ОстЗарпБюдж+ПрихБюдж_[Line]; else ОстЗарпВнеБюдж=ОстЗарпВнеБюдж+ПрихВнеБюдж_[Line]; fi;
  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,"К.*"):
      if Pos(tmp,ПРИЗНАКИ_ИГНОР)=0:Flag=True; fi;
   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;
  if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(TransSigns(t)," ","КОСГУ.211!|-КОСГУ.211!","|")="":
     if Ист="1": ОстЗарпБюдж=ОстЗарпБюдж-РасхБюдж_[Line]; else ОстЗарпВнеБюдж=ОстЗарпВнеБюдж-РасхВнеБюдж_[Line]; fi;
  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 Фондовый:
    ОстКонВсего=0;
   else
    ОстКонВсего=ОстКонБюдж+ОстКонВнеБюдж;
 fi;
 КОММЕНТ="Касса ("+Валюта_+if(Фондовый," Фондовый","")+") за "+DateToString(Дата)+", листы с "+Str(НОМЕРЛИСТА)+" по "+Str(НОМЕРЛИСТАК);
 НАЧАЛОЛИСТА="Остаток на начало дня";
 КОНЕЦЛИСТА="Остаток на конец дня";
 ИТОГОЗАДЕНЬ="Итого за день";
 ЗаписьЛистов(NumPage,Line);
 EditorApply;
 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;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func Дата_OnEnter(FieldName: String; Iter: Integer): logical;
 if НаличиеЛистов:
    if EnqOkCancel("Изменение даты приведет к удалению данных отчета за данное число. Продолжить ?")=cmCancel: ^False; fi;
    УдалитьЛисты;
    ОбнулитьЛист;
 fi;
 ^True;
end;

Func Дата_OnVerify(FieldName: String; Iter: Integer; Value: Date):Logical;
var prevДата:D;
 prevДата=Дата;
 Дата=Value;
 ОбработатьДату(prevДата,Дата);
 Return True;
end;

Func Дата_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:D;
var prevДата:D;
 Template.HideEditor(False);
 tmp=Calendar;
 if tmp=1.1.100: ^Cur; fi;
 prevДата=Дата;
 Дата=tmp;
 ОбработатьДату(prevДата,Дата);
 ^Cur;
end;

Proc Дата_OnExit(FieldName: String; Iter: Integer);
 КОММЕНТ="Касса ("+Валюта_+if(Фондовый," Фондовый","")+") за "+DateToString(Дата)+", листы с "+Str(НОМЕРЛИСТА)+" по "+Str(НОМЕРЛИСТАК);
end;

Proc Фио_onExit(FieldName: String; Iter: Integer);
var OWA,n,nr:I;
 if НаличиеЛистов:
    if EnqOkCancel("Обновить фамилии на листах за данный день ?")=cmOK:
       OWA=OpenWorkArea(SelfCrd,"НОМЕРЛИСТА","GroupDoc="+RecordToString(Current));
       Try
        nr=Records(OWA);
        if nr=0: Exit; fi;
        BeginChanging(OWA);
        Try
         n=PutFieldS(OWA,nr,"ФИОКасс",ФИОКасс_);
         n=PutFieldS(OWA,nr,"ФИОБух",ФИОБух_);
         EndChanging(OWA);
        Except
         CancelChanging(OWA);
         Raise;
        end;
       Finally
        CloseWorkArea(OWA);
       end;
    fi;
 fi;
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,"ИНИЦИАЛЫ"));
 if Field="ФиоКасс_" or Field="ФиоБух_":
    Фио_onExit(Field,1);
 fi;
 ^Cur;
end;

Func НомерЛиста_OnVerify(FieldName: String; Iter: Integer; Value: Integer): Logical;
var OWA,n,nr,n2:i;
var UKey:S;
 UKey=RecordToString(Current);
 OWA=OpenWorkArea(SelfCrd,"НОМЕРЛИСТА","GroupDoc="+UKey);
 Try
  Nr=Records(OWA);
  SetFilter(OWA,"UKey<>"+UKey+" and GroupDoc<>"+UKey+" and НОМЕРЛИСТА>="+Str(Value)+" and НОМЕРЛИСТА<="+Str(Value+Nr-1));
  n2=Records(OWA);
 Finally
  CloseWorkArea(OWA);
 end;
 if n2>0:
    if EnqOkCancel("Страницы с номерами "+Str(Value)+"..."+Str(Value+n2-1)+" уже существуют в книге. Продолжить ?")=cmCancel: ^False; fi;
 fi;
 ^True;
end;

Proc НомерЛиста_OnExit(FieldName: String; Iter: Integer);
 ПрисвоитьНомерЛиста;
end;

Func НомерЛиста_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 if Дата=1.1.100: Template.HideEditor(False); Message("Введите дату",mtError); Template.Field="Дата"; ^Cur; fi;
 Cur=Str(Раб.Обл.СледСУчетомДатыФ(SelfCrd,"НОМЕРЛИСТА","Дата",Дата,"GroupDoc<>"+RecordToString(Current)+" and UKey<>"+RecordToString(Current)));
 ^Cur;
end;

Func Link_OnEnter(FieldName: String; Iter: Integer): logical;
 Iter=Int(SubStr(FieldName,6,2));
 if Ордера[Iter].ПРИХОРД<>nil: if Фондовый: OpenBlank("ДОКУМЕНТЫ.ДЕНДОК.ПРИХОД",True,Ордера[Iter].ПРИХОРД); else OpenBlank("Документы.Касса.Прихорд",True,Ордера[Iter].ПРИХОРД); fi;
   |Ордера[Iter].РАСХОРД<>nil: if Фондовый: OpenBlank("ДОКУМЕНТЫ.ДЕНДОК.РАСХОД",True,Ордера[Iter].РАСХОРД); else OpenBlank("Документы.Касса.Расхорд",True,Ордера[Iter].РАСХОРД); fi;
   |Ордера[Iter].РПО_ВЕДПОДОТЧЕТ<>nil: OpenBlank("Документы.Касса.ВЕДПОДОТЧЕТ",True,Ордера[Iter].РПО_ВЕДПОДОТЧЕТ);
 fi;
 ^False;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc btnOK_onClick (Obj:S);
 EditorApply;
 Close;
end;

Proc btnОтмена_onClick (Obj:S);
 EditorCancel;
 Close;
end;

Proc btnРасчет_OnClick(Sender: String);
 if Дата<=1.1.100: Message("Введите дату",mtError); Template.Field="Дата"; Exit; fi;
 if НомерЛиста=0: Message("Введите номер листа",mtError); Template.Field="НомерЛиста"; Exit; fi;
 if НаличиеКассыЗаДень:
    if EnqOkCancel("Внимание ! Отчет за "+DateToString(Дата)+" уже существует, удалить его ?",mtWarning)=cmOk: УдалитьКассуЗаДень; fi;
 fi;
 УдалитьЛисты;
 Валюта=Валюта_;
 Refresh;
 if Trans: 
    РасчетПоПроводкам; 
   else 
    if Фондовый:
       РасчетПоОрдерамФ;
      else
       РасчетПоОрдерам;
    fi;
 fi;
end;

Proc rb_onChange (Sender: String);
 Настр(True);
 ВнешнийВид;
end;

Proc btnТитул_onClick (Obj:S);
var n:i;
 ClearVariable(Buf);
 Buf[1]="Титульный лист";
 Buf[2]="Последний лист";
 n=Alternate("Выбор листа",Buf,30,1,12);
 if n=0: Exit; fi;
 if n=1: OpenBlank("ДОКУМЕНТЫ.КАССА.КАССОВАЯ_КНИГА_ТИТУЛ",True);
   |n=2: OpenBlank("ДОКУМЕНТЫ.КАССА.КАССОВАЯ_КНИГА_ПОСЛ",True);
 fi;
end;

Proc btnПереход_OnClick(Sender: String);
var UKey,tmp:S;
var OWA,n,nn,z:i;
var Rec: Record;
 ClearVariable(Buf);
 ClearVariable(BufUKey);
 tmp=" за "+DateToString(Дата);
 if ЭтоГруппа: UKey=RecordToString(Current); z=1; else UKey=RecordToString(GroupDoc); z=2; fi;
 OWA=OpenWorkArea(SelfCrd,"НОМЕРЛИСТА","GroupDoc="+UKey);
 Try
  if z>1: Buf[1]="Расчетный лист"+tmp; BufUKey[1]=UKey; fi;
  nn=Records(OWA);
  for n=1..nn do
   Buf[z]="Лист № "+Str(GetFieldI(OWA,n,"НОМЕРЛИСТА"))+"("+GetFieldS(OWA,n,"Валюта")+" "+if(GetFieldL(OWA,n,"Фондовый"),"Фондовый","")+")"+tmp;
   BufUKey[z]=RecordToString(GetRecordKey(OWA,n));
   z=z+1;
  od;
 Finally
  CloseWorkArea(OWA);
 end;
 if LengthOfArray(Buf)=0: Message("Расчета за данный день не существует"); Exit; fi;
 n=Alternate("Вкладные листы кассовой книги"+tmp,Buf,-1,1,12);
 if n=0: Exit; fi;
 Rec=StringToRecord(BufUKey[n]);
 РАБ.ПЕРЕХОД_ККН.Rec=Nil;
 if IsBlankOpen("РАБ.ПЕРЕХОД_ККН"): Close("РАБ.ПЕРЕХОД_ККН"); fi;
 if (ЭтоГруппа=True) or  (ЭтоГруппа=False and n=1): 
     РАБ.ПЕРЕХОД_ККН.MODAL=ModalMode; --вызваем бланк с таймером
     РАБ.ПЕРЕХОД_ККН.Rec=Rec;
     OpenBlank("РАБ.ПЕРЕХОД_ККН",False);
   |True: Rec=Current(Rec);
 fi;
 ClearVariable(Buf);
 ClearVariable(BufUKey);
end;

Proc btnПредЛист_OnClick(Sender: String);
var OWA,n,nr:i;
var Rec:Record;
 OWA=OpenWorkArea(SelfCrd,"НОМЕРЛИСТА","GroupDoc="+RecordToString(GroupDoc));
 Try
  Nr=Records(OWA);
  if Nr<1: Exit; fi;
  n=Search(OWA,1,НОМЕРЛИСТА)-1;
  if n<1: Message("Данный лист является первым в отчете за день"); Exit; fi;
  Rec=GetRecordKey(OWA,n);
 Finally
  CloseWorkArea(OWA);
 end;
 Rec=Current(Rec);
end;

Proc btnСледЛист_OnClick(Sender: String);
var OWA,n,nr:i;
var Rec:Record;
 OWA=OpenWorkArea(SelfCrd,"НОМЕРЛИСТА","GroupDoc="+RecordToString(GroupDoc));
 Try
  Nr=Records(OWA);
  if Nr<1: Exit; fi;
  n=Search(OWA,1,НОМЕРЛИСТА)+1;
  if n>Nr: Message("Данный лист является последним в отчете за день"); Exit; fi;
  Rec=GetRecordKey(OWA,n);
 Finally
  CloseWorkArea(OWA);
 end;
 Rec=Current(Rec);
end;

Proc btnПечать_OnClick(Sender: String);
 Раб.Настр_Печать.Prn("","","RPO_0504514_001.cfg","",1);
 if EnqOkCancel("Переверните и вставте в принтер напечатанный лист с первой страницей листа. Продолжить ?",mtWarning)=cmCancel: Exit; fi;
 Раб.Настр_Печать.Prn("","","RPO_0504514_002.cfg","",1);
end;

Func Валюта_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
var hВалюта,Cur:S;
 hВалюта=Валюта_;
 ClearVariable(Buf);
 n=0;
 for Currencies Cur="*" do
  n=n+1;
  Buf[n]=Up(Cur);
 od;
 n=Alternate("Валюта документа",Buf,-1,SearchInArray(Buf,Валюта),12);
 if n=0: ^False; fi;
 Валюта=Buf[n];
 if not hВалюта=Валюта_ and not Дата=1.1.100:
    if EnqOkCancel("Изменилась валюта документа, необходимо выполнить расчет",mtWarning)=cmOk:
       btnРасчет_OnClick(FieldName);
      else
       Валюта=hВалюта;
    fi;
 fi;
 Return False;
end;

Proc cbФондовый_OnChange(Sender: String);
 if not Дата=1.1.100:
    if EnqOkCancel("Изменился тип документа, необходимо выполнить расчет",mtWarning)=cmOk:
       btnРасчет_OnClick(Sender);
      else
       Фондовый=not Фондовый;
       cbФондовый.State=Фондовый;
    fi;
 fi;
end;

Proc cbОстЗП_OnChange(Sender: String);
 Настр(True);
end;

Proc cbN1_OnChange(Sender: String);
 Настр(True);
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc Template_onOpen(Create: Logical);
 if Раб.Настр_Печать.ExistCfg("Rpo_0504514_000.cfg")=False: Раб.Настр_Печать.CreateCfg("","Rpo_0504514_000.cfg"); fi;
end;

Proc Template_onRead;
 Настр(False);
 StoreUKey=Current;
 ЭтоГруппа=IsCardGroup(SelfCrd,Current);
 if НоваяЗапись: ПоУмолчанию; fi;
 ВнешнийВид;
 ФиоКасс_=ФиоКасс;
 ФиоБух_=ФиоБух;
 ReadFromCrd;
end;

Func Template_onValidate: Logical;
 if StoreUKey<>Current: EditorCancel; ^False; fi;
 if ЭтоГруппа and not GROUPDOC=nil:
    Message("Запрещено создавать группу внутри группы",mtError);
    EditorCancel; 
    Close;
    ^False;
 fi;
 WriteToCrd;
 ^True;
end;

Proc Template_onCancel;
 ReadFromCrd;
end;
--Обработчики событий шаблона -----
--

Конец
