БЛАНКСШАБЛОНОМ[10.02.2006] "Акт о приеме-передаче объекта основных средств", РЕДАКТОР РПО_АКТЫ_УНФА;
var НЕ_ВКЛ_КОМИССИЯ_2:l=not ВКЛ_КОМИССИЯ_2;
var Комиссия_max:i=if(ВКЛ_КОМИССИЯ_2,max(Комиссия,Комиссия_2),0);
var Комиссия_1:i=if(ВКЛ_КОМИССИЯ_2,0,Комиссия);
var ДолЧленКом_2_[]:s=Комиссия_2[$].ДолЧленКом_2;
var ФИОЧленКом_2_[]:s=Комиссия_2[$].ФИОЧленКом_2;
var ДолЧленКом_[]:s=Комиссия[$].ДолЧленКом;
var ФИОЧленКом_[]:s=Комиссия[$].ФИОЧленКом;

Сек1:Object; Сек2:Object; Сек3:Object; Сек4:Object; Сек5:Object; Сек6:Object; СекХарОС:Object;
var A1:String="+"; var A2:String="+"; var A3:String="+"; var A4:String="+"; var A5:String="+"; var A6:String="+"; var A7:String="+";
var D1:String="-"; var D2:String="-"; var D3:String="-"; var D4:String="-"; var D5:String="-"; var D6:String="-"; var D7:String="-";
btnPrev :Object; btnNext :Object; btnAll :Object;
var Кн1 	   :String="...";
var Доля100П	   :Numeric=SumOfArray(ДоляСобств[].Доля);
var recCurrent:record;
var NewREC	   :Logical=(CurrentState=crdusInserted);
var Buf[]	   :String;
var BufI[]	   :Integer;
var МаскаСЧД	   :String="(*.101.?4*|*.101.?5*|*.101.?6*|*.101.?8*)&(???.????.???????.???.?.101.??.310|ЗАБ.??.101.??)|???.????.???????.???.?.102.??.320|???.??.??.??.??.??.????.?.103.??.330";
var МаскаСЧК	   :String="(*.101.?4*|*.101.?5*|*.101.?6*|*.101.?8*)&(???.????.???????.???.?.101.??.410|ЗАБ.??.101.??)|???.????.???????.???.?.102.??.420|???.??.??.??.??.??.????.?.103.??.430";
var 2БланкИмя0	   :String2;
var 2КлассФормыДок0  :String2;
var 2КодФормыДок0    :String2;
func repqСчетУНФА:s;
 if pos('???',СчетУНФА)<1:^СчетУНФА;fi;
 if length(СчетУНФА)=33:
   if match(СчетУНФА,'*.?.101.??.???'):^substr(СчетУНФА,1,30)+'310';
    | match(СчетУНФА,'*.?.102.??.???'):^substr(СчетУНФА,1,30)+'320';
    | match(СчетУНФА,'*.?.103.??.???'):^substr(СчетУНФА,1,30)+'330';
   fi;
 fi;
 ^СчетУНФА;
end;
var СчетУНФА_	   :String=repqСчетУНФА2;
--
NewRECbln	   :String;
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;

2-- Общие процедуры и функции
Proc Очистить;
 ClearVariable(УслДЕБ); ClearVariable(УслКРЕ); ClearVariable(УслАНА); ClearVariable(ДебНФА); ClearVariable(Buf); ClearVariable(BufI);
 ClearVariable(НФА_ИНВ_OP); ClearVariable(НФА_ИНВ_RO); ClearVariable(ДОПАНА);
 ClearVariable(ИНВ_MSK); ClearVariable(ИНВ_INI); ClearVariable(ИНВ_NUM);
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;
 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 ДобавитьУдалитьСтроки(Field:String; Iter:Integer; fADD:Logical);
var nSec, qq :Integer;
 nSec=Int(SubStr(Field, 2, 1));
 if fADD:
   if nSec=1: Try qq=InsertFrame(ДоляСобств, Iter+1); Except end;
   |  nSec=2: Try qq=InsertFrame(стрДрХар  , Iter+1); Except end;
   |  nSec=3: Try qq=InsertFrame(стрНеСоот , Iter+1); Except end;
   |  nSec=4: Try qq=InsertFrame(стрТреб   , Iter+1); Except end;
   |  nSec=5: Try qq=InsertFrame(стрЗАК    , Iter+1); Except end;
   |  nSec=6: Try qq=InsertFrame(стрТехДок , Iter+1); Except end;
   |  nSec=7: Try qq=InsertFrame(ХарОС	   , Iter+1); Except end;
   fi;
 else
   if EnqOkCancel("Вы уверены что хотите удалить данную строчку?", mtConfirmation)=cmOk:
     if nSec=1: if ДоляСобств>1: Try DeleteFrame(ДоляСобств, Iter); Except end; fi;
     |	nSec=2: if стрДрХар  >1: Try DeleteFrame(стрДрХар  , Iter); Except end; fi;
     |	nSec=3: if стрНеСоот >1: Try DeleteFrame(стрНеСоот , Iter); Except end; fi;
     |	nSec=4: if стрТреб   >1: Try DeleteFrame(стрТреб   , Iter); Except end; fi;
     |	nSec=5: if стрЗАК    >1: Try DeleteFrame(стрЗАК    , Iter); Except end; fi;
     |	nSec=6: if стрТехДок >1: Try DeleteFrame(стрТехДок , Iter); Except end; fi;
     |	nSec=7: if ХарОС     >1: Try DeleteFrame(ХарОС	   , Iter); Except end; fi;
     fi;
     НачальнаяИтерация;
   fi;
 fi;
end;

Func НомерТекущейСекции :Integer;
var name :String;
 name=asString(Template.Name);
 if name="Сек1"    : ^1;
 |  name="Сек2"    : ^2;
 |  name="Сек3"    : ^3;
 |  name="Сек4"    : ^4;
 |  name="Сек5"    : ^5;
 |  name="Сек6"    : ^6;
 |  name="СекХарОС": ^7;
 else ^0;
 fi;
end;

Proc УдалитьПустыеСтроки(НТС:Integer);
var nn :Integer;
 nn=1;
 if НТС=1:
   while nn<=ДоляСобств do if ДоляСобств[nn].Участник=""  : Try DeleteFrame(ДоляСобств, nn); Except end; else nn=nn+1; fi; od;
 |  НТС=2:
   while nn<=стрДрХар	do if стрДрХар[nn].ДругХар=""	  : Try DeleteFrame(стрДрХар,	nn); Except end; else nn=nn+1; fi; od;
 |  НТС=3:
   while nn<=стрНеСоот	do if стрНеСоот[nn].НеСоотСтр=""  : Try DeleteFrame(стрНеСоот,	nn); Except end; else nn=nn+1; fi; od;
 |  НТС=4:
   while nn<=стрТреб	do if стрТреб[nn].ТребСтр=""	  : Try DeleteFrame(стрТреб,	nn); Except end; else nn=nn+1; fi; od;
 |  НТС=5:
   while nn<=стрЗАК	do if стрЗАК[nn].Заключение=""	  : Try DeleteFrame(стрЗАК,	nn); Except end; else nn=nn+1; fi; od;
 |  НТС=6:
   while nn<=стрТехДок	do if стрТехДок[nn].ПрилТехДок="" : Try DeleteFrame(стрТехДок,	nn); Except end; else nn=nn+1; fi; od;
 |  НТС=7:
   while nn<=ХарОС	do if ХарОС[nn].НаимОБ=""	  : Try DeleteFrame(ХарОС,	nn); Except end; else nn=nn+1; fi; od;
 fi;
 Template.Frame=1;
end;

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

Func GetDate :Date;  -- считываем в заданном поле дату
var name :String;
var Iter :Integer;
 name=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 if name="ДатаПодИспол"  : ^ДатаПодИспол;
 |  name="ДатаПодРУК"	 : ^ДатаПодРУК;
 |  name="ДатаДокОсн"	 : ^ДатаДокОсн;
 |  name="ДатаПринБух"	 : ^ДатаПринБух;
 |  name="ДатаСписБух"	 : ^ДатаСписБух;
 |  name="ДатаАкта"	 : ^ДатаАкта;
 |  name="ДатаГосРег"	 : ^ДатаГосРег;
 |  name="ВалКурсНаДату" : ^ВалКурсНаДату;
 |  name="ДатаВвЭксп"	 : ^состОС[Iter].ДатаВвЭксп;
 |  name="ДатаКапРем"	 : ^состОС[Iter].ДатаКапРем;
 |  name="ДатаЗаключ"	 : ^ДатаЗаключ;
 |  name="ДатаМОЛСдал"	 : ^ДатаМОЛСдал;
 |  name="ДатаПрин"	 : ^ДатаПрин;
 |  name="ДатаДовер"	 : ^ДатаДовер;
 |  name="ДатаМОЛПрин"	 : ^ДатаМОЛПрин;
 |  name="ДатаКарточ"	 : ^ДатаКарточ;
 fi;
end;

Proc SetDate(Value:Date); -- устанавливаем в заданном поле дату; Value - значение даты, которое необходимо присвоить
var name :String;
var Iter :Integer;
 name=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 if name="ДатаПодИспол"  : ДатаПодИспол 	   = Value;
 |  name="ДатаПодРУК"	 : ДатаПодРУК		   = Value;
 |  name="ДатаДокОсн"	 : ДатаДокОсн		   = Value;
 |  name="ДатаПринБух"	 : ДатаПринБух		   = Value;
 |  name="ДатаСписБух"	 : ДатаСписБух		   = Value;
 |  name="ДатаАкта"	 : ДатаАкта		   = Value;
 |  name="ДатаГосРег"	 : ДатаГосРег		   = Value;
 |  name="ВалКурсНаДату" : ВалКурсНаДату	   = Value;
 |  name="ДатаВвЭксп"	 : состОС[Iter].ДатаВвЭксп = Value;
 |  name="ДатаКапРем"	 : состОС[Iter].ДатаКапРем = Value;
 |  name="ДатаЗаключ"	 : ДатаЗаключ		   = Value;
 |  name="ДатаМОЛСдал"	 : ДатаМОЛСдал		   = Value;
 |  name="ДатаПрин"	 : ДатаПрин		   = Value;
 |  name="ДатаДовер"	 : ДатаДовер		   = Value;
 |  name="ДатаМОЛПрин"	 : ДатаМОЛПрин		   = Value;
 |  name="ДатаКарточ"	 : ДатаКарточ		   = Value;
 fi;
end; 

Proc ВыборКонтрагента(ПЕРВ:Logical; МЫ:Logical; РО:Logical; REC:Record);
-- ПЕРВ - первая организация в "шапке" (учреждение, организации-заказчика, организации-получателя)
--   МЫ - собственные реквизиты
--   РО - выбор контрагента через рабочую область
--  REC - если РО=True, то в REC ссылка на контрагента, иначе REC=NIL
var t1, t2, ОРГАН, ОКПО, АДРЕС, БАНКР :String;
var RO	:Integer;
var rTMP :Record;
 ОРГАН=""; ОКПО=""; АДРЕС=""; БАНКР="";
 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, "ОКПО"); АДРЕС=GetFieldS(RO, 1, "ЮРАДРЕС");
       t1=GetFieldS(RO, 1, "ТЕЛЕФОН"); t1=if(t1="", "", "тел. "+t1);
       t2=GetFieldS(RO, 1, "ФАКС");    t2=if(t2="", "", t2+" (факс)");
       if АДРЕС<>'' : АДРЕС=АДРЕС+"; "+t1; else АДРЕС=t1; fi;
       if АДРЕС<>'' : АДРЕС=АДРЕС+"; "+t2; else АДРЕС=t2; fi;
     fi;
   Finally
     CloseWorkArea(RO);
   end;
   -- Банковские реквизиты контрагента
   -- t1="КОНТРАГЕНТ="+RecordToString(REC)+" and "+"НАШ"+" and "+"УМОЛЧАНИЕ"; -- фильтр
   -- RO=OpenWorkArea("Банк_Счета", "", t1);
   rTMP=РАБ.Бюджет2005.БанкСчет(REC, False);
   if rTMP<>NIL:
     RO=OpenWorkArea("Банк_Счета", "", "UKey="+RecordToString(rTMP));
     Try
       if Records(RO)=1:
	 БАНКР="р/с: "+GetFieldS(RO, 1, "РСЧЕТ")+" в "+GetFieldS(RO, 1, "БАНК")+", "+GetFieldS(RO, 1, "ГОРОД")+", "+
	       "к/с: "+GetFieldS(RO, 1, "КСЧЕТ")+", БИК "+GetFieldS(RO, 1, "БИК");
       fi;
     Finally
       CloseWorkArea(RO);
     end;
   fi;
 fi;
 if ПЕРВ:
   Учреждение =ОРГАН; ОКПОучреж=ОКПО; АдресУчреж=АДРЕС; БанкУчреж=БАНКР;
   if ДоляСобств[1].Участник="" : ДоляСобств[1].Участник=Учреждение; ДоляСобств[1].Доля=100; fi;
 else
   Исполнитель=ОРГАН; ОКПОИспол=ОКПО; АдресИспол=АДРЕС; БанкИспол=БАНКР;
 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:
       ДолПредКом=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;
--000


Proc ВыборДоверенности;
var REC :Record;
var RO	:Integer;
 REC=OpenCardFile("Доверенности", "", NIL, crdRecordOnly);
 if REC<>NIL:
   RO=OpenWorkArea("Доверенности", "", "UKey="+RecordToString(REC));
   Try
     if Records(RO)=1:
       ДатаДовер =GetFieldD(RO, 1, "ДАТА");
       НомерДовер=GetFieldS(RO, 1, "НОМЕРБУМ");
       КомуДовер =GetCardFieldS("Контрагент", GetFieldR(RO, 1, "РЕКВ"), "КОРИМЯ")+";"+Chr(13)+GetFieldS(RO, 1, "ФИОС");
     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 МаскаГРОС(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;

Func ВзятьСрокАмортГруппыЛет(НомерГруппы:Integer):Integer;
 if НомерГруппы= 1: ^2;
 |  НомерГруппы= 2: ^3;
 |  НомерГруппы= 3: ^5;
 |  НомерГруппы= 4: ^7;
 |  НомерГруппы= 5: ^10;
 |  НомерГруппы= 6: ^15;
 |  НомерГруппы= 7: ^20;
 |  НомерГруппы= 8: ^25;
 |  НомерГруппы= 9: ^30;
 |  НомерГруппы=10: ^100;
 |  True: ^0;
 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|*.172)&???.?.??.?????.??.????.?.401.10.???";
   УслАНА[1] = "";
   ДебНФА[1] = True;

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

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

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

 else

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

   УслДЕБ[2] = "(???.????.???????.???.?.???.??.???&(*.304.04.320|*.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-- События полей
Func Field_onEnter(Field:String; Iter:Integer) :Logical;
var nn :Integer;
 if Match(Field, 'A?'): ДобавитьУдалитьСтроки(Field, Iter, True) ; ^False;
 |  Match(Field, 'D?'): ДобавитьУдалитьСтроки(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: АмортГруппа=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="СрокНовИсп"	 : Сроки(Field, Iter); ^False;
 |  Field="МетодИзноса"  : nn=0; ClearVariable(Buf);
			   Buf[1]="Линейный метод   (утвержден НК РФ)";
			   Buf[2]="Нелинейный метод (утвержден НК РФ)";
			   Buf[3]="Метод уменьшаемого остатка";
			   Buf[4]="Метод списания стоимости по сумме чисел лет срока полезного использования";
			   Buf[5]="Метод списания стоимости пропорционально объему продукции (работ)";
			   Buf[6]="100% начислено амортизации";
			   nn=Alternate("Выберите метод амортизации (износа)", Buf, -1);
			   if nn<>0: состОС[Iter].МетодИзноса=Buf[nn]; fi;
			   ^False;
 |  Field="НЕСоот"	 : НеСоот=not(НеСоот); ^False;
 |  Field="Треб"	 : Треб=not(Треб); ^False;
 |  Field="ДолПредКом" or Field="ФИОПредКом"
			 : ВыборКомиссии; ^False;
--Ставрополь
 |  Field="ДолПредКом_2" or Field="ФИОПредКом_2"
			 : ВыборКомиссии_2; ^False;
--000

 |  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;
--Ставрополь
|  Field="ДолПредКом_2" 								 :
   if ДолПредКом_2="" : ФИОПредКом_2=""; ClearVariable(Комиссия_2); fi;
|  Field="ФИОПредКом_2" 								 :
   if ФИОПредКом_2="" : ДолПредКом_2=""; ClearVariable(Комиссия_2); fi;
--000

 fi;
end;

Func Field_OnValidateN(Field:String; Iter:Integer; Value:Numeric): Logical;
var Lim :Numeric;
 if Value<0: Message("Нельзя вводить отрицательное число.", mtError); ^False; fi;
 if Field="Доля":
   Lim=Доля100П-ДоляСобств[Iter].Доля;
   if (Lim+Value)>100: Message("Общая доля собственности ["+Str((Lim+Value),2)+"] превышает 100%!", mtError); ^False; fi;
 fi;
 ^True;
end;

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

Func Сотрудники_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String): String;
var REC :Record;
var стрФИО, стрДОЛ, стрТАБ, name, tmp :String;
 Template.HideEditor(False);
 name=asString(Template.Field); tmp=""; стрФИО=""; стрДОЛ=""; стрТАБ="";
 Try tmp=GetVariableS(name); Except ^Cur; end;
 REC=OpenCardFile("СОТРУДНИКИ", "", SignToRecord(tmp), crdRecordOnly);
 if REC=NIL: ^Cur; fi;
 стрДОЛ=GetCardFieldS("СОТРУДНИКИ", REC, "ДОЛЖНОСТЬ.ДОЛЖ");
 стрФИО=GetCardFieldS("СОТРУДНИКИ", REC, "ФАМИЛИЯ")+" "+GetCardFieldS("СОТРУДНИКИ", REC, "ИНИЦИАЛЫ");
 стрТАБ=GetCardFieldS("СОТРУДНИКИ", REC, "ПРИЗНАК");
 if name="ФИОРУКучреж"	: ФИОРУКучреж =стрФИО; ДолжнРУКучреж=стрДОЛ;
 |  name="ДолжнРУКучреж": ФИОРУКучреж =стрФИО; ДолжнРУКучреж=стрДОЛ;
 |  name="ФИОРУКиспол"	: ФИОРУКиспол =стрФИО; ДолжнРУКиспол=стрДОЛ;
 |  name="ДолжнРУКиспол": ФИОРУКиспол =стрФИО; ДолжнРУКиспол=стрДОЛ;
 |  name="ФИОМОЛСдал"	: ФИОМОЛСдал  =стрФИО; ДолжнМОЛСдал =стрДОЛ; ТабНомМОЛСдал=стрТАБ;
 |  name="ДолжнМОЛСдал" : ФИОМОЛСдал  =стрФИО; ДолжнМОЛСдал =стрДОЛ; ТабНомМОЛСдал=стрТАБ;
 |  name="ТабНомМОЛСдал": ФИОМОЛСдал  =стрФИО; ДолжнМОЛСдал =стрДОЛ; ТабНомМОЛСдал=стрТАБ;
 |  name="ФИОПрин"	: ФИОПрин     =стрФИО; ДолжнПрин    =стрДОЛ;
 |  name="ДолжнПрин"	: ФИОПрин     =стрФИО; ДолжнПрин    =стрДОЛ;
 |  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);
 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, 30)+"???";
   |  Match(tmp, "???.??.??.??.??.??.????.?.10?.??.3??"): tmp=SubStr(tmp, 1, 33)+"???";
   |  Match(tmp, "ЗАБ.??.10?.??")			: tmp=tmp;
   else tmp="";
   fi;
   СчетУНФА=tmp; 
 fi;
 ^"";
end;

Func Дата_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String) :String;
var dd :Date;
 Template.HideEditor(False);
 dd=ВыборДаты(GetDate);
 SetDate(dd);
 ^"";
end;

--Func ОКОФ_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String) :String;
--var УслАН, tmp :String;
--var REC :Record;
--var k :Integer;
-- Template.HideEditor(False);
-- 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;
-- REC=OpenCardFile(PlanVar("НФА")+"\Картотеки\"+"ВыборОКОФ02.bro","КЛРАЗД='"+SubStr(tmp, 1, 2)+"'");
-- if REC=NIL: ^""; fi;
-- k=Int(GetCardFieldS("ОКОФ02", REC, "КЛГРУПП"));
-- if k>0:
--   АмортГруппа=k;
--   if ДатаПринБух>1.1.100: состОС[1].СрокНовИсп=ВзятьСрокАмортГруппы(k); fi;
--   КодОКОФ=GetCardFieldS("ОКОФ02", REC, "КОД");
-- 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))<>"К." or Up(SubStr(ANA, 1, 2))<>"ПБС.") and Наше=False: ^""; fi;
 if (Up(SubStr(ANA, 1, 2))<>"К." and Up(SubStr(ANA, 1, 4))<>"ПБС." and ANA<>""): ^""; 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 :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, KolTrans, Цена :Numeric;
var CRDднфа, CRDакты, CRDсотр, CRDснфа, CRDинвк, ANA, УслПР, КОДНФА, КОДИНВ, СЧД, tmp, tmp2, tmp3, v1, ВЕД :String;
var OK, Режим, Work, Flag, NewUpdate :Logical;
 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 КОДФОРМЫ='ОКУД_0306001'");
 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, "ИНВНОМЕР");
     КОДНФА=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);
   ИнициализироватьУсловия(True);
   ДНФА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;
     СЧД=TransDeb(k);
     for y=1 to len do
       OK=True;
       if УслАНА[y]<>"":
	 OK=False;
	 j=TransSignCount(k);
	 for i=1 to j do
	   OK=РАБ.НФА.B01.2СоотвПризнака0(TransSignName(k, i), УслАНА[y]);
--	     OK=РАБ.НФА.FUNC_LIB.ПризнакСоотвМаске(TransSignName(k, i), УслАНА[y]);
	   if OK: Break; fi;
	 od;
       fi;
       OK=(OK and РАБ.НФА.B01.2СоотвСчета0(СЧД,	      УслДЕБ[y]));
       OK=(OK and РАБ.НФА.B01.2СоотвСчета0(TransCre(k), УслКРЕ[y]));
--	 OK=(OK and РАБ.НФА.FUNC_LIB.СчетСоотвМаске(СЧД,	 УслДЕБ[y]));
--	 OK=(OK and РАБ.НФА.FUNC_LIB.СчетСоотвМаске(TransCre(k), УслКРЕ[y]));
--	 OK=(OK and (Цена>Общ_Пер('ОС_РАСХ',dBT)));
       if OK: Work=True; Break; fi;
     od;
     if Work:
       КОДНФА=РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "НФА", True);
       КОДИНВ=РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "УЧН", True);
       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, "1_0"+РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "П", True), "|");
	   tmp=РАБ.НФА.FUNC_LIB.Объединить(tmp, "1_0"+РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "М", True), "|");
	   tmp=РАБ.НФА.FUNC_LIB.Объединить(tmp, "1_0"+SubStr(РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "МОЛ", True), 3, 255), "|");
	   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"+РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "К", False), "|");
	   InsertInArray(ДОПАНА, j, tmp);
	 fi;
       fi;
     fi;
   od; -- Transaction
   len=LengthOfArray(НФА_ИНВ_OP);
   if len=0: Message("НФА для создания акта^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;
   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, "КОДФОРМЫ"   , "ОКУД_0306001");
       y=PutFieldS(ROакты, x, "КОДАНАУНФА" , КОДНФА);
       y=PutFieldS(ROакты, x, "ИНВНОМЕР"   , КОДИНВ);
       tmp3=GetFieldS(ROакты, x, "ИНВНОМЕРВЕД");
       if tmp3="" or tmp3=" " or Flag:
	 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, "ИНВНОМЕРВЕД", ВЕД); --Ведомственный номер уже присвоен
	   y=PutFieldS(ROакты, x, "ЗавНомер",Раб.НФА.B01.2ПолеПоПризнакуС0(tmp,'ЗАВОД_НОМ') ); --Ведомственный номер уже присвоен
	 fi;
       fi;
       if trim(getfields(ROакты, x,'ЗавНомер'))='':
	  tmp=Раб.НФА.B01.2ПолеПоПризнакуС0("ИНВВЕД."+КОДНФА+"."+КОДИНВ,'ЗАВОД_НОМ');
	  if tmp<>'':
	     y=PutFieldS(ROакты, x, "ЗавНомер",tmp);
	  fi;
       fi;
       y=PutFieldS(ROакты, x, "СЧЕТУНФА"   ,	СЧД);
       y=PutFieldD(ROакты, x, "ДАТАПРИНБУХ",	dBT);
       dd=GetFieldD(ROакты, x, "ДАТААКТА");
       if dd=1.1.100: y=PutFieldD(ROакты, x, "ДАТААКТА", dBT); fi;
       if GetFieldI(ROакты, x, "НОМЕРАКТА")=0 or Flag:
	 LastNum=LastNum+1;
	 y=PutFieldI(ROакты, x, "НОМЕРАКТА", LastNum);
	 y=PutFieldS(ROакты, x, "БУМНОМЕР",  Str(LastNum));
       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);
       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, "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;
       -- Исполнитель
       j=SearchInArray(Buf, "0_1К.", 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, "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;
       -- Подписи
       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;
       dd=GetFieldD(ROакты, x, "ДАТАПОДРУК");
       if dd=1.1.100: y=PutFieldD(ROакты, x, "ДАТАПОДРУК", dBT); 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;
       dd=GetFieldD(ROакты, x, "ДАТАПОДИСПОЛ");
       if dd=1.1.100: y=PutFieldD(ROакты, x, "ДАТАПОДИСПОЛ", dBT); fi;
       tmp2=GetFieldS(ROакты, x, "ФИОГЛБУХПРИН");
       if tmp2="" or tmp2=" " or Flag:
	 tmp=ВзятьДанныеКонтрагента("", "ФБУХ", False);
	 y=PutFieldS(ROакты, x, "ФИОГЛБУХПРИН", tmp);
       fi;
       tmp2=GetFieldS(ROакты, x, "ФИОГЛБУХСДАЛ");
       if tmp2="" or tmp2=" " or Flag:
	 tmp=ВзятьДанныеКонтрагента(tmp3, "ФБУХ", True);
	 y=PutFieldS(ROакты, x, "ФИОГЛБУХСДАЛ", tmp);
       fi;
       -- МОЛ
       j=SearchInArray(Buf, "1_0Л.", 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;
	 dd=GetFieldD(ROакты, x, "ДАТАПРИН");
	 if dd=1.1.100: y=PutFieldD(ROакты, x, "ДАТАПРИН", dBT); fi;
	 tmp2=GetFieldS(ROакты, x, "ДОЛЖНПРИН");
	 if tmp2="" or tmp2=" " or Flag:
	   --tmp=GetFieldS(ROсотр, h, "ДОЛЖНОСТЬ.ДОЛЖ");
	   tmp=GetCardFieldS(CRDсотр, REC, "ДОЛЖНОСТЬ.ДОЛЖ");
	   y=PutFieldS(ROакты, x, "ДОЛЖНПРИН", tmp);
	 fi;
	 tmp2=GetFieldS(ROакты, x, "ФИОПРИН");
	 if tmp2="" or tmp2=" " or Flag:
	   tmp=GetFieldS(ROсотр, h, "ФАМИЛИЯ")+" "+GetFieldS(ROсотр, h, "ИНИЦИАЛЫ");
	   y=PutFieldS(ROакты, x, "ФИОПРИН", tmp);
	 fi;
       fi;
       --
       OA=OpenArray(ROакты, x, "СОСТОС", "");
       if Records(OA)=0: z=InsertRecord(OA, 1); else z=1; fi;
       --
       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;
       -- Таблица
       tmp2=GetFieldS(OA, z, "МЕТОДИЗНОСА");
       SumTrans=GetFieldN(OA, z, "БАЛАНССТОИМ");
       if SumTrans=0 or Flag: 
	 Цена=Saldo(СЧД+"{"+КОДНФА+"&"+КОДИНВ+"}", dET);
	 y=PutFieldN(OA, z, "БАЛАНССТОИМ", Цена);
	 SumTrans=GetFieldN(OA, z, "ПОКСТОИМ");
	 if SumTrans=0 or Flag: y=PutFieldN(OA, z, "ПОКСТОИМ", Цена); fi;
       else
	 Цена=SumTrans;
       fi;
       if tmp2="" or tmp2=" " or Flag:
	  if Цена<=Общ_Пер('ОС_100',dBT):y=PutFieldS(OA, z, "МЕТОДИЗНОСА", "100% начислено амортизации");
	   | true:y=PutFieldS(OA, z, "МЕТОДИЗНОСА", "Линейный метод (утвержден НК РФ)");
	  fi;

       fi;
--	 tmp2=ВзятьСчетАморт(СЧД, True);
--	 if tmp2<>"":
--	   KolTrans=Abs(Saldo(tmp2+"{"+КОДНФА+"&"+КОДИНВ+"}", dET));
--	 else
--	   KolTrans=0;
--	 fi;
--	 y=PutFieldN(OA, z, "СУМНАЧАМОРТ", KolTrans);
--	 y=PutFieldN(OA, z, "ОСТСТОИМ", Abs(Цена-KolTrans));
       tmp2=ВзятьСчетАморт(СЧД, True);
       if tmp2<>"":
--	   KolTrans=Abs(Turn("+"+tmp2+"{"+КОДНФА+"&"+КОДИНВ+"}", 1.1.100, dET));
	 KolTrans=Abs(Saldo(tmp2+"{"+КОДНФА+"&"+КОДИНВ+"}", dET));
       else
	 KolTrans=0;
       fi;
       y=PutFieldN(OA, z, "СУМНАЧАМОРТ", KolTrans);
       y=PutFieldN(OA, z, "ОСТСТОИМ", Abs(Цена));
       -- Инвентарная карточка
       tmp="ИНВВЕД."+КОДНФА+"."+КОДИНВ;
       if tmp<>"": REC=SignToRecord(tmp, False); else REC=NIL; fi;
       if REC<>NIL:
	 h=GetRecordNumber(ROинвк, REC);
	 if h>0:
	   y=PutFieldS(ROакты, x, "НОМЕРКАРТОЧ", GetFieldS(ROинвк, h, "НОМЕРБУМ"));
	   y=PutFieldD(ROакты, x, "ДАТАКАРТОЧ",  GetFieldD(ROинвк, h, "DD"));
	   if GetFieldD(OA, z, "ДАТАВВЭКСП")=1.1.100 or Flag:y=PutFieldD(OA, z, "ДАТАВВЭКСП", Раб.СТР.MinDebDat2(Раб.НФА.B01.ВзятьДЭКСПЛ(КОДНФА,КОДИНВ),dBT));fi;
--	     if GetFieldD(OA, z, "ДАТАВВЭКСП")=1.1.100 or Flag:y=PutFieldD(OA, z, "ДАТАВВЭКСП", GetFieldD(ROинвк, h, "ДАТ_ВЭКСП"));fi;
	 fi;
	| true:
	  if GetFieldD(OA, z, "ДАТАВВЭКСП")=1.1.100 or Flag:y=PutFieldD(OA, z, "ДАТАВВЭКСП", Раб.СТР.MinDebDat2(Раб.НФА.B01.ВзятьДЭКСПЛ(КОДНФА,КОДИНВ),dBT));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сотр);
   CloseWorkArea(ROакты);
   CloseWorkArea(ROднфа);
   ToggleAutorefresh(Режим);
 end;
 ^True;
end;

Func Драгметалл_Расшифровать(Value:String) :String;
 if Pos("ЗОЛОТО"   , Value)>0 or Pos("ЗОЛ"    , Value)>0 or Pos("ЗОЛОТ"  , Value)>0 or Pos("AU", Value)>0 or  Pos("AURUM"     , Value)>0: ^"Золото"  ;
 |  Pos("СЕРЕБРО"  , Value)>0 or Pos("СЕРЕБ"  , Value)>0 or Pos("СЕРЕБР" , Value)>0 or Pos("AG", Value)>0 or  Pos("ARGENTUM"  , Value)>0: ^"Серебро" ;
 |  Pos("ПЛАТИНА"  , Value)>0 or Pos("ПЛАТ"   , Value)>0 or Pos("ПЛАТИН" , Value)>0 or Pos("PT", Value)>0 or  Pos("PLATINA"   , Value)>0: ^"Платина" ;
 |  Pos("ПАЛЛАДИЙ" , Value)>0 or Pos("ПАЛЛАД" , Value)>0 or Pos("ПАЛАД"  , Value)>0 or Pos("PD", Value)>0 or  Pos("PALLADIUM" , Value)>0: ^"Палладий";
 |  Pos("ИРИДИЙ"   , Value)>0 or Pos("ИРИД"   , Value)>0 or Pos("ИРИДИ"  , Value)>0 or Pos("IR", Value)>0 or  Pos("IRIDIUM"   , Value)>0: ^"Иридий"  ;
 |  Pos("РОДИЙ"    , Value)>0 or Pos("РОД"    , Value)>0 or Pos("РОДИ"	 , Value)>0 or Pos("RH", Value)>0 or  Pos("RHODIUM"   , Value)>0: ^"Родий"   ;
 |  Pos("РУТЕНИЙ"  , Value)>0 or Pos("РУТ"    , Value)>0 or Pos("РУТЕН"  , Value)>0 or Pos("RU", Value)>0 or  Pos("RUTHENIUM" , Value)>0: ^"Рутений" ;
 |  Pos("ОСМИЙ"    , Value)>0 or Pos("ОСМ"    , Value)>0 or Pos("ОСМИ"	 , Value)>0 or Pos("OS", Value)>0 or  Pos("OSMIUM"    , Value)>0: ^"Осмий"   ;
 |  Pos("МПГ"	   , Value)>0														: ^"МПГ"     ; -- металлы платиновой группы
 fi;
 ^"";
end;

Func Объединить(Value1:String; Value2:String; Separator:String) :String;
var Ret :String;
 if Value1<>"" and Value2<>"": Ret=Value1+Separator+Value2;
 |  Value1= "" and Value2<>"": Ret=Value2;
 |  Value1<>"" and Value2="" : Ret=Value1;
 |  True: Ret="";
 fi;
 ^Ret;
end;

Func НормироватьПробелы(Value:String) :String;
var ii, num :Integer;
var RES :String;
 RES="";
 num=WordsCount(Value, " ");
 if num>0: for ii=1 to num do RES=Объединить(RES, ExtractWord(ii, Value, " "), " "); od; fi;
 ^RES;
end;

Func Драгметалл_ВзятьНазвание(НаименДрагметалла:String) :String;
var Value, Chars, tmp1, tmp2 :String;
var ii, len, intChars :Integer;
 len=Length(НаименДрагметалла);
 if len>0:
   Value="";
   for ii=1 to len do
     Chars=SubStr(НаименДрагметалла, ii, 1);
     intChars=Ascii(Chars);
     if (intChars>= 65 and intChars<= 90) or  -- латиница заглавные
	(intChars>= 97 and intChars<=122) or  -- латиница строчные
	(intChars>=192 and intChars<=255)  :  -- национальный алфавит
       Value=Value+Chars; else Value=Value+" ";
     fi;
   od;
   Value=Up(НормироватьПробелы(Value));
   len=WordsCount(Value, " ");
   if len=1: 
    ^(Драгметалл_Расшифровать(Value));
   |  len=2: 
    tmp1=Драгметалл_Расшифровать(ExtractWord(1, Value, " ")); if Up(tmp1)="НФА": tmp1=""; fi;
    tmp2=Драгметалл_Расшифровать(ExtractWord(2, Value, " ")); if Up(tmp2)="НФА": tmp2=""; fi;
    ^(Объединить(tmp1, tmp2, "-"));
   else ^"";
   fi;
 fi;
 ^"";
end;

Func ОбновлениеАктовРасход :Logical;
var REC, StoreREC, RECинвк :Record;
var dBT, dET, dd, dVV, dPE :Date;
var ROднфа, ROакты, ROсотр, ROснфа, ROинвк, OA, OAинк, num, len, k, y, x, z, j, i, h, NUMинвк, xxx :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;
 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);
 Refresh(False);
 ROднфа=OpenWorkArea(CRDднфа, "", "Ukey="+RecordToString(REC));
 ROакты=OpenWorkArea(CRDакты, "", "ДНФАID="+Str(ДНФАID)+" and КОДФОРМЫ='ОКУД_0306001'");
 ROсотр=OpenWorkArea(CRDсотр, "", "1=0");
 ROснфа=OpenWorkArea(CRDснфа, "", "1=0");
 ROинвк=OpenWorkArea(CRDинвк, "", "1=0");
 ShowProgress(4, "Считывание информации операции движения НФА ...");
 Try
   ProgressPos(1);
   ClearVariable(НФА_ИНВ_RO);
   len=Records(ROакты);
   for i=1 to len do
     КОДИНВ=GetFieldS(ROакты, i, "ИНВНОМЕР");
     КОДНФА=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(2);
   ИнициализироватьУсловия(False);
   ProgressPos(3);
   ДНФА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 КОДНФА<>"" 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), "|");
	   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не найдено!", 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
       RECинвк=NIL;
       NUMинвк=0;
       dPE=1.1.100;
       СрокНФА=0.00;
       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, "КОДФОРМЫ"   , "ОКУД_0306001");
       y=PutFieldS(ROакты, x, "КОДАНАУНФА" , КОДНФА);
       y=PutFieldS(ROакты, x, "ИНВНОМЕР"   , КОДИНВ);
       y=PutFieldD(ROакты, x, "ДАТАСПИСБУХ"   , dbt);
       tmp3=GetFieldS(ROакты, x, "ИНВНОМЕРВЕД");
       Try RECинвк=SignToRecord("ИНВВЕД."+КОДНФА+"."+КОДИНВ, False); Except RECинвк=NIL; end;
       if tmp3="" or tmp3=" " or Flag:
	 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;
       if RECинвк<>NIL: NUMинвк=GetRecordNumber(ROинвк, RECинвк); else NUMинвк=0; fi;
       if trim(getfields(ROакты, x,'ЗавНомер'))='':
	  tmp=Раб.НФА.B01.2ПолеПоПризнакуС0("ИНВВЕД."+КОДНФА+"."+КОДИНВ,'ЗАВОД_НОМ');
	  if tmp<>'':
	     y=PutFieldS(ROакты, x, "ЗавНомер",tmp);
	  fi;
       fi;
--	 if GetFieldD(ROакты, x, "ДАТАВВЭКСП")=1.1.100 or Flag:y=PutFieldD(ROакты, x, "ДАТАВВЭКСП", Раб.НФА.B01.2ПолеПоПризнаку0Д("ИНВВЕД."+КОДНФА+"."+КОДИНВ,'ДАТ_ВЭКСП'));fi;
       y=PutFieldS(ROакты, x, "СЧЕТУНФА"   ,	СЧНФА);
       dd=GetFieldD(ROакты, x, "ДАТААКТА");
       if dd=1.1.100: y=PutFieldD(ROакты, x, "ДАТААКТА", dBT); fi;
       dVV=РАБ.НФА.B01.ВзятьДУЧЕТ(КОДНФА,КОДИНВ);
       if dVV=1.1.100:
	  dVV=РАБ.НФА.FUNC_LIB.ДатаПроводки(СЧНФА, КОДНФА+"&"+КОДИНВ, dBT, False);
       fi;
       y=PutFieldD(ROакты, x, "ДАТАПРИНБУХ", dVV);
       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);
	| true:
	  j=SearchInArray(Buf, "1_0ПБ", False, 1);
	  if j>0: tmp3=SubStr(ExtractWord(j, ДОПАНА[i], "|"), 4, 255); fi;
       fi;
       if j<1: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:
	 if NUMинвк>0: tmp=Trim(Name_A(Trim(GetFieldS(ROинвк, NUMинвк, "МХЭ")))); else tmp=""; fi;
	 if tmp<>"":
	   y=PutFieldS(ROакты, x, "МЕСТООБЪЕКТА", tmp);
	 else
	   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;
       fi;
       tmp2=GetFieldS(ROакты, x, "ИЗГОТОВИТЕЛЬ");
       if tmp2="" or tmp2=" " or Flag:
	 if NUMинвк>0: 
	   tmp=Trim(GetFieldS(ROинвк, NUMинвк, "ИЗГОТОВИТЕЛЬ"));
	   y=PutFieldS(ROакты, x, "ИЗГОТОВИТЕЛЬ", tmp);
	 fi;
       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;
       --
       dd=РАБ.НФА.B01.ВзятьДЭКСПЛ(КОДНФА,КОДИНВ);
       dPE=Раб.СТР.MinDebDat2(Раб.НФА.B01.ВзятьДЭКСПЛ(КОДНФА,КОДИНВ), dBT);
       if dd>1.1.1800 and dPE>dd: dPE=dd; fi;
       if not dPE>1.1.1800 and NUMинвк>0: dPE=GetFieldD(ROинвк, NUMинвк, "ДАТ_ВЭКСП"); fi;
--	 if not dPE>1.1.1800: dPE=РАБ.НФА.B01.2ПолеПоПризнаку0Д("ИНВВЕД."+КОДНФА+"."+КОДИНВ, 'ДАТ_ВЭКСП'); fi;
       --
       OA=OpenArray(ROакты, x, "СОСТОС", "");
       if Records(OA)=0: z=InsertRecord(OA, 1); else z=1; fi;
       --
       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, "КЛГРУПП");
	   if dPE>=1.1.2009: 
		 num=GetFieldI(ROснфа, h, "КЛГРУПП09");    if num=0:	    num=GetFieldI(ROснфа, h, "КЛГРУПП");    if num=0:	     num=GetFieldI(ROснфа, h, "КЛГРУПП02"); fi; fi;
	     СрокНФА=GetFieldN(ROснфа, h, "СРОКАМ09"); if СрокНФА=0.00: СрокНФА=GetFieldN(ROснфа, h, "СРОКАМ"); if СрокНФА=0.00: СрокНФА=GetFieldN(ROснфа, h, "СРОКАМ02");  fi; fi;
	   | dPE>=1.1.2007 and dPE<1.1.2009:
		 num=GetFieldI(ROснфа, h, "КЛГРУПП");	 if num=0:	  num=GetFieldI(ROснфа, h, "КЛГРУПП02"); fi;
	     СрокНФА=GetFieldN(ROснфа, h, "СРОКАМ"); if СрокНФА=0.00: СрокНФА=GetFieldN(ROснфа, h, "СРОКАМ02");  fi;
	   |  dPE< 1.1.2007: 
		 num=GetFieldI(ROснфа, h, "КЛГРУПП02");
	     СрокНФА=GetFieldN(ROснфа, h, "СРОКАМ02");
	   fi;
	   y=PutFieldI(ROакты, x, "АМОРТГРУППА", num);
	 fi;
	 --
	 dd=GetFieldD(OA, z, "ГОДВЫПУСКА");
	 if dd=1.1.100 or Flag:
	   if NUMинвк>0:
	     dd=GetFieldD(ROинвк, NUMинвк, "ДАТА_ИЗГ");
	     if dd>1.1.100: y=PutFieldD(OA, z, "ГОДВЫПУСКА", dd); fi;
	   fi;
	 fi;
	 --
	 tmp2=GetFieldS(OA, z, "СРОКПОЛИСП");
	 if tmp2="" or tmp2=" " or Flag:
	   if СрокНФА=0.00: СрокНФА=ВзятьСрокАмортГруппыЛет(num); fi;
	   if dPE>1.1.1800 and СрокНФА>0.00:
	     tmp=РАБ.НФА.FUNC_LIB.ИнтервалМеждуДатами(dPE, AddMon(dPE, Int(СрокНФА)*12), 4, False, True);
	   else
	     tmp=ВзятьСрокАмортГруппы(num);
	   fi;
	   y=PutFieldS(OA, z, "СРОКПОЛИСП", tmp);
	   tmp2=GetFieldS(OA, z, "СРОКНОВИСП");
	   if tmp2="" or tmp2=" " or Flag:
	     y=PutFieldS(OA, z, "СРОКНОВИСП", tmp);
	   fi;
	 fi;
	 --
	 tmp2=GetFieldS(OA, z, "ФАКТСРОКЭК");
	 if tmp2="" or tmp2=" " or Flag:
	   if dPE>1.1.1800 and dBT>=dPE:
	     tmp=Trim(РАБ.НФА.FUNC_LIB.ИнтервалМеждуДатами(dPE, dBT, 4, False, True));
	     if tmp<>"": y=PutFieldS(OA, z, "ФАКТСРОКЭК", tmp); fi;
	   fi;
	 fi;
	 SumTrans=GetFieldN(OA, z, "НОРМААМОРТ");
	 if SumTrans=0 or Flag: y=PutFieldN(OA, z, "НОРМААМОРТ", GetFieldN(ROснфа, h, "НОРМАМОРТ")); fi;
       fi;										   --Раб.НФА.B01.min2dat(Раб.НФА.B01.ВзятьДЭКСПЛ(КОДНФА,КОДИНВ),dBT)
       -- Таблица
       if GetFieldD(OA, z, "ДАТАВВЭКСП")=1.1.100 or Flag: y=PutFieldD(OA, z, "ДАТАВВЭКСП", dPE); fi;
--	 if GetFieldD(OA, z, "ДАТАВВЭКСП")=1.1.100 or Flag: y=PutFieldD(OA, z, "ДАТАВВЭКСП", Раб.НФА.B01.min2dat(Раб.НФА.B01.ВзятьДЭКСПЛ(КОДНФА,КОДИНВ),dBT)); fi;
--	 if GetFieldD(OA, z, "ДАТАВВЭКСП")=1.1.100 or Flag: y=PutFieldD(OA, z, "ДАТАВВЭКСП", Раб.НФА.B01.2ПолеПоПризнаку0Д("ИНВВЕД."+КОДНФА+"."+КОДИНВ,'ДАТ_ВЭКСП')); fi;
       tmp2=GetFieldS(OA, z, "МЕТОДИЗНОСА");
       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;
       if tmp2="" or tmp2=" " or Flag:
	  if Цена<Общ_Пер('ОС_100',dBT):	       y=PutFieldS(OA, z, "МЕТОДИЗНОСА", "100% начислено амортизации");
	   | true:		       y=PutFieldS(OA, z, "МЕТОДИЗНОСА", "Линейный метод (утвержден НК РФ)");
	  fi;
       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));
--	 -- Инвентарная карточка
--	 tmp="ИНВВЕД."+КОДНФА+"."+КОДИНВ;
--	 if tmp<>"": REC=SignToRecord(tmp, False); else REC=NIL; fi;
--	 if REC<>NIL:
--	   h=GetRecordNumber(ROинвк, REC);
--	   if h>0:
--	     y=PutFieldS(ROакты, x, "НОМЕРКАРТОЧ", GetFieldS(ROинвк, h, "НОМЕРБУМ"));
--	     y=PutFieldD(ROакты, x, "ДАТАКАРТОЧ",  GetFieldD(ROинвк, h, "DD"));
--	   fi;
--	 fi;
       CloseWorkArea(OA);
       num=0;
       if NUMинвк>0:
	 OA    = OpenArray(ROакты, x,	    "ХАРОС", "");
	 OAинк = OpenArray(ROинвк, NUMинвк, "ХАРОС", "");
	 num=Records(OAинк);
	 if num>0:
	   --if Trim(GetFieldS(OAинк, 1, "НАИМЕН_ПР"))<>"":
	     if num>=Records(OA):
	       if Records(OA)>0: DeleteAllRecords(OA); fi;
	       for h=1 to num do
		 z=InsertRecord(OA, h);
		 tmp=Trim(GetFieldS(OAинк, h, "НАИМЕН_ПР"));
		 y=PutFieldS(OA, z, "НАИМОБ", tmp);
		 tmp=Trim(GetFieldS(OAинк, h, "ОСН"));
		 Try xxx=Int(tmp); Except xxx=0; end;
		 y=PutFieldI(OA, z, "КОЛ", xxx);
		 tmp=Trim(GetFieldS(OAинк, h, "НАИМЕН_ДРАГ"));
		 --if tmp<>"": tmp=Trim(Name_A(tmp))+Chr(13)+"["+tmp+"]"; fi;
		 tmp=Драгметалл_ВзятьНазвание(tmp);
		 y=PutFieldS(OA, z, "НАИМДРАГМАТ", tmp);
		 y=PutFieldS(OA, z, "ННДрагМат",   "");
		 tmp=Trim(Trim(GetFieldS(OAинк, h, "ЕДИЗМ_ДРАГ"))+" ["+Trim(GetFieldS(OAинк, h, "ОКЕИ_ДРАГ"))+"]");
		 y=PutFieldS(OA, z, "ЕДИЗМДРАГМАТ", if(tmp<>"[]", tmp, ""));
		 Цена=GetFieldN(OAинк, h, "КОЛИЧ");
		 if Цена>0.00 and Round(Цена, 2)=0.00: Цена=0.01; fi;
		 y=PutFieldN(OA, z, "МАССАДРАГМАТ", Цена);
	       od;
	     fi;
	   --fi;

	 fi;
       fi;
       CloseWorkArea(OAинк);
       CloseWorkArea(OA);
       -- Вставляем информацию КОНЕЦ
       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сотр);
   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);
   Buf[1]="Приход основных средств";
   Buf[2]="Расход основных средств";
   num=Alternate("Выберите действие...", Buf, -1, 1, 12);
   if num=1: if ОбновлениеАктовПриход: Message("Обновление акта (актов) на приход успешно завершено!", mtInformation); fi;
   |  num=2: if ОбновлениеАктовРасход: Message("Обновление акта (актов) на расход успешно завершено!", mtInformation); fi;
   else Exit;
   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;

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

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),'');


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;



КОНЕЦ
