Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 FastReport условное выдение Cross-tab  [new]
koo3mee4
Member

Откуда:
Сообщений: 55
Доброго времени суток!
Имея таблицу (см. скрин) подскажите как настроить условное выделение в cross-tab FastReport, так что если Показатель 1 в Мае больше чем в Апреле, то значение выделялось одним цветом, а если меньше то другим.

К сообщению приложен файл. Размер - 1Kb
9 июн 21, 13:48    [22333283]     Ответить | Цитировать Сообщить модератору
 Re: FastReport условное выдение Cross-tab  [new]
koo3mee4
Member

Откуда:
Сообщений: 55
В итоге сделал так:
procedure DBCross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
begin
  if (cellindex=0) and (columnIndex=0) then A0:=VarToStr(Value);

  if (cellindex=0) and (columnIndex=1) then A1:=VarToStr(Value);

  if (A0<A1) and (cellindex=0) and (columnindex=1) then Memo.Color:=clyellow;                                                                                       
end;
9 июн 21, 16:18    [22333397]     Ответить | Цитировать Сообщить модератору
 Re: FastReport условное выдение Cross-tab  [new]
DimaBr
Member

Откуда:
Сообщений: 12091
К сожалению достучаться до готовой матрицы значений из скрипта нельзя (по крайней мере в FR5)
Для достижения желаемого результата пришлось зарегистрировать вот такой костыль
constructor TFunctions.Create(AScript: TfsScript);
begin
  inherited Create(AScript);

  with FindClass('TfrxCustomCrossView') do begin
    AddMethod('function GetValue(ARow, AColumn, ACell: Integer): Variant;', CallMethod);
  end;
end;

function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; const AName: String; Caller: TfsMethodHelper): Variant;
begin
  if ClassType = TfrxCustomCrossView then begin
    if AName = 'GETVALUE' then Result := TfrxCustomCrossView(Instance).GetValue(Caller[0],Caller[1],Caller[2]) else
  end else
end;

После чего в самом скрипте уже можно получить доступ к любому значению матрицы
procedure DBCross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
begin
  if DBCross1.GetValue(RowIndex, 1, CellIndex) < DBCross1.GetValue(RowIndex, 2, CellIndex)
    then Memo.Color:=clyellow;
end;
9 июн 21, 17:09    [22333431]     Ответить | Цитировать Сообщить модератору
 Re: FastReport условное выдение Cross-tab  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12901
DimaBr,

RowValues не содержит ли массив значений текущей строки?
9 июн 21, 18:40    [22333491]     Ответить | Цитировать Сообщить модератору
 Re: FastReport условное выдение Cross-tab  [new]
DimaBr
Member

Откуда:
Сообщений: 12091
_Vasilisk_
RowValues не содержит ли массив значений текущей строки?

Текущая строка <> Матрица
9 июн 21, 23:31    [22333554]     Ответить | Цитировать Сообщить модератору
 Re: FastReport условное выдение Cross-tab  [new]
DimaBr
Member

Откуда:
Сообщений: 12091
RowValues - массив из одного значения.
На базе Демки ФР.

К сообщению приложен файл. Размер - 65Kb
9 июн 21, 23:38    [22333555]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить