БЛАНКСШАБЛОНОМ [27.10.2005] "Статьи расхода", РЕДАКТОР РПО_ПОДОТЧ_СТ;
-- Редакция ЗАО "Агентство 'Русспромоценка'"
2-- Переменные
СекцОбщая	:Object;
cbЗащита	:Object;
var NewREC	:Logical=(CurrentState=crdusInserted);
var SelfCRD	:String="РПО_ПОДОТЧ_СТ";
var кнОК	:String="ОК";
var кнЗкр	:String="Закрыть";
var CodAna	:String=КодAna;
var FlagEdit	:Logical=[False];
--
var ИменаСекций[] :String;
var BufField[]	  :String;
var BufColorBg[]  :Integer;
var BufColorFo[]  :Integer;

2-- Общие процедуры и функции
Func TemplateSaveOK :Logical; -- проверка правильности ввода данных
 if КодAna="": Message('Введите аналитический признак типа лимита!',mtWarning); 	   Template.Field="CodAna"; ^False;
 |  Наимен="": Message('Введите описание аналитического признака типа лимита!',mtWarning); Template.Field="Наимен"; ^False;
 fi;
 ^True;
end;

Proc ЦветаПолей(ЦветКнопок:Integer);
var i, len :Integer;
 ClearVariable(BufField); ClearVariable(BufColorBg); ClearVariable(BufColorFo);
 i=InsertInArraySort(BufField,"КНОК");	 InsertInArray(BufColorBg,i,ЦветКнопок);
 i=InsertInArraySort(BufField,"CODANA"); InsertInArray(BufColorBg,i,coAqua);
 i=InsertInArraySort(BufField,"НАИМЕН"); InsertInArray(BufColorBg,i,coAqua);
 len=LengthOfArray(BufField);
 for i=1 to len do
   if BufColorBg[i]=coTeal: BufColorFo[i]=coWhite;
   |  True: BufColorFo[i]=coBlack;
   fi;
 od;
end;

Proc ТолькоЧтение(Flag:Logical);
var len, k, i, j, ik, jk, n, цвFont, цвBack :Integer;
var ТЧ :Logical;
var tmp :String;
var СекцИмя : Object;
 ClearVariable(ИменаСекций);
 ИменаСекций[1]="СекцОбщая";
 len=LengthOfArray(ИменаСекций);
 ShowProgress(len, "Обработка данных...");
 Try
   for k=1..len do
     ProgressPos(k);
     if FindObject(ИменаСекций[k], СекцИмя):
       ik=asInteger(СекцИмя.RowsCount); jk=asInteger(СекцИмя.ColsCount);
       for i=1 .. ik do
	 for j=1 .. jk do
	   tmp=Up(asString(СекцИмя.Cell(i, j, CellContents, ""))); n=SearchInArray(BufField, tmp, True);
	   if n<>-1:
	     if Flag: цвFont=coBlack; цвBack=coTransparent; ТЧ=True; else цвFont=BufColorFo[n]; цвBack=BufColorBg[n]; ТЧ=False; fi;
	     СекцИмя.Cell(i, j, CellFontColor, цвFont); СекцИмя.Cell(i, j, CellBgColor, цвBack); СекцИмя.Cell(i, j, CellReadOnly, ТЧ);
	   fi;
	 od;
       od;
     fi;
   od;
 Finally
   CloseProgress;
 end;
 ClearVariable(ИменаСекций);
end; 

2-- События полей
Func Field_onEnter(Field:String; Iter:Integer) :Logical; -- на входе в клетку
 if Field="кнОк"  : 
   EditorApply;  Close; ^False;
 |  Field="кнЗкр" : 
   EditorCancel; Close; ^False;
 |  Field="CodAna": 
   if КодAna<>"":
     if РАБ.УПП.LIB.ПризнакИспользуется("*", SelfCRD, Current):
       Message("Аналитический признак '"+КодAna+"' используется в проводках."+Chr(13)+"Изменение невозможно!", mtError);
       ^False;
     fi;
   fi;
   FlagEdit=True;
 fi;
 ^True;
end;

Proc Field_onExit(Field:String; Iter:Integer); -- на выходе из клетки
 if Field="CodAna": 
   if FlagEdit: FlagEdit=False; Exit; fi;
   if КодAna<>"":
     if РАБ.УПП.LIB.ПризнакИспользуется("*", SelfCRD, Current):
       Message("Аналитический признак '"+КодAna+"' используется в проводках."+Chr(13)+"Удаление невозможно!", mtError);
       Exit;
     fi;
   fi;
   КодAna="";
 fi;
end;

Func Field_OnValidateS(Field:String; Iter:Integer; Value:String) :Logical;
var Flag: Logical;
 Flag=False;
 if Field="CodAna":
   FlagEdit=True;
   Flag=ValidSign(Value);
   if not(Flag): РАБ.УПП.LIB.ПроверитьПризнак(Value); else КодAna=Up(Value); fi;
   ^Flag;
 fi;
 ^True;
end;

2-- События объектов
Proc cbЗащита_onChange(Sender:String);
var Flag, SaveOK :Logical;
var n :Integer;
 if Защита=False:
    SaveOK=True; -- если защита 'снимается' значит проверка данных уже производилась
    n=EnqOkCancel("Сделать документ доступным для изменений?", mtConfirmation);
    if n=cmCancel: Flag=True; else Flag=False; fi;
   else
    SaveOK=TemplateSaveOK; Flag=SaveOK;
 fi;
 Защита=Flag; cbЗащита.State=Защита;
 ТолькоЧтение(Flag);
 if not(SaveOK): Exit; fi; -- Избегаем двойных сообщений
 EditorApply;
end;

2-- События шаблона
Proc Template_OnOpen(Create:Logical); -- при открытии шаблона
var Цв :Integer;
 Цв=РАБ.УПП.LIB.Цвет(236, 233, 216);
 ЦветаПолей(Цв);
 РАБ.НАСТР_ПЕЧАТЬ.Cfg(PlanVar("ПОДОТЧ")+"\Настройки\","RPO_STD_000.cfg"); -- стандартная настройка
 СекцОбщая.Cell(2, 2, CellBgColor, Цв);
 СекцОбщая.Cell(2, 5, CellBgColor, Цв);
end;

Proc Template_OnClose(Destroy:Logical); -- при закрытии шаблона
 ClearVariable(BufField); ClearVariable(BufColorBg); ClearVariable(BufColorFo); ClearVariable(ИменаСекций);
end;

Proc Template_onRead; -- при считывании шаблона
 if NewREC: Защита=False; fi;
 ТолькоЧтение(Защита);
 Template.Field="кнЗкр";
end;

Func Template_OnValidate: Logical; -- при проверке шаблона
var nn :Integer;
 if NewREC and not(Защита): if not(TemplateSaveOK): ^False; fi; fi;
 if not(NewREC): if not(TemplateSaveOK): ^False; fi; fi;
 if NewREC and not(Защита):
   nn=EnqOkCancel("Защитить данный документ от изменений?", mtConfirmation);
   if nn=cmOk: Защита=True; ТолькоЧтение(Защита); fi;
 fi;
 ^True;
end;

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