CREATE procedure [dbo].[cob_InsMovCod1V1] @IdMovimiento int, @idPersona int, @idTipoPersona int, @ObservacionPersona varchar(1000), @Observacion varchar(1000), @Fecha datetime, @FechaDocumento datetime, @Comprobante int, @idTipoCobro int, @idBanco int, @Referencia varchar(100), @Recibo varchar(100), @IdEstado int, @idUsuarioCreacion int, @FechaCreacion datetime, @idUsuarioActualizacion int, @FechaActualizacion datetime, @idFormaPago int, @idTipoComprobante int, @SaldoAnterior numeric(18,2), @IVAAnterior numeric(18,2), @ISRRetenidoAnterior numeric(18,2), @IVARetenidoAnterior numeric(18,2), @TotalAnterior numeric(18,2), @SaldoPeriodo numeric(18,2), @IVAPeriodo numeric(18,2), @ISRRetenidoPeriodo numeric(18,2), @IVARetenidoPeriodo numeric(18,2), @TotalPeriodo numeric(18,2), @Subtotal numeric(18,2), @IVA numeric(18,2), @ISRRetenido numeric(18,2), @IVARetenido numeric(18,2), @Total numeric(18,2), @idTransaccion int, @serie varchar(50), @Monto numeric(18,2), @xmlFile XML as --DECLARACION DE VARIABLES PARA EL CURSOR DECLARE @idEstadoCuenta int DECLARE @PorcentajeIVA numeric(18,2) DECLARE @PorcentajeRetencionISR numeric(18,2) DECLARE @PorcentajeRetencionIVA numeric(18,2) DECLARE @idPeriodoCobro int DECLARE @idConcepto int --VARIABLES PARA GUARDAR DETALLE DECLARE @SaldoSinImpuestosAnteriorAFAVOR NUMERIC(18,2) DECLARE @MONTOINICIAL NUMERIC(18,2) DECLARE @AbonoSinImpuestoAnterior NUMERIC(18,2) DECLARE @CARGO NUMERIC(18,2) DECLARE @MONTOBASE NUMERIC(18,2) DECLARE @SaldoSinImpuestosAnterior NUMERIC(18,2) DECLARE @SaldoConImpuestosAnterior NUMERIC(18,4) DECLARE @PorcentajePorCobrarDelMovimiento NUMERIC(18,4) DECLARE @AbonoSinImpuestosDelMovimiento NUMERIC(18,4) DECLARE @SaldoSinImpuestosDelMovimiento NUMERIC(18,4) DECLARE @CobradoSinImpuestosDelMovimiento NUMERIC(18,4) DECLARE @IVAPorCobrarAnterior NUMERIC(18,4) DECLARE @ISRRetenidoPorCobrarAnterior NUMERIC(18,4) DECLARE @IVARetenidoPorCobrarAnterior NUMERIC(18,2) DECLARE @IVACobrado NUMERIC(18,4) DECLARE @ISRRetenidoCobrado NUMERIC(18,2) DECLARE @IVARetenidoCobrado NUMERIC(18,2) DECLARE @IVAPorCobrar NUMERIC(18,4) DECLARE @ISRRetenidoPorCobrar NUMERIC(18,4) DECLARE @IVARetenidoPorCobrar NUMERIC(18,2) DECLARE @IVAPorCobrarDelMovimiento NUMERIC(18,4) DECLARE @ISRRetenidoPorCobrarDelMovimiento NUMERIC(18,4) DECLARE @IVARetenidoPorCobrarDelMovimiento NUMERIC(18,4) DECLARE @AbonoConImpuestosDelMovimiento NUMERIC(18,4) --DECLARACION TABLA DETALLE DECLARE @DETALLE TABLE( Respuesta bit, idEstadoCuenta int, idPeriodoCobro int, idConcepto int ) --AGREGAR INFORMACION A TABLA DETALLE INSERT INTO @DETALLE SELECT Cobros.Registro.value('Respuesta[1]/.','BIT'), Cobros.Registro.value('idEstadoCuenta[1]/.','INT'), Cobros.Registro.value('idPeriodoCobro[1]/.','INT'), Cobros.Registro.value('idConcepto[1]/.','INT') FROM @xmlFile.nodes('/Cobros/Registro') Cobros(Registro) --LIMPIAR VARIABLE XML SET @xmlFile='' --GUARDAR CABECERO INSERT INTO COB_MOVIMIENTO_COBRO( idPersona ,ObservacionPersona ,Observacion ,Fecha ,FechaDocumento ,Comprobante ,idTipoCobro ,idBanco ,Referencia ,Recibo ,IdEstado ,idUsuarioCreacion ,FechaCreacion ,idUsuarioActualizacion ,FechaActualizacion ,idFormaPago ,idTipoComprobante ,SaldoAnterior ,IVAAnterior ,ISRRetenidoAnterior ,IVARetenidoAnterior ,TotalAnterior ,SaldoPeriodo ,IVAPeriodo ,ISRRetenidoPeriodo ,IVARetenidoPeriodo ,TotalPeriodo ,Subtotal ,IVA ,ISRRetenido ,IVARetenido ,Total ,idTransaccion ) VALUES( @idPersona ,@ObservacionPersona ,@Observacion ,@Fecha ,@FechaDocumento ,@Comprobante ,@idTipoCobro ,@idBanco ,@Referencia ,@Recibo ,@IdEstado ,@idUsuarioCreacion ,@FechaCreacion ,@idUsuarioActualizacion ,@FechaActualizacion ,@idFormaPago ,@idTipoComprobante ,@SaldoAnterior ,@IVAAnterior ,@ISRRetenidoAnterior ,@IVARetenidoAnterior ,@TotalAnterior ,@SaldoPeriodo ,@IVAPeriodo ,@ISRRetenidoPeriodo ,@IVARetenidoPeriodo ,@TotalPeriodo ,@Subtotal ,@IVA ,@ISRRetenido ,@IVARetenido ,@Total ,@idTransaccion ) SET @idMovimiento=@@IDENTITY SELECT @SaldoSinImpuestosAnteriorAFAVOR=SaldoFavor FROM PLD_PERSONA WHERE idPersona=@IDPERSONA SET @Monto=@Monto+@SaldoSinImpuestosAnteriorAFAVOR SET @Monto=ROUND(@Monto,2) --CURSOR PARA AGREGAR EL DETALLE DE EL COBRO DECLARE CURSOR_DETALLE CURSOR FOR SELECT A.idEstadoCuenta, B.PorcentajeIVA, B.PorcentajeRetencionISR, B.PorcentajeRetencionIVA, A.idPeriodoCobro, A.idConcepto FROM @DETALLE A, COB_COD_CONCEPTO B WHERE B.idConcepto=A.idConcepto AND A.Respuesta=1 OPEN CURSOR_DETALLE FETCH NEXT FROM CURSOR_DETALLE INTO @idEstadoCuenta,@PorcentajeIVA,@PorcentajeRetencionISR, @PorcentajeRetencionIVA,@idPeriodoCobro,@idConcepto WHILE @@FETCH_STATUS=0 BEGIN --BEGIN WHILE SET @IVACobrado=0 SET @ISRRetenidoCobrado=0 SET @IVARetenidoCobrado=0 SET @IVAPorCobrarAnterior=0 SET @ISRRetenidoPorCobrarAnterior=0 SET @IVARetenidoPorCobrarAnterior=0 SET @IVAPorCobrar=0 SET @ISRRetenidoPorCobrar=0 SET @IVARetenidoPorCobrar=0 SET @IVAPorCobrarDelMovimiento=0 SET @ISRRetenidoPorCobrarDelMovimiento=0 SET @IVARetenidoPorCobrarDelMovimiento=0 SELECT @MONTOINICIAL=MontoInicial, @AbonoSinImpuestoAnterior=Abono, @CARGO=Cargo, @MONTOBASE=MontoBase, @SaldoSinImpuestosAnterior=Saldo FROM COB_ESTADO_CUENTA WHERE idEstadoCuenta=@idEstadoCuenta ORDER BY idPeriodoCobro --POR COBRAR Anterior SET @IVAPorCobrarAnterior=@SaldoSinImpuestosAnterior*(@PorcentajeIVA/100) SET @ISRRetenidoPorCobrarAnterior=@SaldoSinImpuestosAnterior*(@PorcentajeRetencionISR/100) SET @IVARetenidoPorCobrarAnterior=@SaldoSinImpuestosAnterior*(@PorcentajeRetencionIVA/100) SET @SaldoConImpuestosAnterior=@SaldoSinImpuestosAnterior+@IVAPorCobrarAnterior-@ISRRetenidoPorCobrarAnterior-@IVARetenidoPorCobrarAnterior IF @Monto>@SaldoConImpuestosAnterior BEGIN SET @AbonoConImpuestosDelMovimiento=@SaldoConImpuestosAnterior SET @Monto=@Monto-@SaldoConImpuestosAnterior END ELSE BEGIN SET @AbonoConImpuestosDelMovimiento=@Monto SET @Monto=0 END SET @PorcentajePorCobrarDelMovimiento= (@AbonoConImpuestosDelMovimiento/@SaldoConImpuestosAnterior)*100 SET @AbonoSinImpuestosDelMovimiento = (@PorcentajePorCobrarDelMovimiento/100)*@SaldoSinImpuestosAnterior SET @SaldoSinImpuestosDelMovimiento = @SaldoSinImpuestosAnterior -@AbonoSinImpuestosDelMovimiento SET @CobradoSinImpuestosDelMovimiento = @AbonoSinImpuestoAnterior + @AbonoSinImpuestosDelMovimiento --POR COBRAR DEL MOVIMIENTO (@AbonoSinImpuestosDelMovimiento) SET @IVAPorCobrarDelMovimiento=@AbonoSinImpuestosDelMovimiento*(@PorcentajeIVA/100) SET @ISRRetenidoPorCobrarDelMovimiento=@AbonoSinImpuestosDelMovimiento*(@PorcentajeRetencionISR/100) SET @IVARetenidoPorCobrarDelMovimiento=@AbonoSinImpuestosDelMovimiento*(@PorcentajeRetencionIVA/100) --Cobrado (@CobradoSinImpuestosDelMovimiento) SET @IVACobrado=@CobradoSinImpuestosDelMovimiento*(@PorcentajeIVA/100) SET @ISRRetenidoCobrado=@CobradoSinImpuestosDelMovimiento*(@PorcentajeRetencionISR/100) SET @IVARetenidoCobrado=@CobradoSinImpuestosDelMovimiento*(@PorcentajeRetencionIVA/100) --Por Cobrar SET @IVAPorCobrar=@SaldoSinImpuestosDelMovimiento*(@PorcentajeIVA/100) SET @ISRRetenidoPorCobrar=@SaldoSinImpuestosDelMovimiento*(@PorcentajeRetencionISR/100) SET @IVARetenidoPorCobrar=@SaldoSinImpuestosDelMovimiento*(@PorcentajeRetencionIVA/100) UPDATE COB_ESTADO_CUENTA SET Saldo=ROUND(@SaldoSinImpuestosDelMovimiento,2), Abono=Abono+ROUND(@AbonoSinImpuestosDelMovimiento,2), IVAPorCobrar=ROUND(@IVAPorCobrar,2), RetencionISRPorCobrar=ROUND(@ISRRetenidoPorCobrar,2), RetencionIVAPorCobrar=ROUND(@IVARetenidoPorCobrar,2), IVACobrado=ROUND(@IVACobrado,2), RetencionISRCobrado=ROUND(@ISRRetenidoCobrado,2), RetencionIVACobrado=ROUND(@IVARetenidoCobrado,2) WHERE idEstadoCuenta=@idEstadoCuenta INSERT INTO COB_MOVIMIENTO_COBRO_DETALLE( idMovimiento ,idEstadoCuenta ,MontoInicial ,Abono ,Cargo ,Saldo ,MontoBase ,MontoCobrado ,IVACobrado ,RetencionISRCobrado ,RetencionIVACobrado ,idEstado ) VALUES( @idMovimiento ,@idEstadoCuenta ,@MontoInicial ,@AbonoSinImpuestoAnterior ,@Cargo ,@SaldoSinImpuestosAnterior ,@MontoBase ,@AbonoSinImpuestosDelMovimiento ,ROUND(@IVAPorCobrarDelMovimiento,2) ,ROUND(@ISRRetenidoPorCobrarDelMovimiento,2) ,ROUND(@IVARetenidoPorCobrarDelMovimiento,2) ,@idEstado ) FETCH NEXT FROM CURSOR_DETALLE INTO @idEstadoCuenta,@PorcentajeIVA,@PorcentajeRetencionISR, @PorcentajeRetencionIVA,@idPeriodoCobro,@idConcepto END --END WHILE CLOSE CURSOR_DETALLE; DEALLOCATE CURSOR_DETALLE; UPDATE PLD_PERSONA SET SaldoFavor=@Monto WHERE idPersona=@idPersona