Power Builder - Funcion Numero a Letras !Bueno!

 
Vista:

Funcion Numero a Letras !Bueno!

Publicado por Carlos Rojas (66 intervenciones) el 11/01/2007 17:53:32
Hola amigos del foro, les envio la funcion para sql server, quizas lo puedan usar desde PB. de numeros a letras.

Create FUNCTION fr_num_letras( @Numero as numeric(20,2))
RETURNS Varchar(500)
AS

BEGIN
Declare @v_numero_letras AS Varchar(500)
Declare @lnEntero AS BIGINT,
@lcRetorno AS VARCHAR(512),
@lnTerna AS BIGINT,
@lcMiles AS VARCHAR(512),
@lcCadena AS VARCHAR(512),
@lnUnidades AS BIGINT,
@lnDecenas AS BIGINT,
@lnCentenas AS BIGINT,
@lnFraccion AS BIGINT


set @lnEntero = CAST(@Numero as BIGINT)

set @lnFraccion = (@Numero - @lnEntero) * 100
set @lcRetorno = ''
set @lnTerna = 1

WHILE @lnEntero > 0
BEGIN --/* WHILE */
-- Recorro terna por terna

SELECT @lcCadena = ''
SELECT @lnUnidades = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
SELECT @lnDecenas = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
SELECT @lnCentenas = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)

-- Analizo las unidades
SELECT @lcCadena =
CASE
WHEN @lnUnidades = 1 AND @lnTerna = 1 THEN 'UNO ' + @lcCadena
WHEN @lnUnidades = 1 AND @lnTerna = 1 THEN 'UN ' + @lcCadena
WHEN @lnUnidades = 2 THEN 'DOS ' + @lcCadena
WHEN @lnUnidades = 3 THEN 'TRES ' + @lcCadena
WHEN @lnUnidades = 4 THEN 'CUATRO ' + @lcCadena
WHEN @lnUnidades = 5 THEN 'CINCO ' + @lcCadena
WHEN @lnUnidades = 6 THEN 'SEIS ' + @lcCadena
WHEN @lnUnidades = 7 THEN 'SIETE ' + @lcCadena
WHEN @lnUnidades = 8 THEN 'OCHO ' + @lcCadena
WHEN @lnUnidades = 9 THEN 'NUEVE ' + @lcCadena
ELSE @lcCadena
END --/* UNIDADES */

-- Analizo las decenas
SELECT @lcCadena =
CASE /* DECENAS */
WHEN @lnDecenas = 1 THEN
CASE @lnUnidades
WHEN 0 THEN 'DIEZ '
WHEN 1 THEN 'ONCE '
WHEN 2 THEN 'DOCE '
WHEN 3 THEN 'TRECE '
WHEN 4 THEN 'CATORCE '
WHEN 5 THEN 'QUINCE '
ELSE 'DIECI' + @lcCadena
END
WHEN @lnDecenas = 2 AND @lnUnidades = 0 THEN 'VEINTE ' + @lcCadena
WHEN @lnDecenas = 2 AND @lnUnidades > 0 THEN 'VEINTI' + @lcCadena
WHEN @lnDecenas = 3 AND @lnUnidades = 0 THEN 'TREINTA ' + @lcCadena
WHEN @lnDecenas = 3 AND @lnUnidades > 0 THEN 'TREINTA Y ' + @lcCadena
WHEN @lnDecenas = 4 AND @lnUnidades = 0 THEN 'CUARENTA ' + @lcCadena
WHEN @lnDecenas = 4 AND @lnUnidades > 0 THEN 'CUARENTA Y ' + @lcCadena
WHEN @lnDecenas = 5 AND @lnUnidades = 0 THEN 'CINCUENTA ' + @lcCadena
WHEN @lnDecenas = 5 AND @lnUnidades > 0 THEN 'CINCUENTA Y ' + @lcCadena
WHEN @lnDecenas = 6 AND @lnUnidades = 0 THEN 'SESENTA ' + @lcCadena
WHEN @lnDecenas = 6 AND @lnUnidades > 0 THEN 'SESENTA Y ' + @lcCadena
WHEN @lnDecenas = 7 AND @lnUnidades = 0 THEN 'SETENTA ' + @lcCadena
WHEN @lnDecenas = 7 AND @lnUnidades > 0 THEN 'SETENTA Y ' + @lcCadena
WHEN @lnDecenas = 8 AND @lnUnidades = 0 THEN 'OCHENTA ' + @lcCadena
WHEN @lnDecenas = 8 AND @lnUnidades > 0 THEN 'OCHENTA Y ' + @lcCadena
WHEN @lnDecenas = 9 AND @lnUnidades = 0 THEN 'NOVENTA ' + @lcCadena
WHEN @lnDecenas = 9 AND @lnUnidades > 0 THEN 'NOVENTA Y ' + @lcCadena
ELSE @lcCadena
END /* DECENAS */


-- Analizo las centenas
SELECT @lcCadena =
CASE /* CENTENAS */
WHEN @lnCentenas = 1 AND @lnUnidades = 0 AND @lnDecenas = 0 THEN 'CIEN ' + @lcCadena
WHEN @lnCentenas = 1 AND NOT(@lnUnidades = 0 AND @lnDecenas = 0) THEN 'CIENTO ' + @lcCadena
WHEN @lnCentenas = 2 THEN 'DOSCIENTOS ' + @lcCadena
WHEN @lnCentenas = 3 THEN 'TRESCIENTOS ' + @lcCadena
WHEN @lnCentenas = 4 THEN 'CUATROCIENTOS ' + @lcCadena
WHEN @lnCentenas = 5 THEN 'QUINIENTOS ' + @lcCadena
WHEN @lnCentenas = 6 THEN 'SEISCIENTOS ' + @lcCadena
WHEN @lnCentenas = 7 THEN 'SETECIENTOS ' + @lcCadena
WHEN @lnCentenas = 8 THEN 'OCHOCIENTOS ' + @lcCadena
WHEN @lnCentenas = 9 THEN 'NOVECIENTOS ' + @lcCadena
ELSE @lcCadena
END /* CENTENAS */

-- Analizo la terna
SELECT @lcCadena =
CASE /* TERNA */
WHEN @lnTerna = 1 THEN @lcCadena
WHEN @lnTerna = 2 AND (@lnUnidades + @lnDecenas + @lnCentenas)> 0 THEN @lcCadena + ' MIL '
WHEN @lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas) > 0 AND
@lnUnidades = 1 AND @lnDecenas = 0 AND @lnCentenas = 0 THEN @lcCadena + ' MILLON '
WHEN @lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas) > 0 AND
NOT (@lnUnidades = 1 AND @lnDecenas = 0 AND @lnCentenas = 0) THEN @lcCadena + ' MILLONES '
WHEN @lnTerna = 4 AND (@lnUnidades + @lnDecenas + @lnCentenas) > 0 THEN @lcCadena + ' MIL MILLONES '
ELSE ''
END /* TERNA */
-- Armo el retorno terna a terna

-- Armo el retorno terna a terna
set @lcRetorno = @lcCadena + @lcRetorno
set @lnTerna = @lnTerna + 1

END /* WHILE */

IF @lnTerna = 1

Set @lcRetorno = 'CERO'

If @lnFraccion = 0
Begin
set @v_numero_letras = REPLACE( RTRIM(@lcRetorno), ' ', ' ' ) + ' CON 00/100 NUEVOS SOLES'
End
Else
Begin
set @v_numero_letras = REPLACE( RTRIM(@lcRetorno), ' ', ' ' ) + ' CON '+ LTRIM(STR(@lnFraccion,2)) + '/100 NUEVOS SOLES'
End

Return @v_numero_letras;

END

--Espero les sirva
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder