diff --git a/Build/Build.fbl6 b/Build/Build.fbl6 index d007439..8c47d04 100644 Binary files a/Build/Build.fbl6 and b/Build/Build.fbl6 differ diff --git a/Build/Installer.fbl6 b/Build/Installer.fbl6 index 82feceb..95dd281 100644 Binary files a/Build/Installer.fbl6 and b/Build/Installer.fbl6 differ diff --git a/Database/scripts/factuges.sql b/Database/scripts/factuges.sql index e67f7ac..1532942 100644 --- a/Database/scripts/factuges.sql +++ b/Database/scripts/factuges.sql @@ -3293,10 +3293,7 @@ SELECT ID_ALMACEN, ID_ARTICULO, 0 as STOCK, 0 as PENDIENTES, CANTIDAD AS RESERVA FROM V_INV_RESERVAS ; - - -/* View: V_INVENTARIO */ -CREATE VIEW V_INVENTARIO( +CREATE VIEW V_INVENTARIO_SIN_COLORES( ID_ALMACEN, ID_EMPRESA, TIPO_ALMACEN, @@ -3372,6 +3369,65 @@ HAVING ((SUM(STOCK) <> 0 ) OR (SUM(RESERVA) <> 0) OR (SUM(PENDIENTE_RECEPCION) < ; +CREATE VIEW V_INVENTARIO( + ID_ALMACEN, + ID_EMPRESA, + TIPO_ALMACEN, + NOMBRE, + ID_ARTICULO, + REFERENCIA, + FAMILIA, + DESCRIPCION, + REFERENCIA_FAB, + UNIDAD_MEDIDA, + CAMPOTECNICO, + CODIGOTECNICO, + DISENOTECNICO, + COLOR1, + COLOR2, + COLOR3, + COLOR4, + COLOR5, + COLOR6, + COLOR7, + COLOR8, + COLOR9, + COLOR10, + COLOR11, + COLOR12, + STOCK, + UNIDADES_ALMACEN, + RESERVA, + PENDIENTE_RECEPCION) +AS +SELECT + v_inventario_sin_colores.ID_ALMACEN, v_inventario_sin_colores.ID_EMPRESA, + v_inventario_sin_colores.TIPO_ALMACEN, v_inventario_sin_colores.NOMBRE as ALMACEN, + v_inventario_sin_colores.ID_ARTICULO, v_inventario_sin_colores.REFERENCIA, + v_inventario_sin_colores.FAMILIA, v_inventario_sin_colores.DESCRIPCION, + v_inventario_sin_colores.REFERENCIA_FAB, v_inventario_sin_colores.UNIDAD_MEDIDA, + v_inventario_sin_colores.CAMPOTECNICO, v_inventario_sin_colores.CODIGOTECNICO, + v_inventario_sin_colores.DISENOTECNICO, + +/* REFERENCIA_PROV as REFERENCIA_PROVEEDOR, PRECIO_NETO, COSTE_UNIDADES, SE ELIMINAN LOS PRECIOS CON HASTA SABER QUE DECISIONES SE TOMAN*/ + + V_INV_STOCK_COLOR.COLOR1, V_INV_STOCK_COLOR.COLOR2, + V_INV_STOCK_COLOR.COLOR3, V_INV_STOCK_COLOR.COLOR4, + V_INV_STOCK_COLOR.COLOR5, V_INV_STOCK_COLOR.COLOR6, + V_INV_STOCK_COLOR.COLOR7, V_INV_STOCK_COLOR.COLOR8, + V_INV_STOCK_COLOR.COLOR9, V_INV_STOCK_COLOR.COLOR10, + V_INV_STOCK_COLOR.COLOR11, V_INV_STOCK_COLOR.COLOR12, + + v_inventario_sin_colores.STOCK, v_inventario_sin_colores.UNIDADES_ALMACEN, + v_inventario_sin_colores.RESERVA, v_inventario_sin_colores.PENDIENTE_RECEPCION + + +FROM v_inventario_sin_colores +LEFT JOIN V_INV_STOCK_COLOR ON ((V_INV_STOCK_COLOR.ID_ALMACEN = v_inventario_sin_colores.id_almacen) and (V_INV_STOCK_COLOR.ID_ARTICULO = v_inventario_sin_colores.ID_ARTICULO)) +ORDER BY v_inventario_sin_colores.ID_ARTICULO +; + + /* View: V_OBRAS */ CREATE VIEW V_OBRAS( ID, @@ -4610,6 +4666,7 @@ ALTER TABLE COMISIONES_LIQUIDADAS ADD CONSTRAINT FK_COMISIONES_LIQUIDADAS FOREIG ALTER TABLE EMPRESAS_CONTACTOS ADD CONSTRAINT FK_EMPRESAS_CONTACTOS FOREIGN KEY (ID_CONTACTO) REFERENCES CONTACTOS (ID) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE EMPRESAS_DATOS_BANCO ADD CONSTRAINT FK_EMPRESAS_DATOS_BANCO FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE FACTURAS_CLIENTE ADD CONSTRAINT FK_FACTURAS_CLIENTE_EMPRESAS FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION; +ALTER TABLE FACTURAS_CLIENTE ADD CONSTRAINT FK_FACTURAS_CLIENTE_COMISION FOREIGN KEY (ID_COMISION_LIQUIDADA) REFERENCES COMISIONES_LIQUIDADAS (ID) ON DELETE SET NULL ON UPDATE CASCADE; ALTER TABLE FACTURAS_PROVEEDOR ADD CONSTRAINT FK_FACTURAS_PROVEEDOR_EMPRESAS FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE MOVIMIENTOS ADD CONSTRAINT FK_MOVIMIENTOS2 FOREIGN KEY (ID_ALMACEN) REFERENCES ALMACENES (ID); ALTER TABLE OBRAS_EJECUCIONES_PRESUPUESTOS ADD CONSTRAINT FK_OBRAS_EJE_PRE_1 FOREIGN KEY (ID_EJECUCION) REFERENCES OBRAS_EJECUCIONES (ID); diff --git a/Source/Base/Base.dproj b/Source/Base/Base.dproj index 7c12c06..990c17d 100644 --- a/Source/Base/Base.dproj +++ b/Source/Base/Base.dproj @@ -53,58 +53,58 @@ MainSource - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
fConfigurarConexion
TForm diff --git a/Source/Base/Conexion/uDataModuleConexion.dfm b/Source/Base/Conexion/uDataModuleConexion.dfm index ca2f230..44eda72 100644 --- a/Source/Base/Conexion/uDataModuleConexion.dfm +++ b/Source/Base/Conexion/uDataModuleConexion.dfm @@ -12,9 +12,8 @@ object dmConexion: TdmConexion object ROChannel: TROWinInetHTTPChannel UserAgent = 'RemObjects SDK' TargetURL = 'http://localhost:8099/bin' - TrustInvalidCA = False - DispatchOptions = [] ServerLocators = <> + DispatchOptions = [] Left = 40 Top = 24 end diff --git a/Source/Cliente/FactuGES.dproj b/Source/Cliente/FactuGES.dproj index 74c08cb..556af98 100644 --- a/Source/Cliente/FactuGES.dproj +++ b/Source/Cliente/FactuGES.dproj @@ -54,7 +54,7 @@ Delphi.Personality VCLApplication -FalseTrueFalseC:\Archivos de programa\Borland\Delphi7\Bin\TrueFalse1040FalseFalseFalseFalseFalse30821252Rodax Software S.L.1.0.4.0FactuGESFactuGES1.0.4.0FactuGES.dprFalse +FalseTrueFalseC:\Archivos de programa\Borland\Delphi7\Bin\TrueFalse1060FalseFalseFalseFalseFalse30821252Rodax Software S.L.1.0.6.0FactuGESFactuGES1.0.6.0FactuGES.dprFalse diff --git a/Source/Cliente/FactuGES.rc b/Source/Cliente/FactuGES.rc index eb15980..30ec531 100644 --- a/Source/Cliente/FactuGES.rc +++ b/Source/Cliente/FactuGES.rc @@ -1,7 +1,7 @@ MAINICON ICON "C:\Codigo noviseda\Resources\Iconos\Factuges.ico" 1 VERSIONINFO -FILEVERSION 1,0,4,0 -PRODUCTVERSION 1,0,4,0 +FILEVERSION 1,0,6,0 +PRODUCTVERSION 1,0,6,0 FILEFLAGSMASK 0x3FL FILEFLAGS 0x00L FILEOS 0x40004L @@ -13,10 +13,10 @@ BEGIN BLOCK "0C0A04E4" BEGIN VALUE "CompanyName", "Rodax Software S.L.\0" - VALUE "FileVersion", "1.0.4.0\0" + VALUE "FileVersion", "1.0.6.0\0" VALUE "InternalName", "FactuGES\0" VALUE "ProductName", "FactuGES\0" - VALUE "ProductVersion", "1.0.4.0\0" + VALUE "ProductVersion", "1.0.6.0\0" END END BLOCK "VarFileInfo" diff --git a/Source/Cliente/FactuGES.res b/Source/Cliente/FactuGES.res index b93898c..c47d556 100644 Binary files a/Source/Cliente/FactuGES.res and b/Source/Cliente/FactuGES.res differ diff --git a/Source/Cliente/uBootStrap.pas b/Source/Cliente/uBootStrap.pas index d9c9f48..acfe576 100644 --- a/Source/Cliente/uBootStrap.pas +++ b/Source/Cliente/uBootStrap.pas @@ -54,7 +54,7 @@ begin LoadModule('HistoricoMovimientos_plugin.bpl'); LoadModule(MODULENAME_COMISIONES); -// LoadModule('GestorInformes_plugin.bpl'); + LoadModule('GestorInformes_plugin.bpl'); end; end; diff --git a/Source/Informes/1/InfFacturaCliente.fr3 b/Source/Informes/1/InfFacturaCliente.fr3 index 967bcc4..2972caa 100644 --- a/Source/Informes/1/InfFacturaCliente.fr3 +++ b/Source/Informes/1/InfFacturaCliente.fr3 @@ -1,5 +1,5 @@ - + @@ -11,7 +11,7 @@ - + @@ -35,7 +35,7 @@ - + @@ -74,7 +74,7 @@ - + diff --git a/Source/Informes/1/InformeIVAClientes.fr3 b/Source/Informes/1/InformeIVAClientes.fr3 new file mode 100644 index 0000000..f5e55f0 --- /dev/null +++ b/Source/Informes/1/InformeIVAClientes.fr3 @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Informes/2/InfFacturaCliente.fr3 b/Source/Informes/2/InfFacturaCliente.fr3 index df77c2b..690211c 100644 --- a/Source/Informes/2/InfFacturaCliente.fr3 +++ b/Source/Informes/2/InfFacturaCliente.fr3 @@ -1,5 +1,5 @@ - + @@ -11,7 +11,7 @@ - + @@ -35,7 +35,7 @@ - + diff --git a/Source/Informes/2/InformeIVAClientes.fr3 b/Source/Informes/2/InformeIVAClientes.fr3 new file mode 100644 index 0000000..e2e1c34 --- /dev/null +++ b/Source/Informes/2/InformeIVAClientes.fr3 @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.dfm b/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.dfm index 70ddee5..27b7672 100644 --- a/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.dfm +++ b/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.dfm @@ -10,12 +10,12 @@ inherited DataModuleAlbaranesCliente: TDataModuleAlbaranesCliente Top = 16 end object rda_AlbaranesCliente: TDARemoteDataAdapter + DataStreamer = Bin2DataStreamer GetSchemaCall.RemoteService = RORemoteService GetDataCall.RemoteService = RORemoteService UpdateDataCall.RemoteService = RORemoteService GetScriptsCall.RemoteService = RORemoteService RemoteService = RORemoteService - DataStreamer = Bin2DataStreamer Left = 43 Top = 151 end diff --git a/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.pas b/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.pas index 052b45f..af2230e 100644 --- a/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.pas +++ b/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.pas @@ -9,8 +9,7 @@ uses uIDataModuleAlbaranesCliente, uBizAlbaranesCliente, uBizDetallesAlbaranCliente, uBizDetalleColoresAlbaranCliente, uIDataModuleAlbaranesClienteReport, uDataModuleBase, uDABin2DataStreamer, uDAMemDataTable, - uDAInterfaces, uDADataStreamer, uDARemoteDataAdapter, uIntegerListUtils, - uDADataAdapter; + uDAInterfaces, uDADataStreamer, uDARemoteDataAdapter, uIntegerListUtils; type TDataModuleAlbaranesCliente = class(TDataModuleBase, IDataModuleAlbaranesCliente, IDataModuleAlbaranesClienteReport) diff --git a/Source/Modulos/Albaranes de cliente/Views/uViewAlbaranesCliente.dfm b/Source/Modulos/Albaranes de cliente/Views/uViewAlbaranesCliente.dfm index bc3f6f5..1a9e876 100644 --- a/Source/Modulos/Albaranes de cliente/Views/uViewAlbaranesCliente.dfm +++ b/Source/Modulos/Albaranes de cliente/Views/uViewAlbaranesCliente.dfm @@ -9,8 +9,9 @@ inherited frViewAlbaranesCliente: TfrViewAlbaranesCliente Height = 399 RootLevelOptions.DetailTabsPosition = dtpTop OnActiveTabChanged = cxGridActiveTabChanged + ExplicitTop = 65 ExplicitWidth = 802 - ExplicitHeight = 362 + ExplicitHeight = 399 inherited cxGridView: TcxGridDBTableView DataController.KeyFieldNames = 'ID' DataController.Options = [dcoAnsiSort, dcoAssignMasterDetailKeys, dcoSaveExpanding, dcoSortByDisplayText, dcoGroupsAlwaysExpanded] @@ -88,9 +89,7 @@ inherited frViewAlbaranesCliente: TfrViewAlbaranesCliente end object cxGridViewREF_PEDIDO: TcxGridDBColumn DataBinding.FieldName = 'REF_PEDIDO' - Visible = False BestFitMaxWidth = 45 - VisibleForCustomization = False Width = 39 end object cxGridViewFECHA_PREVISTA_ENVIO: TcxGridDBColumn @@ -201,6 +200,7 @@ inherited frViewAlbaranesCliente: TfrViewAlbaranesCliente Width = 802 Height = 65 ExplicitWidth = 802 + ExplicitHeight = 65 inherited dxLayoutControl1: TdxLayoutControl Width = 802 ExplicitWidth = 802 diff --git a/Source/Modulos/Articulos/Data/uDataModuleArticulos.pas b/Source/Modulos/Articulos/Data/uDataModuleArticulos.pas index 8656a63..2cdfecc 100644 --- a/Source/Modulos/Articulos/Data/uDataModuleArticulos.pas +++ b/Source/Modulos/Articulos/Data/uDataModuleArticulos.pas @@ -9,7 +9,7 @@ uses uDADesigntimeCall, uIDataModuleArticulos, uBizArticulos, uDataModuleBase, uDARemoteDataAdapter, uDADataStreamer, uDABin2DataStreamer, uDAInterfaces, uDAMemDataTable, - uBizArticulosProveedores, uDADataAdapter; + uBizArticulosProveedores; type TDataModuleArticulos = class(TDataModuleBase, IDataModuleArticulos) diff --git a/Source/Modulos/Comisiones/Comisiones_Group.groupproj b/Source/Modulos/Comisiones/Comisiones_Group.groupproj index 98594fc..21ee540 100644 --- a/Source/Modulos/Comisiones/Comisiones_Group.groupproj +++ b/Source/Modulos/Comisiones/Comisiones_Group.groupproj @@ -14,6 +14,12 @@ + + + + + + @@ -89,6 +95,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -152,23 +203,32 @@ - - + + - - + + - - + + + + + + + + + + + - + - + - + \ No newline at end of file diff --git a/Source/Modulos/Comisiones/Controller/Comisiones_controller.dpk b/Source/Modulos/Comisiones/Controller/Comisiones_controller.dpk index 731a8ad..d93d7a3 100644 Binary files a/Source/Modulos/Comisiones/Controller/Comisiones_controller.dpk and b/Source/Modulos/Comisiones/Controller/Comisiones_controller.dpk differ diff --git a/Source/Modulos/Comisiones/Controller/Comisiones_controller.dproj b/Source/Modulos/Comisiones/Controller/Comisiones_controller.dproj index c47ea67..7c33343 100644 --- a/Source/Modulos/Comisiones/Controller/Comisiones_controller.dproj +++ b/Source/Modulos/Comisiones/Controller/Comisiones_controller.dproj @@ -50,6 +50,8 @@ + + diff --git a/Source/Modulos/Comisiones/Controller/uComisionesController.pas b/Source/Modulos/Comisiones/Controller/uComisionesController.pas index 63bb362..931b22b 100644 --- a/Source/Modulos/Comisiones/Controller/uComisionesController.pas +++ b/Source/Modulos/Comisiones/Controller/uComisionesController.pas @@ -34,7 +34,7 @@ type function EsModificable(AComision: IBizComision): Boolean; function EsEliminable(AComision: IBizComision): Boolean; -// function ElegirComisiones(AComisiones : IBizComision; AMensaje: String; AMultiSelect: Boolean): IBizComision; + function ElegirFacturasComision(AComision : IBizComision): Boolean; function ExtraerSeleccionados(AComisiones: IBizComision) : IBizComision; function DarListaAnosComisiones: TStringList; @@ -83,7 +83,7 @@ type function EsModificable(AComision: IBizComision): Boolean; function EsEliminable(AComision: IBizComision): Boolean; -// function ElegirFacturas(AComisions : IBizComision; AMensaje: String; AMultiSelect: Boolean): IBizComision; + function ElegirFacturasComision(AComision : IBizComision): Boolean; function ExtraerSeleccionados(AComisiones: IBizComision) : IBizComision; function DarListaAnosComisiones: TStringList; @@ -93,11 +93,11 @@ type implementation uses - Windows, Controls, cxControls, DB, uEditorRegistryUtils, schComisionesClient_Intf, + Dialogs, uDialogUtils, Windows, Controls, cxControls, DB, uEditorRegistryUtils, schComisionesClient_Intf, uBizContactos, uIEditorComisiones, uIEditorComision, uFactuGES_App, uDataModuleComisiones, uDataModuleUsuarios, uDAInterfaces, uDataTableUtils, uDateUtils, uNumUtils, - uROTypes, DateUtils, Forms, uIntegerListUtils, uSistemaFunc, uDialogElegirEMail, uEMailUtils, Dialogs, uStringsUtils, - uROXMLIntf; + uROTypes, DateUtils, Forms, uIntegerListUtils, uSistemaFunc, uDialogElegirEMail, uEMailUtils, uStringsUtils, + uROXMLIntf, uBizFacturasCliente, uFacturasClienteController; {procedure CopiarArticulosPedido(AOrigen: IBizDetallesPedidoCliente; @@ -502,8 +502,8 @@ begin AComision.DataTable.Post; //Tambien hacemos post de sus tablas hija -// if (AComision.FacturasComision.DataTable.State in dsEditModes) then -// AComision.FacturasComision.DataTable.Post; + if (AComision.FacturasComision.DataTable.State in dsEditModes) then + AComision.FacturasComision.DataTable.Post; if (AComision.ID_AGENTE < 0) or (AComision.ID_AGENTE = 0) then // No comprobar el objeto Cliente por que puede fallar la validación @@ -515,8 +515,8 @@ begin if (EsFechaVacia(AComision.FECHA)) then raise Exception.Create('Debe indicar la fecha de esta comision'); -// if (AComision.FacturasComision.DataTable.RecordCount = 0) then -// raise Exception.Create('La comisión debe tener al menos una factura en su contenido'); + if (AComision.FacturasComision.DataTable.RecordCount = 0) then + raise Exception.Create('La comisión debe tener al menos una factura en su contenido'); { Asegurarse de valores en campos "automáticos" tanto en MODIFICACIÓN como en INSERCIÓN. } @@ -633,12 +633,69 @@ begin end; } +function TComisionesController.ElegirFacturasComision(AComision: IBizComision): Boolean; +var + AFacturasClienteController: IFacturasClienteController; + AFacturasAgente : IBizFacturaCliente; + AFacturasSeleccionadas : IBizFacturaCliente; + Cadena: String; + +begin + Result := False; + + if (AComision.ID_AGENTE <> 0) then + begin + + if Assigned(AComision.FacturasComision) then + begin + with AComision.FacturasComision.DataTable do + begin + if not Active then Active := True; + First; + Cadena := ''; + While not Eof do + begin + if (Length(Cadena) > 0) then + Cadena := Cadena + ', '; + Cadena := Cadena + IntToStr(AComision.FacturasComision.ID); + Next; + end; + end; + end; + + AFacturasClienteController := TFacturasClienteController.Create; + AFacturasAgente := AFacturasClienteController.BuscarTodasPendientesComision(AComision.ID_AGENTE, AComision.ID, Cadena); + AFacturasSeleccionadas := (AFacturasClienteController.ElegirFacturas(AFacturasAgente, 'Elija uno o más facturas para incluirlos en esta liquidación de comisiones', True) as IBizFacturaCliente); + + if Assigned(AFacturasSeleccionadas) then + begin + ShowHourglassCursor; + try + //Copia las facturas seleccionadas de las facturas de la comision + DuplicarRegistros(AFacturasSeleccionadas.DataTable, AComision.FacturasComision.DataTable, mdrTodos, True, True, True); + Result := True; + finally + HideHourglassCursor; + end; + end; + + AFacturasClienteController := Nil; + AFacturasAgente := Nil; + AFacturasSeleccionadas := Nil; + end + else + ShowWarningMessage('Debe elegir primero el vendedor asociado a la liquidación'); +end; + function TComisionesController.Eliminar(AComision: IBizComision; AllItems: Boolean = false): Boolean; //En el caso de eliminar almenos un elemento del conjunto se devuelve true var bEliminado: Boolean; begin +//Importante revisar que existe la FK_FACTURAS_CLIENTE_COMISION ya que cuando se elimina la cabecera es lo que funciona +//no funciona el comando deletefacturascomision por business + bEliminado := False; if not Assigned(AComision) then diff --git a/Source/Modulos/Comisiones/Data/Comisiones_data.dproj b/Source/Modulos/Comisiones/Data/Comisiones_data.dproj index b7eebea..d867abb 100644 --- a/Source/Modulos/Comisiones/Data/Comisiones_data.dproj +++ b/Source/Modulos/Comisiones/Data/Comisiones_data.dproj @@ -31,74 +31,33 @@ Delphi.Personality Package - - False - True - False - - - False - False - False - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 3082 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - Comisiones_data.dpk - - +FalseTrueFalseFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0Comisiones_data.dpk MainSource - - - - - - - - - - - + + + + + + + + + + + + + + -
DataModuleVendedores
+
DataModuleComisiones
TDAClientDataModule
- - -
-