БЛАНКСШАБЛОНОМ "Промежуток между двумя датами";
-- Редакция ЗАО "Агентство 'Русспромоценка'"
2-- Переменные
СекцТипЕдИзм    :Object;
var ЕдИзмПер    :String;
var ЕдИзмПар    :Integer;
var Рез         :String; -- предварительное описание
var Buf[]       :String;
var OKbln[]     :String;
var НачДат      :Date;
var КонДат      :Date;
var Редак       :Logical;

2-- Общие процедуры и функции
Proc Очистка;
 ClearVariable(НачДат); ClearVariable(ЕдИзмПер); ClearVariable(Редак); ClearVariable(Рез);
 ClearVariable(КонДат); ClearVariable(ЕдИзмПар); ClearVariable(OKbln); ClearVariable(Buf);
 Редак=False;
end;

Proc ЗаполнитьOKbln;
 ClearVariable(OKbln);
 OKbln[1] ="НФА.ДОКУМЕНТЫ.АКТЫ.ОКУД_0306001";
 OKbln[2] ="НФА.ДОКУМЕНТЫ.АКТЫ.ОКУД_0306002";
 OKbln[3] ="НФА.ДОКУМЕНТЫ.АКТЫ.ОКУД_0306003";
 OKbln[4] ="НФА.ДОКУМЕНТЫ.АКТЫ.ОКУД_0306004";
 OKbln[5] ="НФА.ДОКУМЕНТЫ.АКТЫ.ОКУД_0306031";
 OKbln[6] ="НФА.ДОКУМЕНТЫ.АКТЫ.ОКУД_0306030";
 OKbln[7] ="НФА.ДОКУМЕНТЫ.АКТЫ.ОКУД_0306033";
 OKbln[8] ="НФА.ДОКУМЕНТЫ.АКТЫ.ОКУД_0504143";
 OKbln[9] ="НФА.ДОКУМЕНТЫ.АКТЫ.ОКУД_0504144";
 OKbln[10]="НФА.ДОКУМЕНТЫ.АКТЫ.ОКУД_0504230";
 OKbln[11]="НФА.ДОКУМЕНТЫ.КАРТОЧКИ.ОКУД_0504031";
end;

Proc ЗаполнитьЕдИзмП;
 ClearVariable(Buf);
 Buf[1]='День';
 Buf[2]='Месяц';
 Buf[3]='Год';
 Buf[4]='Год + Месяц';
 Buf[5]='Год + Месяц + День';
end;

Proc ВыбратьЕдИзмП(NoAlt:Logical; n:Integer);
 ЗаполнитьЕдИзмП;
 if NoAlt:
   ЕдИзмПар=n;
 else
   ЕдИзмПар=Alternate("Выберите ед.изм. промежутка между датами", Buf, -1, 0, 12);
 fi;
 if ЕдИзмПар<>0: ЕдИзмПер=Buf[ЕдИзмПар]; fi;
end;

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

Func GetDate :Date;  -- считываем в заданном поле дату
var name :String;
 name=AsString(Template.Field);
 if name="НачДат": ^НачДат;
 |  name="КонДат": ^КонДат;
 fi;
end;

Proc SetDate(Value:Date); -- устанавливаем в заданном поле дату; Value - значение даты, которое необходимо присвоить
var name :String;
 name=AsString(Template.Field);
 if name="НачДат": НачДат=Value;
 |  name="КонДат": КонДат=Value;
 fi;
end; 

Func ПроверкаДат :Logical;
 if НачДат<=1.1.100 : Message('Не задана дата начала периода!', mtWarning); Template.Field="НачДат"; ^False; fi;
 if КонДат<=1.1.100 : Message('Не задана дата окончания периода!', mtWarning); Template.Field="КонДат"; ^False; fi;
 if НачДат>КонДат   : Message('Дата начала "'+DateToString(НачДат)+'" периода позже даты окончания периода "'+DateToString(КонДат)+'".'
                              +Chr(13)+'Необходимо скорректировать даты!', mtWarning); Template.Field="НачДат"; ^False; fi;
 ^True;
end;

2Рез0 :String=РАБ.НФА.FUNC_LIB.ИнтервалМеждуДатами(НачДат, КонДат, ЕдИзмПар, False, True); -- переменная

2-- События полей
Func Field_onEnter(Field:String; Iter:Integer) :Logical; -- на входе в клетку
 if Field="ЕдИзмПер": ВыбратьЕдИзмП(False, 0); ^False;
 fi;
 ^True;
end;

Func Дата_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String) :String;
var dd :Date;
 Template.HideEditor(False);
 dd=ВыборДаты(GetDate);
 SetDate(dd);
 ^"";
end;

2-- События шаблона
Proc btnOnClick(Sender:String); -- объекты при нажатии
var res :String;
 if Sender="btnOK"   : if ПроверкаДат: res=РАБ.НФА.FUNC_LIB.ИнтервалМеждуДатами(НачДат, КонДат, ЕдИзмПар, False, True); fi;
                       if res<>"" : РАБ.НФА.FUNC_LIB.TempSTR[1]=Рез; Close; fi;
 |  Sender="btnClose": Close;
 fi;
end;

Proc Template_OnOpen(Create:Logical); -- при открытии шаблона
var nn :Integer;
var NameBln, MsgStr :String;
 MsgStr="";
 Очистка;
 ЗаполнитьOKbln;
 NameBln=РАБ.НФА.FUNC_LIB.ИмяБланка;
 if NameBln<>"" :
   nn=SearchInArray(OKbln, NameBln, False);
   if nn<>-1 :
     MsgStr="Данный бланк открывается через бланк '"+NameBln+"'!";
   else
     MsgStr="Необходимый бланк не обнаружен!";
   fi;
 else
   MsgStr="Не задан бланк с исходными данными!";
 fi;
 if not(IsBlankOpen(NameBln)) or nn=-1:
   Message("Бланк не работает самостоятельно!"+Chr(13)+MsgStr);
   Close;
 fi;
 Редак=РАБ.НФА.FUNC_LIB.TempLOG[1];
 if Редак:
   ЕдИзмПар=0;
   СекцТипЕдИзм.Cell(3, 5, CellBgColor  , coTeal);
   СекцТипЕдИзм.Cell(3, 5, CellFontColor, coWhite);
   СекцТипЕдИзм.Cell(3, 5, CellReadOnly , False);
 else
   ЕдИзмПар=РАБ.НФА.FUNC_LIB.TempINT[1];
   НачДат=РАБ.НФА.FUNC_LIB.TempDAT[1];
   КонДат=РАБ.НФА.FUNC_LIB.TempDAT[2];
   СекцТипЕдИзм.Cell(3, 5, CellBgColor  , coTransparent);
   СекцТипЕдИзм.Cell(3, 5, CellFontColor, coBlack);
   СекцТипЕдИзм.Cell(3, 5, CellReadOnly , True);
   ВыбратьЕдИзмП(True, ЕдИзмПар);
 fi;
 ClearVariable(РАБ.НФА.FUNC_LIB.TempLOG); ClearVariable(РАБ.НФА.FUNC_LIB.TempINT); ClearVariable(РАБ.НФА.FUNC_LIB.TempDAT);
 Template.Field="кнЗкр";
end;

КОНЕЦ -- конец бланка
