unit uDataModuleInfMargenArticulo; interface uses {vcl:} SysUtils, Classes, DB, DBClient, {RemObjects:} uDADataTable, uDABINAdapter, uRORemoteService, uROClient, uROBinMessage, uROWinInetHttpChannel, uDAScriptingProvider, uDACDSDataTable, uBizInfMargenArticulo, uIDataModuleInfMargenArticulo, uDADesigntimeCall, uDataModuleBase, uDARemoteDataAdapter, uDADataStreamer, uDABin2DataStreamer, uDAInterfaces, uDAMemDataTable, uRODynamicRequest, JvComponentBase, JvLogFile; //uBizControlVentasTerminadas, //const // CATEGORIA_VENTA_TERMINADA = 'VENTATERMINADA'; type TdmInfMargenArticulo = class(TDataModuleBase, IDataModuleInfMargenArticulo) RORemoteService: TRORemoteService; DADesigntimeCall1: TDADesigntimeCall; LoginRemoteService: TRORemoteService; ROWinInetHTTPChannel1: TROWinInetHTTPChannel; ROBinMessage1: TROBinMessage; tbl_InfMargen: TDAMemDataTable; tbl_InfMargenPorArticulo1: TDAMemDataTable; ds_InfMargenPorArticulo1: TDADataSource; tbl_InfMargenPorCliente1: TDAMemDataTable; ds_InfMargenPorCliente1: TDADataSource; tbl_InfMargenPorFactura1: TDAMemDataTable; ds_InfMargenPorFactura1: TDADataSource; Bin2DataStreamer: TDABin2DataStreamer; rda_InfMargenPorArticulo: TDARemoteDataAdapter; rda_InfMargenPorCliente: TDARemoteDataAdapter; rda_InfMargenPorFactura: TDARemoteDataAdapter; rda_TablaVacia: TDARemoteDataAdapter; tbl_TablaVacia: TDAMemDataTable; ds_TablaVacia: TDADataSource; JvLogFile1: TJvLogFile; procedure DAClientDataModuleCreate(Sender: TObject); private procedure InitRDA(var aDataTable: TDAMemDataTable; const SQLFROM: AnsiString; const AWhere: String; Agrupado: TEnumAgrupaciones; aIncludeSchema: Boolean; AMaxRecords: integer); public function GetItems(const AColumns: String; const AWhere: String; Agrupado: TEnumAgrupaciones) : IBizInfMargenArticulo; function GetNameColumns(Agrupado: TEnumAgrupaciones): String; end; var dmInfMargenArticulo: TdmInfMargenArticulo; implementation {$R *.DFM} uses Controls, Forms, uDataTableUtils, uROTypes, Dialogs, uDataModuleConexion, uFactuGES_App, cxControls, FactuGES_Intf, StrUtils, udmBase, schInfMargenArticuloClient_Intf; //, uEditorPreview, uDataModuleControles, uDBSelectionList, const CAMPOS_AVG1 = '#IMP_NETO_ULT_VENT#IMP_NETO_PRO_VENT#IMP_PORTE_PRO_VENT#IMP_NETO_COMPRA#IMP_NETO_ULT_COMP#IMP_NETO_PRO_COMP#IMP_UNIDAD_PRO_COMP#IMP_PORTE_PRO_COMP#IMP_MARGEN_ULT_VENT_COMPRA#POR_MARGEN_ULT_VENT_COMPRA#IMP_MARGEN_ULT_VENT_ULT_COMP#'; CAMPOS_AVG2 = '#POR_MARGEN_ULT_VENT_ULT_COMP#IMP_MARGEN_ULT_VENT_PRO_COMP#POR_MARGEN_ULT_VENT_PRO_COMP#IMP_MARGEN_PRO_VENT_COMPRA#POR_MARGEN_PRO_VENT_COMPRA#IMP_MARGEN_PRO_VENT_ULT_COMP#POR_MARGEN_PRO_VENT_ULT_COMP#IMP_MARGEN_PRO_VENT_PRO_COMP#'; CAMPOS_AVG3 = '#POR_MARGEN_PRO_VENT_PRO_COMP#IMP_UNIDAD_PRO_VENT#'; //SOLO PARA INFORME AGRUPADO POR FACTURA PARA SACAR BENEFICIO REAL CTE_DATA_NAME = 'InfMargenPorFactura'; CAMPOS_SUMA = '#CANTIDAD#IMP_UNIDAD#IMP_NETO#IMP_PORTE#IMP_TOTAL#IMP_NETO_ULT_COM_TOTAL#IMP_NETO_PRO_COM_TOTAL#IMP_MARGEN_ULT_COMP_TOTAL#IMP_MARGEN_PRO_COMP_TOTAL#'; procedure TdmInfMargenArticulo.DAClientDataModuleCreate(Sender: TObject); begin RORemoteService.Channel := dmConexion.Channel; RORemoteService.Message := dmConexion.Message; end; function TdmInfMargenArticulo.GetItems(const AColumns: String; const AWhere: String; Agrupado: TEnumAgrupaciones): IBizInfMargenArticulo; var AInfMargenArticulo : TDAMemDataTable; ASQL: AnsiString; begin ShowHourglassCursor; try AInfMargenArticulo := CloneDataTable(tbl_TablaVacia); AInfMargenArticulo.BusinessRulesID := BIZ_InfMargenArticulo; (AInfMargenArticulo as IBizInfMargenArticulo).VisibleColumns := AColumns; Case Agrupado of tCliente: begin AInfMargenArticulo.LogicalName := 'InfMargenPorCliente'; ASQL := (RORemoteService as IsrvInfMargenArticulo).GetSQLFROM('InfMargenPorCliente'); end; tArticulo:begin AInfMargenArticulo.LogicalName := 'InfMargenPorArticulo'; ASQL := (RORemoteService as IsrvInfMargenArticulo).GetSQLFROM('InfMargenPorArticulo'); end; tFactura: begin AInfMargenArticulo.LogicalName := 'InfMargenPorFactura'; ASQL := (RORemoteService as IsrvInfMargenArticulo).GetSQLFROM('InfMargenPorFactura'); end; End; InitRDA(AInfMargenArticulo, ASQL, Awhere, Agrupado, True, 0); AInfMargenArticulo.Close; Result := (AInfMargenArticulo as IBizInfMargenArticulo); finally HideHourglassCursor; end; { ShowHourglassCursor; try Case Agrupado of tCliente: begin tbl_InfMargen.LogicalName := 'InfMargenPorCliente'; tbl_InfMargen.SchemaCall.ParamByName('DatasetName').AsString := 'InfMargenPorCliente'; tbl_InfMargen.DataRequestCall.ParamByName('DatasetName').AsString := 'InfMargenPorCliente'; end; tArticulo:begin tbl_InfMargen.LogicalName := 'InfMargenPorArticulo'; tbl_InfMargen.SchemaCall.ParamByName('DatasetName').AsString := 'InfMargenPorArticulo'; tbl_InfMargen.DataRequestCall.ParamByName('DatasetName').AsString := 'InfMargenPorArticulo'; end; tFactura: begin tbl_InfMargen.LogicalName := 'InfMargenPorFactura'; tbl_InfMargen.SchemaCall.ParamByName('DatasetName').AsString := 'InfMargenPorFactura'; tbl_InfMargen.DataRequestCall.ParamByName('DatasetName').AsString := 'InfMargenPorFactura'; end; End; } // AInfMargenArticulo := _CloneDataTable(tbl_InfMargen); // AInfMargenArticulo.Fields.AssignFieldCollection(tbl_InfMargenPorCliente1.Fields); //Siempre por cliente // AInfMargenArticulo.BusinessRulesID := BIZ_InfMargenArticulo; // AInfMargenArticulo.LoadSchema; // Result := (AInfMargenArticulo as IBizInfMargenArticulo); // finally // HideHourglassCursor; // end; end; function TdmInfMargenArticulo.GetNameColumns(Agrupado: TEnumAgrupaciones): String; var AList : TStringList; i : integer; begin AList := TStringList.Create; try case Agrupado of tCliente: begin for i := 0 to tbl_InfMargenPorCliente1.FieldCount - 1 do if tbl_InfMargenPorCliente1.Fields[i].Visible then AList.Add(tbl_InfMargenPorCliente1.Fields[i].Name); end; tArticulo:begin for i := 0 to tbl_InfMargenPorArticulo1.FieldCount - 1 do if tbl_InfMargenPorArticulo1.Fields[i].Visible then AList.Add(tbl_InfMargenPorArticulo1.Fields[i].Name); end; tFactura: begin for i := 0 to tbl_InfMargenPorFactura1.FieldCount - 1 do if tbl_InfMargenPorFactura1.Fields[i].Visible then AList.Add(tbl_InfMargenPorFactura1.Fields[i].Name); end; end; Result := AList.CommaText; finally FreeAndNil(AList); end; end; procedure TdmInfMargenArticulo.InitRDA(var aDataTable: TDAMemDataTable; const SQLFROM: AnsiString; const AWhere: String; Agrupado: TEnumAgrupaciones; aIncludeSchema: Boolean; AMaxRecords: integer); var ASql: String; begin with tbl_TablaVacia do begin Close; with TReplicarDataSet.Create do begin FROM_SQL := 'FROM (' + ReplaceStr(SQLFROM,':FECHAINI AND :FECHAFIN', AWhere) + ') ' + 'where (' + fld_InfMargenPorClienteID_EMPRESA + ' = ' + IntToStr(AppFactuGES.EmpresaActiva.ID) + ')'; Columnas := (aDataTable as IBizInfMargenArticulo).VisibleColumns; if aDataTable.LogicalName = CTE_DATA_NAME then ColumnasQueSuman := CAMPOS_SUMA else ColumnasQueSuman := ''; ColumnasQueAVG := CAMPOS_AVG1 + CAMPOS_AVG2 + CAMPOS_AVG3; try ASql := GenerateNewSQL; dmBase.EscribirLog(ASql); finally Free; end; end; rda_TablaVacia.GetDataCall.ParamByName('aSQLText').AsString := ASql; MaxRecords := AMaxRecords; rda_TablaVacia.Fill([tbl_TablaVacia], true, aIncludeSchema); end; end; end.