dbf_usr Posted January 24, 2022 Share Posted January 24, 2022 Как вывести итоги одного столбца в несколько столбцов? есть несколько способов подсчета итога в столбце и его результаты разные и их нужно видеть. Нужно разместить итоги одного столбца в другом столбце. или в одном столбце - но друг под другом. Всем заранее благодарен за ответ! Quote Link to comment Share on other sites More sharing options...
x11 Posted January 25, 2022 Share Posted January 25, 2022 А что именно не получается? 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 Quote Link to comment Share on other sites More sharing options...
dbf_usr Posted January 28, 2022 Author Share Posted January 28, 2022 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">⇧</font>'+' Σ: '+FormatCurr('0,0.00 ', I); if I<=0 then Result:= '<p><font size="2" color="red" face="Arial">⇩</font>'+' Σ: '+FormatCurr('0,0.00 ', I); end; Column.AuxValue:=NULL; end; Вопрос в том, что значения в одном столбце нужно по разному посчитать (с разными фильтрами) и нужно их где-то вывести. Как вариант выводить в месте для итогов в соседних столбцах. Quote Link to comment Share on other sites More sharing options...
x11 Posted January 28, 2022 Share Posted January 28, 2022 А если разместить панель и две метки (TUniLabel) под таблицей и выводить результаты в метки, а не в подвал сетки? Quote Link to comment Share on other sites More sharing options...
x11 Posted January 28, 2022 Share Posted January 28, 2022 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">⇧</font>'+' Σ: '+FormatCurr('0,0.00 ', I); if I<=0 then s:= '<p><font size="2" color="red" face="Arial">⇩</font>'+' Σ: '+FormatCurr('0,0.00 ', I); result := s + '/' + s; Quote Link to comment Share on other sites More sharing options...
x11 Posted January 28, 2022 Share Posted January 28, 2022 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 всего два вида, то выводить их отдельно в два разных столбца и тогда уже суммирование будет у каждого столбца свое Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.