unit uViewInfMargenArticuloGrid; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uViewInformeBaseGrid, DB, uDADataTable, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, cxDBData, cxTextEdit, cxGridLevel, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses, cxControls, cxGridCustomView, cxGrid, cxCurrencyEdit, cxCalendar, dxPSGlbl, dxPSUtl, dxPrnPg, dxBkgnd, dxWrap, dxPrnDev, dxPSEngn, dxPSCompsProvider, dxPSFillPatterns, dxPSEdgePatterns, dxPSCore, dxPScxCommon, dxPScxGridLnk, dxPgsDlg, cxDropDownEdit, StdCtrls, cxSpinEdit; type IViewInfMargenArticuloGrid = interface(IViewInformeBaseGrid) ['{19EAFDBF-857D-4A6B-851A-DDB7A3CB281B}'] end; TfrViewInfMargenArticuloGrid = class(TfrViewInformeBaseGrid, IViewInfMargenArticuloGrid) cxGrid: TcxGrid; cxGridView: TcxGridDBTableView; cxGridLevel: TcxGridLevel; cxStyleRepository1: TcxStyleRepository; cxStyleRed: TcxStyle; cxStyleBlue: TcxStyle; cxStyleFilterBox: TcxStyle; cxGridViewRecID: TcxGridDBColumn; cxGridViewID_FACTURA: TcxGridDBColumn; cxGridViewID_EMPRESA: TcxGridDBColumn; cxGridViewREFERENCIA_FACTURA: TcxGridDBColumn; cxGridViewFECHA_FACTURA: TcxGridDBColumn; cxGridViewIMPORTE_TOTAL_FACTURA: TcxGridDBColumn; cxGridViewID_COMISION_FACTURA: TcxGridDBColumn; cxGridViewID_ARTICULO: TcxGridDBColumn; cxGridViewFAMILIA: TcxGridDBColumn; cxGridViewREFERENCIA: TcxGridDBColumn; cxGridViewREFERENCIA_PROV: TcxGridDBColumn; cxGridViewDESCRIPCION: TcxGridDBColumn; cxGridViewCOMISIONABLE: TcxGridDBColumn; cxGridViewINVENTARIABLE: TcxGridDBColumn; cxGridViewIMPORTE_UNIDAD_COSTE: TcxGridDBColumn; cxGridViewDESCUENTO_PROVEEDOR_COSTE: TcxGridDBColumn; cxGridViewIMPORTE_NETO_COSTE: TcxGridDBColumn; cxGridViewIMPORTE_PORTE_COSTE: TcxGridDBColumn; cxGridViewCANTIDAD: TcxGridDBColumn; cxGridViewIMPORTE_UNIDAD_VENTA: TcxGridDBColumn; cxGridViewDESCUENTO_CLIENTE_VENTA: TcxGridDBColumn; cxGridViewIMPORTE_TOTAL_VENTA: TcxGridDBColumn; cxGridViewNIF_CIF_PROVEEDOR: TcxGridDBColumn; cxGridViewNOMBRE_PROVEEDOR: TcxGridDBColumn; cxGridViewCALLE_PROVEEDOR: TcxGridDBColumn; cxGridViewPOBLACION_PROVEEDOR: TcxGridDBColumn; cxGridViewPROVINCIA_PROVEEDOR: TcxGridDBColumn; cxGridViewNIF_CIF_CLIENTE: TcxGridDBColumn; cxGridViewNOMBRE_CLIENTE: TcxGridDBColumn; cxGridViewNOMBRE_COMERCIAL_CLIENTE: TcxGridDBColumn; cxGridViewCALLE_CLIENTE: TcxGridDBColumn; cxGridViewPOBLACION_CLIENTE: TcxGridDBColumn; cxGridViewPROVINCIA_CLIENTE: TcxGridDBColumn; cxGridViewNIF_CIF_AGENTE: TcxGridDBColumn; cxGridViewNOMBRE_AGENTE: TcxGridDBColumn; cxGridViewCALLE_AGENTE: TcxGridDBColumn; cxGridViewPOBLACION_AGENTE: TcxGridDBColumn; cxGridViewPROVINCIA_AGENTE: TcxGridDBColumn; cxGridViewCOMISION_AGENTE: TcxGridDBColumn; cxGridViewIMPORTE_COMISION_AGENTE: TcxGridDBColumn; cxGridViewIMPORTE_NETO_VENTA: TcxGridDBColumn; cxGridViewIMPORTE_UNIDAD_ULTIMA_COMPRA: TcxGridDBColumn; cxGridViewIMPORTE_NETO_ULTIMA_COMPRA: TcxGridDBColumn; cxGridViewIMPORTE_PORTE_ULTIMA_COMPRA: TcxGridDBColumn; cxGridViewIMPORTE_UNIDAD_PROMEDIO_COMPRA: TcxGridDBColumn; cxGridViewIMPORTE_NETO_PROMEDIO_COMPRA: TcxGridDBColumn; cxGridViewIMPORTE_PORTE_PROMEDIO_COMPRA: TcxGridDBColumn; cxGridViewIMPORTE_MARGEN_COSTE: TcxGridDBColumn; cxGridViewPORCENTAJE_MARGEN_COSTE: TcxGridDBColumn; cxGridViewIMPORTE_MARGEN_ULT_COMPRA: TcxGridDBColumn; cxGridViewPORCENTAJE_MARGEN_ULT_COMPRA: TcxGridDBColumn; cxGridViewIMPORTE_MARGEN_PROM_COMPRA: TcxGridDBColumn; cxGridViewPORCENTAJE_MARGEN_PROM_COMPRA: TcxGridDBColumn; procedure cxGridViewStylesGetContentStyle( Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem; out AStyle: TcxStyle); procedure cxGridViewColumnPosChanged(Sender: TcxGridTableView; AColumn: TcxGridColumn); procedure cxGridViewColumnSizeChanged(Sender: TcxGridTableView; AColumn: TcxGridColumn); procedure cxGridViewDataControllerGroupingChanged(Sender: TObject); procedure cxGridViewDataControllerSortingChanged(Sender: TObject); procedure cxGridViewDataControllerSummaryAfterSummary( ASender: TcxDataSummary); // procedure cxGridViewCENTROPropertiesInitPopup(Sender: TObject); // procedure cxGridViewVENDEDORPropertiesInitPopup(Sender: TObject); // procedure cxGridViewPRODUCTOPropertiesInitPopup(Sender: TObject); procedure cxGridViewDataControllerFilterChanged(Sender: TObject); // procedure cxGridViewDIASEMANAPropertiesInitPopup(Sender: TObject); // procedure cxGridViewMESPropertiesInitPopup(Sender: TObject); // procedure cxGridViewGRUPOPRODUCTOPropertiesInitPopup(Sender: TObject); // procedure cxGridViewTIPOPRODUCTOPropertiesInitPopup(Sender: TObject); // procedure cxGridViewCOLECCIONPropertiesInitPopup(Sender: TObject); procedure cxGridViewDataControllerCompare( ADataController: TcxCustomDataController; ARecordIndex1, ARecordIndex2, AItemIndex: Integer; const V1, V2: Variant; var Compare: Integer); protected procedure ActivarEventos; override; procedure DesactivarEventos; override; function GetFocusedView : TcxGridDBTableView; override; public procedure Refresh; override; constructor Create(AOwner: TComponent); override; end; implementation uses cxVariants, uDateUtils; {$R *.dfm} { TfrInfMargenArticuloGrid } function TfrViewInfMargenArticuloGrid.GetFocusedView: TcxGridDBTableView; begin Result := cxGridView; end; procedure TfrViewInfMargenArticuloGrid.Refresh; var FocusedRow, TopRow : Integer; begin inherited; { Refrescar las filas del grid a partir del dataset y colocar la fila seleccionada donde estaba } if FocusedView.DataController.DataSource.DataSet.State = dsBrowse then begin TopRow := FocusedView.Controller.TopRowIndex; FocusedRow := FocusedView.DataController.FocusedRowIndex; FocusedView.DataController.UpdateItems(False); // <- Refresco FocusedView.DataController.FocusedRowIndex := FocusedRow; FocusedView.Controller.TopRowIndex := TopRow; { Esta chapuzilla es para que se rellenen los combobox de los filtros por que el cxFilterControl no coge los valores la 1ª vez si los combos están vacíos. } { TcxComboBoxProperties(cxGridViewPRODUCTO.Properties).OnInitPopup(nil); TcxComboBoxProperties(cxGridViewCENTRO.Properties).OnInitPopup(nil); TcxComboBoxProperties(cxGridViewVENDEDOR.Properties).OnInitPopup(nil); TcxComboBoxProperties(cxGridViewDIASEMANA.Properties).OnInitPopup(nil); TcxComboBoxProperties(cxGridViewMES.Properties).OnInitPopup(nil); TcxComboBoxProperties(cxGridViewGRUPOPRODUCTO.Properties).OnInitPopup(nil); TcxComboBoxProperties(cxGridViewTIPOPRODUCTO.Properties).OnInitPopup(nil); TcxComboBoxProperties(cxGridViewCOLECCION.Properties).OnInitPopup(nil); } end; end; procedure TfrViewInfMargenArticuloGrid.cxGridViewStylesGetContentStyle( Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem; out AStyle: TcxStyle); var AColumn : TcxGridDBColumn; AFecha : TDateTime; begin inherited; // La fila es la cabecera de un grupo { if ARecord.Expandable then Exit; AColumn := FocusedView.GetColumnByFieldName('FECHA'); if Assigned(AColumn) and (AColumn.Visible) then begin try AFecha := VarToDateTime(ARecord.Values[AColumn.Index]); except on Exception do ShowMessage(VarToStr(ARecord.Values[AColumn.Index])); end; if DaysBetween(Now, AFecha) > 14 then AStyle := cxStyleRed else if DaysBetween(Now, AFecha) > 7 then AStyle := cxStyleBlue end; } end; procedure TfrViewInfMargenArticuloGrid.cxGridViewColumnPosChanged( Sender: TcxGridTableView; AColumn: TcxGridColumn); begin inherited; if Assigned(FOnViewChanged) then FOnViewChanged(Self); end; procedure TfrViewInfMargenArticuloGrid.cxGridViewColumnSizeChanged( Sender: TcxGridTableView; AColumn: TcxGridColumn); begin inherited; if Assigned(FOnViewChanged) then FOnViewChanged(Self); end; procedure TfrViewInfMargenArticuloGrid.cxGridViewDataControllerGroupingChanged( Sender: TObject); begin inherited; if Assigned(FOnViewChanged) then FOnViewChanged(Self); end; procedure TfrViewInfMargenArticuloGrid.cxGridViewDataControllerSortingChanged( Sender: TObject); begin inherited; if Assigned(FOnViewChanged) then FOnViewChanged(Self); end; procedure TfrViewInfMargenArticuloGrid.cxGridViewDataControllerSummaryAfterSummary( ASender: TcxDataSummary); begin inherited; if Assigned(FOnViewChanged) then FOnViewChanged(Self); end; { procedure TfrViewInfMargenArticuloGrid.cxGridViewCENTROPropertiesInitPopup( Sender: TObject); begin inherited; with TcxComboBoxProperties(cxGridViewCENTRO.Properties) do begin Items.Clear; Items.AddStrings(FilterValueList[cxGridViewCENTRO.Index]); Items.Delete(1); // "Personalizado" Items.Delete(0); // "Todos" end; end; procedure TfrViewInfMargenArticuloGrid.cxGridViewVENDEDORPropertiesInitPopup( Sender: TObject); begin inherited; with TcxComboBoxProperties(cxGridViewVENDEDOR.Properties) do begin Items.Clear; Items.AddStrings(FilterValueList[cxGridViewVENDEDOR.Index]); Items.Delete(1); // "Personalizado" Items.Delete(0); // "Todos" end; end; procedure TfrViewInfMargenArticuloGrid.cxGridViewPRODUCTOPropertiesInitPopup( Sender: TObject); begin inherited; with TcxComboBoxProperties(cxGridViewPRODUCTO.Properties) do begin Items.Clear; Items.AddStrings(FilterValueList[cxGridViewPRODUCTO.Index]); Items.Delete(1); // "Personalizado" Items.Delete(0); // "Todos" end; end; } procedure TfrViewInfMargenArticuloGrid.cxGridViewDataControllerFilterChanged( Sender: TObject); begin if Assigned(FOnFilterChanged) then FOnFilterChanged(Self); end; constructor TfrViewInfMargenArticuloGrid.Create(AOwner: TComponent); begin inherited; end; procedure TfrViewInfMargenArticuloGrid.ActivarEventos; begin inherited; with cxGridView do begin DataController.Filter.OnChanged := cxGridViewDataControllerFilterChanged; DataController.Summary.OnAfterSummary := cxGridViewDataControllerSummaryAfterSummary; DataController.OnGroupingChanged := cxGridViewDataControllerGroupingChanged; DataController.OnSortingChanged := cxGridViewDataControllerSortingChanged; OnColumnPosChanged := cxGridViewColumnPosChanged; OnColumnSizeChanged := cxGridViewColumnSizeChanged; end; end; procedure TfrViewInfMargenArticuloGrid.DesactivarEventos; begin inherited; with cxGridView do begin DataController.Filter.OnChanged := nil; DataController.Summary.OnAfterSummary := nil; DataController.OnGroupingChanged := nil; DataController.OnSortingChanged := nil; OnColumnPosChanged := nil; OnColumnSizeChanged := nil; end; end; { procedure TfrViewInfMargenArticuloGrid.cxGridViewDIASEMANAPropertiesInitPopup( Sender: TObject); begin inherited; with TcxComboBoxProperties(cxGridViewDIASEMANA.Properties) do begin Items.Clear; Items.AddStrings(FilterValueList[cxGridViewDIASEMANA.Index]); Items.Delete(1); // "Personalizado" Items.Delete(0); // "Todos" end; end; } { procedure TfrViewInfMargenArticuloGrid.cxGridViewMESPropertiesInitPopup( Sender: TObject); begin inherited; with TcxComboBoxProperties(cxGridViewMES.Properties) do begin Items.Clear; Items.AddStrings(FilterValueList[cxGridViewMES.Index]); Items.Delete(1); // "Personalizado" Items.Delete(0); // "Todos" end; end; procedure TfrViewInfMargenArticuloGrid.cxGridViewGRUPOPRODUCTOPropertiesInitPopup( Sender: TObject); begin inherited; with TcxComboBoxProperties(cxGridViewGRUPOPRODUCTO.Properties) do begin Items.Clear; Items.AddStrings(FilterValueList[cxGridViewGRUPOPRODUCTO.Index]); Items.Delete(1); // "Personalizado" Items.Delete(0); // "Todos" end; end; procedure TfrViewInfMargenArticuloGrid.cxGridViewTIPOPRODUCTOPropertiesInitPopup( Sender: TObject); begin inherited; with TcxComboBoxProperties(cxGridViewTIPOPRODUCTO.Properties) do begin Items.Clear; Items.AddStrings(FilterValueList[cxGridViewTIPOPRODUCTO.Index]); Items.Delete(1); // "Personalizado" Items.Delete(0); // "Todos" end; end; procedure TfrViewInfMargenArticuloGrid.cxGridViewCOLECCIONPropertiesInitPopup( Sender: TObject); begin inherited; with TcxComboBoxProperties(cxGridViewCOLECCION.Properties) do begin Items.Clear; Items.AddStrings(FilterValueList[cxGridViewCOLECCION.Index]); Items.Delete(1); // "Personalizado" Items.Delete(0); // "Todos" end; end; } procedure TfrViewInfMargenArticuloGrid.cxGridViewDataControllerCompare( ADataController: TcxCustomDataController; ARecordIndex1, ARecordIndex2, AItemIndex: Integer; const V1, V2: Variant; var Compare: Integer); var AValue1, AValue2 : Variant; begin // Por defecto { Compare := VarCompare(V1, V2); try if (AItemIndex = cxGridViewDIASEMANA.Index) then begin AValue1 := ADataController.Values[ARecordIndex1, cxGridViewDIASEMANA.Index]; AValue2 := ADataController.Values[ARecordIndex2, cxGridViewDIASEMANA.Index]; if (not VarIsNull(AValue1)) and (not VarIsNull(AValue2)) then Compare := VarCompare(NumberDayOfTheWeek(AValue1), NumberDayOfTheWeek(AValue2)) end else begin if (AItemIndex = cxGridViewMES.Index) then begin AValue1 := ADataController.Values[ARecordIndex1, cxGridViewMES.Index]; AValue2 := ADataController.Values[ARecordIndex2, cxGridViewMES.Index]; if (not VarIsNull(AValue1)) and (not VarIsNull(AValue2)) then Compare := VarCompare(NumberMonthOfTheYear(AValue1), NumberMonthOfTheYear(AValue2)) end end; except //ShowMessage(VarToStr(ARecordIndex1) + ' ' + VarToStr(ARecordIndex1)); end; } end; end.