Jump to content

Как вывести итоги одного столбца в несколько столбцов?


dbf_usr

Recommended Posts

Как вывести итоги одного столбца в несколько столбцов?

image.png.a7a2d904dad1b78c858a1c1853275e21.png

есть несколько способов подсчета итога в столбце и его результаты разные и их нужно видеть. Нужно разместить итоги одного столбца в другом столбце. или в одном столбце - но друг под другом.

Всем заранее благодарен за ответ!

Link to comment
Share on other sites

А что именно не получается?

procedure TfmMain.dbgTodayColumnSummaryResult(Column: TUniDBGridColumn; GroupFieldValue: Variant; Attribs: TUniCellAttribs; var Result: string);
begin
  if SameText(Column.FieldName, 'ID') or SameText(Column.FieldName, 'LCD') then
    Result := qToday.RecordCount.ToString;
end;

 

и не забыть включить у двух столбцов ShowSummary

Link to comment
Share on other sites

On 1/25/2022 at 11:03 AM, x11 said:

А что именно не получается?

procedure TfmMain.dbgTodayColumnSummaryResult(Column: TUniDBGridColumn; GroupFieldValue: Variant; Attribs: TUniCellAttribs; var Result: string);
begin
  if SameText(Column.FieldName, 'ID') or SameText(Column.FieldName, 'LCD') then
    Result := qToday.RecordCount.ToString;
end;

 

и не забыть включить у двух столбцов ShowSummary

Не годится. Рассчитываются итоги для групп строк. Результат подготавливается в Column.AuxValue в этой процедуре

procedure TUniOperations.UniDBGrid1ColumnSummary(Column: TUniDBGridColumn;
  GroupFieldValue: Variant);
  var F : Real;
begin
   if SameText(Column.FieldName, 'sum_acount_cur') then
  begin
    if Column.AuxValue=NULL then Column.AuxValue:=0;
    if Column.Field.DataSet.FieldByName('id_sens_operation').AsInteger=95 then
      begin
        if  Column.Field.DataSet.FieldByName('typ_operation_id').AsString='111' then
          Column.AuxValue:=Column.AuxValue + Column.Field.AsInteger;
        if  Column.Field.DataSet.FieldByName('typ_operation_id').AsString='112' then
          Column.AuxValue:=Column.AuxValue - Column.Field.AsInteger;
      end;
  end;
 end;

А потом выводится в этой:

procedure TUniOperations.UniDBGrid1ColumnSummaryResult(Column: TUniDBGridColumn;
  GroupFieldValue: Variant; Attribs: TUniCellAttribs; var Result: string);
var
  I : Integer;
begin
 if SameText(Column.FieldName, 'sum_acount_cur') then
  begin
    I:=Column.AuxValue;
     if I>0 then Result:= '<p><font size="2" color="gren" face="Arial">&#8679</font>'+' Σ: '+FormatCurr('0,0.00 ', I);
     if I<=0 then Result:= '<p><font size="2" color="red" face="Arial">&#8681</font>'+' Σ: '+FormatCurr('0,0.00 ', I);
  end;
  Column.AuxValue:=NULL;
end;

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

 

 

 

Link to comment
Share on other sites

24 minutes ago, dbf_usr said:
if  Column.Field.DataSet.FieldByName('typ_operation_id').AsString='111' then
          Column.AuxValue:=Column.AuxValue + Column.Field.AsInteger;
        if  Column.Field.DataSet.FieldByName('typ_operation_id').AsString='112' then
          Column.AuxValue:=Column.AuxValue - Column.Field.AsInteger;

а нельзя заменить "Column.AuxValue" на две глобальные переменные?

а в качестве результата что-то вроде такого, через слэш выводить:

 

if I>0 then s:= '<p><font size="2" color="gren" face="Arial">&#8679</font>'+' Σ: '+FormatCurr('0,0.00 ', I);
if I<=0 then s:= '<p><font size="2" color="red" face="Arial">&#8681</font>'+' Σ: '+FormatCurr('0,0.00 ', I);

result := s + '/' + s;

 

Link to comment
Share on other sites

27 minutes ago, dbf_usr said:
if  Column.Field.DataSet.FieldByName('typ_operation_id').AsString='111' then
          Column.AuxValue:=Column.AuxValue + Column.Field.AsInteger;
        if  Column.Field.DataSet.FieldByName('typ_operation_id').AsString='112' then
          Column.AuxValue:=Column.AuxValue - Column.Field.AsInteger;

еще вариант: если typ_operation_id всего два вида, то выводить их отдельно в два разных столбца и тогда уже суммирование будет у каждого столбца свое

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...