БЛАНКСШАБЛОНОМ "Отчет о движении денежных средств";
-- Разработка бланка: ТБ.БЮДЖЕТ
-- Первый релиз: 02.07.2012

-- Настройки по умолчанию

-- Объекты
btnClose:Object; btnРасчет:Object; btnExport:Object; btnОчистить:Object; btnCheckANA:Object; cb_Настройки:Object;

СекцНстрОтч1 :Object;
СекцНстрОтч2 :Object;
СекцШапкаОтч :Object;
СекцСтБаланс :Object;
СекцПодписи1 :Object;
СекцПодписи2 :Object;
СекцПодписи3 :Object;
СекцПодписи4 :Object;

-- Переменные и константы
var dНачало      :Date=1.1.1900;
var Фокус        :String="";
var Flag_onEnter :Logical;
var flgНастройки :Logical;
var SelfBln      :String="ДОКУМЕНТЫ.УФО.ОТЧЕТЫ.ОКУД_0503123";
var НастрGUID    :String;
ОтчGUID          :String;
flgClear         :String;   -- контроль очистки бланков

var УслВал       :String  = РАБ.ПАРАМ_ОТЧ.УслВал;
var Вал          :String  = РАБ.ПАРАМ_ОТЧ.Вал;
var Вал_         :String  = Вал;
var Показатель   :String  = РАБ.ПАРАМ_ОТЧ.Показатель;
var ЕдИзм        :Integer = РАБ.ПАРАМ_ОТЧ.ЕдИзм;
var ЕдИзм_       :String  = if(ЕдИзм=1, Показатель, if(ЕдИзм=1000, "Тыс. "+Показатель, Str(ЕдИзм)+" "+Показатель));
var ОКЕИ         :String  = РАБ.ПАРАМ_ОТЧ.ОКЕИ;
var Точн         :Integer = РАБ.ПАРАМ_ОТЧ.Точн;
var ОбщУслКД     :String  = РАБ.ПАРАМ_ОТЧ.ОбщУслКД;
var ОбщУслКР     :String  = РАБ.ПАРАМ_ОТЧ.ОбщУслКР;
var ОбщУслКИФД   :String  = РАБ.ПАРАМ_ОТЧ.ОбщУслКИФД;
var ОбщУслБС     :String  = РАБ.ПАРАМ_ОТЧ.ОбщУслБС;
var ОбщУслВБС    :String  = РАБ.ПАРАМ_ОТЧ.ОбщУслВБС;
var ОбщУслСВР    :String  = РАБ.ПАРАМ_ОТЧ.ОбщУслСВР;

var УЧР_БДЖ_УМЛ  :String;
var flg402Calc   :Logical=[False];
var flg402Calc_  :Logical=flg402Calc;
var flgИскл_ЗГ   :Logical=[True];
var flgИскл_ЗГ_  :Logical=flgИскл_ЗГ;
var flgИскл_СП   :Logical=[False];
var flgИскл_СП_  :Logical=flgИскл_СП;
var flgДлинаФО   :Logical=[True];
var flgИсполнт   :Logical=[False];
var flgОтмт_КО   :Logical=[False];

ОтчАНАCur        :String;
var ОтчАНАOld    :String;

ДАТАОТЧ          :Date;
ДАТАЗГЛ          :String="";
ДАТАИСП          :Date;

oldDate          :Date;
УЧР_SREC         :Record;
УЧР_НПОЛ         :String;
УЧР_НКОР         :String;
УЧР_НАИМ         :String;
УЧР_ОКПО         :String;
УЧР_ИНН          :String;
УЧР_ГЛАВА        :String;
УЧР_ОКАТО        :String;
УЧР_БДЖ          :String;
ИСПREC           :Record;
ИСПФИО           :String;
ИСПДОЛ           :String;
РУКФИО           :String;
БУХФИО           :String;

var Buf[]        :String;
var Txt[]        :String;

var BAL_STR[]    :String;
var BAL_TXT[]    :String;
var BAL_SGN[]    :Integer;
var BAL_ITG[]    :Logical;
var BAL_SKP[]    :Logical;
var BAL_ITM[]    :String;
var BAL_ISK[]    :String;

-- ПОСТУПЛЕНИЯ

RГ4С030:Numeric; RГ5С030:Numeric; var RГ6С030:Numeric=RГ4С030+RГ5С030;
RГ4С040:Numeric; RГ5С040:Numeric; var RГ6С040:Numeric=RГ4С040+RГ5С040;
RГ4С050:Numeric; RГ5С050:Numeric; var RГ6С050:Numeric=RГ4С050+RГ5С050;
RГ4С060:Numeric; RГ5С060:Numeric; var RГ6С060:Numeric=RГ4С060+RГ5С060;
RГ4С071:Numeric; RГ5С071:Numeric; var RГ6С071:Numeric=RГ4С071+RГ5С071;
RГ4С072:Numeric; RГ5С072:Numeric; var RГ6С072:Numeric=RГ4С072+RГ5С072;
RГ4С073:Numeric; RГ5С073:Numeric; var RГ6С073:Numeric=RГ4С073+RГ5С073;

var RГ4С070:Numeric=RГ4С071+RГ4С072+RГ4С073;
var RГ5С070:Numeric=RГ5С071+RГ5С072+RГ5С073;
var RГ6С070:Numeric=RГ4С070+RГ5С070;

RГ4С080:Numeric; RГ5С080:Numeric; var RГ6С080:Numeric=RГ4С080+RГ5С080;
RГ4С111:Numeric; RГ5С111:Numeric; var RГ6С111:Numeric=RГ4С111+RГ5С111;
RГ4С112:Numeric; RГ5С112:Numeric; var RГ6С112:Numeric=RГ4С112+RГ5С112;

var RГ4С110:Numeric=RГ4С111+RГ4С112;
var RГ5С110:Numeric=RГ5С111+RГ5С112;
var RГ6С110:Numeric=RГ4С110+RГ5С110;

RГ4С120:Numeric; RГ5С120:Numeric; var RГ6С120:Numeric=RГ4С120+RГ5С120;

var RГ4С020:Numeric=RГ4С030+RГ4С040+RГ4С050+RГ4С060+RГ4С070+RГ4С080+RГ4С110+RГ4С120;
var RГ5С020:Numeric=RГ5С030+RГ5С040+RГ5С050+RГ5С060+RГ5С070+RГ5С080+RГ5С110+RГ5С120;
var RГ6С020:Numeric=RГ4С020+RГ5С020;

RГ4С141:Numeric; RГ5С141:Numeric; var RГ6С141:Numeric=RГ4С141+RГ5С141;
RГ4С142:Numeric; RГ5С142:Numeric; var RГ6С142:Numeric=RГ4С142+RГ5С142;
RГ4С143:Numeric; RГ5С143:Numeric; var RГ6С143:Numeric=RГ4С143+RГ5С143;
RГ4С144:Numeric; RГ5С144:Numeric; var RГ6С144:Numeric=RГ4С144+RГ5С144;

var RГ4С140:Numeric=RГ4С141+RГ4С142+RГ4С143+RГ4С144;
var RГ5С140:Numeric=RГ5С141+RГ5С142+RГ5С143+RГ5С144;
var RГ6С140:Numeric=RГ4С140+RГ5С140;

var RГ4С130:Numeric=RГ4С140;
var RГ5С130:Numeric=RГ5С140;
var RГ6С130:Numeric=RГ4С130+RГ5С130;

RГ4С161:Numeric; RГ5С161:Numeric; var RГ6С161:Numeric=RГ4С161+RГ5С161;
RГ4С162:Numeric; RГ5С162:Numeric; var RГ6С162:Numeric=RГ4С162+RГ5С162;
RГ4С163:Numeric; RГ5С163:Numeric; var RГ6С163:Numeric=RГ4С163+RГ5С163;
RГ4С164:Numeric; RГ5С164:Numeric; var RГ6С164:Numeric=RГ4С164+RГ5С164;

var RГ4С160:Numeric=RГ4С161+RГ4С162+RГ4С163+RГ4С164;
var RГ5С160:Numeric=RГ5С161+RГ5С162+RГ5С163+RГ5С164;
var RГ6С160:Numeric=RГ4С160+RГ5С160;

RГ4С181:Numeric; RГ5С181:Numeric; var RГ6С181:Numeric=RГ4С181+RГ5С181;
RГ4С182:Numeric; RГ5С182:Numeric; var RГ6С182:Numeric=RГ4С182+RГ5С182;

var RГ4С180:Numeric=RГ4С181+RГ4С182;
var RГ5С180:Numeric=RГ5С181+RГ5С182;
var RГ6С180:Numeric=RГ4С180+RГ5С180;

var RГ4С150:Numeric=RГ4С160+RГ4С180;
var RГ5С150:Numeric=RГ5С160+RГ5С180;
var RГ6С150:Numeric=RГ4С150+RГ5С150;

var RГ4С010:Numeric=RГ4С020+RГ4С130+RГ4С150;
var RГ5С010:Numeric=RГ5С020+RГ5С130+RГ5С150;
var RГ6С010:Numeric=RГ4С010+RГ5С010;

-- ВЫБЫТИЯ

RГ4С231:Numeric; RГ5С231:Numeric; var RГ6С231:Numeric=RГ4С231+RГ5С231;
RГ4С232:Numeric; RГ5С232:Numeric; var RГ6С232:Numeric=RГ4С232+RГ5С232;
RГ4С233:Numeric; RГ5С233:Numeric; var RГ6С233:Numeric=RГ4С233+RГ5С233;

var RГ4С230:Numeric=RГ4С231+RГ4С232+RГ4С233;
var RГ5С230:Numeric=RГ5С231+RГ5С232+RГ5С233;
var RГ6С230:Numeric=RГ4С230+RГ5С230;

RГ4С241:Numeric; RГ5С241:Numeric; var RГ6С241:Numeric=RГ4С241+RГ5С241;
RГ4С242:Numeric; RГ5С242:Numeric; var RГ6С242:Numeric=RГ4С242+RГ5С242;
RГ4С243:Numeric; RГ5С243:Numeric; var RГ6С243:Numeric=RГ4С243+RГ5С243;
RГ4С244:Numeric; RГ5С244:Numeric; var RГ6С244:Numeric=RГ4С244+RГ5С244;
RГ4С245:Numeric; RГ5С245:Numeric; var RГ6С245:Numeric=RГ4С245+RГ5С245;
RГ4С246:Numeric; RГ5С246:Numeric; var RГ6С246:Numeric=RГ4С246+RГ5С246;

var RГ4С240:Numeric=RГ4С241+RГ4С242+RГ4С243+RГ4С244+RГ4С245+RГ4С246;
var RГ5С240:Numeric=RГ5С241+RГ5С242+RГ5С243+RГ5С244+RГ5С245+RГ5С246;
var RГ6С240:Numeric=RГ4С240+RГ5С240;

RГ4С251:Numeric; RГ5С251:Numeric; var RГ6С251:Numeric=RГ4С251+RГ5С251;
RГ4С252:Numeric; RГ5С252:Numeric; var RГ6С252:Numeric=RГ4С252+RГ5С252;

var RГ4С250:Numeric=RГ4С251+RГ4С252;
var RГ5С250:Numeric=RГ5С251+RГ5С252;
var RГ6С250:Numeric=RГ4С250+RГ5С250;

RГ4С261:Numeric; RГ5С261:Numeric; var RГ6С261:Numeric=RГ4С261+RГ5С261;
RГ4С262:Numeric; RГ5С262:Numeric; var RГ6С262:Numeric=RГ4С262+RГ5С262;

var RГ4С260:Numeric=RГ4С261+RГ4С262;
var RГ5С260:Numeric=RГ5С261+RГ5С262;
var RГ6С260:Numeric=RГ4С260+RГ5С260;

RГ4С271:Numeric; RГ4С272:Numeric; RГ4С273:Numeric; var RГ4С270:Numeric=RГ4С271+RГ4С272+RГ4С273;
RГ5С271:Numeric; RГ5С272:Numeric; RГ5С273:Numeric; var RГ5С270:Numeric=RГ5С271+RГ5С272+RГ5С273;

var RГ6С270:Numeric=RГ4С270+RГ5С270;
var RГ6С271:Numeric=RГ4С271+RГ5С271;
var RГ6С272:Numeric=RГ4С272+RГ5С272;
var RГ6С273:Numeric=RГ4С273+RГ5С273;

RГ4С281:Numeric; RГ4С282:Numeric; RГ4С283:Numeric; var RГ4С280:Numeric=RГ4С281+RГ4С282+RГ4С283;
RГ5С281:Numeric; RГ5С282:Numeric; RГ5С283:Numeric; var RГ5С280:Numeric=RГ5С281+RГ5С282+RГ5С283;

var RГ6С280:Numeric=RГ4С280+RГ5С280;
var RГ6С281:Numeric=RГ4С281+RГ5С281;
var RГ6С282:Numeric=RГ4С282+RГ5С282;
var RГ6С283:Numeric=RГ4С283+RГ5С283;

RГ4С291:Numeric; var RГ4С290:Numeric=RГ4С291;
RГ5С291:Numeric; var RГ5С290:Numeric=RГ5С291;

var RГ6С291:Numeric=RГ4С291+RГ5С291;
var RГ6С290:Numeric=RГ4С290+RГ5С290;

RГ4С300:Numeric; RГ5С300:Numeric; var RГ6С300:Numeric=RГ4С300+RГ5С300;

RГ4С321:Numeric; RГ5С321:Numeric; var RГ6С321:Numeric=RГ4С321+RГ5С321;
RГ4С322:Numeric; RГ5С322:Numeric; var RГ6С322:Numeric=RГ4С322+RГ5С322;
RГ4С323:Numeric; RГ5С323:Numeric; var RГ6С323:Numeric=RГ4С323+RГ5С323;
RГ4С324:Numeric; RГ5С324:Numeric; var RГ6С324:Numeric=RГ4С324+RГ5С324;

var RГ4С320:Numeric=RГ4С321+RГ4С322+RГ4С323+RГ4С324;
var RГ5С320:Numeric=RГ5С321+RГ5С322+RГ5С323+RГ5С324;
var RГ6С320:Numeric=RГ4С320+RГ5С320;

var RГ4С310:Numeric=RГ4С320; var RГ5С310:Numeric=RГ5С320; var RГ6С310:Numeric=RГ4С310+RГ5С310;

RГ4С341:Numeric; RГ5С341:Numeric; var RГ6С341:Numeric=RГ4С341+RГ5С341;
RГ4С342:Numeric; RГ5С342:Numeric; var RГ6С342:Numeric=RГ4С342+RГ5С342;
RГ4С343:Numeric; RГ5С343:Numeric; var RГ6С343:Numeric=RГ4С343+RГ5С343;
RГ4С344:Numeric; RГ5С344:Numeric; var RГ6С344:Numeric=RГ4С344+RГ5С344;

var RГ4С340:Numeric=RГ4С341+RГ4С342+RГ4С343+RГ4С344;
var RГ5С340:Numeric=RГ5С341+RГ5С342+RГ5С343+RГ5С344;
var RГ6С340:Numeric=RГ4С340+RГ5С340;

RГ4С351:Numeric; RГ5С351:Numeric; var RГ6С351:Numeric=RГ4С351+RГ5С351;
RГ4С352:Numeric; RГ5С352:Numeric; var RГ6С352:Numeric=RГ4С352+RГ5С352;

var RГ4С350:Numeric=RГ4С351+RГ4С352;
var RГ5С350:Numeric=RГ5С351+RГ5С352;
var RГ6С350:Numeric=RГ4С350+RГ5С350;

var RГ4С330:Numeric=RГ4С340+RГ4С350;
var RГ5С330:Numeric=RГ5С340+RГ5С350;
var RГ6С330:Numeric=RГ4С330+RГ5С330;

var RГ4С220:Numeric=RГ4С230+RГ4С240+RГ4С250+RГ4С260+RГ4С270+RГ4С280+RГ4С290+RГ4С300;
var RГ5С220:Numeric=RГ5С230+RГ5С240+RГ5С250+RГ5С260+RГ5С270+RГ5С280+RГ5С290+RГ5С300;
var RГ6С220:Numeric=RГ4С220+RГ5С220;

var RГ4С210:Numeric=RГ4С220+RГ4С310+RГ4С330;
var RГ5С210:Numeric=RГ5С220+RГ5С310+RГ5С330;
var RГ6С210:Numeric=RГ4С210+RГ5С210;

-- ИЗМЕНЕНИЕ ОСТАТКОВ СРЕДСТВ
RГ4С381:Numeric; RГ5С381:Numeric; RГ6С381:Numeric=RГ4С381+RГ5С381;
RГ4С382:Numeric; RГ5С382:Numeric; RГ6С382:Numeric=RГ4С382+RГ5С382;
var RГ4С380:Numeric=RГ4С381+RГ4С382;
var RГ5С380:Numeric=RГ5С381+RГ5С382;
var RГ6С380:Numeric=RГ4С380+RГ5С380;

var УпрДисБ :Logical = not Round(RГ4С010-RГ4С210, Точн)=-Round(RГ4С380, Точн);
var ТктДисБ :String  = "Дисбаланс по бюджетной деятельности ("+Str(Round(RГ4С010-RГ4С210, Точн)+Round(RГ4С380, Точн), Точн)+")";

var УпрДисД :Logical = not Round(RГ5С010-RГ5С210, Точн)=-Round(RГ5С380, Точн);
var ТктДисД :String  = "Дисбаланс по приносящей доход деятельности ("+Str(Round(RГ5С010-RГ5С210, Точн)+Round(RГ5С380, Точн), Точн)+")";

2-- Общие процедуры и функции

Proc НастройкаОтчета(toSave:Logical);

 if НастрGUID="" or toSave: НастрGUID=GetGUID; fi;
 if РАБ.НАСТР.НАЧАТЬ(SelfBln, 0, 0, "", НастрGUID):
   РАБ.НАСТР.ДОБАВИТЬ("flg402Calc" , "L");
   РАБ.НАСТР.ДОБАВИТЬ("flgИскл_ЗГ" , "L");
   РАБ.НАСТР.ДОБАВИТЬ("flgИскл_СП" , "L");
   РАБ.НАСТР.ДОБАВИТЬ("УЧР_БДЖ_УМЛ", "S");
   РАБ.НАСТР.ДОБАВИТЬ("flgДлинаФО" , "L");
   РАБ.НАСТР.ДОБАВИТЬ("flgИсполнт" , "L");
   РАБ.НАСТР.ДОБАВИТЬ("flgОтмт_КО" , "L");
   if toSave:
     РАБ.НАСТР.СОХРАНИТЬ;
   else
     НастрGUID=РАБ.НАСТР.ЗАГРУЗИТЬ("", "");
     if НастрGUID="": if ProcExists("ВосстановитьНастройкиПоУмолчанию_OnClick"): ExecuteProc("ВосстановитьНастройкиПоУмолчанию_OnClick", -1, -1, False); fi; fi;
   fi;
 fi;

end;

Proc ПрисвоитьТочность;
var ri, ci, rc :Integer;
var MskFmt :String;
var Obj: Object;
 MskFmt=",##0."+if(Точн<1,"",RepStr("0",Точн))+";;-";
 if FindObject("СекцСтБаланс", Obj):
   rc=AsInteger(Obj.RowsCount);
   if rc>0:
     for ci=7 to 22 do
       for ri=1 to rc do
         if Match(AsString(Obj.Cell(ri, ci, CellContents, "")), "R*"): 
           Obj.Cell(ri, ci, CellFormat, MskFmt);
         fi;
       od;
     od;
   fi;
 fi;
end;

Proc Очистить;
 ClearVariable(Buf);
 ClearVariable(Txt);
end;

Proc ОчиститьПараметрыСчетов;
 ClearVariable(BAL_STR);
 ClearVariable(BAL_TXT);
 ClearVariable(BAL_SGN);
 ClearVariable(BAL_ITG);
 ClearVariable(BAL_SKP);
 ClearVariable(BAL_ITM);
 ClearVariable(BAL_ISK);
end;

Proc Инициализация_УсловийБаланса;
var Iter :Integer;
 ShowProgress(80, "Считывание настройки расчета...");
 Try
   ОчиститьПараметрыСчетов;
   Iter=0;
   -- ПОСТУПЛЕНИЯ
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="010"; BAL_TXT[Iter]="000"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="1??|4??|6??|710|720"; BAL_ISK[Iter]="172|61?";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="020"; BAL_TXT[Iter]="100"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="1??";                 BAL_ISK[Iter]="172";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="030"; BAL_TXT[Iter]="110"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=True;  BAL_ITM[Iter]="110";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="040"; BAL_TXT[Iter]="120"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="120";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="050"; BAL_TXT[Iter]="130"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="130";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="060"; BAL_TXT[Iter]="140"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=True;  BAL_ITM[Iter]="140";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="070"; BAL_TXT[Iter]="150"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=True;  BAL_ITM[Iter]="15?";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="071"; BAL_TXT[Iter]="151"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=True;  BAL_ITM[Iter]="151";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="072"; BAL_TXT[Iter]="152"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=True;  BAL_ITM[Iter]="152";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="073"; BAL_TXT[Iter]="153"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=True;  BAL_ITM[Iter]="153";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="080"; BAL_TXT[Iter]="160"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=True;  BAL_ITM[Iter]="160";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="110"; BAL_TXT[Iter]="170"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="171|173";             BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="111"; BAL_TXT[Iter]="171"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="171";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="112"; BAL_TXT[Iter]="173"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="173";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="120"; BAL_TXT[Iter]="180"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="180";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="130"; BAL_TXT[Iter]="000"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="4??";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="140"; BAL_TXT[Iter]="400"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="4??";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="141"; BAL_TXT[Iter]="410"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=True;  BAL_ITM[Iter]="410";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="142"; BAL_TXT[Iter]="420"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=True;  BAL_ITM[Iter]="420";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="143"; BAL_TXT[Iter]="430"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=True;  BAL_ITM[Iter]="430";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="144"; BAL_TXT[Iter]="440"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="440";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="150"; BAL_TXT[Iter]="000"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="6??|710|720";         BAL_ISK[Iter]="61?";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="160"; BAL_TXT[Iter]="600"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="6??";                 BAL_ISK[Iter]="61?";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="161"; BAL_TXT[Iter]="620"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="620";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="162"; BAL_TXT[Iter]="630"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="630";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="163"; BAL_TXT[Iter]="640"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="640";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="164"; BAL_TXT[Iter]="650"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="650";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="180"; BAL_TXT[Iter]="700"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="710|720";             BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="181"; BAL_TXT[Iter]="710"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="710";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="182"; BAL_TXT[Iter]="720"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="720";                 BAL_ISK[Iter]="";
   -- ВЫБЫТИЯ
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="210"; BAL_TXT[Iter]="000"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="2??|3??|5??|810|820"; BAL_ISK[Iter]="271|272|51?";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="220"; BAL_TXT[Iter]="200"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="2??";                 BAL_ISK[Iter]="271|272";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="230"; BAL_TXT[Iter]="210"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="21?";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="231"; BAL_TXT[Iter]="211"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="211";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="232"; BAL_TXT[Iter]="212"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="212";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="233"; BAL_TXT[Iter]="213"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="213";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="240"; BAL_TXT[Iter]="220"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="22?";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="241"; BAL_TXT[Iter]="221"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="221";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="242"; BAL_TXT[Iter]="222"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="222";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="243"; BAL_TXT[Iter]="223"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="223";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="244"; BAL_TXT[Iter]="224"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="224";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="245"; BAL_TXT[Iter]="225"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="225";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="246"; BAL_TXT[Iter]="226"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="226";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="250"; BAL_TXT[Iter]="230"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="23?";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="251"; BAL_TXT[Iter]="231"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="231";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="252"; BAL_TXT[Iter]="232"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="232";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="260"; BAL_TXT[Iter]="240"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="24?";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="261"; BAL_TXT[Iter]="241"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="241";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="262"; BAL_TXT[Iter]="242"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="242";                 BAL_ISK[Iter]="";

   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="270"; BAL_TXT[Iter]="250"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="25?";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="271"; BAL_TXT[Iter]="251"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=True ; BAL_ITM[Iter]="251";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="272"; BAL_TXT[Iter]="252"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="252";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="273"; BAL_TXT[Iter]="253"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="253";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="280"; BAL_TXT[Iter]="260"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="26?";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="281"; BAL_TXT[Iter]="261"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=True;  BAL_ITM[Iter]="261";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="282"; BAL_TXT[Iter]="262"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="262";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="283"; BAL_TXT[Iter]="263"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="263";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="290"; BAL_TXT[Iter]="270"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="273";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="291"; BAL_TXT[Iter]="273"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="273";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="300"; BAL_TXT[Iter]="290"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="290";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="310"; BAL_TXT[Iter]="000"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="3??";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="320"; BAL_TXT[Iter]="300"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="3??";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="321"; BAL_TXT[Iter]="310"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="310";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="322"; BAL_TXT[Iter]="320"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="320";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="323"; BAL_TXT[Iter]="330"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="330";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="324"; BAL_TXT[Iter]="340"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="340";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="330"; BAL_TXT[Iter]="000"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="5??|810|820";         BAL_ISK[Iter]="51?";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="340"; BAL_TXT[Iter]="500"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="5??";                 BAL_ISK[Iter]="51?";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="341"; BAL_TXT[Iter]="520"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="520";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="342"; BAL_TXT[Iter]="530"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="530";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="343"; BAL_TXT[Iter]="540"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="540";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="344"; BAL_TXT[Iter]="550"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="550";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="350"; BAL_TXT[Iter]="800"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="810|820";             BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="351"; BAL_TXT[Iter]="810"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="810";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="352"; BAL_TXT[Iter]="820"; BAL_SGN[Iter]= 1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="820";                 BAL_ISK[Iter]="";
   -- ИЗМЕНЕНИЕ ОСТАТКОВ СРЕДСТВ
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="380"; BAL_TXT[Iter]="000"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=True;  BAL_SKP[Iter]=False; BAL_ITM[Iter]="510|610";             BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="381"; BAL_TXT[Iter]="510"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="510";                 BAL_ISK[Iter]="";
   Iter=Iter+1; ProgressPos(Iter); BAL_STR[Iter]="382"; BAL_TXT[Iter]="610"; BAL_SGN[Iter]=-1; BAL_ITG[Iter]=False; BAL_SKP[Iter]=False; BAL_ITM[Iter]="610";                 BAL_ISK[Iter]="";
 Finally
   CloseProgress;
 end;
end;

Proc ОчиститьЦифрыБаланса;
var ii, num :Integer;
 if not LengthOfArray(BAL_STR)>0: Инициализация_УсловийБаланса; fi;
 num=LengthOfArray(BAL_STR);
 if num>0:
   ShowProgress(num, "Очистка строк баланса...");
   Try
     for ii=1 to num do
       ProgressPos(ii);
       Try PutVariableN("RГ4С"+BAL_STR[ii], 0.00); Except end;
       Try PutVariableN("RГ5С"+BAL_STR[ii], 0.00); Except end;
       Try PutVariableN("RГ6С"+BAL_STR[ii], 0.00); Except end;
     od;
   Finally
     CloseProgress;
   end;
 fi;
end;

Proc ОчисткаДанныхОтчета;
 ОчиститьПараметрыСчетов;
 ОчиститьЦифрыБаланса;
end;

Proc ValidateSectionОтчета(СкрытьТаблицу:Logical);
--var f1, Work :Logical;
-- if (Abs(итгУТВСУМ_Р3)+Abs(итгИСПСУМ_Р3)+Abs(итгОСТСУМ_Р3))>0.00: f1=True; else f1=False; fi;
-- if (flgСкртРазд and not f1) or СкрытьТаблицу: Work=False; else Work=True; fi;
-- СекцРазд3_ШП.Row(6, RowVisible, Work);
-- СекцРазд3_ШП.Row(7, RowVisible, Work);
-- СекцРазд3_ШП.Row(8, RowVisible, Work);
-- СекцРазд3_ТБ.Visible = Work;
-- СекцРазд4_ШП.Visible = Work;
-- СекцРазд4_ТБ.Visible = Work;
end;

Proc ValidateОтчетSection;
 ValidateSectionОтчета(False);
end;

Proc ОчисткаОтчета;
 Очистить;
 ОчисткаДанныхОтчета;
 ValidateОтчетSection;
end;

Func ВыборДаты(srcDate:Date) :Date;
var dd :Date;
 if srcDate>1.1.100: dd=Calendar(srcDate); else dd=Calendar(ToDay); fi;
 if not(dd<=1.1.100): ^dd; else ^srcDate; fi;
end;

Func GetDate :Date;  -- считываем в заданном поле дату
var FieldName :String;
 FieldName=AsString(Template.Field);
 if FieldName="ДАТАОТЧ": ^ДАТАОТЧ; 
 |  FieldName="ДАТАЗГЛ": ^ДАТАОТЧ;
 |  FieldName="ДАТАИСП": ^ДАТАИСП;
 fi;
end;

Proc SetDate(Value:Date); -- устанавливаем в заданном поле дату; Value - значение даты, которое необходимо присвоить
var FieldName :String;
 FieldName=AsString(Template.Field);
 if FieldName="ДАТАОТЧ": ДАТАОТЧ=Value;
 |  FieldName="ДАТАЗГЛ": ДАТАОТЧ=Value;
 |  FieldName="ДАТАИСП": ДАТАИСП=Value;
 fi;
end;

Func Объединить(Value1:String; Value2:String; Separator:String) :String;
var Ret :String;
 if Value1<>"" and Value2<>"": Ret=Value1+Separator+Value2;
 |  Value1= "" and Value2<>"": Ret=Value2;
 |  Value1<>"" and Value2="" : Ret=Value1;
 |  True: Ret="";
 fi;
 ^Ret;
end;

Proc ВзятьРеквизиты(saveREC:Record; ПолноеНАИМ:Logical; Auto:Logical);
var RO, num :Integer;
var REC :Record;
 if Auto:
   if Trim(УЧР_НАИМ)="":
     RO=OpenWorkArea("КОНТРАГЕНТ", "", "НАШЕ");
     Try
       num=Records(RO);
       if num<1: REC=NIL;
       |  num=1: REC=GetRecordKey(RO, 1);
       |  num>1: REC=GetRecordKey(RO, 1);
                 SetFilter(RO, "НАШЕ and РПО_УМОЛЧАНИЕ");
                 if Records(RO)>0: REC=GetRecordKey(RO, 1); fi;
       fi;
       if REC=NIL and saveREC<>NIL: REC=saveREC; fi;
       if REC<>NIL:
         SetFilter(RO, "UKey="+RecordToString(REC));
         if Records(RO)=1:
            УЧР_НПОЛ = GetFieldS(RO, 1, "ПОЛНИМЯ");
            УЧР_НКОР = GetFieldS(RO, 1, "КОРИМЯ");
            if ПолноеНАИМ: УЧР_НАИМ=УЧР_НПОЛ; else УЧР_НАИМ=УЧР_НКОР; fi;
            УЧР_ОКПО  = GetFieldS(RO, 1, "ОКПО");
            УЧР_ИНН   = GetFieldS(RO, 1, "ИНН");
            УЧР_ОКАТО = GetFieldS(RO, 1, "ОКАТО");
            УЧР_ГЛАВА = GetFieldS(RO, 1, "РПО_ППП");
            РУКФИО    = GetFieldS(RO, 1, "ФИОРУК");
            БУХФИО    = GetFieldS(RO, 1, "ФИОБУХ");
            УЧР_SREC  = REC;
            УЧР_БДЖ   = УЧР_БДЖ_УМЛ;
         fi;
       fi;
     Finally
       CloseWorkArea(RO);
     end;
   fi;
 else
   REC=OpenCardFile("КОНТРАГЕНТ", "НАШЕ", saveREC, crdRecordOnly);
   if REC=NIL: Exit; fi;
   RO=OpenWorkArea("КОНТРАГЕНТ", "", "UKey="+RecordToString(REC));
   Try
     if Records(RO)=1:
        УЧР_НПОЛ = GetFieldS(RO, 1, "ПОЛНИМЯ");
        УЧР_НКОР = GetFieldS(RO, 1, "КОРИМЯ");
        if ПолноеНАИМ: УЧР_НАИМ=УЧР_НПОЛ; else УЧР_НАИМ=УЧР_НКОР; fi;
        УЧР_ОКПО  = GetFieldS(RO, 1, "ОКПО");
        УЧР_ИНН   = GetFieldS(RO, 1, "ИНН");
        УЧР_ОКАТО = GetFieldS(RO, 1, "ОКАТО");
        УЧР_ГЛАВА = GetFieldS(RO, 1, "РПО_ППП");
        РУКФИО    = GetFieldS(RO, 1, "ФИОРУК");
        БУХФИО    = GetFieldS(RO, 1, "ФИОБУХ");
        УЧР_SREC  = REC;
        УЧР_БДЖ   = УЧР_БДЖ_УМЛ;
     fi;
   Finally
     CloseWorkArea(RO);
   end;
 fi;
end;

Proc Инициализация_Бланка;
 НастройкаОтчета(False);
 flgНастройки=False;
 ОтчАНАOld=отчАНАCur;
 ValidateОтчетSection;
end;

Func ПроверкаНастроечныхСчетов(INI:Logical) :Logical;
var CurrFrame :String;
var Skip :Logical;
 Skip=True;
 if INI: CurrFrame="СекцНстрОтч1"; else CurrFrame="СекцСтБаланс"; fi;
 if ОбщУслБС="":  Message("Выберите условие отбора^Mдля бюджетной деятельности",        mtError); Template.Name=CurrFrame; Template.Field="ОбщУслБС";  ^False; fi;
 if ОбщУслВБС="": Message("Выберите условие отбора^Mдля приносящей доход деятельности", mtError); Template.Name=CurrFrame; Template.Field="ОбщУслВБС"; ^False; fi;
 if not Skip:
 if ОбщУслСВР="": Message("Выберите условие отбора^Mсредств во временном распоряжении", mtError); Template.Name=CurrFrame; Template.Field="ОбщУслСВР"; ^False; fi;
 fi;
 ^True;
end;

Func Template_OnClear :Logical;
 if Trim(flgClear)="":
   Message("Ошибка!^MВероятно была произведена 'очистка полей'.^MБудет произведена инициализация значений по умолчанию.^MПосле этого бланк будет готов к работе!", mtError);
   ОчисткаОтчета;
   Инициализация_Бланка;
   flgClear=GetGuid;
   Message("Бланк проинициализирован!", mtInformation);
   Template.Field="Фокус";
   ^True;
 fi;
 ^False;
end;

Func ЕстьДанныеДляВыгрузки :Logical;
 if (Abs(RГ4С010)+Abs(RГ5С010)+Abs(RГ4С210)+Abs(RГ5С210)+Abs(RГ4С380)+Abs(RГ5С380))>0.00: ^True; else ^False; fi;
end;

Func ОтменитьИзмененияУсловийОтчета :Logical;
var FF :Logical;
var qq :Integer;
 FF=False;
 if ЕстьДанныеДляВыгрузки:
   qq=EnqOkCancel("Условия отбора данных для отчета изменились!^MОчистить отчет?", mtConfirmation);
   if qq=cmOk: ОчисткаОтчета;
   |  qq=cmCancel: FF=True;
   fi;
 fi;
 ^FF;
end;

Proc ПроверкаДисбаланс;
var MsgS :String;
 MsgS="Дисбаланс !";
 if not Round(RГ4С010-RГ4С210, Точн) = -Round(RГ4С380, Точн): MsgS=Объединить(MsgS, "По бюджетной деятельности ("        + Str(Round(RГ4С010-RГ4С210, Точн)+Round(RГ4С380, Точн), Точн) + ")", Chr(13)); fi;
 if not Round(RГ5С010-RГ5С210, Точн) = -Round(RГ5С380, Точн): MsgS=Объединить(MsgS, "По приносящей доход деятельности (" + Str(Round(RГ5С010-RГ5С210, Точн)+Round(RГ5С380, Точн), Точн) + ")", Chr(13)); fi;
 if not MsgS="Дисбаланс !":
    Message(MsgS, mtWarning);
 fi;
end;

Func CreateMaskRep(Iter:Integer) :String;
var repITM, repISK :String;
var ii, num :Integer;
 repITM=""; num=WordsCount(BAL_ITM[Iter], "|"); if num>0: for ii=1 to num do repITM=Объединить(repITM, "*."+ExtractWord(ii, BAL_ITM[Iter], "|"), "|"); od; else repITM=""; fi;
 repISK=""; num=WordsCount(BAL_ISK[Iter], "|"); if num>0: for ii=1 to num do repISK=Объединить(repISK, "*."+ExtractWord(ii, BAL_ISK[Iter], "|"), "|"); od; else repISK=""; fi;
 ^(if(repISK<>"", "(", "")+"("+repITM+")"+if(repISK<>"", "&~("+repISK+")", "")+if(repISK<>"", ")", ""));
end;

Func MySaldoAsAcc(Iter:Integer; Графа:Integer; ДКП:Date; vОбщСчт:String; vОбщАна:String): Numeric;
var УслСч, УслАн :String;
var SUM :Numeric;
 SUM=0.00;
 if Графа=4: УслСч=CreateMaskRep(Iter)+"&"+ОбщУслБС;
 |  Графа=5: if BAL_SKP[Iter]: ^0.00; else УслСч=CreateMaskRep(Iter)+"&"+ОбщУслВБС; fi;
 |  Графа=6: УслСч=CreateMaskRep(Iter)+"&("+ОбщУслБС+"|"+ОбщУслВБС+")";
 | True: Trace("Ошибка! Недопустимый номер графы "+Str(Графа)+" строка="+BAL_STR[Iter]); ^0.00;
 fi;
 УслСч=Объединить(УслСч, vОбщСчт, "&");
 УслСч=Объединить(УслСч, УслВал,  "'");
 УслАн=vОбщАна;
 SUM=Round(Saldo(УслСч+"{"+УслАн+"}", ДКП, Показатель)/ЕдИзм, Точн)*BAL_SGN[Iter];
 ^SUM;
end;

Func My_TurnAsAcc(Iter:Integer; Графа:Integer; ДНП:Date; ДКП:Date; vОбщСчт:String; vОбщАна:String): Numeric;
var УслСч, УслАн :String;
var SUM :Numeric;
 SUM=0.00;
 if Графа=4: УслСч=CreateMaskRep(Iter)+"&"+ОбщУслБС;
 |  Графа=5: if BAL_SKP[Iter]: ^0.00; else УслСч=CreateMaskRep(Iter)+"&"+ОбщУслВБС; fi;
 |  Графа=6: УслСч=CreateMaskRep(Iter)+"&("+ОбщУслБС+"|"+ОбщУслВБС+")";
 | True: Trace("Ошибка! Недопустимый номер графы "+Str(Графа)+" строка="+BAL_STR[Iter]); ^0.00;
 fi;
 УслСч=Объединить(УслСч, vОбщСчт, "&");
 УслСч=Объединить(УслСч, УслВал,  "'");
 УслАн=vОбщАна;
 SUM=Round(Turn(УслСч+"{"+УслАн+"}", ДНП, ДКП, Показатель)/ЕдИзм, Точн)*BAL_SGN[Iter];
 ^SUM;
end;

Func CreateMaskRepANA(Iter:Integer) :String;
var repITM, repISK :String;
var ii, num :Integer;
 repITM=""; num=WordsCount(BAL_ITM[Iter], "|"); if num>0: for ii=1 to num do repITM=Объединить(repITM, "КОСГУ."+ExtractWord(ii, BAL_ITM[Iter], "|")+"!", "|"); od; else repITM=""; fi;
 repISK=""; num=WordsCount(BAL_ISK[Iter], "|"); if num>0: for ii=1 to num do repISK=Объединить(repISK, "КОСГУ."+ExtractWord(ii, BAL_ISK[Iter], "|")+"!", "|"); od; else repISK=""; fi;
 ^(if(repISK<>"", "(", "")+"("+repITM+")"+if(repISK<>"", "&~("+repISK+")", "")+if(repISK<>"", ")", ""));
end;

Func My_TurnAsANA(Iter:Integer; Графа:Integer; ДНП:Date; ДКП:Date; vОбщСчт:String; vОбщАна:String): Numeric;
var УслСч, УслАн :String;
var SUM :Numeric;
 SUM=0.00;
 if Графа=4: УслСч=Объединить(vОбщСчт, ОбщУслБС, "&");
 |  Графа=5: if BAL_SKP[Iter]: ^0.00; else УслСч=Объединить(vОбщСчт, ОбщУслВБС, "&"); fi;
 |  Графа=6: УслСч=Объединить(vОбщСчт, "("+ОбщУслБС+"|"+ОбщУслВБС+")", "&");
 | True: Trace("Ошибка! Недопустимый номер графы "+Str(Графа)+" строка="+BAL_STR[Iter]); ^0.00;
 fi;
 УслСч=Объединить(УслСч, УслВал,  "'");
 УслАн=Объединить("(КОСГУ.*&"+CreateMaskRepANA(Iter)+")", vОбщАна, "&");
 SUM=Round(Turn(УслСч+"{"+УслАн+"}", ДНП, ДКП, Показатель)/ЕдИзм, Точн)*BAL_SGN[Iter]*(-1);
 ^SUM;
end;

Proc РасчетБаланса;
var ОбщАна, ОбщСчт, defMaskAcc, defMaskIII, СчтIII, ОбщУслКД_, ОбщУслКР_, ОбщУслИФ_ :String;
var ii, num :Integer;
var ДНГ, ДКП :Date;
var Режим :Logical;
 ClearTrace(True);
 Refresh(False);
 Режим=AutoRefresh;
 ToggleAutoRefresh(False);
 ShowProgress(0, "Подготовка данных...");
 Try
   РАБ.БЮДЖЕТ2005.РежимМаски="?";
   defMaskIII=if(flgИскл_СП, "*.?.202.11.???", "*.?.202.11.???|*.?.202.12.???");
   defMaskAcc=if(flg402Calc, "*.?.402.??.???", defMaskIII);
   --
   ОбщСчт="";
   if not ОбщУслКД="":   ОбщУслКД_ = РАБ.БЮДЖЕТ2005.ВзятьКодКБК(ОбщУслКД,   "КД",   "КБК", False)+"."+РАБ.БЮДЖЕТ2005.МаскаСч6+"."+РАБ.БЮДЖЕТ2005.ВзятьКодКБК(ОбщУслКД,   "КД",   "КОСГУ", False); else ОбщУслКД_ =""; fi;
   if not ОбщУслКР="":   ОбщУслКР_ = РАБ.БЮДЖЕТ2005.ВзятьКодКБК(ОбщУслКР,   "ФКР",  "КБК", False)+"."+РАБ.БЮДЖЕТ2005.МаскаСч6+"."+РАБ.БЮДЖЕТ2005.ВзятьКодКБК(ОбщУслКР,   "ФКР",  "КОСГУ", False); else ОбщУслКР_ =""; fi;
   if not ОбщУслКИФД="": ОбщУслИФ_ = РАБ.БЮДЖЕТ2005.ВзятьКодКБК(ОбщУслКИФД, "КИФД", "КБК", False)+"."+РАБ.БЮДЖЕТ2005.МаскаСч6+"."+РАБ.БЮДЖЕТ2005.ВзятьКодКБК(ОбщУслКИФД, "КИФД", "КОСГУ", False); else ОбщУслИФ_ =""; fi;
   ОбщСчт=Объединить(ОбщСчт, ОбщУслКД_, "|");
   ОбщСчт=Объединить(ОбщСчт, ОбщУслКР_, "|");
   ОбщСчт=Объединить(ОбщСчт, ОбщУслИФ_, "|");
   if ОбщСчт="": 
     СчтIII="("+defMaskIII+")";
     ОбщСчт="("+defMaskAcc+")";
   else
     СчтIII="(("+defMaskIII+")&("+ОбщСчт+"))";
     ОбщСчт="(("+defMaskAcc+")&("+ОбщСчт+"))";
   fi;
   --
   ОбщАна="";
   if ОтчАНАCur<>"" : ОбщАна="("+ОтчАНАCur+")"; fi;
   if flgИскл_ЗГ    : if ОбщАна<>"": ОбщАна=ОбщАна+"&(~ЗГ)"; else ОбщАна="(~ЗГ)"; fi; fi;
   --
   ДКП=ДАТАОТЧ;
   ДНГ=Dat(1, 1, if(Day(ДКП)=1 and Mon(ДКП)=1, Year(ДКП)-1, Year(ДКП)));
   --
   if not LengthOfArray(BAL_STR)>0: Инициализация_УсловийБаланса; fi;
   num=LengthOfArray(BAL_STR);
   if num>0:
     ShowProgress(num, "Расчет данных...");
     for ii=1 to num do
       ProgressPos(ii);
       if not BAL_ITG[ii]:
         if Match(BAL_STR[ii], "38?"):
           Try PutVariableN("RГ4С"+BAL_STR[ii], My_TurnAsAcc(ii, 4, ДНГ, ДКП, СчтIII, ОбщАна)); Except end;
           Try PutVariableN("RГ5С"+BAL_STR[ii], My_TurnAsAcc(ii, 5, ДНГ, ДКП, СчтIII, ОбщАна)); Except end;
         else
           if flg402Calc: -- выбираем метод расчета - данные из 402 или из 202 счетов
             Try PutVariableN("RГ4С"+BAL_STR[ii], My_TurnAsAcc(ii, 4, ДНГ, ДКП, ОбщСчт, ОбщАна)); Except end;
             Try PutVariableN("RГ5С"+BAL_STR[ii], My_TurnAsAcc(ii, 5, ДНГ, ДКП, ОбщСчт, ОбщАна)); Except end;
           else
             Try PutVariableN("RГ4С"+BAL_STR[ii], My_TurnAsANA(ii, 4, ДНГ, ДКП, СчтIII, ОбщАна)); Except end;
             Try PutVariableN("RГ5С"+BAL_STR[ii], My_TurnAsANA(ii, 5, ДНГ, ДКП, СчтIII, ОбщАна)); Except end;
           fi;
         fi;
       fi;
     od;
   fi;
 Finally
   CloseProgress;
   ToggleAutoRefresh(Режим);
 end;
 ОтчGUID=РАБ.ПАРАМ_ОТЧ.ОтчGUID;
 Message("Расчет баланса завершен");
 ПроверкаДисбаланс;
end;

Proc Расчет(Перерасчет:Logical);
var Msg :String;
 if Перерасчет: Msg="Параметры отчета изменились."+Chr(13); else Msg=""; fi;
 if EnqOkCancel(Msg+"Данные набранные 'вручную' будут утеряны.^MПродолжить?", mtWarning)=cmOk:
   if ДАТАОТЧ=1.1.100: Message('Не задана дата отчета!',    mtWarning); Template.Field="ДАТАОТЧ"; Exit; fi;
   if ДАТАОТЧ<dНачало: Message('Некорректная дата отчета!', mtWarning); Template.Field="ДАТАОТЧ"; Exit; fi;
   if not ПроверкаНастроечныхСчетов(False): Exit; fi;
   if УЧР_НАИМ="": ВзятьРеквизиты(УЧР_SREC, flgДлинаФО, True); fi;
   ОчисткаОтчета;
   РасчетБаланса;
 fi;
end;

Proc ФлагиНастроекОтчета(refField:String);
var SaveValue, oldFLG, newFLG :Logical;
var FieldFLG :String;
 SaveValue=False;
 if Template_OnClear: Exit; fi;
 FieldFLG=SubStr(refField, 1, Length(refField)-1);
 --
 oldFLG = GetVariableL(FieldFLG);
 newFLG = not oldFLG;
 --
 if not ОтменитьИзмененияУсловийОтчета: SaveValue=True; fi;
 if SaveValue: 
   PutVariableL(FieldFLG, newFLG); 
   ValidateОтчетSection;
 fi;
end;

Func ТолькоЦифры(sourceValue:String) :Logical;
var num, ii, intChars :Integer;
var OK :Logical;
 OK=True;
 num=Length(sourceValue);
 if num>0:
   for ii=1 to num do
     intChars=Ascii(SubStr(sourceValue, ii, 1));
     if intChars>=48 and intChars<=57: OK=True; else OK=False; fi;
     if not OK: Break; fi;
   od;
 fi;
 ^OK;
end;

Proc ОчиститьФорму;
 ОчисткаОтчета;
 Hint("");
end;

2-- События клеток
Func ПарамОтч_onEnter(FieldName:String; Iter:Integer): Logical;
var Flag :Logical;
 Flag=РАБ.ПАРАМ_ОТЧ.Взять(FieldName+"_", 0);
 УЧР_ОКПО=УЧР_ОКПО; --Вызываем обновление перменных бланка!!!
 if Flag or not ОтчGUID=РАБ.ПАРАМ_ОТЧ.ОтчGUID: 
   if Trim(РАБ.ПАРАМ_ОТЧ.ОбщУслАн)<>"": ОтчАНАCur=РАБ.ПАРАМ_ОТЧ.ОбщУслАн; ОтчАНАOld=ОтчАНАCur; fi;
   ДАТАОТЧ=РАБ.ПАРАМ_ОТЧ.ДК;
   ПрисвоитьТочность; 
   Расчет(True);
 fi;
 ^False;
end;

Func Field_onEnter(Field:String; Iter:Integer): Logical; -- на входе в клетку
 if Template_OnClear: ^False; fi;
 Flag_onEnter=False;
 if Field="ДАТАОТЧ"        : oldDate=ДАТАОТЧ;
 |  Field="ОтчАНАCur"      : ОтчАНАOld=ОтчАНАCur; Flag_onEnter=True; ^True;
 |  Field="flg402Calc_"    : ФлагиНастроекОтчета(Field); ^False;
 |  Field="flgИскл_ЗГ_"    : ФлагиНастроекОтчета(Field); ^False;
 |  Field="flgИскл_СП_"    : ФлагиНастроекОтчета(Field); ^False;
 |  Field="flgДлинаФО"     : flgДлинаФО = not flgДлинаФО; if flgДлинаФО: УЧР_НАИМ=УЧР_НПОЛ; else УЧР_НАИМ=УЧР_НКОР; fi; ^False;
 |  Field="flgИсполнт"     : flgИсполнт = not flgИсполнт; ^False;
 |  Field="flgОтмт_КО"     : flgОтмт_КО = not flgОтмт_КО; ^False;
 fi;
 ^True;
end;

Proc Field_onExit(Field:String; Iter:Integer); -- на выходе из клетки
 if Template_OnClear: Exit; fi;
 if Field="ДАТАОТЧ"   : if ДАТАОТЧ<>oldDate: if ОтменитьИзмененияУсловийОтчета: ДАТАОТЧ=oldDate; fi; fi;
 |  Field="ОтчАНАCur" : if     Flag_onEnter and ОтчАНАCur<>ОтчАНАOld: if ОтменитьИзмененияУсловийОтчета: ОтчАНАCur=ОтчАНАOld; fi; fi;
                        if not Flag_onEnter and ОтчАНАCur="":         if ОтменитьИзмененияУсловийОтчета: ОтчАНАCur=ОтчАНАOld; fi; fi;
 |  Field="ИСПФИО"    : if ИСПФИО="": ИСПДОЛ=""; ИСПREC=NIL; fi;
 fi;
 ValidateОтчетSection;
 Flag_onEnter=False;
end;

Proc ВосстановитьНастройкиПоУмолчанию_OnClick(Row:Integer; Col:Integer; Double:Logical);
var msg :String;

 if ЕстьДанныеДляВыгрузки: msg=Chr(13)+"Данные отчета будут утеряны."; else msg=""; fi;
 if Row>0 and Col>0:
   if EnqOkCancel("Будет восстановлена настройка по умолчанию."+msg+Chr(13)+"Продолжить?", mtWarning)=cmCancel: Exit; fi;
 fi;

 ОчисткаОтчета;

 УЧР_БДЖ_УМЛ = "";

 flg402Calc = False;
 flgИскл_ЗГ = True;
 flgИскл_СП = False;
 flgДлинаФО = True;
 flgИсполнт = False;
 flgОтмт_КО = False;

 -- Восстановление настроки счетов

 if Row>0 and Col>0: Message("Стандарная настройка восстановлена", mtInformation); fi;

end;

Func Оператор :String;
var nn :Integer;
 ClearVariable(Buf);
 Buf[1]="И";
 Buf[2]="ИЛИ";
 Buf[3]="И ИСКЛЮЧИТЬ";
 nn=Alternate("Выбор оператора",Buf, 20, 1, 12);
 if nn=1: ^"&";
 |  nn=2: ^"|";
 |  nn=3: ^"&~";
 fi;
 ^"";
end;

Func ИщемПризнакЗГ(srcValue:String) :Logical;
var pp :Integer;
var char1, char2 :String;
var Нашли, flg1, flg2 :Logical;
 Нашли=False;
 pp=Pos("ЗГ", Up(srcValue));
 if pp>0:
   if pp=1:                  char1=""; else char1=SubStr(srcValue, pp-1, 1); fi;
   if pp=Length(srcValue)-1: char2=""; else char2=SubStr(srcValue, pp+2, 1); fi;
   flg1=False; flg2=False;
   if char1 ="" and char2<>"":
     flg1=True;
     if char2="&" or char2="|" or char2="~" or char2="(" or char2=")" or char2="*" or char2="?" or char2="!": flg2=True; fi;
     if flg1 and flg2: Нашли=True; fi;
   |  char1<>"" and char2 ="":
     if char1="&" or char1="|" or char1="~" or char1="(" or char1=")" or char1="*" or char1="?" or char1="!": flg1=True; fi;
     flg2=True;
     if flg1 and flg2: Нашли=True; fi;
   |  char1<>"" and char2<>"":
     if char1="&" or char1="|" or char1="~" or char1="(" or char1=")" or char1="*" or char1="?" or char1="!": flg1=True; fi;
     if char2="&" or char2="|" or char2="~" or char2="(" or char2=")" or char2="*" or char2="?" or char2="!": flg2=True; fi;
     if flg1 and flg2: Нашли=True; fi;
   |  char1 ="" and char2 ="":
     Нашли=True;
   fi;
 fi;
 ^Нашли;
end;

Func ДопАналитика_OnLookup(Sect:String; Row:Integer; Col:Integer; Cur:String): String;
var StoreANA, Value :String;
 Template.HideEditor(False);
 if Template_OnClear: ^Cur; fi;
 RefreshAna;
 StoreANA=ОтчАНАCur;
 Value=Up(AnaElection("*&~ЗГ", False, False, StoreANA));
 if Value="": ^Cur; fi;
 if ОтчАНАCur="":
   ОтчАНАCur=Value;
 else 
   if Pos(Value, Up(ОтчАНАCur))=0:
     ОтчАНАCur=Объединить(ОтчАНАCur, Value, Оператор);
     if Length(ОтчАНАCur)>247: --255-8{()&(~ЗГ)}=247
       Message("Строка доп. аналитики не может быть больше 247 символов.^MВыбор отменен!", mtWarning);
       ОтчАНАCur=StoreANA;
       ОтчАНАOld=ОтчАНАCur;
       ^Cur;
     fi;
   fi;
 fi;
 if ОтчАНАCur<>StoreANA: if ОтменитьИзмененияУсловийОтчета: ОтчАНАCur=StoreANA; fi; ValidateОтчетSection; fi;
 ОтчАНАOld=ОтчАНАCur;
 ^Cur;
end;

Func ОтчАНА_Field_OnValidateS(Field:String; Iter:Integer; Value:String) :Logical;
var Res :Numeric;
 if Field="ОтчАНАCur":
   if Length(Value)>247: Message("Строка доп. аналитики не может быть больше 247 символов!", mtWarning); ^False; fi;
   Try Res=Saldo("{"+Value+"}", 1.1.100); Except Raise; ^False; end;
   if ИщемПризнакЗГ(Value): Message("В строке доп. аналитике нельзя импользовать служебный признак 'ЗГ'!", mtWarning); ^False; fi;
 fi;
 ^True;
end;

Func УЧР_ГЛАВА_Field_OnValidate(Field:String; Iter:Integer; Value:String) :Logical;
 if Field="УЧР_ГЛАВА":
   if not ТолькоЦифры(Value): Message("Поле 'Глава по БК' должно содержать только цифры!", mtWarning); ^False; fi;
   if Value<>"": if Length(Value)<>3: Message("Длина поля 'Глава по БК' – три знака!", mtWarning); ^False; fi; fi;
 fi;
 ^True;
end;

Func Дата_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String) :String;
var dd, ddSave : Date;
 Template.HideEditor(False);
 if Template_OnClear: ^Cur; fi;
 ddSave=GetDate;
 dd=ВыборДаты(ddSave);
 if dd<>ddSave and not Sect="СекцПодписи3":
   if ОтменитьИзмененияУсловийОтчета: dd=ddSave; fi;
   ValidateОтчетSection;
 fi;
 SetDate(dd);
 ^"";
end;

Func ОтчМесяц_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String) :String;
var dd, ddSave : Date;
var Work, isEdit :Logical;
var ii, num, xx, mm, yy :Integer;
 Template.HideEditor(False);
 if Template_OnClear: ^Cur; fi;
 ddSave=GetDate;
 if ddSave<1.1.1900: ddSave=ToDay; isEdit=False; else isEdit=True; fi;
 yy=Year(ddSave);
 mm=Mon(ddSave);
 ClearVariable(Txt); 
 for ii=1 to 7 do Txt[ii]=Str(yy+ii-5); od;
 xx=SearchInArray(Txt, Str(yy), True, 1);
 if xx<1: xx=1; fi;
 Work=False;
 while not Work do 
   if not isEdit:
     num=0;
     num=Alternate("Выберите год отчета", Txt, -1, xx, 12);
     if num=0           : Break;
     |  num>0 and num<8 : yy=Int(Txt[num]); xx=num;
     fi;
   fi;
   ClearVariable(Buf);
   Buf[1]="... к выбору года ...";
   for ii=1 to 12 do Buf[ii+1]=Месяц(ii)+" "+Str(yy); od;
   num=0;
   num=Alternate("Выберите месяц отчета", Buf, -1, mm+1, 12);
   if num=0            : Break;
   |  num=1            : isEdit=False;
   |  num>1 and num<14 : mm=num-1; Work=True;
   fi;
 end;
 if Work: dd=Dat(01, mm, yy); else dd=ddSave; fi;
 if dd<>ddSave:
   if ОтменитьИзмененияУсловийОтчета: dd=ddSave; fi;
   ValidateОтчетSection;
 fi;
 SetDate(dd);
 ^"";
end;

Func ОтчМесяц_OnType(Sect:String; Row:Integer; Col:Integer; Code:Integer; Cur:String): String;
 Template.HideEditor(False);
 ^"";
end;

Func Сотрудники_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String): String;
var REC :Record;
var FieldName, СТРФИО, СТРДОЛ, tmp1, tmp2 :String;
 Template.HideEditor(False);
 if not AutoRefresh: RefreshAna; fi;
 FieldName=asString(Template.Field);
 REC=OpenCardFile("СОТРУДНИКИ", "", ИспREC, crdRecordOnly);
 if REC=NIL: ^Cur; fi;
 tmp1=GetCardFieldS("СОТРУДНИКИ", REC, "ИНИЦИАЛЫ");
 tmp2=GetCardFieldS("СОТРУДНИКИ", REC, "ФАМИЛИЯ");
 СТРФИО=if(tmp2="", GetCardFieldS("СОТРУДНИКИ", REC, "ФИОТ"), tmp2+" "+if(tmp1<>"..", tmp1, ""));
 Try СТРДОЛ=GetCardFieldS("СОТРУДНИКИ", REC, "ДОЛЖНОСТЬ.ДОЛЖ"); Except СТРДОЛ=""; end;
 if FieldName="РУКФИО": РУКФИО=СТРФИО;
 |  FieldName="БУХФИО": БУХФИО=СТРФИО;
 |  FieldName="ИСПФИО": ИСПФИО=СТРФИО; ИСПДОЛ=СТРДОЛ;
 |  FieldName="ИСПДОЛ": ИСПФИО=СТРФИО; ИСПДОЛ=СТРДОЛ;
 fi;
 ^"";
end;

Func Учреждение_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String) :String;
 Template.HideEditor(False);
 if Template_OnClear: ^Cur; fi;
 ВзятьРеквизиты(УЧР_SREC, flgДлинаФО, False);
 ^"";
end;

Func УЧР_БДЖ_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String) :String;
var num :Integer;
 Template.HideEditor(False);
 ClearVariable(Buf);
 Buf[1]="Федеральный бюджет";
 Buf[2]="бюджет субъекта Российской Федерации";
 Buf[3]="местный бюджет";
 Buf[4]="бюджет Пенсионного фонда Российской Федерации";
 Buf[5]="бюджет Фонда обязательного медицинского страхования Российской Федерации";
 Buf[6]="бюджет Фонда социального страхования Российской Федерации";
 Buf[7]="бюджет территориального государственного внебюджетного фонда";
 num=Alternate("Выберите бюджет", Buf, -1, SearchInArray(Buf, УЧР_БДЖ, False, 1), 12);
 if num=0: ^Cur; fi;
 УЧР_БДЖ=Buf[num];
 ^Cur;
end;

Func Расшифр_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String): String;
var nameField, RepPath, ОбщУслКД_, ОбщУслКР_, ОбщУслИФ_, codStrRep, codGrpRep, ErrMsg :String;
var ОбщСчт, СчтIII, ОбщАна, УслСч, УслАн, defMaskIII, defMaskAcc :String;
var ДНГ, ДКП :Date;
var Iter :Integer;
 Template.HideEditor(False);
 nameField=AsString(Template.Field);
 codStrRep=SubStr(nameField, 5, 3);
 codGrpRep=SubStr(nameField, 3, 1);
 if not LengthOfArray(BAL_STR)>0: Инициализация_УсловийБаланса; fi;
 Iter=SearchInArray(BAL_STR, codStrRep, True, 1);
 if Iter=-1: Message("Детализация для строки "+codStrRep+" не найдена", mtError); ^Cur; fi;
 --
 РАБ.БЮДЖЕТ2005.РежимМаски="?";
 defMaskIII=if(flgИскл_СП, "*.?.202.11.???", "*.?.202.11.???|*.?.202.12.???");
 defMaskAcc=if(flg402Calc, "*.?.402.??.???", defMaskIII);
 --
 ОбщСчт="";
 if not ОбщУслКД="":   ОбщУслКД_ = РАБ.БЮДЖЕТ2005.ВзятьКодКБК(ОбщУслКД,   "КД",   "КБК", False)+"."+РАБ.БЮДЖЕТ2005.МаскаСч6+"."+РАБ.БЮДЖЕТ2005.ВзятьКодКБК(ОбщУслКД,   "КД",   "КОСГУ", False); else ОбщУслКД_ =""; fi;
 if not ОбщУслКР="":   ОбщУслКР_ = РАБ.БЮДЖЕТ2005.ВзятьКодКБК(ОбщУслКР,   "ФКР",  "КБК", False)+"."+РАБ.БЮДЖЕТ2005.МаскаСч6+"."+РАБ.БЮДЖЕТ2005.ВзятьКодКБК(ОбщУслКР,   "ФКР",  "КОСГУ", False); else ОбщУслКР_ =""; fi;
 if not ОбщУслКИФД="": ОбщУслИФ_ = РАБ.БЮДЖЕТ2005.ВзятьКодКБК(ОбщУслКИФД, "КИФД", "КБК", False)+"."+РАБ.БЮДЖЕТ2005.МаскаСч6+"."+РАБ.БЮДЖЕТ2005.ВзятьКодКБК(ОбщУслКИФД, "КИФД", "КОСГУ", False); else ОбщУслИФ_ =""; fi;
 ОбщСчт=Объединить(ОбщСчт, ОбщУслКД_, "|");
 ОбщСчт=Объединить(ОбщСчт, ОбщУслКР_, "|");
 ОбщСчт=Объединить(ОбщСчт, ОбщУслИФ_, "|");
 if ОбщСчт="":
   СчтIII="("+defMaskIII+")";
   ОбщСчт="("+defMaskAcc+")";
 else
   СчтIII="(("+defMaskIII+")&("+ОбщСчт+"))";
   ОбщСчт="(("+defMaskAcc+")&("+ОбщСчт+"))";
 fi;
 --
 ОбщАна="";
 if ОтчАНАCur<>"" : ОбщАна="("+ОтчАНАCur+")"; fi;
 if flgИскл_ЗГ    : if ОбщАна<>"": ОбщАна=ОбщАна+"&(~ЗГ)"; else ОбщАна="(~ЗГ)"; fi; fi;
 --
 ДКП=ДАТАОТЧ;
 ДНГ=Dat(1, 1, if(Day(ДКП)=1 and Mon(ДКП)=1, Year(ДКП)-1, Year(ДКП)));
 --
 УслСч=""; УслАн="";
 ErrMsg="Ошибка! По приносящей доход деятельности данная строка ("+BAL_STR[Iter]+") не заполняется.";
 if flg402Calc: -- выбираем метод расчета - данные из 402 или из 202 счетов
   if codGrpRep="4": УслСч=CreateMaskRep(Iter)+"&"+ОбщУслБС;
   |  codGrpRep="5": if BAL_SKP[Iter]: Trace(ErrMsg); ^Cur; else УслСч=CreateMaskRep(Iter)+"&"+ОбщУслВБС; fi;
   |  codGrpRep="6": УслСч=CreateMaskRep(Iter)+"&("+ОбщУслБС+"|"+ОбщУслВБС+")";
   | True: Trace("Ошибка! Недопустимый номер графы "+codGrpRep+" строка="+BAL_STR[Iter]); ^Cur;
   fi;
 else
   if codGrpRep="4": УслСч=Объединить(СчтIII, ОбщУслБС, "&");
   |  codGrpRep="5": if BAL_SKP[Iter]: Trace(ErrMsg); ^Cur; else УслСч=Объединить(СчтIII, ОбщУслВБС, "&"); fi;
   |  codGrpRep="6": УслСч=Объединить(СчтIII, "("+ОбщУслБС+"|"+ОбщУслВБС+")", "&");
   | True: Trace("Ошибка! Недопустимый номер графы "+codGrpRep+" строка="+BAL_STR[Iter]); ^Cur;
   fi;
 fi;
 RepPath="";
 if Match(codStrRep, "38?"):
   УслСч=Объединить(УслСч, СчтIII, "&");
   --УслСч=Объединить(УслСч, УслВал,  "'");
   УслАн=ОбщАна;
   RepPath='"'+PlanVar("Общие")+'\Отчеты\Ф0503130.lst"."Расшифр';
   if УслВал="EUR": RepPath=RepPath+' ('+УслВал+')"';
   |  УслВал="USD": RepPath=RepPath+' ('+УслВал+')"';
   |  УслВал="РУБ": RepPath=RepPath+' ('+УслВал+')"';
   else             RepPath=RepPath+'"';
   fi;
 else
   if flg402Calc: -- выбираем метод расчета - данные из 402 или из 202 счетов
     УслСч=Объединить(УслСч, ОбщСчт, "&");
     --УслСч=Объединить(УслСч, УслВал,  "'");
     УслАн=ОбщАна;
     RepPath='"'+PlanVar("Общие")+'\Отчеты\Ф0503130.lst"."Расшифр';
     if УслВал="EUR": RepPath=RepPath+' ('+УслВал+')"';
     |  УслВал="USD": RepPath=RepPath+' ('+УслВал+')"';
     |  УслВал="РУБ": RepPath=RepPath+' ('+УслВал+')"';
     else             RepPath=RepPath+'"';
     fi;
   else
     RepPath=PlanVar("ОБЩИЕ")+"\ОТЧЕТЫ\Отч_набор_001.lst|По_признакам_КОСГУ";
     УслСч=Объединить(УслСч, УслВал,  "'");
     УслАн=Объединить("(КОСГУ.*&"+CreateMaskRepANA(Iter)+")", ОбщАна, "&");
   fi;
 fi;
 --
 if RepPath<>"":
   Try
     Report(RepPath, ДНГ, ДКП, УслСч, УслАн);
   Except
     Message("Ошибка создания детализированного отчета!", mtError);
     ^Cur;
   end;
 fi;
 ^Cur;
end;

2-- События объектов
Func КлючИНН(ИНН:String) :Logical;
var П :Integer;
 П=31*Int(SubStr(ИНН,1,1))+
   29*Int(SubStr(ИНН,2,1))+
   23*Int(SubStr(ИНН,3,1))+
   19*Int(SubStr(ИНН,4,1))+
   17*Int(SubStr(ИНН,5,1))+
   13*Int(SubStr(ИНН,6,1))+
    7*Int(SubStr(ИНН,7,1))+
    5*Int(SubStr(ИНН,8,1))+
    3*Int(SubStr(ИНН,9,1));
 П=11-Int(П-11*Trunc(П/11));
 П=if(П>9:0,П);
 ^П=Int(SubStr(ИНН,10,1));
end;

Proc ЗакрытьФайлПоОшибке(numberFile:Integer; FlagCreate:Logical; RESnameFile:String);
 if FlagCreate:
   TextFileClose(numberFile);
   Message("Ошибка записи в файл '"+RESnameFile+"'!", mtError);
 else
   Message("Ошибка создания файла '"+RESnameFile+"'!", mtError);
 fi;
end;

Func ЗаписатьСтрокуРаздела(Iter:Integer) :String;
var RES :String;
var SUM :Numeric;
 RES="";
 if Iter>0:
   SUM=Abs(GetVariableN("RГ4С"+BAL_STR[Iter]))+Abs(GetVariableN("RГ5С"+BAL_STR[Iter]));
   if SUM>0.00:
     RES=BAL_STR[Iter]+"|"+BAL_TXT[Iter]+"|";
     SUM=GetVariableN("RГ4С"+BAL_STR[Iter]); RES=RES+if(SUM<>0.00, Str(SUM, 2), "0")+"|";
     SUM=GetVariableN("RГ5С"+BAL_STR[Iter]); RES=RES+if(SUM<>0.00, Str(SUM, 2), "0")+"|";
     SUM=GetVariableN("RГ6С"+BAL_STR[Iter]); RES=RES+if(SUM<>0.00, Str(SUM, 2), "0");
   fi;
 fi;
 ^RES;
end;

Proc Экспорт_TXT_ДФ; -- выгрузка в формат департамента финансов г.Москвы
var Путь, nameFile, Value :String;
var FS, num, ii :Integer;
var FlagCreate :Logical;

 if Year(ДАТАОТЧ)<2000: Message("Дата отчета должна быть позже 2000 года.", mtWarning); Template.Field="ДАТАОТЧ"; Exit; fi;
 if Day(ДАТАОТЧ)<>1: Message("Для выгрузки в файл требуется отчет расчитанный на '1' число.", mtWarning); Template.Field="ДАТАОТЧ"; Exit; fi;
 if УЧР_ИНН="" or not КлючИНН(УЧР_ИНН): Message("Некорректный ИНН.^MПроверьте реквизиты", mtError); Template.Field="УЧР_НАИМ"; Exit; fi;
 if not ЕстьДанныеДляВыгрузки: Message("Нет данных для выгрузки.^MПредварительно сделайте расчет формы.", mtWarning); Template.Object="btnРасчет"; Exit; fi;
 --
 if ChooseFolder(Путь, "Выберите папку для сохранения файла выгрузки...")=cmOk:

    Инициализация_УсловийБаланса;
    nameFile=Путь+"123"+Format("%.2d", Mon(AddMon(ДАТАОТЧ, -1)))+Format("%.2d", Year(AddMon(ДАТАОТЧ, -1))-2000)+"m1.txt";
    Try
      Try if ExistFile(nameFile): DeleteFile(nameFile); fi; Except end;
      FlagCreate=False;
      FS=TextFileCreate(nameFile);
      FlagCreate=True;
      -- Записываем заголовок
      TextFileWriteLn(FS, "ИНН="+УЧР_ИНН);
      TextFileWriteLn(FS, "ДАТА="+DateToString(ДАТАОТЧ));
      TextFileWriteLn(FS, "КОДФ=123");
      -- Записываем данные 1 раздела
      TextFileWriteLn(FS, "ТБ=01");
      num=LengthOfArray(BAL_STR);
      if num>0:
        for ii=1 to num do
          Value=ЗаписатьСтрокуРаздела(ii);
          if Value<>"": TextFileWriteLn(FS, Value); fi;
        od;
      fi;
      TextFileClose(FS);
      if ExistFile(nameFile): if EnqOkCancel("Открыть созданный файл выгрузки?", mtInformation)=cmOK: OpenEditor(nameFile); fi; fi;
    Except
      ЗакрытьФайлПоОшибке(FS, FlagCreate, nameFile);
      Raise;
    end;

 fi;

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 XLS_Заголовки_Таблицы(objSheet:AutoObject; xlsRow:Integer; Счетчик:Integer);
var CellColor :Integer;

 CellColor = РАБ.УПП.LIB.Цвет(217, 217, 217);
 ProgressPos(Счетчик);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, xlsRow, 01, "Наименование показателя");
 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(objSheet, xlsRow, 01, xlsRow, 02);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 01, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, CellColor, False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, xlsRow, 03, "Код"+Chr(10)+"строки");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 03, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, CellColor, False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, xlsRow, 04, "Код"+Chr(10)+"по"+Chr(10)+"КОСГУ");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 04, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, CellColor, False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, xlsRow, 05, "Бюджетная"+Chr(10)+"деятельность");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 05, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, CellColor, False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, xlsRow, 06, "Приносящая"+Chr(10)+"доход"+Chr(10)+"деятельность");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 06, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, CellColor, False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, xlsRow, 07, "Итого");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 07, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, CellColor, False);
 ProgressPos(Счетчик+1);
 xlsRow=xlsRow+1;
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, xlsRow, 01, "1");
 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(objSheet, xlsRow, 01, xlsRow, 02);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 01, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, CellColor, False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, xlsRow, 03, "2");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 03, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, CellColor, False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, xlsRow, 04, "3");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 04, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, CellColor, False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, xlsRow, 05, "4");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 05, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, CellColor, False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, xlsRow, 06, "5");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 06, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, CellColor, False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, xlsRow, 07, "6");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 07, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, CellColor, False);
 РАБ.EXCEL.НадстрочноеНачертаниеДиапазона(objSheet, xlsRow, 1, xlsRow, 7, True);
end;

Proc XLS_СформироватьСтрокуБаланса(objSheet:AutoObject;
                                     lcl_TS:String;
                                     lcl_DS:String;
                                   RootHead:Logical;
                                   ColorItg:Logical;
                                    сумГР04:Numeric;
                                    сумГР05:Numeric;
                                    сумГР06:Numeric;
                                    lvlHead:Integer;
                                   NoDopRow:Logical;
                                     numRow:String;
                                     codRow:String;
                                     RowDbl:logical;
                                     xlsRow:Integer;
                                     dscRow:String);

var CellColorH, CellColorI, FontSize, TextAlgn, RH :Integer;
var AutoColors, FontBold :Logical;
var dopRowText :String;
var objRow :AutoObject;

 AutoColors = not ColorItg;
 CellColorH = РАБ.УПП.LIB.Цвет(217, 217, 217);
 CellColorI = if(AutoColors, 0, РАБ.УПП.LIB.Цвет(204, 255, 204));
 FontSize   = if(lvlHead=2, 8, 9);
 FontBold   = if(lvlHead=0, True, False);
 TextAlgn   = if(RootHead, РАБ.EXCEL.xlCenter, РАБ.EXCEL.xlLeft);
 if NoDopRow: 
   dopRowText="";
 else
   if lvlHead=0: dopRowText="в том числе:";
   |  lvlHead=1: dopRowText="из них:";
   else dopRowText="";
   fi;
 fi;

 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, xlsRow, 01, dscRow);
 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(objSheet, xlsRow, 01, xlsRow, 02);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 01, TextAlgn, lvlHead*5, РАБ.EXCEL.xlCenter, True, "Arial", FontSize, 0, True, FontBold, False, 0, True);
 if dopRowText<>"":
   РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, xlsRow+1, 01, dopRowText);
   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(objSheet, xlsRow+1, 01, xlsRow+1, 02);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow+1, 01, РАБ.EXCEL.xlLeft, if(lvlHead=1, 10, 05), РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, True, 0, True);
 fi;

 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, xlsRow, 03, numRow);
 if dopRowText<>"": РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(objSheet, xlsRow, 03, xlsRow+1, 03); fi;
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, CellColorH, False);

 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, xlsRow, 04, codRow);
 if dopRowText<>"": РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(objSheet, xlsRow, 04, xlsRow+1, 04); fi;
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 04, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, CellColorH, False);

 if сумГР04<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, xlsRow, 05, сумГР04, lcl_DS, lcl_TS); fi;
 if dopRowText<>"": РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(objSheet, xlsRow, 05, xlsRow+1, 05); fi;
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 05, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, if(RootHead, True, False), False, CellColorI, AutoColors);

 if сумГР05<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, xlsRow, 06, сумГР05, lcl_DS, lcl_TS); fi;
 if dopRowText<>"": РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(objSheet, xlsRow, 06, xlsRow+1, 06); fi;
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 06, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, if(RootHead, True, False), False, CellColorI, AutoColors);

 if сумГР06<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, xlsRow, 07, сумГР06, lcl_DS, lcl_TS); fi;
 if dopRowText<>"": РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(objSheet, xlsRow, 07, xlsRow+1, 07); fi;
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, xlsRow, 07, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, if(RootHead, True, False), False, РАБ.УПП.LIB.Цвет(204, 255, 204), False);

 if RowDbl:
   objRow=AsAutoObject(objSheet.Rows[Str(xlsRow)+":"+Str(xlsRow)]);
   Try
     Try RH=asInteger(objRow.RowHeight); Except RH=0; end;
     if RH>0: objRow.RowHeight = Int(RH*1.75); fi;
   Finally
     ClearVariable(objRow);
   end;
 fi;

end;

Proc Экспорт_Excel;
var xlsApp, xlsBooks, xlsBook, xlsSheets, xlsSheet, xlsRng :AutoObject;
var localTS, localDS, xlNameFile, xlNameFolder, ExcelVersion, Value :String;
var NoError, rusExcel, dblRow :Logical;
var начало, kol, max_kol, offsetRow, len, ii, MyColor, RowInBlock, RowInc :Integer;

 if not ЕстьДанныеДляВыгрузки: Message("Нет данных для выгрузки.^MПредварительно сделайте расчет формы.", mtWarning); Template.Object="btnРасчет"; Exit; fi;

 NoError=True;
 kol=0;
 if ChooseFolder(xlNameFolder, "Выберите папку для сохранения файла экспорта...")=cmOK:
   начало=Time;
   xlNameFile=xlNameFolder+"expXLS0503123_"+Format("%.4d", Year(ToDay))+Format("%.2d", Mon(ToDay))+Format("%.2d", Day(ToDay))+"_"+TimeToHMSstring_adv(Time, "")+".xls";
   if ExistFile(xlNameFile): DeleteFile(xlNameFile); fi;
   if ExistFile(xlNameFile+"x"): DeleteFile(xlNameFile+"x"); fi; -- для версий Офиса 2007 или старше
   --
   if NoError:
     xlsApp=CreateAutoObject('Excel.Application');
     Try
       ExcelVersion=asString(xlsApp.Version);
       if Int(ExcelVersion)>=12 or ExcelVersion="12.0": xlNameFile=xlNameFile+"x"; 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]);
         MyColor=РАБ.УПП.LIB.Цвет(204, 255, 204);
         RowInc=0;
         --
         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:
                   len=1;
                   Try
                     for ii=1 to len do Try xlsSheet=AsAutoObject(xlsSheets.Add); Finally ClearVariable(xlsSheet); end; od;
                   Except
                     ClearVariable(xlsSheet);
                     Raise;
                   end;
                 fi;
                 kol=kol+1;
                 xlsSheet=AsAutoObject(xlsBook.Worksheets[kol]);
                 Try
                   xlsSheet.Name = "0503123";
                   ShowProgress(12, "Формируем титул...");
                   offsetRow=0;
                   dblRow=False;
                   ProgressPos(1);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 01, 31.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 02, 23.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 03, 10.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 04, 10.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 05, 18.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 06, 18.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 07, 20.0);
                   ProgressPos(2);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "(в ред. Приказа Минфина РФ от 29.12.2011 № 191н)");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 07);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 07, 0, True, False, False, 0, True);
                   ProgressPos(3);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "ОТЧЕТ О ДВИЖЕНИИ ДЕНЕЖНЫХ СРЕДСТВ");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 06);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 11, 0, True,  True, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 07, "КОДЫ");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 07, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Times New Roman", 10, 0, True, False, False, 0, True);
                   ProgressPos(4);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "Форма по ОКУД");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 06);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 06, РАБ.EXCEL.xlRight,  1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 07, "0503123");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 07, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Courier New", 11, 0, True, False, False, 0, True);
                   ProgressPos(5);
                   offsetRow=offsetRow+1;
                   Value="на "+Format("%.2d", Day(ДАТАОТЧ))+" "+Месяца(Mon(ДАТАОТЧ))+" "+Format("%.4d", Year(ДАТАОТЧ))+" г.";
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 02, Value);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 02, offsetRow, 05);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 02, РАБ.EXCEL.xlLeft, 14,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True,  True, False, 0, True);
                   РАБ.EXCEL.ПодчеркнутыйТекстЯчеек(xlsSheet, offsetRow, 02, offsetRow, 05, False, True, True);

                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 06, "Дата");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 06, РАБ.EXCEL.xlRight,  1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 07, DateToString(ДАТАОТЧ));
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 07, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   ProgressPos(6);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 06, "по ОКПО");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 06, РАБ.EXCEL.xlRight,  1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 07, УЧР_ОКПО);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 07, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   ProgressPos(7);
                   offsetRow=offsetRow+1;
                   dblRow=(Length(УЧР_НАИМ)>68);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "Наименование финансового органа");
                   if dblRow: RowInc=RowInc+1; РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow+1, 01); fi;
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlLeft,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 02, УЧР_НАИМ);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 02, if(dblRow, offsetRow+1, offsetRow), 05);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 02, РАБ.EXCEL.xlLeft,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, True, False, 0, True);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 02, if(dblRow, offsetRow+1, offsetRow), 05, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 06, "Глава по БК");
                   if dblRow: РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 06, offsetRow+1, 06); fi;
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 06, РАБ.EXCEL.xlRight,  1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 07, УЧР_ГЛАВА);
                   if dblRow: РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 07, offsetRow+1, 07); fi;
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 07, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   ProgressPos(8);
                   offsetRow=offsetRow+if(dblRow, 2, 1);
                   dblRow=False;
                   dblRow=(Length(УЧР_БДЖ)>68);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "Наименование бюджета");
                   if dblRow: RowInc=RowInc+1; РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow+1, 01); fi;
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 02, УЧР_БДЖ);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 02, if(dblRow, offsetRow+1, offsetRow), 05);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 02, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, True, False, 0, True);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 02, if(dblRow, offsetRow+1, offsetRow), 05, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 06, "по ОКАТО");
                   if dblRow: РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 06, offsetRow+1, 06); fi;
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 06, РАБ.EXCEL.xlRight,  1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 07, УЧР_ОКАТО);
                   if dblRow: РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 07, offsetRow+1, 07); fi;
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 07, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   ProgressPos(9);
                   offsetRow=offsetRow+if(dblRow, 2, 1);
                   dblRow=False;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "Периодичность:");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlLeft,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 02, "годовая");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 02, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 06, РАБ.EXCEL.xlRight,  1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 07, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   ProgressPos(10);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "Единица измерения:");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlLeft,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 02, ЕдИзм_);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 02, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 06, РАБ.EXCEL.xlRight,  1, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 07, ОКЕИ);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 07, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   ProgressPos(11);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet,  offsetRow-7-RowInc, 07, offsetRow, 07, True,  True,  True,  True, True,  True,  False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet,  offsetRow-6-RowInc, 07, offsetRow, 07, True,  True,  True,  True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                   ProgressPos(12);
                   РАБ.EXCEL.PrintSetup_ЧБ_Поля10(xlsApp, xlsSheet, False, 0, 0, 0, 0, True, False, True, 99);
                   --
                   ShowProgress(20, "Формируем таблицу отчета (стр.1)...");
                   ProgressPos(01);
                   offsetRow=offsetRow+2;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "1. ПОСТУПЛЕНИЯ");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 07);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, True, False, 0, True);

                   RowInBlock=offsetRow;
                   offsetRow=offsetRow+1;
                   2XLS_Заголовки_Таблицы0(xlsSheet, offsetRow, 02);

                   ProgressPos(04);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS,  True,  True, RГ4С010, RГ5С010, RГ6С010, 0,  True, "010",    "", False, offsetRow, "ПОСТУПЛЕНИЯ");

                   ProgressPos(05);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С020, RГ5С020, RГ6С020, 0, False, "020", "100", False, offsetRow, "Поступления по текущим опрациям - всего");

                   ProgressPos(06);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С030, RГ5С030, RГ6С030, 1,  True, "030", "110", False, offsetRow, "по налоговым доходам");

                   ProgressPos(07);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С040, RГ5С040, RГ6С040, 1,  True, "040", "120", False, offsetRow, "по доходам от собственности");

                   ProgressPos(08);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С050, RГ5С050, RГ6С050, 1,  True, "050", "130", False, offsetRow, "по доходам от оказания платных услуг (работ)");

                   ProgressPos(09);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С060, RГ5С060, RГ6С060, 1,  True, "060", "140", False, offsetRow, "по суммам принудительного изъятия");

                   ProgressPos(10);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С070, RГ5С070, RГ6С070, 1, False, "070", "150", False, offsetRow, "по безвозмездным поступлениям от бюджетов");

                   ProgressPos(11);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С071, RГ5С071, RГ6С071, 2,  True, "071", "151",  True, offsetRow, "от других бюджетов бюджетной системы Российской Федерации");

                   ProgressPos(12);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С072, RГ5С072, RГ6С072, 2,  True, "072", "152",  True, offsetRow, "от наднациональных организаций и правительств иностранных государств");

                   ProgressPos(13);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С073, RГ5С073, RГ6С073, 2,  True, "073", "153", False, offsetRow, "от международных финансовых организаций");

                   ProgressPos(14);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С080, RГ5С080, RГ6С080, 1,  True, "080", "160", False, offsetRow, "от взносов на социальные нужды");

                   ProgressPos(15);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С110, RГ5С110, RГ6С110, 1, False, "110", "170", False, offsetRow, "от операций с активами");

                   ProgressPos(16);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С111, RГ5С111, RГ6С111, 2,  True, "111", "171", False, offsetRow, "от переоценки активов");

                   ProgressPos(17);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С112, RГ5С112, RГ6С112, 2,  True, "112", "173", False, offsetRow, "чрезвычайные доходы от операций с активами");

                   ProgressPos(18);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С120, RГ5С120, RГ6С120, 1,  True, "120", "180", False, offsetRow, "по прочим доходам");

                   ProgressPos(19);
                   RowInBlock=offsetRow-RowInBlock;
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+1, 1, offsetRow, 7, False,  True,  False,  True,  True ,  True ,  False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+2, 3, offsetRow, 7, True ,  True,  True ,  True,  False,  False,  False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                     РАБ.EXCEL.СброситьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+3, 1, offsetRow, 2, False, False, False, False, False, True, False, False);
                   ProgressPos(20);

                   ShowProgress(20, "Формируем таблицу отчета (стр.2)...");
                   ProgressPos(01);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow,   01, "форма 0503123 с.2");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 07);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow,   01, РАБ.EXCEL.xlRight, 1, РАБ.EXCEL.xlCenter, True, "Arial", 07, 0, True, False, False, 0, True);
                   РАБ.EXCEL.РазрывСтраницы(xlsSheet, offsetRow);

                   RowInBlock=offsetRow;
                   offsetRow=offsetRow+1;
                   2XLS_Заголовки_Таблицы0(xlsSheet, offsetRow, 02);

                   ProgressPos(04);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С130, RГ5С130, RГ6С130, 0, False, "130",    "", False, offsetRow, "Поступления от инвестиционных операций - всего");

                   ProgressPos(05);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С140, RГ5С140, RГ6С140, 1, False, "140", "400", False, offsetRow, "от реализации нефинансовых активов:");

                   ProgressPos(06);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С141, RГ5С141, RГ6С141, 2,  True, "141", "410", False, offsetRow, "основных средств");

                   ProgressPos(07);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С142, RГ5С142, RГ6С142, 2,  True, "142", "420", False, offsetRow, "нематериальных активов");

                   ProgressPos(08);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С143, RГ5С143, RГ6С143, 2,  True, "143", "430", False, offsetRow, "непроизведенных активов");

                   ProgressPos(09);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С144, RГ5С144, RГ6С144, 2,  True, "144", "440", False, offsetRow, "материальных запасов");

                   ProgressPos(10);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С150, RГ5С150, RГ6С150, 0, False, "150",    "", False, offsetRow, "Поступления от финансовых операций - всего");

                   ProgressPos(11);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С160, RГ5С160, RГ6С160, 1, False, "160", "600", False, offsetRow, "с финансовыми активами:");

                   ProgressPos(12);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С161, RГ5С161, RГ6С161, 2,  True, "161", "620",  True, offsetRow, "от реализации ценных бумаг, кроме акций и иных форм участия в капитале");

                   ProgressPos(13);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С162, RГ5С162, RГ6С162, 2,  True, "162", "630", False, offsetRow, "от реализации акций и иных форм участия в капитале");

                   ProgressPos(14);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С163, RГ5С163, RГ6С163, 2,  True, "163", "640", False, offsetRow, "от возврата бюджетных ссуд и кредитов");

                   ProgressPos(15);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С164, RГ5С164, RГ6С164, 2,  True, "164", "650", False, offsetRow, "с иными финансовыми активами");

                   ProgressPos(16);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С180, RГ5С180, RГ6С180, 1, False, "180", "700", False, offsetRow, "от осуществления заимствований:");

                   ProgressPos(17);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С181, RГ5С181, RГ6С181, 2,  True, "181", "710",  True, offsetRow, "в виде внутреннего государственного (муниципального) долга");

                   ProgressPos(18);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С182, RГ5С182, RГ6С182, 2,  True, "182", "720", False, offsetRow, "в виде внешнего государственного долга");

                   ProgressPos(19);
                   RowInBlock=offsetRow-RowInBlock;
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+1, 1, offsetRow, 7, False,  True,  False,  True,  True ,  True ,  False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+2, 3, offsetRow, 7, True ,  True,  True ,  True,  False,  False,  False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                     РАБ.EXCEL.СброситьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+3, 1, offsetRow, 2, False, False, False, False, False, True, False, False);
                   ProgressPos(20);
                   --
                   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; --NoError
   if NoError:
     ShowProgress(20, "Формируем таблицу отчета (стр.3)...");
     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["0503123"]);
                 Try

                   ShowProgress(25, "Формируем таблицу отчета (стр.3)...");
                   ProgressPos(01);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow,   01, "форма 0503123 с.3");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 07);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow,   01, РАБ.EXCEL.xlRight, 1, РАБ.EXCEL.xlCenter, True, "Arial", 07, 0, True, False, False, 0, True);
                   РАБ.EXCEL.РазрывСтраницы(xlsSheet, offsetRow);

                   ProgressPos(02);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "2. ВЫБЫТИЯ");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 07);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, True, False, 0, True);

                   RowInBlock=offsetRow;
                   offsetRow=offsetRow+1;
                   2XLS_Заголовки_Таблицы0(xlsSheet, offsetRow, 03);

                   ProgressPos(05);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS,  True,  True, RГ4С210, RГ5С210, RГ6С210, 0,  True, "210",    "", False, offsetRow, "ВЫБЫТИЯ");

                   ProgressPos(06);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С220, RГ5С220, RГ6С220, 0, False, "220", "200", False, offsetRow, "Выбытия по текущим операциям - всего");

                   ProgressPos(07);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С230, RГ5С230, RГ6С230, 1, False, "230", "210",  True, offsetRow, "за счет оплаты труда и начислений на выплаты по оплате труда");

                   ProgressPos(08);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С231, RГ5С231, RГ6С231, 2,  True, "231", "211", False, offsetRow, "за счет заработной платы");

                   ProgressPos(09);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С232, RГ5С232, RГ6С232, 2,  True, "232", "212", False, offsetRow, "за счет прочих выплат");

                   ProgressPos(10);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С233, RГ5С233, RГ6С233, 2,  True, "233", "213", False, offsetRow, "за счет начислений на выплаты по оплате труда");

                   ProgressPos(11);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С240, RГ5С240, RГ6С240, 1, False, "240", "220", False, offsetRow, "за счет приобретения работ, услуг");

                   ProgressPos(12);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С241, RГ5С241, RГ6С241, 2,  True, "241", "221", False, offsetRow, "услуг связи");

                   ProgressPos(13);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С242, RГ5С242, RГ6С242, 2,  True, "242", "222", False, offsetRow, "транспортных услуг");

                   ProgressPos(14);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С243, RГ5С243, RГ6С243, 2,  True, "243", "223", False, offsetRow, "коммунальных услуг");

                   ProgressPos(15);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С244, RГ5С244, RГ6С244, 2,  True, "244", "224", False, offsetRow, "арендной платы за пользование имуществом");

                   ProgressPos(16);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С245, RГ5С245, RГ6С245, 2,  True, "245", "225", False, offsetRow, "работ, услуг по содержанию имущества");

                   ProgressPos(17);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С246, RГ5С246, RГ6С246, 2,  True, "246", "226", False, offsetRow, "прочих работ, услуг");

                   ProgressPos(18);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С250, RГ5С250, RГ6С250, 1, False, "250", "230", False, offsetRow, "за счет обслуживания долговых обязательств");

                   ProgressPos(19);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С251, RГ5С251, RГ6С251, 2,  True, "251", "231", False, offsetRow, "внутреннего долга");

                   ProgressPos(20);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С252, RГ5С252, RГ6С252, 2,  True, "252", "232", False, offsetRow, "внешнего долга");

                   ProgressPos(21);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С260, RГ5С260, RГ6С260, 1, False, "260", "240", False, offsetRow, "за счет безвозмездных перечислений организациям");

                   ProgressPos(22);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С261, RГ5С261, RГ6С261, 2,  True, "261", "241",  True, offsetRow, "за счет перечислений государственным и муниципальным организациям");

                   ProgressPos(23);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С262, RГ5С262, RГ6С262, 2,  True, "262", "242",  True, offsetRow, "за счет перечислений организациям, за исключением государственных и муниципальных организаций");

                   ProgressPos(24);
                   RowInBlock=offsetRow-RowInBlock;
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+1, 1, offsetRow, 7, False,  True,  False,  True,  True ,  True ,  False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+2, 3, offsetRow, 7, True ,  True,  True ,  True,  False,  False,  False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                     РАБ.EXCEL.СброситьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+3, 1, offsetRow, 2, False, False, False, False, False, True, False, False);
                   ProgressPos(25);

                   ShowProgress(22, "Формируем таблицу отчета (стр.4)...");
                   ProgressPos(01);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow,   01, "форма 0503123 с.4");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 07);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow,   01, РАБ.EXCEL.xlRight, 1, РАБ.EXCEL.xlCenter, True, "Arial", 07, 0, True, False, False, 0, True);
                   РАБ.EXCEL.РазрывСтраницы(xlsSheet, offsetRow);

                   RowInBlock=offsetRow;
                   offsetRow=offsetRow+1;
                   2XLS_Заголовки_Таблицы0(xlsSheet, offsetRow, 02);

                   ProgressPos(04);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С270, RГ5С270, RГ6С270, 1, False, "270", "250", False, offsetRow, "за счет безвозмездных перечислений бюджетам");

                   ProgressPos(05);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С271, RГ5С271, RГ6С271, 2,  True, "271", "251",  True, offsetRow, "за счет перечислений другим бюджетам бюджетной системы Российской Федерации");

                   ProgressPos(06);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С272, RГ5С272, RГ6С272, 2,  True, "272", "252",  True, offsetRow, "за счет перечислений наднациональным организациям и правительствам иностранных государств");

                   ProgressPos(07);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С273, RГ5С273, RГ6С273, 2,  True, "273", "253", False, offsetRow, "за счет перечислений международным организациям");

                   ProgressPos(08);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С280, RГ5С280, RГ6С280, 1, False, "280", "260", False, offsetRow, "за счет социального обеспечения");

                   ProgressPos(09);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С281, RГ5С281, RГ6С281, 2,  True, "281", "261",  True, offsetRow, "за счет пенсий, пособий и выплат по пенсионному, социальному и медицинскому страхованию населения");

                   ProgressPos(10);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С282, RГ5С282, RГ6С282, 2,  True, "282", "262", False, offsetRow, "за счет пособий по социальной помощи населению");

                   ProgressPos(11);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С283, RГ5С283, RГ6С283, 2,  True, "283", "263",  True, offsetRow, "за счет пенсий, пособий, выплачиваемых организациями сектора государственного управления");

                   ProgressPos(12);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С290, RГ5С290, RГ6С290, 1, False, "290", "270", False, offsetRow, "за счет операций с активами");

                   ProgressPos(13);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С291, RГ5С291, RГ6С291, 2,  True, "291", "273",  True, offsetRow, "за счет чрезвычайных расходов по операциям с активами");

                   ProgressPos(14);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С300, RГ5С300, RГ6С300, 1,  True, "300", "290", False, offsetRow, "за счет прочих расходов");

                   ProgressPos(15);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С310, RГ5С310, RГ6С310, 0, False, "310",    "", False, offsetRow, "Выбытия по инвестиционным операциям - всего");

                   ProgressPos(16);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С320, RГ5С320, RГ6С320, 1, False, "320", "300", False, offsetRow, "на приобретение нефинансовых активов:");

                   ProgressPos(17);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С321, RГ5С321, RГ6С321, 2,  True, "321", "310", False, offsetRow, "основных средств");

                   ProgressPos(18);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С322, RГ5С322, RГ6С322, 2,  True, "322", "320", False, offsetRow, "нематериальных активов");

                   ProgressPos(19);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С323, RГ5С323, RГ6С323, 2,  True, "323", "330", False, offsetRow, "непроизведенных активов");

                   ProgressPos(20);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С324, RГ5С324, RГ6С324, 2,  True, "324", "340", False, offsetRow, "материальных запасов");

                   ProgressPos(21);
                   RowInBlock=offsetRow-RowInBlock;
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+1, 1, offsetRow, 7, False,  True,  False,  True,  True ,  True ,  False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+2, 3, offsetRow, 7, True ,  True,  True ,  True,  False,  False,  False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                     РАБ.EXCEL.СброситьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+3, 1, offsetRow, 2, False, False, False, False, False, True, False, False);
                   ProgressPos(22);

                   ShowProgress(30, "Формируем таблицу отчета (стр.5)...");
                   ProgressPos(01);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow,   01, "форма 0503123 с.5");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 07);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow,   01, РАБ.EXCEL.xlRight, 1, РАБ.EXCEL.xlCenter, True, "Arial", 07, 0, True, False, False, 0, True);
                   РАБ.EXCEL.РазрывСтраницы(xlsSheet, offsetRow);

                   RowInBlock=offsetRow;
                   offsetRow=offsetRow+1;
                   2XLS_Заголовки_Таблицы0(xlsSheet, offsetRow, 02);

                   ProgressPos(04);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С330, RГ5С330, RГ6С330, 0, False, "330",    "", False, offsetRow, "Выбытия по финансовым операциям - всего");

                   ProgressPos(05);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С340, RГ5С340, RГ6С340, 1, False, "340", "500", False, offsetRow, "с финансовыми активами:");

                   ProgressPos(06);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С341, RГ5С341, RГ6С341, 2,  True, "341", "520",  True, offsetRow, "по приобретению ценных бумаг, кроме акций и иных форм участия в капитале");

                   ProgressPos(07);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С342, RГ5С342, RГ6С342, 2,  True, "342", "530",  True, offsetRow, "по приобретению акций и иных форм участия в капитале");

                   ProgressPos(08);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С343, RГ5С343, RГ6С343, 2,  True, "343", "540", False, offsetRow, "по предоставлению бюджетных кредитов");

                   ProgressPos(09);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С344, RГ5С344, RГ6С344, 2,  True, "344", "550", False, offsetRow, "с иными финансовыми активами");

                   ProgressPos(10);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С350, RГ5С350, RГ6С350, 1, False, "350", "800", False, offsetRow, "на погашение государственного (муниципального) долга");

                   ProgressPos(11);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С351, RГ5С351, RГ6С351, 2,  True, "351", "810", False, offsetRow, "на погашение внутреннего долга");

                   ProgressPos(12);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С352, RГ5С352, RГ6С352, 2,  True, "352", "820", False, offsetRow, "на погашение внешнего долга");

                   ProgressPos(13);
                   RowInBlock=offsetRow-RowInBlock;
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+1, 1, offsetRow, 7, False,  True,  False,  True,  True ,  True ,  False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+2, 3, offsetRow, 7, True ,  True,  True ,  True,  False,  False,  False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                     РАБ.EXCEL.СброситьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+3, 1, offsetRow, 2, False, False, False, False, False, True, False, False);

                   ProgressPos(14);
                   offsetRow=offsetRow+2;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "3. ИЗМЕНЕНИЕ ОСТАТКОВ СРЕДСТВ");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 01, offsetRow, 07);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, True, False, 0, True);

                   RowInBlock=offsetRow;
                   offsetRow=offsetRow+1;
                   2XLS_Заголовки_Таблицы0(xlsSheet, offsetRow, 15);

                   ProgressPos(17);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False,  True, RГ4С380, RГ5С380, RГ6С380, 0, False, "380",    "", False, offsetRow, "Изменение остатков средств  - всего");

                   ProgressPos(18);
                   offsetRow=offsetRow+2;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С381, RГ5С381, RГ6С381, 1,  True, "381", "510", False, offsetRow, "поступление денежных средств");

                   ProgressPos(19);
                   offsetRow=offsetRow+1;
                   XLS_СформироватьСтрокуБаланса(xlsSheet, localTS, localDS, False, False, RГ4С382, RГ5С382, RГ6С382, 1,  True, "382", "610", False, offsetRow, "выбытие денежных средств");

                   ProgressPos(20);
                   RowInBlock=offsetRow-RowInBlock;
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+1, 1, offsetRow, 7, False,  True,  False,  True,  True ,  True ,  False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+2, 3, offsetRow, 7, True ,  True,  True ,  True,  False,  False,  False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                     РАБ.EXCEL.СброситьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-RowInBlock+3, 1, offsetRow, 2, False, False, False, False, False, True, False, False);

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

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

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

                   ProgressPos(24);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 02, "(подпись)");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 02, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 04, "(расшифровка подписи)");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 4, offsetRow, 5);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 04, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.НадстрочноеНачертаниеДиапазона(xlsSheet, offsetRow, 2, offsetRow, 2, True);
                   РАБ.EXCEL.НадстрочноеНачертаниеДиапазона(xlsSheet, offsetRow, 4, offsetRow, 5, True);

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

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

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

                   ProgressPos(28);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 02, "(подпись)");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 02, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 04, "(расшифровка подписи)");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 4, offsetRow, 5);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 04, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.НадстрочноеНачертаниеДиапазона(xlsSheet, offsetRow, 2, offsetRow, 2, True);
                   РАБ.EXCEL.НадстрочноеНачертаниеДиапазона(xlsSheet, offsetRow, 4, offsetRow, 5, True);

                   ProgressPos(29);
                   offsetRow=offsetRow+2;
                   РАБ.EXCEL.ЗаписатьЯчейкуДатуКавычки(xlsSheet, offsetRow, 01, rusExcel, ДАТАИСП, if(ДАТАИСП>1.1.1800, False, True));
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 1, offsetRow, 2);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet,  offsetRow, 1, offsetRow, 2, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   ProgressPos(30);
                   --
                   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; --NoError
   --
   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;
 fi; -- ChooseFolder
end;

Proc Экспорт_Формы;
var num :Integer;
 ClearVariable(Buf);
 Buf[1]="Выгрузка в файл (формат ДФ г.Москвы)";
 Buf[2]="Выгрузка в Excel";
 num=Alternate("Выберите тип выгрузки...", Buf, -1, 1, 12);
 if num=1: Экспорт_TXT_ДФ;
 |  num=2: Экспорт_Excel;
 else Exit;
 fi;
end;

Proc АвтоКОСГУ;
 --Поля Table_OPER
 --"vX=X|vДата=Дата|vСумма=Сумма|vValSum=ValSum|vBalSum=BalSum|vВалюта=Валюта|vHasBalSum=HasBalSum|vIsBalFirst=IsBalFirst|vКоличество=Количество|vКолАналитика=КолАналитика|vОперация=Операция|vСодержание=Содержание|vDEBET=DEBET|vCREDIT=CREDIT|"+"vПараметры=Параметры|vАналитика=Аналитика"
var СЧТДЕБ, СЧТКРЕ, ANASTR, CURANA, NEWANA :String;
var RO, num, ii, kk :Integer;
 RO=OpenWorkArea("Table_OPER", "", "Match(DEBET, '*.?.202.1?.???') or Match(CREDIT, '*.?.202.1?.???')");
 ShowProgress(0, "Подготовка...");
 Try
   num=Records(RO);
   if num>0:
     ShowProgress(num, "Анализ...");
     ClearVariable(Buf);
     BeginChanging(RO);
     Try
       for ii=1 to num do
         ProgressPos(ii);
         СЧТДЕБ=GetFieldS(RO, ii, "DEBET");
         СЧТКРЕ=GetFieldS(RO, ii, "CREDIT");
         ANASTR=GetFieldS(RO, ii, "АНАЛИТИКА");
         CURANA=Trim(РАБ.БЮДЖЕТ2005.ВзятьСловоИзНабораПоМаске(ANASTR, " ", "КОСГУ.*", ""));
         NEWANA="";
         if CURANA="":
           if Match(СЧТДЕБ, '*.?.202.1?.???'): NEWANA=Up(РАБ.КБК.ВзятьЭКСчета(СЧТКРЕ, ""));
           |  Match(СЧТКРЕ, '*.?.202.1?.???'): NEWANA=Up(РАБ.КБК.ВзятьЭКСчета(СЧТДЕБ, ""));
           fi;
           if NEWANA="": NEWANA="КОСГУ.000"; else NEWANA="КОСГУ."+NEWANA; fi;
           ANASTR=РАБ.БЮДЖЕТ.ДобавитьПризнак(ANASTR, NEWANA);
           kk=PutFieldS(RO, ii, "АНАЛИТИКА", ANASTR);
         fi;
       od;
       EndChanging(RO);
     Except
       CancelChanging(RO);
       Raise;
     end;
   fi;
 Finally
   CloseProgress;
   CloseWorkArea(RO);
 end;
end;

Proc btnOnClick(Sender:String); -- объекты при нажатии
 if Sender="btnClose"    : Close;
 |  Sender="btnРасчет"   : Расчет(False);
 |  Sender="btnExport"   : Экспорт_Формы;
 |  Sender="btnОчистить" : ОчиститьФорму;
 |  Sender="btnCheckANA" : АвтоКОСГУ;
 fi;
end;

Proc cb_Настройки_OnChange(Sender:String);
var Flag :Logical;

 if not flgНастройки:
   if not ПроверкаНастроечныхСчетов(True):
     flgНастройки=True;
     cb_Настройки.State=True;
   fi;
 fi;

 Flag = not flgНастройки;

    btnClose.Visible = Flag;
   btnРасчет.Visible = Flag;
   btnExport.Visible = Flag;
 btnОчистить.Visible = Flag;

СекцНстрОтч2.Visible = Flag;
СекцШапкаОтч.Visible = Flag;
СекцСтБаланс.Visible = Flag;
СекцПодписи1.Visible = Flag;
СекцПодписи2.Visible = Flag;
СекцПодписи3.Visible = Flag;
СекцПодписи4.Visible = Flag;

if Flag: НастройкаОтчета(False); else НастройкаОтчета(True); fi;

end;

2-- События шаблона
Proc Template_OnOpen(Create:Logical); -- при открытии шаблона
 РАБ.НАСТР_ПЕЧАТЬ.Cfg(PlanVar("Общие")+"\Настройки\", "ТББ_STD_Album10_000.cfg");
 btnCheckANA.Width=0;
 btnCheckANA.Height=0;
 btnCheckANA.Left=0;
 btnCheckANA.Top=0;
end;

Proc Template_AfterOpen(Create:Logical); -- после открытия шаблона
 Очистить;
 ОчиститьПараметрыСчетов;
 Инициализация_Бланка;
 if УЧР_НАИМ="": ВзятьРеквизиты(УЧР_SREC, flgДлинаФО, True); fi;
 flgClear=GetGuid;
 Template.Field="Фокус";
end;

Proc Template_OnClose(Destroy:Logical); -- при закрытии шаблона
 Очистить;
 ОчиститьПараметрыСчетов;
 flgClear="";
end;

КОНЕЦ -- конец бланк