diff --git a/Source/Modulos/Informe margen por articulo/Views/uViewInfMargenArticuloGrid.dfm b/Source/Modulos/Informe margen por articulo/Views/uViewInfMargenArticuloGrid.dfm index 0b60af57..0aa8bf5e 100644 --- a/Source/Modulos/Informe margen por articulo/Views/uViewInfMargenArticuloGrid.dfm +++ b/Source/Modulos/Informe margen por articulo/Views/uViewInfMargenArticuloGrid.dfm @@ -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 %' diff --git a/Source/Modulos/Informe margen por articulo/Views/uViewInfMargenArticuloGrid.pas b/Source/Modulos/Informe margen por articulo/Views/uViewInfMargenArticuloGrid.pas index 1d68d8f8..36dfaa0b 100644 --- a/Source/Modulos/Informe margen por articulo/Views/uViewInfMargenArticuloGrid.pas +++ b/Source/Modulos/Informe margen por articulo/Views/uViewInfMargenArticuloGrid.pas @@ -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;