БЛАНКСШАБЛОНОМ "Журнал операций. ф.0504071";

2-- Переменные и массивы бланка
Упр:I;
Упр2:I;
Упр3:I;

var nЖО[]:I;
ЖО:S; --Номер журнала
ЖурОпер:S;  -- наименование журнала в заголовке
ВидЖурОпер:S; -- наименование вида журнала в заголовке

FlagНИ:L;

-- шапка
Учреждение:S;
ОКПО:S;
ПризнПодр:S;
var НаимПодр:S=if(Name_A(ПризнПодр)="" or Name_A(ПризнПодр)=" ",ПризнПодр,Name_A(ПризнПодр));
НаимУЧР:S;
НаимБюдж:S;
ГлБухгалтер:S;
ДолжнИсп:S;
Исполнитель:S;

MM:I=[Mon(ToDay)];  -- номер месяца
var MMTxt:S=if(MM<=12,Месяц(MM),if(MM=13,"Год",if(MM=14,"I квартал",if(MM=15,"II квартал",if(MM=16,"III квартал","IV квартал")))));
YYYY:I=[Year(ToDay)]; -- год
var ДН_:D=if(MM<13,Dat(1,MM,YYYY),if(MM=13,Dat(1,1,YYYY),if(MM=14,Dat(1,1,YYYY),if(MM=15,Dat(1,4,YYYY),if(MM=16,Dat(1,7,YYYY),Dat(1,10,YYYY))))));
var ДН:D=if(FlagНИ,Dat(1,1,YYYY),ДН_);
var ДК:D=if(MM<12,Dat(1,MM+1,YYYY),if(MM=12 or MM=13 or MM=17,Dat(1,1,YYYY+1),if(MM=14,Dat(1,4,YYYY),if(MM=15,Dat(1,7,YYYY),if(MM=16,Dat(1,10,YYYY))))));

ОКЕИ:S=["383"];
ЕдИзм:S;
ЕдИзм_:S;
Вал:S;
var ВалУсл:S=if(Вал="","","'"+Вал);
BaseCurr:S;

Гр4:I=[1];
var Гр4_:I=5;

var Гр5:I=6;
LMaxГр5:I=[255];

Знак:S;
ЗнакСл:L;
СчУсл:S;
АнУсл:S;
Показатель:S;
СчУслДоп:S;
АнУслДоп:S;
ПоказательДоп:S;
var УпрДоп:L=not Показатель="";

ЖОУсл:S;

-- данные таблицы
var ПолеСорт[]:S;

пп[]:I=$;
ДокДата[]:D; 
ДокНомер[]:S;
ДокНаим[]:S; 
Призн[]:S;
ВалПок[]:S;
var НаимПок_[]:S=Name_A(Призн[$]);
var НаимПок[]:S=if(ВалПок[$]="" and not Вал="" and not Вал=BaseCurr,"в рублевом эквиваленте",if(Гр4=0 or НаимПок_[$]="" or НаимПок_[$]=" ",Призн[$],if(Гр4=1,НаимПок_[$],if(Гр4=2,НаимПок_[$]+" ("+Призн[$]+")",if(Гр4=3,Призн[$]+" ("+НаимПок_[$]+")")))));

ДатОпер[]:D;
СодОпер[]:S;
ОстНачД[]:N;
ОстНачК[]:N;
Сумма[]:N;
ОстКонД[]:N;
ОстКонК[]:N;
СчДеб[]:S;
СчКре[]:S; 
Пр[]:I;
Зн[]:I;
ДокID[]:I;--S;

ИтогОстНач[]:N;
ИтогОстНачД[]:N;
ИтогОстНачК[]:N;
ИтогСумма[]:N;
ИтогОстКон[]:N;
ИтогОстКонД[]:N;
ИтогОстКонК[]:N;

СчДеб2[]:S;
СчКре2[]:S;
Сумма2[]:N;
Сч2[]:S;
ВалПок2[]:S;

var ТекстИтого[]:S;
var ТекстОбороты[]:S=if($=1,"Обороты для главной книги ","")+if(ВалПок2[$]="" and not Вал="" and not Вал=BaseCurr,"в рублевом эквиваленте","");

var BufOWA[]:I;
var BufCrd[]:S;
var BufField[]:S;
var BufFieldD[]:S;
var BufFieldCmnt[]:S;
var BufДокНаим[]:S;

var BufСчЖО[]:S;
var BufСчПр[]:S;
var BufСч9[]:S;

var Buf []:S;
var Buf2[]:S;
var Buf3[]:S;

СверткаКБК:L;
СверткаДок:L;
var УВОО:L;
var НЕТ_ВНПР:L;
Порядок:I;

--Свертка проводок по документам
BufДок:Record;
BufДокКарт[]:S;
BufДокПр[]:I;
BufДокД[]:D;
BufДокСчДеб[]:S;
BufДокСчКре[]:S;
BufДокПризн[]:S;
BufДокСум[]:N;
BufДокВалПок[]:S;
BufДокЗн[]:I;
BufДокIndex[]:S;
BufДокЧпр[]:I;
--УВОО
Т1: Section;
Т2: Section;
Т3: Section;
Т4: Section;

var BufCellFontStyle[]:I;
var BufCellFontSize[]:I;
var BufCellFontColor[]:I;
var BufCellBorder[]:S;
var BufCellAlignment[]:I;
var BufCellFormat[]:S;
var BufCellBgColor[]:I;
var BufCellFieldType[]:I;
var BufCellContents[]:S;
var BufCellLookup[]:L;
var BufCellEventOnLookup[]:S;

btnПоиск: Object;
btnExcel: Object;

2-- Процедуры и 0Func2ции бланка
Proc Инициализация;
var cc,c,s,d:i;
var Obj:Object;
 ClearVariable(BufCellFontStyle);
 ClearVariable(BufCellFontSize);
 ClearVariable(BufCellFontColor);
 ClearVariable(BufCellBorder);
 ClearVariable(BufCellAlignment);
 ClearVariable(BufCellFormat);
 ClearVariable(BufCellBgColor);
 ClearVariable(BufCellFieldType);
 ClearVariable(BufCellContents);
 ClearVariable(BufCellLookup);
 ClearVariable(BufCellEventOnLookup);
 if Упр=0: InsertFrame(Упр,1); fi;
 if Упр2=0: InsertFrame(Упр2,1); fi;
 d=0;
 for s=1..2 do
  if FindObject("Т"+Str(s),Obj):
     cc=AsInteger(Obj.ColsCount);
     for c=1..cc do
      BufCellFontStyle[d+c]=AsInteger(Obj.Cell(1,c,CellFontStyle,""));
      BufCellFontSize[d+c]=AsInteger(Obj.Cell(1,c,CellFontSize,""));
      BufCellFontColor[d+c]=AsInteger(Obj.Cell(1,c,CellFontColor,""));
      BufCellBorder[d+c]=AsString(Obj.Cell(1,c,CellBorder,""));
      BufCellAlignment[d+c]=AsInteger(Obj.Cell(1,c,CellAlignment,""));
      BufCellFormat[d+c]=AsString(Obj.Cell(1,c,CellFormat,""));
      BufCellBgColor[d+c]=AsInteger(Obj.Cell(1,c,CellBgColor,""));
      BufCellContents[d+c]=AsString(Obj.Cell(1,c,CellContents,""));
      BufCellLookup[d+c]=AsLogical(Obj.Cell(1,c,CellLookup,""));
      BufCellFieldType[d+c]=AsInteger(Obj.Cell(1,c,CellFieldType,""));
      BufCellEventOnLookup[d+c]=AsString(Obj.Cell(1,c,CellEventOnLookup,""));
     od;
     d=d+cc;
  fi;
 od;
end;

Proc Оформление;
var c,cc,r,rr,d:i;
var Призн_,CellBorder_,CellContents_:S;
var CellFontStyle_,CellFontColor_,CBC,CellBgColor_:I;
 if УВОО:
    Т1.Visible=False;
    Т2.Visible=False;
    Т3.Visible=False;
    Т4.Visible=False;
    ShowProgress(Упр*2,"Оформление отчета.....");
    Try
     if not AsInteger(Т3.RowsCount)=Упр:
        rr=Упр;
        cc=AsInteger(Т1.ColsCount);
        Т3.RowsCount=rr;
        Призн_=if(Показатель="",Str(ДокID[1]),Призн[1]);
        CBC=coAqua;
        CellBgColor_=CBC;
        for r=1..rr do
         ProgressPos(r);
         for c=1..cc do
          if Показатель="" or Порядок=1:
             CellBorder_=BufCellBorder[c];
             CellFontStyle_=BufCellFontStyle[c];
             if Пр[r]=-1: CellFontStyle_=fsBold;
               |True: CellFontStyle_=BufCellFontStyle[c];
             fi;
             if not Призн_=Str(ДокID[r]): Призн_=Str(ДокID[r]); CBC=if(CBC=coAqua,15657233,coAqua); fi;
            else
             if Пр[r]=-1 and СодОпер[r]="Итого": CellFontStyle_=fsBold; if ВалПок[r]="": CellBorder_=SubStr(BufCellBorder[c],1,6)+"2"; else  CellBorder_=BufCellBorder[c]; fi;
               |True: CellFontStyle_=BufCellFontStyle[c]; CellBorder_=BufCellBorder[c];
             fi;
             if Пр[r]=-1 and СодОпер[r]="Остаток на начало периода" or СодОпер[r]="Остаток на конец периода": CellFontColor_=coNavy;
               |True: CellFontColor_=BufCellFontColor[c];
             fi;
             if not Призн_=Призн[r]: Призн_=Призн[r]; CBC=if(CBC=coAqua,15657233,coAqua); fi;
          fi;
          if BufCellBgColor[c]=coAqua: CellBgColor_=CBC; else CellBgColor_=BufCellBgColor[c]; fi;
          Т3.Cell(r,c,CellFontStyle,CellFontStyle_);
          Т3.Cell(r,c,CellFontSize,7);
          Т3.Cell(r,c,CellBorder,CellBorder_);
          Т3.Cell(r,c,CellFontColor,CellFontColor_);
          Т3.Cell(r,c,CellAlignment,BufCellAlignment[c]);
          Т3.Cell(r,c,CellFormat,BufCellFormat[c]);
          Т3.Cell(r,c,CellBgColor,CellBgColor_);
          Т3.Cell(r,c,CellContents,BufCellContents[c]+"["+Str(r)+"]");
          Т3.Cell(r,c,CellLookup,BufCellLookup[c]);
          Т3.Cell(r,c,CellFieldType,BufCellFieldType[c]);
          Т3.Cell(r,c,CellEventOnLookup,BufCellEventOnLookup[c]);
         od;
         Т3.CellLinks( 8,r, 9,r);
         Т3.CellLinks(10,r,11,r);
         Т3.CellLinks(14,r,15,r);
         Т3.CellLinks(16,r,17,r);
         Т3.CellLinks(18,r,19,r);
        od;
       fi;
       --Оформление итоговых оборотов
       ShowProgress(Упр2*2,"Оформление отчета.....");
       if not AsInteger(Т4.RowsCount)=Упр2:
          rr=Упр2;
          d=AsInteger(Т1.ColsCount);
          cc=AsInteger(Т2.ColsCount);
          Т4.RowsCount=rr;
          Призн_=Сч2[1];
          CBC=coAqua;
          CellBgColor_=CBC;
          for r=1..rr do
           ProgressPos(rr+r);
           if not Призн_=Сч2[r]: Призн_=Сч2[r]; CBC=if(CBC=coAqua,15657233,coAqua); fi;
           for c=1..cc do
            if (СчДеб2[r]="x" or СчКре2[r]="x") and not BufCellFieldType[d+c]=1 and c>=7: CellFontStyle_=fsBold;
              |True: CellFontStyle_=BufCellFontStyle[d+c];
            fi;
            if not BufCellFieldType[d+c]=1: CellContents_=BufCellContents[d+c]+"["+Str(r)+"]"; else CellContents_=BufCellContents[d+c]; fi;
            if BufCellBgColor[d+c]=coAqua: CellBgColor_=CBC; else CellBgColor_=BufCellBgColor[d+c]; fi;
            Т4.Cell(r,c,CellFontStyle,CellFontStyle_);
            Т4.Cell(r,c,CellFontSize,7);
            Т4.Cell(r,c,CellBorder,BufCellBorder[d+c]);
            Т4.Cell(r,c,CellAlignment,BufCellAlignment[d+c]);
            Т4.Cell(r,c,CellFormat,BufCellFormat[d+c]);
            Т4.Cell(r,c,CellBgColor,CellBgColor_);
            Т4.Cell(r,c,CellContents,CellContents_);
            Т4.Cell(r,c,CellLookup,BufCellLookup[d+c]);
            Т4.Cell(r,c,CellFieldType,BufCellFieldType[d+c]);
            Т4.Cell(r,c,CellEventOnLookup,BufCellEventOnLookup[d+c]);
           od;
         Т4.CellLinks( 5,r,11,r);
         Т4.CellLinks(14,r,15,r);
         Т4.CellLinks(16,r,17,r);
         Т4.CellLinks(18,r,19,r);
          od;
       fi;
      Finally
       CloseProgress;
      end;
 fi;
 Т1.Visible=not УВОО; 
 Т1.CanPrint=not УВОО; 
 Т2.Visible=not УВОО;
 Т2.CanPrint=not УВОО;
 Т3.Visible=УВОО;
 Т3.CanPrint=УВОО;
 Т4.Visible=УВОО;
 Т4.CanPrint=УВОО;
end;

Func DateToStr(Value:D):S;
var Y,M,D:S;
var Ret:S;
 Y=Str(Year(Value));
 M=Str(Mon(Value)); if Length(M)=1: M="0"+M; fi;
 D=Str(Day(Value)); if Length(D)=1: D="0"+D; fi;
 Ret=Y+"."+M+"."+D;
 ^Ret;
end;

Proc НайтиЖурнал;
Var OWA,OA,r,i,n:I;
РАБ.ЖО2.ИнитБаза;
OWA=OpenWorkArea("РПО_ЖО","UpdateTime");
try
 r=GetRecordNumber(OWA,РАБ.ЖО2.Last);
 OA=OpenArray(OWA,r,"ПОЗИЦИЯ","Ном");
 try
  ClearVariable(Buf);
   for i=1..Records(OA) do
    Buf[i]=GetFieldS(OA,i,"Ном");
   od;
   n=0;
   ClearVariable(nЖО);
   while n<>-1 do
     n=SearchInArray(Buf,ЖО,False,n+1);
     if n<>-1 then InsertInArray(nЖО,1,n); fi;
   od;
   if LengthOfArray(nЖО)>0: ВидЖурОпер=GetFieldS(OA,nЖО[1],"Наим"); fi;
 finally
 CloseWorkArea(OA);
 end;
finally
CloseWorkArea(OWA);
end;
end;

Func GetFieldЖО(name:S;it:i):S;
Var OWA,OA,r:I;
var myval:S;
РАБ.ЖО2.ИнитБаза;
OWA=OpenWorkArea("РПО_ЖО","UpdateTime");
r=GetRecordNumber(OWA,РАБ.ЖО2.Last);
try
 OA=OpenArray(OWA,r,"ПОЗИЦИЯ","Ном");
 try
   if name="АнУсл":
     myval=if(GetFieldS(OA,it,"Показатель")="",GetFieldS(OA,it,"АнУслДоп"),if(GetFieldS(OA,it,"АнУслДоп")="",GetFieldS(OA,it,"Показатель"),"("+GetFieldS(OA,it,"Показатель")+")&("+GetFieldS(OA,it,"АнУслДоп")+")"));
     |name="СчУсл":
     myval="("+GetFieldS(OA,it,"Сч")+")"+if(GetFieldS(OA,it,"КБК")="" and GetFieldS(OA,it,"ВД")="?","","&("+if(GetFieldS(OA,it,"КБК")="","*",GetFieldS(OA,it,"КБК"))+"."+GetFieldS(OA,it,"ВД")+".???.??.*)");
     |name="Number": myval=Str(records(OA));
     else myval=GetFieldS(OA,it,name); fi;
 finally
 CloseWorkArea(OA);
 end;
finally
CloseWorkArea(OWA);
end;
Return myval;
end;

Proc Очистить2;
 ClearVariable(Упр2);
 ClearVariable(СчДеб2);
 ClearVariable(СчКре2);
 ClearVariable(Сумма2);
 ClearVariable(Сч2);
 ClearVariable(ВалПок2);
 Т4.Visible=False;
 Т4.CanPrint=False;
 Т4.RowsCount=1;
end;

Proc ОчиститьДок;
 ClearVariable(BufДок);
 ClearVariable(BufДокКарт);
 ClearVariable(BufДокПр);
 ClearVariable(BufДокД);
 ClearVariable(BufДокСчДеб);
 ClearVariable(BufДокСчКре);
 ClearVariable(BufДокПризн);
 ClearVariable(BufДокСум);
 ClearVariable(BufДокВалПок);
 ClearVariable(BufДокЗн);
 ClearVariable(BufДокIndex);
 ClearVariable(BufДокЧпр);
end;

Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(Упр3);
 ClearVariable(ДокДата);
 ClearVariable(ДокНомер);
 ClearVariable(ДокНаим);
 ClearVariable(НаимПок);
 ClearVariable(СодОпер);
 ClearVariable(ДатОпер);
 ClearVariable(ОстНачД);
 ClearVariable(ОстНачК);
 ClearVariable(Сумма);
 ClearVariable(ОстКонД);
 ClearVariable(ОстКонК);
 ClearVariable(СчДеб);
 ClearVariable(СчКре);
 ClearVariable(Пр);
 ClearVariable(Призн);
 ClearVariable(Зн);
 ClearVariable(ДокID);
 ClearVariable(ВалПок);
 ClearVariable(ТекстИтого);
 ClearVariable(ИтогОстНач);
 ClearVariable(ИтогОстНачД);
 ClearVariable(ИтогОстНачК);
 ClearVariable(ИтогСумма);
 ClearVariable(ИтогОстКон);
 ClearVariable(ИтогОстКонД);
 ClearVariable(ИтогОстКонК);
 ClearVariable(ЖОУсл);
 ОчиститьДок;
 Очистить2;
 Т3.Visible=False;
 Т3.CanPrint=False;
 Т3.RowsCount=1;
end;

xcachCrd[]:I;
xcachNum[]:S;
--xcachRec:Record;
xcachCmnt[]:S;
xcachDat[]:D;

Proc НачатьДок;
 ClearVariable(xcachCrd);
 ClearVariable(xcachDat);
 ClearVariable(xcachNum);
 ClearVariable(xcachCmnt);

 ClearVariable(BufOWA);
 ClearVariable(BufCrd);
 ClearVariable(BufField);
 ClearVariable(BufFieldD);
 ClearVariable(BufFieldCmnt);
 ClearVariable(BufДокНаим);
 Раб.ИмяПолеКарт.Инициализация;
end;

Func ПолучитьРабочиюОбласть(Crd:S):I;
var z:i;
 z=SearchInArray(BufCrd,Crd,True);
 if z=-1:
    z=InsertInArraySort(BufCrd,Crd);
    InsertInArray(BufOWA,z,OpenWorkArea(Crd,""));
    InsertInArray(BufField,z,Раб.ИмяПолеКарт.ИмяПоля(Crd,"Номер"));
    InsertInArray(BufFieldD,z,Раб.ИмяПолеКарт.ИмяПоля(Crd,"ДАТА"));
    InsertInArray(BufДокНаим,z,Раб.ИмяПолеКарт.ИмяПоля(Crd,"Наим"));
    InsertInArray(BufFieldCmnt,z,Раб.ИмяПолеКарт.ИмяПоля(Crd,"Коммент"));
 fi;
 ^z;
end;

Proc ЗаполнитьДок(Iter:i; Crd:S; Rec:Record);
var z,n,i:i;
 if Crd="Table_OPER": Exit; fi;
 if Crd="" or Rec=nil: Exit; fi;
 z=ПолучитьРабочиюОбласть(Crd);
 --Быстрый пропуск для пустых картотек
 if BufField[z]="":
    ДокНаим[Iter]=BufДокНаим[z];
    ДокНомер[Iter]='';
    if СверткаДок:
       if BufFieldCmnt[z]="":
          СодОпер[Iter] = '';
          Exit;
       fi;
     else
      Exit;
    fi;
 fi;

 i = RecordToInteger(Rec);
 --Проверка закешированных значений
 if xcachCrd[i] = z:
    n = -1;
   else
    n = 0;
 fi;
 if n = 0:
    n=GetRecordNumber(BufOWA[z],Rec);
 fi;
  --Вытаскивание данных в кеш
 if n > 0:
    xcachCrd[i] = z;
    if not BufField[z]="": xcachNum[i]=GetFieldS(BufOWA[z],n,BufField[z]); else xcachNum[i]=''; fi;
    xcachCmnt[i]=if(BufFieldCmnt[z]="","",GetFieldS(BufOWA[z],n,BufFieldCmnt[z]));
    xcachDat[i]=if(BufFieldD[z]="",1.1.100,GetFieldD(BufOWA[z],n,BufFieldD[z]));
   |n = 0:
    Exit;
 fi;
 --Использование данных из кеша
 ДокНаим[Iter]=BufДокНаим[z];
 if BufFieldD[z] <> "":
    ДокДата[Iter]=xcachDat[i];
 fi;
 ДокНомер[Iter]=xcachNum[i];
 if СверткаДок:
    СодОпер[Iter] = xcachCmnt[i];
 fi;
end;

Proc ЗакончитьДок;
var n:i;
 n=1;
 While BufOWA[n]<>0 do
  CloseWorkArea(BufOWA[n]);
  n=n+1;
 od;
 ClearVariable(BufOWA);
end;

Func MatchСч(Value:S):L;
 if SearchInArray(BufСчЖО,Value,True)=-1: ^False; fi;
 ^True;
end;

Func MatchСч9(Value:S):L;
 if SearchInArray(BufСч9,Value,True)=-1: ^False; fi;
 ^True;
end;

Proc СписокСч9;
var n,l,l2,l3,b,e:i;
var Acc,СчУсл_:S;
 ClearVariable(BufСч9);
 if ЗнакСл then
    b=0;e=255;
    if Pos("+",СчУсл)>0 then b=Pos("+",СчУсл); fi;
    if Pos("-",СчУсл)>0 then b=Pos("-",СчУсл); fi;
    if Pos("/",СчУсл)>0 then e=Pos("/",СчУсл); fi;
    СчУсл_=Substr(СчУсл,b+1,e-b-1);
   else
    СчУсл_=СчУсл;
 fi;

 if СверткаКБК:
    l=GetGroupAccounts(СчУсл_,Buf,5,6,7,8); --ФКР
    l2=GetGroupAccounts(СчУсл_,Buf2,7,8,9,10); --КД
    l3=GetGroupAccounts(СчУсл_,Buf3,8,9,10,11); --КИВФ
    for n=1..l do
     if Match(Buf[n],Раб.Бюджет2005.МаскаСч9): InsertInArraySort(BufСч9,Buf[n]); fi;
    od;
    for n=1..l2 do
     if Match(Buf2[n],Раб.Бюджет2005.МаскаСч9):
        if SearchInArray(BufСч9,Buf2[n])=-1: InsertInArraySort(BufСч9,Buf2[n]); fi;
     fi;
    od;
    for n=1..l3 do
     if Match(Buf3[n],Раб.Бюджет2005.МаскаСч9):
        if SearchInArray(BufСч9,Buf3[n])=-1: InsertInArraySort(BufСч9,Buf3[n]); fi;
     fi;
    od;
   else
    n=0;
    for Account Acc=СчУсл_, Sort do
     n=n+1;
     BufСч9[n]=Acc;
    od;
 fi;
end;

Proc СписокСч;
var n,b,e:I;
var Acc,СчУсл_:S;
 ClearVariable(BufСчЖО);
 n=0;
 if ЗнакСл then
 --   (Pos("/",СчУсл)>0) or (Pos("+",СчУсл)>0) or (Pos("-",СчУсл)>0);
    b=0;e=255;
    if Pos("+",СчУсл)>0 then b=Pos("+",СчУсл); fi;
    if Pos("-",СчУсл)>0 then b=Pos("-",СчУсл); fi;
    if Pos("/",СчУсл)>0 then e=Pos("/",СчУсл); fi;
    СчУсл_=Substr(СчУсл,b+1,e-b-1);
   else
    СчУсл_=СчУсл;
 fi;
 for Account Acc=СчУсл_,Sort do
  if AccountUsed(Acc):
     n=n+1;
     BufСчЖО[n]=Acc;
  fi;
 od;
end;

Func ПоказательСумма (Призн_:S; Iter:I; ВалПок_:S):N;
var Ret:N;
 if Iter<1: ^0; fi;
 if not ВалПок_="" and not ВалПок_=BaseCurr: ВалПок_="ВАЛ"; else ВалПок_=""; fi;
 While Призн[Iter]=Призн_ do
  if not Зн[Iter]=0 and not Пр[Iter]=-1 and ВалПок[Iter]=ВалПок_: Ret=Ret+Сумма[Iter]; fi;
  Iter=Iter+1;
 od;
 ^Ret;
end;

Proc ДобавитьСтрокуПров_(t:i; k:i; ДТ_:D; СчДеб_:s; СчКре_:S; Призн_:S; ВалПок_:S; Crd:S; Rec:Record);
var Iter,z:I;
var ПолеСорт_,Index:S;
var Flag:L;
var Сум_:N;
 z=SearchInArray(Пр,t);
 if not z=-1 then
    if Зн[z]=k and ВалПок[z]=ВалПок_ then Exit; fi;
   else
    z=0;
 fi;
 Сум_=TransSum(t,ВалПок_)*if(k=0,1,k);
 if СверткаДок:
    if Rec=BufДок and not t=-1:   --Если t=-1 то сбрасываем буфер проводок в отчет
       if not Rec=nil: --Добавляем проводку в буфер документа
          Flag=False;
          Index=DateToStr(ДТ_)+" "+Призн_+" "+ВалПок_+" "+СчДеб_+" "+СчКре_;
          z=SearchInArray(BufДокIndex,Index,True);
          if z=-1:
             z=InsertInArraySort(BufДокIndex,Index);
             InsertInArray(BufДокКарт,z,Crd);
             InsertInArray(BufДокПр,z,t);
             InsertInArray(BufДокД,z,ДТ_);
             InsertInArray(BufДокСчДеб,z,СчДеб_);
             InsertInArray(BufДокСчКре,z,СчКре_);
             InsertInArray(BufДокПризн,z,Призн_);
             InsertInArray(BufДокСум,z,Сум_);
             InsertInArray(BufДокВалПок,z,ВалПок_);
             InsertInArray(BufДокЗн,z,k);
             InsertInArray(BufДокЧпр,z,1);
            else
             BufДокСум[z]=BufДокСум[z]+Сум_;
             BufДокЧпр[z]=BufДокЧпр[z]+1;
          fi; --if z=-1:
          if ВалПок_="" and not Вал="" and not Вал=BaseCurr: ДобавитьСтрокуПров_(t,k,ДТ_,СчДеб_,СчКре_,Призн_,"ВАЛ",Crd,Rec); fi; --Рекурсия
         else
          Flag=True; --Это обычная проводка
       fi;--if not Rec=nil: --Добавляем проводку в буфер документа
      else
       Flag=False;
       if not BufДок=nil:
          z=1;
          While not BufДокIndex[z]="" do
           ПолеСорт_=BufДокПризн[z]+" "+Str16(BufДокПр[z],8);
           Iter=InsertInArraySort(ПолеСорт,ПолеСорт_);
           InsertFrame(Упр,Iter);
           ДатОпер[Iter]=BufДокД[z];
           ДокДата[Iter]=BufДокД[z];
           ЗаполнитьДок(Iter,BufДокКарт[z],BufДок);
           СодОпер[Iter]=if(BufДокЧпр[z]>1,SubStr(СодОпер[Iter],1,LMaxГр5)+" (Всего проводок: "+Str(BufДокЧпр[z])+")",SubStr(TransComment(BufДокПр[z]),1,LMaxГр5));
           СчДеб[Iter]=BufДокСчДеб[z];
           СчКре[Iter]=BufДокСчКре[z];
           Сумма[Iter]=BufДокСум[z];
           Пр[Iter]=BufДокПр[z];
           Призн[Iter]=BufДокПризн[z];
           Зн[Iter]=BufДокЗн[z];
           ДокID[Iter]=RecordToInteger(BufДок);--RecordToString(BufДок);
           ВалПок[Iter]=BufДокВалПок[z];
           z=z+1;
          od;
       fi;
       ОчиститьДок;
       if t=-1: Exit; fi;
       BufДок=Rec;
       ДобавитьСтрокуПров_(t,k,ДТ_,СчДеб_,СчКре_,Призн_,ВалПок_,Crd,Rec);  --Рекурсия
    fi;
   else
    Flag=True;
 fi; --if СверткаДок:
 if Flag:
    ПолеСорт_=Призн_+" "+Str16(t,8);
    Iter=InsertInArraySort(ПолеСорт,ПолеСорт_);
    InsertFrame(Упр,Iter);
    ДатОпер[Iter]=ДТ_;
    ДокДата[Iter]=ДТ_;
    ЗаполнитьДок(Iter,Crd,Rec);
    СодОпер[Iter]=SubStr(TransComment(t),1,LMaxГр5);
    СчДеб[Iter]=СчДеб_;
    СчКре[Iter]=СчКре_;
    Сумма[Iter]=Сум_;
    Пр[Iter]=t;
    Призн[Iter]=Призн_;
    Зн[Iter]=k;
    ДокID[Iter]=if(Rec=nil,t,RecordToInteger(Rec));--if(Rec=nil,Str(t),RecordToString(Rec));
    ВалПок[Iter]=ВалПок_;
    if ВалПок_="" and not Вал="" and not Вал=BaseCurr: ДобавитьСтрокуПров_(t,k,ДТ_,СчДеб_,СчКре_,Призн_,"ВАЛ",Crd,Rec); fi; --Рекурсия
 fi;
end;

Proc ДобавитьСтрокуПров(t:i; Призн_:S; ПризнД_:S; ПризнК_:S; СчДеб_:s; СчКре_:S);
var Crd:S;
var ДТ_:D;
var Rec:Record;
var FD,FC:L;
var k,z:i;
 if t=-1: ДобавитьСтрокуПров_(t,0,1.1.100,"","","","","",nil); fi; --Сброс буфера проводок документа в отчет
 ДТ_=TransDate(t);
 Rec=TransRecord(t);
 Crd=TransCardFile(t);

 if СверткаДок:
    if not Rec=nil:
       if Crd="РПО_НАЧ_АМОРТ_TR":
          z=ПолучитьРабочиюОбласть(Crd);
          Rec=GetFieldR(BufOWA[z],GetRecordNumber(BufOWA[z],Rec),"ВЕДОМОСТЬ");
          Crd="РПО_НАЧ_АМОРТ";
        | Crd="РПО_НФА_СПРАВКА_ПРОВОДКИ":
          z=ПолучитьРабочиюОбласть(Crd);
          Rec=GetFieldR(BufOWA[z],GetRecordNumber(BufOWA[z],Rec),"РПО_НФА_СПРАВКА");
          Crd="РПО_НФА_СПРАВКА";
       fi;
    fi;
 fi;

 FD=MatchСч(СчДеб_); 
 FC=MatchСч(СчКре_);
 if ПризнД_="" and ПризнК_="":
    if FD and not FC: k=1;
      |not FD and FC: k=-1;
      |True         : k=0;
    fi;
    if k=0 then
       ДобавитьСтрокуПров_(t,0,ДТ_,СчДеб_,СчКре_,Призн_,"",Crd,Rec);
--       ДобавитьСтрокуПров_(t,-1,ДТ_,СчДеб_,СчКре_,Призн_,"",Crd,Rec);
      else
       ДобавитьСтрокуПров_(t,k,ДТ_,СчДеб_,СчКре_,Призн_,"",Crd,Rec);
    fi;
   else
    if FD and not FC: k=1; Призн_=SubStr(ПризнД_,2,255);
      |not FD and FC: k=-1; Призн_=SubStr(ПризнК_,2,255);
      |True         : ДобавитьСтрокуПров_(t,1,ДТ_,СчДеб_,СчКре_,SubStr(ПризнД_,2,255),"",Crd,Rec); ДобавитьСтрокуПров_(t,-1,ДТ_,СчДеб_,СчКре_,SubStr(ПризнК_,2,255),"",Crd,Rec); Exit;
    fi;
    ДобавитьСтрокуПров_(t,k,ДТ_,СчДеб_,СчКре_,Призн_,"",Crd,Rec);
 fi;
end;

Proc ДобавитьСтрокуОст(ОНП:N; ОКП:N; Сч_:S; Призн_:S; АнУсл_:S; ВалПок_:S);
var ПолеСорт_:S;
var Iter:I;
 if not ОНП=0:
    ПолеСорт_=Призн_+"        ";
    Iter=InsertInArraySort(ПолеСорт,ПолеСорт_);
    InsertFrame(Упр,Iter);
    ДокДата[Iter]=ДН;
    ДокНомер[Iter]="x";
    ДокНаим[Iter]="            x";
    СодОпер[Iter]="Остаток на начало периода";
    Призн[Iter]=Призн_;
    ОстНачД[Iter]=Deb(ОНП);
    ОстНачК[Iter]=Cre(ОНП);
    СчДеб[Iter]=if(ОстНачД[Iter]=0,"x",Сч_);
    СчКре[Iter]=if(ОстНачК[Iter]=0,"x",Сч_);
    Пр[Iter]=-1;
    Зн[Iter]=1;
    ВалПок[Iter]=if(ВалПок_="" or ВалПок_=BaseCurr,"","ВАЛ");
 fi;
 if not ОКП=0 or not ОНП=0:
    ПолеСорт_=Призн_+" YYYYYYYY";
    Iter=InsertInArraySort(ПолеСорт,ПолеСорт_);
    InsertFrame(Упр,Iter);
    ДокДата[Iter]=ДК-1;
    ДокНомер[Iter]="x";
    ДокНаим[Iter]="            x";
    СодОпер[Iter]="Остаток на конец периода";
    Призн[Iter]=Призн_;
    ОстНачД[Iter]=Deb(ОНП);
    ОстНачК[Iter]=Cre(ОНП);
    ОстКонД[Iter]=Deb(ОКП);
    ОстКонК[Iter]=Cre(ОКП);
    СчДеб[Iter]=if(ОстКонД[Iter]=0,if(Deb(ОНП)=0,"x",Сч_),Сч_);
    СчКре[Iter]=if(ОстКонК[Iter]=0,if(Cre(ОНП)=0,"x",Сч_),Сч_);
    Сумма[Iter]=Turn(Сч_+ВалУсл+"{"+Призн_+АнУсл_+"}",ДН,ДК,ВалПок_);
    Пр[Iter]=-1;
    Зн[Iter]=1;
    ВалПок[Iter]=if(ВалПок_="" or ВалПок_=BaseCurr,"","ВАЛ");
 fi;
end;

Proc РасчетОстатков(НЖур:I);
var n,nn,Точн,z:I;
var ОНП,ОКП,ОНГ:N;
var Призн_,АнУсл_,ВалПок_,Показатель_,tmp:S;
var is500:L;
-- if not Знак="":
 if ЗнакСл:
    ShowProgress(5,"Расчет остатков на начало периода...");
    ProgressPos(1);
    Exit;
 fi;
 Точн=Accuracy(Вал);
 ClearVariable(Buf);
 nn=LengthOfArray(BufСчЖО);
 for n=1..nn do
  if AccIsBalance(BufСчЖО[n]):
     tmp=Раб.Бюджет2005.ВзятьКодСчета(BufСчЖО[n],"","АН",True)+".???";
   | true: tmp=BufСчЖО[n];
  fi;
  if SearchInArray(Buf,tmp,True)=-1: InsertInArraySort(Buf,tmp); fi;
 od;
 nn=LengthOfArray(Buf);
 if Показатель="":
    ShowProgress(nn*5,"Расчет остатков на начало периода...");
    for n=1..nn do
     ProgressPos(n);
     if ExistsTransactions(Buf[n]+ВалУсл+"{"+АнУсл+"}",ДН,ДК) or not Round(Saldo(Buf[n]+ВалУсл+"{"+АнУсл+"}",ДН,Вал),Точн)=0 or not Round(Saldo(Buf[n]+ВалУсл+"{"+АнУсл+"}",ДК,Вал),Точн)=0:
        for Account tmp=Buf[n],Sort do
         is500=Match(tmp,"*.?.5??.??.*");
         ВалПок_=BaseCurr;
         ОНП=Round(Saldo(tmp+ВалУсл+"{"+АнУсл+"}",ДН,ВалПок_),Точн);
         ОКП=Round(Saldo(tmp+ВалУсл+"{"+АнУсл+"}",ДК,ВалПок_),Точн);
         if is500: --для 500 счетов остатков на начало года не должно быть
            if MM=1: 
               ОКП=ОКП-ОНП; ОНП=0; 
              else
               ОНГ=Round(Saldo(tmp+ВалУсл+"{"+АнУсл+"}",Dat(1,1,Year(ДН)),ВалПок_),Точн);
               ОНП=ОНП-ОНГ;
               ОКП=ОКП-ОНГ;
            fi;
         fi;
         ДобавитьСтрокуОст(ОНП,ОКП,tmp,"",АнУсл,ВалПок_);
         if not Вал="" and not Вал=BaseCurr:
            ВалПок_=Вал;
            ОНП=Round(Saldo(tmp+ВалУсл+"{"+АнУсл+"}",ДН,ВалПок_),Точн);
            ОКП=Round(Saldo(tmp+ВалУсл+"{"+АнУсл+"}",ДК,ВалПок_),Точн);
            if is500: --для 500 счетов остатков на начало года не должно быть
               if MM=1:
                  ОКП=ОКП-ОНП; ОНП=0;
                 else
                  ОНГ=Round(Saldo(tmp+ВалУсл+"{"+АнУсл+"}",Dat(1,1,Year(ДН)),ВалПок_),Точн);
                  ОНП=ОНП-ОНГ;
                  ОКП=ОКП-ОНГ;
               fi;
            fi;
            ДобавитьСтрокуОст(ОНП,ОКП,tmp,"",АнУсл,ВалПок_);
         fi;
        od;
     fi;
    od;
   else
    АнУсл_=if(GetFieldЖО("АнУслДоп",nЖО[НЖур])="","","("+GetFieldЖО("АнУслДоп",nЖО[НЖур])+")");
    АнУсл_=Раб.Бюджет2005.Объединить(АнУсл_,ПризнПодр,"&");
    АнУсл_=Раб.Бюджет2005.Объединить(АнУсл_,if(АнУслДоп="",АнУслДоп,"("+АнУслДоп+")"),"&");
    if not АнУсл_="": АнУсл_="&"+АнУсл_; fi; --Не берем АнУсл так он уже содержит Показатель и будет очень медленно
    if ПоказательДоп="": Показатель_=Показатель; else Показатель_=ПоказательДоп; fi;
    z=0; for Sign Призн_=Показатель_ do z=z+1; od;
    ShowProgress(z*5,"Расчет остатков на начало периода...");
    z=0;
    for Sign Призн_=Показатель_,Sort do
     z=z+1;
     ProgressPos(z);
     if SignUsed(Призн_):
        for n=1..nn do
         if ExistsTransactions(Buf[n]+ВалУсл+"{"+Призн_+АнУсл_+"}",ДН,ДК) or not Round(Saldo(Buf[n]+ВалУсл+"{"+Призн_+АнУсл_+"}",ДН,Вал),Точн)=0 or not Round(Saldo(Buf[n]+ВалУсл+"{"+Призн_+АнУсл_+"}",ДК,Вал),Точн)=0:
            for Account tmp=Buf[n],Sort do
             is500=Match(tmp,"*.?.5??.??.*");
             ВалПок_=BaseCurr;
             ОНП=Round(Saldo(tmp+ВалУсл+"{"+Призн_+АнУсл_+"}",ДН,ВалПок_),Точн);
             ОКП=Round(Saldo(tmp+ВалУсл+"{"+Призн_+АнУсл_+"}",ДК,ВалПок_),Точн);
             if is500: --для 500 счетов остатков на начало года не должно быть
                if MM=1:
                   ОКП=ОКП-ОНП; ОНП=0;
                  else
                   ОНГ=Round(Saldo(tmp+ВалУсл+"{"+Призн_+АнУсл_+"}",Dat(1,1,Year(ДН)),ВалПок_),Точн);
                   ОНП=ОНП-ОНГ;
                   ОКП=ОКП-ОНГ;
                fi;
             fi;
             ДобавитьСтрокуОст(ОНП,ОКП,tmp,Призн_,АнУсл_,ВалПок_);
             if not Вал="" and not Вал=BaseCurr:
                ВалПок_=Вал;
                ОНП=Round(Saldo(tmp+ВалУсл+"{"+Призн_+АнУсл_+"}",ДН,ВалПок_),Точн);
                ОКП=Round(Saldo(tmp+ВалУсл+"{"+Призн_+АнУсл_+"}",ДК,ВалПок_),Точн);
                if is500: --для 500 счетов остатков на начало года не должно быть
                   if MM=1:
                      ОКП=ОКП-ОНП; ОНП=0;
                     else
                      ОНГ=Round(Saldo(tmp+ВалУсл+"{"+Призн_+АнУсл_+"}",Dat(1,1,Year(ДН)),ВалПок_),Точн);
                      ОНП=ОНП-ОНГ;
                      ОКП=ОКП-ОНГ;
                   fi;
                fi;
                ДобавитьСтрокуОст(ОНП,ОКП,tmp,Призн_,АнУсл_,ВалПок_);
             fi;
            od;
         fi;
        od;
     fi;
    od;
  fi;
end;

Proc РасчетПоказателя(НЖур:I);
var Iter,p1,p2,n:I;
var Призн_,ПолеСорт_,АнУсл_,ВалПок_,Показатель_,tmp:S;
var ОКП,ОНП,СП,ОНГ:N;
var is500,mix500:L;
 is500=False; mix500=False;
 if not ЗнакСл:
    for Account tmp="("+СчУсл+")&*.?.5??.??.*" do
     is500=True;
     Break;
    od;
    if is500:
       for Account tmp="("+СчУсл+")&~*.?.5??.??.*" do
        mix500=True;
        Break;
       od;
    fi;
 fi;
 if НЖур=1 then
    InsertFrame(Упр3,1);
    ТекстИтого[1]="Итого";
    InsertFrame(Упр3,2);
    ТекстИтого[2]=if(not Вал="" and not Вал=BaseCurr,"Итого в рублевом эквиваленте","Итого");
    ИтогОстНач[1]=0;
    ИтогОстНач[2]=0;
    ИтогОстКон[1]=0;
    ИтогОстКон[2]=0;
    ИтогСумма[1]=0;
    ИтогСумма[2]=0;
 fi;
 if not Показатель="":
    if ПоказательДоп="": Показатель_=Показатель; else Показатель_=ПоказательДоп; fi;
    p1=0;
    for Sign Призн_=Показатель_ do p1=p1+1; od;
    ShowProgress(p1*5,"Расчет показателя....");
    p2=0;
    АнУсл_=if(GetFieldЖО("АнУслДоп",nЖО[НЖур])="","","("+GetFieldЖО("АнУслДоп",nЖО[НЖур])+")");
    АнУсл_=Раб.Бюджет2005.Объединить(АнУсл_,ПризнПодр,"&");
    АнУсл_=Раб.Бюджет2005.Объединить(АнУсл_,if(АнУслДоп="",АнУслДоп,"("+АнУслДоп+")"),"&");
    if not АнУсл_="": АнУсл_="&"+АнУсл_; fi; --Не берем АнУсл так он уже содержит Показатель и будет очень медленно
    for Sign Призн_=Показатель_,Sort do
     p2=p2+1;
     ProgressPos((p1*2)+p2);
     if SignUsed(Призн_):
        ВалПок_=BaseCurr;
        if not ЗнакСл:
           ОНП=Saldo(СчУсл+ВалУсл+"{"+Призн_+АнУсл_+"}",ДН,ВалПок_);
           ОКП=Saldo(СчУсл+ВалУсл+"{"+Призн_+АнУсл_+"}",ДК,ВалПок_);
           if is500 and not mix500: --для 500 счетов остатков на начало года не должно быть
              if MM=1:
                 ОКП=ОКП-ОНП; ОНП=0;
                else
                 ОНГ=Saldo(СчУсл+ВалУсл+"{"+Призн_+АнУсл_+"}",Dat(1,1,Year(ДН)),ВалПок_);
                 ОНП=ОНП-ОНГ;
                 ОКП=ОКП-ОНГ;
              fi;
           fi;
           if mix500: --вычленяем остаток по 500 счета на начало года
              ОНГ=Saldo("("+СчУсл+")&*.?.5??.??.*"+ВалУсл+"{"+Призн_+АнУсл_+"}",Dat(1,1,Year(ДН)),ВалПок_);
              ОНП=ОНП-ОНГ;
              ОКП=ОКП-ОНГ;
           fi;
          else
           ОНП=0;
           ОКП=0;
        fi;
        ПолеСорт_=Призн_+" ZZZZZZZZ";
        Iter=SearchInArray(Призн,Призн_,True);
        СП=ПоказательСумма(Призн_,Iter,ВалПок_);
        --Добавление к показателю/пересброс аккумуляторов
        n=SearchInArray(ПолеСорт,ПолеСорт_,True);
        if n<>-1 then
           Iter=n;
           ОстНачД[Iter]=ОстНачД[Iter]+Deb(ОНП);
           ОстНачК[Iter]=ОстНачК[Iter]+Cre(ОНП);
--           if Знак="":
           if not ЗнакСл:
              ОстКонД[Iter]=ОстКонД[Iter]+Deb(ОНП+СП);
              ОстКонК[Iter]=ОстКонК[Iter]+Cre(ОНП+СП);
             else
              ОстКонД[Iter]=0;
              ОстКонК[Iter]=0;
           fi;
           if not ЗнакСл: ИтогОстНач[2]=ИтогОстНач[2]+ОНП; else ИтогОстНач[2]=0; fi;
           ИтогСумма[2]=ИтогСумма[2]+СП-Сумма[Iter];
           if not ЗнакСл: ИтогОстКон[2]=ИтогОстКон[2]+ОНП+СП-Сумма[Iter]; else ИтогОстКон[2]=0; fi;
           Сумма[Iter]=СП;
          else--Добавление показателя
           if not Iter=-1 or not Round(ОНП,4)=0: --Добавляем итоги если показатель есть в таблице или по показателю есть остаток, но нет движения
              Iter=InsertInArraySort(ПолеСорт,ПолеСорт_);
              InsertFrame(Упр,Iter);
              ДокДата[Iter]=ДК-1;
              ДокНомер[Iter]="x";
              ДокНаим[Iter]="            x";
              СодОпер[Iter]="Итого";
              ОстНачД[Iter]=Deb(ОНП);
              ОстНачК[Iter]=Cre(ОНП);
              СчДеб[Iter]="x";
              СчКре[Iter]="x";
              Сумма[Iter]=СП;
              if not ЗнакСл:
                 ОстКонД[Iter]=Deb(ОНП+СП);
                 ОстКонК[Iter]=Cre(ОНП+СП);
                else
                 ОстКонД[Iter]=0;
                 ОстКонК[Iter]=0;
              fi;
              if not ЗнакСл and not Round((ОНП+СП)-ОКП,2)=0: Trace("Ошибка! Позиция="+Str(Iter)+" Показатель="+Призн_+" Полученный остаток на конец периода не равен остатку по показателю. Обратитесь к разработчику"); fi;
              Пр[Iter]=-1;
              Призн[Iter]=Призн_;
              ВалПок[Iter]="";
              if not ЗнакСл: ИтогОстНач[2]=ИтогОстНач[2]+ОНП; else ИтогОстНач[2]=0; fi;
              ИтогСумма[2]=ИтогСумма[2]+СП;
              if not ЗнакСл: ИтогОстКон[2]=ИтогОстКон[2]+ОНП+СП; else ИтогОстКон[2]=0; fi;
           fi;
           if not Вал="" and not Вал=BaseCurr: --Вывод суммы в валюте
              ВалПок_=Вал;
              if not ЗнакСл:
                 ОНП=Saldo(СчУсл+ВалУсл+"{"+Призн_+АнУсл_+"}",ДН,ВалПок_);
                 ОКП=Saldo(СчУсл+ВалУсл+"{"+Призн_+АнУсл_+"}",ДК,ВалПок_);
                 if is500 and not mix500: --для 500 счетов остатков на начало года не должно быть
                    if MM=1:
                       ОКП=ОКП-ОНП; ОНП=0;
                      else
                       ОНГ=Saldo(СчУсл+ВалУсл+"{"+Призн_+АнУсл_+"}",Dat(1,1,Year(ДН)),ВалПок_);
                       ОНП=ОНП-ОНГ;
                       ОКП=ОКП-ОНГ;
                    fi;
                 fi;
                 if mix500: --вычленяем остаток по 500 счета на начало года
                    ОНГ=Saldo("("+СчУсл+")&*.?.5??.??.*"+ВалУсл+"{"+Призн_+АнУсл_+"}",Dat(1,1,Year(ДН)),ВалПок_);
                    ОНП=ОНП-ОНГ;
                    ОКП=ОКП-ОНГ;
                 fi;
                else
                 ОНП=0;
                 ОКП=0;
              fi;
              ПолеСорт_=Призн_+" ZZZZZZZZ";
              Iter=SearchInArray(Призн,Призн_,True);
              СП=ПоказательСумма(Призн_,Iter,ВалПок_);
              if not Iter=-1 or not Round(ОНП,4)=0: --Добавляем итоги если показатель есть в таблице или по показателю есть остаток, но нет движения
                 Iter=InsertInArraySort(ПолеСорт,ПолеСорт_);
                 InsertFrame(Упр,Iter);
                 ДокДата[Iter]=ДК-1;
                 ДокНомер[Iter]="x";
                 ДокНаим[Iter]="            x";
                 СодОпер[Iter]="Итого";
                 ОстНачД[Iter]=Deb(ОНП);
                 ОстНачК[Iter]=Cre(ОНП);
                 СчДеб[Iter]="x";
                 СчКре[Iter]="x";
                 Сумма[Iter]=СП;
                 if not ЗнакСл:
                    ОстКонД[Iter]=Deb(ОНП+СП);
                    ОстКонК[Iter]=Cre(ОНП+СП);
                   else
                   ОстКонД[Iter]=0;
                   ОстКонК[Iter]=0;
                 fi;
                 Пр[Iter]=-1;
                 Призн[Iter]=Призн_;
                 ВалПок[Iter]="ВАЛ";
                 if not ЗнакСл and not Round((ОНП+СП)-ОКП,2)=0: Trace("Ошибка! Позиция="+Str(Iter)+" Показатель="+Призн_+" Полученный остаток (ВАЛ) на конец периода не равен остатку по показателю. Обратитесь к разработчику"); fi;
                 if not ЗнакСл: ИтогОстНач[1]=ИтогОстНач[1]+ОНП; else ИтогОстНач[1]=0; fi;
                 ИтогСумма[1]=ИтогСумма[1]+СП;
                 if not ЗнакСл: ИтогОстКон[1]=ИтогОстКон[1]+ОНП+СП; else ИтогОстКон[1]=0; fi;
              fi;
           fi; --if not Вал="" and not Вал=BaseCurr:
        fi;  --        if n<>-1 then
     fi; --if SignUsed(Призн_):
    od; --for Sign Призн_=Показатель_,Sort do
   else
    ShowProgress(Упр*5,"Расчет показателя....");
    ВалПок_=Вал;
    if not ЗнакСл: 
       ОНП=Saldo(СчУсл+ВалУсл+"{"+АнУсл+"}",ДН,ВалПок_);
       if is500 and not mix500: --для 500 счетов остатков на начало года не должно быть
          if MM=1:
             ОНП=0;
            else
             ОНГ=Saldo(СчУсл+ВалУсл+"{"+АнУсл+"}",Dat(1,1,Year(ДН)),ВалПок_);
             ОНП=ОНП-ОНГ;
          fi;
       fi;
       if mix500: --вычленяем остаток по 500 счета на начало года
          ОНГ=Saldo("("+СчУсл+")&*.?.5??.??.*"+ВалУсл+"{"+АнУсл+"}",Dat(1,1,Year(ДН)),ВалПок_);
          ОНП=ОНП-ОНГ;
       fi;
       ИтогОстНач[1]=ИтогОстНач[1]+ОНП;
      else 
       ИтогОстНач[1]=0; 
    fi;
    ВалПок_=BaseCurr;
    if not ЗнакСл: 
       ОНП=Saldo(СчУсл+ВалУсл+"{"+АнУсл+"}",ДН,ВалПок_);
       if is500 and not mix500: --для 500 счетов остатков на начало года не должно быть
          if MM=1:
             ОНП=0;
            else
             ОНГ=Saldo(СчУсл+ВалУсл+"{"+АнУсл+"}",Dat(1,1,Year(ДН)),ВалПок_);
             ОНП=ОНП-ОНГ;
          fi;
       fi;
       if mix500: --вычленяем остаток по 500 счета на начало года
          ОНГ=Saldo("("+СчУсл+")&*.?.5??.??.*"+ВалУсл+"{"+АнУсл+"}",Dat(1,1,Year(ДН)),ВалПок_);
          ОНП=ОНП-ОНГ;
       fi;
       ИтогОстНач[2]=ИтогОстНач[2]+ОНП;
      else 
       ИтогОстНач[2]=0; 
    fi;
    if НЖур=LengthOfArray(nЖО) then
       for Iter=1..Упр do
        ProgressPos((Упр*2)+Iter);
        if not Зн[Iter]=0 and not Пр[Iter]=-1 and not ВалПок[Iter]="": ИтогСумма[1]=ИтогСумма[1]+Сумма[Iter]; fi; --Валюта
        if not Зн[Iter]=0 and not Пр[Iter]=-1 and ВалПок[Iter]="":     ИтогСумма[2]=ИтогСумма[2]+Сумма[Iter]; fi; --Рублевый эквивалент
       od;
    fi;
    if not ЗнакСл: ИтогОстКон[1]=ИтогОстКон[1]+ИтогОстНач[1]+ИтогСумма[1]; else ИтогОстКон[1]=0; fi;
    if not ЗнакСл: ИтогОстКон[2]=ИтогОстКон[2]+ИтогОстНач[2]+ИтогСумма[2]; else ИтогОстКон[2]=0; fi;
 fi;
 ИтогОстНачД[1]=Deb(ИтогОстНач[1]);
 ИтогОстНачК[1]=Cre(ИтогОстНач[1]);
 ИтогОстКонД[1]=Deb(ИтогОстКон[1]);
 ИтогОстКонК[1]=Cre(ИтогОстКон[1]);
 ИтогОстНачД[2]=Deb(ИтогОстНач[2]);
 ИтогОстНачК[2]=Cre(ИтогОстНач[2]);
 ИтогОстКонД[2]=Deb(ИтогОстКон[2]);
 ИтогОстКонК[2]=Cre(ИтогОстКон[2]);
end;

Proc ИтоговыеОбороты;
var n,Iter,nn:i;
var СчДеб_,СчКре_,ВалПок_,tmp:S;
var Сумма_:N;
var FD,is500:L;
 ClearVariable(ПолеСорт);
 СписокСч9;
 for Iter=1..Упр do
  if not Пр[Iter]=-1:
     if СверткаКБК:
        СчДеб_=Раб.Бюджет2005.ВзятьКодСчета(СчДеб[Iter],"","СЧ9",False);
        СчКре_=Раб.Бюджет2005.ВзятьКодСчета(СчКре[Iter],"","СЧ9",False);
        if СчДеб_="": СчДеб_=СчДеб[Iter]; fi;
        if СчКре_="": СчКре_=СчКре[Iter]; fi;
       else
        СчДеб_=СчДеб[Iter];
        СчКре_=СчКре[Iter];
     fi;
     if not СчДеб_=СчКре_:
        if MatchСч9(СчДеб_) and not MatchСч9(СчКре_): tmp=СчДеб_+" "+СчКре_; else tmp=СчКре_+" "+СчДеб_; fi; --Кредит счета имеет больший приоритет над дебетом для отчета
        tmp=tmp+" "+if(ВалПок[Iter]="","z","y");
        n=SearchInArray(ПолеСорт,tmp,True);
        if n=-1:
           n=InsertInArraySort(ПолеСорт,tmp);
           InsertFrame(Упр2,n);
           СчДеб2[n]=СчДеб_;
           СчКре2[n]=СчКре_;
           Сч2[n]=ExtractWord(1,tmp," ");
           ВалПок2[n]=if(ВалПок[Iter]="","z","y");
        fi;
        Сумма2[n]=Сумма2[n]+Сумма[Iter];
     fi;
  fi;
 od;
 --Удаление " x" из Сч2 для оформления
 for Iter=1..Упр2 do
  Сч2[Iter]=ExtractWord(1,Сч2[Iter]," x");
  ВалПок2[Iter]=if(ВалПок2[Iter]="y","ВАЛ","");
 od;
 if ЗнакСл: ProgressPos(Упр2*5); Exit; fi;

end;

Proc Расчет;
var nПризн,tsc,t,p1,p2,i:I;
var Призн_,ПризнД_,ПризнК_,tmp,СчДеб_,СчКре_:s;
 Т1.Visible=False;
 Т2.Visible=False;
 Т3.Visible=False;
 Т4.Visible=False;
 ClearTrace(True);
 Очистить;
 --Ищем настройки журнала
 НайтиЖурнал;
 if LengthOfArray(nЖО)=0: Message("Ошибка! Журнал операций N "+ЖО+" не найден в списке журналов.^MВыберите журнал из списка журналов",mtError); Template.Object="btnВыборЖО"; Exit; fi;
 if РАБ.ЖО2.noError=False: Message("Настройка журналов операций содержат ошибки.^MНеобходимо выполнить настройку журналов операций",mtError); OpenBlank("РАБ.ЖО2",True); Exit; fi;
 ЗнакСл=False;
 ClearVariable(ПолеСорт);
 НачатьДок;
 ShowProgress(0,"Расчет....");
 Try
  for i = 1 .. LengthOfArray(nЖО) do
     Знак=GetFieldЖО("Знак",nЖО[i]);
     СчУсл=GetFieldЖО("СчУсл",nЖО[i]);
     ЗнакСл=ЗнакСл or not Знак="";
     ЗнакСл=ЗнакСл or (Pos("/",СчУсл)>0) or (Pos("+",СчУсл)>0) or (Pos("-",СчУсл)>0);
  od;
  for i = 1 .. LengthOfArray(nЖО) do
     Знак=GetFieldЖО("Знак",nЖО[i]);
     СчУсл=GetFieldЖО("СчУсл",nЖО[i]);
     if СчУсл="": СчУсл=СчУслДоп; else СчУсл=Раб.Бюджет2005.Объединить(СчУсл,СчУслДоп+if(not СчУслДоп="",".*",""),"&"); fi;
     Показатель=GetFieldЖО("Показатель",nЖО[i]);
     АнУсл=GetFieldЖО("АнУсл",nЖО[i]);
     if not ПоказательДоп="": --Надо подменить Показатель в АнУсл на ПоказательДоп
        p1=Pos(Показатель,АнУсл);
        p2=p1+Length(Показатель);
        АнУсл=SubStr(АнУсл,1,p1-1)+if(Pos("(",АнУсл)=p1-1,ПоказательДоп,"("+ПоказательДоп+")")+SubStr(АнУсл,p2,255);
     fi;
     АнУсл=Раб.Бюджет2005.Объединить(АнУсл,ПризнПодр,"&");
     АнУсл=Раб.Бюджет2005.Объединить(АнУсл,if(АнУслДоп="",АнУслДоп,"("+АнУслДоп+")"),"&");
     ЖОУсл=if (LengthOfArray(nЖО)>1,"","Условие отбора проводок: "+Знак+СчУсл+ВалУсл+"{"+АнУсл+"},"+DateToString(ДН)+","+DateToString(ДК));
     --Заполняем список счетов
     СписокСч;
     РасчетОстатков(i);
     Призн_=""; ПризнД_=""; ПризнК_="";
     ShowProgress((ДК-ДН)*5,"Расчет оборотов....");
     for Transaction t=Знак+СчУсл+ВалУсл+"{"+АнУсл+"}",ДН,ДК do
       СчДеб_ = TransDeb(t);
       СчКре_ = TransCre(t);
       if not НЕТ_ВНПР or СчДеб_ <> СчКре_:
           ProgressPos((ДК-ДН)+Day(TransDate(t)));
           if Показатель<>"":
              Призн_=""; ПризнД_=""; ПризнК_="";
              tsc=TransSignCount(t);
              for nПризн=1..tsc do
               tmp=TransSignName(t,nПризн);
               if Match(tmp,Показатель): Призн_=tmp; Break;
                 |Match(tmp,"+"+Показатель): ПризнД_=tmp;
                 |Match(tmp,"-"+Показатель): ПризнК_=tmp;
               fi;
              od;
           fi;
           ДобавитьСтрокуПров(t,Призн_,ПризнД_,ПризнК_,СчДеб_,СчКре_);
       fi;
     od; --for Transaction t=СчУсл+АнУсл,ДН,ДК do
     if СверткаДок: ДобавитьСтрокуПров(-1,"","","","",""); fi; --Сброс буфера проводок документа в отчет
   --Обработка показателя
    РасчетПоказателя(i);

  od;
 if Вал="" or Вал=BaseCurr: DeleteFrame(Упр3,1); fi; --Валюта не нужна
 --Итоговые обороты
  ИтоговыеОбороты;
 Finally
  ЗакончитьДок;
  CloseProgress;
 end;

 if Упр=0: InsertFrame(Упр,Упр+1); fi;
 if Упр2=0: InsertFrame(Упр2,Упр2+1); fi;
 if not Показатель="" and Порядок=1:
    SortSection(Упр,"ДокДата");
 fi;
 Оформление;
 btnПоиск.Enabled=not Показатель="";
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;
2-- Обработчики полей шаблона
Func MMTxt_onEnter(FieldName: S; Iter: I): L;
var i:I;
 ClearVariable(Buf);
 For i=1..12 do Buf[i]=Месяц(i); od;
 Buf[13]="Год";
 Buf[14]="I квартал";
 Buf[15]="II квартал";
 Buf[16]="III квартал";
 Buf[17]="IV квартал";
 i=Alternate('Выбор периода расчета',Buf,30,Mon(ToDay),12);
 if not I=0: 
    MM=i; 
 fi;
 Очистить;
 ^False;
end;

Func YYYY_onEnter(FieldName: S; Iter: I): L;
var  i:I;
 ClearVariable(Buf);
 for i=1..5 do Buf[i]=Str(Year(ToDay)+i-4); od;
 i=Alternate("Выбор года расчета",Buf,30,4,12);
 if i<>0: YYYY=Int(Buf[i]); fi;
 Очистить;
 ^False;
end;

Proc ЗаполнитьРекв(Rec:Record);
 Учреждение=GetCardFieldS('Контрагент',Rec,'КорИмя');
 ОКПО=GetCardFieldS('Контрагент',Rec,'ОКПО');
 ГлБухгалтер=GetCardFieldS('Контрагент',Rec,'ФИОБУХ');
 НаимУЧР = GetCardFieldS('Контрагент',Rec,'Учредители');
 НаимБюдж = GetCardFieldS('Банк_счета',Раб.Бюджет2005.Банксчет(Rec,False),'РПО_Наимбюдж');
end;

Func Учреждение_onEnter(FieldName: S; Iter: I): L;
var Rec:Record;
 Rec=OpenCardFile('Контрагент','Наше',nil,crdRecordOnly);
 if Rec=nil: ^False; fi;
 ЗаполнитьРекв(Rec);
 ^False;
end;

Func НаимПодр_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=AnaElection("П!");
 if tmp="": ^False; fi;
 ПризнПодр=tmp;
 Очистить;
 ^False;
end;

Proc НаимПодр_OnExit(FieldName: String; Iter: Integer);
 ПризнПодр="";
 Очистить;
end;


Func ЕдИзм_OnEnter(FieldName: String; Iter: Integer): logical;
var i:i;
var Curr,BaseCurr:S;
 ClearVariable(Buf);
 BaseCurr=BaseCurrency;
 i=1;
 Buf[i]="Пересчет в базовую валюту ("+BaseCurr+")";
 for Currencies Curr="*" do
  i=i+1;
  Buf[i]=Curr+"  ("+Name_C(Curr)+")";
 od;
 i=Alternate("Выбор валюты",Buf,30,1,12);
 if i=0: ^False; fi;
 ЕдИзм_=if(not i=1,SubStr(Buf[i],Pos("  ",Buf[i])+2,255),Buf[i]);
 if i=1: 
    Вал="";
    ЕдИзм=BaseCurr;
   else
    ЕдИзм=SubStr(Buf[i],1,Pos("  ",Buf[i])-1);
    Вал=ЕдИзм;
 fi;
 Очистить;
 Return False;
end;

Func СчУслДоп_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 if LengthOfArray(nЖО)=0: Message("Выберите журнал",mtError); Template.Object="btnВыборЖО"; ^False; fi;
 ClearVariable(Buf);
 Buf[1]="ФКР --Функциональная классификация расходов";
 Buf[2]="КИФД --Классификация источников финансирования дефицитов бюджетов";
 Buf[3]="КД --Классификация доходов";
 n=Alternate("Выберите классификацию",Buf,-1,1,12);
 if LengthOfArray(nЖО)=1 then
    if n=1: СчУслДоп=Раб.КБК.ВыбратьМаскуКБК("ФКР",GetFieldЖО("СчУсл",nЖО[1]),if(Раб.Бюджет2005.ТипКБКСчета(СчУслДоп)="ФКР",СчУслДоп,""),False);
      |n=2: СчУслДоп=Раб.КБК.ВыбратьМаскуКБК("КИФД",GetFieldЖО("СчУсл",nЖО[1]),if(Раб.Бюджет2005.ТипКБКСчета(СчУслДоп)="КИФД",СчУслДоп,""),False);
      |n=3: СчУслДоп=Раб.КБК.ВыбратьМаскуКБК("КД",GetFieldЖО("СчУсл",nЖО[1]),if(Раб.Бюджет2005.ТипКБКСчета(СчУслДоп)="КД",СчУслДоп,""),False);
      |True: ^False;
    fi;
   else
    if n=1: СчУслДоп=Раб.КБК.ВыбратьМаскуКБК("ФКР","*",if(Раб.Бюджет2005.ТипКБКСчета(СчУслДоп)="ФКР",СчУслДоп,""),False);
      |n=2: СчУслДоп=Раб.КБК.ВыбратьМаскуКБК("КИФД","*",if(Раб.Бюджет2005.ТипКБКСчета(СчУслДоп)="КИФД",СчУслДоп,""),False);
      |n=3: СчУслДоп=Раб.КБК.ВыбратьМаскуКБК("КД","*",if(Раб.Бюджет2005.ТипКБКСчета(СчУслДоп)="КД",СчУслДоп,""),False);
      |True: ^False;
    fi;
 fi;
 Очистить;
 Return False;
end;


Proc СчУслДоп_OnExit(FieldName: String; Iter: Integer);
 Очистить;
end;

Func АнУслДоп_OnVerify(FieldName: String; Iter: Integer; Value:String): Logical;
var Res:N;
 Try
  Res=Saldo("{"+Value+"}",1.1.100);
 Except
  Raise;
  ^False;
 end;
  Return 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);
 if LengthOfArray(nЖО)=0: Message("Выберите журнал",mtError); Template.Object="btnВыборЖО"; ^Cur; fi;
 tmp=AnaElection(if(GetFieldЖО("Показатель",nЖО[1])="","","~"+GetFieldЖО("Показатель",nЖО[1])));
 if tmp="": ^Cur; fi;
 if АнУслДоп="": АнУслДоп=tmp; else АнУслДоп=Раб.Бюджет2005.Объединить(АнУслДоп,tmp,Оператор); fi;
 Очистить;
 Return Cur;
end;

Func ПоказательДоп_OnVerify(FieldName: String; Iter: Integer; Value:String): Logical;
var Res:N;
var tmp,Voc:S;
var Flag:L;
 if LengthOfArray(nЖО)=0: Message("Выберите журнал",mtError); Template.Object="btnВыборЖО"; ^False; fi;
 Try
  Res=Saldo("{"+Value+"}",1.1.100);
 Except
  Raise;
  ^False;
 end;
 for Sign tmp=GetFieldЖО("Показатель",nЖО[1]) do Voc=SubStr(tmp,1,Pos(".",tmp)); Break; od;
 Flag=False;
 for Sign tmp="("+GetFieldЖО("Показатель",nЖО[1])+")&"+Value do
  Flag=True;
  if not Voc=SubStr(tmp,1,Pos(".",tmp)): Flag=False; Break; fi;
 od;
 if not Flag: Message("Недопустимое условие отбора показателя",mtError); fi;
 Return Flag;
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);
 if LengthOfArraY(nЖО)=0: Message("Выберите журнал",mtError); Template.Object="btnВыборЖО"; ^Cur; fi;
 tmp=AnaElection(GetFieldЖО("Показатель",nЖО[1]));
 if tmp="": ^Cur; fi;
 if ПоказательДоп="": ПоказательДоп=tmp; else ПоказательДоп=Раб.Бюджет2005.Объединить(ПоказательДоп,tmp,Оператор); fi;
 Очистить;
 Return Cur;
end;

Func Сотрудник_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec:Record;
var tmp,FieldName:S;
 Template.HideEditor(Ложь);
 FieldName=AsString(Template.Field);
 Rec=OpenCardFile('Сотрудники',"",nil,crdRecordOnly);
 if Rec=nil: ^Cur; fi;
 tmp=GetCardFieldS('Сотрудники',Rec,'ФАМИЛИЯ')+' '+GetCardFieldS('Сотрудники',Rec,'ИНИЦИАЛЫ');
 if FieldName='ГлБухгалтер': ГлБухгалтер=tmp;
   |FieldName='Исполнитель': Исполнитель=tmp; ДолжнИсп=GetCardFieldS("Сотрудники",rec,"ДОЛЖНОСТЬ.Долж");
 fi;
 ^Cur;
end;

Func Гр4_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n:i;
 Template.HideEditor(False);
 ClearVariable(Buf);
 Buf[1]="Аналитический признак";
 Buf[2]="Наименование";
 Buf[3]="Наименование (Аналитический признак)";
 Buf[4]="Аналитический признак (Наименование)";
 n=Alternate("Режим показа элемента колонки",Buf,-1,Гр4+1,12);
 if n=0: ^Cur; fi;
 Гр4=n-1;
 ^Cur;
end;

Func Гр5_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n:i;
 Template.HideEditor(False);
 n=LMaxГр5;
 While True do
  if Input(LMaxГр5,"Количество символов для отображения содержания операции")=cmCancel: LMaxГр5=n; ^Cur; fi;
  if LMaxГр5<10 or LMaxГр5>255: Message("Ошибка! Значение не может быть меньше 10 и больше 255",mtError); else Break; fi;
 od;
 Message("Для вступления измений в силу необходимо выполнить расчет",mtInformation);
 ^Cur;
end;

Func Ост_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter,p1,p2:I;
var FieldName,СчУсл_,АнУсл_:S;
var Rpt:S;
var ДН_,ДК_:D;
 Template.HideEditor(False);
 if not Знак="": ^Cur; fi;
 FieldName=AsString(Template.Field);
 if УВОО: 
    p1=Pos("[",FieldName)+1; p2=Pos("]",FieldName);
    Iter=Int(SubStr(FieldName,p1,p2-p1));
   else 
    Iter=AsInteger(Template.Frame); 
 fi;
 if LengthOfArray(nЖО)=0: Message("Требуется выполнить расчет.",mtWarning); ^Cur; fi;
 АнУсл_=Раб.Бюджет2005.Объединить(АнУсл,Призн[Iter],"&");
 Rpt='"'+PlanVar("Общие")+'\Отчеты\Журнал операций.lst".';
 if Пр[Iter]=-1: 
    if Match(FieldName,"ОстНач*"):
       if not СчДеб[Iter]="x" and СчКре[Iter]="x": Rpt=Rpt+'"Раздельные остатки по счетам на начало периода'; ДН_=Dat(1,1,Year(ДН)); ДК_=ДН; СчУсл_=СчДеб[Iter];
         |СчДеб[Iter]="x" and not СчКре[Iter]="x": Rpt=Rpt+'"Раздельные остатки по счетам на начало периода'; ДН_=Dat(1,1,Year(ДН)); ДК_=ДН; СчУсл_=СчКре[Iter];
         |True:                                    Rpt=Rpt+'"Свернутые остатки по счетам на начало периода';  ДН_=Dat(1,1,Year(ДН)); ДК_=ДН; СчУсл_=СчУсл;
       fi;
      |Match(FieldName,"ОстКон*"):
       if not СчДеб[Iter]="x" and СчКре[Iter]="x": Rpt=Rpt+'"Раздельные остатки по счетам'; ДН_=ДН; ДК_=ДК; СчУсл_=СчДеб[Iter];
         |СчДеб[Iter]="x" and not СчКре[Iter]="x": Rpt=Rpt+'"Раздельные остатки по счетам'; ДН_=ДН; ДК_=ДК; СчУсл_=СчКре[Iter];
         |True:                                    Rpt=Rpt+'"Свернутые остатки по счетам';  ДН_=ДН; ДК_=ДК; СчУсл_=СчУсл;
       fi;
    fi;
    if Вал="EUR": Rpt=Rpt+' ('+Вал+')"';
      |Вал="USD": Rpt=Rpt+' ('+Вал+')"';
      |Вал="РУБ": Rpt=Rpt+' ('+Вал+')"';
      |True:      Rpt=Rpt+'"';
    fi;
    Report(Rpt,ДН_,ДК_,СчУсл_,АнУсл_);
 fi;
 ^Cur;
end;

Func Сумма_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter,p1,p2:I;
var FieldName,СчУсл_,АнУсл_:S;
var Rpt:S;
 Template.HideEditor(False);
 if УВОО: 
    FieldName=AsString(Template.Field);
    p1=Pos("[",FieldName)+1; p2=Pos("]",FieldName);
    Iter=Int(SubStr(FieldName,p1,p2-p1));
   else 
    Iter=AsInteger(Template.Frame); 
 fi;
 if LengthOfArray(nЖО)=0: Message("Требуется выполнить расчет.",mtWarning); ^Cur; fi;
 АнУсл_=Раб.Бюджет2005.Объединить(АнУсл,Призн[Iter],"&");
 Rpt='"'+PlanVar("Общие")+'\Отчеты\Журнал операций.lst"."Проводки по счетам';
 if Пр[Iter]=-1:
    if not СчДеб[Iter]="x" and СчКре[Iter]="x": СчУсл_=СчДеб[Iter];
      |СчДеб[Iter]="x" and not СчКре[Iter]="x": СчУсл_=СчКре[Iter];
      |True:                                    СчУсл_=СчУсл;
    fi;
    if Вал="EUR": Rpt=Rpt+' ('+Вал+')"';
      |Вал="USD": Rpt=Rpt+' ('+Вал+')"';
      |Вал="РУБ": Rpt=Rpt+' ('+Вал+')"';
      |True:      Rpt=Rpt+'"';
    fi;
    Report(Rpt,ДН,ДК,СчУсл_,АнУсл_);
   else
    TransOpenJur(Пр[Iter]);
 fi;
 Return  Cur;
end;

Func Ост2_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter,p1,p2:I;
var FieldName,СчУсл_:S;
var Rpt:S;
var ДН_,ДК_:D;
 Template.HideEditor(False);
 if not Знак="": ^Cur; fi;
 FieldName=AsString(Template.Field);
 if УВОО: 
    p1=Pos("[",FieldName)+1; p2=Pos("]",FieldName);
    Iter=Int(SubStr(FieldName,p1,p2-p1));
   else 
    Iter=AsInteger(Template.Frame); 
 fi;
 if LengthOfArray(nЖО)=0: Message("Требуется выполнить расчет.",mtWarning); ^Cur; fi;
 Rpt='"'+PlanVar("Общие")+'\Отчеты\Журнал операций.lst".';
 if Match(FieldName,"ОстНач*"):
    if СчДеб2[Iter]<>"x" and СчКре2[Iter]= "x": СчУсл_=if(СверткаКБК,"*.","")+СчДеб2[Iter];
      |СчДеб2[Iter]= "x" and СчКре2[Iter]<>"x": СчУсл_=if(СверткаКБК,"*.","")+СчКре2[Iter];
      |True: ^Cur;
    fi;
    СчУсл_="("+СчУсл_+")&"+СчУсл;
    Rpt=Rpt+'"Раздельные остатки по счетам на начало периода'; 
    ДН_=Dat(1,1,Year(ДН)); 
    ДК_=ДН;
   |Match(FieldName,"ОстКон*"):
    if СчДеб2[Iter]<>"x" and СчКре2[Iter]= "x": СчУсл_=if(СверткаКБК,"*.","")+СчДеб2[Iter];
      |СчДеб2[Iter]= "x" and СчКре2[Iter]<>"x": СчУсл_=if(СверткаКБК,"*.","")+СчКре2[Iter];
      |True: ^Cur;
    fi;
    СчУсл_="("+СчУсл_+")&"+СчУсл;
    Rpt=Rpt+'"Раздельные Остатки по счетам'; 
    ДН_=ДН; 
    ДК_=ДК;
 fi;
 if Вал="EUR": Rpt=Rpt+' ('+Вал+')"';
   |Вал="USD": Rpt=Rpt+' ('+Вал+')"';
   |Вал="РУБ": Rpt=Rpt+' ('+Вал+')"';
   |True:      Rpt=Rpt+'"';
 fi;
 Report(Rpt,ДН_,ДК_,СчУсл_,АнУсл);
 ^Cur;
end;

Func Сумма2_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter,p1,p2:I;
var FieldName,СчУсл_:S;
var Rpt:S;
 Template.HideEditor(False);
 if УВОО: 
    FieldName=AsString(Template.Field);
    p1=Pos("[",FieldName)+1; p2=Pos("]",FieldName);
    Iter=Int(SubStr(FieldName,p1,p2-p1));
   else 
    Iter=AsInteger(Template.Frame); 
 fi;
 if LengthOfArray(nЖО)=0: Message("Требуется выполнить расчет.",mtWarning); ^Cur; fi;
 Rpt='"'+PlanVar("Общие")+'\Отчеты\Журнал операций.lst".';
 if СчДеб2[Iter]<>"x" and СчКре2[Iter]<>"x": СчУсл_="("+if(MatchСч9(СчДеб2[Iter]),if(СверткаКБК,"+*.","")+СчДеб2[Iter]+"/"+if(СверткаКБК,"*.","")+СчКре2[Iter],if(СверткаКБК,"-*.","")+СчКре2[Iter]+"/"+if(СверткаКБК,"*.","")+СчДеб2[Iter])+")&"+СчУсл; Rpt=Rpt+'"Обороты по счетам';
   |СчДеб2[Iter]<>"x" and СчКре2[Iter]= "x": СчУсл_="("+if(СверткаКБК,"*.","")+СчДеб2[Iter]+")&"+СчУсл; Rpt=Rpt+'"Раздельные Остатки по счетам';
   |СчДеб2[Iter]= "x" and СчКре2[Iter]<>"x": СчУсл_="("+if(СверткаКБК,"*.","")+СчКре2[Iter]+")&"+СчУсл; Rpt=Rpt+'"Раздельные Остатки по счетам';
 fi;
 if Вал="EUR": Rpt=Rpt+' ('+Вал+')"';
   |Вал="USD": Rpt=Rpt+' ('+Вал+')"';
   |Вал="РУБ": Rpt=Rpt+' ('+Вал+')"';
   |True:      Rpt=Rpt+'"';
 fi;
 Report(Rpt,ДН,ДК,СчУсл_,АнУсл);
 ^Cur;
end;
2-- Обработчики объектов
Proc btnВыборЖО_OnClick(Sender: String);
var Iter,n,n1:I;
РАБ.ЖО2.ИнитБаза;
 n=1;
 While n=1 do
  ClearVariable(Buf);
  ClearVariable(Buf2);
  n1=Int(GetFieldЖО("Number",0));
  for Iter=1..n1  do
   if GetFieldЖО("Ном",Iter)<>"":
      if SearchInArray(Buf,GetFieldЖО("Ном",Iter),True)=-1:
         n=InsertInArraySort(Buf,GetFieldЖО("Ном",Iter));
         InsertInArray(Buf2,n,GetFieldЖО("Ном",Iter)+" --"+GetFieldЖО("Наим",Iter));
      fi;
   fi;
  od;
  InsertInArray(Buf2,1,"Настройка списка журналов");
  n=Alternate("Список журналов операций",Buf2,-1,1,12);
  if n=0: Exit; fi;
  if n=1:
     OpenBlank("РАБ.ЖО2",True);
    else
     ЖО=SubStr(Buf2[n],1,Pos(" --",Buf2[n])-1);
     ЖурОпер="Журнал № "+ЖО;
     ВидЖурОпер=SubStr(Buf2[n],Pos(" --",Buf2[n])+3,255);
  fi;
 od;
 НайтиЖурнал;
 Показатель=GetFieldЖО("Показатель",nЖО[1]);
 Очистить;
 ПоказательДоп="";
 СчУслДоп="";
 btnПоиск.Enabled=not Показатель="";
end;

Func TimeToHMSstring_adv(valTime:Integer; valSep:String) :String;
var ihh, imm, icc :Integer;
var shh, smm, scc :String;
 shh=''; smm=''; scc='';
 ihh=Int(Trunc(valTime/3600));
 imm=Int(Trunc((valTime-ihh*3600)/60));
 icc=valTime-ihh*3600-imm*60;
 shh=Format("%.2d", ihh);
 smm=Format("%.2d", imm);
 scc=Format("%.2d", icc);
 ^(shh+valSep+smm+valSep+scc);
end;

Proc btnРасчет_OnClick(Sender: String);
 var начало:I;
 if ЖО="": Message("Выберите журнал операций",mtError); Template.Object="btnВыборЖО"; Exit; fi;
 if MM=0: Message("Введите месяц расчета",mtError); Template.Field="MMTxt"; Exit; fi;
 if YYYY=0: Message("Введите год расчета",mtError); Template.Field="YYYY"; Exit; fi;
 Refresh;
 начало=Time;
 Расчет;
 Message("Расчет завершен^MВремя работы - "+TimeToHMSstring_adv(Time-начало, ":"),mtInformation);
end;

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

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

Proc btnОчистка_OnClick(Sender: String);
 Очистить;
end;

Proc cbСверткаКБК_OnChange(Sender: String);
 Try
  Очистить2;
  ИтоговыеОбороты;
 Finally
  CloseProgress;
 end;
 Оформление;
end;

Proc cbСверткаДок_OnChange(Sender: String);
 Message("Для вступления измений в силу необходимо выполнить расчет",mtInformation);
end;

Proc cbУВОО_OnChange(Sender: String);
 if УВОО and (Упр=0 or Упр2=0): Message("Необходимо выполнить расчет"); Exit; fi;
 Оформление;
end;

Proc cbНИ_OnChange(Sender: String);
 Очистить;
end;

Proc btnПоиск_OnClick(Sender: String);
var tmp:S;
var Iter:I;
 tmp=AnaElection(Показатель);
 if tmp="": Exit; fi;
 Iter=SearchInArray(Призн,tmp,True);
 if Iter=-1: Message("Вхождение не найдено"); Exit; fi;
 if УВОО:
    Template.Field="НаимПок["+Str(Iter)+"]";
   else
    Template.Field="НаимПок";
    Template.Frame=Iter;
 fi;
end;

Proc rbПорядок_OnChange(Sender: String);
 if Порядок=0 or (Порядок=1 and УВОО): Message("Необходимо выполнить расчет"); Exit; fi;
 SortSection(Упр,"ДокДата");
end;

2-- Обработчики событий шаблона
Proc OnOpen(Create: Logical);
var Rec:Record;
 РАБ.ЖО2.ИнитБаза;
 Раб.Настр_Печать.Cfg('','Rpo_0504071_000.cfg');
 if Учреждение="": 
    ЗаполнитьРекв(Раб.Бюджет2005.НашРекв);
 fi;
 НайтиЖурнал;
 УВОО=False;
 btnПоиск.Enabled=not Показатель="";
 BaseCurr=BaseCurrency; 
 if ЕдИзм="" or ЕдИзм_="":
    Вал="";
    ЕдИзм="РУБ";
    ЕдИзм_="Пересчет в базовую валюту ("+BaseCurr+")";
 fi;
end;

Proc AfterOpen(Destroy: Logical);
 Инициализация;
 Оформление;
end;

Func ЕстьДанные :Logical;
var sum1, sum2, sum3 :Numeric;
 sum1=Abs(SumOfArray(ОстНачД, Упр))+Abs(SumOfArray(ОстНачК, Упр));
 sum2=Abs(SumOfArray(ОстКонД, Упр))+Abs(SumOfArray(ОстКонК, Упр));
 sum3=Abs(SumOfArray(Сумма,   Упр));
 if Round((sum1+sum2+sum3), 2)>0.00: ^True; else ^False; fi;
end;

Func КорректныеСимволыПризнака(Value:String) :String;
var num, ii, intChars :Integer;
var Res, Chars :String;
 Res="";
 num=Length(Value);
 if num>0:
   for ii=1 to num do
     Chars=SubStr(Value, ii, 1);
     intChars=Ascii(Chars);
     if (intChars>= 48 and intChars<= 57) or  -- цифры
        (intChars>= 65 and intChars<= 90) or  -- латиница заглавные
        intChars=95 or                        -- нижнее подчеркивание
        (intChars>= 97 and intChars<=122) or  -- латиница строчные
        (intChars>=192 and intChars<=255):    -- национальный алфавит
           Res=Res+Chars; else Res=Res+"_";
     fi;
   od;
 fi;
 ^Res;
end;

Proc Экспорт_ExcelOle(FileName:S);
var xlsApp, xlsBooks, xlsBook, xlsSheets, xlsSheet, xlsRng :AutoObject;
var localTS, localDS, ExcelVersion, xlNameFile, Value :String;
var num, len, pp, ii, maxIterCount, IterCount, IterSave, kol, max_kol, offsetRow :Integer;
var NoError, rusExcel, ExportWork :Logical;

 num=Упр;
 if num>0:
   NoError=True;
   maxIterCount=300;
   offsetRow=0;
   kol=0;
   -- ФОРМИРОВАНИЕ ШАПКИ
   if NoError:
     xlsApp=CreateAutoObject('Excel.Application');
     Try
       ExcelVersion=asString(xlsApp.Version);
       if Int(ExcelVersion)>=12 or ExcelVersion="12.0": 
          xlNameFile=FileName+"x";
         else
          xlNameFile=FileName;
       fi;
       ShowProgress(0, "Подготовка...");
       Try
         xlsApp.EnableEvents=False;   -- отключить события
         xlsApp.AutomationSecurity=3; -- отключить макросы
         --
         rusExcel=РАБ.EXCEL.РусскийExcel(xlsApp);
         localDS=asString(xlsApp.International[РАБ.EXCEL.xlDecimalSeparator]);
         localTS=asString(xlsApp.International[РАБ.EXCEL.xlThousandsSeparator]);
         --
         xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
         Try
           xlsBook=AsAutoObject(xlsBooks.Add); -- добавить книгу
           Try
             Try
               xlsSheets=AsAutoObject(xlsBook.Sheets);
               Try
                 max_kol=asInteger(xlsSheets.Count);
                 if max_kol<1: Try Try xlsSheet=AsAutoObject(xlsSheets.Add); Finally ClearVariable(xlsSheet); end; Except ClearVariable(xlsSheet); Raise; end; fi;
                 kol=kol+1;
                 xlsSheet=AsAutoObject(xlsBook.Worksheets[kol]);
                 Try
                   xlsSheet.Name = "регистр";
                   ShowProgress(25, "Формируем титул...");
                   ProgressPos(01);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 01, 04.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 02, 08.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 03, 06.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 04, 10.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 05, 12.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 06, 12.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 07, 12.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 08, 12.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 09, 15.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 10, 15.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 11, 12.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 12, 12.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 13, 12.0);
                   ProgressPos(02);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 03, ЖУРОПЕР);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 03, offsetRow, 10);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 12, 0, True,  True, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 13, "КОДЫ");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 13, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   ProgressPos(03);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 03, ВИДЖУРОПЕР);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 03, offsetRow, 10);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 11, 0, True,  True, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 11, "Форма по КФД");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 11, offsetRow, 12);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 11, РАБ.EXCEL.xlRight,  1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 13, "0504071");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 13, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Courier New", 11, 0, True,  True, False, 0, True);
                   ProgressPos(04);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуДатуМесяцГод(xlsSheet, offsetRow, 06, rusExcel, ДН, if(ДН<1.1.1900, True, False));
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 06, offsetRow, 08);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 06, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 11, 0, True, False,  True, 0, True);
                   РАБ.EXCEL.ПодчеркнутыйТекстЯчеек(xlsSheet, offsetRow, 06, offsetRow, 08, False, True, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 12, "Дата");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 12, РАБ.EXCEL.xlRight,  1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуДату(xlsSheet, offsetRow, 13, rusExcel, ДК, if(ДК<1.1.1900, True, False));
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 13, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   ProgressPos(05);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "Учреждение:");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 03);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 04, Учреждение);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 04, offsetRow, 11);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 04, РАБ.EXCEL.xlLeft,   1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True,  True, False, 0, True);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 04, offsetRow, 11, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 12, "по ОКПО");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 12, РАБ.EXCEL.xlRight,  1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 13, ОКПО);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 13, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   ProgressPos(06);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "Структурное подразделение:");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 04);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 05, НаимПодр);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 05, offsetRow, 11);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 05, РАБ.EXCEL.xlLeft,   1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True,  True, False, 0, True);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 05, offsetRow, 11, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 12, РАБ.EXCEL.xlRight,  1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 13, ПризнПодр);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 13, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   ProgressPos(07);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "Наименование учредителя:");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 05);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 06, Наимучр);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 06, offsetRow, 11);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 06, РАБ.EXCEL.xlLeft,   1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True,  True, False, 0, True);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 06, offsetRow, 11, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 12, РАБ.EXCEL.xlRight,  1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 13, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   ProgressPos(07);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "Наименование бюджета:");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 05);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 06, Наимбюдж);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 06, offsetRow, 11);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 06, РАБ.EXCEL.xlLeft,   1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True,  True, False, 0, True);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 06, offsetRow, 11, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 12, РАБ.EXCEL.xlRight,  1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 13, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   ProgressPos(08);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "Единица измерения:");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 03);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 04, ЕдИзм);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 04, offsetRow, 05);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 04, РАБ.EXCEL.xlLeft,   1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True,  True, False, 0, True);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 04, offsetRow, 05, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 12, "по ОКЕИ");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 12, РАБ.EXCEL.xlRight,  1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 13, ОКЕИ);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 13, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   ProgressPos(09);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, ЖОУсл);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 13);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False,  True, 0, True);
                   ProgressPos(10);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-07, 13, offsetRow-1, 13, True,  True,  True,  True, True,  True,  False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-06, 13, offsetRow-1, 13, True,  True,  True,  True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                   ProgressPos(11);
                   offsetRow=offsetRow+2;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "№ п.п.");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow+1, 01);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlCenter,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   ProgressPos(12);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 02, "Документ");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 02, offsetRow, 04);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 02, РАБ.EXCEL.xlCenter,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   ProgressPos(13);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow+1, 02, "дата");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow+1, 02, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 07, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow+1, 03, "номер");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow+1, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 07, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow+1, 04, "наименование");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow+1, 04, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 07, 0, True, False, False, 0, True);
                   ProgressPos(14);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 05, "Наименование показателя");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 05, offsetRow+1, 05);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 05, РАБ.EXCEL.xlCenter,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   ProgressPos(15);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 06, "Содержание операции");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 06, offsetRow+1, 06);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 06, РАБ.EXCEL.xlCenter,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   ProgressPos(16);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 07, "Остаток на начало периода");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 07, offsetRow, 08);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 07, РАБ.EXCEL.xlCenter,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow+1, 07, "по дебету");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow+1, 07, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 07, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow+1, 08, "по кредиту");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow+1, 08, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 07, 0, True, False, False, 0, True);
                   ProgressPos(17);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 09, "Номер счета");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 09, offsetRow, 10);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 09, РАБ.EXCEL.xlCenter,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow+1, 09, "дебет");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow+1, 09, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 07, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow+1, 10, "кредит");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow+1, 10, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 07, 0, True, False, False, 0, True);
                   ProgressPos(18);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 11, "Сумма");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 11, offsetRow+1, 11);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 11, РАБ.EXCEL.xlCenter,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   ProgressPos(19);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 12, "Остаток на конец периода");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 12, offsetRow, 13);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 12, РАБ.EXCEL.xlCenter,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow+1, 12, "по дебету");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow+1, 12, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 07, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow+1, 13, "по кредиту");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow+1, 13, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 07, 0, True, False, False, 0, True);
                   ProgressPos(20);
                   offsetRow=offsetRow+2;
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 02, "1");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 02, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 03, "2");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 03, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 04, "3");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 04, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 05, "4");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 05, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 06, "5");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 06, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 07, "6");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 07, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 08, "7");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 08, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 09, "8");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 09, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 10, "9");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 10, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 11, "10");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 11, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 12, "11");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 12, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 13, "12");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 13, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.НадстрочноеНачертаниеДиапазона(xlsSheet, offsetRow, 01, offsetRow, 13, True);
                   ProgressPos(21);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-2, 01, offsetRow, 13, True, True, True,  True,  True,  True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-2, 01, offsetRow, 13, True, True, True,  True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                   ProgressPos(22);
                   РАБ.EXCEL.PrintSetup_ЧБ_Поля10(xlsApp, xlsSheet, False, offsetRow-2, offsetRow, 0, 0, True, False, True, 92);
                   ProgressPos(23);
                   РАБ.EXCEL.PrintSetup_Колонтитулы(xlsSheet, rusExcel, "");
                   ProgressPos(24);
                   РАБ.EXCEL.АвтоВыравниваниеСтрок(xlsSheet, 1, offsetRow);
                   ProgressPos(25);
                   --
                   NoError=True;
                 Finally
                   ClearVariable(xlsSheet);
                 end;
               Finally
                 ClearVariable(xlsSheets);
               end;
             Except
               NoError=False;
               xlsBook.Close(False); -- закрыть книгу без сохранения
             end;
           Finally
             xlsBook.Close(True, xlNameFile);
             ClearVariable(xlsBook); -- освободить объект книги
           end;
         Finally
           ClearVariable(xlsBooks); -- освободить объект книг
         end;
       Finally
         ClearVariable(xlsApp); -- освободить объект Excel
         CloseProgress;
       end;
     Except
       NoError=False;
       ClearVariable(xlsRng);
       ClearVariable(xlsSheet);
       ClearVariable(xlsSheets);
       ClearVariable(xlsBook);
       ClearVariable(xlsBooks);
       ClearVariable(xlsApp);
     end;
   fi; --Формирование шапки
   -- ОСНОВНАЯ ТАБЛИЦА
   if NoError:
     len=Упр;
     if len>0:
       ShowProgress(len, "Формируем основную таблицу...");
       Try
         IterCount=0;
         IterSave=1;
         ExportWork=True;
         while ExportWork do
           if NoError:
             xlsApp=CreateAutoObject('Excel.Application');
             Try
               Try
                 xlsApp.EnableEvents=False;   -- отключить события
                 xlsApp.AutomationSecurity=3; -- отключить макросы
                 xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
                 Try
                   xlsBook=AsAutoObject(xlsBooks.Open(xlNameFile));
                   Try
                     Try
                       xlsSheet=AsAutoObject(xlsBook.Worksheets["регистр"]);
                       Try
                         for ii=IterSave to len do
                           ProgressPos(ii);
                           offsetRow=offsetRow+1;
                           РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, 2Str(пп[ii])0);
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlCenter,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           РАБ.EXCEL.ЗаписатьЯчейкуДату( xlsSheet, offsetRow, 02, rusExcel, 2ДокДата[ii]0, if(ДокДата[ii]<1.1.1900, True, False));
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 02, РАБ.EXCEL.xlCenter,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 03, РАБ.EXCEL.ЗаменитьEnter(2ДокНомер[ii]0));
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 03, РАБ.EXCEL.xlCenter,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 04, РАБ.EXCEL.ЗаменитьEnter(2ДокНаим[ii]0));
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 04, РАБ.EXCEL.xlLeft,     0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 05, РАБ.EXCEL.ЗаменитьEnter(2НаимПок[ii]0));
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 05, РАБ.EXCEL.xlLeft,     0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 06, РАБ.EXCEL.ЗаменитьEnter(2СодОпер[ii]0));
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 06, РАБ.EXCEL.xlLeft,     0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           if ОстНачД[ii]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, offsetRow, 07, 2ОстНачД[ii]0, localDS, localTS); fi; РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 07, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           if ОстНачК[ii]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, offsetRow, 08, 2ОстНачК[ii]0, localDS, localTS); fi; РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 08, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           pp=Length(2СчДеб[ii]0); if pp>12: Value=SubStr(2СчДеб[ii]0, 1, pp-12)+Chr(10)+SubStr(2СчДеб[ii]0, pp-11, 12); else Value=2СчДеб[ii]0; fi;
                           РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 09, Value);
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 09, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           if pp>12: РАБ.EXCEL.УстановитьРазмерШрифтаЧастиСлова(xlsSheet, offsetRow, 09, 01, pp-12, 07); fi;
                           pp=Length(2СчКре[ii]0); if pp>12: Value=SubStr(2СчКре[ii]0, 1, pp-12)+Chr(10)+SubStr(2СчКре[ii]0, pp-11, 12); else Value=2СчКре[ii]0; fi;
                           РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 10, Value);
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 10, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           if pp>12: РАБ.EXCEL.УстановитьРазмерШрифтаЧастиСлова(xlsSheet, offsetRow, 10, 01, pp-12, 07); fi;
                           if   Сумма[ii]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧислоПлюсМинус(xlsSheet, offsetRow, 11, 2  Сумма[ii]0, localDS, localTS); fi; РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 11, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           if ОстКонД[ii]<>0.00:          РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, offsetRow, 12, 2ОстКонД[ii]0, localDS, localTS); fi; РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 12, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           if ОстКонК[ii]<>0.00:          РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, offsetRow, 13, 2ОстКонК[ii]0, localDS, localTS); fi; РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 13, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           --
                           РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 01, offsetRow, 13, False, False, False,  True,  True,  True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                           РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 01, offsetRow, 13,  True, False,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                           --
                           if ii=len:
                             РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 01, offsetRow, 13, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                           fi;
                           --
                           IterCount=IterCount+1;
                           if IterCount>=maxIterCount: IterSave=IterSave+IterCount; IterCount=0; Break; fi;
                         od;
                         NoError=True;
                       Finally
                         ClearVariable(xlsSheet);
                       end;
                     Except
                       NoError=False;
                       ExportWork=False;
                       xlsBook.Close(False); -- закрыть книгу без сохранения
                     end;
                   Finally
                     xlsBook.Save;
                     xlsBook.Close(False); -- закрыть книгу без сохранения
                     ClearVariable(xlsBook); -- освободить объект книги
                   end;
                 Finally
                   ClearVariable(xlsBooks); -- освободить объект книг
                 end;
               Finally
                 ClearVariable(xlsApp); -- освободить объект Excel
               end;
             Except
               NoError=False;
               ExportWork=False;
               ClearVariable(xlsRng);
               ClearVariable(xlsSheet);
               ClearVariable(xlsSheets);
               ClearVariable(xlsBook);
               ClearVariable(xlsBooks);
               ClearVariable(xlsApp);
             end;
             if ii>=len: ExportWork=False; fi;
           else
             ExportWork=False;
           fi;
         end; -- while
       Finally
         CloseProgress;
       end;
     else -- если данных нет рисуем пустую строчку
       xlsApp=CreateAutoObject('Excel.Application');
       Try
         Try
           xlsApp.EnableEvents=False;   -- отключить события
           xlsApp.AutomationSecurity=3; -- отключить макросы
           xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
           Try
             xlsBook=AsAutoObject(xlsBooks.Open(xlNameFile));
             Try
               Try
                 xlsSheet=AsAutoObject(xlsBook.Worksheets["регистр"]);
                 Try
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 02, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 04, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 05, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 06, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 07, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 08, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 09, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 10, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 11, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 12, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 13, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   --
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 01, offsetRow, 13, False, False, False, False,  True,  True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 01, offsetRow, 13,  True,  True,  True,  True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                   NoError=True;
                 Finally
                   ClearVariable(xlsSheet);
                 end;
               Except
                 NoError=False;
                 xlsBook.Close(False); -- закрыть книгу без сохранения
               end;
             Finally
               xlsBook.Save;
               xlsBook.Close(False); -- закрыть книгу без сохранения
               ClearVariable(xlsBook); -- освободить объект книги
             end;
           Finally
             ClearVariable(xlsBooks); -- освободить объект книг
           end;
         Finally
           ClearVariable(xlsApp); -- освободить объект Excel
         end;
       Except
         NoError=False;
         ClearVariable(xlsRng);
         ClearVariable(xlsSheet);
         ClearVariable(xlsSheets);
         ClearVariable(xlsBook);
         ClearVariable(xlsBooks);
         ClearVariable(xlsApp);
       end;
     fi; -- len>0:
   fi; --Основная таблица
   -- таблица итогов
   if NoError:
     len=Упр3;
     if len>0:
       ShowProgress(len, "Формируем таблицу итогов...");
       Try
         IterCount=0;
         IterSave=1;
         ExportWork=True;
         while ExportWork do
           if NoError:
             xlsApp=CreateAutoObject('Excel.Application');
             Try
               Try
                 xlsApp.EnableEvents=False;   -- отключить события
                 xlsApp.AutomationSecurity=3; -- отключить макросы
                 xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
                 Try
                   xlsBook=AsAutoObject(xlsBooks.Open(xlNameFile));
                   Try
                     Try
                       xlsSheet=AsAutoObject(xlsBook.Worksheets["регистр"]);
                       Try
                         offsetRow=offsetRow+1;
                         for ii=IterSave to len do
                           ProgressPos(ii);
                           offsetRow=offsetRow+1;
                           РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, ТекстИтого[ii]);
                           РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 06);
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlRight,   1,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           if ИтогОстНачД[ii]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, offsetRow, 07, 2ИтогОстНачД[ii]0, localDS, localTS); fi; РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 07, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           if ИтогОстНачК[ii]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, offsetRow, 08, 2ИтогОстНачК[ii]0, localDS, localTS); fi; РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 08, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 09, "X");
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 09, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 10, "X");
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 10, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           if   ИтогСумма[ii]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, offsetRow, 11,   2ИтогСумма[ii]0, localDS, localTS); fi; РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 11, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           if ИтогОстНачД[ii]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, offsetRow, 12, 2ИтогОстНачД[ii]0, localDS, localTS); fi; РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 12, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           if ИтогОстНачК[ii]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, offsetRow, 13, 2ИтогОстНачК[ii]0, localDS, localTS); fi; РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 13, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           --
                           РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 07, offsetRow, 13, False, False, False,  True,  True,  True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                           РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 07, offsetRow, 13,  True, False,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                           --
                           if ii=len:
                             РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-len+1, 07, offsetRow, 13, False,  True, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                           fi;
                           --
                           IterCount=IterCount+1;
                           if IterCount>=maxIterCount: IterSave=IterSave+IterCount; IterCount=0; Break; fi;
                         od;
                         NoError=True;
                       Finally
                         ClearVariable(xlsSheet);
                       end;
                     Except
                       NoError=False;
                       ExportWork=False;
                       xlsBook.Close(False); -- закрыть книгу без сохранения
                     end;
                   Finally
                     xlsBook.Save;
                     xlsBook.Close(False); -- закрыть книгу без сохранения
                     ClearVariable(xlsBook); -- освободить объект книги
                   end;
                 Finally
                   ClearVariable(xlsBooks); -- освободить объект книг
                 end;
               Finally
                 ClearVariable(xlsApp); -- освободить объект Excel
               end;
             Except
               NoError=False;
               ExportWork=False;
               ClearVariable(xlsRng);
               ClearVariable(xlsSheet);
               ClearVariable(xlsSheets);
               ClearVariable(xlsBook);
               ClearVariable(xlsBooks);
               ClearVariable(xlsApp);
             end;
             if ii>=len: ExportWork=False; fi;
           else
             ExportWork=False;
           fi;
         end; -- while
       Finally
         CloseProgress;
       end;
     else -- если данных нет рисуем пустую строчку
       xlsApp=CreateAutoObject('Excel.Application');
       Try
         Try
           xlsApp.EnableEvents=False;   -- отключить события
           xlsApp.AutomationSecurity=3; -- отключить макросы
           xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
           Try
             xlsBook=AsAutoObject(xlsBooks.Open(xlNameFile));
             Try
               Try
                 xlsSheet=AsAutoObject(xlsBook.Worksheets["регистр"]);
                 Try
                   offsetRow=offsetRow+2;
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 06);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlRight,  1,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 07, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 08, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 09, РАБ.EXCEL.xlCenter, 0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 10, РАБ.EXCEL.xlCenter, 0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 11, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 12, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 13, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   --
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 07, offsetRow, 13, False, False, False, False,  True,  True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 07, offsetRow, 13,  True,  True,  True,  True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                   NoError=True;
                 Finally
                   ClearVariable(xlsSheet);
                 end;
               Except
                 NoError=False;
                 xlsBook.Close(False); -- закрыть книгу без сохранения
               end;
             Finally
               xlsBook.Save;
               xlsBook.Close(False); -- закрыть книгу без сохранения
               ClearVariable(xlsBook); -- освободить объект книги
             end;
           Finally
             ClearVariable(xlsBooks); -- освободить объект книг
           end;
         Finally
           ClearVariable(xlsApp); -- освободить объект Excel
         end;
       Except
         NoError=False;
         ClearVariable(xlsRng);
         ClearVariable(xlsSheet);
         ClearVariable(xlsSheets);
         ClearVariable(xlsBook);
         ClearVariable(xlsBooks);
         ClearVariable(xlsApp);
       end;
     fi; -- len>0:
   fi; --таблица итогов
   --обороты для главной книги
   if NoError:
     len=Упр2;
     if len>0:
       ShowProgress(len, "Формируем таблицу оборотов для главной книги...");
       Try
         IterCount=0;
         IterSave=1;
         ExportWork=True;
         while ExportWork do
           if NoError:
             xlsApp=CreateAutoObject('Excel.Application');
             Try
               Try
                 xlsApp.EnableEvents=False;   -- отключить события
                 xlsApp.AutomationSecurity=3; -- отключить макросы
                 xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
                 Try
                   xlsBook=AsAutoObject(xlsBooks.Open(xlNameFile));
                   Try
                     Try
                       xlsSheet=AsAutoObject(xlsBook.Worksheets["регистр"]);
                       Try
                         offsetRow=offsetRow+1;
                         for ii=IterSave to len do
                           ProgressPos(ii);
                           offsetRow=offsetRow+1;
                           РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, ТекстОбороты[ii]);
                           РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 06);
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlRight,   1,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
--                           if ОстНачД2[ii]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, offsetRow, 07, 2ОстНачД2[ii]0, localDS, localTS); fi; РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 07, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
--                           if ОстНачК2[ii]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, offsetRow, 08, 2ОстНачК2[ii]0, localDS, localTS); fi; РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 08, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           pp=Length(2СчДеб2[ii]0); if pp>12: Value=SubStr(2СчДеб2[ii]0, 1, pp-12)+Chr(10)+SubStr(2СчДеб2[ii]0, pp-11, 12); else Value=2СчДеб2[ii]0; fi;
                           РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 09, Value);
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 09, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           if pp>12: РАБ.EXCEL.УстановитьРазмерШрифтаЧастиСлова(xlsSheet, offsetRow, 09, 01, pp-12, 07); fi;
                           pp=Length(2СчКре2[ii]0); if pp>12: Value=SubStr(2СчКре2[ii]0, 1, pp-12)+Chr(10)+SubStr(2СчКре2[ii]0, pp-11, 12); else Value=2СчКре2[ii]0; fi;
                           РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 10, Value);
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 10, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           if pp>12: РАБ.EXCEL.УстановитьРазмерШрифтаЧастиСлова(xlsSheet, offsetRow, 10, 01, pp-12, 07); fi;
                           if   Сумма2[ii]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧислоПлюсМинус(xlsSheet, offsetRow, 11, 2  Сумма2[ii]0, localDS, localTS); fi; РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 11, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
--                           if ОстКонД2[ii]<>0.00:          РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, offsetRow, 12, 2ОстКонД2[ii]0, localDS, localTS); fi; РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 12, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
--                           if ОстКонК2[ii]<>0.00:          РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, offsetRow, 13, 2ОстКонК2[ii]0, localDS, localTS); fi; РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 13, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                           --
                           РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 07, offsetRow, 13, False, False, False,  True,  True,  True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                           РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 07, offsetRow, 13,  True, False,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                           --
                           if ii=len:
                             РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-len+1, 07, offsetRow, 13, False,  True, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                           fi;
                           --
                           IterCount=IterCount+1;
                           if IterCount>=maxIterCount: IterSave=IterSave+IterCount; IterCount=0; Break; fi;
                         od;
                         NoError=True;
                       Finally
                         ClearVariable(xlsSheet);
                       end;
                     Except
                       NoError=False;
                       ExportWork=False;
                       xlsBook.Close(False); -- закрыть книгу без сохранения
                     end;
                   Finally
                     xlsBook.Save;
                     xlsBook.Close(False); -- закрыть книгу без сохранения
                     ClearVariable(xlsBook); -- освободить объект книги
                   end;
                 Finally
                   ClearVariable(xlsBooks); -- освободить объект книг
                 end;
               Finally
                 ClearVariable(xlsApp); -- освободить объект Excel
               end;
             Except
               NoError=False;
               ExportWork=False;
               ClearVariable(xlsRng);
               ClearVariable(xlsSheet);
               ClearVariable(xlsSheets);
               ClearVariable(xlsBook);
               ClearVariable(xlsBooks);
               ClearVariable(xlsApp);
             end;
             if ii>=len: ExportWork=False; fi;
           else
             ExportWork=False;
           fi;
         end; -- while
       Finally
         CloseProgress;
       end;
     else -- если данных нет рисуем пустую строчку
       xlsApp=CreateAutoObject('Excel.Application');
       Try
         Try
           xlsApp.EnableEvents=False;   -- отключить события
           xlsApp.AutomationSecurity=3; -- отключить макросы
           xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
           Try
             xlsBook=AsAutoObject(xlsBooks.Open(xlNameFile));
             Try
               Try
                 xlsSheet=AsAutoObject(xlsBook.Worksheets["регистр"]);
                 Try
                   offsetRow=offsetRow+2;
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 06);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlRight,  1,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 07, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 08, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 09, РАБ.EXCEL.xlCenter, 0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 10, РАБ.EXCEL.xlCenter, 0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 11, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 12, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 13, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   --
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 07, offsetRow, 13, False, False, False, False,  True,  True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 07, offsetRow, 13,  True,  True,  True,  True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                   NoError=True;
                 Finally
                   ClearVariable(xlsSheet);
                 end;
               Except
                 NoError=False;
                 xlsBook.Close(False); -- закрыть книгу без сохранения
               end;
             Finally
               xlsBook.Save;
               xlsBook.Close(False); -- закрыть книгу без сохранения
               ClearVariable(xlsBook); -- освободить объект книги
             end;
           Finally
             ClearVariable(xlsBooks); -- освободить объект книг
           end;
         Finally
           ClearVariable(xlsApp); -- освободить объект Excel
         end;
       Except
         NoError=False;
         ClearVariable(xlsRng);
         ClearVariable(xlsSheet);
         ClearVariable(xlsSheets);
         ClearVariable(xlsBook);
         ClearVariable(xlsBooks);
         ClearVariable(xlsApp);
       end;
     fi; -- len>0:
   fi; --обороты для главной книги
   --Заключительный этап...
   if NoError:
     ShowProgress(8, "Заключительный этап... ");
     Try
       xlsApp=CreateAutoObject('Excel.Application');
       Try
         Try
           xlsApp.EnableEvents=False;   -- отключить события
           xlsApp.AutomationSecurity=3; -- отключить макросы
           xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
           Try
             xlsBook=AsAutoObject(xlsBooks.Open(xlNameFile));
             Try
               Try
                 xlsSheet=AsAutoObject(xlsBook.Worksheets["регистр"]);
                 Try
                   ProgressPos(1);
                   offsetRow=offsetRow+2;

                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "Количество листов приложений");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 04);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlRight,  1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);

                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 05, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 05, offsetRow, 05,  True,  True,  True,  True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);

                   ProgressPos(2);
                   offsetRow=offsetRow+3;

                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "Главный бухгалтер");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 03);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);

                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 08, offsetRow, 09);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 08, РАБ.EXCEL.xlCenter, 0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, True,  False, 0, True);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet,  offsetRow, 08, offsetRow, 09, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);

                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 11, ГлБухгалтер);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 11, offsetRow, 13);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 11, РАБ.EXCEL.xlCenter, 0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, True,  False, 0, True);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet,  offsetRow, 11, offsetRow, 13, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);

                   ProgressPos(3);
                   offsetRow=offsetRow+1;

                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 08, "(подпись)");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 08, offsetRow, 09);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 08, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.НадстрочноеНачертаниеДиапазона(xlsSheet, offsetRow, 08, offsetRow, 09, True);

                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 11, "(расшифровка подписи)");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 11, offsetRow, 13);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 11, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.НадстрочноеНачертаниеДиапазона(xlsSheet, offsetRow, 11, offsetRow, 13, True);

                   ProgressPos(4);
                   offsetRow=offsetRow+2;

                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "Исполнитель");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 03);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlRight,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);

                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 05, ДолжнИсп);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 05, offsetRow, 06);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 05, РАБ.EXCEL.xlCenter, 0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, True,  False, 0, True);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet,  offsetRow, 05, offsetRow, 06, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);

                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 08, offsetRow, 09);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 08, РАБ.EXCEL.xlCenter, 0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, True,  False, 0, True);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet,  offsetRow, 08, offsetRow, 09, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);

                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 11, Исполнитель);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 11, offsetRow, 13);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 11, РАБ.EXCEL.xlCenter, 0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, True,  False, 0, True);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet,  offsetRow, 11, offsetRow, 13, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);

                   ProgressPos(5);
                   offsetRow=offsetRow+1;

                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 05, "(должность)");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 05, offsetRow, 06);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 05, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.НадстрочноеНачертаниеДиапазона(xlsSheet, offsetRow, 05, offsetRow, 06, True);

                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 08, "(подпись)");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 08, offsetRow, 09);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 08, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.НадстрочноеНачертаниеДиапазона(xlsSheet, offsetRow, 08, offsetRow, 09, True);

                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 11, "(расшифровка подписи)");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 11, offsetRow, 13);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 11, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.НадстрочноеНачертаниеДиапазона(xlsSheet, offsetRow, 11, offsetRow, 13, True);

                   ProgressPos(6);
                   offsetRow=offsetRow+2;

                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 02, '"____"  ________________  20_____ г.');
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 02, offsetRow, 05);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 02, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, True, False, 0, True);

                   ProgressPos(7);
                   xlsRng=AsAutoObject(xlsSheet.Rows["1:"+Str(offsetRow)]);
                   Try xlsRng.AutoFit; Finally ClearVariable(xlsRng); end;

                   ProgressPos(8);
                   --
                   NoError=True;
                 Finally
                   ClearVariable(xlsSheet);
                 end;
               Except
                 NoError=False;
                 xlsBook.Close(False); -- закрыть книгу без сохранения
               end;
             Finally
               xlsBook.Save;
               xlsBook.Close(False); -- закрыть книгу без сохранения
               ClearVariable(xlsBook); -- освободить объект книги
             end;
           Finally
             ClearVariable(xlsBooks); -- освободить объект книг
           end;
         Finally
           ClearVariable(xlsApp); -- освободить объект Excel
         end;
       Except
         NoError=False;
         ClearVariable(xlsRng);
         ClearVariable(xlsSheet);
         ClearVariable(xlsSheets);
         ClearVariable(xlsBook);
         ClearVariable(xlsBooks);
         ClearVariable(xlsApp);
       end;
     Finally
      CloseProgress;
     end;
   fi; --Заключительный этап
--   if NoError:
--     len=EnqOkCancel("Экспорт завершен!^MВремя работы - "+TimeToHMSstring_adv(Time-начало, ":")+Chr(13)+"Открыть файл экспорта?", mtInformation);
--     if len=cmOK:
--       xlsApp=CreateAutoObject('Excel.Application');
--       Try
--         Try
--           xlsApp.EnableEvents=False;   -- отключить события
--           xlsApp.AutomationSecurity=3; -- отключить макросы
--           xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
--           Try
--             xlsBook=AsAutoObject(xlsBooks.Open(xlNameFile));
--             Try
--               xlsApp.Visible=True;  -- сделать видимым Excel
--             Finally
--               ClearVariable(xlsBook); -- освободить объект книги
--             end;
--           Finally
--             ClearVariable(xlsBooks); -- освободить объект книг
--           end;
--         Finally
--           ClearVariable(xlsApp);
--         end;
--       Except
--         ClearVariable(xlsApp);
--       end;
--     fi;
--   fi; --NoError
 fi; -- num>0

end;


Proc Экспорт_ExcelPy(FileName:S);
var Value,tmpF :String;
var num, len, pp, ii, начало, maxIterCount, kol,  offsetRow :Integer;
var NoError :Logical;

 num=Упр;
 начало=Time;
 if num>0:
   NoError=True;
   maxIterCount=300;
   Раб.Python.EXEC("offsetRow=0");
   kol=0;
   -- ФОРМИРОВАНИЕ ШАПКИ
   ShowProgress(0, "Подготовка...");
   Try
     Раб.Python.EXEC("wb=xlwt.Workbook(encoding='cp1251')");
     Раб.Python.EXEC("ws=wb.add_sheet('регистр',cell_overwrite_ok=True)");
     --Список стилей
     Раб.Python.EXEC("style01=xlwt.easyxf('''font: name Arial, height 240, bold 1; alignment: horz center, vert center, wrap 1''')");
     Раб.Python.EXEC("style02=xlwt.easyxf('''font: name Arial, height 200; alignment: horz center, vert center, wrap 1; border: bottom medium, top thin, left thin, right thin''')");
     Раб.Python.EXEC("style03=xlwt.easyxf('''font: name Arial, height 220, bold 1; alignment: horz center, vert center, wrap 1''')");
     Раб.Python.EXEC("style04=xlwt.easyxf('''font: name Arial, height 180; alignment: horz right, vert center, wrap 1''')");
     Раб.Python.EXEC("style05=xlwt.easyxf('''font: name Courier New, height 220, bold 1; alignment: horz center, vert center, wrap 1; border: bottom thin, left medium, right medium''')");
     Раб.Python.EXEC("style06=xlwt.easyxf('''font: name Arial, height 220, italic 1, underline single; alignment: horz center, vert center, wrap 1''')");
     Раб.Python.EXEC("style07=xlwt.easyxf('''font: name Arial, height 180; alignment: horz center, vert center, wrap 1; border: bottom thin, left medium, right medium''', num_format_str='''DD/MM/YYYY''')");
     Раб.Python.EXEC("style08=xlwt.easyxf('''font: name Arial, height 200; alignment: horz left, vert center, wrap 1''')");
     Раб.Python.EXEC("style09=xlwt.easyxf('''font: name Arial, height 180, bold 1; alignment: horz left, vert center, wrap 1; border: bottom thin''')");
     Раб.Python.EXEC("style10=xlwt.easyxf('''font: name Arial, height 160, italic 1; alignment: horz left, vert center, wrap 1''')");

     Раб.Python.EXEC("offsetRow+=1");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 3, 11, '"+ЖУРОПЕР+"', style01)");
     Раб.Python.EXEC("ws.write(offsetRow, 14, 'КОДЫ', style02)");
     Раб.Python.EXEC("ws.col(0).width=40");
     Раб.Python.EXEC("ws.col(1).width=80*16");
     Раб.Python.EXEC("ws.col(2).width=160*16");
     Раб.Python.EXEC("ws.col(3).width=160*16");
     Раб.Python.EXEC("ws.col(4).width=120*16");
     Раб.Python.EXEC("ws.col(5).width=200*16");
     Раб.Python.EXEC("ws.col(6).width=240*16");
     Раб.Python.EXEC("ws.col(7).width=240*16");
     Раб.Python.EXEC("ws.col(8).width=240*16");
     Раб.Python.EXEC("ws.col(9).width=240*16");
     Раб.Python.EXEC("ws.col(10).width=300*16");
     Раб.Python.EXEC("ws.col(11).width=300*16");
     Раб.Python.EXEC("ws.col(12).width=240*16");
     Раб.Python.EXEC("ws.col(13).width=240*16");
     Раб.Python.EXEC("ws.col(14).width=240*16");

     Раб.Python.EXEC("offsetRow+=1");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 3, 11, '"+ВИДЖУРОПЕР+"', style03)");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 12, 13, 'Форма по КФД', style04)");
     Раб.Python.EXEC("ws.write(offsetRow, 14, '0504071', style05)");
     Раб.Python.EXEC("offsetRow+=1");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 6, 8, 'за "+MMTxt+" "+Str(YYYY)+"г.', style06)");
     Раб.Python.EXEC("ws.write(offsetRow, 13, 'Дата', style04)");
     Раб.Python.EXEC("ws.write(offsetRow, 14, "+if(ДК<1.1.1800, "None", РАБ.Python.DateCast(ДК))+", style07)");
     Раб.Python.EXEC("offsetRow+=1");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 1, 03, 'Учреждение:', style08)");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 4, 11, '"+Учреждение+"', style09)");
     Раб.Python.EXEC("ws.write(offsetRow, 13, 'по ОКПО', style04)");
     Раб.Python.EXEC("ws.write(offsetRow, 14, '"+ОКПО+"', style07)");
     Раб.Python.EXEC("offsetRow+=1");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 1, 04, 'Структурное подразделение:', style08)");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 5, 12, '"+НаимПодр+"', style09)");
     Раб.Python.EXEC("ws.write(offsetRow, 13,  None, style04)");
     Раб.Python.EXEC("ws.write(offsetRow, 14, '"+ПризнПодр+"', style07)");
     Раб.Python.EXEC("offsetRow+=1");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 1, 04, 'Наименование учредителя:', style08)");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 5, 12, '"+НаимУЧР+"', style09)");
     Раб.Python.EXEC("ws.write(offsetRow, 13,  None, style04)");
     Раб.Python.EXEC("ws.write(offsetRow, 14, None, style07)");
     Раб.Python.EXEC("offsetRow+=1");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 1, 04, 'Наименование бюджета:', style08)");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 5, 12, '"+НаимБЮДЖ+"', style09)");
     Раб.Python.EXEC("ws.write(offsetRow, 13,  None, style04)");
     Раб.Python.EXEC("ws.write(offsetRow, 14, None, style07)");
     Раб.Python.EXEC("offsetRow+=1");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 1, 03, 'Единица измерения:', style08)");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 4, 12, '"+ЕдИзм+"', style09)");
     Раб.Python.EXEC("ws.write(offsetRow, 13, 'по ОКЕИ', style04)");
     Раб.Python.EXEC("ws.write(offsetRow, 14, '"+ОКЕИ+"', style07)");
     Раб.Python.EXEC("offsetRow+=1");
     Раб.Python.EXEC("style07e=xlwt.easyxf('''border: top medium''')");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 1, 12, '"+ЖОУсл+"', style10)");
     Раб.Python.EXEC("ws.write(offsetRow, 14, None, style07e)");

     Раб.Python.EXEC("offsetRow+=2");
     Раб.Python.EXEC("style11=xlwt.easyxf('''font: name Arial, height 160; alignment: horz center, vert center, wrap 1; border: left thin, right thin, top thin, bottom thin''')");
     Раб.Python.EXEC("style12=xlwt.easyxf('''font: name Arial, height 140; alignment: horz center, vert center, wrap 1; border: left thin, right thin, top thin, bottom thin''')");

     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow+1, 1, 1, '№ п.п.', style11)");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow+1, 2, 2, 'Дата операции', style11)");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 3, 5, 'Документ', style11)");
     Раб.Python.EXEC("ws.write(offsetRow+1, 3, 'дата', style12)");
     Раб.Python.EXEC("ws.write(offsetRow+1, 4, 'номер', style12)");
     Раб.Python.EXEC("ws.write(offsetRow+1, 5, 'наименование', style12)");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow+1, 6, 6, 'Наименование показателя', style11)");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow+1, 7, 7, 'Содержание операции', style11)");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 8, 9, 'Остаток на начало периода', style11)");
     Раб.Python.EXEC("ws.write(offsetRow+1, 8, 'по дебету', style12)");
     Раб.Python.EXEC("ws.write(offsetRow+1, 9, 'по кредиту', style12)");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow,10, 11, 'Номер счета', style11)");
     Раб.Python.EXEC("ws.write(offsetRow+1,10, 'дебет', style12)");
     Раб.Python.EXEC("ws.write(offsetRow+1, 11, 'кредит', style12)");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow+1, 12, 12, 'Сумма', style11)");
     Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 13, 14, 'Остаток на конец периода', style11)");
     Раб.Python.EXEC("ws.write(offsetRow+1, 13, 'по дебету', style12)");
     Раб.Python.EXEC("ws.write(offsetRow+1, 14, 'по кредиту', style12)");
     Раб.Python.EXEC("offsetRow+=2");
     Раб.Python.EXEC("style13=xlwt.easyxf('''font: name Arial, height 200, escapement superscript; alignment: horz center, vert center, wrap 1; border: top medium, bottom medium, left thin, right thin''')");
     Раб.Python.EXEC("style13l=xlwt.easyxf('''font: name Arial, height 200, escapement superscript; alignment: horz center, vert center, wrap 1; border: right medium''')");
     Раб.Python.EXEC("style13r=xlwt.easyxf('''font: name Arial, height 200, escapement superscript; alignment: horz center, vert center, wrap 1; border: left medium''')");
     Раб.Python.EXEC("ws.write(offsetRow, 0, None, style13l)");
     for ii = 1 .. 13 do
        Раб.Python.EXEC("ws.write(offsetRow, "+Str(ii+1)+", '"+Str(ii)+"', style13)");
     od;
     Раб.Python.EXEC("ws.write(offsetRow, 15, None, style13r)");
--!!!!!                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-2, 01, offsetRow, 13, True, True, True,  True,  True,  True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
--!!!!!                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-2, 01, offsetRow, 13, True, True, True,  True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
     --!!!!!       РАБ.EXCEL.PrintSetup_ЧБ_Поля10(xlsApp, xlsSheet, False, offsetRow-2, offsetRow, 0, 0, True, False, True, 92);
--!!!!!                  РАБ.EXCEL.PrintSetup_Колонтитулы(xlsSheet, rusExcel, "");
--!!!!!!                   РАБ.EXCEL.АвтоВыравниваниеСтрок(xlsSheet, 1, offsetRow);

   Finally
     CloseProgress;
   end;
   --/Формирование шапки
   --Переброс переменных
   tmpF=Раб.Бюджет2005.tempfile("","dbt");
   if WriteVarInDBT(tmpF,True):
      len=len;
   fi;
   -- ОСНОВНАЯ ТАБЛИЦА
   len=Упр;
   if len>0:
     Try
       ShowProgress(len, "Формируем основную таблицу...");
       Раб.Python.Exec("docdate=tb_dbt.read_array(r'"+tmpF+"','ДОКДАТА','date')");
       Раб.Python.Exec("opdate=tb_dbt.read_array(r'"+tmpF+"','ДАТОПЕР','date')");
       Раб.Python.Exec("docnum=tb_dbt.read_array(r'"+tmpF+"','ДОКНОМЕР')");
       Раб.Python.Exec("docname=tb_dbt.read_array(r'"+tmpF+"','ДОКНАИМ')");
       Раб.Python.Exec("namepok=tb_dbt.read_array(r'"+tmpF+"','НАИМПОК')");
       Раб.Python.Exec("content=tb_dbt.read_array(r'"+tmpF+"','СОДОПЕР')");
       Раб.Python.Exec("acc_d=tb_dbt.read_array(r'"+tmpF+"','СЧДЕБ')");
       Раб.Python.Exec("acc_c=tb_dbt.read_array(r'"+tmpF+"','СЧКРЕ')");

       Раб.Python.Exec("ost_n_d=tb_dbt.read_array(r'"+tmpF+"','ОСТНАЧД',float)");
       Раб.Python.Exec("mysum=tb_dbt.read_array(r'"+tmpF+"','СУММА',float)");
       Раб.Python.Exec("ost_n_c=tb_dbt.read_array(r'"+tmpF+"','ОСТНАЧК',float)");
       Раб.Python.Exec("ost_k_d=tb_dbt.read_array(r'"+tmpF+"','ОСТКОНД',float)");
       Раб.Python.Exec("ost_k_c=tb_dbt.read_array(r'"+tmpF+"','ОСТКОНК',float)");

       Раб.Python.EXEC("style_1c=xlwt.easyxf('''font: name Arial, height 160; alignment: horz center, vert center, wrap 1; border: left thin, right thin, top thin, bottom thin''', num_format_str='''DD/MM/YYYY''')");
       Раб.Python.EXEC("style_1l=xlwt.easyxf('''font: name Arial, height 160; alignment: horz left, vert bottom, wrap 1; border: left thin, right thin, top thin, bottom thin''', num_format_str='''DD/MM/YYYY''')");
       Раб.Python.EXEC("style_1r=xlwt.easyxf('''font: name Arial, height 160; alignment: horz right, vert center, wrap 1; border: left thin, right thin, top thin, bottom thin''', num_format_str='''#,##0.00;-#,##0.00''')");
       Раб.Python.EXEC("style_1rp=xlwt.easyxf('''font: name Arial, height 160; alignment: horz right, vert center, wrap 1; border: left thin, right thin, top thin, bottom thin''', num_format_str='''+#,##0.00;-#,##0.00''')");
       Раб.Python.EXEC("style_1u=xlwt.easyxf('''border: top medium, bottom medium''')");
--       Раб.Python.EXEC("style_1u1=xlwt.easyxf('''border: top medium''')");
       Раб.Python.EXEC("style_1r0=xlwt.easyxf('''font: name Arial, height 160; alignment: horz right, vert center, wrap 1; border: right thin''')");
       Раб.Python.EXEC("fix=lambda value: ('\'' if value.startswith('=') else '') + value.replace(chr(10),chr(13))");
       Раб.Python.EXEC("ap_split=lambda value: value[:-12]+chr(10)+value[-12:] if len(value) > 12 else value");
       Раб.Python.EXEC("chkdate=lambda value: value if (value and value > date(1900,1,1)) else None");
  --!!!!         if pp>12: РАБ.EXCEL.УстановитьРазмерШрифтаЧастиСлова(xlsSheet, offsetRow, 10, 01, pp-12, 07); fi;
       Раб.Python.EXEC("def doc1(row, i):"
              +chr(10)+"  ws.write(row, 1, str(i), style_1c)"
              +chr(10)+"  ws.write(row, 2, chkdate(opdate.get(i)) , style_1c)"
              +chr(10)+"  ws.write(row, 3, chkdate(docdate.get(i)) , style_1c)"
              +chr(10)+"  ws.write(row, 4, docnum.get(i), style_1c)"
              +chr(10)+"  ws.write(row, 5, docname.get(i), style_1l)");
       Раб.Python.EXEC("def sums1(row,i):"
              +chr(10)+"  ws.write(row, 8, ost_n_d.get(i), style_1r)"
              +chr(10)+"  ws.write(row, 9, ost_n_c.get(i), style_1r)"
              +chr(10)+"  ws.write(row, 12, mysum.get(i), style_1rp)"
              +chr(10)+"  ws.write(row, 13, ost_k_d.get(i), style_1r)"
              +chr(10)+"  ws.write(row, 14, ost_k_c.get(i), style_1r)");
       Раб.Python.EXEC("def cont1(row,i):"
              +chr(10)+"  ws.write(row, 6, fix(namepok.get(i,'')), style_1l)"
              +chr(10)+"  ws.write(row, 7, fix(content.get(i,'')), style_1l)"
              +chr(10)+"  ws.write(row, 10, ap_split(acc_d.get(i,'')), style_1c)"
              +chr(10)+"  ws.write(row, 11, ap_split(acc_c.get(i,'')), style_1c)");

       Раб.Python.EXEC("for ii in range(1,"+str(len+1)+"):"
              +chr(10)+"  offsetRow+=1"
              +chr(10)+"  doc1(offsetRow, ii)"
              +chr(10)+"  sums1(offsetRow, ii)"
              +chr(10)+"  cont1(offsetRow, ii)"
              +chr(10)+"  ws.row(offsetRow).height=500");

       Раб.Python.EXEC("ws.write_merge(offsetRow+1,offsetRow+1, 1, 14, None, style_1u)");
     Finally
       CloseProgress;
       DeleteFile(tmpF);
     end;
   else -- если данных нет рисуем пустую строчку
     DeleteFile(tmpF);
     offsetRow=offsetRow+1;
   fi; -- len>0:
   --Основная таблица
   -- таблица итогов
   len=Упр3;
   if len>0:
     ShowProgress(len, "Формируем таблицу итогов...");
     Try
       Раб.Python.EXEC("offsetRow+=1");
       for ii=1 to len do
         ProgressPos(ii);
         Раб.Python.EXEC("offsetRow+=1");
         Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 1, 7, '"+ТекстИтого[ii]+"', style_1r)");
         Раб.Python.EXEC("ws.write(offsetRow, 8, "+ if(ИтогОстНачД[ii]=0.00,'None',Str(2ИтогОстНачД[ii]0,2))+", style_1rp)");
         Раб.Python.EXEC("ws.write(offsetRow, 9, "+if(ИтогОстНачК[ii]=0.00,'None',Str(2ИтогОстНач0К2[ii]0,2))+", style_1rp)");
         Раб.Python.EXEC("ws.write(offsetRow, 10, 'X', style_1c)");
         Раб.Python.EXEC("ws.write(offsetRow, 11, 'X', style_1c)");
         Раб.Python.EXEC("ws.write(offsetRow, 12, "+if(ИтогСумма[ii]=0.00,'None',Str(2ИтогСумма[ii]0,2))+", style_1rp)");
         Раб.Python.EXEC("ws.write(offsetRow, 13, "+if(2ИтогОстНачД0[ii]=0.00,'None', Str(2ИтогОстНачД[ii]0,2))+", style_1rp)");
         Раб.Python.EXEC("ws.write(offsetRow, 14, "+if(2ИтогОстНачК0[ii]=0.00,'None',Str(2ИтогОстНачК[ii]0,2))+", style_1rp)");
         Раб.Python.EXEC("ws.row(offsetRow).height=500");
         if ii=len:
            Раб.Python.EXEC("ws.write_merge(offsetRow+1, offsetRow+1, 1, 14, None, style_1u)");
--            Раб.Python.EXEC("ws.write_merge(offsetRow+1, offsetRow+1, 12, 14, None, style_1u1)");
         fi;
       od;
     Finally
       CloseProgress;
     end;
   fi; -- len>0:
   --таблица итогов
   --обороты для главной книги
   len=Упр2;
   if len>0:
     ShowProgress(len, "Формируем таблицу оборотов для главной книги...");
     Try
       Раб.Python.EXEC("offsetRow+=1");
       for ii=1 to len do
         ProgressPos(ii);
         Раб.Python.EXEC("offsetRow+=1");
         Раб.Python.EXEC("ws.write_merge(offsetRow, offsetRow, 1, 9, '"+ТекстОбороты[ii]+"', style_1r0)");
         pp=Length(2СчДеб2[ii]0); 
         if pp>12: Value=SubStr(2СчДеб2[ii]0, 1, pp-12)+Chr(10)+SubStr(2СчДеб2[ii]0, pp-11, 12); else Value=2СчДеб2[ii]0; fi;
         Раб.Python.EXEC("ws.write(offsetRow, 10, '''"+Value+"''', style_1c)");
         --!!if pp>12: РАБ.EXCEL.УстановитьРазмерШрифтаЧастиСлова(xlsSheet, offsetRow, 09, 01, pp-12, 07); fi;
         pp=Length(2СчКре2[ii]0); if pp>12: Value=SubStr(2СчКре2[ii]0, 1, pp-12)+Chr(10)+SubStr(2СчКре2[ii]0, pp-11, 12); else Value=2СчКре2[ii]0; fi;
         Раб.Python.EXEC("ws.write(offsetRow, 11, '''"+Value+"''', style_1c)");
         --!!!if pp>12: РАБ.EXCEL.УстановитьРазмерШрифтаЧастиСлова(xlsSheet, offsetRow, 10, 01, pp-12, 07); fi;
         Раб.Python.EXEC("ws.write(offsetRow, 12, "+if(Сумма2[ii]=0.00,'None',Str(Сумма22[ii]0,2))+", style_1rp)");
         Раб.Python.EXEC("ws.row(offsetRow).height=500");

       od;
     Finally
       CloseProgress;
       offsetRow=Раб.Python.EvalI("offsetRow");
     end;
   else -- если данных нет рисуем пустую строчку
--                   offsetRow=offsetRow+2;
   fi; -- len>0:
   --обороты для главной книги
   --Заключительный этап...
   if NoError:
     ShowProgress(8, "Заключительный этап... ");
     Раб.Python.EXEC("style_2r=xlwt.easyxf('''font: name Arial, height 180; alignment: horz right, vert center, wrap 1''')");
     Раб.Python.EXEC("style_2c=xlwt.easyxf('''font: name Arial, height 180; alignment: horz center, vert center, wrap 1; border: bottom thin''')");
     Try
       ProgressPos(1);
       offsetRow=offsetRow+2;
       Раб.Python.EXEC("ws.write_merge("+Str(offsetRow)+", "+Str(offsetRow)+", 1, 4, 'Количество листов приложений', style_2r)");
       Раб.Python.EXEC("ws.write("+Str(offsetRow)+", 5, None, style_2c)");

       ProgressPos(2);
       offsetRow=offsetRow+3;
       Раб.Python.EXEC("ws.write_merge("+Str(offsetRow)+","+Str(offsetRow)+", 1, 3, 'Главный бухгалтер', style_2r)");
       Раб.Python.EXEC("ws.write_merge("+Str(offsetRow)+","+Str(offsetRow)+", 8, 9, None, style_2c)");
       Раб.Python.EXEC("ws.write_merge("+Str(offsetRow)+","+Str(offsetRow)+", 11, 13, '"+ГлБухгалтер+"', style_2c)");
       ProgressPos(3);
       offsetRow=offsetRow+1;
       Раб.Python.EXEC("style_3c=xlwt.easyxf('''font: name Arial, height 180, escapement superscript; alignment: horz center, vert center, wrap 1''')");
       Раб.Python.EXEC("ws.write_merge("+Str(offsetRow)+","+Str(offsetRow)+", 8, 9, '(подпись)', style_3c)");
       Раб.Python.EXEC("ws.write_merge("+Str(offsetRow)+","+Str(offsetRow)+", 11, 13, '(расшифровка подписи)', style_3c)");
       ProgressPos(4);
       offsetRow=offsetRow+2;

       Раб.Python.EXEC("ws.write_merge("+Str(offsetRow)+","+Str(offsetRow)+", 1, 3, 'Исполнитель', style_2r)");
       Раб.Python.EXEC("ws.write_merge("+Str(offsetRow)+","+Str(offsetRow)+", 5, 6, '"+ДолжнИсп+"', style_2c)");
       Раб.Python.EXEC("ws.write_merge("+Str(offsetRow)+","+Str(offsetRow)+", 8, 9, None, style_2c)");
       Раб.Python.EXEC("ws.write_merge("+Str(offsetRow)+","+Str(offsetRow)+", 12, 14, '"+Исполнитель+"', style_2c)");

       ProgressPos(5);
       offsetRow=offsetRow+1;
       Раб.Python.EXEC("ws.write_merge("+Str(offsetRow)+","+Str(offsetRow)+", 5, 6, '(должность)', style_3c)");
       Раб.Python.EXEC("ws.write_merge("+Str(offsetRow)+","+Str(offsetRow)+", 8, 9, '(подпись)', style_3c)");
       Раб.Python.EXEC("ws.write_merge("+Str(offsetRow)+","+Str(offsetRow)+", 12, 14, '(расшифровка подписи)', style_3c)");

       ProgressPos(6);
       offsetRow=offsetRow+2;
       Раб.Python.EXEC("ws.write_merge("+Str(offsetRow)+","+Str(offsetRow)+", 2, 5, '\'____\'  ________________  20_____ г.', style_2c)");

       ProgressPos(7);
--       xlsRng=AsAutoObject(xlsSheet.Rows["1:"+Str(offsetRow)]);
--       Try xlsRng.AutoFit; Finally ClearVariable(xlsRng); end;
       Раб.Python.EXEC("wb.save(r'"+FileName+"')");
       ProgressPos(8);
     Finally
      CloseProgress;
     end;
   fi; --Заключительный этап
 fi; -- num>0

end;

Proc btnExcel_OnClick(Sender: String);
var NameJur, fldrName, FileName:S;
var len,начало:I;
  if not ЕстьДанные: Message("Нет данных для выгрузки.^MПредварительно сделайте расчет формы.", mtInformation); Exit; fi;
  if ChooseFolder(fldrName, "Выберите папку для сохранения файла экспорта...")=cmOK:
    if ЖО<>"": NameJur=КорректныеСимволыПризнака(ЖО); else NameJur=""; fi;
    FileName=fldrName+"ExpJurOper"+NameJur+"_"+MMTxt+"_"+Str(YYYY)+".xls";--+Format("%.4d", Year(ToDay))+Format("%.2d", Mon(ToDay))+Format("%.2d", Day(ToDay))+"_"+TimeToHMSstring_adv(Time, "")+".xls";
    if ExistFile(FileName): DeleteFile(FileName); fi;
    if ExistFile(FileName+"x"): DeleteFile(FileName+"x"); fi; -- для версий Офиса 2007 или старше
    начало=Time;
    if Раб.Python.LoadAndImport("xlwt,tb_dbt",False):
       try
         Экспорт_ExcelPy(FileName);
       finally
         Раб.Python.Unload;
       end;
      else
       Экспорт_ExcelOle(FileName);
    fi;
    len=EnqOkCancel("Экспорт завершен!^MВремя работы - "+TimeToHMSstring_adv(Time-начало, ":")+Chr(13)+"Открыть файл экспорта?", mtInformation);
    if len=cmOK:
       ExecuteProgram(FileName);
    fi;
 fi;

end;


Proc btnExcelAll_OnClick(Sender: String);
var Iter,n,n1,начало:I;
var NameJur, fldrName, FileName:S;

 if MM=0: Message("Введите месяц расчета",mtError); Template.Field="MMTxt"; Exit; fi;
 if YYYY=0: Message("Введите год расчета",mtError); Template.Field="YYYY"; Exit; fi;
 if ChooseFolder(fldrName, "Выберите папку для сохранения файла экспорта...")<>cmOK: Exit; fi;
 начало=Time;
 Refresh;

 РАБ.ЖО2.ИнитБаза;
 ClearVariable(Buf);
 ClearVariable(Buf2);
 n1=Int(GetFieldЖО("Number",0));
 for Iter=1..n1  do
  if GetFieldЖО("Ном",Iter)<>"":
     if SearchInArray(Buf,GetFieldЖО("Ном",Iter),True)=-1:
        n=InsertInArraySort(Buf,GetFieldЖО("Ном",Iter));
        InsertInArray(Buf2,n,GetFieldЖО("Ном",Iter)+" --"+GetFieldЖО("Наим",Iter));
     fi;
  fi;
 od;
 --InsertInArray(Buf2,1,"Настройка списка журналов");
 for n=1 .. LengthOfArray(Buf2) do
    ЖО=SubStr(Buf2[n],1,Pos(" --",Buf2[n])-1);
    if ЖО<>"":
       ЖурОпер="Журнал № "+ЖО;
       ВидЖурОпер=SubStr(Buf2[n],Pos(" --",Buf2[n])+3,255);
       НайтиЖурнал;
       Показатель=GetFieldЖО("Показатель",nЖО[1]);
       Очистить;
       ПоказательДоп="";
       СчУслДоп="";
       Расчет;
       if ЖО<>"": NameJur=КорректныеСимволыПризнака(ЖО); else NameJur=""; fi;
       FileName=fldrName+"ExpJurOper"+NameJur+"_"+MMTxt+"_"+Str(YYYY)+".xls";--+Format("%.4d", Year(ToDay))+Format("%.2d", Mon(ToDay))+Format("%.2d", Day(ToDay))+"_"+TimeToHMSstring_adv(Time, "")+".xls";
       if ExistFile(FileName): DeleteFile(FileName); fi;
       if ExistFile(FileName+"x"): DeleteFile(FileName+"x"); fi; -- для версий Офиса 2007 или старше
       if Раб.Python.LoadAndImport("xlwt,tb_dbt",False):
          try
            Экспорт_ExcelPy(FileName);
          finally
            Раб.Python.Unload;
          end;
         else
          Экспорт_ExcelOle(FileName);
       fi;
    fi;
 od;
 Message("Экспорт завершен!^MВремя работы - "+TimeToHMSstring_adv(Time-начало, ":"), mtInformation);
end;


КОНЕЦ