unit uBizAlbaranClienteServer; interface uses uDAInterfaces, uDADelta, uDABusinessProcessor, schAlbaranesClienteServer_Intf; const BIZ_SERVER_ALBARAN_CLIENTE = 'Server.AlbaranCliente'; REF_ALBARANES_CLIENTE = 'REF_ALBARANES_CLIENTE'; REF_ALBARANES_DEV_CLIENTE = 'REF_ALBARANES_DEV_CLIENTE'; type TBizAlbaranClienteServer = class(TAlbaranesClienteBusinessProcessorRules) protected procedure BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); override; end; implementation uses Variants, uDAClasses, uReferenciasUtils, uBusinessUtils, uROClasses, uDataModuleServer, schAlbaranesClienteClient_Intf; { TBizAlbaranClienteServer } procedure TBizAlbaranClienteServer.BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); var ASchema : TDASchema; ACurrentConn : IDAConnection; dsData: IDADataset; Empresa : Variant; CodigoReferencia: String; begin inherited; case Sender.CurrentChange.ChangeType of ctInsert, ctUpdate: begin //Si la referencia no ha sido asignada le asignamos una nosotros if (VarIsNull(Sender.CurrentChange.NewValueByName[fld_AlbaranesClienteREFERENCIA])) or (VarToStr(Sender.CurrentChange.NewValueByName[fld_AlbaranesClienteREFERENCIA]) = '') then begin ASchema := BusinessProcessor.Schema; ACurrentConn := GetBusinessProcessorConnection(BusinessProcessor); try //Siempre va a estar rellena Empresa := Sender.CurrentChange.NewValueByName[fld_AlbaranesClienteID_EMPRESA]; if (Sender.CurrentChange.NewValueByName[fld_AlbaranesClienteIMPORTE_TOTAL] < 0) then CodigoReferencia := REF_ALBARANES_DEV_CLIENTE else CodigoReferencia := REF_ALBARANES_CLIENTE; dsData := ASchema.NewDataset(ACurrentConn, 'DarReferencia', ['CODIGO', 'EMPRESA'], [CodigoReferencia, Empresa]); except RaiseError('No existe la tabla REFERENCIAS'); end; dsData.Active := True; if dsData.IsEmpty then RaiseError('NO HAY REFERENCIA ' + CodigoReferencia + ' DECLARADA EN TABLA REFERENCIAS'); REFERENCIA := dsData.FieldByName(fld_DarReferenciaVALOR).AsString; try ASchema.NewCommand(ACurrentConn, 'ModificarReferencia', ['CODIGO', 'VALOR', 'EMPRESA'], [CodigoReferencia, DarReferenciaSiguiente(REFERENCIA), Empresa]); except RaiseError('Error al asignar la nueva ' + REFERENCIA + ' referencia en tabla'); end; end; end; end; end; initialization RegisterBusinessProcessorRules(BIZ_SERVER_ALBARAN_CLIENTE, TBizAlbaranClienteServer); end.