БЛАНКСШАБЛОНОМ "Картотека приемных комиссий", РЕДАКТОР КОМИССИЯ;
-- Редакция ЗАО "Агентство 'Русспромоценка'"
2-- Переменные
var Ок          :S="ОК";
var Закр        :S="Закрыть";
var FieldSender :S;
var A           :S="+";
--var O           :S=Chr(221)+Chr(223); -- двойные стрелки (Symbol)
var O           :S=Chr(173)+Chr(175); -- одинарные стрелки (Symbol)
var D           :S="-";
var IterSender  :I;
var Buf[]       :S;

2-- Общие процедуры и функции
Proc Iter_Validation;
 if ЧленКом<1: InsertFrame(ЧленКом, 1); fi;
end;

Proc УдалитьПустые;
var n:I;
 n=1;
 while n<=ЧленКом do
   if ЧленКом[n].ЧленФ="": Try DeleteFrame(ЧленКом, n); Except end; else n=n+1; fi;
 od;
 Template.Frame=1;
end;

Proc Exchange(Out:I; In:I);
var S1, S2 :S;
  S1=ЧленКом[In].ЧленД;
  S2=ЧленКом[In].ЧленФ;
  ЧленКом[In].ЧленД=ЧленКом[Out].ЧленД; 
  ЧленКом[In].ЧленФ=ЧленКом[Out].ЧленФ;
  ЧленКом[Out].ЧленД=S1;
  ЧленКом[Out].ЧленФ=S2;
end;

Func ReOrder(Field:S; Iter:I) :L;
var n :I;
 n=0;
 if True:
   ClearVariable(Buf);
   Buf[1]="Поменять на запись ВЫШЕ";
   Buf[2]="Поменять на запись НИЖЕ";
   n=Alternate("Поменять местами записи в таблице", Buf, -1);
   if n=1:
     if Iter<>1: 
       Exchange(Iter-1, Iter); 
       Iter=Iter-1; Template.Frame=Iter;
     else 
       Message("Это первая строчка. Строчки ВЫШЕ - нет!"); 
     fi;
   |  n=2:
     if Iter<>ЧленКом:
       Exchange(Iter+1, Iter); 
       Iter=Iter+1; Template.Frame=Iter;
     else 
       Message("Это последняя строчка. Строчки НИЖЕ - нет!");
     fi;
   fi;
 fi;
 ClearVariable(Buf);
 ^False;
end;

2-- События полей
Func Field_onEnter(Field:S; Iter:I) :L;
 FieldSender=Field; IterSender=Iter;
 if Field="Ок"    : EditorApply; Close; ^False;
 |  Field="Закр"  : EditorCancel; Close; ^False;
 |  Field="A"     : -- if Защита: Message(Guard_Msg); ^False; fi;
                    InsertFrame(ЧленКом, Iter+1);
                    ^False;
 |  Field="D"     : -- if Защита: Message(Guard_Msg); ^False; fi;
                    if ЧленКом>1: DeleteFrame(ЧленКом, Iter); else DeleteFrame(ЧленКом, Iter); InsertFrame(ЧленКом, Iter); fi;
                    ^False;
 |  Field="O"     : ReOrder(Field, Iter); ^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, "ФАМИЛИЯ")+" "+GetCardFieldS("Сотрудники", REC, "ИМЯСОТРУДНИКА")+" "+GetCardFieldS("Сотрудники", REC, "ОТЧЕСТВО");
 REC=GetCardFieldR("Сотрудники", REC, "ДОЛЖНОСТЬ");
 if REC<>NIL: стрДОЛ=GetCardFieldS("Должности", REC, "ДОЛЖ"); else  стрДОЛ=""; fi;
 if FieldSender="ПредсД" or FieldSender="ПредсФ" : ПредсФ=стрФИО; ПредсД=стрДОЛ;
 |  FieldSender="ЧленД"  or FieldSender="ЧленФ"  : ЧленКом[IterSender].ЧленФ=стрФИО; ЧленКом[IterSender].ЧленД=стрДОЛ;
 fi;
 ^"";
end;

2-- События шаблона
Proc Template_onRead; -- _При считывании шаблона
 ClearVariable(Buf);
 Iter_Validation;
end;

Func Template_OnValidate: L; -- _при проверке
var n:I;
 if ПредсД="" : Message('Введите должность председателя комиссии!'); Template.Field="ПредсД"; ^False; fi;
 if ПредсФ="" : Message('Введите Ф. И. О.  председателя комиссии!'); Template.Field="ПредсФ"; ^False; fi;
 УдалитьПустые;
 if ЧленКом=0 : 
   Message("В составе комиссии нет ни одного человека!");
   Iter_Validation; Template.Field="ЧленД"; Template.Frame=1; ^False;
 fi;
 n=1;
 while n<=ЧленКом do
   if ЧленКом[n].ЧленД="" or ЧленКом[n].ЧленД=" " :
     Message("Не указана должность члена комиссии."); Template.Field="ЧленД"; Template.Frame=n; ^False;
   fi;
   if ЧленКом[n].ЧленФ="" or ЧленКом[n].ЧленФ=" " :
     Message("Не указаны Ф. И. О.  члена комиссии."); Template.Field="ЧленФ"; Template.Frame=n; ^False;
   fi;
   n=n+1;
 od;
 ^True;
end;
-- 2конец бланка
КОНЕЦ
