-- Шаблон создан мастером бланков
-- 04.03.2002 16:55:39
--
БланкСШаблоном "История изменения";

секПериодПоля: Section;
секЗаголовок: Section;
секПустышка: Section;

var Режим: Integer; -- = 0, показываю поле для ввода чисел
		    -- = 1, показываю поле для ввода строк

var ПозПериодПоля: Integer;
var ВидСортировки: Logical;

var Даты[]: Date;
var Значения[]: Numeric;
var ЗначенияСтр[]: String;

var Заголовок: String;
var ЗагЗначения: String;
var МаксЗначение: String; -- максимальное значение, которое можно ввести в поле.
			  -- например для процентов это 100.
Плюс:String='+';
Минус:String='-';

var CloseResult: Logical;

proc ПоказатьКолонку(НК: Integer; Value: Logical);
  секПериодПоля.Column(НК, ColVisible, Value);
  секЗаголовок.Column(НК, ColVisible, Value);
end;

proc ПриОткрытии(Sender: Logical);
  ПоказатьКолонку(3, Режим = 0);
  ПоказатьКолонку(4, Режим = 1);
  SortSection(ПозПериодПоля, 'Даты', False);
  ClearModify('РАБ.РЕДПЕРИОДПОЛЯ');
end;

proc РедактированиеEx(Doc: Record; TabName: String; FieldName: String; Заг: String; ЗагЗнач: String;
		      HTopic:Integer; max: String);
  Var РабОбл, Field, j:Integer;

  ОчиститьПеременную(РАБ.РЕДПЕРИОДПОЛЯ.Даты);
  ОчиститьПеременную(РАБ.РЕДПЕРИОДПОЛЯ.Значения);
  Заголовок = Заг;
  ЗагЗначения = ЗагЗнач;
  РабОбл = OpenWorkArea( TabName, '', 'Ukey = ' + RecordToString(Doc));
  try
    if Records(РабОбл) > 0 :
      Field = OpenArray(РабОбл, 1, FieldName, 'Период');
      try
	ПозПериодПоля = Records(Field);
	For j = 1 .. ПозПериодПоля do
	  Даты[j] = GetFieldD(Field, j, 'Период');   -- дата
	  Значения[j] = GetFieldN(Field, j, 'Значение');
	End;
      finally
	CloseWorkArea(Field);
      end;
    end;
  finally
    CloseWorkArea(РабОбл);
  end;
  РАБ.РЕДПЕРИОДПОЛЯ.МаксЗначение = max;
  РАБ.РЕДПЕРИОДПОЛЯ.Режим = 0;
  OpenBlank('РАБ.РЕДПЕРИОДПОЛЯ', True);
end;

proc РедактированиеExStr(Doc: Record; TabName: String; FieldName: String; Заг: String; ЗагЗнач: String;
			 HTopic:Integer);
  Var РабОбл, Field, j:Integer;

  ОчиститьПеременную(РАБ.РЕДПЕРИОДПОЛЯ.Даты);
  ОчиститьПеременную(РАБ.РЕДПЕРИОДПОЛЯ.ЗначенияСтр);
  Заголовок = Заг;
  ЗагЗначения = ЗагЗнач;
  РабОбл = OpenWorkArea( TabName, '', 'Ukey = ' + RecordToString(Doc));
  try
    if Records(РабОбл) > 0 :
      Field = OpenArray(РабОбл, 1, FieldName, 'Период');
      try
	ПозПериодПоля = Records(Field);
	For j = 1 .. ПозПериодПоля do
	  Даты[j] = GetFieldD(Field, j, 'Период');   -- дата
	  ЗначенияСтр[j] = GetFieldS(Field, j, 'Значение');
	End;
      finally
	CloseWorkArea(Field);
      end;
    end;
  finally
    CloseWorkArea(РабОбл);
  end;
  РАБ.РЕДПЕРИОДПОЛЯ.Режим = 1;
  OpenBlank('РАБ.РЕДПЕРИОДПОЛЯ', True);
end;

proc ПриЗакрытии(Sender: Logical);
--Var i:Integer;
  if CloseResult = False :
    if VarsIsModified('РАБ.РЕДПЕРИОДПОЛЯ') :
      if EnqOkCancel('Сохранить изменения ?') = кмдВерно :
	CloseResult = True;
      end;
    end;
  end;
--  For i=1..LengthOfArray(Значения) do
--    If ЗначенияСтр[i]<>'Без' :
--	Значения[i]=Round(ЗначенияСтр[i], 2);
--    Else
--	Значения[i]=-1;
--    Fi;
--  End;
end;

--Func ПриПроверке(Field:string; Iter:integer; Value: String): logical;
--Var Value2:Numeric;
--  Value2=Round(Value);
--  if Value2 < 0 :
--    Message('Нельзя указывать отрицательные числа.');
--    return false;
--  else
--    If Value<>'':
--	Значения[Iter]=Round(Value, 2);
--    Else
--	Значения[Iter]=-1;
--    Fi;
--    return true;
--  end;
--end;
Func ПриПроверке(Field:string; Iter:integer; Value: Numeric): logical;
--var Result: Logical;

  if Value < 0 :
    message('Нельзя вводить отрицательное число...');
    return False;
  else
    if МаксЗначение = '' :
      return True;
    else
      if Value > StringToNumeric(МаксЗначение) :
	message('Нельзя вводить числа больше ' + МаксЗначение + '.');
	return False;
      else
	return True;
      end;
    end;
  end;
--  return Result;
end;

proc СохранитьЗначения(Sender: String);
  CloseResult = True;
  Close;
end;

proc ОтменаИзменения(Sender: String);
--  CloseResult = False;
  Close;
end;

Proc СортировкаПриНажатии(line:integer; column:integer; click:logical);
  SortSection(ПозПериодПоля, column, ВидСортировки);
  ВидСортировки = not ВидСортировки;
end;

func ЗагЗначения_ПриВходе(field:string;iter:integer):logical;
  СортировкаПриНажатии(1, 3, ВидСОртировки);
  return False;
end;


proc секПериодПоляПослеВставки(ИмяСекции: String; Итер: integer);
  секПустышка.Visible = False;
end;


func Плюс_ПриВходе(Поле:String;Итер:Integer):Logical;
  секПустышка.Visible = False;
  ВставитьРамку(ПозПериодПоля,Итер+1);
  ^false;
end;


func Минус_ПриВходе(Поле:String;Итер:Integer):Logical;
  УдалитьРамку(ПозПериодПоля,Итер);
  ^false;
end;


Конец