БЛАНКСШАБЛОНОМ "Акт о списании мягкого и хозяйственного инвентаря", РЕДАКТОР РПО_Акты_УНФА;
-- Редакция ЗАО "Агентство 'Русспромоценка'"
2-- Переменные
СекСписХозИнв	 :Section;
СекстрЗАК    :Section;
СекПолучМатер	 :Section;
var NewREC    :L=(CurrentState=crdusInserted);
var FieldSender :S;
var Buf[]    :S;
var МаскаСчОС	 :S="*.?.101.??!";
--var МаскаСчМат  :S="*.?.105.??!";
var A1	      :S="+";
var A2	      :S="+";
var A3	      :S="+";
var D1	      :S="-";
var D2	      :S="-";
var D3	      :S="-";
var N1	     []    :S=Str($);
var N2	     []    :S=Str($);
var СуммаТ1[]	 :N=Round(СписХозИнв[$].КолПредм*СписХозИнв[$].ЦенаЕд, 2);
var СуммаТ2[]	 :N=Round(ПолучМатер[$].КолПредм*ПолучМатер[$].ЦенаЕд, 2);
var Итог4Т1    :N=SumOfArray(СписХозИнв[].КолПредм);
var Итог6Т1    :N=SumOfArray(СуммаТ1, СписХозИнв);
var Итог5Т2    :N=SumOfArray(ПолучМатер[].КолПредм);
var Итог7Т2    :N=SumOfArray(СуммаТ2, ПолучМатер);
var СтрКолПроп	    :S=Slo_(Итог4Т1, "ДОКН");
var СтрСумТ1Проп  :S=if(Итог6Т1>0, Slo(Итог6Т1), "");
var СтрСумТ2Проп  :S=if(Итог7Т2>0, Slo(Итог7Т2), "");
2var БланкИмя:S;
2var КлассФормыДок :S;
2var КодФормыДок   :S0="0504143";

--var КлассФормыДок :S="ОКУД_";
--var КодФормыДок   :S="0504143";
var recCurrent:record;
NewRECbln      :S;
  var ВниманиеСТР   :s;
  ВниманиеОбъект    :Объект;
  ВниманиеНапоминать:l;
  КнРасчет	  :Объект;

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);
   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;
   fi;
 fi;
end;

Proc НачальнаяИтерация;
 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;
 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;
 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;

2-- Обработчики событий полей, объектов и шаблона
2-- События полей
Func Field_onEnter(Field:S; Iter:I) :L;
var n	 :I;
var tmp :S;
 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="ФИОПредКом"
	     : ВыборКомиссии; ^False;
 |  Field="СчДебета"
	     : if СписХозИнв[Iter].СчКредита="" :
		 tmp=AccountElection(МаскаСчОС);
	       else
		 tmp=PickCorrAccount(СписХозИнв[Iter].СчКредита, True);
	       fi;
	       if tmp="": ^False; fi;
	       СписХозИнв[Iter].СчДебета=tmp;
	       ^False;
 |  Field="СчКредита"
	     : if СписХозИнв[Iter].СчДебета="" :
		 tmp=AccountElection(МаскаСчОС);
	       else
		 tmp=PickCorrAccount(СписХозИнв[Iter].СчДебета, False);
	       fi;
	       if tmp="": ^False; fi;
	       СписХозИнв[Iter].СчКредита=tmp;
	       ^False;
 fi;
 ^True;
end;

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


Func Field_OnValidateI(Field:S; Iter:I; Value:I): L;
 if Value<0 : Message('Нельзя вводить отрицательное число.'); ^False; fi;
 ^True;
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="ТабНомМОЛ"    :     МОЛ =стрФИО;		 ТабНомМОЛ=стрТАБ;
 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="ПОинвен"     :  ПОинвен=наимПО; КодПОинвен=кодПО;
 fi;
 ^"";
end;
Proc КнРасчет_ПриНажатии(s:s);
 var d1,d2:d;
 var t,nsig1,nsig2,nsig3:i;
 var ll,ll1:l;
 var signs,УслМол1,УслМол2,УслМ,ss:s;

 var Приход,ВнПер,Расход,услсч,АН_ДНФА:s;
 Приход='+(*.?.101.??.???|*.?.105.??.???|ЗАБ.??.*)/*&~(*.?.101.??.???|*.?.105.??.???|ЗАБ.??.*)';
 ВнПер ='(*.?.101.??.???|*.?.105.??.???|ЗАБ.??.*)/(*.?.101.??.???|*.?.105.??.???|ЗАБ.??.*)';
-- Расход='-(*.?.101.??.???|*.?.105.??.???|ЗАБ.??.*)/*&~(*.?.101.??.???|*.?.105.??.???|ЗАБ.??.*)';
 Расход='-(*.?.101.36.???|*.?.105.35.???|*.?.105.36.???|ЗАБ.??.101.*|ЗАБ.??.105.*)/*&~(*.?.101.??.???|*.?.105.??.???|ЗАБ.??.*)';
 d1=ВзятьКартПолеД('РПО_ОПЕРАЦИИДНФА',ЧислоВзапись(ДНФАID),'ДатОпер');
 d2=d1+1;
 ДатаАкта=d1;
 --ЗАКДАТА=d1;
 АН_ДНФА=ВзятьКартПолеС('РПО_ОПЕРАЦИИДНФА',ЧислоВзапись(ДНФАID),'АН_ДНФА');
 if pos('ПРИХ.',АН_ДНФА)=1:услсч=Приход;УслМол1='+МОЛ.';УслМ='+М.';УслМол2='';
  | pos('ВНПР.',АН_ДНФА)=1:услсч=ВнПер; УслМол1='+МОЛ.';УслМ='+М.';УслМол2='-МОЛ.';
  | pos('РАСХ.',АН_ДНФА)=1:услсч=Расход;УслМол1=''     ;УслМ='-М.';УслМол2='-МОЛ.';
  | true:message(АН_ДНФА);услсч='*';
 fi;
 ClearVariable(СписХозИнв);
-- if ФИОК<>'':ФИОК='';fi;     СписХозИнв
-- if Мол<>'' :Мол ='';fi;
-- if ПОСТ<>'':ПОСТ='';fi;
 ll=false;
 nsig1=0;
 nsig2=0;
--:    14'544.00     187.0000.0000000.000.2.401.01.272 187.0000.0000000.000.2.105.06.440 {ДВИЖ_НФА.Р.Б ДНФА.РАСХ.НФА.401 -М.Х.00001 -МОЛ.000 НФА.105.06.00000002:12} --
 nsig3=0;
 for transaction t=услсч+'{НФА.*&ДНФАID.'+стр16(ДНФАID)+'&ДНФА.'+АН_ДНФА+'&~УЧН.*}',d1,d2 do
-- for transaction t=услсч+'{ДНФАID.00000001 }',1.1.100,сегодня do
  ll1=true;
  if match(ПроводДеб(t),'*.?.105.?6.???') or match(ПроводКре(t),'*.?.105.?6.???'):
     ll1=Раб.НФА.B01.2ПолеПоПризнакуЛ0(ПроводКоличПризнак(t),'ПОСУДА');
  fi;
  if ll1:
     InsertFrame(СписХозИнв,СписХозИнв+1);
   --	 ЛЕТЭКСПЛ    :INTEGER; --количество лет в эксплуатации
   --  СписХозИнв[СписХозИнв].КодМат	 =ПроводКоличПризнак(t);
     СписХозИнв[СписХозИнв].ХОЗИНВЕН   =Name_A(ПроводКоличПризнак(t));
   --  СписХозИнв[СписХозИнв].ЕдИзм	 =Unit(СписХозИнв[СписХозИнв].КодМат);
     СписХозИнв[СписХозИнв].СчДебета   =ПроводДеб(t);
     СписХозИнв[СписХозИнв].СчКредита  =ПроводКре(t);
     СписХозИнв[СписХозИнв].КОЛПРЕДМ   =ПроводСумма(t,'КОЛ');
     СписХозИнв[СписХозИнв].ЦЕНАЕД     =ПроводСумма(t)/СписХозИнв[СписХозИнв].КОЛПРЕДМ;
     if not ll:
       --signs=ПроводАналитика(t);
   --	 if УслМол1<>'':nsig1=ПроводНомерПризнака(t,УслМол1);
   --	 if nsig1=0:signs='';
   --	  | true:     signs=ПроводИмяПризн(t,nsig1);
   --	 fi;
   --	 Мол =if(pos('-',signs)+pos('+',signs)>0,SubStr(signs,2,length(signs)-1),signs);fi;
       if УслМол2<>'':nsig2=ПроводНомерПризнака(t,УслМол2);
       if nsig2=0:signs='';
	 | true  :signs=ПроводИмяПризн(t,nsig2);
       fi;
       ТабНомМОЛ=if(pos('-',signs)+pos('+',signs)>0,SubStr(signs,2,length(signs)-1),signs);
       Мол=Name_A(ТабНомМОЛ);fi;
       if УслМ<>''   :nsig3=ПроводНомерПризнака(t,УслМ);
       if nsig3=0:signs='';
	 | true  :signs=ПроводИмяПризн(t,nsig3);
       fi;
       КодПОучреж=if(pos('-',signs)+pos('+',signs)>0,SubStr(signs,2,length(signs)-1),signs);
       ПОучреж=Name_A(КодПОучреж);fi;
       ll=(ПОучреж<>'' or Мол<>'');
     fi;
  fi;
 od;
end;
Proc ПриНажатии(s:s);
 if s='ВниманиеОбъект':
  ВниманиеНапоминать=(Вопрос('Предупреждение',ВниманиеСТР,'Ok;Напомнить',тсПредупреждение)=2);
 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;
 if ТекущееСостояние=КартСостВставлена or ДНФАID=0:
    ВниманиеСТР='Данный документ сформирован не из журнала операций с НФА!'+chr(13)+
	'[Расчет] будет производится неверно';
    if ВниманиеНапоминать:
       ВниманиеНапоминать=not (Вопрос('Предупреждение',ВниманиеСТР,'Ok;Не напоминать',тсПредупреждение)=2);
    fi;
  | true:ВниманиеСТР='';
 fi;
 if ВниманиеСТР<>'':
     ВниманиеОбъект.Виден=true;
     ВниманиеОбъект.Подсказка=ВниманиеСТР;
  | true:ВниманиеОбъект.Виден=false;
 fi;

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

КОНЕЦ
