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

var MaskUserVoc  :String="ВД.*|ВКЛ.*|КТ.*|П.*|ПБС.*|ПГР.*|РБС.*";
-- Объекты
cbНФАамт :Object; Bevel0 :Object; Bevel3 :Object; rbtAccВсе:Object; rbtИстФинВсе :Object; rbtAccAll:Object;  rbtФтрПрв :Object; rbtМОЛМХЭ :Object; cbНстрВнВидОтч :Object;
cbНФА100 :Object; Bevel1 :Object; Bevel4 :Object; rbtAccБал:Object; rbtИстФинБюд :Object; rbtAcc101:Object;  rbtФтрСтр :Object; rbtМХЭМОЛ :Object;
cbНФАбез :Object; Bevel2 :Object; Bevel5 :Object; rbtAccЗаб:Object; rbtИстФинВне :Object; rbtAcc105:Object;

btnClose :Object; btnРасчет :Object; btnExcel :Object; lblVersion :Object;
var btnName_menu :String='Ведомость остатков НФА';
var Sort_menu    :String='06';
var infoVersion  :String="Версия отчета: 1.14.0415";
var Фокус        :String="";
TimeCreationRep  :String;
var crdГРП       :String="РПО_ОКЕИ_ГРУППЫ";
var pfxУЧН       :String="УЧН";
СлужКорИнфо[]    :String;

СекцТ1З :Object; СекцТ1Д :Object; СекцТ1И :Object;
СекцТ2З :Object; СекцТ2Д :Object; СекцТ2И :Object;
СекцТ3З :Object; СекцТ3Д :Object; СекцТ3И :Object;
СекцТ4З :Object; СекцТ4Д :Object; СекцТ4И :Object;
СекцТ5З :Object; СекцТ5Д :Object; СекцТ5И :Object;

СекцШапка :Object;
СекцГрупп :Object;
СекцУслов :Object;
СекцFСорт :Object;
СекцВнВид :Object;

СекцArrayНФА :Object;
СекцArrayUSR :Object;

СекцWorkЗТ :Object; -- Основная таблица (ведомость) - строка заголовков
СекцWorkДТ :Object; -- Основная таблица (ведомость) - строки данных
СекцWorkИТ :Object; -- Основная таблица (ведомость) - строка итогов

Позиции          :Integer;  -- строки ведомости
СтрокиТ1Т4       :Integer;  -- строки итоговых таблиц
СтрокиТ2         :Integer;  -- строки итоговых таблиц
СтрокиТ3         :Integer;  -- строки итоговых таблиц
СтрокиТ5         :Integer;  -- строки итоговых таблиц
СтрокиArНФА      :Integer;  -- сортировка вспомогательного массива (СекцArrayНФА)
СтрокиArUSR      :Integer;  -- сортировка вспомогательного массива (СекцArrayUSR)

var ИзмГрп       :String;
var ИзмГрп_      :String=ИзмГрп;
var LastGRP_num  :Integer;
var LastGRP_key  :String=["{0}"];
var Flag_onEnter :Logical;
var oldDate      :Date;     -- для запоминания и возвратов
flgClear         :String;   -- контроль очистки бланков
ДАТОПЕР          :Date;2 0    -- дата отчета
fldСОРТкод       :String;   -- поле сортировки
fldСОРТимя       :String;   -- расшифровка поля сортировки
fldСОРТимя_      :String=fldСОРТимя;
xlsRepШапка      :Integer=4;
ИспДол           :String;
ИспФИО           :String;
ИспREC           :Record;

flgНстрВнВидОтч  :Logical=[False];
flgПечСлужИнф    :Logical=[True];
flgВыводИспол    :Logical=[True];
flgПечИтгТаб1    :Logical=[True];
flgПечИтгТаб2    :Logical=[True];
flgПечИтгТаб3    :Logical=[True];
flgПечИтгТаб4    :Logical=[True];
flgПечИтгТаб5    :Logical=[True];
flgОтделТабл     :Logical=[True];
flgПечНовСтр     :Logical=[False];
flgПровПрив      :Logical=[False];
flgСлужИнф       :Logical;
flgСхемаЦветов   :Integer=[1];
ПоправкаExcel    :Integer;
ПоправкаExcel_   :Integer=ПоправкаExcel;
flgРежимСохр     :Integer;
flgРежимСохр_    :Integer=flgРежимСохр;
flgSaveExport    :Logical;
flgВыборМОЛ      :Logical;
flgТолькоИнв     :Logical=[False];
flgТолькоНмн     :Logical=[False];
flgXLSнетЕИ      :Logical=[False];

flgНФАамт :Logical;
flgНФА100 :Logical;
flgНФАбез :Logical;

flgИстФинcur     :Integer=[1];
var flgИстФинold :Integer;
curAcc           :Integer=[1];
var oldAcc       :Integer;
curБЗС           :Integer=[1];
var oldБЗС       :Integer;
flgФтрАнаcur     :Integer=[1];
var flgФтрАнаold :Integer;
flgМОЛМХЭcur     :Integer=[1];
var flgМОЛМХЭold :Integer;

flgСЧТ     :Integer; -- вид отчета по счетам (0 - без вывода; 1 - в строки; 2 - иерархично)
flgКБК     :Integer; -- вид отчета по КБК    (0 - без вывода; 1 - в строки; 2 - иерархично)
flgМОЛ     :Integer; -- вид отчета по МОЛ    (0 - без вывода; 1 - в строки; 2 - иерархично)
flgМХЭ     :Integer; -- вид отчета по МХЭ    (0 - без вывода; 1 - в строки; 2 - иерархично)
flgГРП     :Integer; -- вид отчета по МХЭ    (0 - без вывода; 1 - в строки; 2 - иерархично)
отчСЧТ     :String;  -- Фильтр по счету
отчКБК     :String;  -- Фильтр по КБК
valКБК     :String;  -- Фильтр по КБК (полное значение - для возвратов в меню)
отчМОЛ     :String;  -- Фильтр по МОЛ
отчМХЭ     :String;  -- Фильтр по местонахождению
отчГРП     :String;  -- Фильтр по группе НФА
keyГРП     :String;  -- Фильтр по группам НФА (ссылка на значение)
namГРП     :String;  -- Наименование группы НФА
МОЛимя     :String;
МХЭимя     :String;
доп_VOCкод :String; --выбор дополнительного справочника
доп_VOCкод_:String=доп_VOCкод;
доп_АНАкод :String; --фильтр по признаку дополнительного справочника
доп_АНАкод_:String=доп_АНАкод;
доп_VOCимя :String; --выбор дополнительного справочника
доп_АНАимя :String; --фильтр по признаку дополнительного справочника
--
var flgСЧТ_:Integer=flgСЧТ; var отчСЧТ_:String=отчСЧТ;
var flgКБК_:Integer=flgКБК; var отчКБК_:String=отчКБК;
var flgМОЛ_:Integer=flgМОЛ; var отчМОЛ_:String=отчМОЛ;
var flgМХЭ_:Integer=flgМХЭ; var отчМХЭ_:String=отчМХЭ;
var flgГРП_:Integer=flgГРП; var отчГРП_:String=отчГРП;
--
флагиACC   :String;  -- для фильтра по счетам
Иерархия   :String;  -- строка формирования порядка полей иерархической группировки
var ГРП[]  :String;  -- группы для возможного создания иерархии отчета
var USE[]  :Integer; -- вид отчета группы для возможного создания иерархии отчета (0 - без вывода; 1 - в строки; 2 - иерархично)

var Buf[]        :String;
var Txt[]        :String;
var BufInt[]     :Integer;
var aAna[]       :String;
var BufMsk[]     :String;
var BufStr[]     :String;
var KeyMsk[]     :String;
var KeyStr[]     :String;
var BufFlag[]    :Logical;
var bindVOC[]    :String;  -- Привязанный справочник
var bindINT[]    :Integer; -- Количество привязок

var UsrFldSRT[]  :String;
var HdrFldSRT[]  :String;
var HdrFldКОД[]  :String;
var HdrFldИМЯ[]  :String;

var RLSНФА[] :String;
var REFНФА[] :String;

var LSTUNQ[] :String;
var LSTСУМ[] :Numeric;
var LSTКОЛ[] :Numeric;
var LSTИСТ[] :String;  -- источник (код)
var LSTКБК[] :String;  -- КБК (код)
var LSTСЧ6[] :String;  -- счет вида ???.?? (код)
var LSTНФА[] :String;  -- наименование НФА
var LSTИНВ[] :String;  -- инвентарный номер (расшифровка УЧН)
var LSTМОЛ[] :String;  -- расшифровка кода МОЛ
var LSTМХЭ[] :String;  -- расшифровка кода местонахождения
var LSTЮЗР[] :String;  -- для пользовательской сортировки
var LSTЦЕН[] :Logical; -- нужно знать цену за единицу

var xlDiagonalDown          :Integer=5;     -- Borders - граница: диагональ сверху вниз
var xlDiagonalUp            :Integer=6;     -- Borders - граница: диагональ снизу вверх
var xlEdgeLeft              :Integer=7;     -- Borders - граница: левая
var xlEdgeTop               :Integer=8;     -- Borders - граница: верхняя
var xlEdgeBottom            :Integer=9;     -- Borders - граница: нижняя
var xlEdgeRight             :Integer=10;    -- Borders - граница: правая
var xlInsideVertical        :Integer=11;    -- Borders - граница: внутренняя вертикальная
var xlInsideHorizontal      :Integer=12;    -- Borders - граница: внутренняя горизонтальная

var xlContinuous            :Integer=1;     -- LineStyle - сплошная
var xlDash                  :Integer=-4115; -- LineStyle - прерывистая тире (+ xlMedium - толстая) (+ xlThin - тонкая)
var xlDot                   :Integer=-4118; -- LineStyle - прерывистая точками (xlThin)
var xlDouble                :Integer=-4119; -- LineStyle - сплошная двойная (xlThick)
var xlDashDot               :Integer=4;     -- LineStyle - прерывистая: тире точка (+ xlMedium - толстая) (+ xlThin - тонкая)
var xlDashDotDot            :Integer=5;     -- LineStyle - прерывистая: тире две точки (+ xlMedium - толстая) (+ xlThin - тонкая)
var xlSlantDashDot          :Integer=13;    -- LineStyle - сплошная с двумя штрихами (+ xlMedium - толстая) (+ xlThin - тонкая)

var xlHairline              :Integer=1;     -- Weight - Толщина: тонкая точками
var xlThin                  :Integer=2;     -- Weight - Толщина: тонкая
var xlMedium                :Integer=-4138; -- Weight - Толщина: средняя
var xlThick                 :Integer=4;     -- Weight - Толщина: толстая

var xlGeneral               :Integer=1;     -- HorizontalAlignment: по значению
var xlLeft                  :Integer=-4131; -- HorizontalAlignment: по левому краю (отступ) {свойство IndentLevel}
var xlRight                 :Integer=-4152; -- HorizontalAlignment: по правому краю (отступ) {свойство IndentLevel}
var xlCenter                :Integer=-4108; -- HorizontalAlignment: по центру
var xlFill                  :Integer=5;     -- HorizontalAlignment: с заполнением (повторяющийся текст)
var xlJustify               :Integer=-4130; -- HorizontalAlignment: по ширине
var xlCenterAcrossSelection :Integer=7;     -- HorizontalAlignment: по центру выделения
var xlDistributed           :Integer=-4117; -- HorizontalAlignment: распределенный (отступ) {свойство IndentLevel}

var xlTop                   :Integer=-4160; -- VerticalAlignment: по верхнему краю
var xlBottom                :Integer=-4107; -- VerticalAlignment: по нижнему краю
--xlCenter, xlJustify, xlDistributed        -- VerticalAlignment: по центру - как и HorizontalAlignment

var xlVertical              :Integer=-4166; -- Orientation: вертикальнйы текст, или число от 1 до 90 поворот текста вверх (если с минусом, то вниз)
var xlSolid                 :Integer=1;     -- Pattern - заливка сплошная
var xlAutomatic             :Integer=-4105;
var xlNone                  :Integer=-4142; -- нет аттрибута

var xlColorBlack            :Integer=0;
var xlColorWhite            :Integer=16777215;

var xlDecimalSeparator      :Integer=3;
var xlThousandsSeparator    :Integer=4;
var msoLanguageIDUI         :Integer=2;

-- Основная ведомость

тНФАКОД[]    :String;
тНФАИМЯ[]    :String;
тНФАЕДИ[]    :String;
тНФАУЧН[]    :String;
тНФАИНВ[]    :String;
тДАТЭКС[]    :String;
тНФАИСТ[]    :String;
тНФАКБК[]    :String;
тНФАСЧТ[]    :String;
тМОЛКОД[]    :String;
тМОЛИМЯ[]    :String;
тМХЭКОД[]    :String;
тМХЭИМЯ[]    :String;
тКОЛНФА[]    :Numeric;
тСУМБАЛ[]    :Numeric;
тСУМАМТ[]    :Numeric;
тСУМОСТ[]    :Numeric;
тSRTFLD[]    :String;
тНФАГРК[]    :String;
тНФАГРИ[]    :String;
тUSEЦЕН[]    :Logical;

итгСУМБАЛвед :Numeric;
итгСУМАМТвед :Numeric;
итгСУМОСТвед :Numeric;

-- ИТОГОВЫЕ ТАБЛИЦЫ
-- ### таблица 1 и 4 ###
иtxt_amt[]   :String;
иtxt_ost[]   :String;
иСЧТСкод[]   :String;
иСЧТСбалБ[]  :Numeric;     вСЧТСбалБ  :Numeric;
иСЧТСамтБ[]  :Numeric;     вСЧТСамтБ  :Numeric;
иСЧТСостБ[]  :Numeric;     вСЧТСостБ  :Numeric;
иСЧТСбалВ[]  :Numeric;     вСЧТСбалВ  :Numeric;
иСЧТСамтВ[]  :Numeric;     вСЧТСамтВ  :Numeric;
иСЧТСостВ[]  :Numeric;     вСЧТСостВ  :Numeric;
иСЧТСбалИ[]  :Numeric;     вСЧТСбалИ  :Numeric;
иСЧТСамтИ[]  :Numeric;     вСЧТСамтИ  :Numeric;
иСЧТСостИ[]  :Numeric;     вСЧТСостИ  :Numeric;
иСЧТСзаб[]   :Numeric;     вСЧТСзаб   :Numeric;
иСЧТСвсг[]   :Numeric;     вСЧТСвсг   :Numeric;
--
иСЧТбалГР3_Б[] :Numeric;     вСЧТбалГР3_Б :Numeric;
иСЧТамтГР3_Б[] :Numeric;     вСЧТамтГР3_Б :Numeric;
иСЧТостГР3_Б[] :Numeric;     вСЧТостГР3_Б :Numeric;
иСЧТбалГР2_Б[] :Numeric;     вСЧТбалГР2_Б :Numeric;
иСЧТамтГР2_Б[] :Numeric;     вСЧТамтГР2_Б :Numeric;
иСЧТостГР2_Б[] :Numeric;     вСЧТостГР2_Б :Numeric;
иСЧТбалГР1_Б[] :Numeric;     вСЧТбалГР1_Б :Numeric;
иСЧТбалГР3_В[] :Numeric;     вСЧТбалГР3_В :Numeric;
иСЧТамтГР3_В[] :Numeric;     вСЧТамтГР3_В :Numeric;
иСЧТостГР3_В[] :Numeric;     вСЧТостГР3_В :Numeric;
иСЧТбалГР2_В[] :Numeric;     вСЧТбалГР2_В :Numeric;
иСЧТамтГР2_В[] :Numeric;     вСЧТамтГР2_В :Numeric;
иСЧТостГР2_В[] :Numeric;     вСЧТостГР2_В :Numeric;
иСЧТбалГР1_В[] :Numeric;     вСЧТбалГР1_В :Numeric;
иСЧТбалГР3_И[] :Numeric;     вСЧТбалГР3_И :Numeric;
иСЧТамтГР3_И[] :Numeric;     вСЧТамтГР3_И :Numeric;
иСЧТостГР3_И[] :Numeric;     вСЧТостГР3_И :Numeric;
иСЧТбалГР2_И[] :Numeric;     вСЧТбалГР2_И :Numeric;
иСЧТамтГР2_И[] :Numeric;     вСЧТамтГР2_И :Numeric;
иСЧТостГР2_И[] :Numeric;     вСЧТостГР2_И :Numeric;
иСЧТбалГР1_И[] :Numeric;     вСЧТбалГР1_И :Numeric;
-- ### таблица 2 ###
иСЧТБкод[]   :String; 
иСЧТБбалБ[]  :Numeric;     вСЧТБбалБ  :Numeric;
иСЧТБамтБ[]  :Numeric;     вСЧТБамтБ  :Numeric;
иСЧТБостБ[]  :Numeric;     вСЧТБостБ  :Numeric;
иСЧТБбалВ[]  :Numeric;     вСЧТБбалВ  :Numeric;
иСЧТБамтВ[]  :Numeric;     вСЧТБамтВ  :Numeric;
иСЧТБостВ[]  :Numeric;     вСЧТБостВ  :Numeric;
иСЧТБбалИ[]  :Numeric;     вСЧТБбалИ  :Numeric;
иСЧТБамтИ[]  :Numeric;     вСЧТБамтИ  :Numeric;
иСЧТБостИ[]  :Numeric;     вСЧТБостИ  :Numeric;
-- ### таблица 3 ###
иФКРБкод[]   :String;
иСЧТФбалБ[]  :Numeric;     вСЧТФбалБ  :Numeric;
иСЧТФамтБ[]  :Numeric;     вСЧТФамтБ  :Numeric;
иСЧТФостБ[]  :Numeric;     вСЧТФостБ  :Numeric;
иСЧТФбалВ[]  :Numeric;     вСЧТФбалВ  :Numeric;
иСЧТФамтВ[]  :Numeric;     вСЧТФамтВ  :Numeric;
иСЧТФостВ[]  :Numeric;     вСЧТФостВ  :Numeric;
иСЧТФбалИ[]  :Numeric;     вСЧТФбалИ  :Numeric;
иСЧТФамтИ[]  :Numeric;     вСЧТФамтИ  :Numeric;
иСЧТФостИ[]  :Numeric;     вСЧТФостИ  :Numeric;

GRPBUF[]         :String; -- Группы НФА (для вывода)
GRPDAT[]         :String; -- Группы НФА (данные)
GRPKEY[]         :String; -- Группы НФА (системная инфа)

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

Proc Очистить;
 ClearVariable(ГРП);
 ClearVariable(USE);
 ClearVariable(Buf);
 ClearVariable(Txt);
 ClearVariable(BufInt);
 ClearVariable(aAna);
 ClearVariable(BufMsk);
 ClearVariable(BufStr);
 ClearVariable(KeyMsk);
 ClearVariable(KeyStr);
 ClearVariable(BufFlag);
 --
 ClearVariable(bindVOC);
 ClearVariable(bindINT);
 --
 ClearVariable(СтрокиArНФА);
 ClearVariable(СтрокиArUSR);
 --
 ClearVariable(RLSНФА);
 ClearVariable(REFНФА);
 --
 ClearVariable(LSTUNQ);
 ClearVariable(LSTСУМ);
 ClearVariable(LSTКОЛ);
 ClearVariable(LSTИСТ);
 ClearVariable(LSTКБК);
 ClearVariable(LSTСЧ6);
 ClearVariable(LSTНФА);
 ClearVariable(LSTИНВ);
 ClearVariable(LSTМОЛ);
 ClearVariable(LSTМХЭ);
 ClearVariable(LSTЮЗР);
 ClearVariable(LSTЦЕН);
 --
 ClearVariable(UsrFldSRT);
 ClearVariable(HdrFldSRT);
 ClearVariable(HdrFldКОД);
 ClearVariable(HdrFldИМЯ);
end;

Proc ОчиститьГРПНФА;
 ClearVariable(GRPBUF); ClearVariable(GRPDAT); ClearVariable(GRPKEY);
end;

Proc ОчиститьОформление;
var OffsetCol, ii :Integer;
 OffsetCol=1;
 СекцWorkДТ.RowsCount=1; 
 СекцWorkДТ.Row(1, RowVisible, False);
 СекцWorkДТ.CellLinks(OffsetCol+1, 1, -1, -1);
 for ii=1 to 11 do
   СекцWorkДТ.Cell(1, OffsetCol+ii,  CellContents, "", True);
   СекцWorkДТ.Cell(1, OffsetCol+ii,  CellFontStyle, 0);
   СекцWorkДТ.Cell(1, OffsetCol+ii,  CellFontSize,  8);
   СекцWorkДТ.Cell(1, OffsetCol+ii,  CellFontColor, coBlack);
   СекцWorkДТ.Cell(1, OffsetCol+ii,  CellBgColor,   coTransparent);
   СекцWorkДТ.Cell(1, OffsetCol+ii,  CellAlignment, 2);
   СекцWorkДТ.Cell(1, OffsetCol+ii,  CellBorder, "1,1,1,1");
   СекцWorkДТ.Cell(1, OffsetCol+ii,  CellWrap, True);
 od;
 СекцWorkДТ.Row(1, RowVisible, True);
end;

Proc ОчиститьТаблицу;
 ClearVariable(Позиции);
 ClearVariable(тНФАКОД);
 ClearVariable(тНФАИМЯ);
 ClearVariable(тНФАЕДИ);
 ClearVariable(тНФАУЧН);
 ClearVariable(тНФАИНВ);
 ClearVariable(тДАТЭКС);
 ClearVariable(тНФАИСТ);
 ClearVariable(тНФАКБК);
 ClearVariable(тНФАСЧТ);
 ClearVariable(тМОЛКОД);
 ClearVariable(тМОЛИМЯ);
 ClearVariable(тМХЭКОД);
 ClearVariable(тМХЭИМЯ);
 ClearVariable(тКОЛНФА);
 ClearVariable(тСУМБАЛ);
 ClearVariable(тСУМАМТ);
 ClearVariable(тСУМОСТ);
 ClearVariable(тSRTFLD);
 ClearVariable(тНФАГРК);
 ClearVariable(тНФАГРИ);
 ClearVariable(тUSEЦЕН);
 ОчиститьОформление;
end;


Proc ОчиститьТаблицуN1иN4;

 ClearVariable(СтрокиТ1Т4);
 ClearVariable(иСЧТСкод);
 ClearVariable(иtxt_amt);
 ClearVariable(иtxt_ost);

 ClearVariable(иСЧТСбалБ);      ClearVariable(вСЧТСбалБ);
 ClearVariable(иСЧТСамтБ);      ClearVariable(вСЧТСамтБ);
 ClearVariable(иСЧТСостБ);      ClearVariable(вСЧТСостБ);
 ClearVariable(иСЧТСбалВ);      ClearVariable(вСЧТСбалВ);
 ClearVariable(иСЧТСамтВ);      ClearVariable(вСЧТСамтВ);
 ClearVariable(иСЧТСостВ);      ClearVariable(вСЧТСостВ);
 ClearVariable(иСЧТСбалИ);      ClearVariable(вСЧТСбалИ);
 ClearVariable(иСЧТСамтИ);      ClearVariable(вСЧТСамтИ);
 ClearVariable(иСЧТСостИ);      ClearVariable(вСЧТСостИ);
 ClearVariable(иСЧТСзаб) ;      ClearVariable(вСЧТСзаб) ;
 ClearVariable(иСЧТСвсг) ;      ClearVariable(вСЧТСвсг) ;

 ClearVariable(иСЧТбалГР3_Б);   ClearVariable(вСЧТбалГР3_Б);
 ClearVariable(иСЧТамтГР3_Б);   ClearVariable(вСЧТамтГР3_Б);
 ClearVariable(иСЧТостГР3_Б);   ClearVariable(вСЧТостГР3_Б);
 ClearVariable(иСЧТбалГР2_Б);   ClearVariable(вСЧТбалГР2_Б);
 ClearVariable(иСЧТамтГР2_Б);   ClearVariable(вСЧТамтГР2_Б);
 ClearVariable(иСЧТостГР2_Б);   ClearVariable(вСЧТостГР2_Б);
 ClearVariable(иСЧТбалГР1_Б);   ClearVariable(вСЧТбалГР1_Б);
 ClearVariable(иСЧТбалГР3_В);   ClearVariable(вСЧТбалГР3_В);
 ClearVariable(иСЧТамтГР3_В);   ClearVariable(вСЧТамтГР3_В);
 ClearVariable(иСЧТостГР3_В);   ClearVariable(вСЧТостГР3_В);
 ClearVariable(иСЧТбалГР2_В);   ClearVariable(вСЧТбалГР2_В);
 ClearVariable(иСЧТамтГР2_В);   ClearVariable(вСЧТамтГР2_В);
 ClearVariable(иСЧТостГР2_В);   ClearVariable(вСЧТостГР2_В);
 ClearVariable(иСЧТбалГР1_В);   ClearVariable(вСЧТбалГР1_В);
 ClearVariable(иСЧТбалГР3_И);   ClearVariable(вСЧТбалГР3_И);
 ClearVariable(иСЧТамтГР3_И);   ClearVariable(вСЧТамтГР3_И);
 ClearVariable(иСЧТостГР3_И);   ClearVariable(вСЧТостГР3_И);
 ClearVariable(иСЧТбалГР2_И);   ClearVariable(вСЧТбалГР2_И);
 ClearVariable(иСЧТамтГР2_И);   ClearVariable(вСЧТамтГР2_И);
 ClearVariable(иСЧТостГР2_И);   ClearVariable(вСЧТостГР2_И);
 ClearVariable(иСЧТбалГР1_И);   ClearVariable(вСЧТбалГР1_И);

end;

Proc ОчиститьТаблицуN2;
 ClearVariable(СтрокиТ2);
 ClearVariable(иСЧТБкод);
 ClearVariable(иСЧТБбалБ);   ClearVariable(вСЧТБбалБ);
 ClearVariable(иСЧТБамтБ);   ClearVariable(вСЧТБамтБ);
 ClearVariable(иСЧТБостБ);   ClearVariable(вСЧТБостБ);
 ClearVariable(иСЧТБбалВ);   ClearVariable(вСЧТБбалВ);
 ClearVariable(иСЧТБамтВ);   ClearVariable(вСЧТБамтВ);
 ClearVariable(иСЧТБостВ);   ClearVariable(вСЧТБостВ);
 ClearVariable(иСЧТБбалИ);   ClearVariable(вСЧТБбалИ);
 ClearVariable(иСЧТБамтИ);   ClearVariable(вСЧТБамтИ);
 ClearVariable(иСЧТБостИ);   ClearVariable(вСЧТБостИ);
end;

Proc ОчиститьТаблицуN3;
 ClearVariable(СтрокиТ3);
 ClearVariable(иФКРБкод);
 ClearVariable(иСЧТФбалБ);   ClearVariable(вСЧТФбалБ);
 ClearVariable(иСЧТФамтБ);   ClearVariable(вСЧТФамтБ);
 ClearVariable(иСЧТФостБ);   ClearVariable(вСЧТФостБ);
 ClearVariable(иСЧТФбалВ);   ClearVariable(вСЧТФбалВ);
 ClearVariable(иСЧТФамтВ);   ClearVariable(вСЧТФамтВ);
 ClearVariable(иСЧТФостВ);   ClearVariable(вСЧТФостВ);
 ClearVariable(иСЧТФбалИ);   ClearVariable(вСЧТФбалИ);
 ClearVariable(иСЧТФамтИ);   ClearVariable(вСЧТФамтИ);
 ClearVariable(иСЧТФостИ);   ClearVariable(вСЧТФостИ);
end;

Proc ОчиститьТаблицуN5;
var OffsetCol, ii :Integer;
 ClearVariable(СтрокиТ5);
 OffsetCol=1;
 СекцТ5Д.RowsCount=1; 
 СекцТ5Д.Row(1, RowVisible, False);
 for ii=1 to 4 do
   СекцТ5Д.Cell(1, OffsetCol+ii,  CellContents, "", True);
   СекцТ5Д.Cell(1, OffsetCol+ii,  CellFontStyle, 0);
   СекцТ5Д.Cell(1, OffsetCol+ii,  CellFontSize,  8);
   СекцТ5Д.Cell(1, OffsetCol+ii,  CellFontColor, coBlack);
   СекцТ5Д.Cell(1, OffsetCol+ii,  CellBgColor,   coTransparent);
   СекцТ5Д.Cell(1, OffsetCol+ii,  CellAlignment, 2);
   СекцТ5Д.Cell(1, OffsetCol+ii,  CellBorder, "1,1,1,1");
   СекцТ5Д.Cell(1, OffsetCol+ii,  CellWrap, True);
 od;
 СекцТ5Д.Row(1, RowVisible, True);
end;

Proc ОчиститьИтоги;
 ОчиститьТаблицуN1иN4;
 ОчиститьТаблицуN2;
 ОчиститьТаблицуN3;
 ОчиститьТаблицуN5;
end;

Proc SetFLGСлужИнф;
var Flag :Logical;
 Flag=False;
 if flgПечСлужИнф and LengthOfArray(СлужКорИнфо)>0: Flag=True; fi;
 flgСлужИнф=Flag;
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 name :String;
 name=AsString(Template.Field);
 if name="ДАТОПЕР": ^ДАТОПЕР; fi;
end;

Proc SetDate(Value:Date); -- устанавливаем в заданном поле дату; Value - значение даты, которое необходимо присвоить
var name :String;
 name=AsString(Template.Field);
 if name="ДАТОПЕР": ДАТОПЕР=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;

Func ЗаменитьСимволСтрокиВпозиции(valStr:String; repChar:String; repPos:Integer) :String;
var tmpFirst, tmpLast, out :String;
var len :Integer;
 tmpFirst=""; tmpLast=""; out="";
 len=Length(valStr);
 if repPos<1: repPos=1; fi;
 if repPos>len or repChar="" or valStr="": ^valStr; fi;
 repChar=SubStr(repChar, 1, 1);
 if repPos>1: tmpFirst=SubStr(valStr, 1, repPos-1); else tmpFirst=""; fi;
 if repPos<len: tmpLast=SubStr(valStr, repPos+1, len-repPos); else tmpLast=""; fi;
 out=tmpFirst+repChar+tmpLast;
 ^out;
end;

Func УдалитьРазделитель(Value:String) :String;
var nn :Integer;
 nn=Pos("#", Value);
 while nn>0 do Value=ЗаменитьСимволСтрокиВпозиции(Value, "_", nn); nn=Pos("#", Value); od;
 nn=Pos("|", Value);
 while nn>0 do Value=ЗаменитьСимволСтрокиВпозиции(Value, "_", nn); nn=Pos("|", Value); od;
 nn=Pos(Chr(169), Value);
 while nn>0 do Value=ЗаменитьСимволСтрокиВпозиции(Value, "_", nn); nn=Pos(Chr(169), Value); od;
 ^Value;
end;

Func TimeToHMSstring(valTime :Integer) :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=Str(ihh); shh=RepStr('0', 2-Length(shh))+shh;
 smm=Str(imm); smm=RepStr('0', 2-Length(smm))+smm;
 scc=Str(icc); scc=RepStr('0', 2-Length(scc))+scc;
 ^(shh+':'+smm+':'+scc);
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;

Func Цвет(r:Integer; g:Integer; b:Integer) :Integer; -- цвет по стандарту ТБ 6.9
 ^(256*256*b+256*g+r);
end;

Func Mod(X:Integer; Y:Integer) :Integer; -- возвращает остаток от деления (X - делимое; Y - делитель)
 ^Int(X-Y*Int(Trunc(X/Y)));
end;

Func ЧетныйИндекс(Iter:Integer) :Logical;
 Iter=Abs(Iter);
 if Iter=1: ^False;
 |  Iter=2: ^True;
 |  Iter>2: if Mod(Iter, 2)=0: ^True; else ^False; fi;
 else ^False;
 fi;
end;

Proc ValidateИтогиSection(СкрытьТаблицу:Logical);
var FF :Logical;
 FF=if(СтрокиТ1Т4>0 and not СкрытьТаблицу, True, False);
 СекцТ1З.Visible=FF; СекцТ1Д.Visible=FF; СекцТ1И.Visible=FF;
 СекцТ4З.Visible=FF; СекцТ4Д.Visible=FF; СекцТ4И.Visible=FF;
 FF=if(СтрокиТ2>0   and not СкрытьТаблицу, True, False);
 СекцТ2З.Visible=FF; СекцТ2Д.Visible=FF; СекцТ2И.Visible=FF;
 FF=if(СтрокиТ3>0   and not СкрытьТаблицу, True, False);
 СекцТ3З.Visible=FF; СекцТ3Д.Visible=FF; СекцТ3И.Visible=FF;
 FF=if(СтрокиТ5>0   and not СкрытьТаблицу, True, False);
 СекцТ5З.Visible=FF; СекцТ5Д.Visible=FF; СекцТ5И.Visible=FF;
end;

Proc ValidateВедомостьSection(СкрытьТаблицу:Logical);
var FF :Logical;
 if Позиции>0 and not СкрытьТаблицу: FF=True; else FF=False; fi;
 СекцWorkЗТ.Visible=FF;
 СекцWorkДТ.Visible=FF;
 СекцWorkИТ.Visible=FF;
   btnExcel.Enabled=FF;
end;

Proc ValidateОтчетSection;
 ValidateВедомостьSection(False);
 ValidateИтогиSection(False);
end;

Proc ОчисткаОтчета;
 Очистить;
 ОчиститьТаблицу;
 ОчиститьИтоги;
 ValidateОтчетSection;
 TimeCreationRep="";
 ClearVariable(СлужКорИнфо);
 SetFLGСлужИнф;
end;

Proc ValidateSection(СкрытьУсловия:Logical);
var Flag :Logical;
 ShowProgress(1, "Работаем...");
 Try
   Flag = not СкрытьУсловия;
   --
   if not Flag: flgНстрВнВидОтч=False; cbНстрВнВидОтч.State=False; fi;
   --
   СекцШапка.Visible=Flag;
   СекцГрупп.Visible=Flag;
   СекцУслов.Visible=Flag;
   СекцFСорт.Visible=Flag;
   --
   btnРасчет.Visible=Flag; cbНстрВнВидОтч.Visible=Flag;
   --
   Bevel0.Visible=Flag; Bevel3.Visible=Flag; cbНФАамт.Visible=Flag; rbtAccВсе.Visible=Flag; rbtИстФинВсе.Visible=Flag; rbtФтрПрв.Visible=Flag; rbtМОЛМХЭ.Visible=Flag;
   Bevel1.Visible=Flag; Bevel4.Visible=Flag; cbНФА100.Visible=Flag; rbtAccБал.Visible=Flag; rbtИстФинБюд.Visible=Flag; rbtФтрСтр.Visible=Flag; rbtМХЭМОЛ.Visible=Flag;
   Bevel2.Visible=Flag; Bevel5.Visible=Flag; cbНФАбез.Visible=Flag; rbtAccЗаб.Visible=Flag; rbtИстФинВне.Visible=Flag;
   --
   ValidateОтчетSection;
   --
 Finally
   CloseProgress;
 end;
end;

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

Func ГруппаТекст(nameField:String) :String;
 if nameField="СЧТ": ^"Счет (синтетический)";
 |  nameField="КБК": ^"КБК счета";
 |  nameField="МОЛ": ^"Материальноответственное лицо";
 |  nameField="МХЭ": ^"Местонахождение";
 |  nameField="ГРП": ^"Группы НФА";
 else ^"";
 fi;
end;

Proc ПорядокГрупп_СформироватьМеню;
var ii, kk, num :Integer;
var tmp :String;
 ClearVariable(Buf); ClearVariable(ГРП);
 Buf[1]="*Выполнено*";
 kk=2;
 num=WordsCount(Иерархия, " ");
 for ii=1 to num do
   tmp=ExtractWord(ii, Иерархия, " ");
   ГРП[ii]=tmp;
   Buf[kk]   = "на уровень ВЫШЕ - "+ГруппаТекст(tmp);
   Buf[kk+1] = "на уровень НИЖЕ - "+ГруппаТекст(tmp);
   kk=kk+2;
 od;
end;

Proc ПорядокГрупп_ПоменятьМестами(Iter:Integer; Вверх:Logical);
var ii, num :Integer;
var Value :String;
 Value="";
 if Вверх:
   if Iter=1:
     Message("Это первая строчка.^MПередвинуть выше строчку нельзя!", mtInformation);
   else
     Value=ГРП[Iter-1]; ГРП[Iter-1]=ГРП[Iter]; ГРП[Iter]=Value;
   fi;
 else
   if Iter=LengthOfArray(ГРП):
     Message("Это последняя строчка.^MПередвинуть ниже строчку нельзя!", mtInformation);
   else
     Value=ГРП[Iter+1]; ГРП[Iter+1]=ГРП[Iter]; ГРП[Iter]=Value;
   fi;
 fi;
 -- Формируем новый порядок полей групп
 Иерархия="";
 num=LengthOfArray(ГРП);
 for ii=1 to num do Иерархия=Объединить(Иерархия, ГРП[ii], " "); od;
 ПорядокГрупп_СформироватьМеню;
end;

Proc ПорядокГрупп_ПоменятьМестамиМеню;
var num, kk, jj :Integer;
var Flag :Logical;
 if Иерархия="":
   Message("Нет ни одной группы, применяемой^Mпри построении таблицы!", mtError);
   Template.Field="flgСЧТ_";
   Exit;
 fi;
 num=WordsCount(Иерархия, " ");
 if num=1: Message("Обнаружена одна группа.^MПередвигать нечего!", mtInformation); Exit; fi;
 ПорядокГрупп_СформироватьМеню;
 num=0; jj=1;
 while num<>1 do
   num=Alternate("Выберите действие...", Buf, -1, jj, 12);
   if num>1:
     Flag=ЧетныйИндекс(num);
     kk=Int(Trunc(num/2));
     ПорядокГрупп_ПоменятьМестами(kk, Flag);
     if Flag: jj=num-2; if jj<2: jj=2; fi; else jj=num+2; fi;
   fi;
 od;
end;

Func DeleteWordInStr(sStr:String; dStr:String; Sep:String) :String;
var out :String;
var pp, len :Integer;
 out="";
 len=Length(dStr);
 if len=0: ^sStr; fi;
 pp=Pos(Up(dStr), Up(sStr));
 if pp=0: ^sStr; fi;
 if pp>1: pp=pp-1; fi;
 len=len+1;
 out=Delete(sStr, pp, len);
 ^out;
end;

Proc ПорядокГрупп_СобратьГруппы;
var num, ii, pp :Integer;
 ClearVariable(ГРП); ClearVariable(USE);
 -- узнаем текущие настройки
 ГРП[01] = "СЧТ";   USE[01] = flgСЧТ;
 ГРП[02] = "КБК";   USE[02] = flgКБК;
 ГРП[03] = "МОЛ";   USE[03] = flgМОЛ;
 ГРП[04] = "МХЭ";   USE[04] = flgМХЭ;
 ГРП[05] = "ГРП";   USE[05] = flgГРП;
 -- синхронизируем порядок группировки полей с настройками
 num=LengthOfArray(ГРП);
 if num>0:
   for ii=1 to num do
     pp=Pos(ГРП[ii], Иерархия);
     if USE[ii] =2 and pp<1: Иерархия=Объединить(Иерархия, ГРП[ii], " ");
     |  USE[ii]<>2 and pp>0: Иерархия=DeleteWordInStr(Иерархия, ГРП[ii], " ");
     fi;
   od;
 else
   Иерархия="";
 fi;
end;

Proc ПорядокГрупп_ОтобразитьГруппыТаблицы;
var num, kk, ii :Integer;
 num=WordsCount(Иерархия, " ");
 if num>0:
    for ii=1 to num do
      СекцГрупп.Cell(ii+1, 5, CellContents, Str(ii)+" уровень");
      СекцГрупп.Cell(ii+1, 6, CellContents, ГруппаТекст(ExtractWord(ii, Иерархия, " ")));
    od;
 else
    num=1;
    СекцГрупп.Cell(num+1, 5, CellContents, "", True);
    СекцГрупп.Cell(num+1, 6, CellContents, "нет групп для разбиения на таблицы");
 fi;
 kk=5-num;
 if kk>0:
    for ii=1 to kk do
      СекцГрупп.Cell(ii+1+num, 5, CellContents, "", True);
      СекцГрупп.Cell(ii+1+num, 6, CellContents, "", True);
    od;
 fi;
end;

Proc ПорядокГрупп_ПеречитатьГруппы;
 ПорядокГрупп_СобратьГруппы;
 ПорядокГрупп_ОтобразитьГруппыТаблицы;
end;

Func ФлагГруппыОтчета(Field:String; PrevValue:Integer) :Integer;
var num :Integer;
var tmp :String;
 ClearVariable(Buf);
 tmp=ГруппаТекст(Field);
 Buf[1]="Не выводить '" +tmp+"' в отчет";
 Buf[2]="Группировать '"+tmp+"' по строкам";
 Buf[3]="Группировать '"+tmp+"' иерархично";
 num=0;
 while num=0 do num=Alternate("Выберите способ группировки параметра...", Buf, -1, PrevValue+1, 12); od;
 ClearVariable(Buf);
 ^(num-1);
end;

Func ФлагГруппыГРПНФА(Field:String; PrevValue:Integer) :Integer;
var num, kk :Integer;
var tmp :String;
 ClearVariable(Buf);
 tmp=ГруппаТекст(Field);
 Buf[1]="Не выводить '" +tmp+"' в отчет";
 Buf[2]="Группировать '"+tmp+"' иерархично";
 num=0;
 if PrevValue=2: kk=2; else kk=1; fi;
 while num=0 do num=Alternate("Выберите способ группировки параметра...", Buf, -1, kk, 12); od;
 ClearVariable(Buf);
 if num=2: ^2; else ^0; fi;
end;


Proc ПроверитьПолеСортировки;
var ii :Integer;
 ii=0;
 ClearVariable(Buf);
 ii=ii+1; Buf[ii]="тНФАКОД";
 ii=ii+1; Buf[ii]="тНФАИМЯ";
 ii=ii+1; Buf[ii]="тНФАУЧН";
 ii=ii+1; Buf[ii]="тНФАИНВ";
 if flgМОЛ=1:
   ii=ii+1; Buf[ii]="тМОЛКОД";
   ii=ii+1; Buf[ii]="тМОЛИМЯ";
 fi;
 if flgМХЭ=1:
   ii=ii+1; Buf[ii]="тМХЭКОД";
   ii=ii+1; Buf[ii]="тМХЭИМЯ";
 fi;
 if flgСЧТ=1: ii=ii+1; Buf[ii]="тНФАСЧТ"; fi;
 if flgКБК=1: ii=ii+1; Buf[ii]="тНФАКБК"; fi;
 --
 ii=SearchInArray(Buf, fldСОРТкод, False, 1);
 if ii=-1: fldСОРТкод=""; fldСОРТимя=""; fi;
 --
 if fldСОРТкод="": fldСОРТкод="тНФАКОД"; fldСОРТимя="... коду НФА"; fi;
end;

Proc ФлагиПараметровГруппировки(refField:String; onExit:Logical);
var StoreINT, NewValue :Integer;
var FieldFLG :String;
var SaveValue :Logical;
 SaveValue=False;
 FieldFLG=SubStr(refField, 1, Length(refField)-1);
 --
 StoreINT=GetVariableI(FieldFLG);
 if onExit:
   NewValue=0;
 else
   if FieldFLG="flgГРП": NewValue=ФлагГруппыГРПНФА(FieldFLG, StoreINT); else NewValue=ФлагГруппыОтчета(FieldFLG, StoreINT); fi;
 fi;
 --
 if NewValue<>StoreINT: if ОтменитьИзмененияУсловийОтчета: NewValue=StoreINT; else SaveValue=True; fi; fi;
 if SaveValue:
   PutVariableI(FieldFLG, NewValue);
   ПорядокГрупп_ПеречитатьГруппы;
   ПроверитьПолеСортировки;
 fi;
end;

Proc Счета_МассивФлаговVПеременные(FTRсчета:Integer);
var Value :String;
var ii :Integer;
 Value="";
 if FTRсчета=2:
   -- 11111111100000000
   for ii=1 to 09 do Value=Value+if(BufFlag[ii], "1", "0"); od;
   флагиACC=Value+"00000000";
 |  FTRсчета=3:
   -- 00000000011111111
   for ii=1 to 08 do Value=Value+if(BufFlag[ii], "1", "0"); od;
   флагиACC="000000000"+Value;
 else
   -- 11111111111111111
   for ii=1 to 17 do Value=Value+if(BufFlag[ii], "1", "0"); od;
   флагиACC=Value;
 fi;
end;

Proc Счета_ПеременныеVМассивФлагов(FTRсчета:Integer);
var Value :String;
var ii :Integer;
 if FTRсчета=2:
   -- 11111111100000000
   Value=SubStr(флагиACC, 01, 09);
   for ii=1 to 09 do BufFlag[ii]=if(SubStr(Value, ii, 1)="1", True, False); od;
 |  FTRсчета=3:
   -- 00000000011111111
   Value=SubStr(флагиACC, 10, 08);
   for ii=1 to 08 do BufFlag[ii]=if(SubStr(Value, ii, 1)="1", True, False); od;
 else
   -- 11111111111111111
   Value=флагиACC;
   for ii=1 to 17 do BufFlag[ii]=if(SubStr(Value, ii, 1)="1", True, False); od;
 fi;
end;

Proc Счета_СоздатьМассивВидовНФА(FTRсчета:Integer);
 if Length(флагиACC)<>17: флагиACC="00000000000000000"; fi;
 ClearVariable(BufMsk); ClearVariable(BufStr); ClearVariable(BufFLAG);
 -- XXXXXXXXYZZZZZZZZ
 -- 12345678901234567
 if FTRсчета=2:
   -- 11111111100000000
   BufMsk[01] = "101.?1"; BufStr[01] = "жилые помещения";
   BufMsk[02] = "101.?2"; BufStr[02] = "нежилые помещения";
   BufMsk[03] = "101.?3"; BufStr[03] = "сооружения";
   BufMsk[04] = "101.?4"; BufStr[04] = "машины и оборудование";
   BufMsk[05] = "101.?5"; BufStr[05] = "транспортные средства";
   BufMsk[06] = "101.?6"; BufStr[06] = "производственный и хозяйственный инвентарь";
   BufMsk[07] = "101.?7"; BufStr[07] = "библиотечный фонд";
   BufMsk[08] = "101.?8"; BufStr[08] = "прочие основные средства";
   BufMsk[09] = "102.?0"; BufStr[09] = "нематериальные активы";
 |  FTRсчета=3:
   -- 00000000011111111
   BufMsk[01] = "105.?1"; BufStr[01] = "медикаменты и перевязочные средства";
   BufMsk[02] = "105.?2"; BufStr[02] = "продукты питания";
   BufMsk[03] = "105.?3"; BufStr[03] = "горюче-смазочные материалы";
   BufMsk[04] = "105.?4"; BufStr[04] = "строительные материалы";
   BufMsk[05] = "105.?5"; BufStr[05] = "мягкий инвентарь";
   BufMsk[06] = "105.?6"; BufStr[06] = "прочие материальные запасы";
   BufMsk[07] = "105.?7"; BufStr[07] = "готовая продукция";
   BufMsk[08] = "105.?8"; BufStr[08] = "товары";
 else
   -- 11111111111111111
   BufMsk[01] = "101.?1"; BufStr[01] = "жилые помещения";
   BufMsk[02] = "101.?2"; BufStr[02] = "нежилые помещения";
   BufMsk[03] = "101.?3"; BufStr[03] = "сооружения";
   BufMsk[04] = "101.?4"; BufStr[04] = "машины и оборудование";
   BufMsk[05] = "101.?5"; BufStr[05] = "транспортные средства";
   BufMsk[06] = "101.?6"; BufStr[06] = "производственный и хозяйственный инвентарь";
   BufMsk[07] = "101.?7"; BufStr[07] = "библиотечный фонд";
   BufMsk[08] = "101.?8"; BufStr[08] = "прочие основные средства";
   BufMsk[09] = "102.?0"; BufStr[09] = "нематериальные активы";
   BufMsk[10] = "105.?1"; BufStr[10] = "медикаменты и перевязочные средства";
   BufMsk[11] = "105.?2"; BufStr[11] = "продукты питания";
   BufMsk[12] = "105.?3"; BufStr[12] = "горюче-смазочные материалы";
   BufMsk[13] = "105.?4"; BufStr[13] = "строительные материалы";
   BufMsk[14] = "105.?5"; BufStr[14] = "мягкий инвентарь";
   BufMsk[15] = "105.?6"; BufStr[15] = "прочие материальные запасы";
   BufMsk[16] = "105.?7"; BufStr[16] = "готовая продукция";
   BufMsk[17] = "105.?8"; BufStr[17] = "товары";
 fi;
end;

Proc Счета_ОбновитьМеню(Iter:Integer; MaxK:Integer);
 if Iter>MaxK: Buf[Iter]="КОД$"+BufMsk[Iter-MaxK]+"-->> "+if(BufFlag[Iter-MaxK], "[ВКЛ.]: ", "[ВЫКЛ.]: ")+BufStr[Iter-MaxK]; fi;
end;

Proc Счета_ФлагиВТекст(FTRсчета:Integer);
var num, ii, kk, j1, j2, j5 :Integer;
var res, res101, res102, res105 :String;
 num=LengthOfArray(BufFlag);
 kk=0; j1=0; j2=0; j5=0;
 res101=""; res102=""; res105="";
 for ii=1 to num do
   if BufFlag[ii]:
     kk=kk+1;
     if FTRсчета=2:
       if Match(BufMsk[ii], "101.??"): j1=j1+1; res101=res101+" "+BufMsk[ii];
       |  Match(BufMsk[ii], "102.??"): j2=j2+1; res102=res102+" "+BufMsk[ii];
       fi;
     |  FTRсчета=3:
       if Match(BufMsk[ii], "105.??"): j5=j5+1; res105=res105+" "+BufMsk[ii]; fi;
     else
       if Match(BufMsk[ii], "101.??"): j1=j1+1; res101=res101+" "+BufMsk[ii];
       |  Match(BufMsk[ii], "102.??"): j2=j2+1; res102=res102+" "+BufMsk[ii];
       |  Match(BufMsk[ii], "105.??"): j5=j5+1; res105=res105+" "+BufMsk[ii];
       fi;
     fi;
   fi;
 od;
 res101=Trim(res101);
 res102=Trim(res102);
 res105=Trim(res105);
 if j1=8: res101="101.??"; fi; -- субсчетов 101 - 8 штук
 if j2=1: res102="102.?0"; fi; -- субсчетов 102 - 1 штук
 if j5=8: res105="105.??"; fi; -- субсчетов 105 - 8 штук
 res="";
 if FTRсчета=2:
    if kk=num: res="101.?? 102.?0"; else res=res101+" "+res102; fi;
 |  FTRсчета=3:
    if kk=num: res="105.??"; else res=res105; fi;
 else
    if kk=num: res="101.?? 102.?0 105.??"; else res=res101+" "+res102+" "+res105; fi;
 fi;
 отчСЧТ=Trim(res);
end;

Proc Счета_ОбновитьВидыНФА(FTRсчета:Integer);
 Счета_СоздатьМассивВидовНФА(FTRсчета);
 Счета_ПеременныеVМассивФлагов(FTRсчета);
 Счета_ФлагиВТекст(FTRсчета);
end;

Proc Счета_ВнешнийВид;
 Счета_ОбновитьВидыНФА(curAcc);
end;

Proc Счета_ВыборВидаНФА(FTRсчета:Integer);
var kk, MaxK, num, ii :Integer;
 ClearVariable(Buf); ClearVariable(BufMsk); ClearVariable(BufStr); ClearVariable(BufFLAG);
 MaxK=0;
 Buf[1]=Chr(149)+"-->> Отмена изменений";
 Buf[2]=Chr(169)+"-->> Утвердить изменения";
 Buf[3]=Chr(187)+Chr(043)+Chr(171)+"-->> Выделить все счета НФА";
 Buf[4]=Chr(171)+Chr(151)+Chr(187)+"-->> Сбросить все счета НФА";
 Buf[5]="КОД$-->> Счета учета НФА.";
 MaxK=LengthOfArray(Buf);
 Счета_СоздатьМассивВидовНФА(FTRсчета);
 Счета_ПеременныеVМассивФлагов(FTRсчета);
 num=LengthOfArray(BufMsk);
 for ii=1 to num do Buf[ii+MaxK]="КОД$"+BufMsk[ii]+"-->> "+if(BufFlag[ii], "[ВКЛ.]: ", "[ВЫКЛ.]: ")+BufStr[ii]; od;
 kk=0;
 while kk=0 or kk>MaxK do
   Счета_ОбновитьМеню(kk, MaxK);
   kk=AlternateTree("", Buf, -1, if(kk>MaxK, kk, MaxK), 12, "$", "Параметр", "Комментарий", -1, False);
   if kk=1:
     Exit;
   |  kk=2:
     if SearchInArray(BufFlag, True, False, 1)<1:
        Message("[Утвердить изменения]^MНет выбранных счетов!", mtWarning);
        kk=0;
     fi;
   |  kk=3:
     for ii=1 to num do BufFlag[ii]=True;  Счета_ОбновитьМеню(ii+MaxK, MaxK); od;
     kk=0;
   |  kk=4:
     for ii=1 to num do BufFlag[ii]=False; Счета_ОбновитьМеню(ii+MaxK, MaxK); od;
     kk=0;
   |  kk>MaxK:
     BufFlag[kk-MaxK]=not(BufFlag[kk-MaxK]);
   fi;
 od;
 --
 Счета_МассивФлаговVПеременные(FTRсчета);
 Счета_ФлагиВТекст(FTRсчета);
end;

Proc РазрешенЗабаланс(flgЗабаланс:Logical);
var цвFont, цвBack :Integer;
var ТЧ :Logical;
 if flgЗабаланс: цвFont=coBlack; цвBack=coTransparent; ТЧ=True; else цвFont=coWhite; цвBack=coTeal; ТЧ=False; fi;
 if ТЧ: отчКБК=""; valКБК=""; fi;
 СекцУслов.Cell(3, 3, CellFontColor, цвFont); СекцУслов.Cell(3, 3, CellBgColor, цвBack); СекцУслов.Cell(3, 3, CellReadOnly, ТЧ);
end;

Proc Счета_ВыборВидаНФАonEnter(FTRсчета:Integer);
var StoreСЧТ :String;
 StoreСЧТ=отчСЧТ;
 Счета_ВыборВидаНФА(FTRсчета);
 if отчСЧТ<>StoreСЧТ: 
   if ОтменитьИзмененияУсловийОтчета: отчСЧТ=StoreСЧТ; else keyГРП=""; отчГРП=""; namГРП=""; LastGRP_key="{0}"; LastGRP_num=0; ОчиститьГРПНФА; fi;
 fi;
 РазрешенЗабаланс(if(curБЗС<>2, True, False));
 ValidateОтчетSection;
end;

Func ПравильнаяМаскаСчетовОС(maskСчета:String) :String;
var num, ii :Integer;
var res, Value :String;
 res="";
 num=WordsCount(maskСчета, " ");
 if num>0: for ii=1 to num do res=res+"|"+"*."+ExtractWord(ii, maskСчета, " ")+"*"; od; fi;
 if SubStr(res, 1, 1)="|": res=Trim(SubStr(res, 2, 255)); fi;
 ^res;
end;

Func ИтоговаяМаскаСчета(flgИсточникФинансирования:Integer; maskСЧТ:String; maskКБК:String; useБАЛ:Logical; useЗАБ:Logical) :String;
var ИФД, maskUSEсчт, maskUSEкбк, resMask :String;
 if flgИсточникФинансирования=2: ИФД="1"; | flgИсточникФинансирования=3: ИФД="2"; else ИФД="?"; fi;
 if maskКБК<>"": maskUSEкбк=maskКБК; else maskUSEкбк="???.????.???????.???"; fi;
 if maskСЧТ<>"": maskUSEсчт=ПравильнаяМаскаСчетовОС(maskСЧТ); else maskUSEсчт="*.101.??.?10|*.102.?0.?20|*.105.??.?40"; fi;
 resMask="("+maskUSEсчт+")&("+if(useБАЛ, maskUSEкбк+"."+ИФД+".???.??.???", "")+if(useБАЛ and useЗАБ, "|", "")+if(useЗАБ, "ЗАБ.??.10?.??", "")+")";
 ^resMask;
end;

Func КБК_КБКизПроведенныхПроводок(maskСЧТ:String; StoreКБК:String) :String;
var Путь, Value :String;
var num, ii, jj :Integer;
var Отч1 :Report;
 ClearVariable(Buf);
 ShowProgress(0, "Подготовка...");
 Try
   Путь=PlanVar("НФА")+"\ОТЧЕТЫ\НФАОТЧ2007.lst";
   if not ExistFile(Путь): Message("Файл с отчетами отсутствует!", mtError); ^StoreКБК; fi;
   Try
     Отч1=RepOpen(Путь+"|По_счетам_101", maskСЧТ, "", 1.1.100, if(ДАТОПЕР>1.1.2000, ДАТОПЕР+1, ToDay+1));
     RepReset(Отч1);
     Try
       num=RepRowsCount(Отч1);
       ii=0;
       ShowProgress(num, "Отбор данных...");
       while RepNext(Отч1) do
         ii=ii+1;
         ProgressPos(ii);
         Value=RepIdent(Отч1);
         if Match(Value, "???.????.???????.???.?.???.??.???"): AddInArray(Buf, True, False, SubStr(Value, 1, 20)); fi;
       end; -- while
     Finally
       Отч1=RepClose(Отч1);
     end;
   Except
     Message("Ошибка создания отчета!", mtError);
     ^StoreКБК;
   end;
 Finally
   CloseProgress;
 end;
 num=LengthOfArray(Buf);
 if num>0:
   jj=SearchInArray(Buf, StoreКБК, True, 1);
   ii=Alternate("Выберите КБК...", Buf, -1, jj, 12);
   if ii>0: ^Buf[ii]; fi;
 else
   Message("КБК по проведенным проводкам^Mпо маске счетов '"+maskСЧТ+"' не найдено!", mtError);
   ^StoreКБК;
 fi;
 ^StoreКБК;
end;

Func ИмяЭлементаСтруктурыКБК(НомерЭлемента:Integer; ТипСтруктуры:String) :String;
--???.????.???????.??? - Глава # Подраздел # Целевая статья # Вид расходов
--???.?.??.?????.??.???? - Администратор # Группа # Подгруппа # Статья # Элемент # Программа, Подпрограмма
--???.??.??.??.??.??.???? - Администратор # Группа # Подгруппа # Статья # Подстатья # Элемент # Программа, Подпрограмма
 if ТипСтруктуры="ФКР":  ТипСтруктуры="КР"; fi;
 if ТипСтруктуры="КИФД": ТипСтруктуры="ФД"; fi;
 if ТипСтруктуры="КР":
   if НомерЭлемента=1: ^"Глава";
   |  НомерЭлемента=2: ^"Подраздел";
   |  НомерЭлемента=3: ^"Целевая статья";
   |  НомерЭлемента=4: ^"Вид расходов";
   fi;
 |  ТипСтруктуры="КД":
   if НомерЭлемента=1: ^"Администратор";
   |  НомерЭлемента=2: ^"Группа";
   |  НомерЭлемента=3: ^"Подгруппа";
   |  НомерЭлемента=4: ^"Статья";
   |  НомерЭлемента=5: ^"Элемент";
   |  НомерЭлемента=6: ^"Программа, подпрограмма";
   fi;
 |  ТипСтруктуры="ФД":
   if НомерЭлемента=1: ^"Администратор";
   |  НомерЭлемента=2: ^"Группа";
   |  НомерЭлемента=3: ^"Подгруппа";
   |  НомерЭлемента=4: ^"Статья";
   |  НомерЭлемента=5: ^"Подстатья";
   |  НомерЭлемента=6: ^"Элемент";
   |  НомерЭлемента=7: ^"Программа, подпрограмма";
   fi;
 fi;
 ^"";
end;

Proc КБК_ОбновитьМенюВсе(isMaxA:Integer; isMaxS:Integer; isResVal:String; isResMsk:String; isтипКБК:String);
var ii :Integer;
 for ii=1 to isMaxS do
   BufStr[ii]=ExtractWord(ii, isResVal, ".");
   BufMsk[ii]=ExtractWord(ii, isResMsk, ".");
   Buf[ii+isMaxA]=BufMsk[ii]+"--"+Chr(187)+" "+ИмяЭлементаСтруктурыКБК(ii, isтипКБК);
 od;
end;

Proc КБК_ОбновитьМенюЭлемент(Iter:Integer; isMaxA:Integer; isтипКБК:String);
 if Iter>isMaxA: Buf[Iter]=BufMsk[Iter-isMaxA]+"--"+Chr(187)+" "+ИмяЭлементаСтруктурыКБК(Iter-isMaxA, isтипКБК); fi;
end;

Func КБК_СформироватьМенюМасокКБК(StoreКБКMsk:String; StoreКБКVal:String; maskСЧТ:String; ModeКБК:Integer; editКБК:Logical) :String;
var MaxA, MaxS, num, ii :Integer;
var типКБК, ResVal, ResMsk, маскКБК, tmp :String;
 if ModeКБК=1: типКБК="КР";   MaxS=4; маскКБК="???.????.???????.???";
 |  ModeКБК=2: типКБК="КД";   MaxS=6; маскКБК="???.?.??.?????.??.????";
 |  ModeКБК=3: типКБК="КИФД"; MaxS=7; маскКБК="???.??.??.??.??.??.????";
 else типКБК="";
 fi;
 if типКБК="": ^StoreКБКMsk; fi;
 --
 ClearVariable(Buf); ClearVariable(BufStr); ClearVariable(BufMsk);
 --
 if Match(StoreКБКVal, маскКБК) and not Pos("?", StoreКБКVal)>0: РАБ.УПП.КБК2005.StoreКБК=StoreКБКVal; fi;
 if editКБК: if not Match(StoreКБКVal, маскКБК) or Pos("?", StoreКБКVal)>0: editКБК=False; fi; fi;
 if editКБК:
   ResMsk=StoreКБКMsk;
   ResVal=StoreКБКVal;
 else
   ResMsk=Trim(РАБ.УПП.КБК2005.ВыборКБКиерарх2005(maskСЧТ, типКБК, False));
   if ResMsk="": ^StoreКБКMsk; fi;
   ResVal=ResMsk;
 fi;
 --
 Buf[1]="...--К выбору КБК";
 Buf[2]=Chr(169)+"--Утвердить маску";
 MaxA=LengthOfArray(Buf);
 КБК_ОбновитьМенюВсе(MaxA, MaxS, ResVal, ResMsk, типКБК);
 num=0;
 while num<>2 do
   КБК_ОбновитьМенюЭлемент(num, MaxA, типКБК);
   num=AlternateTree("", Buf, 35, num, 12, "$", "Параметр", "Комментарий", -1, False);
   if num=1:
     ResMsk=Trim(РАБ.УПП.КБК2005.ВыборКБКиерарх2005(maskСЧТ, типКБК, False));
     if ResMsk="": ^StoreКБКMsk; fi;
     ResVal=ResMsk;
     КБК_ОбновитьМенюВсе(MaxA, MaxS, ResVal, ResMsk, типКБК);
   | num=2: Break;
   | num>2:
     tmp=BufMsk[num-MaxA];
     if Pos("?", tmp)>0:
       BufMsk[num-MaxA]=BufStr[num-MaxA];
     else
       BufMsk[num-MaxA]=RepStr("?", Length(tmp));
     fi;
   else
     ^StoreКБКMsk;
   fi;
 od;
 ResMsk="";
 for ii=1 to MaxS do ResMsk=ResMsk+"."+BufMsk[ii]; od;
 if SubStr(ResMsk, 1, 1)=".": ResMsk=SubStr(ResMsk, 2, Length(ResMsk)-1); fi;
 valКБК=ResVal;
 ^ResMsk;
end;

Func КБК_ВыборКБК(maskСЧТ:String; SaveКБК:String) :String;
var Value :String;
var Edit, ИзПроводок :Logical;
 Value="";
 ИзПроводок=if(flgФтрАнаcur=1, True, False);
 if ИзПроводок:
   Value=КБК_КБКизПроведенныхПроводок(maskСЧТ, SaveКБК);
   if Value="" or Value=" ": ^SaveКБК; fi;
   valКБК=Value;
 else
   if Match(SaveКБК, "???.????.???????.???"):  Edit=True; else Edit=False; fi;
   РАБ.БЮДЖЕТ2005.РежимМаски="?";
   Value=КБК_СформироватьМенюМасокКБК(SaveКБК, valКБК, maskСЧТ, 1, Edit);
   if Value="" or Value=" ": ^SaveКБК; fi;
 fi;
 ^Value;
end;

Proc КБК_ВыбратьФильтрКБК(OnExit:Logical);
var StoreКБК, NewКБК, mskСЧТ :String;
var SaveValue :Logical;
 SaveValue=False;
 StoreКБК=отчКБК;
 --
 if OnExit:
   NewКБК="";
 else
   mskСЧТ=ИтоговаяМаскаСчета(flgИстФинcur, отчСЧТ, "", True, False);
   NewКБК=КБК_ВыборКБК(mskСЧТ, StoreКБК);
 fi;
 --
 if NewКБК<>StoreКБК: if not ОтменитьИзмененияУсловийОтчета: SaveValue=True; fi; fi;
 if SaveValue: 
   if flgФтрАнаcur=1: отчМОЛ=""; МОЛимя=""; отчМХЭ=""; МХЭимя=""; fi; -- выбор из проводок
   отчКБК=NewКБК;
 fi;
end;

Proc МОЛ_ВыборМОЛ(flgИсточникФинансирования:Integer; maskСЧТ:String; maskКБК:String; flgBAL:Logical; flgZAB:Logical; ВыборИзПроводок:Logical; onExit:Logical);
var Путь, StoreANA, NewValue, MaskAcc, tmp :String;
var SaveValue :Logical;
var num, kk :Integer;
var Отч1 :Report;
 SaveValue=False;
 StoreANA=отчМОЛ;
 if onExit:
   NewValue="";
 else
   if ВыборИзПроводок:
     if flgМОЛМХЭcur=2:
       if Trim(отчМХЭ)="":    Message("Предварительно необходимо выбрать местанождение!", mtWarning); Template.Field="отчМХЭ_"; Exit; fi;
       if Name_A(отчМХЭ)=" ": Message("Признака '"+отчМХЭ+"' не существует!", mtError); Exit; fi;
     fi;
     Путь=PlanVar("НФА")+"\ОТЧЕТЫ\НФАОТЧ2007.lst";
     if not ExistFile(Путь): Message("Файл с отчетами отсутствует!", mtError); Exit; fi;
     ClearVariable(Buf);
     ClearVariable(BufMsk);
     ClearVariable(BufStr);
     Try
       MaskAcc=ИтоговаяМаскаСчета(flgИсточникФинансирования, maskСЧТ, maskКБК, flgBAL, flgZAB);
       Отч1=RepOpen(Путь+"|По_признакам_БАЛиЗАБ", MaskAcc, if(flgМОЛМХЭcur=2, отчМХЭ, ""), 1.1.100, if(ДАТОПЕР>1.1.2000, ДАТОПЕР+1, ToDay+1), "", "МОЛ");
       RepReset(Отч1);
       Try
         while RepNext(Отч1) do
           if RepIdent(Отч1)<>"":
             tmp=Trim(Name_A(RepIdent(Отч1)));
             if tmp="": tmp=" "; fi;
             kk=InsertInArraySort(BufStr, tmp);
             InsertInArray(BufMsk, kk, RepIdent(Отч1));
             InsertInArray(Buf, kk, RepIdent(Отч1)+"--"+tmp);
           fi;
         end;
       Finally
         Отч1=RepClose(Отч1);
       end;
     Except
       Message("Ошибка создания отчета!", mtError);
       Raise;
     end;
     num=LengthOfArray(BufMsk);
     if num>0:
       kk=SearchInArray(BufMsk, StoreANA, False, 1);
       num=AlternateTree("Выберите МОЛ...", Buf, -1, kk, 12, "#", "Код признака", "Расшифровка кода (Ф.И.О.)", -1, False);
       if num=0: Exit; fi;
       NewValue=BufMsk[num];
     else
       Message("МОЛ по проведенным проводкам^Mпо маске счетов '"+maskСЧТ+if(flgМОЛМХЭcur=2, "' и маске местонахождения '"+отчМХЭ, "")+"'^Mне найдено!", mtError);
       Exit;
     fi;
   else
     RefreshAna;
     tmp=AnaElection("МОЛ.*", False, False, StoreANA);
     if tmp="": Exit; fi;
     NewValue=tmp;
   fi;
 fi;
 if NewValue<>StoreANA: if not ОтменитьИзмененияУсловийОтчета: SaveValue=True; fi; fi;
 if SaveValue:
   отчМОЛ=NewValue;
   МОЛимя=Trim(Name_A(отчМОЛ));
   if flgМОЛМХЭcur=1 and NewValue="": отчМХЭ=""; МХЭимя=""; fi;
 fi;
end;

Proc МХЭ_ВыборМХЭ(flgИсточникФинансирования:Integer; maskСЧТ:String; maskКБК:String; flgBAL:Logical; flgZAB:Logical; ВыборИзПроводок:Logical; onExit:Logical);
var Путь, StoreANA, NewValue, MaskAcc, tmp :String;
var SaveValue :Logical;
var num, kk :Integer;
var Отч1 :Report;
 SaveValue=False;
 StoreANA=отчМХЭ;
 if onExit:
   NewValue="";
 else
   if ВыборИзПроводок:
     if flgМОЛМХЭcur=1:
       if Trim(отчМОЛ)="":    Message("Предварительно необходимо выбрать МОЛ!", mtWarning); Template.Field="отчМОЛ_"; Exit; fi;
       if Name_A(отчМОЛ)=" ": Message("Признака '"+отчМОЛ+"' не существует!", mtError); Exit; fi;
     fi;
     Путь=PlanVar("НФА")+"\ОТЧЕТЫ\НФАОТЧ2007.lst";
     if not ExistFile(Путь): Message("Файл с отчетами отсутствует!", mtError); Exit; fi;
     ClearVariable(Buf);
     ClearVariable(BufMsk);
     ClearVariable(BufStr);
     Try
       MaskAcc=ИтоговаяМаскаСчета(flgИсточникФинансирования, maskСЧТ, maskКБК, flgBAL, flgZAB);
       Отч1=RepOpen(Путь+"|По_признакам_БАЛиЗАБ", MaskAcc, if(flgМОЛМХЭcur=1, отчМОЛ, ""), 1.1.100, if(ДАТОПЕР>1.1.2000, ДАТОПЕР+1, ToDay+1), "", "М");
       RepReset(Отч1);
       Try
         while RepNext(Отч1) do
           if RepIdent(Отч1)<>"":
             tmp=Trim(Name_A(RepIdent(Отч1)));
             if tmp="": tmp=" "; fi;
             kk=InsertInArraySort(BufStr, tmp);
             InsertInArray(BufMsk, kk, RepIdent(Отч1));
             InsertInArray(Buf, kk, RepIdent(Отч1)+"--"+tmp);
           fi;
         end;
       Finally
         Отч1=RepClose(Отч1);
       end;
     Except
       Message("Ошибка создания отчета!", mtError);
       Raise;
     end;
     num=LengthOfArray(BufMsk);
     if num>0:
       kk=SearchInArray(BufMsk, StoreANA, False, 1);
       num=AlternateTree("Выберите местонахождение...", Buf, -1, kk, 12, "#", "Код признака", "Расшифровка кода", -1, False);
       if num=0: Exit; fi;
       NewValue=BufMsk[num];
     else
       Message("Местонахождений по проведенным проводкам^Mпо маске счетов '"+maskСЧТ+if(flgМОЛМХЭcur=1, "' и маске МОЛ '"+отчМОЛ, "")+"'^Mне найдено!", mtError);
       Exit;
     fi;
   else
     RefreshAna;
     tmp=AnaElection("М.*", False, False, StoreANA);
     if tmp="": Exit; fi;
     NewValue=tmp;
   fi;
 fi;
 if NewValue<>StoreANA: if not ОтменитьИзмененияУсловийОтчета: SaveValue=True; fi; fi;
 if SaveValue:
   отчМХЭ=NewValue;
   МХЭимя=Trim(Name_A(отчМХЭ));
   if flgМОЛМХЭcur=2 and NewValue="": отчМОЛ=""; МОЛимя=""; fi;
 fi;
end;

Func ВхожденийНет(ANA:String; MSK:String) :Logical;
 ^(Pos(ANA, MSK)=0);
end;

Func УдалитьСловоИзНабора_Диалог(Set:String; SepSet:String) :String;
var num, ii, nn :Integer;
 ClearVariable(Buf);
 num=WordsCount(Set, SepSet);
 if num<2: ^""; fi;
 for ii=1 to num do Buf[ii+1]=ExtractWord(ii, Set, SepSet); od;
 Buf[1]="Удалить все";
 nn=Alternate("Удаление...", Buf, -1, 1, 12);
 if nn=0: ^Set; fi;
 Set="";
 if nn=1: ^Set; fi;
 num=num+1;
 for ii=2 to num do if not ii=nn: Set=Set+SepSet+Buf[ii]; fi; od;
 Set=SubStr(Set, Length(SepSet)+1, 255);
 ^Set;
end;

Func Аналитика_ВыборПризнака(VOC:String; StoreANA:String) :String;
var Value :String;
 Value="";
 RefreshAna;
 Value=AnaElection(VOC+".*", False, True, StoreANA);
 if Trim(Value)="": ^""; fi;
 ^Value;
end;

Func Аналитика_ВыборПризнакаИзПроводок(VOC:String; StoreANA:String) :String;
var Путь, Value, MaskAcc, vMaskAna, tmp :String;
var num, kk, jj :Integer;
var ИзСписка, OK :Logical;
var Отч1 :Report;
 Value="";
 ИзСписка=False;
 ClearVariable(Buf);
 ClearVariable(BufMsk);
 ClearVariable(BufStr);
 Путь=PlanVar("НФА")+"\ОТЧЕТЫ\НФАОТЧ2007.lst";
 if not ExistFile(Путь): Message("Файл с отчетами отсутствует!", mtError); ИзСписка=True; fi;
 if not ИзСписка:
   Try
     MaskAcc=ИтоговаяМаскаСчета(flgИстФинcur, отчСЧТ, отчКБК, if(curБЗС=1 or curБЗС=2, True, False), if(curБЗС=1 or curБЗС=3, True, False));
     Refresh(False);
     if VOC="МОЛ": if not Pos("|", отчМХЭ)>0 and ValidSign(отчМХЭ): vMaskAna=отчМХЭ+"&МОЛ.*"; else vMaskAna="МОЛ.*"; fi;
     |  VOC="М":   if not Pos("|", отчМОЛ)>0 and ValidSign(отчМОЛ): vMaskAna=отчМОЛ+  "&М.*"; else vMaskAna="М.*";   fi;
     else vMaskAna=VOC+".*";
     fi;
     Отч1=RepOpen(Путь+"|По_признакам_БАЛиЗАБ", MaskAcc, vMaskAna, 1.1.100, if(ДАТОПЕР+1>1.1.2000, ДАТОПЕР+1, ToDay+1), "", VOC);
     RepReset(Отч1);
     Try
       while RepNext(Отч1) do
         if RepIdent(Отч1)<>"":
           tmp=Trim(Name_A(RepIdent(Отч1)));
           if tmp="": tmp=" "; fi;
           kk=InsertInArraySort(BufStr, tmp);
           InsertInArray(BufMsk, kk, RepIdent(Отч1));
           InsertInArray(Buf,    kk, RepIdent(Отч1)+"--"+tmp);
         fi;
       end;
     Finally
       Отч1=RepClose(Отч1);
     end;
   Except
     ИзСписка=True;
     --Message("Ошибка создания отчета^Mпри выборке аналитики из проводок!", mtError);
     --Raise;
     --^"";
   end;
   num=LengthOfArray(BufMsk);
   if not ИзСписка and num>0:
     InsertInArray(Buf,    1, Chr(149)+"--");
     InsertInArray(Buf,    1, Chr(169)+"--Выбор признака или группы признаков из списка");
     kk=SearchInArray(BufMsk, StoreANA, False, 1);
     OK=True;
     while OK do
       jj=AlternateTree("Выберите признак...", Buf, -1, kk+2, 12, "#", "Код признака", "Расшифровка признака", -1, False);
       if jj=0: OK=False; ^"";
       |  jj=1: OK=False; Value=Аналитика_ВыборПризнака(VOC, StoreANA);
       |  jj>2: OK=False; Value=BufMsk[jj-2];
       fi;
     od;
   else
     ИзСписка=True;
   fi;
 fi;
 if ИзСписка: Value=Аналитика_ВыборПризнака(VOC, StoreANA); fi;
 if Trim(Value)="": ^""; fi;
 ^Value;
end;

Func Аналитика_ВыборГрупповойАналитики(VOC:String; StoreANA:String; Sep:String; МаскаЗначение:Logical) :String;
var ANA, wrd, curValue, newValue :String;
var ВыбранаМаска, flg1, flg2 :Logical;
var ii, num1, num2, nn :Integer;
 ВыбранаМаска=False;
 curValue=Up(StoreANA);
 if Pos(Sep, curValue)>0:
   wrd="";
 else
   ii=Length(curValue);
   if Pos("*", curValue)=ii and ii>2:
     wrd=SubStr(curValue, 1, ii-1);
   else
     wrd=if(ValidSign(curValue), curValue, "");
   fi;
 fi;
 --
 -- newValue=Up(Аналитика_ВыборПризнака(VOC, wrd));
 newValue=Up(Аналитика_ВыборПризнакаИзПроводок(VOC, wrd));
 --
 if newValue="": ^StoreANA; fi;
 if SubStr(newValue, Length(newValue), 1)=".": newValue=newValue+"*"; wrd=SubStr(newValue, 1, Length(newValue)-2); ВыбранаМаска=True; else wrd=newValue; fi;
 if curValue="" or (ВыбранаМаска and (WordsCount(newValue, ".")<3)): ^newValue; fi;
 --
 ClearVariable(Buf); ClearVariable(BufMsk); ClearVariable(BufStr);
 -- отделяем маски значений от конкретных значений
 num1=WordsCount(curValue, Sep);
 for ii=1 to num1 do
   ANA=ExtractWord(ii, curValue, Sep);
   if Pos("*", ANA)>0: InsertInArraySort(BufMsk, ANA); else InsertInArraySort(BufStr, ANA); fi;
 od;
 num1=LengthOfArray(BufMsk);
 num2=LengthOfArray(BufStr);
 -- синхронизируем выбранное значение или маску с результирующим набором
 if ВыбранаМаска:
   InsertInArraySort(Buf, newValue);
   if num1>0:
     for ii=1 to num1 do
       flg1=Match(newValue, BufMsk[ii]);
       flg2=ВхожденийНет(wrd, BufMsk[ii]);
       if not flg1 and flg2: InsertInArraySort(Buf, BufMsk[ii]); fi;
     od;
   fi;
   if num2>0:
     for ii=1 to num2 do
       flg1=Match(BufStr[ii], newValue);
       flg2=ВхожденийНет(BufStr[ii], newValue);
       if not flg1 and flg2: InsertInArraySort(Buf, BufStr[ii]); fi;
     od;
   fi;
 else
   if num1>0:
     for ii=1 to num1 do
       flg1=Match(newValue+".", BufMsk[ii]);
       if not flg1:
         InsertInArraySort(Buf, BufMsk[ii]);
       else
         if МаскаЗначение:
           nn=Enquiry("Выберите действие...", "Значение '"+newValue+"' соответствует маске '"+BufMsk[ii]+"'!", "Заменить маску на значение;Сохранить маску, значение опустить;Вставить значение и сохранить маску", mtConfirmation);
           if nn=2: InsertInArraySort(Buf, BufMsk[ii]); newValue="";
           |  nn=3: InsertInArraySort(Buf, BufMsk[ii]);
           fi;
         else
           nn=Enquiry("Выберите действие...", "Значение '"+newValue+"' соответствует маске '"+BufMsk[ii]+"'!", "Заменить маску на значение;Сохранить маску, значение опустить", mtConfirmation);
           if nn=2: InsertInArraySort(Buf, BufMsk[ii]); newValue=""; fi;
         fi;
       fi;
     od;
   fi;
   if num2>0:
     CopyArray(BufStr, Buf, 1, LengthOfArray(Buf)+1);
   fi;
   SortArray(Buf, True);
   if newValue<>"":
     num1=SearchInArray(Buf, newValue, True, 1);
     if num1=-1: InsertInArraySort(Buf, newValue); fi;
   fi;
 fi;
 num1=LengthOfArray(Buf);
 ANA="";
 for ii=1 to num1 do
   ANA=Объединить(ANA, Buf[ii], Sep);
   if Length(ANA)>253:
     Message("Строка аналитики не может быть больше 253 символов.^MВыбор отменен!", mtWarning);
     ^StoreANA;
   fi;
 od;
 ^ANA;
end;

Func Аналитика_ВыбранВесьСправочник(voc:String) :String;
 if voc="МОЛ" : ^"Все материально ответственные лица ["+voc+".*]";
 |  voc="М"   : ^"Все местонахождения ["+voc+".*]";
 |  voc=""    : ^"";
 else ^"Все элементы справочника ["+voc+".*]";
 fi;
end;

Func Аналитика_ИмяГруппы(ANA:String) :String;
var nn :Integer;
var tmp :String;
 tmp="";
 nn=Length(ANA);
 if Pos("*", ANA)=nn and nn>2: tmp=(Name_A(SubStr(ANA, 1, nn-1))); else tmp=""; fi;
 if tmp="": tmp="нет наименования"; fi;
 ^tmp;
end;

Func Аналитика_FormatSetANA(Set:String; SepSet:String; SepOut:String) :String;-- набор описаний признаков в одной строке (разделители разные)
var num, i :Integer;
var OUT, ANA, tmp, tmp2, voc :String;
 OUT="";
 if SepSet<>"":
   num=WordsCount(Set, SepSet);
   for i=1 to num do
     ANA=ExtractWord(i, Set, SepSet);
     voc=ExtractWord(1, ANA, ".");
     tmp=Name_A(ANA);
     tmp2=if(tmp<>"" and tmp<>" ", tmp, if(ANA=voc+".*", Аналитика_ВыбранВесьСправочник(voc), Аналитика_ИмяГруппы(ANA)));
     OUT=Объединить(OUT, tmp2, SepOut);
   od;
 fi;
 ^OUT;
end;

Proc Аналитика_ВыбратьФильтрАналитики(refField:String; OnExit:Logical);
var ValueСПР, FieldАНА, FieldИМЯ, StoreАНА, NewАНА, NewИМЯ :String;
var SaveValue :Logical;
 SaveValue=False;
 --
 FieldАНА=Up(SubStr(refField, 1, Length(refField)-1));
 if FieldАНА="отчМОЛ": ValueСПР="МОЛ";
 |  FieldАНА="отчМХЭ": ValueСПР="М";
 fi;
 FieldИМЯ=SubStr(FieldАНА, 4, 3)+"имя";
 --
 StoreАНА=GetVariableS(FieldАНА);
 --
 if OnExit:
   NewАНА=УдалитьСловоИзНабора_Диалог(StoreАНА, "|");
 else
   NewАНА=Аналитика_ВыборГрупповойАналитики(ValueСПР, StoreАНА, "|", False);
 fi;
 --
 if NewАНА<>StoreАНА: if not ОтменитьИзмененияУсловийОтчета: SaveValue=True; fi; fi;
 if SaveValue:
    PutVariableS(FieldАНА, NewАНА);
    NewИМЯ=Аналитика_FormatSetANA(NewАНА, "|", " | ");
    PutVariableS(FieldИМЯ, NewИМЯ);
 fi;
end;

--Func USE_ИНВЕНТАРНЫЙ_НОМЕР(ACC:String; SUM:Numeric; KOL:Numeric; ddОТЧ:Date; FindУЧН:String; ctНФА100П:Numeric; ctНФА_ИНВ:Numeric) :Logical;
--var Цена :Numeric;
-- if Match(ACC, "*.?.101.0?.???"):
--    if  Match(ACC, "*.?.101.07.???"):
--       if ddОТЧ>=1.1.2009 and ctНФА100П>0.00:
--         if SUM<>0.00 and KOL<>0.00:
--           SUM=Abs(SUM);
--           KOL=Abs(KOL);
--           Цена=SUM/KOL;
--           if Цена>ctНФА100П: ^True; fi;
--         |  SUM=0 or KOL=0:
--           if Match(FindУЧН, pfxУЧН+".*"): ^True; fi;
--         fi;
--       fi;
--    else
--       if ctНФА_ИНВ>0.00:
--         if SUM<>0.00 and KOL<>0:
--           SUM=Abs(SUM);
--           KOL=Abs(KOL);
--           Цена=SUM/KOL;
--           if Цена>ctНФА_ИНВ: ^True; else if Match(FindУЧН, pfxУЧН+".*"): ^True; fi; fi;
--         | SUM=0 or KOL=0:
--           if Match(FindУЧН, pfxУЧН+".*"): ^True; fi;
--         fi;
--       fi;
--    fi;
-- |  Match(ACC, "*.?.102.?0.???"): ^True;
-- |  Match(ACC, "*.?.103.??.???"): ^True;
-- fi;
-- ^False;
--end;

Func USE_ИНВЕНТАРНЫЙ_НОМЕР(ACC:String; SUM:Numeric; KOL:Numeric; ddОТЧ:Date; FindУЧН:String; ctНФА100П:Numeric; ctНФА_ИНВ:Numeric) :Logical;
var Цена :Numeric;
 if Match(ACC, "*.?.101.??.???"):
    if Match(ACC, "*.?.101.?7.???"):
      if Match(FindУЧН, pfxУЧН+".*"): ^True; else if ctНФА100П>0.00 and SUM<>0.00 and KOL<>0.00: Цена=Abs(SUM)/Abs(KOL); if Цена>ctНФА100П: ^True; fi; fi; fi;
    else 
      if Match(FindУЧН, pfxУЧН+".*"): ^True; else if ctНФА_ИНВ>0.00 and SUM<>0.00 and KOL<>0.00: Цена=Abs(SUM)/Abs(KOL); if Цена>ctНФА_ИНВ: ^True; fi; fi; fi;
    fi;
 |  Match(ACC, "*.?.102.??.???"): ^True;
 |  Match(ACC, "*.?.103.??.???"): ^True;
 fi;
 ^False;
end;

Func СчетАмортизацииПоСчетуНФА(СЧТНФА:String) :String;
var sLeft, s1ACC, s2ACC, RES :String;
 RES="";
 if Match(СЧТНФА, "???.????.???????.???.?.101.??.???"):
    sLeft=SubStr(СЧТНФА, 1, 23);
    s1ACC=SubStr(СЧТНФА, 28, 1);
    s2ACC=SubStr(СЧТНФА, 29, 1);
    if s2ACC="1": RES=sLeft+"104."+s1ACC+"1.410";
    |  s2ACC="2": RES=sLeft+"104."+s1ACC+"2.410";
    |  s2ACC="3": RES=sLeft+"104."+s1ACC+"3.410";
    |  s2ACC="4": RES=sLeft+"104."+s1ACC+"4.410";
    |  s2ACC="5": RES=sLeft+"104."+s1ACC+"5.410";
    |  s2ACC="6": RES=sLeft+"104."+s1ACC+"6.410";
    |  s2ACC="7": RES=sLeft+"104."+s1ACC+"7.410";
    |  s2ACC="8": RES=sLeft+"104."+s1ACC+"8.410";
    else ^"";
    fi;
 |  Match(СЧТНФА, "???.????.???????.???.?.102.??.???"):
    sLeft=SubStr(СЧТНФА, 1, 23);
    s1ACC=SubStr(СЧТНФА, 28, 1);
    s2ACC=SubStr(СЧТНФА, 29, 1);
    if s2ACC="0": RES=sLeft+"104."+s1ACC+"9.420"; else ^""; fi;
 else ^"";
 fi;
 ^RES;
end;

Func ВзятьИмяUserПолеСортировки(Field:String) :String;
 if Field="тНФАКОД": ^"... коду НФА";
 |  Field="тНФАИМЯ": ^"... наименованию НФА";
 |  Field="тНФАУЧН": ^"... учетному номеру НФА";
 |  Field="тНФАИНВ": ^"... инвентарному номеру НФА";
 |  Field="тМОЛКОД": ^"... коду материально-ответственного лица";
 |  Field="тМОЛИМЯ": ^"... Ф.И.О. материально-ответственного лица";
 |  Field="тМХЭКОД": ^"... коду местонахождения";
 |  Field="тМХЭИМЯ": ^"... наименованию местонахождения";
 |  Field="тНФАСЧТ": ^"... счету синтетическому";
 |  Field="тНФАКБК": ^"... КБК бюджетного счета";
 else ^"";
 fi;
end;

Proc ВыбратьUserПолеСортировки;
var ii, num :Integer;
var prevМСК, prevИМЯ, newМСК, newИМЯ :String;
var SaveValue :Logical;
 SaveValue=False;
 ii=0;
 prevМСК=fldСОРТкод;
 prevИМЯ=fldСОРТимя;
 ClearVariable(BufMsk);
 ClearVariable(BufStr);
   ii=ii+1; BufMsk[ii]="тНФАКОД"; BufStr[ii]="... коду НФА";
   ii=ii+1; BufMsk[ii]="тНФАИМЯ"; BufStr[ii]="... наименованию НФА";
   ii=ii+1; BufMsk[ii]="тНФАУЧН"; BufStr[ii]="... учетному номеру НФА";
   ii=ii+1; BufMsk[ii]="тНФАИНВ"; BufStr[ii]="... инвентарному номеру НФА";
 if flgМОЛ=1:
   ii=ii+1; BufMsk[ii]="тМОЛКОД"; BufStr[ii]="... коду материально-ответственного лица";
   ii=ii+1; BufMsk[ii]="тМОЛИМЯ"; BufStr[ii]="... Ф.И.О. материально-ответственного лица";
 fi;
 if flgМХЭ=1:
   ii=ii+1; BufMsk[ii]="тМХЭКОД"; BufStr[ii]="... коду местонахождения";
   ii=ii+1; BufMsk[ii]="тМХЭИМЯ"; BufStr[ii]="... наименованию местонахождения";
 fi;
 if flgСЧТ=1:
   ii=ii+1; BufMsk[ii]="тНФАСЧТ"; BufStr[ii]="... счету синтетическому";
 fi;
 if flgКБК=1:
   ii=ii+1; BufMsk[ii]="тНФАКБК"; BufStr[ii]="... КБК бюджетного счета";
 fi ;
 --
 ii=SearchInArray(BufMsk, prevИМЯ, False, 1);
 if not ii>0: ii=1; fi;
 num=Alternate("Сортировать по...", BufStr, -1, ii, 12);
 if num=0: Exit; fi;
 newМСК=BufMsk[num];
 newИМЯ=BufStr[num];
 if newМСК<>prevМСК: if not ОтменитьИзмененияУсловийОтчета: SaveValue=True; fi; fi;
 if SaveValue:
   fldСОРТкод=newМСК;
   fldСОРТимя=newИМЯ;
 fi;
end;

Func СформироватьШаблонСортировки :String;
var Res, Value :String;
var num, ii :Integer;
 Res="";
 if Trim(Иерархия)<>"":
   num=WordsCount(Иерархия, " ");
   for ii=1 to num do
     Value=ExtractWord(ii, Иерархия, " ");
     if Value="СЧТ": Res=Res+" тНФАСЧТ";
     |  Value="КБК": Res=Res+" тНФАКБК";
     |  Value="МОЛ": Res=Res+" >>тМОЛИМЯ";
     |  Value="МХЭ": Res=Res+" <<тМХЭИМЯ";
     |  Value="ГРП": Res=Res+" тНФАГРК";
     fi;
   od;
 fi;
 ^Trim(Res);
end;

Func СформироватьЗначениеСортировки(ШаблонСортировки:String; Iter:Integer; UserSortValue:String) :String;
var Res, Field, Value, tmp :String;
var ii, num, xx :Integer;
 Res="";
 if ШаблонСортировки<>"":
   num=WordsCount(ШаблонСортировки, " ");
   for ii=1 to num do
     Field=ExtractWord(ii, ШаблонСортировки, " ");
     Value="";
     if Pos(">>", Field)>0:
       tmp=тМОЛИМЯ[Iter]+Chr(169)+тМОЛКОД[Iter];
       xx=SearchInArray(HdrFldSRT, tmp, True, 1);
       if xx>0: Value=">>"+Format("%.10d", xx); fi;
     |  Pos("<<", Field)>0:
       tmp=тМХЭИМЯ[Iter]+Chr(169)+тМХЭКОД[Iter];
       xx=SearchInArray(HdrFldSRT, tmp, True, 1);
       if xx>0: Value="<<"+Format("%.10d", xx); fi;
     else
       Try Value=GetVariableS(Field+"["+Str(Iter)+"]"); Except Value=""; end;
     fi;
     if Trim(Value)="": Value=" "; fi;
     Res=Объединить(Res, Value, "#");
   od;
 fi;
 Value="";
 if Trim(UserSortValue)<>"":
   tmp=Trim(UserSortValue);
   xx=SearchInArray(UsrFldSRT, tmp, True, 1);
   if xx>0: Value=Format("%.10d", xx); fi;
 fi;
 if Trim(Value)="": Value=" "; fi;
 Res=Объединить(Res, Value, "#");
 ^Up(Res);
end;

Func КорректныйСимвол(Chars:String; useSpace:Logical) :Logical;
 if Chars>="0" and Chars<="9": ^True;
 |  Chars>="A" and Chars<="Z": ^True;
 |  Chars>="a" and Chars<="z": ^True;
 |  Chars>="А" and Chars<="Я": ^True;
 |  Chars>="а" and Chars<="я": ^True;
 |  Chars ="."  or Chars="_" : ^True;
 |  Chars =" ": if useSpace: ^True; fi;
 fi;
 ^False;
end;

Func КорректныеСимволыГруппыНФА(Value:String) :String;
var num, ii :Integer;
var Res, Chars :String;
 Res="";
 num=Length(Value);
 if num>0:
   for ii=1 to num do
     Chars=SubStr(Value, ii, 1);
     if КорректныйСимвол(Chars, False): Res=Res+Chars; else Res=Res+"_"; fi;
   od;
 fi;
 ^Res;
end;

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

Func УдалитьРазделительЧерта(Value:String) :String;
var nn :Integer;
 nn=Pos("|", Value);
 while nn>0 do Value=ЗаменитьСимволСтрокиВпозиции(Value, "_", nn); nn=Pos("|", Value); od;
 ^Value;
end;

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

Func MatchMask(Src:String; Mask:String; SepMask:String) :Logical;
var ii, num :Integer;
var tmp :String;
 num=WordsCount(Mask, SepMask);
 for ii=1 to num do
   tmp=ExtractWord(ii, Mask, SepMask);
   if Match(Src, tmp): ^True; fi;
 od;
 ^if(num=0, Match(Src, Mask), False);
end;

Func СоответствуетФильтруПоСчетам(ftrAcc:String; grpAcc:String) :Logical;
var num1, num2, ii, jj :Integer;
var OK :Logical;
 ClearVariable(KeyMsk);
 num1=WordsCount(ftrAcc, " ");
 if num1>0: for ii=1 to num1 do KeyMsk[ii]=ExtractWord(ii, ftrAcc, " "); od; fi; -- фильтр счетов отчета
 ClearVariable(KeyStr);
 num2=WordsCount(grpAcc, " ");
 if num2>0: for jj=1 to num2 do KeyStr[jj]=ExtractWord(jj, grpAcc, " "); od; fi; -- фильтр счетов группы НФА
 if num1>0 and num2>0:
   for ii=1 to num1 do
     for jj=1 to num2 do
       OK=MatchMask(KeyStr[jj], KeyMsk[ii], " ");
       if OK: ^True; fi;
     od;
   od;
 fi;
 ^False;
end;

Func ГруппаНФА_СчитатьСправочник(maskAcc:String; FlagUpdate:Logical) :Logical;
var RO, jj, num, kk :Integer;
var OK, Work :Logical;
var GRPUNQ, GRPВИД, GRPКОД, GRPИМЯ, GRPСЧТ, Value :String;
 OK=False;
 if not FlagUpdate:
    if GRPBUF[1]="" or not LengthOfArray(GRPBUF)>0:
      FlagUpdate=True;
    else
      if LengthOfArray(GRPBUF)<>LengthOfArray(GRPDAT) or LengthOfArray(GRPBUF)<>LengthOfArray(GRPKEY):
        FlagUpdate=True;
      fi;
    fi;
 fi;
 if not FlagUpdate: ^True; fi;
 RO=OpenWorkArea(crdГРП, "ВИД", "КОД<>'' or НАИМЕНОВАНИЕ<>''");
 ShowProgress(0, "Считывание групп НФА...");
 Try
   num=Records(RO);
   if num>0:
     ОчиститьГРПНФА;
     ShowProgress(num, "Считывание групп НФА...");
     for jj=1 to num do
       ProgressPos(jj);
       GRPСЧТ=Lo(Trim(GetFieldS(RO, jj, "ГРНФА")));
       Work=СоответствуетФильтруПоСчетам(maskAcc, GRPСЧТ);
       if Work:
         GRPUNQ=RecordToString(GetRecordKey(RO, jj));
         GRPВИД=КорректныеСимволыПризнака(Lo(Trim(GetFieldS(RO, jj, "ВИД"))));
         if GRPВИД="": GRPВИД="_без группировки"; fi;
         GRPКОД=КорректныеСимволыПризнака(Lo(Trim(GetFieldS(RO, jj, "КОД"))));
         GRPИМЯ=УдалитьРазделительЧерта(Lo(Trim(GetFieldS(RO, jj, "НАИМЕНОВАНИЕ"))));
         if GRPКОД=""  and GRPИМЯ<>"": GRPКОД=GRPИМЯ;
         |  GRPКОД<>"" and GRPИМЯ="" : GRPИМЯ=GRPКОД;
         fi;
         Value=Up(GRPВИД)+"|"+Up(GRPКОД)+"--Подгруппа '"+GRPИМЯ+"'";
         if SearchInArray(GRPBUF, Value, True, 1)<0:
           kk=InsertInArraySort(GRPBUF, Value);
           InsertInArray(GRPDAT, kk, GRPВИД+"|"+GRPКОД+"|"+GRPИМЯ);
           InsertInArray(GRPKEY, kk, GRPUNQ);
         fi;
         Value=Up(GRPВИД)+"|--Группа '"+GRPВИД+"'";
         if SearchInArray(GRPBUF, Value, True, 1)<0:
           kk=InsertInArraySort(GRPBUF, Value);
           InsertInArray(GRPDAT, kk, GRPВИД);
           InsertInArray(GRPKEY, kk, "{0}");
         fi;
       fi;
     od;
     if LengthOfArray(GRPBUF)>0: OK=True; else OK=False; fi;
     InsertInArray(GRPBUF, 1, "*--Перечитать группы НФА");
     InsertInArray(GRPDAT, 1, "");
     InsertInArray(GRPKEY, 1, "");
   fi;
 Finally
   CloseProgress;
   CloseWorkArea(RO);
 end;
 ^OK;
end;

Proc ГруппыНФА_ВзятьИменаГрупп(грпValue:String; кейValue:String; Sep:String);
var Final_NAME, currVal, currKey, ИМЯGRP, GRPвер, GRPниж, tmp1, tmp2, tmp3 :String;
var num, ii, pp :Integer;
var OK: Logical;
 Final_NAME="";
 num=WordsCount(грпValue, Sep);
 if num>0:
   for ii=1 to num do
     ИМЯGRP="";
     currVal=ExtractWord(ii, грпValue, Sep);
     currKey=ExtractWord(ii, кейValue, Sep);
     GRPвер=ExtractWord(1, currVal, "$");
     GRPниж=ExtractWord(2, currVal, "$");
     if GRPниж="*":
       ИМЯGRP="Вся группа "+Up(GRPвер);
     else
       if currKey<>"{0}":
         pp=SearchInArray(GRPKEY, currKey, False, 1);
         if pp>0:
           OK=False;
           tmp1=Lo(ExtractWord(1, GRPDAT[pp], "|"));
           tmp2=Lo(ExtractWord(2, GRPDAT[pp], "|"));
           tmp3=Lo(ExtractWord(3, GRPDAT[pp], "|"));
           if Lo(GRPвер)=tmp1 and Lo(GRPниж)=tmp2: OK=True; fi;
           if OK: ИМЯGRP=Up(GRPвер)+" "+Chr(151)+" "+Lo(tmp3); fi;
         fi;
       fi;
       if ИМЯGRP="": ИМЯGRP=Up(GRPвер)+" "+Chr(151)+" "+Lo(GRPниж); fi;
     fi;
     Final_NAME=Объединить(Final_NAME, ИМЯGRP, " | ");
   od;
 fi;
 namГРП=Final_NAME;
end;

Func ГруппыНФА_ВыборФильтраОтбораГруппНФА(StoreVal:String; StoreKey:String; Sep:String) :String;
var len, ii, num1, num2, kk, nn, pp :Integer;
var NewValue, tmp, ANA, UKG, currVal, currKey, ВИДGRP, КОДGRP, КЛЧGRP :String;
var ВыбранаМаска, f1, f2 :Logical;
 if not ГруппаНФА_СчитатьСправочник(отчСЧТ, False):
   Message("Не заполнен справочник групп НФА ["+crdГРП+"]!", mtError);
   keyГРП=StoreKey;
   ^StoreVal;
 fi;
 currVal=Up(StoreVal);
 currKey=Up(StoreKey);
 kk=-1;
 if Pos("|", currVal)<1:
   ii=Length(currVal);
   if Pos("*", currVal)=ii and ii>2:
     tmp=Up(SubStr(currVal, 1, ii-2))+"|--Группа '"+Lo(SubStr(currVal, 1, ii-2))+"'";
     kk=SearchInArray(GRPBUF, tmp, True, 1);
   else
     if LastGRP_key<>"{0}": kk=SearchInArray(GRPKEY, LastGRP_key, False, 1); fi;
   fi;
 fi;
 if kk=-1: if LastGRP_num>0: kk=LastGRP_num; else kk=1; fi; fi;
 len=1;
 while len=1 do
   len=AlternateTree("Выберите группу...", GRPBUF, -1, kk, 12, "|", "ГРУППЫ", "ПОЯСНЕНИЕ", -1, True);
   if len=0:
     --Message("Отказ от выбора группы!", mtInformation);
     keyГРП=StoreKey;
     ^StoreVal;
   |  len=1:
     if not ГруппаНФА_СчитатьСправочник(отчСЧТ, True):
       Message("Не заполнен справочник групп НФА ["+crdГРП+"]!", mtError);
       keyГРП=StoreKey;
       ^StoreVal;
     fi;
   fi;
 od;
 ВыбранаМаска=False;
 ВИДGRP=ExtractWord(1, GRPDAT[len], "|");
 КОДGRP=ExtractWord(2, GRPDAT[len], "|");
 КЛЧGRP=GRPKEY[len];
 if Pos("|--", GRPBUF[len])>0: NewValue=Up(ВИДGRP+"$*"); tmp=SubStr(NewValue, 1, Length(NewValue)-2); ВыбранаМаска=True; else NewValue=Up(ВИДGRP+"$"+КОДGRP); tmp=NewValue; fi;
 if currVal="": LastGRP_key=КЛЧGRP; LastGRP_num=len; keyГРП=КЛЧGRP; ^NewValue; fi;
 --
 ClearVariable(Buf); ClearVariable(BufMsk); ClearVariable(BufStr); ClearVariable(KeyMsk); ClearVariable(KeyStr); ClearVariable(aAna);
 num1=WordsCount(currVal, Sep);
 for ii=1 to num1 do
   ANA=ExtractWord(ii, currVal, Sep);
   UKG=ExtractWord(ii, currKey, Sep);
   if Pos("*", ANA)>0:
     pp=InsertInArraySort(BufMsk, ANA);
     InsertInArray(KeyMsk, pp, UKG);
   else
     pp=InsertInArraySort(BufStr, ANA);
     InsertInArray(KeyStr, pp, UKG);
   fi;
 od;
 num1=LengthOfArray(BufMsk);
 num2=LengthOfArray(BufStr);
 if ВыбранаМаска:
   pp=InsertInArraySort(Buf, NewValue); InsertInArray(aAna, pp, КЛЧGRP);
   if num1>0:
     for ii=1 to num1 do
       f1=Match(NewValue, BufMsk[ii]);
       f2=ВхожденийНет(tmp, BufMsk[ii]);
       if (not f1) and f2: pp=InsertInArraySort(Buf, BufMsk[ii]); InsertInArray(aAna, pp, KeyMsk[ii]); fi;
     od;
   fi;
   if num2>0:
     for ii=1 to num2 do
       f1=Match(BufStr[ii], NewValue);
       f2=ВхожденийНет(BufStr[ii], NewValue);
       if (not f1) and f2: pp=InsertInArraySort(Buf, BufStr[ii]); InsertInArray(aAna, pp, KeyStr[ii]); fi;
     od;
   fi;
 else
   if num1>0:
     for ii=1 to num1 do
       f1=Match(NewValue+"$", BufMsk[ii]);
       if not f1:
         pp=InsertInArraySort(Buf, BufMsk[ii]); InsertInArray(aAna, pp, KeyMsk[ii]);
       else
         nn=Enquiry("Выберите действие...", "Значение '"+NewValue+"' соответствует маске '"+BufMsk[ii]+"'!", "Заменить маску на значение;Сохранить маску, значение опустить", mtConfirmation);
         if nn=2: pp=InsertInArraySort(Buf, BufMsk[ii]); InsertInArray(aAna, pp, KeyMsk[ii]); NewValue=""; fi;
       fi;
     od;
   fi;
   if num2>0:
     for ii=1 to num2 do
       pp=InsertInArraySort(Buf, BufStr[ii]);
       InsertInArray(aAna, pp, KeyStr[ii]);
     od;
   fi;
   --
   if NewValue<>"":
     num1=SearchInArray(Buf, NewValue, True, 1);
     if num1=-1: pp=InsertInArraySort(Buf, NewValue); InsertInArray(aAna, pp, КЛЧGRP); fi;
   fi;
 fi;
 num1=LengthOfArray(Buf);
 ANA=""; UKG="";
 for ii=1 to num1 do
   ANA=Объединить(ANA,  Buf[ii], Sep);
   UKG=Объединить(UKG, aAna[ii], Sep);
   if Length(ANA)>255:
     Message("Строка аналитики не может быть больше 255 символов.^MВыбор отменен!", mtWarning);
     keyГРП=StoreKey;
     ^StoreVal;
   fi;
 od;
 -- Заполняем служебную инфу
 if Pos("|", ANA)<1: LastGRP_key=КЛЧGRP; else LastGRP_key="{0}"; fi;
 LastGRP_num=len;
 keyГРП=UKG;
 ^ANA;
end;

Func УдалитьСловоНомер(strNumber:Integer; strValue:String; strSep:String) :String;
var ii, num :Integer;
var newValue :String;
 newValue=strValue;
 num=WordsCount(strValue, strSep);
 if num>0:
   newValue="";
   if num>=strNumber:
     for ii=1 to num do
       if not strNumber=ii: 
         newValue=Объединить(newValue,  ExtractWord(ii, strValue, strSep), strSep);
       fi;
     od;
   fi;
 fi;
 ^newValue;
end;

Func ГруппыНФА_УдалитьИзНабора_Диалог(грпVal:String; грпKey:String; грпSep:String) :String;
var num, ii, nn :Integer;
var currVal, currKey, ИМЯGRP, GRPвер, GRPниж, tmp1, tmp2, tmp3 :String;
var OK :Logical;
 ClearVariable(Buf);
 num=WordsCount(грпVal, грпSep);
 if num<2: keyГРП=""; ^""; fi;
   for ii=1 to num do
     ИМЯGRP="";
     currVal=ExtractWord(ii, грпVal, грпSep);
     currKey=ExtractWord(ii, грпKey, грпSep);
     GRPвер=ExtractWord(1, currVal, "$");
     GRPниж=ExtractWord(2, currVal, "$");
     if GRPниж="*":
       ИМЯGRP="Вся группа "+Up(GRPвер);
     else
       if currKey<>"{0}":
         nn=SearchInArray(GRPKEY, currKey, False, 1);
         if nn>0:
           OK=False;
           tmp1=Lo(ExtractWord(1, GRPDAT[nn], "|"));
           tmp2=Lo(ExtractWord(2, GRPDAT[nn], "|"));
           tmp3=Lo(ExtractWord(3, GRPDAT[nn], "|"));
           if Lo(GRPвер)=tmp1 and Lo(GRPниж)=tmp2: OK=True; fi;
           if OK: ИМЯGRP=Up(GRPвер)+" "+Chr(151)+" "+Lo(tmp3); fi;
         fi;
       fi;
       if ИМЯGRP="": ИМЯGRP=Up(GRPвер)+" "+Chr(151)+" "+Lo(GRPниж); fi;
     fi;
     Buf[ii+1]=ИМЯGRP;
   od;
 Buf[1]="* Удалить все значения *";
 nn=Alternate("Удаление...", Buf, -1, 1, 12);
 if nn<1:
   keyГРП=грпKey;
   ^грпVal;
 |  nn=1:
   keyГРП="";
   ^"";
 |  nn>1:
   грпVal=УдалитьСловоНомер(nn-1, грпVal, грпSep);
   грпKey=УдалитьСловоНомер(nn-1, грпKey, грпSep);
   keyГРП=грпKey;
   ^грпVal;
 fi;
end;

Proc ГруппыНФА_ВыбратьФильтрГруппыНФА(OnExit:Logical);
var StoreАНА, StoreКЕЙ, NewАНА :String;
var SaveValue :Logical;
 SaveValue=False;
 StoreАНА=отчГРП;
 StoreКЕЙ=keyГРП;
 --
 if OnExit:
   NewАНА=ГруппыНФА_УдалитьИзНабора_Диалог(StoreАНА, StoreКЕЙ, "|");
 else
   NewАНА=ГруппыНФА_ВыборФильтраОтбораГруппНФА(StoreАНА, StoreКЕЙ, "|");
 fi;
 --
 if NewАНА<>StoreАНА: if not ОтменитьИзмененияУсловийОтчета: SaveValue=True; fi; fi;
 if SaveValue:
   отчГРП=NewАНА;
   ГруппыНФА_ВзятьИменаГрупп(отчГРП, keyГРП, "|");
 fi;
end;

Func СоответствуетФильтруПоГруппеНФА(аФтрГРП:String; аКОДГРП:String; аКОДПГР:String) :Logical;
var aValГРП, aValПГР, wdValue :String;
var ii, num :Integer;
var OK :Logical;
 if аФтрГРП<>"":
   num=WordsCount(аФтрГРП, "|");
   if num>0:
     OK=False;
     for ii=1 to num do
       wdValue=Lo(ExtractWord(ii, аФтрГРП, "|"));
       aValГРП=ExtractWord(1, wdValue, "$");
       aValПГР=ExtractWord(2, wdValue, "$");
       if (aValГРП=Lo(аКОДГРП) and aValПГР=Lo(аКОДПГР)) or (aValГРП=Lo(аКОДГРП) and aValПГР="*"): OK=True; fi;
       if OK: Break; fi;
     od;
     if OK: ^True; else ^False; fi;
   fi;
 else
   ^True;
 fi;
 ^False;
end;

Func ПризнакСоотвНабору(ANA:String; Набор:String) :Logical;
-- ANA должно являтся полным значением, а не маской!
var ii, num :Integer;
var Value :String;
 num=WordsCount(Набор, "|");
 if num>0:
   for ii=1 to num do
     Value=Up(ExtractWord(ii, Набор, "|"));
     if Match(Up(ANA), Value): ^True; fi;
   od;
 fi;
 ^False;
end;

Func ПоискДанных(ddОпер:Date; flgИгнорНФА:Logical; constНФА100П:Numeric; constНФА_ИНВ:Numeric; vMskACC:String; vMskANA:String; useДОП:Integer; useМОЛ:Integer; useМХЭ:Integer) :Logical;
var ВременныйФайл, aVal1, aVal2, aDeb, aCre, aComment, sНФАref, grpГРП, grpПГР, grpИМЯ, svrANA, UnqANA, Value, tmp :String;
var КОДСЧТ, КОДКБК, КОДИСТ, КОДСЧ6, КОДНФА, NAMНФА, КОДУЧН, NAMУЧН, КОДМОЛ, КОДМХЭ, NAMМОЛ, NAMМХЭ, КОДДОП :String;
var okData, useУЧН, Режим, счДЕБ, безУЧН, Work, flgW1, flgW2, flgW3 :Logical;
var RO, len, ii, xx, jj, pp, hh, мм1 :Integer;
var aSum1, aSum2, SUM, QUA, KOL :Numeric;
var aDate, ddWork :Date;
var REC :Record;
 okData=False;
 Refresh(False);
 Режим=AutoRefresh;
 ToggleAutoRefresh(False);
 ShowProgress(0, "Подготовка данных...");
 RO=OpenWorkArea("РПО_НФА", "", "");
 Try
   ClearVariable(RLSНФА); ClearVariable(REFНФА); ClearVariable(LSTUNQ); ClearVariable(LSTСУМ); ClearVariable(LSTКОЛ); ClearVariable(LSTМОЛ); ClearVariable(LSTМХЭ); ClearVariable(aAna);
   TimeCreationRep="";
   ClearVariable(СлужКорИнфо);
   ВременныйФайл=PlanVar('CACHE')+"\"+GetGUID;
   xx=TujRepNoNullBal+TujRepCombinedAna+if(curБЗС=1 or curБЗС=2, TujRepBalAccount, 0)+if(curБЗС=1 or curБЗС=3, TujRepZabalance, 0);
   -- Служебная инфа
   TimeCreationRep="Время создания отчета: "+DateToString(ToDay)+" "+TimeToHMSstring(Time);
   СлужКорИнфо[1]="Отбор по счетам: "+vMskACC;
   СлужКорИнфо[2]="Отбор по признакам: "+vMskANA;
   СлужКорИнфо[3]="Отбор по группам НФА: "+if(отчГРП<>"", namГРП, "нет");
   len=TujReport(ВременныйФайл, 1.1.100, ddОпер+1, "("+vMskACC+")", vMskANA, "ДНФА", "", "", xx, False);
   if len>0:
      OpenTextJur(ВременныйФайл);
      Try
        ShowProgress(len, "Поиск данных...");
        ii=1;
        мм1=0;
        while not GetTransFromTextJur(aDate, aSum1, aVal1, aSum2, aVal2, aDeb, aCre, aAna, aComment) do
          ProgressPos(ii);
          ii=ii+1;
          xx=LengthOfArray(aAna);
          КОДИСТ=""; КОДКБК=""; КОДСЧ6=""; КОДСЧТ=""; SUM=0.00;
          if aDeb="00" or aDeb="00Z": КОДСЧТ=aCre; СЧДЕБ=False; fi;
          if aCre="00" or aCre="00Z": КОДСЧТ=aDeb; СЧДЕБ=True;  fi;
          if Match(КОДСЧТ, "???.????.???????.???.?.101.??.???")   : КОДСЧТ=SubStr(КОДСЧТ, 1, 30)+"???"; БЕЗУЧН=False; КОДИСТ=SubStr(КОДСЧТ, 22, 1); КОДКБК=SubStr(КОДСЧТ, 1, 20); КОДСЧ6=SubStr(КОДСЧТ, 24, 6);
          |  Match(КОДСЧТ, "???.????.???????.???.?.102.??.???")   : КОДСЧТ=SubStr(КОДСЧТ, 1, 30)+"???"; БЕЗУЧН=False; КОДИСТ=SubStr(КОДСЧТ, 22, 1); КОДКБК=SubStr(КОДСЧТ, 1, 20); КОДСЧ6=SubStr(КОДСЧТ, 24, 6);
          |  Match(КОДСЧТ, "???.????.???????.???.?.105.??.???")   : КОДСЧТ=SubStr(КОДСЧТ, 1, 30)+"???"; БЕЗУЧН=True;  КОДИСТ=SubStr(КОДСЧТ, 22, 1); КОДКБК=SubStr(КОДСЧТ, 1, 20); КОДСЧ6=SubStr(КОДСЧТ, 24, 6);
          |  Match(КОДСЧТ, "ЗАБ.??.10?.??")                       : КОДСЧТ=КОДСЧТ;                      БЕЗУЧН=True;  КОДИСТ="З";                   КОДКБК="ЗАБАЛАНС";            КОДСЧ6=SubStr(КОДСЧТ,  8, 6);
          else КОДИСТ=""; КОДКБК=""; КОДСЧ6=""; КОДСЧТ="";
          fi;
          if КОДСЧТ<>"":
            if (aVal1="" or aVal1="РУБ") and aSum1<>0: if СЧДЕБ: SUM=aSum1; else SUM=-aSum1; fi;
            |  (aVal2="" or aVal2="РУБ") and aSum2<>0: if СЧДЕБ: SUM=aSum2; else SUM=-aSum2; fi;
            else SUM=0.00;
            fi;
            if xx>0:
              -- очистка аналитики
              КОДНФА=""; КОДУЧН=""; КОДМОЛ=""; КОДМХЭ=""; КОДДОП="";
              QUA=0.00; KOL=0.00;
              for jj=1 to xx do
                pp=Pos(":", aAna[jj]);
                if pp>0:
                  QUA=StringToNumeric(SubStr(aAna[jj], pp+1, Length(aAna[jj])-pp));
                  svrANA=SubStr(aAna[jj], 1, pp-1);
                else
                  svrANA=aAna[jj];
                fi;
                tmp=SubStr(svrANA, 1, 1);
                if tmp="+" or tmp="-": svrANA=SubStr(svrANA, 2, 255); fi;
                if Match(svrANA,         "НФА.*"): КОДНФА=svrANA; KOL=if(СЧДЕБ, QUA, -QUA);
                |  Match(svrANA,     pfxУЧН+".*"): КОДУЧН=svrANA;
                |  Match(svrANA,         "МОЛ.*"): КОДМОЛ=svrANA;
                |  Match(svrANA,           "М.*"): КОДМХЭ=svrANA;
                |  Match(svrANA, ДОП_VOCКОД+".*"): if useДОП<0: КОДДОП=svrANA; fi;
                fi;
                --if useДОП<0: if Match(svrANA, ДОП_VOCКОД+".*"): КОДДОП=svrANA; else КОДДОП=""; fi; fi;
              od;
            fi; -- xx>0
            -- НФА
            sНФАref="";
            if КОДНФА="": КОДНФА="НФА.$$$"; fi;
            hh=SearchInArray(RLSНФА, КОДНФА, True, 1);
            if hh=-1:
               мм1=мм1+1;
               sНФАref=Format("%.10d", мм1);
               pp=InsertInArraySort(RLSНФА, КОДНФА);
               InsertInArray(REFНФА, pp, sНФАref);
            else
               sНФАref=REFНФА[hh];
            fi;
            -- УЧН
            --useУЧН=USE_ИНВЕНТАРНЫЙ_НОМЕР(КОДСЧТ, SUM, KOL, ddОпер, КОДУЧН);
            useУЧН=USE_ИНВЕНТАРНЫЙ_НОМЕР(КОДСЧТ, SUM, KOL, ddОпер, КОДУЧН, constНФА100П, constНФА_ИНВ);
            if БЕЗУЧН or Trim(КОДУЧН)="" or not useУЧН: КОДУЧН=pfxУЧН+".$$$"; fi;
            -- МОЛ
            if КОДМОЛ="": КОДМОЛ="МОЛ.$$$"; fi;
            -- МХЭ
            if КОДМХЭ="": КОДМХЭ="М.Э.$$$"; fi;
            -- Отбор по условию
            Work=True;
            if Work:
              if Work and useМОЛ<0: if flgВыборМОЛ: Work=ПризнакСоотвНабору(КОДМОЛ, отчМОЛ); else if ОТЧМОЛ    <>"" and Up(КОДМОЛ)<>    Up(ОТЧМОЛ): Work=False; fi; fi; fi;
              if Work and useМХЭ<0: if flgВыборМОЛ: Work=ПризнакСоотвНабору(КОДМХЭ, отчМХЭ); else if ОТЧМХЭ    <>"" and Up(КОДМХЭ)<>    Up(ОТЧМХЭ): Work=False; fi; fi; fi;
              if Work and useДОП<0: if ДОП_АНАКОД<>"" and Up(КОДДОП)<>Up(ДОП_АНАКОД): Work=False; fi; fi;
            fi;
            if Work:
              NAMНФА=""; NAMУЧН=""; NAMМОЛ=""; NAMМХЭ=""; UnqANA="";
              UnqANA=КОДМОЛ+"#"+КОДМХЭ+"#"+КОДСЧТ+"#"+sНФАref+"#"+КОДУЧН;
              -- КОДМОЛ#КОДМХЭ#КОДСЧТ#sНФАref#КОДУЧН
              hh=SearchInArray(LSTUNQ, UnqANA, True, 1);
              if hh=-1:
                 -- НФА
                 NAMНФА=УдалитьРазделитель(Trim(Name_A(КОДНФА)));
                 if NAMНФА="": if КОДНФА="НФА.$$$": NAMНФА="> нет кода НФА"; else NAMНФА=КОДНФА; fi; fi;
                 -- УЧН
                 NAMУЧН=УдалитьРазделитель(Trim(Name_A("ИНВВЕД."+КОДНФА+"."+КОДУЧН)));
                 if NAMУЧН="": NAMУЧН="> не присвоен"; fi;
                 -- МОЛ
                 NAMМОЛ=УдалитьРазделитель(Trim(Name_A(КОДМОЛ)));
                 if NAMМОЛ="": if КОДМОЛ="МОЛ.$$$": NAMМОЛ="> нет кода МОЛ"; else NAMМОЛ=КОДМОЛ; fi; fi;
                 -- МХЭ
                 NAMМХЭ=УдалитьРазделитель(Trim(Name_A(КОДМХЭ)));
                 if NAMМХЭ="": if КОДМХЭ="М.Э.$$$": NAMМХЭ="> нет кода МХЭ"; else NAMМХЭ=КОДМХЭ; fi; fi;
                 --
                 if flgМОЛ>1:
                   tmp=NAMМОЛ+Chr(169)+КОДМОЛ;
                   if SearchInArray(HdrFldSRT, tmp, True, 1)<1:
                     pp=InsertInArraySort(HdrFldSRT, tmp);
                     InsertInArray(HdrFldКОД, pp, КОДМОЛ);
                     InsertInArray(HdrFldИМЯ, pp, NAMМОЛ);
                   fi;
                 fi;
                 if flgМХЭ>1:
                   tmp=NAMМХЭ+Chr(169)+КОДМХЭ;
                   if SearchInArray(HdrFldSRT, tmp, True, 1)<1:
                     pp=InsertInArraySort(HdrFldSRT, tmp);
                     InsertInArray(HdrFldКОД, pp, КОДМХЭ);
                     InsertInArray(HdrFldИМЯ, pp, NAMМХЭ);
                   fi;
                 fi;
                 Value="";
                 if fldСОРТкод="тНФАКОД": Value=КОДНФА;
                 |  fldСОРТкод="тНФАИМЯ": Value=NAMНФА;
                 |  fldСОРТкод="тНФАУЧН": Value=КОДУЧН;
                 |  fldСОРТкод="тНФАИНВ": Value=NAMУЧН;
                 |  fldСОРТкод="тМОЛКОД": Value=КОДМОЛ;
                 |  fldСОРТкод="тМОЛИМЯ": Value=NAMМОЛ;
                 |  fldСОРТкод="тМХЭКОД": Value=КОДМХЭ;
                 |  fldСОРТкод="тМХЭИМЯ": Value=NAMМХЭ;
                 |  fldСОРТкод="тНФАСЧТ": Value=КОДСЧ6;
                 |  fldСОРТкод="тНФАКБК": Value=КОДКБК;
                 fi;
                 if Value<>"": AddInArray(UsrFldSRT, True, False, Value); fi;
                 --
                 pp=0;
                 pp=InsertInArraySort(LSTUNQ, UnqANA);
                 InsertInArray(LSTСУМ, pp, SUM);
                 InsertInArray(LSTКОЛ, pp, KOL);
                 InsertInArray(LSTИСТ, pp, КОДИСТ);
                 InsertInArray(LSTКБК, pp, КОДКБК);
                 InsertInArray(LSTСЧ6, pp, КОДСЧ6);
                 InsertInArray(LSTНФА, pp, NAMНФА);
                 InsertInArray(LSTИНВ, pp, NAMУЧН);
                 InsertInArray(LSTМОЛ, pp, NAMМОЛ);
                 InsertInArray(LSTМХЭ, pp, NAMМХЭ);
                 InsertInArray(LSTЮЗР, pp, Value);
                 InsertInArray(LSTЦЕН, pp, not(БЕЗУЧН));
              else
                 LSTСУМ[hh]=LSTСУМ[hh]+SUM;
                 LSTКОЛ[hh]=LSTКОЛ[hh]+KOL;
              fi;
            fi; -- отбор по условию
          fi; -- КОДСЧТ<>""
        end; -- while
      Finally
        CloseTextJur;
      end; -- Try
      Try DeleteFile(ВременныйФайл); Except end;
   fi; -- len>0 (TujReport)
   len=LengthOfArray(LSTUNQ);
   if len>0:
     if мм1>0:
        СтрокиArНФА=мм1;
        CloseProgress;
        ShowProgress(1, "Сортировка промежуточных данных (справочники)...");
        SortSection(СтрокиArНФА, "REFНФА", True, False);
     fi;
     ShowProgress(len, "Расчет остатков...");
     ОчиститьТаблицу;
     ОчиститьИтоги;
     ValidateОтчетSection;
     aComment=Trim(СформироватьШаблонСортировки);
     xx=0;
     if Name_S("ЗАБ.НФА.ДЭКСПЛ")<>" ": useУЧН=True; else useУЧН=False; fi; -- применяем или нет дату ввода в эксплуатацию
     for ii=1 to len do
       КОДМОЛ=""; КОДМХЭ=""; КОДСЧТ=""; КОДНФА=""; sНФАref=""; КОДУЧН=""; SUM=0.00; KOL=0.00;
       REC=NIL; grpГРП=""; grpПГР=""; grpИМЯ="";
       ProgressPos(ii);
       SUM=LSTСУМ[ii];
       KOL=LSTКОЛ[ii];
       -- КОДМОЛ#КОДМХЭ#КОДСЧТ#sНФАref#КОДУЧН
       КОДМОЛ  = Trim(ExtractWord(1, LSTUNQ[ii], "#"));
       КОДМХЭ  = Trim(ExtractWord(2, LSTUNQ[ii], "#"));
       КОДСЧТ  = Trim(ExtractWord(3, LSTUNQ[ii], "#"));
         aCre  = СчетАмортизацииПоСчетуНФА(КОДСЧТ);
       КОДУЧН  = Trim(ExtractWord(5, LSTUNQ[ii], "#"));
       if КОДУЧН=(pfxУЧН+".$$$"): КОДУЧН="> не присвоен"; fi;
       --
       sНФАref = Trim(ExtractWord(4, LSTUNQ[ii], "#"));
       pp=SearchInArray(REFНФА, sНФАref, True, 1);
       if pp>0: КОДНФА=RLSНФА[pp]; else КОДНФА=""; fi;
       if КОДНФА<>"" and (flgГРП>0 or отчГРП<>""):
         REC=SignToRecord(КОДНФА, False);
         if REC<>NIL:
           pp=GetRecordNumber(RO, REC);
           if pp>0: 
             grpГРП=КорректныеСимволыПризнака(Lo(Trim(GetFieldS(RO, pp, "ГРУППАВИД"))));
             if grpГРП="": grpГРП="_без группировки"; fi;
             grpПГР=КорректныеСимволыПризнака(Lo(Trim(GetFieldS(RO, pp, "ГРУППАКОД"))));
             grpИМЯ=УдалитьРазделитель(Lo(Trim(GetFieldS(RO, pp, "ГРУППАССЫЛКА"))));
             if grpПГР=""  and grpИМЯ<>"": grpПГР=grpИМЯ;
             |  grpПГР<>"" and grpИМЯ="" : grpИМЯ=grpПГР;
             |  grpПГР=""  and grpИМЯ="" : grpПГР="_без группировки"; grpИМЯ=grpПГР;
             fi;
           fi;
         fi;
       fi;
       --
       if ValidSign(КОДНФА) or КОДНФА="НФА.$$$": flgW1=True; else flgW1=False; fi;
       flgW2=СоответствуетФильтруПоГруппеНФА(отчГРП, grpГРП, grpПГР);
       if LSTЦЕН[ii]:
         flgW3=False;
         if KOL>0: QUA=Abs(SUM)/Abs(KOL); else QUA=0.00; fi; -- QUA - здесь сейчас цена
         if     flgНФАамт and     flgНФА100 and     flgНФАбез: flgW3=True;
         |  not flgНФАамт and     flgНФА100 and     flgНФАбез: if                     (QUA>constНФА_ИНВ and QUA<=constНФА100П) or QUA<=constНФА_ИНВ: flgW3=True; fi;
         |      flgНФАамт and not flgНФА100 and     flgНФАбез: if QUA>constНФА100П or                                             QUA<=constНФА_ИНВ: flgW3=True; fi;
         |      flgНФАамт and     flgНФА100 and not flgНФАбез: if QUA>constНФА100П or (QUA>constНФА_ИНВ and QUA<=constНФА100П)                     : flgW3=True; fi;
         |  not flgНФАамт and not flgНФА100 and     flgНФАбез: if                                                                 QUA<=constНФА_ИНВ: flgW3=True; fi;
         |  not flgНФАамт and     flgНФА100 and not flgНФАбез: if                     (QUA>constНФА_ИНВ and QUA<=constНФА100П)                     : flgW3=True; fi;
         |      flgНФАамт and not flgНФА100 and not flgНФАбез: if QUA>constНФА100П                                                                 : flgW3=True; fi;
         fi;
       else
         flgW3=True;
       fi;
       if flgW1 and flgW2 and flgW3: Work=True ;else Work=False; fi;
       if Work and (SUM<>0.00 or KOL<>0.00):
         xx=xx+1;
         тНФАКОД[xx]=КОДНФА;
         тНФАИМЯ[xx]=LSTНФА[ii];
         тНФАЕДИ[xx]=Lo(Unit(КОДНФА));
         if flgГРП>0:
           тНФАГРК[xx]=grpГРП+"$"+grpПГР;
           тНФАГРИ[xx]="Группа '"+grpГРП+"'.  Подгруппа '"+grpИМЯ+"'";
         else
           тНФАГРК[xx]=""; тНФАГРИ[xx]="";
         fi;
         if тНФАГРК[xx]="" or тНФАГРК[xx]="$": тНФАГРК[xx]="_без группировки$_без группировки"; тНФАГРИ[xx]="без группировки"; fi;
         тНФАУЧН[xx]=КОДУЧН;
         тНФАИНВ[xx]=LSTИНВ[ii];
         тМОЛКОД[xx]=КОДМОЛ;
         тМОЛИМЯ[xx]=LSTМОЛ[ii];
         тМХЭКОД[xx]=КОДМХЭ;
         тМХЭИМЯ[xx]=LSTМХЭ[ii];
         тКОЛНФА[xx]=KOL;
         тСУМБАЛ[xx]=SUM;
         тНФАИСТ[xx]=LSTИСТ[ii];
         тНФАКБК[xx]=LSTКБК[ii];
         тНФАСЧТ[xx]=LSTСЧ6[ii];
         if ValidSign(КОДУЧН) and ValidSign(КОДНФА):
           if aCre<>"" and Name_S(aCre)<>" ": 
             if useДОП<>0 and ДОП_АНАКОД<>"":
               Try тСУМАМТ[xx]=Round(Abs(Saldo(aCre+"{"+КОДНФА+"&"+КОДУЧН+"&"+ДОП_АНАКОД+"}", ddОпер+1)), 2); Except тСУМАМТ[xx]=0.00; end;
             else
               тСУМАМТ[xx]=Round(Abs(Saldo(aCre+"{"+КОДНФА+"&"+КОДУЧН+"}", ddОпер+1)), 2);
             fi;
             --if тСУМАМТ[xx]>тСУМБАЛ[xx]: тСУМАМТ[xx]=тСУМБАЛ[xx]; fi;
           else 
             тСУМАМТ[xx]=0.00;
           fi;
           if useУЧН:
             ddWork=1.1.100+Int(Saldo("ЗАБ.НФА.ДЭКСПЛ{"+КОДНФА+"&"+КОДУЧН+"}", ddОпер+1));
             if ddWork>1.1.1800: тДАТЭКС[xx]=DateToString(ddWork); fi;
           fi;
         fi;
         if not LSTЦЕН[ii]: тСУМОСТ[xx]=0.00; else тСУМОСТ[xx]=тСУМБАЛ[xx]-тСУМАМТ[xx]; fi;
         тUSEЦЕН[xx]=LSTЦЕН[ii];
         --
         тSRTFLD[xx]=СформироватьЗначениеСортировки(aComment, xx, LSTЮЗР[ii]);
       fi;
     od;
   else
     Message("По заданнам условиям отбора^Mданных для отбора не обнаружено!", mtInformation);
     ^False;
   fi;
   len=LengthOfArray(тSRTFLD);
   if len>0:
     okData=True;
   else
     Message("По заданнам условиям отбора^Mненулевых остатков не обнаружено!", mtInformation);
     okData=False;
   fi;
 Finally
   ToggleAutoRefresh(Режим);
   CloseProgress;
   CloseWorkArea(RO);
 end;
 ^okData;
end;

Proc СортировкаВедомости;
var len :Integer;
 len=LengthOfArray(тSRTFLD);
 if len>0:
   Позиции=len;
   ShowProgress(len, "Сортировка промежуточных данных (таблица)...");
   Try
     SortSection(Позиции, "тSRTFLD", True, False);
   Finally
     CloseProgress;
   end;
 fi;
end;

Proc FillСчета;
var RO, ii, num :Integer;
 ClearVariable(BufMsk);
 ClearVariable(BufStr);
 RO=OpenWorkArea("РПО_БЮДЖ_КЛАСС", "CODE", "NAME_VOC='СЧ' and Match(CODE, '1??.??')");
 Try
   num=Records(RO);
   if num>0:
     for ii=1 to num do
       BufMsk[ii]=GetFieldS(RO, ii, "CODE");
       BufStr[ii]=GetFieldS(RO, ii, "TXT");
     od;
   fi;
 Finally
   CloseWorkArea(RO);
 end;
end;

Func ВзятьИмяПараметраИерархическойГруппы(nameField:String; Iter:Integer; ВзятьУзелГруппы:Logical) :String;
var кодValue, имяValue :String;
var num :Integer;
 if Pos(">>", nameField)>0:
   кодValue=тМОЛИМЯ[Iter];
   имяValue=тМОЛКОД[Iter];
   if имяValue<>"": имяValue="["+имяValue+"]"; fi;
 |  Pos("<<", nameField)>0:
   кодValue=тМХЭИМЯ[Iter];
   имяValue=тМХЭКОД[Iter];
   if имяValue<>"": имяValue="["+имяValue+"]"; fi;
 else
   Try кодValue=GetVariableS(nameField+"["+Str(if(ВзятьУзелГруппы, Iter+1, Iter))+"]"); Except кодValue=""; end;
   имяValue="";
   if кодValue<>"":
     if nameField="тНФАСЧТ":
       num=SearchInArray(BufMsk, кодValue, True, 1);
       if num>0: имяValue=BufStr[num]; fi;
     |  nameField="тНФАКБК":
        if Match(кодValue, "???.????.???????.???"):
          имяValue=Trim(Name_S(SubStr(кодValue, 1, 9)))+" > "+Trim(Name_S(SubStr(кодValue, 1, 17)))+" > "+Trim(Name_S(кодValue+"."));
        fi;
        -- if Match(кодValue, "???.????.???????.???"): имяValue=Trim(Name_S(кодValue+".")); fi; -- короткий вариант
     |  nameField="тНФАГРК":
       if ВзятьУзелГруппы:
         Try имяValue=GetVariableS("тНФАГРИ"+"["+Str(Iter+1)+"]"); Except имяValue=""; end;
         num=Pos(".", имяValue);
         if num>0:
           имяValue=Up(SubStr(имяValue, 1, num));
         else
           if Pos("без группировки", имяValue)>0: имяValue="БЕЗ ГРУППИРОВКИ"; else имяValue=""; fi;
         fi;
       else
         Try имяValue=GetVariableS("тНФАГРИ"+"["+Str(Iter)+"]"); Except имяValue=""; end;
       fi;
       if имяValue<>"": ^имяValue; fi;
     fi;
   fi;
 fi;
 if имяValue<>"": ^(кодValue+" "+Chr(151)+" "+имяValue); else ^""; fi;
end;

Proc ПодсчетВставкаПромежуточныхИтогов(ddОпер:Date);
var fldKEY1, fldKEY2, fldKEY3, fldKEY4, fldKEY5, valFLD1, valFLD2, valFLD3, valFLD4, valFLD5, valKEY1, valKEY2, valKEY3, valKEY4, valKEY5 :String;
var valKEY1грп, valKEY2грп, valKEY3грп, valKEY4грп, valKEY5грп :String;
var len, kk, ii, num, jj, xx, ordГРП :Integer;
var Value, КОДКБК, КОДИСТ, КОДСЧТ, tmp :String;
var ЕстьИерархическаяГруппировка, поЦенам :Logical;
var constБЕЗУЧН, const100ПРЦ, KOL, SUM, AMT, OST, Цена :Numeric;
var ddWork :Date;
 ddWork=if(ddОпер>1.1.2000, ddОпер+1, ToDay+1);
 Try constБЕЗУЧН=Com_Var("ОС_РАСХ" , ddWork); Except constБЕЗУЧН=0.00; end;
 Try const100ПРЦ=Com_Var("ОС_100"  , ddWork); Except const100ПРЦ=0.00; end;
 if constБЕЗУЧН=0.00: if ddWork>=1.1.2009: constБЕЗУЧН= 3000.00; else constБЕЗУЧН= 1000.00; fi; fi;
 if const100ПРЦ=0.00: if ddWork>=1.1.2011: const100ПРЦ=40000.00; else const100ПРЦ=20000.00; fi; fi;
 len=LengthOfArray(тSRTFLD);
 ЕстьИерархическаяГруппировка=False;
 if len>0:
   ОчиститьИтоги;
   СортировкаВедомости;
   fldKEY1=""; fldKEY2=""; fldKEY3=""; fldKEY4=""; fldKEY5="";
   if Trim(Иерархия)<>"":
     num=WordsCount(Иерархия, " ");
     if not num>5:
       ClearVariable(Buf);
       ЕстьИерархическаяГруппировка=True;
       ordГРП=0;
       for ii=1 to num do
         Value=ExtractWord(ii, Иерархия, " ");
         if Value="СЧТ": Try PutVariableS("Buf["+Str(ii)+"]", "тНФАСЧТ");   Except end;
         |  Value="КБК": Try PutVariableS("Buf["+Str(ii)+"]", "тНФАКБК");   Except end;
         |  Value="МОЛ": Try PutVariableS("Buf["+Str(ii)+"]", ">>тМОЛИМЯ"); Except end;
         |  Value="МХЭ": Try PutVariableS("Buf["+Str(ii)+"]", "<<тМХЭИМЯ"); Except end;
         |  Value="ГРП": Try PutVariableS("Buf["+Str(ii)+"]", "тНФАГРК"); ordГРП=ii; Except end;
         fi;
       od;
       fldKEY1=Buf[1]; fldKEY2=Buf[2]; fldKEY3=Buf[3]; fldKEY4=Buf[4]; fldKEY5=Buf[5];
     fi;
   fi;
   FillСчета;
   ShowProgress(len, "Подсчет, вставка промежуточных итогов...");
   Try
     итгСУМБАЛвед=SumOfArray(тСУМБАЛ, Позиции);
     итгСУМАМТвед=SumOfArray(тСУМАМТ, Позиции);
     итгСУМОСТвед=SumOfArray(тСУМОСТ, Позиции);
     kk=1;
     while тНФАКОД[kk]<>"" do
       ProgressPos(kk);
       KOL=тКОЛНФА[kk];
       SUM=тСУМБАЛ[kk];
       AMT=тСУМАМТ[kk];
       OST=тСУМОСТ[kk];
       поЦенам=тUSEЦЕН[kk];
       if KOL>0: Цена=Abs(SUM)/Abs(KOL); else Цена=0.00; fi;
       КОДКБК=тНФАКБК[kk]; -- ???.????.???????.???  len=20
       КОДИСТ=тНФАИСТ[kk]; -- ?                     len=01 - 1, 2, З
       КОДСЧТ=тНФАСЧТ[kk]; -- ???.??                len=06
       -- ЗАКЛЮЧИТЕЛЬНЫЕ ИТОГИ
       -- Заключительные итоги - таблица N1 и N4
       jj=SearchInArray(иСЧТСкод, КОДСЧТ, True, 1);
       if jj>0: -- накапливаем результат итогов
         xx=jj;
         if not тUSEЦЕН[xx] and поЦенам: тUSEЦЕН[xx]=True; fi;
         if иtxt_amt[xx]="" and поЦенам: иtxt_amt[xx]="амортизация"; fi;
         if иtxt_ost[xx]="" and поЦенам: иtxt_ost[xx]="остаточная";  fi;
         if КОДИСТ="З": 
            -- Забаланс
            иСЧТСзаб[xx] = иСЧТСзаб[xx]+SUM;                                            иСЧТСвсг[xx]=иСЧТСбалИ[xx]+иСЧТСзаб[xx];
         |  КОДИСТ="1": 
            -- Бюджет
            иСЧТСбалБ[xx]=иСЧТСбалБ[xx]+SUM; иСЧТСбалИ[xx]=иСЧТСбалБ[xx]+иСЧТСбалВ[xx]; иСЧТСвсг[xx]=иСЧТСбалИ[xx]+иСЧТСзаб[xx];
            иСЧТСамтБ[xx]=иСЧТСамтБ[xx]+AMT; иСЧТСамтИ[xx]=иСЧТСамтБ[xx]+иСЧТСамтВ[xx];
            иСЧТСостБ[xx]=иСЧТСостБ[xx]+OST; иСЧТСостИ[xx]=иСЧТСостБ[xx]+иСЧТСостВ[xx];
            if поЦенам:
              -- Раскидываем по ценам...
              if Цена>const100ПРЦ:
                 -- амортизируемые ОС
                 иСЧТбалГР3_Б[xx]=иСЧТбалГР3_Б[xx]+SUM; иСЧТбалГР3_И[xx]=иСЧТбалГР3_Б[xx]+иСЧТбалГР3_В[xx];
                 иСЧТамтГР3_Б[xx]=иСЧТамтГР3_Б[xx]+AMT; иСЧТамтГР3_И[xx]=иСЧТамтГР3_Б[xx]+иСЧТамтГР3_В[xx];
                 иСЧТостГР3_Б[xx]=иСЧТостГР3_Б[xx]+OST; иСЧТостГР3_И[xx]=иСЧТостГР3_Б[xx]+иСЧТостГР3_В[xx];
              |  Цена>constБЕЗУЧН and Цена<=const100ПРЦ:
                 -- 100% амортизация ОС при выдаче в эксплуатацию
                 иСЧТбалГР2_Б[xx]=иСЧТбалГР2_Б[xx]+SUM; иСЧТбалГР2_И[xx]=иСЧТбалГР2_Б[xx]+иСЧТбалГР2_В[xx];
                 иСЧТамтГР2_Б[xx]=иСЧТамтГР2_Б[xx]+AMT; иСЧТамтГР2_И[xx]=иСЧТамтГР2_Б[xx]+иСЧТамтГР2_В[xx];
                 иСЧТостГР2_Б[xx]=иСЧТостГР2_Б[xx]+OST; иСЧТостГР2_И[xx]=иСЧТостГР2_Б[xx]+иСЧТостГР2_В[xx];
              |  Цена<=constБЕЗУЧН:
                 -- списание ОС при выдаче в эксплуатацию
                 иСЧТбалГР1_Б[xx]=иСЧТбалГР1_Б[xx]+SUM; иСЧТбалГР1_И[xx]=иСЧТбалГР1_Б[xx]+иСЧТбалГР1_В[xx];
              fi;
            fi;
         else           
            -- Внебюджет
            иСЧТСбалВ[xx]=иСЧТСбалВ[xx]+SUM; иСЧТСбалИ[xx]=иСЧТСбалБ[xx]+иСЧТСбалВ[xx]; иСЧТСвсг[xx]=иСЧТСбалИ[xx]+иСЧТСзаб[xx];
            иСЧТСамтВ[xx]=иСЧТСамтВ[xx]+AMT; иСЧТСамтИ[xx]=иСЧТСамтБ[xx]+иСЧТСамтВ[xx];
            иСЧТСостВ[xx]=иСЧТСостВ[xx]+OST; иСЧТСостИ[xx]=иСЧТСостБ[xx]+иСЧТСостВ[xx];
            if поЦенам:
              -- Раскидываем по ценам...
              if Цена>const100ПРЦ:
                 -- амортизируемые ОС
                 иСЧТбалГР3_В[xx]=иСЧТбалГР3_В[xx]+SUM; иСЧТбалГР3_И[xx]=иСЧТбалГР3_Б[xx]+иСЧТбалГР3_В[xx];
                 иСЧТамтГР3_В[xx]=иСЧТамтГР3_В[xx]+AMT; иСЧТамтГР3_И[xx]=иСЧТамтГР3_Б[xx]+иСЧТамтГР3_В[xx];
                 иСЧТостГР3_В[xx]=иСЧТостГР3_В[xx]+OST; иСЧТостГР3_И[xx]=иСЧТостГР3_Б[xx]+иСЧТостГР3_В[xx];
              |  Цена>constБЕЗУЧН and Цена<=const100ПРЦ:
                 -- 100% амортизация ОС при выдаче в эксплуатацию
                 иСЧТбалГР2_В[xx]=иСЧТбалГР2_В[xx]+SUM; иСЧТбалГР2_И[xx]=иСЧТбалГР2_Б[xx]+иСЧТбалГР2_В[xx];
                 иСЧТамтГР2_В[xx]=иСЧТамтГР2_В[xx]+AMT; иСЧТамтГР2_И[xx]=иСЧТамтГР2_Б[xx]+иСЧТамтГР2_В[xx];
                 иСЧТостГР2_В[xx]=иСЧТостГР2_В[xx]+OST; иСЧТостГР2_И[xx]=иСЧТостГР2_Б[xx]+иСЧТостГР2_В[xx];
              |  Цена<=constБЕЗУЧН:
                 -- списание ОС при выдаче в эксплуатацию
                 иСЧТбалГР1_В[xx]=иСЧТбалГР1_В[xx]+SUM; иСЧТбалГР1_И[xx]=иСЧТбалГР1_Б[xx]+иСЧТбалГР1_В[xx];
              fi;
            fi;
         fi;
       else -- новый элемент итогов
         xx=InsertInarraySort(иСЧТСкод, КОДСЧТ);
         InsertInArray(иtxt_amt, xx, if(поЦенам, "амортизация", ""));
         InsertInArray(иtxt_ost, xx, if(поЦенам, "остаточная", ""));
         if КОДИСТ="З":
             -- Забаланс
            InsertInArray(иСЧТСбалБ, xx, 0.00); InsertInArray(иСЧТСбалВ, xx, 0.00); InsertInArray(иСЧТСбалИ, xx, 0.00); InsertInArray(иСЧТСзаб, xx, SUM);
            InsertInArray(иСЧТСамтБ, xx, 0.00); InsertInArray(иСЧТСамтВ, xx, 0.00); InsertInArray(иСЧТСамтИ, xx, 0.00); InsertInArray(иСЧТСвсг, xx, SUM);
            InsertInArray(иСЧТСостБ, xx, 0.00); InsertInArray(иСЧТСостВ, xx, 0.00); InsertInArray(иСЧТСостИ, xx, 0.00);
            if поЦенам:
              -- Заглушка для цен
              InsertInArray(иСЧТбалГР3_Б, xx, 0.00); InsertInArray(иСЧТбалГР3_В, xx, 0.00); InsertInArray(иСЧТбалГР3_И, xx, 0.00);
              InsertInArray(иСЧТамтГР3_Б, xx, 0.00); InsertInArray(иСЧТамтГР3_В, xx, 0.00); InsertInArray(иСЧТамтГР3_И, xx, 0.00);
              InsertInArray(иСЧТостГР3_Б, xx, 0.00); InsertInArray(иСЧТостГР3_В, xx, 0.00); InsertInArray(иСЧТостГР3_И, xx, 0.00);
              InsertInArray(иСЧТбалГР2_Б, xx, 0.00); InsertInArray(иСЧТбалГР2_В, xx, 0.00); InsertInArray(иСЧТбалГР2_И, xx, 0.00);
              InsertInArray(иСЧТамтГР2_Б, xx, 0.00); InsertInArray(иСЧТамтГР2_В, xx, 0.00); InsertInArray(иСЧТамтГР2_И, xx, 0.00);
              InsertInArray(иСЧТостГР2_Б, xx, 0.00); InsertInArray(иСЧТостГР2_В, xx, 0.00); InsertInArray(иСЧТостГР2_И, xx, 0.00);
              InsertInArray(иСЧТбалГР1_Б, xx, 0.00); InsertInArray(иСЧТбалГР1_В, xx, 0.00); InsertInArray(иСЧТбалГР1_И, xx, 0.00);
            fi;
         |  КОДИСТ="1": 
            -- Бюджет
            InsertInArray(иСЧТСбалБ, xx, SUM);  InsertInArray(иСЧТСбалВ, xx, 0.00); InsertInArray(иСЧТСбалИ, xx, SUM);  InsertInArray(иСЧТСзаб, xx, 0.00);
            InsertInArray(иСЧТСамтБ, xx, AMT);  InsertInArray(иСЧТСамтВ, xx, 0.00); InsertInArray(иСЧТСамтИ, xx, AMT);  InsertInArray(иСЧТСвсг, xx, SUM);
            InsertInArray(иСЧТСостБ, xx, OST);  InsertInArray(иСЧТСостВ, xx, 0.00); InsertInArray(иСЧТСостИ, xx, OST);
            if поЦенам:
              -- Раскидываем по ценам...
              if Цена>const100ПРЦ:
                 -- амортизируемые ОС
                 InsertInArray(иСЧТбалГР3_Б, xx, SUM);  InsertInArray(иСЧТбалГР3_В, xx, 0.00); InsertInArray(иСЧТбалГР3_И, xx, SUM);
                 InsertInArray(иСЧТамтГР3_Б, xx, AMT);  InsertInArray(иСЧТамтГР3_В, xx, 0.00); InsertInArray(иСЧТамтГР3_И, xx, AMT);
                 InsertInArray(иСЧТостГР3_Б, xx, OST);  InsertInArray(иСЧТостГР3_В, xx, 0.00); InsertInArray(иСЧТостГР3_И, xx, OST);
                 InsertInArray(иСЧТбалГР2_Б, xx, 0.00); InsertInArray(иСЧТбалГР2_В, xx, 0.00); InsertInArray(иСЧТбалГР2_И, xx, 0.00);
                 InsertInArray(иСЧТамтГР2_Б, xx, 0.00); InsertInArray(иСЧТамтГР2_В, xx, 0.00); InsertInArray(иСЧТамтГР2_И, xx, 0.00);
                 InsertInArray(иСЧТостГР2_Б, xx, 0.00); InsertInArray(иСЧТостГР2_В, xx, 0.00); InsertInArray(иСЧТостГР2_И, xx, 0.00);
                 InsertInArray(иСЧТбалГР1_Б, xx, 0.00); InsertInArray(иСЧТбалГР1_В, xx, 0.00); InsertInArray(иСЧТбалГР1_И, xx, 0.00);
              |  Цена>constБЕЗУЧН and Цена<=const100ПРЦ:
                 -- 100% амортизация ОС при выдаче в эксплуатацию
                 InsertInArray(иСЧТбалГР3_Б, xx, 0.00); InsertInArray(иСЧТбалГР3_В, xx, 0.00); InsertInArray(иСЧТбалГР3_И, xx, 0.00);
                 InsertInArray(иСЧТамтГР3_Б, xx, 0.00); InsertInArray(иСЧТамтГР3_В, xx, 0.00); InsertInArray(иСЧТамтГР3_И, xx, 0.00);
                 InsertInArray(иСЧТостГР3_Б, xx, 0.00); InsertInArray(иСЧТостГР3_В, xx, 0.00); InsertInArray(иСЧТостГР3_И, xx, 0.00);
                 InsertInArray(иСЧТбалГР2_Б, xx, SUM);  InsertInArray(иСЧТбалГР2_В, xx, 0.00); InsertInArray(иСЧТбалГР2_И, xx, SUM);
                 InsertInArray(иСЧТамтГР2_Б, xx, AMT);  InsertInArray(иСЧТамтГР2_В, xx, 0.00); InsertInArray(иСЧТамтГР2_И, xx, AMT);
                 InsertInArray(иСЧТостГР2_Б, xx, OST);  InsertInArray(иСЧТостГР2_В, xx, 0.00); InsertInArray(иСЧТостГР2_И, xx, OST);
                 InsertInArray(иСЧТбалГР1_Б, xx, 0.00); InsertInArray(иСЧТбалГР1_В, xx, 0.00); InsertInArray(иСЧТбалГР1_И, xx, 0.00);
              |  Цена<=constБЕЗУЧН:
                 -- списание ОС при выдаче в эксплуатацию
                 InsertInArray(иСЧТбалГР3_Б, xx, 0.00); InsertInArray(иСЧТбалГР3_В, xx, 0.00); InsertInArray(иСЧТбалГР3_И, xx, 0.00);
                 InsertInArray(иСЧТамтГР3_Б, xx, 0.00); InsertInArray(иСЧТамтГР3_В, xx, 0.00); InsertInArray(иСЧТамтГР3_И, xx, 0.00);
                 InsertInArray(иСЧТостГР3_Б, xx, 0.00); InsertInArray(иСЧТостГР3_В, xx, 0.00); InsertInArray(иСЧТостГР3_И, xx, 0.00);
                 InsertInArray(иСЧТбалГР2_Б, xx, 0.00); InsertInArray(иСЧТбалГР2_В, xx, 0.00); InsertInArray(иСЧТбалГР2_И, xx, 0.00);
                 InsertInArray(иСЧТамтГР2_Б, xx, 0.00); InsertInArray(иСЧТамтГР2_В, xx, 0.00); InsertInArray(иСЧТамтГР2_И, xx, 0.00);
                 InsertInArray(иСЧТостГР2_Б, xx, 0.00); InsertInArray(иСЧТостГР2_В, xx, 0.00); InsertInArray(иСЧТостГР2_И, xx, 0.00);
                 InsertInArray(иСЧТбалГР1_Б, xx, SUM);  InsertInArray(иСЧТбалГР1_В, xx, 0.00); InsertInArray(иСЧТбалГР1_И, xx, SUM);
              fi;
            fi;
         else
            -- Внебюджет
            InsertInArray(иСЧТСбалБ, xx, 0.00); InsertInArray(иСЧТСбалВ, xx, SUM);  InsertInArray(иСЧТСбалИ, xx, SUM);  InsertInArray(иСЧТСзаб, xx, 0.00);
            InsertInArray(иСЧТСамтБ, xx, 0.00); InsertInArray(иСЧТСамтВ, xx, AMT);  InsertInArray(иСЧТСамтИ, xx, AMT);  InsertInArray(иСЧТСвсг, xx, SUM);
            InsertInArray(иСЧТСостБ, xx, 0.00); InsertInArray(иСЧТСостВ, xx, OST);  InsertInArray(иСЧТСостИ, xx, OST);
            if поЦенам:
              -- Раскидываем по ценам...
              if Цена>const100ПРЦ:
                 -- амортизируемые ОС
                 InsertInArray(иСЧТбалГР3_Б, xx, 0.00); InsertInArray(иСЧТбалГР3_В, xx, SUM);  InsertInArray(иСЧТбалГР3_И, xx, SUM);
                 InsertInArray(иСЧТамтГР3_Б, xx, 0.00); InsertInArray(иСЧТамтГР3_В, xx, AMT);  InsertInArray(иСЧТамтГР3_И, xx, AMT);
                 InsertInArray(иСЧТостГР3_Б, xx, 0.00); InsertInArray(иСЧТостГР3_В, xx, OST);  InsertInArray(иСЧТостГР3_И, xx, OST);
                 InsertInArray(иСЧТбалГР2_Б, xx, 0.00); InsertInArray(иСЧТбалГР2_В, xx, 0.00); InsertInArray(иСЧТбалГР2_И, xx, 0.00);
                 InsertInArray(иСЧТамтГР2_Б, xx, 0.00); InsertInArray(иСЧТамтГР2_В, xx, 0.00); InsertInArray(иСЧТамтГР2_И, xx, 0.00);
                 InsertInArray(иСЧТостГР2_Б, xx, 0.00); InsertInArray(иСЧТостГР2_В, xx, 0.00); InsertInArray(иСЧТостГР2_И, xx, 0.00);
                 InsertInArray(иСЧТбалГР1_Б, xx, 0.00); InsertInArray(иСЧТбалГР1_В, xx, 0.00); InsertInArray(иСЧТбалГР1_И, xx, 0.00);
              |  Цена>constБЕЗУЧН and Цена<=const100ПРЦ:
                 -- 100% амортизация ОС при выдаче в эксплуатацию
                 InsertInArray(иСЧТбалГР3_Б, xx, 0.00); InsertInArray(иСЧТбалГР3_В, xx, 0.00); InsertInArray(иСЧТбалГР3_И, xx, 0.00);
                 InsertInArray(иСЧТамтГР3_Б, xx, 0.00); InsertInArray(иСЧТамтГР3_В, xx, 0.00); InsertInArray(иСЧТамтГР3_И, xx, 0.00);
                 InsertInArray(иСЧТостГР3_Б, xx, 0.00); InsertInArray(иСЧТостГР3_В, xx, 0.00); InsertInArray(иСЧТостГР3_И, xx, 0.00);
                 InsertInArray(иСЧТбалГР2_Б, xx, 0.00); InsertInArray(иСЧТбалГР2_В, xx, SUM);  InsertInArray(иСЧТбалГР2_И, xx, SUM);
                 InsertInArray(иСЧТамтГР2_Б, xx, 0.00); InsertInArray(иСЧТамтГР2_В, xx, AMT);  InsertInArray(иСЧТамтГР2_И, xx, AMT);
                 InsertInArray(иСЧТостГР2_Б, xx, 0.00); InsertInArray(иСЧТостГР2_В, xx, OST);  InsertInArray(иСЧТостГР2_И, xx, OST);
                 InsertInArray(иСЧТбалГР1_Б, xx, 0.00); InsertInArray(иСЧТбалГР1_В, xx, 0.00); InsertInArray(иСЧТбалГР1_И, xx, 0.00);
              |  Цена<=constБЕЗУЧН:
                 -- списание ОС при выдаче в эксплуатацию
                 InsertInArray(иСЧТбалГР3_Б, xx, 0.00); InsertInArray(иСЧТбалГР3_В, xx, 0.00); InsertInArray(иСЧТбалГР3_И, xx, 0.00);
                 InsertInArray(иСЧТамтГР3_Б, xx, 0.00); InsertInArray(иСЧТамтГР3_В, xx, 0.00); InsertInArray(иСЧТамтГР3_И, xx, 0.00);
                 InsertInArray(иСЧТостГР3_Б, xx, 0.00); InsertInArray(иСЧТостГР3_В, xx, 0.00); InsertInArray(иСЧТостГР3_И, xx, 0.00);
                 InsertInArray(иСЧТбалГР2_Б, xx, 0.00); InsertInArray(иСЧТбалГР2_В, xx, 0.00); InsertInArray(иСЧТбалГР2_И, xx, 0.00);
                 InsertInArray(иСЧТамтГР2_Б, xx, 0.00); InsertInArray(иСЧТамтГР2_В, xx, 0.00); InsertInArray(иСЧТамтГР2_И, xx, 0.00);
                 InsertInArray(иСЧТостГР2_Б, xx, 0.00); InsertInArray(иСЧТостГР2_В, xx, 0.00); InsertInArray(иСЧТостГР2_И, xx, 0.00);
                 InsertInArray(иСЧТбалГР1_Б, xx, 0.00); InsertInArray(иСЧТбалГР1_В, xx, SUM);  InsertInArray(иСЧТбалГР1_И, xx, SUM);
              fi;
            fi;
         fi;
       fi;
       -- Заключительные итоги - таблица N2
       Value=КОДКБК+"."+КОДИСТ+"."+КОДСЧТ+".???";
       if КОДИСТ<>"З" and Match(Value, "???.????.???????.???.?.???.??.???"):
         jj=SearchInArray(иСЧТБкод, Value, True, 1);
         if jj>0: -- накапливаем результат итогов
           xx=jj;
           if КОДИСТ="1":
              иСЧТБбалБ[xx]=иСЧТБбалБ[xx]+SUM; иСЧТБбалИ[xx]=иСЧТБбалБ[xx]+иСЧТБбалВ[xx];
              иСЧТБамтБ[xx]=иСЧТБамтБ[xx]+AMT; иСЧТБамтИ[xx]=иСЧТБамтБ[xx]+иСЧТБамтВ[xx];
              иСЧТБостБ[xx]=иСЧТБостБ[xx]+OST; иСЧТБостИ[xx]=иСЧТБостБ[xx]+иСЧТБостВ[xx];
           else
              иСЧТБбалВ[xx]=иСЧТБбалВ[xx]+SUM; иСЧТБбалИ[xx]=иСЧТБбалБ[xx]+иСЧТБбалВ[xx];
              иСЧТБамтВ[xx]=иСЧТБамтВ[xx]+AMT; иСЧТБамтИ[xx]=иСЧТБамтБ[xx]+иСЧТБамтВ[xx];
              иСЧТБостВ[xx]=иСЧТБостВ[xx]+OST; иСЧТБостИ[xx]=иСЧТБостБ[xx]+иСЧТБостВ[xx];
           fi;
         else -- новый элемент итогов
           xx=InsertInarraySort(иСЧТБкод, Value);
           if КОДИСТ="1":
              InsertInArray(иСЧТБбалБ, xx, SUM);  InsertInArray(иСЧТБбалВ, xx, 0.00); InsertInArray(иСЧТБбалИ, xx, SUM);
              InsertInArray(иСЧТБамтБ, xx, AMT);  InsertInArray(иСЧТБамтВ, xx, 0.00); InsertInArray(иСЧТБамтИ, xx, AMT);
              InsertInArray(иСЧТБостБ, xx, OST);  InsertInArray(иСЧТБостВ, xx, 0.00); InsertInArray(иСЧТБостИ, xx, OST);
           else
              InsertInArray(иСЧТБбалБ, xx, 0.00); InsertInArray(иСЧТБбалВ, xx, SUM);  InsertInArray(иСЧТБбалИ, xx, SUM);
              InsertInArray(иСЧТБамтБ, xx, 0.00); InsertInArray(иСЧТБамтВ, xx, AMT);  InsertInArray(иСЧТБамтИ, xx, AMT);
              InsertInArray(иСЧТБостБ, xx, 0.00); InsertInArray(иСЧТБостВ, xx, OST);  InsertInArray(иСЧТБостИ, xx, OST);
           fi;
         fi;
       fi;
       -- Заключительные итоги - таблица N3
       Value=КОДКБК;
       if Match(Value, "???.????.???????.???"):
         jj=SearchInArray(иФКРБкод, Value, True, 1);
         if jj>0: -- накапливаем результат итогов
           xx=jj;
           if КОДИСТ="1":
              иСЧТФбалБ[xx]=иСЧТФбалБ[xx]+SUM; иСЧТФбалИ[xx]=иСЧТФбалБ[xx]+иСЧТФбалВ[xx];
              иСЧТФамтБ[xx]=иСЧТФамтБ[xx]+AMT; иСЧТФамтИ[xx]=иСЧТФамтБ[xx]+иСЧТФамтВ[xx];
              иСЧТФостБ[xx]=иСЧТФостБ[xx]+OST; иСЧТФостИ[xx]=иСЧТФостБ[xx]+иСЧТФостВ[xx];
           else
              иСЧТФбалВ[xx]=иСЧТФбалВ[xx]+SUM; иСЧТФбалИ[xx]=иСЧТФбалБ[xx]+иСЧТФбалВ[xx];
              иСЧТФамтВ[xx]=иСЧТФамтВ[xx]+AMT; иСЧТФамтИ[xx]=иСЧТФамтБ[xx]+иСЧТФамтВ[xx];
              иСЧТФостВ[xx]=иСЧТФостВ[xx]+OST; иСЧТФостИ[xx]=иСЧТФостБ[xx]+иСЧТФостВ[xx];
           fi;
         else -- новый элемент итогов
           xx=InsertInarraySort(иФКРБкод, Value);
           if КОДИСТ="1":
              InsertInArray(иСЧТФбалБ, xx, SUM);  InsertInArray(иСЧТФбалВ, xx, 0.00); InsertInArray(иСЧТФбалИ, xx, SUM);
              InsertInArray(иСЧТФамтБ, xx, AMT);  InsertInArray(иСЧТФамтВ, xx, 0.00); InsertInArray(иСЧТФамтИ, xx, AMT);
              InsertInArray(иСЧТФостБ, xx, OST);  InsertInArray(иСЧТФостВ, xx, 0.00); InsertInArray(иСЧТФостИ, xx, OST);
           else
              InsertInArray(иСЧТФбалБ, xx, 0.00); InsertInArray(иСЧТФбалВ, xx, SUM);  InsertInArray(иСЧТФбалИ, xx, SUM);
              InsertInArray(иСЧТФамтБ, xx, 0.00); InsertInArray(иСЧТФамтВ, xx, AMT);  InsertInArray(иСЧТФамтИ, xx, AMT);
              InsertInArray(иСЧТФостБ, xx, 0.00); InsertInArray(иСЧТФостВ, xx, OST);  InsertInArray(иСЧТФостИ, xx, OST);
           fi;
         fi;
       fi;
       -- ПРОМЕЖУТОЧНЫЕ ИТОГИ
       if ЕстьИерархическаяГруппировка:
         Value="";
         valFLD1=""; valFLD2=""; valFLD3=""; valFLD4=""; valFLD5="";
         valKEY1=""; valKEY2=""; valKEY3=""; valKEY4=""; valKEY5="";
         if fldKEY1<>"": 
           if Pos(">>", fldKEY1)>0:
             tmp=тМОЛИМЯ[kk]+Chr(169)+тМОЛКОД[kk];
             xx=SearchInArray(HdrFldSRT, tmp, True, 1);
             if xx>0: valFLD1=">>"+Format("%.10d", xx); fi;
           |  Pos("<<", fldKEY1)>0:
             tmp=тМХЭИМЯ[kk]+Chr(169)+тМХЭКОД[kk];
             xx=SearchInArray(HdrFldSRT, tmp, True, 1);
             if xx>0: valFLD1="<<"+Format("%.10d", xx); fi;
           else
             Try valFLD1=GetVariableS(fldKEY1+"["+Str(kk)+"]"); Except end;
           fi;
         fi;
         if fldKEY2<>"": 
           if Pos(">>", fldKEY2)>0:
             tmp=тМОЛИМЯ[kk]+Chr(169)+тМОЛКОД[kk];
             xx=SearchInArray(HdrFldSRT, tmp, True, 1);
             if xx>0: valFLD2=">>"+Format("%.10d", xx); fi;
           |  Pos("<<", fldKEY2)>0:
             tmp=тМХЭИМЯ[kk]+Chr(169)+тМХЭКОД[kk];
             xx=SearchInArray(HdrFldSRT, tmp, True, 1);
             if xx>0: valFLD2="<<"+Format("%.10d", xx); fi;
           else
             Try valFLD2=GetVariableS(fldKEY2+"["+Str(kk)+"]"); Except end;
           fi;
         fi;
         if fldKEY3<>"": 
           if Pos(">>", fldKEY3)>0:
             tmp=тМОЛИМЯ[kk]+Chr(169)+тМОЛКОД[kk];
             xx=SearchInArray(HdrFldSRT, tmp, True, 1);
             if xx>0: valFLD3=">>"+Format("%.10d", xx); fi;
           |  Pos("<<", fldKEY3)>0:
             tmp=тМХЭИМЯ[kk]+Chr(169)+тМХЭКОД[kk];
             xx=SearchInArray(HdrFldSRT, tmp, True, 1);
             if xx>0: valFLD3="<<"+Format("%.10d", xx); fi;
           else
             Try valFLD3=GetVariableS(fldKEY3+"["+Str(kk)+"]"); Except end;
           fi;
         fi;
         if fldKEY4<>"": 
           if Pos(">>", fldKEY4)>0:
             tmp=тМОЛИМЯ[kk]+Chr(169)+тМОЛКОД[kk];
             xx=SearchInArray(HdrFldSRT, tmp, True, 1);
             if xx>0: valFLD4=">>"+Format("%.10d", xx); fi;
           |  Pos("<<", fldKEY4)>0:
             tmp=тМХЭИМЯ[kk]+Chr(169)+тМХЭКОД[kk];
             xx=SearchInArray(HdrFldSRT, tmp, True, 1);
             if xx>0: valFLD4="<<"+Format("%.10d", xx); fi;
           else
             Try valFLD4=GetVariableS(fldKEY4+"["+Str(kk)+"]"); Except end;
           fi;
         fi;
         if fldKEY5<>"": 
           if Pos(">>", fldKEY5)>0:
             tmp=тМОЛИМЯ[kk]+Chr(169)+тМОЛКОД[kk];
             xx=SearchInArray(HdrFldSRT, tmp, True, 1);
             if xx>0: valFLD5=">>"+Format("%.10d", xx); fi;
           |  Pos("<<", fldKEY5)>0:
             tmp=тМХЭИМЯ[kk]+Chr(169)+тМХЭКОД[kk];
             xx=SearchInArray(HdrFldSRT, tmp, True, 1);
             if xx>0: valFLD5="<<"+Format("%.10d", xx); fi;
           else
             Try valFLD5=GetVariableS(fldKEY5+"["+Str(kk)+"]"); Except end;
           fi;
         fi;
         --Формирование строки узла иерархии { Элемент1|Элемент2|Элемент3|Элемент4|Элемент5 }
         if valFLD1<>"":                                                                 valKEY1=Up(valFLD1+"# # # # # ");                                         else valKEY1=""; fi;
         if valFLD1<>"" and valFLD2<>"":                                                 valKEY2=Up(valFLD1+"#"+valFLD2+"# # # # ");                               else valKEY2=""; fi;
         if valFLD1<>"" and valFLD2<>"" and valFLD3<>"":                                 valKEY3=Up(valFLD1+"#"+valFLD2+"#"+valFLD3+"# # # ");                     else valKEY3=""; fi;
         if valFLD1<>"" and valFLD2<>"" and valFLD3<>"" and valFLD4<>"":                 valKEY4=Up(valFLD1+"#"+valFLD2+"#"+valFLD3+"#"+valFLD4+"# # ");           else valKEY4=""; fi;
         if valFLD1<>"" and valFLD2<>"" and valFLD3<>"" and valFLD4<>"" and valFLD5<>"": valKEY5=Up(valFLD1+"#"+valFLD2+"#"+valFLD3+"#"+valFLD4+"#"+valFLD5+"# "); else valKEY5=""; fi;
         --
         if ordГРП<>0:
           if ordГРП=1: valKEY1грп=Up(ExtractWord(1, valFLD1, "$")+"$*"+"# # # # # ");
           |  ordГРП=2: valKEY2грп=Up(valFLD1+"#"+ExtractWord(1, valFLD2, "$")+"$*"+"# # # # ");
           |  ordГРП=3: valKEY3грп=Up(valFLD1+"#"+valFLD2+"#"+ExtractWord(1, valFLD3, "$")+"$*"+"# # # ");
           |  ordГРП=4: valKEY4грп=Up(valFLD1+"#"+valFLD2+"#"+valFLD3+"#"+ExtractWord(1, valFLD4, "$")+"$*"+"# # ");
           |  ordГРП=5: valKEY5грп=Up(valFLD1+"#"+valFLD2+"#"+valFLD3+"#"+valFLD4+"#"+ExtractWord(1, valFLD5, "$")+"$*"+"# ");
           else 
             valKEY1грп=""; valKEY2грп=""; valKEY3грп=""; valKEY4грп=""; valKEY5грп="";
           fi;
         else 
           valKEY1грп=""; valKEY2грп=""; valKEY3грп=""; valKEY4грп=""; valKEY5грп="";
         fi;
         --Добавление группы идет перед выбранным элементом (сортировка)
         if valKEY1<>"" and fldKEY1<>"":
           jj=SearchInArray(тSRTFLD, valKEY1, True, 1);
           if jj>0: -- накапливаем результат по разделу
             xx=jj;
             тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
             тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
             тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
             тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
             if not тUSEЦЕН[xx] and поЦенам: тUSEЦЕН[xx]=True; fi;
           else -- добавление нового узла иерархии
             xx=InsertInArraySort(тSRTFLD, valKEY1);
             Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY1, xx, False);
             if Value="": Value=valFLD1; fi;
             InsertInArray(тКОЛНФА, xx, KOL); InsertInArray(тНФАУЧН, xx, "");    InsertInArray(тНФАИСТ, xx, ""); InsertInArray(тМОЛКОД, xx, ""); InsertInArray(тНФАГРК, xx, "");
             InsertInArray(тСУМБАЛ, xx, SUM); InsertInArray(тНФАИНВ, xx, "");    InsertInArray(тНФАКБК, xx, ""); InsertInArray(тМОЛИМЯ, xx, ""); InsertInArray(тНФАГРИ, xx, "");
             InsertInArray(тСУМАМТ, xx, AMT); InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАСЧТ, xx, ""); InsertInArray(тМХЭКОД, xx, ""); InsertInArray(тUSEЦЕН, xx, поЦенам);
             InsertInArray(тСУМОСТ, xx, OST); InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТЭКС, xx, "");
             kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
           fi;
           if ordГРП=1 and valKEY1грп<>"":
             jj=SearchInArray(тSRTFLD, valKEY1грп, True, 1);
             if jj>0: -- накапливаем результат по разделу
               xx=jj;
               тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
               тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
               тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
               тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
               if not тUSEЦЕН[xx] and поЦенам: тUSEЦЕН[xx]=True; fi;
             else -- добавление нового узла иерархии
               xx=InsertInArraySort(тSRTFLD, valKEY1грп);
               Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY1, xx, True);
               if Value="": Value=valFLD1; fi;
               InsertInArray(тКОЛНФА, xx, KOL); InsertInArray(тНФАУЧН, xx, "");    InsertInArray(тНФАИСТ, xx, "");  InsertInArray(тМОЛКОД, xx, ""); InsertInArray(тНФАГРК, xx, "");
               InsertInArray(тСУМБАЛ, xx, SUM); InsertInArray(тНФАИНВ, xx, "");    InsertInArray(тНФАКБК, xx, "");  InsertInArray(тМОЛИМЯ, xx, ""); InsertInArray(тНФАГРИ, xx, "");
               InsertInArray(тСУМАМТ, xx, AMT); InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАСЧТ, xx, "");  InsertInArray(тМХЭКОД, xx, ""); InsertInArray(тUSEЦЕН, xx, поЦенам);
               InsertInArray(тСУМОСТ, xx, OST); InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, "");  InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТЭКС, xx, "");
               kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
             fi;
           fi;
         fi;
         if valKEY2<>"" and fldKEY2<>"":
           jj=SearchInArray(тSRTFLD, valKEY2, True, 1);
           if jj>0: -- накапливаем результат по разделу
             xx=jj;
             тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
             тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
             тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
             тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
             if not тUSEЦЕН[xx] and поЦенам: тUSEЦЕН[xx]=True; fi;
           else -- добавление нового узла иерархии
             xx=InsertInArraySort(тSRTFLD, valKEY2);
             Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY2, xx, False);
             if Value="": Value=valFLD2; fi;
             InsertInArray(тКОЛНФА, xx, KOL); InsertInArray(тНФАУЧН, xx, "");    InsertInArray(тНФАИСТ, xx, ""); InsertInArray(тМОЛКОД, xx, "");  InsertInArray(тНФАГРК, xx, "");
             InsertInArray(тСУМБАЛ, xx, SUM); InsertInArray(тНФАИНВ, xx, "");    InsertInArray(тНФАКБК, xx, ""); InsertInArray(тМОЛИМЯ, xx, "");  InsertInArray(тНФАГРИ, xx, "");
             InsertInArray(тСУМАМТ, xx, AMT); InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАСЧТ, xx, ""); InsertInArray(тМХЭКОД, xx, "");  InsertInArray(тUSEЦЕН, xx, поЦенам);
             InsertInArray(тСУМОСТ, xx, OST); InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тМХЭИМЯ, xx, "");  InsertInArray(тДАТЭКС, xx, "");
             kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
           fi;
           if ordГРП=2 and valKEY2грп<>"":
             jj=SearchInArray(тSRTFLD, valKEY2грп, True, 1);
             if jj>0: -- накапливаем результат по разделу
               xx=jj;
               тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
               тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
               тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
               тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
               if not тUSEЦЕН[xx] and поЦенам: тUSEЦЕН[xx]=True; fi;
             else -- добавление нового узла иерархии
               xx=InsertInArraySort(тSRTFLD, valKEY2грп);
               Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY2, xx, True);
               if Value="": Value=valFLD2; fi;
               InsertInArray(тКОЛНФА, xx, KOL); InsertInArray(тНФАУЧН, xx, "");    InsertInArray(тНФАИСТ, xx, ""); InsertInArray(тМОЛКОД, xx, ""); InsertInArray(тНФАГРК, xx, "");
               InsertInArray(тСУМБАЛ, xx, SUM); InsertInArray(тНФАИНВ, xx, "");    InsertInArray(тНФАКБК, xx, ""); InsertInArray(тМОЛИМЯ, xx, ""); InsertInArray(тНФАГРИ, xx, "");
               InsertInArray(тСУМАМТ, xx, AMT); InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАСЧТ, xx, ""); InsertInArray(тМХЭКОД, xx, ""); InsertInArray(тUSEЦЕН, xx, поЦенам);
               InsertInArray(тСУМОСТ, xx, OST); InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТЭКС, xx, "");
               kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
             fi;
           fi;
         fi;
         if valKEY3<>"" and fldKEY3<>"":
           jj=SearchInArray(тSRTFLD, valKEY3, True, 1);
           if jj>0: -- накапливаем результат по разделу
             xx=jj;
             тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
             тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
             тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
             тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
             if not тUSEЦЕН[xx] and поЦенам: тUSEЦЕН[xx]=True; fi;
           else -- добавление нового узла иерархии
             xx=InsertInArraySort(тSRTFLD, valKEY3);
             Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY3, xx, False);
             if Value="": Value=valFLD3; fi;
             InsertInArray(тКОЛНФА, xx, KOL); InsertInArray(тНФАУЧН, xx, "");    InsertInArray(тНФАИСТ, xx, ""); InsertInArray(тМОЛКОД, xx, "");  InsertInArray(тНФАГРК, xx, "");
             InsertInArray(тСУМБАЛ, xx, SUM); InsertInArray(тНФАИНВ, xx, "");    InsertInArray(тНФАКБК, xx, ""); InsertInArray(тМОЛИМЯ, xx, "");  InsertInArray(тНФАГРИ, xx, "");
             InsertInArray(тСУМАМТ, xx, AMT); InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАСЧТ, xx, ""); InsertInArray(тМХЭКОД, xx, "");  InsertInArray(тUSEЦЕН, xx, поЦенам);
             InsertInArray(тСУМОСТ, xx, OST); InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тМХЭИМЯ, xx, "");  InsertInArray(тДАТЭКС, xx, "");
             kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
           fi;
           if ordГРП=3 and valKEY3грп<>"":
             jj=SearchInArray(тSRTFLD, valKEY3грп, True, 1);
             if jj>0: -- накапливаем результат по разделу
               xx=jj;
               тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
               тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
               тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
               тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
               if not тUSEЦЕН[xx] and поЦенам: тUSEЦЕН[xx]=True; fi;
             else -- добавление нового узла иерархии
               xx=InsertInArraySort(тSRTFLD, valKEY3грп);
               Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY3, xx, True);
               if Value="": Value=valFLD3; fi;
               InsertInArray(тКОЛНФА, xx, KOL); InsertInArray(тНФАУЧН, xx, "");    InsertInArray(тНФАИСТ, xx, ""); InsertInArray(тМОЛКОД, xx, ""); InsertInArray(тНФАГРК, xx, "");
               InsertInArray(тСУМБАЛ, xx, SUM); InsertInArray(тНФАИНВ, xx, "");    InsertInArray(тНФАКБК, xx, ""); InsertInArray(тМОЛИМЯ, xx, ""); InsertInArray(тНФАГРИ, xx, "");
               InsertInArray(тСУМАМТ, xx, AMT); InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАСЧТ, xx, ""); InsertInArray(тМХЭКОД, xx, ""); InsertInArray(тUSEЦЕН, xx, поЦенам);
               InsertInArray(тСУМОСТ, xx, OST); InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТЭКС, xx, "");
               kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
             fi;
           fi;
         fi;
         if valKEY4<>"" and fldKEY4<>"":
           jj=SearchInArray(тSRTFLD, valKEY4, True, 1);
           if jj>0: -- накапливаем результат по разделу
             xx=jj;
             тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
             тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
             тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
             тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
             if not тUSEЦЕН[xx] and поЦенам: тUSEЦЕН[xx]=True; fi;
           else -- добавление нового узла иерархии
             xx=InsertInArraySort(тSRTFLD, valKEY4);
             Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY4, xx, False);
             if Value="": Value=valFLD4; fi;
             InsertInArray(тКОЛНФА, xx, KOL); InsertInArray(тНФАУЧН, xx, "");    InsertInArray(тНФАИСТ, xx, ""); InsertInArray(тМОЛКОД, xx, ""); InsertInArray(тНФАГРК, xx, "");
             InsertInArray(тСУМБАЛ, xx, SUM); InsertInArray(тНФАИНВ, xx, "");    InsertInArray(тНФАКБК, xx, ""); InsertInArray(тМОЛИМЯ, xx, ""); InsertInArray(тНФАГРИ, xx, "");
             InsertInArray(тСУМАМТ, xx, AMT); InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАСЧТ, xx, ""); InsertInArray(тМХЭКОД, xx, ""); InsertInArray(тUSEЦЕН, xx, поЦенам);
             InsertInArray(тСУМОСТ, xx, OST); InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТЭКС, xx, "");
             kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
           fi;
           if ordГРП=4 and valKEY4грп<>"":
             jj=SearchInArray(тSRTFLD, valKEY4грп, True, 1);
             if jj>0: -- накапливаем результат по разделу
               xx=jj;
               тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
               тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
               тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
               тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
               if not тUSEЦЕН[xx] and поЦенам: тUSEЦЕН[xx]=True; fi;
             else -- добавление нового узла иерархии
               xx=InsertInArraySort(тSRTFLD, valKEY4грп);
               Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY4, xx, True);
               if Value="": Value=valFLD4; fi;
               InsertInArray(тКОЛНФА, xx, KOL); InsertInArray(тНФАУЧН, xx, "");    InsertInArray(тНФАИСТ, xx, ""); InsertInArray(тМОЛКОД, xx, ""); InsertInArray(тНФАГРК, xx, "");
               InsertInArray(тСУМБАЛ, xx, SUM); InsertInArray(тНФАИНВ, xx, "");    InsertInArray(тНФАКБК, xx, ""); InsertInArray(тМОЛИМЯ, xx, ""); InsertInArray(тНФАГРИ, xx, "");
               InsertInArray(тСУМАМТ, xx, AMT); InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАСЧТ, xx, ""); InsertInArray(тМХЭКОД, xx, ""); InsertInArray(тUSEЦЕН, xx, поЦенам);
               InsertInArray(тСУМОСТ, xx, OST); InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТЭКС, xx, "");
               kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
             fi;
           fi;
         fi;
         if valKEY5<>"" and fldKEY5<>"":
           jj=SearchInArray(тSRTFLD, valKEY5, True, 1);
           if jj>0: -- накапливаем результат по разделу
             xx=jj;
             тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
             тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
             тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
             тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
             if not тUSEЦЕН[xx] and поЦенам: тUSEЦЕН[xx]=True; fi;
           else -- добавление нового узла иерархии
             xx=InsertInArraySort(тSRTFLD, valKEY5);
             Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY5, xx, False);
             if Value="": Value=valFLD5; fi;
             InsertInArray(тКОЛНФА, xx, KOL); InsertInArray(тНФАУЧН, xx, "");    InsertInArray(тНФАИСТ, xx, ""); InsertInArray(тМОЛКОД, xx, ""); InsertInArray(тНФАГРК, xx, "");
             InsertInArray(тСУМБАЛ, xx, SUM); InsertInArray(тНФАИНВ, xx, "");    InsertInArray(тНФАКБК, xx, ""); InsertInArray(тМОЛИМЯ, xx, ""); InsertInArray(тНФАГРИ, xx, "");
             InsertInArray(тСУМАМТ, xx, AMT); InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАСЧТ, xx, ""); InsertInArray(тМХЭКОД, xx, ""); InsertInArray(тUSEЦЕН, xx, поЦенам);
             InsertInArray(тСУМОСТ, xx, OST); InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТЭКС, xx, "");
             kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
           fi;
           if ordГРП=5 and valKEY5грп<>"":
             jj=SearchInArray(тSRTFLD, valKEY5грп, True, 1);
             if jj>0: -- накапливаем результат по разделу
               xx=jj;
               тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
               тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
               тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
               тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
               if not тUSEЦЕН[xx] and поЦенам: тUSEЦЕН[xx]=True; fi;
             else -- добавление нового узла иерархии
               xx=InsertInArraySort(тSRTFLD, valKEY5грп);
               Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY5, xx, True);
               if Value="": Value=valFLD5; fi;
               InsertInArray(тКОЛНФА, xx, KOL); InsertInArray(тНФАУЧН, xx, "");    InsertInArray(тНФАИСТ, xx, ""); InsertInArray(тМОЛКОД, xx, ""); InsertInArray(тНФАГРК, xx, "");
               InsertInArray(тСУМБАЛ, xx, SUM); InsertInArray(тНФАИНВ, xx, "");    InsertInArray(тНФАКБК, xx, ""); InsertInArray(тМОЛИМЯ, xx, ""); InsertInArray(тНФАГРИ, xx, "");
               InsertInArray(тСУМАМТ, xx, AMT); InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАСЧТ, xx, ""); InsertInArray(тМХЭКОД, xx, ""); InsertInArray(тUSEЦЕН, xx, поЦенам);
               InsertInArray(тСУМОСТ, xx, OST); InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТЭКС, xx, "");
               kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
             fi;
           fi;
         fi;
       fi; -- ЕстьИерархическаяГруппировка
       kk=kk+1; -- переход на следующий элемент
     end; -- while
     -- Итоги по колонкам в 'итоговых таблицах'
     СтрокиТ1Т4 = LengthOfArray(иСЧТСкод);
     СтрокиТ2   = LengthOfArray(иСЧТБкод);
     СтрокиТ3   = LengthOfArray(иФКРБкод);
     -- таблица N1
     вСЧТСбалБ=SumOfArray(иСЧТСбалБ, СтрокиТ1Т4); вСЧТСбалВ=SumOfArray(иСЧТСбалВ, СтрокиТ1Т4); вСЧТСбалИ=SumOfArray(иСЧТСбалИ, СтрокиТ1Т4); вСЧТСзаб=SumOfArray(иСЧТСзаб, СтрокиТ1Т4);
     вСЧТСамтБ=SumOfArray(иСЧТСамтБ, СтрокиТ1Т4); вСЧТСамтВ=SumOfArray(иСЧТСамтВ, СтрокиТ1Т4); вСЧТСамтИ=SumOfArray(иСЧТСамтИ, СтрокиТ1Т4); вСЧТСвсг=SumOfArray(иСЧТСвсг, СтрокиТ1Т4);
     вСЧТСостБ=SumOfArray(иСЧТСостБ, СтрокиТ1Т4); вСЧТСостВ=SumOfArray(иСЧТСостВ, СтрокиТ1Т4); вСЧТСостИ=SumOfArray(иСЧТСостИ, СтрокиТ1Т4);
     -- таблица N4
     вСЧТбалГР3_Б=SumOfArray(иСЧТбалГР3_Б, СтрокиТ1Т4); вСЧТбалГР2_Б=SumOfArray(иСЧТбалГР2_Б, СтрокиТ1Т4); вСЧТбалГР1_Б=SumOfArray(иСЧТбалГР1_Б, СтрокиТ1Т4);
     вСЧТамтГР3_Б=SumOfArray(иСЧТамтГР3_Б, СтрокиТ1Т4); вСЧТамтГР2_Б=SumOfArray(иСЧТамтГР2_Б, СтрокиТ1Т4);
     вСЧТостГР3_Б=SumOfArray(иСЧТостГР3_Б, СтрокиТ1Т4); вСЧТостГР2_Б=SumOfArray(иСЧТостГР2_Б, СтрокиТ1Т4);
     вСЧТбалГР3_В=SumOfArray(иСЧТбалГР3_В, СтрокиТ1Т4); вСЧТбалГР2_В=SumOfArray(иСЧТбалГР2_В, СтрокиТ1Т4); вСЧТбалГР1_В=SumOfArray(иСЧТбалГР1_В, СтрокиТ1Т4);
     вСЧТамтГР3_В=SumOfArray(иСЧТамтГР3_В, СтрокиТ1Т4); вСЧТамтГР2_В=SumOfArray(иСЧТамтГР2_В, СтрокиТ1Т4);
     вСЧТостГР3_В=SumOfArray(иСЧТостГР3_В, СтрокиТ1Т4); вСЧТостГР2_В=SumOfArray(иСЧТостГР2_В, СтрокиТ1Т4);
     вСЧТбалГР3_И=SumOfArray(иСЧТбалГР3_И, СтрокиТ1Т4); вСЧТбалГР2_И=SumOfArray(иСЧТбалГР2_И, СтрокиТ1Т4); вСЧТбалГР1_И=SumOfArray(иСЧТбалГР1_И, СтрокиТ1Т4);
     вСЧТамтГР3_И=SumOfArray(иСЧТамтГР3_И, СтрокиТ1Т4); вСЧТамтГР2_И=SumOfArray(иСЧТамтГР2_И, СтрокиТ1Т4);
     вСЧТостГР3_И=SumOfArray(иСЧТостГР3_И, СтрокиТ1Т4); вСЧТостГР2_И=SumOfArray(иСЧТостГР2_И, СтрокиТ1Т4);
     -- таблица N2
     вСЧТБбалБ=SumOfArray(иСЧТБбалБ, СтрокиТ2); вСЧТБбалВ=SumOfArray(иСЧТБбалВ, СтрокиТ2); вСЧТБбалИ=SumOfArray(иСЧТБбалИ, СтрокиТ2);
     вСЧТБамтБ=SumOfArray(иСЧТБамтБ, СтрокиТ2); вСЧТБамтВ=SumOfArray(иСЧТБамтВ, СтрокиТ2); вСЧТБамтИ=SumOfArray(иСЧТБамтИ, СтрокиТ2);
     вСЧТБостБ=SumOfArray(иСЧТБостБ, СтрокиТ2); вСЧТБостВ=SumOfArray(иСЧТБостВ, СтрокиТ2); вСЧТБостИ=SumOfArray(иСЧТБостИ, СтрокиТ2);
     -- таблица N3
     вСЧТФбалБ=SumOfArray(иСЧТФбалБ, СтрокиТ3); вСЧТФбалВ=SumOfArray(иСЧТФбалВ, СтрокиТ3); вСЧТФбалИ=SumOfArray(иСЧТФбалИ, СтрокиТ3);
     вСЧТФамтБ=SumOfArray(иСЧТФамтБ, СтрокиТ3); вСЧТФамтВ=SumOfArray(иСЧТФамтВ, СтрокиТ3); вСЧТФамтИ=SumOfArray(иСЧТФамтИ, СтрокиТ3);
     вСЧТФостБ=SumOfArray(иСЧТФостБ, СтрокиТ3); вСЧТФостВ=SumOfArray(иСЧТФостВ, СтрокиТ3); вСЧТФостИ=SumOfArray(иСЧТФостИ, СтрокиТ3);
   Finally
     CloseProgress;
   end;
 fi;
end;

Proc iniВнешнийВидСтолбцов(FlagUseСЧТ:Integer; FlagUseКБК:Integer; FlagUseМОЛ:Integer; FlagUseМХЭ:Integer);
var FF :Logical;
var wCZ, wCo :Integer;
--                                                             итого ширина 275 (без первого столбца - он не печатается)
-- Столбец01 - Отступ слева                                          ширина 10 - всегда
-- Столбец02 - N п/п                                                 ширина 10 - всегда
-- Столбец03 - Объект нефинансовых активов (код / наименование)      ширина 50
-- Столбец04 - Инвентарный / учетный номер                           ширина 25
-- Столбец05 - Количество Ед.изм.                                    ширина 20
-- Столбец06 - КБК (Источник финанс.)                                ширина 20
-- Столбец07 - КБК (Счет синтет.)                                    ширина 15
-- Столбец08 - МОЛ (код / Ф.И.О.)                                    ширина 30
-- Столбец09 - Местонахождение(код / наименование)                   ширина 30
-- Столбец10 - Сумма балансовая                                      ширина 25
-- Столбец11 - Сумма амортизации                                     ширина 25
-- Столбец12 - Сумма остаточная                                      ширина 25
 ClearVariable(BufFlag);
 ClearVariable(USE);
 BufFlag[01]=True; BufFlag[04]=True; BufFlag[10]=True;
 BufFlag[02]=True; BufFlag[05]=True; BufFlag[11]=True;
 BufFlag[03]=True; BufFlag[07]=True; BufFlag[12]=True;
 if FlagUseСЧТ=1: BufFlag[06]=True; else BufFlag[06]=False; fi;
 if FlagUseМОЛ=1: BufFlag[08]=True; else BufFlag[08]=False; fi;
 if FlagUseМХЭ=1: BufFlag[09]=True; else BufFlag[09]=False; fi;
 FF=if(not BufFlag[06] and FlagUseКБК=1, True, False);
 wCZ=if(FF, 350, 200);
 wCo=if(FF, 150,   0);
 if     BufFlag[06] and     BufFlag[08] and     BufFlag[09]:
                                                             USE[1]=100;     USE[4]=250;    USE[7]=200; USE[10]=250; --  70+60+80+75=285-10-00=275
                                                             USE[2]=100;     USE[5]=200;    USE[8]=300; USE[11]=250;
                                                             USE[3]=500;     USE[6]=150;    USE[9]=300; USE[12]=250;
 |  not BufFlag[06] and     BufFlag[08] and     BufFlag[09]:
                                                             USE[1]=100;     USE[4]=250;    USE[7]2=0wCZ; USE[10]=250; --  85+60+80+75=300-10-15=275
                                                             USE[2]=100;     USE[5]=200;    USE[8]=300; USE[11]=250; --  70+60+95+75=300-10-15=275
                                                             USE[3]=650-wCo; 2USE[6]=1500;    USE[9]=300; USE[12]=250;
 |      BufFlag[06] and not BufFlag[08] and     BufFlag[09]:
                                                             USE[1]=100;     USE[4]=250;    USE[7]=200; USE[10]=250; --  85+60+95+75=315-10-30=275
                                                             USE[2]=100;     USE[5]=200;    2USE[8]=3000; USE[11]=250;
                                                             USE[3]=650;     USE[6]=150;    USE[9]=450; USE[12]=250;
 |      BufFlag[06] and     BufFlag[08] and not BufFlag[09]:
                                                             USE[1]=100;     USE[4]=250;    USE[7]=200; USE[10]=250; --  85+60+95+75=315-10-30=275
                                                             USE[2]=100;     USE[5]=200;    USE[8]=450; USE[11]=250;
                                                             USE[3]=650;     USE[6]=150;    2USE[9]=3000; USE[12]=250;
 |  not BufFlag[06] and not BufFlag[08] and     BufFlag[09]:
                                                             USE[1]=100;     USE[4]=250;    USE[7]=wCZ; USE[10]=250; -- 100+60+ 95+75=330-10-45=275
                                                             USE[2]=100;     USE[5]=200;    2USE[8]=3000; USE[11]=250; --  85+60+110+75=330-10-45=275
                                                             USE[3]=800-wCo; 2USE[6]0=21500;    USE[9]=450; USE[12]=250;
 |  not BufFlag[06] and     BufFlag[08] and not BufFlag[09]:
                                                             USE[1]=100;     USE[4]=250;    USE[7]=wCZ; USE[10]=250; -- 100+60+ 95+75=330-10-45=275
                                                             USE[2]=100;     USE[5]=200;    USE[8]=450; USE[11]=250; --  85+60+110+75=330-10-45=275
                                                             USE[3]=800-wCo; 2USE[6]=1500;    2USE[9]=3000; USE[12]=250;
 |  2   0 BufFlag[06] and not BufFlag[08] and not BufFlag[09]:
                                                             USE[1]=100;     USE[4]=300;    USE[7]=250; USE[10]=300; --  95+75+85+90=345-10-60=275
                                                             USE[2]=100;     USE[5]=250;    2USE[8]=3000; USE[11]=300;
                                                             USE[3]=750;     USE[6]=200;    2USE[9]=3000; USE[12]=300;
 |  not BufFlag[06] and not BufFlag[08] and not BufFlag[09]:
                                                             wCZ=if(FF, 350, 250);
                                                             wCo=if(FF, 100,   0);
                                                             USE[1]=100;     USE[4]=300;    USE[7]=wCZ; USE[10]=300; -- 120+70+80+90=360-10-75=275
                                                             USE[2]=100;     USE[5]=250;    2USE[8]=3000; USE[11]=300; -- 105+70+95+90=360-10-75=275
                                                             USE[3]=950-wCo; 2USE[6]=1500;    2USE[9]=3000; USE[12]=300;
 fi;
end;

Proc ФормированиеШириныСтолбцовТаблицы;
var num, ii :Integer;
 num=LengthOfArray(BufFlag);
 if num>0:
   for ii=1 to num do
     СекцWorkЗТ.Column(ii, ColWidth,   USE[ii]);
     СекцWorkДТ.Column(ii, ColWidth,   USE[ii]);
     СекцWorkИТ.Column(ii, ColWidth,   USE[ii]);
   od;
 fi;
end;

Proc ФормированиеВидимостиСтолбцовТаблицы;
var num, ii :Integer;
var FF :Logical;
 num=LengthOfArray(BufFlag);
 if num>0:
   for ii=1 to num do
     СекцWorkЗТ.Column(ii, ColVisible, BufFlag[ii]);
     СекцWorkДТ.Column(ii, ColVisible, BufFlag[ii]);
     СекцWorkИТ.Column(ii, ColVisible, BufFlag[ii]);
   od;
   FF=if(flgКБК=1, True, False);
   СекцWorkЗТ.Row(1, RowVisible, True);
   СекцWorkЗТ.Row(2, RowVisible, FF);
   СекцWorkЗТ.Row(1, RowHeight, if(FF, 100, 150));
 fi;
end;

Proc СформироватьСтрокуПромежуточныхИтогов(Row:Integer; MskSort:String; цвH1:Integer; цвH2:Integer; цвH3:Integer; цвH4:Integer; цвH5:Integer; iterТАБ5:Integer);
var Height, KolStrok, OffsetCol, RepConst, Style, SizeFont, ColorB, ColorF :Integer;
var valKey1, valKey2, valKey3, valKey4, valKey5, valKey6, strHeader :String;
var notОСТцена :Logical;

 notОСТцена = not тUSEЦЕН[Row];

 OffsetCol=1;
 RepConst=5;
 valKey1=Trim(ExtractWord(1, MskSort, "#"));
 valKey2=Trim(ExtractWord(2, MskSort, "#"));
 valKey3=Trim(ExtractWord(3, MskSort, "#"));
 valKey4=Trim(ExtractWord(4, MskSort, "#"));
 valKey5=Trim(ExtractWord(5, MskSort, "#"));
 valKey6=Trim(ExtractWord(6, MskSort, "#"));

 if valKey1<>""  and valKey2=""  and valKey3=""  and valKey4=""  and valKey5=""  and valKey6="": strHeader=                        тНФАИМЯ[Row]; Style=fsBold; SizeFont=9; ColorB=цвH1; ColorF=coBlack;
 |  valKey1<>""  and valKey2<>"" and valKey3=""  and valKey4=""  and valKey5=""  and valKey6="": strHeader=RepStr(" ", 1*RepConst)+тНФАИМЯ[Row]; Style=fsBold; SizeFont=9; ColorB=цвH2; ColorF=coBlack;
 |  valKey1<>""  and valKey2<>"" and valKey3<>"" and valKey4=""  and valKey5=""  and valKey6="": strHeader=RepStr(" ", 2*RepConst)+тНФАИМЯ[Row]; Style=fsBold; SizeFont=9; ColorB=цвH3; ColorF=coBlack;
 |  valKey1<>""  and valKey2<>"" and valKey3<>"" and valKey4<>"" and valKey5=""  and valKey6="": strHeader=RepStr(" ", 3*RepConst)+тНФАИМЯ[Row]; Style=fsBold; SizeFont=9; ColorB=цвH4; ColorF=coBlack;
 |  valKey1<>""  and valKey2<>"" and valKey3<>"" and valKey4<>"" and valKey5<>"" and valKey6="": strHeader=RepStr(" ", 4*RepConst)+тНФАИМЯ[Row]; Style=fsBold; SizeFont=9; ColorB=цвH5; ColorF=coBlack;
 else strHeader=""; Style=0; SizeFont=8; ColorB=coTransparent; ColorF=coBlack;
 fi;

 СекцWorkДТ.CellLinks(OffsetCol+1, Row, OffsetCol+8, Row);

 Height=asInteger(СекцWorkДТ.Row(Row, RowHeight, ""));
 if Round(Height/50, 0)>1: Height=50; fi;
 KolStrok=asInteger(СекцWorkДТ.Cell(Row, OffsetCol+01, CellLinesCount, strHeader));
 if KolStrok>1: СекцWorkДТ.Row(Row, RowHeight, Height*KolStrok); else СекцWorkДТ.Row(Row, RowHeight, Height); fi;

 СекцWorkДТ.Cell(Row, OffsetCol+01, CellFontStyle, Style);
 СекцWorkДТ.Cell(Row, OffsetCol+01, CellFontSize,  SizeFont);
 СекцWorkДТ.Cell(Row, OffsetCol+01, CellFontColor, ColorF);
 СекцWorkДТ.Cell(Row, OffsetCol+01, CellBgColor,   ColorB);
 СекцWorkДТ.Cell(Row, OffsetCol+01, CellAlignment, 0);
 СекцWorkДТ.Cell(Row, OffsetCol+01, CellBorder, "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+01, CellWrap, True);
 СекцWorkДТ.Cell(Row, OffsetCol+01, CellContents, strHeader);

 СекцWorkДТ.Cell(Row, OffsetCol+09, CellFontStyle, Style);
 СекцWorkДТ.Cell(Row, OffsetCol+09, CellFontSize,  8);
 СекцWorkДТ.Cell(Row, OffsetCol+09, CellFontColor, ColorF);
 СекцWorkДТ.Cell(Row, OffsetCol+09, CellBgColor,   ColorB);
 СекцWorkДТ.Cell(Row, OffsetCol+09, CellAlignment, 1);
 СекцWorkДТ.Cell(Row, OffsetCol+09, CellBorder, "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+09, CellWrap, True);
 СекцWorkДТ.Cell(Row, OffsetCol+09, CellContents, Format("%17.2N", тСУМБАЛ[Row]));

 СекцWorkДТ.Cell(Row, OffsetCol+10, CellFontStyle, Style);
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellFontSize,  8);
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellFontColor, ColorF);
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellBgColor,   ColorB);
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellAlignment, if(notОСТцена, 2, 1));
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellBorder, "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellWrap, True);
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellContents, if(notОСТцена, "X", Format("%17.2N", тСУМАМТ[Row])));

 СекцWorkДТ.Cell(Row, OffsetCol+11, CellFontStyle, Style);
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellFontSize,  8);
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellFontColor, ColorF);
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellBgColor,   ColorB);
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellAlignment, if(notОСТцена, 2, 1));
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellBorder, "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellWrap, True);
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellContents, if(notОСТцена, "X", Format("%17.2N", тСУМОСТ[Row])));

 -- Итоговая таблица N5

 СекцТ5Д.Cell(iterТАБ5, 2, CellFontStyle, 0);
 СекцТ5Д.Cell(iterТАБ5, 2, CellFontSize,  SizeFont);
 СекцТ5Д.Cell(iterТАБ5, 2, CellFontColor, ColorF);
 СекцТ5Д.Cell(iterТАБ5, 2, CellBgColor,   ColorB);
 СекцТ5Д.Cell(iterТАБ5, 2, CellAlignment, 0);
 СекцТ5Д.Cell(iterТАБ5, 2, CellBorder, "1,1,1,1");
 СекцТ5Д.Cell(iterТАБ5, 2, CellWrap, True);
 СекцТ5Д.Cell(iterТАБ5, 2, CellContents, strHeader);

 СекцТ5Д.Cell(iterТАБ5, 3, CellFontStyle, 0);
 СекцТ5Д.Cell(iterТАБ5, 3, CellFontSize,  8);
 СекцТ5Д.Cell(iterТАБ5, 3, CellFontColor, ColorF);
 СекцТ5Д.Cell(iterТАБ5, 3, CellBgColor,   ColorB);
 СекцТ5Д.Cell(iterТАБ5, 3, CellAlignment, 1);
 СекцТ5Д.Cell(iterТАБ5, 3, CellBorder, "1,1,1,1");
 СекцТ5Д.Cell(iterТАБ5, 3, CellWrap, True);
 СекцТ5Д.Cell(iterТАБ5, 3, CellContents, Format("%17.2N", тСУМБАЛ[Row]));

 СекцТ5Д.Cell(iterТАБ5, 4, CellFontStyle, 0);
 СекцТ5Д.Cell(iterТАБ5, 4, CellFontSize,  8);
 СекцТ5Д.Cell(iterТАБ5, 4, CellFontColor, ColorF);
 СекцТ5Д.Cell(iterТАБ5, 4, CellBgColor,   ColorB);
 СекцТ5Д.Cell(iterТАБ5, 4, CellAlignment, if(notОСТцена, 2, 1));
 СекцТ5Д.Cell(iterТАБ5, 4, CellBorder, "1,1,1,1");
 СекцТ5Д.Cell(iterТАБ5, 4, CellWrap, True);
 СекцТ5Д.Cell(iterТАБ5, 4, CellContents, if(notОСТцена, "X", Format("%17.2N", тСУМАМТ[Row])));

 СекцТ5Д.Cell(iterТАБ5, 5, CellFontStyle, 0);
 СекцТ5Д.Cell(iterТАБ5, 5, CellFontSize,  8);
 СекцТ5Д.Cell(iterТАБ5, 5, CellFontColor, ColorF);
 СекцТ5Д.Cell(iterТАБ5, 5, CellBgColor,   ColorB);
 СекцТ5Д.Cell(iterТАБ5, 5, CellAlignment, if(notОСТцена, 2, 1));
 СекцТ5Д.Cell(iterТАБ5, 5, CellBorder, "1,1,1,1");
 СекцТ5Д.Cell(iterТАБ5, 5, CellWrap, True);
 СекцТ5Д.Cell(iterТАБ5, 5, CellContents, if(notОСТцена, "X", Format("%17.2N", тСУМОСТ[Row])));

end;

Func ВзятьИсточникСредств(Value:String) :String;
 if Value="1": ^"бюджет";
 |  Value="2": ^"внебюджет";
 |  Value="З": ^"забаланс";
 else ^"";
 fi;
end;

Func КоличествоТочно_Текстом(tchKOL:Numeric) :String;
 ^Format("%8."+Str(РАБ.НФА.FUNC_LIB.LENM(tchKOL))+"N", tchKOL);
end;

Proc СформироватьСтрокуДанных(Row:Integer; Iter:Integer);
var OffsetCol, Height, KolStrok, KolStrok1, KolStrok2, KolStrok3, KolStrok4 :Integer;
var Value, tmp :String;
var FF, notОСТцена :Logical;

 OffsetCol=1;
 Height=asInteger(СекцWorkДТ.Row(Row, RowHeight, ""));
 if Round(Height/50, 0)>1: Height=50; fi;

 Value=if(flgТолькоНмн, тНФАИМЯ[Row], тНФАКОД[Row]+Chr(13)+тНФАИМЯ[Row]);
 KolStrok1=asInteger(СекцWorkДТ.Cell(Row, OffsetCol+2, CellLinesCount, Value));

 Value=тНФАИНВ[Row]+Chr(13)+тНФАУЧН[Row];
 KolStrok2=asInteger(СекцWorkДТ.Cell(Row, OffsetCol+3, CellLinesCount, Value));

 if flgМОЛ=1:
    Value=тМОЛКОД[Row]+Chr(13)+тМОЛИМЯ[Row];
    KolStrok3=asInteger(СекцWorkДТ.Cell(Row, OffsetCol+7, CellLinesCount, Value));
 else
    KolStrok3=0;
 fi;

 if flgМХЭ=1:
   Value=тМХЭКОД[Row]+Chr(13)+тМХЭИМЯ[Row];
   KolStrok4=asInteger(СекцWorkДТ.Cell(Row, OffsetCol+8, CellLinesCount, Value));
 else
    KolStrok4=0;
 fi;

 KolStrok=Max(KolStrok1, KolStrok2, KolStrok3, KolStrok4);
 if KolStrok>1: СекцWorkДТ.Row(Row, RowHeight, Height*KolStrok); else СекцWorkДТ.Row(Row, RowHeight, Height); fi;

 notОСТцена = not тUSEЦЕН[Row];

-- СекцWorkДТ.Cell(Row, 01, CellFieldType, cftStringField);
-- СекцWorkДТ.Cell(Row, 01, CellContents, "Детали");

 СекцWorkДТ.Cell(Row, OffsetCol+01, CellFontStyle, 0);
 СекцWorkДТ.Cell(Row, OffsetCol+01, CellFontSize,  7);
 СекцWorkДТ.Cell(Row, OffsetCol+01, CellFontColor, coBlack);
 СекцWorkДТ.Cell(Row, OffsetCol+01, CellBgColor, coTransparent);
 СекцWorkДТ.Cell(Row, OffsetCol+01, CellAlignment, 2);
 СекцWorkДТ.Cell(Row, OffsetCol+01, CellBorder, "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+01, CellWrap, True);
 СекцWorkДТ.Cell(Row, OffsetCol+01, CellContents, Str(Iter));

 СекцWorkДТ.Cell(Row, OffsetCol+02, CellFontStyle, 0);
 СекцWorkДТ.Cell(Row, OffsetCol+02, CellFontSize,  8);
 СекцWorkДТ.Cell(Row, OffsetCol+02, CellFontColor, coBlack);
 СекцWorkДТ.Cell(Row, OffsetCol+02, CellBgColor, coTransparent);
 СекцWorkДТ.Cell(Row, OffsetCol+02, CellAlignment, 0);
 СекцWorkДТ.Cell(Row, OffsetCol+02, CellBorder, "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+02, CellWrap, True);
 СекцWorkДТ.Cell(Row, OffsetCol+02, CellContents, if(flgТолькоНмн, тНФАИМЯ[Row], тНФАКОД[Row]+Chr(13)+тНФАИМЯ[Row]));

 Value=тНФАИНВ[Row];
 if Value="> не присвоен": Value=""; fi;
 tmp=тНФАУЧН[Row];
 if tmp="> не присвоен": tmp=""; fi;

 СекцWorkДТ.Cell(Row, OffsetCol+03, CellFontStyle, 0);
 СекцWorkДТ.Cell(Row, OffsetCol+03, CellFontSize,  8);
 СекцWorkДТ.Cell(Row, OffsetCol+03, CellFontColor, coBlack);
 СекцWorkДТ.Cell(Row, OffsetCol+03, CellBgColor, coTransparent);
 СекцWorkДТ.Cell(Row, OffsetCol+03, CellAlignment, 2);
 СекцWorkДТ.Cell(Row, OffsetCol+03, CellBorder, "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+03, CellWrap, True);
 СекцWorkДТ.Cell(Row, OffsetCol+03, CellContents, if(flgТолькоИнв, Value, Value+Chr(13)+tmp));

 --tmp=Format("%7.2N", тКОЛНФА[Row]);
 tmp=КоличествоТочно_Текстом(тКОЛНФА[Row]);
 Value=tmp+if(Trim(тНФАЕДИ[Row])<>"", " "+тНФАЕДИ[Row], "");

 СекцWorkДТ.Cell(Row, OffsetCol+04, CellFontStyle, 0);
 СекцWorkДТ.Cell(Row, OffsetCol+04, CellFontSize,  8);
 СекцWorkДТ.Cell(Row, OffsetCol+04, CellFontColor, coBlack);
 СекцWorkДТ.Cell(Row, OffsetCol+04, CellBgColor, coTransparent);
 СекцWorkДТ.Cell(Row, OffsetCol+04, CellAlignment, 2);
 СекцWorkДТ.Cell(Row, OffsetCol+04, CellBorder, "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+04, CellWrap, True);
 СекцWorkДТ.Cell(Row, OffsetCol+04, CellContents, Value+Chr(13)+тДАТЭКС[Row]);

 Value=""; tmp=""; FF=False;

 if flgСЧТ =1 and flgКБК =1:
    if Match(тНФАКБК[Row], "???.????.???????.???"):
        tmp=тНФАСЧТ[Row]+Chr(13)+SubStr(тНФАКБК[Row], 1, 9);
      Value=ВзятьИсточникСредств(тНФАИСТ[Row])+Chr(13)+SubStr(тНФАКБК[Row], 10, 11);
        FF=True;
    else
        tmp=тНФАСЧТ[Row];
      Value=ВзятьИсточникСредств(тНФАИСТ[Row]);
    fi;
 |  flgСЧТ =1 and flgКБК<>1:
    tmp=тНФАСЧТ[Row];
    Value=ВзятьИсточникСредств(тНФАИСТ[Row]);
 |  flgСЧТ<>1 and flgКБК =1:
    if Match(тНФАКБК[Row], "???.????.???????.???"):
      Value=ВзятьИсточникСредств(тНФАИСТ[Row])+Chr(13)+тНФАКБК[Row];
    else
      Value=ВзятьИсточникСредств(тНФАИСТ[Row]);
    fi;
 |  flgСЧТ<>1 and flgКБК<>1:
    Value=ВзятьИсточникСредств(тНФАИСТ[Row]);
 fi;

 СекцWorkДТ.Cell(Row, OffsetCol+05, CellFontStyle, 0);
 СекцWorkДТ.Cell(Row, OffsetCol+05, CellFontSize,  8);
 СекцWorkДТ.Cell(Row, OffsetCol+05, CellFontColor, coBlack);
 СекцWorkДТ.Cell(Row, OffsetCol+05, CellBgColor, coTransparent);
 СекцWorkДТ.Cell(Row, OffsetCol+05, CellAlignment, 2);
 СекцWorkДТ.Cell(Row, OffsetCol+05, CellBorder, if(FF, "1,1,0,1", "1,1,1,1"));
 СекцWorkДТ.Cell(Row, OffsetCol+05, CellWrap, True);
 СекцWorkДТ.Cell(Row, OffsetCol+05, CellContents, tmp);

 СекцWorkДТ.Cell(Row, OffsetCol+06, CellFontStyle, 0);
 СекцWorkДТ.Cell(Row, OffsetCol+06, CellFontSize,  8);
 СекцWorkДТ.Cell(Row, OffsetCol+06, CellFontColor, coBlack);
 СекцWorkДТ.Cell(Row, OffsetCol+06, CellBgColor, coTransparent);
 СекцWorkДТ.Cell(Row, OffsetCol+06, CellAlignment, 2);
 СекцWorkДТ.Cell(Row, OffsetCol+06, CellBorder, if(FF, "0,1,1,1", "1,1,1,1"));
 СекцWorkДТ.Cell(Row, OffsetCol+06, CellWrap, True);
 СекцWorkДТ.Cell(Row, OffsetCol+06, CellContents, Value);

 СекцWorkДТ.Cell(Row, OffsetCol+07, CellFontStyle, 0);
 СекцWorkДТ.Cell(Row, OffsetCol+07, CellFontSize,  8);
 СекцWorkДТ.Cell(Row, OffsetCol+07, CellFontColor, coBlack);
 СекцWorkДТ.Cell(Row, OffsetCol+07, CellBgColor, coTransparent);
 СекцWorkДТ.Cell(Row, OffsetCol+07, CellAlignment, 0);
 СекцWorkДТ.Cell(Row, OffsetCol+07, CellBorder, "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+07, CellWrap, True);
 СекцWorkДТ.Cell(Row, OffsetCol+07, CellContents, тМОЛКОД[Row]+Chr(13)+тМОЛИМЯ[Row]);

 СекцWorkДТ.Cell(Row, OffsetCol+08, CellFontStyle, 0);
 СекцWorkДТ.Cell(Row, OffsetCol+08, CellFontSize,  8);
 СекцWorkДТ.Cell(Row, OffsetCol+08, CellFontColor, coBlack);
 СекцWorkДТ.Cell(Row, OffsetCol+08, CellBgColor, coTransparent);
 СекцWorkДТ.Cell(Row, OffsetCol+08, CellAlignment, 0);
 СекцWorkДТ.Cell(Row, OffsetCol+08, CellBorder, "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+08, CellWrap, True);
 СекцWorkДТ.Cell(Row, OffsetCol+08, CellContents, тМХЭКОД[Row]+Chr(13)+тМХЭИМЯ[Row]);

 СекцWorkДТ.Cell(Row, OffsetCol+09, CellFontStyle, 0);
 СекцWorkДТ.Cell(Row, OffsetCol+09, CellFontSize,  8);
 СекцWorkДТ.Cell(Row, OffsetCol+09, CellFontColor, coBlack);
 СекцWorkДТ.Cell(Row, OffsetCol+09, CellBgColor, coTransparent);
 СекцWorkДТ.Cell(Row, OffsetCol+09, CellAlignment, 1);
 СекцWorkДТ.Cell(Row, OffsetCol+09, CellBorder, "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+09, CellWrap, True);
 СекцWorkДТ.Cell(Row, OffsetCol+09, CellContents, Format("%17.2N", тСУМБАЛ[Row]));

 СекцWorkДТ.Cell(Row, OffsetCol+10, CellFontStyle, 0);
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellFontSize,  8);
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellFontColor, coBlack);
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellBgColor, coTransparent);
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellAlignment, if(notОСТцена, 2, 1));
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellBorder, "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellWrap, True);
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellContents, if(notОСТцена, "X", Format("%17.2N", тСУМАМТ[Row])));

 СекцWorkДТ.Cell(Row, OffsetCol+11, CellFontStyle, 0);
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellFontSize,  8);
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellFontColor, coBlack);
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellBgColor, coTransparent);
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellAlignment, if(notОСТцена, 2, 1));
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellBorder, "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellWrap, True);
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellContents, if(notОСТцена, "X", Format("%17.2N", тСУМОСТ[Row])));

end;

Proc ФормированиеЦветовЗаголовков(СхемаЦвета:Integer);
var ColorH1, ColorH2, ColorH3, ColorH4, ColorH5 :Integer;
 ClearVariable(BufInt);
 ColorH1=0;
 ColorH2=0;
 ColorH3=0;
 ColorH4=0;
 ColorH5=0;
-- if СхемаЦвета=0:
--   ColorH1=Цвет(255, 240, 200); -- красного цвета 1 УБЫВ (RGb)
--   ColorH2=Цвет(255, 240, 220);
--   ColorH3=Цвет(255, 220, 220);
--   ColorH4=Цвет(255, 220, 180);
--   ColorH5=Цвет(255, 200, 160);
-- |  СхемаЦвета=1:
--   ColorH1=Цвет(255, 200, 160); -- красного цвета 1 ВОЗР (RGb)
--   ColorH2=Цвет(255, 220, 180);
--   ColorH3=Цвет(255, 220, 220);
--   ColorH4=Цвет(255, 240, 220);
--   ColorH5=Цвет(255, 240, 200);
-- |  СхемаЦвета=2:
--   ColorH1=Цвет(255, 200, 240); -- красного цвета 2 УБЫВ (RgB)
--   ColorH2=Цвет(255, 220, 240);
--   ColorH3=Цвет(255, 220, 220);
--   ColorH4=Цвет(255, 180, 220);
--   ColorH5=Цвет(255, 160, 200);
-- |  СхемаЦвета=3:
--   ColorH1=Цвет(255, 160, 200); -- красного цвета 2 ВОЗР (RgB)
--   ColorH2=Цвет(255, 180, 220);
--   ColorH3=Цвет(255, 220, 220);
--   ColorH4=Цвет(255, 220, 240);
--   ColorH5=Цвет(255, 200, 240);
-- |  СхемаЦвета=4:
--   ColorH1=Цвет(200, 255, 240); -- зеленого цвета 1 УБЫВ (rGB)
--   ColorH2=Цвет(220, 255, 240);
--   ColorH3=Цвет(220, 255, 220);
--   ColorH4=Цвет(180, 255, 220);
--   ColorH5=Цвет(160, 255, 200);
-- |  СхемаЦвета=5:
--   ColorH1=Цвет(160, 255, 200); -- зеленого цвета 1 ВОЗР (rGB)
--   ColorH2=Цвет(180, 255, 220);
--   ColorH3=Цвет(220, 255, 220);
--   ColorH4=Цвет(220, 255, 240);
--   ColorH5=Цвет(200, 255, 240);
-- |  СхемаЦвета=6:
--   ColorH1=Цвет(240, 255, 200); -- зеленого цвета 2 УБЫВ (RGb)
--   ColorH2=Цвет(240, 255, 220);
--   ColorH3=Цвет(220, 255, 220);
--   ColorH4=Цвет(220, 255, 180);
--   ColorH5=Цвет(200, 255, 160);
-- |  СхемаЦвета=7:
--   ColorH1=Цвет(200, 255, 160); -- зеленого цвета 2 ВОЗР (RGb)
--   ColorH2=Цвет(220, 255, 180);
--   ColorH3=Цвет(220, 255, 220);
--   ColorH4=Цвет(240, 255, 220);
--   ColorH5=Цвет(240, 255, 200);
-- |  СхемаЦвета=8:
--   ColorH1=Цвет(240, 200, 255); -- синего цвета 1 УБЫВ (RgB)
--   ColorH2=Цвет(240, 220, 255);
--   ColorH3=Цвет(220, 220, 255);
--   ColorH4=Цвет(220, 180, 255);
--   ColorH5=Цвет(200, 160, 255);
-- |  СхемаЦвета=9:
--   ColorH1=Цвет(200, 160, 255); -- синего цвета 1 ВОЗР (RgB)
--   ColorH2=Цвет(220, 180, 255);
--   ColorH3=Цвет(220, 220, 255);
--   ColorH4=Цвет(240, 220, 255);
--   ColorH5=Цвет(240, 200, 255);
-- |  СхемаЦвета=10:
--   ColorH1=Цвет(200, 240, 255); -- синего цвета 2 УБЫВ (rGB)
--   ColorH2=Цвет(220, 240, 255);
--   ColorH3=Цвет(220, 220, 255);
--   ColorH4=Цвет(180, 220, 255);
--   ColorH5=Цвет(160, 200, 255);
-- |  СхемаЦвета=11:
--   ColorH1=Цвет(160, 200, 255); -- синего цвета 2 ВОЗР (rGB)
--   ColorH2=Цвет(180, 220, 255);
--   ColorH3=Цвет(220, 220, 255);
--   ColorH4=Цвет(220, 240, 255);
--   ColorH5=Цвет(200, 240, 255);
-- |  СхемаЦвета=12:
--   ColorH1=Цвет(255, 200, 200); -- смешанная УБЫВ
--   ColorH2=Цвет(200, 255, 200);
--   ColorH3=Цвет(200, 200, 255);
--   ColorH4=Цвет(230, 230, 230);
--   ColorH5=Цвет(200, 200, 200);
-- |  СхемаЦвета=13:
--   ColorH1=Цвет(200, 200, 200); -- смешанная ВОЗР
--   ColorH2=Цвет(230, 230, 230);
--   ColorH3=Цвет(200, 200, 255);
--   ColorH4=Цвет(200, 255, 200);
--   ColorH5=Цвет(255, 200, 200);
-- fi;
 if СхемаЦвета=0:
   ColorH1=Цвет(255, 200, 240); -- красного цвета 1 УБЫВ (RGb)
   ColorH2=Цвет(255, 200, 200);
   ColorH3=Цвет(255, 200, 170);
   ColorH4=Цвет(255, 200, 140);
   ColorH5=Цвет(255, 200, 110);
 |  СхемаЦвета=1:
   ColorH1=Цвет(255, 200, 110); -- красного цвета 1 ВОЗР (RGb)
   ColorH2=Цвет(255, 200, 140);
   ColorH3=Цвет(255, 200, 170);
   ColorH4=Цвет(255, 200, 200);
   ColorH5=Цвет(255, 200, 240);
 |  СхемаЦвета=2:
   ColorH1=Цвет(255, 240, 200); -- красного цвета 2 УБЫВ (RgB)
   ColorH2=Цвет(255, 200, 200);
   ColorH3=Цвет(255, 170, 200);
   ColorH4=Цвет(255, 140, 200);
   ColorH5=Цвет(255, 110, 200);
 |  СхемаЦвета=3:
   ColorH1=Цвет(255, 110, 200); -- красного цвета 2 ВОЗР (RgB)
   ColorH2=Цвет(255, 140, 200);
   ColorH3=Цвет(255, 170, 200);
   ColorH4=Цвет(255, 200, 200);
   ColorH5=Цвет(255, 240, 200);
 |  СхемаЦвета=4:
   ColorH1=Цвет(240, 255, 200); -- зеленого цвета 1 УБЫВ (rGB)
   ColorH2=Цвет(200, 255, 200);
   ColorH3=Цвет(170, 255, 200);
   ColorH4=Цвет(140, 255, 200);
   ColorH5=Цвет(110, 255, 200);
 |  СхемаЦвета=5:
   ColorH1=Цвет(110, 255, 200); -- зеленого цвета 1 ВОЗР (rGB)
   ColorH2=Цвет(140, 255, 200);
   ColorH3=Цвет(170, 255, 200);
   ColorH4=Цвет(200, 255, 200);
   ColorH5=Цвет(240, 255, 200);
 |  СхемаЦвета=6:
   ColorH1=Цвет(200, 255, 240); -- зеленого цвета 2 УБЫВ (RGb)
   ColorH2=Цвет(200, 255, 200);
   ColorH3=Цвет(200, 255, 170);
   ColorH4=Цвет(200, 255, 140);
   ColorH5=Цвет(200, 255, 110);
 |  СхемаЦвета=7:
   ColorH1=Цвет(200, 255, 110); -- зеленого цвета 2 ВОЗР (RGb)
   ColorH2=Цвет(200, 255, 140);
   ColorH3=Цвет(200, 255, 170);
   ColorH4=Цвет(200, 255, 200);
   ColorH5=Цвет(200, 255, 240);
 |  СхемаЦвета=8:
   ColorH1=Цвет(200, 240, 255); -- синего цвета 1 УБЫВ (RgB)
   ColorH2=Цвет(200, 200, 255);
   ColorH3=Цвет(200, 170, 255);
   ColorH4=Цвет(200, 140, 255);
   ColorH5=Цвет(200, 110, 255);
 |  СхемаЦвета=9:
   ColorH1=Цвет(200, 110, 255); -- синего цвета 1 ВОЗР (RgB)
   ColorH2=Цвет(200, 140, 255);
   ColorH3=Цвет(200, 170, 255);
   ColorH4=Цвет(200, 200, 255);
   ColorH5=Цвет(200, 240, 255);
 |  СхемаЦвета=10:
   ColorH1=Цвет(240, 200, 255); -- синего цвета 2 УБЫВ (rGB)
   ColorH2=Цвет(200, 200, 255);
   ColorH3=Цвет(170, 200, 255);
   ColorH4=Цвет(140, 200, 255);
   ColorH5=Цвет(110, 200, 255);
 |  СхемаЦвета=11:
   ColorH1=Цвет(110, 200, 255); -- синего цвета 2 ВОЗР (rGB)
   ColorH2=Цвет(140, 200, 255);
   ColorH3=Цвет(170, 200, 255);
   ColorH4=Цвет(200, 200, 255);
   ColorH5=Цвет(240, 200, 255);
 |  СхемаЦвета=12:
   ColorH1=Цвет(255, 200, 200); -- смешанная УБЫВ
   ColorH2=Цвет(200, 255, 200);
   ColorH3=Цвет(200, 200, 255);
   ColorH4=Цвет(230, 230, 230);
   ColorH5=Цвет(200, 200, 200);
 |  СхемаЦвета=13:
   ColorH1=Цвет(200, 200, 200); -- смешанная ВОЗР
   ColorH2=Цвет(230, 230, 230);
   ColorH3=Цвет(200, 200, 255);
   ColorH4=Цвет(200, 255, 200);
   ColorH5=Цвет(255, 200, 200);
 fi;
 BufInt[1]=ColorH1;
 BufInt[2]=ColorH2;
 BufInt[3]=ColorH3;
 BufInt[4]=ColorH4;
 BufInt[5]=ColorH5;
end;

Proc ПостроениеОтчета;
var Режим :Logical;
var len, ii, Iter, ColorH1, ColorH2, ColorH3, ColorH4, ColorH5 :Integer;

 len=LengthOfArray(тSRTFLD);

 if len>0:

   Позиции=len;
   Режим=AutoRefresh;
   ToggleAutoRefresh(False);
   ShowProgress(len, "Формирование ведомости...");

   Try

     ФормированиеЦветовЗаголовков(flgСхемаЦветов);
     ColorH1=BufInt[1];
     ColorH2=BufInt[2];
     ColorH3=BufInt[3];
     ColorH4=BufInt[4];
     ColorH5=BufInt[5];
     Iter=0;

     iniВнешнийВидСтолбцов(flgСЧТ, flgКБК, flgМОЛ, flgМХЭ);
     ФормированиеШириныСтолбцовТаблицы;

     СекцWorkДТ.RowsCount=len;

     ValidateВедомостьSection(True);
     ValidateИтогиSection(True);

     СтрокиТ5=0;

     for ii=1 to len do
       ProgressPos(ii);
       if тНФАКОД[ii]="": -- значит заголовок
         СтрокиТ5=СтрокиТ5+1;
         СекцТ5Д.RowsCount=СтрокиТ5;
         СформироватьСтрокуПромежуточныхИтогов(ii, тSRTFLD[ii], ColorH1, ColorH2, ColorH3, ColorH4, ColorH5, СтрокиТ5);
       else
         Iter=Iter+1;
         СформироватьСтрокуДанных(ii, Iter);
       fi;
     od;

   Finally

     CloseProgress;
     ToggleAutoRefresh(Режим);

   end;
 fi;

 ФормированиеВидимостиСтолбцовТаблицы;
 ValidateОтчетSection;

end;

Func СчетаНФА_вУчете(maskСЧТ:String; ddBP:Date; ddEP:Date) :Integer;
var Путь, Acc :String;
var num, kk :Integer;
var Отч1 :Report;
 ClearVariable(Buf);
 Путь=PlanVar("НФА")+"\ОТЧЕТЫ\НФАОТЧ2007.lst";
 if not ExistFile(Путь): ^-1; fi;
 Try
   Отч1=RepOpen(Путь+"|По_счетам_НФА_Бал_Заб", maskСЧТ, "", if(ddBP>1.1.1990, ddBP, 1.1.100), if(ddEP>1.1.1990, ddEP, ToDay));
   RepReset(Отч1);
   Try
     num=RepRowsCount(Отч1);
     kk=0;
     while RepNext(Отч1) do
       Acc=RepIdent(Отч1);
       if Match(Acc, "???.????.???????.???.?.???.??.???")    or
          Match(Acc, "???.??.??.??.??.??.????.?.???.??.???") or
          Match(Acc, "ЗАБ.??.???.??"):
         kk=kk+1;
         Buf[kk]=Объединить(SignsMask(Acc, True), SignsMask(Acc, False), "|");
       fi;
     end; -- while
   Finally
     Отч1=RepClose(Отч1);
   end;
 Except
   ^-1;
 end;
 ^LengthOfArray(Buf);
end;

Func СчетаНФА_поСтруктуре(maskСЧТ:String) :Integer;
var Acc :String;
var kk :Integer;
 ClearVariable(Buf);
 kk=0;
 for Account Acc=maskСЧТ, Sort do 
   kk=kk+1;
   Buf[kk]=Объединить(SignsMask(Acc, True), SignsMask(Acc, False), "|");
 od;
 ^LengthOfArray(Buf);
end;

Func СправочникиСтруктурыПоМаскеСчетовПрогресс(maskСЧТ:String; ddBP:Date; ddEP:Date; OnlyUseAcc:Logical; EnableProgress:Logical) :String;
var Voc, MaskVoc :String;
var xx, ii, num, jj, kk :Integer;
var qq :Numeric;
 Try qq=Saldo(maskСЧТ, 1.1.100); Except ^" "; end;
 ClearVariable(bindVOC); ClearVariable(bindINT);
 if EnableProgress: ShowProgress(0, "Подготовка..."); fi;
 MaskVoc="";
 Try
   xx=0;
   if OnlyUseAcc: xx=СчетаНФА_вУчете(maskСЧТ, ddBP, ddEP); fi;
   if not xx>0:   xx=СчетаНФА_поСтруктуре(maskСЧТ); fi;
   if xx>0:
     if EnableProgress: ShowProgress(xx, "Анализ привязки справочников к счетам..."); fi;
     for ii=1 to xx do
       if EnableProgress: ProgressPos(ii); fi;
       num=WordsCount(Buf[ii], "|");
       for jj=1 to num do
         Voc=ExtractWord(jj, Buf[ii], "|");
         kk=SearchInArray(bindVOC, Voc, True, 1);
         if kk>0:
           bindINT[kk]=bindINT[kk]+1;
         else
           kk=InsertInArraySort(bindVOC, Voc);
           InsertInArray(bindINT, kk, 1);
         fi;
       od;
     od;
     num=LengthOfArray(bindVOC);
     if num>0:
       if EnableProgress: ShowProgress(num, "Обработка полученных данных..."); fi;
       jj=num; -- удаляем с конца
       for ii=1 to num do
         if EnableProgress: ProgressPos(ii); fi;
         -- xx - количество рабочих счетов
         if bindINT[jj]<>xx: DeleteFromArray(bindVOC, jj); else MaskVoc=Объединить(MaskVoc, bindVOC[jj], "|"); fi;
         jj=jj-1;
       od;
     fi;
   fi; -- xx>0
 Finally
   if EnableProgress: CloseProgress; fi;
 end;
 ^MaskVoc;
end;

Proc РасчетСпискаНФА;
var MaskANA, ResANA, MaskACC, BindANA, ANA :String;
var OK, flgИгнор, bndДОП, Flag :Logical;
var chislo, WorkConstНФА100П, WorkConstНФА_ИНВ :Numeric;
var num, kk, xx, len_Max, len, uДОП, uМОЛ, uМХЭ :Integer;
var начало :Integer;
 начало=Time;
 -- Проверка заполнения
 if not ДАТОПЕР>1.1.2000:
    Message("Не задана корректная дата!", mtWarning);
    Template.Field="ДАТОПЕР";
    Exit;
 fi;
 if not flgНФАамт and not flgНФА100 and not flgНФАбез:
    num=EnqOkCancel("Незадействованны флаги отбора НФА по типам.^MЕсли продолжить в отчет будут включены все балансовые НФА.^MПродолжить?", mtWarning);
    if num=cmCancel: Exit; fi;
    flgНФАамт=True; flgНФА100=True; flgНФАбез=True;
 fi;
 flgИгнор=False;
 MaskACC=ИтоговаяМаскаСчета(flgИстФинcur, отчСЧТ, отчКБК, if(curБЗС=1 or curБЗС=2, True, False), if(curБЗС=1 or curБЗС=3, True, False));
 bndДОП=False;
     отчМОЛ=Trim(отчМОЛ);
     отчМХЭ=Trim(отчМХЭ);
 ДОП_АНАКОД=Trim(ДОП_АНАКОД);
     отчГРП=Trim(отчГРП);
 if (flgНФАамт or flgНФА100) and (not flgНФАбез) and (curБЗС=2): Flag=True; else Flag=False; fi;
 if flgПровПрив:
   BindANA=СправочникиСтруктурыПоМаскеСчетовПрогресс(MaskACC, 1.1.100, ДАТОПЕР+1, True, True);
   if BindANA=" ": Exit; fi; -- если был Except
   if SearchInArray(bindVOC, "НФА.*",     True, 1)<1: Message("Справочник 'НФА' не привязан к счетам учета НФА!", mtError); Exit; fi;
   if SearchInArray(bindVOC, "МОЛ.*",     True, 1)<1: Message("Справочник 'МОЛ' не привязан к счетам учета НФА!", mtError); Exit; fi;
   if SearchInArray(bindVOC, "М.*",       True, 1)<1: Message("Справочник 'М' не привязан к счетам учета НФА!",   mtError); Exit; fi;
   if ДОП_АНАКОД<>"": if SearchInArray(bindVOC, ДОП_АНАКОД+".*", True, 1)>0: bndДОП=True; fi; fi;
 fi;
 --
 MaskANA=""; ResANA="";
 num=0; kk=0;
 len=Length(MaskACC)+18; -- 18=5+2+11 3 -5[знак()'*]  -2[{}] -11[()&(~НФА.*)] или [НФА.*&УЧН.*]
 len_Max=255-len;
 uДОП=0; uМОЛ=0; uМХЭ=0;
 OK=False;
 if ДОП_АНАКОД<>"":
   ANA=ДОП_АНАКОД;
   if OK: xx=3; else xx=2; OK=True; fi;
   kk=Length(ANA)+xx;
   if (num+kk)<=len_Max:
     num=num+kk;
     MaskANA=Объединить(MaskANA, "("+ANA+")",  "&");
     uДОП=+1;
   else
     if flgПровПрив and not bndДОП: Message("Слишком большое условие отбора аналитики!^MА справочник '"+ДОП_VOCКОД+"' не привязан к счетам учета НФА!", mtError); Exit; fi;
     uДОП=-1;
   fi;
 fi;
 if отчМОЛ<>"":
   ANA=отчМОЛ;
   if OK: xx=3; else xx=2; OK=True; fi;
   kk=Length(ANA)+xx;
   if (num+kk)<=len_Max:
     num=num+kk;
     MaskANA=Объединить(MaskANA, "("+ANA+")",  "&");
     uМОЛ=+1;
   else
     uМОЛ=-1;
   fi;
 fi;
 if отчМХЭ<>"":
   ANA=отчМХЭ;
   if OK: xx=3; else xx=2; OK=True; fi;
   kk=Length(ANA)+xx;
   if (num+kk)<=len_Max:
     num=num+kk;
     MaskANA=Объединить(MaskANA, "("+ANA+")",  "&");
     uМХЭ=+1;
   else
     uМХЭ=-1;
   fi;
 fi;
 ResANA=MaskANA;
 if ResANA<>"": ResANA="("+ResANA+")&(~НФА.*)"; else ResANA="~НФА.*"; fi;
 if Abs(Turn("+("+MaskACC+"){"+ResANA+"}", 1.1.100, ДАТОПЕР+1))>0 or Abs(Turn("-("+MaskACC+"){"+ResANA+"}", 1.1.100, ДАТОПЕР+1))>0:
    num=Enquiry("Выберите действие...", "Обнаружены проводки^Mна "+отчСЧТ+" счетах^Mнепомеченные справочником НФА!", "Проводки в отчет;Отмена;Игнорировать", mtError);
    if num=1:
      Report(PlanVar("НФА")+"\ОТЧЕТЫ\НФАОТЧ2007.lst"+"|Непомеченные_НФА", 1.1.100, ДАТОПЕР+1, MaskACC, ResANA);
      Exit;
    |  num=3: flgИгнор=True;
    else Exit;
    fi;
 fi;
 ResANA=Объединить(if(flgИгнор, "", "НФА.*"), if(Flag, pfxУЧН+".*", ""), "&");
 MaskANA=Объединить(ResANA, MaskANA, "&");
 -- Константы НФА
 Try chislo=Com_Var("ОС_100" , ДАТОПЕР); Except chislo=0.00; end;
 if not chislo>0: if ДАТОПЕР>=1.1.2011: chislo=40000; else chislo=20000; fi; fi;
 WorkConstНФА100П=chislo;
 Try chislo=Com_Var("ОС_РАСХ" , ДАТОПЕР); Except chislo=0.00; end;
 if not chislo>0: if ДАТОПЕР>=1.1.2009: chislo=3000; else chislo=1000; fi; fi;
 WorkConstНФА_ИНВ=chislo;
 -- Поиск данных
 OK=ПоискДанных(ДАТОПЕР, flgИгнор, WorkConstНФА100П, WorkConstНФА_ИНВ, MaskACC, MaskANA, uДОП, uМОЛ, uМХЭ);
 SetFLGСлужИнф;
 -- Построение отчета
 if OK:
   ПодсчетВставкаПромежуточныхИтогов(ДАТОПЕР);
   ПостроениеОтчета;
   if Позиции>0: Message("Расчет завершен!^MВремя работы - "+TimeToHMSstring(Time-начало), mtInformation); fi;
 fi;
end;

Proc ПрименитьЦвета;
var ColorH1, ColorH2, ColorH3, ColorH4, ColorH5 :Integer;

 ФормированиеЦветовЗаголовков(flgСхемаЦветов);
 ColorH1=BufInt[1];
 ColorH2=BufInt[2];
 ColorH3=BufInt[3];
 ColorH4=BufInt[4];
 ColorH5=BufInt[5];
 -- Проверять координаты !!!
 СекцВнВид.Cell(11, 04, CellBgColor, ColorH1);
 СекцВнВид.Cell(11, 05, CellBgColor, ColorH2);
 СекцВнВид.Cell(11, 06, CellBgColor, ColorH3);
 СекцВнВид.Cell(11, 07, CellBgColor, ColorH4);
 СекцВнВид.Cell(11, 08, CellBgColor, ColorH5);

end;

Func ВыбратьСхемуЦветовИерархическихЗаголовков(ТекущийЦвет:Integer) :Integer;
var num:Integer;
 ClearVariable(Buf);
 Buf[01]="На основе красного цвета 1 УБЫВ (RGb)";
 Buf[02]="На основе красного цвета 1 ВОЗР (RGb)";
 Buf[03]="На основе красного цвета 2 УБЫВ (RgB)";
 Buf[04]="На основе красного цвета 2 ВОЗР (RgB)";
 Buf[05]="На основе зеленого цвета 1 УБЫВ (rGB)";
 Buf[06]="На основе зеленого цвета 1 ВОЗР (rGB)";
 Buf[07]="На основе зеленого цвета 2 УБЫВ (RGb)";
 Buf[08]="На основе зеленого цвета 2 ВОЗР (RGb)";
 Buf[09]="На основе синего цвета 1 УБЫВ (RgB)";
 Buf[10]="На основе синего цвета 1 ВОЗР (RgB)";
 Buf[11]="На основе синего цвета 2 УБЫВ (rGB)";
 Buf[12]="На основе синего цвета 2 ВОЗР (rGB)";
 Buf[13]="Смешанная УБЫВ";
 Buf[14]="Смешанная ВОЗР";
 num=Alternate("Выберите цветовую схему", Buf, -1, ТекущийЦвет+1, 12);
 if not num>0: ^ТекущийЦвет; else ^(num-1); fi;
end;

Func ВыбратьРежимСохранения(ТекущийРежим:Integer) :Integer;
var num:Integer;
 ClearVariable(Buf);
 Buf[01]="Всегда сохранять";
 Buf[02]="Сохранять по запросу";
 Buf[03]="Никогда не сохранять";
 num=Alternate("Выберите режим сохранения ведомости", Buf, -1, ТекущийРежим+1, 12);
 if not num>0: ^ТекущийРежим; else ^(num-1); fi;
end;

Func ВыбратьПоправкуExcel(ТекущаяПоправка:Integer) :Integer;
var num, kk :Integer;
 ClearVariable(Buf);
 ClearVariable(BufInt);
 Buf[01]="01 единица"; BufInt[01]=01;
 Buf[02]="02 единицы"; BufInt[02]=02;
 Buf[03]="03 единицы"; BufInt[03]=03;
 Buf[04]="04 единицы"; BufInt[04]=04;
 Buf[05]="05 единиц";  BufInt[05]=05;
 Buf[06]="06 единиц";  BufInt[06]=06;
 Buf[07]="07 единиц";  BufInt[07]=07;
 Buf[08]="08 единиц";  BufInt[08]=08;
 Buf[09]="09 единиц";  BufInt[09]=09;
 Buf[10]="10 единиц";  BufInt[10]=10;
 Buf[11]="12 единиц";  BufInt[11]=12;
 Buf[12]="14 единиц";  BufInt[12]=14;
 Buf[13]="16 единиц";  BufInt[13]=16;
 Buf[14]="18 единиц";  BufInt[14]=18;
 Buf[15]="20 единиц";  BufInt[15]=20;
 Buf[16]="25 единиц";  BufInt[16]=25;
 kk=SearchInArray(BufInt, ТекущаяПоправка, True, 1);
 if kk=-1: kk=3; fi;
 num=Alternate("Выберите число...", Buf, -1, kk, 12);
 if not num>0: ^ТекущаяПоправка; else ^BufInt[num]; fi;
end;

Proc РазрешенЗависимостьМОЛ(Разрешено:Logical);
 if Разрешено: отчМХЭ=""; МХЭимя=""; else flgМОЛМХЭcur=1; flgМОЛМХЭold=flgМОЛМХЭcur; fi;
 Bevel4.Enabled=Разрешено;
 rbtМОЛМХЭ.Enabled=Разрешено;
 rbtМХЭМОЛ.Enabled=Разрешено;
end;

Proc ПечатьИтоговыхТаблиц(ПечИтгТаб1:Logical; ПечИтгТаб2:Logical; ПечИтгТаб3:Logical; ПечИтгТаб4:Logical; ПечИтгТаб5:Logical; ОтделТабл:Logical; сНовСтр:Logical);

СекцТ1З.CanPrint = ПечИтгТаб1;
СекцТ1Д.CanPrint = ПечИтгТаб1;
СекцТ1И.CanPrint = ПечИтгТаб1;
СекцТ1З.Row(1, RowNewPage, if(ОтделТабл or сНовСтр, True, False));

СекцТ2З.CanPrint = ПечИтгТаб2;
СекцТ2Д.CanPrint = ПечИтгТаб2;
СекцТ2И.CanPrint = ПечИтгТаб2;
СекцТ2З.Row(1, RowNewPage, сНовСтр);

СекцТ3З.CanPrint = ПечИтгТаб3;
СекцТ3Д.CanPrint = ПечИтгТаб3;
СекцТ3И.CanPrint = ПечИтгТаб3;
СекцТ3З.Row(1, RowNewPage, сНовСтр);

СекцТ4З.CanPrint = ПечИтгТаб4;
СекцТ4Д.CanPrint = ПечИтгТаб4;
СекцТ4И.CanPrint = ПечИтгТаб4;
СекцТ4З.Row(1, RowNewPage, сНовСтр);

СекцТ5З.CanPrint = ПечИтгТаб5;
СекцТ5Д.CanPrint = ПечИтгТаб5;
СекцТ5И.CanPrint = ПечИтгТаб5;
СекцТ5З.Row(1, RowNewPage, сНовСтр);

end;

Proc ЗапомнитьЗначения;
 flgИстФинold=flgИстФинcur;
 flgФтрАнаold=flgФтрАнаcur;
 flgМОЛМХЭold=flgМОЛМХЭcur;
 oldDate=ДАТОПЕР;
  oldAcc=curAcc;
  oldБЗС=curБЗС;
end;

Proc Инициализация;
var chislo1, chislo2 :Numeric;
var tmp1 ,tmp2 :String;
var ddWork :Date;
 ddWork=if(ДАТОПЕР>1.1.100, ДАТОПЕР+1, ToDay+1);
 Try chislo1=Com_Var("ОС_РАСХ" , ddWork); Except chislo1=0.00; end;
 Try chislo2=Com_Var("ОС_100"  , ddWork); Except chislo2=0.00; end;
 if chislo1=0.00: if ddWork>=1.1.2009: chislo1= 3000.00; else chislo1= 1000.00; fi; fi;
 if chislo2=0.00: if ddWork>=1.1.2011: chislo2=40000.00; else chislo1=20000.00; fi; fi;
 tmp1="НФА > "+Format("%6.0m", chislo2);
 tmp2="Балансовые НФА, на которые положено ежемесячно начислять амортизацию ("+tmp1+")";
 СекцТ4З.Cell(3, 3, CellContents, tmp1); СекцТ4З.Cell(3, 6, CellContents, tmp1); СекцТ4З.Cell(3, 09, CellContents, tmp1);
 СекцТ4З.Cell(3, 3, CellHint,     tmp2); СекцТ4З.Cell(3, 6, CellHint,     tmp2); СекцТ4З.Cell(3, 09, CellHint,     tmp2);
 cbНФАамт.Caption=tmp2;
 tmp1="НФА > "+Format("%6.0m", chislo1)+" и <= "+Format("%6.0m", chislo2);
 tmp2="Балансовые НФА, на которые положено начислять амортизацию 100% при вводе в эксплуатацию ("+tmp1+")";
 СекцТ4З.Cell(3, 4, CellContents, tmp1); СекцТ4З.Cell(3, 7, CellContents, tmp1); СекцТ4З.Cell(3, 10, CellContents, tmp1);
 СекцТ4З.Cell(3, 4, CellHint,     tmp2); СекцТ4З.Cell(3, 7, CellHint,     tmp2); СекцТ4З.Cell(3, 10, CellHint,     tmp2);
 cbНФА100.Caption=tmp2;
 tmp1="НФА <= "+Format("%6.0m", chislo1);
 tmp2="Балансовые НФА, которые положено списывать с учета при вводе в эксплуатацию ("+tmp1+")";
 СекцТ4З.Cell(3, 5, CellContents, tmp1); СекцТ4З.Cell(3, 8, CellContents, tmp1); СекцТ4З.Cell(3, 11, CellContents, tmp1);
 СекцТ4З.Cell(3, 5, CellHint,     tmp2); СекцТ4З.Cell(3, 8, CellHint,     tmp2); СекцТ4З.Cell(3, 11, CellHint,     tmp2);
 cbНФАбез.Caption=tmp2;
 lblVersion.Caption=infoVersion;
 --
 ИзмГрп=Chr(13)+"Изменить"+Chr(13)+"порядок"+Chr(13)+"иерархической"+Chr(13)+"группировки";
 --
 if not Позиции>0:
   if not flgНФАамт and not flgНФА100 and not flgНФАбез: flgНФАамт=True; flgНФА100=True; flgНФАбез=True; fi;
   if Trim(Иерархия)="":
     flgСЧТ=2; flgКБК=0; flgМОЛ=2; flgМХЭ=1; flgГРП=0;
     Иерархия="МОЛ СЧТ";
     отчСЧТ="101.?? 102.?0 105.??"; флагиACC="11111111111111111";
     отчКБК=""; valКБК="";
     отчМОЛ=""; отчМХЭ=""; МОЛимя=""; МХЭимя="";
     keyГРП=""; отчГРП=""; namГРП=""; LastGRP_key="{0}"; LastGRP_num=0; ОчиститьГРПНФА;
     flgРежимСохр   = 1;
     flgСхемаЦветов = 1;
     ПоправкаExcel  = 3;
     flgSaveExport  = True;
   fi;
   if fldСОРТкод="": fldСОРТкод="тНФАКОД"; fldСОРТимя="... коду НФА"; fi;
   flgПечСлужИнф  = True;
   flgВыводИспол  = True;
   flgПечИтгТаб1  = True;
   flgПечИтгТаб2  = True;
   flgПечИтгТаб3  = True;
   flgПечИтгТаб4  = True;
   flgПечИтгТаб5  = True;
   flgОтделТабл   = True;
   flgПечНовСтр   = False;
   flgПровПрив    = False;
   flgВыборМОЛ    = False;
   flgТолькоИнв   = False;
   flgТолькоНмн   = False;
   flgXLSнетЕИ    = False;
 fi;
 --
 if ПоправкаExcel<1: ПоправкаExcel=3; fi;
 --
 ПорядокГрупп_ПеречитатьГруппы;
 --
 ПроверитьПолеСортировки;
 --
 Счета_ВнешнийВид;
 --
 РазрешенЗависимостьМОЛ(if(flgФтрАнаcur<>1, False, True));
 --
 РазрешенЗабаланс(if(curБЗС<>2, True, False));
 --
 ПечатьИтоговыхТаблиц(flgПечИтгТаб1, flgПечИтгТаб2, flgПечИтгТаб3, flgПечИтгТаб4, flgПечИтгТаб5, flgОтделТабл, flgПечНовСтр);
 --
 ЗапомнитьЗначения;
 ValidateSection(False);
end;

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

Proc Флаги_onChange(Sender:String);
var Flag, Old, Work :Logical;
var nameVar :String;
var ОбъектИмя :Object;
 if Template_OnClear: Exit; fi;
 Work=False;
 if FindObject(Sender, ОбъектИмя): Work=True; fi;
 if Work:
   nameVar="flg"+SubStr(Sender, 3, Length(Sender)-2); -- вычисляем имя переменной - 2=cb
   Flag=GetVariableL(nameVar); -- текущий статус;
   Old=not(Flag); -- предыдущий статус
   if ОтменитьИзмененияУсловийОтчета: Flag=Old; fi;
   PutVariableL(nameVar, Flag);
   ОбъектИмя.State=Flag;
   if Flag<>Old: 
--     if Sender="cbНФАзаб"     : РазрешенЗабаланс(if(curБЗС<>2, True, False));
--     |  Sender="cb_Бюджет" or
--        Sender="cb_внБюдж"    :
--                                if curAcc=2: отчСЧТ="101.?? 102.?0";         флагиACC="11111111100000000";
--                                |  curAcc=3: отчСЧТ="105.??";                флагиACC="00000000011111111";
--                                else         отчСЧТ="101.?? 102.?0 105.??";  флагиACC="11111111111111111";
--                                fi;
--     fi;
   fi;
   ValidateОтчетSection;
 fi;
end;  

Proc ФлагиМОЛ_onChange(Sender:String);
var curFlag, oldFlag :Integer;
 if Template_OnClear: Exit; fi;
 curFlag=flgМОЛМХЭcur; -- текущий статус
 oldFlag=flgМОЛМХЭold; -- предыдущий статус
 if ОтменитьИзмененияУсловийОтчета: curFlag=oldFlag; fi;
 flgМОЛМХЭcur=curFlag;
 if curFlag<>oldFlag: 
   if curFlag=1: отчМХЭ=""; МХЭимя=""; Template.Field="отчМОЛ_";
   |  curFlag=2: отчМОЛ=""; МОЛимя=""; Template.Field="отчМХЭ_";
   fi;
   flgМОЛМХЭold=curFlag;
   ValidateОтчетSection;
 fi;
end;  

Proc ФлагиИСТ_onChange(Sender:String);
var curFlag, oldFlag :Integer;
 if Template_OnClear: Exit; fi;
 curFlag=flgИстФинcur; -- текущий статус
 oldFlag=flgИстФинold; -- предыдущий статус
 if ОтменитьИзмененияУсловийОтчета: curFlag=oldFlag; fi;
 flgИстФинcur=curFlag;
 if curFlag<>oldFlag: 
   if flgФтрАнаcur=1: отчКБК=""; valКБК=""; отчМОЛ=""; МОЛимя=""; отчМХЭ=""; МХЭимя=""; fi;
   flgИстФинold=curFlag;
   ValidateОтчетSection;
 fi;
end;  

Proc ФлагиСчетов_onChange(Sender:String);
var curFlag, oldFlag :Integer;
 if Template_OnClear: Exit; fi;
 curFlag=curAcc; -- текущий статус
 oldFlag=oldAcc; -- предыдущий статус
 if ОтменитьИзмененияУсловийОтчета: curFlag=oldFlag; fi;
 curAcc=curFlag;
 if curFlag<>oldFlag:
   if curFlag=2: флагиACC="11111111100000000";
   |  curFlag=3: флагиACC="00000000011111111";
   else          флагиACC="11111111111111111";
   fi;
   keyГРП=""; отчГРП=""; namГРП=""; LastGRP_key="{0}"; LastGRP_num=0; ОчиститьГРПНФА;
   Счета_ВнешнийВид;
   oldAcc=curFlag;
   ValidateОтчетSection;
 fi;
end;

Proc ФлагиБАЛЗАБ_onChange(Sender:String);
var curFlag, oldFlag :Integer;
 if Template_OnClear: Exit; fi;
 curFlag=curБЗС; -- текущий статус
 oldFlag=oldБЗС; -- предыдущий статус
 if ОтменитьИзмененияУсловийОтчета: curFlag=oldFlag; fi;
 curБЗС=curFlag;
 if curFlag<>oldFlag:
   Счета_ВнешнийВид;
   РазрешенЗабаланс(if(curFlag<>2, True, False));
   keyГРП=""; отчГРП=""; namГРП=""; LastGRP_key="{0}"; LastGRP_num=0; ОчиститьГРПНФА;
   oldБЗС=curFlag;
   ValidateОтчетSection;
 fi;
end;

Proc ФлагиАНА_onChange(Sender:String);
var curFlag, oldFlag :Integer;
 if Template_OnClear: Exit; fi;
 curFlag=flgФтрАнаcur; -- текущий статус
 oldFlag=flgФтрАнаold; -- предыдущий статус
 if ОтменитьИзмененияУсловийОтчета: curFlag=oldFlag; fi;
 flgФтрАнаcur=curFlag;
 if curFlag<>oldFlag: 
   if curFlag=1: отчКБК=""; valКБК=""; отчМОЛ=""; МОЛимя=""; отчМХЭ=""; МХЭимя=""; fi;
   РазрешенЗависимостьМОЛ(if(curFlag<>1, False, True));
   flgФтрАнаold=curFlag;
   ValidateОтчетSection;
 fi;
end;  

Proc cbНстрВнВидОтч_OnChange(Sender:String);
 ПрименитьЦвета;
end;

Func AddVocOPER(PrevValue:String; Auto:Logical) :String;
var res, tmp, voc :String;
var RO, OA, i, num, len, k :Integer;
var REC :Record;
var OK :Logical;
 RefreshAna;
 res="";
 REC=SignToRecord("ДНФА.ВНПР.ЭЭ", False);
 if REC<>NIL:
   RO=OpenWorkArea("РПО_ДНФА", "", "Ukey="+RecordToString(REC));
   Try
     if Records(RO)=1:
       OA=OpenArray(RO, 1, "ЗАПРОС", "ПОЛЕПОДТАБЛИЦЫ", "Match(ПОЛЕПОДТАБЛИЦЫ, 'АН*')");
       num=Records(OA);
       if num>0:
         ClearVariable(Txt);
         voc=GetFieldS(RO, 1, "НЕДЕЙСТВСПР");
         len=WordsCount(voc, "|");
         if len>0:
           for i=1 to len do
             tmp=Up(ExtractWord(i, voc, "|"));
             if SearchInArray(Txt, tmp, True, 1)=-1: k=InsertInArraySort(Txt, tmp); fi;
           od;
         fi;
         voc=GetFieldS(RO, 1, "НЕДЕЙСТВОСТ");
         len=WordsCount(voc, "|");
         if len>0:
           for i=1 to len do
             tmp=Up(ExtractWord(i, voc, "|"));
             if SearchInArray(Txt, tmp, True, 1)=-1: k=InsertInArraySort(Txt, tmp); fi;
           od;
         fi;
         ClearVariable(Buf);
         for i=1 to num do
           tmp=GetFieldS(OA, i, "ОТВЕТ");
           OK=GetFieldL(OA, i, "ОСТАТОК");
           if not Match(tmp, "НФА.*") and
              not Match(tmp, "МОЛ.*") and
              not Match(tmp, "М.*")   and
              not Match(tmp, pfxУЧН+".*") and OK:
              tmp=Up(ExtractWord(1, tmp, "."));
              if SearchInArray(Txt, tmp, True, 1)=-1 and SearchInArray(Buf, tmp, True, 1)=-1:
                k=InsertInArraySort(Buf, tmp);
              fi;
           fi;
         od;
       fi;
       CloseWorkArea(OA);
       num=LengthOfArray(Buf);
       if num>0:
         res="";
         for i=1 to num do res=Объединить(res, Buf[i], "|"); od;
       else
         if not Auto: Message("В операции 'ДНФА.ВНПР.ЭЭ'^Mне найдено дополнительной аналитики!", mtInformation); fi;
         ^PrevValue;
       fi;
     fi;
   Finally
     CloseWorkArea(RO);
   end;
 else
   if not Auto: Message("В базе операции нет 'ДНФА.ВНПР.ЭЭ'", mtInformation); fi;
   ^PrevValue;
 fi;
 ^res;
end;

Func ВыборСправочникаФильтра(VOC:String) :String;
var ANA, Value :String;
var ii, num :Integer;
 ANA="";
 ANA=AddVocOPER("", True);
 ClearVariable(Buf);
 if ANA<>"":
   num=WordsCount(ANA, "|");
   if num>0:
     for ii=1 to num do
       Value=ExtractWord(ii, ANA, "|")+".*";
       AddInArray(Buf, True, False, Value);
     od;
   fi;
 fi;
 num=WordsCount(MaskUserVoc, "|");
 if num>0:
   for ii=1 to num do
     Value=ExtractWord(ii, MaskUserVoc, "|");
     AddInArray(Buf, True, False, Value);
   od;
 fi;
 Value="";
 num=LengthOfArray(Buf);
 if num>0: for ii=1 to num do Value=Value+"|"+Buf[ii]; od; fi;
 if SubStr(Value, 1, 1)="|": Value=Trim(SubStr(Value, 2, 255)); fi;
 --
 ANA=AnaElection(Value, True, False, VOC+".");
 if ANA="": ^VOC; else ^ANA; fi;
 ^"";
end;

Proc ВыборДопСправочника(onExit:Logical);
var StoreVoc, NewVoc :String;
var SaveValue :Logical;
 SaveValue=False;
 StoreVoc=ДОП_VOCКОД;
 if onExit: NewVoc=""; else NewVoc=ВыборСправочникаФильтра(StoreVoc); fi;
 if NewVoc<>StoreVoc: if not ОтменитьИзмененияУсловийОтчета: SaveValue=True; fi; fi;
 if SaveValue:
   ДОП_VOCКОД=NewVoc;
   ДОП_VOCИМЯ=Name_A(ДОП_VOCКОД+".");
   ДОП_АНАКОД="";
   ДОП_АНАИМЯ="";
 fi;
end;

Proc ВыборДопПризнака(VOCNAME:String; vИсточник:Integer; vМаскаСЧТ:String; vМаскаКБК:String; vБАЛ:Logical; vЗАБ:Logical; onExit:Logical);
var Путь, StoreANA, NewValue, MaskAcc, tmp :String;
var SaveValue :Logical;
var num, kk :Integer;
var Отч1 :Report;
 if Trim(VOCNAME)="":
   Message("Не выбран доп. справочник для отбора!", mtConfirmation);
   Template.Field="ДОП_VOCКОД_";
   Exit;
 fi;
 if Name_A(VOCNAME+".")=" ":
   Message("Справочника '"+VOCNAME+"' не существует!", mtError);
   Template.Field="ДОП_VOCКОД_";
   Exit;
 fi;
 SaveValue=False;
 StoreANA=ДОП_АНАКОД;
 if onExit:
   NewValue="";
 else
   Refresh(False);
   Путь=PlanVar("НФА")+"\ОТЧЕТЫ\НФАОТЧ2007.lst";
   if not ExistFile(Путь): Message("Файл с отчетами отсутствует!", mtError); Exit; fi;
   ClearVariable(Buf);
   ClearVariable(BufMsk);
   ClearVariable(BufStr);
   Try
     MaskAcc=ИтоговаяМаскаСчета(vИсточник, vМаскаСЧТ, vМаскаКБК, vБАЛ, vЗАБ);
     Отч1=RepOpen(Путь+"|По_признакам_БАЛиЗАБ", MaskAcc, "", 1.1.100, if(ДАТОПЕР>1.1.2000, ДАТОПЕР, ToDay), "", VOCNAME);
     RepReset(Отч1);
     Try
       while RepNext(Отч1) do
         if RepIdent(Отч1)<>"":
           tmp=Trim(Name_A(RepIdent(Отч1)));
           if tmp="": tmp=" "; fi;
           kk=InsertInArraySort(BufStr, tmp);
           InsertInArray(BufMsk, kk, RepIdent(Отч1));
           InsertInArray(Buf, kk, RepIdent(Отч1)+"--"+tmp);
         fi;
       end;
     Finally
       Отч1=RepClose(Отч1);
     end;
   Except
     Message("Ошибка создания отчета!", mtError);
     Raise;
   end;
   InsertInArray(BufStr, 1, "");
   InsertInArray(BufMsk, 1, "");
   InsertInArray(Buf,    1, "*--Выбор признака из списка");
   num=LengthOfArray(BufMsk);
   if num>0:
     kk=SearchInArray(BufMsk, StoreANA, False, 1);
     num=AlternateTree("Выберите дополнительный признак...", Buf, -1, kk, 12, "#", "Код признака", "Расшифровка кода", -1, False);
     if num<1: Exit;
     |  num=1:
       RefreshAna;
       tmp=AnaElection(VOCNAME+".*", False, False, StoreANA);
       if tmp="": Exit; fi;
       NewValue=tmp;
     else
       NewValue=BufMsk[num];
     fi;
   fi;
 fi;
 if NewValue<>StoreANA: if not ОтменитьИзмененияУсловийОтчета: SaveValue=True; fi; fi;
 if SaveValue:
   ДОП_АНАКОД=NewValue;
   ДОП_АНАИМЯ=Trim(Name_A(ДОП_АНАКОД));
 fi;
end;

-- РАБОТА с EXCEL

Proc УстановитьШиринуСтолбцаСимвол(objSheet:AutoObject; NumCol:Integer; valW:Numeric);
var xlsColumn :AutoObject;
 xlsColumn=AsAutoObject(objSheet.Columns[NumCol]);
 Try
   xlsColumn.ColumnWidth=valW;
 Finally
   ClearVariable(xlsColumn);
 end;
end;

Proc УстановитьШиринуСтолбцаММ(objSheet:AutoObject; Num:Integer; ммVal:Numeric; поправкаVal:Numeric);
var xlsColumn :AutoObject;
var пунктVal, символVal, ммValпункт, Res, sum :Numeric;
 Res=0.00;
 xlsColumn=AsAutoObject(objSheet.Columns[Num]);
 Try
    -- переводим милимметры в пункты (стандарт Adobe 1/72 дюйма - для обычного шрифта (96 точек на дюйм))
    ммValпункт = 72*ммVal/25.4;
    -- стандартная ширина колонки Excel в пунктах
      пунктVal = AsReal(xlsColumn.Width);
    -- стандартная ширина колонки Excel в символах "стандартного шрифта"
     символVal = AsReal(xlsColumn.ColumnWidth);
    -- вычисляем пропорцию и возвращаем требуемые миллиметры
           sum = символVal*ммValпункт/пунктVal;
           Res = if((sum-поправкаVal)>1.00, sum-поправкаVal, sum);
   xlsColumn.ColumnWidth=Res;
 Finally
   ClearVariable(xlsColumn);
 end;
end;

Proc ОбъединитьЯчейкиДиапазона(objSheet:AutoObject; X1:Integer; Y1:Integer; X2:Integer; Y2:Integer);
var xlsRange1, xlsRange2, xlsRangeRes :AutoObject;
 if X1>0 and X2>0 and Y1>0 and Y2>0 and X2>=X1 and Y2>=Y1:
   xlsRange1=AsAutoObject(objSheet.Cells[X1,Y1]);
   xlsRange2=AsAutoObject(objSheet.Cells[X2,Y2]);
   Try
     xlsRangeRes=AsAutoObject(objSheet.Range[xlsRange1, xlsRange2]);
     Try
       xlsRangeRes.Merge;
     Finally
       ClearVariable(xlsRangeRes);
     end;
   Finally
     ClearVariable(xlsRange1);
     ClearVariable(xlsRange2);
   end;
 fi;
end;

Proc ФорматироватьЯчейку(objSheet:AutoObject; X:Integer; Y:Integer; HAlign:Integer; lvlIndent:Integer; VAlign:Integer; txtWrap:Logical; FontFamily:String; FontSize:Integer; FontColor:Integer; AutoFontColor:Logical; FontBold:Logical; FontItalic:Logical; CellColor:Integer; NoCellColor:Logical);
var xlsRange, xlsFont :AutoObject;
 xlsRange=AsAutoObject(objSheet.Cells[X,Y]);
 Try
   xlsRange.HorizontalAlignment = HAlign;
   xlsRange.VerticalAlignment   = VAlign;
   xlsRange.WrapText = txtWrap;
   xlsRange.IndentLevel = lvlIndent;
   xlsFont=AsAutoObject(xlsRange.Font);
   Try
     xlsFont.Name  = FontFamily;
     xlsFont.Size  = FontSize;
     if AutoFontColor: xlsFont.ColorIndex = xlAutomatic; else xlsFont.Color = FontColor; fi;
     xlsFont.Bold   = FontBold;
     xlsFont.Italic = FontItalic;
   Finally
     ClearVariable(xlsFont);
   end;
   xlsFont=AsAutoObject(xlsRange.Interior);
   Try
     xlsFont.Pattern = xlSolid;
     if NoCellColor: 
       xlsFont.ColorIndex = xlNone;
       xlsFont.PatternColorIndex = xlNone;
     else
       xlsFont.Color = CellColor; 
       xlsFont.PatternColorIndex = xlAutomatic;
     fi;
   Finally
     ClearVariable(xlsFont);
   end;
 Finally
   ClearVariable(xlsRange);
 end;
end;

Func ФорматированнаяСумма_Число(Chislo:String) :Numeric;
var len, ii :Integer;
var Chars, fmtStr :String;
var Res :Numeric;
 Res=0.00;
 fmtStr="";
 len=Length(Chislo);
 if len>0 and Chislo<>"X":
   for ii=1 to len do
     Chars=SubStr(Chislo, ii, 1);
     if (Ascii(Chars)>47 and Ascii(Chars)<58) or Ascii(Chars)=46: fmtStr=fmtStr+Chars; fi;
   od;
 fi;
 if fmtStr<>"": Try Res=StringToNumeric(fmtStr); Except end; fi;
 ^Res;
end;

Proc ЗаписатьЯчейкуЧисло(objSheet:AutoObject; X:Integer; Y:Integer; tbValue:Numeric; locDS:String; locTS:String);
var xlsRange :AutoObject;
 xlsRange=AsAutoObject(objSheet.Cells[X,Y]);
 Try
   xlsRange.NumberFormat = "#"+locTS+"##0"+locDS+"00"; -- "# ##0,00"
   xlsRange.Value2 = tbValue;
   --xlsRange.Formula = tbValue;
 Finally
   ClearVariable(xlsRange);
 end;
end;

Proc ЗаписатьЯчейкуТекст(objSheet:AutoObject; X:Integer; Y:Integer; tbValue:String);
var xlsRange :AutoObject;
 xlsRange=AsAutoObject(objSheet.Cells[X,Y]);
 Try
   xlsRange.NumberFormat = "@";
   xlsRange.Value = tbValue;
 Finally
   ClearVariable(xlsRange);
 end;
end;

Proc УстановитьГраницуОднойЯчейки(objSheet:AutoObject; X:Integer; Y:Integer; видГраницы:Integer; lineСтиль:Integer; lineТолщина:Integer);
var xlsRange, xlsBorder :AutoObject;
 xlsRange=AsAutoObject(objSheet.Cells[X,Y]);
 Try
   xlsBorder=AsAutoObject(xlsRange.Borders[видГраницы]);
   Try
     xlsBorder.LineStyle=lineСтиль;
        xlsBorder.Weight=lineТолщина;
   Finally
     ClearVariable(xlsBorder);
   end;
 Finally
   ClearVariable(xlsRange);
 end;
end;

Proc УстановитьГраницу(objRange:AutoObject; типГраницы:Integer; lineСтиль:Integer; lineТолщина:Integer);
var xlsBorder :AutoObject;
 xlsBorder=AsAutoObject(objRange.Borders[типГраницы]);
 Try
   xlsBorder.LineStyle=lineСтиль;
   xlsBorder.Weight=lineТолщина;
 Finally
   ClearVariable(xlsBorder);
 end;
end;

Proc УстановитьВсеГраницыОднойЯчейки(objSheet:AutoObject; X:Integer; Y:Integer; lineЛевая:Logical; lineВерхняя:Logical; lineПравая:Logical; lineНижняя:Logical; lineДиагональВверх:Logical; lineДиагональВниз:Logical; lineСтиль:Integer; lineТолщина:Integer);
var xlsRange :AutoObject;
 xlsRange=AsAutoObject(objSheet.Cells[X,Y]);
 Try
   if lineЛевая:          УстановитьГраницу(xlsRange, xlEdgeLeft,     lineСтиль, lineТолщина); fi;
   if lineВерхняя:        УстановитьГраницу(xlsRange, xlEdgeTop,      lineСтиль, lineТолщина); fi;
   if lineПравая:         УстановитьГраницу(xlsRange, xlEdgeRight,    lineСтиль, lineТолщина); fi;
   if lineНижняя:         УстановитьГраницу(xlsRange, xlEdgeBottom,   lineСтиль, lineТолщина); fi;
   if lineДиагональВверх: УстановитьГраницу(xlsRange, xlDiagonalUp,   lineСтиль, lineТолщина); fi;
   if lineДиагональВниз:  УстановитьГраницу(xlsRange, xlDiagonalDown, lineСтиль, lineТолщина); fi;
 Finally
   ClearVariable(xlsRange);
 end;
end;

Proc УстановитьВсеГраницыДиапазона(objSheet:AutoObject; X1:Integer; Y1:Integer; X2:Integer; Y2:Integer; lineЛевая:Logical; lineВерхняя:Logical; lineПравая:Logical; lineНижняя:Logical; lineДиагональВверх:Logical; lineДиагональВниз:Logical; lineСтиль:Integer; lineТолщина:Integer);
var xlsRange1, xlsRange2, xlsRangeRes :AutoObject;
 if X1>0 and X2>0 and Y1>0 and Y2>0 and X2>=X1 and Y2>=Y1:
   xlsRange1=AsAutoObject(objSheet.Cells[X1,Y1]);
   xlsRange2=AsAutoObject(objSheet.Cells[X2,Y2]);
   Try
     xlsRangeRes=AsAutoObject(objSheet.Range[xlsRange1, xlsRange2]);
     Try
       if lineЛевая:          УстановитьГраницу(xlsRangeRes, xlEdgeLeft,     lineСтиль, lineТолщина); fi;
       if lineВерхняя:        УстановитьГраницу(xlsRangeRes, xlEdgeTop,      lineСтиль, lineТолщина); fi;
       if lineПравая:         УстановитьГраницу(xlsRangeRes, xlEdgeRight,    lineСтиль, lineТолщина); fi;
       if lineНижняя:         УстановитьГраницу(xlsRangeRes, xlEdgeBottom,   lineСтиль, lineТолщина); fi;
       if lineДиагональВверх: УстановитьГраницу(xlsRangeRes, xlDiagonalUp,   lineСтиль, lineТолщина); fi;
       if lineДиагональВниз:  УстановитьГраницу(xlsRangeRes, xlDiagonalDown, lineСтиль, lineТолщина); fi;
     Finally
       ClearVariable(xlsRangeRes);
     end;
   Finally
     ClearVariable(xlsRange1);
     ClearVariable(xlsRange2);
   end;
 fi;
end;

Proc УстановитьВсеГраницыДиапазонаИвнутри(objSheet:AutoObject; X1:Integer; Y1:Integer; X2:Integer; Y2:Integer; lineЛевая:Logical; lineВерхняя:Logical; lineПравая:Logical; lineНижняя:Logical; lineВнутриВер:Logical; lineВнутриГор:Logical; lineДиагональВверх:Logical; lineДиагональВниз:Logical; lineСтиль:Integer; lineТолщина:Integer);
var xlsRange1, xlsRange2, xlsRangeRes :AutoObject;
 if X1>0 and X2>0 and Y1>0 and Y2>0 and X2>=X1 and Y2>=Y1:
   xlsRange1=AsAutoObject(objSheet.Cells[X1,Y1]);
   xlsRange2=AsAutoObject(objSheet.Cells[X2,Y2]);
   Try
     xlsRangeRes=AsAutoObject(objSheet.Range[xlsRange1, xlsRange2]);
     Try
       if lineЛевая:          УстановитьГраницу(xlsRangeRes, xlEdgeLeft,     lineСтиль, lineТолщина); fi;
       if lineВерхняя:        УстановитьГраницу(xlsRangeRes, xlEdgeTop,      lineСтиль, lineТолщина); fi;
       if lineПравая:         УстановитьГраницу(xlsRangeRes, xlEdgeRight,    lineСтиль, lineТолщина); fi;
       if lineНижняя:         УстановитьГраницу(xlsRangeRes, xlEdgeBottom,   lineСтиль, lineТолщина); fi;
       if lineДиагональВверх: УстановитьГраницу(xlsRangeRes, xlDiagonalUp,   lineСтиль, lineТолщина); fi;
       if lineДиагональВниз:  УстановитьГраницу(xlsRangeRes, xlDiagonalDown, lineСтиль, lineТолщина); fi;
       if Y2>Y1 and lineВнутриВер: УстановитьГраницу(xlsRangeRes, xlInsideVertical,   lineСтиль, lineТолщина); fi;
       if X2>X1 and lineВнутриГор: УстановитьГраницу(xlsRangeRes, xlInsideHorizontal, lineСтиль, lineТолщина); fi;
     Finally
       ClearVariable(xlsRangeRes);
     end;
   Finally
     ClearVariable(xlsRange1);
     ClearVariable(xlsRange2);
   end;
 fi;
end;

Func ЗаменитьEnter(SrcString:String) :String;
var Res, codAscii : String;
var len, ii :Integer;
 Res="";
 len=Length(SrcString);
 if len>0:
   for ii=1 to len do
     codAscii=SubStr(SrcString, ii, 1);
     if Ascii(codAscii)=13: Res=Res+Chr(10); else Res=Res+codAscii; fi;
   od;
 fi;
 ^Res;
end;

Proc ЭкспортСтрокиПромежуточногоИтога(objSheet:AutoObject; Row:Integer; MskSort:String; цвH1:Integer; цвH2:Integer; цвH3:Integer; цвH4:Integer; цвH5:Integer; maxColTable:Integer; locDS:String; locTS:String);
var valKey1, valKey2, valKey3, valKey4, valKey5, valKey6, strHeader :String;
var ColorCell, lvlIndent :Integer;

 valKey1=Trim(ExtractWord(1, MskSort, "|"));
 valKey2=Trim(ExtractWord(2, MskSort, "|"));
 valKey3=Trim(ExtractWord(3, MskSort, "|"));
 valKey4=Trim(ExtractWord(4, MskSort, "|"));
 valKey5=Trim(ExtractWord(5, MskSort, "|"));
 valKey6=Trim(ExtractWord(6, MskSort, "|"));

 strHeader=тНФАИМЯ[Row];

 if valKey1<>""  and valKey2=""  and valKey3=""  and valKey4=""  and valKey5=""  and valKey6="": lvlIndent=0; ColorCell=цвH1;
 |  valKey1<>""  and valKey2<>"" and valKey3=""  and valKey4=""  and valKey5=""  and valKey6="": lvlIndent=1; ColorCell=цвH2;
 |  valKey1<>""  and valKey2<>"" and valKey3<>"" and valKey4=""  and valKey5=""  and valKey6="": lvlIndent=2; ColorCell=цвH3;
 |  valKey1<>""  and valKey2<>"" and valKey3<>"" and valKey4<>"" and valKey5=""  and valKey6="": lvlIndent=3; ColorCell=цвH4;
 |  valKey1<>""  and valKey2<>"" and valKey3<>"" and valKey4<>"" and valKey5<>"" and valKey6="": lvlIndent=4; ColorCell=цвH5;
 fi;

 ЗаписатьЯчейкуТекст(objSheet, xlsRepШапка+Row, 1, strHeader);
 ОбъединитьЯчейкиДиапазона(objSheet, xlsRepШапка+Row, 1, xlsRepШапка+Row, maxColTable-3);
 ФорматироватьЯчейку(objSheet, xlsRepШапка+Row, 1, xlLeft, lvlIndent, xlCenter, True, "Arial", 9, xlColorBlack, True, True, False, ColorCell, False);
 УстановитьВсеГраницыДиапазона(objSheet, xlsRepШапка+Row, 1, xlsRepШапка+Row, maxColTable-3, True, True, True, True, False, False, xlContinuous, xlThin);

 ЗаписатьЯчейкуЧисло(objSheet, xlsRepШапка+Row, maxColTable-2, тСУМБАЛ[Row], locDS, locTS);
 ФорматироватьЯчейку(objSheet, xlsRepШапка+Row, maxColTable-2, xlRight, 0, xlCenter, True, "Arial", 9, xlColorBlack, True, True, False, ColorCell, False);
 УстановитьВсеГраницыДиапазона(objSheet, xlsRepШапка+Row, maxColTable-2, xlsRepШапка+Row, maxColTable-2, True, True, True, True, False, False, xlContinuous, xlThin);

 ЗаписатьЯчейкуЧисло(objSheet, xlsRepШапка+Row, maxColTable-1, тСУМАМТ[Row], locDS, locTS);
 ФорматироватьЯчейку(objSheet, xlsRepШапка+Row, maxColTable-1, xlRight, 0, xlCenter, True, "Arial", 9, xlColorBlack, True, True, False, ColorCell, False);
 УстановитьВсеГраницыДиапазона(objSheet, xlsRepШапка+Row, maxColTable-1, xlsRepШапка+Row, maxColTable-1, True, True, True, True, False, False, xlContinuous, xlThin);

 ЗаписатьЯчейкуЧисло(objSheet, xlsRepШапка+Row, maxColTable-0, тСУМОСТ[Row], locDS, locTS);
 ФорматироватьЯчейку(objSheet, xlsRepШапка+Row, maxColTable-0, xlRight, 0, xlCenter, True, "Arial", 9, xlColorBlack, True, True, False, ColorCell, False);
 УстановитьВсеГраницыДиапазона(objSheet, xlsRepШапка+Row, maxColTable-0, xlsRepШапка+Row, maxColTable-0, True, True, True, True, False, False, xlContinuous, xlThin);

end;

Proc ЭкспортСтрокиДанных(objSheet:AutoObject; Row:Integer; Iter:Integer; locDS:String; locTS:String);
var Value1, Value2 :String;
var offsetCol :Integer;
var FF :Logical;

 offsetCol=0;

 offsetCol=offsetCol+1;
 Value1=Str(Iter);
 ЗаписатьЯчейкуТекст(objSheet, xlsRepШапка+Row, offsetCol, Value1);
 ФорматироватьЯчейку(objSheet, xlsRepШапка+Row, offsetCol, xlCenter, 0, xlCenter, True, "Arial", 8, xlColorBlack, True, False, False, 0, True);
 УстановитьВсеГраницыДиапазона(objSheet, xlsRepШапка+Row, offsetCol, xlsRepШапка+Row, offsetCol, True, True, True, True, False, False, xlContinuous, xlThin);

 offsetCol=offsetCol+1;

 Value1=if(flgТолькоНмн, тНФАИМЯ[Row], тНФАКОД[Row]+Chr(10)+тНФАИМЯ[Row]);
 ЗаписатьЯчейкуТекст(objSheet, xlsRepШапка+Row, offsetCol, Value1);
 ФорматироватьЯчейку(objSheet, xlsRepШапка+Row, offsetCol, xlLeft, 0, xlTop, True, "Arial", 8, xlColorBlack, True, False, False, 0, True);
 УстановитьВсеГраницыДиапазона(objSheet, xlsRepШапка+Row, offsetCol, xlsRepШапка+Row, offsetCol, True, True, True, True, False, False, xlContinuous, xlThin);

 offsetCol=offsetCol+1;
 Value1=тНФАИНВ[Row]; if Value1="_ не присвоен": Value1=""; fi; 
 Value2=тНФАУЧН[Row]; if Value2="_ не присвоен": Value2=""; fi;
 if not flgТолькоИнв: Value1=Value1+Chr(10)+Value2; fi;
 ЗаписатьЯчейкуТекст(objSheet, xlsRepШапка+Row, offsetCol, Value1);
 ФорматироватьЯчейку(objSheet, xlsRepШапка+Row, offsetCol, xlCenter, 0, xlCenter, True, "Arial", 8, xlColorBlack, True, False, False, 0, True);
 УстановитьВсеГраницыДиапазона(objSheet, xlsRepШапка+Row, offsetCol, xlsRepШапка+Row, offsetCol, True, True, True, True, False, False, xlContinuous, xlThin);

 if flgXLSнетЕИ:
   offsetCol=offsetCol+1;
   ЗаписатьЯчейкуЧисло(objSheet, xlsRepШапка+Row, offsetCol, тКОЛНФА[Row], locDS, locTS);
   ФорматироватьЯчейку(objSheet, xlsRepШапка+Row, offsetCol, xlCenter, 0, xlCenter, True, "Arial", 8, xlColorBlack, True, False, False, 0, True);
   УстановитьВсеГраницыДиапазона(objSheet, xlsRepШапка+Row, offsetCol, xlsRepШапка+Row, offsetCol, True, True, True, True, False, False, xlContinuous, xlThin);
 else
   offsetCol=offsetCol+1;
   Value1=Format("%7.2N", тКОЛНФА[Row]);
   Value2=Value1+if(Trim(тНФАЕДИ[Row])<>"", " "+тНФАЕДИ[Row], "");
   Value1=Value2+Chr(10)+тДАТЭКС[Row];
   ЗаписатьЯчейкуТекст(objSheet, xlsRepШапка+Row, offsetCol, Value1);
   ФорматироватьЯчейку(objSheet, xlsRepШапка+Row, offsetCol, xlCenter, 0, xlCenter, True, "Arial", 8, xlColorBlack, True, False, False, 0, True);
   УстановитьВсеГраницыДиапазона(objSheet, xlsRepШапка+Row, offsetCol, xlsRepШапка+Row, offsetCol, True, True, True, True, False, False, xlContinuous, xlThin);
 fi;

 FF=False; Value1=""; Value2="";
 if flgСЧТ =1 and flgКБК =1:
    if Match(тНФАКБК[Row], "???.????.???????.???"):
      Value2=тНФАСЧТ[Row]+Chr(10)+SubStr(тНФАКБК[Row], 1, 9);
      Value1=ВзятьИсточникСредств(тНФАИСТ[Row])+Chr(10)+SubStr(тНФАКБК[Row], 10, 11);
      FF=True;
    else
      Value2=тНФАСЧТ[Row];
      Value1=ВзятьИсточникСредств(тНФАИСТ[Row]);
    fi;
 |  flgСЧТ =1 and flgКБК<>1:
    Value2=тНФАСЧТ[Row];
    Value1=ВзятьИсточникСредств(тНФАИСТ[Row]);
 |  flgСЧТ<>1 and flgКБК =1:
    if Match(тНФАКБК[Row], "???.????.???????.???"):
      Value1=ВзятьИсточникСредств(тНФАИСТ[Row])+Chr(10)+тНФАКБК[Row];
    else
      Value1=ВзятьИсточникСредств(тНФАИСТ[Row]);
    fi;
 |  flgСЧТ<>1 and flgКБК<>1:
    Value1=ВзятьИсточникСредств(тНФАИСТ[Row]);
 fi;

 if flgСЧТ=1:
   offsetCol=offsetCol+1;
   ЗаписатьЯчейкуТекст(objSheet, xlsRepШапка+Row, offsetCol, Value2);
   ФорматироватьЯчейку(objSheet, xlsRepШапка+Row, offsetCol, if(FF, xlRight, xlCenter), 0, xlTop, True, "Arial", 8, xlColorBlack, True, False, False, 0, True);
   УстановитьВсеГраницыДиапазона(objSheet, xlsRepШапка+Row, offsetCol, xlsRepШапка+Row, offsetCol, True, True, if(FF, False, True), True, False, False, xlContinuous, xlThin);
 fi;

 offsetCol=offsetCol+1;
 ЗаписатьЯчейкуТекст(objSheet, xlsRepШапка+Row, offsetCol, Value1);
 ФорматироватьЯчейку(objSheet, xlsRepШапка+Row, offsetCol, if(FF, xlLeft, xlCenter), 0, xlTop, True, "Arial", 8, xlColorBlack, True, False, False, 0, True);
 УстановитьВсеГраницыДиапазона(objSheet, xlsRepШапка+Row, offsetCol, xlsRepШапка+Row, offsetCol, if(FF, False, True), True, True, True, False, False, xlContinuous, xlThin);

 if flgМОЛ=1:
   offsetCol=offsetCol+1;
   Value1=тМОЛКОД[Row]+Chr(10)+тМОЛИМЯ[Row];
   ЗаписатьЯчейкуТекст(objSheet, xlsRepШапка+Row, offsetCol, Value1);
   ФорматироватьЯчейку(objSheet, xlsRepШапка+Row, offsetCol, xlCenter, 0, xlCenter, True, "Arial", 8, xlColorBlack, True, False, False, 0, True);
   УстановитьВсеГраницыДиапазона(objSheet, xlsRepШапка+Row, offsetCol, xlsRepШапка+Row, offsetCol, True, True, True, True, False, False, xlContinuous, xlThin);
 fi;

 if flgМХЭ=1:
   offsetCol=offsetCol+1;
   Value1=тМХЭКОД[Row]+Chr(10)+тМХЭИМЯ[Row];
   ЗаписатьЯчейкуТекст(objSheet, xlsRepШапка+Row, offsetCol, Value1);
   ФорматироватьЯчейку(objSheet, xlsRepШапка+Row, offsetCol, xlCenter, 0, xlCenter, True, "Arial", 8, xlColorBlack, True, False, False, 0, True);
   УстановитьВсеГраницыДиапазона(objSheet, xlsRepШапка+Row, offsetCol, xlsRepШапка+Row, offsetCol, True, True, True, True, False, False, xlContinuous, xlThin);
 fi;

 offsetCol=offsetCol+1;
 ЗаписатьЯчейкуЧисло(objSheet, xlsRepШапка+Row, offsetCol, тСУМБАЛ[Row], locDS, locTS);
 ФорматироватьЯчейку(objSheet, xlsRepШапка+Row, offsetCol, xlRight, 0, xlCenter, True, "Arial", 8, xlColorBlack, True, False, False, 0, True);
 УстановитьВсеГраницыДиапазона(objSheet, xlsRepШапка+Row, offsetCol, xlsRepШапка+Row, offsetCol, True, True, True, True, False, False, xlContinuous, xlThin);

 offsetCol=offsetCol+1;
 ЗаписатьЯчейкуЧисло(objSheet, xlsRepШапка+Row, offsetCol, тСУМАМТ[Row], locDS, locTS);
 ФорматироватьЯчейку(objSheet, xlsRepШапка+Row, offsetCol, xlRight, 0, xlCenter, True, "Arial", 8, xlColorBlack, True, False, False, 0, True);
 УстановитьВсеГраницыДиапазона(objSheet, xlsRepШапка+Row, offsetCol, xlsRepШапка+Row, offsetCol, True, True, True, True, False, False, xlContinuous, xlThin);

 offsetCol=offsetCol+1;
 ЗаписатьЯчейкуЧисло(objSheet, xlsRepШапка+Row, offsetCol, тСУМОСТ[Row], locDS, locTS);
 ФорматироватьЯчейку(objSheet, xlsRepШапка+Row, offsetCol, xlRight, 0, xlCenter, True, "Arial", 8, xlColorBlack, True, False, False, 0, True);
 УстановитьВсеГраницыДиапазона(objSheet, xlsRepШапка+Row, offsetCol, xlsRepШапка+Row, offsetCol, True, True, True, True, False, False, xlContinuous, xlThin);

end;

Proc ИмпортПроцедурыVBA(objApp:AutoObject; objBook:AutoObject);
var xlsVBE, xlsAVBEP, xlsVBC :AutoObject;
var ВременныйФайл :String;
var FlagCreate :Logical;
var FF :Integer;

 -- Application.VBE.ActiveVBProject.VBComponents.Import "C:\Test.bas"

 xlsVBE   = AsAutoObject(objApp.VBE);
 xlsAVBEP = AsAutoObject(xlsVBE.ActiveVBProject);
 xlsVBC   = AsAutoObject(xlsAVBEP.VBComponents);

 ВременныйФайл=PlanVar('CACHE')+"\"+"PalletteColorAdd.bas";
 if ExistFile(ВременныйФайл): DeleteFile(ВременныйФайл); fi;
 Try
   Try
     FlagCreate=False;
     FF=TextFileCreate(ВременныйФайл);
     if not ExistFile(ВременныйФайл): Message("Ошибка создания файла: "+ВременныйФайл, mtError); Exit; fi;
     FlagCreate=True;

     TextFileWriteLn(FF, "Public Sub PalletteColorAdd(refBook As Object)");
     TextFileWriteLn(FF, "");
     TextFileWriteLn(FF, "refBook.ResetColors");
     TextFileWriteLn(FF, "");

     TextFileWriteLn(FF, "refBook.Colors(1)  = RGB(255, 200, 160)");
     TextFileWriteLn(FF, "refBook.Colors(2)  = RGB(255, 220, 180)");
     TextFileWriteLn(FF, "refBook.Colors(3)  = RGB(255, 220, 220)");
     TextFileWriteLn(FF, "refBook.Colors(4)  = RGB(255, 240, 220)");
     TextFileWriteLn(FF, "refBook.Colors(5)  = RGB(255, 240, 200)");

     TextFileWriteLn(FF, "refBook.Colors(6)  = RGB(255, 160, 200)");
     TextFileWriteLn(FF, "refBook.Colors(7)  = RGB(255, 180, 220)");
     TextFileWriteLn(FF, "refBook.Colors(8)  = RGB(255, 220, 220)");
     TextFileWriteLn(FF, "refBook.Colors(9)  = RGB(255, 220, 240)");
     TextFileWriteLn(FF, "refBook.Colors(10) = RGB(255, 200, 240)");

     TextFileWriteLn(FF, "refBook.Colors(11) = RGB(160, 255, 200)");
     TextFileWriteLn(FF, "refBook.Colors(12) = RGB(180, 255, 220)");
     TextFileWriteLn(FF, "refBook.Colors(13) = RGB(220, 255, 220)");
     TextFileWriteLn(FF, "refBook.Colors(14) = RGB(220, 255, 240)");
     TextFileWriteLn(FF, "refBook.Colors(15) = RGB(200, 255, 240)");

     TextFileWriteLn(FF, "refBook.Colors(16) = RGB(200, 255, 160)");
     TextFileWriteLn(FF, "refBook.Colors(17) = RGB(220, 255, 180)");
     TextFileWriteLn(FF, "refBook.Colors(18) = RGB(220, 255, 220)");
     TextFileWriteLn(FF, "refBook.Colors(19) = RGB(240, 255, 220)");
     TextFileWriteLn(FF, "refBook.Colors(20) = RGB(240, 255, 200)");

     TextFileWriteLn(FF, "refBook.Colors(21) = RGB(200, 160, 255)");
     TextFileWriteLn(FF, "refBook.Colors(22) = RGB(220, 180, 255)");
     TextFileWriteLn(FF, "refBook.Colors(23) = RGB(220, 220, 255)");
     TextFileWriteLn(FF, "refBook.Colors(24) = RGB(240, 220, 255)");
     TextFileWriteLn(FF, "refBook.Colors(25) = RGB(240, 200, 255)");

     TextFileWriteLn(FF, "refBook.Colors(26) = RGB(160, 200, 255)");
     TextFileWriteLn(FF, "refBook.Colors(27) = RGB(180, 220, 255)");
     TextFileWriteLn(FF, "refBook.Colors(28) = RGB(220, 220, 255)");
     TextFileWriteLn(FF, "refBook.Colors(29) = RGB(220, 240, 255)");
     TextFileWriteLn(FF, "refBook.Colors(30) = RGB(200, 240, 255)");

     TextFileWriteLn(FF, "refBook.Colors(31) = RGB(255, 200, 200)");
     TextFileWriteLn(FF, "refBook.Colors(32) = RGB(200, 255, 200)");
     TextFileWriteLn(FF, "refBook.Colors(33) = RGB(200, 200, 255)");
     TextFileWriteLn(FF, "refBook.Colors(34) = RGB(220, 220, 220)");
     TextFileWriteLn(FF, "refBook.Colors(35) = RGB(255, 255, 170)");

     TextFileWriteLn(FF, "");
     TextFileWriteLn(FF, "End Sub");

   Except
     if FlagCreate:
       Message("Ошибка записи в файл '"+ВременныйФайл+"'!", mtError);
     else
       Message("Ошибка создания файла '"+ВременныйФайл+"'!", mtError);
     fi;
     Raise;
   end;
 Finally
   TextFileClose(FF);
 end;

 xlsVBC.Import(ВременныйФайл);
 -- Application.Run "Test", oSheet
 objApp.Run("PalletteColorAdd", objBook);

 if ExistFile(ВременныйФайл): DeleteFile(ВременныйФайл); fi;

end;

Func КоличествоЛистовКниги(objBook:AutoObject) :Integer;
var xlsSheets :AutoObject;
var num :Integer;
 num=0;
 xlsSheets=AsAutoObject(objBook.Sheets);
 Try
   num=asInteger(xlsSheets.Count);
 Finally
   ClearVariable(xlsSheets);
 end;
 ^num;
end;

Func РусскийExcel(objApp:AutoObject) :Logical;
var xlsLS :AutoObject;
 --Application.LanguageSettings.LanguageID(msoLanguageIDUI)
 xlsLS=AsAutoObject(objApp.LanguageSettings);
 Try
   if asInteger(xlsLS.LanguageID[msoLanguageIDUI])=1049: ^True; fi;
 Finally
   ClearVariable(xlsLS);
 end;
 ^False;
end;

Func ФорматироватьАмперсанд(srcString:String) :String;
var num, ii :Integer;
var Char, Res :String;
 Res="";
 num=Length(srcString);
 if num>0:
   for ii=1 to num do
     Char=SubStr(srcString, ii, 1);
     if Char="&": Res=Res+"&&"; else Res=Res+Char; fi;
   od;
 fi;
 ^Res;
end;

Proc УстановитьНастройкиПринтера(objApp:AutoObject; objSheet:AutoObject; flgRusExcel:Logical; СлужебнаяИнфа:Logical; flgИтоги:Logical);
var xlsRng :AutoObject;
var valNum, valNu2 :Numeric;
 xlsRng=AsAutoObject(objSheet.PageSetup);
 Try
   xlsRng.Orientation = 2; -- 2=xlLandscape (альбомная ориентация)
   if not flgИтоги:
     xlsRng.PrintTitleRows = "$3:$4"; -- 'сквозные' строки
   fi;
   xlsRng.CenterHorizontally = True;
   xlsRng.BlackAndWhite = True;
   xlsRng.Order = 1; -- 1=xlDownThenOver -- направление печати вниз затем вправо
   xlsRng.Zoom = 100;
   if flgRusExcel:
     if СлужебнаяИнфа:
       xlsRng.RightHeader = '&"Arial,обычный"&7'+ФорматироватьАмперсанд(СлужКорИнфо[1])+Chr(10)+ФорматироватьАмперсанд(СлужКорИнфо[2]);
       xlsRng.LeftFooter  = '&"Arial,обычный"&7'+TimeCreationRep;
     fi;
     xlsRng.RightFooter   = '&"Arial,полужирный"&8Страница &С из &К';
   else
     if СлужебнаяИнфа:
       xlsRng.RightHeader = '&"Arial,normal"&7'+ФорматироватьАмперсанд(СлужКорИнфо[1])+Chr(10)+ФорматироватьАмперсанд(СлужКорИнфо[2]);
       xlsRng.LeftFooter  = '&"Arial,normal"&7'+TimeCreationRep;
     fi;
     xlsRng.RightFooter   = '&"Arial,bold"&8Страница &P из &N';
   fi;
   valNum=asReal(objApp.InchesToPoints[0.393700787401575]);
   if СлужебнаяИнфа: valNu2=asReal(objApp.InchesToPoints[0.590551181102362]); else valNu2=valNum; fi;
   xlsRng.LeftMargin   = valNum;
   xlsRng.RightMargin  = valNum;
   xlsRng.TopMargin    = valNu2;
   xlsRng.BottomMargin = valNum;
   valNum=asReal(objApp.InchesToPoints[0.196850393700787]);
   if СлужебнаяИнфа: valNu2=asReal(objApp.InchesToPoints[0.31496062992126]); else valNu2=valNum; fi;
   xlsRng.HeaderMargin = valNu2;
   xlsRng.FooterMargin = valNum;
 Finally
   ClearVariable(xlsRng);
 end;
end;

Proc ЭкспортИтогТабл1(objSheet:AutoObject; locDS:String; locTS:String);
var num, ii, lenШапка, Iter :Integer;
 num=LengthOfArray(иСЧТСкод);
 lenШапка=3;
 УстановитьШиринуСтолбцаСимвол(objSheet, 1, 20);
 УстановитьШиринуСтолбцаСимвол(objSheet, 2, 10);
 УстановитьШиринуСтолбцаСимвол(objSheet, 3, 12);
 УстановитьШиринуСтолбцаСимвол(objSheet, 4, 12);
 УстановитьШиринуСтолбцаСимвол(objSheet, 5, 12);
 УстановитьШиринуСтолбцаСимвол(objSheet, 6, 12);
 УстановитьШиринуСтолбцаСимвол(objSheet, 7, 12);
 -- Пишем заголовок
 ЗаписатьЯчейкуТекст(objSheet, 1, 1, "Итоговая таблица "+Chr(185)+"1 к ведомости остатков НФА (по синтетическим счетам)");
 ОбъединитьЯчейкиДиапазона(objSheet, 1, 1, 1, 7);
 ФорматироватьЯчейку(objSheet, 1, 1, xlLeft, 0, xlCenter, False, "Times New Roman", 11, 0, True, False, True, 0, True);
 -- Пишем заголовки столбцов таблицы
 ЗаписатьЯчейкуТекст(objSheet, 2, 1, "Синтетический счет");
 ОбъединитьЯчейкиДиапазона(objSheet, 2, 1, 3, 2);
 ФорматироватьЯчейку(objSheet, 2, 1, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, 2, 3, "БАЛАНС");
 ОбъединитьЯчейкиДиапазона(objSheet, 2, 3, 2, 5);
 ФорматироватьЯчейку(objSheet, 2, 3, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, 3, 3, "бюджет");
 ФорматироватьЯчейку(objSheet, 3, 3, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, 3, 4, "внебюджет");
 ФорматироватьЯчейку(objSheet, 3, 4, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, 3, 5, "итого");
 ФорматироватьЯчейку(objSheet, 3, 5, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, 2, 6, "ЗАБАЛАНС");
 ОбъединитьЯчейкиДиапазона(objSheet, 2, 6, 3, 6);
 ФорматироватьЯчейку(objSheet, 2, 6, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, 2, 7, "ВСЕГО");
 ОбъединитьЯчейкиДиапазона(objSheet, 2, 7, 3, 7);
 ФорматироватьЯчейку(objSheet, 2, 7, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);
 УстановитьВсеГраницыДиапазонаИвнутри(objSheet, 2, 1, 3, 7, True, True, True, True, True, True, False, False, xlContinuous, xlThin);
 УстановитьВсеГраницыДиапазона(objSheet, 2, 3, 3, 5, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, 2, 6, 3, 6, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, 2, 7, 3, 7, True, True, True, True, False, False, xlContinuous, xlMedium);
 -- Пишем данные таблицы
 for ii=1 to num do
   Iter=lenШапка+ii*3-2;
   --
   ЗаписатьЯчейкуТекст(objSheet, Iter, 1, иСЧТСкод[ii]);
   ОбъединитьЯчейкиДиапазона(objSheet, Iter, 1, Iter+2, 1);
   ФорматироватьЯчейку(objSheet, Iter, 1, xlLeft, 0, xlCenter, False, "Arial", 9, 0, True, True, False, 0, True);
   --
   ЗаписатьЯчейкуТекст(objSheet, Iter+0, 2, "балансовая");
   ФорматироватьЯчейку(objSheet, Iter+0, 2, xlCenter, 0, xlCenter, False, "Times New Roman", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуТекст(objSheet, Iter+1, 2, иtxt_amt[ii]);
   ФорматироватьЯчейку(objSheet, Iter+1, 2, xlCenter, 0, xlCenter, False, "Times New Roman", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуТекст(objSheet, Iter+2, 2, иtxt_ost[ii]);
   ФорматироватьЯчейку(objSheet, Iter+2, 2, xlCenter, 0, xlCenter, False, "Times New Roman", 8, 0, True, False, False, 0, True);
   --
   ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 3, иСЧТСбалБ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+0, 3, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 3, иСЧТСамтБ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+1, 3, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 3, иСЧТСостБ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+2, 3, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 4, иСЧТСбалВ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+0, 4, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 4, иСЧТСамтВ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+1, 4, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 4, иСЧТСостВ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+2, 4, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 5, иСЧТСбалИ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+0, 5, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 5, иСЧТСамтИ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+1, 5, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 5, иСЧТСостИ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+2, 5, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 6, иСЧТСзаб[ii], locDS, locTS);
   ОбъединитьЯчейкиДиапазона(objSheet, Iter, 6, Iter+2, 6);
   ФорматироватьЯчейку(objSheet, Iter+0, 6, xlRight, 0, xlTop, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 7, иСЧТСвсг[ii], locDS, locTS);
   ОбъединитьЯчейкиДиапазона(objSheet, Iter, 7, Iter+2, 7);
   ФорматироватьЯчейку(objSheet, Iter+0, 7, xlRight, 0, xlTop, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   УстановитьВсеГраницыДиапазонаИвнутри(objSheet, Iter+0, 1, Iter+2, 7, True, True, True, True, True, False, False, False, xlContinuous, xlThin);
 od;
 УстановитьВсеГраницыДиапазона(objSheet, lenШапка+1, 3, lenШапка+num*3, 5, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, lenШапка+1, 6, lenШапка+num*3, 6, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, lenШапка+1, 7, lenШапка+num*3, 7, True, True, True, True, False, False, xlContinuous, xlMedium);
 -- Пишем итоговую строчку таблицы
 Iter=lenШапка+num*3;
 ЗаписатьЯчейкуТекст(objSheet, Iter+1, 1, "И Т О Г О :");
 ОбъединитьЯчейкиДиапазона(objSheet, Iter+1, 1, Iter+3, 1);
 ФорматироватьЯчейку(objSheet, Iter+1, 1, xlLeft, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуТекст(objSheet, Iter+1, 2, "балансовая");
 ФорматироватьЯчейку(objSheet, Iter+1, 2, xlCenter, 0, xlCenter, False, "Times New Roman", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуТекст(objSheet, Iter+2, 2, "амортизация");
 ФорматироватьЯчейку(objSheet, Iter+2, 2, xlCenter, 0, xlCenter, False, "Times New Roman", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуТекст(objSheet, Iter+3, 2, "остаточная");
 ФорматироватьЯчейку(objSheet, Iter+3, 2, xlCenter, 0, xlCenter, False, "Times New Roman", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 3, вСЧТСбалБ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 3, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 3, вСЧТСамтБ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+2, 3, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+3, 3, вСЧТСостБ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+3, 3, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 4, вСЧТСбалВ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 4, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 4, вСЧТСамтВ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+2, 4, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+3, 4, вСЧТСостВ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+3, 4, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 5, вСЧТСбалИ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 5, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 5, вСЧТСамтИ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+2, 5, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+3, 5, вСЧТСостИ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+3, 5, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 6, вСЧТСзаб, locDS, locTS);
 ОбъединитьЯчейкиДиапазона(objSheet, Iter+1, 6, Iter+3, 6);
 ФорматироватьЯчейку(objSheet, Iter+1, 6, xlRight, 0, xlTop, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 7, вСЧТСвсг, locDS, locTS);
 ОбъединитьЯчейкиДиапазона(objSheet, Iter+1, 7, Iter+3, 7);
 ФорматироватьЯчейку(objSheet, Iter+1, 7, xlRight, 0, xlTop, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 УстановитьВсеГраницыДиапазонаИвнутри(objSheet, Iter+1, 1, Iter+3, 7, True, True, True, True, True, False, False, False, xlContinuous, xlThin);
 УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 3, Iter+3, 5, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 6, Iter+3, 6, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 7, Iter+3, 7, True, True, True, True, False, False, xlContinuous, xlMedium);

end;

Proc РазрывСтраницы(objSheet:AutoObject; Row:Integer);
var xlsRange, xlsRangeRes, xlsHPageBreak :AutoObject;
 xlsRange=AsAutoObject(objSheet.Cells[Row, 1]);
 Try
   xlsHPageBreak=AsAutoObject(objSheet.HPageBreaks);
   Try
     xlsRangeRes=AsAutoObject(objSheet.Range[xlsRange, xlsRange]);
     Try
     --ActiveSheet.HPageBreaks.Add (ActiveSheet.Range(Cells(7, 1), Cells(7, 1)))
     xlsHPageBreak.Add(xlsRangeRes);
     Finally
       ClearVariable(xlsRangeRes);
     end;
   Finally
     ClearVariable(xlsHPageBreak);
   end;
 Finally
   ClearVariable(xlsRange);
 end;
end;

Proc ЭкспортИтогТабл2(objSheet:AutoObject; locDS:String; locTS:String; offsetIter:Integer; ШиринаУжеЗадана:Logical; сНовогоЛиста:Logical);
var num, ii, Iter, lenШапка :Integer;
 if not ШиринаУжеЗадана:
   УстановитьШиринуСтолбцаСимвол(objSheet,  1, 16);
   УстановитьШиринуСтолбцаСимвол(objSheet,  2, 10);
   УстановитьШиринуСтолбцаСимвол(objSheet,  3, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  4, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  5, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  6, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  7, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  8, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  9, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet, 10, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet, 11, 12);
 fi;
 -- Пишем заголовок
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+1, 1, "Итоговая таблица "+Chr(185)+"2 к ведомости остатков НФА (по бюджетным счетам)");
 ОбъединитьЯчейкиДиапазона(objSheet, offsetIter+1, 1, offsetIter+1, 11);
 ФорматироватьЯчейку(objSheet, offsetIter+1, 1, xlLeft, 0, xlCenter, False, "Times New Roman", 11, 0, True, False, True, 0, True);
 if offsetIter>0 and сНовогоЛиста: РазрывСтраницы(objSheet, offsetIter+1); fi;
 -- Пишем заголовки столбцов таблицы
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+2, 1, "Бюджетный счет");
 ОбъединитьЯчейкиДиапазона(objSheet, offsetIter+2, 1, offsetIter+3, 2);
 ФорматироватьЯчейку(objSheet, offsetIter+2, 1, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+2, 3, "БЮДЖЕТ");
 ОбъединитьЯчейкиДиапазона(objSheet, offsetIter+2, 3, offsetIter+2, 5);
 ФорматироватьЯчейку(objSheet, offsetIter+2, 3, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 3, "балансовая");
 ФорматироватьЯчейку(objSheet, offsetIter+3, 3, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 4, "амортизация");
 ФорматироватьЯчейку(objSheet, offsetIter+3, 4, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 5, "остаточная");
 ФорматироватьЯчейку(objSheet, offsetIter+3, 5, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+2, 6, "ВНЕБЮДЖЕТ");
 ОбъединитьЯчейкиДиапазона(objSheet, offsetIter+2, 6, offsetIter+2, 8);
 ФорматироватьЯчейку(objSheet, offsetIter+2, 6, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 6, "балансовая");
 ФорматироватьЯчейку(objSheet, offsetIter+3, 6, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 7, "амортизация");
 ФорматироватьЯчейку(objSheet, offsetIter+3, 7, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 8, "остаточная");
 ФорматироватьЯчейку(objSheet, offsetIter+3, 8, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+2, 9, "ИТОГО");
 ОбъединитьЯчейкиДиапазона(objSheet, offsetIter+2, 9, offsetIter+2, 11);
 ФорматироватьЯчейку(objSheet, offsetIter+2, 9, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 9, "балансовая");
 ФорматироватьЯчейку(objSheet, offsetIter+3, 9, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3,10, "амортизация");
 ФорматироватьЯчейку(objSheet, offsetIter+3,10, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3,11, "остаточная");
 ФорматироватьЯчейку(objSheet, offsetIter+3,11, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);

 УстановитьВсеГраницыДиапазонаИвнутри(objSheet, offsetIter+2, 1, offsetIter+3, 11, True, True, True, True, True, True, False, False, xlContinuous, xlThin);
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+2, 3, offsetIter+3, 5, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+2, 6, offsetIter+3, 8, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+2, 9, offsetIter+3,11, True, True, True, True, False, False, xlContinuous, xlMedium);

 -- Пишем данные таблицы
 lenШапка=3;
 num=LengthOfArray(иСЧТБкод);
 for ii=1 to num do
   Iter=offsetIter+lenШапка+ii;
   ЗаписатьЯчейкуТекст(objSheet, Iter, 1, иСЧТБкод[ii]);
   ОбъединитьЯчейкиДиапазона(objSheet, Iter, 1, Iter, 2);
   ФорматироватьЯчейку(objSheet, Iter, 1, xlLeft, 0, xlCenter, False, "Arial", 8, 0, True, True, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter, 3, иСЧТБбалБ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter, 3, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter, 4, иСЧТБамтБ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter, 4, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter, 5, иСЧТБостБ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter, 5, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter, 6, иСЧТБбалВ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter, 6, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter, 7, иСЧТБамтВ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter, 7, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter, 8, иСЧТБостВ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter, 8, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter, 9, иСЧТБбалИ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter, 9, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter,10, иСЧТБамтИ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter,10, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter,11, иСЧТБостИ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter,11, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   УстановитьВсеГраницыДиапазонаИвнутри(objSheet, Iter, 1, Iter, 11, True, True, True, True, True, False, False, False, xlContinuous, xlThin);
 od;
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+lenШапка+1, 3, offsetIter+lenШапка+num, 5, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+lenШапка+1, 6, offsetIter+lenШапка+num, 8, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+lenШапка+1, 9, offsetIter+lenШапка+num,11, True, True, True, True, False, False, xlContinuous, xlMedium);
 -- Пишем итоговую строчку таблицы
 Iter=offsetIter+lenШапка+num;
 ЗаписатьЯчейкуТекст(objSheet, Iter+1, 1, "И Т О Г О :");
 ОбъединитьЯчейкиДиапазона(objSheet, Iter+1, 1, Iter+1, 2);
 ФорматироватьЯчейку(objSheet, Iter+1, 1, xlLeft, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 3, вСЧТБбалБ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 3, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 4, вСЧТБамтБ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 4, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 5, вСЧТБостБ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 5, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);

 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 6, вСЧТБбалВ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 6, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 7, вСЧТБамтВ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 7, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 8, вСЧТБостВ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 8, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);

 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 9, вСЧТБбалИ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 9, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1,10, вСЧТБамтИ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1,10, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1,11, вСЧТБостИ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1,11, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 УстановитьВсеГраницыДиапазонаИвнутри(objSheet, Iter+1, 1, Iter+1, 11, True, True, True, True, True, False, False, False, xlContinuous, xlThin);
 УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 3, Iter+1, 5, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 6, Iter+1, 8, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 9, Iter+1,11, True, True, True, True, False, False, xlContinuous, xlMedium);

end;


Proc ЭкспортИтогТабл3(objSheet:AutoObject; locDS:String; locTS:String; offsetIter:Integer; ШиринаУжеЗадана:Logical; сНовогоЛиста:Logical);
var num, ii, Iter, lenШапка :Integer;
 if not ШиринаУжеЗадана:
   УстановитьШиринуСтолбцаСимвол(objSheet,  1, 16);
   УстановитьШиринуСтолбцаСимвол(objSheet,  2, 10);
   УстановитьШиринуСтолбцаСимвол(objSheet,  3, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  4, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  5, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  6, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  7, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  8, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  9, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet, 10, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet, 11, 12);
 fi;
 -- Пишем заголовок
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+1, 1, "Итоговая таблица "+Chr(185)+"3 к ведомости остатков НФА (по ФКР)");
 ОбъединитьЯчейкиДиапазона(objSheet, offsetIter+1, 1, offsetIter+1, 11);
 ФорматироватьЯчейку(objSheet, offsetIter+1, 1, xlLeft, 0, xlCenter, False, "Times New Roman", 11, 0, True, False, True, 0, True);
 if offsetIter>0 and сНовогоЛиста: РазрывСтраницы(objSheet, offsetIter+1); fi;
 -- Пишем заголовки столбцов таблицы
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+2, 1, "ФКР");
 ОбъединитьЯчейкиДиапазона(objSheet, offsetIter+2, 1, offsetIter+3, 2);
 ФорматироватьЯчейку(objSheet, offsetIter+2, 1, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+2, 3, "БЮДЖЕТ");
 ОбъединитьЯчейкиДиапазона(objSheet, offsetIter+2, 3, offsetIter+2, 5);
 ФорматироватьЯчейку(objSheet, offsetIter+2, 3, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 3, "балансовая");
 ФорматироватьЯчейку(objSheet, offsetIter+3, 3, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 4, "амортизация");
 ФорматироватьЯчейку(objSheet, offsetIter+3, 4, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 5, "остаточная");
 ФорматироватьЯчейку(objSheet, offsetIter+3, 5, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+2, 6, "ВНЕБЮДЖЕТ");
 ОбъединитьЯчейкиДиапазона(objSheet, offsetIter+2, 6, offsetIter+2, 8);
 ФорматироватьЯчейку(objSheet, offsetIter+2, 6, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 6, "балансовая");
 ФорматироватьЯчейку(objSheet, offsetIter+3, 6, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 7, "амортизация");
 ФорматироватьЯчейку(objSheet, offsetIter+3, 7, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 8, "остаточная");
 ФорматироватьЯчейку(objSheet, offsetIter+3, 8, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+2, 9, "ИТОГО");
 ОбъединитьЯчейкиДиапазона(objSheet, offsetIter+2, 9, offsetIter+2, 11);
 ФорматироватьЯчейку(objSheet, offsetIter+2, 9, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 9, "балансовая");
 ФорматироватьЯчейку(objSheet, offsetIter+3, 9, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3,10, "амортизация");
 ФорматироватьЯчейку(objSheet, offsetIter+3,10, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3,11, "остаточная");
 ФорматироватьЯчейку(objSheet, offsetIter+3,11, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);

 УстановитьВсеГраницыДиапазонаИвнутри(objSheet, offsetIter+2, 1, offsetIter+3, 11, True, True, True, True, True, True, False, False, xlContinuous, xlThin);
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+2, 3, offsetIter+3, 5, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+2, 6, offsetIter+3, 8, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+2, 9, offsetIter+3,11, True, True, True, True, False, False, xlContinuous, xlMedium);

 -- Пишем данные таблицы
 lenШапка=3;
 num=LengthOfArray(иФКРБкод);
 for ii=1 to num do
   Iter=offsetIter+lenШапка+ii;
   ЗаписатьЯчейкуТекст(objSheet, Iter, 1, иФКРБкод[ii]);
   ОбъединитьЯчейкиДиапазона(objSheet, Iter, 1, Iter, 2);
   ФорматироватьЯчейку(objSheet, Iter, 1, xlLeft, 0, xlCenter, False, "Arial", 8, 0, True, True, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter, 3, иСЧТФбалБ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter, 3, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter, 4, иСЧТФамтБ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter, 4, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter, 5, иСЧТФостБ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter, 5, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter, 6, иСЧТФбалВ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter, 6, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter, 7, иСЧТФамтВ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter, 7, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter, 8, иСЧТФостВ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter, 8, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter, 9, иСЧТФбалИ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter, 9, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter,10, иСЧТФамтИ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter,10, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter,11, иСЧТФостИ[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter,11, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   УстановитьВсеГраницыДиапазонаИвнутри(objSheet, Iter, 1, Iter, 11, True, True, True, True, True, False, False, False, xlContinuous, xlThin);
 od;
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+lenШапка+1, 3, offsetIter+lenШапка+num, 5, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+lenШапка+1, 6, offsetIter+lenШапка+num, 8, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+lenШапка+1, 9, offsetIter+lenШапка+num,11, True, True, True, True, False, False, xlContinuous, xlMedium);
 -- Пишем итоговую строчку таблицы
 Iter=offsetIter+lenШапка+num;
 ЗаписатьЯчейкуТекст(objSheet, Iter+1, 1, "И Т О Г О :");
 ОбъединитьЯчейкиДиапазона(objSheet, Iter+1, 1, Iter+1, 2);
 ФорматироватьЯчейку(objSheet, Iter+1, 1, xlLeft, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 3, вСЧТФбалБ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 3, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 4, вСЧТФамтБ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 4, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 5, вСЧТФостБ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 5, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);

 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 6, вСЧТФбалВ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 6, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 7, вСЧТФамтВ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 7, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 8, вСЧТФостВ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 8, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);

 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 9, вСЧТФбалИ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 9, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1,10, вСЧТФамтИ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1,10, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1,11, вСЧТФостИ, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1,11, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 УстановитьВсеГраницыДиапазонаИвнутри(objSheet, Iter+1, 1, Iter+1, 11, True, True, True, True, True, False, False, False, xlContinuous, xlThin);
 УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 3, Iter+1, 5, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 6, Iter+1, 8, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 9, Iter+1,11, True, True, True, True, False, False, xlContinuous, xlMedium);

end;

Proc ЭкспортИтогТабл4(objSheet:AutoObject; locDS:String; locTS:String; offsetIter:Integer; ШиринаУжеЗадана:Logical; сНовогоЛиста:Logical);
var num, ii, Iter, lenШапка :Integer;
var Value1, Value2, Value3 :String;
var ddWork :Date;
var chislo1, chislo2 :Numeric;
 if not ШиринаУжеЗадана:
   УстановитьШиринуСтолбцаСимвол(objSheet,  1, 16);
   УстановитьШиринуСтолбцаСимвол(objSheet,  2, 10);
   УстановитьШиринуСтолбцаСимвол(objSheet,  3, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  4, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  5, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  6, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  7, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  8, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet,  9, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet, 10, 12);
   УстановитьШиринуСтолбцаСимвол(objSheet, 11, 12);
 fi;

 ddWork=if(ДАТОПЕР>1.1.100, ДАТОПЕР+1, ToDay+1);
 Try chislo1=Com_Var("ОС_РАСХ" , ddWork); Except chislo1=0.00; end;
 Try chislo2=Com_Var("ОС_100"  , ddWork); Except chislo2=0.00; end;
 if chislo1=0.00: if ddWork>=1.1.2009: chislo1= 3000.00; else chislo1= 1000.00; fi; fi;
 if chislo2=0.00: if ddWork>=1.1.2011: chislo2=40000.00; else chislo1=20000.00; fi; fi;
 Value1="НФА > " +Format("%6.0m", chislo2);
 Value2="НФА > " +Format("%6.0m", chislo1)+" и <= "+Format("%6.0m", chislo2);
 Value3="НФА <= "+Format("%6.0m", chislo1);

 -- Пишем заголовок
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+1, 1, "Итоговая таблица "+Chr(185)+"4 к ведомости остатков НФА (по типам НФА)");
 ОбъединитьЯчейкиДиапазона(objSheet, offsetIter+1, 1, offsetIter+1, 10);
 ФорматироватьЯчейку(objSheet, offsetIter+1, 1, xlLeft, 0, xlCenter, False, "Times New Roman", 11, 0, True, False, True, 0, True);
 if offsetIter>0 and сНовогоЛиста: РазрывСтраницы(objSheet, offsetIter+1); fi;

 -- Пишем заголовки столбцов таблицы
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+2, 1, "Синтетический счет");
 ОбъединитьЯчейкиДиапазона(objSheet, offsetIter+2, 1, offsetIter+3, 2);
 ФорматироватьЯчейку(objSheet, offsetIter+2, 1, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+2, 3, "БЮДЖЕТ");
 ОбъединитьЯчейкиДиапазона(objSheet, offsetIter+2, 3, offsetIter+2, 5);
 ФорматироватьЯчейку(objSheet, offsetIter+2, 3, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 3, Value1);
 ФорматироватьЯчейку(objSheet, offsetIter+3, 3, xlCenter, 0, xlCenter, True, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 4, Value2);
 ФорматироватьЯчейку(objSheet, offsetIter+3, 4, xlCenter, 0, xlCenter, True, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 5, Value3);
 ФорматироватьЯчейку(objSheet, offsetIter+3, 5, xlCenter, 0, xlCenter, True, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+2, 6, "ВНЕБЮДЖЕТ");
 ОбъединитьЯчейкиДиапазона(objSheet, offsetIter+2, 6, offsetIter+2, 8);
 ФорматироватьЯчейку(objSheet, offsetIter+2, 6, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 6, Value1);
 ФорматироватьЯчейку(objSheet, offsetIter+3, 6, xlCenter, 0, xlCenter, True, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 7, Value2);
 ФорматироватьЯчейку(objSheet, offsetIter+3, 7, xlCenter, 0, xlCenter, True, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 8, Value3);
 ФорматироватьЯчейку(objSheet, offsetIter+3, 8, xlCenter, 0, xlCenter, True, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+2, 9, "ИТОГО");
 ОбъединитьЯчейкиДиапазона(objSheet, offsetIter+2, 9, offsetIter+2, 11);
 ФорматироватьЯчейку(objSheet, offsetIter+2, 9, xlCenter, 0, xlCenter, False, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);

 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3, 9, Value1);
 ФорматироватьЯчейку(objSheet, offsetIter+3, 9, xlCenter, 0, xlCenter, True, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3,10, Value2);
 ФорматироватьЯчейку(objSheet, offsetIter+3,10, xlCenter, 0, xlCenter, True, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, offsetIter+3,11, Value3);
 ФорматироватьЯчейку(objSheet, offsetIter+3,11, xlCenter, 0, xlCenter, True, "Arial", 8, 0, True, False, False, Цвет(192, 192, 192), False);

 УстановитьВсеГраницыДиапазонаИвнутри(objSheet, offsetIter+2, 1, offsetIter+3, 11, True, True, True, True, True, True, False, False, xlContinuous, xlThin);
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+2, 3, offsetIter+3, 5, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+2, 6, offsetIter+3, 8, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+2, 9, offsetIter+3,11, True, True, True, True, False, False, xlContinuous, xlMedium);

 -- Пишем данные таблицы
 lenШапка=3;
 num=LengthOfArray(иСЧТСкод);
 for ii=1 to num do
   Iter=offsetIter+lenШапка+ii*3-2;
   ЗаписатьЯчейкуТекст(objSheet, Iter, 1, иСЧТСкод[ii]);
   ОбъединитьЯчейкиДиапазона(objSheet, Iter, 1, Iter+2, 1);
   ФорматироватьЯчейку(objSheet, Iter, 1, xlLeft, 0, xlCenter, False, "Arial", 8, 0, True, True, False, 0, True);
   --
   ЗаписатьЯчейкуТекст(objSheet, Iter+0, 2, "балансовая");
   ФорматироватьЯчейку(objSheet, Iter+0, 2, xlCenter, 0, xlCenter, False, "Times New Roman", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуТекст(objSheet, Iter+1, 2, иtxt_amt[ii]);
   ФорматироватьЯчейку(objSheet, Iter+1, 2, xlCenter, 0, xlCenter, False, "Times New Roman", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуТекст(objSheet, Iter+2, 2, иtxt_ost[ii]);
   ФорматироватьЯчейку(objSheet, Iter+2, 2, xlCenter, 0, xlCenter, False, "Times New Roman", 8, 0, True, False, False, 0, True);
   --
   ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 3, иСЧТбалГР3_Б[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+0, 3, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 3, иСЧТамтГР3_Б[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+1, 3, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 3, иСЧТостГР3_Б[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+2, 3, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 4, иСЧТбалГР2_Б[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+0, 4, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 4, иСЧТамтГР2_Б[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+1, 4, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 4, иСЧТостГР2_Б[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+2, 4, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 5, иСЧТбалГР1_Б[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+0, 5, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуТекст(objSheet, Iter+1, 5, Chr(151));
   ФорматироватьЯчейку(objSheet, Iter+1, 5, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуТекст(objSheet, Iter+2, 5, Chr(151));
   ФорматироватьЯчейку(objSheet, Iter+2, 5, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 6, иСЧТбалГР3_В[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+0, 6, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 6, иСЧТамтГР3_В[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+1, 6, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 6, иСЧТостГР3_В[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+2, 6, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 7, иСЧТбалГР2_В[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+0, 7, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 7, иСЧТамтГР2_В[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+1, 7, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 7, иСЧТостГР2_В[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+2, 7, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 8, иСЧТбалГР1_В[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+0, 8, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуТекст(objSheet, Iter+1, 8, Chr(151));
   ФорматироватьЯчейку(objSheet, Iter+1, 8, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуТекст(objSheet, Iter+2, 8, Chr(151));
   ФорматироватьЯчейку(objSheet, Iter+2, 8, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 9, иСЧТбалГР3_И[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+0, 9, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 9, иСЧТамтГР3_И[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+1, 9, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 9, иСЧТостГР3_И[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+2, 9, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   ЗаписатьЯчейкуЧисло(objSheet, Iter+0,10, иСЧТбалГР2_И[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+0,10, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+1,10, иСЧТамтГР2_И[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+1,10, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, Iter+2,10, иСЧТостГР2_И[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+2,10, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   ЗаписатьЯчейкуЧисло(objSheet, Iter+0,11, иСЧТбалГР1_И[ii], locDS, locTS);
   ФорматироватьЯчейку(objSheet, Iter+0,11, xlRight, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуТекст(objSheet, Iter+1,11, Chr(151));
   ФорматироватьЯчейку(objSheet, Iter+1,11, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуТекст(objSheet, Iter+2,11, Chr(151));
   ФорматироватьЯчейку(objSheet, Iter+2,11, xlCenter, 0, xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
          УстановитьВсеГраницыДиапазона(objSheet, Iter, 1, Iter+2, 2, True, True, True, True, False, False, xlContinuous, xlThin);
   УстановитьВсеГраницыДиапазонаИвнутри(objSheet, Iter, 3, Iter+2,11, True, True, True, True, True,  False, False, False, xlContinuous, xlThin);
 od;
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+lenШапка+1, 3, offsetIter+lenШапка+num*3, 5, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+lenШапка+1, 6, offsetIter+lenШапка+num*3, 8, True, True, True, True, False, False, xlContinuous, xlMedium);
 УстановитьВсеГраницыДиапазона(objSheet, offsetIter+lenШапка+1, 9, offsetIter+lenШапка+num*3,11, True, True, True, True, False, False, xlContinuous, xlMedium);
 -- Пишем итоговую строчку таблицы
 Iter=offsetIter+lenШапка+num*3;
 ЗаписатьЯчейкуТекст(objSheet, Iter+1, 1, "И Т О Г О :");
 ОбъединитьЯчейкиДиапазона(objSheet, Iter+1, 1, Iter+3, 1);
 ФорматироватьЯчейку(objSheet, Iter+1, 1, xlLeft, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуТекст(objSheet, Iter+1, 2, "балансовая");
 ФорматироватьЯчейку(objSheet, Iter+1, 2, xlCenter, 0, xlCenter, False, "Times New Roman", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуТекст(objSheet, Iter+2, 2, "амортизация");
 ФорматироватьЯчейку(objSheet, Iter+2, 2, xlCenter, 0, xlCenter, False, "Times New Roman", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуТекст(objSheet, Iter+3, 2, "остаточная");
 ФорматироватьЯчейку(objSheet, Iter+3, 2, xlCenter, 0, xlCenter, False, "Times New Roman", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 3, вСЧТбалГР3_Б, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 3, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 3, вСЧТамтГР3_Б, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+2, 3, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+3, 3, вСЧТостГР3_Б, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+3, 3, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 4, вСЧТбалГР2_Б, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 4, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 4, вСЧТамтГР2_Б, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+2, 4, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+3, 4, вСЧТостГР2_Б, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+3, 4, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 5, вСЧТбалГР1_Б, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 5, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуТекст(objSheet, Iter+2, 5, Chr(151));
 ФорматироватьЯчейку(objSheet, Iter+2, 5, xlCenter, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуТекст(objSheet, Iter+3, 5, Chr(151));
 ФорматироватьЯчейку(objSheet, Iter+3, 5, xlCenter, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 6, вСЧТбалГР3_В, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 6, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 6, вСЧТамтГР3_В, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+2, 6, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+3, 6, вСЧТостГР3_В, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+3, 6, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 7, вСЧТбалГР2_В, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 7, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 7, вСЧТамтГР2_В, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+2, 7, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+3, 7, вСЧТостГР2_В, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+3, 7, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 8, вСЧТбалГР1_В, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 8, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуТекст(objSheet, Iter+2, 8, Chr(151));
 ФорматироватьЯчейку(objSheet, Iter+2, 8, xlCenter, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуТекст(objSheet, Iter+3, 8, Chr(151));
 ФорматироватьЯчейку(objSheet, Iter+3, 8, xlCenter, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 9, вСЧТбалГР3_И, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1, 9, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 9, вСЧТамтГР3_И, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+2, 9, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+3, 9, вСЧТостГР3_И, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+3, 9, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1,10, вСЧТбалГР2_И, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1,10, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+2,10, вСЧТамтГР2_И, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+2,10, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, Iter+3,10, вСЧТостГР2_И, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+3,10, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 ЗаписатьЯчейкуЧисло(objSheet, Iter+1,11, вСЧТбалГР1_И, locDS, locTS);
 ФорматироватьЯчейку(objSheet, Iter+1,11, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуТекст(objSheet, Iter+2,11, Chr(151));
 ФорматироватьЯчейку(objSheet, Iter+2,11, xlCenter, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуТекст(objSheet, Iter+3,11, Chr(151));
 ФорматироватьЯчейку(objSheet, Iter+3,11, xlCenter, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
        УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 1, Iter+3, 2, True, True, True, True, False, False, xlContinuous, xlThin);
 УстановитьВсеГраницыДиапазонаИвнутри(objSheet, Iter+1, 3, Iter+3,11, True, True, True, True, True, False, False, False, xlContinuous, xlThin);
        УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 3, Iter+3, 5, True, True, True, True, False, False, xlContinuous, xlMedium);
        УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 6, Iter+3, 8, True, True, True, True, False, False, xlContinuous, xlMedium);
        УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 9, Iter+3,11, True, True, True, True, False, False, xlContinuous, xlMedium);

end;

Proc ЭкспортИтогТабл5(objSheet:AutoObject; locDS:String; locTS:String);
var numVal1, numVal2, numVal3 :Numeric;
var ii, Rows, lenШапка :Integer;
var Value :String;
 УстановитьШиринуСтолбцаСимвол(objSheet,  1,100);
 УстановитьШиринуСтолбцаСимвол(objSheet,  2, 13);
 УстановитьШиринуСтолбцаСимвол(objSheet,  3, 13);
 УстановитьШиринуСтолбцаСимвол(objSheet,  4, 13);
 -- Пишем заголовок
 ЗаписатьЯчейкуТекст(objSheet, 1, 1, "Итоговая таблица "+Chr(185)+"5 к ведомости остатков НФА (промежуточные итоги)");
 ОбъединитьЯчейкиДиапазона(objSheet, 1, 1, 1, 4);
 ФорматироватьЯчейку(objSheet, 1, 1, xlLeft, 0, xlCenter, False, "Times New Roman", 11, 0, True, False, True, 0, True);
 -- Пишем заголовки столбцов таблицы
 ЗаписатьЯчейкуТекст(objSheet, 2, 1, "Строка промежуточного итога");
 ФорматироватьЯчейку(objSheet, 2, 1, xlCenter, 0, xlCenter, True, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, 2, 2, "Сумма"+Chr(10)+"балансовая");
 ФорматироватьЯчейку(objSheet, 2, 2, xlCenter, 0, xlCenter, True, "Arial", 8, 0, True, True, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, 2, 3, "Сумма"+Chr(10)+"амортизации");
 ФорматироватьЯчейку(objSheet, 2, 3, xlCenter, 0, xlCenter, True, "Arial", 8, 0, True, True, False, Цвет(192, 192, 192), False);
 ЗаписатьЯчейкуТекст(objSheet, 2, 4, "Сумма"+Chr(10)+"остаточная");
 ФорматироватьЯчейку(objSheet, 2, 4, xlCenter, 0, xlCenter, True, "Arial", 8, 0, True, True, False, Цвет(192, 192, 192), False);
 -- Пишем данные таблицы
 lenШапка=2;
 Rows=AsInteger(СекцТ5Д.RowsCount);
 for ii=1 to Rows do
   Value=asString(СекцТ5Д.Cell(ii, 2, CellContents, ""));
   numVal1=ФорматированнаяСумма_Число(asString(СекцТ5Д.Cell(ii, 3, CellContents, "")));
   numVal2=ФорматированнаяСумма_Число(asString(СекцТ5Д.Cell(ii, 4, CellContents, "")));
   numVal3=ФорматированнаяСумма_Число(asString(СекцТ5Д.Cell(ii, 5, CellContents, "")));
   ЗаписатьЯчейкуТекст(objSheet, lenШапка+ii, 1, Value);
   ФорматироватьЯчейку(objSheet, lenШапка+ii, 1, xlLeft, 0, xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, lenШапка+ii, 2, numVal1, locDS, locTS);
   ФорматироватьЯчейку(objSheet, lenШапка+ii, 2, xlRight, 0, xlTop, True, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, lenШапка+ii, 3, numVal2, locDS, locTS);
   ФорматироватьЯчейку(objSheet, lenШапка+ii, 3, xlRight, 0, xlTop, True, "Arial", 8, 0, True, False, False, 0, True);
   ЗаписатьЯчейкуЧисло(objSheet, lenШапка+ii, 4, numVal3, locDS, locTS);
   ФорматироватьЯчейку(objSheet, lenШапка+ii, 4, xlRight, 0, xlTop, True, "Arial", 8, 0, True, False, False, 0, True);
 od;
 -- Пишем итоговую строчку таблицы
 ЗаписатьЯчейкуТекст(objSheet, lenШапка+Rows+1, 1, "И Т О Г О : ");
 ФорматироватьЯчейку(objSheet, lenШапка+Rows+1, 1, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, lenШапка+Rows+1, 2, итгСУМБАЛвед, locDS, locTS);
 ФорматироватьЯчейку(objSheet, lenШапка+Rows+1, 2, xlRight, 0, xlTop, True, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, lenШапка+Rows+1, 3, итгСУМАМТвед, locDS, locTS);
 ФорматироватьЯчейку(objSheet, lenШапка+Rows+1, 3, xlRight, 0, xlTop, True, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
 ЗаписатьЯчейкуЧисло(objSheet, lenШапка+Rows+1, 4, итгСУМОСТвед, locDS, locTS);
 ФорматироватьЯчейку(objSheet, lenШапка+Rows+1, 4, xlRight, 0, xlTop, True, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
 -- Устанавливаем границы
 УстановитьВсеГраницыДиапазонаИвнутри(objSheet, 2, 1, lenШапка+Rows+1, 4, True, True, True, True, True, True, False, False, xlContinuous, xlThin);
end;

Proc ЭкспортВедомости_Excel;
var xlsApp, xlsBooks, xlsBook, xlsSheets, xlsSheet, xlsRng :AutoObject;
var num, ii, Iter, ColorH1, ColorH2, ColorH3, ColorH4, ColorH5, maxColTable, kolSheets, useЛист :Integer;
var valNum, UserПоправкаExcel :Numeric;
var rusExcel, ШиринуЗадали :Logical;
var Value, localTS, localDS :String;
var начало :Integer;

 начало=Time;
 xlsApp=CreateAutoObject('Excel.Application');
 Try
   ShowProgress(0, "Подготовка...");
   Try
     xlsApp.EnableEvents=False;   -- отключить события
     xlsApp.AutomationSecurity=3; -- отключить макросы
     --
     rusExcel=РусскийExcel(xlsApp);
     localDS=asString(xlsApp.International[xlDecimalSeparator]);
     localTS=asString(xlsApp.International[xlThousandsSeparator]);
     --
     xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
     Try
       xlsBook=AsAutoObject(xlsBooks.Add); -- добавить книгу
       Try
         Try
           ФормированиеЦветовЗаголовков(flgСхемаЦветов);
           ColorH1=BufInt[1];
           ColorH2=BufInt[2];
           ColorH3=BufInt[3];
           ColorH4=BufInt[4];
           ColorH5=BufInt[5];
           --
           iniВнешнийВидСтолбцов(flgСЧТ, flgКБК, flgМОЛ, flgМХЭ);

           --ИмпортПроцедурыVBA(xlsApp, xlsBook);

           -- ИмпортПроцедурыVBA - для передачи в Excel внешней процедуры
           -- Для работы процедуры необходимо разрешить доступ к проекту VBA.
           -- Для этого запустите Excel и последовательно выберите в меню Сервис команды Макрос и Безопасность.
           -- В диалоговом окне Безопасность откройте вкладку Надежные источники и установите флажок "Доверять доступ к Visual Basic Project".

           useЛист=0;
           xlsSheets=AsAutoObject(xlsBook.Sheets);
           Try
             kolSheets=asInteger(xlsSheets.Count);
             if kolSheets>useЛист:
               useЛист=useЛист+1;
               xlsSheet=AsAutoObject(xlsBook.Worksheets[useЛист]);
             else
               xlsSheet=AsAutoObject(xlsSheets.Add);
             fi;
             Try
               xlsSheet.Name = "Ведомость остатков НФА";
               if ПоправкаExcel<1: ПоправкаExcel=3; fi;
               UserПоправкаExcel=ПоправкаExcel/10;

               --xlsApp.Visible=true;  -- сделать видимым Excel
               --
               -- Пишем заголовок
               ЗаписатьЯчейкуТекст(xlsSheet, 1, 1, "ВЕДОМОСТЬ ОСТАТКОВ НФА от "+DateToString(ДАТОПЕР)+" (включительно)");
               ФорматироватьЯчейку(xlsSheet, 1, 1, xlLeft, 0, xlCenter, False, "Times New Roman", 12, 0, True, True, False, 0, True);
               -- Пишем заголовки столбцов таблицы
               num=LengthOfArray(BufFlag);
               if num>0:
                 Iter=0;
                 for ii=2 to num do
                   if BufFlag[ii]:
                     Iter=Iter+1;
                     valNum=USE[ii]/10;
                     Value=asString(СекцWorkЗТ.Cell(1, ii, CellContents, ""));
                     УстановитьШиринуСтолбцаММ(xlsSheet, Iter, valNum, UserПоправкаExcel);
                     ЗаписатьЯчейкуТекст(xlsSheet, 3, Iter, ЗаменитьEnter(Value));
                     ФорматироватьЯчейку(xlsSheet, 3, Iter, xlCenter, 0, xlCenter, True, "Arial", 8, xlColorBlack, True, True, False, Цвет(192, 192, 192), False);
                     if flgСЧТ =1 and flgКБК =1:
                       if not (ii=6 or ii=7):
                         ОбъединитьЯчейкиДиапазона(xlsSheet, 3, Iter, 4, Iter);
                       else
                         if ii=6:
                           ЗаписатьЯчейкуТекст(xlsSheet, 4, Iter, "КБК");
                           ФорматироватьЯчейку(xlsSheet, 4, Iter, xlCenter, 0, xlCenter, True, "Arial", 8, xlColorBlack, True, True, False, Цвет(192, 192, 192), False);
                           ОбъединитьЯчейкиДиапазона(xlsSheet, 4, Iter, 4, Iter+1);
                           УстановитьВсеГраницыДиапазона(xlsSheet, 4, Iter, 4, Iter+1, True, True, True, True, False, False, xlContinuous, xlThin);
                         fi;
                       fi;
                     |  flgСЧТ =1 and flgКБК<>1:
                       ОбъединитьЯчейкиДиапазона(xlsSheet, 3, Iter, 4, Iter);
                     |  flgСЧТ<>1 and flgКБК =1:
                       if not ii=7:
                         ОбъединитьЯчейкиДиапазона(xlsSheet, 3, Iter, 4, Iter);
                       else
                         ЗаписатьЯчейкуТекст(xlsSheet, 4, Iter, "КБК");
                         ФорматироватьЯчейку(xlsSheet, 4, Iter, xlCenter, 0, xlCenter, True, "Arial", 8, xlColorBlack, True, True, False, Цвет(192, 192, 192), False);
                         УстановитьВсеГраницыДиапазона(xlsSheet, 4, Iter, 4, Iter, True, True, True, True, False, False, xlContinuous, xlThin);
                       fi;
                     |  flgСЧТ<>1 and flgКБК<>1:
                       ОбъединитьЯчейкиДиапазона(xlsSheet, 3, Iter, 4, Iter);
                     fi;
                     УстановитьВсеГраницыДиапазона(xlsSheet, 3, Iter, 4, Iter, True, True, True, True, False, False, xlContinuous, xlThin);
                   fi;
                 od;
                 maxColTable=Iter;
               fi;
               -- Пишем данные таблицы
               num=LengthOfArray(тSRTFLD);
               if num>0:
                 ShowProgress(num, "Экспорт в Excel ведомости остатков НФА...");
                 Iter=0;
                 for ii=1 to num do
                   ProgressPos(ii);
                   if тНФАКОД[ii]="": -- значит заголовок
                     ЭкспортСтрокиПромежуточногоИтога(xlsSheet, ii, тSRTFLD[ii], ColorH1, ColorH2, ColorH3, ColorH4, ColorH5, maxColTable, localDS, localTS);
                   else
                     Iter=Iter+1;
                     ЭкспортСтрокиДанных(xlsSheet, ii, Iter, localDS, localTS);
                   fi;
                 od;
                 -- Записываем итог таблицы
                 ЗаписатьЯчейкуТекст(xlsSheet, xlsRepШапка+num+1, 1, "И Т О Г О по ведомости: ");
                 ОбъединитьЯчейкиДиапазона(    xlsSheet, xlsRepШапка+num+1, 1, xlsRepШапка+num+1, maxColTable-3);
                 ФорматироватьЯчейку(xlsSheet, xlsRepШапка+num+1, 1, xlRight, 0, xlCenter, True, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
                 УстановитьВсеГраницыДиапазона(xlsSheet, xlsRepШапка+num+1, 1, xlsRepШапка+num+1, maxColTable-3, True, True, True, True, False, False, xlContinuous, xlThin);

                 ЗаписатьЯчейкуЧисло(xlsSheet,           xlsRepШапка+num+1, maxColTable-2, итгСУМБАЛвед, localDS, localTS);
                 ФорматироватьЯчейку(xlsSheet,           xlsRepШапка+num+1, maxColTable-2, xlRight, 0, xlCenter, True, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
                 УстановитьВсеГраницыДиапазона(xlsSheet, xlsRepШапка+num+1, maxColTable-2, xlsRepШапка+num+1, maxColTable-2, True, True, True, True, False, False, xlContinuous, xlThin);

                 ЗаписатьЯчейкуЧисло(xlsSheet,           xlsRepШапка+num+1, maxColTable-1, итгСУМАМТвед, localDS, localTS);
                 ФорматироватьЯчейку(xlsSheet,           xlsRepШапка+num+1, maxColTable-1, xlRight, 0, xlCenter, True, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
                 УстановитьВсеГраницыДиапазона(xlsSheet, xlsRepШапка+num+1, maxColTable-1, xlsRepШапка+num+1, maxColTable-1, True, True, True, True, False, False, xlContinuous, xlThin);

                 ЗаписатьЯчейкуЧисло(xlsSheet,           xlsRepШапка+num+1, maxColTable-0, итгСУМОСТвед, localDS, localTS);
                 ФорматироватьЯчейку(xlsSheet,           xlsRepШапка+num+1, maxColTable-0, xlRight, 0, xlCenter, True, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
                 УстановитьВсеГраницыДиапазона(xlsSheet, xlsRepШапка+num+1, maxColTable-0, xlsRepШапка+num+1, maxColTable-0, True, True, True, True, False, False, xlContinuous, xlThin);
                 -- Выравнивание строк (на всякий случай)
                 xlsRng=AsAutoObject(xlsSheet.Rows[Str(xlsRepШапка+1)+":"+Str(xlsRepШапка+num+2)]);
                 Try
                   xlsRng.AutoFit;
                 Finally
                   ClearVariable(xlsRng);
                 end;
                 -- Настройки принтера
                 ShowProgress(1, "Настраиваем печать...");
                 УстановитьНастройкиПринтера(xlsApp, xlsSheet, rusExcel, flgПечСлужИнф, False);
               fi;
               --
             Finally
               ClearVariable(xlsSheet);
             end;
             -- Конец экспорта ведомости
             ShowProgress(8, "Экспорт в Excel итоговых таблиц...");
             if flgПечИтгТаб1 and LengthOfArray(иСЧТСкод)>0:
               -- Экспорт итоговой таблицы 1
               if kolSheets>useЛист:
                 useЛист=useЛист+1;
                 xlsSheet=AsAutoObject(xlsBook.Worksheets[useЛист]);
               else
                 xlsSheet=AsAutoObject(xlsSheets.Add);
               fi;
               Try
                 ProgressPos(1);
                 xlsSheet.Name = "Итог1";
                 ЭкспортИтогТабл1(xlsSheet, localDS, localTS);
                 УстановитьНастройкиПринтера(xlsApp, xlsSheet, rusExcel, flgПечСлужИнф, True);
               Finally
                 ClearVariable(xlsSheet);
               end;
             fi;
             if (flgПечИтгТаб2 and LengthOfArray(иСЧТБкод)>0) or (flgПечИтгТаб3 and LengthOfArray(иФКРБкод)>0) or (flgПечИтгТаб4 and LengthOfArray(иСЧТСкод)>0):
               -- Экспорт итоговой таблицы 2-3-4
               if kolSheets>useЛист:
                 useЛист=useЛист+1;
                 xlsSheet=AsAutoObject(xlsBook.Worksheets[useЛист]);
               else
                 xlsSheet=AsAutoObject(xlsSheets.Add);
               fi;
               Try
                 if     flgПечИтгТаб2 and     flgПечИтгТаб3 and     flgПечИтгТаб4: xlsSheet.Name = "Итог2-3-4";
                 |      flgПечИтгТаб2 and     flgПечИтгТаб3 and not flgПечИтгТаб4: xlsSheet.Name = "Итог2-3";
                 |      flgПечИтгТаб2 and not flgПечИтгТаб3 and     flgПечИтгТаб4: xlsSheet.Name = "Итог2-4";
                 |  not flgПечИтгТаб2 and     flgПечИтгТаб3 and     flgПечИтгТаб4: xlsSheet.Name = "Итог3-4";
                 |      flgПечИтгТаб2 and not flgПечИтгТаб3 and not flgПечИтгТаб4: xlsSheet.Name = "Итог2";
                 |  not flgПечИтгТаб2 and     flgПечИтгТаб3 and not flgПечИтгТаб4: xlsSheet.Name = "Итог3";
                 |  not flgПечИтгТаб2 and not flgПечИтгТаб3 and     flgПечИтгТаб4: xlsSheet.Name = "Итог4";
                 fi;
                 Iter=0;
                 ШиринуЗадали=False;
                 ProgressPos(2);
                 num=LengthOfArray(иСЧТБкод);
                 if flgПечИтгТаб2 and num>0: ЭкспортИтогТабл2(xlsSheet, localDS, localTS, Iter, ШиринуЗадали, flgПечНовСтр); ШиринуЗадали=True; Iter=Iter+num+5; fi;
                 ProgressPos(3);
                 num=LengthOfArray(иФКРБкод);
                 if flgПечИтгТаб3 and num>0: ЭкспортИтогТабл3(xlsSheet, localDS, localTS, Iter, ШиринуЗадали, flgПечНовСтр); ШиринуЗадали=True; Iter=Iter+num+5; fi;
                 ProgressPos(4);
                 num=LengthOfArray(иСЧТСкод);
                 if flgПечИтгТаб4 and num>0: ЭкспортИтогТабл4(xlsSheet, localDS, localTS, Iter, ШиринуЗадали, flgПечНовСтр); ШиринуЗадали=True; Iter=Iter+num+5; fi;
                 ProgressPos(5);
                 УстановитьНастройкиПринтера(xlsApp, xlsSheet, rusExcel, flgПечСлужИнф, True);
               Finally
                 ClearVariable(xlsSheet);
               end;
             fi;
             if flgПечИтгТаб5 and СтрокиТ5>0:
               -- Экспорт итоговой таблицы 5
               if kolSheets>useЛист:
                 useЛист=useЛист+1;
                 xlsSheet=AsAutoObject(xlsBook.Worksheets[useЛист]);
               else
                 xlsSheet=AsAutoObject(xlsSheets.Add);
               fi;
               Try
                 ProgressPos(6);
                 xlsSheet.Name = "Итог5";
                 ЭкспортИтогТабл5(xlsSheet, localDS, localTS);
                 ProgressPos(7);
                 УстановитьНастройкиПринтера(xlsApp, xlsSheet, rusExcel, flgПечСлужИнф, True);
               Finally
                 ClearVariable(xlsSheet);
               end;
             fi;
             ProgressPos(8);
             -- КОНЕЦ ЭКСПОРТА
             xlsApp.Visible=True;  -- сделать видимым Excel
           Finally
             ClearVariable(xlsSheets);
           end;
         Except
           xlsBook.Close(False); -- закрыть книгу без сохранения
         end;
       Finally
         --xlsBook.Close(False); -- закрыть книгу без сохранения
         --xlsBook.Close; --xlsBook.Close(true, sXLSFile); -- закрыть книгу
         ClearVariable(xlsBook); -- освободить объект книги
       end;
     Finally
       ClearVariable(xlsBooks); -- освободить объект книг
     end;
   Finally
     ClearVariable(xlsApp); -- освободить объект Excel
     CloseProgress;
   end;
 Except
   ClearVariable(xlsRng);
   ClearVariable(xlsSheet);
   ClearVariable(xlsSheets);
   ClearVariable(xlsBook);
   ClearVariable(xlsBooks);
   ClearVariable(xlsApp);
 end;
 ClearVariable(xlsRng);
 ClearVariable(xlsSheet);
 ClearVariable(xlsSheets);
 ClearVariable(xlsBook);
 ClearVariable(xlsBooks);
 ClearVariable(xlsApp);
 Message("Экспорт завершен!^MВремя работы - "+TimeToHMSstring(Time-начало), mtInformation);
end;

Proc ЭкспортВедомости_Excel_Save;
var xlsApp, xlsBooks, xlsBook, xlsSheets, xlsSheet, xlsRng :AutoObject;
var начало, num, ii, IterCount, maxIterCount, IterSave, Iter, ColorH1, ColorH2, ColorH3, ColorH4, ColorH5, maxColTable, kolSheets, useЛист, lenШапка :Integer;
var valNum, UserПоправкаExcel, numVal1, numVal2, numVal3 :Numeric;
var Value, localTS, localDS, xlNameFile, xlNameFolder, ExcelVersion :String;
var rusExcel, ШиринуЗадали, ExportWork, NoError :Logical;
 начало=Time;
 xlNameFile="ExportExcel_"+Format("%.4d", Year(ToDay))+Format("%.2d", Mon(ToDay))+Format("%.2d", Day(ToDay))+"_"+TimeToHMSstring_adv(Time, "")+".xls";
 maxIterCount=200;
 if ChooseFolder(xlNameFolder, "Выберите папку для сохранения файла экспорта...")=cmOK:
   xlNameFile=xlNameFolder+xlNameFile;
   NoError=True;
   xlsApp=CreateAutoObject('Excel.Application');
   Try
     ExcelVersion=asString(xlsApp.Version);
     if Int(ExcelVersion)>=12 or ExcelVersion="12.0": xlNameFile=xlNameFile+"x"; fi;
     if ExistFile(xlNameFile): Try DeleteFile(xlNameFile); Except Raise; end; fi;
     ShowProgress(0, "Подготовка...");
     Try
       xlsApp.EnableEvents=False;   -- отключить события
       xlsApp.AutomationSecurity=3; -- отключить макросы
       --
       rusExcel=РусскийExcel(xlsApp);
       localDS=asString(xlsApp.International[xlDecimalSeparator]);
       localTS=asString(xlsApp.International[xlThousandsSeparator]);
       --
       xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
       Try
         xlsBook=AsAutoObject(xlsBooks.Add); -- добавить книгу
         Try
           Try
             ФормированиеЦветовЗаголовков(flgСхемаЦветов);
             ColorH1=BufInt[1];
             ColorH2=BufInt[2];
             ColorH3=BufInt[3];
             ColorH4=BufInt[4];
             ColorH5=BufInt[5];
             --
             iniВнешнийВидСтолбцов(flgСЧТ, flgКБК, flgМОЛ, flgМХЭ);

             --ИмпортПроцедурыVBA(xlsApp, xlsBook);

             -- ИмпортПроцедурыVBA - для передачи в Excel внешней процедуры
             -- Для работы процедуры необходимо разрешить доступ к проекту VBA.
             -- Для этого запустите Excel и последовательно выберите в меню Сервис команды Макрос и Безопасность.
             -- В диалоговом окне Безопасность откройте вкладку Надежные источники и установите флажок "Доверять доступ к Visual Basic Project".

             useЛист=0;
             xlsSheets=AsAutoObject(xlsBook.Sheets);
             Try
               kolSheets=asInteger(xlsSheets.Count);
               if kolSheets>useЛист:
                 useЛист=useЛист+1;
                 xlsSheet=AsAutoObject(xlsBook.Worksheets[useЛист]);
               else
                 xlsSheet=AsAutoObject(xlsSheets.Add);
               fi;
               Try
                 xlsSheet.Name = "Ведомость остатков НФА";
                 if ПоправкаExcel<1: ПоправкаExcel=3; fi;
                 UserПоправкаExcel=ПоправкаExcel/10;
                 -- Пишем заголовок
                 ЗаписатьЯчейкуТекст(xlsSheet, 1, 1, "ВЕДОМОСТЬ ОСТАТКОВ НФА от "+DateToString(ДАТОПЕР)+" (включительно)");
                 ФорматироватьЯчейку(xlsSheet, 1, 1, xlLeft, 0, xlCenter, False, "Times New Roman", 12, 0, True, True, False, 0, True);
                 -- Пишем заголовки столбцов таблицы
                 num=LengthOfArray(BufFlag);
                 if num>0:
                   Iter=0;
                   for ii=2 to num do
                     if BufFlag[ii]:
                       Iter=Iter+1;
                       valNum=USE[ii]/10;
                       Value=asString(СекцWorkЗТ.Cell(1, ii, CellContents, ""));
                       УстановитьШиринуСтолбцаММ(xlsSheet, Iter, valNum, UserПоправкаExcel);
                       ЗаписатьЯчейкуТекст(xlsSheet, 3, Iter, ЗаменитьEnter(Value));
                       ФорматироватьЯчейку(xlsSheet, 3, Iter, xlCenter, 0, xlCenter, True, "Arial", 8, xlColorBlack, True, True, False, Цвет(192, 192, 192), False);
                       if flgСЧТ =1 and flgКБК =1:
                         if not (ii=6 or ii=7):
                           ОбъединитьЯчейкиДиапазона(xlsSheet, 3, Iter, 4, Iter);
                         else
                           if ii=6:
                             ЗаписатьЯчейкуТекст(xlsSheet, 4, Iter, "КБК");
                             ФорматироватьЯчейку(xlsSheet, 4, Iter, xlCenter, 0, xlCenter, True, "Arial", 8, xlColorBlack, True, True, False, Цвет(192, 192, 192), False);
                             ОбъединитьЯчейкиДиапазона(xlsSheet, 4, Iter, 4, Iter+1);
                             УстановитьВсеГраницыДиапазона(xlsSheet, 4, Iter, 4, Iter+1, True, True, True, True, False, False, xlContinuous, xlThin);
                           fi;
                         fi;
                       |  flgСЧТ =1 and flgКБК<>1:
                         ОбъединитьЯчейкиДиапазона(xlsSheet, 3, Iter, 4, Iter);
                       |  flgСЧТ<>1 and flgКБК =1:
                         if not ii=7:
                           ОбъединитьЯчейкиДиапазона(xlsSheet, 3, Iter, 4, Iter);
                         else
                           ЗаписатьЯчейкуТекст(xlsSheet, 4, Iter, "КБК");
                           ФорматироватьЯчейку(xlsSheet, 4, Iter, xlCenter, 0, xlCenter, True, "Arial", 8, xlColorBlack, True, True, False, Цвет(192, 192, 192), False);
                           УстановитьВсеГраницыДиапазона(xlsSheet, 4, Iter, 4, Iter, True, True, True, True, False, False, xlContinuous, xlThin);
                         fi;
                       |  flgСЧТ<>1 and flgКБК<>1:
                         ОбъединитьЯчейкиДиапазона(xlsSheet, 3, Iter, 4, Iter);
                       fi;
                       УстановитьВсеГраницыДиапазона(xlsSheet, 3, Iter, 4, Iter, True, True, True, True, False, False, xlContinuous, xlThin);
                     fi;
                   od;
                   maxColTable=Iter;
                 fi;
                 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;
   -- Пишем данные таблицы
   num=LengthOfArray(тSRTFLD);
   if num>0 and NoError:
     ShowProgress(num, "Экспорт в Excel ведомости остатков НФА...");
     Try
       Iter=0;
       IterCount=0;
       IterSave=1;
       ExportWork=True;
       while ExportWork do
         if NoError:
           xlsApp=CreateAutoObject('Excel.Application');
           Try
             Try
               xlsApp.EnableEvents=False;   -- отключить события
               xlsApp.AutomationSecurity=3; -- отключить макросы
               xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
               Try
                 xlsBook=AsAutoObject(xlsBooks.Open(xlNameFile));
                 Try
                   Try
                     xlsSheet=AsAutoObject(xlsBook.Worksheets["Ведомость остатков НФА"]);
                     Try
                       for ii=IterSave to num do
                         ProgressPos(ii);
                         if тНФАКОД[ii]="": -- значит заголовок
                           ЭкспортСтрокиПромежуточногоИтога(xlsSheet, ii, тSRTFLD[ii], ColorH1, ColorH2, ColorH3, ColorH4, ColorH5, maxColTable, localDS, localTS);
                         else
                           Iter=Iter+1;
                           ЭкспортСтрокиДанных(xlsSheet, ii, Iter, localDS, localTS);
                         fi;
                         IterCount=IterCount+1;
                         if IterCount>=maxIterCount: IterSave=IterSave+IterCount; IterCount=0; Break; fi;
                       od;
                       NoError=True;
                     Finally
                       ClearVariable(xlsSheet);
                     end;
                   Except
                     NoError=False;
                     ExportWork=False;
                     xlsBook.Close(False); -- закрыть книгу без сохранения
                   end;
                 Finally
                   --xlsBook.Close(True, xlNameFile);
                   xlsBook.Save;
                   xlsBook.Close(False); -- закрыть книгу без сохранения
                   ClearVariable(xlsBook); -- освободить объект книги
                 end;
               Finally
                 ClearVariable(xlsBooks); -- освободить объект книг
               end;
             Finally
               ClearVariable(xlsApp); -- освободить объект Excel
             end;
           Except
             NoError=False;
             ExportWork=False;
             ClearVariable(xlsRng);
             ClearVariable(xlsSheet);
             ClearVariable(xlsSheets);
             ClearVariable(xlsBook);
             ClearVariable(xlsBooks);
             ClearVariable(xlsApp);
           end;
           if ii>=num: ExportWork=False; fi;
         else
           ExportWork=False;
         fi;
       od; -- while
     Finally
       CloseProgress;
     end;
     -- Записываем итог таблицы
     if NoError:
       xlsApp=CreateAutoObject('Excel.Application');
       Try
         ShowProgress(num, "Экспорт в Excel ведомости остатков НФА...");
         Try
           xlsApp.EnableEvents=False;   -- отключить события
           xlsApp.AutomationSecurity=3; -- отключить макросы
           xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
           Try
             xlsBook=AsAutoObject(xlsBooks.Open(xlNameFile));
             Try
               Try
                 xlsSheet=AsAutoObject(xlsBook.Worksheets["Ведомость остатков НФА"]);
                 Try
                   ЗаписатьЯчейкуТекст(xlsSheet, xlsRepШапка+num+1, 1, "И Т О Г О по ведомости: ");
                   ОбъединитьЯчейкиДиапазона(    xlsSheet, xlsRepШапка+num+1, 1, xlsRepШапка+num+1, maxColTable-3);
                   ФорматироватьЯчейку(xlsSheet, xlsRepШапка+num+1, 1, xlRight, 0, xlCenter, True, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
                   УстановитьВсеГраницыДиапазона(xlsSheet, xlsRepШапка+num+1, 1, xlsRepШапка+num+1, maxColTable-3, True, True, True, True, False, False, xlContinuous, xlThin);

                   ЗаписатьЯчейкуЧисло(xlsSheet,           xlsRepШапка+num+1, maxColTable-2, итгСУМБАЛвед, localDS, localTS);
                   ФорматироватьЯчейку(xlsSheet,           xlsRepШапка+num+1, maxColTable-2, xlRight, 0, xlCenter, True, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
                   УстановитьВсеГраницыДиапазона(xlsSheet, xlsRepШапка+num+1, maxColTable-2, xlsRepШапка+num+1, maxColTable-2, True, True, True, True, False, False, xlContinuous, xlThin);

                   ЗаписатьЯчейкуЧисло(xlsSheet,           xlsRepШапка+num+1, maxColTable-1, итгСУМАМТвед, localDS, localTS);
                   ФорматироватьЯчейку(xlsSheet,           xlsRepШапка+num+1, maxColTable-1, xlRight, 0, xlCenter, True, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
                   УстановитьВсеГраницыДиапазона(xlsSheet, xlsRepШапка+num+1, maxColTable-1, xlsRepШапка+num+1, maxColTable-1, True, True, True, True, False, False, xlContinuous, xlThin);

                   ЗаписатьЯчейкуЧисло(xlsSheet,           xlsRepШапка+num+1, maxColTable-0, итгСУМОСТвед, localDS, localTS);
                   ФорматироватьЯчейку(xlsSheet,           xlsRepШапка+num+1, maxColTable-0, xlRight, 0, xlCenter, True, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
                   УстановитьВсеГраницыДиапазона(xlsSheet, xlsRepШапка+num+1, maxColTable-0, xlsRepШапка+num+1, maxColTable-0, True, True, True, True, False, False, xlContinuous, xlThin);
                   -- Выравнивание строк (на всякий случай)
                   xlsRng=AsAutoObject(xlsSheet.Rows[Str(xlsRepШапка+1)+":"+Str(xlsRepШапка+num+2)]);
                   Try
                     xlsRng.AutoFit;
                   Finally
                     ClearVariable(xlsRng);
                   end;
                   -- Настройки принтера
                   ShowProgress(1, "Настраиваем печать...");
                   УстановитьНастройкиПринтера(xlsApp, xlsSheet, rusExcel, flgПечСлужИнф, False);
                   NoError=True;
                 Finally
                   ClearVariable(xlsSheet);
                 end;
               Except
                 NoError=False;
                 xlsBook.Close(False); -- закрыть книгу без сохранения
               end;
             Finally
               --xlsBook.Close(True, xlNameFile);
               xlsBook.Save;
               xlsBook.Close(False); -- закрыть книгу без сохранения
               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;
   fi; -- num>0
   --
   -- Конец экспорта ведомости
   ShowProgress(8, "Экспорт в Excel итоговых таблиц...");
   Try
     if NoError and flgПечИтгТаб1 and LengthOfArray(иСЧТСкод)>0:
       -- Экспорт итоговой таблицы 1
       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
                 xlsSheets=AsAutoObject(xlsBook.Sheets);
                 Try
                   if kolSheets>useЛист:
                     useЛист=useЛист+1;
                     xlsSheet=AsAutoObject(xlsBook.Worksheets[useЛист]);
                   else
                     xlsSheet=AsAutoObject(xlsSheets.Add);
                   fi;
                   Try
                     ProgressPos(1);
                     xlsSheet.Name = "Итог1";
                     ЭкспортИтогТабл1(xlsSheet, localDS, localTS);
                     УстановитьНастройкиПринтера(xlsApp, xlsSheet, rusExcel, flgПечСлужИнф, True);
                     NoError=True;
                   Finally
                     ClearVariable(xlsSheet);
                   end;
                 Finally
                   ClearVariable(xlsSheets);
                 end;
               Except
                 NoError=False;
                 xlsBook.Close(False); -- закрыть книгу без сохранения
               end;
             Finally
               --xlsBook.Close(True, xlNameFile);
               xlsBook.Save;
               xlsBook.Close(False); -- закрыть книгу без сохранения
               ClearVariable(xlsBook); -- освободить объект книги
             end;
           Finally
             ClearVariable(xlsBooks); -- освободить объект книг
           end;
         Finally
           ClearVariable(xlsApp); -- освободить объект Excel
         end;
       Except
         NoError=False;
         ClearVariable(xlsRng);
         ClearVariable(xlsSheet);
         ClearVariable(xlsSheets);
         ClearVariable(xlsBook);
         ClearVariable(xlsBooks);
         ClearVariable(xlsApp);
       end;
     fi;
     if NoError:
       if (flgПечИтгТаб2 and LengthOfArray(иСЧТБкод)>0) or (flgПечИтгТаб3 and LengthOfArray(иФКРБкод)>0) or (flgПечИтгТаб4 and LengthOfArray(иСЧТСкод)>0):
         -- Экспорт итоговой таблицы 2-3-4
         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
                   xlsSheets=AsAutoObject(xlsBook.Sheets);
                   Try
                     if kolSheets>useЛист:
                       useЛист=useЛист+1;
                       xlsSheet=AsAutoObject(xlsBook.Worksheets[useЛист]);
                     else
                       xlsSheet=AsAutoObject(xlsSheets.Add);
                     fi;
                     Try
                       if     flgПечИтгТаб2 and     flgПечИтгТаб3 and     flgПечИтгТаб4: xlsSheet.Name = "Итог2-3-4";
                       |      flgПечИтгТаб2 and     flgПечИтгТаб3 and not flgПечИтгТаб4: xlsSheet.Name = "Итог2-3";
                       |      flgПечИтгТаб2 and not flgПечИтгТаб3 and     flgПечИтгТаб4: xlsSheet.Name = "Итог2-4";
                       |  not flgПечИтгТаб2 and     flgПечИтгТаб3 and     flgПечИтгТаб4: xlsSheet.Name = "Итог3-4";
                       |      flgПечИтгТаб2 and not flgПечИтгТаб3 and not flgПечИтгТаб4: xlsSheet.Name = "Итог2";
                       |  not flgПечИтгТаб2 and     flgПечИтгТаб3 and not flgПечИтгТаб4: xlsSheet.Name = "Итог3";
                       |  not flgПечИтгТаб2 and not flgПечИтгТаб3 and     flgПечИтгТаб4: xlsSheet.Name = "Итог4";
                       fi;
                       Iter=0;
                       ШиринуЗадали=False;
                       ProgressPos(2);
                       num=LengthOfArray(иСЧТБкод);
                       if flgПечИтгТаб2 and num>0: ЭкспортИтогТабл2(xlsSheet, localDS, localTS, Iter, ШиринуЗадали, flgПечНовСтр); ШиринуЗадали=True; Iter=Iter+num+5; fi;
                       ProgressPos(3);
                       num=LengthOfArray(иФКРБкод);
                       if flgПечИтгТаб3 and num>0: ЭкспортИтогТабл3(xlsSheet, localDS, localTS, Iter, ШиринуЗадали, flgПечНовСтр); ШиринуЗадали=True; Iter=Iter+num+5; fi;
                       ProgressPos(4);
                       num=LengthOfArray(иСЧТСкод);
                       if flgПечИтгТаб4 and num>0: ЭкспортИтогТабл4(xlsSheet, localDS, localTS, Iter, ШиринуЗадали, flgПечНовСтр); ШиринуЗадали=True; Iter=Iter+num+5; fi;
                       ProgressPos(5);
                       УстановитьНастройкиПринтера(xlsApp, xlsSheet, rusExcel, flgПечСлужИнф, True);
                       NoError=True;
                     Finally
                       ClearVariable(xlsSheet);
                     end;
                   Finally
                     ClearVariable(xlsSheets);
                   end;
                 Except
                   NoError=False;
                   xlsBook.Close(False); -- закрыть книгу без сохранения
                 end;
               Finally
                 --xlsBook.Close(True, xlNameFile);
                 xlsBook.Save;
                 xlsBook.Close(False); -- закрыть книгу без сохранения
                 ClearVariable(xlsBook); -- освободить объект книги
               end;
             Finally
               ClearVariable(xlsBooks); -- освободить объект книг
             end;
           Finally
             ClearVariable(xlsApp); -- освободить объект Excel
           end;
         Except
           NoError=False;
           ClearVariable(xlsRng);
           ClearVariable(xlsSheet);
           ClearVariable(xlsSheets);
           ClearVariable(xlsBook);
           ClearVariable(xlsBooks);
           ClearVariable(xlsApp);
         end;
       fi;
     fi;
     if NoError and flgПечИтгТаб5 and СтрокиТ5>0:
       -- Экспорт итоговой таблицы 5
       lenШапка=2;
       num=AsInteger(СекцТ5Д.RowsCount);
       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
                 xlsSheets=AsAutoObject(xlsBook.Sheets);
                 Try
                   if kolSheets>useЛист:
                     useЛист=useЛист+1;
                     xlsSheet=AsAutoObject(xlsBook.Worksheets[useЛист]);
                   else
                     xlsSheet=AsAutoObject(xlsSheets.Add);
                   fi;
                   Try
                     ProgressPos(6);
                     xlsSheet.Name = "Итог5";
                     --
                     УстановитьШиринуСтолбцаСимвол(xlsSheet,  1, 100);
                     УстановитьШиринуСтолбцаСимвол(xlsSheet,  2,  13);
                     УстановитьШиринуСтолбцаСимвол(xlsSheet,  3,  13);
                     УстановитьШиринуСтолбцаСимвол(xlsSheet,  4,  13);
                     -- Пишем заголовок
                     ЗаписатьЯчейкуТекст(xlsSheet, 1, 1, "Итоговая таблица "+Chr(185)+"5 к ведомости остатков НФА (промежуточные итоги)");
                     ОбъединитьЯчейкиДиапазона(xlsSheet, 1, 1, 1, 4);
                     ФорматироватьЯчейку(xlsSheet, 1, 1, xlLeft, 0, xlCenter, False, "Times New Roman", 11, 0, True, False, True, 0, True);
                     -- Пишем заголовки столбцов таблицы
                     ЗаписатьЯчейкуТекст(xlsSheet, 2, 1, "Строка промежуточного итога");
                     ФорматироватьЯчейку(xlsSheet, 2, 1, xlCenter, 0, xlCenter, True, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);
                     ЗаписатьЯчейкуТекст(xlsSheet, 2, 2, "Сумма"+Chr(10)+"балансовая");
                     ФорматироватьЯчейку(xlsSheet, 2, 2, xlCenter, 0, xlCenter, True, "Arial", 8, 0, True, True, False, Цвет(192, 192, 192), False);
                     ЗаписатьЯчейкуТекст(xlsSheet, 2, 3, "Сумма"+Chr(10)+"амортизации");
                     ФорматироватьЯчейку(xlsSheet, 2, 3, xlCenter, 0, xlCenter, True, "Arial", 8, 0, True, True, False, Цвет(192, 192, 192), False);
                     ЗаписатьЯчейкуТекст(xlsSheet, 2, 4, "Сумма"+Chr(10)+"остаточная");
                     ФорматироватьЯчейку(xlsSheet, 2, 4, xlCenter, 0, xlCenter, True, "Arial", 8, 0, True, True, False, Цвет(192, 192, 192), False);
                     ProgressPos(7);
                     УстановитьНастройкиПринтера(xlsApp, xlsSheet, rusExcel, flgПечСлужИнф, True);
                     NoError=True;
                     ProgressPos(8);
                   Finally
                     ClearVariable(xlsSheet);
                   end;
                 Finally
                   ClearVariable(xlsSheets);
                 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;
       if NoError:
         ShowProgress(num, "Экспорт в Excel таблицы промежуточных итогов...");
         Iter=0;
         IterCount=0;
         IterSave=1;
         ExportWork=True;
         while ExportWork do
           if NoError:
             xlsApp=CreateAutoObject('Excel.Application');
             Try
               Try
                 xlsApp.EnableEvents=False;   -- отключить события
                 xlsApp.AutomationSecurity=3; -- отключить макросы
                 xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
                 Try
                   xlsBook=AsAutoObject(xlsBooks.Open(xlNameFile));
                   Try
                     Try
                       xlsSheet=AsAutoObject(xlsBook.Worksheets["Итог5"]);
                       Try
                         for ii=IterSave to num do
                           ProgressPos(ii);
                           Value=asString(СекцТ5Д.Cell(ii, 2, CellContents, ""));
                           numVal1=ФорматированнаяСумма_Число(asString(СекцТ5Д.Cell(ii, 3, CellContents, "")));
                           numVal2=ФорматированнаяСумма_Число(asString(СекцТ5Д.Cell(ii, 4, CellContents, "")));
                           numVal3=ФорматированнаяСумма_Число(asString(СекцТ5Д.Cell(ii, 5, CellContents, "")));
                           --
                           ЗаписатьЯчейкуТекст(xlsSheet, lenШапка+ii, 1, Value);
                           ФорматироватьЯчейку(xlsSheet, lenШапка+ii, 1, xlLeft, 0, xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
                           ЗаписатьЯчейкуЧисло(xlsSheet, lenШапка+ii, 2, numVal1, localDS, localTS);
                           ФорматироватьЯчейку(xlsSheet, lenШапка+ii, 2, xlRight, 0, xlTop, True, "Arial", 8, 0, True, False, False, 0, True);
                           ЗаписатьЯчейкуЧисло(xlsSheet, lenШапка+ii, 3, numVal2, localDS, localTS);
                           ФорматироватьЯчейку(xlsSheet, lenШапка+ii, 3, xlRight, 0, xlTop, True, "Arial", 8, 0, True, False, False, 0, True);
                           ЗаписатьЯчейкуЧисло(xlsSheet, lenШапка+ii, 4, numVal3, localDS, localTS);
                           ФорматироватьЯчейку(xlsSheet, lenШапка+ii, 4, xlRight, 0, xlTop, True, "Arial", 8, 0, True, False, False, 0, True);
                           --
                           IterCount=IterCount+1;
                           if IterCount>=maxIterCount: IterSave=IterSave+IterCount; IterCount=0; Break; fi;
                         od;
                         NoError=True;
                         -- Пишем итоговую строчку таблицы
                         ЗаписатьЯчейкуТекст(xlsSheet, lenШапка+num+1, 1, "И Т О Г О : ");
                         ФорматироватьЯчейку(xlsSheet, lenШапка+num+1, 1, xlRight, 0, xlCenter, False, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
                         ЗаписатьЯчейкуЧисло(xlsSheet, lenШапка+num+1, 2, итгСУМБАЛвед, localDS, localTS);
                         ФорматироватьЯчейку(xlsSheet, lenШапка+num+1, 2, xlRight, 0, xlTop, True, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
                         ЗаписатьЯчейкуЧисло(xlsSheet, lenШапка+num+1, 3, итгСУМАМТвед, localDS, localTS);
                         ФорматироватьЯчейку(xlsSheet, lenШапка+num+1, 3, xlRight, 0, xlTop, True, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
                         ЗаписатьЯчейкуЧисло(xlsSheet, lenШапка+num+1, 4, итгСУМОСТвед, localDS, localTS);
                         ФорматироватьЯчейку(xlsSheet, lenШапка+num+1, 4, xlRight, 0, xlTop, True, "Arial", 8, xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
                         -- Устанавливаем границы
                         УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, 2, 1, lenШапка+num+1, 4, True, True, True, True, True, True, False, False, xlContinuous, xlThin);
                       Finally
                         ClearVariable(xlsSheet);
                       end;
                     Except
                       NoError=False;
                       ExportWork=False;
                       xlsBook.Close(False); -- закрыть книгу без сохранения
                     end;
                   Finally
                     xlsBook.Save;
                     xlsBook.Close(False); -- закрыть книгу без сохранения
                     ClearVariable(xlsBook); -- освободить объект книги
                   end;
                 Finally
                   ClearVariable(xlsBooks); -- освободить объект книг
                 end;
               Finally
                 ClearVariable(xlsApp); -- освободить объект Excel
               end;
             Except
               NoError=False;
               ExportWork=False;
               ClearVariable(xlsRng);
               ClearVariable(xlsSheet);
               ClearVariable(xlsSheets);
               ClearVariable(xlsBook);
               ClearVariable(xlsBooks);
               ClearVariable(xlsApp);
             end;
             if ii>=num: ExportWork=False; fi;
           else
             ExportWork=False;
           fi;
         od; -- while
       fi;
     fi;
     ShowProgress(0, "Экспорт. Заключительные действия...");
     -- КОНЕЦ ЭКСПОРТА
     if NoError:
       xlsApp=CreateAutoObject('Excel.Application');
       Try
         Try
           xlsApp.EnableEvents=False;   -- отключить события
           xlsApp.AutomationSecurity=3; -- отключить макросы
           xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
           Try
             xlsBook=AsAutoObject(xlsBooks.Open(xlNameFile));
             Try
               xlsApp.Visible=True;  -- сделать видимым Excel
               NoError=True;
             Finally
               xlsBook.Save;
               ClearVariable(xlsBook); -- освободить объект книги
             end;
           Finally
             ClearVariable(xlsBooks); -- освободить объект книг
           end;
         Finally
           ClearVariable(xlsApp); -- освободить объект Excel
         end;
       Except
         NoError=False;
         ClearVariable(xlsRng);
         ClearVariable(xlsSheet);
         ClearVariable(xlsSheets);
         ClearVariable(xlsBook);
         ClearVariable(xlsBooks);
         ClearVariable(xlsApp);
       end;
     fi;
   Finally
     CloseProgress;
   end;
 fi;
 ClearVariable(xlsRng);
 ClearVariable(xlsSheet);
 ClearVariable(xlsSheets);
 ClearVariable(xlsBook);
 ClearVariable(xlsBooks);
 ClearVariable(xlsApp);
 Message("Экспорт завершен!^MВремя работы - "+TimeToHMSstring(Time-начало), mtInformation);
end;

Proc ИзменитьПорядокГрупп(иерархValue:String);
var prevValue :String;
 prevValue=иерархValue;
 ПорядокГрупп_ПоменятьМестамиМеню;
 if prevValue<>Иерархия: if ОтменитьИзмененияУсловийОтчета: Иерархия=prevValue; fi; fi;
 ПорядокГрупп_ПеречитатьГруппы;
end;

2-- События клеток
Func Field_onEnter(Field:String; Iter:Integer): Logical; -- на входе в клетку
 if Template_OnClear: ^False; fi;
 Flag_onEnter=False;
 if Field="ДАТОПЕР":       oldDate=ДАТОПЕР;
 |  Field="flgСЧТ_":       ФлагиПараметровГруппировки(Field, False); ^False;
 |  Field="flgКБК_":       ФлагиПараметровГруппировки(Field, False); ^False;
 |  Field="flgМОЛ_":       ФлагиПараметровГруппировки(Field, False); ^False;
 |  Field="flgМХЭ_":       ФлагиПараметровГруппировки(Field, False); ^False;
 |  Field="flgГРП_":       ФлагиПараметровГруппировки(Field, False); ^False;
 |  Field="ИзмГрп_":       ИзменитьПорядокГрупп(Иерархия); ^False;
 |  Field="отчСЧТ_":       Счета_ВыборВидаНФАonEnter(curAcc); ^False;
 |  Field="отчКБК_":       КБК_ВыбратьФильтрКБК(False); ^False;
 |  Field="отчМОЛ_":       if flgВыборМОЛ: Аналитика_ВыбратьФильтрАналитики(Field, False); else МОЛ_ВыборМОЛ(flgИстФинcur, отчСЧТ, отчКБК, if(curБЗС=1 or curБЗС=2, True, False), if(curБЗС=1 or curБЗС=3, True, False), if(flgФтрАнаcur=1, True, False), False); fi; ^False;
 |  Field="отчМХЭ_":       if flgВыборМОЛ: Аналитика_ВыбратьФильтрАналитики(Field, False); else МХЭ_ВыборМХЭ(flgИстФинcur, отчСЧТ, отчКБК, if(curБЗС=1 or curБЗС=2, True, False), if(curБЗС=1 or curБЗС=3, True, False), if(flgФтрАнаcur=1, True, False), False); fi; ^False;
 |  Field="отчГРП_":       ГруппыНФА_ВыбратьФильтрГруппыНФА(False); ^False;
 |  Field="ДОП_VOCКОД_"    : ВыборДопСправочника(False); ^False;
 |  Field="ДОП_АНАКОД_"    : ВыборДопПризнака(ДОП_VOCКОД, flgИстФинcur, отчСЧТ, отчКБК, if(curБЗС=1 or curБЗС=2, True, False), if(curБЗС=1 or curБЗС=3, True, False), False); ^False;
 |  Field="fldСОРТимя_"    : ВыбратьUserПолеСортировки; ^False;
 |  Field="flgПечСлужИнф"  : flgПечСлужИнф = not flgПечСлужИнф; SetFLGСлужИнф; ^False;
 |  Field="flgВыводИспол"  : flgВыводИспол = not flgВыводИспол; ^False;
 |  Field="flgПровПрив"    : flgПровПрив   = not flgПровПрив;   ^False;
 |  Field="flgПечИтгТаб1"  : flgПечИтгТаб1 = not flgПечИтгТаб1; ПечатьИтоговыхТаблиц(flgПечИтгТаб1, flgПечИтгТаб2, flgПечИтгТаб3, flgПечИтгТаб4, flgПечИтгТаб5, flgОтделТабл, flgПечНовСтр); ^False;
 |  Field="flgПечИтгТаб2"  : flgПечИтгТаб2 = not flgПечИтгТаб2; ПечатьИтоговыхТаблиц(flgПечИтгТаб1, flgПечИтгТаб2, flgПечИтгТаб3, flgПечИтгТаб4, flgПечИтгТаб5, flgОтделТабл, flgПечНовСтр); ^False;
 |  Field="flgПечИтгТаб3"  : flgПечИтгТаб3 = not flgПечИтгТаб3; ПечатьИтоговыхТаблиц(flgПечИтгТаб1, flgПечИтгТаб2, flgПечИтгТаб3, flgПечИтгТаб4, flgПечИтгТаб5, flgОтделТабл, flgПечНовСтр); ^False;
 |  Field="flgПечИтгТаб4"  : flgПечИтгТаб4 = not flgПечИтгТаб4; ПечатьИтоговыхТаблиц(flgПечИтгТаб1, flgПечИтгТаб2, flgПечИтгТаб3, flgПечИтгТаб4, flgПечИтгТаб5, flgОтделТабл, flgПечНовСтр); ^False;
 |  Field="flgПечИтгТаб5"  : flgПечИтгТаб5 = not flgПечИтгТаб5; ПечатьИтоговыхТаблиц(flgПечИтгТаб1, flgПечИтгТаб2, flgПечИтгТаб3, flgПечИтгТаб4, flgПечИтгТаб5, flgОтделТабл, flgПечНовСтр); ^False;
 |  Field="flgОтделТабл"   : flgОтделТабл  = not flgОтделТабл;  ПечатьИтоговыхТаблиц(flgПечИтгТаб1, flgПечИтгТаб2, flgПечИтгТаб3, flgПечИтгТаб4, flgПечИтгТаб5, flgОтделТабл, flgПечНовСтр); ^False;
 |  Field="flgПечНовСтр"   : flgПечНовСтр  = not flgПечНовСтр ; ПечатьИтоговыхТаблиц(flgПечИтгТаб1, flgПечИтгТаб2, flgПечИтгТаб3, flgПечИтгТаб4, flgПечИтгТаб5, flgОтделТабл, flgПечНовСтр); ^False;
 |  Field="flgСхемаЦветов" : flgСхемаЦветов = ВыбратьСхемуЦветовИерархическихЗаголовков(flgСхемаЦветов); ПрименитьЦвета; ^False;
 |  Field="ПоправкаExcel_" : ПоправкаExcel  = ВыбратьПоправкуExcel(ПоправкаExcel); ^False;
 |  Field="flgSaveExport"  : flgSaveExport = not flgSaveExport; ^False;
 |  Field="flgВыборМОЛ"    : flgВыборМОЛ   = not flgВыборМОЛ;   ^False;
 |  Field="flgРежимСохр_"  : flgРежимСохр  = ВыбратьРежимСохранения(flgРежимСохр); ^False;
 |  Field="flgТолькоИнв"   : flgТолькоИнв  = not flgТолькоИнв;  ^False;
 |  Field="flgТолькоНмн"   : flgТолькоНмн  = not flgТолькоНмн;  ^False;
 |  Field="flgXLSнетЕИ"    : flgXLSнетЕИ   = not flgXLSнетЕИ;   ^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="flgСЧТ_": ФлагиПараметровГруппировки(Field, True);
 |  Field="flgКБК_": ФлагиПараметровГруппировки(Field, True);
 |  Field="flgМОЛ_": ФлагиПараметровГруппировки(Field, True);
 |  Field="flgМХЭ_": ФлагиПараметровГруппировки(Field, True);
 |  Field="flgГРП_": ФлагиПараметровГруппировки(Field, True);
 |  Field="отчКБК_": КБК_ВыбратьФильтрКБК(True);
 |  Field="отчМОЛ_": if flgВыборМОЛ: Аналитика_ВыбратьФильтрАналитики(Field, True); else МОЛ_ВыборМОЛ(flgИстФинcur, отчСЧТ, отчКБК, if(curБЗС=1 or curБЗС=2, True, False), if(curБЗС=1 or curБЗС=3, True, False), if(flgФтрАнаcur=1, True, False), True); fi;
 |  Field="отчМХЭ_": if flgВыборМОЛ: Аналитика_ВыбратьФильтрАналитики(Field, True); else МХЭ_ВыборМХЭ(flgИстФинcur, отчСЧТ, отчКБК, if(curБЗС=1 or curБЗС=2, True, False), if(curБЗС=1 or curБЗС=3, True, False), if(flgФтрАнаcur=1, True, False), True); fi;
 |  Field="отчГРП_": ГруппыНФА_ВыбратьФильтрГруппыНФА(True);
 |  Field="ДОП_VOCКОД_"    : ВыборДопСправочника(True);
 |  Field="ДОП_АНАКОД_"    : ВыборДопПризнака(ДОП_VOCКОД, flgИстФинcur, отчСЧТ, отчКБК, if(curБЗС=1 or curБЗС=2, True, False), if(curБЗС=1 or curБЗС=3, True, False), True);
 |  Field="flgПечИтгТаб1"  : ПечатьИтоговыхТаблиц(flgПечИтгТаб1, flgПечИтгТаб2, flgПечИтгТаб3, flgПечИтгТаб4, flgПечИтгТаб5, flgОтделТабл, flgПечНовСтр);
 |  Field="flgПечИтгТаб2"  : ПечатьИтоговыхТаблиц(flgПечИтгТаб1, flgПечИтгТаб2, flgПечИтгТаб3, flgПечИтгТаб4, flgПечИтгТаб5, flgОтделТабл, flgПечНовСтр);
 |  Field="flgПечИтгТаб3"  : ПечатьИтоговыхТаблиц(flgПечИтгТаб1, flgПечИтгТаб2, flgПечИтгТаб3, flgПечИтгТаб4, flgПечИтгТаб5, flgОтделТабл, flgПечНовСтр);
 |  Field="flgПечИтгТаб4"  : ПечатьИтоговыхТаблиц(flgПечИтгТаб1, flgПечИтгТаб2, flgПечИтгТаб3, flgПечИтгТаб4, flgПечИтгТаб5, flgОтделТабл, flgПечНовСтр);
 |  Field="flgПечИтгТаб5"  : ПечатьИтоговыхТаблиц(flgПечИтгТаб1, flgПечИтгТаб2, flgПечИтгТаб3, flgПечИтгТаб4, flgПечИтгТаб5, flgОтделТабл, flgПечНовСтр);
 |  Field="flgОтделТабл"   : ПечатьИтоговыхТаблиц(flgПечИтгТаб1, flgПечИтгТаб2, flgПечИтгТаб3, flgПечИтгТаб4, flgПечИтгТаб5, flgОтделТабл, flgПечНовСтр);
 |  Field="flgПечНовСтр"   : ПечатьИтоговыхТаблиц(flgПечИтгТаб1, flgПечИтгТаб2, flgПечИтгТаб3, flgПечИтгТаб4, flgПечИтгТаб5, flgОтделТабл, flgПечНовСтр);
 |  Field="flgСхемаЦветов" : if flgСхемаЦветов<1: ПрименитьЦвета; fi;
 |  Field="ИспФИО" : if ИспФИО="": ИспДол=""; ИспREC=NIL; fi;
 fi;
 ValidateОтчетSection;
 Flag_onEnter=False;
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:
   if ОтменитьИзмененияУсловийОтчета: dd=ddSave; fi;
   ValidateОтчетSection;
 fi;
 SetDate(dd);
 ^"";
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="ИСПДОЛ": ИСПФИО=СТРФИО; ИСПДОЛ=СТРДОЛ;
 fi;
 ^"";
end;

Proc btnOnClick(Sender:String); -- объекты при нажатии
 if Sender="btnClose"  : Close;
 |  Sender="btnРасчет" : РасчетСпискаНФА;
 |  Sender="btnExcel"  : if flgSaveExport: ЭкспортВедомости_Excel_Save; else ЭкспортВедомости_Excel; fi;
 fi;
end;

2-- События шаблона
Proc Template_OnOpen(Create:Logical); -- при открытии шаблона
 РАБ.НАСТР_ПЕЧАТЬ.Cfg(PlanVar("НФА")+"\Настройки\", "ТББ_STD_Album10_num_000.cfg"); -- стандартная настройка !(возможно надо будет заменить)
end;

Proc Template_AfterOpen(Create:Logical); -- после открытия шаблона
var num :Integer;
 Очистить;
 if Позиции>0:
    num=EnqOkCancel("Обнаружены данные предыдущего расчета!^MСформировать ведомость?", mtConfirmation);
    if num=cmOk:  ПостроениеОтчета; else ОчисткаОтчета; fi;
 else
    ОчисткаОтчета;
 fi;
 Инициализация;
 flgНстрВнВидОтч=False;
 flgClear=GetGuid;
 Template.Field="Фокус";
end;

Proc Template_OnClose(Destroy:Logical); -- при закрытии шаблона
var num :Integer;
 Очистить;
 flgClear="";
 if flgРежимСохр=1:
   if Позиции>0:
      num=Enquiry("Выберите действие...", "Очистить ведомость (быстрее будет открываться бланк)^Mили сохранить данные для дальнейшего просмотра?", "Очистить;Сохранить", mtConfirmation);
      if num=1: ОчисткаОтчета; fi;
   fi;
 |  flgРежимСохр>1: ОчисткаОтчета;
 fi;
end;

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