Skip to Content

Archived discussions are read-only. Learn more about SAP Q&A

Layout Cheque - Importe en Letras

Hola a Todos,

El monto a mostrar en el importe en letras del layout de cheques se ha realizado tomando una variable de sistema de cheque para el pago (82) y definiéndolo como "Monto en Letras", debido a que anteriormente tomábamos el Importe en Letras de la Base de Datos, pero cuando el importe era muy extenso, la frase se cortaba, ya que el campo tiene solo 100 caracteres.

Al principio funciono bien el usar el monto en letras en el Layout, pero estamos presentando problemas al momento de registrar cheques a partir de dos millones (2.000.000), ya que el layout interpreta este monto al pasarlo a letras como Dos Millón.

¿Existe alguna manera de que se pueda corregir esto?

Gracias de antemano

Former Member
replied

Hola fijate que he estado algo atareado en un proyecto... rapidamente lo que se me ocurrio fue lo siguiente

1. crear otra funcion que te trae en letras los decimales....

CREATE FUNCTION [dbo].[f_CV_NLD]
(
	-- Add the parameters for the function here
   @Numero Numeric(20,2)
)
RETURNS nVarchar(400)
AS
BEGIN
		DECLARE @Result nVarchar(400)

		DECLARE @lnEntero INT, 
				@lcRetornoD VARCHAR(512), 
				@lnTernaD INT, 
				@lcCadenaD VARCHAR(512), 
				@lnUnidades INT, 
				@lnDecenas INT, 
				@lnCentenas INT, 
				@lnFraccion INT


			SELECT @lnEntero = CAST(@Numero AS INT), 
				@lnFraccion = (@Numero - @lnEntero) * 100,
				@lcRetornoD = '', 
				@lnTernaD = 1 

			WHILE @lnFraccion > 0 
			BEGIN /* WHILE */ 
				-- Recorro terna por terna 
				SELECT @lcCadenaD = '' 
				SELECT @lnUnidades = @lnFraccion % 10 
				SELECT @lnFraccion = CAST(@lnFraccion/10 AS INT) 
				SELECT @lnDecenas = @lnFraccion % 10 
				SELECT @lnFraccion = CAST(@lnFraccion/10 AS INT) 
				SELECT @lnCentenas = @lnFraccion % 10 
				SELECT @lnFraccion = CAST(@lnFraccion/10 AS INT) 
				-- Analizo las unidades 
				SELECT @lcCadenaD = 
				CASE /* UNIDADES */ 
					WHEN @lnUnidades = 1 AND @lnTernaD = 1 THEN 'UNO ' + @lcCadenaD 
					WHEN @lnUnidades = 1 AND @lnTernaD <> 1 THEN 'UN ' + @lcCadenaD 
					WHEN @lnUnidades = 2 THEN 'DOS ' + @lcCadenaD 
					WHEN @lnUnidades = 3 THEN 'TRES ' + @lcCadenaD 
					WHEN @lnUnidades = 4 THEN 'CUATRO ' + @lcCadenaD 
					WHEN @lnUnidades = 5 THEN 'CINCO ' + @lcCadenaD 
					WHEN @lnUnidades = 6 THEN 'SEIS ' + @lcCadenaD 
					WHEN @lnUnidades = 7 THEN 'SIETE ' + @lcCadenaD 
					WHEN @lnUnidades = 8 THEN 'OCHO ' + @lcCadenaD 
					WHEN @lnUnidades = 9 THEN 'NUEVE ' + @lcCadenaD 
				ELSE @lcCadenaD 
				END /* UNIDADES */ 
			-- Analizo las decenas 
				SELECT @lcCadenaD = 
				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' + @lcCadenaD 
				END 
					WHEN @lnDecenas = 2 AND @lnUnidades = 0 THEN 'VEINTE ' + @lcCadenaD 
					WHEN @lnDecenas = 2 AND @lnUnidades <> 0 THEN 'VEINTE Y ' + @lcCadenaD 
					WHEN @lnDecenas = 3 AND @lnUnidades = 0 THEN 'TREINTA ' + @lcCadenaD 
					WHEN @lnDecenas = 3 AND @lnUnidades <> 0 THEN 'TREINTA Y ' + @lcCadenaD 
					WHEN @lnDecenas = 4 AND @lnUnidades = 0 THEN 'CUARENTA ' + @lcCadenaD 
					WHEN @lnDecenas = 4 AND @lnUnidades <> 0 THEN 'CUARENTA Y ' + @lcCadenaD 
					WHEN @lnDecenas = 5 AND @lnUnidades = 0 THEN 'CINCUENTA ' + @lcCadenaD 
					WHEN @lnDecenas = 5 AND @lnUnidades <> 0 THEN 'CINCUENTA Y ' + @lcCadenaD 
					WHEN @lnDecenas = 6 AND @lnUnidades = 0 THEN 'SESENTA ' + @lcCadenaD 
					WHEN @lnDecenas = 6 AND @lnUnidades <> 0 THEN 'SESENTA Y ' + @lcCadenaD 
					WHEN @lnDecenas = 7 AND @lnUnidades = 0 THEN 'SETENTA ' + @lcCadenaD 
					WHEN @lnDecenas = 7 AND @lnUnidades <> 0 THEN 'SETENTA Y ' + @lcCadenaD 
					WHEN @lnDecenas = 8 AND @lnUnidades = 0 THEN 'OCHENTA ' + @lcCadenaD 
					WHEN @lnDecenas = 8 AND @lnUnidades <> 0 THEN 'OCHENTA Y ' + @lcCadenaD 
					WHEN @lnDecenas = 9 AND @lnUnidades = 0 THEN 'NOVENTA ' + @lcCadenaD 
					WHEN @lnDecenas = 9 AND @lnUnidades <> 0 THEN 'NOVENTA Y ' + @lcCadenaD 
				ELSE @lcCadenaD 
				END /* DECENAS */ 
			-- Analizo la terna 
			SELECT @lcCadenaD = 
				CASE /* TERNA */ 
				WHEN @lnTernaD = 1 THEN @lcCadenaD  ELSE '' END /* TERNA */ 
				-- Armo el retorno terna a terna 
				SELECT @lcRetornoD = @lcCadenaD + @lcRetornoD 
				SELECT @lnTernaD = @lnTernaD + 1 
			END /* WHILE */ 

			IF @lnTernaD = 1 
			SELECT @lcRetornoD = 'CERO' 
			
		-- Return the result of the function
		SELECT @Result = RTRIM(@lcRetornoD)  + ' CENTIMOS' 
	-- Return the result of the function
	RETURN @Result
END

2. modificar la primer funcion en la ultima linea

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

3.modificar la busqueda formateada, te pongo un ejempo lazado desde SQL.

Declare @Numero numeric(20,2)
set @Numero = 275245325.26
SELECT [GenConsol].[dbo].[f_CV_NL] (@numero)+ [GenConsol].[dbo].[f_CV_NLD](@Numero)

4. El Resultado

DOSCIENTOS SETENTA Y CINCO MILLONES DOSCIENTOS CUARENTA Y CINCO MIL TRESCIENTOS VEINTE Y CINCO CON VEINTE Y SEIS CENTIMOS

Saludos Cordiales

Rodolfo Castañeda

1 View this answer in context
Not what you were looking for? View more on this topic or Ask a question