БЛАНКСШАБЛОНОМ[07.11.2005] "Акт о списании объекта ОС", РЕДАКТОР РПО_Акты_УНФА;
-- Редакция ЗАО "Агентство 'Русспромоценка'"
2-- Переменные
СекСтрЦель        :Section;
СекСостОС         :Section;
СекХарОС          :Section;
СекСтрЗАК         :Section;
СекСтрТехДок      :Section;
СекЗатрСписан     :Section;
СекСтрИзмХар      :Section;
СекСТРДРХАР       :Section;
секПРИНЯТЬДЕТАЛИ  :Section;
var МаскаСчОС     :S="*.?.101.??!";
var МаскаСчМат    :S="*.?.105.??!";
var recCurrent:record;
var NewREC        :L=(CurrentState=crdusInserted);
var IterSender    :I;
var FieldSender   :S;
var Buf[]         :S;
var A1            :S="+";
var A2            :S="+";
var A3            :S="+";
var A4            :S="+";
var A5            :S="+";
var A6            :S="+";
var A7            :S="+";
var A8            :S="+";
var A9            :S="+";
var D1            :S="-";
var D2            :S="-";
var D3            :S="-";
var D4            :S="-";
var D5            :S="-";
var D6            :S="-";
var D7            :S="-";
var D8            :S="-";
var D9            :S="-";
var Всего[]       :N=Round(ЗатрСписан[$].Колич*ЗатрСписан[$].Цена, 2);
var ДемИтог       :N=SumOfArray(ЗатрСписан[].ДемЗатраты);
var МатИтог       :N=SumOfArray(Всего, ЗатрСписан);
var СтрВыруч      :S=if(НаклСумма>0, Slo(НаклСумма), "");
2var БланкИмя:S;
2var КлассФормыДок :S;
2var КодФормыДок   :S0='0306003';

var BufI[]         :Integer;
var МаскаСЧД       :String="(*.101.1?.*|*.101.?4*|*.101.?5*|*.101.?6*|*.101.?8*)&(???.????.???????.???.?.101.??.310|ЗАБ.??.101.??)|???.????.???????.???.?.102.30.320|???.??.??.??.??.??.????.?.103.1?.330";
var МаскаСЧК       :String="(*.101.1?.*|*.101.?4*|*.101.?5*|*.101.?6*|*.101.?8*)&(???.????.???????.???.?.101.??.410|ЗАБ.??.101.??)|???.????.???????.???.?.102.30.420|???.??.??.??.??.??.????.?.103.1?.430";

var УТВЕРЖДАЮ_ПОЛОЖЕНИЕ_ВЕРХ    :l=ВИДДОП1>0 and ВИДДОП1<3;
var УТВЕРЖДАЮ_ПОЛОЖЕНИЕ_СТАНДАРТ:l=ВИДДОП1=0;
var УТВЕРЖДАЮ2_ПОЛОЖЕНИЕ_ВЕРХ   :l=ВИДДОП1=2;
var УТВЕРЖДАЮ3_ПОЛОЖЕНИЕ_ВЕРХ   :l=ВИДДОП1>2;
var УТВЕРЖДАЮ_ПОЛОЖЕНИЕ_НИЗ     :l=ВИДДОП1>2;

--var КлассФормыДок :S="ОКУД_";
--var КодФормыДок   :S="0306003";

NewRECbln         :S;

btnPrev :Object; btnNext :Object; btnAll :Object;

var ВниманиеСТР    :String;
ВниманиеОбъект     :Object;
var First          :Logical;
ВниманиеНапоминать :Logical;
КнРасчет           :Object;
--
var УслДЕБ[]       :String;
var УслКРЕ[]       :String;
var УслАНА[]       :String;
var ДебНФА[]       :Logical;
var НФА_ИНВ_OP[]   :String;
var НФА_ИНВ_RO[]   :String;
var ДОПАНА[]       :String;
var ИНВ_MSK[]      :String;
var ИНВ_INI[]      :String;
var ИНВ_NUM[]      :Integer;

func срок(dd1:d;dd2:d):s;
 var yy,mm:i;
     yy=year(dd2)-year(dd1);
     mm=Mon(dd2)-Mon(dd1);
     if yy=0 and mm=0:^'';fi;
     if mm<0:mm=mm+12;yy=yy-1;fi;
     if yy<0 or mm<0:^'';fi;
     ^format('%d лет %d мес',yy,mm);
end;
func Выбор_срок(dd2:d):d;
 var yy,mm,z:i;
 var dd1,dd:d;
 var ss:s;
     dd1=1.1.1900;
     yy=year(dd2)-year(dd1);
     mm=Mon(dd2)-Mon(dd1);
     if yy<0:mm=0;yy=0;fi;
     if mm<0:mm=mm+12;yy=yy-1;fi;
     ss='лет:'+str(yy)+'      мес:'+str(mm);
     z=Вопрос('Выбор срока',ss,'да;лет:+1;лет:-1;мес:+1;мес:-1;лет:+10;лет:-10',mtConfirmation);
     while z>1 do
       if z=2:yy=yy+1;
        | z=3:yy=yy-1;
        | z=4:mm=mm+1;
        | z=5:mm=mm-1;
        | z=6:yy=yy+10;
        | z=7:yy=yy-10;
       fi;
       if yy<0:yy=0;fi;
       if mm<0:yy=yy-1;mm=mm+12;fi;
       if yy<0:yy=yy+1;mm=0;fi;
       if mm>11:mm=mm-12;yy=yy+1;fi;
       ss='лет:'+str(yy)+'      мес:'+str(mm);
       z=Вопрос('Выбор срока',ss,'да;лет:+1;лет:-1;мес:+1;мес:-1;лет:+10;лет:-10',mtConfirmation);
     od;
     dd=Dat(1,mm+1,1900+yy);
--     if yy=0 and mm=0:^'';fi;
--     if mm<0:mm=mm+12;yy=yy-1;fi;
--     if yy<0 or mm<0:^'';fi;
  ^dd;
end;
--состОС
var ДАТНАЧСТР_[]:s=срок(01.01.1900,состОС[$].ДАТНАЧСТР);

var ДАТКОНСТР_ []:s=срок(01.01.1900,состОС[$].ДАТКОНСТР );
var ДАТМОДЕР_  []:s=срок(01.01.1900,состОС[$].ДАТМОДЕР  );
var ДАТАСУЧГАИ_[]:s=срок(01.01.1900,состОС[$].ДАТАСУЧГАИ);
var ДАТАКАПРЕМ_[]:s=срок(01.01.1900,состОС[$].ДАТАКАПРЕМ);
var Сумма3[]:n=ПРИНЯТЬДЕТАЛИ[$].КОЛИЧ*ПРИНЯТЬДЕТАЛИ[$].ЦЕНА;
var nn[]:i=$;



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

Proc ДобавитьУдалитьСтроки(Field:S; Iter:I; fADD:L);
var nSec :I;
 nSec=Int(SubStr(Field, 2, 1));
 if fADD:
   if nSec=1: InsertFrame(стрЦель   , Iter+1);
   |  nSec=2: InsertFrame(состОС    , Iter+1);
   |  nSec=3: InsertFrame(ХарОС     , Iter+1);
   |  nSec=4: InsertFrame(стрЗАК    , Iter+1);
   |  nSec=5: InsertFrame(стрТехДок , Iter+1);
   |  nSec=6: InsertFrame(ЗатрСписан, Iter+1);
   |  nSec=7: InsertFrame(стрИзмХар , Iter+1);
   |  nSec=8: InsertFrame(СТРДРХАР  , Iter+1);
   |  nSec=9: InsertFrame(ПРИНЯТЬДЕТАЛИ  , Iter+1);
   fi;
 else
   if nSec=1: if стрЦель   >1: DeleteFrame(стрЦель   , Iter); else DeleteFrame(стрЦель   , Iter); InsertFrame(стрЦель   , Iter); fi;
   |  nSec=2: if состОС    >1: DeleteFrame(состОС    , Iter); else DeleteFrame(состОС    , Iter); InsertFrame(состОС    , Iter); fi;
   |  nSec=3: if ХарОС     >1: DeleteFrame(ХарОС     , Iter); else DeleteFrame(ХарОС     , Iter); InsertFrame(ХарОС     , Iter); fi;
   |  nSec=4: if стрЗАК    >1: DeleteFrame(стрЗАК    , Iter); else DeleteFrame(стрЗАК    , Iter); InsertFrame(стрЗАК    , Iter); fi;
   |  nSec=5: if стрТехДок >1: DeleteFrame(стрТехДок , Iter); else DeleteFrame(стрТехДок , Iter); InsertFrame(стрТехДок , Iter); fi;
   |  nSec=6: if ЗатрСписан>1: DeleteFrame(ЗатрСписан, Iter); else DeleteFrame(ЗатрСписан, Iter); InsertFrame(ЗатрСписан, Iter); fi;
   |  nSec=7: if стрИзмХар >1: DeleteFrame(стрИзмХар , Iter); else DeleteFrame(стрИзмХар , Iter); InsertFrame(стрИзмХар , Iter); fi;
   |  nSec=8: if СТРДРХАР  >1: DeleteFrame(СТРДРХАР  , Iter); else DeleteFrame(СТРДРХАР  , Iter); InsertFrame(СТРДРХАР  , Iter); fi;
   |  nSec=9: if ПРИНЯТЬДЕТАЛИ  >1: DeleteFrame(ПРИНЯТЬДЕТАЛИ  , Iter); else DeleteFrame(ПРИНЯТЬДЕТАЛИ  , Iter); InsertFrame(ПРИНЯТЬДЕТАЛИ  , Iter); fi;
   fi;
 fi;
end;

Proc НачальнаяИтерация;
 if стрЦель   <1: InsertFrame(стрЦель   , 1); fi;
 if состОС    <1: InsertFrame(состОС    , 1); fi;
 if ХарОС     <1: InsertFrame(ХарОС     , 1); fi;
 if стрЗАК    <1: InsertFrame(стрЗАК    , 1); fi;
 if стрТехДок <1: InsertFrame(стрТехДок , 1); fi;
 if ЗатрСписан<1: InsertFrame(ЗатрСписан, 1); fi;
 if стрИзмХар <1: InsertFrame(стрИзмХар , 1); fi;
 if СТРДРХАР  <1: InsertFrame(СТРДРХАР  , 1); fi;
 if ПРИНЯТЬДЕТАЛИ  <1: InsertFrame(ПРИНЯТЬДЕТАЛИ  , 1); fi;
end;

Func НомерТекущейСекции :I;
var Name :S;
 Name=asString(Template.Name);
 if Name="СекСтрЦель"    : ^1;
 |  Name="СекСостОС"     : ^2;
 |  Name="СекХарОС"      : ^3;
 |  Name="СекСтрЗАК"     : ^4;
 |  Name="СекСтрТехДок"  : ^5;
 |  Name="СекЗатрСписан" : ^6;
 |  Name="СекСтрИзмХар"  : ^7;
 |  Name="СекСТРДРХАР"   : ^8;
 |  Name="секПРИНЯТЬДЕТАЛИ": ^9;
 else ^0;
 fi;
end;

Proc УдалитьПустыеСтроки(НТС:I);
var n :I;
 n=1;
 if НТС=1:
   while n<=стрЦель    do if    стрЦель[n].Цель=""       : Try DeleteFrame(стрЦель   , n); Except end; else n=n+1; fi; od;
 |  НТС=2:
   while n<=состОС     do if     состОС[n].НаименОС=""   : Try DeleteFrame(состОС    , n); Except end; else n=n+1; fi; od;
 |  НТС=3:
   while n<=ХарОС      do if      ХарОС[n].НаимОБ=""     : Try DeleteFrame(ХарОС     , n); Except end; else n=n+1; fi; od;
 |  НТС=4:
   while n<=стрЗАК     do if     стрЗАК[n].Заключение="" : Try DeleteFrame(стрЗАК    , n); Except end; else n=n+1; fi; od;
 |  НТС=5:
   while n<=стрТехДок  do if  стрТехДок[n].ПрилТехДок="" : Try DeleteFrame(стрТехДок , n); Except end; else n=n+1; fi; od;
 |  НТС=6:
   while n<=ЗатрСписан do if ЗатрСписан[n].НаимМатер="" and
                             ЗатрСписан[n].ДемЗатраты=0  : Try DeleteFrame(ЗатрСписан, n); Except end; else n=n+1; fi; od;
 |  НТС=7:
   while n<=стрИзмХар  do if  стрИзмХар[n].ИзмХаракт=""  : Try DeleteFrame(стрИзмХар , n); Except end; else n=n+1; fi; od;
 |  НТС=8:
   while n<=СТРДРХАР   do if   СТРДРХАР[n].ДРУГХАР=""    : Try DeleteFrame(СТРДРХАР  , n); Except end; else n=n+1; fi; od;
 fi;
 Template.Frame=1;
end;

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

Func GetDate(Iter:I) :D;  -- считываем в заданном поле дату
var NameField :S;
 NameField=AsString(Template.Field);
 if NameField="ДатаСписБух" : ^ДатаСписБух;
 |  NameField="ДатаДокОсн"  : ^ДатаДокОсн;
 |  NameField="ДатаАкта"    : ^ДатаАкта;
 |  NameField="ДатаПодРУК"  : ^ДатаПодРУК;
 |  NameField="ДатаПринБух" : ^(состОС[Iter].ДатаПринБух);
 fi;
end;

Proc SetDate(Value:D; Iter:I);
-- устанавливаем в заданном поле дату; Value - значение даты, которое необходимо присвоить
var NameField :S;
 NameField=AsString(Template.Field);
 if NameField="ДатаСписБух" :              ДатаСписБух=Value;
 |  NameField="ДатаДокОсн"  :               ДатаДокОсн=Value;
 |  NameField="ДатаАкта"    :                 ДатаАкта=Value;
 |  NameField="ДатаПодРУК"  :               ДатаПодРУК=Value;
 |  NameField="ДатаПринБух" : состОС[Iter].ДатаПринБух=Value;
 |  NameField="ДАТАВВЭКСП"  : состОС[Iter].ДАТАВВЭКСП =Value;
 fi;
end;

Proc ВыборКонтрагента(МЫ:L; РО:L; REC:Record);
--   МЫ - собственные реквизиты
--   РО - выбор контрагента через рабочую область
--  REC - если РО=True, то в REC ссылка на контрагента, иначе REC=NIL
var ОРГАН, ОКПО :S;
var RO  :I;
 ОРГАН=""; ОКПО="";
 if not(РО):
   REC=NIL;
   if МЫ:
     REC=OpenCardFile("Контрагент", "Наше=True and GroupAttr=0", NIL, crdRecordOnly);
   else
     REC=OpenCardFile("Контрагент", "Наше=False", NIL, crdRecordOnly);
   fi;
 fi;
 if REC<>NIL:
   -- Реквизиты контрагента
   RO=OpenWorkArea("Контрагент", "", "UKey="+RecordToString(REC));
   Try
     if Records(RO)=1: ОРГАН=GetFieldS(RO, 1, "КОРИМЯ"); ОКПО=GetFieldS(RO, 1, "ОКПО"); fi;
   Finally
     CloseWorkArea(RO);
   end;
 fi;
 Учреждение=ОРГАН; ОКПОучреж=ОКПО;
end;

Proc ВыборКомиссии;
var REC :Record;
var RO, OA, Num, i  :I;
 REC=OpenCardFile("Комиссия", "", NIL, crdRecordOnly);
 if REC<>NIL:
   ClearVariable(Комиссия);
   RO=OpenWorkArea("Комиссия", "", "UKey="+RecordToString(REC));
   Try
     if Records(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 СчитатьСрок(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].СрокПолИсп;
 |  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;
 |  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.ИмяБланка="НФА.ДОКУМЕНТЫ.АКТЫ.ОКУД_0306001";
 РАБ.НФА.FUNC_LIB.ИмяБланка=GetActiveBlankName;
 OpenBlank("РАБ.ВСПОМ.ПРОМЕЖУТОКВРЕМЕНИ", True);
 УстановитьСрок(Field, Iter, РАБ.НФА.FUNC_LIB.TempSTR[1]);
 ClearVariable(РАБ.НФА.FUNC_LIB.TempSTR); ClearVariable(РАБ.НФА.FUNC_LIB.ИмяБланка);
end;

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


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

   УслДЕБ[1] = "(*.?.101.?4.310|*.?.101.?5.310|*.?.101.?6.310|*.?.101.?8.310)&???.????.???????.???.?.???.??.???";
   УслКРЕ[1] ="(*.304.04.310|*.106.?1.310)&???.????.???????.???.?.???.??.???|00|(*.14?|*.15?|*.180)&???.?.??.?????.??.????.?.401.10.???";
   УслАНА[1] = "";
   ДебНФА[1] = True;

   УслДЕБ[2] = "???.????.???????.???.?.102.?1.320";
   УслКРЕ[2] ="(*.304.04.320|*.106.32.?20)&???.????.???????.???.?.???.??.???|00|(*.14?|*.15?|*.180)&???.?.??.?????.??.????.?.401.10.???";
   УслАНА[2] = "";
   ДебНФА[2] = True;

   УслДЕБ[3] = "???.??.??.??.??.??.????.?.103.??.330";
   УслКРЕ[3] = "???.??.??.??.??.??.????.?.106.33.?30|00";
   УслАНА[3] = "";
   ДебНФА[3] = True;

   УслДЕБ[4] = "ЗАБ.??.101.?4|ЗАБ.??.101.?5|ЗАБ.??.101.?6|ЗАБ.??.101.?8";
   УслКРЕ[4] = "ЗАБАЛАНС";
   УслАНА[4] = "";
   ДебНФА[4] = True;

 else

   УслДЕБ[1] = "(???.????.???????.???.?.???.??.???&(*.304.04.310|*.106.34.340|*.104.??.410|*2.109.??.271|*.401.2?.24?|*.401.2?.25?|*.401.2?.27?))|(???.?.??.?????.??.????.?.???.??.???&(*.401.1?.17?|*.401.1?.180))";
   УслКРЕ[1] = "(*.?.101.1?.410|*.?.101.?4.410|*.?.101.?5.410|*.?.101.?6.410|*.?.101.?8.410)&???.????.???????.???.?.???.??.???";
   УслАНА[1] = "";
   ДебНФА[1] = False;

   УслДЕБ[2] = "(???.????.???????.???.?.???.??.???&(*.304.04.320|*.104.??.420|*.401.2?.24?|*.401.2?.25?|*.401.2?.27?))|(???.?.??.?????.??.????.?.???.??.???&(*.401.1?.17?|*.401.1?.180))";
   УслКРЕ[2] = "???.????.???????.???.?.102.??.420";
   УслАНА[2] = "";
   ДебНФА[2] = False;

   УслДЕБ[3] = "(???.????.???????.???.?.???.??.???&(*.?.401.2?.24?|*.?.401.2?.25?|*.?.401.2?.27?))|(???.??.??.??.??.??.????.?.???.??.???&(*.?.401.1?.17?|*.?.401.1?.180))";
   УслКРЕ[3] = "???.??.??.??.??.??.????.?.103.??.430";
   УслАНА[3] = "";
   ДебНФА[3] = False;

   УслДЕБ[4] = "ЗАБАЛАНС";
   УслКРЕ[4] = "ЗАБ.??.101.?4|ЗАБ.??.101.?5|ЗАБ.??.101.?6|ЗАБ.??.101.?8";
   УслАНА[4] = "";
   ДебНФА[4] = False;

 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;
var RO, num, res :Integer;
 res=0;
 RO=OpenWorkArea(Card, Field);
 Try
   num=Records(RO);
   res=if(num>0, GetFieldI(RO, num, Field), 0);
 Finally
   CloseWorkArea(RO);
 end;
 ^res;
end;

2-- Обработчики событий полей, объектов и шаблона
2-- События полей
Func Field_onEnter(Field:S; Iter:I) :L;
var n :I;
var tmp :S;
 FieldSender=Field;
 IterSender=Iter;
 if Match(Field, 'A?'): ДобавитьУдалитьСтроки(Field, Iter, True) ; ^False;
 |  Match(Field, 'D?'): ДобавитьУдалитьСтроки(Field, Iter, False); ^False;
 fi;
 if Field="Учреждение"  or Field="ОКПОучреж"
                         : n=0; ClearVariable(Buf);
                           Buf[1]='"Собственные" реквизиты'; 
                           Buf[2]='Сторонние организации';
                           n=Alternate("Выберите тип контрагента", Buf, -1);
                           if n<>0: ВыборКонтрагента(if(n=1, True, False), False, NIL); fi;
                           ^False;
 |  Field="ВидДокОсн"    : n=0; ClearVariable(Buf);
                           Buf[1]="Приказ      ";
                           Buf[2]="Распоряжение"; 
                           n=Alternate("Выберите основание для составления акта", Buf, -1);
                           if n<>0: ВидДокОсн=n; fi;
                           ^False;
 |  Field="ГодВыпуска"   : состОС[Iter].ГодВыпуска=ВыборДаты(состОС[Iter].ГодВыпуска); ^False;
 |  Field="ФактСрокЭк"   : Сроки(Field, Iter); ^False;
 |  Field="ДолПредКом" or Field="ФИОПредКом"
                         : ВыборКомиссии; ^False;
 |  Field="ДемСчДеб"
                         : if ЗатрСписан[Iter].ДемСчКре="" :
                             tmp=AccountElection(МаскаСчОС);
                           else
                             tmp=PickCorrAccount(ЗатрСписан[Iter].ДемСчКре, True);
                           fi;
                           if tmp="": ^False; fi;
                           ЗатрСписан[Iter].ДемСчДеб=tmp;
                           ^False;
 |  Field="ДемСчКре"
                         : if ЗатрСписан[Iter].ДемСчДеб="" :
                             tmp=AccountElection(МаскаСчОС);
                           else
                             tmp=PickCorrAccount(ЗатрСписан[Iter].ДемСчДеб, False);
                           fi;
                           if tmp="": ^False; fi;
                           ЗатрСписан[Iter].ДемСчКре=tmp;
                           ^False;
 |  Field="СписСчДеб"
                         : if ЗатрСписан[Iter].СписСчКре="" :
                             tmp=AccountElection(МаскаСчМат);
                           else
                             tmp=PickCorrAccount(ЗатрСписан[Iter].СписСчКре, True);
                           fi;
                           if tmp="": ^False; fi;
                           ЗатрСписан[Iter].СписСчДеб=tmp;
                           ^False;
 |  Field="СписСчКре"
                         : if ЗатрСписан[Iter].СписСчДеб="" :
                             tmp=AccountElection(МаскаСчМат);
                           else
                             tmp=PickCorrAccount(ЗатрСписан[Iter].СписСчДеб, False);
                           fi;
                           if tmp="": ^False; fi;
                           ЗатрСписан[Iter].СписСчКре=tmp;
                           ^False;
 fi;
 ^True;
end;

Proc Field_onExit(Field:S; Iter:I);
 if Field="Учреждение"  or Field="ОКПОучреж"                       :
   if Учреждение="" : ОКПОучреж=""; fi;
 |  Field="ДолПредКом"                                             :
   if ДолПредКом="" : ФИОПредКом=""; ClearVariable(Комиссия); fi;
 |  Field="ФИОПредКом"                                             :
   if ФИОПредКом="" : ДолПредКом=""; ClearVariable(Комиссия); fi;
 fi;
end;

Func Field_OnValidateN(Field:S; Iter:I; Value:N): L;
 if Value<0 : Message('Нельзя вводить отрицательное число.'); ^False; fi;
 ^True;
end;

Func Field_OnValidateI(Field:S; Iter:I; Value:I): L;
 if Value<0 : Message('Нельзя вводить отрицательное число.'); ^False; fi;
 ^True;
end;

Func Дата_OnLookup(Sect:S; Row:I; Col:I; Cur:S): S;
var dd   :D;
var Iter :I;
 Template.HideEditor(False);
 Iter=IterSender;
 dd=ВыборДаты(GetDate(Iter));
 SetDate(dd, Iter);
 ^"";
end;

--Func Calc_OnLookup(Sect:S; Row:I; Col:I; Cur:S): S;
--var A    :N;
--var Iter :I;
-- Template.HideEditor(False);
-- Iter=IterSender;
-- A=Calculator(StringToNumeric(Cur));
-- if AsString(Template.Field)="Сум_Заявки" : Сум_Заявки=A;
-- |  AsString(Template.Field)="Сумма"      : Позиции[Iter].Сумма=A; Сум_Заявки=Итого;
-- fi;
-- ^"";
--end;

Func Сотрудники_onLookup(Sect:S; Row:I; Col:I; Cur:S): S;
var REC :Record;
var стрФИО, стрДОЛ, стрТАБ:S;
 Template.HideEditor(False);
 REC=OpenCardFile("Сотрудники");
 if REC=NIL: ^Cur; fi;
 стрФИО=GetCardFieldS("Сотрудники", REC, "ФАМИЛИЯ")+" "+GetCardFieldS("Сотрудники", REC, "ИНИЦИАЛЫ");
 стрТАБ=GetCardFieldS("Сотрудники", REC, "ПРИЗНАК");
 REC=GetCardFieldR("Сотрудники", REC, "ДОЛЖНОСТЬ");
 if REC<>NIL: стрДОЛ=GetCardFieldS("Должности", REC, "ДОЛЖ"); else  стрДОЛ=""; fi;
 if FieldSender="МОЛ"          :         МОЛ =стрФИО;                       ТабНомМОЛ=стрТАБ;
 |  FieldSender="ТабНомМОЛ"    :         МОЛ =стрФИО;                       ТабНомМОЛ=стрТАБ;
 |  FieldSender="ДолжнРУКучреж": ФИОРУКучреж =стрФИО; ДолжнРУКучреж=стрДОЛ;
 |  FieldSender="ФИОРУКучреж"  : ФИОРУКучреж =стрФИО; ДолжнРУКучреж=стрДОЛ;
 |  FieldSender="ФИОГлБухПрин" : ФИОГлБухПрин=стрФИО;
 |  FieldSender="ДОЛЖНМОЛСДАЛ" : ФИОМОЛСДАЛ  =стрФИО; ДОЛЖНМОЛСДАЛ=стрДОЛ;
 |  FieldSender="ФИОМОЛСДАЛ"   : ФИОМОЛСДАЛ  =стрФИО; ДОЛЖНМОЛСДАЛ=стрДОЛ;
 |  FieldSender="ФИОРУКИСПОЛ"   : ФИОРУКИСПОЛ  =стрФИО; ДОЛЖНРУКИСПОЛ=стрДОЛ;
 |  FieldSender="ДОЛЖНРУКИСПОЛ"   : ФИОРУКИСПОЛ  =стрФИО; ДОЛЖНРУКИСПОЛ=стрДОЛ;
 |  FieldSender="ДОЛДОП1" or FieldSender="ФИОДОП1": ФИОДОП1=стрФИО; ДОЛДОП1=стрДОЛ;
 |  FieldSender="ДОЛДОП2" or FieldSender="ФИОДОП2": ФИОДОП2=стрФИО; ДОЛДОП2=стрДОЛ;
 |  FieldSender="ДОЛДОП3" or FieldSender="ФИОДОП3": ФИОДОП3=стрФИО; ДОЛДОП3=стрДОЛ;
 fi;
 ^"";
end;

Func ПО_onLookup(Sect:S; Row:I; Col:I; Cur:S): S;
var кодПО, наимПО, tmp :S;
 Template.HideEditor(False);
 tmp=AnaElection("П!"); if tmp="": ^Cur; fi;
 кодПО=tmp; НаимПО=if(Name_A(кодПО)<>"" and Name_A(кодПО)<>" ", Name_A(кодПО), кодПО);
 if FieldSender="ПОучреж"     :      ПОучреж=наимПО; КодПОучреж=кодПО;
 |  FieldSender="КодПОучреж"  :      ПОучреж=наимПО; КодПОучреж=кодПО;
 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 ВзятьСчетАморт(СЧНФА:String; Приход:Logical) :String;
var tmp :String;
 if Match(СЧНФА, "???.????.???????.???.?.???.??.???")=False: ^""; fi;
 tmp=SubStr(СЧНФА, 24, 3);
 if tmp="101": if Name_S(SubStr(СЧНФА, 1, 30)+if(Приход, "310", "410"))=" ": ^""; fi;
 |  tmp="102": if Name_S(SubStr(СЧНФА, 1, 30)+if(Приход, "320", "420"))=" ": ^""; fi;
 fi;
 if tmp="101":tmp=SubStr(СЧНФА, 28, 2);^"*.104."+tmp+".410";

  | tmp="102":tmp=SubStr(СЧНФА, 28, 2);^"*.104.39.420";
 fi;
 ^"";
end;


Func ОбновлениеАктовРасход :Logical;
var REC, StoreREC :Record;
var dBT, dET, dd, dVV :Date;
var ROднфа, ROакты, ROсотр, ROснфа, ROинвк, OA, num, len, k, y, x, z, j, i, h :Integer;
var nK, nY, pN, lN, LastNum, LastNumИНВ, ДНФАIDstore :Integer;
var SumTrans, SumTran2, KolTrans, Цена :Numeric;
var CRDднфа, CRDакты, CRDсотр, CRDснфа, CRDинвк, ANA, УслПР, КОДНФА, КОДИНВ, СЧНФА, tmp, tmp2, tmp3, v1, ВЕД :String;
var OK, Режим, Work, Flag, NewUpdate :Logical;
var tmpDD:d;
var rs,rs2,OA1,OA2,ii:i;
var tmpNN:n;
var OA1_open, OA2_open :Logical;
 OA1_open=False;
 OA2_open=false;
 REC=IntegerToRecord(ДНФАID); OK=False;
 CRDднфа="РПО_ОПЕРАЦИИДНФА"; CRDакты="РПО_АКТЫ_УНФА"; CRDсотр="СОТРУДНИКИ"; CRDснфа="РПО_НФА"; CRDинвк="РПО_ИНВКАРТ_ОС";
 if REC<>NIL: OK=RecordExists(CRDднфа, REC); fi;
 if OK=False: Message("Не найдена ссылка на операцию движения НФА.^MРасчет невозможен!", mtError); ^False; fi;
 if СохранитьИзменения=False: ^False; fi;
 StoreREC=Current;
 Режим=AutoRefresh;
 ToggleAutoRefresh(False);
 ROднфа=OpenWorkArea(CRDднфа, "", "Ukey="+RecordToString(REC));
 ROакты=OpenWorkArea(CRDакты, "", "ДНФАID="+Str(ДНФАID)+" and КОДФОРМЫ='ОКУД_0306003'");
 ROсотр=OpenWorkArea(CRDсотр, "", "1=0");
 ROснфа=OpenWorkArea(CRDснфа, "", "1=0");
 ROинвк=OpenWorkArea(CRDинвк, "", "1=0");
 ShowProgress(4, "Считывание информации операции движения НФА ...");
 Try
   ProgressPos(1);
   Refresh(False);
   ProgressPos(2);
   ClearVariable(НФА_ИНВ_RO);
   len=Records(ROакты);
   for i=1 to len do
     КОДИНВ=GetFieldS(ROакты, i, "ИНВНОМЕР");if КОДИНВ='':КОДИНВ=' ';fi;
     КОДНФА=GetFieldS(ROакты, i, "КОДАНАУНФА");
      СЧНФА=GetFieldS(ROакты, i, "СЧЕТУНФА");
     if КОДНФА<>"" and КОДИНВ<>"" and СЧНФА<>"": AddInArray(НФА_ИНВ_RO, True, False, КОДНФА+"|"+КОДИНВ+"|"+СЧНФА); fi;
   od;
   if LengthOfArray(НФА_ИНВ_RO)>0: NewUpdate=False; else NewUpdate=True; fi;
   ProgressPos(3);
   ИнициализироватьУсловия(False);
   ДНФАIDstore=ДНФАID;
   dBT=GetFieldD(ROднфа, 1, "ДАТОПЕР");
   dET=dBT+1;
   ANA=GetFieldS(ROднфа, 1, "АН_ДНФА");
   len=LengthOfArray(УслАНА);
   УслПР=МаскаСЧК+"{НФА.*&ДНФАID."+Str16(ДНФАID)+"&ДНФА."+ANA+"}";
   ClearVariable(НФА_ИНВ_OP);
   ClearVariable(ДОПАНА);
   ProgressPos(4);
   for Transaction k=УслПР, dBT, dET do
     SumTrans=TransSum(k);
     KolTrans=TransSum(k, "КОЛ");
     if KolTrans>0: Цена=Round(SumTrans/KolTrans, 2); else Цена=0; fi;
     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;
       OK=(OK and РАБ.НФА.FUNC_LIB.СчетСоотвМаске(TransDeb(k), УслДЕБ[y]));
       OK=(OK and РАБ.НФА.FUNC_LIB.СчетСоотвМаске(СЧНФА,       УслКРЕ[y]));
--       OK=(OK and (Цена>1000));
       if OK: Work=True; Break; fi;
     od;
     if Work:
       КОДНФА=РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "НФА", True);
       КОДИНВ=РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "УЧН", True);
       if КОДИНВ='':КОДИНВ=' ';fi;
       if КОДНФА<>"" and КОДИНВ<>"":
         if Match(СЧНФА, "???.????.???????.???.?.10?.??.???")   : СЧНФА=SubStr(СЧНФА, 1, 30)+"???";
         |  Match(СЧНФА, "???.??.??.??.??.??.????.?.10?.??.???"): СЧНФА=SubStr(СЧНФА, 1, 33)+"???";
         |  Match(СЧНФА, "ЗАБ.??.10?.??")                       : СЧНФА=СЧНФА;
         else СЧНФА="";
         fi;
         if СЧНФА<>"":
           tmp=КОДНФА+"|"+КОДИНВ+"|"+СЧНФА;
           AddInArray(НФА_ИНВ_OP, True, False, tmp);
           -- Вставляем дополнительную аналитику
           j=SearchInArray(НФА_ИНВ_OP, tmp, True, 1);
           tmp="";
           tmp=РАБ.НФА.FUNC_LIB.Объединить(tmp, "0_1"+РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "П", False), "|");
           tmp=РАБ.НФА.FUNC_LIB.Объединить(tmp, "0_1"+РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "М", False), "|");
           tmp=РАБ.НФА.FUNC_LIB.Объединить(tmp, "0_1"+SubStr(РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "МОЛ", False), 3, 255), "|");
           tmp=РАБ.НФА.FUNC_LIB.Объединить(tmp, "1_0"+РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "П", True), "|");
           tmp=РАБ.НФА.FUNC_LIB.Объединить(tmp, "1_0"+РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "М", True), "|");
           tmp=РАБ.НФА.FUNC_LIB.Объединить(tmp, "1_0"+РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "К", True), "|");
           InsertInArray(ДОПАНА, j, tmp);
         fi;
       fi;
     fi;
   end; -- Transaction
   len=LengthOfArray(НФА_ИНВ_OP);
   if len=0: Message("НФА для создания акта^Mо списании объекта основных средств^M(кроме автотранспортных средств)^Mне найдено!", mtWarning); ^False; fi;
   ClearVariable(ИНВ_MSK); ClearVariable(ИНВ_INI); ClearVariable(ИНВ_NUM);
   ShowProgress(len, "Поиск последнего инвентарного номера...");
   k=0;
   for i=1 to len do
     ProgressPos(i);
     КОДНФА=ExtractWord(1, НФА_ИНВ_OP[i], "|");
        СЧНФА=ExtractWord(3, НФА_ИНВ_OP[i], "|");
     tmp=НФА.СЕРВИС.КОНСТРУКТОР.ИНВ_НОМЕРА.МаскаВедИнвНомер(СЧНФА, КОДНФА);
     if SearchInArray(ИНВ_MSK, tmp, True, 1)<0:
       k=InsertInArraySort(ИНВ_MSK, tmp);
       pN=Pos("?", tmp);
       lN=НФА.СЕРВИС.КОНСТРУКТОР.ИНВ_НОМЕРА.ДлинаНумерации;
       InsertInArray(ИНВ_INI, k, Str(pN)+"|"+Str(lN));
       SetFilter(ROинвк, "Match(ИНВ_ВЕД,'"+tmp+"')");
       num=Records(ROинвк);
       if num>0:
         ClearVariable(BufI);
         for j=1 to num do tmp=GetFieldS(ROинвк, j, "ИНВ_ВЕД"); BufI[j]=Int(SubStr(tmp, pN, lN)); od;
         SortArray(BufI, True);
         InsertInArray(ИНВ_NUM, k, BufI[num]+1);
         ClearVariable(BufI);
       else
         InsertInArray(ИНВ_NUM, k, 1);
       fi;
     fi;
   od;
   nK=0; nY=0;
2 0  Try
     LastNum=LastNumCard(CRDакты, "НОМЕРАКТА");
     LastNumИНВ=LastNumCard(CRDинвк, "НОМЕР");
     SetFilter(ROинвк, "");
     SetFilter(ROснфа, "");
     SetFilter(ROсотр, "");
     for i=1 to len do
       if nK=0: -- если новая порция, то открываем RO на изменения
         BeginChanging(ROакты);
       fi;
       nK=nK+1;
       КОДНФА=ExtractWord(1, НФА_ИНВ_OP[i], "|");
       КОДИНВ=ExtractWord(2, НФА_ИНВ_OP[i], "|");
        СЧНФА=ExtractWord(3, НФА_ИНВ_OP[i], "|");
       ShowProgress(len, "Обработка НФА с кодом "+SubStr(КОДНФА, 5, 255)+" и инвентарным номером "+SubStr(КОДИНВ, 5, 255)+"...");
       ProgressPos(i);
       ClearVariable(Buf);
       j=WordsCount(ДОПАНА[i], "|");
       for y=1 to j do Buf[y]=SubStr(ExtractWord(y, ДОПАНА[i], "|"), 1, 5); od;
       k=SearchInArray(НФА_ИНВ_RO, НФА_ИНВ_OP[i], False, 1);
       if k>0:
         x=k; Flag=False;
       else
         if NewUpdate: x=GetRecordNumber(ROакты, StoreREC); NewUpdate=False; else x=InsertRecord(ROакты); fi; Flag=True;
       fi;
       -- Вставляем информацию НАЧАЛО
       y=PutFieldI(ROакты, x, "ДНФАID"     , ДНФАIDstore);
       y=PutFieldS(ROакты, x, "КОДФОРМЫ"   , "ОКУД_0306003");
       y=PutFieldS(ROакты, x, "КОДАНАУНФА" , КОДНФА);
       y=PutFieldS(ROакты, x, "ИНВНОМЕР"   , КОДИНВ);
       tmp3=GetFieldS(ROакты, x, "ИНВНОМЕРВЕД");
       if (tmp3="" or tmp3=" " or Flag) and trim(КОДИНВ)<>'':
         tmp="ИНВВЕД."+КОДНФА+"."+КОДИНВ;
         ВЕД=Name_A(tmp); v1="";
         if ВЕД=" " or ВЕД="":
           BeginChanging(ROинвк);
           Try
             REC=SignToRecord(tmp, False);
             OK=False; Work=False;
             if REC<>NIL:
               h=GetRecordNumber(ROинвк, REC);
               Work=LockRecord(ROинвк, h, 0);
             else
               h=InsertRecord(ROинвк);
               Work=True;
             fi;
             if Work:
               if Match(КОДИНВ, "УЧН.?????"):
                 tmp=НФА.СЕРВИС.КОНСТРУКТОР.ИНВ_НОМЕРА.МаскаВедИнвНомер(СЧНФА, КОДНФА);
                 j=SearchInArray(ИНВ_MSK, tmp);
                 if j>0:
                   pN=Int(ExtractWord(1, ИНВ_INI[j], "|"));
                   lN=Int(ExtractWord(2, ИНВ_INI[j], "|"));
                   num=lN-Length(Str(ИНВ_NUM[j]));
                   tmp2=RepStr("0", num)+Str(ИНВ_NUM[j]);
                   tmp=Delete(tmp, pN, lN);
                   tmp=Insert(tmp2, tmp, pN);
                   v1=tmp; --Ведомственный номер по умолчанию
                   OK=True;
                 fi;
               else
                 v1=SubStr(КОДИНВ, Length(GetAnaGlossary(КОДИНВ))+2, 255); --Старый присвоенный инвентарный номер
               fi;
               y=PutFieldS(ROинвк, h, "ИНВ",     SubStr(КОДИНВ, Length(GetAnaGlossary(КОДИНВ))+2, 255));
               y=PutFieldS(ROинвк, h, "НФА",     КОДНФА);
               y=PutFieldS(ROинвк, h, "СЧЕТНФА", СЧНФА);
               y=PutFieldS(ROинвк, h, "ИНВ_ВЕД", v1);
               LastNumИНВ=LastNumИНВ+1;
               y=PutFieldI(ROинвк, h, "НОМЕР",    LastNumИНВ);
               y=PutFieldS(ROинвк, h, "НОМЕРБУМ", Str(LastNumИНВ));
               y=PutFieldD(ROинвк, h, "DD",       dBT);
               if OK: ИНВ_NUM[j]=ИНВ_NUM[j]+1; fi;
             fi;
             EndChanging(ROинвк);
           Except
             CancelChanging(ROинвк);
           end;
           y=PutFieldS(ROакты, x, "ИНВНОМЕРВЕД", v1);
         else
           y=PutFieldS(ROакты, x, "ИНВНОМЕРВЕД", ВЕД); --Ведомственный номер уже присвоен
         fi;
       fi;
       y=PutFieldS(ROакты, x, "СЧЕТУНФА"   ,    СЧНФА);
       dd=GetFieldD(ROакты, x, "ДАТААКТА");
       if dd=1.1.100: y=PutFieldD(ROакты, x, "ДАТААКТА", dBT); fi;
--       dVV=РАБ.НФА.FUNC_LIB.ДатаПроводки(СЧНФА, КОДНФА+"&"+КОДИНВ, dBT, False);
       dVV=РАБ.НФА.B01.ВзятьДЭКСПЛ(КОДНФА,КОДИНВ);
       y=PutFieldD(ROакты, x, "ДАТАПРИНБУХ", РАБ.НФА.B01.ВзятьДУЧЕТ(КОДНФА,КОДИНВ));
       if GetFieldI(ROакты, x, "НОМЕРАКТА")=0 or Flag:
         LastNum=LastNum+1;
         y=PutFieldI(ROакты, x, "НОМЕРАКТА", LastNum);
         y=PutFieldS(ROакты, x, "БУМНОМЕР",  Str(LastNum));
       fi;
-- "0_1"+"П", МЫ
-- "0_1"+"М", МЫ
-- "0_1"+"Л", МЫ
-- "1_0"+"П",
-- "1_0"+"М",
-- "1_0"+"К",
       -- МЫ (исполнитель)
       tmp2=GetFieldS(ROакты, x, "ИСПОЛНИТЕЛЬ");
       if tmp2="" or tmp2=" " or Flag:
         tmp=ВзятьДанныеКонтрагента("", "КИМЯ", True);
         y=PutFieldS(ROакты, x, "ИСПОЛНИТЕЛЬ",    tmp);
         tmp=ВзятьДанныеКонтрагента("", "ОКПО", True);
         y=PutFieldS(ROакты, x, "ОКПОИСПОЛ",     tmp);
       else
         tmp=ВзятьДанныеКонтрагента("", "ОКПО", True);
         if tmp<>"" or tmp<>" ":
           y=PutFieldS(ROакты, x, "ОКПОИСПОЛ",     tmp);
         fi;
       fi;
       tmp2=GetFieldS(ROакты, x, "АДРЕСИСПОЛ");
       if tmp2="" or tmp2=" " or Flag:
         tmp=ВзятьДанныеКонтрагента("", "АДРС", True);
         y=PutFieldS(ROакты, x, "АДРЕСИСПОЛ",    tmp);
       fi;
       tmp2=GetFieldS(ROакты, x, "БАНКИСПОЛ");
       if tmp2="" or tmp2=" " or Flag:
         tmp=ВзятьДанныеКонтрагента("", "БАНК", True);
         y=PutFieldS(ROакты, x, "БАНКИСПОЛ",    tmp);
       fi;
       --
       tmp2=GetFieldS(ROакты, x, "ПОИСПОЛ");
       if tmp2="" or tmp2=" " or Flag:
         j=SearchInArray(Buf, "0_1П.", False, 1);
         if j>0: tmp=SubStr(ExtractWord(j, ДОПАНА[i], "|"), 4, 255); else tmp=""; fi;
         y=PutFieldS(ROакты, x, "КОДПОИСПОЛ", tmp);
         y=PutFieldS(ROакты, x, "ПОИСПОЛ",    if(Name_A(tmp)<>"" and Name_A(tmp)<>" ", Name_A(tmp), tmp));
       fi;
       -- Принимающая
       j=SearchInArray(Buf, "1_0К.", False, 1);
       if j>0: tmp3=SubStr(ExtractWord(j, ДОПАНА[i], "|"), 4, 255); else tmp3=""; fi;
       tmp2=GetFieldS(ROакты, x, "УЧРЕЖДЕНИЕ");
       if tmp2="" or tmp2=" " or Flag:
         tmp=ВзятьДанныеКонтрагента(tmp3, "КИМЯ", False);
         y=PutFieldS(ROакты, x, "УЧРЕЖДЕНИЕ",   tmp);
         tmp=ВзятьДанныеКонтрагента(tmp3, "ОКПО", False);
         y=PutFieldS(ROакты, x, "ОКПОУЧРЕЖ",     tmp);
       fi;
       tmp2=GetFieldS(ROакты, x, "АДРЕСУЧРЕЖ");
       if tmp2="" or tmp2=" " or Flag:
         tmp=ВзятьДанныеКонтрагента(tmp3, "АДРС", False);
         y=PutFieldS(ROакты, x, "АДРЕСУЧРЕЖ",    tmp);
       fi;
       tmp2=GetFieldS(ROакты, x, "БАНКУЧРЕЖ");
       if tmp2="" or tmp2=" " or Flag:
         tmp=ВзятьДанныеКонтрагента(tmp3, "БАНК", False);
         y=PutFieldS(ROакты, x, "БАНКУЧРЕЖ",     tmp);
       fi;
       tmp2=GetFieldS(ROакты, x, "ПОУЧРЕЖ");
       if tmp2="" or tmp2=" " or Flag:
         j=SearchInArray(Buf, "1_0П.", False, 1);
         if j>0: tmp=SubStr(ExtractWord(j, ДОПАНА[i], "|"), 4, 255); else tmp=""; fi;
         y=PutFieldS(ROакты, x, "КОДПОУЧРЕЖ", tmp);
         y=PutFieldS(ROакты, x, "ПОУЧРЕЖ",    if(Name_A(tmp)<>"" and Name_A(tmp)<>" ", Name_A(tmp), tmp));
       fi;
       tmp2=GetFieldS(ROакты, x, "МЕСТООБЪЕКТА");
       if tmp2="" or tmp2=" " or Flag:
         j=SearchInArray(Buf, "1_0М.", False, 1);
         if j>0: tmp=SubStr(ExtractWord(j, ДОПАНА[i], "|"), 4, 255); else tmp=""; fi;
         y=PutFieldS(ROакты, x, "МЕСТООБЪЕКТА", if(Name_A(tmp)<>"" and Name_A(tmp)<>" ", Name_A(tmp), tmp));
       fi;
       -- Подписи
       dd=GetFieldD(ROакты, x, "ДАТАПОДРУК");
       if dd=1.1.100: y=PutFieldD(ROакты, x, "ДАТАПОДРУК", dVV); fi;
       dd=GetFieldD(ROакты, x, "ДАТАПОДИСПОЛ");
       if dd=1.1.100: y=PutFieldD(ROакты, x, "ДАТАПОДИСПОЛ", dVV); fi;
       tmp2=GetFieldS(ROакты, x, "ФИОРУКИСПОЛ");
       if tmp2="" or tmp2=" " or Flag:
         tmp=ВзятьДанныеКонтрагента("", "ФРУК", True);
         y=PutFieldS(ROакты, x, "ФИОРУКИСПОЛ", tmp);
         tmp=ВзятьДанныеКонтрагента("", "ДРУК", True);
         y=PutFieldS(ROакты, x, "ДОЛЖНРУКИСПОЛ", tmp);
       fi;
       tmp2=GetFieldS(ROакты, x, "ФИОРУКУЧРЕЖ");
       if tmp2="" or tmp2=" " or Flag:
         tmp=ВзятьДанныеКонтрагента(tmp3, "ФРУК", False);
         y=PutFieldS(ROакты, x, "ФИОРУКУЧРЕЖ", tmp);
         tmp=ВзятьДанныеКонтрагента(tmp3, "ДРУК", False);
         y=PutFieldS(ROакты, x, "ДОЛЖНРУКУЧРЕЖ", tmp);
       fi;
       tmp2=GetFieldS(ROакты, x, "ФИОГЛБУХПРИН");
       if tmp2="" or tmp2=" " or Flag:
         tmp=ВзятьДанныеКонтрагента(tmp3, "ФБУХ", False);
         y=PutFieldS(ROакты, x, "ФИОГЛБУХПРИН", tmp);
       fi;
       tmp2=GetFieldS(ROакты, x, "ФИОГЛБУХСДАЛ");
       if tmp2="" or tmp2=" " or Flag:
         tmp=ВзятьДанныеКонтрагента("", "ФБУХ", True);
         y=PutFieldS(ROакты, x, "ФИОГЛБУХСДАЛ", tmp);
       fi;
 2      -- МОЛ
       j=SearchInArray(Buf, "0_1Л.", False, 1);
       if j>0: tmp="МОЛ"+SubStr(ExtractWord(j, ДОПАНА[i], "|"), 5, 255); else tmp=""; fi;
       REC=SignToRecord(tmp, False);
       if REC<>NIL:
         h=GetRecordNumber(ROсотр, REC);
         --tmp=GetFieldS(ROсотр, h, "ДОЛЖНОСТЬ.ДОЛЖ");
         tmp=GetCardFieldS(CRDсотр, REC, "ДОЛЖНОСТЬ.ДОЛЖ");
         y=PutFieldS(ROакты, x, "ДОЛЖНМОЛСДАЛ", tmp);
         tmp=GetFieldS(ROсотр, h, "ФАМИЛИЯ")+" "+GetFieldS(ROсотр, h, "ИНИЦИАЛЫ");
         y=PutFieldS(ROакты, x, "МОЛ", tmp);
         tmp=GetFieldS(ROсотр, h, "ПРИЗНАК");
         y=PutFieldS(ROакты, x, "ТАБНОММОЛ", tmp);
         dd=GetFieldD(ROакты, x, "ДАТАМОЛСДАЛ");
         if dd=1.1.100: y=PutFieldD(ROакты, x, "ДАТАМОЛСДАЛ", dBT); fi;
       fi;


-- НаименОС   ИнвНомер  ЗавНомер  ГодВыпуска ДатаПринБух ФактСрокЭк БалансСтоим СумНачАморт ОстСтоим
       OA=OpenArray(ROакты, x, "СОСТОС", "");
       OA1_open=True;
       if Records(OA)=0: z=InsertRecord(OA, 1); else z=1; fi;
       --
       y=PutFieldS(OA, z, "НАИМЕНОС", Name_A(КОДНФА));
       y=PutFieldS(OA, z, "ИНВНОМЕР", Name_A("ИНВВЕД."+КОДНФА+"."+КОДИНВ));

       tmp="ИНВВЕД."+КОДНФА+"."+КОДИНВ;
       if tmp<>"": REC=SignToRecord(tmp, False); else REC=NIL; fi;
       tmpDD=1.1.100;
       if REC<>NIL:
         h=GetRecordNumber(ROинвк, REC);
         if h>0:
           tmpDD=GetFieldD(ROинвк, h, "ОПРИХ_ДАТА");
           y=PutFieldD(OA, z, "ДатаПринБух", tmpDD);
           tmpDD=GetFieldD(ROинвк, h, "ДАТА_ИЗГ");
           y=PutFieldD(OA, z, "ГодВыпуска", tmpDD);
--           OA1=OpenArray(ROинвк, h, "ЧАСТИ", "");
--           rs=records(OA1);
--           if rs>0:
----              tmp=GetFieldS(OA1, 1, "ЗАВОД_НОМ");
----              y=PutFieldS(OA, z, "ЗавНомер", tmp);
----              tmpDD=GetFieldD(OA1, 1, "ДАТА_ИЗГ");
----              y=PutFieldD(OA, z, "ГодВыпуска", tmpDD);
--           fi;
--           CloseWorkArea(OA1);
           tmp=GetFieldS(ROинвк, h, "ЗАВОД_НОМ");
           y=PutFieldS(OA, z, "ЗавНомер", tmp);
           tmpDD=GetFieldD(ROинвк, h, "ДАТ_ВЭКСП");
           --y=PutFieldD(OA, z, "ГодВыпуска", tmpDD);
--           y=PutFieldS(ROакты, x, "НОМЕРКАРТОЧ", GetFieldS(ROинвк, h, "НОМЕРБУМ"));
--           y=PutFieldD(ROакты, x, "ДАТАКАРТОЧ",  GetFieldD(ROинвк, h, "DD"));
         fi;
        | true:
           tmpDD=РАБ.НФА.B01.ВзятьДУЧЕТ(КОДНФА,КОДИНВ);
           y=PutFieldD(OA, z, "ДатаПринБух", tmpDD);
           tmpDD=РАБ.НФА.B01.ВзятьДЭКСПЛ(КОДНФА,КОДИНВ);
       fi;
       if tmpDD=1.1.100:
          tmpDD=РАБ.НФА.B01.ВзятьДЭКСПЛ(КОДНФА,КОДИНВ);
       fi;
       if tmpDD>1.1.1800 and dBT>1.1.1800:
         tmp=РАБ.НФА.FUNC_LIB.ИнтервалМеждуДатами(tmpDD, dBT, 4, False, True); -- переменная
         y=PutFieldS(OA, z, "ФактСрокЭк", tmp);
       fi;
       y=PutFieldD(ROакты, x, "ДатаСписБух", dBT);
---------------------------------------------------------------------------




       REC=SignToRecord(КОДНФА, False);
--       REC=SignToRecord(КОДАНАУНФА, False);
       if REC<>NIL:
         h=GetRecordNumber(ROснфа, REC);
         tmp2=GetFieldS(ROакты, x, "ОБЪЕКТ");
         if tmp2="" or tmp2=" " or Flag:
           tmp=GetFieldS(ROснфа, h, "ИМЯ");
           y=PutFieldS(ROакты, x, "ОБЪЕКТ", tmp);
         fi;
         tmp2=GetFieldS(ROакты, x, "КОДОКОФ");
         if tmp2="" or tmp2=" " or Flag:
           tmp=GetFieldS(ROснфа, h, "ОКОФ");
           y=PutFieldS(ROакты, x, "КОДОКОФ", tmp);
         fi;
         num=GetFieldI(ROакты, x, "АМОРТГРУППА");
         if num=0 or Flag:
           num=GetFieldI(ROснфа, h, "КЛГРУПП");
           y=PutFieldI(ROакты, x, "АМОРТГРУППА", num);
         fi;
         tmp2=GetFieldS(OA, z, "СРОКПОЛИСП");
         if tmp2="" or tmp2=" " or Flag:
           tmp=ВзятьСрокАмортГруппы(num);
           y=PutFieldS(OA, z, "СРОКПОЛИСП", tmp);
           tmp2=GetFieldS(OA, z, "СРОКНОВИСП");
           if tmp2="" or tmp2=" " or Flag:
             y=PutFieldS(OA, z, "СРОКНОВИСП", tmp);
           fi;
         fi;
         SumTrans=GetFieldN(OA, z, "НОРМААМОРТ");
         if SumTrans=0 or Flag: y=PutFieldN(OA, z, "НОРМААМОРТ", GetFieldN(ROснфа, h, "НОРМАМОРТ")); fi;
       fi;
       -- Инвентарная карточка

       -- Таблица
       if GetFieldD(OA, z, "ДАТАВВЭКСП")=1.1.100 or Flag: y=PutFieldD(OA, z, "ДАТАВВЭКСП", РАБ.НФА.B01.ВзятьДЭКСПЛ(КОДНФА,КОДИНВ)); fi;
       tmp2=GetFieldS(OA, z, "МЕТОДИЗНОСА");
       if tmp2="" or tmp2=" " or Flag: y=PutFieldS(OA, z, "МЕТОДИЗНОСА", "Линейный метод (утвержден НК РФ)"); fi;
       SumTrans=GetFieldN(OA, z, "БАЛАНССТОИМ");
       if SumTrans=0 or Flag:
         Цена=Saldo(SubStr(СЧНФА, 1, 30)+"310"+"{"+КОДНФА+"&"+КОДИНВ+"}", dET);
         SumTran2=Цена;
         y=PutFieldN(OA, z, "БАЛАНССТОИМ", Цена);
         SumTrans=GetFieldN(OA, z, "ПОКСТОИМ");
         if SumTrans=0 or Flag: y=PutFieldN(OA, z, "ПОКСТОИМ", Цена); fi;
       else
         Цена=SumTrans;
         SumTran2=Цена;
       fi;
       tmp2=ВзятьСчетАморт(СЧНФА, False);
       if tmp2<>"":
         KolTrans=Abs(Turn("+"+tmp2+"{"+КОДНФА+"&"+КОДИНВ+"}", 1.1.100, dET));
       else
         KolTrans=0;
       fi;
       y=PutFieldN(OA, z, "СУМНАЧАМОРТ", KolTrans);
       y=PutFieldN(OA, z, "ОСТСТОИМ", Abs(SumTran2-KolTrans));
--       if tmpDD>1.1.1800 and ДатаАкта>1.1.1800:
--         tmp=РАБ.НФА.FUNC_LIB.ИнтервалМеждуДатами(tmpDD, ДатаАкта, 4, False, True); -- переменная
--         y=PutFieldS(OA, z, "ФактСрокЭк", tmp);
--       fi;

       ---------------------------------------------------------
       OA2=OpenArray(ROакты, x, "ХАРОС", "");
       OA2_open=true;
       rs2=Records(OA2);
       if rs2=0: z=InsertRecord(OA2, 1); else z=1; fi;
       tmp="ИНВВЕД."+КОДНФА+"."+КОДИНВ;
       if tmp<>"": REC=SignToRecord(tmp, False); else REC=NIL; fi;
       if REC<>NIL:
         h=GetRecordNumber(ROинвк, REC);
         if h>0:
           OA1=OpenArray(ROинвк, h, "ХАРОС", "");
           rs=records(OA1);
           if rs>0:
              for ii=1..rs do --копируем данные ХАРОС=>ХАРОС
                if ii>z and ii>rs2: z=InsertRecord(OA2, ii); 
                 | true: if ii>z:z=z+1;fi;
                fi;
                tmp=GetFieldS(OA1, ii, "НАИМЕН_ОБ");
                y=PutFieldS(OA2, z, "НаимОБ", tmp);
                tmp=GetFieldS(OA1, ii, "НАИМЕН_ДРАГ");
                y=PutFieldS(OA2, z, "НаимДрагМат", tmp);
                tmp=GetFieldS(OA1, ii, "ОКЕИ_ДРАГ");
                y=PutFieldS(OA2, z, "ННДрагМат", tmp);
                tmp=GetFieldS(OA1, ii, "ЕДИЗМ_ДРАГ");
                y=PutFieldS(OA2, z, "ЕдИзмДрагМат", tmp);
                tmpNN=GetFieldN(OA1, ii, "КОЛИЧ");
                y=PutFieldN(OA2, z, "МассаДрагМат", tmpNN);
              od;
           fi;
           CloseWorkArea(OA1);
         fi;
       fi;

       -- Вставляем информацию КОНЕЦ
       if nK=200: --записываем очередную порцию
         EndChanging(ROакты);
         nY=nY+nK;
         nK=0;
       fi;
     od;
     if nK>0: EndChanging(ROакты); nY=nY+nK; fi; --если последняя порция неполная
   Except
     if ErrorCode=21857:  Message("Картотека ["+CRDакты+"] доступна только для чтения."+Chr(13)+
                                  "Запись данных для акта невозможна!", mtError);
     | True:              Message("Ошибка "+Str(ErrorCode)+"."+Chr(13)+
                                  "Запись данных для акта невозможна!", mtError);
     fi;
     CancelChanging(ROакты);
     ^False;
   end;
 Finally
   CloseProgress;
   CloseWorkArea(ROинвк);
   CloseWorkArea(ROснфа);
   CloseWorkArea(ROсотр);
   if OA1_open: CloseWorkArea(OA);  fi;
   if OA2_open: CloseWorkArea(OA2); fi;
   CloseWorkArea(ROакты);
   CloseWorkArea(ROднфа);
   ToggleAutorefresh(Режим);
 end;
 ^True;
end;


Proc ВидимостьКнопок;
var RO, num :Integer;
 RO=OpenWorkArea("РПО_АКТЫ_УНФА", "", "ДНФАID="+Str(ДНФАID)+" and ДНФАID>0");
 Try
   num=Records(RO);
   if num=0: 
     btnPrev.Visible=False; 
     btnNext.Visible=False; 
     btnAll.Visible=False;
     Exit;
   else
     btnPrev.Visible=True;
     btnNext.Visible=True;
     btnAll.Visible=True;
   fi;
   btnPrev.Enabled=(GetRecordKey(RO, 1)<>Current);
   btnNext.Enabled=(GetRecordKey(RO, num)<>Current);
 Finally
   CloseWorkArea(RO);
 end;
end;

Proc ПерейтиНаАкт(Следующий:Logical);
var RO, num, k :Integer;
var REC :Record;
 RO=OpenWorkArea("РПО_АКТЫ_УНФА", "", "ДНФАID="+Str(ДНФАID)+" and ДНФАID>0");
 Try
   num=Records(RO); k=0; REC=NIL;
   if num>0: 
     k=GetRecordNumber(RO, Current);
     if Следующий: if k>0 and k<num: k=k+1; fi; else if k>1: k=k-1; fi; fi;
     if k>0: REC=GetRecordKey(RO, k); fi;
     if REC<>NIL: REC=Current(REC); fi;
   fi;
 Finally
   CloseWorkArea(RO);
 end;
end;

Proc ПоказатьВсеАкты;
var RO, i, num :Integer;
var REC :Record;
 RO=OpenWorkArea("РПО_АКТЫ_УНФА", "", "ДНФАID="+Str(ДНФАID)+" and ДНФАID>0");
 Try
   num=Records(RO); REC=NIL;
   if num>0: 
     ClearVariable(Buf);
     for i=1 to num do Buf[i]="Акт N"+GetFieldS(RO, i, "БУМНОМЕР")+" от "+DateToString(GetFieldD(RO, i, "ДАТААКТА")); od;
     num=Alternate("Выбеирте акт", Buf, -1, GetRecordNumber(RO, Current), 12);
     if num>0:
       REC=GetRecordKey(RO, num);
       if REC<>NIL: REC=Current(REC); fi;
     fi;
   fi;
 Finally
   CloseWorkArea(RO);
 end;
end;

Proc ПриНажатии(Sender: String);
var num :Integer;
 if Sender='ВниманиеОбъект': ВниманиеНапоминать=(Вопрос('Предупреждение',ВниманиеСТР,'Ok;Напомнить',тсПредупреждение)=2);
 |  Sender='КнРасчет':
--   ClearVariable(Buf);
--   num=2 ;--Расход основных средств
   if ОбновлениеАктовРасход: Message("Обновление акта (актов) на расход успешно завершено!", mtInformation); fi;
 |  Sender='btnPrev': ПерейтиНаАкт(False); ВидимостьКнопок;
 |  Sender='btnAll' : ПоказатьВсеАкты;     ВидимостьКнопок;
 |  Sender='btnNext': ПерейтиНаАкт(True);  ВидимостьКнопок;
 fi;
end;
2-- События шаблона
Proc Template_OnOpen(Create:Logical); -- _При открытии шаблона
 EnableCommands(False, cmDublRec);
 РАБ.НФА.АКТЫ.Template_OnOpen(Create);
 First=True;
end;

Proc Template_AfterOpen(Create:Logical); -- при открытии шаблона
 if First: 
   Очистить;
   if ТекущееСостояние=КартСостВставлена or ДНФАID=0:
      ВниманиеСТР='Данный документ сформирован не из журнала операций с НФА!'+chr(13)+
                  '[Расчет] будет производится неверно';
      if ВниманиеНапоминать:
         ВниманиеНапоминать=not (Вопрос('Предупреждение',ВниманиеСТР,'Ok;Не напоминать',тсПредупреждение)=2);
      fi;
    | true:ВниманиеСТР='';
   fi;
   if ВниманиеСТР<>'':
       ВниманиеОбъект.Виден=true;
       ВниманиеОбъект.Подсказка=ВниманиеСТР;
    | true:ВниманиеОбъект.Виден=false;
   fi;
   ВидимостьКнопок;
 fi;
 First=False;
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:
   Очистить;
   if ТекущееСостояние=КартСостВставлена or ДНФАID=0:
      ВниманиеСТР='Данный документ сформирован не из журнала операций с НФА!'+chr(13)+
                  '[Расчет] будет производится неверно';
      if ВниманиеНапоминать:
         ВниманиеНапоминать=not (Вопрос('Предупреждение',ВниманиеСТР,'Ok;Не напоминать',тсПредупреждение)=2);
      fi;
    | true:ВниманиеСТР='';
   fi;
   if ВниманиеСТР<>'':
       ВниманиеОбъект.Виден=true;
       ВниманиеОбъект.Подсказка=ВниманиеСТР;
    | true:ВниманиеОбъект.Виден=false;
   fi;
   ВидимостьКнопок;
 fi;
end;


--2-- События шаблона
--Proc Template_OnOpen(Create:L); -- _При открытии шаблона
--Раб.НФА.АКТЫ.Template_OnOpen(Create);
--end;
----
--Proc Template_onClose(Destroy:L); -- _При закытии бланка
-- NewRECbln='';
--end;
----
--Proc Template_onRead; -- _При считывании шаблона
--Раб.НФА.АКТЫ.Template_onRead;
--end;


Функ ДАТНАЧСТР__ПриВходе(Поле: Строка; Итер: Целое): Логич;
var dd:d;
  dd=Выбор_срок(состОС[Итер].ДАТНАЧСТР);
  if dd<>состОС[Итер].ДАТНАЧСТР:состОС[Итер].ДАТНАЧСТР=dd;fi;
  Возврат false ;
end;


Функ ДАТКОНСТР__ПриВходе(Поле: Строка; Итер: Целое): Логич;
var dd:d;
  dd=Выбор_срок(состОС[Итер].ДАТКОНСТР);
  if dd<>состОС[Итер].ДАТКОНСТР:состОС[Итер].ДАТКОНСТР=dd;fi;
  Возврат false ;
end;


Функ ДАТМОДЕР__ПриВходе(Поле: Строка; Итер: Целое): Логич;
var dd:d;
  dd=Выбор_срок(состОС[Итер].ДАТМОДЕР);
  if dd<>состОС[Итер].ДАТМОДЕР:состОС[Итер].ДАТМОДЕР=dd;fi;
  Возврат false ;
end;


Функ ДАТАСУЧГАИ__ПриВходе(Поле: Строка; Итер: Целое): Логич;
var dd:d;
  dd=Выбор_срок(состОС[Итер].ДАТАСУЧГАИ);
  if dd<>состОС[Итер].ДАТАСУЧГАИ:состОС[Итер].ДАТАСУЧГАИ=dd;fi;
  Возврат false ;
end;


Функ ДАТАКАПРЕМ__ПриВходе(Поле: Строка; Итер: Целое): Логич;
var dd:d;
  dd=Выбор_срок(состОС[Итер].ДАТАКАПРЕМ);
  if dd<>состОС[Итер].ДАТАКАПРЕМ:состОС[Итер].ДАТАКАПРЕМ=dd;fi;
  Возврат false ;
end;

var РазрывСтрвкл:s='----------------------------------- Включен разрыв страницы -----------------------------------';
var РазрывСтроткл:s='----------------------------------- Отключен разрыв страницы -----------------------------------';

РазрывСтр1_вкл:l; var РазрывСтр1_откл:l=not РазрывСтр1_вкл;
var РазрывСтр1:s=if(РазрывСтр1_вкл,РазрывСтрвкл,РазрывСтроткл);

РазрывСтр2_вкл:l; var РазрывСтр2_откл:l=not РазрывСтр2_вкл;
var РазрывСтр2:s=if(РазрывСтр2_вкл,РазрывСтрвкл,РазрывСтроткл);

РазрывСтр3_вкл:l; var РазрывСтр3_откл:l=not РазрывСтр3_вкл;
var РазрывСтр3:s=if(РазрывСтр3_вкл,РазрывСтрвкл,РазрывСтроткл);

РазрывСтр4_вкл:l; var РазрывСтр4_откл:l=not РазрывСтр4_вкл;
var РазрывСтр4:s=if(РазрывСтр4_вкл,РазрывСтрвкл,РазрывСтроткл);

РазрывСтр5_вкл:l; var РазрывСтр5_откл:l=not РазрывСтр5_вкл;
var РазрывСтр5:s=if(РазрывСтр5_вкл,РазрывСтрвкл,РазрывСтроткл);

Func РазрывСтр_ПриВходе(Поле: Строка; Итер: Целое): Логич;
  if Поле='РазрывСтр1':РазрывСтр1_вкл= not РазрывСтр1_вкл;
   | Поле='РазрывСтр2':РазрывСтр2_вкл= not РазрывСтр2_вкл;
   | Поле='РазрывСтр3':РазрывСтр3_вкл= not РазрывСтр3_вкл;
   | Поле='РазрывСтр4':РазрывСтр4_вкл= not РазрывСтр4_вкл;
   | Поле='РазрывСтр5':РазрывСтр5_вкл= not РазрывСтр5_вкл;
  fi;
  Возврат false;
end;

КОНЕЦ