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

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

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

Proc НачальнаяИтерация;
 if СписЛитерТ1<1: InsertFrame(СписЛитерТ1, 1); fi;
 if СписЛитерТ2<1: InsertFrame(СписЛитерТ2, 1); fi;
end;

Func НомерТекущейСекции :I;
var Name :S;
 Name=asString(Template.Name);
 if Name="СекСписЛитерТ1" : ^1;
 |  Name="СекСписЛитерТ2" : ^2;
 else ^0;
 fi;
end;

Proc УдалитьПустыеСтроки(НТС:I);
var n :I;
 n=1;
 if НТС=1:
   while n<=СписЛитерТ1 do if СписЛитерТ1[n].Книга=""  : Try DeleteFrame(СписЛитерТ1,  n); Except end; else n=n+1; fi; od;
 |  НТС=2:
   while n<=СписЛитерТ2 do if СписЛитерТ2[n].Книга=""  : Try DeleteFrame(СписЛитерТ2,  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 ВидЗаголовковТаблиц;
 СекВетх1.Cell(1, 2, CellFontStyle, fsBold);		 СекВетх1.Cell(1, 3, CellFontStyle, fsBold+fsStrikeout);
 СекВетх2.Cell(1, 2, CellFontStyle, fsBold+fsStrikeout); СекВетх2.Cell(1, 3, CellFontStyle, fsBold);
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="ДебетСч"	 : if КредитСч="" :
			     tmp=AccountElection(МаскаСчОС);
			   else
			     tmp=PickCorrAccount(КредитСч, True);
			   fi;
			   if tmp="": ^False; fi;
			   ДебетСч=tmp;
			   ^False;
 |  Field="КредитСч"	 : if ДебетСч="" :
			     tmp=AccountElection(МаскаСчОС);
			   else
			     tmp=PickCorrAccount(ДебетСч, False);
			   fi;
			   if tmp="": ^False; fi;
			   КредитСч=tmp;
			   ^False;
 |  Field="ДолПредКом" or Field="ФИОПредКом"
			 : ВыборКомиссии; ^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="КодПОучреж"  :  ПОучреж=наимПО; КодПОучреж=кодПО;
 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;


КОНЕЦ