Последняя версия DataExpress 3 beta от 9 октября 2018 года. Скачать. Энциклопедия DX. Форум на Develop-Soft

Запрос на основе данных сводной таблицы

Все о том как сделать что-то с помощью скриптов.
Lapusik
Новичок
Сообщения: 45
Зарегистрирован: Чт июл 12, 2018 3:59 pm

Запрос на основе данных сводной таблицы

Сообщение Lapusik » Вт июл 24, 2018 12:55 pm

В сводной таблице при выделении ячейки - формировать новую таблицу с данными (по сути запрос), фильтрами в этом случае служат заголовки строк и столбцов сводной таблицы.
Событием служит - выделить ячейку на сводной таблице.
Как описать его в процедуре?
и после этого мне нужно отфильтровать таблицу запроса.

Либо можно запомнить названия строки и столбца на пересечении выделенной ячейки и передать их в надпись или текстовое поле, по которому будет осуществлен фильтр запроса.

jurist23rus
Эксперт
Сообщения: 2439
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп

Re: Запрос на основе данных сводной таблицы

Сообщение jurist23rus » Вт июл 24, 2018 2:07 pm

А у вас есть навыки программирования?
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
Гocть
Эксперт
Сообщения: 1131
Зарегистрирован: Пн ноя 27, 2017 8:02 am

Re: Запрос на основе данных сводной таблицы

Сообщение Гocть » Вт июл 24, 2018 2:12 pm

Простой полуавтомат:

Код: Выделить всё

procedure OnSelCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); // процедура, выполняемая при выделении ячейки сводной таблицы с именем "dxPivotGrid1".
begin

EvalExpr('setvar("переменная",'''+dxPivotGrid1.Cells[ACol,ARow]+''')',Self);
// присвоили значение переменной из ячейки сводной таблицы на которой установлен фокус.

dxQueryGrid1.Refresh;
// для применения фильтра обновляем целевой запрос c предустановленным фильтром отбора (примерно): [!Нужное поле]=getvar('переменная')
end;


procedure Form_Create; // процедура создания формы. В ней объявляем остальные процедуры вызываемые по событию.
begin
  EvalExpr('setvar("переменная",null)',Self);
  // создаем пустую переменную с именем "переменная".

  dxPivotGrid1.OnSelectCell:=@OnSelCell;
  // при выделении ячейки сводной таблицы "dxPivotGrid1" вызывается процедура "OnSelCell".
end;   
Фрилансер. Разработка на заказ. Консультирование.

Lapusik
Новичок
Сообщения: 45
Зарегистрирован: Чт июл 12, 2018 3:59 pm

Re: Запрос на основе данных сводной таблицы

Сообщение Lapusik » Вт июл 24, 2018 2:53 pm

jurist23rus писал(а):А у вас есть навыки программирования?

Есть. Но с Паскалем давно не работала.

Lapusik
Новичок
Сообщения: 45
Зарегистрирован: Чт июл 12, 2018 3:59 pm

Re: Запрос на основе данных сводной таблицы

Сообщение Lapusik » Вт июл 24, 2018 3:17 pm

Гocть писал(а):Простой полуавтомат:

Код: Выделить всё

EvalExpr('setvar("переменная",'''+dxPivotGrid1.Cells[ACol,ARow]+''')',Self);
// присвоили значение переменной из ячейки сводной таблицы на которой установлен фокус.
   

По сути переменная запомнила данные ячейки. Но мне нужно вытянуть значения 1-го столбца (шапки) и 1-ой колонки.

Аватара пользователя
Гocть
Эксперт
Сообщения: 1131
Зарегистрирован: Пн ноя 27, 2017 8:02 am

Re: Запрос на основе данных сводной таблицы

Сообщение Гocть » Вт июл 24, 2018 3:27 pm

Вы может быть скинете подопытного? "В разрезе", так сказать, чтобы не гадать на кофейных гущах и ромашке.

с Паскалем давно не работала.
а с чем недавно?
Фрилансер. Разработка на заказ. Консультирование.

Lapusik
Новичок
Сообщения: 45
Зарегистрирован: Чт июл 12, 2018 3:59 pm

Re: Запрос на основе данных сводной таблицы

Сообщение Lapusik » Вт июл 24, 2018 3:30 pm

Да его еще толком и нет))))

Код: Выделить всё

EvalExpr('setvar("Переменная1",'''+dxPivotGrid1.Cells[1,ARow]+''')',Self);
EvalExpr('setvar("Переменная2",'''+dxPivotGrid1.Cells[ACol,1]+''')',Self);


EvalExpr - это имя мы даем сами?

Аватара пользователя
Гocть
Эксперт
Сообщения: 1131
Зарегистрирован: Пн ноя 27, 2017 8:02 am

Re: Запрос на основе данных сводной таблицы

Сообщение Гocть » Вт июл 24, 2018 3:39 pm

Не успел немного.
Лево: dxPivotGrid1.Cells[dxPivotGrid1.LeftCol-1,ARow]
Верх: dxPivotGrid1.Cells[ACol,dxPivotGrid1.TopRow-1]

Lapusik писал(а):EvalExpr - это имя мы даем сами?

Это "выполнить выражение" из скрипта. Типа: удаленный вызов процедуры. Первый параметр: строка выражения так как оно пишется внутри окна выражений в форме, второй параметр: форма выполнения. Если нет привязки к компонентам формы или к самой форме, можно оставить nil. (например: evalexpr(time,nil))
Фрилансер. Разработка на заказ. Консультирование.

Lapusik
Новичок
Сообщения: 45
Зарегистрирован: Чт июл 12, 2018 3:59 pm

Re: Запрос на основе данных сводной таблицы

Сообщение Lapusik » Чт авг 09, 2018 12:11 pm

вылез баг
при первом щелчке - не отображаются данные запроса. Нужно щелкать по итогам и потом на ячейку, тогда - ок.
Как исправить?

скрипт

Код: Выделить всё

procedure OnSelCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
EvalExpr('setvar("L1",'''+dxPivotGrid1.Cells[ACol,dxPivotGrid1.TopRow-1]+''')',Self);
EvalExpr('setvar("L2",'''+dxPivotGrid1.Cells[0,ARow]+''')',Self);
dxQueryGrid2.Refresh;
end;

 Procedure Form_Create;
 begin
  EvalExpr('setvar("L1",null)',Self);
  EvalExpr('setvar("L2",null)',Self);
 dxPivotGrid1.OnSelectCell:=@OnSelCell;
 end;
Вложения
111111.jpg
111111.jpg (32.52 КБ) 92 просмотра