БЛАНКСШАБЛОНОМ[10.02.2006] "Акт о приеме-передаче здания (сооружения)", РЕДАКТОР РПО_АКТЫ_УНФА;
-- Редакция ЗАО "Агентство 'Русспромоценка'"
2-- Переменные
ФлДопУтверждаю:l;
Сек1 :Object;	СекХарОС :Object;	СекстрЗАК :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 NewREC	   :Logical=(CurrentState=crdusInserted);
var SelfCRD    :String="РПО_АКТЫ_УНФА";
var Buf[]	   :String;
var BufI[]	   :Integer;
var МаскаСЧ    :String="(*.101.?1*|*.101.?2*|*.101.?3*)&(???.????.???????.???.?.101.??.?10|ЗАБ.??.101.??)";
--Тукачев П.А.
var МаскаСЧД	   :String="(*.101.?1*|*.101.?2*|*.101.?3*)&(???.????.???????.???.?.101.??.310|ЗАБ.??.101.??)|???.????.???????.???.?.102.??.320|???.??.??.??.??.??.????.?.103.??.330";
var МаскаСЧК	   :String="(*.101.?1*|*.101.?2*|*.101.?3*)&(???.????.???????.???.?.101.??.410|ЗАБ.??.101.??)|???.????.???????.???.?.102.??.420|???.??.??.??.??.??.????.?.103.??.430";
--
var 2БланкИмя0	   :String2;
var 2КлассФормыДок0  :String2;
var 2КодФормыДок0    :String2;
--
var recCurrent:record;
NewRECbln	   :String;
var ВниманиеСТР    :String;
ВниманиеОбъект	   :Object;
var First	   :Logical;
ВниманиеНапоминать :Logical;
КнРасчет	   :Object;
-- Таблица характеристик здания
var ОбщПл  []	   :Numeric=ХАРЗДАНИЯ[$].AОбщПл  ;
var Этажей []	   :Integer=ХАРЗДАНИЯ[$].AЭтажей ;
var СтроитV[]	   :Numeric=ХАРЗДАНИЯ[$].AСтроитV;
var ПодземV[]	   :Numeric=ХАРЗДАНИЯ[$].AПодземV;
var ВстрV  []	   :Numeric=ХАРЗДАНИЯ[$].AВстрV  ;
var ВстрПV []	   :Numeric=ХАРЗДАНИЯ[$].AВстрПV ;
var ПV	   []	   :Numeric=ХАРЗДАНИЯ[$].AПV	 ;
var Матер  []	   :Numeric=ХАРЗДАНИЯ[$].AМатер  ;
var Прим   []	   :String =ХАРЗДАНИЯ[$].AПрим	 ;
--
var УслДЕБ[]	   :String;
var УслКРЕ[]	   :String;
var УслАНА[]	   :String;
var НФА_ИНВ_OP[]   :String;
var НФА_ИНВ_RO[]   :String;
var ДОПАНА[]	   :String;
var ИНВ_MSK[]	   :String;
var ИНВ_INI[]	   :String;
var ИНВ_NUM[]	   :Integer;
2-- Общие процедуры и функции

Proc Очистить;
 ClearVariable(ОбщПл); ClearVariable(Этажей); ClearVariable(СтроитV); ClearVariable(ПодземV);
 ClearVariable(ВстрV); ClearVariable(ВстрПV); ClearVariable(ПV);	  ClearVariable(Матер);
 ClearVariable(Прим);
 --
 ClearVariable(УслДЕБ); ClearVariable(УслКРЕ); ClearVariable(УслАНА); ClearVariable(Buf); ClearVariable(BufI);
 ClearVariable(НФА_ИНВ_OP); ClearVariable(НФА_ИНВ_RO); ClearVariable(ДОПАНА);
 ClearVariable(ИНВ_MSK); ClearVariable(ИНВ_INI); ClearVariable(ИНВ_NUM);
end;

Proc СинхронизацияСчитывания;
var RO, OA, i, num :Integer;
 EXIT;
 RO=OpenWorkArea(SelfCRD, "", "UKey="+RecordToString(Current));
 Try
   if Records(RO)=1:
	 OA=OpenArray(RO, 1, "ХАРЗДАНИЯ", "");
	 num=Records(OA);
	 if num>0 :
	   for i=1 to num do
	 if i<6:
	   --ОбщПл	[i]=GetFieldN(OA, i, "aОбщПл"  );
	   --Этажей [i]=GetFieldI(OA, i, "aЭтажей" );
	   --СтроитV[i]=GetFieldN(OA, i, "aСтроитV");
	   --ПодземV[i]=GetFieldN(OA, i, "aПодземV");
	   --ВстрV	[i]=GetFieldN(OA, i, "aВстрV"  );
	   --ВстрПV [i]=GetFieldN(OA, i, "aВстрПV" );
	   --ПV 	[i]=GetFieldN(OA, i, "aПV"	   );
	   --Матер	[i]=GetFieldN(OA, i, "aМатер"  );
	   --Прим	[i]=GetFieldS(OA, i, "aПрим"   );
	 else
	   --Прим	[i]=GetFieldS(OA, i, "aПрим"   );
	 fi;
	   od;
	 fi;
   fi;
 Finally
   CloseWorkArea(RO);
 end;
end;

Proc СинхронизацияЗаписи(REC:RECORD);
var RO, OA, i :Integer;
 RO=OpenWorkArea(SelfCRD, "", "UKey="+RecordToString(REC));
 Try
   if Records(RO)=1:
	 OA=OpenArray(RO, 1, "ХАРЗДАНИЯ", "");
	 BeginChanging(OA, True);
	 Try
	   if Records(OA)>0: DeleteAllRecords(OA); fi;
	   for i=1 to 8 do
	 if i<6 :
	   i=InsertRecord(OA, i);
	   i=PutFieldN(OA, i, "aОбщПл"	, ОбщПл  [i]);
	   i=PutFieldI(OA, i, "aЭтажей" , Этажей [i]);
	   i=PutFieldN(OA, i, "aСтроитV", СтроитV[i]);
	   i=PutFieldN(OA, i, "aПодземV", ПодземV[i]);
	   i=PutFieldN(OA, i, "aВстрV"	, ВстрV  [i]);
	   i=PutFieldN(OA, i, "aВстрПV" , ВстрПV [i]);
	   i=PutFieldN(OA, i, "aПV" , ПV	 [i]);
	   i=PutFieldN(OA, i, "aМатер"	, Матер  [i]);
	   i=PutFieldS(OA, i, "aПрим"	, Прим	 [i]);
	 else
	   i=InsertRecord(OA, i);
	   i=PutFieldS(OA, i, "aПрим"	, Прим	 [i]);
	 fi;
	   od;
	   EndChanging(OA);
	 Except
	   CancelChanging(OA);
	   Raise;
	 end;
   fi;
 Finally
   CloseWorkArea(RO);
 end;
end;

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

Proc ДобавитьУдалитьСтроки(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;
   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;
	 fi;
	 НачальнаяИтерация;
   fi;
 fi;
end;

Func НомерТекущейСекции :Integer;
var name :String;
 name=asString(Template.Name);
 if name="Сек1" 	: ^1;
 |	name="СекХарОС" : ^2;
 |	name="СекстрЗАК"	: ^3;
 |	name="СекстрТехДок" : ^4;
 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;
 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="ДатаВвЭксп"	 : ^состОС[Iter].ДатаВвЭксп;
 |	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="ДатаВвЭксп"	 : состОС[Iter].ДатаВвЭксп = 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 ВыборДоверенности;
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].СрокНовИсп;
 fi;
 dd2=РАБ.НФА.FUNC_LIB.ВзятьКонечнуюДатуИнтервала(Val, dd1);
 if dd2=1.1.100: dd2=ToDay; fi;
 РАБ.НФА.FUNC_LIB.TempSTR[1]=Val;
 РАБ.НФА.FUNC_LIB.TempDAT[1]=dd1;
 РАБ.НФА.FUNC_LIB.TempDAT[2]=dd2;
end;

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

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

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

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

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

--Тукачев
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(УслАНА);
 if дляПРИХОДА:
   УслДЕБ[1] = "(*.?.101.?1.310|*.?.101.?2.310|*.?.101.?3.310)&???.????.???????.???.?.???.??.???";
   УслКРЕ[1] = "*.?.106.?1.310|*.?.304.04.310|*.?.401.10.1??|00";
   УслАНА[1] = "";


   УслДЕБ[2] = "ЗАБ.??.101.?1|ЗАБ.??.101.?2|ЗАБ.??.101.?3";
   УслКРЕ[2] = "ЗАБАЛАНС";
   УслАНА[2] = "";

 else
   УслДЕБ[1] = "*.?.304.04.310|*.?.401.20.25*|*.?.401.20.24*|*.?.401.10.1??";
   УслКРЕ[1] = "(*.?.101.?1.410|*.?.101.?2.410|*.?.101.?3.410)&???.????.???????.???.?.???.??.???";
   УслАНА[1] = "";

   УслДЕБ[2] = "ЗАБАЛАНС";
   УслКРЕ[2] = "ЗАБ.??.101.?1|ЗАБ.??.101.?2|ЗАБ.??.101.?3";
   УслАНА[2] = "";
 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="ФактСрокЭк"	 : Сроки(Field, Iter); ^False;
 |	Field="СрокНовИсп"	 : Сроки(Field, Iter); ^False;
 |	Field="МетодИзноса"  : nn=0; ClearVariable(Buf);
			   Buf[1]="Линейный метод	(утвержден НК РФ)";
			   Buf[2]="Нелинейный метод (утвержден НК РФ)";
			   Buf[3]="Метод уменьшаемого остатка";
			   Buf[4]="Метод списания стоимости по сумме чисел лет срока полезного использования";
			   Buf[5]="Метод списания стоимости пропорционально объему продукции (работ)";
			   nn=Alternate("Выберите метод амортизации (износа)", Buf, -1);
			   if nn<>0: состОС[Iter].МетодИзноса=Buf[nn]; fi;
			   ^False;
 |	Field="ДолПредКом" or Field="ФИОПредКом"
			 : ВыборКомиссии; ^False;
 |	Field="Кн1"	 : ВыборДоверенности; ^False;
 fi;
 ^True;
end;

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

Func Field_OnValidateN(Field:String; Iter:Integer; Value:Numeric): Logical;
var Lim :Numeric;
var ss :s;
 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;
 Iter=pos('[',Field);
 if Iter>0:
	ss=delete(Field,1,Iter);
	Field=delete(Field,Iter,255);
	ss=SubStr(ss,1,pos(']',ss)-1);
	Iter=int(ss);
	while Iter>ХАРЗДАНИЯ do insertframe(ХАРЗДАНИЯ,ХАРЗДАНИЯ+1);od;
	putvariablen('ХАРЗДАНИЯ['+str(Iter)+'].a'+Field,Value);
 fi;
 ^True;
end;

Func Field_OnValidateI(Field:String; Iter:Integer; Value:Integer): Logical;
var ss :s;
 if Value<0: Message("Нельзя вводить отрицательное число.", mtError); ^False; fi;
 Iter=pos('[',Field);
 if Iter>0:
	ss=delete(Field,1,Iter);
	Field=delete(Field,Iter,255);
	ss=SubStr(ss,1,pos(']',ss)-1);
	Iter=int(ss);
	while Iter>ХАРЗДАНИЯ do insertframe(ХАРЗДАНИЯ,ХАРЗДАНИЯ+1);od;
	putvariablei('ХАРЗДАНИЯ['+str(Iter)+'].a'+Field,Value);
 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?.??.???")	: tmp=SubStr(tmp, 1, 30)+"???";
   |  Match(tmp, "???.??.??.??.??.??.????.?.10?.??.???"): 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, name, Фильтр, tmp1, tmp2 :String;
var REC, rr :Record;
var RO, k, j :Integer;
 Template.HideEditor(False);
 name=asString(Template.Field);
 if КодАнаУНФА="":
   Message("Не указан код учета НФА!", mtWarning);
   Template.Field="КодАнаУНФА";
   ^Cur;
 fi;
 УслАН=МаскаГРОС(SubStr(КодАнаУНФА, 5, 6));
 if УслАН<>"":
   tmp=ПризнакКонстанта(УслАН);
   if tmp="" : tmp=AnaElection(УслАН); fi;
   if tmp="" : ^""; fi;
   if tmp<>"": tmp=SubStr(tmp, 6, 2);  fi;
 fi;
 Фильтр="ФТР_РАЗД='"+SubStr(tmp, 1, 2)+"'";
 tmp1=""; rr=NIL;
 if name="КОДОКОФ":
   tmp=SubStr(КОДОКОФ, 4, 7);
   if КОДОКОФ<>"" and Length(tmp)=7:
	 RO=OpenWorkArea("РПО_ОКОФ", "", "1=0");
	 Try
	   for j=1 to 7 do
	 tmp1=" and Match(ФТР_КОДА, '"+SubStr(tmp, 1, 7-j+1)+RepStr("?", j-1)+"')";
	 tmp2=Фильтр+tmp1;
	 SetFilter(RO, tmp2);
	 k=Records(RO);
	 if k>0: if j=1 and k=1: rr=GetRecordKey(RO, 1); tmp1=""; fi; Фильтр=Фильтр+tmp1; Break; fi;
	   od;
	 Finally
	   CloseWorkArea(RO);
	 end;
   fi;
 fi;
 REC=OpenCardFile(PlanVar("НФА")+"\Картотеки\"+"ВыборРПО_ОКОФ.bro", Фильтр, rr, crdRecordOnly);
 if REC=NIL: ^""; fi;
 k=Int(GetCardFieldS("РПО_ОКОФ", REC, "АМОРТ_ГР"));
 if k>0:
   АМОРТГРУППА=k;
   if ДАТАПРИНБУХ>1.1.100: СОСТОС[1].СРОКНОВИСП=ВзятьСрокАмортГруппы(k); fi;
   КОДОКОФ=GetCardFieldS("РПО_ОКОФ", REC, "КОД_ОКОФ");
 fi;
 ^"";
end;

Func ВзятьДанныеКонтрагента(ANA:String; mode:String; Наше:Logical) :String;
var res, t1, t2, tmp :String;
var REC, REB :Record;
var ROK, ROB, num :Integer;
 res="";
 if Up(SubStr(ANA, 1, 2))<>"К." and Наше=False: ^""; fi;
 ROK=OpenWorkArea("КОНТРАГЕНТ", "", "1=0");
 Try
   if Наше:
	 SetFilter(ROK, "НАШЕ");
	 num=Records(ROK);
	 if num<1: REC=NIL;
	 |	num=1: REC=GetRecordKey(ROK, 1);
	 |	num>1: REC=GetRecordKey(ROK, 1);
		   SetFilter(ROK, "НАШЕ and РПО_УМОЛЧАНИЕ");
		   if Records(ROK)>0: REC=GetRecordKey(ROK, 1); fi;
	 fi;
   else
	 REC=SignToRecord(ANA, False);
   fi;
   if REC=NIL: ^""; fi;
   SetFilter(ROK, "Ukey="+RecordToString(REC));
   if mode="КИМЯ": res=GetFieldS(ROK, 1, "КОРИМЯ");
   |  mode="ОКПО": res=GetFieldS(ROK, 1, "ОКПО");
   |  mode="АДРС": tmp=GetFieldS(ROK, 1, "ЮРАДРЕС");
		   t1=GetFieldS(ROK, 1, "ТЕЛЕФОН"); t1=if(t1="", "", "тел. "+t1);
		   t2=GetFieldS(ROK, 1, "ФАКС");	t2=if(t2="", "", t2+" (факс)");
		   if tmp<>"": tmp=tmp+"; "+t1; else tmp=t1; fi;
		   if tmp<>"": tmp=tmp+"; "+t2; else tmp=t2; fi;
		   res=tmp;
   |  mode="БАНК": ROB=OpenWorkArea("БАНК_СЧЕТА", "", "КОНТРАГЕНТ="+RecordToString(REC));
		   Try
			 num=Records(ROB);
			 if num<1: REB=NIL;
			 |	num=1: REB=GetRecordKey(ROB, 1);
			 |	num>1: REB=GetRecordKey(ROB, 1);
				   SetFilter(ROB, "УМОЛЧАНИЕ and КОНТРАГЕНТ="+RecordToString(REC));
				   if Records(ROB)>0: REB=GetRecordKey(ROB, 1); fi;
			 fi;
			 if REB=NIL: ^""; fi;
			 SetFilter(ROB, "Ukey="+RecordToString(REB));
			 res="р/с: "+GetFieldS(ROB, 1, "РСЧЕТ")+" в "+GetFieldS(ROB, 1, "БАНК")+", "+GetFieldS(ROB, 1, "ГОРОД")+", "+
			 "к/с: "+GetFieldS(ROB, 1, "КСЧЕТ")+", БИК "+GetFieldS(ROB, 1, "БИК");
		   Finally
			 CloseWorkArea(ROB);
		   end;
   |  mode="ФРУК": res=GetFieldS(ROK, 1, "ФИОРУК");
   |  mode="ДРУК": res=GetFieldS(ROK, 1, "ДОЛЖНРУК");
   |  mode="ФКАС": res=GetFieldS(ROK, 1, "ФИОКАСС");
   |  mode="ДКАС": res=GetFieldS(ROK, 1, "ДОЛЖНКАСС");
   |  mode="ФБУХ": res=GetFieldS(ROK, 1, "ФИОБУХ");
   |  mode="ДБУХ": res=GetFieldS(ROK, 1, "ДОЛЖНБУХ");
   fi;
 Finally
   CloseWorkArea(ROK);
 end;
 ^res;
end;

--Тукачев
Func ВзятьСчетАморт(СЧНФА: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;
--Тукачев П.А.
var rs,rs2,OA1,OA2,ii:i;
var tmpNN:n;
--конец
 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 КОДФОРМЫ='ОКУД_0306030'");
 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=РАБ.НФА.FUNC_LIB.ПризнакСоотвМаске(TransSignName(k, i), УслАНА[y]);
	   if OK: Break; fi;
	 od;
	   fi;
	   OK=(OK and РАБ.НФА.FUNC_LIB.СчетСоотвМаске(СЧД,		   УслДЕБ[y]));
	   OK=(OK and РАБ.НФА.FUNC_LIB.СчетСоотвМаске(TransCre(k), УслКРЕ[y]));
	   OK=(OK and (Цена>0));
	   if OK: Work=True;
	  if not Match(СЧД, "???.????.???????.???.?.10?.??.???"):СЧД=TransCre(k);fi;
	  Break;
	   fi;
	 od;
	 if Work:
	   КОДНФА=РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "НФА", True);
	   КОДИНВ=РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "УЧН", True);
   --Тукачев П.А.
		  SetFilter(ROинвк, "НФА='"+КОДНФА+"' and ИНВ='"+SubStr(КОДИНВ, 5, 255)+"'");
		  if(Records(ROинвк)>0):
			  ЗавНомер = GetFieldS(ROинвк,1,"ЗАВОД_НОМ");
			  кодокоф = GetFieldS(ROинвк, 1, "окоф");
			  амортгруппа = GetFieldi(ROинвк, 1, "аморт_груп");
			  ДатаПринБух = GetFieldd(ROинвк, 1, "Оприх_Дата");
			  ДатаСписБух= GetFieldd(ROинвк, 1, "Выбыт_Дата");
			  EditorApply;
		  fi;
	  SetFilter(ROинвк, "1=0");
  --конец
	   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;
   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;
   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, "КОДФОРМЫ"   , "ОКУД_0306030");
	   y=PutFieldS(ROакты, x, "КОДАНАУНФА" , КОДНФА);
	   y=PutFieldS(ROакты, x, "ИНВНОМЕР"   , КОДИНВ);
	   tmp3=GetFieldS(ROакты, x, "ИНВНОМЕРВЕД");
	   if tmp3="" or tmp3=" " or Flag:
	 tmp="ИНВВЕД."+КОДНФА+"."+КОДИНВ;
--Тукачев П.А.
	   setfilter(ROинвк, "нфа='"+коднфа+"' and инв='"+substr(кодинв, 5, 255)+"'");
	   if(records(roинвк)>0):
			OA=openArray(roакты, x, "состос", "");
			if records(oa)=0:
				z=insertrecord(oa, 1);
			else
				z=1;
			fi;
			y=putfieldD(roакты, x,"ДатаПринБух", GetFieldD(roинвк, 1, "Оприх_Дата"));
			y=putfields(roакты, x, "кодокоф", GetFieldS (roинвк, 1, "окоф"));
			y=putfieldi(roакты, x, "амортгруппа", GetFieldi(roинвк, 1, "аморт_груп"));
			y=putfields(roакты, x, "ЗавНомер", GetFieldS (roинвк, 1, "ЗАВОД_НОМ"));
			closeworkarea(oa);
		fi;
--конец
	 ВЕД=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, "СЧЕТУНФА"   ,	СЧД);
	   if ДАТАПРИНБУХ=01.01.100:
	   y=PutFieldD(ROакты, x, "ДАТАПРИНБУХ",	dBT);
	   fi;
	   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;

--Тукачев П.А.
	   ---------------------------------------------------------
	   OA2=OpenArray(ROакты, x, "ХАРОС", "");
	   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, "НАИМЕН_ОБ");
				if tmp='':tmp=НАИМ_П(GetFieldS(OA1, ii, "НАИМЕН_ДРАГ"));fi;
				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сотр);
   CloseWorkArea(ROакты);
   CloseWorkArea(ROднфа);
   ToggleAutorefresh(Режим);
 end;
 ^True;
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;
--Тукачев П.А.
--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;
var rs,rs2,OA1,OA2,ii:i;
var СЧД,СЧК:String;
var tmpNN:n;
--конец
 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 КОДФОРМЫ='ОКУД_0306030'");
 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;
	 СЧД=TransDeb(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.СчетСоотвМаске(СЧД,		   УслДЕБ[y]));
	   OK=(OK and РАБ.НФА.FUNC_LIB.СчетСоотвМаске(TransCre(k), УслКРЕ[y]));
	   OK=(OK and (Цена>0));
	   if OK: Work=True;
	  if not Match(СЧД, "???.????.???????.???.?.10?.??.???"):СЧД=TransCre(k);fi;
	  Break;
	   fi;
	 od;
	 if Work:
	   КОДНФА=РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "НФА", True);
	   КОДИНВ=РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "УЧН", True);
   --Тукачев П.А.
		  SetFilter(ROинвк, "НФА='"+КОДНФА+"' and ИНВ='"+SubStr(КОДИНВ, 5, 255)+"'");
		  if(Records(ROинвк)>0):
			  ЗавНомер = GetFieldS(ROинвк,1,"ЗАВОД_НОМ");
			  кодокоф = GetFieldS(ROинвк, 1, "окоф");
			  амортгруппа = GetFieldi(ROинвк, 1, "аморт_груп");
			  ДатаПринБух = GetFieldd(ROинвк, 1, "Оприх_Дата");
			  ДатаСписБух= GetFieldd(ROинвк, 1, "Выбыт_Дата");
			  EditorApply;
		  fi;
	  SetFilter(ROинвк, "1=0");
  --конец
	   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;
   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, "КОДФОРМЫ"   , "ОКУД_0306030");
	   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="ИНВВЕД."+КОДНФА+"."+КОДИНВ;
--Тукачев П.А.
	   setfilter(ROинвк, "нфа='"+коднфа+"' and инв='"+substr(кодинв, 5, 255)+"'");
	   if(records(roинвк)>0):
			OA=openArray(roакты, x, "состос", "");
			if records(oa)=0:
				z=insertrecord(oa, 1);
			else
				z=1;
			fi;
			y=putfieldD(roакты, x,"ДатаПринБух", GetFieldD(roинвк, 1, "Оприх_Дата"));
			y=putfieldD(roакты, x,"ДатаСписБух", GetFieldD(roинвк, 1, "Выбыт_Дата"));
			y=putfields(roакты, x, "кодокоф", GetFieldS (roинвк, 1, "окоф"));
			y=putfieldi(roакты, x, "амортгруппа", GetFieldi(roинвк, 1, "аморт_груп"));
			y=putfields(roакты, x, "ЗавНомер", GetFieldS (roинвк, 1, "ЗАВОД_НОМ"));
			closeworkarea(oa);
		fi;
--конец
	 ВЕД=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=РАБ.НФА.FUNC_LIB.ДатаПроводки(СЧНФА, КОДНФА+"&"+КОДИНВ, dBT, False);
	   if ДАТАПРИНБУХ=01.01.100:
	   y=PutFieldD(ROакты, x, "ДАТАПРИНБУХ", dVV);
	   fi;
	   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:
	 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;
		 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);
--Тукачев П.А.
	   ---------------------------------------------------------
	   OA2=OpenArray(ROакты, x, "ХАРОС", "");
	   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, "НАИМЕН_ОБ");
				if tmp='':tmp=НАИМ_П(GetFieldS(OA1, ii, "НАИМЕН_ДРАГ"));fi;
				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сотр);
   CloseWorkArea(ROакты);
   CloseWorkArea(ROднфа);
   ToggleAutorefresh(Режим);
 end;
 ^True;
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 КОДФОРМЫ='ОКУД_0306030'");
-- 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);
--   ИнициализироватьУсловия;
--   ДНФА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=РАБ.НФА.FUNC_LIB.ПризнакСоотвМаске(TransSignName(k, i), УслАНА[y]);
--	     if OK: Break; fi;
--	   od;
--	     fi;
--	     OK=(OK and РАБ.НФА.FUNC_LIB.СчетСоотвМаске(СЧД,		     УслДЕБ[y]));
--	     OK=(OK and РАБ.НФА.FUNC_LIB.СчетСоотвМаске(TransCre(k), УслКРЕ[y]));
--	     OK=(OK and (Цена>0));
--	     if OK: Work=True;
--	    if not Match(СЧД, "???.????.???????.???.?.10?.??.???"):СЧД=TransCre(k);fi;
--	    Break;
--	     fi;
--	   od;
--	   if Work:
--	     КОДНФА=РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "НФА", True);
--	     КОДИНВ=РАБ.НФА.FUNC_LIB.ПризнакИзСтрокиАналитикиПроводки(k, "УЧН", True);
--   --Тукачев П.А.
--		    SetFilter(ROинвк, "НФА='"+КОДНФА+"' and ИНВ='"+SubStr(КОДИНВ, 5, 255)+"'");
--		    if(Records(ROинвк)>0):
--			    ЗавНомер = GetFieldS(ROинвк,1,"ЗАВОД_НОМ");
--			    кодокоф = GetFieldS(ROинвк, 1, "окоф");
--			    амортгруппа = GetFieldi(ROинвк, 1, "аморт_груп");
--			    ДатаПринБух = GetFieldd(ROинвк, 1, "ДАТ_ВЭКСП");
--			    ДатаСписБух= GetFieldd(ROинвк, 1, "Выбыт_Дата");
--			    EditorApply;
--		    fi;
--	    SetFilter(ROинвк, "1=0");
--  --конец
--	     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;
--   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;
--   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, "КОДФОРМЫ"	 , "ОКУД_0306030");
--	     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, "ИНВНОМЕРВЕД", ВЕД); --Ведомственный номер уже присвоен
--	   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=ВзятьДанныеКонтрагента("", "ФБУХ", 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);
--	     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);
--	   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, "ДАТАВВЭКСП", dBT); 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(СЧД+"{"+КОДНФА+"&"+КОДИНВ+"}", dET);
--	   y=PutFieldN(OA, z, "БАЛАНССТОИМ", Цена);
--	   SumTrans=GetFieldN(OA, z, "ПОКСТОИМ");
--	   if SumTrans=0 or Flag: y=PutFieldN(OA, z, "ПОКСТОИМ", Цена); fi;
--	     else
--	   Цена=SumTrans;
--	     fi;
--	     tmp2=ВзятьСчетАморт(СЧД);
--	     if tmp2<>"":
--	   KolTrans=Abs(Saldo(tmp2+"{"+КОДНФА+"&"+КОДИНВ+"}", dET));
--	     else
--	   KolTrans=0;
--	     fi;
--	     y=PutFieldN(OA, z, "СУМНАЧАМОРТ", KolTrans);
--	     y=PutFieldN(OA, z, "ОСТСТОИМ", Abs(Цена-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;
--	     -- Вставляем информацию КОНЕЦ
--	     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;
-- 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); -- _При закытии бланка
 СинхронизацияЗаписи(CURRENT);
 Очистить;
 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;

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

КОНЕЦ