powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TcxGrid: кастомные расчёты на группах таблицы
23 сообщений из 23, страница 1 из 1
TcxGrid: кастомные расчёты на группах таблицы
    #40059059
Фотография Romka-Fes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Перерыл весь KB у девекспресса, и пол интернета - не могу найти решение задачи. Может кто сталкивался и решал подобное?
Суть: нужно на группах (разные типы данных у полей) выводить кастомные значения, основанные на некоторых вычислениях.
Например нужно на группе, в отдельном поле, выводить разницу между максимальной и минимальной датой (два отдельные поля с датами).
Есть обработчик CustomDrawGroupSummaryCell у TcxGridDBTableView (именно это TV и использую) - но мне надо расчитывать данные на группах , по некоторым полям, основываясь на данных (в группе), из других полей.

Суть - на скрине во вложении
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059060
Фотография Romka-Fes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По мин-максдатам - вопроса нет, это решается штатным функционалом группировки в TcxGrid.
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059070
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059086
Фотография Romka-Fes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

Спасибо! разбираю код в примере. Но это ж только для "штатных" функций агрегации? и отображение и ф футере и в заголовке группы. А мне надо для "рисования" данных на группах одних полей использовать данные из групп других полей. Причём их тоже нужно расчитывать по своей формуле.
Т.е. надо сделать свою кастомную функцию, по аналогии с теми, как это есть "из коробки". (см. скрин).
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059092
Фотография Romka-Fes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Romka-Fes,

Я делал аналогичные расчёты для дерева, на "группах" (парентах) в дереве.
и надо анаогично сделать в таблице. Это вообще реально?
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059093
Фотография Romka-Fes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Romka-Fes,

в дереве (на последнем скрине) - длительность - это разница между мин. датой начала и макс. датой окончания.
я данные гружу из БД в TdxMemData и в нём уже (в ОЗУ) идут расчёты и запись данных в поля TdxMemData.
но это сами данные, в таблице, которая отображается в виде дерева черех TcxDBTreeList.
А как бы это сделать в TcxGrid - вот вопрос.
Готов перейти в личку или в раздел "Работа". главное сумму согласовать. Ибо надо уже ASAP (((.
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059121
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне надо для "рисования" данных на группах одних полей использовать данные из групп других полей
Подсовываете нужные индексы.
Т.е. надо сделать свою кастомную функцию, по аналогии с теми, как это есть "из коробки".
Зачем какие то кастомные функции ?
длительность - это разница между мин. датой начала и макс. датой окончания
Почему бы не рассчитать Длительность в запросе ?
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059124
Фотография Romka-Fes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

Можно и в запросе сделать. Но пользователи могут группировки сами менять. Это musthave. в итоге надо для каждого варианта группировки делать отдельные поля, это всё на сервере рассчитывать и потом..., проверять каждый вариант группировки и брать данные из соответствующего поля?
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059125
Фотография Romka-Fes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Romka-Fes,

"Подсовываете нужные индексы." - индексы полей? Так надо сначала одну группу посчитать, а потом на основании этих данных (из рассчитанных групп) - считать другие группы.
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059128
Фотография Romka-Fes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

"Зачем какие то кастомные функции ?" - так как те штатные, которые есть - не дают нужного функционала, на группах.
1. мне надо вычислить мин. и макс. дату.
2. надо в группе вывести разницу дат (длительность).
3. надо проссумировать кол-во по всем строкамв группе.
4. для 3-х полей (с разными кол-вами) отобразть частное от деления п.3 на п.2.
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059137
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. мне надо вычислить мин. и макс. дату. - это стандартная функция
2. надо в группе вывести разницу дат (длительность). - это можно вычислить в запросе
3. надо проссумировать кол-во по всем строкамв группе. - сумма - это стандартная функция
4. для 3-х полей (с разными кол-вами) отобразть частное от деления п.3 на п.2. - поделить ИТОГО одной колонки на ИТОГО другой колонки
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059152
Фотография Romka-Fes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,
1. я об это таки писал. Тут задача взять эти данные для дальнейших вычислений.
2. нельзя в запросе. ибо группы могут быть разные. т.е. разные группировки, поля "юзер" может сам "тягать", как ему надо. Это надо на клиенте считать. "вячилст в запросе" - завести отдельное поле с результатом разницы дат? так, выходит, надоделать каждое отдельное поле для кажого возможного варианта группировки.
3. тут не просто проссумировать и показать сумму на группе (как есть в стандартной skSum), а надо это в коде почситать и вывести частное от деления этой суммы на результат разницы дат.
4. дело не в самих данных "колонок", а в том чтобы это на уровне групп отобразить.

сами строки посчитаны на сервере давно.

Или я не корректно описываю суть проблемы?

Было бы так, как Вы пишите, просто, - то я и сам знаю как сделать. Тут немного друго поля задача, увы (((
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059154
Фотография Romka-Fes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

Можно ли как-то в одном обработчике сослатся на данные его прошлых вычислений?
Тут несколько "проходов" надо делать. Посчитать на группе одно, а потом из этих результатов нарисовать, по кастомной логике вчислений, на том же уровне, другое.
А как это сделать - я пока не придумал и не нашёл неких вариантов.
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059200
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>завести отдельное поле с результатом разницы дат
У вас 5 полей с датами. Как вы опредяете с какого поля какое нужно вычесть, чтобы написать эту разницу в группировке ?
Может стоит завести Бэнд, и тогда две колонки с датами находящиеся под этим Бэндом и бутут минусоваться ?
>а надо это в коде почситать и вывести частное от деления этой суммы на результат разницы дат
Частное от деление чего на чего ? Какие колонки вы хотите обсчитывать, если пользователь их таскает как хочет ?
>дело не в самих данных "колонок", а в том чтобы это на уровне групп отобразить.
Как отобразить я вам дал пример.
>Или я не корректно описываю суть проблемы?
Конечно не корректно, вы сами не можете понять какие колонки на какие делить/вычитать.
>Тут немного друго поля задача
Думаете, что вы сами не понимаете уровня задачи.
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059204
Фотография Romka-Fes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

"У вас 5 полей с датами. Как вы опредяете с какого поля какое нужно вычесть, чтобы написать эту разницу в группировке ?"
по DataBinding свойства у поля.

"Может стоит завести Бэнд, и тогда две колонки с датами находящиеся под этим Бэндом и бутут минусоваться ?"
BandedTable - не вариант. в силу самой изначальной постановки задачи. да и бенды не решат текущую проблему (задачу).


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

"Как отобразить я вам дал пример." нет нужного примера. архив по ссылке я смотрел. там совсем другое, уж сорри.

"Конечно не корректно, вы сами не можете понять какие колонки на какие делить/вычитать." - я понимаю всё более чем. Кроме того ,как решить эту, не совсем тривиальную задачу.

"Думаете, что вы сами не понимаете уровня задачи. " - тут явно имелось в виду "Думаю...", повторюсь, я чётко понимаю суть задачи, кроме того, она показана на скриншотах, которые более, чем красноречивы.

Я, вообще-то хотел спросить, делал ли кто-то подобные вещи, но пока, явно - никто. Если поможете - я готов оплатить работу. И в "Работе" сделал топик со ссылкой на этот пост.
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059217
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>"У вас 5 полей с датами. Как вы опредяете с какого поля какое нужно вычесть, чтобы написать эту разницу в группировке ?" по DataBinding свойства у поля.
Так и не понятно, как из ПЯТИ полей формата Дата, выбрать именно два, которые нужно вычесть

>Нужно в трёх полях, отдельных учесть результат вычислений на одном поле (длительность) и поделить его на суммы соответствующих количеств. всё ясно ж описал.
Если всё заранее известно, то в чём проблема ?

>"Как отобразить я вам дал пример." нет нужного примера.
Сочувствую

>я чётко понимаю суть задачи, кроме того, она показана на скриншотах, которые более, чем красноречивы.
Красноречивость скриншотов для вас, не означает что их понимают другие.

>Я, вообще-то хотел спросить, делал ли кто-то подобные вещи, но пока, явно - никто.
Все всё делали, не нужно думать, что вы первооткрыватель.

>Если поможете - я готов оплатить работу.
Если вы не заметили, то я бесплатно пытаюсь понять вашу проблему.

Если вы действительно хотите решить свою задачу, а не ждёте, что добрый дяденька придёт и всё сделает, то пишется тестовый пример, с конкретной целью, нарисовать нужное конкретное ТЕСТОВОЕ значение в конкретном месте.
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059281
Фотография Romka-Fes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

Ещё раз приветствую!

Спасибо за фидбек. Я подготовил тестовый проект.

Пока вот скрин с сутью проблемы.
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059282
Фотография Romka-Fes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

во вложении исходники тестового проекта.
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059291
Фотография Romka-Fes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

По ожидаемым результатам:
1. на обеих группах длительность должны быть равна 33 (даты на группах одинаковые). Т.е. это разница между 03.03.2021 и 05.04.2021
2. Интенсивность должна быть равна 5.45. Как частное, от деления 180 на 33.
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059405
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё строго по примеру по ссылке тынц
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059690
Фотография Romka-Fes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

Добрый день!
Спасибо за пример.
Но пока получаю Variant cast error.

"Could not convert variant of type (Null) into type (Double)" как на своём реальном проекте, так и на тестовом.

Ошибка в cxGridTableView.pas
в этой процедуре
Код: pascal
1.
2.
3.
4.
5.
6.
procedure TcxGridTableView.DoCustomDrawGroupCell(ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableCellViewInfo; var ADone: Boolean);
begin
  if HasCustomDrawGroupCell then
    FOnCustomDrawGroupCell(Self, ACanvas, AViewInfo, ADone);
end;



Но это из-за того что Result := NULL, по умолчанию в функции
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  function GetSummary (Item:TcxGridColumn): Variant;
  var i:Integer;
      ASummaryItems: TcxDataSummaryItems;
      PSummaryValues: PVariant;
  begin
    Result:= NULL;
    with tvGrid1DBTableView_TestData.DataController.Summary do
    begin
      for i:=0  to DefaultGroupSummaryItems.Count-1 do
        if TcxGridItemDBDataBinding(Item.DataBinding).FieldName = TcxGridDBTableSummaryItem(DefaultGroupSummaryItems[i]).FieldName then
          if GetGroupSummaryInfo(AViewInfo.GridRecord.Index,ASummaryItems,PSummaryValues) then
            Result := PSummaryValues^[i];
    end;
  end;



Пытаюсь разобраться с этим - но пока, увы безуспешно.
Есть идеи, как с этим NULL решить проблему с ошибкой?
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059715
Фотография Romka-Fes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И можно ли для такого варианта реализации использовать не DefaultGroups - а просто группы?
Т.е. не DefaultGroupSummaryItems использовать, а GroupSummaryItems
Но надо как-то по всем Levels ещё пробежатся, чтобы индекс уровней группировки получить. А я не знаю как (((. Не могу найти коллекцию уровней на группах. Или таковой не существует?
...
Рейтинг: 0 / 0
TcxGrid: кастомные расчёты на группах таблицы
    #40059767
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TcxGrid: кастомные расчёты на группах таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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