powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport условное выдение Cross-tab
6 сообщений из 6, страница 1 из 1
FastReport условное выдение Cross-tab
    #40076605
koo3mee4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток!
Имея таблицу (см. скрин) подскажите как настроить условное выделение в cross-tab FastReport, так что если Показатель 1 в Мае больше чем в Апреле, то значение выделялось одним цветом, а если меньше то другим.
...
Рейтинг: 0 / 0
FastReport условное выдение Cross-tab
    #40076669
koo3mee4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В итоге сделал так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
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;
...
Рейтинг: 0 / 0
FastReport условное выдение Cross-tab
    #40076686
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению достучаться до готовой матрицы значений из скрипта нельзя (по крайней мере в FR5)
Для достижения желаемого результата пришлось зарегистрировать вот такой костыль
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
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;


После чего в самом скрипте уже можно получить доступ к любому значению матрицы
Код: pascal
1.
2.
3.
4.
5.
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;
...
Рейтинг: 0 / 0
FastReport условное выдение Cross-tab
    #40076728
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

RowValues не содержит ли массив значений текущей строки?
...
Рейтинг: 0 / 0
FastReport условное выдение Cross-tab
    #40076766
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
RowValues не содержит ли массив значений текущей строки?

Текущая строка <> Матрица
...
Рейтинг: 0 / 0
FastReport условное выдение Cross-tab
    #40076767
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RowValues - массив из одного значения.
На базе Демки ФР.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport условное выдение Cross-tab
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]