-- Шаблон создан мастером бланков
-- 13.04.2005 12:22:56
--  ШаблонПослеОткрытия ШаблонПриСчитывании  ШаблонПриПроверке
БланкСШаблоном "Ввод остатков НФА", Редактор РПО_ОСТ_НФА;
var Усл1:l=РАБ.НФА.INI_SETUP.Усл1;
var Усл2:l=РАБ.НФА.INI_SETUP.Усл2;
var Усл3:l=РАБ.НФА.INI_SETUP.Усл3;

--Усл1:l=[true];--Материальные запасы  на 105, 106.04, 107.03, ЗАБ.??.105.* счетах;
--Усл2:l;	-- Основные средства на 106.01, 107.01, ЗАБ.??.101.*;
--Усл3:l;	-- Нематериальные активы на 106.02, 107.02, ЗАБ.??.102.*
--var НФАСПРОС	   :s='НФА.10?.*';
var НФАСПРОСКАРТ :s='РПО_НФА#соотв(ГРНФА,"101.*") or соотв(ГРНФА,"102.*")#НФА.* or соотв(ГРНФА,"103.*")#НФА.*';

var LastCurrent:record;
func ОбновитьШаблон:l;if LastCurrent<>Current:LastCurrent=Current;ShowProgress(1,'');CloseProgress;fi;^false;end;
var ОбновитьШаблонТригер:l=ОбновитьШаблон;-- при нестандартном открытии бланка редактора на другой записи происходит автоматическое обновление шаблона
func НФАСПРОС:s;
var  ss:s;
  ss=РАБ.НФА.INI_SETUP.ВзятьУсловиеВыборНФА_Аналитика('23');
  if ss<>'':^РАБ.НФА.B01.abl(ss,'&','НФА.101.*|НФА.102.*|НФА.103.*');fi;
  ^'';
end;

func НФАСПР:s;
  ^РАБ.НФА.INI_SETUP.ВзятьУсловиеВыборНФА_Аналитика('');
--  if Усл1 и Усл2 и Усл3    :^'НФА.10*';
--   | Усл1 и Усл2 и not Усл3:^'НФА.105.*|НФА.101.*';
--   | Усл1 и not Усл2 и Усл3:^'НФА.105.*|НФА.102.*';
--   | not Усл1 и Усл2 и Усл3:^'НФА.101.*|НФА.102.*';
--   | Усл1 и not Усл2 и not Усл3:^'НФА.105.*';
--   | not Усл1 и Усл2 и not Усл3:^'НФА.101.*';
--   | not Усл1 и not Усл2 и Усл3:^'НФА.102.*';
--  fi;

end;

func НФАСПРКАРТ:s;
^РАБ.НФА.INI_SETUP.ВзятьУсловиеВыборНФА_КАРТ('');
--  if Усл1 и Усл2 и Усл3    :^'РПО_НФА#соотв(ГРНФА,"10*")#НФА.*';
--   | Усл1 и Усл2 и not Усл3:^'РПО_НФА#соотв(ГРНФА,"105.*") or соотв(ГРНФА,"101.*")#НФА.*';
--   | Усл1 и not Усл2 и Усл3:^'РПО_НФА#соотв(ГРНФА,"105.*") or соотв(ГРНФА,"102.*")#НФА.*';
--   | not Усл1 и Усл2 и Усл3:^'РПО_НФА#соотв(ГРНФА,"101.*") or соотв(ГРНФА,"102.*")#НФА.*';
--   | Усл1 и not Усл2 и not Усл3:^'РПО_НФА#соотв(ГРНФА,"105.*")#НФА.*';
--   | not Усл1 и Усл2 и not Усл3:^'РПО_НФА#соотв(ГРНФА,"101.*")#НФА.*';
--   | not Усл1 и not Усл2 и Усл3:^'РПО_НФА#соотв(ГРНФА,"102.*")#НФА.*';
--  fi;
end;

func НФА_НЕСПИСЫВАТЬДО1000(НФА:s):l;
  if КартотекаПризнака(НФА,false)<>'РПО_НФА':^false;fi;
  ^Раб.НФА.B01.ПолеПоПризнакуЛ(НФА,'НЕСПИСЫВАТЬДО1000');
end;

var КнДопАнН:s='';
var НФАОСНКН:s='';
var ИНВКн:s='';
var ИсключенныеСправочникиОбщАн:s='НФА.*|М.*|МОЛ.*|ДНФА.*|УЧН.*|ПЕРИОД.*|ДВИЖ_НФА.*|ГГ.*|ММДД.*';
var ИМЯКРТ   :s='РПО_ОСТ_НФА';-- Картотека которую редактирует данный бланк
var dd0:d=1.1.1800;
var БланкКОД :s; -- расчитывается при открытии бланка (шаблонпослеоткрытия)
Var SQLver:l;	 -- расчитывается при открытии бланка (шаблонпослеоткрытия)
ФлCopyClosedModFob:object;
2func UpdateTimeSecCurrent:i;^UpdateTimeSec;end;-- функция обязательная для работы с SQL запросами
--var ЗаголовокТаб2:s='Основные средства и нематериальные активы [101, 102] принятые к учету'+if(Соотв(М,'М.Э.*'),' Цена>'+str(Общ_Пер('ОС_РАСХ',ДАТОПЕР))+' руб','');
var ЗаголовокТаб2:s='Основные средства, нематериальные активы, земля [101, 102, 103] принятые к учету';
var конос:s='';
var кон:s='';
var НовыйОтчетныйПериодНачалоН:d=НовыйОтчетныйПериодНачало;
var CopyClosedModFob:l=ClosedModFob;
var ОстаткиТекущегоПериода:l=(год(датопер)=год(НовыйОтчетныйПериодНачало));
КнОбщМеню01:Объект;
КнОбщМеню02:Объект;
КнОбщМеню03:Объект;
КнОбщМеню04:Объект;
--КнОбщМеню05:Объект;
--КнОбщМеню06:Объект;
КнОбщМеню07:Объект;
var ОбщМенюОбъект      []:s;
var ОбщМенюОбъект_Надп []:s;
var ОбщМенюОбъект_Подск[]:s;
var ОбщМенюОбъект_Виден[]:l;
var ОбщМенюОбъект_Разр []:l;
Proc ReloadОбщМенюОбъект;
 var i,j:i;
 var Об:Объект;
  j=ДлинаМассива(ОбщМенюОбъект);
  for i=1..j do
    if НайтиОбъект(ОбщМенюОбъект[i],Об):
       Об.Надпись  =ОбщМенюОбъект_Надп [i];
       Об.Подсказка=ОбщМенюОбъект_Подск[i];
       Об.Виден    =ОбщМенюОбъект_Виден[i];
       Об.Разрешен =ОбщМенюОбъект_Разр [i];
    fi;
  od;
end;
Proc IniОбщМенюОбъект;
 ОбщМенюОбъект	    [1]='КнОбщМеню01';
 ОбщМенюОбъект_Надп [1]='&Отмена';
 ОбщМенюОбъект_Подск[1]='Отмена';
 ОбщМенюОбъект_Виден[1]=true;
 ОбщМенюОбъект_Разр [1]=true;

 ОбщМенюОбъект	    [2]='КнОбщМеню02';
 ОбщМенюОбъект_Надп [2]='&Сохранить';
 ОбщМенюОбъект_Подск[2]='Сохранить';
 ОбщМенюОбъект_Виден[2]=true;
 ОбщМенюОбъект_Разр [2]=true;

 ОбщМенюОбъект	    [3]='КнОбщМеню03';
 ОбщМенюОбъект_Надп [3]='&Печать';
 ОбщМенюОбъект_Подск[3]='Печать';
 ОбщМенюОбъект_Виден[3]=true;
 ОбщМенюОбъект_Разр [3]=true;

 ОбщМенюОбъект	    [4]='КнОбщМеню04';
 ОбщМенюОбъект_Надп [4]='&Закрыть';
 ОбщМенюОбъект_Подск[4]='Закрыть';
 ОбщМенюОбъект_Виден[4]=true;
 ОбщМенюОбъект_Разр [4]=true;

 ОбщМенюОбъект	    [5]='КнОбщМеню05';
 ОбщМенюОбъект_Надп [5]='&Начало';
 ОбщМенюОбъект_Подск[5]='В начало документа';
 ОбщМенюОбъект_Виден[5]=false;
 ОбщМенюОбъект_Разр [5]=true;

 ОбщМенюОбъект	    [6]='КнОбщМеню06';
 ОбщМенюОбъект_Надп [6]='&Конец';
 ОбщМенюОбъект_Подск[6]='В конец документа';
 ОбщМенюОбъект_Виден[6]=false;
 ОбщМенюОбъект_Разр [6]=true;

 ОбщМенюОбъект	    [7]='КнОбщМеню07';
 ОбщМенюОбъект_Надп [7]='&Настройки';
 ОбщМенюОбъект_Подск[7]='Настройки бланка';
 ОбщМенюОбъект_Виден[7]=true;
 ОбщМенюОбъект_Разр [7]=true;

 ОбщМенюОбъект	    [8]='КнОбщМеню08';
 ОбщМенюОбъект_Надп [8]='&Справочники';
 ОбщМенюОбъект_Подск[8]='Настройка условий для выбора справочников при вводе остатков';
 ОбщМенюОбъект_Виден[8]=false;
 ОбщМенюОбъект_Разр [8]=true;
end;
СписокСправочников:s;-- условия на выбор справочников
ВыборДНФА_карт:l;
МаскаДопАн:s=СписокСправочников;
func mindat(dd1:d;dd2:d):s;
  if dd1>dd0 и dd2>dd0:dd1=if(dd1<dd2,dd1,dd2);
   | dd1>dd0:dd1=dd1;
   | dd2>dd0:dd1=dd2;
   | true:^'';
  fi;
  ^'ГГ.'+str(год(dd1))+' ММДД.'+format('%.2d',мес(dd1))+'.'+format('%.2d',день(dd1));
end;
var БылРасчитанСписокПолейКартотеки:l;
var СписокПолейКартотеки[]:s;
var БылРасчитанСписокОКОФ:l;
var БылОбновленСписокОКОФ:l;
var СписокОКОФ[]:s;
var СписокАмГр[]:i;
var СписокГрПр[]:s;-- список групп для переоценки
var ТекущийРегионН:s=ТекущийРегион;
var ДатаПоследнегоИзменения_РПО_НФА:d;-- для пересчета СписокОКОФ
var ВремяМодификацииСек_РПО_НФА:i;

Proc ЗаполнитьСписокАмГр_ГрПр;
 var wa,rs,i,j,k,p:i;
 var ss,okof:s;
 k=ДлинаМассива(СписокОКОФ);
 j=0;
 okof='';
 While k>j do
   While k>j do
    j=j+1;ss=okof+' '+СписокОКОФ[j];
    if Длина(ss)>233:j=j-1;break;
     | true:okof=ss;
    fi;
   od;
--   wa=OpenWorkArea('РПО_ОКОФ','КОД_ОКОФ','pos(" "+КОД_ОКОФ,"'+okof+'")>0');	--
   wa=OpenWorkArea('РПО_ОКОФ','КОД_ОКОФ','pos(КОД_ОКОФ,"'+okof+'")>0');   --
     rs=Records(wa);
     for i=1..rs do
      ss=Trim(GetFieldS(wa,i,'КОД_ОКОФ'));
      p=ПоискВмассиве(СписокОКОФ,ss,true);
      if p>0:СписокАмГр[p]=int(GetFieldS(wa,i,'АМОРТ_ГР'));
	     СписокГрПр[p]=GetFieldS(wa,i,'ГР_ПЕРЕОЦЕНКИ');
      fi;
     od;
   CloseWorkArea(wa);
   okof='';
 od;
end;

Proc ЗаполнитьСписокОКОФ;
 var wa,rs,i:i;
 var ss:s;
-- if БылОбновленСписокОКОФ:exit;fi;
 if не БылРасчитанСписокОКОФ:БылРасчитанСписокОКОФ=true;
   ClearVariable(СписокОКОФ);
   ClearVariable(СписокАмГр);
   ClearVariable(СписокГрПр);
   ClearVariable(ДатаПоследнегоИзменения_РПО_НФА);
   ClearVariable(ВремяМодификацииСек_РПО_НФА);
 fi;
 if ДатаПоследнегоИзменения_РПО_НФА<1.1.2000:ДатаПоследнегоИзменения_РПО_НФА=1.1.2000;fi;
 ss=DateToString(ДатаПоследнегоИзменения_РПО_НФА);
 wa=OpenWorkArea('РПО_НФА','ОКОФ','length(ОКОФ)>8 and UpdateTime>='+ss+' and UpdateTimeSec>'+str(ВремяМодификацииСек_РПО_НФА));   -- sql вариант= LEN([ОКОФ])>8 and Convert(VarChar,[UpdateTime],108)>'00:01:40'
   rs=Records(wa);
   for i=1..rs do ДобавитьВмассив(СписокОКОФ,true,false,Trim(GetFieldS(wa,i,'ОКОФ')));od;
 CloseWorkArea(wa);
 ВремяМодификацииСек_РПО_НФА=Время;
 ДатаПоследнегоИзменения_РПО_НФА=Сегодня;
 if rs>0:ЗаполнитьСписокАмГр_ГрПр;fi;
 БылОбновленСписокОКОФ=true;
end;
Func ВзятьНомерПоОКОФ(КдОКОФ:s):i;
  ЗаполнитьСписокОКОФ;
  ^ПоискВмассиве(СписокОКОФ,Trim(КдОКОФ),true);
end;
Func ВзятьГРПРПоОКОФ(КдОКОФ:s):s;
  if соотв(КдОКОФ,'11.*') or соотв(КдОКОФ,'12.*') or соотв(КдОКОФ,'13.*'):^'ЗДАНИЯ';fi;
  ЗаполнитьСписокОКОФ;
  ^СписокГрПр[ПоискВмассиве(СписокОКОФ,Trim(КдОКОФ),true)];
end;


var NotDelРОСТ:l;
ФлСвернутыйВид:объект;
ФлПроводить:объект;
СвернутыйВид:l=[true];

var ДРАГМЕТ00_[]:n=ПозицииОС[$].ДРАГМЕТ00/1000000;
var ДРАГМЕТ01_[]:n=ПозицииОС[$].ДРАГМЕТ01/1000000;
var ДРАГМЕТ02_[]:n=ПозицииОС[$].ДРАГМЕТ02/1000000;
var ДРАГМЕТ03_[]:n=ПозицииОС[$].ДРАГМЕТ03/1000000;
var ДРАГМЕТ04_[]:n=ПозицииОС[$].ДРАГМЕТ04/1000000;
var ДРАГМЕТ05_[]:n=ПозицииОС[$].ДРАГМЕТ05/1000000;
var ДРАГМЕТ06_[]:n=ПозицииОС[$].ДРАГМЕТ06/1000000;
var ДРАГМЕТ07_[]:n=ПозицииОС[$].ДРАГМЕТ07/1000000;
var ДРАГМЕТ08_[]:n=ПозицииОС[$].ДРАГМЕТ08/1000000;

var ДРАГМЕТ10_[]:n=Позиции[$].ДРАГМЕТ00/1000000;
var ДРАГМЕТ11_[]:n=Позиции[$].ДРАГМЕТ01/1000000;
var ДРАГМЕТ12_[]:n=Позиции[$].ДРАГМЕТ02/1000000;
var ДРАГМЕТ13_[]:n=Позиции[$].ДРАГМЕТ03/1000000;
var ДРАГМЕТ14_[]:n=Позиции[$].ДРАГМЕТ04/1000000;
var ДРАГМЕТ15_[]:n=Позиции[$].ДРАГМЕТ05/1000000;
var ДРАГМЕТ16_[]:n=Позиции[$].ДРАГМЕТ06/1000000;
var ДРАГМЕТ17_[]:n=Позиции[$].ДРАГМЕТ07/1000000;
var ДРАГМЕТ18_[]:n=Позиции[$].ДРАГМЕТ08/1000000;

var st[]:s;
var st1[]:s;
var st2[]:s;
var in[]:i;
var ForSelect[]:s;
var ForSelect1[]:s;
var ForSelect2[]:s;
var ForSelect3[]:s;
var МК	:s=М;
var МОЛК:s=МОЛ;
var МН	:s=Name_A(М  );
var МОЛН:s=Name_A(МОЛ);
var ДАТОПЕРН:d=ДАТОПЕР;
var МЕСНОРМкн:s='';
var ОБЩАН_ВЫВОД:s=ОБЩАН;

var ЗаголовокГодаПереоценок   :s='Года для расчета';
var ЗаголовокКоэфпереоценок   :s='Коэф. по годам';
var ЗаголовокСуммаПереоценки  :s='Суммы переоценок НФА';
var ЗаголовокСуммаПереоценкиАм:s='Суммы переоценок амортизации';
var ЗаголовокРучАн1Спр	      :s='ЗН';
var ЗаголовокРучАн2Спр	      :s='';
var ЗаголовокРучАн1	      :s='ручной ввод '+Name_A(ЗаголовокРучАн1Спр+'.');
var ЗаголовокРучАн2	      :s='ручной ввод '+Name_A(ЗаголовокРучАн2Спр+'.');

var BlnHelp[]:s;	      -- расчитывается при открытии бланка (шаблонпослеоткрытия)
var BlnHelpIndex[]:s;	      -- пути к файлам с описанием
ЗаголовкиСтолбцовВид[]:i=[2];
var ЗаголовкиСтолбцов[]:s;    -- расчитывается при открытии бланка (шаблонпослеоткрытия)
var ЗаголовкиСтолбцовСчАн[]:l;-- расчитывается при открытии бланка (шаблонпослеоткрытия)

var ЗаголовкиСтолбцовПоказ[]:s;    -- расчитывается при открытии бланка (шаблонпослеоткрытия)
func ВзятьЗаголовкиСтолбцовПоказ(i:i):s;
  if i=15:
     ^if(ЗаголовкиСтолбцовВид[i]=0:ЗаголовкиСтолбцов[i]+chr(13)+'(Учетный и инвентарный)'|
	 ЗаголовкиСтолбцовВид[i]=1:ЗаголовкиСтолбцов[i]+chr(13)+'(Учетный)'|
	 ЗаголовкиСтолбцовВид[i]=2:ЗаголовкиСтолбцов[i]+chr(13)+'(Инвентарный)'
	);
   | true:
     ^if(ЗаголовкиСтолбцовВид[i]=0:ЗаголовкиСтолбцов[i]+chr(13)+'(Код и имя)'|
	 ЗаголовкиСтолбцовВид[i]=1:ЗаголовкиСтолбцов[i]+chr(13)+'(имя)'|
	 ЗаголовкиСтолбцовВид[i]=2:ЗаголовкиСтолбцов[i]+chr(13)+'(Код)'
	);
  fi;

end;
var КОЛНФА_[]:n=Позиции[$].КОЛНФА;var колКн:s='';var СУМНФА_[]:n=Позиции[$].СУМНФА;var ЦЕНАНФА[]=Позиции[$].СУМНФА/Позиции[$].КОЛНФА;
var КОЛНФАОС_[]:n=ПозицииОС[$].КОЛНФА;var колОСКн:s='';var СУМНФАОС_[]:n=ПозицииОС[$].СУМНФА;var ЦЕНАНФАОС[]=ПозицииОС[$].СУМНФА/ПозицииОС[$].КОЛНФА;
var РУЧАНН1  []:s=Позиции  [$].РУЧАН1;
var РУЧАНОСН1[]:s=ПозицииОС[$].РУЧАН1;
var РУЧАНН2  []:s=Позиции  [$].РУЧАН2;
var РУЧАНОСН2[]:s=ПозицииОС[$].РУЧАН2;

var НФАН  []:s=РАБ.НФА.B01.2ВыводП0(Позиции[$].НФА  ,if(length(Позиции[$].НФА)>0	,ЗаголовкиСтолбцовВид[01],-2));
var НФАОСН[]:s=РАБ.НФА.B01.2ВыводП0(ПозицииОС[$].НФА,if(length(ПозицииОС[$].НФА)>0,ЗаголовкиСтолбцовВид[11],-2));
var СУМАМ99[]=ПозицииОС[$].СУМАМ00+ПозицииОС[$].СУМАМ01+ПозицииОС[$].СУМАМ02+ПозицииОС[$].СУМАМ03+
	  ПозицииОС[$].СУМАМ04+ПозицииОС[$].СУМАМ05+ПозицииОС[$].СУМАМ06+ПозицииОС[$].СУМАМ07+
	  ПозицииОС[$].СУМАМ08+ПозицииОС[$].СУМАМ09+ПозицииОС[$].СУМАМ10+ПозицииОС[$].СУМАМ11+ПозицииОС[$].СУМАМ12;
var СУМАМ00_[] =ПозицииОС[$].СУМАМ00;
var Дучет_ []:d=ПозицииОС[$].Дучет;
var Дэкспл_[]:d=ПозицииОС[$].Дэкспл;
var НЕТМЕСАМОРТ_[]:n=ПозицииОС[$].НЕТМЕСАМОРТ;
var ДучетКн:s='';
var ДэксплКн:s='';
var ИтСУМАМ99=СуммаМассива(СУМАМ99,ПозицииОС);
func mindat0(dd1:d;dd2:d):d;
  ^Раб.СТР.MinDebDat2(dd1,dd2);
end;
func mindat0_(iter:i):d;
var dd:d;
  dd=mindat0(ПозицииОС[$].ДУЧЕТ,ПозицииОС[$].ДЭКСПЛ);
  if dd=1.1.100:dd=ДАТОПЕР;fi;
  ^dd;
end;
var СЧНФАН     []:s=РАБ.НФА.B01.2ВыводС0(Позиции[$].СЧНФА  ,if(length(Позиции[$].СЧНФА)>0  ,ЗаголовкиСтолбцовВид[02],-2));
var СЧНФАОСН   []:s=РАБ.НФА.B01.2ВыводС0(ПозицииОС[$].СЧНФА,if(length(ПозицииОС[$].СЧНФА)>0,ЗаголовкиСтолбцовВид[12],-2));
var СЧ00Н      []:s=РАБ.НФА.B01.2ВыводС0(Позиции[$].СЧ00	 ,if(length(Позиции[$].СЧ00)>0	 ,ЗаголовкиСтолбцовВид[03],-2));
var СЧ00ОСН    []:s=РАБ.НФА.B01.2ВыводС0(ПозицииОС[$].СЧ00 ,if(length(ПозицииОС[$].СЧ00)>0 ,ЗаголовкиСтолбцовВид[13],-2));
var ДЕБАМОРТ00Н[]:s=РАБ.НФА.B01.2ВыводС0(ПозицииОС[$].ДЕБАМОРТ00 ,if((length(ПозицииОС[$].ДЕБАМОРТ00)=0 и ПозицииОС[$].СУМАМ00>0 и (ПозицииОС[$].СУМНФА/ПозицииОС[$].КОЛНФА>Общ_Пер('ОС_РАСХ',mindat0_($)) or match(ПозицииОС[$].НФА,'НФА.101.07.*'))),-2 	    ,if(ПозицииОС[$].СУМНФА/ПозицииОС[$].КОЛНФА>Общ_Пер('ОС_РАСХ',mindat0_($)) or match(ПозицииОС[$].НФА,'НФА.101.07.*'),ЗаголовкиСтолбцовВид[16],-1)));
var ДЕБАМОРТН  []:s=РАБ.НФА.B01.2ВыводС0(ПозицииОС[$].ДЕБАМОРТ   ,if((length(ПозицииОС[$].ДЕБАМОРТ)  =0 и (СУМАМ99[$]-ПозицииОС[$].СУМАМ00)>0),-2,if(ПозицииОС[$].СУМНФА/ПозицииОС[$].КОЛНФА>Общ_Пер('ОС_РАСХ',mindat0_($)) or match(ПозицииОС[$].НФА,'НФА.101.07.*'),ЗаголовкиСтолбцовВид[18],-1)));
var СЧЕТАМОРТН []:s=РАБ.НФА.B01.2ВыводС0(ПозицииОС[$].СЧЕТАМОРТ  ,if((length(ПозицииОС[$].СЧЕТАМОРТ) =0 и ПозицииОС[$].СУМАМ00>0 и (ПозицииОС[$].СУМНФА/ПозицииОС[$].КОЛНФА>Общ_Пер('ОС_РАСХ',mindat0_($)) or match(ПозицииОС[$].НФА,'НФА.101.07.*'))),-2 	    ,if(ПозицииОС[$].СУМНФА/ПозицииОС[$].КОЛНФА>Общ_Пер('ОС_РАСХ',mindat0_($)) or match(ПозицииОС[$].НФА,'НФА.101.07.*'),ЗаголовкиСтолбцовВид[17],-1)));
var ДопАнН     []:s=РАБ.НФА.B01.ФорматСтрокиАн(Позиции[$].ДопАн  ,' ',chr(13),if(length(Позиции  [$].ДопАн)>0,ЗаголовкиСтолбцовВид[04],-2));
var ДопАнОСН   []:s=РАБ.НФА.B01.ФорматСтрокиАн(ПозицииОС[$].ДопАн,' ',chr(13),if(length(ПозицииОС[$].ДопАн)>0,ЗаголовкиСтолбцовВид[14],-2));
var НомерИНВ[]	 :S=РАБ.НФА.B01.2ВыводП_ИНВ
 (
   ПозицииОС[$].НФА,
   ПозицииОС[$].УЧНОМ, 
   if(
      ПозицииОС[$].СУМНФА/ПозицииОС[$].КОЛНФА>Общ_Пер('ОС_РАСХ',mindat0_($)) or match(ПозицииОС[$].НФА,'НФА.101.07.*') or match(ПозицииОС[$].СЧНФА,'???.????.???????.???.?.10?.1?.???') or НФА_НЕСПИСЫВАТЬДО1000(ПозицииОС[$].НФА),
      if(
	 length(ПозицииОС[$].УЧНОМ)>0,
	 ЗаголовкиСтолбцовВид[15],
	 -2
	),
      -1
     ),
   "б/н", 
   chr(13)
 );

var СУМАМ99_:s='Итого начисленая амортизация к 31.12.'+ГОДОСТ+'г.';
func СвернутыйВидРасчетМес(i:i):s;
var ss:s;
if ПозицииОС[i].СУМАМ01<>0:ss=ss+if(длина(ss)>0,chr(13),'')+'январь'  ;fi;
if ПозицииОС[i].СУМАМ02<>0:ss=ss+if(длина(ss)>0,chr(13),'')+'февраль' ;fi;
if ПозицииОС[i].СУМАМ03<>0:ss=ss+if(длина(ss)>0,chr(13),'')+'март'    ;fi;
if ПозицииОС[i].СУМАМ04<>0:ss=ss+if(длина(ss)>0,chr(13),'')+'апрель'  ;fi;
if ПозицииОС[i].СУМАМ05<>0:ss=ss+if(длина(ss)>0,chr(13),'')+'май'     ;fi;
if ПозицииОС[i].СУМАМ06<>0:ss=ss+if(длина(ss)>0,chr(13),'')+'июнь'    ;fi;
if ПозицииОС[i].СУМАМ07<>0:ss=ss+if(длина(ss)>0,chr(13),'')+'июль'    ;fi;
if ПозицииОС[i].СУМАМ08<>0:ss=ss+if(длина(ss)>0,chr(13),'')+'август'  ;fi;
if ПозицииОС[i].СУМАМ09<>0:ss=ss+if(длина(ss)>0,chr(13),'')+'сентябрь';fi;
if ПозицииОС[i].СУМАМ10<>0:ss=ss+if(длина(ss)>0,chr(13),'')+'октябрь' ;fi;
if ПозицииОС[i].СУМАМ11<>0:ss=ss+if(длина(ss)>0,chr(13),'')+'ноябрь'  ;fi;
if ПозицииОС[i].СУМАМ12<>0:ss=ss+if(длина(ss)>0,chr(13),'')+'декабрь' ;fi;
^ss;
end;
func СвернутыйВидРасчетСум(i:i):s;
var ss:s;
if ПозицииОС[i].СУМАМ01<>0:ss=ss+str(ПозицииОС[i].СУМАМ01,2)+chr(13);fi;
if ПозицииОС[i].СУМАМ02<>0:ss=ss+str(ПозицииОС[i].СУМАМ02,2)+chr(13);fi;
if ПозицииОС[i].СУМАМ03<>0:ss=ss+str(ПозицииОС[i].СУМАМ03,2)+chr(13);fi;
if ПозицииОС[i].СУМАМ04<>0:ss=ss+str(ПозицииОС[i].СУМАМ04,2)+chr(13);fi;
if ПозицииОС[i].СУМАМ05<>0:ss=ss+str(ПозицииОС[i].СУМАМ05,2)+chr(13);fi;
if ПозицииОС[i].СУМАМ06<>0:ss=ss+str(ПозицииОС[i].СУМАМ06,2)+chr(13);fi;
if ПозицииОС[i].СУМАМ07<>0:ss=ss+str(ПозицииОС[i].СУМАМ07,2)+chr(13);fi;
if ПозицииОС[i].СУМАМ08<>0:ss=ss+str(ПозицииОС[i].СУМАМ08,2)+chr(13);fi;
if ПозицииОС[i].СУМАМ09<>0:ss=ss+str(ПозицииОС[i].СУМАМ09,2)+chr(13);fi;
if ПозицииОС[i].СУМАМ10<>0:ss=ss+str(ПозицииОС[i].СУМАМ10,2)+chr(13);fi;
if ПозицииОС[i].СУМАМ11<>0:ss=ss+str(ПозицииОС[i].СУМАМ11,2)+chr(13);fi;
if ПозицииОС[i].СУМАМ12<>0:ss=ss+str(ПозицииОС[i].СУМАМ12,2)	    ;fi;
^ss;
end;

var СвертМес_ :s='Месяцы начислений за '+ГОДОСТ+'г.';
var СвертСум_ :s='Суммы начислений за '+ГОДОСТ+'г.';
var СвертМес[]:s=СвернутыйВидРасчетМес($);
var СвертСум[]:s=СвернутыйВидРасчетСум($);
var HLMAX[]:i=max(int(round(КоличествоСлов(ДопАнОСН[$],chr(13))/2-0.1)),int(round(КоличествоСлов(СвертМес[$],chr(13))/2-0.1)));
var HL[]:s=Повтор(chr(13),HLMAX[$]);

var ADD:s="+";
var ADDос:s="+";
var NN[]:i=$;
var NNос[]:i=$;
--var СУМАМ001[]=deb(Позиции[$].СУМАМ00);
var ИтКОЛНФА   =СуммаМассива(Позиции[].КОЛНФА );
var ИтСУМНФА   =СуммаМассива(Позиции[].СУМНФА );
var ИтКОЛНФАос =СуммаМассива(Позицииос[].КОЛНФА );
var ИтСУМНФАос =СуммаМассива(Позицииос[].СУМНФА );
var ИтСУМам00  =СуммаМассива(Позицииос[].СУМам00 );
var ИтСУМперНФА=СуммаМассива(Позицииос[].СУМПЕРЕОЦЕНОКНФАИТОГ );
var ИтСУМперАМ =СуммаМассива(Позицииос[].СУМПЕРЕОЦЕНОКАМОРТИТОГ );

----НовыйОтчетныйПериодНачало:d=[1.1.2005];
--ДАТОПЕР_:d=if(ДАТОПЕР<НовыйОтчетныйПериодНачало,НовыйОтчетныйПериодНачало,ДАТОПЕР);
Секц_мат_шапка1       :секция;
Секц_мат_шапка2       :секция;
Секц_позиции	      :секция;
Секц_позиции_итого    :секция;

Секц_позиции_ос_шапка1:секция;
Секц_позиции_ос_шапка2:секция;
Секц_позиции_ос       :секция;
Секц_позиции_ос_итого :секция;


--2_--0.  2Func0 _Выгрузить_СтрМассив_Вфайл.(ИмяМассива:s;ИмяМассива2:s;нач1:i;нач2:i;Файл:s;Дописывать:l):l;
-------------------------------------------------------------------------------------------------------------------------------------------
---- добавляет массивы ИмяМассива+ИмяМассива2 в конец другого файла
-------------------------------------------------------------------------------------------------------------------------------------------

--2_--0.  2Func0 _Загрузить_СтрМассив_ИзФайла.(ИмяМассива:s;ИмяМассива2:s;нач1:i;Файл:s):l;
-------------------------------------------------------------------------------------------------------------------------------------------
--2--0загружает массивы содержимым файла(обрезает строки до 512 символов если они превышают 512)
-------------------------------------------------------------------------------------------------------------------------------------------
Proc OpenBlnHelpIndex(i:i);
 if not РАБ.НФА.B03.ВыводФайлфАльтернатива(PlanVar('ПомощьНФА')+'\'+BlnHelpIndex[i],'Помощь по текущему разделу...',90):
    Message('Ошибка чтения файла документации^Mлибо файл не найден',mtWarning);
 fi;
end;
func ПриВходеПомощь(s:s;i:i):l;
  var ii:i;
  ii=РАБ.НФА.B01.ВзятьИндексМассива(s);
  if ii>0:OpenBlnHelpIndex(ii);fi;
  ^false  ;
end;
Proc ОбновитьВнешнийВид;
var i:i;
var x:i;
 x=5;
 if УчитыватьДрагМет:x=0;fi;
 for i=17+4..25 do
   Секц_позиции_ос_шапка1.Column(i  ,ColVisible,ПЕРЕОЦЕНКА);
   Секц_позиции_ос_шапка2.Column(i-1,ColVisible,ПЕРЕОЦЕНКА);
   Секц_позиции_ос.Column	(i+4,ColVisible,ПЕРЕОЦЕНКА);
   Секц_позиции_ос_итого.Column (i-1,ColVisible,ПЕРЕОЦЕНКА);

   Секц_позиции_ос_шапка1.Column(i-4,ColVisible,год(НовыйОтчетныйПериодНачалоН)<=год(датопер));
   Секц_позиции_ос_шапка2.Column(i-5,ColVisible,год(НовыйОтчетныйПериодНачалоН)<=год(датопер));
   Секц_позиции_ос.Column	(i  ,ColVisible,год(НовыйОтчетныйПериодНачалоН)<=год(датопер));
   Секц_позиции_ос_итого.Column (i-5,ColVisible,год(НовыйОтчетныйПериодНачалоН)<=год(датопер));
 od;
 for i=17..21 do
   Секц_позиции_ос_шапка1.Column(i-4,ColVisible,УчитыватьДрагМет);
   Секц_позиции_ос_шапка2.Column(i-5,ColVisible,УчитыватьДрагМет);
   Секц_позиции_ос.Column	(i  ,ColVisible,УчитыватьДрагМет);
   Секц_позиции_ос_итого.Column (i-5,ColVisible,УчитыватьДрагМет);
 od;
 for i=14..22 do
   Секц_мат_шапка1.Column    (i-2,ColVisible,УчитыватьДрагМет);
   Секц_мат_шапка2.Column    (i,ColVisible,УчитыватьДрагМет);
   Секц_Позиции.Column	     (i,ColVisible,УчитыватьДрагМет);
   Секц_позиции_итого.Column (i,ColVisible,УчитыватьДрагМет);
 od;
end;

--func СохранитьНастройкиСправочников(ВидНастроек:s;Значение:s):l;
-- var i,j:i;
-- var ll:l;
-- var ss1,ss2,Файл:s;
--  ClearVariable(st );
--  ClearVariable(st1);
--  ВидНастроек=up(ВидНастроек);
--  if ВидНастроек=up('Настройки справочников журнала ввода остатков НФА:'):
--     ss1=trim(ПеремПБ('БУХ'));
--     if ss1='.' or ss1='':Файл='НастройкиНФА.cfg';
--	| true:Файл=ss1+'\НастройкиНФА.cfg';
--     fi;
--     if ЕстьФайл(Файл):
--	 ll=РАБ.НФА.B03._Загрузить_СтрМассив_ИзФайла.(БланкКОД+'.st',БланкКОД+'.st1',1,Файл);
--	 if not ll:^ll;fi;
--	 j=ДлинаМассива(st);
--	 if j>0:
--	   for i=1..j do
--	    if pos(ВидНастроек,st[i])=1:-- нашли нашу настройку
--	       st[i]=ВидНастроек;st1[i]=trim(Значение);
--	    fi;
--	   od;
--	  | true:st[1]=ВидНастроек;st1[1]=trim(Значение);
--	 fi;
--	| true:st[1]=ВидНастроек;st1[1]=trim(Значение);
--     fi;
--   | true:^false;
--  fi;
--  ^РАБ.НФА.B03._Выгрузить_СтрМассив_Вфайл.(БланкКОД+'.st',БланкКОД+'.st1',1,ДлинаМассива(st),Файл,false);
--end;
--func СчитатьНастройкиСправочников(ВидНастроек:s):s;
-- var i,j:i;
-- var ll:l;
-- var ss1,ss2,Файл:s;
--  ClearVariable(st );
--  ClearVariable(st1);
--  ВидНастроек=up(ВидНастроек);
--  if ВидНастроек=up('Настройки справочников журнала ввода остатков НФА:'):
--     ss1=trim(ПеремПБ('БУХ'));
--     if ss1='.' or ss1='':Файл='НастройкиНФА.cfg';
--	| true:Файл=ss1+'\НастройкиНФА.cfg';
--     fi;
--     if ЕстьФайл(Файл):
--	 ll=РАБ.НФА.B03._Загрузить_СтрМассив_ИзФайла.(БланкКОД+'.st',БланкКОД+'.st1',1,Файл);
--	 if not ll:^'';fi;
--	 j=ДлинаМассива(st);
--	 for i=1..j do
--	  if pos(ВидНастроек,st[i])=1:-- нашли нашу настройку
--	     ss1=SubStr(st[i],Длина(ВидНастроек)+1,256)+st1[i];
--	     ^ss1;
--	  fi;
--	 od;
--     fi;
--  fi;
--  ^'';
--end;

func ПолныхМесяцев(dd1:d;dd2:d):i;-- результат= сколько раз между датами поменялся месяц
  var yy,mm1,mm2:i;
  var d1,d2:d;
  if dd1<dd2:d1=dd1;d2=dd2;
   | true:d2=dd1;d1=dd2;
  fi;
  mm1=год(d1)*12+мес(d1);
  mm2=год(d2)*12+мес(d2);
  ^mm2-mm1;
end;

func modtab(s:s;i:i):l;
var n : i;
var m : i;
var l : i;
var res : i;
  ClearVariable(st);
  st[1] = "Копировать текущую запись";
  st[2] = "Добавить запись после текущей";
  st[3] = "Добавить 20 записей после текущей";
  st[4] = "Добавить запись перед текущей";
  st[5] = "Удалить N записей, включая текущую";
  st[6] = "Удалить текущую запись";
  n = 1;
  n = alternate ( "Добавить/удалить запись таблицы", st, 40) ;
  if n = 1 :
    try
      if s='NN'  :insertframe(Позиции  ,i+1);РАБ.НФА.B01.КопироватьЗаписьПодтаблицыБланкаРедактора(БланкКОД+'.СписокПолейКартотеки',ДлинаМассива(СписокПолейКартотеки),ИМЯКРТ,'ПОЗИЦИИ'  ,i,i+1);
       | s='NNос':insertframe(ПозицииОС,i+1);РАБ.НФА.B01.КопироватьЗаписьПодтаблицыБланкаРедактора(БланкКОД+'.СписокПолейКартотеки',ДлинаМассива(СписокПолейКартотеки),ИМЯКРТ,'ПОЗИЦИИОС',i,i+1);
       | true:^false;
      fi;
    except
    end;
  |  n = 2 : try
	      if s='NN'  :insertframe(Позиции  ,i+1);
	       | s='NNос':insertframe(ПозицииОС,i+1);
	      fi;
	     except 
	     end;
  |  n = 3 : try for n=1..20 do
		   if s='NN'  :insertframe(Позиции  ,i+1);
		    | s='NNос':insertframe(ПозицииОС,i+1);
		   fi;
		 od;
	     except 
	     end;
  |  n = 4 : try
	       if s='NN'  :insertframe(Позиции	,i+1);
		| s='NNос':insertframe(ПозицииОС,i+1);
	       fi;
	     except 
	     end;
  |  n = 5 :
    res=Input(m, "Сколько записей удалить?");
    if res = кмдВерно:
      try
      for n=1..m do
	if s='NN'  :deleteframe(Позиции  ,i);
	 | s='NNос':deleteframe(ПозицииОС,i);
	fi;
      od;
      except 
      end;
    fi;
  |  n = 6 :
      try
	if s='NN'  :deleteframe(Позиции  ,i);
	 | s='NNос':deleteframe(ПозицииОС,i);
	fi;
      except 
      end;
  fi;
^false;
end;
--proc ПриИзмененииОС;
--var i,j,k,:i;
--var месДАТОПЕР:i;
-- if ДАТОПЕР<ДАТОПЕР_:месДАТОПЕР=0;
--  | true:месДАТОПЕР=мес(ДАТОПЕР);
-- fi;
---- if not ОС:
----   for i=6..27 do
----	 Секц_Позиции0.Column(i,ColVisible,ОС);
----	 Секц_Позиции.Column (i,ColVisible,ОС);
----	 Секц_Позиции1.Column(i,ColVisible,ОС);
----   od;
--end;
--func НачислениеАморт(НФА:s;Сум:n;КОЛ:n;ДЭКСП:d;ДОПЕР:d;МСНОРМ:n;СУМАМ05:n;НачСледПериода:d):n;
--  var месяцевВучетеПосле2005,nn1,nn2:n;
--    nn1=0;
--    if ДОПЕР<01.01.2006:Сум=trunc(Сум/КОЛ)*КОЛ;fi;
--    if pos(SubStr(НФА,5,6),2НФАУСЛАМОРТКАРТ0)>0:
--	if Сум/КОЛ<10001:^0;fi;
--	if ДЭКСП<01.01.2005:месяцевВучетеПосле2005=(Год(ДОПЕР)-2005)*12+Мес(ДОПЕР);
--	 | true     :месяцевВучетеПосле2005=(Год(ДОПЕР)-Год(ДЭКСП))*12+Мес(ДОПЕР)-Мес(ДЭКСП);-- т.е. кол раз когда ОС пережило конец месяца
--	fi;
--	if НачСледПериода>ДОПЕР:-- Если остатки для след периода, то начисляем на все месяцы до начала след периода (не включая мес след периода)
--				-- т.е. если НачСледПериода=01,01,2008, то начисляем по декабрь 2007 года включительно
--				-- если дата принятия к учету тоже декабрь 2007 то ПЕРИОД.2007.4.12 , иначе без периода
--	   if ДЭКСП<01.01.2005:месяцевВучетеПосле2005=(Год(НачСледПериода)-2005)*12+Мес(НачСледПериода)-1;
--	    | true	      :месяцевВучетеПосле2005=(Год(НачСледПериода)-Год(ДЭКСП))*12+Мес(НачСледПериода)-Мес(ДЭКСП)-1;-- т.е. кол раз когда ОС пережило конец месяца
--	   fi;
--	   nn1=Сум*месяцевВучетеПосле2005*МСНОРМ/100+if(ДЭКСП<01.01.2005,СУМАМ05,0);--должно быть начислено без учета сроков
--	   if nn1>Сум:nn1=Сум;fi; -- если перебор то оставляем 100% стоимости
--	 | true:^0;
--	fi;
--    fi;
-- ^nn1;
--end;
proc ОбнулитьАмортизациюТекущегоПериода(i:i);
  if ПозицииОС[i].СумАм01<>0:ПозицииОС[i].СумАм01=0;fi;
  if ПозицииОС[i].СумАм02<>0:ПозицииОС[i].СумАм02=0;fi;
  if ПозицииОС[i].СумАм03<>0:ПозицииОС[i].СумАм03=0;fi;
  if ПозицииОС[i].СумАм04<>0:ПозицииОС[i].СумАм04=0;fi;
  if ПозицииОС[i].СумАм05<>0:ПозицииОС[i].СумАм05=0;fi;
  if ПозицииОС[i].СумАм06<>0:ПозицииОС[i].СумАм06=0;fi;
  if ПозицииОС[i].СумАм07<>0:ПозицииОС[i].СумАм07=0;fi;
  if ПозицииОС[i].СумАм08<>0:ПозицииОС[i].СумАм08=0;fi;
  if ПозицииОС[i].СумАм09<>0:ПозицииОС[i].СумАм09=0;fi;
  if ПозицииОС[i].СумАм10<>0:ПозицииОС[i].СумАм10=0;fi;
  if ПозицииОС[i].СумАм11<>0:ПозицииОС[i].СумАм11=0;fi;
  if ПозицииОС[i].СумАм12<>0:ПозицииОС[i].СумАм12=0;fi;
end;
func НачислениеАмортизации(i:i):i;
 var ОстСтОС,СумАмМес,СумТекущНачисл:n;
 var МесНачАм,МесКонАм,j:i;
 var НачОтчГода:d;
 var js,ss:s;
 var МесНормСум,ОсталосьНачислить,nn:n;
 var МесяцевДляНачисления,НачМесяц,КонМесяц,СрокАм,КЛГРУПП,p:i;
 var НачГода, ДатаВвода, ДатаНачалаНачАморт :d;
 var ЦЕНА:n;
 var Посуда:l;

 ЦЕНА=trunc(ЦЕНАНФАОС[i]);
 if ЦЕНА<=Общ_Пер('ОС_РАСХ',mindat0_(i)):-- амортизация не начисляется
    ОбнулитьАмортизациюТекущегоПериода(i);
    if ПозицииОС[i].СУМАМ00   <>0 :ПозицииОС[i].СУМАМ00   =0 ;fi;
    if ПозицииОС[i].ДЕБАМОРТ  <>'':ПозицииОС[i].ДЕБАМОРТ  ='';fi;
    if ПозицииОС[i].ДЕБАМОРТ00<>'':ПозицииОС[i].ДЕБАМОРТ00='';fi;
    if ПозицииОС[i].СЧЕТАМОРТ <>'':ПозицииОС[i].СЧЕТАМОРТ ='';fi;
  | ЦЕНА>Общ_Пер('ОС_РАСХ',mindat0_(i)) и ЦЕНА<=Общ_Пер('ОС_100',mindat0_(i)):
     ОбнулитьАмортизациюТекущегоПериода(i);
     if ПозицииОС[i].ДЕБАМОРТ<>'':ПозицииОС[i].ДЕБАМОРТ='';fi;

     if pos('М.Э.',trim(up(М)))=1:--100% в эксплуатации
	if ПозицииОС[i].СУМАМ00<>ПозицииОС[i].СУМНФА  :ПозицииОС[i].СУМАМ00=ПозицииОС[i].СУМНФА ;fi;
  --	  if ПозицииОС[i].Дэкспл<dd0:Message('Не заполнена дата ввода в эксплуатацию!',mtWarning);Шаблон.Поле='Дэкспл_';Шаблон.Кадр=i;fi;
  --	  if ПозицииОС[i].Дучет<dd0:Message('Не заполнена дата принятия к учету!',mtWarning);Шаблон.Поле='Дучет_';Шаблон.Кадр=i;fi;
      | pos('М.Х.',trim(up(М)))=1:
	if ПозицииОС[i].Дэкспл>=ПозицииОС[i].Дучет и ПозицииОС[i].Дучет>dd0:--100%, ОС на хранении, но б/у так как Дэкспл>=Дучет
	   if ПозицииОС[i].СУМАМ00<>ПозицииОС[i].СУМНФА:ПозицииОС[i].СУМАМ00=ПозицииОС[i].СУМНФА ;fi;
	 | ПозицииОС[i].Дучет>dd0 и ПозицииОС[i].Дэкспл>dd0: --100% ОС пришло к нам б/у
	   if ПозицииОС[i].СУМАМ00<>ПозицииОС[i].СУМНФА:ПозицииОС[i].СУМАМ00=ПозицииОС[i].СУМНФА ;fi;
	 | ПозицииОС[i].Дэкспл<dd0:-- 0% новое ОС либо забыли заполнить Дэкспл
	   if ПозицииОС[i].СУМАМ00<>0:ПозицииОС[i].СУМАМ00=0  ;fi;
	fi;
     fi;
  | ЦЕНА>Общ_Пер('ОС_100',mindat0_(i)):-- Начисляем обычным способом
    ОбнулитьАмортизациюТекущегоПериода(i);
    ОстСтОС=ПозицииОС[i].СУМНФА-ПозицииОС[i].СУМАМ00;
    --СумАмМес=ОстСтОС/ОставшийсяСрокЭксплуатации(ПозицииОС[i].НФА,ПозицииОС[i].Дэкспл,ПозицииОС[i].Дучет,ДатОпер);
    if ПозицииОС[i].Дучет>dd0 и ПозицииОС[i].Дэкспл<dd0:-- приняли к учету новое ОС
       ДатаНачалаНачАморт=ПозицииОС[i].Дучет;
     | ПозицииОС[i].Дучет<dd0 и ПозицииОС[i].Дэкспл>dd0:-- приняли к учету б/у, но забыли ввести Дучет
       ДатаНачалаНачАморт=ПозицииОС[i].Дэкспл;
     | ПозицииОС[i].Дучет>dd0 и ПозицииОС[i].Дэкспл>dd0:-- приняли к учету и ввели в эксплуатацию
       if ПозицииОС[i].Дучет<ПозицииОС[i].Дэкспл:-- ввели в эксплуатацию в нашей организации (принимали к учету как новое)
	  ДатаНачалаНачАморт=ПозицииОС[i].Дучет;
	| true:-- ввели в эксплуатацию не в нашей организации (принимали к учету как б/у)
	  ДатаНачалаНачАморт=ПозицииОС[i].Дэкспл;
       fi;
     | true:^-1;-- ошибка начисления- не введены даты
    fi;
    КЛГРУПП=0;СрокАм=0;
    ss=Раб.НФА.B01.ПолеПоПризнакуС(ПозицииОС[i].НФА,'ОКОФ');
    p=ВзятьНомерПоОКОФ(ss);
    if p>0:КЛГРУПП=СписокАмГр[p];fi;
    if КЛГРУПП<1:-- не смогли вычислить КЛГРУПП- дополнительные вычисления
    fi;
    if КЛГРУПП>0:СрокАм=РАБ.НФА.B01.ВзятьСрокАмортГруппы(КЛГРУПП)*12;
     | true:СрокАм=int(Раб.НФА.B01.ПолеПоПризнакуЧ(ПозицииОС[i].НФА,'СрокАм')*12);
    fi;
    if СрокАм<1:^-2;fi;-- ошибка начисления-не смогли вычислить СРОК_АМ
    СрокАм=int(deb(СрокАм-ПолныхМесяцев(Датопер,ДатаНачалаНачАморт)));
    if СрокАм=0:^-3;fi;-- срок реальной эксплуатации превышает расчетную
    СумАмМес=trunc(ОстСтОС/СрокАм,2);
--    сумма аморт в месяц= оставшуюся амортизацию разделить на оставшийся срок эксплуатации в месяцах
--    оставш аморт=ПозицииОС[i].СУМНФА-ПозицииОС[i].СУМАМ00;
--    оставш срок=срок в месяцах-(ДатОпер-min(ПозицииОС[i].Дэкспл>dd0,ПозицииОС[i].Дучет>dd0))
--    начисляем от след месяца за Дучет до месяца ДатОпер включительно, если Дучет>=НачОтчГода
--    если Дучет<НачОтчГода то начисляем от даты начала отчетного периода до месяца ДатОпер включительно
-- ПолныхМесяцев(31.12.2000,1.1.2001);
--    СумАмМес=200;
    НачОтчГода=StringToDate('01.01.'+str(год(ДатОпер)));
    if ПозицииОС[i].Дучет<НачОтчГода:МесНачАм=1;
     | true:МесНачАм=Мес(ПозицииОС[i].Дучет)+1;
    fi;
    МесКонАм=Мес(ДатОпер);j=0;
    while МесНачАм+j-1<МесКонАм do
      if ОстСтОС<СумАмМес:СумТекущНачисл=ОстСтОС;
       | true:СумТекущНачисл=СумАмМес;
      fi;
      j=j+1;js=str(МесНачАм+j-1);if МесНачАм+j-1<10:js='0'+js;fi;
      ЗаписатьПеременнуюЧ('ПозицииОС['+str(i)+'].СУМАМ'+js,СумТекущНачисл);
      ОстСтОС=ОстСтОС-СумТекущНачисл;
      if ОстСтОС=0:break;fi;
    od;
 fi;
 if не ОстаткиТекущегоПериода:ОбнулитьАмортизациюТекущегоПериода(i);fi;
 ^0;
end;
func ВыборОтчетногоПериода(d:d):d;
var ii,i:i;
var ss:s;
  ClearVariable(st);
  ii=год(d);
  ss='--';
  st[1]=str(ii)+ss+'текущий';
  st[2]=str(ii+1)+ss+'следующий';
  i=AlternateTree('Выбор отчетного периода для даты операции ['+ДатуВстроку(датопер)+']',st,40,1,12,'|','Отчетный период','Примечание',15,false);
  if i<1:i=1;fi;
  ^СтрокуВДату('1.1.'+SubStr(st[i],1,4));
end;

func ВыборНастройки:i;
var i,j,k:i;
ClearVariable(st);
k=0;
  j=ДлинаМассива(ОбщМенюОбъект);
  for i=1..j do
    if ОбщМенюОбъект_Разр[i]:k=k+1;
       st[k]=ОбщМенюОбъект_Надп[i]+'--'+ОбщМенюОбъект_Подск[i];
       in[k]=i;
    fi;
  od;
  ^ДеревоАльтернатив('Меню:',st,-1,12,0,'.','Пункт меню','Назначение',-1,true);
end;
--proc Изменить_Настройки_справочников;
--var i,j,k,j1,j2,j3,j4,z,z1:i;
--var ss,ss1,ss2,ss3,СписокСправочников1,СписокСпрРазр:s;
--СписокСпрРазр='(ВД.*|ВИДДОК.*|ВКЛ.*|ВП.*|ГГ.*|ГНФА.*|ДОГОВОР.*|ДОК.*|КВ.*|КОСГУ.*|КТ.*|ММДД.*|П.*|ПГР.*|ПРТ.*|РБС.*|УВ.*|Ф.*|Ц.*|РК.*|ДГ*)';
--СписокСправочников1=up(СписокСправочников);
----if trim(СписокСправочников1)='':СписокСправочников1='ВД.*|КВ.106.01.*';fi;
--ClearVariable(st);
--ss='--';
--k=0;
--  st[01]='Отмена   '+ss+'=> отказ от изменений';
--  st[02]='Применить'+ss+'=> применить изменения';
--  st[03]='Добавить '+ss+'=> добавить группу или справочник в ['+СписокСправочников1+']';
--  st[04]='Удалить  '+ss+'=> удалить группу или весь справочник из ['+СписокСправочников1+']';
--  j1=int(длина(st[3])*0.75);
--  j2=int(max(int(длина(st[3])*0.75),int(длина(st[4])*0.75)));

--  i=	ДеревоАльтернатив('Изменение настроек справочников:['+СписокСправочников1+']',st,j2,1,12,'.','Пункт меню','Назначение',10,true);
--  while i>1 do
--    if i=2:СписокСправочников=СписокСправочников1;
--	    if СохранитьНастройкиСправочников('Настройки справочников журнала ввода остатков НФА:',СписокСправочников):
--	     beep;
--	    fi;
--	    exit;
--     | i=3:
--	 if длина(СписокСправочников1)>0:ss2=СписокСпрРазр+'&~('+СписокСправочников1+')';
--	  | true:ss2=СписокСпрРазр;
--	 fi;
--	 ss1=up(ВыборПризнака(ss2, false, True));
--	 if ss1<>'':
--	   if SubStr(ss1,длина(ss1),1)<>'.':
--	     k=КоличествоСлов(ss1,'.')-1;
--	     ss1=выделитьСлова(1,k,ss1,'.')+'.';
--	   fi;
--	   k=КоличествоСлов(СписокСправочников1,'|');
--	   ss3='';
--	   for z=1..k do
--	     ss2=выделитьСлово(z,СписокСправочников1,'|');
--	     if pos(ss1,ss2)<>1:
--	       ss3=ss3+'|'+ss2;
--	     fi;
--	   od;
--	   ss3=ss3+'|'+ss1+'*';
--	   k=КоличествоСлов(ss3,'|');
--	   СписокСправочников1=выделитьСлова(1,k,ss3,'|');
--	 fi;
--     | i=4:
--	 ClearVariable(st1);
--	 k=КоличествоСлов(СписокСправочников1,'|');
--	 if k>0:
--	   j2=0;
--	   j4=8;
--	   for z=1..k do
--	     ss1=выделитьСлово(z,СписокСправочников1,'|');
--	     j3=КоличествоСлов(ss1,'.');
--	     for z1=1..j3-1 do
--	       ss2=выделитьСлова(1,z1,ss1,'.')+'.';
--	       ДобавитьВмассив(st1,true,false,ss2+ss+Name_A(ss2));
--	       j2=int(max(j2,if(длина(ss2)<8,8,длина(ss2))+длина(Name_A(ss2))));

--	       j4=int(max(j4,длина(ss2)));
--	     od;
--	     ДобавитьВмассив(st1,true,false,ss2+'*');
--	     j2=int(max(j2,длина(ss2)));
--	     j4=int(max(j4,длина(ss2)));
--	   od;
--	   СортироватьМассив(st1,false);
--	   z=ДеревоАльтернатив('удалить группу или весь справочник из ['+СписокСправочников1+']',st1,j2,0,12,'.','Пункт меню','Назначение',j4,true);
--	     ss1=trim(выделитьСлово(1,st1[z],'--'));
--	     if SubStr(ss1,длина(ss1),1)='*':ss1=SubStr(ss1,1,длина(ss1)-1);fi;
--	     ss3='';
--	     for z=1..k do
--	       ss2=выделитьСлово(z,СписокСправочников1,'|');
--	       if pos(ss1,ss2)<>1:
--		 ss3=ss3+'|'+ss2;
--	       fi;
--	     od;
--	     k=КоличествоСлов(ss3,'|');
--	     СписокСправочников1=выделитьСлова(1,k,ss3,'|');
--	 fi;
--    fi;
--    st[03]='Добавить '+ss+'=> добавить группу или справочник в ['+СписокСправочников1+']';
--    st[04]='Удалить  '+ss+'=> удалить группу или весь справочник из ['+СписокСправочников1+']';
--    j2=int(max(int(длина(st[3])*0.75),int(длина(st[4])*0.75)));
--    i=ДеревоАльтернатив('Изменение настроек справочников:['+СписокСправочников1+']',st,j2,i,12,'.','Пункт меню','Назначение',10,true);
--  od;
--  if i<2:
--    if СписокСправочников<>СписокСправочников1:
--	 if вопрос('Были изменены настройки!','Старое значение:'+СписокСправочников+'^MНовое значение:'+СписокСправочников1+'^MСохранить изменения?','Отмена;Сохранить',mtWarning)=2:
--	    СписокСправочников=СписокСправочников1;
--	    if СохранитьНастройкиСправочников('Настройки справочников журнала ввода остатков НФА:',СписокСправочников):
--	     beep;
--	    fi;
--	 fi;
--    fi;
--  fi;
--end;

Proc КнОбщМеню_OnClick(S:S);
 var i:i;
 if s='КнОбщМеню01': -- Отмена
       РедакторОтменить;exit;
  | s='КнОбщМеню02': -- Сохранить
       РедакторПрименить;exit;
  | s='КнОбщМеню03': -- Печать
       Печать('','','',false,0,0,true);exit;
  | s='КнОбщМеню04': -- Закрыть
       Закрыть;exit; -- Закрыть
  | s='КнОбщМеню05': -- Начало документа
       Шаблон.Row=1;exit;
  | s='КнОбщМеню06': -- Конец документа
       Шаблон.Row=999;exit;
  | s='КнОбщМеню07': -- ВыборНастройки
       i=5;
       while i=5 do i=ВыборНастройки;od;
       if i<>0:
	 КнОбщМеню_OnClick(ОбщМенюОбъект[in[i]]);
	 Exit;
       fi;
--  | s='КнОбщМеню08': -- Настройки справочников
--	 Изменить_Настройки_справочников;exit;
 fi;
-- message(S);
end;
2Func0 2ИспользованыПризнаки0(УслНаПризнаки:s):l;
  ^ЕстьПроводки('{'+УслНаПризнаки+'}',1.1.100,1.1.2099);
2end0;

2Func0 2РасчетНезадействованныхПризнаков0 (s:s;i:i;kol:i;l:l;ДопПр:s;УслЦ:s):s;
  --РасчетНезадействованныхПризнаков(s,i,Позиции,true,'&'+Позиции[i].НФА,'Ц>1000');
 -- ДопПр = Условие для НФА
 -- kol-- количество выводимых признаков
 -- l  -- обновлять поиск после занятого признака
 var KolProverka:i;
 var j,t,z,k,jj:i;
 var a,sg,ss,ss1:s;
 var УслЦена:l;
   ss=SubStr(ДопПр,2,255);
   KolProverka=100;
   ClearVariable(ForSelect );
   ClearVariable(ForSelect1);
   ClearVariable(ForSelect2);
   ClearVariable(ForSelect3);
   if ДопПр='&':ДопПр='';fi;
   a='УЧН.*';
   k=kol;
   j=i;
    if length(ПозицииОС[i].Учном)>4:
       ДобавитьВмассив(ForSelect2,true,false,ПозицииОС[i].Учном);
    fi;

--   for t=1..j do
   for t=1..k do
    if УслЦ='Ц>1000':
       if ss=ПозицииОС[t].НФА:
	  if соотв(ПозицииОС[t].НФА,'НФА.101.07.*'):УслЦена=true;--ЦЕНАНФАОС[t]>Общ_Пер('ОС_100_БИБЛ',mindat0_(t));
	   | true:
	      УслЦена=match(ПозицииОС[t].СЧНФА,'???.????.???????.???.?.10?.1?.???') or ЦЕНАНФАОС[t]>Общ_Пер('ОС_РАСХ',mindat0_(t));
	      if not УслЦена:
		 УслЦена=НФА_НЕСПИСЫВАТЬДО1000(ПозицииОС[t].НФА);
	      fi;
	  fi;
	| true:УслЦена=false;
       fi;
     | true:УслЦена=true;
    fi;
    if не УслЦена:if t<=j:i=i-1;fi;kol=kol-1;fi;
    if length(ПозицииОС[t].Учном)>4:
       ДобавитьВмассив(ForSelect2,true,false,ПозицииОС[t].Учном);
    fi;
   od;

--   for t=j+1..k do
--    if УслЦ='Ц>1000':УслЦена=ЦЕНАНФАОС[t]>1000 and ss=ПозицииОС[t].НФА;
--     | true:УслЦена=true;
--    fi;
--    if не УслЦена:kol=kol-1;fi;
--    if length(ПозицииОС[t].Учном)>4:
--	 ДобавитьВмассив(ForSelect2,true,false,trim(ПозицииОС[t].Учном));
--    fi;
--   od;
   j=0;
   kol=kol+ДлинаМассива(ForSelect2);


   if l:
      for sign sg=a do
	if не _ИспользованыПризнаки.(sg+ДопПр):
	    j=j+1;
	    if j<=kol:ForSelect1[j]=trim(sg);
	    fi;
	    if j=kol+KolProverka:break;fi;
	 | true:j=0;
	fi;
      od;

    | true:
      for sign sg=a do
	if не _ИспользованыПризнаки.(sg+ДопПр):
	  j=j+1;ForSelect1[j]=trim(sg);
	  if j=kol:break;fi;
	fi;
      od;
   fi;

   КопироватьМассив(ForSelect1,ForSelect);
   z=0;
   for t=1..ПозицииОС do -- оставляем старые ИНВ и исключаем их из порядкового списка
    if УслЦ='Ц>1000':
       if ss=ПозицииОС[t].НФА:
	  if соотв(ПозицииОС[t].НФА,'НФА.101.07.*'):УслЦена=true;--ЦЕНАНФАОС[t]>Общ_Пер('ОС_100_БИБЛ',mindat0_(t));
	   | true:
	      УслЦена=match(ПозицииОС[t].СЧНФА,'???.????.???????.???.?.10?.1?.???') or ЦЕНАНФАОС[t]>Общ_Пер('ОС_РАСХ',mindat0_(t));
	      if not УслЦена:
		 УслЦена=НФА_НЕСПИСЫВАТЬДО1000(ПозицииОС[t].НФА);
	      fi;
	  fi;
	| true:УслЦена=false;
       fi;
     | true:УслЦена=true;
    fi;

    if УслЦена:z=z+1;
       if length(ПозицииОС[t].Учном)>4:
	  jj=ПоискВмассиве(ForSelect2,trim(ПозицииОС[t].Учном),true);
	  if jj>0:--надо оставить старый ИНВ
	     ForSelect1[z]='Автовыбор учетных номеров#строка '+стр(t)+':'+ForSelect1[z]+'--'+ForSelect2[jj];
 --	       ForSelect1[z]=ForSelect1[z]+'#'+ForSelect3[jj];
	     УдалитьИзМассива(ForSelect2,jj);
	     jj=ПоискВмассиве(ForSelect,trim(ПозицииОС[t].Учном),true);
	     if jj>0:
	       УдалитьИзМассива(ForSelect,jj);
	     fi;
	  fi;
       fi;
    fi;
   od;
   z=0;
   for t=1..ПозицииОС do -- проставляем по новому списку, пропуская уже проставленные
    if УслЦ='Ц>1000':
       if ss=ПозицииОС[t].НФА:
	  if соотв(ПозицииОС[t].НФА,'НФА.101.07.*'):УслЦена=true;--ЦЕНАНФАОС[t]>Общ_Пер('ОС_100_БИБЛ',mindat0_(t));
	   | true:
	      УслЦена=match(ПозицииОС[t].СЧНФА,'???.????.???????.???.?.10?.1?.???') or ЦЕНАНФАОС[t]>Общ_Пер('ОС_РАСХ',mindat0_(t));
	      if not УслЦена:
		 УслЦена=НФА_НЕСПИСЫВАТЬДО1000(ПозицииОС[t].НФА);
	      fi;
	  fi;
	| true:УслЦена=false;
       fi;
     | true:УслЦена=true;
    fi;

    if УслЦена:z=z+1;
       if количествослов(ForSelect1[z],'#')=1:
	  ForSelect1[z]='Автовыбор учетных номеров#строка '+стр(t)+':'+ForSelect1[z]+'--'+ForSelect[1];
	  УдалитьИзМассива(ForSelect,1);
       fi;
    fi;
   od;
   jj=ДлинаМассива(ForSelect1)-z;
   for t=1..jj do
     УдалитьИзМассива(ForSelect1,z+1);
   od;

   if j>kol:j=kol;fi;
--   КопироватьМассив(ForSelect1,ForSelect);
   if j=0:Message('Отсутствуют неиспользованные признаки для учетного номера',mtWarning);^'';
    | j=1:^ВыделитьСлово(1,ВыделитьСлово(2,ForSelect1[j],':'),'--');
    | j>1:КопироватьМассив(ForSelect1,ForSelect);
	  ss1=ВыделитьСлово(2,ForSelect1[i],'#');
	  ВставитьВМассив(ForSelect1,1,'Автовыбор учетных номеров#--Просмотр списка автовыбора');
	  ВставитьВМассив(ForSelect1,1,'Автовыбор по 2 столбцу--Автовыбор по 2 столбцу списка автовыбора');
	  ВставитьВМассив(ForSelect1,1,'Автовыбор по 1 столбцу--Автовыбор по 1 столбцу списка автовыбора');
	  ВставитьВМассив(ForSelect1,1,'Отмена--Отмена изменений');
	  ВставитьВМассив(ForSelect1,1,'Выбор#'+ВыделитьСлово(1,ss1,'--')+'--выбор текущего свободного учетного номера');
	  ВставитьВМассив(ForSelect1,1,'Выбор#--для '+ВыделитьСлово(1,ss1,':'));
       --    t=Альтернатива('Свободные признаки для учетного номера',ForSelect1,-1,i,12);
	   t=AlternateTree('Свободные признаки для учетного номера',ForSelect1,64,2,12,'#','Пересчитать все учетные номера','Оставить выбранные');
	   while t>5 or t=1 do
	     t=AlternateTree('Свободные признаки для учетного номера',ForSelect1,64,t,12,'#','Пересчитать все учетные номера','Оставить выбранные');
	   od;
	   if t<1 or t=3:
	     Message('Отказ от выбора для учетного номера',mtWarning);^'';
	   fi;
	   if t=2:
	      ss1=ВыделитьСлово(1,ss1,'--');
	      ss1=ВыделитьСлово(2,ss1,':');
	      ^ss1;
	   fi;
	   if t=4 or t=5:--Автовыбор по 1 или 2 столбцу списка автовыбора
	      z=6;
	      for k=1..ПозицииОС do
	       if УслЦ='Ц>1000':
		  if ss=ПозицииОС[k].НФА:
		     if соотв(ПозицииОС[k].НФА,'НФА.101.07.*'):УслЦена=true;--ЦЕНАНФАОС[t]>Общ_Пер('ОС_100_БИБЛ',mindat0_(t));
		      | true:
			 УслЦена=match(ПозицииОС[t].СЧНФА,'???.????.???????.???.?.10?.1?.???') or ЦЕНАНФАОС[t]>Общ_Пер('ОС_РАСХ',mindat0_(t));
			 if not УслЦена:
			    УслЦена=НФА_НЕСПИСЫВАТЬДО1000(ПозицииОС[t].НФА);
			 fi;
		     fi;
		   | true:УслЦена=false;
		  fi;
		| true:УслЦена=true;
	       fi;
	       if УслЦена:z=z+1;
		  ss1=ВыделитьСлово(2,ForSelect1[z],':');
		  if t=4 :ss1=ВыделитьСлово(1,ss1,'--');
		   | true:ss1=ВыделитьСлово(2,ss1,'--');
		  fi;
		  ПозицииОС[k].Учном=ss1;
	       fi;
	      od;
	   fi;
	   ^'';

	   if t>0:^ForSelect1[t];fi;
	   Message('Отказ от выбора для учетного номера',mtWarning);^'';
   fi;
2end0;
--2Func0 2РасчетНезадействованныхПризнаков0Ц (s:s;i:i;kol:i;l:l;ДопПр:s;УслЦ:s):s;
-- -- ДопПр = Условие для НФА
-- -- kol-- количество выводимых признаков
-- -- l  -- обновлять поиск после занятого признака
-- var KolProverka:i;
-- var j,t,z,k:i;
-- var a,sg,ss:s;
-- var УслЦена:l;
--   ss=SubStr(ДопПр,2,255);
--   KolProverka=100;
--   ClearVariable(ForSelect );
--   ClearVariable(ForSelect1);
--   if ДопПр='&':ДопПр='';fi;
--   a='Ц.*';
--   k=kol;
--   j=i;

--   for t=1..j do
--    if УслЦ='Ц>1000':УслЦена=ЦЕНАНФА[t]>1000 and ss=Позиции[t].НФА;
--     | true:УслЦена=ss=Позиции[t].НФА;--УслЦена=true;
--    fi;
--    if не УслЦена:i=i-1;kol=kol-1;fi;
--   od;
--   for t=j+1..k do
--    if УслЦ='Ц>1000':УслЦена=ЦЕНАНФА[t]>1000 and ss=Позиции[t].НФА;
--     | true:УслЦена=ss=Позиции[t].НФА;--УслЦена=true;
--    fi;
--    if не УслЦена:kol=kol-1;fi;
--   od;
--   j=0;

--   if l:
--	for sign sg=a do
--	  if не _ИспользованыПризнаки.(sg+ДопПр):j=j+1;if j<=kol:ForSelect1[j]=sg;fi;if j=kol+KolProverka:break;fi;
--	   | true:j=0;
--	  fi;
--	od;

--    | true:
--	for sign sg=a do
--	  if не _ИспользованыПризнаки.(sg+ДопПр):j=j+1;ForSelect1[j]=sg;if j=kol:break;fi;fi;
--	od;
--   fi;
--   if j>kol:j=kol;fi;
--   КопироватьМассив(ForSelect1,ForSelect);
--   if j=0:Message('Отсутствуют неиспользованные коды цен',mtWarning);^'';
--    | j=1:^ForSelect[j];
--    | j>1: t=Альтернатива('Свободные коды цен',ForSelect,-1,i,12);
--	     if t>0:^ForSelect[t];fi;
--	     Message('Отказ от выбора кода цены',mtWarning);^'';
--   fi;
--2end0;
--2-- _Обработчики событий полей, объектов и шаблона

--2-- _Обработчики полей
func РазрешеноРедактирование:l;
 if (ClosedModFob or Проводить):
    if Проводить:Beep(16);Сообщение('Операция проведена!'+chr(13)+'Для редактирования записи снимите флажок ПРОВОДИТЬ ОПЕРАЦИЮ.',mtWarning);
     | ClosedModFob:EditorCancel;Beep(16);Сообщение('Операция заблокирована!'+chr(13)+'Для редактирования записи снимите флажок БЛОКИРОВКА.',mtWarning);
    fi;
   ^false;
 fi;
 ^true;
end;
func Заблокирована:l;
 if ClosedModFob:EditorCancel;Beep(16);Сообщение('Операция заблокирована!'+chr(13)+'Для редактирования записи снимите флажок БЛОКИРОВКА.',mtWarning);
   ^true;
 fi;
 ^false;
end;

func ПриВходеЗаголовок(s:s;i:i):l;
var p:i;
if s='ЗаголовокРучАн1':^false;
 | s='ЗаголовокРучАн2':^false;
fi;
p=РАБ.НФА.B01.ВзятьИндексМассива(s);
if p=15:i=РАБ.НФА.B01.ВыборВыводаИНВ;
 | true:i=РАБ.НФА.B01.ВыборВывода;
fi;
if i>-1:ЗаголовкиСтолбцовВид[p]=i;ЗаголовкиСтолбцовПоказ[p]=ВзятьЗаголовкиСтолбцовПоказ(p);fi;
^false;
end;
func ПриВходеЗаголовокПереоценка(s:s;i:i):l;
var p,j,wanfa:i;
var ss,k1s,k2s,Файл:s;
var k1,k2,СумАмНа01_01_2007:n;
var ll:l;
var rec:record;
  if не РазрешеноРедактирование:^false;fi;
  wanfa=openworkarea('РПО_НФА','','СООТВ(ГРНФА,"101.*")');
  if s='ЗаголовокГодаПереоценок':
       j=Вопрос('Подтверждение автозаполнения...','Заполнить автоматически год для расчета?','Отмена;2007',mtConfirmation);
       if j=2:
	 for j=1..ПозицииОС do
	   if ПозицииОС[j].Дучет<01.01.2007  и dd0<ПозицииОС[j].Дучет и не соотв(ПозицииОС[j].СЧНФА,'ЗАБ*'):ПозицииОС[j].ГОДАПЕРЕОЦЕНОК='2007';-- расчет только для НФА с Дучет<01.01.2007
	    | true:ПозицииОС[j].ГОДАПЕРЕОЦЕНОК='Не подлежит переоценке';
	   fi;
	 od;
       fi;
   | s='ЗаголовокКоэфпереоценок':
       ClearTrace(true);
       j=Вопрос('Подтверждение автозаполнения...','Заполнить автоматически коэфициенты переоценки?','Отмена;Авторасчет',mtConfirmation);
       if j=2:
	 for j=1..ПозицииОС do k1=0;k2=0;k1s='';k2s='';

	   if ПозицииОС[j].Дучет<01.01.2007 и ПозицииОС[j].Дучет>dd0 и не соотв(ПозицииОС[j].СЧНФА,'ЗАБ*'):-- расчет только для НФА с Дучет<01.01.2007
--	       ss=Раб.НФА.B01.ПолеПоПризнакуС(ПозицииОС[j].НФА,'ОКОФ');
	     rec=SignToRecord(ПозицииОС[j].НФА,false);
	     if rec<>nil:
		p=ВзятьНомерЗаписи(wanfa,rec);
		if p>0:ss=GetFieldS(wanfa,p,'ОКОФ');
		 | true:ss='';
		fi;
	      | true:ss='';
	     fi;

	     p=ВзятьНомерПоОКОФ(ss);
	     if Соотв(ПозицииОС[j].НФА,'НФА.101.01.*') or Соотв(ПозицииОС[j].НФА,'НФА.101.02.*') or Соотв(ПозицииОС[j].НФА,'НФА.101.03.*'):
		s='ЗДАНИЯ';
		if ПозицииОС[j].Дучет<01.01.2003:k1=ТекущийРегион_К0;
		 | ПозицииОС[j].Дучет<01.01.2004:k1=ТекущийРегион_К1;
		 | ПозицииОС[j].Дучет<01.01.2005:k1=ТекущийРегион_К2;
		 | ПозицииОС[j].Дучет<01.01.2006:k1=ТекущийРегион_К3;
		 | ПозицииОС[j].Дучет<01.01.2007:k1=ТекущийРегион_К4;
		fi;
	      | true:s=ВзятьГРПРПоОКОФ(ss);
		if Длина(s)>1 и up(s)<>'ЗДАНИЯ':k1=Общ_пер(s,ПозицииОС[j].Дучет);
		 | true: Trace('Ошибка! не найдена группа переоценки для '+ss+' '+ПозицииОС[j].НФА);k1=-1;ПозицииОС[j].КОЭФПЕРЕОЦЕНОК='Ошибка!';
		fi;
	     fi;
	     if k1>=0:
----------- блок расчета понижающих коэфициентов k2 -----------------	       и соотв(М,'М.Х.*')
		if (ПозицииОС[j].Дэкспл<dd0 or ПозицииОС[j].Дэкспл>31.12.2006): --разбор НФА не переданых в эксплуатацию до 01.01.2007
		 -- if ЦЕНАНФАОС[j]>5000 и ЦЕНАНФАОС[j]<=10000:k2=Общ_пер('ОБОРУДОВАНИЕ_К_УСТАНОВКЕ',ПозицииОС[j].Дучет);
		  if ЦЕНАНФАОС[j]>5000 и ЦЕНАНФАОС[j]<=10000:k2=0;--оборудование к установке должно числиться только на 106 счете
		   | ЦЕНАНФАОС[j]>1000 и ЦЕНАНФАОС[j]<=5000 :k2=Общ_пер('НФА_ДО_5000',ПозицииОС[j].Дучет);
		   | ЦЕНАНФАОС[j]<=1000     :k2=Общ_пер('НФА_ДО_1000',ПозицииОС[j].Дучет);
		  fi;
		 | true:
		    if s='БИБЛИОТЕКА'	 :k2=Общ_пер('НФА_ДО_1000',ПозицииОС[j].Дучет);
		     | ЦЕНАНФАОС[j]<=1000:
		       --k2=Общ_пер('НФА_ДО_1000',ПозицииОС[j].Дучет);
		       k1=0;k2=0;
		    fi;
		fi;
------------------------------------------------------------------
	       if k1<>0:k1s=str(k1,2);fi;
	       if k2<>0:k2s=str(k2,2);fi;
	       ПозицииОС[j].КОЭФПЕРЕОЦЕНОК=Раб.НФА.B01.ab(k1s,chr(13),k2s);
	       if k2<>0:k1=k1*k2;fi;-- расчет итогового коэфициента
	       if k1<>0:
		  ПозицииОС[j].СУМПЕРЕОЦЕНОКНФАИТОГ  =ПозицииОС[j].СумНФА*k1-ПозицииОС[j].СумНФА;
		  ПозицииОС[j].СУМПЕРЕОЦЕНОКНФА  =str(ПозицииОС[j].СУМПЕРЕОЦЕНОКНФАИТОГ,2);
		  s=SubStr(ПозицииОС[j].СЧНФА,1,23);
		  if k1>=1:ПозицииОС[j].ДОПАНПЕР='НФА_УВПЕР';
		     ПозицииОС[j].ДЕБПЕРЕОЦЕНОК=ПозицииОС[j].СЧНФА;
		     ПозицииОС[j].КРЕПЕРЕОЦЕНОК=s+'401.30.000';
		   | true:ПозицииОС[j].ДОПАНПЕР='НФА_УМПЕР';
		     ПозицииОС[j].КРЕПЕРЕОЦЕНОК=ПозицииОС[j].СЧНФА;
		     ПозицииОС[j].ДЕБПЕРЕОЦЕНОК=s+'401.30.000';
		     ПозицииОС[j].СУМПЕРЕОЦЕНОКНФАИТОГ=-ПозицииОС[j].СУМПЕРЕОЦЕНОКНФАИТОГ;
		  fi;
		  if ОстаткиТекущегоПериода и год(ДатОпер)=2008:СумАмНа01_01_2007=ПозицииОС[j].СУМАМ00;
		   | ОстаткиТекущегоПериода и год(ДатОпер)>2005 и мес(ДатОпер)=12:СумАмНа01_01_2007=СУМАМ99[j];
		   | не ОстаткиТекущегоПериода и год(ДатОпер)>2005:СумАмНа01_01_2007=ПозицииОС[j].СУМАМ00;
		  fi;
		  ПозицииОС[j].СУМПЕРЕОЦЕНОКАМОРТИТОГ=СумАмНа01_01_2007*k1-СумАмНа01_01_2007;
		  ПозицииОС[j].СУМПЕРЕОЦЕНОКАМОРТ=Str(ПозицииОС[j].СУМПЕРЕОЦЕНОКАМОРТИТОГ,2);
		  if k1>=1:
		     ПозицииОС[j].КРЕПЕРЕОЦЕНОКАМОРТ=ПозицииОС[j].СЧЕТАМОРТ;
		     ПозицииОС[j].ДЕБПЕРЕОЦЕНОКАМОРТ=s+'401.30.000';
		   | true:
		     ПозицииОС[j].ДЕБПЕРЕОЦЕНОКАМОРТ=ПозицииОС[j].СЧЕТАМОРТ;
		     ПозицииОС[j].КРЕПЕРЕОЦЕНОКАМОРТ=s+'401.30.000';
		     ПозицииОС[j].СУМПЕРЕОЦЕНОКАМОРТИТОГ=-ПозицииОС[j].СУМПЕРЕОЦЕНОКАМОРТИТОГ;
		  fi;
		| true:
		  ПозицииОС[j].КОЭФПЕРЕОЦЕНОК='';ПозицииОС[j].СУМПЕРЕОЦЕНОКНФАИТОГ=0;ПозицииОС[j].СУМПЕРЕОЦЕНОКАМОРТИТОГ=0;
		  ПозицииОС[j].СУМПЕРЕОЦЕНОКАМОРТ='';ПозицииОС[j].СУМПЕРЕОЦЕНОКНФА='';
	       fi;
	     fi;
	    | true:
	     ПозицииОС[j].КОЭФПЕРЕОЦЕНОК='';ПозицииОС[j].СУМПЕРЕОЦЕНОКНФАИТОГ=0;ПозицииОС[j].СУМПЕРЕОЦЕНОКАМОРТИТОГ=0;
	     ПозицииОС[j].СУМПЕРЕОЦЕНОКАМОРТ='';ПозицииОС[j].СУМПЕРЕОЦЕНОКНФА='';
	   fi;
	 od;
       fi;
   | s='ТекущийРегионН':Файл=PlanVAR('НФА')+'\Переменные\Регионы_по_переоценке_зданий_и_сооружений_2007.txt';
     ClearVariable(st);
     ll=РАБ.НФА.B03._Загрузить_СтрМассив_ИзФайла.(БланкКОД+'.st',БланкКОД+'.st1',1,Файл);
     SortArray(st);
     ClearVariable(st1);
     p=ДлинаМассива(st);
     for j=1..p do st1[j]=ВыделитьСлово(1,st[j],'#');od;
     p=Alternate('Выбор региона...',st1,-1,1,10);
     if p>0:ТекущийРегион=st1[p];
	    ТекущийРегион_К0=trunc(ВыделитьСлово(2,st[p],'#'),3);
	    ТекущийРегион_К1=trunc(ВыделитьСлово(3,st[p],'#'),3);
	    ТекущийРегион_К2=trunc(ВыделитьСлово(4,st[p],'#'),3);
	    ТекущийРегион_К3=trunc(ВыделитьСлово(5,st[p],'#'),3);
	    ТекущийРегион_К4=trunc(ВыделитьСлово(6,st[p],'#'),3);
     fi;
--   | s='ЗаголовокСуммаПереоценки':
--   | s='ЗаголовокСуммаПереоценкиАм':
  fi;
  CloseWorkArea(wanfa);
 message('ok');
^false;
end;

func ПриВходеВвод(s:s;i:i):l;
  var ll:l;
  ll=РазрешеноРедактирование;
  if ll and (s='ЦЕНАНФАОС' or s='КОЛНФАОС_'):
     if pos('НФА.101.07.',ПозицииОС[i].НФА)=1:
	if НФА_НЕСПИСЫВАТЬДО1000(ПозицииОС[i].НФА):
	   if ПозицииОС[i].КОЛНФА<>0: ПозицииОС[i].КОЛНФА=0;fi;
	   Message('Библиотечный фонд с ценой не более 40000 - только суммовой учет!');
	   ^false;
	fi;
     fi;
  fi;
 ^ll;
end;

func ПриВходе(s:s;i:i):l;
var ss:s;
var ii:i;
var ll:l;

2-- блок обработки до проверки разрешения на изменения
-- if s='ShCodeName' :ii=РАБ.НФА.B01.ВыводНФА; if ii>=0:ShCodeNameI =ii;fi;^false;
--  | s='ShCodeName1':ii=РАБ.НФА.B01.ВыводНФА; if ii>=0:ShCodeNameI1=ii;fi;^false;
--  | s='ShCodeName2':ii=РАБ.НФА.B01.ВыводНФА; if ii>=0:ShCodeNameI2=ii;fi;^false;
--  | s="Вид_П1"     : Вид_П1=РАБ.НФА.B01.ВыборВидаТаблицыИНВ(Вид_П1);	^False;

--  | s='ShCodeName3':ii=вопрос('','Выберите настройки:','Способ отображения;Настройка справочников',mtConfirmation);
--     if ii=1:
--	 ii=РАБ.НФА.B01.ВыводНФА;
--	 if ii>=0:ShCodeNameI3=ii;fi;^false;
--	| ii=2:КнОбщМеню_OnClick('КнОбщМеню08');
--	| true:^false;
--     fi;
-- fi;

2-- блок обработки с проверкой разрешения на изменения
if не РазрешеноРедактирование:^false;fi;
 if s='ADD':
    insertframe(Позиции,Позиции+1);шаблон.поле='кон';шаблон.поле='ADD';
   ^false;
  | s='ADDос':
    insertframe(ПозицииОС,ПозицииОС+1);шаблон.поле='конос';шаблон.поле='ADDос';
   ^false;
 fi;

 if s='РОСТ_':NotDelРОСТ=true;^true;fi;
 if s='ЦЕНАНФА' or s='КОЛНФА_' or s='СУМНФА_' or s='ДЭКСПЛ_' or s='СУМАМ00' or s='ДАТОПЕРН' or s='ЦЕНАНФАОС' or s='КОЛНФАОС_' or s='СУМНФАОС_':^true;
 fi;

 if ДАТОПЕР<dd0 :Message('Предварительно выберите дату операции!');Шаблон.Поле='ДАТОПЕРН';^false;fi;
 if НовыйОтчетныйПериодНачало<dd0 :Message('Предварительно выберите отчетный период,^Mдля которого заносятся остатки!');Шаблон.Поле='НовыйОтчетныйПериодНачалоН';^false;fi;
 if год(ДАТОПЕР)>год(НовыйОтчетныйПериодНачало):Message('Ошибка! Дата операции превышает начало отчетного периода!',mtWarning );Шаблон.Поле='ДАТОПЕРН';^false;fi;
 if s='НФАОСН'	:
      ss=РАБ.НФА.B01.ВыборПризнакаПроверка(ВыборДНФА_карт,ПозицииОС[i].НФА,НФАСПРОС,НФАСПРОСКАРТ,'');
     if ss='':ПозицииОС[i].НФА=ss;
      | true:
	if РАБ.НФА.B01.СоотвПризнака(ss,НФАСПРОС):ПозицииОС[i].НФА=ss;
	   if pos('НФА.101.07.',ss)=1:
	      if НФА_НЕСПИСЫВАТЬДО1000(ss): 
		 if ПозицииОС[i].КОЛНФА<>0: ПозицииОС[i].КОЛНФА=0; fi;
	      fi;
	   fi;
	 | true:
	   message('Выбранный НФА не соответствует условию '+НФАСПРОС);
	fi;
     fi;
  | s='НФАОСНКН'  : if Name_A(ПозицииОС[i].НФА)<>' ':РАБ.НФА.B01.ОткрытьБланкПоПризнаку(ПозицииОС[i].НФА,true);fi;
  | s='НФАН'  :
      ss=РАБ.НФА.B01.ВыборПризнакаПроверка(ВыборДНФА_карт,Позиции[i].НФА,НФАСПР,НФАСПРКАРТ,'');
     if ss='':Позиции[i].НФА=ss;
      | true:
	if РАБ.НФА.B01.СоотвПризнака(ss,НФАСПР):Позиции[i].НФА=ss;
	 | true:
	   message('Выбранный НФА не соответствует условию '+НФАСПР);
	fi;
     fi;

--  | s='МЕСНОРМ':
--    Позиции[i].МЕСНОРМ=РАБ.НФА.B01.ПолеПоПризнакуЧ(Позиции[i].НФА,'НОРМАМОРТ')/12;
--    НачислениеАмортизации(i);^false;
--  | s='МЕСНОРМкн':РАБ.НФА.B01.ОткрытьБланкПоПризнаку(Позиции[i].НФА,true);

  | s='СЧНФАН':
    if Позиции[i].НФА='':Message('Предварительно выберите НФА!');Шаблон.Поле='НФАН'   ;Шаблон.Кадр=i;^false;fi;
    s=Раб.НФА.B01.Соотв101_105поНФА(Позиции[i].НФА,true);
--    s=SubStr(Позиции[i].НФА,4,7);
    if Соотв(Позиции[i].НФА,'НФА.105.*') и Усл1:ss='*.???.?.???.??.3*&(*'+s+'.*|*.106.34.*|*.107.33.*)|ЗАБ.??.'+s+'*';
     | Соотв(Позиции[i].НФА,'НФА.101.04*') и Усл2:ss='*.???.?.???.??.3*&(*.106.31.*|*.107.31.*)|ЗАБ.??.'+s+'*';
     | Соотв(Позиции[i].НФА,'НФА.101.06*') и Усл2:ss='*.???.?.???.??.3*&(*.106.31.*|*.107.31.*)|ЗАБ.??.'+s+'*';
     | Соотв(Позиции[i].НФА,'НФА.101.07*') и Усл2:ss='*.???.?.???.??.3*&(*.106.31.*|*.107.31.*)|ЗАБ.??.'+s+'*';
     | Соотв(Позиции[i].НФА,'НФА.101.*') и Усл2:ss='*.???.?.???.??.3*&(*.106.?1.*|*.107.?1.*)|ЗАБ.??.'+s+'*';
     | Соотв(Позиции[i].НФА,'НФА.102.*') и Усл3:ss='*.???.?.???.??.3*&(*.106.32.*|*.107.32.*)|ЗАБ.??.'+s+'*';
     | Соотв(Позиции[i].НФА,'НФА.106.04*') и Усл1:ss='*.???.?.???.??.3*&(*.106.34.*|*.107.33.*)|ЗАБ.??.'+s+'*';
     | Соотв(Позиции[i].НФА,'НФА.106.01*') и Усл2:ss='*.???.?.???.??.3*&(*.106.?1.*|*.107.?1.*)|ЗАБ.??.'+s+'*';
     | Соотв(Позиции[i].НФА,'НФА.106.02*') и Усл3:ss='*.???.?.???.??.3*&(*.106.32.*|*.107.32.*)|ЗАБ.??.'+s+'*';
     | Соотв(Позиции[i].НФА,'НФА.103.*') и Усл2:ss='*.???.?.???.??.3*&(*.106.11.*|*.107.11.*)|ЗАБ.??.'+s+'*';
     | Соотв(Позиции[i].НФА,'НФА.108.06.*') и Усл1:ss='*.???.?.???.??.3*&(*'+s+'.*|*.106.34.*|*.107.33.*)|ЗАБ.??.'+s+'*';
--     | Соотв(Позиции[i].НФА,'НФА.103.*') и Усл1:ss='ЗАБ.??.'+s+'*';
     | true:Message('Несоответствие вида НФА и [Условие выбора НФА и счета]!',тсПредупреждение);^false;
    fi;
    ss=РАБ.НФА.B01.ВыборСчетаПроверка(Позиции[i].СЧНФА,ss);
    if ss=' ':Message('Ввод данных невозможен!^MВ плане счетов не найдены счета^Mпо условию:'+s,mtWarning );^false;fi;
    Позиции[i].СЧНФА=ss;
  | s='СЧНФАОСН':
    if ПозицииОС[i].НФА='':Message('Предварительно выберите НФА!');Шаблон.Поле='НФАОСН'   ;Шаблон.Кадр=i;^false;fi;
    s=Раб.НФА.B01.Соотв101_105поНФА(ПозицииОС[i].НФА,true);
--    s=SubStr(ПозицииОС[i].НФА,4,7);
    ss='*.???.?.???.??.3*&(*'+s+'.*)|ЗАБ.??.'+s+'*';
    ss=РАБ.НФА.B01.ВыборСчетаПроверка(ПозицииОС[i].СЧНФА,ss);
    if ss=' ':Message('Ввод данных невозможен!^MВ плане счетов не найдены счета^Mпо условию:'+s,mtWarning );^false;fi;
    ПозицииОС[i].СЧНФА=ss;
  | s='СЧ00Н':
--	if ОстаткиТекущегоПериода: if год(v)>год(НовыйОтчетныйПериодНачало):Message('Дата принятия к учету превышает текуший отчетный период!',mtWarning);^false;fi;
--	 | true:if год(v)>=год(НовыйОтчетныйПериодНачало):Message('Дата принятия к учету превышает текуший отчетный период!',mtWarning);^false;fi;
--	fi;
--	позицииос[i].Дучет=v;
    if Позиции[i].НФА='':Message('Предварительно выберите НФА!');Шаблон.Поле='НФАН'   ;Шаблон.Кадр=i;^false;fi;
    if Позиции[i].СЧНФА='':Message('Предварительно выберите счет НФА!');Шаблон.Поле='СЧНФАН';Шаблон.Кадр=i;^false;fi;
    s=SubStr(Позиции[i].СЧНФА,1,23);
    if pos('ЗАБ',Позиции[i].СЧНФА)=1:ss='00Z';
     | true:ss='00';
    fi;
--    if не ОстаткиТекущегоПериода:s=s+'401.03.000';
--     | ОстаткиТекущегоПериода:
--	   s='('+s+'*&('+РАБ.НФА.B01.СоотвКоррсчПоСчНФАостаткиТекПериодаПрихФКР(Позиции[i].СЧНФА)+'|*.401.03.000))|???.?.??.?????.??.????.'+SubStr(s,22,1)+'.*&('+РАБ.НФА.B01.СоотвКоррсчПоСчНФАостаткиТекПериодаПрихКД(Позиции[i].СЧНФА)+')';
--    fi;
--    ss=РАБ.НФА.B01.ВыборСчетаПроверка(Позиции[i].СЧ00,s);
--    if ss=' ':Message('Ввод данных невозможен!^MВ плане счетов не найдены счета^Mпо условию:'+s,mtWarning );^false;fi;
    Позиции[i].СЧ00=ss;
  | s='СЧ00ОСН':
    if ПозицииОС[i].НФА='':Message('Предварительно выберите НФА!');Шаблон.Поле='НФАОСН'   ;Шаблон.Кадр=i;^false;fi;
    if ПозицииОС[i].СЧНФА='':Message('Предварительно выберите счет НФА!');Шаблон.Поле='СЧНФАОСН';Шаблон.Кадр=i;^false;fi;
    s=SubStr(ПозицииОС[i].СЧНФА,1,23);
    if pos('ЗАБ',ПозицииОС[i].СЧНФА)=1:ss='00Z';
     | true:ss='00';
    fi;
--    if не ОстаткиТекущегоПериода:s=s+'401.03.000';
--     | ОстаткиТекущегоПериода:
--	  if год(ПозицииОС[i].Дучет)<год(НовыйОтчетныйПериодНачало):s=s+'401.03.000';
--	   | true:s='('+s+'*&('+РАБ.НФА.B01.СоотвКоррсчПоСчНФАостаткиТекПериодаПрихФКР(ПозицииОС[i].СЧНФА)+'))|???.?.??.?????.??.????.'+SubStr(s,22,1)+'.*&('+РАБ.НФА.B01.СоотвКоррсчПоСчНФАостаткиТекПериодаПрихКД(ПозицииОС[i].СЧНФА)+')';
--	  fi;
--    fi;
--    ss=РАБ.НФА.B01.ВыборСчетаПроверка(ПозицииОС[i].СЧ00,s);
--    if ss=' ':Message('Ввод данных невозможен!^MВ плане счетов не найдены счета^Mпо условию:'+s,mtWarning );^false;fi;
    ПозицииОС[i].СЧ00=ss;
  | s='ДЕБАМОРТ00Н':
    if ПозицииОС[i].НФА='':Message('Предварительно выберите НФА!');Шаблон.Поле='НФАОСН'   ;Шаблон.Кадр=i;^false;fi;
    if ДАТОПЕР<dd0 :Message('Предварительно выберите дату операции!');Шаблон.Поле='ДАТОПЕРН';^false;fi;
    if НовыйОтчетныйПериодНачало<dd0 :Message('Предварительно выберите отчетный период,^Mдля которого заносятся остатки!');Шаблон.Поле='НовыйОтчетныйПериодНачалоН';^false;fi;
    if ПозицииОС[i].СЧНФА='':Message('Предварительно выберите счет НФА!');Шаблон.Поле='СЧНФАОСН';Шаблон.Кадр=i;^false;fi;
    s=SubStr(ПозицииОС[i].СЧНФА,1,23);
    if не соотв(ПозицииОС[i].НФА,'НФА.101.07.*') и (ЦЕНАНФАОС[i]<=Общ_Пер('ОС_РАСХ',mindat0_(i))):Message('Для ОС с ценой <='+str(Общ_Пер('ОС_РАСХ',mindat0_(i)))+' руб амортизация не предусмотрена по инструкции!');
       if ПозицииОС[i].ДЕБАМОРТ00<>'':ПозицииОС[i].ДЕБАМОРТ00='';fi; 
       if ПозицииОС[i].СЧЕТАМОРТ<>'':ПозицииОС[i].СЧЕТАМОРТ='';fi;
       if ПозицииОС[i].ДЕБАМОРТ<>'':ПозицииОС[i].ДЕБАМОРТ='';fi;
      -- if ПозицииОС[i].УЧНОМ<>'':ПозицииОС[i].УЧНОМ='';fi;
       Шаблон.Поле='ЦЕНАОС'   ;Шаблон.Кадр=i;^false;
    fi;
    if pos('ЗАБ',ПозицииОС[i].СЧНФА)=1:ss='';ПозицииОС[i].ДЕБАМОРТ00=ss;^false;
     | true:ss='00';
    fi;
--    if не ОстаткиТекущегоПериода:s=s+'401.03.000';
--     | ОстаткиТекущегоПериода:
--	  if год(ПозицииОС[i].Дучет)<год(НовыйОтчетныйПериодНачало):s=s+'401.03.000';
--	   | true:
--	     if соотв(ПозицииОС[i].СЧ00,'*.401.01.15?') or соотв(ПозицииОС[i].СЧ00,'*.304.04.3??'):s=ПозицииОС[i].СЧ00;
--	      | true:s='('+s+'*&(*.401.01.271))|???.?.??.?????.??.????.'+SubStr(s,22,1)+'.401.01.180';
--	     fi;
--	  fi;
--    fi;
--    ss=РАБ.НФА.B01.ВыборСчетаПроверка(ПозицииОС[i].ДЕБАМОРТ00,s);
--    if ss=' ':Message('Ввод данных невозможен!^MВ плане счетов не найдены счета^Mпо условию:'+s,mtWarning );^false;fi;
    ПозицииОС[i].ДЕБАМОРТ00=ss;
  | s='ДЕБАМОРТН':
    if ПозицииОС[i].НФА='':Message('Предварительно выберите НФА!');Шаблон.Поле='НФАОСН'   ;Шаблон.Кадр=i;^false;fi;
    if ДАТОПЕР<dd0 :Message('Предварительно выберите дату операции!');Шаблон.Поле='ДАТОПЕРН';^false;fi;
    if НовыйОтчетныйПериодНачало<dd0 :Message('Предварительно выберите отчетный период,^Mдля которого заносятся остатки!');Шаблон.Поле='НовыйОтчетныйПериодНачалоН';^false;fi;
    if ПозицииОС[i].СЧНФА='':Message('Предварительно выберите счет НФА!');Шаблон.Поле='СЧНФАОСН';Шаблон.Кадр=i;^false;fi;
    if pos('ЗАБ',ПозицииОС[i].СЧНФА)=1:ss='';ПозицииОС[i].ДЕБАМОРТ=ss;^false;fi;

    s=SubStr(ПозицииОС[i].СЧНФА,1,23);
    if не соотв(ПозицииОС[i].НФА,'НФА.101.07.*') и (ЦЕНАНФАОС[i]<=Общ_Пер('ОС_РАСХ',mindat0_(i))):Message('Для ОС с ценой <='+str(Общ_Пер('ОС_РАСХ',mindat0_(i)))+' руб амортизация не предусмотрена по инструкции!');
       if ПозицииОС[i].ДЕБАМОРТ00<>'':ПозицииОС[i].ДЕБАМОРТ00='';fi; 
       if ПозицииОС[i].СЧЕТАМОРТ<>'':ПозицииОС[i].СЧЕТАМОРТ='';fi;
       if ПозицииОС[i].ДЕБАМОРТ<>'':ПозицииОС[i].ДЕБАМОРТ='';fi;
       Шаблон.Поле='ЦЕНАОС'   ;Шаблон.Кадр=i;^false;
    fi;

--    if ОстаткиТекущегоПериода or (ОстаткиТекущегоПериода and (год(ПозицииОС[i].Дучет)<год(НовыйОтчетныйПериодНачало))):
    if не ОстаткиТекущегоПериода:
       Message('Остатки прошлых отчетных периодов!^MАмортизация для текущего периода не начисляется',mtWarning );
       if ПозицииОС[i].ДЕБАМОРТ<>'':ПозицииОС[i].ДЕБАМОРТ='';fi;
       ОбнулитьАмортизациюТекущегоПериода(i);
       ^false;
--	 Message('Амортизация в текущем отчетном периоде^Mначисляется только если дата принятия к учету^Mотносится к текущему отчетному периоду,^Mа не к прошлому, как в данном случае!',mtWarning );^false;
     | true:s=s+'401.20.271';
    fi;
    ss=РАБ.НФА.B01.ВыборСчетаПроверка(ПозицииОС[i].ДЕБАМОРТ,s);
    if ss=' ':Message('Ввод данных невозможен!^MВ плане счетов не найдены счета^Mпо условию:'+s,mtWarning );
       ^false;
    fi;
    ПозицииОС[i].ДЕБАМОРТ=ss;
    НачислениеАмортизации(i);
  | s='СЧЕТАМОРТН':
    if ПозицииОС[i].НФА='':Message('Предварительно выберите НФА!');Шаблон.Поле='НФАОСН'   ;Шаблон.Кадр=i;^false;fi;
    if ДАТОПЕР<dd0 :Message('Предварительно выберите дату операции!');Шаблон.Поле='ДАТОПЕРН';^false;fi;
    if НовыйОтчетныйПериодНачало<dd0 :Message('Предварительно выберите отчетный период,^Mдля которого заносятся остатки!');Шаблон.Поле='НовыйОтчетныйПериодНачалоН';^false;fi;
    if ПозицииОС[i].СЧНФА='':Message('Предварительно выберите счет НФА!');Шаблон.Поле='СЧНФАОСН';Шаблон.Кадр=i;^false;fi;
    if pos('ЗАБ',ПозицииОС[i].СЧНФА)=1:ss='';ПозицииОС[i].СЧЕТАМОРТ=ss;^false;fi;
    s=SubStr(ПозицииОС[i].СЧНФА,1,23);
    if не соотв(ПозицииОС[i].НФА,'НФА.101.07.*') и (ЦЕНАНФАОС[i]<=Общ_Пер('ОС_РАСХ',mindat0_(i))):Message('Для ОС с ценой <='+str(Общ_Пер('ОС_РАСХ',mindat0_(i)))+' руб амортизация не предусмотрена по инструкции!');
       if ПозицииОС[i].ДЕБАМОРТ00<>'':ПозицииОС[i].ДЕБАМОРТ00='';fi; 
       if ПозицииОС[i].СЧЕТАМОРТ<>'':ПозицииОС[i].СЧЕТАМОРТ='';fi;
      -- if ПозицииОС[i].УЧНОМ<>'':ПозицииОС[i].УЧНОМ='';fi;
       Шаблон.Поле='ЦЕНАОС'   ;Шаблон.Кадр=i;^false;
    fi;
--    if не ОстаткиТекущегоПериода or (ОстаткиТекущегоПериода and (год(ПозицииОС[i].Дучет)<год(НовыйОтчетныйПериодНачало))):ПозицииОС[i].СЧЕТАМОРТ='';
--	 Message('Амортизация в текущем отчетном периоде^Mначисляется только если дата принятия к учету^Mотносится к текущему отчетному периоду,^Mа не к прошлому, как в данном случае!',mtWarning );^false;
----	 | true:s='('+s+'*&(*.401.01.271))|???.?.??.?????.??.????.'+SubStr(s,22,1)+'.*&('+РАБ.НФА.B01.СоотвКоррсчПоСчНФАостаткиТекПериодаПрихКД(ПозицииОС[i].СЧНФА)+')';
--    fi;

    s=s+'*&('+РАБ.НФА.B01.Соотв104поСЧНФА(ПозицииОС[i].СЧНФА)+')';
--    s=s+'*&('+РАБ.НФА.B01.Соотв104поНФА(ПозицииОС[i].НФА)+')';
    ss=РАБ.НФА.B01.ВыборСчетаПроверка(ПозицииОС[i].СЧЕТАМОРТ,s);
    if ss=' ':Message('Ввод данных невозможен!^MВ плане счетов не найдены счета^Mпо условию:'+s,mtWarning );^false;fi;
    ПозицииОС[i].СЧЕТАМОРТ=ss;
  | s='ДопАнОСН':
    if ПозицииОС[i].НФА='':Message('Предварительно выберите НФА!');Шаблон.Поле='НФАОСН'   ;Шаблон.Кадр=i;^false;fi;
    if ПозицииОС[i].СЧНФА='':Message('Предварительно выберите счет НФА!');Шаблон.Поле='СЧНФАОСН';Шаблон.Кадр=i;^false;fi;
    if ПозицииОС[i].СЧ00='':Message('Счет кредита для ввода остатков НФА!');Шаблон.Поле='СЧ00ОСН';Шаблон.Кадр=i;^false;fi;
      s=РАБ.НФА.B01.ab(ИсключенныеСправочникиОбщАн,'|','ГГ.*|ММДД.*|ЗН.*');
      s=РАБ.НФА.B01.ab(РАБ.НФА.B01.ПризнакиВмаску(ОбщАн),'|',s);
      ss=РАБ.НФА.B01.ВыборПризнакаДляПроводки(ПозицииОС[i].СЧНФА,ПозицииОС[i].СЧ00,'Д|К|ОБ|НОБ',s);
      if ss=' ':Message('Отсутствуют признаки для выбора!',mtWarning);^false;fi;
      if ss<>'':ПозицииОС[i].ДопАн=РАБ.НФА.B01.ДобавитьПризнак(ПозицииОС[i].ДопАн,' ',ss);fi;
    ^false;
  | s='ДопАнН':
    if Позиции[i].НФА='':Message('Предварительно выберите НФА!');Шаблон.Поле='НФАН'   ;Шаблон.Кадр=i;^false;fi;
    if Позиции[i].СЧНФА='':Message('Предварительно выберите счет НФА!');Шаблон.Поле='СЧНФАН';Шаблон.Кадр=i;^false;fi;
    if Позиции[i].СЧ00='':Message('Счет кредита для ввода остатков НФА!');Шаблон.Поле='СЧ00Н';Шаблон.Кадр=i;^false;fi;
      s=РАБ.НФА.B01.ab(РАБ.НФА.B01.ПризнакиВмаску(ОбщАн),'|',ИсключенныеСправочникиОбщАн);
      ss=РАБ.НФА.B01.ВыборПризнакаДляПроводки(Позиции[i].СЧНФА,Позиции[i].СЧ00,'Д|К|ОБ|НОБ',s);
      if ss=' ':Message('Отсутствуют признаки для выбора!',mtWarning);^false;fi;
      if ss<>'':
--	  if pos(' '+up(ВзятьСправочникАналит(ss))+'.',' '+up(ОБЩАН))>0:message('Признак из такого же справочника уже выбран в [общие признаки]!',mtWarning);^false;fi;
	if ss<>'':Позиции[i].ДопАн=РАБ.НФА.B01.ДобавитьПризнак(Позиции[i].ДопАн,' ',ss);fi;
      fi;
    ^false;
--    if Соотв(Позиции[i].НФА,'НФА.105.*'):ss='&(*.3??|ЗАБ.*)';
--     | true:
--	if ЦЕНАНФА[i]<1001:
--	   if Соотв(М,'М.Х.*'):ss='&(*.3??|ЗАБ.*)';--на хранении
--	    | true:
--		ss='&(ЗАБ.*)';	--в эксплуатации
--	   fi;
--	 | ЦЕНАНФА[i]>=1001 и ЦЕНАНФА[i]<10001:ss='&(*.3??|ЗАБ.*)';
--	 | ЦЕНАНФА[i]>=10001:ss='&(*.3??|ЗАБ.*)';
--	fi;
--    fi;

--    Позиции[i].СЧНФА=РАБ.НФА.B01.ВыборСчетаНФАПроверка(Позиции[i].СЧНФА,Позиции[i].НФА,ss);
  | s='МК': s=РАБ.НФА.B01.СовместныеПризнакиДляСправочника('*.10?.??.???|ЗАБ.??.???.??','МОЛ.*&НФА.???.??.*','М','Выбор из общего списка',1.1.2020,2.1.2020,false);
	    if s='#':s=ВыборПризнака('М.*');fi;
	    if s='':if РАБ.НФА.B01.ОтказОтИзменений:^false;fi;fi;
	    М=s;
  | s='МОЛК':if М<>'':ss=М+'&НФА.???.??.*';
	      | true: ss='М.*&НФА.???.??.*';
	     fi;
      s=РАБ.НФА.B01.СовместныеПризнакиДляСправочника('*.10?.??.???|ЗАБ.??.???.??',ss,'МОЛ','Выбор из общего списка',1.1.2020,2.1.2020,false);
	    if s='#':s=ВыборПризнака('МОЛ.*');fi;
	    if s='':if РАБ.НФА.B01.ОтказОтИзменений:^false;fi;fi;
	    МОЛ=s;

--	МОЛ=РАБ.НФА.B01.ВыборПризнакаПроверка(not РАБ.НФА.B010.B1,МОЛ,'МОЛ.*',РАБ.НФА.B00.СОТРУДНИК+'#МОЛ#МОЛ.*','');
  | s='ДучетКн':
  | s='ДэксплКн':
  | s='НомерИНВ'   :ПозицииОС[i].УЧНОМ	=РАБ.НФА.B01.ВыборПризнакаПроверка(ВыборДНФА_карт,ПозицииОС[i].УЧНОМ,'УЧН.*','','');
  | s='ИНВКн':
	  ll=не соотв(ПозицииОС[i].НФА,'НФА.101.07.*') и (ЦенаНФАОС[i]<=Общ_Пер('ОС_РАСХ',mindat0_(i)));
	  if ll:
             ll=not(соотв(ПозицииОС[i].СчНФА,'???.????.??????*.???.?.103.11.330') or НФА_НЕСПИСЫВАТЬДО1000(ПозицииОС[i].НФА));
	  fi;
	  if ll:Сообщение('Цена НФА<='+str(Общ_Пер('ОС_РАСХ',mindat0_(i)))+' руб, ввод учетного номера не предусмотрен!');^False;
	   | true:s=РасчетНезадействованныхПризнаков(s,i,ПозицииОС,true,'&'+ПозицииОС[i].НФА,'Ц>1000');
	     if длина(s)>4:
		ПозицииОС[i].УЧНОМ=s;
	     fi;
	  fi;


--  | s='КнДопАнН':

--	      --  РАБ.НФА.B01.ПолеПоПризнакуЛ(Позиции[i].НФА'ФИКСЦЕНА');
--    if trim(Позиции[i].НФА)='':message('Не выбран НФА!');^false;fi;
--    if not СоотвПризнака('Ц.*','('+МаскаДопАн+')'):message('в настройке условий для выбора справочников^Mотсутствует условие на справочник [Ц]');^false;fi;
--    if not РАБ.НФА.B01.ПолеПоПризнакуЛ(Позиции[i].НФА,'ФИКСЦЕНА'):
--	 ii=вопрос('','По данному наименованию НФА^Mфиксирование цены не предусмотрено!^Mдля включения этой возможности установите флаг^Mфиксировать цену в карточке списка НФА для^Mданного НФА','Ok;Открыть карточку',mtConfirmation);

--	 if ii=2:
--	   if SignCardFile(Позиции[i].НФА)='РПО_НФА':РАБ.НФА.B01.2ОткрытьБланкПоПризнаку0(Позиции[i].НФА,true);fi;
--	 fi;
--	^False;
--    fi;
--    s=РасчетНезадействованныхПризнаковЦ(s,i,Позиции,true,'&'+Позиции[i].НФА,'');
--	 if длина(s)>4:
--	    Позиции[i].ДопАн=РАБ.НФА.B01.ДобавитьПризнак(Позиции[i].ДопАн,' ',s);
--	 fi;
  | s='ОБЩАН_ВЫВОД':
    s=РАБ.НФА.B01.ВзятьМаскуПризнаков('*.101.??.???|*.102.??.???|*.103.??.???|*.105.??.???|*.108.?6.???|ЗАБ.??.???.??');
    s=РАБ.НФА.B01.abl(s,'&~',ИсключенныеСправочникиОбщАн);
    s=ВыборПризнака(s);
    if s<>'':ОБЩАН=РАБ.НФА.B01.ДобавитьПризнак(ОБЩАН,' ',s);fi;

  | s='НовыйОтчетныйПериодНачалоН':НовыйОтчетныйПериодНачало=ВыборОтчетногоПериода(датопер);
    ОбновитьВнешнийВид;
--	 ПриИзмененииОС;
--	 for ii=1..позиции do НачислениеАмортизации(ii);od;
  | s='NN':modtab(s,i);
  | s='NNос':modtab(s,i);
  | s='Усл1' or s='Усл2' or s='Усл3':РАБ.НФА.INI.CurrentField=s; OpenBlank('РАБ.НФА.INI');ClearVariable(Усл1);ClearVariable(Усл2);ClearVariable(Усл3);
  | true:^true;
 fi;
^false;
end;
Proc ПриВыходе(s:s;i:i);
if не РазрешеноРедактирование:exit;fi;
if s='ОБЩАН_ВЫВОД':ОБЩАН  =РАБ.НФА.B01.УдалитьПризнакИзНабора_Диалог(ОБЩАН,' ');
 | s='ДопАнН' :Позиции[i].ДопАн=РАБ.НФА.B01.УдалитьПризнакИзНабора_Диалог(Позиции[i].ДопАн,' ');
 | s='ДопАнОСН' :ПозицииОС[i].ДопАн=РАБ.НФА.B01.УдалитьПризнакИзНабора_Диалог(ПозицииОС[i].ДопАн,' ');
fi;
end;
func ПриПроверкеД(s:s;i:i;v:d):l;
var ii:i;
var ss:s;
if не РазрешеноРедактирование:^false;fi;
 if s='ДАТОПЕРН':ДАТОПЕР=v;
    if ГОДОСТ<>str(год(датопер)):ГОДОСТ=str(год(датопер));fi;
    ii=год(НовыйОтчетныйПериодНачало);
    if not(год(датопер)=ii or год(датопер)=ii+1):
       НовыйОтчетныйПериодНачало=ВыборОтчетногоПериода(датопер);
    fi;
    if ОстаткиТекущегоПериода:
      Message(
	     'Внимание!^M'
	    +'Остатки введены в текущем отчетном периоде!^M'
	    +'(дата операции в том же году, что и отченый пеиод)^M'
	    +'^M'
	    +'Для правильного расчета балланса и др. отчетности^M'
	    +'необходимо учитывать в настройках расчетного документа^M'
	    +'(обычно бланк - [Параметры отчета])^M'
	    +'что дата начала отчетного периода должна^M'
	    +'превышать дату операции ввода остатков.^M'
	     ,mtWarning);
    fi;
    ОбновитьВнешнийВид;
--    ПриИзмененииОС;
--    for ii=1..позиции do НачислениеАмортизации(ii);od;
    ^true;
  | s='Дучет_':
      if ОстаткиТекущегоПериода: if год(v)>год(НовыйОтчетныйПериодНачало):Message('Дата принятия к учету превышает текуший отчетный период!',mtWarning);^false;fi;
       | true:if год(v)>=год(НовыйОтчетныйПериодНачало):Message('Дата принятия к учету превышает текуший отчетный период!',mtWarning);^false;fi;
      fi;
      позицииос[i].Дучет=v;
      if позицииос[i].Дэкспл<01.01.2900:НачислениеАмортизации(i);fi;
      s=trim(mindat(позицииос[i].Дучет,позицииос[i].Дэкспл));
      if trim(позицииос[i].ДЭКСПЛММДДГГ)<>s:позицииос[i].ДЭКСПЛММДДГГ=s;fi;
  | s='Дэкспл_':
      if ОстаткиТекущегоПериода: if год(v)>год(НовыйОтчетныйПериодНачало):Message('Дата ввода в эксплуатацию превышает текуший отчетный период!',mtWarning);^false;fi;
       | true:if год(v)>=год(НовыйОтчетныйПериодНачало):Message('Дата ввода в эксплуатацию превышает текуший отчетный период!',mtWarning);^false;fi;
      fi;
      позицииос[i].Дэкспл=v;НачислениеАмортизации(i);
      s=trim(mindat(позицииос[i].Дучет,позицииос[i].Дэкспл));
      if trim(позицииос[i].ДЭКСПЛММДДГГ)<>s:позицииос[i].ДЭКСПЛММДДГГ=s;fi;
  | true:^true;
 fi;
 ^true;
end;
func ПриПроверкеЧ(s:s;i:i;v:n):l;
var nn,n1:n;
var ll:l;
if не РазрешеноРедактирование:^false;fi;

 if s="ЦЕНАНФА":--if v<0:Message('цена должна быть неотрицательной');^false;fi;
    if Позиции[i].КОЛНФА=0:Позиции[i].КОЛНФА=1;fi;
    Позиции[i].СУМНФА=v*Позиции[i].КОЛНФА;
  | s="ЦЕНАНФАОС":if v<0:Message('цена должна быть неотрицательной');^false;fi;
    if v<=Общ_Пер('ОС_РАСХ',mindat0_(i)):
       if ПозицииОС[i].ДЕБАМОРТ00<>'':ПозицииОС[i].ДЕБАМОРТ00='';fi; 
       if ПозицииОС[i].СЧЕТАМОРТ<>'':ПозицииОС[i].СЧЕТАМОРТ='';fi;
    fi;
    if ПозицииОС[i].КОЛНФА=0:ПозицииОС[i].КОЛНФА=1;fi;
    ПозицииОС[i].СУМНФА=v*ПозицииОС[i].КОЛНФА;
  | s="СУМАМ00_":
     if pos('НФА.101.07.',ПозицииОС[i].НФА)<>1 and ЦЕНАНФАОС[i]<=Общ_Пер('ОС_РАСХ',mindat0_(i)):Message('Амортизацию можно вводить только если цена более '+str(Общ_Пер('ОС_РАСХ',mindat0_(i)))+' руб');
	^false;
     fi;
     ПозицииОС[i].СУМАМ00=v;
    ^true;
  | s="СУМНФАОС_":if v<0:Message('сумма должна быть неотрицательной');^false;fi;
    ПозицииОС[i].СУМНФА=v;
     ll=true;
     if pos('НФА.101.07.',ПозицииОС[i].НФА)=1:
	if НФА_НЕСПИСЫВАТЬДО1000(ПозицииОС[i].НФА):
	   if ПозицииОС[i].КОЛНФА<>0: ПозицииОС[i].КОЛНФА=0;fi;
	   if ПозицииОС[i].ДЭКСПЛ>1.1.100:
	      if match(ПозицииОС[i].СЧНФА,'???.????.???????.???.?.101.?7.???'): --б/у библ фонд по балансу  - нужна 100% аморт
		 ПозицииОС[i].СУМАМ00=ПозицииОС[i].СУМНФА;
	      fi;
	   fi;
	   ll=false;
--	     Message('Библиотечный фонд с ценой не более 20000 - только суммовой учет!');
	fi;
     fi;
    if ll:
       if ПозицииОС[i].КОЛНФА=0:ПозицииОС[i].КОЛНФА=1;fi;
       if (ПозицииОС[i].СУМНФА/ПозицииОС[i].КОЛНФА)<Общ_Пер('ОС_РАСХ',mindat0_(i)):
	  if ПозицииОС[i].ДЕБАМОРТ00<>'':ПозицииОС[i].ДЕБАМОРТ00='';fi;
	  if ПозицииОС[i].СЧЕТАМОРТ<>'':ПозицииОС[i].СЧЕТАМОРТ='';fi;
       fi;
    fi;

  | s="СУМНФА_":
    --if v<0:Message('сумма должна быть неотрицательной');^false;fi;
    Позиции[i].СУМНФА=v;
    if Позиции[i].КОЛНФА=0:Позиции[i].КОЛНФА=1;fi;
--    НачислениеАмортизации(i);
  | s="КОЛНФА_":
    --if v<0:Message('количество должно быть неотрицательным');^false;fi;
    Позиции[i].СУМНФА=v*ЦЕНАНФА[i];Позиции[i].КОЛНФА=v;--НачислениеАмортизации(i);
  | s="КОЛНФАОС_":
    if v<0:Message('количество должно быть неотрицательным');^false;fi;ПозицииОС[i].СУМНФА=v*ЦЕНАНФАОС[i];ПозицииОС[i].КОЛНФА=v;--НачислениеАмортизации(i);
 -- | s="СУМАМ00":if v<0:Message('сумма должна быть неотрицательной');^false;fi;Позиции[i].СУМАМ00=v;НачислениеАмортизации(i);
  | s="ДРАГМЕТ00_":if v<0:Message('количество должно быть неотрицательным');^false;fi;ПозицииОС[i].ДРАГМЕТ00=v*1000000;
  | s="ДРАГМЕТ01_":if v<0:Message('количество должно быть неотрицательным');^false;fi;ПозицииОС[i].ДРАГМЕТ01=v*1000000;
  | s="ДРАГМЕТ02_":if v<0:Message('количество должно быть неотрицательным');^false;fi;ПозицииОС[i].ДРАГМЕТ02=v*1000000;
  | s="ДРАГМЕТ03_":if v<0:Message('количество должно быть неотрицательным');^false;fi;ПозицииОС[i].ДРАГМЕТ03=v*1000000;
  | s="ДРАГМЕТ04_":if v<0:Message('количество должно быть неотрицательным');^false;fi;ПозицииОС[i].ДРАГМЕТ04=v*1000000;
  | s="ДРАГМЕТ05_":if v<0:Message('количество должно быть неотрицательным');^false;fi;ПозицииОС[i].ДРАГМЕТ05=v*1000000;
  | s="ДРАГМЕТ06_":if v<0:Message('количество должно быть неотрицательным');^false;fi;ПозицииОС[i].ДРАГМЕТ06=v*1000000;
  | s="ДРАГМЕТ07_":if v<0:Message('количество должно быть неотрицательным');^false;fi;ПозицииОС[i].ДРАГМЕТ07=v*1000000;
  | s="ДРАГМЕТ08_":if v<0:Message('количество должно быть неотрицательным');^false;fi;ПозицииОС[i].ДРАГМЕТ08=v*1000000;
  | s="ДРАГМЕТ10_":if v<0:Message('количество должно быть неотрицательным');^false;fi;Позиции[i].ДРАГМЕТ00=v*1000000;
  | s="ДРАГМЕТ11_":if v<0:Message('количество должно быть неотрицательным');^false;fi;Позиции[i].ДРАГМЕТ01=v*1000000;
  | s="ДРАГМЕТ12_":if v<0:Message('количество должно быть неотрицательным');^false;fi;Позиции[i].ДРАГМЕТ02=v*1000000;
  | s="ДРАГМЕТ13_":if v<0:Message('количество должно быть неотрицательным');^false;fi;Позиции[i].ДРАГМЕТ03=v*1000000;
  | s="ДРАГМЕТ14_":if v<0:Message('количество должно быть неотрицательным');^false;fi;Позиции[i].ДРАГМЕТ04=v*1000000;
  | s="ДРАГМЕТ15_":if v<0:Message('количество должно быть неотрицательным');^false;fi;Позиции[i].ДРАГМЕТ05=v*1000000;
  | s="ДРАГМЕТ16_":if v<0:Message('количество должно быть неотрицательным');^false;fi;Позиции[i].ДРАГМЕТ06=v*1000000;
  | s="ДРАГМЕТ17_":if v<0:Message('количество должно быть неотрицательным');^false;fi;Позиции[i].ДРАГМЕТ07=v*1000000;
  | s="ДРАГМЕТ18_":if v<0:Message('количество должно быть неотрицательным');^false;fi;Позиции[i].ДРАГМЕТ08=v*1000000;
 fi;
 ^true;
end;
Proc ДобавитьПризнакВДопАналитику(Призн:s;Кмнт:s);
 var ss:s;
 refreshana;
 if name_A(Призн)=' ':
    ss=PlanVar('Бух');
    ss=ss+'\Аналитика\ДопАналитика.Sig';
    Записать(ss,'');
    Записать(ss,Призн+' --'+Кмнт);
 fi;
end;
func ПриПроверкеС(s:s;i:i;v:s):l;
var ss,spr:s;
var p,j:i;
if not РАБ.НФА.B01.ПроверкаНаИзменения(ПРОВОДИТЬ):^false;fi;
s=up(s);
if pos('РУЧАН',s)=1:
   if pos('1',s)>0:spr=ЗаголовокРучАн1Спр;
    | true:^false; spr=ЗаголовокРучАн2Спр;
   fi;

   NotDelРОСТ=true;
   if name_A(spr+'.')<>' ':

      v=up(trim(v));
      if length(v)<>0:
	 if не соотв(v,spr+'.*'):v=spr+'.'+v;fi;
      fi;

      if не ПравильныйПризнак(v):^false;fi;
      if pos('РУЧАНОСН',s)=1:
	 ss='|'+МаскаПризнаков(ПОЗИЦИИОС[i].СЧНФА,True)+'|'+МаскаПризнаков(ПОЗИЦИИОС[i].СЧНФА,false);
	 if pos('|'+spr+'.',ss)>0: ss=ПОЗИЦИИОС[i].НФА;
	  | true:v='';^false;
	 fi;
       | true:		     
	 ss='|'+МаскаПризнаков(ПОЗИЦИИ[i].СЧНФА,True)+'|'+МаскаПризнаков(ПОЗИЦИИ[i].СЧНФА,false);
	 if pos('|'+spr+'.',ss)>0: ss=ПОЗИЦИИ[i].НФА;
	  | true:v='';^false;
	 fi;
      fi;

      ДобавитьПризнакВДопАналитику(v,Name_A(ss)+' '+v);
    | true:v='';
   fi;
   if s='РУЧАНОСН1':ПОЗИЦИИОС[i].РУЧАН1=v;
    | s='РУЧАНОСН2':ПОЗИЦИИОС[i].РУЧАН1=v;
    | s='РУЧАНН1'  :ПОЗИЦИИ  [i].РУЧАН1=v;
    | s='РУЧАНН2'  :ПОЗИЦИИ  [i].РУЧАН1=v;
   fi;
fi;
 ^true;
end;

Proc Ручан_ПриВыходе(s:s;i:i);
var v:s;
if not РАБ.НФА.B01.ПроверкаНаИзменения(ПРОВОДИТЬ):exit;fi;
if pos('РУЧАН',s)=1:
   if не NotDelРОСТ:--сработал DEL
    if s='РУЧАНОСН1':ПОЗИЦИИОС[i].РУЧАН1='';
     | s='РУЧАНОСН2':ПОЗИЦИИОС[i].РУЧАН1='';
     | s='РУЧАНН1'  :ПОЗИЦИИ[i].РУЧАН1	='';
     | s='РУЧАНН2'  :ПОЗИЦИИ[i].РУЧАН1	='';
    fi;
   fi;

   NotDelРОСТ=false;
--   v=trim(Позиции[i].РОСТ);
--   if length(v)=0:Позиции[i].РОСТ=v;exit;fi;
--   if не соотв(v,'ЗН.*'):v='ЗН.'+v;fi;
--   if Name_A(v)=' ':RefreshAna;fi;
--   if Name_A(v)=' ':ДобавитьПризнакВДопАналитику(v,Name_A(Позиции[i].НФА));fi;
--   Позиции[i].РОСТ=v;
fi;
end;

--end;	    колОСКн
func ПриВходеКн(s:s;i:i):l;
var dd:d;
var ss:s;
var nn,nn1,nnam,nnam1:n;
var p,ii:i;
var ll:l;
 if не РазрешеноРедактирование:^false;fi;
 if s='ДэксплКн':
   if ПозицииОС[i].Дэкспл>1.1.100:dd=календарь(ПозицииОС[i].Дэкспл);
    | true:dd=календарь(ДАТОПЕР);
   fi;
   ll=ПриПроверкеД('Дэкспл_',i,dd);
  | s='ДучетКн':
   if ПозицииОС[i].Дучет>1.1.100:dd=календарь(ПозицииОС[i].Дучет);
    | true:dd=календарь(ДАТОПЕР);
   fi;
   ll=ПриПроверкеД('Дучет_',i,dd);
  | s='КнДопАнН':Шаблон.Столбец=AsInteger(Шаблон.Столбец)-1;s=AsString(Шаблон.Поле);^ПриВходе(s,i);
  | s='колОСКн':
    if соотв(ПозицииОС[i].НФА,'НФА.101.07.*'):
	p=Вопрос('','Не учитывать количество?','Да;Нет',mtConfirmation);
       if p=1:
	  ПозицииОС[i].КолНФА=0;
	  ПозицииОС[i].СУМАМ00=ПозицииОС[i].СумНФА;
       fi;
    fi;
    if ПозицииОС[i].КолНФА>1 и trunc(ПозицииОС[i].КолНФА)=ПозицииОС[i].КолНФА:
	p=Вопрос('','Разбить по количеству?','Да;Нет',mtConfirmation);
       if p=1:
     --     РАБ.НФА.B01.ЗаполнитьСписокПолейКартотеки('РПО_ОСТ_НФА@ПОЗИЦИИ');
	  p=int(ПозицииОС[i].КолНФА);
	  nn =Trunc(ПозицииОС[i].СумНФА/ПозицииОС[i].КолНФА,2);-- цена всех позиций
	  nn1=ПозицииОС[i].СумНФА-nn*(ПозицииОС[i].КолНФА-1);  -- цена последней позиций
	  nnam =Trunc(ПозицииОС[i].СУМАМ00/ПозицииОС[i].КолНФА,2);-- амортизация всех позиций
	  nnam1=ПозицииОС[i].СУМАМ00-nnam*(ПозицииОС[i].КолНФА-1);  -- амортизация последней позиций
	  ПозицииОС[i].КолНФА=1;
	  ПозицииОС[i].СумНФА=nn;
	  ПозицииОС[i].СУМАМ00=nnam;
	  for ii=1..p-1 do
	    insertframe(ПозицииОС,i+1);
	    РАБ.НФА.B01.КопироватьЗаписьПодтаблицыБланкаРедактора(БланкКОД+'.СписокПолейКартотеки',ДлинаМассива(СписокПолейКартотеки),ИМЯКРТ,'ПОЗИЦИИОС',i,i+1);
	  od;
	  ПозицииОС[i].СумНФА=nn1;
	  ПозицииОС[i].СУМАМ00=nnam1;
       fi;
    fi;

  | true:^true;
 fi;
 ^false;
end;
func ПриОбзоре(Сек:s;y:i;x:i;v:s):s;
var i,ii,p:i;
var s,ss:s;
var n,nn,nn1,нормадо2005,нормапосле2005,сумамортдо2005,сумамортпосле2005:n;
var dd,dd1:d;
  i=КакЦелое(Шаблон.Кадр);
  s=КакСтрока(Шаблон.Поле);
  if s='ДАТОПЕРН':ДАТОПЕР=календарь(ДАТОПЕР);ПриПроверкеД(s,1,ДАТОПЕР);

  fi;
  Шаблон.СкрытьРедактор(false);
  ^v;

end;

--2-- _Обработчики объектов
--proc ПриНажатии(s:s);
--var ii,i,j:i;
--var ss,Файл:s;
--var ll:l;
--2-- блок обработки до проверки разрешения на изменения
-- if s='КнПоиск'  :ii=Input (s,'Текст для поиска');
--    РАБ.НФА.B01.GoToFindTextInBlank(s);exit;
-- fi;
--2-- блок обработки с проверкой разрешения на изменения
--if not РАБ.НФА.B01.ПроверкаНаИзменения(ПРОВОДИТЬ):exit;fi;
-- if s='КнВыборАналитики': openblank("РАБ.НФА.B010",false);
--  | s='КнПересчетАморт':
--     Файл='АмортПоИнв01_01_2006.txt';
--     if ЕстьФайл(Файл):
--	 ll=РАБ.НФА.B03._Загрузить_СтрМассив_ИзФайла.(БланкКОД+'.st',БланкКОД+'.st1',1,Файл);
--	 if not ll:exit;fi;
--	 j=ДлинаМассива(st);
--	 if (ВопрДаОтказ("Провести пересчет амортизации для ВЦ ВИшневского?"+chr(13)+"данные в столбце "+СУМАМ00_+"будут пересчитаны на новые!") = кмдВерно) :
--	   if j>0:
--	     SortArray(st);
--	     ClearVariable(st1);
--	     ClearVariable(st2);
--	     for i=1..j do
--	      st2[i]=ВыделитьСлово(3,st[i],'#');-- баланс стоим
--	      st1[i]=ВыделитьСлово(2,st[i],'#');-- аморт
--	      st[i] =ВыделитьСлово(1,st[i],'#');-- инв
--	     od;
--	     for ii=1..Позиции do
--	      if ЦЕНАНФА[ii]<1001:Позиции[ii].СУМАМ00=0;
--	       | ЦЕНАНФА[ii]>10000:
--		  i=ПоискВмассиве(st,SubStr(trim(Позиции[ii].ИНВ),5,50),true);
--		  if i>0:
--		    Позиции[ii].СУМАМ00=окр(st1[i],3);
--		    Позиции[ii].СУМНФА=окр(st2[i],3);
--		  fi;
--	       | true:
--		  i=ПоискВмассиве(st,SubStr(trim(Позиции[ii].ИНВ),5,50),true);
--		  if i>0:
--		    Позиции[ii].СУМНФА=окр(st2[i],3);
--		  fi;

--		 if соотв(М,'М.Э.*'):Позиции[ii].СУМАМ00=Позиции[ii].СУМНФА;
--		  | true:
--		    if Позиции[ii].ДЭКСПЛ<ДАТОПЕР и Позиции[ii].ДЭКСПЛ>1.1.100:Позиции[ii].СУМАМ00=Позиции[ii].СУМНФА;
--		     | true:Позиции[ii].СУМАМ00=0;
--		    fi;
--		 fi;
--	      fi;
--	     od;
--	   fi;
--	 fi;

--	| true:
--	 if (ВопрДаОтказ("Провести пересчет амортизации?"+chr(13)+"данные в столбце "+СУМАМ00_+"будут пересчитаны на новые!") = кмдВерно) :
--	   for ii=1..Позиции do
--	    Позиции[ii].СУМАМ00=РасчетАморт00(ii);
--	   od;
--	 fi;
--     fi;
--  | true:exit;
-- fi;
--end;
var ПроводитьНеНапоминать:i;
proc ПриИзменении(s:s);
var ii:i;
var l:l;
2-- блок обработки до проверки разрешения на изменения
 if s='ФлПроводить':
    if не Заблокирована:
      if Проводить:РедакторПрименить;
       | true:
	 ПроводитьНеНапоминать=РАБ.НФА.B01.ПроводитьНеНапоминать(ПроводитьНеНапоминать);
	 if ПроводитьНеНапоминать=1 or ПроводитьНеНапоминать=3:РедакторПрименить;
	  | true:Проводить=true;ФлПроводить.State=true;
	 fi;
      fi;
--     | true:Проводить=not Проводить;
    fi;
     ShowProgress(1,'');CloseProgress;--прорисовываем бланк (обновляем внешний вид)
    exit;
  | s='ФлCopyClosedModFob':
     if not ClosedModFob:ClosedModFob=true;CurrentRecord=Current;--блокировка от удаления
      | true:-- надо снять флаг
	Раб.SQL.SetClosedModFobUpdateOnBlankEditor_false(ИМЯКРТ,current,5,SQLver,true);
     fi;
     РедакторПрименить;
     ФлCopyClosedModFob.State=CopyClosedModFob;
     exit;

--  | s='ФлCopyClosedModFob':
--     if SQLver и CanUpdate(ИМЯКРТ):if ClosedModFob:Раб.НФА.B00SQL.SetClosedModFob(ИМЯКРТ,current,not ClosedModFob);ОбновитьКартотеку(ИМЯКРТ,сегодня);-- снимаем флаг через SQL
--		  | true:ClosedModFob=not ClosedModFob;-- ставим флаг напрямую
--		 fi;
--	| true: -- не сетевая или запрет на SQL запросы в схеме доступа
--	   ClosedModFob=not ClosedModFob;
--	   if ClosedModFob:CurrentRecord=Current; -- блокировка от удаления
--	    | true:CurrentRecord=nil;
--	   fi;
--     fi;
--     l=CopyClosedModFob;
--     ShowProgress(1,'');CloseProgress;--прорисовываем бланк (обновляем внешний вид)
--     РедакторПрименить;
--     exit;
  | s='ФлПереоценка':
    if Заблокирована:
       l=Переоценка;
       ShowProgress(1,'');CloseProgress;--прорисовываем бланк (обновляем внешний вид)
    fi;
   ОбновитьВнешнийВид;
  | s='ФлУчитыватьДрагМет':
    if Заблокирована:
       l=УчитыватьДрагМет;
       ShowProgress(1,'');CloseProgress;--прорисовываем бланк (обновляем внешний вид)
    fi;
   ОбновитьВнешнийВид;
 fi;
2-- блок обработки с проверкой разрешения на изменения
if not РАБ.НФА.B01.ПроверкаНаИзменения(ПРОВОДИТЬ):exit;fi;
-- if s='ФлОС': ОС=not ОС; ФлОС.State=ОС; ПриИзмененииОС;
--  | true:exit;
-- fi;
end;

--2-- _Обработчики шаблона
Proc ШаблонПриСчитывании;
var ss:s;
var ll:l;
БылОбновленСписокОКОФ=false;
-- считываем имена МОЛ_ИМЯ и М_ИМЯ
ll=false;
ss=Name_A(МОЛ);
if ss<>' ' and МОЛ_ИМЯ<>ss:МОЛ_ИМЯ=ss;ll=true;fi;
ss=Name_A(М);
if ss<>' ' and М_ИМЯ<>ss:М_ИМЯ=ss;ll=true;fi;
if ll:РедакторПрименить;fi;
ОбновитьВнешнийВид;
---- НеНапоминать=0;
-- if ГОДОСТ<>str(год(датопер)):ГОДОСТ=str(год(датопер)); fi;
-- if ПОЗИЦИИ=0: insertframe(ПОЗИЦИИ,ПОЗИЦИИ+1);fi;
-- ПриИзмененииОС;
-- ФлФикс.Enabled=Проводить;
-- if НовыйОтчетныйПериодНачало<1.1.1980:					 2-- если НовыйОтчетныйПериодНачало не заполнен то
--    if датопер<1.1.2005:НовыйОтчетныйПериодНачало=1.1.2005;			 2-- при обновлении возможны потери...
--     | год(датопер)=2006:НовыйОтчетныйПериодНачало=1.1.2006;			 2-- при обновлении возможны потери...
--     | год(датопер)=2005 и мес(датопер)=12 :НовыйОтчетныйПериодНачало=1.1.2006;2-- при обновлении возможны потери...
--    fi;
-- fi;
end;
func ШаблонПриПроверке:l;
--if ИтКОЛНФА <>ИКОЛНФА :ИКОЛНФА =ИтКОЛНФА ;fi;
--if ИтСУМНФА <>ИСУМНФА :ИСУМНФА =ИтСУМНФА ;fi;
--if ИтСУМАМ00<>ИСУМАМ00:ИСУМАМ00=ИтСУМАМ00;fi;
--if ИтСУМАМ01<>ИСУМАМ01:ИСУМАМ01=ИтСУМАМ01;fi;
--if ИтСУМАМ02<>ИСУМАМ02:ИСУМАМ02=ИтСУМАМ02;fi;
--if ИтСУМАМ03<>ИСУМАМ03:ИСУМАМ03=ИтСУМАМ03;fi;
--if ИтСУМАМ04<>ИСУМАМ04:ИСУМАМ04=ИтСУМАМ04;fi;
--if ИтСУМАМ05<>ИСУМАМ05:ИСУМАМ05=ИтСУМАМ05;fi;
--if ИтСУМАМ06<>ИСУМАМ06:ИСУМАМ06=ИтСУМАМ06;fi;
--if ИтСУМАМ07<>ИСУМАМ07:ИСУМАМ07=ИтСУМАМ07;fi;
--if ИтСУМАМ08<>ИСУМАМ08:ИСУМАМ08=ИтСУМАМ08;fi;
--if ИтСУМАМ09<>ИСУМАМ09:ИСУМАМ09=ИтСУМАМ09;fi;
--if ИтСУМАМ10<>ИСУМАМ10:ИСУМАМ10=ИтСУМАМ10;fi;
--if ИтСУМАМ11<>ИСУМАМ11:ИСУМАМ11=ИтСУМАМ11;fi;
--if ИтСУМАМ12<>ИСУМАМ12:ИСУМАМ12=ИтСУМАМ12;fi;
  ^true;
end;



2Proc0 2ШаблонПослеОткрытия0(l:l);
 var ss:s;
 var t:i;
 РАБ.НФА.B01._Ini_Menu_Alt_Enter.;
 РАБ.НФА.B01.Ini_КнПроводить;
 IniОбщМенюОбъект;
 ReloadОбщМенюОбъект;
 ss=ИмяПользователя(ИмяБазы(ИМЯКРТ));
 SQLver=SQLЗапросыРазрешены;
-- РАБ.НФА.B02.ch_S_Wсохранить;
-- инициализация --
 ЗаголовкиСтолбцов[01]='НФА'			    ;ЗаголовкиСтолбцовСчАн[01]=false;
 ЗаголовкиСтолбцов[02]='Счет НФА/дебет'     ;ЗаголовкиСтолбцовСчАн[02]=true;
 ЗаголовкиСтолбцов[03]='Счет НФА/кредит'	    ;ЗаголовкиСтолбцовСчАн[03]=true;
 ЗаголовкиСтолбцов[04]='Дополнительная аналитика'   ;ЗаголовкиСтолбцовСчАн[04]=false;
 ЗаголовкиСтолбцов[11]='НФА'			    ;ЗаголовкиСтолбцовСчАн[04]=false;
 ЗаголовкиСтолбцов[12]='Счет НФА/дебет'     ;ЗаголовкиСтолбцовСчАн[12]=true;
 ЗаголовкиСтолбцов[13]='Счет НФА/кредит'	    ;ЗаголовкиСтолбцовСчАн[13]=true;
 ЗаголовкиСтолбцов[14]='Дополнительная аналитика'   ;ЗаголовкиСтолбцовСчАн[14]=false;
 ЗаголовкиСтолбцов[15]='№ Учетный/инв.'     ;ЗаголовкиСтолбцовСчАн[15]=false;
 ЗаголовкиСтолбцов[16]='Дебет аморт.'		    ;ЗаголовкиСтолбцовСчАн[16]=true;
 ЗаголовкиСтолбцов[17]='Счет аморт.'		    ;ЗаголовкиСтолбцовСчАн[17]=true;
 ЗаголовкиСтолбцов[18]='Дебет аморт. текущ. периода';ЗаголовкиСтолбцовСчАн[18]=true;
-- ЗаголовкиСтолбцов[19]='Кредит аморт.'		;ЗаголовкиСтолбцовСчАн[19]=true;
ClearVariable(ЗаголовкиСтолбцовПоказ);
for t=1..18 do 
ЗаголовкиСтолбцовПоказ[t]=ВзятьЗаголовкиСтолбцовПоказ(t); 
od;
 BlnHelp[01]='?';BlnHelpIndex[01]='НФА.ЖУР.РПО_ОСТ_НФА.01hlp';
 BlnHelp[02]='?';BlnHelpIndex[02]='НФА.ЖУР.РПО_ОСТ_НФА.02hlp';
 BlnHelp[03]='?';BlnHelpIndex[03]='НФА.ЖУР.РПО_ОСТ_НФА.03hlp';
 BlnHelp[11]='?';BlnHelpIndex[11]='НФА.ЖУР.РПО_ОСТ_НФА.11hlp';
 BlnHelp[12]='?';BlnHelpIndex[12]='НФА.ЖУР.РПО_ОСТ_НФА.12hlp';
 BlnHelp[13]='?';BlnHelpIndex[13]='НФА.ЖУР.РПО_ОСТ_НФА.13hlp';
 BlnHelp[14]='?';BlnHelpIndex[14]='НФА.ЖУР.РПО_ОСТ_НФА.14hlp';
 BlnHelp[15]='?';BlnHelpIndex[15]='НФА.ЖУР.РПО_ОСТ_НФА.15hlp';
 BlnHelp[16]='?';BlnHelpIndex[16]='НФА.ЖУР.РПО_ОСТ_НФА.16hlp';
БланкКОД=РАБ.НФА.B01.БланкИмя;
if не БылРасчитанСписокПолейКартотеки:БылРасчитанСписокПолейКартотеки=true;
  ss=Раб.НФА.B01.ЗаполнитьСписокПолейКартотеки(ИМЯКРТ);КопироватьМассив(Раб.НФА.B01.st,СписокПолейКартотеки);
fi;
-- СписокСправочников=СчитатьНастройкиСправочников('Настройки справочников журнала ввода остатков НФА:');
-- if trim(СписокСправочников)='':СписокСправочников='П.*|ПГР.*|ВД.*|КТ.*';fi;
2end0;

Proc ШаблонПриОтмене;
ОбновитьВнешнийВид;
end;

--3Proc1 3Menu_Alt_Enter_ПриНажатии1(s:s);
--1 var Sect :s; -- имя текущей секции
--1 var Obj  :s; -- имя текущего объекта
--1 var Field:s; -- имя текущего поля
--1 var row,col,iter:i; -- Строка, столбец и итерация
--1 var Alt0,i,j,k1:i;
--1  Sect =AsString (Template.Name  );
--1  Obj  =AsString (Template.Object);
--1  Field=AsString (Template.Field );
--1  Row  =AsInteger(Template.Row   );
--1  Col  =AsInteger(Template.Column);
--1  Iter =AsInteger(Template.Frame );
--	 i=ВыборНастройки;
--	 if i<>0:
--	   КнОбщМеню_OnClick(ОбщМенюОбъект[in[i]]);
--	 fi;
----ClearVariable(st);
----k=0;
----  j=ДлинаМассива(ОбщМенюОбъект);
----  for i=1..j do
----	if ОбщМенюОбъект_Разр[i]:k=k+1;
----	   st[k]=ОбщМенюОбъект_Надп[i]+'--'+ОбщМенюОбъект_Подск[i];
----	   in[k]=i;
----	fi;
----  od;
----  i=ДеревоАльтернатив('Меню:',st,-1,12,0,'.','Пункт меню','Назначение',-1,true);
----  if i<>0:
----	КнОбщМеню_OnClick(ОбщМенюОбъект[in[i]]);
----  fi;
--3end1;

Proc Печать = 'Печать';
  КнОбщМеню_OnClick('КнОбщМеню03');
end;
Proc Отмена = 'Отмена';
  КнОбщМеню_OnClick('КнОбщМеню01');
end;
Proc Сохранить = 'Сохранить';
  КнОбщМеню_OnClick('КнОбщМеню02');
end;
Proc Закрыть = 'Закрыть';
  КнОбщМеню_OnClick('КнОбщМеню04');
end;
Proc Начало_документа = 'В начало документа';
  КнОбщМеню_OnClick('КнОбщМеню05');
end;
Proc Конец_документа = 'В конец документа';
  КнОбщМеню_OnClick('КнОбщМеню06');
end;
Proc Настройки_бланка = 'Настройки бланка';
  КнОбщМеню_OnClick('КнОбщМеню07');
end;
Proc Настройки_справочников = 'Настройка условий для выбора справочников при вводе остатков';
  КнОбщМеню_OnClick('КнОбщМеню08');
end;

Proc Сохранить_OnClick(Row: Integer; Col: Integer; Double: Logical);
  РедакторПрименить;
end;


Proc Отмена_OnClick(Row: Integer; Col: Integer; Double: Logical);
  РедакторОтменить;
end;
Proc Настройка_Бланка;
  КнОбщМеню_OnClick('КнОбщМеню07');
end;

Proc КнПроводить_ПриНажатии(ss:s);
var ll:l;
if не Заблокирована:
  if Проводить:ll=ВопрДаОтказ("Снять флаг проводить?")=кмдВерно;
   | true:     ll=ВопрДаОтказ("Установить флаг проводить?")=кмдВерно;
  fi;
  if ll:Проводить=not Проводить;ПриИзменении('ФлПроводить');fi;
fi;
end;

Proc ОбновитьВнешнийВид_(Поле: Строка; Итер: Целое);
  ОбновитьВнешнийВид;
end;




Проц ШаблонПриЗакрытии(Уничтожить: Логич);

end;


Конец
