БЛАНКСШАБЛОНОМ[07.11.2005] "Акт о приеме-сдаче отремонтированных объектов ОС", РЕДАКТОР РПО_Акты_УНФА;
-- Редакция ЗАО "Агентство 'Русспромоценка'"
2-- Переменные
Сек1		:Section;
СекДоРемонта	:Section;
СекЗатрРемонта	:Section;
СекстрЧтоНевып	:Section;
СекстрИзмХар	:Section;
var NewREC	:L=(CurrentState=crdusInserted);
var FieldSender :S;
var Buf[]	:S;
-- var МаскаСчОС   :S="*.?.101.??!";
var A1		:S="+";
var A2		:S="+";
var A3		:S="+";
var A4		:S="+";
var D1		:S="-";
var D2		:S="-";
var D3		:S="-";
var D4		:S="-";
var N1 []	:S=Str($);
var N2 []	:S=Str($);
var Итого4	:N=SumOfArray(ЗатрРемонта[].ЗатрДемонт );
var Итого5	:N=SumOfArray(ЗатрРемонта[].СтоимРемДог);
var Итого6	:N=SumOfArray(ЗатрРемонта[].СтоимМодДог);
var Итого7	:N=SumOfArray(ЗатрРемонта[].СтоимРемФак);
var Итого8	:N=SumOfArray(ЗатрРемонта[].СтоимМодФак);
var Итого9	:N=SumOfArray(ЗатрРемонта[].ТрансРасх  );
var ИтогоПосле	:N=SumOfArray(ЗатрРемонта[].СтоимПосле );
var ОРГ_ПО	:S="наименование организации (структурного подразделения)";
var fПО 	:L=if(ПОилиОРГ, False, True);
var fОРГ	:L=not(fПО);
-- var Кн1	   :S="...";  -- вставка ОС
2var БланкИмя:S;
2var КлассФормыДок :S;
2var КодФормыДок   :S;
--var КлассФормыДок :S="ОКУД_";
--var КодФормыДок   :S="0306002";
NewRECbln	:S;
var recCurrent:record;

2-- Общие процедуры и функции
Proc ДобавитьУдалитьСтроки(Field:S; Iter:I; fADD:L);
var nSec :I;
 nSec=Int(SubStr(Field, 2, 1));
 if fADD:
   if nSec=1: InsertFrame(ДоРемонта  , Iter+1);
   |  nSec=2: InsertFrame(ЗатрРемонта, Iter+1);
   |  nSec=3: InsertFrame(стрЧтоНевып, Iter+1);
   |  nSec=4: InsertFrame(стрИзмХар  , Iter+1);
   fi;
 else
   if nSec=1: if ДоРемонта  >1: DeleteFrame(ДоРемонта  , Iter); else DeleteFrame(ДоРемонта  , Iter); InsertFrame(ДоРемонта  , Iter); fi;
   |  nSec=2: if ЗатрРемонта>1: DeleteFrame(ЗатрРемонта, Iter); else DeleteFrame(ЗатрРемонта, Iter); InsertFrame(ЗатрРемонта, Iter); fi;
   |  nSec=3: if стрЧтоНевып>1: DeleteFrame(стрЧтоНевып, Iter); else DeleteFrame(стрЧтоНевып, Iter); InsertFrame(стрЧтоНевып, Iter); fi;
   |  nSec=4: if стрИзмХар  >1: DeleteFrame(стрИзмХар  , Iter); else DeleteFrame(стрИзмХар  , Iter); InsertFrame(стрИзмХар  , Iter); fi;
   fi;
 fi;
end;

Proc НачальнаяИтерация;
 if ДоРемонта  <1: InsertFrame(ДоРемонта  , 1); fi;
 if ЗатрРемонта<1: InsertFrame(ЗатрРемонта, 1); fi;
 if стрЧтоНевып<1: InsertFrame(стрЧтоНевып, 1); fi;
 if стрИзмХар  <1: InsertFrame(стрИзмХар  , 1); fi;
end;

Func НомерТекущейСекции :I;
var Name :S;
 Name=asString(Template.Name);
 if Name="СекДоРемонта	"    : ^1;
 |  Name="СекЗатрРемонта"    : ^2;
 |  Name="СекстрЧтоНевып"    : ^3;
 |  Name="СекстрИзмХар	"    : ^4;
 else ^0;
 fi;
end;

Proc УдалитьПустыеСтроки(НТС:I);
var n :I;
 n=1;
 if НТС=1:
   while n<=ДоРемонта	do if ДоРемонта[n].НаименОС=""	     : Try DeleteFrame(ДоРемонта,    n); Except end; else n=n+1; fi; od;
 |  НТС=2:
   while n<=ЗатрРемонта do if ЗатрРемонта[n].НаименОС=""     : Try DeleteFrame(ЗатрРемонта,  n); Except end; else n=n+1; fi; od;
 |  НТС=3:
   while n<=стрЧтоНевып do if стрЧтоНевып[n].ЧтоНевыполн=""  : Try DeleteFrame(стрЧтоНевып,  n); Except end; else n=n+1; fi; od;
 |  НТС=4:
   while n<=стрИзмХар	do if стрИзмХар[n].ИзмХаракт=""      : Try DeleteFrame(стрИзмХар,    n); Except end; else n=n+1; fi; od;
 fi;
 Template.Frame=1;
end;

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

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

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

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

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

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

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

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

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

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

Func ПО_onLookup(Sect:S; Row:I; Col:I; Cur:S): S;
var кодПО, наимПО, tmp :S;
 Template.HideEditor(False);
 tmp=AnaElection("П!"); if tmp="": ^Cur; fi;
 кодПО=tmp; НаимПО=if(Name_A(кодПО)<>"" and Name_A(кодПО)<>" ", Name_A(кодПО), кодПО);
 if FieldSender="ПОучреж"     :      ПОучреж=наимПО; КодПОучреж=кодПО;
 |  FieldSender="КодПОучреж"  :      ПОучреж=наимПО; КодПОучреж=кодПО;
 |  FieldSender="ПОиспол"     :      ПОиспол=наимПО; КодПОиспол=кодПО;
 |  FieldSender="КодПОиспол"  :      ПОиспол=наимПО; КодПОиспол=кодПО;
 fi;
 ^"";
end;

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

Раб.НФА.АКТЫ.Template_onRead;
end;

КОНЕЦ