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