БЛАНКСШАБЛОНОМ "Ведомость остатков ОС";
-- Разработка бланка: ТБ.БЮДЖЕТ
-- Первый релиз: 31.12.2010
-- Константы
var MaskUserVoc  :String="ВД.*|ВКЛ.*|КТ.*|П.*|ПБС.*|ПГР.*|РБС.*";
var btnName_menu :String='Ведомость остатков ОС';
var Sort_menu    :String='07';
var infoVersion  :String="Версия отчета: 1.14.0415";
var crdГРП       :String="РПО_ОКЕИ_ГРУППЫ";
var pfxУЧН       :String="УЧН";
var pfxЗАВ       :String="ЗН";
var Фокус        :String="";
-- Объекты
Bevel1 :Object; btnClose  :Object; rbtAccВсе:Object;  rbtФинВсе :Object; cb_НФАамт :Object; cb_НстрВнВидОтч :Object;
Bevel2 :Object; btnРасчет :Object; rbtAccБал:Object;  rbtФинБдж :Object; cb_НФА100 :Object; cb_СкрытьПарОтч :Object;
Bevel3 :Object; btnExcel  :Object; rbtAccЗаб:Object;  rbtФинДхд :Object; cb_НФАбез :Object; lblVersion      :Object;
--
СекцТ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;

СекцТитул1 :Object;
СекцТитул2 :Object;
СекцТитул3 :Object;
Секц_Шапка :Object;
Секц_ВнВид :Object;
СекцДопСпр :Object;
Секц_Групп :Object;
Секц_Услов :Object;
Секц_ЦенБМ :Object;
Секц_UСорт :Object;
Секц_Одата :Object;

СекцArrayНФА :Object;
СекцArrayМОЛ :Object;
СекцArrayМХЭ :Object;
СекцArrayДОП :Object;

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

Позиции          :Integer;  -- строки ведомости
ПозицииArrayНФА  :Integer;  -- строки вспомогательного массива
ПозицииArrayМОЛ  :Integer;  -- строки вспомогательного массива
ПозицииArrayМХЭ  :Integer;  -- строки вспомогательного массива
ПозицииArrayДОП  :Integer;  -- строки вспомогательного массива

СтрокиТ1Т4       :Integer;  -- строки итоговых таблиц
СтрокиТ2         :Integer;  -- строки итоговых таблиц
СтрокиТ3         :Integer;  -- строки итоговых таблиц
СтрокиТ5         :Integer;  -- строки итоговых таблиц

СтрокиArrayНФА   :Integer;  -- сортировка вспомогательного массива (СекцArrayНФА)
СтрокиArrayМОЛ   :Integer;  -- сортировка вспомогательного массива (СекцArrayМОЛ)
СтрокиArrayМХЭ   :Integer;  -- сортировка вспомогательного массива (СекцArrayМХЭ)
СтрокиArrayДОП   :Integer;  -- сортировка вспомогательного массива (СекцArrayДОП)

TimeCreationRep  :String;
СлужИнфоСЧТ      :String;
СлужИнфоАНА      :String;
СлужИнфоГРП      :String;

var ИзмГрп       :String;
var ИзмГрп_      :String=ИзмГрп;

var Flag_onEnter :Logical;
flgClear         :String;   -- контроль очистки бланков
fldСОРТкод       :String;   -- поле сортировки
fldСОРТимя       :String;   -- расшифровка поля сортировки
fldСОРТимя_      :String=fldСОРТимя;

flgСЧТ:Logical;   var flgСЧТ_:Logical=flgСЧТ;
flgКБК:Logical;   var flgКБК_:Logical=flgКБК;
flgИСТ:Logical;   var flgИСТ_:Logical=flgИСТ;
flgМОЛ:Logical;   var flgМОЛ_:Logical=flgМОЛ;
flgМХЭ:Logical;   var flgМХЭ_:Logical=flgМХЭ;
flgГРП:Logical;   var flgГРП_:Logical=flgГРП;
flgДОП:Logical;   var flgДОП_:Logical=flgДОП;
flgНФА:Logical;   var flgНФА_:Logical=flgНФА;

VOCКОД      :String;          -- Дополнительный справочник
VOCИМЯ      :String;
var VOCКОД_ :String=VOCКОД;

отчСЧТ      :String;          -- Фильтр по счету
отчКБК      :String;          -- Фильтр по КБК
valКБК      :String;          -- Фильтр по КБК (полное значение - для возвратов в меню)
отчМОЛ      :String;          -- Фильтр по МОЛ
nmsМОЛ      :String;          -- Ф.И.О. МОЛ
отчМХЭ      :String;          -- Фильтр по местонахождению
nmsМХЭ      :String;          -- Наименование местонахождения
keyГРП      :String;          -- Фильтр по группам НФА (ссылка на значение)
отчГРП      :String;          -- Фильтр по группам НФА (код аналитики)
nmsГРП      :String;          -- Наименование групп НФА
отчДОП      :String;          -- Фильтр по дополнителньому справочнику
nmsДОП      :String;          -- Наименование признака из дополнительного справочника
отчНФА      :String;          -- Фильтр по справочнику НФА
nmsНФА      :String;          -- Наименование признака НФА
--
ОтчАНА           :String;     -- Фильтр по дополнительной аналитике
var OldОтчАНА    :String;     -- Для запоминания и возвратов (дополнительная аналитика)
var LastGRP_num  :Integer;
var LastGRP_key  :String=["{0}"];

useЦеныЕЦ        :Logical=[False];
var useЦеныЕЦ_   :Logical=useЦеныЕЦ;
flgSgnЕЦ         :Integer;
var flgSgnЕЦ_    :Integer=flgSgnЕЦ;
БМЦеныЕЦот       :Numeric;
БМЦеныЕЦдо       :Numeric;
var OldЦенаОт    :Numeric;    -- Для запоминания и возвратов
var OldЦенаДо    :Numeric;    -- Для запоминания и возвратов

var отчСЧТ_ :String=отчСЧТ;
var отчКБК_ :String=отчКБК;
var отчМОЛ_ :String=отчМОЛ;
var отчМХЭ_ :String=отчМХЭ;
var отчГРП_ :String=отчГРП;
var отчДОП_ :String=отчДОП;
var отчНФА_ :String=отчНФА;

ДатОпер          :Date;2 0    -- дата отчета
var ДатОпер_     :Date=ДатОпер;
var oldDate      :Date;     -- для запоминания и возвратов
ДатИсп           :Date;
УЧР_ИМЯ          :String;
УЧР_ОКПО         :String;
УЧР_REC          :Record;
ПОД_ИМЯ          :String;
ПОД_КОД          :String;
ИспДол           :String;
ИспФИО           :String;
ИспREC           :Record;

var flgСкрытьПарОтч  :Logical;
var flgНстрВнВидОтч  :Logical;

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=[True];
flgСлужИнф       :Logical=[True];
intСхемаЦветов   :Integer=[1];

flgТолькоИнв     :Logical=[False];
flgТолькоНмн     :Logical=[False];
flgXLSнетЕИ      :Logical=[False];
flgSaveExport    :Logical=[False];
flgЧиститьАна    :Logical=[True];

intРежимСохр     :Integer;
intРежимСохр_    :Integer=intРежимСохр;

flgСложнДаты     :Logical=[False];
flgЗавНомЗаб     :Logical=[False];

flgВыдСчтНФА     :Logical=[False];

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

currИст          :Integer=[1];
var oldsИст      :Integer;
currAcc          :Integer=[1];
var oldsAcc      :Integer;

var xlsRepШапка  :Integer=if(flgПечСлужИнф, 12, 9); -- строк до таблицы при экспорте в Excel

var arr_REFНФА[] :String;
var arr_КОДНФА[] :String;
var arr_REFМОЛ[] :String;
var arr_КОДМОЛ[] :String;
var arr_REFМХЭ[] :String;
var arr_КОДМХЭ[] :String;
var arr_REFДОП[] :String;
var arr_КОДДОП[] :String;
var aHdrFldSRT[] :String;
var aUsrFldSRT[] :String;

var LST_UNIQUE[] :String;
var LST_OSTСУМ[] :Numeric;
var LST_OSTКОЛ[] :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_ИМЯДОП[] :String;  -- расшифровка дополнительного справочника
var LST_НЕТУЧН[] :Logical; -- без инвентарного номера
var LST_ЮЗРСРТ[] :String;  -- значение пользовательской сортировки

-- Основная ведомость
тНФАКОД[]    :String;   -- НФА (код)
тНФАИМЯ[]    :String;   -- НФА (наименование)
тНФАЕДИ[]    :String;   -- НФА (единица измерения)
тНФАГРК[]    :String;   -- пользовательская группа НФА (код)
тНФАГРИ[]    :String;   -- пользовательская группа НФА (наименование - расшифровка кода)
тНФАУЧН[]    :String;   -- учетный номер
тНФАИНВ[]    :String;   -- инвентарный номер
тНФАЗВД[]    :String;   -- заводской номер
тМОЛКОД[]    :String;   -- МОЛ (код)
тМОЛИМЯ[]    :String;   -- МОЛ (Ф.И.О.)
тМХЭКОД[]    :String;   -- местонахождение (код)
тМХЭИМЯ[]    :String;   -- местонахождение (расшифровка кода)
тДОПКОД[]    :String;   -- дополнительный справочник (код)
тДОПИМЯ[]    :String;   -- дополнительный справочник (расшифровка кода)
тНФАИСТ[]    :String;   -- вид финансового обеспечения (источник финансирования)
тНФАКБК[]    :String;   -- КБК
тНФАСЧ6[]    :String;   -- синтетический счет
тКОЛНФА[]    :Numeric;  -- количество
тСУМБАЛ[]    :Numeric;  -- сумма балансовая
тСУМАМТ[]    :Numeric;  -- сумма амортизации
тСУМОСТ[]    :Numeric;  -- сумма остаточная
тSRTFLD[]    :String;   -- вспомогательное поле для сортировки
тНФАОКФ[]    :String;   -- группа ОКОФ ОС
тДАТПРН[]    :String;   -- дата принятия ОС к учету
тДАТЭКС[]    :String;   -- дата ввода ОС в эксплуатацию
тДАТКОН[]    :String;   -- дата завершения эксплуатации ОС
тСРКПЛЗ[]    :String;   -- дата принятия ОС к учету
тСРКФКТ[]    :String;   -- дата ввода ОС в эксплуатацию
тСРКОСТ[]    :String;   -- дата завершения эксплуатации ОС
тМЕСНРМ[]    :String;   -- мес. норма аморт (%)
тНФАТИП[]    :String;   -- тип НФА (для отбора по типам НФА)
тНЕТАМТ[]    :Logical;  -- нет амортизации

флагиACC         :String;  -- для фильтра по счетам
Иерархия         :String;  -- строка формирования порядка полей иерархической группировки

count_arrНФА     :Integer;
count_arrМОЛ     :Integer;
count_arrМХЭ     :Integer;
count_arrДОП     :Integer;

-- Массивы
var Buf[]        :String;
var Txt[]        :String;
var aAna[]       :String;
var BufInt[]     :Integer;
var BufMsk[]     :String;
var BufStr[]     :String;
var KeyMsk[]     :String;
var KeyStr[]     :String;
var BufFlag[]    :Logical;
var иррхГРП[]    :String;  -- группы для возможного создания иерархии отчета
var иррхUSE[]    :Logical; -- вид отчета группы для возможного создания иерархии отчета (False - без вывода; True - иерархично)
var bindVOC[]    :String;  -- Привязанный справочник
var bindINT[]    :Integer; -- Количество привязок

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

итгСУМКОЛвед :Numeric;
итгСУМБАЛвед :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;

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

Proc ОчиститьВспомМассив;
 ClearVariable(arr_REFНФА);
 ClearVariable(arr_КОДНФА);
 ClearVariable(arr_REFМОЛ);
 ClearVariable(arr_КОДМОЛ);
 ClearVariable(arr_REFМХЭ);
 ClearVariable(arr_КОДМХЭ);
 ClearVariable(arr_REFДОП);
 ClearVariable(arr_КОДДОП);
 ClearVariable(aHdrFldSRT);
 ClearVariable(aUsrFldSRT);
 count_arrНФА=0; count_arrМОЛ=0; count_arrМХЭ=0; count_arrДОП=0;
end;

Proc ОчиститьLST;
 ClearVariable(LST_UNIQUE);
 ClearVariable(LST_OSTСУМ);
 ClearVariable(LST_OSTКОЛ);
 ClearVariable(LST_КОДИСТ);
 ClearVariable(LST_КОДКБК);
 ClearVariable(LST_КОДСЧ6);
 ClearVariable(LST_ИМЯНФА);
 ClearVariable(LST_ИМЯИНВ);
 ClearVariable(LST_ИМЯЗАВ);
 ClearVariable(LST_ИМЯМОЛ);
 ClearVariable(LST_ИМЯМХЭ);
 ClearVariable(LST_ИМЯДОП);
 ClearVariable(LST_НЕТУЧН);
 ClearVariable(LST_ЮЗРСРТ);
end;

Proc Очистить;
 ClearVariable(Buf);
 ClearVariable(Txt);
 ClearVariable(aAna);
 ClearVariable(BufInt);
 ClearVariable(BufMsk);
 ClearVariable(BufStr);
 ClearVariable(KeyMsk);
 ClearVariable(KeyStr);
 ClearVariable(BufFlag);
 --
 ClearVariable(иррхГРП);
 ClearVariable(иррхUSE);
 --
 ClearVariable(bindVOC);
 ClearVariable(bindINT);
 --
 ОчиститьВспомМассив;
 ОчиститьLST;
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(тНФАСЧ6);
 ClearVariable(тКОЛНФА);
 ClearVariable(тСУМБАЛ);
 ClearVariable(тСУМАМТ);
 ClearVariable(тСУМОСТ);
 ClearVariable(тSRTFLD);
 ClearVariable(тНФАОКФ);
 ClearVariable(тДАТПРН);
 ClearVariable(тДАТЭКС);
 ClearVariable(тДАТКОН);
 ClearVariable(тСРКПЛЗ);
 ClearVariable(тСРКФКТ);
 ClearVariable(тСРКОСТ);
 ClearVariable(тМЕСНРМ);
 ClearVariable(тНФАТИП);
 ClearVariable(тНЕТАМТ);
 ОчиститьОформление;
end;

Proc SetFLGСлужИнф(ЭтоНастройка:Logical);
 if flgПечСлужИнф and (СлужИнфоСЧТ<>"" or СлужИнфоАНА<>"" or СлужИнфоГРП<>"") and not ЭтоНастройка: flgСлужИнф=True; else flgСлужИнф=False; fi;
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 ValidateВедомостьSection(СкрытьТаблицу:Logical);
var F1 :Logical;
 F1=if(Позиции>0 and not СкрытьТаблицу, True, False);
 СекцWorkЗТ.Visible=F1;
 СекцWorkДТ.Visible=F1;
 СекцWorkИТ.Visible=F1;
 СекцТитул1.Visible=F1;
 СекцТитул2.Visible=F1;
 СекцТитул3.Visible=F1;
   btnExcel.Enabled=F1;
   btnExcel.Visible= not СкрытьТаблицу;
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);
 ValidateВедомостьSection(ЭтоНастройка);
 ValidateИтогиSection(ЭтоНастройка);
end;

Proc ОчисткаОтчета;
 Очистить;
 ОчиститьТаблицу;
 ОчиститьИтоги;
 ValidateОтчетSection(False);
 TimeCreationRep="";
 СлужИнфоСЧТ="";
 СлужИнфоАНА="";
 СлужИнфоГРП="";
 SetFLGСлужИнф(False);
end;

Proc ValidateSection(СкрытьУсловия:Logical; ЭтоНастройка:Logical);
var Flag, fINI :Logical;

 ShowProgress(1, "Работаем...");
 Try
   Flag = not СкрытьУсловия;
   fINI = if(СкрытьУсловия and ЭтоНастройка, True, False);
   --
   if ЭтоНастройка:
     cb_СкрытьПарОтч.Visible=Flag;
   else
     if not Flag: flgНстрВнВидОтч=False; cb_НстрВнВидОтч.State=False; fi;
     cb_НстрВнВидОтч.Visible=Flag;
   fi;
   --
   Секц_Шапка.Visible=Flag;
   СекцДопСпр.Visible=Flag;
   Секц_Групп.Visible=Flag;
   Секц_Услов.Visible=Flag;
   Секц_ЦенБМ.Visible=Flag;
   Секц_UСорт.Visible=Flag;
   Секц_Одата.Visible=Flag;
   --
   btnРасчет.Visible=Flag;
   --
   rbtAccВсе.Visible=Flag; rbtФинВсе.Visible=Flag; cb_НФАамт.Visible=Flag;
   rbtAccБал.Visible=Flag; rbtФинБдж.Visible=Flag; cb_НФА100.Visible=Flag;
   rbtAccЗаб.Visible=Flag; rbtФинДхд.Visible=Flag; cb_НФАбез.Visible=Flag;
   --
   Bevel1.Visible=Flag;
   Bevel2.Visible=Flag;
   Bevel3.Visible=Flag;
   --
   ValidateОтчетSection(fINI);
   SetFLGСлужИнф(fINI);
   --
 Finally
   CloseProgress;
 end;
end;

Proc ОчиститьУсловияОтбора(МожноСчт:Logical; МожноГрп:Logical; МожноАна:Logical);
 if МожноСчт:
   отчКБК=""; valКБК="";
 fi;
 if МожноГрп:
   keyГРП=""; отчГРП=""; nmsГРП=""; LastGRP_key="{0}"; LastGRP_num=0; ОчиститьГРПНФА;
 fi;
 if МожноАна:
   отчМОЛ=""; nmsМОЛ="";
   отчМХЭ=""; nmsМХЭ="";
   отчДОП=""; nmsДОП="";
   отчНФА=""; nmsНФА="";
 fi;
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 ВыборДаты(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=Up(AsString(Template.Field));
 if name="ДатОпер": ^ДатОпер;
 |  name="ДатИсп" : ^ДатИсп;
 fi;
end;

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

Proc ФормированиеЦветовЗаголовков(СхемаЦвета:Integer);
var ColorH1, ColorH2, ColorH3, ColorH4, ColorH5, ColorH6, ColorH7, ColorH8 :Integer;
 ClearVariable(BufInt);
 ColorH1=0; ColorH5=0;
 ColorH2=0; ColorH6=0;
 ColorH3=0; ColorH7=0;
 ColorH4=0; ColorH8=0;
 if СхемаЦвета=0: --Стартовый цвет: 'Светло-коричневый'
   ColorH1=Цвет(255, 204, 153);
   ColorH2=Цвет(255, 255, 153);
   ColorH3=Цвет(204, 255, 204);
   ColorH4=Цвет(153, 204, 255);
   ColorH5=Цвет(204, 255, 255);
   ColorH6=Цвет(255, 153, 204);
   ColorH7=Цвет(204, 153, 255);
   ColorH8=Цвет(230, 230, 230);
 |  СхемаЦвета=1: --Стартовый цвет: 'Светло-желтый'
   ColorH1=Цвет(255, 255, 153);
   ColorH2=Цвет(204, 255, 204);
   ColorH3=Цвет(153, 204, 255);
   ColorH4=Цвет(204, 255, 255);
   ColorH5=Цвет(255, 153, 204);
   ColorH6=Цвет(204, 153, 255);
   ColorH7=Цвет(230, 230, 230);
   ColorH8=Цвет(255, 204, 153);
 |  СхемаЦвета=2: --Стартовый цвет: 'Бледно-зеленый'
   ColorH1=Цвет(204, 255, 204);
   ColorH2=Цвет(153, 204, 255);
   ColorH3=Цвет(204, 255, 255);
   ColorH4=Цвет(255, 153, 204);
   ColorH5=Цвет(204, 153, 255);
   ColorH6=Цвет(230, 230, 230);
   ColorH7=Цвет(255, 204, 153);
   ColorH8=Цвет(255, 255, 153);
 |  СхемаЦвета=3: --Стартовый цвет: 'Бледно-голубой'
   ColorH1=Цвет(153, 204, 255);
   ColorH2=Цвет(204, 255, 255);
   ColorH3=Цвет(255, 153, 204);
   ColorH4=Цвет(204, 153, 255);
   ColorH5=Цвет(230, 230, 230);
   ColorH6=Цвет(255, 204, 153);
   ColorH7=Цвет(255, 255, 153);
   ColorH8=Цвет(204, 255, 204);
 |  СхемаЦвета=4: --Стартовый цвет: 'Светло-бирюзовый'
   ColorH1=Цвет(204, 255, 255);
   ColorH2=Цвет(255, 153, 204);
   ColorH3=Цвет(204, 153, 255);
   ColorH4=Цвет(230, 230, 230);
   ColorH5=Цвет(255, 204, 153);
   ColorH6=Цвет(255, 255, 153);
   ColorH7=Цвет(204, 255, 204);
   ColorH8=Цвет(153, 204, 255);
 |  СхемаЦвета=5: --Стартовый цвет: 'Розовый'
   ColorH1=Цвет(255, 153, 204);
   ColorH2=Цвет(204, 153, 255);
   ColorH3=Цвет(230, 230, 230);
   ColorH4=Цвет(255, 204, 153);
   ColorH5=Цвет(255, 255, 153);
   ColorH6=Цвет(204, 255, 204);
   ColorH7=Цвет(153, 204, 255);
   ColorH8=Цвет(204, 255, 255);
 |  СхемаЦвета=6: --Стартовый цвет: 'Сиреневый'
   ColorH1=Цвет(204, 153, 255);
   ColorH2=Цвет(230, 230, 230);
   ColorH3=Цвет(255, 204, 153);
   ColorH4=Цвет(255, 255, 153);
   ColorH5=Цвет(204, 255, 204);
   ColorH6=Цвет(153, 204, 255);
   ColorH7=Цвет(204, 255, 255);
   ColorH8=Цвет(255, 153, 204);
 |  СхемаЦвета=7: --Стартовый цвет: 'Бледно-серый'
   ColorH1=Цвет(230, 230, 230);
   ColorH2=Цвет(255, 204, 153);
   ColorH3=Цвет(255, 255, 153);
   ColorH4=Цвет(204, 255, 204);
   ColorH5=Цвет(153, 204, 255);
   ColorH6=Цвет(204, 255, 255);
   ColorH7=Цвет(255, 153, 204);
   ColorH8=Цвет(204, 153, 255);
 fi;
 BufInt[1]=ColorH1;
 BufInt[2]=ColorH2;
 BufInt[3]=ColorH3;
 BufInt[4]=ColorH4;
 BufInt[5]=ColorH5;
 BufInt[6]=ColorH6;
 BufInt[7]=ColorH7;
 BufInt[8]=ColorH8;
end;

Proc ПрименитьЦвета;
var ColorH1, ColorH2, ColorH3, ColorH4, ColorH5, ColorH6, ColorH7, ColorH8 :Integer;
 ФормированиеЦветовЗаголовков(intСхемаЦветов);
 ColorH1=BufInt[1];
 ColorH2=BufInt[2];
 ColorH3=BufInt[3];
 ColorH4=BufInt[4];
 ColorH5=BufInt[5];
 ColorH6=BufInt[6];
 ColorH7=BufInt[7];
 ColorH8=BufInt[8];
 -- Проверять координаты !!!
 Секц_ВнВид.Cell(10, 04, CellBgColor, ColorH1);
 Секц_ВнВид.Cell(10, 05, CellBgColor, ColorH2);
 Секц_ВнВид.Cell(10, 06, CellBgColor, ColorH3);
 Секц_ВнВид.Cell(10, 07, CellBgColor, ColorH4);
 Секц_ВнВид.Cell(10, 08, CellBgColor, ColorH5);
 Секц_ВнВид.Cell(10, 09, CellBgColor, ColorH6);
 Секц_ВнВид.Cell(10, 10, CellBgColor, ColorH7);
 Секц_ВнВид.Cell(10, 11, CellBgColor, ColorH8);
end;

Func ВыбратьСхемуЦветовИерархическихЗаголовков(ТекущийЦвет:Integer) :Integer;
var num:Integer;
 ClearVariable(Buf);
 Buf[01]="Стартовый цвет: 'Светло-коричневый'";
 Buf[02]="Стартовый цвет: 'Светло-желтый'";
 Buf[03]="Стартовый цвет: 'Бледно-зеленый'";
 Buf[04]="Стартовый цвет: 'Бледно-голубой'";
 Buf[05]="Стартовый цвет: 'Светло-бирюзовый'";
 Buf[06]="Стартовый цвет: 'Розовый'";
 Buf[07]="Стартовый цвет: 'Сиреневый'";
 Buf[08]="Стартовый цвет: 'Бледно-серый'";
 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 ВзятьРеквизиты(saveREC:Record; Auto:Logical);
var RO, num :Integer;
var REC :Record;
 if Auto:
   if Trim(УЧР_ИМЯ)="":
     RO=OpenWorkArea("КОНТРАГЕНТ", "", "НАШЕ");
     Try
       num=Records(RO);
       if num<1: REC=NIL;
       |  num=1: REC=GetRecordKey(RO, 1);
       |  num>1: REC=GetRecordKey(RO, 1);
                 SetFilter(RO, "НАШЕ and РПО_УМОЛЧАНИЕ");
                 if Records(RO)>0: REC=GetRecordKey(RO, 1); fi;
       fi;
       if REC=NIL and saveREC<>NIL: REC=saveREC; fi;
       if REC<>NIL:
         SetFilter(RO, "UKey="+RecordToString(REC));
         if Records(RO)=1:
            УЧР_ИМЯ = GetFieldS(RO, 1, "КОРИМЯ");
           УЧР_ОКПО = GetFieldS(RO, 1, "ОКПО");
         fi;
       fi;
     Finally
       CloseWorkArea(RO);
     end;
   fi;
 else
   REC=OpenCardFile("КОНТРАГЕНТ", "НАШЕ", saveREC, crdRecordOnly);
   if REC=NIL: Exit; fi;
   RO=OpenWorkArea("КОНТРАГЕНТ", "", "UKey="+RecordToString(REC));
   Try
     if Records(RO)=1:
        УЧР_ИМЯ = GetFieldS(RO, 1, "КОРИМЯ");
       УЧР_ОКПО = GetFieldS(RO, 1, "ОКПО");
     fi;
   Finally
     CloseWorkArea(RO);
   end;
 fi;
end;

Proc ПО_Выбор(prevVal:String);
var КОД, ИМЯ, Value :String;
 Value=AnaElection("П.*", False, False, prevVal);
 if Value="": Exit; fi;
 КОД=Value;
 Value=Name_A(КОД);
 ИМЯ=if(Value<>"" and Value<>" ", Value, КОД);
 ПОД_ИМЯ=ИМЯ;
 ПОД_КОД=КОД;
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;

Func ГруппаТекст(nameField:String) :String;
 if nameField="<СЧТ>": ^"Счет (синтетический)";
 |  nameField="<КБК>": ^"КБК счета";
 |  nameField="<ИСТ>": ^"Вид финансового обеспечения";
 |  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МХЭ;
 иррхГРП[06] = "<ГРП>";   иррхUSE[06] = flgГРП;
 иррхГРП[07] = "<ДОП>";   иррхUSE[07] = flgДОП;
 иррхГРП[08] = "<НФА>";   иррхUSE[08] = flgНФА;
 -- синхронизируем порядок группировки полей с настройками
 num=LengthOfArray(иррхГРП);
 if num>0:
   for ii=1 to num do
     pp=Pos(иррхГРП[ii], Иерархия);
     if     иррхUSE[ii] and pp<1: Иерархия =      Объединить(Иерархия, иррхГРП[ii], " ");
     |  not иррхUSE[ii] and pp>0: Иерархия = DeleteWordInStr(Иерархия, иррхГРП[ii], " ");
     fi;
   od;
 else
   Иерархия="";
 fi;
end;

Proc ПорядокГрупп_ОтобразитьГруппыТаблицы;
var num, kk, ii :Integer;
var Flag :Logical;
 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;
   Flag=True;
 else
   num=1;
   Секц_Групп.Cell(num+1, 5, CellContents, "", True);
   Секц_Групп.Cell(num+1, 6, CellContents, "нет групп для разбиения на таблицы");
   Flag=False;
 fi;
 kk=8-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;

Proc ФлагиПараметровДетализации(FieldREF:String; onExit:Logical);
var OldValue, NewValue, SaveValue :Logical;
var FieldFLG :String;
 SaveValue=False;
 FieldFLG=SubStr(FieldREF, 1, Length(FieldREF)-1);
 Try OldValue=GetVariableL(FieldFLG); Except end;
 if onExit: NewValue=False; else NewValue= not OldValue; fi;
 if NewValue<>OldValue: if not ОтменитьИзмененияУсловийОтчета: SaveValue=True; fi; fi;
 if SaveValue:
   PutVariableL(FieldFLG, NewValue);
   ПорядокГрупп_ПеречитатьГруппы;
 fi;
end;

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

Proc Счета_МассивФлаговVПеременные(FTRсчета:Integer);
var Value :String;
var ii :Integer;
 Value="";
 if FTRсчета=2:
   -- 1111111110000000
   for ii=1 to 09 do Value=Value+if(BufFlag[ii], "1", "0"); od;
   флагиACC=Value+"0000000";
 |  FTRсчета=3:
   -- 0000000001111111
   for ii=1 to 07 do Value=Value+if(BufFlag[ii], "1", "0"); od;
   флагиACC="000000000"+Value;
 else
   -- 1111111111111111
   for ii=1 to 16 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:
   -- 1111111110000000
   Value=SubStr(флагиACC, 01, 09);
   for ii=1 to 09 do BufFlag[ii]=if(SubStr(Value, ii, 1)="1", True, False); od;
 |  FTRсчета=3:
   -- 0000000001111111
   Value=SubStr(флагиACC, 10, 07);
   for ii=1 to 07 do BufFlag[ii]=if(SubStr(Value, ii, 1)="1", True, False); od;
 else
   -- 1111111111111111
   Value=флагиACC;
   for ii=1 to 16 do BufFlag[ii]=if(SubStr(Value, ii, 1)="1", True, False); od;
 fi;
end;

Proc Счета_СоздатьМассивВидовНФА(FTRсчета:Integer);
 if Length(флагиACC)<>16: флагиACC="0000000000000000"; fi;
 -- XXXXXXXXYZZZZZZZ
 -- 1234567890123456
 if FTRсчета=2:
   -- 11111111110000000
   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:
   -- 00000000001111111
   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] = "готовая продукция";
 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] = "готовая продукция";
 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=7: res105="105.??"; fi; -- субсчетов 105 - 7 штук
 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 Счета_ВнешнийВид;
 Счета_ОбновитьВидыНФА(2); -- Применяются только ОС
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 ВнешнийВид_Забаланс(ЕстьЗабаланс:Logical);
var цвFont, цвBack :Integer;
var ТЧ :Logical;
 if ЕстьЗабаланс: цв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 ВнешнийВид_ФильтрДопСпр;
var ТЧ, ЕстьОтбор :Logical;
var цвFont, цвBack :Integer;
 if Name_A(VOCКОД+".")<>" ": ЕстьОтбор=True; else ЕстьОтбор=False; fi;
 if ЕстьОтбор: цвFont=coWhite; цвBack=coTeal; ТЧ=False; else цвFont=coBlack; цвBack=coTransparent; ТЧ=True; fi;
 if ТЧ: flgДОП=False; отчДОП=""; nmsДОП=""; fi;
 Секц_Групп.Cell(08, 3, CellFontColor, цвFont);
 Секц_Групп.Cell(08, 3, CellBgColor,   цвBack);
 Секц_Групп.Cell(08, 3, CellFontStyle, if(ТЧ, 0, fsBold));
 Секц_Групп.Cell(08, 3, CellReadOnly,  ТЧ);
 Секц_Услов.Cell(10, 3, CellFontColor, цвFont);
 Секц_Услов.Cell(10, 3, CellBgColor,   цвBack);
 Секц_Услов.Cell(10, 3, CellReadOnly,  ТЧ);
 ПорядокГрупп_ПеречитатьГруппы;
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 ИсключитьСправочники :String;
var ANA, Value, ANA0:String;
var ii, num :Integer;
 ClearVariable(Buf);
   ANA=AddVocOPER("", True);
   if ANA<>"":
     num=WordsCount(ANA, "|");
     if num>0:
       ANA0=' НФА МОЛ М УЧН '+up(VOCКОД)+' ';
       for ii=1 to num do
	 Value=up(ExtractWord(ii, ANA, "|"));
	 if pos(Value, ANA0)<1:
	   Value=Value+".*";
	   AddInArray(Buf, True, False, Value);
	 fi;
       od;
     fi;
   fi;

   Value='ИНВВЕД'      ;if pos(Value, ANA0)<1:Value=Value+".*";AddInArray(Buf, True, False, Value);fi;
   Value='ФКР'	       ;if pos(Value, ANA0)<1:Value=Value+".*";AddInArray(Buf, True, False, Value);fi;
   Value='КОСГУ'       ;if pos(Value, ANA0)<1:Value=Value+".*";AddInArray(Buf, True, False, Value);fi;
   Value='ДВИЖ_НФА'    ;if pos(Value, ANA0)<1:Value=Value+".*";AddInArray(Buf, True, False, Value);fi;
   Value='К'	       ;if pos(Value, ANA0)<1:Value=Value+".*";AddInArray(Buf, True, False, Value);fi;
   Value='КТ'	       ;if pos(Value, ANA0)<1:Value=Value+".*";AddInArray(Buf, True, False, Value);fi;
   Value='ПБС'	       ;if pos(Value, ANA0)<1:Value=Value+".*";AddInArray(Buf, True, False, Value);fi;
   Value='ДНФА'        ;if pos(Value, ANA0)<1:Value=Value+".*";AddInArray(Buf, True, False, Value);fi;
   Value='НФА_СПРАВКА' ;if pos(Value, ANA0)<1:Value=Value+".*";AddInArray(Buf, True, False, Value);fi;
   num=lengthofarray(Buf);
   ANA="";
   for ii=1 to num do
     ANA=ANA+'|'+Buf[ii];
   od;
   if ANA<>'':ANA=SubStr(ANA,2,255);fi;
   ClearVariable(Buf);
   ^ANA;
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КОД+".");
   ОТЧДОП="";
   NMSДОП="";
   ВнешнийВид_ФильтрДопСпр;
 fi;
end;

Proc Счета_ВыборВидаНФАonEnter(FTRсчета:Integer);
var StoreСЧТ :String;
 StoreСЧТ=отчСЧТ;
 Счета_ВыборВидаНФА(FTRсчета);
 if отчСЧТ<>StoreСЧТ: 
   if ОтменитьИзмененияУсловийОтчета: 
     отчСЧТ=StoreСЧТ;
   else
     ОчиститьУсловияОтбора(True, True, flgЧиститьАна);
     if not flgЧиститьАна: отчНФА=""; nmsНФА=""; fi;
   fi;
 fi;
 ВнешнийВид_Забаланс(if(currAcc<>2, True, False));
 ValidateОтчетSection(False);
end;

Func ПравильнаяМаскаСчетовОС(maskСчета:String) :String;
var num, ii :Integer;
var res :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"; fi;
 resMask="("+maskUSEсчт+")&("+if(useБАЛ, maskUSEкбк+"."+ИФД+".???.??.???", "")+if(useБАЛ and useЗАБ, "|", "")+if(useЗАБ, "ЗАБ.??.101.??", "")+")";
 ^resMask;
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 Match(SaveКБК, "???.????.???????.???"):  Edit=True; else Edit=False; fi;
 РАБ.БЮДЖЕТ2005.РежимМаски="?";
 Value=КБК_СформироватьМенюМасокКБК(SaveКБК, valКБК, maskСЧТ, 1, Edit);
 if Value="" or Value=" ": ^SaveКБК; fi;
 ^Value;
end;

Proc КБК_ВыбратьФильтрКБК(OnExit:Logical);
var StoreКБК, NewКБК, mskСЧТ :String;
var SaveValue :Logical;
 SaveValue=False;
 StoreКБК=отчКБК;
 --
 if OnExit:
   NewКБК="";
 else
   mskСЧТ=ИтоговаяМаскаСчета(currИст, отчСЧТ, "", True, False);
   NewКБК=КБК_ВыборКБК(mskСЧТ, StoreКБК);
 fi;
 --
 if NewКБК<>StoreКБК: if not ОтменитьИзмененияУсловийОтчета: SaveValue=True; fi; fi;
 if SaveValue: 
   ОчиститьУсловияОтбора(False, False, flgЧиститьАна);
   отчКБК=NewКБК;
 fi;
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(Chr(169), Value);
 while nn>0 do Value=ЗаменитьСимволСтрокиВпозиции(Value, "_", nn); nn=Pos(Chr(169), Value); od;
 ^Value;
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 ВхожденийНет(ANA:String; MSK:String) :Logical;
 ^(Pos(ANA, MSK)=0);
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;
 nmsГРП=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 УдалитьСловоИзНабора_Диалог(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 СформироватьУсловиеОтбораНФА :String;
var ii, num :Integer;
var Res, Value :String;
 Res="";
 num=WordsCount(отчСЧТ, " ");
 if num>0:
   for ii=1 to num do
     Value=ExtractWord(ii, отчСЧТ, " ");
     Res=Объединить(Res, "НФА."+Value+".*", "|");
   od;
 fi;
 if Res="": Res="НФА.*"; fi;
 ^Res;
end;

Func Аналитика_ВыборПризнака(VOC:String; StoreANA:String) :String;
var Value, MaskAnaElec :String;
 Value="";
 RefreshAna;
 if Up(VOC)="НФА": MaskAnaElec=СформироватьУсловиеОтбораНФА; else MaskAnaElec=VOC+".*"; fi;
 Value=AnaElection(MaskAnaElec, False, True, StoreANA);
 if Trim(Value)="": ^""; fi;
 ^Value;
end;

Func Аналитика_ВыборПризнакаИзПроводок(VOC:String; StoreANA:String) :String;
var Путь, Value, MaskAnaElec, MaskAcc, 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=ИтоговаяМаскаСчета(currИст, отчСЧТ, отчКБК, if(currAcc=1 or currAcc=2, True, False), if(currAcc=1 or currAcc=3, True, False));
     if Up(VOC)="НФА": 
       MaskAnaElec=СформироватьУсловиеОтбораНФА;
       if (Length(MaskAcc)+Length(MaskAnaElec)+7)>255: MaskAnaElec=VOC+".*"; fi;
     else
       MaskAnaElec=VOC+".*";
     fi;
     Refresh(False);
     Отч1=RepOpen(Путь+"|По_признакам_БАЛиЗАБ", MaskAcc, MaskAnaElec, 1.1.100, if(ДатОпер>1.1.2000, ДатОпер, ToDay), "", 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="КТ"  : ^"Все категории ["+voc+".*]";
 |  voc="М"   : ^"Все местонахождения ["+voc+".*]";
 |  voc="МОЛ" : ^"Все материально ответственные лица ["+voc+".*]";
 |  voc="П"   : ^"Все подразделения ["+voc+".*]";
 |  voc="ПБС" : ^"Все получатели средств бюджета ["+voc+".*]";
 |  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СПР="М";
 |  FieldАНА="отчДОП": ValueСПР=VOCКОД;
 |  FieldАНА="отчНФА": ValueСПР="НФА";
 fi;
 FieldИМЯ="nms"+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 Оператор :String;
var nn :Integer;
 ClearVariable(Buf);
 Buf[1]="И";
 Buf[2]="ИЛИ";
 Buf[3]="И ИСКЛЮЧИТЬ";
 nn=Alternate("Выбор оператора",Buf, 20, 1, 12);
 if nn=1: ^"&";
 |  nn=2: ^"|";
 |  nn=3: ^"&~";
 fi;
 ^"";
end;

Func СчетаНФА_вУчете(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;

Func ПравильныйСимволАналитики(Value:String) :Logical;
var intChars :Integer;
 intChars=Ascii(Value);
 if intChars=42 or                        -- звездочка (*)
    intChars=46 or                        -- точка
    (intChars>= 48 and intChars<= 57) or  -- цифры
    intChars=63 or                        -- знак вопроса (?)
    (intChars>= 65 and intChars<= 90) or  -- латиница заглавные
    intChars=95 or                        -- нижнее подчеркивание
    (intChars>= 97 and intChars<=122) or  -- латиница строчные
    (intChars>=192 and intChars<=255):    -- национальный алфавит
       ^True;
 fi;
 ^False;
end;

Func ВсеСправочникиДопАналитикиПривязаны(vДопАна:String) :Integer;
var ii, num :Integer;
var Value, tmp :String;
 vДопАна=Trim(vДопАна);
 if vДопАна<>"" and LengthOfArray(bindVOC)>0:
   num=Length(vДопАна);
   if num>0:
     ClearVariable(Buf);
     Value="";
     for ii=1 to num do
       tmp=SubStr(vДопАна, ii, 1);
       if ПравильныйСимволАналитики(tmp):
         Value=Value+tmp;
       else
         if Value<>"":
           if Pos(".", Value)>0: Value=ExtractWord(1, Value, ".")+".*"; fi;
           AddInArray(Buf, True, False, Value);
           Value="";
         fi;
       fi;
     od;
     if Value<>"": AddInArray(Buf, True, False, Value); Value=""; fi;
     num=LengthOfArray(Buf);
     if num>0:
       for ii=1 to num do
         if SearchInArray(bindVOC, Buf[ii], True, 1)<1:
           Message("Длинное условие отбора аналитики.^MИспользуется свертка...^M^MСправочник '"+Buf[ii]+"' не привязан к выбранному фильтру по счетам!", mtError);
           ^-1;
         fi;
       od;
       ^+1;
     fi;
   fi;
 fi;
 ^0;
end;

Func ИтогоФильтрАналитики :String;
var Value, tmpНФА :String;
var len, kk, num :Integer;
var OK :Logical;
 Value=""; len=0; OK=False;
 if отчНФА<>"": tmpНФА=отчНФА; else tmpНФА="НФА.*"; fi;
 if tmpНФА<>"": if OK: num=3; else num=2; OK=True; fi; kk=Length(tmpНФА)+num; if (len+kk)<=255: len=len+kk; Value=Объединить("("+tmpНФА+")", Value, "&"); fi; fi;
 if отчМОЛ<>"": if OK: num=3; else num=2; OK=True; fi; kk=Length(отчМОЛ)+num; if (len+kk)<=255: len=len+kk; Value=Объединить("("+отчМОЛ+")", Value, "&"); fi; fi;
 if отчМХЭ<>"": if OK: num=3; else num=2; OK=True; fi; kk=Length(отчМХЭ)+num; if (len+kk)<=255: len=len+kk; Value=Объединить("("+отчМХЭ+")", Value, "&"); fi; fi;
 if отчДОП<>"": if OK: num=3; else num=2; OK=True; fi; kk=Length(отчДОП)+num; if (len+kk)<=255: len=len+kk; Value=Объединить("("+отчДОП+")", Value, "&"); fi; fi;
 if отчАНА<>"": if OK: num=3; else num=2; OK=True; fi; kk=Length(отчАНА)+num; if (len+kk)<=255: len=len+kk; Value=Объединить("("+отчАНА+")", Value, "&"); fi; fi;
 if Value="": Value="нет"; fi;
 ^Value;
end;

Func ПризнакСоотвМаске(Призн:String; услANA:String) :Logical;
-- Призн должно являтся полным значением, а не маской!
var Ana :String;
 if услANA="": ^False; fi;
 if Name_A(Призн)=" ": ^False; fi;
 if услANA="*": ^True; fi;
 for Sign Ana=услANA, Sort do if Призн=Ana: ^True; fi; od;
 ^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 ПроводкаПроходитОтборПоАналитике(len:Integer; УслАналитики:String; СложноеУсловие:Logical) :Logical;
var OK, MatchOK :Logical;
var ii, pp :Integer;
var Value, tmp :String;
 if Trim(УслАналитики)<>"":
   OK=False;
   if len>0: -- у проводки есть аналитика
     MatchOK=False;
     for ii=1 to len do  -- цикл по аналитике проводки
       pp=Pos(":", aAna[ii]);
       if pp>0: Value=SubStr(aAna[ii], 1, pp-1); else Value=aAna[ii]; fi;
       tmp=SubStr(Value, 1, 1);
       if tmp="+" or tmp="-": Value=Trim(SubStr(Value, 2, 255)); fi;
       if СложноеУсловие: -- простое условие - один признак или набор признаков через логическое "или" ( "|" )
         MatchOK=ПризнакСоотвМаске(Value, Trim(УслАналитики));
       else
         MatchOK=ПризнакСоотвНабору(Value, Trim(УслАналитики));
       fi;
       if MatchOK: Break; fi;
     od;
     if MatchOK: OK=True; fi;
   fi;
 else
   OK=True;
 fi;
 ^OK;
end;

Func USE_ИНВЕНТАРНЫЙ_НОМЕР(ACC:String; SUM:Numeric; KOL:Numeric; 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;
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+" тНФАСЧ6";
     |  Value="<КБК>": Res=Res+" тНФАКБК";
     |  Value="<ИСТ>": Res=Res+" тНФАИСТ";
     |  Value="<МОЛ>": Res=Res+" "+Chr(183)+"1тМОЛИМЯ";
     |  Value="<МХЭ>": Res=Res+" "+Chr(183)+"2тМХЭИМЯ";
     |  Value="<ДОП>": Res=Res+" "+Chr(183)+"3тДОПИМЯ";
     |  Value="<ГРП>": Res=Res+" тНФАГРК";
     |  Value="<НФА>": Res=Res+" тНФАТИП";
     fi;
   od;
 fi;
 ^Trim(Res);
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 СчетАмортизацииПоСчетуНФА(СЧТНФА: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;

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]="... учетному номеру НФА";
 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]="... наименованию местонахождения";
 ii=ii+1; BufMsk[ii]="тНФАСЧ6"; BufStr[ii]="... счету синтетическому";
 ii=ii+1; BufMsk[ii]="тНФАКБК"; BufStr[ii]="... КБК бюджетного счета";
 ii=ii+1; BufMsk[ii]="тНФАИСТ"; BufStr[ii]="... виду финансового обеспечения";
 --
 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 ПроверкаДат :Logical;
var ddНачало :Date;
 ddНачало=1.1.1990;
 if ДатОпер<=1.1.100: Message('Не задана дата отчетного периода!',               mtWarning); Template.Field="ДатОпер"; ^False; fi;
 if ДатОпер<ddНачало: Message('Не задана корректная дата отчетного периода!',    mtWarning); Template.Field="ДатОпер"; ^False; fi;
 ^True;
end;

Func ПроверкаЗаполнения :Logical;
 if not ПроверкаДат: ^False; fi;
 if currAcc<1: currAcc=1; oldsAcc=currAcc; fi;
 if currИст<1: currИст=1; oldsИст=currИст; fi;
 if useЦеныЕЦ:
2   if flgSgnЕЦ>0 and flgSgnЕЦ<7:
     if Round(БМЦеныЕЦот, 2)=0.00:
       Message("Не задан фильтр цены!^M(Выбран пункт 'Выводить НФА с ценой больше (меньше) чем указанная')", mtWarning);
       Template.Field="БМЦеныЕЦот";
       ^False;
     fi;
2   |                 flgSgnЕЦ=7:
     if Round(БМЦеныЕЦот, 2)=0.00:
       Message("Не задан фильтр цены 'ОТ'!^M(Выбран пункт 'Выводить НФА с ценой больше (меньше) чем указанная')", mtWarning);
       Template.Field="БМЦеныЕЦот";
       ^False;
     fi;
     if Round(БМЦеныЕЦдо, 2)=0.00:
       Message("Не задан фильтр цены 'ДО'!^M(Выбран пункт 'Выводить НФА с ценой больше (меньше) чем указанная')", mtWarning);
       Template.Field="БМЦеныЕЦдо";
       ^False;
     fi;
     if not (Round(БМЦеныЕЦдо, 2)-Round(БМЦеныЕЦот, 2))>0.00:
       Message("Цена 'ДО' меньше, чем цена 'ОТ'!^M(Выбран пункт 'Выводить НФА с ценой больше (меньше) чем указанная')", mtWarning);
       Template.Field="БМЦеныЕЦот";
       ^False;
     fi;
2   else
     Message("Не задан знак сравнения цены!^M(Выбран пункт 'Выводить НФА с ценой больше (меньше) чем указанная')", mtWarning);
     Template.Field="flgSgnЕЦ_";
     ^False;
2   fi;
 fi;
 ^True;
end;

Func АнализФильтраАналитики(uMaskAcc:String; ИгнорПроводкиБезНФА:Logical; Flag106:Logical) :String;
var uАНА, uДОП, uМОЛ, uМХЭ, uНФА, len_Max, len, xx, num :Integer;
var useMaskAna, Value, BindANA :String;
var OK :Logical;
 --
 useMaskAna="";
 ClearVariable(BufFlag);
 uАНА=0; uНФА=0; uДОП=0; uМОЛ=0; uМХЭ=0;
 len=Length(uMaskAcc)+7; -- 7=5+2  -5[знак()'*]  -2[{}]
 len_Max=255-len;
 len=0; xx=0;
 OK=False;
 --
 Value=отчАНА;
 if Value<>"":
   if OK: num=3; else num=2; OK=True; fi;
   xx=Length(Value)+num;
   if (len+xx)<=len_Max: len=len+xx; useMaskAna=Объединить(useMaskAna, "("+Value+")",  "&"); uАНА=+1; else uАНА=-1; fi;
 fi;
 --
 Value=отчНФА;
 if not ИгнорПроводкиБезНФА and Value="": Value="НФА.*"; fi;
 if Value<>"":
   if OK: num=3; else num=2; OK=True; fi;
   xx=Length(Value)+num;
   if (len+xx)<=len_Max: len=len+xx; useMaskAna=Объединить(useMaskAna, "("+Value+")",  "&"); uНФА=+1; else uНФА=-1; fi;
 fi;
 --
 Value=отчДОП;
 if Value<>"":
   if OK: num=3; else num=2; OK=True; fi;
   xx=Length(Value)+num;
   if (len+xx)<=len_Max: len=len+xx; useMaskAna=Объединить(useMaskAna, "("+Value+")",  "&"); uДОП=+1; else uДОП=-1; fi;
 fi;
 --
 Value=отчМОЛ;
 if Value<>"":
   if OK: num=3; else num=2; OK=True; fi;
   xx=Length(Value)+num;
   if (len+xx)<=len_Max: len=len+xx; useMaskAna=Объединить(useMaskAna, "("+Value+")",  "&"); uМОЛ=+1; else uМОЛ=-1; fi;
 fi;
 --
 Value=отчМХЭ;
 if Value<>"":
   if OK: num=3; else num=2; OK=True; fi;
   xx=Length(Value)+num;
   if (len+xx)<=len_Max: len=len+xx; useMaskAna=Объединить(useMaskAna, "("+Value+")",  "&"); uМХЭ=+1; else uМХЭ=-1; fi;
 fi;
 --
 BindANA=СправочникиСтруктурыПоМаскеСчетовПрогресс(uMaskAcc, 1.1.100, ДатОпер, True, True);
 if BindANA=" ": ^" "; fi; -- если был Except
 -- Проверка на привязку счетов для "неуместившейся" аналитики
 if SearchInArray(bindVOC, "НФА.*", True, 1)<1: Message("Справочник 'НФА' не привязан к выбранному фильтру по счетам учета"+if(Flag106, " ЦС.", "НФА."), mtError); ^" "; fi;
 --
 if uМОЛ<0 or flgМОЛ:
   if SearchInArray(bindVOC, "МОЛ.*", True, 1)<1:
     Message("Справочник 'МОЛ' не привязан к выбранному фильтру по счетам учета"+if(Flag106, " ЦС.", "НФА."), mtError);
     ^" ";
   fi;
 fi;
 --
 if uМХЭ<0 or flgМХЭ:
   if SearchInArray(bindVOC, "М.*", True, 1)<1:
     Message("Справочник 'М' не привязан к выбранному фильтру по счетам учета"+if(Flag106, " ЦС.", "НФА."), mtError);
     ^" ";
   fi;
 fi;
 --
 if uДОП<0 or flgДОП:
   if SearchInArray(bindVOC, VOCКОД+".*", True, 1)<1:
     Message("Длинное условие отбора аналитики.^MИспользуется свертка...^M^MСправочник '"+VOCКОД+"' не привязан к выбранному фильтру по счетам учета"+if(Flag106, " ЦС.", "НФА."), mtError);
     ^" ";
   fi;
 fi;
 --
 if uАНА<0:
   num=ВсеСправочникиДопАналитикиПривязаны(отчАНА);
   if num>0:
   |  num=0: Message("Длинное условие отбора аналитики.^MИспользуется свертка...^M^MСправочник(и) из строки 'Допол. признаки' не привязан к выбранному фильтру по счетам учета"+if(Flag106, " ЦС.", "НФА."), mtError);
             ^" ";
   |  num<0: ^" ";
   fi;
 fi;
 BufFlag[1]=if(uНФА<0, True, False);
 BufFlag[2]=if(uМОЛ<0, True, False);
 BufFlag[3]=if(uМХЭ<0, True, False);
 BufFlag[4]=if(uДОП<0, True, False);
 BufFlag[5]=if(uАНА<0, True, False);
 --
 ^Trim(useMaskAna);
end;

Func ВзятьДЭКСПЛ_КМНТ(КМНТ:String) :Date;
var ДЭКСПЛ :Date;
var pp :Integer;
 КМНТ=' '+КМНТ;
 pp=Pos(' ДЭКСПЛ=', КМНТ);
 if pp>0:
   КМНТ=Trim(SubStr(КМНТ, pp+8, 10));
   Try ДЭКСПЛ=StringToDate(КМНТ); Except ДЭКСПЛ=1.1.100; end;
 fi;
 ^ДЭКСПЛ;
end;

Func ВзятьДУЧЕТ_КМНТ(КМНТ:String):Date;
var ДУЧЕТ :Date;
var pp :Integer;
 КМНТ=' '+КМНТ;
 pp=Pos(' ДУЧЕТ=',  КМНТ);
 if pp>0:
   КМНТ=Trim(SubStr(КМНТ, pp+8, 10));
   if Match(КМНТ, '?.??.????'): КМНТ='1'+КМНТ; fi;
   Try ДУЧЕТ=StringToDate(КМНТ); Except ДУЧЕТ=1.1.100; end;
 fi;
 ^ДУЧЕТ;
end;

Func ВзятьДатуВводаЭксплуат_Сложный(Fnc_Date:Date; Crd_Date:Date; vКОДНФА:String; vКОДУЧН:String; vКОДСЧТ:String; vКОДМХЭ:String; ddEND:Date; vXconstНФА100П:Numeric) :Date;
var MskAna, СЧТКОД :String;
var dd_Null, Rep_Date :Date;
var Цена :Numeric;
var pp :Integer;
 dd_Null=1.1.1800;
 if Crd_Date > dd_Null and Fnc_Date > dd_Null : if Crd_Date<Fnc_Date: Rep_Date=Crd_Date; else Rep_Date=Fnc_Date; fi;
 |  Crd_Date > dd_Null and Fnc_Date = 1.1.100 : Rep_Date=Crd_Date;
 |  Crd_Date = 1.1.100 and Fnc_Date > dd_Null : Rep_Date=Fnc_Date;
 else Rep_Date=1.1.100;
 fi;
 if Rep_Date>dd_Null: ^Rep_Date; fi;
 --
 Rep_Date=1.1.100;
 MskAna=vКОДСЧТ+"/(*.?.???.??.???|00){"+vКОДНФА+"&"+vКОДУЧН+"}";
 for Transaction pp=MskAna, 1.1.100, ddEnd  do
   Rep_Date=ВзятьДЭКСПЛ_КМНТ(TransComment(pp));
   if Rep_Date>dd_Null: ^Rep_Date; fi;
   Try Цена=Abs(TransSum(pp, "РУБ"))/Abs(TransSum(pp, "КОЛ")); Except Цена=0.00; end;
   СЧТКОД=TransCre(pp);
   if Match(vКОДМХЭ, "М.Э.*") or (СЧТКОД="00" and TransCardFile(pp)="РПО_ОСТ_НФА"): Rep_Date=TransDate(pp); fi;
   if Rep_Date>dd_Null: ^Rep_Date; fi;
   if Rep_Date=1.1.100:
     if Match(СЧТКОД, "*.?.101.??.3?0") or -- внутренние перемещения
        Match(СЧТКОД, "*.?.106.??.3?0") or -- принятие к учету
        Match(СЧТКОД, "*.?.304.04.3?0") or -- централизованное снабжение
        Match(СЧТКОД, "*.?.401.10.14?") or
        Match(СЧТКОД, "*.?.401.10.15?") or
        Match(СЧТКОД, "*.?.401.10.180") or
        ((Match(СЧТКОД, "*.?.401.20.271") or Match(СЧТКОД, "*.2.109.??.271")) and Цена<=vXconstНФА100П):
          Rep_Date=TransDate(pp);
          if Rep_Date>dd_Null: ^Rep_Date; fi;
     fi;
   fi;
 end;
 ^Rep_Date;
end;

Func ВзятьДатуПринятияУчету_Сложный(Fnc_Date:Date; Crd_Date:Date; vКОДНФА:String; vКОДУЧН:String; vКОДСЧТ:String; ddEND:Date) :Date;
var dd_Null, Rep_Date :Date;
var MskAna :String;
var pp :Integer;
 dd_Null=1.1.1800;
 if Crd_Date > dd_Null and Fnc_Date > dd_Null : if Crd_Date<Fnc_Date: Rep_Date=Crd_Date; else Rep_Date=Fnc_Date; fi;
 |  Crd_Date > dd_Null and Fnc_Date = 1.1.100 : Rep_Date=Crd_Date;
 |  Crd_Date = 1.1.100 and Fnc_Date > dd_Null : Rep_Date=Fnc_Date;
 else Rep_Date=1.1.100;
 fi;
 if Rep_Date>dd_Null: ^Rep_Date; fi;
 --
 Rep_Date=1.1.100;
 MskAna=vКОДСЧТ+"/(*.106.??.3?0|*.304.04.3?0|*.401.10.14?|*.401.10.15?|*.401.10.172|*.401.10.180|00)"+"{"+vКОДНФА+"&"+vКОДУЧН+"}";
 for Transaction pp=MskAna, 1.1.100, ddEnd  do
   Rep_Date=ВзятьДУЧЕТ_КМНТ(TransComment(pp));
   if Rep_Date>dd_Null: ^Rep_Date; fi;
   Rep_Date=TransDate(pp);
   if Rep_Date>dd_Null: ^Rep_Date; fi;
 end;
 ^Rep_Date;
end;

Func ВзятьДатуВводаЭксплуат_П(vR1:Integer; vIter:Integer; Сложный:Logical; rvКОДНФА:String; rvКОДУЧН:String; rvКОДСЧТ:String; rvКОДМХЭ:String; RddEND:Date; rXconstНФА100П:Numeric) :Date;
var dd_Null, Rep_Date, clcFnc_Date, clcCrd_Date :Date;
 dd_Null  = 1.1.1800;
 Rep_Date = 1.1.100;
 if Name_A(rvКОДНФА)=" " or Name_A(rvКОДУЧН)=" ": ^Rep_Date; fi;
 clcFnc_Date = 1.1.100+Int(Saldo("ЗАБ.НФА.ДЭКСПЛ{"+rvКОДНФА+"&"+rvКОДУЧН+"}", RddEND));
 if Сложный:
   clcCrd_Date = 1.1.100;
   if vIter>0 and Up(WorkAreaCardFile(vR1))="РПО_ИНВКАРТ_ОС": clcCrd_Date = GetFieldD(vR1, vIter, "ДАТ_ВЭКСП"); fi;
   Rep_Date=ВзятьДатуВводаЭксплуат_Сложный(clcFnc_Date, clcCrd_Date, rvКОДНФА, rvКОДУЧН, rvКОДСЧТ, rvКОДМХЭ, RddEND, rXconstНФА100П);
 else
   if clcFnc_Date>dd_Null and Year(clcFnc_Date)<2050: Rep_Date=clcFnc_Date; fi;
 fi;
 ^Rep_Date;
end;

Func ВзятьДатуПринятияУчету_П(vR1:Integer; vIter:Integer; Сложный:Logical; rvКОДНФА:String; rvКОДУЧН:String; rvКОДСЧТ:String; RddEND:Date) :Date;
var dd_Null, Rep_Date, clcFnc_Date, clcCrd_Date :Date;
 dd_Null=1.1.1800;
 Rep_Date=1.1.100;
 if Name_A(rvКОДНФА)=" " or Name_A(rvКОДУЧН)=" ": ^Rep_Date; fi;
 clcFnc_Date = 1.1.100+Int(Saldo("ЗАБ.НФА.ДУЧЕТ{"+rvКОДНФА+"&"+rvКОДУЧН+"}", RddEND));
 if Сложный:
   clcCrd_Date = 1.1.100;
   if vIter>0 and Up(WorkAreaCardFile(vR1))="РПО_ИНВКАРТ_ОС": clcCrd_Date = GetFieldD(vR1, vIter, "ОПРИХ_ДАТА"); fi;
   Rep_Date=ВзятьДатуПринятияУчету_Сложный(clcFnc_Date, clcCrd_Date, rvКОДНФА, rvКОДУЧН, rvКОДСЧТ, RddEND);
 else
   if clcFnc_Date>dd_Null and Year(clcFnc_Date)<2050: Rep_Date=clcFnc_Date; fi;
 fi;
 ^Rep_Date;
end;

Func ВзятьСрокЭксплуатМес(ddVU:Date; vRинв:Integer; vIинв:Integer; vRнфа:Integer; vIнфа:Integer) :Integer;
var srok1, srok2 :Numeric;
var Res, len, ii :Integer;
 Res=0; srok1=0.00; srok2=0.00;
 if vIинв>0 and Up(WorkAreaCardFile(vRинв))="РПО_ИНВКАРТ_ОС": Try srok1 = Int(12*GetFieldN(vRинв, vIинв, "АМОРТ_СРОК")); Except srok1=0; end; fi;
 if srok1=0.00:
   if vIнфа>0 and Up(WorkAreaCardFile(vRнфа))="РПО_НФА":
     ClearVariable(Buf);
     if ddVU>31.12.2008: len=3; Buf[1]=" 09"; Buf[2]="   "; Buf[3]=" 02";
     |  ddVU<01.01.2007: len=1; Buf[1]=" 02";
     else                len=2; Buf[1]="   "; Buf[2]=" 02";
     fi;
     srok2=0;
     for ii=1 to len do if srok2=0: Try srok2=Int(12*GetFieldN(vRнфа, vIнфа, "СРОКАМ"+Trim(Buf[ii]))); Except srok2=0; end; else Break; fi; od;
   fi;
 fi;
 Res=if(srok1>0.00, Int(srok1), Int(srok2));
 ^Abs(Res);
end;

Func ВзятьДатуКонцаЭксплуат_П(ddVE:Date; СрокЭксплМес:Integer) :Date;
var dd_Null, Rep_Date :Date;
 dd_Null=1.1.1800;
 Rep_Date=1.1.100;
 if ddVE>dd_Null and СрокЭксплМес>0: ^(AddMon(ddVE, СрокЭксплМес)); fi;
 ^Rep_Date;
end;

Func ВзятьЗаводскойНомер(vRинв:Integer; vIинв:Integer; FncЗавНом:String) :String;
var Res :String;
 Res="";
 if vIинв>0 and Up(WorkAreaCardFile(vRинв))="РПО_ИНВКАРТ_ОС": Res=Trim(GetFieldS(vRинв, vIинв, "ЗАВОД_НОМ")); fi;
 if Res="": Res=FncЗавНом; fi;
 ^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(Chr(183)+"1", Field)>0:
       tmp=тМОЛИМЯ[Iter]+Chr(169)+тМОЛКОД[Iter];
       xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
       if xx>0: Value=Chr(183)+"1"+Format("%.10d", xx); fi;
     |  Pos(Chr(183)+"2", Field)>0:
       tmp=тМХЭИМЯ[Iter]+Chr(169)+тМХЭКОД[Iter];
       xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
       if xx>0: Value=Chr(183)+"2"+Format("%.10d", xx); fi;
     |  Pos(Chr(183)+"3", Field)>0:
       tmp=тДОПИМЯ[Iter]+Chr(169)+тДОПКОД[Iter];
       xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
       if xx>0: Value=Chr(183)+"3"+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(aUsrFldSRT, tmp, True, 1);
   if xx>0: Value=Format("%.10d", xx); fi;
 fi;
 if Trim(Value)="": Value=" "; fi;
 Res=Объединить(Res, Value, "#");
 ^Up(Res);
end;

Proc ПоискДанных_ИщемОстакиНФА101(vДатОпер:Date; vЕстьБал:Logical; vЕстьЗаб:Logical; vMaskACC:String; vMaskANA:String; vИспНФА:Logical; vИспМОЛ:Logical; vИспМХЭ:Logical; vИспДОП:Logical; vИспАНА:Logical; constНФА100П:Numeric; constНФА_ИНВ:Numeric);
var ВременныйФайл, aVal1, aVal2, aDeb, aCre, aComment, svrANA, svrSGN, refStrНФА, refStrМОЛ, refStrМХЭ, refStrДОП, Value :String;
var КОДСЧТ, КОДИСТ, КОДКБК, КОДСЧ6, КОДНФА, КОДУЧН, КОДЗАВ, КОДМОЛ, КОДМХЭ, КОДДОП, NAMНФА, NAMУЧН, NAMЗАВ, NAMМОЛ, NAMМХЭ, NAMДОП :String;
var aSum1, aSum2, SUM, QUA, KOL :Numeric;
var len, xx, ii, jj, pp, hh :Integer;
var СЧДЕБ, НЕТУЧН, Work :Logical;
var aDate :Date;
 ClearVariable(aAna);
 ВременныйФайл=PlanVar('CACHE')+"\"+GetGUID;
 xx=TujRepNoNullBal+TujRepCombinedAna+if(vЕстьБал, TujRepBalAccount, 0)+if(vЕстьЗаб, TujRepZabalance, 0);
 len=TujReport(ВременныйФайл, 1.1.100, vДатОпер, vMaskACC, vMaskANA, ИсключитьСправочники, "", "", xx, False);
 if len>0:
   ShowProgress(len, "Выборка остатков ОС...");
   OpenTextJur(ВременныйФайл);
   Try
     ii=1;
     while not GetTransFromTextJur(aDate, aSum1, aVal1, aSum2, aVal2, aDeb, aCre, aAna, aComment) do
       ProgressPos(ii);
       ii=ii+1;
       -- Очистка аналитики
       КОДИСТ=""; КОДКБК=""; КОДСЧ6=""; КОДСЧТ=""; КОДНФА=""; КОДУЧН=""; КОДЗАВ=""; КОДМОЛ=""; КОДМХЭ=""; КОДДОП=""; svrANA=""; svrSGN="";
       SUM=0.00; KOL=0.00; QUA=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;  КОДИСТ="З";                   КОДКБК="Забаланс";            if flgВыдСчтНФА: КОДСЧ6=SubStr(КОДСЧТ,  8, 6); else КОДСЧ6=SubStr(КОДСЧТ,  1, 6); fi;
       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;
         -- Проводим далее отбор аналитики
         xx=LengthOfArray(aAna);
         if xx>0:
           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;
             svrSGN=SubStr(svrANA, 1, 1);
             if svrSGN="+" or svrSGN="-": svrANA=SubStr(svrANA, 2, 255); fi;
             if Match(svrANA,     "НФА.*"): КОДНФА=svrANA; KOL=if(СЧДЕБ, QUA, -QUA);
             |  Match(svrANA, pfxУЧН+".*"): КОДУЧН=svrANA;
             fi;
--             if vИспМОЛ or flgМОЛ: if Match(svrANA,     "МОЛ.*"): КОДМОЛ=svrANA; fi; fi; -- условие отбора убрано так как МОЛ и МХЭ
--             if vИспМХЭ or flgМХЭ: if Match(svrANA,       "М.*"): КОДМХЭ=svrANA; fi; fi; -- всегда показываются в ведомости ОС
             if Match(svrANA,     "МОЛ.*"): КОДМОЛ=svrANA; fi;
             if Match(svrANA,       "М.*"): КОДМХЭ=svrANA; fi;
             if vИспДОП or flgДОП: if Match(svrANA, VOCКОД+".*"): КОДДОП=svrANA; fi; fi;
             if flgЗавНомЗаб     : if Match(svrANA, pfxЗАВ+".*"): КОДЗАВ=svrANA; fi; fi;
           od; -- цикл по аналитике
         fi; --xx>0
         -- формирование задействованной аналитики
         -- НФА
         if КОДНФА="": КОДНФА="НФА.$$$"; fi;
         -- УЧН
         if Trim(КОДУЧН)="" or НЕТУЧН:
           КОДУЧН=pfxУЧН+".$$$"; 
         else
           if not USE_ИНВЕНТАРНЫЙ_НОМЕР(КОДСЧТ, SUM, KOL, КОДУЧН, constНФА100П, constНФА_ИНВ): КОДУЧН=pfxУЧН+".$$$"; fi;
         fi;
         -- МОЛ
         if КОДМОЛ="": КОДМОЛ="МОЛ.$$$"; fi;
         -- МХЭ
         if КОДМХЭ="": КОДМХЭ="М.Э.$$$"; fi;
         -- Дополнительный справочник
         if КОДДОП="": if Name_A(VOCКОД+".")<>" ": КОДДОП=VOCКОД+".$$$"; else КОДДОП="$$$.$$$"; fi; fi;
         -- Заводской номер
         if КОДЗАВ="": КОДЗАВ= pfxЗАВ+".$$$"; fi;
         --  *** Отбор по условию ***
         Work=True;
         if Work and vИспНФА: Work=ПризнакСоотвНабору(КОДНФА, if(отчНФА<>"", отчНФА, "НФА.*")); fi;
         if Work and vИспМОЛ: Work=ПризнакСоотвНабору(КОДМОЛ, отчМОЛ); fi;
         if Work and vИспМХЭ: Work=ПризнакСоотвНабору(КОДМХЭ, отчМХЭ); fi;
         if Work and vИспДОП: Work=ПризнакСоотвНабору(КОДДОП, отчДОП); fi;
         if Work and vИспАНА: Work=ПроводкаПроходитОтборПоАналитике(xx, отчАНА, True); fi;
         -- *** Проводка отобрана ***
         if Work:
           -- Формирование ссылок на аналитику
           -- НФА
           refStrНФА="";
           hh=SearchInArray(arr_КОДНФА, КОДНФА, True, 1);
           if hh=-1:
             count_arrНФА=count_arrНФА+1;
             refStrНФА=Format("%.10d", count_arrНФА);
             pp=InsertInArraySort(arr_КОДНФА, КОДНФА);
             InsertInArray(arr_REFНФА, pp, refStrНФА);
           else
             refStrНФА=arr_REFНФА[hh];
           fi;
           -- МОЛ
           refStrМОЛ="";
           hh=SearchInArray(arr_КОДМОЛ, КОДМОЛ, True, 1);
           if hh=-1:
             count_arrМОЛ=count_arrМОЛ+1;
             refStrМОЛ=Format("%.10d", count_arrМОЛ);
             pp=InsertInArraySort(arr_КОДМОЛ, КОДМОЛ);
             InsertInArray(arr_REFМОЛ, pp, refStrМОЛ);
           else
             refStrМОЛ=arr_REFМОЛ[hh];
           fi;
           -- МХЭ
           refStrМХЭ="";
           hh=SearchInArray(arr_КОДМХЭ, КОДМХЭ, True, 1);
           if hh=-1:
             count_arrМХЭ=count_arrМХЭ+1;
             refStrМХЭ=Format("%.10d", count_arrМХЭ);
             pp=InsertInArraySort(arr_КОДМХЭ, КОДМХЭ);
             InsertInArray(arr_REFМХЭ, pp, refStrМХЭ);
           else
             refStrМХЭ=arr_REFМХЭ[hh];
           fi;
           -- Дополнительный справочник
           refStrДОП="";
           hh=SearchInArray(arr_КОДДОП, КОДДОП, True, 1);
           if hh=-1:
             count_arrДОП=count_arrДОП+1;
             refStrДОП=Format("%.10d", count_arrДОП);
             pp=InsertInArraySort(arr_КОДДОП, КОДДОП);
             InsertInArray(arr_REFДОП, pp, refStrДОП);
           else
             refStrДОП=arr_REFДОП[hh];
           fi;
           --
           NAMНФА=""; NAMУЧН=""; NAMЗАВ=""; NAMМОЛ=""; NAMМХЭ=""; NAMДОП=""; svrANA="";
           -- *** СТРОКА ОТБОРА ОБЪЕКТОВ УЧЕТА ***
           svrANA=refStrМОЛ+"#"+refStrМХЭ+"#"+refStrДОП+"#"+КОДСЧТ+"#"+refStrНФА+"#"+КОДУЧН+"#"+КОДЗАВ;
           -- refStrМОЛ#refStrМХЭ#refStrДОП#КОДСЧТ#refStrНФА#КОДУЧН#КОДЗАВ
           hh=SearchInArray(LST_UNIQUE, svrANA, 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 КОДЗАВ=pfxЗАВ+".$$$": NAMЗАВ="> не присвоен"; else NAMЗАВ=КОДЗАВ; fi; 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;
             -- Дополнительный справочник
             NAMДОП=УдалитьРазделитель_дляНашаСорт(Trim(Name_A(КОДДОП)));
             if NAMДОП="":
               if КОДДОП=VOCКОД+".$$$": NAMДОП="> нет кода "+VOCКОД;
               |  КОДДОП="$$$.$$$":     NAMДОП="> нет доп.справочника";
               else NAMДОП=КОДДОП;
               fi;
             fi;
             --
             pp=0;
             if flgМОЛ: Value=NAMМОЛ+Chr(169)+КОДМОЛ; AddInArray(aHdrFldSRT, True, False, Value); fi;
             if flgМХЭ: Value=NAMМХЭ+Chr(169)+КОДМХЭ; AddInArray(aHdrFldSRT, True, False, Value); fi;
             if flgДОП: Value=NAMДОП+Chr(169)+КОДДОП; AddInArray(aHdrFldSRT, True, False, Value); fi;
             --
             Value="";
             if fldСОРТкод="тНФАКОД": Value=КОДНФА;
             |  fldСОРТкод="тНФАИМЯ": Value=NAMНФА;
             |  fldСОРТкод="тНФАИНВ": Value=NAMУЧН;
             |  fldСОРТкод="тНФАУЧН": Value=КОДУЧН;
             |  fldСОРТкод="тМОЛКОД": Value=КОДМХЭ;
             |  fldСОРТкод="тМОЛИМЯ": Value=NAMМОЛ;
             |  fldСОРТкод="тМХЭКОД": Value=КОДМХЭ;
             |  fldСОРТкод="тМХЭИМЯ": Value=NAMМХЭ;
             |  fldСОРТкод="тНФАСЧ6": Value=КОДСЧ6;
             |  fldСОРТкод="тНФАКБК": Value=КОДКБК;
             |  fldСОРТкод="тНФАИСТ": Value=КОДИСТ;
             fi;
             --
             if Value<>"": AddInArray(aUsrFldSRT, True, False, Value); fi;
             --
             pp=InsertInArraySort(LST_UNIQUE, svrANA);
             InsertInArray(LST_OSTСУМ, pp, SUM);
             InsertInArray(LST_OSTКОЛ, 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, NAMМХЭ);
             InsertInArray(LST_ИМЯДОП, pp, NAMДОП);
             InsertInArray(LST_НЕТУЧН, pp, НЕТУЧН);
             InsertInArray(LST_ЮЗРСРТ, pp, Value);
           else
             LST_OSTСУМ[hh]=LST_OSTСУМ[hh]+SUM;
             LST_OSTКОЛ[hh]=LST_OSTКОЛ[hh]+KOL;
           fi; -- объект найден
         fi; --Work (проводка отобрана)
       fi; --КОДСЧТ
     end; -- while
   Finally
     CloseTextJur;
     CloseProgress;
   end; -- Try
   Try DeleteFile(ВременныйФайл); Except end;
 fi; -- len>0 (TujReport)
end;

Func ДнейМесяца(Days:Date) :Integer;
var Month :Integer;
 Month=Mon(Days);
 if Month=1 : ^31;
 |  Month=2 : if Mod(Year(Days), 4)=0: ^29; else ^28; fi;
 |  Month=3 : ^31;
 |  Month=4 : ^30;
 |  Month=5 : ^31;
 |  Month=6 : ^30;
 |  Month=7 : ^31;
 |  Month=8 : ^31;
 |  Month=9 : ^30;
 |  Month=10: ^31;
 |  Month=11: ^30;
 |  Month=12: ^31;
 fi;
end;

Func JulianDays(ГД:Date) :Integer;
-- Вычисляем дни по Юлианскому календарю (без учета полудня [JD=JD+0.5 или вместо 1720994 - 1720994,5])
-- ГД - дата по григорианскому календарю
var КГ, КМ, КД :Integer; -- календарный григорианский год, месяц, день
var JD, ММ, ГГ, IA, IB, IS, GDAT :Integer;
 КГ=Year(ГД); КМ=Mon(ГД); КД=Day(ГД);
 if КМ>2 : ГГ=КГ; ММ=КМ+1; else ГГ=КГ-1; ММ=КМ+13; fi;
 if ГГ=0 : IS=1; else IS=Int(Trunc(ГГ/Abs(ГГ))); ГГ=Abs(ГГ); fi;
 GDAT=ГГ*10000+ММ*100+КД;
 if IS>0 :
   IB=0;
   if GDAT>=15821115 :
     IA=Int(Trunc(ГГ/100))*IS;
     IB=2-IA+Int(Trunc(Abs(IA)/4))*IS;
   fi;
   JD=1720994+КД+Int(Trunc(365.25*ГГ))+Int(Trunc(30.6001*ММ))+IB;
 else
   JD=1720994+КД-Int(Trunc(365.25*ГГ+0.75))+Int(Trunc(30.6001*ММ));
 fi;
 ^JD;
end;

Func НаписаниеИнтервала(strTrans:String) :String;
var val, nn, len :Integer;
 if strTrans="0": ^""; fi;
 len=Length(strTrans);
 if len<2: val=0; else val=Int(SubStr(strTrans, len-1, 1)); fi;
 nn=Int(SubStr(strTrans, len, 1));
 if nn=1 and val<>1                  : ^(strTrans+" год");
 | (nn=2 or nn=3 or nn=4) and val<>1 : ^(strTrans+" года");
 else                                  ^(strTrans+" лет");
 fi;
 ^"";
end;

Func СрокЭксплуатацииПрописью(dayНач:Date; dayКон:Date) :String;
var JDн, JDк, JDв, Г1, Г2, М1, М2, Д1, Д2, РГ, РМ, РД, откл, a, b, c :Integer;
var DayNull, DayВ :Date;
var strRes, tmp1, tmp2 :String;
 strRes="";
 DayNull=1.1.1800;
 if dayНач>DayNull and dayКон>DayNull and dayКон>dayНач:
   JDн=JulianDays(dayНач); JDк=JulianDays(dayКон);
   Г1=Year(dayНач); М1=Mon(dayНач); Д1=Day(dayНач); a=ДнейМесяца(dayНач);
   Г2=Year(dayКон); М2=Mon(dayКон); Д2=Day(dayКон); b=ДнейМесяца(dayКон);
   if Д1>b: c=b; else c=Д1; fi;
   DayВ=Dat(c, Mon(dayКон), Year(dayКон));
   JDв=JulianDays(DayВ);
   c=JDк-JDв;
   if c>=0:
     откл=0;
     РД=c;
   else
     откл=1;
     c=ДнейМесяца(AddMon(dayКон,-1));
     РД=c-Д1+Д2;
   fi;
   if (М2-М1-откл)<0 :
     РГ=Г2-Г1-1; РМ=12-(Abs(М2-М1)+откл);
   else
     РГ=Г2-Г1; РМ=М2-М1-откл;
   fi;
   tmp1=Trim(НаписаниеИнтервала(Str(РГ)));
   if РМ>0: tmp2=Str(РМ)+" мес"; else tmp2=""; fi;
   if tmp1<>"" and tmp2<>"": strRes=tmp1+" "+tmp2; else strRes=tmp1+tmp2; fi;
 fi;
 ^strRes;
end;

Proc ЗначениеПользовательскойСортировки_(Iter:Integer); -- к сожалению нельзя применить (значение необходимо формировать раньше :()
var Value :String;
 if Iter>0 and VariableExists(fldСОРТкод):
   Try Value=GetVariableS(fldСОРТкод+"["+Str(Iter)+"]"); Except Value=""; end;
   if Value<>"": AddInArray(aUsrFldSRT, True, False, Value); fi;
 fi;
end;

Func ПоискДанных_ИщемДанные(avДатОпер       :Date;
                            avЕстьБал       :Logical;
                            avЕстьЗаб       :Logical;
                            avMskACC101     :String;
                            avMskANA101     :String;
                            avUНФА101       :Logical;
                            avUМОЛ101       :Logical;
                            avUМХЭ101       :Logical;
                            avUДОП101       :Logical;
                            avUАНА101       :Logical;
                            VconstНФА100П   :Numeric;
                            VconstНФА_ИНВ   :Numeric
                            ) :Logical;
var Value, СЧТБАЛ, СЧТАМТ, КОДНФА, КОДУЧН, КОДМОЛ, КОДМХЭ, КОДДОП, refStrНФА, refStrМОЛ, refStrМХЭ, refStrДОП, grpГРП, grpПГР, grpИМЯ :String;
var okData, Режим, Work, flgW1, flgW2, flgW3, flgW4 :Logical;
var SUM, KOL, Цена, ЦенаСравнОт, ЦенаСравнДо :Numeric;
var R1, RO, len, xx, ii, pp, ppНФА, ppИНВ, SrokMes :Integer;
var ddve, ddpu, ddke, ddvv :Date;
var REC :Record;
 okData=False;
 Refresh(False);
 Режим=AutoRefresh;
 ToggleAutoRefresh(False);
 ShowProgress(0, "Подготовка данных...");
 R1=OpenWorkArea("РПО_ИНВКАРТ_ОС", "", "");
 RO=OpenWorkArea("РПО_НФА", "", "");
 Try
   -- Служебная инфа
   TimeCreationRep="Время создания отчета: "+DateToString(ToDay)+" "+TimeToHMSstring(Time);
   СлужИнфоСЧТ="Отбор по счетам: "+Trim(avMskACC101);
   СлужИнфоАНА="Отбор по признакам: "+ИтогоФильтрАналитики;
   СлужИнфоГРП="Отбор по группам НФА: "+if(отчГРП<>"", nmsГРП, "нет");
   -- Очистка переменных
   ОчиститьВспомМассив;
   ОчиститьLST;
   ЦенаСравнОт=Round(БМЦеныЕЦот, 2);
   ЦенаСравнДо=Round(БМЦеныЕЦдо, 2);
   count_arrНФА=0; count_arrМОЛ=0; count_arrМХЭ=0; count_arrДОП=0;
   -- **************** --
   -- * Отбор данных * --
   -- **************** --
   ПоискДанных_ИщемОстакиНФА101(avДатОпер, avЕстьБал, avЕстьЗаб, avMskACC101, avMskANA101, avUНФА101, avUМОЛ101, avUМХЭ101, AVUДОП101, avUАНА101, VconstНФА100П, VconstНФА_ИНВ);
   --
   len=LengthOfArray(LST_UNIQUE);
   if len>0:
     if count_arrНФА>0:
        ПозицииArrayНФА=count_arrНФА;
        CloseProgress;
        ShowProgress(1, "Сортировка промежуточных данных (справочники НФА)...");
        SortSection(ПозицииArrayНФА, "arr_REFНФА", True, False);
     fi;
     if count_arrМОЛ>0:
        ПозицииArrayМОЛ=count_arrМОЛ;
        CloseProgress;
        ShowProgress(1, "Сортировка промежуточных данных (справочники МОЛ)...");
        SortSection(ПозицииArrayМОЛ, "arr_REFМОЛ", True, False);
     fi;
     if count_arrМХЭ>0:
        ПозицииArrayМХЭ=count_arrМХЭ;
        CloseProgress;
        ShowProgress(1, "Сортировка промежуточных данных (справочники МХЭ)...");
        SortSection(ПозицииArrayМХЭ, "arr_REFМХЭ", True, False);
     fi;
     if count_arrДОП>0:
        ПозицииArrayДОП=count_arrДОП;
        CloseProgress;
        ShowProgress(1, "Сортировка промежуточных данных (справочники ДОП)...");
        SortSection(ПозицииArrayДОП, "arr_REFДОП", True, False);
     fi;
     ShowProgress(len, "Расчет ведомости ОС...");
     ОчиститьТаблицу;
     ValidateОтчетSection(False);
     Value=СформироватьШаблонСортировки;
     xx=0;
     -- ********************** --
     -- * Группировка данных * --
     -- ********************** --
     for ii=1 to len do
       ProgressPos(ii);
       SUM=LST_OSTСУМ[ii];
       KOL=LST_OSTКОЛ[ii];
       if SUM<>0.00 or KOL<>0.00:
         -- Очитстка аналитики
         КОДНФА=""; КОДУЧН=""; КОДМОЛ=""; КОДМХЭ=""; КОДДОП=""; СЧТБАЛ=""; СЧТАМТ="";
         refStrНФА=""; refStrМОЛ=""; refStrМХЭ=""; refStrДОП=""; grpГРП=""; grpПГР=""; grpИМЯ="";
         REC=NIL; flgW1=False; flgW2=False; flgW3=False; flgW4=False; ppНФА=0; ppИНВ=0; SrokMes=0; Цена=0.00;
         -- ------------------------------------------------------------ --
         -- refStrМОЛ#refStrМХЭ#refStrДОП#КОДСЧТ#refStrНФА#КОДУЧН#КОДЗАВ --
         -- ------------------------------------------------------------ --
         refStrМОЛ = Trim(ExtractWord(1, LST_UNIQUE[ii], "#")); pp=SearchInArray(arr_REFМОЛ, refStrМОЛ, True, 1); if pp>0: КОДМОЛ=arr_КОДМОЛ[pp]; else КОДМОЛ=""; fi;
         refStrМХЭ = Trim(ExtractWord(2, LST_UNIQUE[ii], "#")); pp=SearchInArray(arr_REFМХЭ, refStrМХЭ, True, 1); if pp>0: КОДМХЭ=arr_КОДМХЭ[pp]; else КОДМХЭ=""; fi;
         refStrДОП = Trim(ExtractWord(3, LST_UNIQUE[ii], "#")); pp=SearchInArray(arr_REFДОП, refStrДОП, True, 1); if pp>0: КОДДОП=arr_КОДДОП[pp]; else КОДДОП=""; fi;
         СЧТБАЛ    = Trim(ExtractWord(4, LST_UNIQUE[ii], "#"));
         refStrНФА = Trim(ExtractWord(5, LST_UNIQUE[ii], "#")); pp=SearchInArray(arr_REFНФА, refStrНФА, True, 1); if pp>0: КОДНФА=arr_КОДНФА[pp]; else КОДНФА=""; fi;
         КОДУЧН    = Trim(ExtractWord(6, LST_UNIQUE[ii], "#")); if КОДУЧН=(pfxУЧН+".$$$"): КОДУЧН="> не присвоен"; fi;
         -- Пользовательская группировка НФА
         if Name_A(КОДНФА)<>" ":
           pp=0;
           REC=SignToRecord(КОДНФА, False);
           if REC<>NIL:
             pp=GetRecordNumber(RO, REC);
             if pp>0:
               ppНФА=pp;
               if flgГРП or отчГРП<>"":
                 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;
         fi;
         -- * Условия на выборку *
         Work=False;
         --1)
         if ValidSign(КОДНФА) or КОДНФА="НФА.$$$": flgW1=True; else flgW1=False; fi;
         --2)
         flgW2=СоответствуетФильтруПоГруппеНФА(отчГРП, grpГРП, grpПГР);
         --3)
         if not LST_НЕТУЧН[ii]:
           flgW3=False;
           if KOL>0: Цена=Abs(SUM)/Abs(KOL); else Цена=0.00; fi;
           if     flgНФАамт and     flgНФА100 and     flgНФАбез: flgW3=True;
           |  not flgНФАамт and     flgНФА100 and     flgНФАбез: if                       (Цена>VconstНФА_ИНВ and Цена<=VconstНФА100П) or Цена<=VconstНФА_ИНВ: flgW3=True; fi;
           |      flgНФАамт and not flgНФА100 and     flgНФАбез: if Цена>VconstНФА100П or                                                 Цена<=VconstНФА_ИНВ: flgW3=True; fi;
           |      flgНФАамт and     flgНФА100 and not flgНФАбез: if Цена>VconstНФА100П or (Цена>VconstНФА_ИНВ and Цена<=VconstНФА100П)                       : flgW3=True; fi;
           |  not flgНФАамт and not flgНФА100 and     flgНФАбез: if                                                                       Цена<=VconstНФА_ИНВ: flgW3=True; fi;
           |  not flgНФАамт and     flgНФА100 and not flgНФАбез: if                       (Цена>VconstНФА_ИНВ and Цена<=VconstНФА100П)                       : flgW3=True; fi;
           |      flgНФАамт and not flgНФА100 and not flgНФАбез: if Цена>VconstНФА100П                                                                       : flgW3=True; fi;
           fi;
         else
           Цена=0.00;
           flgW3=True;
         fi;
         --4)
         if useЦеныЕЦ:
           flgW4=False;
           if KOL>0: Цена=Round(Abs(SUM)/Abs(KOL), 2); else Цена=0.00; fi;
           if flgSgnЕЦ=1: if Цена <  ЦенаСравнОт and Цена<>0.00: flgW4=True; fi; -- <
           |  flgSgnЕЦ=2: if Цена <= ЦенаСравнОт and Цена<>0.00: flgW4=True; fi; -- <=
           |  flgSgnЕЦ=3: if Цена >  ЦенаСравнОт and Цена<>0.00: flgW4=True; fi; -- >
           |  flgSgnЕЦ=4: if Цена >= ЦенаСравнОт and Цена<>0.00: flgW4=True; fi; -- >=
           |  flgSgnЕЦ=5: if Цена =  ЦенаСравнОт and Цена<>0.00: flgW4=True; fi; -- =
           |  flgSgnЕЦ=6: if Цена <> ЦенаСравнОт and Цена<>0.00: flgW4=True; fi; -- <>
           |  flgSgnЕЦ=7: if Цена >= ЦенаСравнОт and Цена < ЦенаСравнДо and Цена<>0.00: flgW4=True; fi; -- {} интервал
           fi;
         else
           Цена=0.00;
           flgW4=True;
         fi;
         -- X) суммируем
         if flgW1 and flgW2 and flgW3 and flgW4: Work=True ;else Work=False; fi;
         -- Собственно выборка
         if Work:
           xx=xx+1;
           тНФАКОД[xx]=КОДНФА;
           тНФАИМЯ[xx]=LST_ИМЯНФА[ii];
           тНФАЕДИ[xx]=Lo(Unit(КОДНФА));
           if flgГРП:
             тНФАГРК[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]=КОДДОП;
           тДОПИМЯ[xx]=LST_ИМЯДОП[ii];
           тНФАИСТ[xx]=LST_КОДИСТ[ii];
           тНФАКБК[xx]=LST_КОДКБК[ii];
           тНФАСЧ6[xx]=LST_КОДСЧ6[ii];
           if Name_A(КОДНФА)<>" " and Name_A(КОДУЧН)<>" ":
             REC=SignToRecord("ИНВВЕД."+КОДНФА+"."+КОДУЧН, False);
             if REC<>NIL: ppИНВ=GetRecordNumber(R1, REC); fi;
             СЧТАМТ = СчетАмортизацииПоСчетуНФА(СЧТБАЛ);
             if Name_S(СЧТАМТ)<>" ":
               if flgДОП:
                 if Name_A(КОДДОП)<>" ":
                   Try тСУМАМТ[xx]=Round(Abs(Saldo(СЧТАМТ+"{"+КОДНФА+"&"+КОДУЧН+"&"+КОДДОП+"}", avДатОпер)), 2); Except тСУМАМТ[xx]=0.00; end;
                 fi;
               else
                 тСУМАМТ[xx]=Round(Abs(Saldo(СЧТАМТ+"{"+КОДНФА+"&"+КОДУЧН+"}", avДатОпер)), 2);
               fi;
             else
               тСУМАМТ[xx]=0.00;
             fi;
             ddpu=ВзятьДатуПринятияУчету_П(R1, ppИНВ, flgСложнДаты, КОДНФА, КОДУЧН, СЧТБАЛ, avДатОпер);
             ddve=ВзятьДатуВводаЭксплуат_П(R1, ppИНВ, flgСложнДаты, КОДНФА, КОДУЧН, СЧТБАЛ, КОДМХЭ, avДатОпер, VconstНФА100П);
             if ddpu>1.1.1800: тДАТПРН[xx]="у "+DateToString(ddpu); fi;
             if ddve>1.1.1800: тДАТЭКС[xx]="э "+DateToString(ddve); fi;
             SrokMes=ВзятьСрокЭксплуатМес(ddpu, R1, ppИНВ, RO, ppНФА);
             if SrokMes>0: 
               тМЕСНРМ[xx]=Str(100/SrokMes, 2)+" %";
               ddke=ВзятьДатуКонцаЭксплуат_П(ddve, SrokMes);
               if ddke>1.1.1800: 
                 if Mon(avДатОпер-1)<12: ddvv=Dat(1, Mon(avДатОпер-1)+1, Year(avДатОпер-1)); else ddvv=Dat(1, 1, Year(avДатОпер-1)+1); fi;
                 тДАТКОН[xx]="к "+DateToString(ddke);
                 тСРКПЛЗ[xx]=СрокЭксплуатацииПрописью(ddve, ddke);
                 тСРКФКТ[xx]=СрокЭксплуатацииПрописью(ddve, ddvv);
                 if avДатОпер<ddke:
                   тСРКОСТ[xx]=СрокЭксплуатацииПрописью(avДатОпер, ddke);
                 else
                   тСРКОСТ[xx]="срок истек";
                 fi;
               fi;
             fi;
             if ppНФА>0: тНФАОКФ[xx]=Trim(GetFieldS(RO, ppНФА, "ОКОФ")); fi;
           fi; -- if Name_A(КОДНФА)<>" " and Name_A(КОДУЧН)<>" "
           тНФАЗВД[xx]=ВзятьЗаводскойНомер(R1, ppИНВ, LST_ИМЯЗАВ[ii]);
           тКОЛНФА[xx]=KOL;
           тСУМБАЛ[xx]=SUM;
           if LST_НЕТУЧН[ii]: тСУМОСТ[xx]=0.00; else тСУМОСТ[xx]=тСУМБАЛ[xx]-тСУМАМТ[xx]; fi;
           if Цена  > VconstНФА100П                         : тНФАТИП[xx]="1";
           |  Цена  > VconstНФА_ИНВ and Цена<=VconstНФА100П : тНФАТИП[xx]="2";
           |  Цена <= VconstНФА_ИНВ                         : тНФАТИП[xx]="3";
           else                                               тНФАТИП[xx]="0";
           fi;
           --
           тНЕТАМТ[xx]=LST_НЕТУЧН[ii];
           тSRTFLD[xx]=СформироватьЗначениеСортировки(Value, xx, LST_ЮЗРСРТ[ii]);
         fi; --Work=True - проводка отобрана
       fi; --SUM<>0.00 or KOL<>0.00
     od;
   else
     Message("По заданнам условиям отбора^Mданных для выборки не обнаружено!", mtInformation);
     ^False;
   fi;
   len=LengthOfArray(тSRTFLD);
   if len>0:
     okData=True;
   else
     Message("По заданнам условиям отбора^Mненулевых остатков не обнаружено!", mtError);
     okData=False;
   fi;
 Finally
   CloseWorkArea(RO);
   CloseWorkArea(R1);
   CloseProgress;
   ToggleAutoRefresh(Режим);
 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, '101.??') or Match(CODE, '102.??') or Match(CODE, '103.??'))");
 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;


Proc ЗаключительныеИтогиТаблицаN1N4(r_SUM:Numeric; r_AMT:Numeric; r_OST:Numeric; vКОДСЧТ:String; vКОДИСТ:String; asТипНФА:Integer);
var jj, xx :Integer;
 jj=SearchInArray(иСЧТСкод, vКОДСЧТ, True, 1);
 if jj>0: -- накапливаем результат итогов
   xx=jj;
   if asТипНФА=1 or asТипНФА=2:
     if иtxt_amt[xx]="": иtxt_amt[xx]="амортизация"; fi;
     if иtxt_ost[xx]="": иtxt_ost[xx]="остаточная";  fi;
   fi;
   if vКОДИСТ="З":
      -- ЗАБАЛАНС
      иСЧТСзаб[xx] = иСЧТСзаб[xx]+r_SUM;                                            иСЧТСвсг[xx]=иСЧТСбалИ[xx]+иСЧТСзаб[xx];
   |  vКОДИСТ="1":
      -- БЮДЖЕТ
      иСЧТСбалБ[xx]=иСЧТСбалБ[xx]+r_SUM; иСЧТСбалИ[xx]=иСЧТСбалБ[xx]+иСЧТСбалВ[xx]; иСЧТСвсг[xx]=иСЧТСбалИ[xx]+иСЧТСзаб[xx];
      иСЧТСамтБ[xx]=иСЧТСамтБ[xx]+r_AMT; иСЧТСамтИ[xx]=иСЧТСамтБ[xx]+иСЧТСамтВ[xx];
      иСЧТСостБ[xx]=иСЧТСостБ[xx]+r_OST; иСЧТСостИ[xx]=иСЧТСостБ[xx]+иСЧТСостВ[xx];
      --
      if asТипНФА=1: -- амортизируемые ОС
         иСЧТбалГР3_Б[xx]=иСЧТбалГР3_Б[xx]+r_SUM; иСЧТбалГР3_И[xx]=иСЧТбалГР3_Б[xx]+иСЧТбалГР3_В[xx];
         иСЧТамтГР3_Б[xx]=иСЧТамтГР3_Б[xx]+r_AMT; иСЧТамтГР3_И[xx]=иСЧТамтГР3_Б[xx]+иСЧТамтГР3_В[xx];
         иСЧТостГР3_Б[xx]=иСЧТостГР3_Б[xx]+r_OST; иСЧТостГР3_И[xx]=иСЧТостГР3_Б[xx]+иСЧТостГР3_В[xx];
      |  asТипНФА=2: -- 100% амортизация ОС при выдаче в эксплуатацию
         иСЧТбалГР2_Б[xx]=иСЧТбалГР2_Б[xx]+r_SUM; иСЧТбалГР2_И[xx]=иСЧТбалГР2_Б[xx]+иСЧТбалГР2_В[xx];
         иСЧТамтГР2_Б[xx]=иСЧТамтГР2_Б[xx]+r_AMT; иСЧТамтГР2_И[xx]=иСЧТамтГР2_Б[xx]+иСЧТамтГР2_В[xx];
         иСЧТостГР2_Б[xx]=иСЧТостГР2_Б[xx]+r_OST; иСЧТостГР2_И[xx]=иСЧТостГР2_Б[xx]+иСЧТостГР2_В[xx];
      |  asТипНФА=3: -- списание ОС при выдаче в эксплуатацию
         иСЧТбалГР1_Б[xx]=иСЧТбалГР1_Б[xx]+r_SUM; иСЧТбалГР1_И[xx]=иСЧТбалГР1_Б[xx]+иСЧТбалГР1_В[xx];
      fi;
   else
      -- ВНЕБЮДЖЕТ
      иСЧТСбалВ[xx]=иСЧТСбалВ[xx]+r_SUM; иСЧТСбалИ[xx]=иСЧТСбалБ[xx]+иСЧТСбалВ[xx]; иСЧТСвсг[xx]=иСЧТСбалИ[xx]+иСЧТСзаб[xx];
      иСЧТСамтВ[xx]=иСЧТСамтВ[xx]+r_AMT; иСЧТСамтИ[xx]=иСЧТСамтБ[xx]+иСЧТСамтВ[xx];
      иСЧТСостВ[xx]=иСЧТСостВ[xx]+r_OST; иСЧТСостИ[xx]=иСЧТСостБ[xx]+иСЧТСостВ[xx];
      --
      if asТипНФА=1: -- амортизируемые ОС
         иСЧТбалГР3_В[xx]=иСЧТбалГР3_В[xx]+r_SUM; иСЧТбалГР3_И[xx]=иСЧТбалГР3_Б[xx]+иСЧТбалГР3_В[xx];
         иСЧТамтГР3_В[xx]=иСЧТамтГР3_В[xx]+r_AMT; иСЧТамтГР3_И[xx]=иСЧТамтГР3_Б[xx]+иСЧТамтГР3_В[xx];
         иСЧТостГР3_В[xx]=иСЧТостГР3_В[xx]+r_OST; иСЧТостГР3_И[xx]=иСЧТостГР3_Б[xx]+иСЧТостГР3_В[xx];
      |  asТипНФА=2: -- 100% амортизация ОС при выдаче в эксплуатацию
         иСЧТбалГР2_В[xx]=иСЧТбалГР2_В[xx]+r_SUM; иСЧТбалГР2_И[xx]=иСЧТбалГР2_Б[xx]+иСЧТбалГР2_В[xx];
         иСЧТамтГР2_В[xx]=иСЧТамтГР2_В[xx]+r_AMT; иСЧТамтГР2_И[xx]=иСЧТамтГР2_Б[xx]+иСЧТамтГР2_В[xx];
         иСЧТостГР2_В[xx]=иСЧТостГР2_В[xx]+r_OST; иСЧТостГР2_И[xx]=иСЧТостГР2_Б[xx]+иСЧТостГР2_В[xx];
      |  asТипНФА=3: -- списание ОС при выдаче в эксплуатацию
         иСЧТбалГР1_В[xx]=иСЧТбалГР1_В[xx]+r_SUM; иСЧТбалГР1_И[xx]=иСЧТбалГР1_Б[xx]+иСЧТбалГР1_В[xx];
      fi;
   fi; --vКОДИСТ
 else -- новый элемент итогов
   xx=InsertInArraySort(иСЧТСкод, vКОДСЧТ);
   InsertInArray(иtxt_amt, xx, if(asТипНФА=1 or asТипНФА=2, "амортизация", ""));
   InsertInArray(иtxt_ost, xx, if(asТипНФА=1 or asТипНФА=2, "остаточная" , ""));
   if vКОДИСТ="З":
       -- ЗАБАЛАНС
      InsertInArray(иСЧТСбалБ, xx, 0.00); InsertInArray(иСЧТСбалВ, xx, 0.00); InsertInArray(иСЧТСбалИ, xx, 0.00); InsertInArray(иСЧТСзаб, xx, r_SUM);
      InsertInArray(иСЧТСамтБ, xx, 0.00); InsertInArray(иСЧТСамтВ, xx, 0.00); InsertInArray(иСЧТСамтИ, xx, 0.00); InsertInArray(иСЧТСвсг, xx, r_SUM);
      InsertInArray(иСЧТСостБ, xx, 0.00); InsertInArray(иСЧТСостВ, xx, 0.00); InsertInArray(иСЧТСостИ, 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(иСЧТостГР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);
   |  vКОДИСТ="1":
      -- БЮДЖЕТ
      InsertInArray(иСЧТСбалБ, xx, r_SUM); InsertInArray(иСЧТСбалВ, xx, 0.00); InsertInArray(иСЧТСбалИ, xx, r_SUM); InsertInArray(иСЧТСзаб, xx, 0.00);
      InsertInArray(иСЧТСамтБ, xx, r_AMT); InsertInArray(иСЧТСамтВ, xx, 0.00); InsertInArray(иСЧТСамтИ, xx, r_AMT); InsertInArray(иСЧТСвсг, xx, r_SUM);
      InsertInArray(иСЧТСостБ, xx, r_OST); InsertInArray(иСЧТСостВ, xx, 0.00); InsertInArray(иСЧТСостИ, xx, r_OST);
      --
      if asТипНФА=1: -- амортизируемые ОС
        InsertInArray(иСЧТбалГР3_Б, xx, r_SUM); InsertInArray(иСЧТбалГР3_В, xx, 0.00); InsertInArray(иСЧТбалГР3_И, xx, r_SUM);
        InsertInArray(иСЧТамтГР3_Б, xx, r_AMT); InsertInArray(иСЧТамтГР3_В, xx, 0.00); InsertInArray(иСЧТамтГР3_И, xx, r_AMT);
        InsertInArray(иСЧТостГР3_Б, xx, r_OST); InsertInArray(иСЧТостГР3_В, xx, 0.00); InsertInArray(иСЧТостГР3_И, xx, r_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);
      |  asТипНФА=2: -- 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, r_SUM); InsertInArray(иСЧТбалГР2_В, xx, 0.00); InsertInArray(иСЧТбалГР2_И, xx, r_SUM);
        InsertInArray(иСЧТамтГР2_Б, xx, r_AMT); InsertInArray(иСЧТамтГР2_В, xx, 0.00); InsertInArray(иСЧТамтГР2_И, xx, r_AMT);
        InsertInArray(иСЧТостГР2_Б, xx, r_OST); InsertInArray(иСЧТостГР2_В, xx, 0.00); InsertInArray(иСЧТостГР2_И, xx, r_OST);
        InsertInArray(иСЧТбалГР1_Б, xx, 0.00);  InsertInArray(иСЧТбалГР1_В, xx, 0.00); InsertInArray(иСЧТбалГР1_И, xx, 0.00);
      |  asТипНФА=3: -- списание ОС при выдаче в эксплуатацию
        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, r_SUM); InsertInArray(иСЧТбалГР1_В, xx, 0.00); InsertInArray(иСЧТбалГР1_И, xx, r_SUM);
      fi;
   else
      -- ВНЕБЮДЖЕТ
      InsertInArray(иСЧТСбалБ, xx, 0.00); InsertInArray(иСЧТСбалВ, xx, r_SUM); InsertInArray(иСЧТСбалИ, xx, r_SUM); InsertInArray(иСЧТСзаб, xx, 0.00);
      InsertInArray(иСЧТСамтБ, xx, 0.00); InsertInArray(иСЧТСамтВ, xx, r_AMT); InsertInArray(иСЧТСамтИ, xx, r_AMT); InsertInArray(иСЧТСвсг, xx, r_SUM);
      InsertInArray(иСЧТСостБ, xx, 0.00); InsertInArray(иСЧТСостВ, xx, r_OST); InsertInArray(иСЧТСостИ, xx, r_OST);
      --
      if asТипНФА=1: -- амортизируемые ОС
        InsertInArray(иСЧТбалГР3_Б, xx, 0.00); InsertInArray(иСЧТбалГР3_В, xx, r_SUM); InsertInArray(иСЧТбалГР3_И, xx, r_SUM);
        InsertInArray(иСЧТамтГР3_Б, xx, 0.00); InsertInArray(иСЧТамтГР3_В, xx, r_AMT); InsertInArray(иСЧТамтГР3_И, xx, r_AMT);
        InsertInArray(иСЧТостГР3_Б, xx, 0.00); InsertInArray(иСЧТостГР3_В, xx, r_OST); InsertInArray(иСЧТостГР3_И, xx, r_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);
      |  asТипНФА=2: -- 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, r_SUM); InsertInArray(иСЧТбалГР2_И, xx, r_SUM);
        InsertInArray(иСЧТамтГР2_Б, xx, 0.00); InsertInArray(иСЧТамтГР2_В, xx, r_AMT); InsertInArray(иСЧТамтГР2_И, xx, r_AMT);
        InsertInArray(иСЧТостГР2_Б, xx, 0.00); InsertInArray(иСЧТостГР2_В, xx, r_OST); InsertInArray(иСЧТостГР2_И, xx, r_OST);
        InsertInArray(иСЧТбалГР1_Б, xx, 0.00); InsertInArray(иСЧТбалГР1_В, xx, 0.00);  InsertInArray(иСЧТбалГР1_И, xx, 0.00);
      |  asТипНФА=3: -- списание ОС при выдаче в эксплуатацию
        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, r_SUM); InsertInArray(иСЧТбалГР1_И, xx, r_SUM);
      fi;
   fi; --vКОДИСТ
 fi; --jj>0
end;

Proc ЗаключительныеИтогиТаблицаN2(r_SUM:Numeric; r_AMT:Numeric; r_OST:Numeric; vКОДСЧТ:String; vКОДИСТ:String; vКОДКБК:String);
var jj, xx :Integer;
var Value :String;
 Value=vКОДКБК+"."+vКОДИСТ+"."+vКОДСЧТ+".???";
 if vКОДИСТ<>"З" and Match(Value, "???.????.???????.???.?.???.??.???"):
   jj=SearchInArray(иСЧТБкод, Value, True, 1);
   if jj>0: -- накапливаем результат итогов
     xx=jj;
     if vКОДИСТ="1":
       иСЧТБбалБ[xx]=иСЧТБбалБ[xx]+r_SUM; иСЧТБбалИ[xx]=иСЧТБбалБ[xx]+иСЧТБбалВ[xx];
       иСЧТБамтБ[xx]=иСЧТБамтБ[xx]+r_AMT; иСЧТБамтИ[xx]=иСЧТБамтБ[xx]+иСЧТБамтВ[xx];
       иСЧТБостБ[xx]=иСЧТБостБ[xx]+r_OST; иСЧТБостИ[xx]=иСЧТБостБ[xx]+иСЧТБостВ[xx];
     else
       иСЧТБбалВ[xx]=иСЧТБбалВ[xx]+r_SUM; иСЧТБбалИ[xx]=иСЧТБбалБ[xx]+иСЧТБбалВ[xx];
       иСЧТБамтВ[xx]=иСЧТБамтВ[xx]+r_AMT; иСЧТБамтИ[xx]=иСЧТБамтБ[xx]+иСЧТБамтВ[xx];
       иСЧТБостВ[xx]=иСЧТБостВ[xx]+r_OST; иСЧТБостИ[xx]=иСЧТБостБ[xx]+иСЧТБостВ[xx];
     fi;
   else -- новый элемент итогов
     xx=InsertInarraySort(иСЧТБкод, Value);
     if vКОДИСТ="1":
       InsertInArray(иСЧТБбалБ, xx, r_SUM); InsertInArray(иСЧТБбалВ, xx, 0.00);  InsertInArray(иСЧТБбалИ, xx, r_SUM);
       InsertInArray(иСЧТБамтБ, xx, r_AMT); InsertInArray(иСЧТБамтВ, xx, 0.00);  InsertInArray(иСЧТБамтИ, xx, r_AMT);
       InsertInArray(иСЧТБостБ, xx, r_OST); InsertInArray(иСЧТБостВ, xx, 0.00);  InsertInArray(иСЧТБостИ, xx, r_OST);
     else
       InsertInArray(иСЧТБбалБ, xx, 0.00);  InsertInArray(иСЧТБбалВ, xx, r_SUM); InsertInArray(иСЧТБбалИ, xx, r_SUM);
       InsertInArray(иСЧТБамтБ, xx, 0.00);  InsertInArray(иСЧТБамтВ, xx, r_AMT); InsertInArray(иСЧТБамтИ, xx, r_AMT);
       InsertInArray(иСЧТБостБ, xx, 0.00);  InsertInArray(иСЧТБостВ, xx, r_OST); InsertInArray(иСЧТБостИ, xx, r_OST);
     fi;
   fi;
 fi;
end;

Proc ЗаключительныеИтогиТаблицаN3(r_SUM:Numeric; r_AMT:Numeric; r_OST:Numeric; vКОДИСТ:String; vКОДКБК:String);
var jj, xx :Integer;
var Value :String;
 Value=vКОДКБК;
 if Match(Value, "???.????.???????.???"):
   jj=SearchInArray(иФКРБкод, Value, True, 1);
   if jj>0: -- накапливаем результат итогов
     xx=jj;
     if vКОДИСТ="1":
       иСЧТФбалБ[xx]=иСЧТФбалБ[xx]+r_SUM; иСЧТФбалИ[xx]=иСЧТФбалБ[xx]+иСЧТФбалВ[xx];
       иСЧТФамтБ[xx]=иСЧТФамтБ[xx]+r_AMT; иСЧТФамтИ[xx]=иСЧТФамтБ[xx]+иСЧТФамтВ[xx];
       иСЧТФостБ[xx]=иСЧТФостБ[xx]+r_OST; иСЧТФостИ[xx]=иСЧТФостБ[xx]+иСЧТФостВ[xx];
     else
       иСЧТФбалВ[xx]=иСЧТФбалВ[xx]+r_SUM; иСЧТФбалИ[xx]=иСЧТФбалБ[xx]+иСЧТФбалВ[xx];
       иСЧТФамтВ[xx]=иСЧТФамтВ[xx]+r_AMT; иСЧТФамтИ[xx]=иСЧТФамтБ[xx]+иСЧТФамтВ[xx];
       иСЧТФостВ[xx]=иСЧТФостВ[xx]+r_OST; иСЧТФостИ[xx]=иСЧТФостБ[xx]+иСЧТФостВ[xx];
     fi;
   else -- новый элемент итогов
     xx=InsertInarraySort(иФКРБкод, Value);
     if vКОДИСТ="1":
       InsertInArray(иСЧТФбалБ, xx, r_SUM); InsertInArray(иСЧТФбалВ, xx, 0.00);  InsertInArray(иСЧТФбалИ, xx, r_SUM);
       InsertInArray(иСЧТФамтБ, xx, r_AMT); InsertInArray(иСЧТФамтВ, xx, 0.00);  InsertInArray(иСЧТФамтИ, xx, r_AMT);
       InsertInArray(иСЧТФостБ, xx, r_OST); InsertInArray(иСЧТФостВ, xx, 0.00);  InsertInArray(иСЧТФостИ, xx, r_OST);
     else
       InsertInArray(иСЧТФбалБ, xx, 0.00);  InsertInArray(иСЧТФбалВ, xx, r_SUM); InsertInArray(иСЧТФбалИ, xx, r_SUM);
       InsertInArray(иСЧТФамтБ, xx, 0.00);  InsertInArray(иСЧТФамтВ, xx, r_AMT); InsertInArray(иСЧТФамтИ, xx, r_AMT);
       InsertInArray(иСЧТФостБ, xx, 0.00);  InsertInArray(иСЧТФостВ, xx, r_OST); InsertInArray(иСЧТФостИ, xx, r_OST);
     fi;
   fi;
 fi;
end;

Func ВзятьИсточникСредств_Пол(Value:String) :String;
 if Value="1": ^"Бюджетная деятельность [1]";
 |  Value="2": ^"Приносящая доход деятельность (собственные доходы учреждения) [2]";
 |  Value="3": ^"Средства во временном распоряжении [3]";
 |  Value="4": ^"Субсидии на выполнение государственного (муниципального) задания [4]";
 |  Value="5": ^"Субсидии на иные цели [5]";
 |  Value="6": ^"Бюджетные инвестиции [6]";
 |  Value="7": ^"Средства по обязательному медицинскому страхованию [7]";
 |  Value="З": ^"Средства на забалансе [З]";
 else ^"";
 fi;
end;

Func ВзятьИсточникСредств_Кор(Value:String) :String;
 if Value="1": ^"бюджет [1]";
 |  Value="2": ^"доходы [2]";
 |  Value="3": ^"временно [3]";
 |  Value="4": ^"сбсд гос [4]";
 |  Value="5": ^"сбсд дрг [5]";
 |  Value="6": ^"бджт инв [6]";
 |  Value="7": ^"медстрах [7]";
 |  Value="З": ^"забаланс";
 else ^"";
 fi;
end;

Func ВзятьТипНФА_Пол(Value:String; v_constНФА100П:Numeric; v_constНФА_ИНВ:Numeric) :String;
var tmp :String;
 if Value="1": tmp="НФА > " +Format("%6.0m", v_constНФА100П);                                           ^"Балансовые НФА, на которые положено ежемесячно начислять амортизацию ("+tmp+")";
 |  Value="2": tmp="НФА > " +Format("%6.0m", v_constНФА_ИНВ)+" и <= "+Format("%6.0m", v_constНФА100П);  ^"Балансовые НФА, на которые положено начислять амортизацию 100% при вводе в эксплуатацию ("+tmp+")";
 |  Value="3": tmp="НФА <= "+Format("%6.0m", v_constНФА_ИНВ);                                           ^"Балансовые НФА, которые положено списывать с учета при вводе в эксплуатацию ("+tmp+")";
 else ^"";
 fi;
end;

Func ВзятьНаименованиеСинтСчета(Acc:String) :String;
var Grp, Key :String;
 if Acc<>"":
   if Match(Acc, "ЗАБ.??"): ^Trim(Name_S(Acc));
   |  Match(Acc, "10?.0?"):
     Grp=SubStr(Acc, 1, 3);
     Key=SubStr(Acc, 6, 1);
     if Grp="101":
       if Key="1": ^"Жилые помещения";
       |  Key="2": ^"Нежилые помещения";
       |  Key="3": ^"Сооружения";
       |  Key="4": ^"Машины и оборудование";
       |  Key="5": ^"Транспортные средства";
       |  Key="6": ^"Производственный и хозяйственный инвентарь";
       |  Key="7": ^"Библиотечный фонд";
       |  Key="8": ^"Прочие основные средства";
       fi;
     |  Grp="102": ^"Нематериальные активы";
     |  Grp="103":
       if Key="1": ^"Земля";
       |  Key="2": ^"Ресурсы недр";
       |  Key="3": ^"Прочие непроизведенные активы";
       fi;
     |  Grp="105":
       if Key="1": ^"Медикаменты и перевязочные средства";
       |  Key="2": ^"Продукты питания";
       |  Key="3": ^"Горюче-смазочные материалы";
       |  Key="4": ^"Строительные материалы";
       |  Key="5": ^"Мягкий инвентарь";
       |  Key="6": ^"Прочие материальные запасы";
       |  Key="7": ^"Готовая продукция";
       |  Key="8": ^"Товары";
       |  Key="9": ^"Наценка на товары";
       fi;
     fi;
   fi;
 fi;
 ^"";
end;

Func ВзятьИмяПараметраИерархическойГруппы(nameField:String; Iter:Integer; ВзятьУзелГруппы:Logical; v_constНФА100П:Numeric; v_constНФА_ИНВ:Numeric) :String;
var кодValue, имяValue :String;
var num :Integer;
 if Pos(Chr(183)+"1", nameField)>0:
   кодValue=тМОЛИМЯ[Iter];
   имяValue=тМОЛКОД[Iter];
   if имяValue<>"": имяValue="["+имяValue+"]"; fi;
 |  Pos(Chr(183)+"2", nameField)>0:
   кодValue=тМХЭИМЯ[Iter];
   имяValue=тМХЭКОД[Iter];
   if имяValue<>"": имяValue="["+имяValue+"]"; fi;
 |  Pos(Chr(183)+"3", 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="тНФАСЧ6":
       num=SearchInArray(BufMsk, кодValue, True, 1);
       if num>0: имяValue=BufStr[num]; else имяValue=ВзятьНаименованиеСинтСчета(кодValue); 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));
           --имяValue=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;
     |  nameField="тНФАИСТ":
       имяValue=ВзятьИсточникСредств_Пол(кодValue);
       if имяValue<>"": ^имяValue; fi;
     |  nameField="тНФАТИП":
       имяValue=ВзятьТипНФА_Пол(кодValue, v_constНФА100П, v_constНФА_ИНВ);
       if имяValue<>"": ^имяValue; fi;
     fi;
   fi; --кодValue<>""
 fi;
 if имяValue<>"": ^(кодValue+" "+Chr(151)+" "+имяValue); else ^""; fi;
end;

Proc ПодсчетВставкаПромежуточныхИтогов(VconstНФА100П:Numeric; VconstНФА_ИНВ:Numeric);
var fldKEY1, fldKEY2, fldKEY3, fldKEY4, fldKEY5, fldKEY6, fldKEY7, fldKEY8 :String;
var valFLD1, valFLD2, valFLD3, valFLD4, valFLD5, valFLD6, valFLD7, valFLD8 :String;
var valKEY1, valKEY2, valKEY3, valKEY4, valKEY5, valKEY6, valKEY7, valKEY8 :String;
var valKГР1, valKГР2, valKГР3, valKГР4, valKГР5, valKГР6, valKГР7, valKГР8 :String;
var len, num, ii, ordГРП, kk, aТипНФА, xx, jj :Integer;
var LnFn, Value, КОДКБК, КОДИСТ, КОДСЧТ, tmp :String;
var ЕстьИерархическаяГруппировка, НетСумАмт :Logical;
var KOL, SUM, AMT, OST :Numeric;
 LnFn="ъ"+Chr(183)+"ъ";
 len=LengthOfArray(тSRTFLD);
 ЕстьИерархическаяГруппировка=False;
 if len>0:
   ОчиститьИтоги;
   СортировкаВедомости;
   fldKEY1=""; fldKEY2=""; fldKEY3=""; fldKEY4=""; fldKEY5=""; fldKEY6=""; fldKEY7=""; fldKEY8="";
   if Trim(Иерархия)<>"":
     num=WordsCount(Иерархия, " ");
     if not num>8:
       ClearVariable(Buf);
       ЕстьИерархическаяГруппировка=True;
       ordГРП=0;
       for ii=1 to num do
         Value=ExtractWord(ii, Иерархия, " ");
         if Value="<СЧТ>": Try PutVariableS("Buf["+Str(ii)+"]", "тНФАСЧ6");            Except end;
         |  Value="<КБК>": Try PutVariableS("Buf["+Str(ii)+"]", "тНФАКБК");            Except end;
         |  Value="<ИСТ>": Try PutVariableS("Buf["+Str(ii)+"]", "тНФАИСТ");            Except end;
         |  Value="<МОЛ>": Try PutVariableS("Buf["+Str(ii)+"]", Chr(183)+"1тМОЛИМЯ");  Except end;
         |  Value="<МХЭ>": Try PutVariableS("Buf["+Str(ii)+"]", Chr(183)+"2тМХЭИМЯ");  Except end;
         |  Value="<ДОП>": Try PutVariableS("Buf["+Str(ii)+"]", Chr(183)+"3тДОПИМЯ");  Except end;
         |  Value="<ГРП>": Try PutVariableS("Buf["+Str(ii)+"]", "тНФАГРК"); ordГРП=ii; Except end;
         |  Value="<НФА>": Try PutVariableS("Buf["+Str(ii)+"]", "тНФАТИП");            Except end;
         fi;
       od;
       fldKEY1=Buf[1]; fldKEY2=Buf[2]; fldKEY3=Buf[3]; fldKEY4=Buf[4]; fldKEY5=Buf[5]; fldKEY6=Buf[6]; fldKEY7=Buf[7]; fldKEY8=Buf[8];
     fi;
   fi;
   FillСчета;
   ShowProgress(len, "Подсчет, вставка промежуточных итогов...");
   Try
     итгСУМБАЛвед=SumOfArray(тСУМБАЛ, Позиции);
     итгСУМАМТвед=SumOfArray(тСУМАМТ, Позиции);
     итгСУМОСТвед=SumOfArray(тСУМОСТ, Позиции);
     итгСУМКОЛвед=SumOfArray(тКОЛНФА, Позиции);
     kk=1;
     while тНФАКОД[kk]<>"" do
       ProgressPos(kk);
       KOL=тКОЛНФА[kk];
       SUM=тСУМБАЛ[kk];
       AMT=тСУМАМТ[kk];
       OST=тСУМОСТ[kk];
       aТипНФА=Int(тНФАТИП[kk]);
       КОДКБК=тНФАКБК[kk]; -- ???.????.???????.???  len=20
       КОДИСТ=тНФАИСТ[kk]; -- ?                     len=01 - 1, 2, З
       КОДСЧТ=тНФАСЧ6[kk]; -- ???.??                len=06
       НетСумАмт=тНЕТАМТ[kk];
       -- ЗАКЛЮЧИТЕЛЬНЫЕ ИТОГИ
       -- Заключительные итоги - таблица N1 и N4
       ЗаключительныеИтогиТаблицаN1N4(SUM, AMT, OST, КОДСЧТ, КОДИСТ, aТипНФА);
       -- Заключительные итоги - таблица N2
       ЗаключительныеИтогиТаблицаN2(SUM, AMT, OST, КОДСЧТ, КОДИСТ, КОДКБК);
       -- Заключительные итоги - таблица N3
       ЗаключительныеИтогиТаблицаN3(SUM, AMT, OST, КОДИСТ, КОДКБК);
       -- ***********************
       -- * ПРОМЕЖУТОЧНЫЕ ИТОГИ *
       -- ***********************
       if ЕстьИерархическаяГруппировка:
         Value="";
         valFLD1=""; valFLD2=""; valFLD3=""; valFLD4=""; valFLD5=""; valFLD6=""; valFLD7=""; valFLD8="";
         valKEY1=""; valKEY2=""; valKEY3=""; valKEY4=""; valKEY5=""; valKEY6=""; valKEY7=""; valKEY8="";
         -- fldKEY1
         if fldKEY1<>"":
           if Pos(Chr(183)+"1", fldKEY1)>0:
             tmp=тМОЛИМЯ[kk]+Chr(169)+тМОЛКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD1=Chr(183)+"1"+Format("%.10d", xx); fi;
           |  Pos(Chr(183)+"2", fldKEY1)>0:
             tmp=тМХЭИМЯ[kk]+Chr(169)+тМХЭКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD1=Chr(183)+"2"+Format("%.10d", xx); fi;
           |  Pos(Chr(183)+"3", fldKEY1)>0:
             tmp=тДОПИМЯ[kk]+Chr(169)+тДОПКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD1=Chr(183)+"3"+Format("%.10d", xx); fi;
           else
             Try valFLD1=GetVariableS(fldKEY1+"["+Str(kk)+"]"); Except end;
           fi;
         fi;
         -- fldKEY2
         if fldKEY2<>"":
           if Pos(Chr(183)+"1", fldKEY2)>0:
             tmp=тМОЛИМЯ[kk]+Chr(169)+тМОЛКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD2=Chr(183)+"1"+Format("%.10d", xx); fi;
           |  Pos(Chr(183)+"2", fldKEY2)>0:
             tmp=тМХЭИМЯ[kk]+Chr(169)+тМХЭКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD2=Chr(183)+"2"+Format("%.10d", xx); fi;
           |  Pos(Chr(183)+"3", fldKEY2)>0:
             tmp=тДОПИМЯ[kk]+Chr(169)+тДОПКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD2=Chr(183)+"3"+Format("%.10d", xx); fi;
           else
             Try valFLD2=GetVariableS(fldKEY2+"["+Str(kk)+"]"); Except end;
           fi;
         fi;
         -- fldKEY3
         if fldKEY3<>"":
           if Pos(Chr(183)+"1", fldKEY3)>0:
             tmp=тМОЛИМЯ[kk]+Chr(169)+тМОЛКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD3=Chr(183)+"1"+Format("%.10d", xx); fi;
           |  Pos(Chr(183)+"2", fldKEY3)>0:
             tmp=тМХЭИМЯ[kk]+Chr(169)+тМХЭКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD3=Chr(183)+"2"+Format("%.10d", xx); fi;
           |  Pos(Chr(183)+"3", fldKEY3)>0:
             tmp=тДОПИМЯ[kk]+Chr(169)+тДОПКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD3=Chr(183)+"3"+Format("%.10d", xx); fi;
           else
             Try valFLD3=GetVariableS(fldKEY3+"["+Str(kk)+"]"); Except end;
           fi;
         fi;
         -- fldKEY4
         if fldKEY4<>"":
           if Pos(Chr(183)+"1", fldKEY4)>0:
             tmp=тМОЛИМЯ[kk]+Chr(169)+тМОЛКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD4=Chr(183)+"1"+Format("%.10d", xx); fi;
           |  Pos(Chr(183)+"2", fldKEY4)>0:
             tmp=тМХЭИМЯ[kk]+Chr(169)+тМХЭКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD4=Chr(183)+"2"+Format("%.10d", xx); fi;
           |  Pos(Chr(183)+"3", fldKEY4)>0:
             tmp=тДОПИМЯ[kk]+Chr(169)+тДОПКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD4=Chr(183)+"3"+Format("%.10d", xx); fi;
           else
             Try valFLD4=GetVariableS(fldKEY4+"["+Str(kk)+"]"); Except end;
           fi;
         fi;
         -- fldKEY5
         if fldKEY5<>"":
           if Pos(Chr(183)+"1", fldKEY5)>0:
             tmp=тМОЛИМЯ[kk]+Chr(169)+тМОЛКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD5=Chr(183)+"1"+Format("%.10d", xx); fi;
           |  Pos(Chr(183)+"2", fldKEY5)>0:
             tmp=тМХЭИМЯ[kk]+Chr(169)+тМХЭКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD5=Chr(183)+"2"+Format("%.10d", xx); fi;
           |  Pos(Chr(183)+"3", fldKEY5)>0:
             tmp=тДОПИМЯ[kk]+Chr(169)+тДОПКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD5=Chr(183)+"3"+Format("%.10d", xx); fi;
           else
             Try valFLD5=GetVariableS(fldKEY5+"["+Str(kk)+"]"); Except end;
           fi;
         fi;
         -- fldKEY6
         if fldKEY6<>"":
           if Pos(Chr(183)+"1", fldKEY6)>0:
             tmp=тМОЛИМЯ[kk]+Chr(169)+тМОЛКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD6=Chr(183)+"1"+Format("%.10d", xx); fi;
           |  Pos(Chr(183)+"2", fldKEY6)>0:
             tmp=тМХЭИМЯ[kk]+Chr(169)+тМХЭКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD6=Chr(183)+"2"+Format("%.10d", xx); fi;
           |  Pos(Chr(183)+"3", fldKEY6)>0:
             tmp=тДОПИМЯ[kk]+Chr(169)+тДОПКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD6=Chr(183)+"3"+Format("%.10d", xx); fi;
           else
             Try valFLD6=GetVariableS(fldKEY6+"["+Str(kk)+"]"); Except end;
           fi;
         fi;
         -- fldKEY7
         if fldKEY7<>"":
           if Pos(Chr(183)+"1", fldKEY7)>0:
             tmp=тМОЛИМЯ[kk]+Chr(169)+тМОЛКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD7=Chr(183)+"1"+Format("%.10d", xx); fi;
           |  Pos(Chr(183)+"2", fldKEY7)>0:
             tmp=тМХЭИМЯ[kk]+Chr(169)+тМХЭКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD7=Chr(183)+"2"+Format("%.10d", xx); fi;
           |  Pos(Chr(183)+"3", fldKEY7)>0:
             tmp=тДОПИМЯ[kk]+Chr(169)+тДОПКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD7=Chr(183)+"3"+Format("%.10d", xx); fi;
           else
             Try valFLD7=GetVariableS(fldKEY7+"["+Str(kk)+"]"); Except end;
           fi;
         fi;
         -- fldKEY8
         if fldKEY8<>"":
           if Pos(Chr(183)+"1", fldKEY8)>0:
             tmp=тМОЛИМЯ[kk]+Chr(169)+тМОЛКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD8=Chr(183)+"1"+Format("%.10d", xx); fi;
           |  Pos(Chr(183)+"2", fldKEY8)>0:
             tmp=тМХЭИМЯ[kk]+Chr(169)+тМХЭКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD8=Chr(183)+"2"+Format("%.10d", xx); fi;
           |  Pos(Chr(183)+"3", fldKEY8)>0:
             tmp=тДОПИМЯ[kk]+Chr(169)+тДОПКОД[kk];
             xx=SearchInArray(aHdrFldSRT, tmp, True, 1);
             if xx>0: valFLD8=Chr(183)+"3"+Format("%.10d", xx); fi;
           else
             Try valFLD8=GetVariableS(fldKEY8+"["+Str(kk)+"]"); Except end;
           fi;
         fi;
         --Формирование строки узла иерархии { Элемент1|Элемент2|Элемент3|Элемент4|Элемент5|Элемент6|Элемент7|Элемент8 }
         if valFLD1<>"":                                                                                                                 valKEY1=Up(valFLD1+"# # # # # # # # ")+LnFn;                                                                       else valKEY1=""; fi;
         if valFLD1<>"" and valFLD2<>"":                                                                                                 valKEY2=Up(valFLD1+"#"+valFLD2+"# # # # # # # ")+LnFn;                                                             else valKEY2=""; fi;
         if valFLD1<>"" and valFLD2<>"" and valFLD3<>"":                                                                                 valKEY3=Up(valFLD1+"#"+valFLD2+"#"+valFLD3+"# # # # # # ")+LnFn;                                                   else valKEY3=""; fi;
         if valFLD1<>"" and valFLD2<>"" and valFLD3<>"" and valFLD4<>"":                                                                 valKEY4=Up(valFLD1+"#"+valFLD2+"#"+valFLD3+"#"+valFLD4+"# # # # # ")+LnFn;                                         else valKEY4=""; fi;
         if valFLD1<>"" and valFLD2<>"" and valFLD3<>"" and valFLD4<>"" and valFLD5<>"":                                                 valKEY5=Up(valFLD1+"#"+valFLD2+"#"+valFLD3+"#"+valFLD4+"#"+valFLD5+"# # # # ")+LnFn;                               else valKEY5=""; fi;
         if valFLD1<>"" and valFLD2<>"" and valFLD3<>"" and valFLD4<>"" and valFLD5<>"" and valFLD6<>"":                                 valKEY6=Up(valFLD1+"#"+valFLD2+"#"+valFLD3+"#"+valFLD4+"#"+valFLD5+"#"+valFLD6+"# # # ")+LnFn;                     else valKEY6=""; fi;
         if valFLD1<>"" and valFLD2<>"" and valFLD3<>"" and valFLD4<>"" and valFLD5<>"" and valFLD6<>"" and valFLD7<>"":                 valKEY7=Up(valFLD1+"#"+valFLD2+"#"+valFLD3+"#"+valFLD4+"#"+valFLD5+"#"+valFLD6+"#"+valFLD7+"# # ")+LnFn;           else valKEY7=""; fi;
         if valFLD1<>"" and valFLD2<>"" and valFLD3<>"" and valFLD4<>"" and valFLD5<>"" and valFLD6<>"" and valFLD7<>"" and valFLD8<>"": valKEY8=Up(valFLD1+"#"+valFLD2+"#"+valFLD3+"#"+valFLD4+"#"+valFLD5+"#"+valFLD6+"#"+valFLD7+"#"+valFLD8+"# ")+LnFn; else valKEY8=""; fi;
         --
         if ordГРП<>0:
           if ordГРП=1: valKГР1=Up(ExtractWord(1, valFLD1, "$")+"$*"+"# # # # # # # # ")+LnFn;
           |  ordГРП=2: valKГР2=Up(valFLD1+"#"+ExtractWord(1, valFLD2, "$")+"$*"+"# # # # # # # ")+LnFn;
           |  ordГРП=3: valKГР3=Up(valFLD1+"#"+valFLD2+"#"+ExtractWord(1, valFLD3, "$")+"$*"+"# # # # # # ")+LnFn;
           |  ordГРП=4: valKГР4=Up(valFLD1+"#"+valFLD2+"#"+valFLD3+"#"+ExtractWord(1, valFLD4, "$")+"$*"+"# # # # # ")+LnFn;
           |  ordГРП=5: valKГР5=Up(valFLD1+"#"+valFLD2+"#"+valFLD3+"#"+valFLD4+"#"+ExtractWord(1, valFLD5, "$")+"$*"+"# # # # ")+LnFn;
           |  ordГРП=6: valKГР6=Up(valFLD1+"#"+valFLD2+"#"+valFLD3+"#"+valFLD4+"#"+valFLD5+"#"+ExtractWord(1, valFLD6, "$")+"$*"+"# # # ")+LnFn;
           |  ordГРП=7: valKГР7=Up(valFLD1+"#"+valFLD2+"#"+valFLD3+"#"+valFLD4+"#"+valFLD5+"#"+valFLD6+"#"+ExtractWord(1, valFLD7, "$")+"$*"+"# # ")+LnFn;
           |  ordГРП=8: valKГР8=Up(valFLD1+"#"+valFLD2+"#"+valFLD3+"#"+valFLD4+"#"+valFLD5+"#"+valFLD6+"#"+valFLD7+"#"+ExtractWord(1, valFLD8, "$")+"$*"+"# ")+LnFn;
           else
             valKГР1=""; valKГР2=""; valKГР3=""; valKГР4=""; valKГР5=""; valKГР6=""; valKГР7=""; valKГР8="";
           fi;
         else
           valKГР1=""; valKГР2=""; valKГР3=""; valKГР4=""; valKГР5=""; valKГР6=""; valKГР7=""; valKГР8="";
         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 тНЕТАМТ[xx] and not НетСумАмт: тНЕТАМТ[xx]=False; fi; -- анализ появилась ли в суммировании подитога амортизация
           else -- добавление нового узла иерархии
             xx=InsertInArraySort(тSRTFLD, valKEY1);
             Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY1, xx, False, VconstНФА100П, VconstНФА_ИНВ);
             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(тНФАСЧ6, xx, ""); InsertInArray(тСРКФКТ, xx, "");
             InsertInArray(тСУМОСТ, xx, OST);   InsertInArray(тНФАГРК, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТПРН, xx, ""); InsertInArray(тСРКОСТ, xx, "");
             InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАГРИ, xx, ""); InsertInArray(тДОПКОД, xx, ""); InsertInArray(тДАТЭКС, xx, ""); InsertInArray(тМЕСНРМ, xx, "");
             InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тДОПИМЯ, xx, ""); InsertInArray(тДАТКОН, xx, ""); InsertInArray(тНФАТИП, xx, "");
             InsertInArray(тНЕТАМТ, xx, НетСумАмт);
             kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
           fi;
           if ordГРП=1 and valKГР1<>"":
             jj=SearchInArray(тSRTFLD, valKГР1, True, 1);
             if jj>0: -- накапливаем результат по разделу
               xx=jj;
               тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
               тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
               тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
               тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
               if тНЕТАМТ[xx] and not НетСумАмт: тНЕТАМТ[xx]=False; fi; -- анализ появилась ли в суммировании подитога амортизация
             else -- добавление нового узла иерархии
               xx=InsertInArraySort(тSRTFLD, valKГР1);
               Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY1, xx, True, VconstНФА100П, VconstНФА_ИНВ);
               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(тНФАСЧ6, xx, ""); InsertInArray(тСРКФКТ, xx, "");
               InsertInArray(тСУМОСТ, xx, OST);   InsertInArray(тНФАГРК, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТПРН, xx, ""); InsertInArray(тСРКОСТ, xx, "");
               InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАГРИ, xx, ""); InsertInArray(тДОПКОД, xx, ""); InsertInArray(тДАТЭКС, xx, ""); InsertInArray(тМЕСНРМ, xx, "");
               InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тДОПИМЯ, xx, ""); InsertInArray(тДАТКОН, xx, ""); InsertInArray(тНФАТИП, xx, "");
               InsertInArray(тНЕТАМТ, xx, НетСумАмт);
               kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
             fi;
           fi;
         fi; --valKEY1<>"" and fldKEY1<>""
         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 тНЕТАМТ[xx] and not НетСумАмт: тНЕТАМТ[xx]=False; fi; -- анализ появилась ли в суммировании подитога амортизация
           else -- добавление нового узла иерархии
             xx=InsertInArraySort(тSRTFLD, valKEY2);
             Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY2, xx, False, VconstНФА100П, VconstНФА_ИНВ);
             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(тНФАСЧ6, xx, ""); InsertInArray(тСРКФКТ, xx, "");
             InsertInArray(тСУМОСТ, xx, OST);   InsertInArray(тНФАГРК, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТПРН, xx, ""); InsertInArray(тСРКОСТ, xx, "");
             InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАГРИ, xx, ""); InsertInArray(тДОПКОД, xx, ""); InsertInArray(тДАТЭКС, xx, ""); InsertInArray(тМЕСНРМ, xx, "");
             InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тДОПИМЯ, xx, ""); InsertInArray(тДАТКОН, xx, ""); InsertInArray(тНФАТИП, xx, "");
             InsertInArray(тНЕТАМТ, xx, НетСумАмт);
             kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
           fi;
           if ordГРП=2 and valKГР2<>"":
             jj=SearchInArray(тSRTFLD, valKГР2, True, 1);
             if jj>0: -- накапливаем результат по разделу
               xx=jj;
               тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
               тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
               тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
               тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
               if тНЕТАМТ[xx] and not НетСумАмт: тНЕТАМТ[xx]=False; fi; -- анализ появилась ли в суммировании подитога амортизация
             else -- добавление нового узла иерархии
               xx=InsertInArraySort(тSRTFLD, valKГР2);
               Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY2, xx, True, VconstНФА100П, VconstНФА_ИНВ);
               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(тНФАСЧ6, xx, ""); InsertInArray(тСРКФКТ, xx, "");
               InsertInArray(тСУМОСТ, xx, OST);   InsertInArray(тНФАГРК, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТПРН, xx, ""); InsertInArray(тСРКОСТ, xx, "");
               InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАГРИ, xx, ""); InsertInArray(тДОПКОД, xx, ""); InsertInArray(тДАТЭКС, xx, ""); InsertInArray(тМЕСНРМ, xx, "");
               InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тДОПИМЯ, xx, ""); InsertInArray(тДАТКОН, xx, ""); InsertInArray(тНФАТИП, xx, "");
               InsertInArray(тНЕТАМТ, xx, НетСумАмт);
               kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
             fi;
           fi;
         fi; --valKEY2<>"" and fldKEY2<>""
         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 тНЕТАМТ[xx] and not НетСумАмт: тНЕТАМТ[xx]=False; fi; -- анализ появилась ли в суммировании подитога амортизация
           else -- добавление нового узла иерархии
             xx=InsertInArraySort(тSRTFLD, valKEY3);
             Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY3, xx, False, VconstНФА100П, VconstНФА_ИНВ);
             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(тНФАСЧ6, xx, ""); InsertInArray(тСРКФКТ, xx, "");
             InsertInArray(тСУМОСТ, xx, OST);   InsertInArray(тНФАГРК, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТПРН, xx, ""); InsertInArray(тСРКОСТ, xx, "");
             InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАГРИ, xx, ""); InsertInArray(тДОПКОД, xx, ""); InsertInArray(тДАТЭКС, xx, ""); InsertInArray(тМЕСНРМ, xx, "");
             InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тДОПИМЯ, xx, ""); InsertInArray(тДАТКОН, xx, ""); InsertInArray(тНФАТИП, xx, "");
             InsertInArray(тНЕТАМТ, xx, НетСумАмт);
             kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
           fi;
           if ordГРП=3 and valKГР3<>"":
             jj=SearchInArray(тSRTFLD, valKГР3, True, 1);
             if jj>0: -- накапливаем результат по разделу
               xx=jj;
               тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
               тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
               тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
               тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
               if тНЕТАМТ[xx] and not НетСумАмт: тНЕТАМТ[xx]=False; fi; -- анализ появилась ли в суммировании подитога амортизация
             else -- добавление нового узла иерархии
               xx=InsertInArraySort(тSRTFLD, valKГР3);
               Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY3, xx, True, VconstНФА100П, VconstНФА_ИНВ);
               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(тНФАСЧ6, xx, ""); InsertInArray(тСРКФКТ, xx, "");
               InsertInArray(тСУМОСТ, xx, OST);   InsertInArray(тНФАГРК, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТПРН, xx, ""); InsertInArray(тСРКОСТ, xx, "");
               InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАГРИ, xx, ""); InsertInArray(тДОПКОД, xx, ""); InsertInArray(тДАТЭКС, xx, ""); InsertInArray(тМЕСНРМ, xx, "");
               InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тДОПИМЯ, xx, ""); InsertInArray(тДАТКОН, xx, ""); InsertInArray(тНФАТИП, xx, "");
               InsertInArray(тНЕТАМТ, xx, НетСумАмт);
               kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
             fi;
           fi;
         fi; --valKEY3<>"" and fldKEY3<>""
         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 тНЕТАМТ[xx] and not НетСумАмт: тНЕТАМТ[xx]=False; fi; -- анализ появилась ли в суммировании подитога амортизация
           else -- добавление нового узла иерархии
             xx=InsertInArraySort(тSRTFLD, valKEY4);
             Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY4, xx, False, VconstНФА100П, VconstНФА_ИНВ);
             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(тНФАСЧ6, xx, ""); InsertInArray(тСРКФКТ, xx, "");
             InsertInArray(тСУМОСТ, xx, OST);   InsertInArray(тНФАГРК, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТПРН, xx, ""); InsertInArray(тСРКОСТ, xx, "");
             InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАГРИ, xx, ""); InsertInArray(тДОПКОД, xx, ""); InsertInArray(тДАТЭКС, xx, ""); InsertInArray(тМЕСНРМ, xx, "");
             InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тДОПИМЯ, xx, ""); InsertInArray(тДАТКОН, xx, ""); InsertInArray(тНФАТИП, xx, "");
             InsertInArray(тНЕТАМТ, xx, НетСумАмт);
             kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
           fi;
           if ordГРП=4 and valKГР4<>"":
             jj=SearchInArray(тSRTFLD, valKГР4, True, 1);
             if jj>0: -- накапливаем результат по разделу
               xx=jj;
               тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
               тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
               тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
               тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
               if тНЕТАМТ[xx] and not НетСумАмт: тНЕТАМТ[xx]=False; fi; -- анализ появилась ли в суммировании подитога амортизация
             else -- добавление нового узла иерархии
               xx=InsertInArraySort(тSRTFLD, valKГР4);
               Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY4, xx, True, VconstНФА100П, VconstНФА_ИНВ);
               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(тНФАСЧ6, xx, ""); InsertInArray(тСРКФКТ, xx, "");
               InsertInArray(тСУМОСТ, xx, OST);   InsertInArray(тНФАГРК, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТПРН, xx, ""); InsertInArray(тСРКОСТ, xx, "");
               InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАГРИ, xx, ""); InsertInArray(тДОПКОД, xx, ""); InsertInArray(тДАТЭКС, xx, ""); InsertInArray(тМЕСНРМ, xx, "");
               InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тДОПИМЯ, xx, ""); InsertInArray(тДАТКОН, xx, ""); InsertInArray(тНФАТИП, xx, "");
               InsertInArray(тНЕТАМТ, xx, НетСумАмт);
               kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
             fi;
           fi;
         fi; --valKEY4<>"" and fldKEY4<>""
         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 тНЕТАМТ[xx] and not НетСумАмт: тНЕТАМТ[xx]=False; fi; -- анализ появилась ли в суммировании подитога амортизация
           else -- добавление нового узла иерархии
             xx=InsertInArraySort(тSRTFLD, valKEY5);
             Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY5, xx, False, VconstНФА100П, VconstНФА_ИНВ);
             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(тНФАСЧ6, xx, ""); InsertInArray(тСРКФКТ, xx, "");
             InsertInArray(тСУМОСТ, xx, OST);   InsertInArray(тНФАГРК, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТПРН, xx, ""); InsertInArray(тСРКОСТ, xx, "");
             InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАГРИ, xx, ""); InsertInArray(тДОПКОД, xx, ""); InsertInArray(тДАТЭКС, xx, ""); InsertInArray(тМЕСНРМ, xx, "");
             InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тДОПИМЯ, xx, ""); InsertInArray(тДАТКОН, xx, ""); InsertInArray(тНФАТИП, xx, "");
             InsertInArray(тНЕТАМТ, xx, НетСумАмт);
             kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
           fi;
           if ordГРП=5 and valKГР5<>"":
             jj=SearchInArray(тSRTFLD, valKГР5, True, 1);
             if jj>0: -- накапливаем результат по разделу
               xx=jj;
               тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
               тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
               тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
               тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
               if тНЕТАМТ[xx] and not НетСумАмт: тНЕТАМТ[xx]=False; fi; -- анализ появилась ли в суммировании подитога амортизация
             else -- добавление нового узла иерархии
               xx=InsertInArraySort(тSRTFLD, valKГР5);
               Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY5, xx, True, VconstНФА100П, VconstНФА_ИНВ);
               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(тНФАСЧ6, xx, ""); InsertInArray(тСРКФКТ, xx, "");
               InsertInArray(тСУМОСТ, xx, OST);   InsertInArray(тНФАГРК, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТПРН, xx, ""); InsertInArray(тСРКОСТ, xx, "");
               InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАГРИ, xx, ""); InsertInArray(тДОПКОД, xx, ""); InsertInArray(тДАТЭКС, xx, ""); InsertInArray(тМЕСНРМ, xx, "");
               InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тДОПИМЯ, xx, ""); InsertInArray(тДАТКОН, xx, ""); InsertInArray(тНФАТИП, xx, "");
               InsertInArray(тНЕТАМТ, xx, НетСумАмт);
               kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
             fi;
           fi;
         fi; --valKEY5<>"" and fldKEY5<>""
         if valKEY6<>"" and fldKEY6<>"":
           jj=SearchInArray(тSRTFLD, valKEY6, True, 1);
           if jj>0: -- накапливаем результат по разделу
             xx=jj;
             тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
             тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
             тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
             тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
             if тНЕТАМТ[xx] and not НетСумАмт: тНЕТАМТ[xx]=False; fi; -- анализ появилась ли в суммировании подитога амортизация
           else -- добавление нового узла иерархии
             xx=InsertInArraySort(тSRTFLD, valKEY6);
             Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY6, xx, False, VconstНФА100П, VconstНФА_ИНВ);
             if Value="": Value=valFLD6; 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(тНФАСЧ6, xx, ""); InsertInArray(тСРКФКТ, xx, "");
             InsertInArray(тСУМОСТ, xx, OST);   InsertInArray(тНФАГРК, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТПРН, xx, ""); InsertInArray(тСРКОСТ, xx, "");
             InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАГРИ, xx, ""); InsertInArray(тДОПКОД, xx, ""); InsertInArray(тДАТЭКС, xx, ""); InsertInArray(тМЕСНРМ, xx, "");
             InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тДОПИМЯ, xx, ""); InsertInArray(тДАТКОН, xx, ""); InsertInArray(тНФАТИП, xx, "");
             InsertInArray(тНЕТАМТ, xx, НетСумАмт);
             kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
           fi;
           if ordГРП=6 and valKГР6<>"":
             jj=SearchInArray(тSRTFLD, valKГР6, True, 1);
             if jj>0: -- накапливаем результат по разделу
               xx=jj;
               тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
               тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
               тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
               тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
               if тНЕТАМТ[xx] and not НетСумАмт: тНЕТАМТ[xx]=False; fi; -- анализ появилась ли в суммировании подитога амортизация
             else -- добавление нового узла иерархии
               xx=InsertInArraySort(тSRTFLD, valKГР6);
               Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY6, xx, True, VconstНФА100П, VconstНФА_ИНВ);
               if Value="": Value=valFLD6; 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(тНФАСЧ6, xx, ""); InsertInArray(тСРКФКТ, xx, "");
               InsertInArray(тСУМОСТ, xx, OST);   InsertInArray(тНФАГРК, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТПРН, xx, ""); InsertInArray(тСРКОСТ, xx, "");
               InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАГРИ, xx, ""); InsertInArray(тДОПКОД, xx, ""); InsertInArray(тДАТЭКС, xx, ""); InsertInArray(тМЕСНРМ, xx, "");
               InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тДОПИМЯ, xx, ""); InsertInArray(тДАТКОН, xx, ""); InsertInArray(тНФАТИП, xx, "");
               InsertInArray(тНЕТАМТ, xx, НетСумАмт);
               kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
             fi;
           fi;
         fi; --valKEY6<>"" and fldKEY6<>""
         if valKEY7<>"" and fldKEY7<>"":
           jj=SearchInArray(тSRTFLD, valKEY7, True, 1);
           if jj>0: -- накапливаем результат по разделу
             xx=jj;
             тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
             тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
             тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
             тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
             if тНЕТАМТ[xx] and not НетСумАмт: тНЕТАМТ[xx]=False; fi; -- анализ появилась ли в суммировании подитога амортизация
           else -- добавление нового узла иерархии
             xx=InsertInArraySort(тSRTFLD, valKEY7);
             Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY7, xx, False, VconstНФА100П, VconstНФА_ИНВ);
             if Value="": Value=valFLD7; 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(тНФАСЧ6, xx, ""); InsertInArray(тСРКФКТ, xx, "");
             InsertInArray(тСУМОСТ, xx, OST);   InsertInArray(тНФАГРК, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТПРН, xx, ""); InsertInArray(тСРКОСТ, xx, "");
             InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАГРИ, xx, ""); InsertInArray(тДОПКОД, xx, ""); InsertInArray(тДАТЭКС, xx, ""); InsertInArray(тМЕСНРМ, xx, "");
             InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тДОПИМЯ, xx, ""); InsertInArray(тДАТКОН, xx, ""); InsertInArray(тНФАТИП, xx, "");
             InsertInArray(тНЕТАМТ, xx, НетСумАмт);
             kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
           fi;
           if ordГРП=7 and valKГР7<>"":
             jj=SearchInArray(тSRTFLD, valKГР7, True, 1);
             if jj>0: -- накапливаем результат по разделу
               xx=jj;
               тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
               тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
               тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
               тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
               if тНЕТАМТ[xx] and not НетСумАмт: тНЕТАМТ[xx]=False; fi; -- анализ появилась ли в суммировании подитога амортизация
             else -- добавление нового узла иерархии
               xx=InsertInArraySort(тSRTFLD, valKГР7);
               Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY7, xx, True, VconstНФА100П, VconstНФА_ИНВ);
               if Value="": Value=valFLD7; 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(тНФАСЧ6, xx, ""); InsertInArray(тСРКФКТ, xx, "");
               InsertInArray(тСУМОСТ, xx, OST);   InsertInArray(тНФАГРК, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТПРН, xx, ""); InsertInArray(тСРКОСТ, xx, "");
               InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАГРИ, xx, ""); InsertInArray(тДОПКОД, xx, ""); InsertInArray(тДАТЭКС, xx, ""); InsertInArray(тМЕСНРМ, xx, "");
               InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тДОПИМЯ, xx, ""); InsertInArray(тДАТКОН, xx, ""); InsertInArray(тНФАТИП, xx, "");
               InsertInArray(тНЕТАМТ, xx, НетСумАмт);
               kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
             fi;
           fi;
         fi; --valKEY7<>"" and fldKEY7<>""
         if valKEY8<>"" and fldKEY8<>"":
           jj=SearchInArray(тSRTFLD, valKEY8, True, 1);
           if jj>0: -- накапливаем результат по разделу
             xx=jj;
             тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
             тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
             тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
             тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
             if тНЕТАМТ[xx] and not НетСумАмт: тНЕТАМТ[xx]=False; fi; -- анализ появилась ли в суммировании подитога амортизация
           else -- добавление нового узла иерархии
             xx=InsertInArraySort(тSRTFLD, valKEY8);
             Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY8, xx, False, VconstНФА100П, VconstНФА_ИНВ);
             if Value="": Value=valFLD8; 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(тНФАСЧ6, xx, ""); InsertInArray(тСРКФКТ, xx, "");
             InsertInArray(тСУМОСТ, xx, OST);   InsertInArray(тНФАГРК, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТПРН, xx, ""); InsertInArray(тСРКОСТ, xx, "");
             InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАГРИ, xx, ""); InsertInArray(тДОПКОД, xx, ""); InsertInArray(тДАТЭКС, xx, ""); InsertInArray(тМЕСНРМ, xx, "");
             InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тДОПИМЯ, xx, ""); InsertInArray(тДАТКОН, xx, ""); InsertInArray(тНФАТИП, xx, "");
             InsertInArray(тНЕТАМТ, xx, НетСумАмт);
             kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
           fi;
           if ordГРП=8 and valKГР8<>"":
             jj=SearchInArray(тSRTFLD, valKГР8, True, 1);
             if jj>0: -- накапливаем результат по разделу
               xx=jj;
               тКОЛНФА[xx]=тКОЛНФА[xx]+KOL;
               тСУМБАЛ[xx]=тСУМБАЛ[xx]+SUM;
               тСУМАМТ[xx]=тСУМАМТ[xx]+AMT;
               тСУМОСТ[xx]=тСУМОСТ[xx]+OST;
               if тНЕТАМТ[xx] and not НетСумАмт: тНЕТАМТ[xx]=False; fi; -- анализ появилась ли в суммировании подитога амортизация
             else -- добавление нового узла иерархии
               xx=InsertInArraySort(тSRTFLD, valKГР8);
               Value=ВзятьИмяПараметраИерархическойГруппы(fldKEY8, xx, True, VconstНФА100П, VconstНФА_ИНВ);
               if Value="": Value=valFLD8; 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(тНФАСЧ6, xx, ""); InsertInArray(тСРКФКТ, xx, "");
               InsertInArray(тСУМОСТ, xx, OST);   InsertInArray(тНФАГРК, xx, ""); InsertInArray(тМХЭИМЯ, xx, ""); InsertInArray(тДАТПРН, xx, ""); InsertInArray(тСРКОСТ, xx, "");
               InsertInArray(тНФАКОД, xx, "");    InsertInArray(тНФАГРИ, xx, ""); InsertInArray(тДОПКОД, xx, ""); InsertInArray(тДАТЭКС, xx, ""); InsertInArray(тМЕСНРМ, xx, "");
               InsertInArray(тНФАИМЯ, xx, Value); InsertInArray(тНФАЕДИ, xx, ""); InsertInArray(тДОПИМЯ, xx, ""); InsertInArray(тДАТКОН, xx, ""); InsertInArray(тНФАТИП, xx, "");
               InsertInArray(тНЕТАМТ, xx, НетСумАмт);
               kk=kk+1; -- сдвинулись на единицу в связи с добавлением нового узла иерархии
             fi;
           fi;
         fi; --valKEY8<>"" and fldKEY8<>""
       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;

Func СтрокаЦифрВедомости(valБАЛ:Numeric; valАМТ:Numeric; valОСТ:Numeric; рисуемX:Logical; asHdr:Logical) :String;
var tmp1, tmp2, tmp3 :String;
var мнжSpace :Integer;
 if asHdr: мнжSpace=16; else мнжSpace=16; fi;
 tmp1=Trim(Format("%17.2N", valБАЛ));
 tmp2=if(рисуемX, "X"+RepStr(" ", мнжSpace), Trim(Format("%17.2N", valАМТ)));
 tmp3=if(рисуемX, "X"+RepStr(" ", мнжSpace), Trim(Format("%17.2N", valОСТ)));
 ^(tmp1+Chr(13)+tmp2+Chr(13)+tmp3+" ");
end;

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

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

 нетАМТ = тНЕТАМТ[Row];
 LnFn="ъ"+Chr(183)+"ъ";
 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, "#"));
 valKey7=Trim(ExtractWord(7, MskSort, "#"));
 valKey8=Trim(ExtractWord(8, MskSort, "#"));
 valKey9=Trim(ExtractWord(9, MskSort, "#"));

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

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

 Height=asInteger(СекцWorkДТ.Row(Row, RowHeight, ""));
 if Round(Height/50, 0)>1: Height=50; fi;
 KolStrok1=asInteger(СекцWorkДТ.Cell(Row, OffsetCol+01, CellLinesCount, strHeader));
 Цифры=СтрокаЦифрВедомости(тСУМБАЛ[Row], тСУМАМТ[Row], тСУМОСТ[Row], нетАМТ, True);
 KolStrok2=asInteger(СекцWorkДТ.Cell(Row, OffsetCol+11, CellLinesCount, Цифры));
 KolStrok=Max(KolStrok1, KolStrok2);
 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+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, 2);
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellBorder, "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellWrap, True);
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellContents,  Trim(КоличествоТочно_Текстом(тКОЛНФА[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, 1);
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellBorder, "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellWrap, True);
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellContents,  Цифры);

 -- Итоговая таблица 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(нетАМТ, 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(нетАМТ, "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(нетАМТ, 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(нетАМТ, "X", Format("%17.2N", тСУМОСТ[Row])));

end;

Proc СформироватьСтрокуДанных(Row:Integer; Iter:Integer);
var OffsetCol, Height, KolStrok, KolStrok1, KolStrok2, KolStrok3, KolStrok4, KolStrok5 :Integer;
var Value, tmp1, tmp2, tmp3, Цифры :String;
var нетАМТ, FF :Logical;

 нетАМТ = тНЕТАМТ[Row];
 OffsetCol=1;
 Height=asInteger(СекцWorkДТ.Row(Row, RowHeight, ""));
 if Round(Height/50, 0)>1: Height=50; fi;

 if flgТолькоНмн:
   Value=тНФАИМЯ[Row];
 else
   Value=тНФАКОД[Row]+Chr(13)+тНФАИМЯ[Row];
 fi;

 KolStrok1=asInteger(СекцWorkДТ.Cell(Row, OffsetCol+02, CellLinesCount, Value));

 tmp1=тНФАИНВ[Row]; if tmp1="> не присвоен": tmp1=""; fi;
 if flgТолькоИнв:
   tmp2="";
   tmp3="";
 else
   tmp2=тНФАУЧН[Row]; if tmp2="> не присвоен": tmp2=""; fi;
   tmp3=тНФАЗВД[Row]; if tmp3="> не присвоен": tmp3=""; fi;
 fi;

 Value=tmp1+Chr(13)+tmp2+Chr(13)+tmp3;
 KolStrok2=asInteger(СекцWorkДТ.Cell(Row, OffsetCol+03, CellLinesCount, Value));

 Value=тМОЛКОД[Row]+Chr(13)+тМОЛИМЯ[Row];
 KolStrok3=asInteger(СекцWorkДТ.Cell(Row, OffsetCol+08, CellLinesCount, Value));

 Value=тМХЭКОД[Row]+Chr(13)+тМХЭИМЯ[Row];
 KolStrok4=asInteger(СекцWorkДТ.Cell(Row, OffsetCol+09, CellLinesCount, Value));

 Цифры=СтрокаЦифрВедомости(тСУМБАЛ[Row], тСУМАМТ[Row], тСУМОСТ[Row], нетАМТ, False);
 KolStrok5=asInteger(СекцWorkДТ.Cell(Row, OffsetCol+11, CellLinesCount, Цифры));

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

 Секц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]));

 Секц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  , tmp1+Chr(13)+tmp2+Chr(13)+tmp3); -- Инвентырный и другие номера

 if Match(тНФАКБК[Row], "???.????.???????.???"):
   tmp1=тНФАСЧ6[Row]+Chr(13)+SubStr(тНФАКБК[Row], 1, 9)+Chr(13)+тМЕСНРМ[Row];
   tmp2=ВзятьИсточникСредств_Кор(тНФАИСТ[Row])+Chr(13)+SubStr(тНФАКБК[Row], 10, 11)+Chr(13)+тНФАОКФ[Row];
   FF=True;
 else
   tmp1=тНФАСЧ6[Row]+Chr(13)+Chr(13)+тМЕСНРМ[Row];
   tmp2=ВзятьИсточникСредств_Кор(тНФАИСТ[Row])+Chr(13)+Chr(13)+тНФАОКФ[Row];
   FF=False;
 fi;

 Секц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    , if(FF, "1,1,0,1", "1,1,1,1"));
 СекцWorkДТ.Cell(Row, OffsetCol+04, CellWrap      , True);
 СекцWorkДТ.Cell(Row, OffsetCol+04, CellContents  , tmp1);

 Секц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, "0,1,1,1", "1,1,1,1"));
 СекцWorkДТ.Cell(Row, OffsetCol+05, CellWrap      , True);
 СекцWorkДТ.Cell(Row, OffsetCol+05, CellContents  , tmp2);

 СекцWorkДТ.Cell(Row, OffsetCol+06, CellFontStyle , 0);
 СекцWorkДТ.Cell(Row, OffsetCol+06, CellFontSize  , 7);
 Секц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    , "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+06, CellWrap      , True);
 СекцWorkДТ.Cell(Row, OffsetCol+06, CellContents  , тДАТПРН[Row]+Chr(13)+тДАТЭКС[Row]+Chr(13)+тДАТКОН[Row]+" ");

 СекцWorkДТ.Cell(Row, OffsetCol+07, CellFontStyle , 0);
 СекцWorkДТ.Cell(Row, OffsetCol+07, CellFontSize  , 7);
 СекцWorkДТ.Cell(Row, OffsetCol+07, CellFontColor , coBlack);
 СекцWorkДТ.Cell(Row, OffsetCol+07, CellBgColor   , coTransparent);
 СекцWorkДТ.Cell(Row, OffsetCol+07, CellAlignment , 2);
 Секц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]+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 , 0);
 СекцWorkДТ.Cell(Row, OffsetCol+09, CellBorder    , "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+09, CellWrap      , True);
 СекцWorkДТ.Cell(Row, OffsetCol+09, CellContents  , тМХЭКОД[Row]+Chr(13)+тМХЭИМЯ[Row]);

 Value=Trim(КоличествоТочно_Текстом(тКОЛНФА[Row]))+Chr(13)+Trim(тНФАЕДИ[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 , 2);
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellBorder    , "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellWrap      , True);
 СекцWorkДТ.Cell(Row, OffsetCol+10, CellContents  , Value);

 Секц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 , 1);
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellBorder    , "1,1,1,1");
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellWrap      , True);
 СекцWorkДТ.Cell(Row, OffsetCol+11, CellContents  , Цифры);

end;

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

 len=LengthOfArray(тSRTFLD);
 if len>0:
   Позиции=len;
   Режим=AutoRefresh;
   ToggleAutoRefresh(False);
   ShowProgress(len, "Формирование ведомости ОС...");
   Try
     ФормированиеЦветовЗаголовков(intСхемаЦветов);
     ColorH1=BufInt[1];
     ColorH2=BufInt[2];
     ColorH3=BufInt[3];
     ColorH4=BufInt[4];
     ColorH5=BufInt[5];
     ColorH6=BufInt[6];
     ColorH7=BufInt[7];
     ColorH8=BufInt[8];

     Iter=0;
     Секц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, ColorH6, ColorH7, ColorH8, СтрокиТ5);
       else
         Iter=Iter+1;
         СформироватьСтрокуДанных(ii, Iter);
       fi;
     od;
     --
   Finally
     CloseProgress;
     ToggleAutoRefresh(Режим);
   end;
 fi;
 --
 ValidateОтчетSection(False);
end;

Proc РасчетСпискаНФА;
var Work, ftrАНА101, ftrДОП101, ftrМОЛ101, ftrМХЭ101, ftrНФА101 :Logical;
var MaskAcc101, MaskAna101 :String;
var chislo, WorkConstНФА100П, WorkConstНФА_ИНВ :Numeric;
var начало, num :Integer;
 начало=Time;
 -- Проверка заполнения
 if not ПроверкаЗаполнения: Exit; fi;
 отчАНА=Trim(отчАНА);
 отчНФА=Trim(отчНФА);
 отчДОП=Trim(отчДОП);
 отчМОЛ=Trim(отчМОЛ);
 отчМХЭ=Trim(отчМХЭ);
 отчГРП=Trim(отчГРП);
 --
 MaskAcc101=""; MaskAna101=""; ftrАНА101=False; ftrДОП101=False; ftrМОЛ101=False; ftrМХЭ101=False; ftrНФА101=False;
 -- Константы НФА
 Try chislo=Com_Var("ОС_100"  , ДатОпер-1); Except chislo=0.00; end;
 if not chislo>0: if (ДатОпер-1)>=1.1.2011: chislo=40000; else chislo=20000; fi; fi;
 WorkConstНФА100П=chislo;
 Try chislo=Com_Var("ОС_РАСХ" , ДатОпер-1); Except chislo=0.00; end;
 if not chislo>0: if (ДатОпер-1)>=1.1.2009: chislo=3000;  else chislo=1000;  fi; fi;
 WorkConstНФА_ИНВ=chislo;
 --
 MaskAcc101=ИтоговаяМаскаСчета(currИст, отчСЧТ, отчКБК, if(currAcc=1 or currAcc=2, True, False), if(currAcc=1 or currAcc=3, True, False));
 Work=False;
 if Abs(Turn("+("+MaskAcc101+"){~НФА.*}", 1.1.100, ДатОпер))>0 or Abs(Turn("-("+MaskAcc101+"){~НФА.*}", 1.1.100, ДатОпер))>0:
    num=Enquiry("Выберите действие...", "Обнаружены проводки^Mна "+отчСЧТ+" счетах^Mнепомеченные справочником НФА!", "Проводки в отчет;Отмена;Игнорировать", mtError);
    if num=1:
      Report(PlanVar("НФА")+"\ОТЧЕТЫ\НФАОТЧ2007.lst"+"|Непомеченные_НФА", 1.1.100, ДатОпер, MaskAcc101, "~НФА.*");
      Exit;
    |  num=3: Work=True;
    else Exit;
    fi;
 fi;
 -- Анализ фильтров по аналитике для 101 счетов
 MaskAna101=АнализФильтраАналитики(MaskAcc101, Work, False);
 if MaskAna101=" ": Exit; fi;
 ftrНФА101 = BufFlag[1];
 ftrМОЛ101 = BufFlag[2];
 ftrМХЭ101 = BufFlag[3];
 ftrДОП101 = BufFlag[4];
 ftrАНА101 = BufFlag[5];
 -- *****************
 -- * ОСНОВНОЙ БЛОК *
 -- *****************
 Work=False;
 -- Поиск данных
 Work=ПоискДанных_ИщемДанные(ДатОпер, if(currAcc=1 or currAcc=2, True, False), if(currAcc=1 or currAcc=3, True, False), MaskAcc101, MaskAna101, ftrНФА101, ftrМОЛ101, ftrМХЭ101, ftrДОП101, ftrАНА101, WorkConstНФА100П, WorkConstНФА_ИНВ);
 SetFLGСлужИнф(False);
 -- Построение отчета
 if Work:
   ПодсчетВставкаПромежуточныхИтогов(WorkConstНФА100П, WorkConstНФА_ИНВ);
   ПостроениеОтчета;
   if Позиции>0: Message("Расчет завершен!^MВремя работы - "+TimeToHMSstring(Time-начало), mtInformation); fi;
 fi;
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 ЗапомнитьЗначения;
 oldsИст   = currИст;
 oldsAcc   = currAcc;
 oldDate   = ДатОпер;
 OldОтчАНА = ОтчАНА;
 OldЦенаОт = БМЦеныЕЦот;
 OldЦенаДо = БМЦеныЕЦдо;
end;

Proc ВнешнийВид_ФтрПоСумме_ЦенЕдн(Разрешено:Logical; ЕстьИнтервал:Logical);

 Секц_ЦенБМ.Row(2, RowVisible, Разрешено);
 Секц_ЦенБМ.Row(3, RowVisible, Разрешено);
 Секц_ЦенБМ.Row(4, RowVisible, Разрешено);

 if Разрешено:

   if ЕстьИнтервал:

     Секц_ЦенБМ.Cell(3, 4, CellContents,  "ОТ (включая сумму)", True);

     Секц_ЦенБМ.Cell(3, 6, CellFieldType, cftNumericField);
     Секц_ЦенБМ.Cell(3, 6, CellFontColor, coBlack);
     Секц_ЦенБМ.Cell(3, 6, CellBgColor,   coAqua);
     Секц_ЦенБМ.Cell(3, 6, CellBorder,    "1,1,1,1");
     Секц_ЦенБМ.Cell(3, 6, CellContents,  "БМЦеныЕЦот");
     Секц_ЦенБМ.Cell(3, 6, CellFormat,    ",##0.00;;-");
     Секц_ЦенБМ.Cell(3, 6, CellAlignment, 1);

     Секц_ЦенБМ.Cell(3, 7, CellContents,  "ДО (не включая)", True);

     Секц_ЦенБМ.Cell(3, 8, CellFieldType, cftNumericField);
     Секц_ЦенБМ.Cell(3, 8, CellFontColor, coBlack);
     Секц_ЦенБМ.Cell(3, 8, CellBgColor,   coAqua);
     Секц_ЦенБМ.Cell(3, 8, CellBorder,    "1,1,1,1");
     Секц_ЦенБМ.Cell(3, 8, CellContents,  "БМЦеныЕЦдо");
     Секц_ЦенБМ.Cell(3, 8, CellFormat,    ",##0.00;;-");
     Секц_ЦенБМ.Cell(3, 8, CellAlignment, 1);

   else

     Секц_ЦенБМ.Cell(3, 4, CellContents,  "", True);

     Секц_ЦенБМ.Cell(3, 6, CellFieldType, cftNumericField);
     Секц_ЦенБМ.Cell(3, 6, CellFontColor, coBlack);
     Секц_ЦенБМ.Cell(3, 6, CellBgColor,   coAqua);
     Секц_ЦенБМ.Cell(3, 6, CellBorder,    "1,1,1,1");
     Секц_ЦенБМ.Cell(3, 6, CellContents,  "БМЦеныЕЦот");
     Секц_ЦенБМ.Cell(3, 6, CellFormat,    ",##0.00;;-");
     Секц_ЦенБМ.Cell(3, 6, CellAlignment, 1);

     Секц_ЦенБМ.Cell(3, 7, CellContents,  "", True);

     Секц_ЦенБМ.Cell(3, 8, CellFieldType, cftStaticText);
     Секц_ЦенБМ.Cell(3, 8, CellFontColor, coBlack);
     Секц_ЦенБМ.Cell(3, 8, CellBgColor,   coTransparent);
     Секц_ЦенБМ.Cell(3, 8, CellBorder,    "0,0,0,0");
     Секц_ЦенБМ.Cell(3, 8, CellContents,  "", True);
     Секц_ЦенБМ.Cell(3, 8, CellFormat,    "");
     Секц_ЦенБМ.Cell(3, 8, CellAlignment, 2);

   fi; --ЕстьИнтервал

 else

   БМЦеныЕЦот=0.00; БМЦеныЕЦдо=0.00; OldЦенаОт=0.00; OldЦенаДо=0.00; flgSgnЕЦ=0;

 fi; --Разрешено

end;

Func ВыбратьФлагСравненияЦен(ТекущийФлаг:Integer) :Integer;
var num:Integer;
 ClearVariable(Buf);
 Buf[01]= "меньше [ < ]"            ;
 Buf[02]= "меньше или равно [ <= ]" ;
 Buf[03]= "больше [ > ]"            ;
 Buf[04]= "больше или равно [ >= ]" ;
 Buf[05]= "равно [ = ]"             ;
 Buf[06]= "не равно [ <> ]"         ;
 Buf[07]= "интервал [ {..} ]"       ;
 num=Alternate("Выберите знак сравнения цен", Buf, -1, ТекущийФлаг, 12);
 if not num>0: ^ТекущийФлаг; else ^num; fi;
end;

Proc ЗнакСравненияЦен(FieldREF:String);
var OldValue, NewValue :Integer;
var SaveValue :Logical;
var FieldFLG :String;
 SaveValue=False; FieldFLG=SubStr(FieldREF, 1, Length(FieldREF)-1);
 OldValue=GetVariableI(FieldFLG);
 NewValue=ВыбратьФлагСравненияЦен(OldValue);
 if NewValue<>OldValue: if not ОтменитьИзмененияУсловийОтчета: SaveValue=True; fi; fi;
 if SaveValue:
   PutVariableI(FieldFLG, NewValue);
   ВнешнийВид_ФтрПоСумме_ЦенЕдн(True, NewValue=7);
 fi;
end;

Proc ПрименяемФильтрЦен(FieldREF:String; onExit:Logical);
var OldValue, NewValue, SaveValue :Logical;
var FieldFLG :String;
 SaveValue=False;
 FieldFLG=SubStr(FieldREF, 1, Length(FieldREF)-1);
 Try OldValue=GetVariableL(FieldFLG); Except end;
 if onExit: NewValue=False; else NewValue = not OldValue; fi;
 if NewValue<>OldValue: if not ОтменитьИзмененияУсловийОтчета: SaveValue=True; fi; fi;
 if SaveValue:
   PutVariableL(FieldFLG, NewValue);
   ВнешнийВид_ФтрПоСумме_ЦенЕдн(NewValue, flgSgnЕЦ=7);
 fi;
end;

Proc Инициализация;
var chislo1, chislo2 :Numeric;
var tmp1 ,tmp2 :String;
var ddWork :Date;
 ddWork=if(ДатОпер>1.1.100, ДатОпер, ToDay);
 Try chislo1=Com_Var("ОС_РАСХ" , ddWork-1); Except chislo1=0.00; end;
 Try chislo2=Com_Var("ОС_100"  , ddWork-1); Except chislo2=0.00; end;
 if chislo1=0.00: if (ddWork-1)>=1.1.2009: chislo1= 3000.00; else chislo1= 1000.00; fi; fi;
 if chislo2=0.00: if (ddWork-1)>=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)+"  сортировки";
 --
 if not Позиции>0:
   if not flgНФАамт and not flgНФА100 and not flgНФАбез: flgНФАамт=True; flgНФА100=True; flgНФАбез=True; fi;
   if Trim(Иерархия)="":
     flgСЧТ=True;
     flgКБК=False;
     flgИСТ=False;
     flgМОЛ=True;
     flgМХЭ=False;
     flgГРП=True;
     flgДОП=False;
     flgНФА=False;
     Иерархия="<МОЛ> <ГРП> <СЧТ>";
     отчСЧТ="101.?? 102.?0"; флагиACC="1111111110000000";
     отчКБК="";
     valКБК="";
     отчМОЛ=""; nmsМОЛ="";
     отчМХЭ=""; nmsМХЭ="";
     отчДОП=""; nmsДОП="";
     отчНФА=""; nmsНФА="";
     keyГРП=""; отчГРП=""; nmsГРП=""; LastGRP_key="{0}"; LastGRP_num=0;
     ОчиститьГРПНФА;
     ОтчАНА=""; OldОтчАНА="";
     intРежимСохр   = 1;
     intСхемаЦветов = 1;
     useЦеныЕЦ      = False;
   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;
   flgXLSнетЕИ    = False;
   flgSaveExport  = True;
   flgЧиститьАна  = True;
   flgСложнДаты   = False;
   flgЗавНомЗаб   = False;
   flgВыдСчтНФА   = False;
 fi;
 --
 Счета_ВнешнийВид;
 ВнешнийВид_Забаланс(if(currAcc<>2, True, False));
 ВнешнийВид_ФильтрДопСпр; -- перечитывается также и порядок групп
 if not (Abs(БМЦеныЕЦот)+Abs(БМЦеныЕЦдо))>0.00: useЦеныЕЦ=False; fi;
 ВнешнийВид_ФтрПоСумме_ЦенЕдн(useЦеныЕЦ, flgSgnЕЦ=7);
 --
 ПечатьИтоговыхТаблиц(flgПечИтгТаб1, flgПечИтгТаб2, flgПечИтгТаб3, flgПечИтгТаб4, flgПечИтгТаб5, flgОтделТабл, flgПечНовСтр);
 --
 ЗапомнитьЗначения;
 ValidateSection(False, False);
 --
 ВзятьРеквизиты(УЧР_REC, True);
end;

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

-- Экспорт в EXCEL

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

 LnFn="ъ"+Chr(183)+"ъ";

 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, "#"));
 valKey7=Trim(ExtractWord(7, MskSort, "#"));
 valKey8=Trim(ExtractWord(8, MskSort, "#"));
 valKey9=Trim(ExtractWord(9, MskSort, "#"));

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

 if valKey1<>""  and valKey2=""  and valKey3=""  and valKey4=""  and valKey5=""  and valKey6=""  and valKey7=""  and valKey8=""  and (valKey9=LnFn or valKey9=""): lvlIndent=0; ColorCell=цвH1;
 |  valKey1<>""  and valKey2<>"" and valKey3=""  and valKey4=""  and valKey5=""  and valKey6=""  and valKey7=""  and valKey8=""  and (valKey9=LnFn or valKey9=""): lvlIndent=1; ColorCell=цвH2;
 |  valKey1<>""  and valKey2<>"" and valKey3<>"" and valKey4=""  and valKey5=""  and valKey6=""  and valKey7=""  and valKey8=""  and (valKey9=LnFn or valKey9=""): lvlIndent=2; ColorCell=цвH3;
 |  valKey1<>""  and valKey2<>"" and valKey3<>"" and valKey4<>"" and valKey5=""  and valKey6=""  and valKey7=""  and valKey8=""  and (valKey9=LnFn or valKey9=""): lvlIndent=3; ColorCell=цвH4;
 |  valKey1<>""  and valKey2<>"" and valKey3<>"" and valKey4<>"" and valKey5<>"" and valKey6=""  and valKey7=""  and valKey8=""  and (valKey9=LnFn or valKey9=""): lvlIndent=4; ColorCell=цвH5;
 |  valKey1<>""  and valKey2<>"" and valKey3<>"" and valKey4<>"" and valKey5<>"" and valKey6<>"" and valKey7=""  and valKey8=""  and (valKey9=LnFn or valKey9=""): lvlIndent=5; ColorCell=цвH6;
 |  valKey1<>""  and valKey2<>"" and valKey3<>"" and valKey4<>"" and valKey5<>"" and valKey6<>"" and valKey7<>"" and valKey8=""  and (valKey9=LnFn or valKey9=""): lvlIndent=6; ColorCell=цвH7;
 |  valKey1<>""  and valKey2<>"" and valKey3<>"" and valKey4<>"" and valKey5<>"" and valKey6<>"" and valKey7<>"" and valKey8<>"" and (valKey9=LnFn or valKey9=""): lvlIndent=7; ColorCell=цвH8;
 else lvlIndent=0; ColorCell=0;
 fi;

 RowTbl=xlsRepШапка+Row*3;

 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl-2, 1, strHeader);
 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(refSheet, RowTbl-2, 1, RowTbl, 09);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-2, 1, РАБ.EXCEL.xlLeft, lvlIndent, РАБ.EXCEL.xlTop, True, "Arial", 9, 0, True, True, False, ColorCell, False);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(refSheet, RowTbl-2, 1, RowTbl, 10, True, True, True, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);

 if тКОЛНФА[Row]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(refSheet, RowTbl-2, 10, тКОЛНФА[Row], locDS, locTS); fi;
 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(refSheet, RowTbl-2, 10, RowTbl, 10);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-2, 10, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, True, False, ColorCell, False);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(refSheet, RowTbl-2, 10, RowTbl, 10, True, True, True, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);

 if тСУМБАЛ[Row]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(refSheet, RowTbl-2, 11, тСУМБАЛ[Row], locDS, locTS); fi;
 if тСУМАМТ[Row]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(refSheet, RowTbl-1, 11, тСУМАМТ[Row], locDS, locTS); fi;
 if тСУМОСТ[Row]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(refSheet, RowTbl  , 11, тСУМОСТ[Row], locDS, locTS); fi;
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-2, 11, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, True, False, ColorCell, False);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-1, 11, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, True, False, ColorCell, False);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl  , 11, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, True, False, ColorCell, False);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(refSheet, RowTbl-2, 11, RowTbl, 11, True, True, True, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);

end;

Proc ЭкспортСтрокиДанных(refSheet:AutoObject; Row:Integer; Iter:Integer; locDS:String; locTS:String);
var tmp1, tmp2, tmp3 :String;
var RowTbl :Integer;

 RowTbl=xlsRepШапка+Row*3;

 tmp1=Str(Iter);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl-2, 1, tmp1);
 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(refSheet, RowTbl-2, 1, RowTbl, 1);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-2, 1, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 РАБ.EXCEL.ПовернутьТекст(refSheet, RowTbl-2, 1, 90, False);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(refSheet, RowTbl-2, 1, RowTbl, 1, True, True, True, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);

 if flgТолькоНмн:
   tmp1=тНФАИМЯ[Row];
 else
   tmp1=тНФАКОД[Row]+Chr(10)+тНФАИМЯ[Row];
 fi;
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl-2, 2, tmp1);
 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(refSheet, RowTbl-2, 2, RowTbl, 2);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-2, 2, РАБ.EXCEL.xlLeft, 0, РАБ.EXCEL.xlTop, True, "Arial", 8, 0, True, False, False, 0, True);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(refSheet, RowTbl-2, 2, RowTbl, 2, True, True, True, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);

 tmp1=тНФАИНВ[Row]; if tmp1="> не присвоен": tmp1=""; fi;
 if flgТолькоИнв:
   tmp2="";
   tmp3="";
 else
   tmp2=тНФАУЧН[Row]; if tmp2="> не присвоен": tmp2=""; fi;
   tmp3=тНФАЗВД[Row]; if tmp3="> не присвоен": tmp3=""; fi;
 fi;

 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl-2, 3, tmp1);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-2, 3, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl-1, 3, tmp2);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-1, 3, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl-0, 3, tmp3);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-0, 3, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(refSheet, RowTbl-2, 3, RowTbl, 3, True, True, True, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);

 tmp1=тНФАСЧ6[Row];
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl-2, 4, tmp1);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-2, 4, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 tmp1=ВзятьИсточникСредств_Кор(тНФАИСТ[Row]);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl-2, 5, tmp1);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-2, 5, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 tmp1=тНФАКБК[Row];
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl-1, 4, tmp1);
 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(refSheet, RowTbl-1, 4, RowTbl-1, 5);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-1, 4, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 tmp1=тМЕСНРМ[Row];
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl  , 4, tmp1);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl  , 4, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 tmp1=тНФАОКФ[Row];
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl  , 5, tmp1);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl  , 5, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(refSheet, RowTbl-2, 4, RowTbl, 5, True, True, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);

 tmp1=тДАТПРН[Row];
 tmp2=тДАТЭКС[Row];
 tmp3=тДАТКОН[Row];
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl-2, 6, tmp1);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-2, 6, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl-1, 6, tmp2);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-1, 6, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl-0, 6, tmp3);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-0, 6, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(refSheet, RowTbl-2, 6, RowTbl, 6, True, True, True, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);

 tmp1=тСРКПЛЗ[Row];
 tmp2=тСРКФКТ[Row];
 tmp3=тСРКОСТ[Row];
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl-2, 7, tmp1);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-2, 7, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl-1, 7, tmp2);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-1, 7, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl-0, 7, tmp3);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-0, 7, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(refSheet, RowTbl-2, 7, RowTbl, 7, True, True, True, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);

 tmp1=тМОЛКОД[Row]+Chr(10)+тМОЛИМЯ[Row];
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl-2, 8, tmp1);
 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(refSheet, RowTbl-2, 8, RowTbl, 8);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-2, 8, РАБ.EXCEL.xlLeft, 0, РАБ.EXCEL.xlTop, True, "Arial", 8, 0, True, False, False, 0, True);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(refSheet, RowTbl-2, 8, RowTbl, 8, True, True, True, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);

 tmp1=тМХЭКОД[Row]+Chr(10)+тМХЭИМЯ[Row];
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl-2, 9, tmp1);
 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(refSheet, RowTbl-2, 9, RowTbl, 9);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-2, 9, РАБ.EXCEL.xlLeft, 0, РАБ.EXCEL.xlTop, True, "Arial", 8, 0, True, False, False, 0, True);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(refSheet, RowTbl-2, 9, RowTbl, 9, True, True, True, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);

 if flgXLSнетЕИ:
   if тКОЛНФА[Row]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(refSheet, RowTbl-2, 10, тКОЛНФА[Row], locDS, locTS); fi;
   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(refSheet, RowTbl-2, 10, RowTbl, 10);
   РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-2, 10, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(refSheet, RowTbl-2, 10, RowTbl, 10, True, True, True, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
 else
   tmp1=тНФАЕДИ[Row];
   if тКОЛНФА[Row]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(refSheet, RowTbl-2, 10, тКОЛНФА[Row], locDS, locTS); fi;
   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(refSheet, RowTbl-2, 10, RowTbl-1, 10);
   РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-2, 10, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуТекст(refSheet, RowTbl  , 10, tmp1);
   РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl  , 10, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(refSheet, RowTbl-2, 10, RowTbl, 10, True, True, True, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
 fi;

 if тСУМБАЛ[Row]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(refSheet, RowTbl-2, 11, тСУМБАЛ[Row], locDS, locTS); fi;
 if тСУМАМТ[Row]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(refSheet, RowTbl-1, 11, тСУМАМТ[Row], locDS, locTS); fi;
 if тСУМОСТ[Row]<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(refSheet, RowTbl  , 11, тСУМОСТ[Row], locDS, locTS); fi;
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-2, 11, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl-1, 11, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 РАБ.EXCEL.ФорматироватьЯчейку(refSheet, RowTbl  , 11, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, 0, True);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(refSheet, RowTbl-2, 11, RowTbl, 11, True, True, True, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);

end;

Proc УстановитьКолонтитулы(objSheet:AutoObject; flgRusExcel:Logical);
var xlsPage :AutoObject;
 xlsPage=AsAutoObject(objSheet.PageSetup);
 Try
   if flgRusExcel:
     xlsPage.LeftHeader  = '&"Arial,обычный"&7'+TimeCreationRep;
     xlsPage.RightFooter = '&"Arial,полужирный"&8Страница &С из &К';
   else
     xlsPage.LeftHeader  = '&"Arial,normal"&7'+TimeCreationRep;
     xlsPage.RightFooter = '&"Arial,bold"&8Страница &P из &N';
   fi;
 Finally
   ClearVariable(xlsPage);
 end;
end;

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

 РАБ.EXCEL.УстановитьВсеГраницыДиапазона(objSheet, lenШапка+1, 3, lenШапка+num*3, 5, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазона(objSheet, lenШапка+1, 6, lenШапка+num*3, 6, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазона(objSheet, lenШапка+1, 7, lenШапка+num*3, 7, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
 -- Пишем итоговую строчку таблицы
 Iter=lenШапка+num*3;
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+1, 1, "И Т О Г О :");
 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(objSheet, Iter+1, 1, Iter+3, 1);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 1, РАБ.EXCEL.xlLeft, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+1, 2, "балансовая");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 2, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Times New Roman", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+2, 2, "амортизация");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 2, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Times New Roman", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+3, 2, "остаточная");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+3, 2, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Times New Roman", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 3, вСЧТСбалБ, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 3, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 3, вСЧТСамтБ, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 3, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+3, 3, вСЧТСостБ, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+3, 3, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 4, вСЧТСбалВ, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 4, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 4, вСЧТСамтВ, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 4, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+3, 4, вСЧТСостВ, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+3, 4, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 5, вСЧТСбалИ, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 5, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 5, вСЧТСамтИ, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 5, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+3, 5, вСЧТСостИ, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+3, 5, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 6, вСЧТСзаб, locDS, locTS);
 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(objSheet, Iter+1, 6, Iter+3, 6);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 6, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlTop, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 7, вСЧТСвсг, locDS, locTS);
 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(objSheet, Iter+1, 7, Iter+3, 7);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 7, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlTop, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(objSheet, Iter+1, 1, Iter+3, 7, True, True, True, True, True, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 3, Iter+3, 5, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 6, Iter+3, 6, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 7, Iter+3, 7, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);

end;

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

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

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

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

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

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

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

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

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

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

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

end;

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

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

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

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

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

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

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

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

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

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

 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 9, вСЧТФбалИ, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 9, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1,10, вСЧТФамтИ, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1,10, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1,11, вСЧТФостИ, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1,11, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(objSheet, Iter+1, 1, Iter+1, 11, True, True, True, True, True, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 3, Iter+1, 5, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 6, Iter+1, 8, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 9, Iter+1,11, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.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 ШиринаУжеЗадана:
   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(objSheet,  1, 16.0);
   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(objSheet,  2, 10.0);
   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(objSheet,  3, 12.0);
   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(objSheet,  4, 12.0);
   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(objSheet,  5, 12.0);
   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(objSheet,  6, 12.0);
   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(objSheet,  7, 12.0);
   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(objSheet,  8, 12.0);
   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(objSheet,  9, 12.0);
   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(objSheet, 10, 12.0);
   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(objSheet, 11, 12.0);
 fi;

 ddWork=if(ДАТОПЕР>1.1.100, ДАТОПЕР, ToDay);
 Try chislo1=Com_Var("ОС_РАСХ" , ddWork-1); Except chislo1=0.00; end;
 Try chislo2=Com_Var("ОС_100"  , ddWork-1); Except chislo2=0.00; end;
 if chislo1=0.00: if (ddWork-1)>=1.1.2009: chislo1= 3000.00; else chislo1= 1000.00; fi; fi;
 if chislo2=0.00: if (ddWork-1)>=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);

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

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

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

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

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

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

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

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

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

 -- Пишем данные таблицы
 lenШапка=3;
 num=LengthOfArray(иСЧТСкод);
 for ii=1 to num do
   Iter=offsetIter+lenШапка+ii*3-2;
   РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter, 1, иСЧТСкод[ii]);
   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(objSheet, Iter, 1, Iter+2, 1);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter, 1, РАБ.EXCEL.xlLeft, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, True, False, 0, True);
   --
   РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+0, 2, "балансовая");
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+0, 2, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Times New Roman", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+1, 2, иtxt_amt[ii]);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 2, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Times New Roman", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+2, 2, иtxt_ost[ii]);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 2, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Times New Roman", 8, 0, True, False, False, 0, True);
   --
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 3, иСЧТбалГР3_Б[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+0, 3, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 3, иСЧТамтГР3_Б[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 3, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 3, иСЧТостГР3_Б[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 3, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 4, иСЧТбалГР2_Б[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+0, 4, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 4, иСЧТамтГР2_Б[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 4, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 4, иСЧТостГР2_Б[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 4, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 5, иСЧТбалГР1_Б[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+0, 5, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+1, 5, Chr(151));
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 5, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+2, 5, Chr(151));
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 5, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 6, иСЧТбалГР3_В[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+0, 6, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 6, иСЧТамтГР3_В[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 6, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 6, иСЧТостГР3_В[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 6, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 7, иСЧТбалГР2_В[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+0, 7, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 7, иСЧТамтГР2_В[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 7, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 7, иСЧТостГР2_В[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 7, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 8, иСЧТбалГР1_В[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+0, 8, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+1, 8, Chr(151));
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 8, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+2, 8, Chr(151));
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 8, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+0, 9, иСЧТбалГР3_И[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+0, 9, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 9, иСЧТамтГР3_И[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 9, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 9, иСЧТостГР3_И[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 9, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+0,10, иСЧТбалГР2_И[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+0,10, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1,10, иСЧТамтГР2_И[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1,10, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+2,10, иСЧТостГР2_И[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2,10, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+0,11, иСЧТбалГР1_И[ii], locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+0,11, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+1,11, Chr(151));
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1,11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+2,11, Chr(151));
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2,11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, 0, True, False, False, 0, True);
   --
          РАБ.EXCEL.УстановитьВсеГраницыДиапазона(objSheet, Iter, 1, Iter+2, 2, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(objSheet, Iter, 3, Iter+2,11, True, True, True, True, True,  False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
 od;
 РАБ.EXCEL.УстановитьВсеГраницыДиапазона(objSheet, offsetIter+lenШапка+1, 3, offsetIter+lenШапка+num*3, 5, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазона(objSheet, offsetIter+lenШапка+1, 6, offsetIter+lenШапка+num*3, 8, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазона(objSheet, offsetIter+lenШапка+1, 9, offsetIter+lenШапка+num*3,11, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
 -- Пишем итоговую строчку таблицы
 Iter=offsetIter+lenШапка+num*3;
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+1, 1, "И Т О Г О :");
 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(objSheet, Iter+1, 1, Iter+3, 1);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 1, РАБ.EXCEL.xlLeft, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+1, 2, "балансовая");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 2, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Times New Roman", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+2, 2, "амортизация");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 2, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Times New Roman", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+3, 2, "остаточная");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+3, 2, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Times New Roman", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 3, вСЧТбалГР3_Б, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 3, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 3, вСЧТамтГР3_Б, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 3, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+3, 3, вСЧТостГР3_Б, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+3, 3, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 4, вСЧТбалГР2_Б, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 4, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 4, вСЧТамтГР2_Б, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 4, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+3, 4, вСЧТостГР2_Б, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+3, 4, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 5, вСЧТбалГР1_Б, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 5, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+2, 5, Chr(151));
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 5, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+3, 5, Chr(151));
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+3, 5, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 6, вСЧТбалГР3_В, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 6, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 6, вСЧТамтГР3_В, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 6, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+3, 6, вСЧТостГР3_В, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+3, 6, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 7, вСЧТбалГР2_В, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 7, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 7, вСЧТамтГР2_В, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 7, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+3, 7, вСЧТостГР2_В, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+3, 7, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 8, вСЧТбалГР1_В, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 8, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+2, 8, Chr(151));
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 8, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+3, 8, Chr(151));
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+3, 8, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1, 9, вСЧТбалГР3_И, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1, 9, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+2, 9, вСЧТамтГР3_И, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2, 9, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+3, 9, вСЧТостГР3_И, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+3, 9, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1,10, вСЧТбалГР2_И, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1,10, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+2,10, вСЧТамтГР2_И, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2,10, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+3,10, вСЧТостГР2_И, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+3,10, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, Iter+1,11, вСЧТбалГР1_И, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+1,11, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+2,11, Chr(151));
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+2,11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, Iter+3,11, Chr(151));
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, Iter+3,11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, False, False, Цвет(128, 128, 128), False);
 --
        РАБ.EXCEL.УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 1, Iter+3, 2, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(objSheet, Iter+1, 3, Iter+3,11, True, True, True, True, True, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
        РАБ.EXCEL.УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 3, Iter+3, 5, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
        РАБ.EXCEL.УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 6, Iter+3, 8, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
        РАБ.EXCEL.УстановитьВсеГраницыДиапазона(objSheet, Iter+1, 9, Iter+3,11, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
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 ЭкспортИтогТабл5(objSheet:AutoObject; locDS:String; locTS:String);
var numVal1, numVal2, numVal3 :Numeric;
var ii, Rows, lenШапка, ColorB :Integer;
var Value :String;
 РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(objSheet,  1, 100.0);
 РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(objSheet,  2,  13.0);
 РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(objSheet,  3,  13.0);
 РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(objSheet,  4,  13.0);
 -- Пишем заголовок
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, 1, 1, "Итоговая таблица "+Chr(185)+"5 к ведомости остатков ОС (промежуточные итоги)");
 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(objSheet, 1, 1, 1, 4);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, 1, 1, РАБ.EXCEL.xlLeft, 0, РАБ.EXCEL.xlCenter, False, "Times New Roman", 11, 0, True, False, True, 0, True);
 -- Пишем заголовки столбцов таблицы
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, 2, 1, "Строка промежуточного итога");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, 2, 1, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, 2, 2, "Сумма"+Chr(10)+"балансовая");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, 2, 2, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, True, False, Цвет(192, 192, 192), False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, 2, 3, "Сумма"+Chr(10)+"амортизации");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, 2, 3, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, True, False, Цвет(192, 192, 192), False);
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, 2, 4, "Сумма"+Chr(10)+"остаточная");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, 2, 4, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.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, "")));
   ColorB=asInteger(СекцТ5Д.Cell(ii, 2, CellBgColor, ""));
   РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, lenШапка+ii, 1, Value);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, lenШапка+ii, 1, РАБ.EXCEL.xlLeft, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, ColorB, False);
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, lenШапка+ii, 2, numVal1, locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, lenШапка+ii, 2, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlTop,   True, "Arial", 8, 0, True, False, False, ColorB, False);
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, lenШапка+ii, 3, numVal2, locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, lenШапка+ii, 3, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlTop,   True, "Arial", 8, 0, True, False, False, ColorB, False);
   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, lenШапка+ii, 4, numVal3, locDS, locTS);
   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, lenШапка+ii, 4, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlTop,   True, "Arial", 8, 0, True, False, False, ColorB, False);
 od;
 -- Пишем итоговую строчку таблицы
 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, lenШапка+Rows+1, 1, "И Т О Г О : ");
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, lenШапка+Rows+1, 1, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, lenШапка+Rows+1, 2, итгСУМБАЛвед, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, lenШапка+Rows+1, 2, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlTop,     True, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, lenШапка+Rows+1, 3, итгСУМАМТвед, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, lenШапка+Rows+1, 3, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlTop,     True, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, lenШапка+Rows+1, 4, итгСУМОСТвед, locDS, locTS);
 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, lenШапка+Rows+1, 4, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlTop,     True, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
 -- Устанавливаем границы
 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(objSheet, 2, 1, lenШапка+Rows+1, 4, True, True, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
end;

Proc ЭкспортВедомости_Excel;
var xlsApp, xlsBooks, xlsBook, xlsSheets, xlsSheet, xlsRng :AutoObject;
var начало, offRow, maxIterCount, kol, max_kol, len, Iter, ii, ColorH1, ColorH2, ColorH3, ColorH4, ColorH5, ColorH6, ColorH7, ColorH8 :Integer;
var NoError, rusExcel, ШиринуЗадали :Logical;
var localTS, localDS :String;

 начало=Time;
 NoError=True;
 maxIterCount=300;
 xlsApp=CreateAutoObject('Excel.Application');
 Try
   ShowProgress(0, "Подготовка...");
   Try
     kol=0;
     xlsApp.EnableEvents=False;   -- отключить события
     xlsApp.AutomationSecurity=3; -- отключить макросы
     --
     rusExcel=РАБ.EXCEL.РусскийExcel(xlsApp);
     localDS=asString(xlsApp.International[РАБ.EXCEL.xlDecimalSeparator]);
     localTS=asString(xlsApp.International[РАБ.EXCEL.xlThousandsSeparator]);
     --
     xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
     Try
       xlsBook=AsAutoObject(xlsBooks.Add); -- добавить книгу
       Try
         Try
           ФормированиеЦветовЗаголовков(intСхемаЦветов);
           ColorH1=BufInt[1];
           ColorH2=BufInt[2];
           ColorH3=BufInt[3];
           ColorH4=BufInt[4];
           ColorH5=BufInt[5];
           ColorH6=BufInt[6];
           ColorH7=BufInt[7];
           ColorH8=BufInt[8];
           --
           xlsSheets=AsAutoObject(xlsBook.Sheets);
           Try
             max_kol=asInteger(xlsSheets.Count);
             if max_kol>kol:
               kol=kol+1;
               xlsSheet=AsAutoObject(xlsBook.Worksheets[kol]);
             else
               xlsSheet=AsAutoObject(xlsSheets.Add);
             fi;
             Try
               xlsSheet.Name = "Ведомость остатков ОС";
               ShowProgress(7, "Формируем шапку...");
               ProgressPos(1);
               -- Устанавливаем ширину колонок
               РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 01, 05.0);
               РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 02, 27.0);
               РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 03, 12.0);
               РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 04, 08.0);
               РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 05, 10.0);
               РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 06, 09.0);
               РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 07, 11.0);
               РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 08, 14.0);
               РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 09, 14.0);
               РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 10, 09.0);
               РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 11, 15.0);
               -- Настройка печати
               ProgressPos(2);
               РАБ.EXCEL.PrintSetup_ЧБ_Поля10(xlsApp, xlsSheet, False, xlsRepШапка-3, xlsRepШапка, 0, 0, True, False, True, 100);
               -- Пишем шапку
               offRow=0;
               if flgПечСлужИнф:
                 offRow=offRow+1;
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 1, СлужИнфоСЧТ);
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 1, offRow, 11);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 1, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 7, 0, True, False, False, 0, True);
                 offRow=offRow+1;
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 1, СлужИнфоАНА);
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 1, offRow, 11);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 1, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 7, 0, True, False, False, 0, True);
                 offRow=offRow+1;
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 1, СлужИнфоГРП);
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 1, offRow, 11);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 1, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 7, 0, True, False, False, 0, True);
               fi;
               ProgressPos(3);
               offRow=offRow+1;
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 1, "ВЕДОМОСТЬ ОСТАТКОВ ОС на "+DateToString(ДатОпер));
               РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 1, offRow, 9);
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 1, РАБ.EXCEL.xlLeft, 0, РАБ.EXCEL.xlCenter, True, "Times New Roman", 14, 0, True, False, True, 0, True);
               РАБ.EXCEL.ВыделитьСловоЖирнымВстроке(xlsSheet, offRow, 1, 26, 10);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 11, "КОДЫ");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
               offRow=offRow+1;
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 09, "Форма по ОКУД ");
               РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 09, offRow, 10);
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 09, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
               offRow=offRow+1;
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 01, "Учреждение");
               РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 1, offRow, 2);
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 01, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 03, УЧР_ИМЯ);
               РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 3, offRow, 9);
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 03, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True,  False, 0, True);
               РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow, 3, offRow, 9, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 11, УЧР_ОКПО);
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 10, "по ОКПО ");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 10, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
               offRow=offRow+1;
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 01, "Структурное подразделение");
               РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 1, offRow, 2);
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 01, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 03, ПОД_ИМЯ);
               РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 3, offRow, 9);
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 03, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True, False, 0, True);
               РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet,  offRow,  3, offRow,  9, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 11, ПОД_КОД);
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
               РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet,  offRow-3, 11, offRow, 11, True,  True,  True,  True, True,  True,  False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
               РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet,  offRow-2, 11, offRow, 11, True,  True,  True,  True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
               -- Пишем заголовки столбцов таблицы
               ProgressPos(4);
               offRow=offRow+2;
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 01, "N п/п");
               РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 1, offRow+3, 1);
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 01, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True, False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ПовернутьТекст(xlsSheet, offRow, 01, 90, False);
               --
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 02, "Объект"+Chr(10)+"нефинансовых активов"+Chr(10)+"(код / наименование)");
               РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 2, offRow+3, 2);
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 02, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True,  False, Цвет(192, 192, 192), False);
               --
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+0, 03, "Номера:");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+0, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True,  False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+1, 03, "инвентарный");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+1, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+2, 03, "учетный");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+2, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+3, 03, "заводской");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+3, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               --
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+0, 04, "Учетная информация:");
               РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 4, offRow, 5);
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+0, 04, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True,  False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+1, 04, "счет синт.");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+1, 04, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+1, 05, "вид фин. об.");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+1, 05, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+2, 04, "КБК");
               РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow+2, 4, offRow+2, 5);
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+2, 04, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+3, 04, "мес.норма"+Chr(10)+"аморт (%)");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+3, 04, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+3, 05, "ОКОФ");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+3, 05, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               --
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow,   06, "Даты:");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow,   06, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True,  False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+1, 06, "принятия к учету");
               РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow+1, 06, offRow+2, 06);
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+1, 06, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+3, 06, "ввода в эксплуат.");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+3, 06, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               --
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow,   07, "Сроки:");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow,   07, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True,  False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+1, 07, "полезн. исп.");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+1, 07, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+2, 07, "факт. исп.");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+2, 07, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+3, 07, "осталось");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+3, 07, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               --
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 08, "МОЛ"+Chr(10)+"(код /"+Chr(10)+"Ф.И.О.)");
               РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 8, offRow+3, 8);
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 08, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ВыделитьСловоЖирнымВстроке(xlsSheet, offRow, 08, 1, 3);
               --
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 09, "Место-"+Chr(10)+"нахождение"+Chr(10)+"(код /"+Chr(10)+"наименование)");
               РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 9, offRow+3, 9);
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 09, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ВыделитьСловоЖирнымВстроке(xlsSheet, offRow, 09, 1, 16);
               --
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 10, "Коли-"+Chr(10)+"чество");
               РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 10, offRow+1, 10);
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 10, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True,  False, Цвет(192, 192, 192), False);
               --
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+2, 10, "единица измерения");
               РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow+2, 10, offRow+3, 10);
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+2, 10, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False,  False, Цвет(192, 192, 192), False);
               --
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow,   11, "СУММЫ:");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow,   11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True,  False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+1, 11, "балансовая");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+1, 11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+2, 11, "амортизации");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+2, 11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+3, 11, "остаточная");
               РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+3, 11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
               ProgressPos(5);
               РАБ.EXCEL.АвтоВыравниваниеСтрок(xlsSheet, 1, xlsRepШапка);
               ProgressPos(6);
               РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  1, offRow+3, 11,  True,  True,  True, True,  True , True , False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlHairline);
               РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  1, offRow+3,  1,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
               РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  2, offRow+3,  2,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
               РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  3, offRow+3,  3,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
               РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  4, offRow+3,  5,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
               РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  6, offRow+3,  6,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
               РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  7, offRow+3,  7,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
               РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  8, offRow+3,  8,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
               РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  9, offRow+3,  9,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
               РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow, 10, offRow+3, 10,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
               РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow, 11, offRow+3, 11,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
               РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  3, offRow,    7, False, False, False, True,  False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
               РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow, 11, offRow,   11, False, False, False, True,  False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
               ProgressPos(7);
               -- Пишем данные таблицы
               len=LengthOfArray(тSRTFLD);
               if len>0:
                 ShowProgress(len, "Экспорт в Excel ведомости остатков ОС...");
                 Iter=0;
                 for ii=1 to len do
                   ProgressPos(ii);
                   if тНФАКОД[ii]="": -- значит заголовок
                     ЭкспортСтрокиПромежуточногоИтога(xlsSheet, ii, тSRTFLD[ii], ColorH1, ColorH2, ColorH3, ColorH4, ColorH5, ColorH6, ColorH7, ColorH8, localDS, localTS);
                   else
                     Iter=Iter+1;
                     ЭкспортСтрокиДанных(xlsSheet, ii, Iter, localDS, localTS);
                   fi;
                 od;
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow+3, 1, offRow+3, 11,  False,  False,  False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                 -- Записываем итог таблицы
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, xlsRepШапка+1+len*3, 1, "И Т О Г О по ведомости: ");
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, xlsRepШапка+1+len*3, 1, xlsRepШапка+3+len*3, 9);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, xlsRepШапка+1+len*3, 1, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True,  False, Цвет(128, 128, 128), False);
                 --
                 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, xlsRepШапка+1+len*3, 10, итгСУМКОЛвед, localDS, localTS);
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, xlsRepШапка+1+len*3, 10, xlsRepШапка+3+len*3, 10);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, xlsRepШапка+1+len*3, 10, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True,  False, Цвет(128, 128, 128), False);
                 --
                 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, xlsRepШапка+1+len*3, 11, итгСУМБАЛвед, localDS, localTS);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, xlsRepШапка+1+len*3, 11, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True,  False, Цвет(128, 128, 128), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, xlsRepШапка+2+len*3, 11, итгСУМАМТвед, localDS, localTS);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, xlsRepШапка+2+len*3, 11, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True,  False, Цвет(128, 128, 128), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, xlsRepШапка+3+len*3, 11, итгСУМОСТвед, localDS, localTS);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, xlsRepШапка+3+len*3, 11, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True,  False, Цвет(128, 128, 128), False);
                 --
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, xlsRepШапка+1+len*3, 1, xlsRepШапка+3+len*3, 11, True, True, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                 -- Выравнивание строк
                 РАБ.EXCEL.АвтоВыравниваниеСтрок(xlsSheet, xlsRepШапка+1, xlsRepШапка+len*3+3);
                 --
                 УстановитьКолонтитулы(xlsSheet, rusExcel);
               fi; -- len>0
             Finally
               ClearVariable(xlsSheet);
             end;
             -- Конец экспорта ведомости
             ShowProgress(9, "Экспорт в Excel итоговых таблиц...");
             if flgПечИтгТаб1 and LengthOfArray(иСЧТСкод)>0:
               -- Экспорт итоговой таблицы 1
               if max_kol>kol:
                 kol=kol+1;
                 xlsSheet=AsAutoObject(xlsBook.Worksheets[kol]);
               else
                 xlsSheet=AsAutoObject(xlsSheets.Add);
               fi;
               Try
                 ProgressPos(1);
                 xlsSheet.Name = "Итог1";
                 ЭкспортИтогТабл1(xlsSheet, localDS, localTS);
                 ProgressPos(2);
                 РАБ.EXCEL.PrintSetup_ЧБ_Поля10(xlsApp, xlsSheet, False, 0, 0, 0, 0, False, False, True, 100);
               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 max_kol>kol:
                 kol=kol+1;
                 xlsSheet=AsAutoObject(xlsBook.Worksheets[kol]);
               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(3);
                 len=LengthOfArray(иСЧТБкод);
                 if flgПечИтгТаб2 and len>0: ЭкспортИтогТабл2(xlsSheet, localDS, localTS, Iter, ШиринуЗадали, flgПечНовСтр); ШиринуЗадали=True; Iter=Iter+len+5; fi;
                 ProgressPos(4);
                 len=LengthOfArray(иФКРБкод);
                 if flgПечИтгТаб3 and len>0: ЭкспортИтогТабл3(xlsSheet, localDS, localTS, Iter, ШиринуЗадали, flgПечНовСтр); ШиринуЗадали=True; Iter=Iter+len+5; fi;
                 ProgressPos(5);
                 len=LengthOfArray(иСЧТСкод);
                 if flgПечИтгТаб4 and len>0: ЭкспортИтогТабл4(xlsSheet, localDS, localTS, Iter, ШиринуЗадали, flgПечНовСтр); ШиринуЗадали=True; Iter=Iter+len+5; fi;
                 ProgressPos(6);
                 РАБ.EXCEL.PrintSetup_ЧБ_Поля10(xlsApp, xlsSheet, False, 0, 0, 0, 0, True, False, True, 100);
               Finally
                 ClearVariable(xlsSheet);
               end;
             fi;
             if flgПечИтгТаб5 and СтрокиТ5>0:
               -- Экспорт итоговой таблицы 5
               if max_kol>kol:
                 kol=kol+1;
                 xlsSheet=AsAutoObject(xlsBook.Worksheets[kol]);
               else
                 xlsSheet=AsAutoObject(xlsSheets.Add);
               fi;
               Try
                 ProgressPos(7);
                 xlsSheet.Name = "Итог5";
                 ЭкспортИтогТабл5(xlsSheet, localDS, localTS);
                 ProgressPos(8);
                 РАБ.EXCEL.PrintSetup_ЧБ_Поля10(xlsApp, xlsSheet, False, 0, 0, 0, 0, True, False, True, 100);
               Finally
                 ClearVariable(xlsSheet);
               end;
             fi;
             ProgressPos(9);
             -- КОНЕЦ ЭКСПОРТА
             NoError=True;
             xlsApp.Visible=True;  -- сделать видимым Excel
           Finally
             ClearVariable(xlsSheets);
           end;
         Except
           xlsBook.Close(False); -- закрыть книгу без сохранения
         end;
       Finally
         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;
 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 ColorB, lenШапка, IterCount, IterSave, начало, offRow, maxIterCount, kol, max_kol, len, Iter, ii, ColorH1, ColorH2, ColorH3, ColorH4, ColorH5, ColorH6, ColorH7, ColorH8 :Integer;
var NoError, rusExcel, ШиринуЗадали, ExportWork :Logical;
var localTS, localDS, xlNameFile, xlNameFolder, Value, ExcelVersion :String;
var numVal1, numVal2, numVal3 :Numeric;
 начало=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
       kol=0;
       offRow=0;
       xlsApp.EnableEvents=False;   -- отключить события
       xlsApp.AutomationSecurity=3; -- отключить макросы
       --
       rusExcel=РАБ.EXCEL.РусскийExcel(xlsApp);
       localDS=asString(xlsApp.International[РАБ.EXCEL.xlDecimalSeparator]);
       localTS=asString(xlsApp.International[РАБ.EXCEL.xlThousandsSeparator]);
       --
       xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
       Try
         xlsBook=AsAutoObject(xlsBooks.Add); -- добавить книгу
         Try
           Try
             ФормированиеЦветовЗаголовков(intСхемаЦветов);
             ColorH1=BufInt[1];
             ColorH2=BufInt[2];
             ColorH3=BufInt[3];
             ColorH4=BufInt[4];
             ColorH5=BufInt[5];
             ColorH6=BufInt[6];
             ColorH7=BufInt[7];
             ColorH8=BufInt[8];
             --
             xlsSheets=AsAutoObject(xlsBook.Sheets);
             Try
               max_kol=asInteger(xlsSheets.Count);
               if max_kol>kol:
                 kol=kol+1;
                 xlsSheet=AsAutoObject(xlsBook.Worksheets[kol]);
               else
                 xlsSheet=AsAutoObject(xlsSheets.Add);
               fi;
               Try
                 xlsSheet.Name = "Ведомость остатков ОС";
                 ShowProgress(7, "Формируем шапку...");
                 ProgressPos(1);
                 -- Устанавливаем ширину колонок
                 РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 01, 05.0);
                 РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 02, 27.0);
                 РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 03, 12.0);
                 РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 04, 08.0);
                 РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 05, 10.0);
                 РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 06, 09.0);
                 РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 07, 11.0);
                 РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 08, 14.0);
                 РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 09, 14.0);
                 РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 10, 09.0);
                 РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 11, 15.0);
                 -- Настройка печати
                 ProgressPos(2);
                 РАБ.EXCEL.PrintSetup_ЧБ_Поля10(xlsApp, xlsSheet, False, xlsRepШапка-3, xlsRepШапка, 0, 0, True, False, True, 100);
                 -- Пишем шапку
                 if flgПечСлужИнф:
                   offRow=offRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 1, СлужИнфоСЧТ);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 1, offRow, 11);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 1, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 7, 0, True, False, False, 0, True);
                   offRow=offRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 1, СлужИнфоАНА);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 1, offRow, 11);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 1, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 7, 0, True, False, False, 0, True);
                   offRow=offRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 1, СлужИнфоГРП);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 1, offRow, 11);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 1, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 7, 0, True, False, False, 0, True);
                 fi;
                 ProgressPos(3);
                 offRow=offRow+1;
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 1, "ВЕДОМОСТЬ ОСТАТКОВ ОС на "+DateToString(ДатОпер));
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 1, offRow, 9);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 1, РАБ.EXCEL.xlLeft, 0, РАБ.EXCEL.xlCenter, True, "Times New Roman", 14, 0, True, False, True, 0, True);
                 РАБ.EXCEL.ВыделитьСловоЖирнымВстроке(xlsSheet, offRow, 1, 26, 10);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 11, "КОДЫ");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                 offRow=offRow+1;
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 09, "Форма по ОКУД ");
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 09, offRow, 10);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 09, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                 offRow=offRow+1;
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 01, "Учреждение");
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 1, offRow, 2);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 01, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 03, УЧР_ИМЯ);
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 3, offRow, 9);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 03, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True,  False, 0, True);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow, 3, offRow, 9, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 11, УЧР_ОКПО);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 10, "по ОКПО ");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 10, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                 offRow=offRow+1;
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 01, "Структурное подразделение");
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 1, offRow, 2);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 01, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 03, ПОД_ИМЯ);
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 3, offRow, 9);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 03, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True, False, 0, True);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet,  offRow,  3, offRow,  9, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 11, ПОД_КОД);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet,  offRow-3, 11, offRow, 11, True,  True,  True,  True, True,  True,  False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet,  offRow-2, 11, offRow, 11, True,  True,  True,  True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                 -- Пишем заголовки столбцов таблицы
                 ProgressPos(4);
                 offRow=offRow+2;
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 01, "N п/п");
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 1, offRow+3, 1);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 01, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True, False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ПовернутьТекст(xlsSheet, offRow, 01, 90, False);
                 --
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 02, "Объект"+Chr(10)+"нефинансовых активов"+Chr(10)+"(код / наименование)");
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 2, offRow+3, 2);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 02, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True,  False, Цвет(192, 192, 192), False);
                 --
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+0, 03, "Номера:");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+0, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True,  False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+1, 03, "инвентарный");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+1, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+2, 03, "учетный");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+2, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+3, 03, "заводской");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+3, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 --
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+0, 04, "Учетная информация:");
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 4, offRow, 5);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+0, 04, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True,  False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+1, 04, "счет синт.");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+1, 04, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+1, 05, "вид фин. об.");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+1, 05, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+2, 04, "КБК");
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow+2, 4, offRow+2, 5);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+2, 04, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+3, 04, "мес.норма"+Chr(10)+"аморт (%)");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+3, 04, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+3, 05, "ОКОФ");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+3, 05, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 --
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow,   06, "Даты:");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow,   06, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True,  False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+1, 06, "принятия к учету");
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow+1, 06, offRow+2, 06);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+1, 06, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+3, 06, "ввода в эксплуат.");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+3, 06, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 --
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow,   07, "Сроки:");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow,   07, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True,  False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+1, 07, "полезн. исп.");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+1, 07, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+2, 07, "факт. исп.");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+2, 07, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+3, 07, "осталось");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+3, 07, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 --
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 08, "МОЛ"+Chr(10)+"(код /"+Chr(10)+"Ф.И.О.)");
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 8, offRow+3, 8);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 08, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ВыделитьСловоЖирнымВстроке(xlsSheet, offRow, 08, 1, 3);
                 --
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 09, "Место-"+Chr(10)+"нахождение"+Chr(10)+"(код /"+Chr(10)+"наименование)");
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 9, offRow+3, 9);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 09, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ВыделитьСловоЖирнымВстроке(xlsSheet, offRow, 09, 1, 16);
                 --
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow, 10, "Коли-"+Chr(10)+"чество");
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow, 10, offRow+1, 10);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow, 10, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True,  False, Цвет(192, 192, 192), False);
                 --
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+2, 10, "единица измерения");
                 РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offRow+2, 10, offRow+3, 10);
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+2, 10, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False,  False, Цвет(192, 192, 192), False);
                 --
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow,   11, "СУММЫ:");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow,   11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, True,  False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+1, 11, "балансовая");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+1, 11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+2, 11, "амортизации");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+2, 11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offRow+3, 11, "остаточная");
                 РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offRow+3, 11, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, Цвет(192, 192, 192), False);
                 ProgressPos(5);
                 РАБ.EXCEL.АвтоВыравниваниеСтрок(xlsSheet, 1, xlsRepШапка);
                 ProgressPos(6);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  1, offRow+3, 11,  True,  True,  True, True,  True , True , False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlHairline);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  1, offRow+3,  1,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  2, offRow+3,  2,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  3, offRow+3,  3,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  4, offRow+3,  5,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  6, offRow+3,  6,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  7, offRow+3,  7,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  8, offRow+3,  8,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  9, offRow+3,  9,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow, 10, offRow+3, 10,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow, 11, offRow+3, 11,  True,  True,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow,  3, offRow,    7, False, False, False, True,  False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow, 11, offRow,   11, False, False, False, True,  False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                 ProgressPos(7);
                 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;
   -- Пишем данные таблицы
   len=LengthOfArray(тSRTFLD);
   if len>0 and NoError:
     ShowProgress(len, "Экспорт в 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 len do
                         ProgressPos(ii);
                         if тНФАКОД[ii]="": -- значит заголовок
                           ЭкспортСтрокиПромежуточногоИтога(xlsSheet, ii, тSRTFLD[ii], ColorH1, ColorH2, ColorH3, ColorH4, ColorH5, ColorH6, ColorH7, ColorH8, 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;
                       РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offRow+3, 1, offRow+3, 11,  False,  False,  False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                       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>=len: ExportWork=False; fi;
         else
           ExportWork=False;
         fi;
       end; -- while
     Finally
       CloseProgress;
     end;
     if NoError:
       xlsApp=CreateAutoObject('Excel.Application');
       Try
         ShowProgress(len, "Экспорт в 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
                   -- Записываем итог таблицы
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, xlsRepШапка+1+len*3, 1, "И Т О Г О по ведомости: ");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, xlsRepШапка+1+len*3, 1, xlsRepШапка+3+len*3, 9);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, xlsRepШапка+1+len*3, 1, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True,  False, Цвет(128, 128, 128), False);
                   --
                   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, xlsRepШапка+1+len*3, 10, итгСУМКОЛвед, localDS, localTS);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, xlsRepШапка+1+len*3, 10, xlsRepШапка+3+len*3, 10);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, xlsRepШапка+1+len*3, 10, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True,  False, Цвет(128, 128, 128), False);
                   --
                   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, xlsRepШапка+1+len*3, 11, итгСУМБАЛвед, localDS, localTS);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, xlsRepШапка+1+len*3, 11, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True,  False, Цвет(128, 128, 128), False);
                   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, xlsRepШапка+2+len*3, 11, итгСУМАМТвед, localDS, localTS);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, xlsRepШапка+2+len*3, 11, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True,  False, Цвет(128, 128, 128), False);
                   РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, xlsRepШапка+3+len*3, 11, итгСУМОСТвед, localDS, localTS);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, xlsRepШапка+3+len*3, 11, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True,  False, Цвет(128, 128, 128), False);
                   --
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, xlsRepШапка+1+len*3, 1, xlsRepШапка+3+len*3, 11, True, True, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   -- Выравнивание строк
                   РАБ.EXCEL.АвтоВыравниваниеСтрок(xlsSheet, xlsRepШапка+1, xlsRepШапка+len*3+3);
                   --
                   УстановитьКолонтитулы(xlsSheet, rusExcel);
                   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; -- NoError
   fi; -- len>0 and NoError
   -- Конец экспорта ведомости
   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 max_kol>kol:
                     kol=kol+1;
                     xlsSheet=AsAutoObject(xlsBook.Worksheets[kol]);
                   else
                     xlsSheet=AsAutoObject(xlsSheets.Add);
                   fi;
                   Try
                     ProgressPos(1);
                     xlsSheet.Name = "Итог1";
                     ЭкспортИтогТабл1(xlsSheet, localDS, localTS);
                     ProgressPos(2);
                     РАБ.EXCEL.PrintSetup_ЧБ_Поля10(xlsApp, xlsSheet, False, 0, 0, 0, 0, False, False, True, 100);
                     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 max_kol>kol:
                       kol=kol+1;
                       xlsSheet=AsAutoObject(xlsBook.Worksheets[kol]);
                     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(3);
                       len=LengthOfArray(иСЧТБкод);
                       if flgПечИтгТаб2 and len>0: ЭкспортИтогТабл2(xlsSheet, localDS, localTS, Iter, ШиринуЗадали, flgПечНовСтр); ШиринуЗадали=True; Iter=Iter+len+5; fi;
                       ProgressPos(4);
                       len=LengthOfArray(иФКРБкод);
                       if flgПечИтгТаб3 and len>0: ЭкспортИтогТабл3(xlsSheet, localDS, localTS, Iter, ШиринуЗадали, flgПечНовСтр); ШиринуЗадали=True; Iter=Iter+len+5; fi;
                       ProgressPos(5);
                       len=LengthOfArray(иСЧТСкод);
                       if flgПечИтгТаб4 and len>0: ЭкспортИтогТабл4(xlsSheet, localDS, localTS, Iter, ШиринуЗадали, flgПечНовСтр); ШиринуЗадали=True; Iter=Iter+len+5; fi;
                       ProgressPos(6);
                       РАБ.EXCEL.PrintSetup_ЧБ_Поля10(xlsApp, xlsSheet, False, 0, 0, 0, 0, True, False, True, 100);
                       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;
       len=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 max_kol>kol:
                     kol=kol+1;
                     xlsSheet=AsAutoObject(xlsBook.Worksheets[kol]);
                   else
                     xlsSheet=AsAutoObject(xlsSheets.Add);
                   fi;
                   Try
                     ProgressPos(7);
                     xlsSheet.Name = "Итог5";
                     --
                     РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet,  1, 100.0);
                     РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet,  2,  13.0);
                     РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet,  3,  13.0);
                     РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet,  4,  13.0);
                     -- Пишем заголовок
                     РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, 1, 1, "Итоговая таблица "+Chr(185)+"5 к ведомости остатков ОС (промежуточные итоги)");
                     РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, 1, 1, 1, 4);
                     РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, 1, 1, РАБ.EXCEL.xlLeft, 0, РАБ.EXCEL.xlCenter, False, "Times New Roman", 11, 0, True, False, True, 0, True);
                     -- Пишем заголовки столбцов таблицы
                     РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, 2, 1, "Строка промежуточного итога");
                     РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, 2, 1, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 9, 0, True, True, False, Цвет(192, 192, 192), False);
                     РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, 2, 2, "Сумма"+Chr(10)+"балансовая");
                     РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, 2, 2, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, True, False, Цвет(192, 192, 192), False);
                     РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, 2, 3, "Сумма"+Chr(10)+"амортизации");
                     РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, 2, 3, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, True, False, Цвет(192, 192, 192), False);
                     РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, 2, 4, "Сумма"+Chr(10)+"остаточная");
                     РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, 2, 4, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, True, False, Цвет(192, 192, 192), False);
                     -- Пишем данные таблицы
                     ProgressPos(8);
                     РАБ.EXCEL.PrintSetup_ЧБ_Поля10(xlsApp, xlsSheet, False, 0, 0, 0, 0, True, False, True, 100);
                     NoError=True;
                   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(len, "Экспорт в 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 len 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, "")));
                           ColorB=asInteger(СекцТ5Д.Cell(ii, 2, CellBgColor, ""));
                           РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, lenШапка+ii, 1, Value);
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, lenШапка+ii, 1, РАБ.EXCEL.xlLeft, 0, РАБ.EXCEL.xlCenter, True, "Arial", 8, 0, True, False, False, ColorB, False);
                           РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, lenШапка+ii, 2, numVal1, localDS, localTS);
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, lenШапка+ii, 2, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlTop,   True, "Arial", 8, 0, True, False, False, ColorB, False);
                           РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, lenШапка+ii, 3, numVal2, localDS, localTS);
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, lenШапка+ii, 3, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlTop,   True, "Arial", 8, 0, True, False, False, ColorB, False);
                           РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, lenШапка+ii, 4, numVal3, localDS, localTS);
                           РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, lenШапка+ii, 4, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlTop,   True, "Arial", 8, 0, True, False, False, ColorB, False);
                           --
                           IterCount=IterCount+1;
                           if IterCount>=maxIterCount: IterSave=IterSave+IterCount; IterCount=0; Break; fi;
                         od;
                         -- Пишем итоговую строчку таблицы
                         РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, lenШапка+len+1, 1, "И Т О Г О : ");
                         РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, lenШапка+len+1, 1, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlCenter, False, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
                         РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, lenШапка+len+1, 2, итгСУМБАЛвед, localDS, localTS);
                         РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, lenШапка+len+1, 2, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlTop,     True, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
                         РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, lenШапка+len+1, 3, итгСУМАМТвед, localDS, localTS);
                         РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, lenШапка+len+1, 3, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlTop,     True, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
                         РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, lenШапка+len+1, 4, итгСУМОСТвед, localDS, localTS);
                         РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, lenШапка+len+1, 4, РАБ.EXCEL.xlRight, 0, РАБ.EXCEL.xlTop,     True, "Arial", 8, РАБ.EXCEL.xlColorWhite, False, True, False, Цвет(128, 128, 128), False);
                         -- Устанавливаем границы
                         РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, 2, 1, lenШапка+len+1, 4, True, True, True, True, True, True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                         NoError=True;
                       Finally
                         ClearVariable(xlsSheet);
                       end;
                     Except
                       NoError=False;
                       ExportWork=False;
                       xlsBook.Close(False); -- закрыть книгу без сохранения
                     end;
                   Finally
                     xlsBook.Save;
                     xlsBook.Close(False); -- закрыть книгу без сохранения
                     ClearVariable(xlsBook); -- освободить объект книги
                   end;
                 Finally
                   ClearVariable(xlsBooks); -- освободить объект книг
                 end;
               Finally
                 ClearVariable(xlsApp); -- освободить объект Excel
               end;
             Except
               NoError=False;
               ExportWork=False;
               ClearVariable(xlsRng);
               ClearVariable(xlsSheet);
               ClearVariable(xlsSheets);
               ClearVariable(xlsBook);
               ClearVariable(xlsBooks);
               ClearVariable(xlsApp);
             end;
             if ii>=len: ExportWork=False; fi;
           else
             ExportWork=False;
           fi;
         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; --ChooseFolder
 ClearVariable(xlsRng);
 ClearVariable(xlsSheet);
 ClearVariable(xlsSheets);
 ClearVariable(xlsBook);
 ClearVariable(xlsBooks);
 ClearVariable(xlsApp);
 Message("Экспорт завершен!^MВремя работы - "+TimeToHMSstring(Time-начало), mtInformation);
end;

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

Func Дата_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String) :String;
var dd, ddSave : Date;
var nameField :String;
 Template.HideEditor(False);
 nameField=AsString(Template.Field);
 if Template_OnClear: ^Cur; fi;
 ddSave=GetDate;
 dd=ВыборДаты(ddSave);
 if dd<>ddSave and nameField<>"ДатИсп":
   if ОтменитьИзмененияУсловийОтчета: dd=ddSave; fi;
   ValidateОтчетSection(False);
 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;

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

Func Field_OnValidateS(Field:String; Iter:Integer; Value:String) :Logical;
var Res :Numeric;
 if Field="отчАНА":
   if Length(Value)>253: Message("Строка доп. аналитики не может быть больше 253 символов!", mtWarning); ^False; fi;
   Try Res=Saldo("{"+Value+"}", 1.1.100); Except Raise; ^False; end;
 fi;
 ^True;
end;

Func Field_OnValidateI(Field:String; Iter:Integer; Value:Integer) :Logical;
 if Value<0.00: Message('Нельзя вводить отрицательное число!', mtError); ^False; fi;
 ^True;
end;

Func Field_OnValidateN(Field:String; Iter:Integer; Value:Numeric) :Logical;
 if Value<0.00: Message('Нельзя вводить отрицательное число!', mtError); ^False; fi;
 ^True;
end;

2-- События объектов
Proc btnOnClick(Sender:String); -- объекты при нажатии
 if Sender="btnClose"  : Close;
 |  Sender="btnРасчет" : РасчетСпискаНФА;
 |  Sender="btnExcel"  : if flgSaveExport: ЭкспортВедомости_Excel_Save; else ЭкспортВедомости_Excel; fi;
 fi;
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, 4, Length(Sender)-3); -- вычисляем имя переменной - 3=cb_
   Flag=GetVariableL(nameVar); -- текущий статус;
   Old = not Flag; -- предыдущий статус
   if ОтменитьИзмененияУсловийОтчета: Flag=Old; fi;
   PutVariableL(nameVar, Flag);
   ОбъектИмя.State=Flag;
   if Flag<>Old:
--     if Sender="cb_Забаланс" :
--        ВнешнийВид_Забаланс(if(currAcc<>2, True, False));
--        Счета_ВнешнийВид;
--        ОчиститьУсловияОтбора(True, False, flgЧиститьАна);
--     fi;
   fi;
   ValidateОтчетSection(False);
 fi;
end;

Proc ФлагиСчетов_onChange(Sender:String);
var curFlag, oldFlag :Integer;
 if Template_OnClear: Exit; fi;
 curFlag=currAcc; -- текущий статус
 oldFlag=oldsAcc; -- предыдущий статус
 if ОтменитьИзмененияУсловийОтчета: curFlag=oldFlag; fi;
 currAcc=curFlag;
 if curFlag<>oldFlag:
--   if curFlag=2: флагиACC="1111111110000000";
--   |  curFlag=3: флагиACC="0000000001111111";
--   else          флагиACC="1111111111111111";
--   fi;
   флагиACC="1111111110000000";
   Счета_ВнешнийВид;
   ВнешнийВид_Забаланс(if(currAcc<>2, True, False));
   ОчиститьУсловияОтбора(True, True, flgЧиститьАна);
   oldsAcc=curFlag;
   ValidateОтчетSection(False);
 fi;
end;

Proc ФлагиИСТ_onChange(Sender:String);
var curFlag, oldFlag :Integer;
 if Template_OnClear: Exit; fi;
 curFlag=currИст; -- текущий статус
 oldFlag=oldsИст; -- предыдущий статус
 if ОтменитьИзмененияУсловийОтчета: curFlag=oldFlag; fi;
 currИст=curFlag;
 if curFlag<>oldFlag: 
   ОчиститьУсловияОтбора(True, False, flgЧиститьАна);
   oldsИст=curFlag;
   ValidateОтчетSection(False);
 fi;
end;  

Proc СвернутьПараметры_onChange(Sender:String);
 if Template_OnClear: Exit; fi;
 ValidateSection(flgСкрытьПарОтч, False);
end;

Proc cb_НстрВнВидОтч_OnChange(Sender:String);
 ValidateSection(flgНстрВнВидОтч, True);
 ПрименитьЦвета;
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;
 flgНстрВнВидОтч=False;
 flgClear=GetGuid;
 Template.Field="Фокус";
end;

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

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