Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

De monto a monto en letras

Estas en el tema de De monto a monto en letras en el foro de SQL Server en Foros del Web. Buenos días hermanos Cuando hago una consulta simple a la tabla jfor.documetos_cp obtengo el siguiente resultado. mi consulta seria es posible yo crear una vista ...
  #1 (permalink)  
Antiguo 17/01/2011, 06:55
 
Fecha de Ingreso: febrero-2010
Mensajes: 13
Antigüedad: 14 años, 2 meses
Puntos: 0
De monto a monto en letras

Buenos días hermanos

Cuando hago una consulta simple a la tabla jfor.documetos_cp obtengo el siguiente resultado.



mi consulta seria es posible yo crear una vista en la cual el monto que es numérico poder llevarlo a monto en letras y que sintaxis debo usa!

ejemplo

9079.00 (nueve mil setenta y nueve con cero)

Gracias de antemanos
  #2 (permalink)  
Antiguo 17/01/2011, 07:58
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: De monto a monto en letras

Hay que usar el buscador del foro:
http://www.forosdelweb.com/f87/monto...letras-578687/
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 17/01/2011, 09:20
 
Fecha de Ingreso: febrero-2010
Mensajes: 13
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: De monto a monto en letras

Gracias hermano flaviovich y de verdad disculpa por el repost!!

Si puede algun moderador borrarlo le agradeceria.

Gracias!!!!
  #4 (permalink)  
Antiguo 17/01/2011, 13:23
 
Fecha de Ingreso: febrero-2010
Mensajes: 13
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: De monto a monto en letras

Buenos amigos necesito mas ayuda!

Aun con la sentencia no logro el resultado.. si me pueden ayudar!!

saludos, :( :(

/* Stored Procedure */
IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'[dbo].[sp_Num2Let]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[sp_Num2Let]
GO

SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON
GO

CREATE PROCEDURE sp_Num2Let @Numero NUMERIC(20,2) AS
BEGIN
SET NOCOUNT ON
DECLARE @lnEntero INT,
@lcRetorno VARCHAR(512),
@lnTerna INT,
@lcMiles VARCHAR(512),
@lcCadena VARCHAR(512),
@lnUnidades INT,
@lnDecenas INT,
@lnCentenas INT,
@lnFraccion INT

SELECT @lnEntero = CAST(@Numero AS INT),
@lnFraccion = (@Numero - @lnEntero) * 100,
@lcRetorno = '',
@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 /* UNIDADES */
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
SELECT @lcRetorno = @lcCadena + @lcRetorno
SELECT @lnTerna = @lnTerna + 1

END /* WHILE */

IF @lnTerna = 1
SELECT @lcRetorno = 'CERO'

SELECT RTRIM(@lcRetorno) + ' CON ' + LTRIM(STR(@lnFraccion,2)) + '/100'

END
GO
SET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON
GO
  #5 (permalink)  
Antiguo 17/01/2011, 15:46
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: De monto a monto en letras

¿Como lo estas haciendo?.......................
__________________
MCTS Isaias Islas
  #6 (permalink)  
Antiguo 17/01/2011, 16:10
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: De monto a monto en letras

Estimado juan_18, acabo de probar el procedimiento almacenado y funciona bien.
Que mensaje de error te sale?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #7 (permalink)  
Antiguo 17/01/2011, 16:52
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: De monto a monto en letras

Seguramente lo esta tratando de utilizar en su SELECT y lo que debe hacer, es convertirlo en UNA FUNCION, pero hasta que no nos diga que pasa, son puras conjeturas.
__________________
MCTS Isaias Islas
  #8 (permalink)  
Antiguo 18/01/2011, 07:01
 
Fecha de Ingreso: febrero-2010
Mensajes: 13
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: De monto a monto en letras

Mi problema es que al no ser muy experto en la materia no logro enlazar la sentencia con el valor almacenado en el campo de la base de datos! en fin veo la sentencia y no se en realidad como se comporta que procedimientos realiza como se relaciona.

Ya ven necesito una ayuda mas personalizada.

saludo y gracias mil,
  #9 (permalink)  
Antiguo 18/01/2011, 08:02
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: De monto a monto en letras

Es tal como lo dijo Isaias, tenias que convertirlo a una funcion:
Código SQL:
Ver original
  1. ALTER FUNCTION [dbo].[Num2Let]( @Numero NUMERIC(20,2) )
  2. RETURNS VARCHAR(520)
  3. AS
  4. BEGIN
  5. --SET NOCOUNT ON
  6. DECLARE @lnEntero INT,
  7. @lcRetorno VARCHAR(512),
  8. @lnTerna INT,
  9. @lcMiles VARCHAR(512),
  10. @lcCadena VARCHAR(512),
  11. @lnUnidades INT,
  12. @lnDecenas INT,
  13. @lnCentenas INT,
  14. @lnFraccion INT
  15.  
  16. SELECT @lnEntero = CAST(@Numero AS INT),
  17. @lnFraccion = (@Numero - @lnEntero) * 100,
  18. @lcRetorno = '',
  19. @lnTerna = 1
  20.  
  21. WHILE @lnEntero > 0
  22. BEGIN /* WHILE */
  23. -- Recorro terna por terna
  24. SELECT @lcCadena = ''
  25. SELECT @lnUnidades = @lnEntero &#37; 10
  26. SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
  27. SELECT @lnDecenas = @lnEntero % 10
  28. SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
  29. SELECT @lnCentenas = @lnEntero % 10
  30. SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
  31.  
  32. -- Analizo las unidades
  33. SELECT @lcCadena =
  34. CASE /* UNIDADES */
  35. WHEN @lnUnidades = 1 AND @lnTerna = 1 THEN 'UNO ' + @lcCadena
  36. WHEN @lnUnidades = 1 AND @lnTerna <> 1 THEN 'UN ' + @lcCadena
  37. WHEN @lnUnidades = 2 THEN 'DOS ' + @lcCadena
  38. WHEN @lnUnidades = 3 THEN 'TRES ' + @lcCadena
  39. WHEN @lnUnidades = 4 THEN 'CUATRO ' + @lcCadena
  40. WHEN @lnUnidades = 5 THEN 'CINCO ' + @lcCadena
  41. WHEN @lnUnidades = 6 THEN 'SEIS ' + @lcCadena
  42. WHEN @lnUnidades = 7 THEN 'SIETE ' + @lcCadena
  43. WHEN @lnUnidades = 8 THEN 'OCHO ' + @lcCadena
  44. WHEN @lnUnidades = 9 THEN 'NUEVE ' + @lcCadena
  45. ELSE @lcCadena
  46. END /* UNIDADES */
  47.  
  48. -- Analizo las decenas
  49. SELECT @lcCadena =
  50. CASE /* DECENAS */
  51. WHEN @lnDecenas = 1 THEN
  52. CASE @lnUnidades
  53. WHEN 0 THEN 'DIEZ '
  54. WHEN 1 THEN 'ONCE '
  55. WHEN 2 THEN 'DOCE '
  56. WHEN 3 THEN 'TRECE '
  57. WHEN 4 THEN 'CATORCE '
  58. WHEN 5 THEN 'QUINCE '
  59. ELSE 'DIECI' + @lcCadena
  60. END
  61. WHEN @lnDecenas = 2 AND @lnUnidades = 0 THEN 'VEINTE ' + @lcCadena
  62. WHEN @lnDecenas = 2 AND @lnUnidades <> 0 THEN 'VEINTI' + @lcCadena
  63. WHEN @lnDecenas = 3 AND @lnUnidades = 0 THEN 'TREINTA ' + @lcCadena
  64. WHEN @lnDecenas = 3 AND @lnUnidades <> 0 THEN 'TREINTA Y ' + @lcCadena
  65. WHEN @lnDecenas = 4 AND @lnUnidades = 0 THEN 'CUARENTA ' + @lcCadena
  66. WHEN @lnDecenas = 4 AND @lnUnidades <> 0 THEN 'CUARENTA Y ' + @lcCadena
  67. WHEN @lnDecenas = 5 AND @lnUnidades = 0 THEN 'CINCUENTA ' + @lcCadena
  68. WHEN @lnDecenas = 5 AND @lnUnidades <> 0 THEN 'CINCUENTA Y ' + @lcCadena
  69. WHEN @lnDecenas = 6 AND @lnUnidades = 0 THEN 'SESENTA ' + @lcCadena
  70. WHEN @lnDecenas = 6 AND @lnUnidades <> 0 THEN 'SESENTA Y ' + @lcCadena
  71. WHEN @lnDecenas = 7 AND @lnUnidades = 0 THEN 'SETENTA ' + @lcCadena
  72. WHEN @lnDecenas = 7 AND @lnUnidades <> 0 THEN 'SETENTA Y ' + @lcCadena
  73. WHEN @lnDecenas = 8 AND @lnUnidades = 0 THEN 'OCHENTA ' + @lcCadena
  74. WHEN @lnDecenas = 8 AND @lnUnidades <> 0 THEN 'OCHENTA Y ' + @lcCadena
  75. WHEN @lnDecenas = 9 AND @lnUnidades = 0 THEN 'NOVENTA ' + @lcCadena
  76. WHEN @lnDecenas = 9 AND @lnUnidades <> 0 THEN 'NOVENTA Y ' + @lcCadena
  77. ELSE @lcCadena
  78. END /* DECENAS */
  79.  
  80.  
  81. -- Analizo las centenas
  82. SELECT @lcCadena =
  83. CASE /* CENTENAS */
  84. WHEN @lnCentenas = 1 AND @lnUnidades = 0 AND @lnDecenas = 0 THEN 'CIEN ' + @lcCadena
  85. WHEN @lnCentenas = 1 AND NOT(@lnUnidades = 0 AND @lnDecenas = 0) THEN 'CIENTO ' + @lcCadena
  86. WHEN @lnCentenas = 2 THEN 'DOSCIENTOS ' + @lcCadena
  87. WHEN @lnCentenas = 3 THEN 'TRESCIENTOS ' + @lcCadena
  88. WHEN @lnCentenas = 4 THEN 'CUATROCIENTOS ' + @lcCadena
  89. WHEN @lnCentenas = 5 THEN 'QUINIENTOS ' + @lcCadena
  90. WHEN @lnCentenas = 6 THEN 'SEISCIENTOS ' + @lcCadena
  91. WHEN @lnCentenas = 7 THEN 'SETECIENTOS ' + @lcCadena
  92. WHEN @lnCentenas = 8 THEN 'OCHOCIENTOS ' + @lcCadena
  93. WHEN @lnCentenas = 9 THEN 'NOVECIENTOS ' + @lcCadena
  94. ELSE @lcCadena
  95. END /* CENTENAS */
  96.  
  97. -- Analizo la terna
  98. SELECT @lcCadena =
  99. CASE /* TERNA */
  100. WHEN @lnTerna = 1 THEN @lcCadena
  101. WHEN @lnTerna = 2 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) THEN @lcCadena + ' MIL '
  102. WHEN @lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) AND
  103. @lnUnidades = 1 AND @lnDecenas = 0 AND @lnCentenas = 0 THEN @lcCadena + ' MILLON '
  104. WHEN @lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) AND
  105. NOT (@lnUnidades = 1 AND @lnDecenas = 0 AND @lnCentenas = 0) THEN @lcCadena + ' MILLONES '
  106. WHEN @lnTerna = 4 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) THEN @lcCadena + ' MIL MILLONES '
  107. ELSE ''
  108. END /* TERNA */
  109.  
  110. -- Armo el retorno terna a terna
  111. SELECT @lcRetorno = @lcCadena + @lcRetorno
  112. SELECT @lnTerna = @lnTerna + 1
  113.  
  114. END /* WHILE */
  115.  
  116. IF @lnTerna = 1
  117. SELECT @lcRetorno = 'CERO'
  118.  
  119. RETURN RTRIM(@lcRetorno) + ' CON ' + LTRIM(STR(@lnFraccion,2)) + '/100'
  120.  
  121. END

El modo de usar:
Código SQL:
Ver original
  1. SELECT *, dbo.Num2Let(monto) FROM jfor.documetos_cp
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #10 (permalink)  
Antiguo 18/01/2011, 12:13
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: De monto a monto en letras

Me lo imaginaba y eso que nunca se me ha dado eso de la "adivinanza"......Saludos
__________________
MCTS Isaias Islas

Etiquetas: letras, monto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:52.