GO /****** Object: StoredProcedure [dbo].[paWcfSeInsTrn_DevFcr] Script Date: 11/12/2024 16:20:44 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[paWcfSeInsTrn_DevFcr] @Trn_DevFcr [dbo].[dataTypeTrn_DevFcr] READONLY, @Trn_TraEspFacReservas [dbo].[dataTypeTrn_TraEspFacReservas] READONLY, @Trn_RecAfavor [dbo].[dataTypeTrn_RecAfavor] READONLY, @Trn_VencAbonos [dbo].[dataTypeTrn_VencAbonos] READONLY, @Trn_DocMemo [dbo].[dataTypeTrn_DocMemo] READONLY, @Trn_DetCuentas [dbo].[dataTypeTrn_DetCuentas] READONLY, @Trn_Comprobantes [dbo].[dataTypeTrn_Comprobantes] READONLY, @Trn_ComDetalle [dbo].[dataTypeTrn_ComDetalle] READONLY, @Trn_NiifComp [dbo].[dataTypeTrn_NiifComp] READONLY, @Trn_NiifDetalle [dbo].[dataTypeNiifDetalle] READONLY, @operacion [varchar](1) WITH EXECUTE AS CALLER AS DECLARE @Comprobante INT = 0 --Esta variable guarda el número consecutivo del comprobante DECLARE @TipComp VARCHAR(3) = '0' --Esta variable guarda el tipo de comprobante DECLARE @IdCiaComp VARCHAR(4) = '00' --Esta variable guarda la compañia del comprobante DECLARE @CompNiif INT = 0 --Esta variable guarda el número consecutivo del comprobante Niif DECLARE @TipCompNiif VARCHAR(3) = '0' --Esta variable guarda el tipo de comprobante Niif DECLARE @IdCiaCompNiif VARCHAR(4) = '00'--Esta variable guarda la compañia del comprobante Niif DECLARE @CompFis INT = 0 --Esta variable guarda el número consecutivo de comprobante Fiscal DECLARE @TipCompFis VARCHAR(3) = '0' --Esta variable guarda el tipo de comprobante Fiscal DECLARE @IdCiaCompFis VARCHAR(4) = '00' --Esta variable guarda la compañia del comprobante Fiscal DECLARE @TipDoc VARCHAR(3) --En esta variable se guarda el consecutivo del documento aprobación DECLARE @Cia VARCHAR(2) --En esta variable se guarda el consecutivo del documento aprobación DECLARE @Numero INT --En esta variable se guarda el consecutivo del documento aprobación BEGIN TRAN BEGIN TRY declare @fecdev smalldatetime DECLARE @modalidad varchar(10) IF(@operacion = 'i') begin SELECT TOP 1 @TipDoc = TipDev, @Cia = IdCia,@fecdev = Fecha,@modalidad = ModdDev, @IdCiaComp = IdCia, @IdCiaCompNiif = IdCia, @IdCiaCompFis = IdCia FROM @Trn_DevFcr SELECT @Numero = Numero + 1 FROM TiposDocCons where IdDoc = @TipDoc AND IdCia = @Cia IF(@Numero > 0) UPDATE TiposDocCons SET Numero = @Numero WHERE IdDoc = @TipDoc AND IdCia = @Cia ELSE BEGIN SELECT @Numero = 1 INSERT INTO TiposDocCons VALUES (@TipDoc,@Cia,0,0,0,0,NULL,'',@Numero,0,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null,null,null) END IF(EXISTS(SELECT * FROM @Trn_Comprobantes)) BEGIN SELECT TOP 1 @TipComp = TipCom FROM @Trn_Comprobantes SELECT @Comprobante = Numero + 1 FROM TiposComCons where IdCom = @TipComp AND IdCia = @IdCiaComp --UPDATE TiposComCons SET Numero = @Comprobante WHERE IdCom = @TipComp AND IdCia = @IdCiaComp IF(@Comprobante <> '') UPDATE TiposComCons SET Numero = @Comprobante WHERE IdCom = @TipComp and IdCia = @IdCiaComp ELSE BEGIN SELECT @Comprobante = 1 INSERT INTO TiposComCons VALUES (@TipComp,@IdCiaComp,0,0,@Comprobante,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null) END END IF(EXISTS(SELECT * FROM @Trn_NiifComp WHERE TipoNiif = 'NIIF')) BEGIN SELECT TOP 1 @TipCompNiif = TipCom FROM @Trn_NiifComp WHERE TipoNiif = 'NIIF' SELECT @CompNiif = Numero + 1 FROM TiposComCons where IdCom = @TipCompNiif AND IdCia = @IdCiaCompNiif --UPDATE TiposComCons SET Numero = @CompNiif WHERE IdCom = @TipCompNiif AND IdCia = @IdCiaCompNiif IF(@CompNiif <> '') UPDATE TiposComCons SET Numero = @CompNiif WHERE IdCom = @TipCompNiif and IdCia = @IdCiaCompNiif ELSE BEGIN SELECT @CompNiif = 1 INSERT INTO TiposComCons VALUES (@TipCompNiif,@IdCiaCompNiif,0,0,@CompNiif,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null) END END IF(EXISTS(SELECT * FROM @Trn_NiifComp WHERE TipoNiif = 'FISCAL')) BEGIN SELECT TOP 1 @TipCompFis = TipCom FROM @Trn_NiifComp WHERE TipoNiif = 'FISCAL' SELECT @CompFis = Numero + 1 FROM TiposComCons where IdCom = @TipCompFis AND IdCia = @IdCiaCompFis --UPDATE TiposComCons SET Numero = @CompFis WHERE IdCom = @TipCompFis AND IdCia = @IdCiaCompFis IF(@CompNiif <> '') UPDATE TiposComCons SET Numero = @CompFis WHERE IdCom = @TipCompFis and IdCia = @IdCiaCompFis ELSE BEGIN SELECT @CompFis = 1 INSERT INTO TiposComCons VALUES (@TipCompFis,@IdCiaCompFis,0,0,@CompFis,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null) END END end IF(@operacion = 'i') begin IF(EXISTS(SELECT * FROM @Trn_DevFcr)) BEGIN INSERT INTO Trn_DevFcr ( -- REVISAR TipDev,Devolucion,IdCia,Fecha,IdConcepto,TipDoc, Factura,IdCiaDoc,FecDoc,IdCliente,IdAgencia,VrSubTotal, VrDescuento,VrImpuesto,VrRetencion,VrReteICA,VrReteIVA,VrFletes, VrOtros,VrCargos,VrOtrDcto,VrCostos,VrSobretasa,VrImpGlobal, VrFaltantes,VrAnticipos,VrNeto,Cantidad,CantPuntos,BaseImp, BaseRet,IdCCosto,IdSubCos,IdVend,TarifaCom,CodTarCom, IdLocEnv,Pedido,IdCiaPed,Remision,IdCiaRem,Cotizacion, IdCiaCot,FecPedido,Modalidad,ModdDev,PlacaVehic,KmtVehic, ZonaFrontera,OrigenAdd,TipCom,Comprobante,IdCiaCom,Observacion, IdEstado,TimeSys,FecUpdate,IdCiaCrea,IdUsuario,VrImpCons, VrReteCREE,TarifaRtc,CodTarRtc,BaseIvaObsq,VrIvaObsequio,VrImpCarbono, DevMasivo,NumRecibo,CdCiaRec,CdMotDev,BaseIvaIgp,VrIvaIngProd, TarifaArf,VrAutRetFte,TarifaAri,VrAutRetIca,VrImpuBA,VrImpuCUP ) SELECT @TipDoc,@Numero,@Cia,Fecha,IdConcepto,TipDoc, Factura,IdCiaDoc,FecDoc,IdCliente,IdAgencia,VrSubTotal, VrDescuento,VrImpuesto,VrRetencion,VrReteICA,VrReteIVA,VrFletes, VrOtros,VrCargos,VrOtrDcto,VrCostos,VrSobretasa,VrImpGlobal, VrFaltantes,VrAnticipos,VrNeto,Cantidad,CantPuntos,BaseImp, BaseRet,IdCCosto,IdSubCos,IdVend,TarifaCom,CodTarCom, IdLocEnv,Pedido,IdCiaPed,Remision,IdCiaRem,Cotizacion, IdCiaCot,FecPedido,Modalidad,ModdDev,PlacaVehic,KmtVehic, ZonaFrontera,OrigenAdd,@TipComp,@Comprobante,@IdCiaComp,Observacion, IdEstado,TimeSys,FecUpdate,IdCiaCrea,IdUsuario,VrImpCons, VrReteCREE,TarifaRtc,CodTarRtc,BaseIvaObsq,VrIvaObsequio,VrImpCarbono, DevMasivo,NumRecibo,CdCiaRec,CdMotDev,BaseIvaIgp,VrIvaIngProd, TarifaArf,VrAutRetFte,TarifaAri,VrAutRetIca,VrImpuBA,VrImpuCUP FROM @Trn_DevFcr END IF(EXISTS(SELECT * FROM @Trn_TraEspFacReservas)) BEGIN INSERT INTO Trn_TraEspFacReservas( -- REVISAR TipDoc,Factura,IdCia,Item,TipoReg,FechaFact, TipRes,Reserva,IdCiaRes,ItemRes,FecReserva,Descripcion, Cantidad,VrServicio,VrUnitario,VrCosto,TarifaIva,VrImpuesto, TarifaDct,VrDescuento,DocCliente,Referencia1,Referencia2,Referencia3, CdConcepto,CdCCosto,CdSubCos,NitTercero,CdAgencia,pVehiculo, TipoAfiVehic,IdOrigen,IdDestino,Anulado,TipDocRef,NumDocRef, IdCiaRef,FecDocRef,CodTarDct,CodTarRet,CodTarIca,TarifaRet, VrRetencion,TarifaIca,VrReteIca,EstadoItem ) SELECT @TipDoc,@Numero,@Cia,Item,TipoReg,FechaFact, TipRes,Reserva,IdCiaRes,ItemRes,FecReserva,Descripcion, Cantidad,VrServicio,VrUnitario,VrCosto,TarifaIva,VrImpuesto, TarifaDct,VrDescuento,DocCliente,Referencia1,Referencia2,Referencia3, CdConcepto,CdCCosto,CdSubCos,NitTercero,CdAgencia,pVehiculo, TipoAfiVehic,IdOrigen,IdDestino,Anulado,TipDocRef,NumDocRef, IdCiaRef,FecDocRef,CodTarDct,CodTarRet,CodTarIca,TarifaRet, VrRetencion,TarifaIca,VrReteIca,EstadoItem FROM @Trn_TraEspFacReservas END IF(EXISTS(SELECT * FROM @Trn_RecAFavor)) BEGIN INSERT INTO Trn_RecAFavor( TipDoc, Recibo, IdCia, Fecha, VrAFavor, VrOtrosDb, VrAbono, IdCliente, IdAgencia, IdVend ) SELECT @TipDoc, @Numero, @Cia, Fecha, VrAFavor, VrOtrosDb, VrAbono, IdCliente, IdAgencia, IdVend FROM @Trn_RecAFavor END IF(EXISTS(SELECT * FROM @Trn_VencAbonos)) BEGIN declare @tiprec varchar(3) declare @recibo int declare @idciarec varchar(2) declare @item int SELECT TOP 1 @tiprec = TipRec, @idciarec = IdCia, @recibo = Recibo FROM @Trn_VencAbonos select @item = isnull(MAX(Item),0) from Trn_VencAbonos where TipRec = @tiprec and Recibo = @recibo and IdCia = @idciarec INSERT INTO Trn_VencAbonos( -- REVISAR TipRec,Recibo,IdCia,Item,Fecha,TipDoc, Factura,IdCiaFac,ItemFac,VrAbono,VrDescto,VrBaseCms, IdCliente,IdAgencia,IdVend,Comision,Detalle,FecPago, TipoAplica,TimeSys ) SELECT @TipDoc,@Numero,@Cia,(@item + ROW_NUMBER() OVER(ORDER BY Item ASC)),Fecha,TipDoc, Factura,IdCiaFac,ItemFac,VrAbono,VrDescto,VrBaseCms, IdCliente,IdAgencia,IdVend,Comision,Detalle,FecPago, TipoAplica,TimeSys FROM @Trn_VencAbonos END IF(EXISTS(SELECT * FROM @Trn_DetCuentas)) BEGIN INSERT INTO Trn_DetCuentas( TipDoc,Documento,IdCia,Concepto,Item,IdCuenta, Valor,Detalle,IdTercero,CodAgncia,CdCCosto,CdSubCos, pVehiculo,VrBase,TipFac,Factura,IdCiaFac,ItemFac, FecVence,Cheque,CiuOrigen,Referencia,VrTarifa,TipoTarif, CodConc,CodTarif ) SELECT @TipDoc,@Numero,@Cia,Concepto,Item,IdCuenta, Valor,Detalle,IdTercero,CodAgncia,CdCCosto,CdSubCos, pVehiculo,VrBase,TipFac,Factura,IdCiaFac,ItemFac, FecVence,Cheque,CiuOrigen,Referencia,VrTarifa,TipoTarif, CodConc,CodTarif FROM @Trn_DetCuentas END IF(EXISTS(SELECT * FROM @Trn_DocMemo)) BEGIN INSERT INTO Trn_DocMemo( TipDoc,Documento,IdCia,Comentarios,Nota1,Nota2, Nota3,CantImp,ArchivoImg ) SELECT @TipDoc,@Numero,@Cia,Comentarios,Nota1,Nota2, Nota3,CantImp,ArchivoImg FROM @Trn_DocMemo END IF(EXISTS(SELECT * FROM @Trn_Comprobantes)) BEGIN INSERT INTO Trn_Comprobantes( TipCom, Comprobante, IdCia, Fecha, IdTercero, VrTotal, IdCta, EnEfectivo, NumCheque, FecCheque, TipDoc, Documento, IdCiaDoc, Anulado, NumDev, FecDev, TipEgr, NEgreso, pVehiculo, VehPropio, CedCondtor, CodConce, Beneficiario, VrDivisa1, VrDivisa2, VrDivisa3, PermEditar, Integrado, EsEgreso, Anticipo, Observacion, IdEstado, Propddes, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, CdSustento, Tipo_Pago, Establec, PEmision, Autorizac, FechaAut, NiifTipo, NiifNumero, FisTipo, FisNumero, DocSoporte, CodRes, DescServicio ) SELECT @TipComp, @Comprobante, @IdCiaComp, Fecha, IdTercero, VrTotal, IdCta, EnEfectivo, NumCheque, FecCheque, @TipDoc, @Numero, @Cia, Anulado, NumDev, FecDev, TipEgr, NEgreso, pVehiculo, VehPropio, CedCondtor, CodConce, Beneficiario, VrDivisa1, VrDivisa2, VrDivisa3, PermEditar, Integrado, EsEgreso, Anticipo, Observacion, IdEstado, Propddes, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, CdSustento, Tipo_Pago, Establec, PEmision, Autorizac, FechaAut, @TipCompNiif, @CompNiif, @TipCompFis, @CompFis, DocSoporte, CodRes, DescServicio FROM @Trn_Comprobantes END IF(EXISTS(SELECT * FROM @Trn_ComDetalle)) BEGIN INSERT INTO Trn_ComDetalle ( TipCom, Comprobante, IdCia, Item, Fecha, IdCuenta, Detalle, VrDebito, VrCredito, IdTercero, IdVehiculo, IdCCosto, IdSubCos, VrBase, TarifaBase, TipDoc, Documento, IdCiaDoc, CodConce, NitDoc, TipFac, Factura, IdCiaFac, ItemFac, FecVence, CodCta, NumCheque, Integrado, TipoAplica, Consolida, CodCargo, NitOtros, CodSubgpo, CiuOrigen, CodAgncia, VehPropio, Referncia, TipDocRef, DocRef, IdCiaRef, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, CdConcTrib, CdTarifTrib, NumEstablec, PtoEmision, Num_Autoriza, FechAutoriza,CdCuentaNiif ) SELECT @TipComp, @Comprobante, @IdCiaComp, C.Item, Fecha, IdCuenta, Detalle, VrDebito, VrCredito, CASE -- IdTercer WHEN IdVehiculo = '0' THEN IdTercero ELSE ( ISNULL( ( SELECT DISTINCT CD.IdTercero FROM Trn_ComDetalle AS CD WHERE CD.Comprobante = ( SELECT TOP 1 Factura FROM @Trn_DevFcr ) AND CD.TipCom = 'FCE' AND CD.Item = C.Item ), ( SELECT F.NitTercero FROM @Trn_TraEspFacReservas F WHERE F.pVehiculo = C.IdVehiculo AND F.TipDoc = 'FCE' AND F.Item = C.Item ) ) ) END, CASE -- IdVehiculo WHEN IdVehiculo = '0' THEN IdVehiculo ELSE ( SELECT DISTINCT CD.IdVehiculo FROM Trn_ComDetalle AS CD WHERE CD.Comprobante = ( SELECT TOP 1 Factura FROM @Trn_DevFcr ) AND CD.TipCom = 'FCE' AND CD.Item = C.Item ) END, IdCCosto, IdSubCos, VrBase, TarifaBase, @TipDoc, @Numero, @Cia, CodConce, NitDoc, TipFac, Factura, IdCiaFac, ItemFac, FecVence, CodCta,NumCheque, Integrado, TipoAplica, Consolida, CodCargo, NitOtros, CodSubgpo, CiuOrigen, CodAgncia, VehPropio, Referncia, TipDocRef, DocRef, IdCiaRef, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, CdConcTrib, CdTarifTrib, NumEstablec, PtoEmision, Num_Autoriza, FechAutoriza, CdCuentaNiif FROM @Trn_ComDetalle c END IF(EXISTS(SELECT * FROM @Trn_NiifComp)) BEGIN INSERT INTO Trn_NiifComp ( TipCom, Comprobante, IdCia, Fecha, IdTercero, VrTotal, IdCta,EnEfectivo, NumCheque, FecCheque, TipDoc, Documento, IdCiaDoc, Anulado, NumDev, FecDev, TipEgr, NEgreso, pVehiculo, VehPropio, CedCondtor, CodConce, Beneficiario, VrDivisa1, VrDivisa2, VrDivisa3, PermEditar, Integrado, EsEgreso, Anticipo, Observacion, IdEstado, Propddes, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, TipoNiif, CdSustento, Tipo_Pago, Establec, PEmision, Autorizac,FechaAut, CtbTipo, CtbNumero, FisTipo, FisNumero ) SELECT CASE N.TipoNiif WHEN 'NIIF' THEN @TipCompNiif ELSE @TipCompFis END, CASE N.TipoNiif WHEN 'NIIF' THEN @CompNiif ELSE @CompFis END, @Cia, C.Fecha, C.IdTercero, C.VrTotal, C.IdCta, C.EnEfectivo, C.NumCheque, C.FecCheque, @TipDoc, @Numero, @Cia, C.Anulado, C.NumDev,C.FecDev, C.TipEgr, C.NEgreso, C.pVehiculo, C.VehPropio, C.CedCondtor, C.CodConce, C.Beneficiario,C.VrDivisa1, C.VrDivisa2, C.VrDivisa3, C.PermEditar, C.Integrado, C.EsEgreso, C.Anticipo, C.Observacion, C.IdEstado, C.Propddes, C.TimeSys, C.FecUpdate, C.IdCiaCrea, C.IdUsuario, N.TipoNiif, C.CdSustento, C.Tipo_Pago, C.Establec, C.PEmision, C.Autorizac, C.FechaAut, CASE N.TipoNiif WHEN 'NIIF' THEN @TipCompNiif ELSE NULL END, CASE N.TipoNiif WHEN 'NIIF' THEN @CompNiif ELSE 0 END, CASE N.TipoNiif WHEN 'FISCAL' THEN @TipCompFis ELSE NULL END, CASE N.TipoNiif WHEN 'FISCAL' THEN @CompFis ELSE 0 END FROM @Trn_Comprobantes AS C JOIN @Trn_NiifComp AS N ON C.TipCom = N.TipComCont AND C.Comprobante = N.ComprobanteCont END IF(EXISTS(SELECT * FROM @Trn_NiifDetalle)) BEGIN INSERT INTO Trn_NiifDetalle ( TipCom, Comprobante, IdCia, Item, Fecha, IdCuenta, Detalle,VrDebito, VrCredito, IdTercero, IdVehiculo,IdCCosto, IdSubCos,VrBase, TarifaBase, TipDoc, Documento, IdCiaDoc, CodConce, NitDoc, TipFac, Factura, IdCiaFac, ItemFac, FecVence, CodCta, NumCheque, Integrado, TipoAplica, Consolida, CodCargo, NitOtros, CodSubgpo, CiuOrigen, CodAgncia, VehPropio, Referncia, TipDocRef, DocRef, IdCiaRef, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, CdConcTrib, CdTarifTrib, NumEstablec, PtoEmision, Num_Autoriza, FechAutoriza, CodCuentaCG ) SELECT CASE NC.TipoNiif WHEN 'NIIF' THEN @TipCompNiif ELSE @TipCompFis END, CASE NC.TipoNiif WHEN 'NIIF' THEN @CompNiif ELSE @CompFis END, @Cia,N.Item, N.Fecha, N.IdCuenta, N.Detalle,N.VrDebito, N.VrCredito, N.IdTercero, N.IdVehiculo,N.IdCCosto, N.IdSubCos,N.VrBase, N.TarifaBase, @TipDoc,@Numero,@Cia, N.CodConce,N.NitDoc, N.TipFac, N.Factura, N.IdCiaFac, N.ItemFac, N.FecVence, N.CodCta, N.NumCheque, N.Integrado, N.TipoAplica, N.Consolida, N.CodCargo, N.NitOtros, N.CodSubgpo, N.CiuOrigen, N.CodAgncia, N.VehPropio, N.Referncia, N.TipDocRef, N.DocRef, N.IdCiaRef, N.TimeSys, N.FecUpdate, N.IdCiaCrea, N.IdUsuario, N.CdConcTrib, N.CdTarifTrib, N.NumEstablec, N.PtoEmision ,N.Num_Autoriza,N.FechAutoriza, N.CodCuentaCG FROM @Trn_NiifDetalle as N JOIN @Trn_NiifComp AS NC ON N.TipCom = NC.TipCom AND N.Comprobante = NC.Comprobante END end IF(@operacion = 'i') begin --esto antes de la versión 5048 estaba desués del cursor ahora no para poder buscar solo las factruas activas --ACTUALIZAR FACTURA IF(UPPER(@modalidad) = 'TOTAL') BEGIN UPDATE Trn_Facturas SET Anulado = 1,NumDev = @Numero,FecDev = @fecdev FROM Trn_Facturas F, @Trn_DevFcr DF WHERE F.TipDoc = DF.TipDoc AND F.Factura = DF.Factura AND F.IdCia = DF.IdCiaDoc END --actualiza los items de las reservas con los que se relacionan en el tipo de datos nuevo de las facturasreservas --Antes de la versión 48 esto hacía Joe --UPDATE Trn_TraEspResDetalle --SET Factura = 0, IdCiaFac = '00', FechaFac = null, EstadoItem = r.EstadoItem --FROM Trn_TraEspResDetalle d, @Trn_TraEspFacReservas r --WHERE d.TipDoc = r.TipRes and d.Reserva = r.Reserva and d.IdCia = r.IdCiaRes and d.Item = r.ItemRes --Versión 48 se debe buscar si la opción FRM está activa y si está activa debe colocar la última factura que no esté anulada de la reserva (Con este parámetro se puede factrar muchas veces la reserva) --Si la factrua que se anula es menor a la última se debe seguir dejando la última factura, ejemplo: si la última factura de esa reserva es la 3 y se anula la factrua 2 correspondiente a esa reserva --Se sigue dejando la 3 IF((SELECT ISNULL(Valor, '0') FROM adm_Opciones where IdOpc ='FRM') = '1') BEGIN DECLARE @TipRes VARCHAR(3) DECLARE @TipDocFacDev VARCHAR(3) DECLARE @TipDocFacActual VARCHAR(3) DECLARE @TipDocFac VARCHAR(3) DECLARE @CiaRes VARCHAR(2) DECLARE @CiaFac VARCHAR(2) DECLARE @CiaFacDev VARCHAR(2) DECLARE @CiaFacActual VARCHAR(2) DECLARE @NumRes INT DECLARE @NumFacDev INT DECLARE @NumFacActual INT DECLARE @NumFac INT DECLARE @ItemRes INT DECLARE @reserva Int = 0 DECLARE @cantres Int = 0 DECLARE @cantresfact Int = 0 DECLARE @FechaFac datetime DECLARE @asingadofa BIT = 0 SELECT TOP (1) @TipDocFacDev = TipDoc, @NumFacDev = Factura, @CiaFacDev = IdCiaDoc FROM @Trn_DevFcr DECLARE faccursor CURSOR --Verificar todas las reservas que viene en la devolución, tenga facturas FOR SELECT TipRes,Reserva,IdCiaRes,ItemRes FROM @Trn_TraEspFacReservas OPEN faccursor FETCH NEXT FROM faccursor INTO @TipRes,@NumRes,@CiaRes,@ItemRes WHILE @@FETCH_STATUS = 0 BEGIN SELECT @TipDocFacActual = TipFac, @NumFacActual = Factura, @CiaFacActual = IdCiaFac FROM Trn_TraEspResDetalle WHERE TipDoc = @TipRes and Reserva = @NumRes and IdCia = @CiaRes and Item = @ItemRes IF(@TipDocFacActual = @TipDocFacDev and @NumFacActual = @NumFacDev and @CiaFacActual = @CiaFacDev) BEGIN IF(EXISTS( SELECT TOP(1) fd.Factura FROM Trn_TraEspFacReservas AS fd JOIN Trn_Facturas AS f ON fd.TipDoc = f.TipDoc AND fd.Factura = f.Factura AND fd.IdCia = f.IdCia WHERE fd.TipRes = @TipRes AND fd.Reserva = @NumRes AND fd.IdCia = @CiaRes AND fd.Item = @ItemRes AND f.Anulado = 0 and fd.TipDoc = @TipDocFacDev and fd.Factura < @NumFacDev and fd.IdCia = @CiaFacDev and fd.Factura <> @NumFacDev order by fd.Factura desc )) BEGIN SELECT TOP(1) @TipDocFac = fd.TipDoc, @NumFac = fd.Factura, @CiaFac = fd.IdCia, @FechaFac = f.Fecha FROM Trn_TraEspFacReservas AS fd JOIN Trn_Facturas AS f ON fd.TipDoc = f.TipDoc AND fd.Factura = f.Factura AND fd.IdCia = f.IdCia WHERE fd.TipRes = @TipRes AND fd.Reserva = @NumRes AND fd.IdCia = @CiaRes AND fd.Item = @ItemRes AND f.Anulado = 0 and fd.TipDoc = @TipDocFacDev and fd.Factura < @NumFacDev and fd.IdCia = @CiaFacDev and fd.Factura <> @NumFacDev order by Fd.Factura desc UPDATE d SET d.Factura = @NumFac, d.IdCiaFac = @CiaFac, d.FechaFac = @FechaFac, d.EstadoItem = r.EstadoItem FROM Trn_TraEspResDetalle AS d JOIN @Trn_TraEspFacReservas AS r ON d.TipDoc = r.TipRes and d.Reserva = r.Reserva and d.IdCia = r.IdCiaRes WHERE d.TipDoc = @TipRes and d.Reserva = @NumRes and d.IdCia = @CiaRes and d.Item = @ItemRes --DECLARE facupdatecursor CURSOR --FOR SELECT fd.TipDoc, fd.Factura, fd.IdCia, f.Fecha FROM Trn_TraEspFacReservas AS fd JOIN Trn_Facturas AS f ON fd.TipDoc = f.TipDoc AND fd.Factura = f.Factura AND fd.IdCia = f.IdCia WHERE fd.TipRes = @TipRes AND fd.Reserva = @NumRes AND fd.IdCia = @CiaRes AND fd.Item = @ItemRes AND f.Anulado = 0 --OPEN facupdatecursor --FETCH NEXT FROM facupdatecursor INTO @TipDocFac,@NumFac,@CiaFac,@FechaFac --WHILE @@FETCH_STATUS = 0 ----OR @asingadofa = 0 --BEGIN -- --La factura actual de la reserva debe ser menor -- IF((SELECT Factura FROM Trn_TraEspResDetalle WHERE TipDoc = @TipRes and Reserva = @NumRes and IdCia = @CiaRes and @ItemRes = Item) = @NumFac) -- AND @asingadofa = 0 -- begin -- UPDATE d -- SET d.Factura = @NumFac, d.IdCiaFac = @CiaFac, d.FechaFac = @FechaFac, d.EstadoItem = r.EstadoItem -- FROM Trn_TraEspResDetalle AS d -- JOIN @Trn_TraEspFacReservas AS r ON d.TipDoc = r.TipRes and d.Reserva = r.Reserva and d.IdCia = r.IdCiaRes -- WHERE d.TipDoc = @TipRes and d.Reserva = @NumRes and d.IdCia = @CiaRes and d.Item = @ItemRes -- --set @asingadofa = 1 -- BREAK -- end --FETCH NEXT FROM facupdatecursor INTO @TipDocFac,@NumFac,@CiaFac,@FechaFac --END --CLOSE facupdatecursor --DEALLOCATE facupdatecursor END ELSE BEGIN UPDATE Trn_TraEspResDetalle SET Factura = 0, IdCiaFac = '00', FechaFac = null, EstadoItem = r.EstadoItem FROM Trn_TraEspResDetalle d, @Trn_TraEspFacReservas r WHERE d.TipDoc = r.TipRes and d.Reserva = r.Reserva and d.IdCia = r.IdCiaRes and d.Item = r.ItemRes END END FETCH NEXT FROM faccursor INTO @TipRes,@NumRes,@CiaRes,@ItemRes END CLOSE faccursor DEALLOCATE faccursor END ELSE BEGIN UPDATE Trn_TraEspResDetalle SET Factura = 0, IdCiaFac = '00', FechaFac = null, EstadoItem = r.EstadoItem FROM Trn_TraEspResDetalle d, @Trn_TraEspFacReservas r WHERE d.TipDoc = r.TipRes and d.Reserva = r.Reserva and d.IdCia = r.IdCiaRes and d.Item = r.ItemRes END --actualiza el cliente UPDATE TercCliente SET VrSaldo = c.VrSaldo - f.VrNeto FROM TercCliente c, @Trn_DevFcr f WHERE c.IdClie = f.IdCliente --actualizar vencimientos,cuando es necesario IF(EXISTS(SELECT * FROM @Trn_VencAbonos)) BEGIN UPDATE Trn_Vencimientos SET VrAbonado = v.VrAbonado + dv.VrAbono FROM Trn_Vencimientos v, @Trn_VencAbonos dv WHERE v.TipDoc = dv.TipDoc and v.Factura = dv.Factura and v.IdCia = dv.IdCiaFac END end SELECT @Numero, @Comprobante COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN DECLARE @ErrorMessage NVARCHAR(4000); DECLARE @ErrorSeverity INT; DECLARE @ErrorState INT; SELECT @ErrorMessage = CONCAT( ' Mensaje de error:', ERROR_MESSAGE(), ' Numero error:', ERROR_NUMBER(), ' Error severity:', ERROR_SEVERITY(), ' Linea:', ERROR_LINE(), ' Error Procedure', ERROR_PROCEDURE()), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE(); RAISERROR( @ErrorMessage, -- Message text. @ErrorSeverity, -- Severity. @ErrorState -- State. ); END CATCH RETURN 0 -- ========================= GO