БЛАНКСШАБЛОНОМ[10.02.2006] "Акт о приеме-передаче объектов нефинансовых активов", РЕДАКТОР РПО_АКТЫ_УНФА;
-- Редакция ТБ-Бюджет
2-- Переменные
КолКопий:i=[1];
var Масштаб :i=[100];
var АвтоМасштаб:i;
var УпрКлеткаКнопкаВремя:i;
var SelfCRD:s='РПО_АКТЫ_УНФА';
СтрВсе:i;
СтрНач:i=[1];
СтрКон:i;
Книжная:l=[true];
ЛП:i;
ПП:i;
ВП:i;
НП:i;
Тпринтер:s;
Proc НастройкиПечатиПоУмолчанию;
  лп=10;пп=10;вп=15;нп=15;Книжная=false;Масштаб=100;-- настройки по умолчанию
end;
var И_БАЛАНССТОИМ:n=СуммаМассива(СОСТОС[].БАЛАНССТОИМ);
var И_СУМНАЧАМОРТ:n=СуммаМассива(СОСТОС[].СУМНАЧАМОРТ);
Timer10:object;

Сек1 :Object;   СекОС1 :Object;   Сек4 :Object;   СекХарОС :Object;
Сек2 :Object;   СекОС2 :Object;   Сек5 :Object;


СцУпрПечать       :секция;var УпрПечать:l=true;
СцУпрExcel        :секция;var УпрExcel:l=false;
СцУпрДокОснование :секция;
СцУпрРасчет       :секция;
ЕстьДокОснование  :l=ДНФАID<>0 or RECCRD<>0;
КартотекаОснование:s=if(RECCRD<>0,CRD,if(ДНФАID<>0,'РПО_ОПЕРАЦИИДНФА',''));
--  ДНФАID         :INTEGER; --ДНФАID
--  RECCRD         :INTEGER; --ссылка на картотеку CRD
--  CRD            :STRING; --ссылка на картотеку по ее имени
--  BLNCRD         :STRING; --Бланк редактор картотеки родителя CRD

СцПриложение      :секция;
СцУтверждаю       :секция;
СцРеквизиты       :секция;
СцЗаголовокТАБ1   :секция;
СцТАБ1            :секция;
СцИтогиТАБ1       :секция;
СцЗаголовокТАБ2   :секция;
СцТАБ2            :секция;
СцИтогиТАБ2       :секция;
СцЗаголовокТАБ3   :секция;
СцТАБ3            :секция;
СцИтогиТАБ3       :секция;
СцВалюта          :секция;
СцСдалПринял      :секция;
СцСогласование    :секция;
СцКомиссияПриказ  :секция;
СцКомиссияПриказ0 :секция;
СцЗаголовокТАБ4   :секция;
СцТАБ4            :секция;
СцЗаголовокТАБ5   :секция;
СцТАБ5            :секция;
СцЗаголовокКом1   :секция;
СцТАБКом1         :секция;
СцЗаголовокКом2   :секция;
СцТАБКом2         :секция;
СцЗаголовокБух    :секция;
СцТАББух          :секция;
СцПодписи1        :секция;

-- список имен доступных секции --
СекцииБланкаДанные:s='СцУтверждаю СцРеквизиты СцТАБ1 СцЗаголовокТАБ2 СцТАБ2 СцТАБ3 СцВалюта СцСдалПринял СцСогласование СцКомиссияПриказ СцКомиссияПриказ0 СцТАБ4 СцТАБ5 СцЗаголовокКом1 СцТАБКом1 СцЗаголовокКом2 СцТАБКом2 СцТАББух СцПодписи1';
СекцииБланкаОформление:s='СцЗаголовокТАБ1 СцИтогиТАБ1 СцИтогиТАБ2 СцЗаголовокТАБ3 СцИтогиТАБ3 СцЗаголовокТАБ4 СцЗаголовокТАБ5 СцЗаголовокБух';



--  SUBTAB ХАРОС = "Краткая индивидуальная характеристика объекта";
--    НАИМЕН_ПР   :STRING; --наименование признаков
--    ОСН         :STRING; --основной объект
--    ПРИСТР1     :STRING; --наименование пристроек
--    ПРИСТР2     :STRING; --наименование пристроек
--    ПРИСТР3     :STRING; --наименование пристроек
--    ПРИСТР4     :STRING; --наименование пристроек
--    НАИМЕН_ОБ   :STRING; --наименование объекта
--    НАИМЕН_ДРАГ :STRING; --наименование драг. материала
--    ЕДИЗМ_ДРАГ  :STRING(50); --единица измерения драг. материала
--    ОКЕИ_ДРАГ   :STRING(15); --код единицы измерения
--    КОЛИЧ       :REAL; --количество драг. материала
--    ДРАГМЕТ00   :REAL; --МПГ
--    ДРАГМЕТ01   :REAL; --Золото
--    ДРАГМЕТ02   :REAL; --Серебро
--    ДРАГМЕТ03   :REAL; --Платина
--    ДРАГМЕТ04   :REAL; --Палладий
--    ДРАГМЕТ05   :REAL; --Иридий
--    ДРАГМЕТ06   :REAL; --Родий
--    ДРАГМЕТ07   :REAL; --Рутений
--    ДРАГМЕТ08   :REAL; --Осмий
--  ENDSUB;

var РазрывыСтраниц[]:i;
var РазрывыСтраницСекция[]:s;
var РазрывыСтраницЗначение[]:l;
var СекцииКонтрольРазрывов:s='СцПриложение СцЗаголовокТАБ1 СцТАБ1 СцЗаголовокТАБ2 СцТАБ2 СцЗаголовокТАБ3 СцТАБ3 СцЗаголовокБух СцТАББух';
var СекцииБезРазрывов:s='';

proc ЗаполнитьРазрывыСтраниц(ph:i);
var j,z,k,h0,h1,h2:i;
var ss:s;
var сц:объект;
 ph=int((ph*100)/масштаб);
 ClearVariable(РазрывыСтраниц);
 ClearVariable(РазрывыСтраницСекция);
 ClearVariable(РазрывыСтраницЗначение);
 z=WordsCount(СекцииКонтрольРазрывов,' ');
 for j=1..z do
   ss=ВыделитьСлово(j,СекцииКонтрольРазрывов,' ');
   if FindObject(ss,сц):
      k=k+1;
      РазрывыСтраниц        [k]=AsInteger(Сц.Row(1, RowTop,''));
      РазрывыСтраницЗначение[k]=AsLogical(Сц.Row(1, RowNewPage,''));
      РазрывыСтраницСекция  [k]=ss;
   fi;
 od;
 z=k;
 h0=РазрывыСтраниц[1];
 for j=2..z-1 do
   h1=РазрывыСтраниц[j]  -h0;
   h2=РазрывыСтраниц[j+1]-h0;
   if h1<ph and h2>ph: -- надо рвать
      if FindObject(РазрывыСтраницСекция[j],сц): Сц.Row(1, RowNewPage,true); fi;
      if FindObject(РазрывыСтраницСекция[j+1],сц): Сц.Row(1, RowNewPage,false); fi;
      h0=РазрывыСтраниц[j];
    | true:
      if FindObject(РазрывыСтраницСекция[j],сц): Сц.Row(1, RowNewPage,false); fi;
      if FindObject(РазрывыСтраницСекция[j+1],сц): Сц.Row(1, RowNewPage,false); fi;
      while h1>ph do
       h0=h0+ph;
       h1=h1-ph;
      od;
   fi;
   j=j+1;
 od;

end;
func GetCFG_Current(InINI:l):s;
var res:s;
 if InINI:
    res=Раб.План.GetPlanVar('INI');
    if res<>'':
      if substr(res,length(res),1)<>'\':res=res+'\';fi;
    fi;
  | true:
    res=Раб.План.ВзятьCACHEПлана+'\';
 fi;
  res=res+Раб.НФА.B01.BlnName+'_Current.CFG';
--  res=res+GetActiveBlankName+'_Current.CFG'; -- GetActiveBlankName не срабатывает при переоткрытии бланка
 ^res;
end;

func SaveCFG_Current(InINI:l;all:l):s;-- пишет только масштаб и поля
var res,txt:s;
res=GetCFG_Current(InINI);
--#КолКопий       с       #СтрНач по      #СтрКон
txt='[Print]'+chr(13)+'Orientation='+if(книжная,'0','1')+chr(13)+'PageMargins="'+str(ЛП*10)+','+str(ПП*10)+','+str(ВП*10)+','+str(НП*10)+'"';
if all:
  if (СтрНач=1 and СтрКон=0) or (СтрНач=0 and СтрКон=0):
     txt=txt+chr(13)+'OnlyPages=0';
   | true:
     txt=txt+chr(13)+'OnlyPages=1';
     txt=txt+chr(13)+'PageFrom='+str(max(1,СтрНач));
     txt=txt+chr(13)+'PageTo='+str(max(0,СтрКон));
  fi;
  txt=txt+chr(13)+'CopyNumbers='+str(max(1,КолКопий));
fi;
--SkipFirstPage=0

txt=txt+chr(13)+'PrintScale='+str(масштаб);

try
 if ExistFile(res):DeleteFile(res);fi;
except
 res='Ошибка удаления файла:^M'+res;
end;
if pos('Ошибка',res)=1:^res;fi;

try
 CreateFile(res);
except
 res='Ошибка создания файла:^M'+res;
end;
if pos('Ошибка',res)=1:^res;fi;

try
 Append(res,txt);
except
 res='Ошибка записи в файл:^M'+res;
end;
^res;
end;

func ReadCFG_File(aCfg:s):s;--
var res,txt:s;
  txt=Раб.настр_печать.ReadCfgFile_to_KeyVal(aCfg);
  if txt<>'':^txt;fi;
  txt=Раб.настр_печать.GetVal('[Print]');
  if txt=' ':^"Файл '"+aCfg+"' не является настройкой печати";fi;
  txt=Раб.настр_печать.GetVal('Orientation');
  if txt<>' ':книжная=txt='0';fi;
  txt=Раб.настр_печать.GetVal('PageMargins');
  if txt<>' ':
     ЛП=int(trunc(ExtractWord(1,txt,'",'),-1)/10);
     ПП=int(trunc(ExtractWord(2,txt,'",'),-1)/10);
     ВП=int(trunc(ExtractWord(3,txt,'",'),-1)/10);
     НП=int(trunc(ExtractWord(4,txt,'",'),-1)/10);
  fi;
  txt=Раб.настр_печать.GetVal('OnlyPages');
  if txt='0':СтрНач=1;СтрКон=0;
   | true:
     txt=Раб.настр_печать.GetVal('PageFrom');
     if txt<>' ': СтрНач=max(1,int(txt)); fi;
     txt=Раб.настр_печать.GetVal('PageTo');
     if txt<>' ': СтрКон=max(0,int(txt)); fi;
  fi;
  txt=Раб.настр_печать.GetVal('CopyNumbers');
  if txt<>' ': КолКопий=max(1,int(txt)); fi;

  txt=Раб.настр_печать.GetVal('PrintScale');
  if txt<>' ': масштаб=max(1,int(txt)); fi;
  ^'';
end;

func ReadCFG_Current(InINI:l):s;--
var res,txt,aCfg:s;
  ^ReadCFG_File(GetCFG_Current(InINI));


-- --Верхний колонтитул
-- tmp=GetVal("HeaderStr");
-- if tmp<>" ":UC=if(tmp='""","","""',0,52); else Flag=False; fi;

-- --Нижний колонтитул
-- tmp=GetVal("FooterStr");
-- if tmp<>" ":DC=if(tmp='""","","""',0,52); else Flag=False; fi;

end;

func ВысотаЛиста:i;
    if Книжная:^(2970-ЛП*10-ПП*10);-- книжная
     | true   :^(2100-ВП*10-НП*10);-- альбомная
    fi;
end;


var DEBCRE[]:s;
var DEBCRESUM[]:n;
proc ClearDebCre;
 ClearVariable(DEBCRE);
 ClearVariable(DEBCRESUM);
end;
var ХАРОС_НАИМЕН_ПР    :s;
var ХАРОС_ОСН          :s;
var ХАРОС_ПРИСТР1      :s;
var ХАРОС_ПРИСТР2      :s;
var ХАРОС_ПРИСТР3      :s;
var ХАРОС_ПРИСТР4      :s;
var ХАРОС_НАИМЕН_ОБ    :s;
var ХАРОС_НАИМЕН_ДРАГ  :s;
var ХАРОС_ЕДИЗМ_ДРАГ   :s;
var ХАРОС_ОКЕИ_ДРАГ    :s;
var ХАРОС_КОЛИЧ        :n;
var ХАРОС_ДРАГМЕТ00    :n;
var ХАРОС_ДРАГМЕТ01    :n;
var ХАРОС_ДРАГМЕТ02    :n;
var ХАРОС_ДРАГМЕТ03    :n;
var ХАРОС_ДРАГМЕТ04    :n;
var ХАРОС_ДРАГМЕТ05    :n;
var ХАРОС_ДРАГМЕТ06    :n;
var ХАРОС_ДРАГМЕТ07    :n;
var ХАРОС_ДРАГМЕТ08    :n;

proc clear_инвк_ХАРОС;
 ClearVariable(ХАРОС_НАИМЕН_ПР  );
 ClearVariable(ХАРОС_ОСН        );
 ClearVariable(ХАРОС_ПРИСТР1    );
 ClearVariable(ХАРОС_ПРИСТР2    );
 ClearVariable(ХАРОС_ПРИСТР3    );
 ClearVariable(ХАРОС_ПРИСТР4    );
 ClearVariable(ХАРОС_НАИМЕН_ОБ  );
 ClearVariable(ХАРОС_НАИМЕН_ДРАГ);
 ClearVariable(ХАРОС_ЕДИЗМ_ДРАГ );
 ClearVariable(ХАРОС_ОКЕИ_ДРАГ  );
 ClearVariable(ХАРОС_КОЛИЧ      );
 ClearVariable(ХАРОС_ДРАГМЕТ00  );
 ClearVariable(ХАРОС_ДРАГМЕТ01  );
 ClearVariable(ХАРОС_ДРАГМЕТ02  );
 ClearVariable(ХАРОС_ДРАГМЕТ03  );
 ClearVariable(ХАРОС_ДРАГМЕТ04  );
 ClearVariable(ХАРОС_ДРАГМЕТ05  );
 ClearVariable(ХАРОС_ДРАГМЕТ06  );
 ClearVariable(ХАРОС_ДРАГМЕТ07  );
 ClearVariable(ХАРОС_ДРАГМЕТ08  );
end;
cb_БезУЧН :Object;   flgБезУЧН :Logical;
cb_УчтЗАБ :Object;   flgУчтЗАБ :Logical;
var УчЗаб :Logical=flgУчтЗАБ;


Func ВидОбъектаЦ(СЧ:s):i;
  if match(СЧ,'*.???.?.???.??.???'):^int(SubStr(ExtractWord(WordsCount(СЧ,'.')-1,СЧ,'.'),1,1));
   | true:^0;
  fi;
end;
Func ВидОбъектаИмя(ii:i):s;
  if ii>29:^'иное движимое';
   | ii>19:^'особо ценное движимое';
   | ii>9:^'недвижимое';
   | true:^'неопределен';
  fi;
end;
Func МетодНачАм(СтоимОС:n;ангр:s):s;
  if СтоимОС>40000:^'линейно';
   | СтоимОС>3000:^'100%';
   | ангр='37' or ангр='20' or ангр='30' or substr(ангр,1,1)='1':^'100%';
   | true:^'нет';
  fi;
end;
Func ВыборВалюты:s;
 var rec:record;
   rec=OpenCardFile('РПО_ОКВ');
   if rec=nil:^'';fi;
   ^GetCardFields('РПО_ОКВ',rec,'КОД')+' |'+GetCardFields('РПО_ОКВ',rec,'ИМЯ')+' |'+GetCardFields('РПО_ОКВ',rec,'НАИМЕНОВАНИЕ');
end;

Proc ВыбратьВалюту;
var ss:s;
  ss=ВыборВалюты;
  if ss='':exit;fi;
  ВАЛКУРС=int(trim(ExtractWord(1,ss,'|')));
  Вал=(trim(ExtractWord(3,ss,'|')));
end;

var Вид_объекта_ангр:s;
var Вид_объекта:s=ВидОбъектаИмя(int(Вид_объекта_ангр));




var Кн1            :String="...";
--var Доля100П       :Numeric=SumOfArray(состОС[].Доля);
--var СтВсего        :Numeric=SumOfArray(состОС[].ПокВсего);

var НЕ_ВКЛ_КОМИССИЯ_2:l=not ВКЛ_КОМИССИЯ_2;
var Комиссия_max:i=if(ВКЛ_КОМИССИЯ_2,Комиссия_2,0);
--var Комиссия_1:i=if(ВКЛ_КОМИССИЯ_2,0,Комиссия);
var ДолЧленКом_2_[]:s=Комиссия_2[$].ДолЧленКом_2;
var ФИОЧленКом_2_[]:s=Комиссия_2[$].ФИОЧленКом_2;
--var ДолЧленКом_[]:s=Комиссия[$].ДолЧленКом;
--var ФИОЧленКом_[]:s=Комиссия[$].ФИОЧленКом;

var recCurrent:record;
var NewREC         :Logical=(CurrentState=crdusInserted);
var NN []          :String=Str($);
var Buf[]          :String;
var BufI[]         :Integer;
--var МаскаСЧ        :String="(*.101.04*|*.101.05*|*.101.06*|*.101.09*)&(???.????.???????.???.?.101.??.?10|ЗАБ.??.101.??)|???.????.???????.???.?.102.01.?20|???.??.??.??.??.??.????.?.103.0?.?30";
var МаскаСЧ        :String="(*.101.??*|*.102.??*|*.103.??*|*.104.??*|*.105.??*)";
var 2БланкИмя0       :String2;
var 2КлассФормыДок0  :String2;
var 2КодФормыДок0    :String2;
func repqСчетУНФА:s;
var ln:i;
 if pos('???',СчетУНФА)<1:^СчетУНФА;fi;
 if length(СчетУНФА)>32:
   ln=length(СчетУНФА);
   if match(СчетУНФА,'*.?.101.??.???'):^substr(СчетУНФА,1,ln-3)+'310';
    | match(СчетУНФА,'*.?.102.??.???'):^substr(СчетУНФА,1,ln-3)+'320';
    | match(СчетУНФА,'*.?.105.??.???'):^substr(СчетУНФА,1,ln-3)+'340';
   fi;
 fi;
 ^СчетУНФА;
end;
var СчетУНФА_      :String=repqСчетУНФА2;
--
NewRECbln          :String;
var ВниманиеСТР    :String;
var First          :Logical;
ВниманиеНапоминать :Logical;
--КнРасчет           :Object;
--
var УслДЕБ[]       :String;
var УслКРЕ[]       :String;
var УслАНА[]       :String;
var НФА_ИНВ_COD[]  :String;
var НФА_ИНВ_СУМ[]  :Numeric;
var НФА_ИНВ_КОЛ[]  :Numeric;
var НФА_ИНВ_ВИ[]   :Integer;
var ДОПАНА[]       :String;
var ИНВ_MSK[]      :String;
var ИНВ_INI[]      :String;
var ИНВ_NUM[]      :Integer;


var Члены_ком[]:s=if($=1,'Члены комиссии:','');

var CountПОДПИСЬ:i=ПОДПИСЬ;--обязательная служебная переменная для доступа к подтаблице

-- поле подписи РУКучреж с авто-выравниванием при ручном проставлении возврата каретки
var РУКучреж:i=searchinarray(ПОДПИСЬ[].ПОЛЕ,'РУКУЧРЕЖ');
var РУКучреж_max:i=if(РУКучреж>0,max(Раб.СТР.CountSubTrimStr(ПОДПИСЬ[РУКучреж].ДОЛЖНОСТЬ,Раб.СТР.абзац),Раб.СТР.CountSubTrimStr(ПОДПИСЬ[РУКучреж].ФИО,Раб.СТР.абзац)),0)+1; -- служебная переменная для выравнивания
var Подпись_ДолжностьРУКучреж:s=if(РУКучреж>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[РУКучреж].ДОЛЖНОСТЬ),РУКучреж_max),'');
var Подпись_ДатаРУКучреж     :d=if(РУКучреж>0,ПОДПИСЬ[РУКучреж].ДАТА,1.1.100);
var Подпись_ФИОРУКучреж      :s=if(РУКучреж>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[РУКучреж].ФИО),РУКучреж_max),'');

-- поле подписи РУКучреж с авто-выравниванием при ручном проставлении возврата каретки
var РУКотпр:i=searchinarray(ПОДПИСЬ[].ПОЛЕ,'РУКОТПР');
var РУКотпр_max:i=if(РУКотпр>0,max(Раб.СТР.CountSubTrimStr(ПОДПИСЬ[РУКотпр].ДОЛЖНОСТЬ,Раб.СТР.абзац),Раб.СТР.CountSubTrimStr(ПОДПИСЬ[РУКотпр].ФИО,Раб.СТР.абзац)),0)+1; -- служебная переменная для выравнивания
var Подпись_ДолжностьРУКотпр:s=if(РУКотпр>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[РУКотпр].ДОЛЖНОСТЬ),РУКотпр_max),'');
var Подпись_ДатаРУКотпр     :d=if(РУКотпр>0,ПОДПИСЬ[РУКотпр].ДАТА,1.1.100);
var Подпись_ФИОРУКотпр      :s=if(РУКотпр>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[РУКотпр].ФИО),РУКотпр_max),'');

var ОбСдал:i=searchinarray(ПОДПИСЬ[].ПОЛЕ,'ОБСДАЛ');-- служебная переменная для доступа к подтаблице
var ОбСдал_max:i=if(ОбСдал>0,max(Раб.СТР.CountSubTrimStr(ПОДПИСЬ[ОбСдал].ДОЛЖНОСТЬ,Раб.СТР.абзац),Раб.СТР.CountSubTrimStr(ПОДПИСЬ[ОбСдал].ФИО,Раб.СТР.абзац)),0)+1; -- служебная переменная для выравнивания
var Подпись_ДолжностьОбСдал:s=if(ОбСдал>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[ОбСдал].ДОЛЖНОСТЬ),ОбСдал_max),''); -- поле прописывается в TPL с обязательным обработчиком Подпись_OnValidateS
var Подпись_ФИООбСдал:s=if(ОбСдал>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[ОбСдал].ФИО),ОбСдал_max),''); -- поле прописывается в TPL с обязательным обработчиком Подпись_OnValidateS

var ОбПринял:i=searchinarray(ПОДПИСЬ[].ПОЛЕ,'ОБПРИНЯЛ');-- служебная переменная для доступа к подтаблице
var ОбПринял_max:i=if(ОбПринял>0,max(Раб.СТР.CountSubTrimStr(ПОДПИСЬ[ОбПринял].ДОЛЖНОСТЬ,Раб.СТР.абзац),Раб.СТР.CountSubTrimStr(ПОДПИСЬ[ОбПринял].ФИО,Раб.СТР.абзац)),0)+1; -- служебная переменная для выравнивания
var Подпись_ДолжностьОбПринял:s=if(ОбПринял>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[ОбПринял].ДОЛЖНОСТЬ),ОбПринял_max),''); -- поле прописывается в TPL с обязательным обработчиком Подпись_OnValidateS
var Подпись_ФИООбПринял:s=if(ОбПринял>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[ОбПринял].ФИО),ОбПринял_max),''); -- поле прописывается в TPL с обязательным обработчиком Подпись_OnValidateS

var ГлБух:i=searchinarray(ПОДПИСЬ[].ПОЛЕ,'ГЛБУХ');-- служебная переменная для доступа к подтаблице
var ГлБух_max:i=if(ГлБух>0,max(Раб.СТР.CountSubTrimStr(ПОДПИСЬ[ГлБух].ДОЛЖНОСТЬ,Раб.СТР.абзац),Раб.СТР.CountSubTrimStr(ПОДПИСЬ[ГлБух].ФИО,Раб.СТР.абзац)),0)+1; -- служебная переменная для выравнивания
var Подпись_ДолжностьГлБух:s=if(ГлБух>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[ГлБух].ДОЛЖНОСТЬ),ГлБух_max),''); -- поле прописывается в TPL с обязательным обработчиком Подпись_OnValidateS
var Подпись_ФИОГлБух:s=if(ГлБух>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[ГлБух].ФИО),ГлБух_max),''); -- поле прописывается в TPL с обязательным обработчиком Подпись_OnValidateS


var Исп:i=searchinarray(ПОДПИСЬ[].ПОЛЕ,'ИСП');
var Исп_max:i=if(Исп>0,max(Раб.СТР.CountSubTrimStr(ПОДПИСЬ[Исп].ДОЛЖНОСТЬ,Раб.СТР.абзац),Раб.СТР.CountSubTrimStr(ПОДПИСЬ[Исп].ФИО,Раб.СТР.абзац)),0)+1; -- служебная переменная для выравнивания
var Подпись_ДолжностьИсп:s=if(Исп>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[Исп].ДОЛЖНОСТЬ),Исп_max),'');
var Подпись_ДатаИсп     :d=if(Исп>0,ПОДПИСЬ[Исп].ДАТА,1.1.100);
var Подпись_ФИОИсп      :s=if(Исп>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[Исп].ФИО),Исп_max),'');

var ГлБухОтпр:i=searchinarray(ПОДПИСЬ[].ПОЛЕ,'ГЛБУХОТПР');-- служебная переменная для доступа к подтаблице
var ГлБухОтпр_max:i=if(ГлБухОтпр>0,max(Раб.СТР.CountSubTrimStr(ПОДПИСЬ[ГлБухОтпр].ДОЛЖНОСТЬ,Раб.СТР.абзац),Раб.СТР.CountSubTrimStr(ПОДПИСЬ[ГлБухОтпр].ФИО,Раб.СТР.абзац)),0)+1; -- служебная переменная для выравнивания
var Подпись_ДолжностьГлБухОтпр:s=if(ГлБухОтпр>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[ГлБухОтпр].ДОЛЖНОСТЬ),ГлБухОтпр_max),''); -- поле прописывается в TPL с обязательным обработчиком Подпись_OnValidateS
var Подпись_ФИОГлБухОтпр:s=if(ГлБухОтпр>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[ГлБухОтпр].ФИО),ГлБухОтпр_max),''); -- поле прописывается в TPL с обязательным обработчиком Подпись_OnValidateS

var ИспОтпр:i=searchinarray(ПОДПИСЬ[].ПОЛЕ,'ИСПОТПР');
var ИспОтпр_max:i=if(ИспОтпр>0,max(Раб.СТР.CountSubTrimStr(ПОДПИСЬ[ИспОтпр].ДОЛЖНОСТЬ,Раб.СТР.абзац),Раб.СТР.CountSubTrimStr(ПОДПИСЬ[ИспОтпр].ФИО,Раб.СТР.абзац)),0)+1; -- служебная переменная для выравнивания
var Подпись_ДолжностьИспОтпр:s=if(ИспОтпр>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[ИспОтпр].ДОЛЖНОСТЬ),ИспОтпр_max),'');
var Подпись_ДатаИспОтпр     :d=if(ИспОтпр>0,ПОДПИСЬ[ИспОтпр].ДАТА,1.1.100);
var Подпись_ФИОИспОтпр      :s=if(ИспОтпр>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[ИспОтпр].ФИО),ИспОтпр_max),'');

var Отправитель:i=searchinarray(РЕКВИЗИТ[].ПОЛЕ,'ОТПРАВИТЕЛЬ');
var РЕКВИЗИТ_ИмяОтправитель  :s=if(Отправитель>0,РЕКВИЗИТ[Отправитель].ИМЯ,'');
var РЕКВИЗИТ_ОКПООтправитель :s=if(Отправитель>0,РЕКВИЗИТ[Отправитель].ОКПО,'');
var РЕКВИЗИТ_КППОтправитель  :s=if(Отправитель>0,РЕКВИЗИТ[Отправитель].КПП,'');
var РЕКВИЗИТ_ИННОтправитель  :s=if(Отправитель>0,РЕКВИЗИТ[Отправитель].ИНН,'');

var ОтправительСтПодр:i=searchinarray(РЕКВИЗИТ[].ПОЛЕ,'ОТПРАВИТЕЛЬСТПОДР');
var РЕКВИЗИТ_ИмяОтправительСтПодр  :s=if(ОтправительСтПодр>0,РЕКВИЗИТ[ОтправительСтПодр].ИМЯ,'');
var РЕКВИЗИТ_КППОтправительСтПодр  :s=if(ОтправительСтПодр>0,РЕКВИЗИТ[ОтправительСтПодр].КПП,'');

var Получатель:i=searchinarray(РЕКВИЗИТ[].ПОЛЕ,'ПОЛУЧАТЕЛЬ');
var РЕКВИЗИТ_ИмяПолучатель  :s=if(Получатель>0,РЕКВИЗИТ[Получатель].ИМЯ,'');
var РЕКВИЗИТ_ОКПОПолучатель :s=if(Получатель>0,РЕКВИЗИТ[Получатель].ОКПО,'');
var РЕКВИЗИТ_КПППолучатель  :s=if(Получатель>0,РЕКВИЗИТ[Получатель].КПП,'');
var РЕКВИЗИТ_ИННПолучатель  :s=if(Получатель>0,РЕКВИЗИТ[Получатель].ИНН,'');
var ПолучательСтПодр:i=searchinarray(РЕКВИЗИТ[].ПОЛЕ,'ПОЛУЧАТЕЛЬСТПОДР');
var РЕКВИЗИТ_ИмяПолучательСтПодр  :s=if(ПолучательСтПодр>0,РЕКВИЗИТ[ПолучательСтПодр].ИМЯ,'');
var РЕКВИЗИТ_КПППолучательСтПодр  :s=if(ПолучательСтПодр>0,РЕКВИЗИТ[ПолучательСтПодр].КПП,'');



Func Подпись_OnValidateS(Field:S; Iter:I; Value:S): L;
 ^Раб.ВСПОМ.ПОДПИСИ_СЕГОДНЯ.Подпись_SaveS(Field,Раб.СТР.WriteS_chr13(Value));
end;

Func Подпись_OnValidateD(Field:S; Iter:I; Value:d): L;
 ^Раб.ВСПОМ.ПОДПИСИ_СЕГОДНЯ.Подпись_SaveD(Field,Value);
end;

Func Подпись_OnValidateI(Field:S; Iter:I; Value:I): L;
 ^Раб.ВСПОМ.ПОДПИСИ_СЕГОДНЯ.Подпись_SaveI(Field,Value);
end;

Func РЕКВИЗИТ_OnValidateS(Field:S; Iter:I; Value:S): L;
 ^Раб.ВСПОМ.ПОДПИСИ_СЕГОДНЯ.РЕКВИЗИТ_SaveS(Field,Value);
end;

Func РЕКВИЗИТ_OnValidateD(Field:S; Iter:I; Value:d): L;
 ^Раб.ВСПОМ.ПОДПИСИ_СЕГОДНЯ.РЕКВИЗИТ_SaveD(Field,Value);
end;

Func РЕКВИЗИТ_OnValidateI(Field:S; Iter:I; Value:I): L;
 ^Раб.ВСПОМ.ПОДПИСИ_СЕГОДНЯ.РЕКВИЗИТ_SaveI(Field,Value);
end;

Func РЕКВИЗИТ_OnValidateN(Field:S; Iter:I; Value:N): L;
 ^Раб.ВСПОМ.ПОДПИСИ_СЕГОДНЯ.РЕКВИЗИТ_SaveN(Field,Value);
end;

Func ВзятьКонтрагентаR(ANA:String; Наше:Logical) :Record;
var wa,rs :i;
var res :Record;
 if Name_A(ANA)<>' ':
    if SignCardFile(ANA)="КОНТРАГЕНТ":res=SignToRecord(ANA, False);fi;
 fi;
 if res=nil and Наше:
    wa=OpenWorkArea("КОНТРАГЕНТ", "РПО_УМОЛЧАНИЕ", "НАШЕ");
    rs=records(wa);
    if rs>0:res=GetRecordKey(wa, rs);fi;
    CloseWorkArea(wa);
 fi;
 ^res;
end;



Func Подпись_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String): String;
var REC :Record;
var  Field, tmp ,Value:String;
 Template.HideEditor(False);
 Field=asString(Template.Field); tmp="";
 Try tmp=GetVariableS(Field); Except ^Cur; end;
 REC=OpenCardFile("СОТРУДНИКИ", "", SignToRecord(tmp), crdRecordOnly);
 if REC=NIL: ^Cur; fi;
 Field=Раб.ВСПОМ.ПОДПИСИ_СЕГОДНЯ.Get_ПОЛЕ_ПОДПИСЬ(Field);
 Value=GetCardFieldS("СОТРУДНИКИ", REC, "ДОЛЖНОСТЬ.ДОЛЖ");                                           
 Подпись_OnValidateS('Подпись_Должность'+Field,1,Раб.СТР.WriteS_chr13(Value));
 Value=GetCardFieldS("СОТРУДНИКИ", REC, "ФАМИЛИЯ")+" "+GetCardFieldS("СОТРУДНИКИ", REC, "ИНИЦИАЛЫ"); 
 Подпись_OnValidateS('Подпись_ФИО'+Field      ,1,Раб.СТР.WriteS_chr13(Value));
-- Подпись_ТАБ=GetCardFieldS("СОТРУДНИКИ", REC, "ПРИЗНАК");
end;
--неявное преобразование типов GetFieldsVars

--Real to string
--Integer to string
--Boolean to string (true="[X]" false=""-пустая строка)
--Record to integer
--Date to string
--String to Date
--String to integer (2'147'483'647-максимальное целое)
--String to numeric (18 цифр, не считая точку-разделитель дробной части)
Proc ЗаписатьРеквизит(Ном_РЕКВИЗИТ:i;REC:record;FieldToField:s;Field:s);
if FieldToField='':FieldToField='РЕКВИЗИТ_ИМЯ=КОРИМЯ|РЕКВИЗИТ_ИНН=ИНН|РЕКВИЗИТ_ОКПО=ОКПО|РЕКВИЗИТ_КПП=КПП|РЕКВИЗИТ_КБП=РПО_КБП';fi;
if Field='':Field='ИМЯ|ИНН|ОКПО|КПП|КБП|UKEY';fi;
  Раб.ВСПОМ.ПОДПИСИ_СЕГОДНЯ.СчитатьРеквизит(0,0,REC,FieldToField);
  Раб.ВСПОМ.ПОДПИСИ_СЕГОДНЯ.ЗаписатьРеквизит(Ном_РЕКВИЗИТ,Field);
end;

Func Реквизит_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String): String;
var REC:record;
var Field:s;
Field=AsString(Шаблон.Поле);
if match(Field,'РЕКВИЗИТ_*СтПодр'):
   Field=Trim(ВыборПризнака('П.*'));
   if Field='':Шаблон.hideeditor(false);^cur;fi;
   ^Name_A(Field);
fi;
Шаблон.hideeditor(false);

if match(Field,'РЕКВИЗИТ_*Отправитель'):
   REC=ВзятьКонтрагентаR('',true);
fi;
if REC=nil:
   REC=OpenCardFile("Контрагент", "GroupAttr=0", NIL, crdRecordOnly);
fi;
if REC=nil:^cur;fi;
ЗаписатьРеквизит(Раб.ВСПОМ.ПОДПИСИ_СЕГОДНЯ.Get_Ном_РЕКВИЗИТ(Field),REC,'','');
  ^cur  ;
end;



2-- Общие процедуры и функции
Proc Очистить;
 ClearVariable(УслДЕБ); ClearVariable(НФА_ИНВ_COD); ClearVariable(ИНВ_MSK); ClearVariable(НФА_ИНВ_ВИ);
 ClearVariable(УслКРЕ); ClearVariable(НФА_ИНВ_СУМ); ClearVariable(ИНВ_INI);
 ClearVariable(УслАНА); ClearVariable(НФА_ИНВ_КОЛ); ClearVariable(ИНВ_NUM);
 ClearVariable(NN); ClearVariable(Buf); ClearVariable(BufI); ClearVariable(ДОПАНА);
end;

Proc НачальнаяИтерация;
--var qq :Integer;
-- if стрЦель   <1: Try qq=InsertFrame(стрЦель   , 1); Except end; fi;
---- if ДоляСобств<1: Try qq=InsertFrame(ДоляСобств, 1); Except end; fi;
-- if состОС    <1: Try qq=InsertFrame(состОС    , 1); Except end; fi;
-- if стрЗАК    <1: Try qq=InsertFrame(стрЗАК    , 1); Except end; fi;
-- if стрТехДок <1: Try qq=InsertFrame(стрТехДок , 1); Except end; fi;
end;


Proc ВыборКомиссии;
var REC :Record;
var RO, OA, Num, i  :Integer;
 REC=OpenCardFile("Комиссия", "", NIL, crdRecordOnly);
 if REC<>NIL:
   ClearVariable(Комиссия);
   RO=OpenWorkArea("Комиссия", "", "UKey="+RecordToString(REC));
   Try
     if Records(RO)=1:
--       GetFieldsVars(RO, 1, '','ДолПредКом=ПРЕДСД|ФИОПредКом=ПРЕДСФ');
       ДолПредКом=GetFieldS(RO, 1, "ПРЕДСД");
       ФИОПредКом=GetFieldS(RO, 1, "ПРЕДСФ");
       OA=OpenArray(RO, 1, "ЧЛЕНКОМ","");
       Num=Records(OA);
       if Num>0:
         Try
           for i=1..Num do
             Try InsertFrame(Комиссия, i); Except end;
             Комиссия[i].ДолЧленКом=GetFieldS(OA, i, "ЧЛЕНД");
             Комиссия[i].ФИОЧленКом=GetFieldS(OA, i, "ЧЛЕНФ");
           od;
         Finally
           CloseWorkArea(OA);
         end;
       fi;
     fi;
   Finally
     CloseWorkArea(RO);
   end;
 fi;
end;
Proc ВыборКомиссии_2;
var REC :Record;
var RO, OA, Num, i  :Integer;
 REC=OpenCardFile("Комиссия", "", NIL, crdRecordOnly);
 if REC<>NIL:
   ClearVariable(Комиссия_2);
   RO=OpenWorkArea("Комиссия", "", "UKey="+RecordToString(REC));
   Try
     if Records(RO)=1:
       ДолПредКом_2=GetFieldS(RO, 1, "ПРЕДСД");
       ФИОПредКом_2=GetFieldS(RO, 1, "ПРЕДСФ");
       OA=OpenArray(RO, 1, "ЧЛЕНКОМ","");
       Num=Records(OA);
       if Num>0:
         Try
           for i=1..Num do
             Try InsertFrame(Комиссия_2, i); Except end;
             Комиссия_2[i].ДолЧленКом_2=GetFieldS(OA, i, "ЧЛЕНД");
             Комиссия_2[i].ФИОЧленКом_2=GetFieldS(OA, i, "ЧЛЕНФ");
           od;
         Finally
           CloseWorkArea(OA);
         end;
       fi;
     fi;
   Finally
     CloseWorkArea(RO);
   end;
 fi;
end;

Proc СчитатьСрок(Field:String; Iter:Integer);
var Val :String;
var dd1 ,dd2 :Date;
 ClearVariable(РАБ.НФА.FUNC_LIB.TempDAT); Val=""; dd1=1.1.100; dd1=dd2;
 dd1=состОС[Iter].ДатаВвЭксп;
 if dd1=1.1.100: dd1=ToDay; fi;
 if Field="ФактСрокЭк" : Val=состОС[Iter].ФактСрокЭк;
 |  Field="СрокНовИсп" : Val=состОС[Iter].СрокНовИсп;
 fi;
 dd2=РАБ.НФА.FUNC_LIB.ВзятьКонечнуюДатуИнтервала(Val, dd1);
 if dd2=1.1.100: dd2=ToDay; fi;
 РАБ.НФА.FUNC_LIB.TempSTR[1]=Val;
 РАБ.НФА.FUNC_LIB.TempDAT[1]=dd1;
 РАБ.НФА.FUNC_LIB.TempDAT[2]=dd2;
end;

Proc УстановитьСрок(Field:String; Iter:Integer; Val:String);
 if Field="ФактСрокЭк" : состОС[Iter].ФактСрокЭк=Val;
 |  Field="СрокНовИсп" : состОС[Iter].СрокНовИсп=Val;
 fi;
end;

Proc Сроки(Field:String; Iter:Integer);
 СчитатьСрок(Field, Iter);
 РАБ.НФА.FUNC_LIB.TempLOG[1]=False;
 РАБ.НФА.FUNC_LIB.TempINT[1]=4; -- 1 - 'День'; 2 - 'Месяц'; 3 - 'Год'; 4 - 'Год + Месяц'; 5 - 'Год + Месяц + День'
 РАБ.НФА.FUNC_LIB.ИмяБланка=GetActiveBlankName;
 OpenBlank("РАБ.ВСПОМ.ПРОМЕЖУТОКВРЕМЕНИ", True);
 УстановитьСрок(Field, Iter, РАБ.НФА.FUNC_LIB.TempSTR[1]);
 ClearVariable(РАБ.НФА.FUNC_LIB.TempSTR); ClearVariable(РАБ.НФА.FUNC_LIB.ИмяБланка);
end;

Func МаскаГРОС(ss:String) :String;
 if ss='101.01': ^'ГРОС.13*';
 |  ss='101.02': ^'ГРОС.11*';
 |  ss='101.03': ^'ГРОС.12*';
 |  ss='101.04': ^'ГРОС.14*';
 |  ss='101.05': ^'ГРОС.15*';
 |  ss='101.06': ^'ГРОС.16*|ГРОС.17*|ГРОС.18*|ГРОС.19*';
 |  ss='101.07': ^'';
-- |  ss='101.08': ^'';
 |  ss='101.08': ^'ГРОС.19*';
 |  ss='102.00': ^'ГРОС.2?*';
 fi;
end;

Func ПризнакКонстанта(МаскаДляВыбора:String) :String;
var nn :Integer;
var mask, tmp: String;
 nn=0;
 Try for Sign mask=МаскаДляВыбора do tmp=mask; nn=nn+1; if nn=2: Break; fi; od; Except end;
 if nn=1: ^tmp;  -- признак=константа
 |  nn=0: ^" ";  -- признаков нет вообще
 |  True: ^"" ;  -- признаков больше одного
 fi;
end;

Func ВзятьСрокАмортГруппы(НомерГруппы:Integer):String;
 if НомерГруппы= 1: ^"2 года";
 |  НомерГруппы= 2: ^"3 года";
 |  НомерГруппы= 3: ^"5 лет";
 |  НомерГруппы= 4: ^"7 лет";
 |  НомерГруппы= 5: ^"10 лет";
 |  НомерГруппы= 6: ^"15 лет";
 |  НомерГруппы= 7: ^"20 лет";
 |  НомерГруппы= 8: ^"25 лет";
 |  НомерГруппы= 9: ^"30 лет";
 |  НомерГруппы=10: ^"100 лет или более";
 |  True: ^"";
 fi;
end;

Proc ИнициализироватьУсловия(дляПРИХОДА:Logical);
 var t:i;
 ClearVariable(УслДЕБ); ClearVariable(УслКРЕ); ClearVariable(УслАНА);

 if дляПРИХОДА:
   t=t+1;
   УслДЕБ[t] = "*.???.?.101.??.310";
   УслКРЕ[t] = "((*.???.?.???.??.???&(*.304.04.310|*.106.??.310))|((*.????.?.???.??.???|?.*.???.?.???.??.???)&(*.401.1?.17?|*.401.1?.180)))";
   УслАНА[t] = "";
   t=t+1;
   УслДЕБ[t] = "(*.???.?.304.04.310|(*.????.?.???.??.???&(*.401.1?.17?|*.401.1?.180)))";
   УслКРЕ[t] = "*.???.?.104.??.410";
   УслАНА[t] = "";
   t=t+1;
   УслДЕБ[t] = "*.???.?.102.??.320";
   УслКРЕ[t] = "((*.???.?.???.??.???&(*.304.04.320|*.106.??.320))|(*.????.?.???.??.???&(*.401.1?.17?|*.401.1?.180)))";
   УслАНА[t] = "";
   t=t+1;
   УслДЕБ[t] = "(*.???.?.304.04.320|(*.????.?.???.??.???&(*.401.1?.17?|*.401.1?.180)))";
   УслКРЕ[t] = "*.???.?.104.??.420";
   УслАНА[t] = "";
   t=t+1;
   УслДЕБ[t] = "*.???.?.105.??.340";
   УслКРЕ[t] = "((*.???.?.???.??.???&(*.304.04.340|*.106.??.340))|(*.????.?.???.??.???&(*.401.1?.17?|*.401.1?.180)))";
   УслАНА[t] = "";
   t=t+1;
   УслДЕБ[t] = "*.???.?.103.??.330";
   УслКРЕ[t] = "((*.???.?.???.??.???&(*.304.04.330|*.106.??.330))|(*.????.?.???.??.???&(*.401.1?.17?|*.401.1?.180)))";
   УслАНА[t] = "";
--   t=t+1;
--   УслДЕБ[t] = "???.????.??????*.???.?.106.?1.310";
--   УслКРЕ[t] = "(???.????.??????*.???.?.304.04.310|(???.?.??.?????.??.????.?.???.??.???&(*.?.401.1?.17?|*.?.401.1?.180)))";
--   УслАНА[t] = "";

   t=t+1;
   УслДЕБ[t] = "ЗАБ.??.10?.??";
   УслКРЕ[t] = "ЗАБАЛАНС";
   УслАНА[t] = "";

 else

   t=t+1;
   УслДЕБ[t] = "(*.???.?.???.??.???&(*.104.??.410|*.304.04.310|*.401.2?.24?|*.401.2?.25?))";
   УслКРЕ[t] = "*.???.?.101.??.410";
   УслАНА[t] = "";
   t=t+1;
   УслДЕБ[t] = "*.???.?.104.??.410";
   УслКРЕ[t] = "(*.???.?.???.??.???&(*.304.04.310|*.401.2?.24?|*.401.2?.25?))";
   УслАНА[t] = "";
   t=t+1;
   УслДЕБ[t] = "(*.???.?.???.??.???&(*.304.04.320|*.401.2?.24?|*.401.2?.25?))";
   УслКРЕ[t] = "*.???.?.102.??.420";
   УслАНА[t] = "";
   t=t+1;
   УслДЕБ[t] = "*.???.?.104.??.420";
   УслКРЕ[t] = "(*.???.?.???.??.???&(*.304.04.320|*.401.2?.24?|*.401.2?.25?))";
   УслАНА[t] = "";
   t=t+1;
   УслДЕБ[t] = "(*.???.?.???.??.???&(*.304.04.340|*.401.2?.24?|*.401.2?.25?))";
   УслКРЕ[t] = "*.???.?.105.3?.440";
   УслАНА[t] = "";
   t=t+1;
   УслДЕБ[t] = "(*.???.?.???.??.???&(*.304.04.330|*.401.2?.24?|*.401.2?.25?))";
   УслКРЕ[t] = "*.???.?.103.??.430";
   УслАНА[t] = "";
   t=t+1;
   УслДЕБ[t] = "(*.???.?.???.??.???&(*.304.04.310|*.401.2?.24?|*.401.2?.25?))";
   УслКРЕ[t] = "*.???.?.106.??.410";
   УслАНА[t] = "";
   t=t+1;
   УслДЕБ[t] = "(*.???.?.???.??.???&(*.304.04.320|*.401.2?.24?|*.401.2?.25?))";
   УслКРЕ[t] = "*.???.?.106.??.420";
   УслАНА[t] = "";
   t=t+1;
   УслДЕБ[t] = "(*.???.?.???.??.???&(*.304.04.330|*.401.2?.24?|*.401.2?.25?))";
   УслКРЕ[t] = "*.???.?.106.??.430";
   УслАНА[t] = "";
   t=t+1;
   УслДЕБ[t] = "ЗАБАЛАНС";
   УслКРЕ[t] = "ЗАБ.??.10?.??";
   УслАНА[t] = "";

 fi;
end;

Func TemplateSaveOK :Logical; -- проверка правильности ввода данных
 ^True;
end;

Func СохранитьИзменения :Logical;
var qq :Integer;
var OK :Logical;
 OK=False;
-- if Защита: ^True; fi;
 if TemplateSaveOK:
   OK=True;
   qq=0;
   if CurrentState=CrdusInserted:
     qq=EnqOkCancel('Необходимо сохранить сделанные изменения.'+Chr(13)+
                    'Сохранить?', mtConfirmation);
     if qq=cmOK     : EditorApply;
     |  qq=cmCancel : OK=False;
     fi;
   |  CurrentState=CrdusModified :
     qq=EnqYesNoCancel('Необходимо сохранить сделанные изменения.'+Chr(13)+
                       'Сохранить?', mtConfirmation);
     if qq=cmYes    : EditorApply;
     |  qq=cmNo     : EditorCancel;
     |  qq=cmCancel : OK=False;
     fi;
   fi;
 fi;
 ^OK;
end;

Func LastNumCard(Card:String; Field:String) :Integer;
^Раб.НФА.func_lib.NextNumInF(Card,Field,if(current<>nil,"UKEY<>"+RecordToString(current),''))-1;
end;

2-- События полей
Func Field_onEnter(Field:String; Iter:Integer) :Logical;
var nn :Integer;

 if Match(Field, 'A?'): РАБ.WSH.sendkeys('%({INSERT})');^False;--ДобавитьУдалитьСтроки(Field, Iter, True) ; ^False;
 |  Match(Field, 'D?'): РАБ.WSH.sendkeys('%({DEL})');^False;--ДобавитьУдалитьСтроки(Field, Iter, False); ^False;
 fi;
 if Field="Учреждение"  or Field="ОКПОучреж" or Field="АдресУчреж" or Field="БанкУчреж"
                         : nn=0; ClearVariable(Buf);
                           Buf[1]='"Собственные" реквизиты'; 
                           Buf[2]='Сторонние организации';
                           nn=Alternate("Выберите тип контрагента", Buf, -1);
--                           if nn<>0: ВыборКонтрагента(True , if(nn=1, True, False), False, NIL); fi;
                           ^False;
-- |  Field="Исполнитель" or Field="ОКПОИспол" or Field="АдресИспол" or Field="БанкИспол"
--                         : nn=0; ClearVariable(Buf);
--                           Buf[1]='Сторонние организации';
--                           Buf[2]='"Собственные" реквизиты';
--                           nn=Alternate("Выберите тип контрагента", Buf, -1);
--                           if nn<>0: ВыборКонтрагента(False, if(nn=2, True, False), False, NIL); fi;
--                           ^False;
 |  Field="АмортГруппа"  : nn=0; ClearVariable(Buf);
                           Buf[1]=" 1 группа - все недолговечное имущество со сроком полезного использования от 1 года до 2 лет включительно";
                           Buf[2]=" 2 группа - имущество со сроком полезного использования свыше 2 лет до 3 лет включительно";
                           Buf[3]=" 3 группа - имущество со сроком полезного использования свыше 3 лет до 5 лет включительно";
                           Buf[4]=" 4 группа - имущество со сроком полезного использования свыше 5 лет до 7 лет включительно";
                           Buf[5]=" 5 группа - имущество со сроком полезного использования свыше 7 лет до 10 лет включительно";
                           Buf[6]=" 6 группа - имущество со сроком полезного использования свыше 10 лет до 15 лет включительно";
                           Buf[7]=" 7 группа - имущество со сроком полезного использования свыше 15 лет до 20 лет включительно";
                           Buf[8]=" 8 группа - имущество со сроком полезного использования свыше 20 лет до 25 лет включительно";
                           Buf[9]=" 9 группа - имущество со сроком полезного использования свыше 25 лет до 30 лет включительно";
                          Buf[10]="10 группа - имущество со сроком полезного использования свыше 30 лет";
                           nn=Alternate("Выберите группу амортизации", Buf, -1);
                           if nn<>0: состОС[Iter].АмортГруппа=nn; fi;
                           ^False;
 |  Field="ВидДокОсн"    : nn=0; ClearVariable(Buf);
                           Buf[1]="Приказ      ";
                           Buf[2]="Распоряжение"; 
                           Buf[3]="Договор     ";
                           nn=Alternate("Выберите основание для составления акта", Buf, -1);
                           if nn<>0: ВидДокОсн=nn; fi;
                           ^False;
-- |  Field="ГодВыпуска"   : состОС[Iter].ГодВыпуска=ВыборДаты(состОС[Iter].ГодВыпуска); ^False;
 |  Field="ФактСрокЭк"   : Сроки(Field, Iter); ^False;
 |  Field="СрокНовИсп"   : Сроки(Field, Iter); ^False;
 |  Field="МетодИзноса"  : nn=0; ClearVariable(Buf);
                           Buf[1]="Линейный метод   (утвержден НК РФ)";
                           Buf[2]="Нелинейный метод (утвержден НК РФ)";
                           Buf[3]="Метод уменьшаемого остатка";
                           Buf[4]="Метод списания стоимости по сумме чисел лет срока полезного использования";
                           Buf[5]="Метод списания стоимости пропорционально объему продукции (работ)";
                           Buf[6]="100% начислено амортизации";
                           if УчЗаб:
                           Buf[7]="Не начисляется";
                           fi;
                           nn=Alternate("Выберите метод амортизации (износа)", Buf, -1);
                           if nn<>0: состОС[Iter].МетодИзноса=Buf[nn]; fi;
                           ^False;
 |  Field="ДолПредКом" or Field="ФИОПредКом"
                         : ВыборКомиссии; ^False;
 |  Field="ДолПредКом_2" or Field="ФИОПредКом_2"
                         : ВыборКомиссии_2; ^False;
-- |  Field="Кн1"          : ВыборДоверенности; ^False;
 fi;
 ^True;
end;

Proc Field_onExit(Field:String; Iter:Integer);
 if Field="Учреждение"  or Field="ОКПОучреж" or Field="АдресУчреж" or Field="БанкУчреж" :
   if Учреждение="" : ОКПОучреж=""; АдресУчреж=""; БанкУчреж=""; fi;
 |  Field="Исполнитель" or Field="ОКПОИспол" or Field="АдресИспол" or Field="БанкИспол" :
   if Исполнитель="": ОКПОИспол=""; АдресИспол=""; БанкИспол=""; fi;
 |  Field="ДолПредКом"                                                                  :
   if ДолПредКом="" : ФИОПредКом=""; ClearVariable(Комиссия); fi;
 |  Field="ФИОПредКом"                                                                  :
   if ФИОПредКом="" : ДолПредКом=""; ClearVariable(Комиссия); fi;
 fi;
end;

--Func ПО_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String): String;
--var кодПО, наимПО, tmp, name :String;
-- Template.HideEditor(False);
-- name=asString(Template.Field);
-- tmp=AnaElection("П.*"); if tmp="": ^Cur; fi;
-- кодПО=tmp; НаимПО=if(Name_A(кодПО)<>"" and Name_A(кодПО)<>" ", Name_A(кодПО), кодПО);
-- if name="ПОучреж"     :      ПОучреж=наимПО; КодПОучреж=кодПО;
-- |  name="КодПОучреж"  :      ПОучреж=наимПО; КодПОучреж=кодПО;
-- |  name="ПОиспол"     :      ПОиспол=наимПО; КодПОиспол=кодПО;
-- |  name="КодПОиспол"  :      ПОиспол=наимПО; КодПОиспол=кодПО;
-- |  name="МестоОбъекта": МестоОбъекта=наимПО;
-- fi;
-- ^"";
--end;

Func Счет_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String): String;
var tmp, name :String;
 Template.HideEditor(False);
 name=asString(Template.Field);
 if name="СчетУНФА_":
   tmp=AccountElection(МаскаСЧ); 
   if tmp="": ^Cur; fi; 
   if Match(tmp, "*.???.?.10?.??.3??")   : tmp=SubStr(tmp, 1, length(tmp)-3)+"???";
   |  Match(tmp, "ЗАБ.??.10?.??")                       : tmp=tmp;
   else tmp="";
   fi;
   СчетУНФА=tmp; 
 fi;
 ^"";
end;

Func ОКОФ_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String) :String;
var УслАН, tmp, name, Фильтр, tmp1, tmp2 :String;
var REC, rr :Record;
var RO, k, j :Integer;
 Template.HideEditor(False);
 name=asString(Template.Field);
 if КодАнаУНФА="":
   Message("Не указан код учета НФА!", mtWarning);
   Template.Field="КодАнаУНФА";
   ^Cur;
 fi;
 УслАН=МаскаГРОС(SubStr(КодАнаУНФА, 5, 6));
 if УслАН<>"":
   tmp=ПризнакКонстанта(УслАН);
   if tmp="" : tmp=AnaElection(УслАН); fi;
   if tmp="" : ^""; fi;
   if tmp<>"": tmp=SubStr(tmp, 6, 2);  fi;
 fi;
 Фильтр="ФТР_РАЗД='"+SubStr(tmp, 1, 2)+"'";
 tmp1=""; rr=NIL;
 if name="КОДОКОФ":
   tmp=SubStr(КОДОКОФ, 4, 7);
   if КОДОКОФ<>"" and Length(tmp)=7:
     RO=OpenWorkArea("РПО_ОКОФ", "", "1=0");
     Try
       for j=1 to 7 do
         tmp1=" and Match(ФТР_КОДА, '"+SubStr(tmp, 1, 7-j+1)+RepStr("?", j-1)+"')";
         tmp2=Фильтр+tmp1;
         SetFilter(RO, tmp2);
         k=Records(RO);
         if k>0: if j=1 and k=1: rr=GetRecordKey(RO, 1); tmp1=""; fi; Фильтр=Фильтр+tmp1; Break; fi;
       od;
     Finally
       CloseWorkArea(RO);
     end;
   fi;
 fi;
 REC=OpenCardFile(PlanVar("НФА")+"\Картотеки\"+"ВыборРПО_ОКОФ.bro", Фильтр, rr, crdRecordOnly);
 if REC=NIL: ^""; fi;
 k=Int(GetCardFieldS("РПО_ОКОФ", REC, "АМОРТ_ГР"));
 if k>0:
   АМОРТГРУППА=k;
   if ДАТАПРИНБУХ>1.1.100: СОСТОС[1].СРОКНОВИСП=ВзятьСрокАмортГруппы(k); fi;
   КОДОКОФ=GetCardFieldS("РПО_ОКОФ", REC, "КОД_ОКОФ");
 fi;
 ^"";
end;
Func ВзятьДанныеКонтрагента(ANA:String; mode:String; Наше:Logical) :String;
var res, t1, t2, tmp :String;
var REC, REB :Record;
var ROK, ROB, num :Integer;
 res="";
 if Up(SubStr(ANA, 1, 2))<>"К." and Наше=False: ^""; fi;
 ROK=OpenWorkArea("КОНТРАГЕНТ", "", "1=0");
 Try
   if Наше:
     SetFilter(ROK, "НАШЕ");
     num=Records(ROK);
     if num<1: REC=NIL;
     |  num=1: REC=GetRecordKey(ROK, 1);
     |  num>1: REC=GetRecordKey(ROK, 1);
               SetFilter(ROK, "НАШЕ and РПО_УМОЛЧАНИЕ");
               if Records(ROK)>0: REC=GetRecordKey(ROK, 1); fi;
     fi;
   else
     REC=SignToRecord(ANA, False);
   fi;
   if REC=NIL: ^""; fi;
   SetFilter(ROK, "Ukey="+RecordToString(REC));
   if mode="КИМЯ": res=GetFieldS(ROK, 1, "КОРИМЯ");
   |  mode="ОКПО": res=GetFieldS(ROK, 1, "ОКПО");
   |  mode="АДРС": tmp=GetFieldS(ROK, 1, "ЮРАДРЕС");
                   t1=GetFieldS(ROK, 1, "ТЕЛЕФОН"); t1=if(t1="", "", "тел. "+t1);
                   t2=GetFieldS(ROK, 1, "ФАКС");    t2=if(t2="", "", t2+" (факс)");
                   if tmp<>"": tmp=tmp+"; "+t1; else tmp=t1; fi;
                   if tmp<>"": tmp=tmp+"; "+t2; else tmp=t2; fi;
                   res=tmp;
   |  mode="БАНК": ROB=OpenWorkArea("БАНК_СЧЕТА", "", "КОНТРАГЕНТ="+RecordToString(REC));
                   Try
                     num=Records(ROB);
                     if num<1: REB=NIL;
                     |  num=1: REB=GetRecordKey(ROB, 1);
                     |  num>1: REB=GetRecordKey(ROB, 1);
                               SetFilter(ROB, "УМОЛЧАНИЕ and КОНТРАГЕНТ="+RecordToString(REC));
                               if Records(ROB)>0: REB=GetRecordKey(ROB, 1); fi;
                     fi;
                     if REB=NIL: ^""; fi;
                     SetFilter(ROB, "Ukey="+RecordToString(REB));
                     res="р/с: "+GetFieldS(ROB, 1, "РСЧЕТ")+" в "+GetFieldS(ROB, 1, "БАНК")+", "+GetFieldS(ROB, 1, "ГОРОД")+", "+
                         "к/с: "+GetFieldS(ROB, 1, "КСЧЕТ")+", БИК "+GetFieldS(ROB, 1, "БИК");
                   Finally
                     CloseWorkArea(ROB);
                   end;
   |  mode="ФРУК": res=GetFieldS(ROK, 1, "ФИОРУК");
   |  mode="ДРУК": res=GetFieldS(ROK, 1, "ДОЛЖНРУК");
   |  mode="ФКАС": res=GetFieldS(ROK, 1, "ФИОКАСС");
   |  mode="ДКАС": res=GetFieldS(ROK, 1, "ДОЛЖНКАСС");
   |  mode="ФБУХ": res=GetFieldS(ROK, 1, "ФИОБУХ");
   |  mode="ДБУХ": res=GetFieldS(ROK, 1, "ДОЛЖНБУХ");
   fi;
 Finally
   CloseWorkArea(ROK);
 end;
 ^res;
end;

Func ВзятьАмортГруппу(aИНВRO:Integer; aКОДИНВ:String; aНФАRO:Integer; aКОДНФА:String; aДПУ:Date) :Integer;
var amgrИНВ, amgrНФА, ppинв, ppнфа, hh, pp :Integer;
var RECинв, RECнфа :Record;
 amgrИНВ=0; amgrНФА=0;
 if aИНВRO>0 and Up(WorkAreaCardFile(aИНВRO))="РПО_ИНВКАРТ_ОС":
   RECинв=SignToRecord(aКОДИНВ, False);
   if RECинв<>NIL:
     ppинв=GetRecordNumber(aИНВRO, RECинв);
     if ppинв>0: Try amgrИНВ=GetFieldI(aИНВRO, ppинв, "АМОРТ_ГРУП"); Except amgrИНВ=0; end; fi;
   fi;
 fi;
 if amgrИНВ=0:
   if aНФАRO>0 and Up(WorkAreaCardFile(aНФАRO))="РПО_НФА":
     ClearVariable(Buf);
     if aДПУ>31.12.2008: hh=3; Buf[1]=" 09"; Buf[2]="   "; Buf[3]=" 02";
     |  aДПУ<01.01.2007: hh=1; Buf[1]=" 02";
     else                hh=2; Buf[1]="   "; Buf[2]=" 02";
     fi;
     RECнфа=SignToRecord(aКОДНФА, False);
     if RECнфа<>NIL:
       ppнфа=GetRecordNumber(aНФАRO, RECнфа);
       if ppнфа>0:
         for pp=1 to hh do if amgrНФА=0: Try amgrНФА=GetFieldI(aНФАRO, ppнфа, "КЛГРУПП"+Trim(Buf[pp])); Except amgrНФА=0; end; fi; od;
       fi;
     fi;
   fi;
 fi;
 ^if(amgrИНВ>0, amgrИНВ, amgrНФА);
end;

Func ОбновлениеАктовПриход :Logical;
var ROднфа, ROсотр, ROснфа, ROинвк, num, len, kk, jj, ii, xx, LastNum, pN, lN :Integer;
var CRDднфа, CRDсотр, CRDснфа, CRDинвк, ANA, КОДНФА, КОДИНВ, КОДСЧТ, КОДВЕД, Value, tmp :String;
var ДЕБКНТ, КРЕКНТ, ДЕБМОЛ, КРЕМОЛ, ДЕБПДР, КРЕПДР :String;
var OK, Режим, Work :Logical;
var dBT, dET, ddd :Date;
var Sum1, Sum2 :Numeric;
var REC :Record;
 OK=False;
 CRDднфа="РПО_ОПЕРАЦИИДНФА";
 CRDсотр="СОТРУДНИКИ";
 CRDснфа="РПО_НФА";
 CRDинвк="РПО_ИНВКАРТ_ОС";
 REC=IntegerToRecord(ДНФАID);
 if REC<>NIL: OK=RecordExists(CRDднфа, REC); fi;
 if not OK: Message("Не найдена ссылка на операцию движения НФА.^MРасчет невозможен!", mtError); ^False; fi;
 Режим=AutoRefresh;
 ToggleAutoRefresh(False);
 ShowProgress(3, "Считывание информации операции движения НФА ...");
 ROднфа=OpenWorkArea(CRDднфа, "", "Ukey="+RecordToString(REC));
 ROсотр=OpenWorkArea(CRDсотр, "", "1=0");
 ROснфа=OpenWorkArea(CRDснфа, "", "1=0");
 ROинвк=OpenWorkArea(CRDинвк, "", "1=0");
 Try
   if Records(ROднфа)=1:
     ProgressPos(1);
     Refresh(False);
     ProgressPos(2);
     ИнициализироватьУсловия(True);
     dBT=GetFieldD(ROднфа, 1, "ДАТОПЕР");
     dET=dBT+1;
     len=LengthOfArray(УслАНА);
     ANA=МаскаСЧ+"{НФА.*&ДНФАID."+Str16(ДНФАID)+"&ДНФА."+GetFieldS(ROднфа, 1, "АН_ДНФА")+"}";
     ClearVariable(НФА_ИНВ_COD); ClearVariable(НФА_ИНВ_СУМ); ClearVariable(НФА_ИНВ_КОЛ); ClearVariable(ДОПАНА);ClearVariable(НФА_ИНВ_ВИ);
     ProgressPos(3);
     ДЕБКНТ=""; КРЕКНТ=""; ДЕБМОЛ=""; КРЕМОЛ=""; ДЕБПДР=""; КРЕПДР="";
     -- Отбираем комбинации НФА с ИНВ и запоминаем дополнительную информацию
     for Transaction kk=ANA, dBT, dET do
       Work=False;
       КОДСЧТ=TransDeb(kk);
       Sum1=TransSum(kk);
       Sum2=TransSum(kk, "КОЛ");
       for ii=1 to len do
         OK=True;
         if УслАНА[ii]<>"":
           OK=False;
           for jj=1 to TransSignCount(kk) do
             OK=РАБ.НФА.FUNC_LIB.ПризнакСоотвМаске(TransSignName(kk, jj), УслАНА[ii]);
             if OK: Break; fi;
           od;
         fi;
         OK=(OK and РАБ.НФА.FUNC_LIB.СчетСоотвМаске(КОДСЧТ,       УслДЕБ[ii]));
         OK=(OK and РАБ.НФА.FUNC_LIB.СчетСоотвМаске(TransCre(kk), УслКРЕ[ii]));
         if OK: Work=True; Break; fi;
       od;
       if Work:
         КОДНФА=Trim(РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(kk, "НФА", True));
         КОДИНВ=Trim(РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(kk, "УЧН", True));
         if flgБезУЧН and КОДИНВ="": КОДИНВ="УЧН.#@#@#"; fi;
         if КОДНФА<>"" and КОДИНВ<>"":
           if Match(КОДСЧТ, "*.???.?.101.??.???")   : КОДСЧТ=SubStr(КОДСЧТ, 1, length(КОДСЧТ)-3)+"???";
           |  Match(КОДСЧТ, "ЗАБ.??.101.??")                       : if flgУчтЗАБ: КОДСЧТ=КОДСЧТ; else КОДСЧТ=""; fi;
           else КОДСЧТ="";
           fi;
           if КОДСЧТ<>"":
             Value=КОДНФА+"|"+КОДИНВ+"|"+КОДСЧТ+"|"+if(Sum2>0.00, Str(Sum1/Sum2, 2), "0.00");
             jj=SearchInArray(НФА_ИНВ_COD, Value, True, 1);
             if jj<1:
               ii=InsertInArraySort(НФА_ИНВ_COD, Value);
               InsertInArray(НФА_ИНВ_СУМ, ii, Sum1);
               InsertInArray(НФА_ИНВ_КОЛ, ii, Sum2);
               InsertInArray(ДОПАНА, ii, "");
             else
               НФА_ИНВ_СУМ[jj]=НФА_ИНВ_СУМ[jj]+Sum1;
               НФА_ИНВ_КОЛ[jj]=НФА_ИНВ_КОЛ[jj]+Sum2;
             fi;
             -- Вставляем дополнительную аналитику
             if ДЕБКНТ="": ДЕБКНТ=Trim(РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(kk, "К",   True )); fi;
             if КРЕКНТ="": КРЕКНТ=Trim(РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(kk, "К",   False)); fi;
             if ДЕБМОЛ="": ДЕБМОЛ=Trim(РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(kk, "МОЛ", True )); fi;
             if КРЕМОЛ="": КРЕМОЛ=Trim(РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(kk, "МОЛ", False)); fi;
             if ДЕБПДР="": ДЕБПДР=Trim(РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(kk, "П",   True )); fi;
             if КРЕПДР="": КРЕПДР=Trim(РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(kk, "П",   False)); fi;
           fi; --КОДСЧТ<>""
         fi; --КОДНФА<>"" and КОДИНВ<>""
       fi; --Work
     end; -- Transaction
     len=LengthOfArray(НФА_ИНВ_COD);
     if len=0: Message("НФА для создания акта^Mо приеме-передаче групп объектов основных средств (кроме  зданий, сооружений)^Mне найдено!", mtWarning); ^False; fi;
     -- Ищем последние инвентарные номера
     ClearVariable(ИНВ_MSK); ClearVariable(ИНВ_INI); ClearVariable(ИНВ_NUM);

--     for ii=1 to len do
--       КОДНФА=ExtractWord(1, НФА_ИНВ_COD[ii], "|");
--       КОДИНВ=ExtractWord(2, НФА_ИНВ_COD[ii], "|");
--       Value="ИНВВЕД."+КОДНФА+"."+КОДИНВ;
--       if Name_A(Value)=" ":
--          ВременныйФайл=PlanVar('CACHE')+'\ВременныйФайлОстатков.jur';
--          if ExistFile(ВременныйФайл): DeleteFile(ВременныйФайл); fi;
--          n=РАБ.НФА.СВЕРТКА.ПроводкиВтекст(ВременныйФайл,ДАТОПЕР,ДАТОПЕР+1,'*','(НФА.101.*|НФА.102.*|НФА.103.*)&УЧН.*&ДНФА.'+АН_ДНФА+'&ДНФАID.'+стр16(recordtointeger(current)),'',true,true,true,'',false);-- количество проводок);
--          if n>0:
--             НФА.СЕРВИС.КАРТОЧКИ.ОКУД_0504031_СОЗДАТЬ.Создать_инвентарные_карточки('','',ВременныйФайл);
--          Break;
--       fi;

     ShowProgress(len, "Поиск последнего инвентарного номера...");
     kk=0;
     for ii=1 to len do
       ProgressPos(ii);
       КОДНФА=ExtractWord(1, НФА_ИНВ_COD[ii], "|");
       КОДСЧТ=ExtractWord(3, НФА_ИНВ_COD[ii], "|");
       if Match(КОДСЧТ, "*.???.?.101.??.???"):
         tmp=НФА.СЕРВИС.КОНСТРУКТОР.ИНВ_НОМЕРА.МаскаВедИнвНомер(КОДСЧТ, КОДНФА);
         if SearchInArray(ИНВ_MSK, tmp, True, 1)<0:
           kk=InsertInArraySort(ИНВ_MSK, tmp);
           pN=Pos("?", tmp);
           lN=НФА.СЕРВИС.КОНСТРУКТОР.ИНВ_НОМЕРА.ДлинаНумерации;
           InsertInArray(ИНВ_INI, kk, Str(pN)+"|"+Str(lN));
           SetFilter(ROинвк, "Match(ИНВ_ВЕД,'"+tmp+"')");
           num=Records(ROинвк);
           if num>0:
             ClearVariable(BufI);
             for jj=1 to num do tmp=GetFieldS(ROинвк, jj, "ИНВ_ВЕД"); BufI[jj]=Int(SubStr(tmp, pN, lN)); od;
             SortArray(BufI, True);
             InsertInArray(ИНВ_NUM, kk, BufI[num]+1);
             ClearVariable(BufI);
           else
             InsertInArray(ИНВ_NUM, kk, 1);
           fi;
         fi;
       fi;
     od;
     -- Заполняем информацию НАЧАЛО
     -- Заполняем акт
     ShowProgress(5, "Заполняем акт...");
     ProgressPos(1);
     КОДФОРМЫ="ОКУД_0504101";
     ДАТАПРИНБУХ=dBT;
     if ДАТААКТА=1.1.100: ДАТААКТА=dBT; fi;
     jj=LastNumCard(SelfCRD, "НОМЕРАКТА,БУМНОМЕР")+1;
     if НОМЕРАКТА=0: НОМЕРАКТА=jj; БУМНОМЕР=Str(jj); fi;
     -- МЫ
     ProgressPos(2);
     if Trim(УЧРЕЖДЕНИЕ)="":
       УЧРЕЖДЕНИЕ=ВзятьДанныеКонтрагента("", "КИМЯ", True);
        ОКПОУЧРЕЖ=ВзятьДанныеКонтрагента("", "ОКПО", True);
     else
       if Trim(ОКПОУЧРЕЖ)="":  ОКПОУЧРЕЖ=ВзятьДанныеКонтрагента("", "ОКПО", True); fi;
     fi;
     if Trim(АДРЕСУЧРЕЖ)="" : АДРЕСУЧРЕЖ=ВзятьДанныеКонтрагента("", "АДРС", True); fi;
     if Trim(БАНКУЧРЕЖ)=""  :  БАНКУЧРЕЖ=ВзятьДанныеКонтрагента("", "БАНК", True); fi;
     if Trim(ПОУЧРЕЖ)=""    : tmp=ДЕБПДР; КОДПОУЧРЕЖ=tmp; ПОУЧРЕЖ=if(Trim(Name_A(tmp))<>"", Name_A(tmp), tmp); fi;
     -- Исполнитель
     ProgressPos(3);
     if Trim(ИСПОЛНИТЕЛЬ)="":
       tmp=КРЕКНТ;
       ИСПОЛНИТЕЛЬ=ВзятьДанныеКонтрагента(tmp, "КИМЯ", False);
         ОКПОИСПОЛ=ВзятьДанныеКонтрагента(tmp, "ОКПО", False);
     fi;
     if Trim(АДРЕСИСПОЛ)="" : tmp=КРЕКНТ; АДРЕСИСПОЛ=ВзятьДанныеКонтрагента(tmp, "АДРС", False); fi;
     if Trim(БАНКИСПОЛ)=""  : tmp=КРЕКНТ;  БАНКИСПОЛ=ВзятьДанныеКонтрагента(tmp, "БАНК", False); fi;
     if Trim(ПОИСПОЛ)=""    : tmp=КРЕПДР; КОДПОИСПОЛ=tmp; ПОИСПОЛ=if(Trim(Name_A(tmp))<>"", Name_A(tmp), tmp); fi;
     ProgressPos(4);
     -- Подписи
     if Trim(ФИОРУКУЧРЕЖ)="":
         ФИОРУКУЧРЕЖ=ВзятьДанныеКонтрагента("", "ФРУК", True);
       ДОЛЖНРУКУЧРЕЖ=ВзятьДанныеКонтрагента("", "ДРУК", True);
     fi;
     if ДАТАПОДРУК=1.1.100: ДАТАПОДРУК=dBT; fi;
     if Trim(ФИОГЛБУХПРИН)="": ФИОГЛБУХПРИН=ВзятьДанныеКонтрагента("", "ФБУХ", True); fi;
     if Trim(ФИОРУКИСПОЛ)="":
         tmp=КРЕКНТ;
         ФИОРУКИСПОЛ=ВзятьДанныеКонтрагента(tmp, "ФРУК", False);
       ДОЛЖНРУКИСПОЛ=ВзятьДанныеКонтрагента(tmp, "ДРУК", False);
     fi;
     if ДАТАПОДИСПОЛ=1.1.100: ДАТАПОДИСПОЛ=dBT; fi;
     if Trim(ФИОГЛБУХСДАЛ)="": tmp=КРЕКНТ; ФИОГЛБУХСДАЛ=ВзятьДанныеКонтрагента(tmp, "ФБУХ", False); fi;
     -- МОЛ
     ProgressPos(5);
     tmp=ДЕБМОЛ;
     REC=SignToRecord(tmp, False);
     if REC<>NIL:
       SetFilter(ROсотр, "Ukey="+RecordToString(REC));
       if Records(ROсотр)=1:
          ДОЛЖНМОЛПРИН = GetFieldS(ROсотр, 1, "ДОЛЖНОСТЬ.ДОЛЖ");
              tmp = GetFieldS(ROсотр, 1, "ИНИЦИАЛЫ");
            Value = GetFieldS(ROсотр, 1, "ФАМИЛИЯ");
            ФИОМОЛПРИН = if(Value="", GetFieldS(ROсотр, 1, "ФИОТ"), Value+" "+if(tmp<>"..", tmp, ""));
         ТАБНОММОЛПРИН = GetFieldS(ROсотр, 1, "ПРИЗНАК");
         if ДАТАМОЛПРИН=1.1.100: ДАТАМОЛПРИН=dBT; fi;
         if Trim(ДОЛЖНПРИН)="" : ДОЛЖНПРИН = ДОЛЖНМОЛПРИН; fi;
         if Trim(ФИОПРИН)=""   :   ФИОПРИН =   ФИОМОЛПРИН; fi;
         if    ДАТАПРИН=1.1.100:    ДАТАПРИН=dBT; fi;
       fi;
     fi;
     -- ***************
     -- ***************
     -- **           **
     -- **  ТАБЛИЦА  **
     -- **           **
     -- ***************
     -- ***************
     ClearVariable(состОС);
     SetFilter(ROинвк, "");
     SetFilter(ROснфа, "");
     LastNum=LastNumCard(CRDинвк, "Номер");
     for ii=1 to len do
       kk=InsertFrame(состОС, ii);
       КОДНФА=ExtractWord(1, НФА_ИНВ_COD[ii], "|");
       КОДИНВ=ExtractWord(2, НФА_ИНВ_COD[ii], "|");
       КОДСЧТ=ExtractWord(3, НФА_ИНВ_COD[ii], "|");
       Value="";
       КОДВЕД="";
       ddd=1.1.100;
       ShowProgress(len, "Обработка НФА с кодом "+Trim(SubStr(КОДНФА, 5, 255))+if(КОДИНВ<>"УЧН.#@#@#", " и инвентарным номером "+Trim(SubStr(КОДИНВ, 5, 255)), " и без инвентарного номера")+"...");
       ProgressPos(ii);
       состОС[ii].ОС       = КОДНФА;
       состОС[ii].НАИМЕНОС = if(Trim(Name_A(КОДНФА))<>"", Name_A(КОДНФА), КОДНФА);
       if КОДИНВ<>"УЧН.#@#@#":
         состОС[ii].ИНВНОМЕР = КОДИНВ;
         Value="ИНВВЕД."+КОДНФА+"."+КОДИНВ;
         if Trim(Name_A(Value))="":
           BeginChanging(ROинвк);
           Try
             REC=SignToRecord(Value, False);
             OK=False; Work=False; xx=0;
             if REC<>NIL: xx=GetRecordNumber(ROинвк, REC); Work=LockRecord(ROинвк, xx, 0); else xx=InsertRecord(ROинвк); Work=True; fi;
             if Work:
               if Match(КОДИНВ, "УЧН.?????"):
                 ANA=НФА.СЕРВИС.КОНСТРУКТОР.ИНВ_НОМЕРА.МаскаВедИнвНомер(КОДСЧТ, КОДНФА);
                 jj=SearchInArray(ИНВ_MSK, ANA);
                 if jj>0:
                   pN=Int(ExtractWord(1, ИНВ_INI[jj], "|"));
                   lN=Int(ExtractWord(2, ИНВ_INI[jj], "|"));
                   num=lN-Length(Str(ИНВ_NUM[jj]));
                   tmp=RepStr("0", num)+Str(ИНВ_NUM[jj]);
                   ANA=Delete(ANA, pN, lN);
                   ANA=Insert(tmp, ANA, pN);
                   КОДВЕД=ANA; --Ведомственный номер по умолчанию
                   OK=True;
                 fi;
               else
                 КОДВЕД=Trim(SubStr(КОДИНВ, Length(GetAnaGlossary(КОДИНВ))+2, 255)); --Старый присвоенный инвентарный номер
               fi;
               xx=PutFieldS(ROинвк, xx, "ИНВ",     Trim(SubStr(КОДИНВ, Length(GetAnaGlossary(КОДИНВ))+2, 255)));
               xx=PutFieldS(ROинвк, xx, "НФА",     КОДНФА);
               xx=PutFieldS(ROинвк, xx, "СЧЕТНФА", КОДСЧТ);
               xx=PutFieldS(ROинвк, xx, "ИНВ_ВЕД", КОДВЕД);
               LastNum=LastNum+1;
               xx=PutFieldI(ROинвк, xx, "НОМЕР",    LastNum);
               xx=PutFieldS(ROинвк, xx, "НОМЕРБУМ", Str(LastNum));
               xx=PutFieldD(ROинвк, xx, "DD",       dBT);
               if OK: ИНВ_NUM[jj]=ИНВ_NUM[jj]+1; fi;
             fi;
             EndChanging(ROинвк);
           Except
             CancelChanging(ROинвк);
           end;
           состОС[ii].ИНВНОМЕРВЕД = КОДВЕД;
         else
           состОС[ii].ИНВНОМЕРВЕД = Trim(Name_A(Value)); --Ведомственный номер уже присвоен
         fi;
         состОС[ii].ДатаВвЭксп  = Раб.СТР.MinDebDat2(РАБ.НФА.B01.ВзятьДЭКСПЛ(КОДНФА, КОДИНВ), dBT);
         состОС[ii].ГодВыпуска  = РАБ.НФА.B01.ПолеПоПризнакуД(Value,'ДАТА_ИЗГ');
         if состОС[ii].ГодВыпуска = 1.1.100: состОС[ii].ГодВыпуска  = dBT; fi;
         состОС[ii].ЗавНомер    = РАБ.НФА.B01.ПолеПоПризнакуС(tmp,'ЗАВОД_НОМ');
         ddd=Раб.СТР.MinDebDat2(РАБ.НФА.B01.ВзятьДУЧЕТ(КОДНФА, КОДИНВ),состОС[ii].ДатаВвЭксп);
       fi;
       --
       Sum1=0.00; Sum2=0.00;
       if КОДИНВ<>"УЧН.#@#@#": Sum1=Saldo(КОДСЧТ+"{"+КОДНФА+"&"+КОДИНВ+"}", dET); else Sum1=НФА_ИНВ_СУМ[ii]; fi;
       состОС[ii].БАЛАНССТОИМ = Sum1;
       состОС[ii].ПОКВСЕГО    = Sum1;
--       состОС[ii].ПОКВСЕГО    = Round(состОС[ii].ПОКСТОИМ*НФА_ИНВ_КОЛ[ii], 2);
       состОС[ii].ПОКСТОИМ    = if(НФА_ИНВ_КОЛ[ii]>0.00, Round(НФА_ИНВ_СУМ[ii]/НФА_ИНВ_КОЛ[ii], 2), 0.00);
       --
       tmp=Раб.НФА.B01.Соотв104поСЧНФА(КОДСЧТ);
       if tmp<>"" and КОДИНВ<>"УЧН.#@#@#": Sum2=Abs(Saldo(tmp+"{"+КОДНФА+"&"+КОДИНВ+"}", dET)); else Sum2=0.00; fi;
       состОС[ii].СУМНАЧАМОРТ=Sum2;
       состОС[ii].ОСТСТОИМ=Abs(Sum1-Sum2);
       --
       if ddd=1.1.100: ddd=dBT; fi;
       if состОС[ii].ПОКСТОИМ <  Общ_Пер('ОС_100',  ddd) and состОС[ii].ПОКСТОИМ > Общ_Пер('ОС_РАСХ', ddd) and Sum2>0.00: состОС[ii].МЕТОДИЗНОСА="100% начислено амортизации";
       |  состОС[ii].ПОКСТОИМ <= Общ_Пер('ОС_РАСХ', ddd):                                                                 состОС[ii].МЕТОДИЗНОСА="Не начисляется";
       else состОС[ii].МЕТОДИЗНОСА = "";
       fi;
       --
       num = ВзятьАмортГруппу(ROинвк, Value, ROснфа, КОДНФА, ddd);
       if num>0 and состОС[ii].МЕТОДИЗНОСА = "":
         состОС[ii].АМОРТГРУППА = num;
         состОС[ii].СРОКНОВИСП  = ВзятьСрокАмортГруппы(num);
         состОС[ii].МЕТОДИЗНОСА = "Линейный метод   (утвержден НК РФ)";
       fi;
     od;
     -- Заполняем акт КОНЕЦ
   fi; --Records(CRDднфа)=1:
 Finally
   CloseWorkArea(ROинвк);
   CloseWorkArea(ROснфа);
   CloseWorkArea(ROсотр);
   CloseWorkArea(ROднфа);
   CloseProgress;
   ToggleAutorefresh(Режим);
 end;
 ClearVariable(NN);
 ^True;
end;

Func ВзятьДатуВводвЭксплуатЖурОст(СЧ26:String; КОДНФА:String; КОДИНВ:String; ddBeg:Date; ddEnd:Date) :Date;
var x, RO, OA, i, num :Integer;
var sumTurn, sumBase :Numeric;
var REC :Record;
var dd, dd1, dd2 :Date;
var ANA,ss :String;
var OK :Logical;
 REC=NIL; dd=1.1.100; OK=False;
 ANA=СЧ26+"/00"+"{"+КОДНФА+"&"+КОДИНВ+"}";
 sumTurn=Turn(ANA, ddBeg, ddEnd);
-- for Transaction x=ANA, ddBeg, ddEnd, Reverse do
 for Transaction x=ANA, ddBeg, ddEnd  do
   REC=TransRecord(x);
   if TransCardFile(x)="РПО_ОСТ_НФА" and REC<>NIL then 
     i=ПроводНомерПризнака(x,'ММДД.');
     if i>0:ss=ПроводИмяПризн(x,i);
        i=ПроводНомерПризнака(x,'ГГ.');
        if i>0:-- собираем dd
           ss=ВыделитьСлово(3,ss,'.')+'.'+ВыделитьСлово(2,ss,'.')+'.';
           ss=ss+ВыделитьСлово(2,ПроводИмяПризн(x,i),'.');
           dd=Строкувдату(ss);
         | true:ss='';
        fi;
     fi;
     if длина(ss)>1:
        ^dd;
     fi;
     RO=OpenWorkArea("РПО_ОСТ_НФА", "", "UKey="+RecordToString(REC));
     Try
       if Records(RO)=1:
         OA=OpenArray(RO, 1, "ПОЗИЦИИОС", "", "Match(СЧНФА, '"+СЧ26+"') and НФА='"+КОДНФА+"' and УЧНОМ='"+КОДИНВ+"'");
         num=Records(OA);
         if num>0:
           for i=1 to num do
             sumBase=GetFieldN(OA, i, "СУМНФА");
             if sumTurn=sumBase: 
               dd1=GetFieldD(OA, i, "ДЭКСПЛ");
               dd2=GetFieldD(OA, i, "ДУЧЕТ");
               if dd1<dd2 and dd1>1.1.1900: dd=dd1;
               |  dd1>dd2 and dd2>1.1.1900: dd=dd2;
               else dd=1.1.100;
               fi;
               if dd<>1.1.100: OK=True; Break; fi;
             fi;
           od;
         fi;
         CloseWorkArea(OA);
       fi;
     Finally
       CloseWorkArea(RO);
     end;

     if OK: Break; fi;
   fi;
 od;
 if dd<1.1.1800:
   ANA='+'+СЧ26+"/*&~"+СЧ26+"{"+КОДНФА+"&"+КОДИНВ+"&ГГ.*&ММДД.*}";  -- отработать принятие к учету нового ОС и б/у, для нового - дата проводки, а для б/у?
   for Transaction x=ANA, ddBeg, ddEnd  do
     i=ПроводНомерПризнака(x,'ММДД.');
     if i>0:ss=ПроводИмяПризн(x,i);
        i=ПроводНомерПризнака(x,'ГГ.');
        if i>0:-- собираем dd
           ss=ВыделитьСлово(3,ss,'.')+'.'+ВыделитьСлово(2,ss,'.')+'.';
           ss=ss+ВыделитьСлово(2,ПроводИмяПризн(x,i),'.');
           dd=Строкувдату(ss);
         | true:ss='';
        fi;
     fi;
     if длина(ss)>1:
        ^dd;
     fi;
   od;
 fi;

 if dd<1.1.1800:
   ANA='+'+СЧ26+"/*&~"+СЧ26+"{"+КОДНФА+"&"+КОДИНВ+"}";  -- отработать принятие к учету нового ОС и б/у, для нового - дата проводки, а для б/у?
   for Transaction x=ANA, ddBeg, ddEnd  do
     dd=TransDate(x);
   od;
 fi;

 ^dd;
end;

Func ОбновлениеАктов(Обновление:s):Logical;
var REC :Record;
var dBT, dET, dd ,ddd:Date;
var ROднфа, ROсотр, ROснфа, ROинвк,ROинвк_харос, num, len, k, y, j, i, x, LastNum ,wa_control,rs,ВИ,nf:Integer;
var pN, lN :Integer;
var Sum1, Sum2 :Numeric;
var CRDсотр, CRDснфа, CRDинвк, УслПР, КОДНФА, КОДИНВ, СЧК, tmp, tmp2, ВЕД, v1 ,УслАнПров,crd_control,СчНФА,БазВал,ВременныйФайл:String;
var OK, Режим, Work ,ll, ExistsRefreshAna:Logical;
var ДНФАID_16,ss :s;
var FieldToField0:s;
var FieldToField1:s;
var FieldToFieldS:ls;
var RecWrk,Rec_control: Record;
var BlnWrk,CrdWrk,fielddate: String;
 FieldToField0='ХАРОС_НАИМЕН_ПР=НАИМЕН_ПР|ХАРОС_ОСН=ОСН|ХАРОС_ПРИСТР1=ПРИСТР1|ХАРОС_ПРИСТР2=ПРИСТР2|ХАРОС_ПРИСТР3=ПРИСТР3|ХАРОС_ПРИСТР4=ПРИСТР4|ХАРОС_НАИМЕН_ОБ=НАИМЕН_ОБ|ХАРОС_НАИМЕН_ДРАГ=НАИМЕН_ДРАГ|ХАРОС_ЕДИЗМ_ДРАГ=ЕДИЗМ_ДРАГ|ХАРОС_ОКЕИ_ДРАГ=ОКЕИ_ДРАГ';
 FieldToField1='|ХАРОС_КОЛИЧ=КОЛИЧ|ХАРОС_ДРАГМЕТ00=ДРАГМЕТ00|ХАРОС_ДРАГМЕТ01=ДРАГМЕТ01|ХАРОС_ДРАГМЕТ02=ДРАГМЕТ02|ХАРОС_ДРАГМЕТ03=ДРАГМЕТ03|ХАРОС_ДРАГМЕТ04=ДРАГМЕТ04|ХАРОС_ДРАГМЕТ05=ДРАГМЕТ05|ХАРОС_ДРАГМЕТ06=ДРАГМЕТ06|ХАРОС_ДРАГМЕТ07=ДРАГМЕТ07|ХАРОС_ДРАГМЕТ08=ДРАГМЕТ08';
 FieldToFieldS=FieldToField0+FieldToField1;
 if CRD<>'' and RECCRD<>0:
    CrdWrk=CRD;
    RECWrk=IntegerToRecord(Abs(RECCRD));
    blnWrk=BLNCRD;
    fielddate  = РАБ.БЮДЖЕТ2005.ПолеДатыПроводкиКартотеки(CrdWrk);
    if fielddate="": fielddate = 'ДАТАОПЕР'; fi;
  | true:
    CrdWrk="РПО_ОПЕРАЦИИДНФА";
    RECWrk=IntegerToRecord(Abs(ДНФАID));
    blnWrk="НФА.ЖУР.ОПЕРАЦИИДНФА";
    fielddate='ДАТОПЕР';
 fi;
 Rec_control=RECWrk;
 crd_control=CrdWrk;
 ДНФАID_16 = Str16(RecordToInteger(RecWRK));

 OK=False;
 CRDсотр="СОТРУДНИКИ"; CRDснфа="РПО_НФА"; CRDинвк="РПО_ИНВКАРТ_ОС";

 if RECWrk<>NIL: OK=RecordExists(CrdWrk, RECWrk); fi;
 if OK=False: Message("Не найдена ссылка на операцию движения НФА.^MРасчет невозможен!", mtError); ^False; fi;
 Режим=AutoRefresh;
 ToggleAutoRefresh(False);
 ROднфа=OpenWorkArea(CrdWrk, "", "Ukey="+RecordToString(RECWrk));
 ROсотр=OpenWorkArea(CRDсотр, "", "1=0");
 ROснфа=OpenWorkArea(CRDснфа, "", "1=0");
 ROинвк=OpenWorkArea(CRDинвк, "", "1=0");
 ShowProgress(3, "Считывание информации операции движения НФА ...");
 Try
   ProgressPos(1);
   Refresh(False);
   ProgressPos(2);
   ИнициализироватьУсловия(Обновление<>'Расход');
   dBT=GetFieldD(ROднфа, 1, fielddate);
   dET=dBT+1;
   len=LengthOfArray(УслАНА);
   if CrdWrk='РПО_НФА_СПРАВКА':
      wa_control=OpenWorkArea('РПО_НФА_СПРАВКА_ПРОВОДКИ','','НФА_СПРАВКА="'+GetFieldS(ROднфа, 1, "НФА_СПРАВКА")+'"');
      rs=records(wa_control);
      crd_control='РПО_НФА_СПРАВКА_ПРОВОДКИ';
      if rs=1:Rec_control=GetRecordKey(wa_control,1);
       | true:Rec_control=nil;
      fi;
      УслАнПров='{НФА.*';
      УслАнПров=Раб.НФА.B01.ab(УслАнПров,'&',GetFieldS(ROднфа, 1, "МХЭ_ОТККОД_ОБЩ"));
      УслАнПров=Раб.НФА.B01.ab(УслАнПров,'&',GetFieldS(ROднфа, 1, "МОЛ_ОТККОД"));
      ss=GetFieldS(ROднфа, 1, "ДОП_АН_КОД");
      ss=Раб.СТР.ЗаменаПодстрокиВсе(ss,'  ',' ');
      ss=Раб.СТР.ЗаменаПодстрокиВсе(ss,' ','&');
      УслАнПров=Раб.НФА.B01.ab(УслАнПров,'&',ss);
      УслАнПров=Раб.НФА.B01.ab(УслАнПров,'&','НФА_СПРАВКА.'+str(GetFieldI(ROднфа, 1, "СПОСОБ_РАСЧЕТА")))+"}";
      УслПР=МаскаСЧ+УслАнПров;
    | true: УслПР=МаскаСЧ+"{НФА.*&ДНФАID."+Str16(ДНФАID)+"&ДНФА."+GetFieldS(ROднфа, 1, "АН_ДНФА")+"}";
   fi;
   ClearVariable(НФА_ИНВ_COD); ClearVariable(НФА_ИНВ_СУМ); ClearVariable(НФА_ИНВ_КОЛ); ClearVariable(ДОПАНА); ClearVariable(НФА_ИНВ_ВИ);
   ClearDebCre;
   ProgressPos(3);
   -- Отбираем комбинации НФА с ИНВ и запоминаем дополнительную информацию
   ClearVariable(BufI);
   for Transaction k=УслПР, dBT, dET do
     ll=false;
     if TransCardFile(k)=crd_control:
        if Rec_control<>nil:ll=TransRecord(k)=Rec_control;
         | true:
           if wa_control<>0:ll=GetRecordNumber(wa_control,TransRecord(k))>0;fi;
        fi;
     fi;
     if ll:
        Work=False;
        СЧК=TransCre(k);
        for y=1 to len do
          OK=True;
          if УслАНА[y]<>"":
                 OK=False;
                 j=TransSignCount(k);
                 for i=1 to j do
                   OK=РАБ.НФА.FUNC_LIB.ПризнакСоотвМаске(TransSignName(k, i), УслАНА[y]);
                   if OK: Break; fi;
                 od;
          fi;
          if OK: OK=РАБ.НФА.FUNC_LIB.СчетСоотвМаске(TransDeb(k), УслДЕБ[y]); fi;
          if OK: OK=РАБ.НФА.FUNC_LIB.СчетСоотвМаске(TransCre(k), УслКРЕ[y]); fi;
          if OK: Work=True; Break; fi;
        od;
        if Work:
          КОДНФА=Trim(РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "НФА", False));
          КОДИНВ=Trim(РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "УЧН", False));
          if КОДНФА<>'' and КОДИНВ<>'':
             if Name_A("ИНВВЕД."+КОДНФА+"."+КОДИНВ)=' ':
               addinarray(BufI,true,false,k);
             fi;
          fi;
          if УчЗаб and КОДИНВ="":КОДИНВ='УЧН.ЗАБ';fi;

          if КОДНФА<>"" and КОДИНВ<>"":
            tmp=TransDeb(k)+'|'+TransCre(k);
            j=SearchInArray(DebCre, tmp, True, 1);
            if j<1:j=InsertInArraySort(DebCre, tmp);
               InsertInArray(DebCreSum,j,0);
            fi;
            DebCreSum[j]=DebCreSum[j]+TransSum(k);
                 if Обновление='Расход':СчНФА=РАБ.НФА.B01.СчетНФА(TransCre(k));
                  | true:СчНФА=РАБ.НФА.B01.СчетНФА(TransDeb(k));
                 fi;
                 if СчНФА<>"":
                   tmp=КОДНФА+"|"+КОДИНВ+"|"+СчНФА;
                   j=SearchInArray(НФА_ИНВ_COD, tmp, True, 1);
                   if j<1:j=InsertInArraySort(НФА_ИНВ_COD, tmp);
                      tmp=Раб.НФА.B01.СчетАн(СЧК);
                      if tmp<>'':tmp=SubStr(tmp,1,1);
                        InsertInArray(НФА_ИНВ_ВИ, j, int(tmp));
                      fi;
                      tmp=     ' '+Раб.НФА.B01.ПризнакИзСтрокиАналитикиПроводки_приоритет(k,'П',' -');
                      tmp=tmp+'| '+Раб.НФА.B01.ПризнакИзСтрокиАналитикиПроводки_приоритет(k,'П',' +');
                      tmp=tmp+'| '+Раб.НФА.B01.ПризнакИзСтрокиАналитикиПроводки_приоритет(k,'ПБС|К',' -+');
                      tmp=tmp+'| '+Раб.НФА.B01.ПризнакИзСтрокиАналитикиПроводки_приоритет(k,'ЗН',' -+');
--                      tmp=tmp+'| '+Раб.НФА.B01.ПризнакИзСтрокиАналитикиПроводки_приоритет(k,'КТ',' -+');
                      InsertInArray(ДОПАНА, j, tmp);
                      InsertInArray(НФА_ИНВ_СУМ, j, TransSum(k));
                      InsertInArray(НФА_ИНВ_КОЛ, j, TransSum(k, "КОЛ"));
                    | true:
                      НФА_ИНВ_СУМ[j]=НФА_ИНВ_СУМ[j]+TransSum(k);
                      НФА_ИНВ_КОЛ[j]=НФА_ИНВ_КОЛ[j]+TransSum(k, "КОЛ");
                   fi;
                 fi;
          fi;
        fi;
     fi;
   end; -- Transaction

   len=LengthOfArray(BufI);
   if len>0:
     ВыполнитьПроцедуру('НФА.СЕРВИС.КАРТОЧКИ.ОКУД_0504031_СОЗДАТЬ.ClearBufI');
     for k=1..len do
      PutVariableI('НФА.СЕРВИС.КАРТОЧКИ.ОКУД_0504031_СОЗДАТЬ.BufI['+str(k)+']',BufI[k]);
     od;
--     AddToBufI
     --CopyArray(BufI,НФА.СЕРВИС.КАРТОЧКИ.ОКУД_0504031_СОЗДАТЬ.BufI);
     if ВыполнитьФункциюЛ('НФА.СЕРВИС.КАРТОЧКИ.ОКУД_0504031_СОЗДАТЬ.Создать_инвентарные_карточки0','','',ВременныйФайл,false,true):fi;
  --     try
  --       ВременныйФайл=PlanVar('CACHE')+'\ВременныйФайлОстатков.jur';
  --       if ExistFile(ВременныйФайл): DeleteFile(ВременныйФайл); fi;
  --       БазВал=up(БазоваяВалюта);
  --       nf=ТекстФайлСоздать(ВременныйФайл);
  --       try
  --         ТекстФайлВКонец(nf);
  --         for k=1..len do
  --           dBT=Раб.НФА.Свертка.ПроводкуВтекст(nf,BufI[k],БазВал,dBT,true,true,true,'',false);
  --         od;
  --       finally
  --        ТекстФайлЗакрыть(nf);
  --       end;
  --       НФА.СЕРВИС.КАРТОЧКИ.ОКУД_0504031_СОЗДАТЬ.Создать_инвентарные_карточки0('','','',false,true);
  ----       НФА.СЕРВИС.КАРТОЧКИ.ОКУД_0504031_СОЗДАТЬ.Создать_инвентарные_карточки('','',ВременныйФайл);
  --       if ВыполнитьФункциюЛ('НФА.СЕРВИС.КАРТОЧКИ.ОКУД_0504031_СОЗДАТЬ.Создать_инвентарные_карточки0','','',ВременныйФайл,false,true):fi;
  --     finally
  --     end;
   fi;
   ExistsRefreshAna=false;

   ClearVariable(Buf);
   if searchinarray(НФА_ИНВ_ВИ,0)>0:addinarray(Buf,true,false,'0 - Неопределено');fi;
   if searchinarray(НФА_ИНВ_ВИ,1)>0:addinarray(Buf,true,false,'1 - Недвижимое');fi;
   if searchinarray(НФА_ИНВ_ВИ,2)>0:addinarray(Buf,true,false,'2 - Особо ценное движимое');fi;
   if searchinarray(НФА_ИНВ_ВИ,3)>0:addinarray(Buf,true,false,'3 - Движимое');fi;
   if searchinarray(НФА_ИНВ_ВИ,4)>0:addinarray(Buf,true,false,'4 - Иное');fi;
   k=1;
   if lengthOfArray(Buf)>1:
      k=Alternate("Выберите вид имущества для расчета", Buf, -1);
    | lengthOfArray(Buf)<1:k=0;
   fi;
   if k>0 :ВИ=Int(SubStr(Buf[k],1,1));
    | true:ВИ=-1;
   fi;


   ClearVariable(ПОЗИЦИИ_БУХ);
   len=LengthOfArray(DebCre);
   for j=1..len do
     tmp =Раб.НФА.B01.СчетВИ(ВыделитьСлово(1,DebCre[j],'|'));
     tmp2=Раб.НФА.B01.СчетВИ(ВыделитьСлово(2,DebCre[j],'|'));
     if tmp='' or tmp2='':tmp=tmp+tmp2;fi;
     if tmp='':k=-1;
      | true:
        k=int(tmp);
     fi;
     if k=ВИ or ВИ=-1:
        k=insertframe(ПОЗИЦИИ_БУХ,ПОЗИЦИИ_БУХ+1);
        ПОЗИЦИИ_БУХ[k].ДЕБ=ВыделитьСлово(1,DebCre[j],'|');
        ПОЗИЦИИ_БУХ[k].КРЕ=ВыделитьСлово(2,DebCre[j],'|');
        ПОЗИЦИИ_БУХ[k].СУММА=DebCreSum[j];
     fi;
   od;
   ВИДДОКОСН=ВИ;
   if СТРПРИЛ<1:insertframe(СТРПРИЛ,1);fi;
   СТРПРИЛ[1].ПРИЛОЖЕНИЕ='Копии инвентарных карточек в количестве _______ штук  на  _____  листах';

   len=LengthOfArray(НФА_ИНВ_COD);
   if len=0: Message("НФА для создания акта^Mо приеме-передаче групп объектов основных средств (кроме  зданий, сооружений)^Mне найдено!", mtWarning); ^False; fi;
   -- Заполняем акт
   ShowProgress(5, "Заполняем акт...");
   ProgressPos(1);
   КОДФОРМЫ="ОКУД_0504101";
   ДАТАПРИНБУХ=dBT;
   if ДАТААКТА=1.1.100: ДАТААКТА=dBT; fi;
   if БУМНОМЕР='':
     y=LastNumCard(SelfCRD, "НОМЕРАКТА,БУМНОМЕР")+1;
     НОМЕРАКТА=y; БУМНОМЕР=Str(y); 
   fi;
   -- МЫ
   ProgressPos(2);
   -- МОЛ
   ProgressPos(5);
   -- Таблица
   ClearVariable(состОС);
   ClearVariable(ХАРОС);
   SetFilter(ROинвк, "");
   SetFilter(ROснфа, "");
--   LastNum=LastNumCard(CRDинвк, "Номер");

   ClearVariable(Buf);
   for i=1 to len do
    if НФА_ИНВ_ВИ[i]=ВИ or ВИ=-1 or (ВИ=0 and НФА_ИНВ_ВИ[i]=3):
     y=InsertFrame(состОС, i);
     КОДНФА=ExtractWord(1, НФА_ИНВ_COD[i], "|");
     КОДИНВ=ExtractWord(2, НФА_ИНВ_COD[i], "|");
      СчНФА=ExtractWord(3, НФА_ИНВ_COD[i], "|");
     ShowProgress(len, "Обработка НФА с кодом "+SubStr(КОДНФА, 5, 255)+" и инвентарным номером "+SubStr(КОДИНВ, 5, 255)+"...");
     ProgressPos(i);

--     j=WordsCount(ДОПАНА[i], "|");
     for y=1 to 3 do -- собираем общие признаки по первому нахождению
       tmp=trim(ExtractWord(y, ДОПАНА[i], "|"));
       if tmp<>'':
         if Buf[y]='':Buf[y]=tmp;
          | Buf[y]<>tmp:-- Возможно требуется доп акт!!!
            Trace('Неоднознаяный общий признак! Возможно требуется дополнительный акт!!! '+tmp);
         fi;
       fi;
     od;
     состОС[i].ОС      =КОДНФА;
     состОС[i].НАИМЕНОС=if(Name_A(КОДНФА)<>"" and Name_A(КОДНФА)<>" ", Name_A(КОДНФА), КОДНФА);
     состОС[i].ИНВНОМЕР=КОДИНВ;
     tmp="ИНВВЕД."+КОДНФА+"."+КОДИНВ;
     v1="";
     ВЕД=Name_A(tmp);
     if КОДИНВ<>'УЧН.ЗАБ':
     if ВЕД=" " or ВЕД="":if not ExistsRefreshAna: RefreshAna; ExistsRefreshAna=true; ВЕД=Name_A(tmp); fi; fi;

     if ВЕД=" ":
       состОС[i].ИНВНОМЕРВЕД='';
       v1=trim(ExtractWord(4, ДОПАНА[i], "|"));
       if v1<>'':
         состОС[i].ЗавНомер=SubStr(v1,4,255);
       fi;
     else
       состОС[i].ИНВНОМЕРВЕД=ВЕД; --Ведомственный номер уже присвоен
       состОС[i].ДатаВвЭксп =Раб.СТР.MinDebDat2(Раб.НФА.B01.ВзятьДЭКСПЛ(КОДНФА,КОДИНВ),dBT);--Раб.НФА.B01.2ПолеПоПризнаку0Д(tmp,'ДАТ_ВЭКСП');
       состОС[i].ГодВыпуска =Раб.НФА.B01.2ПолеПоПризнаку0Д(tmp,'ДАТА_ИЗГ');
       состОС[i].ЗавНомер   =Раб.НФА.B01.2ПолеПоПризнаку0С(tmp,'ЗАВОД_НОМ');
       состОС[i].ПАСПОРТ    =Раб.НФА.B01.2ПолеПоПризнаку0С(tmp,'ПАСПОРТ');
       состОС[i].ИНОЙНОМЕР  =Раб.НФА.B01.2ПолеПоПризнаку0С(tmp,'ИНОЙ_НОМ');
       if состОС[i].ДатаВвЭксп>1.1.100:
         num=год(ДАТААКТА)*12+мес(ДАТААКТА)-год(состОС[i].ДатаВвЭксп)*12-мес(состОС[i].ДатаВвЭксп);
         состОС[i].ФАКТСРОКЭК=str(num);
--         if num>12:
--            x=int(trunc(num/12));
--            if x=1:состОС[i].ФАКТСРОКЭК='1 год';
--             | x=2 or x=3 or x=4:состОС[i].ФАКТСРОКЭК=str(x)+' года';
--             | true:состОС[i].ФАКТСРОКЭК=str(x)+' лет';
--            fi;
--            num=num-(x*12);
--         fi;
--         if состОС[i].ФАКТСРОКЭК<>'' and num>0:состОС[i].ФАКТСРОКЭК=состОС[i].ФАКТСРОКЭК+' и ';fi;
--         if num>0:
--            состОС[i].ФАКТСРОКЭК=состОС[i].ФАКТСРОКЭК+str(num)+' мес.';
--         fi;
       fi;
       REC=SignToRecord(tmp, False);
       x=GetRecordNumber(ROинвк, REC);
       if ROинвк_харос=0:
         ROинвк_харос=OpenArray(ROинвк,x,'ХАРОС','');
       fi;
       num=records(ROинвк_харос);
       if num>0:
         clear_инвк_ХАРОС;
         for lN=1..num do
           GetFieldsVars(ROинвк_харос,lN,'',FieldToField0+FieldToField1);
           if ХАРОС_КОЛИЧ+ХАРОС_ДРАГМЕТ00+ХАРОС_ДРАГМЕТ01+ХАРОС_ДРАГМЕТ02+ХАРОС_ДРАГМЕТ03+ХАРОС_ДРАГМЕТ04+ХАРОС_ДРАГМЕТ04+ХАРОС_ДРАГМЕТ05+ХАРОС_ДРАГМЕТ06+ХАРОС_ДРАГМЕТ07+ХАРОС_ДРАГМЕТ08<>0 or
              ХАРОС_НАИМЕН_ПР+ХАРОС_ОСН+ХАРОС_ПРИСТР1+ХАРОС_ПРИСТР2+ХАРОС_ПРИСТР3+ХАРОС_ПРИСТР4+ХАРОС_НАИМЕН_ОБ+ХАРОС_НАИМЕН_ДРАГ+ХАРОС_ЕДИЗМ_ДРАГ+ХАРОС_ОКЕИ_ДРАГ<>'':
              pN=InsertFrame(харос,харос+1);
              харос[pN].НАИМОБ           =   ХАРОС_НАИМЕН_ПР  ;
--              харос[pN].КОЛ              =
--              харос[pN].ННДРАГМАТ        =
--              харос[pN].КОЛДРАГМАТ       =
--              харос[pN].ПРИМЕЧАНИЕ       =
--              харос[pN].НОМТЕХПАСП       =
--              харос[pN].НОМДВИГ          =
--              харос[pN].НОМШАССИ         =
--              харос[pN].ГРУЗОПОДЪЕМ      =
--              харос[pN].МАССАПОПАСП      =
              харос[pN].ДРАГМЕТ00        =   ХАРОС_ДРАГМЕТ00  ;
              харос[pN].ДРАГМЕТ01        =   ХАРОС_ДРАГМЕТ01  ;
              харос[pN].ДРАГМЕТ02        =   ХАРОС_ДРАГМЕТ02  ;
              харос[pN].ДРАГМЕТ03        =   ХАРОС_ДРАГМЕТ03  ;
              харос[pN].ДРАГМЕТ04        =   ХАРОС_ДРАГМЕТ04  ;
              харос[pN].ДРАГМЕТ05        =   ХАРОС_ДРАГМЕТ05  ;
              харос[pN].ДРАГМЕТ06        =   ХАРОС_ДРАГМЕТ06  ;
              харос[pN].ДРАГМЕТ07        =   ХАРОС_ДРАГМЕТ07  ;
              харос[pN].ДРАГМЕТ08        =   ХАРОС_ДРАГМЕТ08  ;
              харос[pN].ОБЪЕКТ0          =   str(i)+'. '+ХАРОС_ОСН        ;
              харос[pN].ОБЪЕКТ1          =   ХАРОС_ПРИСТР1    ;
              харос[pN].ОБЪЕКТ2          =   ХАРОС_ПРИСТР2    ;
              харос[pN].ОБЪЕКТ3          =   ХАРОС_ПРИСТР3    ;
              харос[pN].ОБЪЕКТ4          =   ХАРОС_ПРИСТР4    ;

              харос[pN].ОБЪЕКТДРАГМАТ    =   ХАРОС_НАИМЕН_ОБ  ;
              харос[pN].НАИМДРАГМАТ      =   ХАРОС_НАИМЕН_ДРАГ;
              харос[pN].ЕДИЗМДРАГМАТ     =   ХАРОС_ЕДИЗМ_ДРАГ ;
              харос[pN].ЕДИЗМДРАГМАТ_ОКЕИ=   ХАРОС_ОКЕИ_ДРАГ  ;
              харос[pN].МАССАДРАГМАТ     =   ХАРОС_КОЛИЧ      ;
           fi;
--           #НАИМОБ #ОБЪЕКТ0        #ОБЪЕКТ1        #ОБЪЕКТ2        #ОБЪЕКТ3        #ОБЪЕКТ4        #ОБЪЕКТДРАГМАТ  #НАИМДРАГМАТ    #ЕдИзмДрагМат   #ЕДИЗМДРАГМАТ_ОКЕИ      #МАССАДРАГМАТ
--         #НАИМЕН_ПР      #ОСН    #ПРИСТР1        #ПРИСТР2        #ПРИСТР3        #ПРИСТР4        #НАИМЕН_ОБ      #НАИМЕН_ДРАГ_   #ЕДИЗМ_ДРАГ     #ОКЕИ_ДРАГ      #КОЛИЧ
         od;
       fi;
     fi;
     if состОС[i].ДатаВвЭксп=1.1.100:
        dd=ВзятьДатуВводвЭксплуатЖурОст(СчНФА, КОДНФА, КОДИНВ, 1.1.100, dBT);
        состОС[i].ГодВыпуска=dd;
        состОС[i].ДатаВвЭксп=dd;
     fi;
     fi;
     REC=SignToRecord(КОДНФА, False);
     if REC<>NIL:
       x=GetRecordNumber(ROснфа, REC);
       num=GetFieldI(ROснфа, x, "КЛГРУПП");
       состОС[i].АМОРТГРУППА=num;
       состОС[i].СРОКНОВИСП=ВзятьСрокАмортГруппы(num);
       состОС[i].МЕТОДИЗНОСА="Линейный метод   (утвержден НК РФ)";
     fi;
     Sum1=0;
     if КОДИНВ<>'УЧН.ЗАБ':
        Sum1=Saldo(СчНФА+"{"+КОДНФА+"&"+КОДИНВ+"}", dBT);
        ddd=Раб.СТР.MinDebDat2(Раб.НФА.B01.ВзятьДУЧЕТ(КОДНФА,КОДИНВ),состОС[i].ДатаВвЭксп);
        if НФА_ИНВ_СУМ[i]/НФА_ИНВ_КОЛ[i]<Общ_Пер('ОС_100',ddd):
          состОС[i].МЕТОДИЗНОСА="100% начислено амортизации";
        fi;
      | true:Sum1=НФА_ИНВ_СУМ[i];
        состОС[i].НАИМЕНОС=состОС[i].НАИМЕНОС+' ('+str(НФА_ИНВ_КОЛ[i],Точность(КОДНФА))+'ед. - '+СчНФА+')';
        состОС[i].МЕТОДИЗНОСА="Не начисляется";
--      | true:Sum1=Round(НФА_ИНВ_СУМ[i]/НФА_ИНВ_КОЛ[i], 2);
     fi;
     состОС[i].БАЛАНССТОИМ=Sum1;
     состОС[i].ПОКСТОИМ=if(НФА_ИНВ_КОЛ[i]>0, Round(НФА_ИНВ_СУМ[i]/НФА_ИНВ_КОЛ[i], 2), 0);
     состОС[i].ПОКВСЕГО=НФА_ИНВ_СУМ[i];
--     состОС[i].ПОКВСЕГО=Round(состОС[i].ПОКСТОИМ*НФА_ИНВ_КОЛ[i], 2);
     tmp=Раб.НФА.B01.Соотв104поСЧНФА(СчНФА);
     if tmp<>"": Try Sum2=Abs(Saldo(tmp+"{"+КОДНФА+"&"+КОДИНВ+"}", dBT)); Except Sum2=0; end; else Sum2=0; fi;
     состОС[i].СУМНАЧАМОРТ=Sum2;
     состОС[i].ОСТСТОИМ=Abs(Sum1-Sum2);
     -- Заполняем акт КОНЕЦ
    fi;-- проверка ВИ
   od;
   y=Раб.ВСПОМ.ПОДПИСИ_СЕГОДНЯ.Get_Ном_РЕКВИЗИТ(if(Обновление='Расход','РЕКВИЗИТ_ИмяОтправитель','РЕКВИЗИТ_ИмяПолучатель'));
   rec=ВзятьКонтрагентаR('',true);
   ЗаписатьРеквизит(y,rec,'','');

   Подпись_OnValidateS(if(Обновление='Расход','Подпись_ФИОРУКотпр','Подпись_ФИОРУКучреж')            ,1,GetCardFieldS('КОНТРАГЕНТ',rec,'ФИОРУК'));
   Подпись_OnValidateS(if(Обновление='Расход','Подпись_ДолжностьРУКотпр','Подпись_ДолжностьРУКучреж'),1,GetCardFieldS('КОНТРАГЕНТ',rec,'ДОЛЖНРУК'));
   Подпись_OnValidateS(if(Обновление='Расход','Подпись_ФИОГлБухОтпр','Подпись_ФИОГлБух')             ,1,GetCardFieldS('КОНТРАГЕНТ',rec,'ФИОБУХ'));
   Подпись_OnValidateS(if(Обновление='Расход','Подпись_ДолжностьГлБухОтпр','Подпись_ДолжностьГлБух') ,1,GetCardFieldS('КОНТРАГЕНТ',rec,'ДОЛЖНБУХ'));

   РЕКВИЗИТ_OnValidateS('РЕКВИЗИТ_ИмяОтправительСтПодр',1,if(Name_A(Buf[1])<>"" and Name_A(Buf[1])<>" ", Name_A(Buf[1]), Buf[1]));
   РЕКВИЗИТ_OnValidateS('РЕКВИЗИТ_ИмяПолучательСтПодр' ,1,if(Name_A(Buf[2])<>"" and Name_A(Buf[2])<>" ", Name_A(Buf[2]), Buf[2]));
   j=Раб.ВСПОМ.ПОДПИСИ_СЕГОДНЯ.Get_Ном_РЕКВИЗИТ(if(Обновление<>'Расход','РЕКВИЗИТ_ИмяОтправитель','РЕКВИЗИТ_ИмяПолучатель'));
   if Buf[3]="": ЗаписатьРеквизит(j,nil,'','');
    | true: REC=ВзятьКонтрагентаR(Buf[3],false);
      ЗаписатьРеквизит(j,REC,'','');
      if rec=nil:
         РЕКВИЗИТ_OnValidateS(if(Обновление<>'Расход','РЕКВИЗИТ_ИмяОтправитель','РЕКВИЗИТ_ИмяПолучатель') ,1,if(Name_A(Buf[3])<>"" and Name_A(Buf[3])<>" ", Name_A(Buf[3]), Buf[3]));
      fi;
   fi;
   ДатаСписБух=dbt;
 Finally
   CloseProgress;
   CloseWorkArea(ROинвк);
   CloseWorkArea(ROснфа);
   CloseWorkArea(ROсотр);
   CloseWorkArea(ROднфа);
   if CrdWrk='РПО_НФА_СПРАВКА':
      CloseWorkArea(wa_control);
   fi;
   ToggleAutorefresh(Режим);
 end;
 ClearVariable(NN);
 ^True;
end;


Proc ПриНажатии(Sender: String);
var num :Numeric;
var j :i;
-- trace(Sender);
 if Sender='Книжная':-- выбор ориентации листа
    Книжная=not Книжная;
    exit;
 fi;
-- j=time;if УпрКлеткаКнопкаВремя>j:УпрКлеткаКнопкаВремя=0;fi;if j-УпрКлеткаКнопкаВремя<2:exit;fi; УпрКлеткаКнопкаВремя=time;

 if Sender='Расчет':
   ClearVariable(Buf);
   num=2;
--   Buf[1]="Приход основных средств";
--   Buf[2]="Расход основных средств";
--   Buf[3]="Выписанные извещения ЦС";
--   num=Alternate("Выберите действие...", Buf, -1, 1, 12);
   if num=1: if ОбновлениеАктовПриход: Message("Обновление акта (актов) на приход успешно завершено!", mtInformation);НАКЛНОМЕР='ОбновлениеАктовПриход';НАКЛДАТА=сегодня; fi;
   |  num=2: if ОбновлениеАктов('Расход'): Message("Обновление акта (актов) на расход успешно завершено!", mtInformation);НАКЛНОМЕР='ОбновлениеАктовРасход';НАКЛДАТА=сегодня; fi;

   else Exit;
   fi;
  | Sender='Печать':
    if СтрНач>0 or СтрКон>0:СтрВсе=2;
       if СтрНач=1 and СтрКон=0: СтрНач=0; СтрВсе=1; fi;
     | СтрНач<=0 and СтрКон<=0: СтрВсе=1;СтрНач=0;СтрКон=0;
    fi;
    ЗаполнитьРазрывыСтраниц(ВысотаЛиста);
    Print('',SaveCFG_Current(false,false), Тпринтер,Книжная,  СтрНач ,СтрКон,false);
--    РАБ.WSH.SetMenu_Print(АвтоМасштаб=Масштаб,Масштаб,СтрВсе,СтрНач,СтрКон,КолКопий,Книжная,true,'Timer10');
  | Sender='по ширине':
    j=time; while time=j do od;
    РАБ.WSH.CopyToBufer_AutoScale('Масштаб','I','Timer10',str(лп)+';'+str(пп)+';'+if(Книжная,'К','А'));
  | Sender='К':-- выбор принтера
      Sender=РАБ.WSH.ChoosePrinter(false,true);
      if Sender<>'':Тпринтер=Sender;fi;
  | Sender='L':-- Просмотр
    ЗаполнитьРазрывыСтраниц(ВысотаЛиста);
    Print('',SaveCFG_Current(false,false), Тпринтер,Книжная,  СтрНач ,СтрКон,true);
--    Print(ИмяБл: Строка [;ИмяФайлаНастроек: Строка [; ИмяПринтера : Строка  [; Книжн : Логич [; НачСтр : Целое [; КонСтр : Целое [; Просмотр : Логич  ] ] ] ] ] ] );
  | Sender='Закрыть':
    Close;
  | Sender='q': -- настройки по умолчанию
    НастройкиПечатиПоУмолчанию;
    Message('Восстановлены настройки по умолчанию.');
  | Sender='К документу':
    РАБ.НФА.FUNC_LIB.Перейти_к_ОперацинномуДокументу(CRD, BLNCRD, ДНФАID, RECCRD, GetActiveBlankName);
  | Sender='Т':-- сохранить настройки
    Sender=SaveCFG_Current(true,true);
    if pos('Ошибка',Sender)=1:Message(Sender,mtError);
     | true:
       СцУпрПечать.cell(3,43,CellFontColor,coBlack);
       Message('Текущие настройки сохранены успешно.');
    fi;
  | Sender='У':-- считать настройки
    Sender=ReadCFG_Current(true);
    if Sender<>'':Message(Sender,mtError);
     | true:
       СцУпрПечать.cell(3,43,CellFontColor,coBlack);
       Message('Сохраненные текущие настройки считаны успешно.');
    fi;
 fi;
 --   ЗаполнитьРазрывыСтраниц(ВысотаЛиста);-- книжная
end;
            -- Rpo_0504101_001
2-- События шаблона
Proc Template_OnOpen(Create:Logical); -- _При открытии шаблона
 EnableCommands(False, cmDublRec);
 РАБ.НФА.АКТЫ.Template_OnOpen(Create);
 First=True;
end;

Proc Template_AfterOpen(Create:Logical); -- при открытии шаблона
var tmp:s;
 if First: 
   Очистить;
 fi;
 First=False;
 tmp=ReadCFG_Current(true);
 if tmp<>'':-- ошибка при чтении последних настроек
    НастройкиПечатиПоУмолчанию;
 fi;
 СцУпрПечать.cell(3,43,CellFontColor,if(ExistFile(GetCFG_Current(true)),coBlack,coSilver));
end;

Proc Template_onClose(Destroy:Logical); -- _При закытии бланка
 Очистить;
 NewRECbln='';
end;
--
Proc Template_onRead; -- _При считывании шаблона
 if recCurrent<>nil:
    if recCurrent<>Current:
       recCurrent=Current(recCurrent);
    fi;
    recCurrent=nil;
 fi;

 РАБ.НФА.АКТЫ.Template_onRead;
 if First=False:
   Очистить;
 fi;
    ЗаполнитьРазрывыСтраниц(ВысотаЛиста);-- книжная
end;

Func Template_OnValidate: Logical; -- _При проверке шаблона
 -- Проверка на правильность заполнения
 ^True;
end;

Функ СчетУНФА_ПриПроверке(Поле: Строка; Итер: Целое; Знач: s):l;
  СчетУНФА=Знач;
  Возврат true ;
end;





Proc Cell_ADD (RowN: i; ColN: i; click2: l);  РАБ.WSH.sendkeys('%({INSERT})'); end;
Proc Cell_DEL (RowN: i; ColN: i; click2: l);  РАБ.WSH.sendkeys('%({DEL})');    end;
Proc Cell_UP  (RowN: i; ColN: i; click2: l);  РАБ.WSH.sendkeys('%({UP})');     end;
Proc Cell_DOWN(RowN: i; ColN: i; click2: l);  РАБ.WSH.sendkeys('%({DOWN})');   end;

Proc data_Cell_ПриНажатии(RowN: i; ColN: i; click2: l);
 if ColN<2:exit;fi;
 шаблон.Column=ColN-1;
 РАБ.WSH.sendkeys('%({F})');-- открываем календарь на клетке слева от текущей
end;

func TAB_ПриВставке(ИмяСекции:s):l;^true;end;
func TAB_ПриУдалении(ИмяСекции:s;it:i):l;^true;end;
Proc TAB_ПослеУдаления(ИмяСекции:s);end;
Proc TAB_ПослеВставки(ИмяСекции:s;it:i);end;


Проц Приложения_Cell_ПриНажатии(Стр: Целое; Кол: Целое; Двойной: Логич);
 if СТРПРИЛ<1:insertframe(СТРПРИЛ,1);fi;
 СТРПРИЛ[1].ПРИЛОЖЕНИЕ='Копии инвентарных карточек в количестве _______ штук  на  _____  листах';
end;



Функ Вал_ПриОбзоре(Сек: Строка; Стр: Целое; Столб: Целое; Тек: Строка): Строка;
  Шаблон.HideEditor(False);
  ВыбратьВалюту;
  ^Тек  ;
end;

Функ ВАЛКУРС_ПриОбзоре(Сек: Строка; Стр: Целое; Столб: Целое; Тек: Строка): Строка;
  Шаблон.HideEditor(False);
  ВыбратьВалюту;
  ^Тек  ;
end;


func Cell_CheckBox(Поле: Строка; Итер: Целое): Логич;
  PutVariableL(Поле,not GetVariableL(Поле));
  ^false  ;
end;


Proc УпрКлетка_ПриНажатии(RowN: i; ColN: i; click2: l);
 var сц:Объект;
 var j:i;
-- j=time; while time=j do od;
-- j=time; if УпрКлеткаКнопкаВремя>j or j-УпрКлеткаКнопкаВремя<1: УпрКлеткаКнопкаВремя=time; exit; fi;

 if AsLogical(Timer10.Active):exit;fi;
-- j=time; while time=j do od;
 if FindObject(AsString(Шаблон.Name),сц):
    ПриНажатии(AsString(сц.cell(RowN,ColN,CellContents,'',false)));
 fi;
-- УпрКлеткаКнопкаВремя=time;
end;

func GetCellContents(Шаблон_Name: s; RowN: i; ColN: i):s;
 var сц:Объект;
 if FindObject(AsString(Шаблон.Name),сц):
    ^AsString(сц.cell(RowN,ColN,CellContents,'',false));
 fi;
 ^'';
end;

Proc Cell_ADD_Val(Шаблон_Name:s; RowN:i; ColN:i; val:i; minval:i; maxval:i);
 var field:s;
 var res:i;
     field=GetCellContents(Шаблон_Name,RowN,ColN);
     if field='':exit;fi;
     res=GetVariableI(field)+val;
     res=max(minval,res);
     res=min(maxval,res);
     PutVariableI(field,res);
end;
Proc Cell_DEL_Print(RowN: i; ColN: i; click2: l); Cell_ADD_Val(AsString(Шаблон.Name),RowN,ColN+1,-1,1,999);end;
Proc Cell_ADD_Print(RowN: i; ColN: i; click2: l); Cell_ADD_Val(AsString(Шаблон.Name),RowN,ColN-1,+1,1,999);end;

func GetServFilter(ИМЯКРТ:s):s;
var res:s;
var wa:i;
     wa=OpenWorkArea(ИМЯКРТ,'','1=1) and not ukey<>(2');  --  в случае наличия доп фильтра на сервере получаем:  (1=0) and (1=0) and (фильтрсервера)
     CloseWorkArea(wa);
--  if ExistsCardFile(ИМЯКРТ):
--    try
----     wa=OpenWorkArea(ИМЯКРТ,'','1=0) and ({1}={ukey}');  --  в случае наличия доп фильтра на сервере получаем:  (1=0) and (1=0) and (фильтрсервера)
----     wa=OpenWorkArea(ИМЯКРТ,'','1=0) and (1=0');  --  в случае наличия доп фильтра на сервере получаем:  (1=0) and (1=0) and (фильтрсервера)
--     wa=OpenWorkArea(ИМЯКРТ,'','1/0)>0 and (1=0');  --  в случае наличия доп фильтра на сервере получаем:  (1=0) and (1=0) and (фильтрсервера)
--     CloseWorkArea(wa);
--      res=' ';
--    except
--    Message(Format('Сообщение: %s^MКод: %d', ErrorMessage, ErrorCode), mtError);
--      res='';  -- нет доп фильтра, получаем неправльный фильрт: 1=0) and (1=0
--      Raise;
--    end;
--  fi;
  ^res;
end;

Proc Кнопка1_ПриНажатии(ss: Строка);
 var wa:i;
 GetServFilter('БХР_НФА');
--     wa=OpenWorkArea('РПО_АКТЫ_УНФА','','1=0) and ({1}={ukey}');  --  в случае наличия доп фильтра на сервере получаем:  (1=0) and (1=0) and (фильтрсервера)
--     CloseWorkArea(wa);

-- message(РАБ.SQL.GetServFilter('РПО_АКТЫ_УНФА'));
--    РАБ.WSH.CopyToBufer_Field('ЛП,ПП,ВП,НП,масштаб','I','Timer10');
end;

Proc OnTimerSendKey(Timer: S);
  РАБ.WSH.OnTimerSendKey(Timer);
end;

Func ФорматЛиста_OnEnter(FieldName: String; Iter: Integer): logical;
  Книжная=not Книжная;
  ^false;
end;
Func БумНомер_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var jj:i;
     jj=LastNumCard(SelfCRD, "НОМЕРАКТА,БУМНОМЕР")+1;
     if jj<1:^'';fi;
     ^str(jj);
end;


КОНЕЦ