on 04-25-2016 3:42 AM
Hola, espero me puedan orientar en lo que estoy mal.
Resulta que necesito controlar de que no se ingrese una misma factura dos veces, la forma de controlar es verificando de que la factura que se está creando, el socio de negocio en ella no exista con el mismo foliopref y folionum en la base de datos.
Mi idea fue crear tres variables en donde guardo el foliopref, folionum y cardcode de la factura que se encuentra en ventana y luego en otras variables dos cuento cuantas veces existe el foliopref en conjunto con el cardcode, lo mismo para el folionum, luego pregunto que si ambas variables contienen un número distinto a cero no deje crear la factura, porque eso quiere decir que ya existe, sin embargo si alguno es cero si deje crear la factura.
Bueno aquí está el código:
If @object_type = 18 AND @transaction_type IN ('A')
Begin
declare @NFolioBD as int --Cuenta cuantas veces existe el n°folio en la bd
declare @NFolioFC as int --Nº Folio Factura en Ventana
declare @IndicadorBD as int --Cuenta cuantas veces existe el indicador en la bd
declare @IndicadorFC as nvarchar (2) --Indicador Factura en Ventana
declare @SNegocioFC as nvarchar (15) --Socio de Negocio Factura en Ventana
Set @IndicadorFC= (select FolioPref From OPCH where @list_of_cols_val_tab_del = DocEntry)-- asigno el foliopref de la factura en ventana.
Set @NFolioFC= (Select FolioNum From OPCH Where @list_of_cols_val_tab_del = DocEntry)-- asigno el folionum de la factura en ventana.
Set @SNegocioFC= (select CardCode From OPCH where @list_of_cols_val_tab_del = DocEntry)-- asigno el cardcode de la factura en ventana.
-- Cuento cuantas veces existe el foliopref en la bd, en donde sea igual al foliopref de la factura abierta e igual al socio de negocios
Set @IndicadorBD= (Select count (FolioPref) From OPCH where FolioPref = @IndicadorFC and CardCode = @SNegocioFC)
--Cuento cuantas veces existe el folionum en la bd, en donde sea igual al folionum de la factura abierta e al igual socio de negocios
Set @NFolioBD= (Select count (FolioNum) From OPCH where FolioNum = @NFolioFC and CardCode = @SNegocioFC)
-- si alguno de los dos es 0, debe dejar de crear la factura, de lo contrario no debe permitirlo
IF (@IndicadorBD !=0 and @NFolioBD != 0 )
Begin
Set @error = 05
Set @error_message= 'Nº de Folio ya ingresado'
End
End
Desde ya muchas gracias y saludos.
Juan:
Acá te envío uno probado, tanto para las facturas como notas de crédito de proveedor
Espero sea de ayuda.
Saludos,
Manuel Díaz G.
/*FOLIO DUPLICADO en Facturas y Notas Crédito Proveedores*/
--Inicio query que impide que se duplique el registro de facturas de proveedores y notas de credito
Declare @CardCode nVarchar(20)
Declare @Folio int
Declare @Prefijo varchar(2)
/*******************************************************************************
NOTA:Si la variable @Prefijo es texto por ejemplo: FP, NC el tipo es varchar(2),
en caso contrario,si la variable es numerica el tipo es int
********************************************************************************/
Declare @Duplicado nVarchar
If @object_type in ('18', '19')
and @transaction_type in ('A', 'U', 'L', 'C')
begin
Select @CardCode = Case @object_type
When 18 Then (SELECT T0.CardCode FROM OPCH T0 Where T0.DocEntry = @list_of_cols_val_tab_del)
When 19 Then (SELECT T0.CardCode FROM ORPC T0 Where T0.DocEntry = @list_of_cols_val_tab_del)
End
Select @Folio = Case @object_type
When 18 Then (SELECT T0.FolioNum FROM OPCH T0 Where T0.DocEntry = @list_of_cols_val_tab_del)
When 19 Then (SELECT T0.FolioNum FROM ORPC T0 Where T0.DocEntry = @list_of_cols_val_tab_del)
End
Select @Prefijo = Case @object_type
When 18 Then (SELECT T0.FolioPref FROM OPCH T0 Where T0.DocEntry = @list_of_cols_val_tab_del)
When 19 Then (SELECT T0.FolioPref FROM ORPC T0 Where T0.DocEntry = @list_of_cols_val_tab_del)
End
Select @Duplicado = Case @object_type
When 18 Then (SELECT Count(*) FROM OPCH T0 Where T0.CardCode = @CardCode and T0.FolioPref = @Prefijo and T0.FolioNum = @Folio and T0.DocEntry <> @list_of_cols_val_tab_del)
When 19 Then (SELECT Count(*) FROM ORPC T0 Where T0.CardCode = @CardCode and T0.FolioPref = @Prefijo and T0.FolioNum = @Folio and T0.DocEntry <> @list_of_cols_val_tab_del)
End
if @Duplicado > 0
begin
set @error = 11
set @error_message = 'El folio de este documento ya existe'
/*+(case @object_type
when 18 then (select min(convert(varchar,docnum)) from opch where folionum=@folio)
when 19 then (select min(convert(varchar,docnum)) from orpc where folionum=@folio)
else ''
end)*/
end
end
--Fin query que impide que se duplique el registro de facturas de proveedores y notas de credito
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
En el IF usa OR y prueba.
IF (@IndicadorBD !=0 or @NFolioBD != 0 )
Begin
Set @error = 05
Set @error_message= 'Nº de Folio ya ingresado'
End
End
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Muchas gracias por responder, probé cambiando el and por el or, pero sin embargo sigue sin funcionar ya que arroja el error de que ya existe.
Estoy probando con un socio de negocio, en donde el foliopref ya existe y el folionum también, al momento de intentar duplicarlo arroja el mensaje de error y al cambiar el folionum también arroja el mensaje de error.
Tal ves tendré algo mal en la consulta?
User | Count |
---|---|
107 | |
12 | |
11 | |
6 | |
5 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.