Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Crear un Triger para Generar Número de Serie en MS Sql Server Express 2008 (https://www.clubdelphi.com/foros/showthread.php?t=79786)

hondaalberto 10-08-2012 17:59:43

Crear un Triger para Generar Número de Serie en MS Sql Server Express 2008
 
Buenos dias A todos y muchas gracias por su tiempo ojala y me puedan ayudar con esto.


No tengo Idea de Como hacerlo y Necesito Hacer un Trigger para Generar los Numero de Comprobante Fiscal para una Factura de venta ( Dichos Numeros Tienen el Siguiente Formato A010010010100000001) y cada vez que se registra una factura de venta Nueva hay que incrementar en uno(1) este número para asignarselo a la nueva factura (ej: A010010010100000002).


Algunos detalles a tener en cuenta sobre el número de Comprobante Fiscal:

1) Los Primeros 11 caracteres son Fijos "A0100100101"
2) Los demás son la Secuencia "00000001
3) No se Pueden Repetir y es Obligatorio que al registrar cada factura de Venta se le Asigne un Número de Comprobante Fiscal


Tengo una Tabla Llamada Numeros de Serie para Guardar los Números de Comprobantes Fiscal Con la Siguiente Estructura


Número Inicial nvarchar(19)
Número Final nvarchar(19)
último Número Utilizado nvarchar(19) // Este campo Guarda el Número que se le a Asignado a la última factura realizada.


Antés de registrar la factura en la Base de datos, en la tabla Numeros de Serie ya tengo llenos los campos Número_Inicial y Número_Final porque esta secuencia de numero la entrega el Gobierno. (Ej: Número inicial: A010010010100000001, Número Final: A010010010100000050).


El Trigger que necesito es para que cuando se Guarde una Nueva factura de ventas se le asigne este número de comprobante Fiscal en la Tabla Cabecera_de_ventas y se actualice la Tabla Numeros de Serie.


Gracias por Regalarme un poco de tu tiempo y por la ayuda que puedan brindarme.

Saludos,

Alberto.

Casimiro Notevi 10-08-2012 18:03:11

¿Y por qué escribes así?, en mayúsculas y minúsculas.
Supongo que lo has escrito todo en mayúsculas y el sistema lo ha detectadoy lo ha puesto así.
Si ese es el caso, no escribas en mayúsculas, ya sabes que eso en internet es GRITAR, y recuerda nuestra guía de estilo, gracias.

hondaalberto 10-08-2012 18:07:15

Buenos dias Casimiro no he escrito todo en mayuscula solo la primera letra de Algunas palabras y la primero letra de los Numeros de Serie porque asi es como va no puede ser en mayuscula (Ej; A01001010010100000001).


Saludos y Muchas Gracias ojala y me puedan ayudar con esto...

Casimiro Notevi 10-08-2012 18:16:09

Cita:

Empezado por hondaalberto (Mensaje 439316)
Saludos y Muchas Gracias ojala y me puedan ayudar con esto...

Hola, conozco poco MS sql, pero supongo, seguro, que existen programas "administradores/manejadores de esa base de datos" y encontrarás la opción de "Crear trigger".
También supongo que debe tener algún tipo de dato autoincrementable, como un generador o algo así.

Entonces lo único que debes hacer, en principio, es tomar la parte fija del número de serie y unirla con la parte generada. Ese dato es el que guardarías.

hondaalberto 10-08-2012 20:20:22

Asi es SQL Server Cuenta con una Herramienta de administración para eso, lo que me interesara saber es si alguien tiene alguna idea del código sql que deberia aplicar para hacerlo.

Casimiro Notevi 10-08-2012 20:32:24

A ver si puede ayudarte alguien que conozca ms sql.

hondaalberto 14-08-2012 23:44:55

Aqui esta el Trigger que necesitaba ojala le sirva a alguien más...

Este Triger lo que hace es Tomar un Número de Comprobante Fiscal (A010010010100000001) e incrementarlo en uno(1) cada vez que se ejecuta.

Ej: (A010010010100000001 + 1) = A010010010100000002


Código SQL [-]
USE [Prueba]
GO
/****** Object:  Trigger [dbo].[TI_Factura]    Script Date: 08/13/2012 19:26:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[TI_Factura] ON [dbo].[Factura] FOR INSERT AS
 
 
declare @valor varchar(19)
declare @cadena varchar(19)
declare @numero int
declare @x int
declare @serie varchar(19)
 
DECLARE @CADENA2 varchar(19)
DECLARE @Prueba varchar(19) 
 
SELECT  @valor=[Ultimo_Utilizado] FROM(
SELECT  [Ultimo_Utilizado],convert(int,substring([Ultimo_Utilizado],12,len([Ultimo_Utilizado])))  AS numero FROM Table_3 
        where  codigo=(Select Inserted.codigo from  Inserted where Inserted.codigo = table_3.codigo)
)AS t1 ORDER BY numero DESC
 
SELECT @cadena=substring(@valor,12,len(@valor))
SELECT @CADENA2 =substring(@valor,1,11)
SET @numero=convert(int,@cadena)
SET @numero=@numero+1
SET @x=1
SET @serie=''
 
while @x <=(8-(SELECT len(convert(varchar(10),@numero))))
begin
    SET @serie=@serie + '0'
    SET @x=@x+1
end
SET @serie=@serie + convert(varchar(10),@numero)
 
Set @serie=@CADENA2  + @serie
 
--SET @serie='A0100100101' + @serie Si CADENA2  Funciona borrar esta linea
--INSERT INTO #temp values (@serie)
 
UPDATE Factura SET NCF = @serie  FROM inserted
WHERE Inserted.id = Factura.id
 
Update Table_3 
Set Ultimo_Utilizado= @serie,
    Resultado = @CADENA2 
--where Codigo='NCFCR'
 
WHERE table_3.Codigo = (Select Inserted.codigo from Inserted where Inserted.codigo = table_3.codigo)

Casimiro Notevi 15-08-2012 09:50:01

Estupendo :)


Recuerda poner los tags al código fuente, ejemplo:



Gracias :)

hondaalberto 15-08-2012 16:44:01

De Acuerdo Casimiro, Muchas Gracias por la Observación lo tendre pendiente para la Próxima vez.


La franja horaria es GMT +2. Ahora son las 17:19:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi