Arreglo de cálculo de porcentaje de márgenes en informe de margen por artículo.

git-svn-id: https://192.168.0.254/svn/Proyectos.LuisLeon_FactuGES/trunk@253 c93665c3-c93d-084d-9b98-7d5f4a9c3376
This commit is contained in:
David Arranz 2008-06-19 13:31:40 +00:00
parent 762c3c5ddb
commit b8e251ab7e
2 changed files with 84 additions and 13 deletions

View File

@ -1,17 +1,19 @@
inherited frViewInfMargenArticuloGrid: TfrViewInfMargenArticuloGrid
Width = 583
Height = 378
ExplicitWidth = 583
ExplicitHeight = 378
Width = 774
Height = 480
ExplicitWidth = 774
ExplicitHeight = 480
object cxGrid: TcxGrid [0]
Left = 0
Top = 0
Width = 583
Height = 378
Width = 774
Height = 480
Align = alClient
TabOrder = 0
LookAndFeel.Kind = lfStandard
LookAndFeel.NativeStyle = True
ExplicitWidth = 583
ExplicitHeight = 378
object cxGridView: TcxGridDBTableView
NavigatorButtons.ConfirmDelete = False
FilterBox.CustomizeDialog = False
@ -20,6 +22,7 @@ inherited frViewInfMargenArticuloGrid: TfrViewInfMargenArticuloGrid
DataController.Filter.OnChanged = cxGridViewDataControllerFilterChanged
DataController.KeyFieldNames = 'RecID'
DataController.Options = [dcoAnsiSort, dcoAssignGroupingValues, dcoAssignMasterDetailKeys, dcoSaveExpanding, dcoSortByDisplayText]
DataController.Summary.DefaultGroupSummaryItems.OnSummary = cxGridViewDataControllerSummaryDefaultGroupSummaryItemsSummary
DataController.Summary.DefaultGroupSummaryItems = <
item
Format = ',0.00 %;-,0.00 %'

View File

@ -95,11 +95,15 @@ type
AColumn: TcxGridColumn);
procedure cxGridViewDataControllerGroupingChanged(Sender: TObject);
procedure cxGridViewDataControllerSortingChanged(Sender: TObject);
procedure cxGridViewDataControllerSummaryAfterSummary(ASender: TcxDataSummary);
procedure cxGridViewDataControllerFilterChanged(Sender: TObject);
procedure cxGridViewDataControllerSummaryFooterSummaryItemsSummary(
ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments;
var OutArguments: TcxSummaryEventOutArguments);
procedure cxGridViewDataControllerSummaryAfterSummary(
ASender: TcxDataSummary);
procedure cxGridViewDataControllerSummaryDefaultGroupSummaryItemsSummary(
ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments;
var OutArguments: TcxSummaryEventOutArguments);
protected
procedure ActivarEventos; override;
procedure DesactivarEventos; override;
@ -113,7 +117,7 @@ type
implementation
uses
cxVariants, uDateUtils;
cxVariants, uDateUtils, cxGridDBDataDefinitions;
{$R *.dfm}
@ -230,12 +234,76 @@ end;
procedure TfrViewInfMargenArticuloGrid.cxGridViewDataControllerSummaryAfterSummary(
ASender: TcxDataSummary);
procedure CalcGropSummaries;
function Groups: TcxDataControllerGroups;
begin
Result := cxGridView.DataController.Groups;
end;
procedure CalcGroupSummary(ADataGroupIndex: Integer);
var
V1, V2, AResult: Variant;
ASummaryItems: TcxDataSummaryItems;
begin
ASummaryItems := ASender.GroupSummaryItems[Groups.Level[ADataGroupIndex]];
V1 := ASender.GroupSummaryValues[ADataGroupIndex,
ASummaryItems.IndexOfItemLink(cxGridViewIMP_TOTAL)];
V2 := ASender.GroupSummaryValues[ADataGroupIndex,
ASummaryItems.IndexOfItemLink(cxGridViewIMP_MARGEN_PRO_COMP_TOTAL)];
AResult := 0;
if (V1 > 0) then
begin
AResult := (V2 * 100) / V1;
end;
ASender.GroupSummaryValues[ADataGroupIndex,
ASummaryItems.IndexOfItemLink(cxGridViewPOR_MARGEN_PRO_COMP)] := AResult
end;
procedure CalcGroupSummariesByDataGroupIndex(ADataGroupIndex: Integer);
var
I: Integer;
begin
if Groups.Level[ADataGroupIndex] >= Groups.GroupingItemCount - 1 then
Exit;
for I := 0 to Groups.ChildCount[ADataGroupIndex] - 1 do
begin
CalcGroupSummary(Groups.ChildDataGroupIndex[ADataGroupIndex, I]);
CalcGroupSummariesByDataGroupIndex(Groups.ChildDataGroupIndex[ADataGroupIndex, I]);
end;
end;
begin
CalcGroupSummariesByDataGroupIndex(-1);
end;
begin
if ASender.DataController.RecordCount > 0 then
begin
DesactivarEventos;
try
CalcGropSummaries;
finally
ActivarEventos;
if Assigned(FOnViewChanged) then
FOnViewChanged(Self);
end;
end;
end;
procedure TfrViewInfMargenArticuloGrid.cxGridViewDataControllerSummaryDefaultGroupSummaryItemsSummary(
ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments;
var OutArguments: TcxSummaryEventOutArguments);
begin
inherited;
//
if Assigned(FOnViewChanged) then
FOnViewChanged(Self);
if Arguments.SummaryItem.ItemLink = cxGridViewPOR_MARGEN_PRO_COMP then
OutArguments.Value := 111;
end;
procedure TfrViewInfMargenArticuloGrid.cxGridViewDataControllerSummaryFooterSummaryItemsSummary(
@ -251,7 +319,7 @@ begin
if cxGridViewIMP_TOTAL.Visible
and cxGridViewIMP_MARGEN_PRO_COMP_TOTAL.Visible then
begin
ACalculo:=0;
ACalculo := 0;
AIndex := ASender.IndexOfItemLink(cxGridViewIMP_MARGEN_PRO_COMP_TOTAL);
if not VarIsNull(cxGridView.DataController.Summary.FooterSummaryValues[AIndex]) then
ACalculo := cxGridView.DataController.Summary.FooterSummaryValues[AIndex] * 100;