Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 25 апр 2024, 19:29

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: 14 май 2016, 20:51 
Не в сети

Зарегистрирован: 09 дек 2015, 08:50
Сообщений: 44
Откуда: Omsk
Есть вычисляемое поле, которое считает разницу между двумя полями со временем (в часах и минутах), т.е. показывает кол-во отработанного времени.
Как настроить footer, чтоб суммировал время по вычисляемому полю? Обычное fvtSum по полю не помогает, выдает ошибку, что время суммировать нельзя.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 16 май 2016, 08:09 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.


Нужны более подробные данные чтобы смоделировать ситуацию.
Напишите, пожалуйста, какой используется тип полей, какие данные в таблице.

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 16 май 2016, 11:57 
Не в сети

Зарегистрирован: 09 авг 2012, 10:03
Сообщений: 16
Откуда: France
Hi,

I had this problem in one project and I solved it by using TTimeSpan
You can't use TTimeField to sum time
Duration must be stored as int64
I must now make an editor to edit field duration as a timeField in DBGridEh

I attached a demo to show you how I did
I hope it helps you ;)

(Sorry I don't speak Russian)
Demo made with DEX7 and ehlib8.2

Rico


Вложения:
duration.zip [68.44 KiB]
Скачиваний: 90
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 22 апр 2017, 10:31 
Не в сети

Зарегистрирован: 09 дек 2015, 08:50
Сообщений: 44
Откуда: Omsk
EhLibSupport писал(а):
Добрый день.


Нужны более подробные данные чтобы смоделировать ситуацию.
Напишите, пожалуйста, какой используется тип полей, какие данные в таблице.


Есть таблица с полем типа Time в котором отображается время в формате 'hh:mm:ss'. Нужно в DbGridEh в footer вывести сумму по этому полю. Как я понял, footer может выводить SUM только по полям типа integer или real, а вот как заставить считать время?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 26 апр 2017, 15:21 
Не в сети

Зарегистрирован: 09 дек 2015, 08:50
Сообщений: 44
Откуда: Omsk
кто-нибудь поделится красивым решением?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 27 апр 2017, 12:59 
Не в сети

Зарегистрирован: 09 авг 2012, 10:03
Сообщений: 16
Откуда: France
Have you try my demo project ?
If yes, why it doesn't suits you ?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 29 апр 2017, 03:19 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.

А чем предложенный rico способ не подходит?

Создаете калькулируемое Integer поле с формулой
FieldValue := Round((TimeFieldValue) * 24 * 60 * 60);

Полчаем длительность в секундах.

Форматируем отображание в футтере и если надо в столбце.


Код:
procedure TForm4.DBGridEh1Columns1GetCellParams(Sender: TObject;
  EditMode: Boolean; Params: TColCellParamsEh);
var
  TimeSpan : TTimeSpan;
begin
  timeSpan.Create(dbgrideh1.DataSource.DataSet.FieldByName('DURATION').AsLargeInt*10000);
  Params.Text := Format('%d:%.2d:%.2d', [Trunc(timeSpan.TotalHours), timeSpan.Minutes, timeSpan.Seconds]);

end;

procedure TForm4.DBGridEh1GetFooterParams(Sender: TObject; DataCol,
  Row: Integer; Column: TColumnEh; AFont: TFont; var Background: TColor;
  var Alignment: TAlignment; State: TGridDrawState; var Text: string);
var
  timeSpan : TTimeSpan;
begin
  if Column.FieldName = 'DURATION' then
  begin
    timeSpan.Create(Trunc(dbgrideh1.SumList.SumCollection.Items[0].SumValue*10000)); //
    Text := Format('%d:%.2d:%.2d', [Trunc(timeSpan.TotalHours), timeSpan.Minutes, timeSpan.Seconds]);
  end;
end;

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB