• Domingo 28 de Abril de 2024, 20:39

Autor Tema:  problemas con una funcion que genera id  (Leído 2480 veces)

blusky

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
problemas con una funcion que genera id
« en: Jueves 2 de Septiembre de 2010, 03:25 »
0
hola a todos. estoy creando un sistema contable  y cree una fucncion que me genere un codigo del tipo XXXX-xxxx pero de la siguiente manera.
 los primeros 4 digitos se refieren a la cuenta mayor, luego añado el guion y despues  tengo que incrementar consecutivamente  el numero final.
ej:
1010:Codigo de cuenta mayor
1010-0001, 1010-0002,1010-0003 etc. :Codigo de cuenta auxiliar
xxxx:numero que se incrementara en 1 para cada una de las cuentas mayores

la funcion me genera el numero de la cuenta auxiliar incrementado pero si yo ingreso otro codigo de cuenta mayor como 1214-0000 entonces me devuelve 1214 con el ultimo codigo incrementardo. no se si me explico. espero me puedan ayudar. gracias.

create function genNumeroCuentaAux(@Num_CM nvarchar(9))
returns char(9)
begin
declare @Num_CA nvarchar(9)
declare @Numero int
declare @Numgenerado nvarchar(9)
if not exists(select Num_CA  from tblCuentaAuxiliar where Num_CM=@Num_CM)
-- inner join tblCuentaMayor on tblCuentaAuxiliar.Id_CuentaMayor=tblCuentaMayor.Id_CuentaMayor )
begin
set @Numero = 0001

--set @Num_CM=(select Num_CM from tblCuentaMayor)
set @Num_CA=(SUBSTRING(@Num_CM,1,4)+@Numero)
end
else
begin
set @Num_CA=(select max(Num_CA) from tblCuentaAuxiliar  where Num_CM=@Num_CM)
   --set @Num_CM=(select Num_CM from tblCuentaMayor)
set @Numero=CONVERT(INT,SUBSTRING(@Num_CA, 4, 4))
set @Num_CM=SUBSTRING(@Num_CM,1,5)
set @Numero=@Numero+1
   if @Numero <10000
   begin
   set @Numero=0
   end

set @Numgenerado=LEFT(@Num_CM,5)+'-'+RIGHT(CAST(@Numero AS NVARCHAR(4)),4)
end
return @Numgenerado
end

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: problemas con una funcion que genera id
« Respuesta #1 en: Sábado 4 de Septiembre de 2010, 17:46 »
0
A ver si he logrado entender, lo unico que quieres hacer es incrementar la subcuenta no?

Si es asi fijate si este codigo te sirve:

Código: SQL
  1. CREATE FUNCTION genNumeroCuentaAux(@Num_CM VARCHAR(9))
  2. RETURNS VARCHAR(9)
  3. BEGIN
  4. DECLARE @Num_CA VARCHAR(9)
  5. DECLARE @Numero INT
  6. DECLARE @NumSiguiente_CA VARCHAR(9)
  7.  
  8.     SELECT @Num_CA=MAX(Num_CA) FROM tblCuentaAuxiliar WHERE Num_CM=@Num_CM
  9.     SELECT @Num_CA=isnull(@Num_CA,'')
  10.     SELECT @Numero = 0
  11.     SELECT @NumSiguiente_CA=@Num_CM
  12.  
  13.     IF @Num_CA<>''
  14.         BEGIN
  15.             SELECT @Numero=CAST(SUBSTRING(@Num_CA,6,4) AS INT)
  16.         END
  17.  
  18.     SELECT @Numero = @Numero+1
  19.     SELECT @NumSiguiente_CA=@NumSiguiente_CA+'-'+RIGHT('000'+CAST(@Numero AS VARCHAR(4)),4)
  20.     RETURN @NumSiguiente_CA
  21.  
  22. END
  23.  
  24. GO
  25. SELECT dbo.genNumeroCuentaAux('1010')
  26.  

Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

blusky

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: problemas con una funcion que genera id
« Respuesta #2 en: Lunes 6 de Septiembre de 2010, 21:30 »
0
gracias F_Tanori. probare el codigo y te dire como me va. lo que quiero es que el numero de la subcuenta se incremente en 1.
es que la cuenta principal tiene los primeros cuatro numeros que el usuario introduce "XXXX", luego el guion "-" y despues seguido de los ultimos 4 digitos "0000"
y el de la subcuenta debe ser el numero de la cuenta principal pero con los ultimos deben irse incrementando. espero haberme explicado mejor.
Ej: Cuenta Principal 1545-0000
            Cuenta Subcuenta 1545-0001


y gracias por tu codigo. te aviso si pude hacer lo que queria.

 :comp:

blusky

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: problemas con una funcion que genera id
« Respuesta #3 en: Martes 7 de Septiembre de 2010, 23:43 »
0
Hola F_tanori!!!!!!! saludos a todos.

ya probe con tu codigo que me mandaste eso es lo que quiero pero tengo un problem cuando quiero ejecutar el procedimiento almacenado,
por eso te mando este codigo para que talvez me lo revises y me puedas decir donde esta el error. funciona bien si ingreso la primera cuenta pero
despues me sale un error de foreign key.

gracias!!!!!

create procedure sp_IngresarCM
@Cod_CM nvarchar(9),
@Nombre_CM nvarchar(50)
as
begin
insert into tblCuentaMayor values (@Cod_CM,@Nombre_CM)
end

sp_IngresarCM '1010-0000','Efectivo'
sp_IngresarCM '1120-0000',''
go

select * from tblCuentaMayor

create procedure sp_IngresarCA
@Cod_CA nvarchar(9),
@Nombre_CA nvarchar(50),
@Cod_CM nvarchar(9)
as
begin
insert into tblCuentaAuxiliar values(dbo.genNumeroCuentaAux(@Cod_CM),@Nombre_CA,@Cod_CM)
end
go

sp_IngresarCA '1010-0000','Caja chica','1010-0000'
go
sp_IngresarCA '1010','Banco','1010-0000'

SELECT * FROM TBLCUENTAMAYOR
GO
select * from tblCuentaAuxiliar

 B)

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: problemas con una funcion que genera id
« Respuesta #4 en: Miércoles 8 de Septiembre de 2010, 08:25 »
0
Seria bueno que nos mostraras la estructuras de tus tablas (CREATES) incluyendo PKs, FKs, IDX ...

Para poder crear un escenario mas parecido al tuyo, ya que es un poco dificil sin tener la base de datos y desconocer el sistema y la logica del mismo, ademas de que  "...me sale un error de foreign key..." como que explica pero no explica es decir un error de foreing key? relacionado con la FK pero que en especifico, no existe, no la puede crear, no es valida etc

Coloca el mensaje de error que te arroja MsSQL y las estructuras de tus tablas en sql para poderlas crear

Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

blusky

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: problemas con una funcion que genera id
« Respuesta #5 en: Miércoles 8 de Septiembre de 2010, 22:48 »
0
hola. Aqui escribo la estructura de las tablas. de prueba solo pongo las 2 que interesan.

tblCuentaMayor
Cod_CM nvarchar(9) primary key not null,
Nombre_CM(50) not null

tblCuentaAuxiliar
Cod_CA nvarchar(9) primary key not null,
Nombre_CA nvarchar(50) not null,
Cod_CM nvarchar(9) not null foreign key references tblCuentaMayor(Cod_CM )

Espero te sirva mas y puedas ver mejor la sistuacion que quiero hacer.