cancel
Showing results for 
Search instead for 
Did you mean: 

Importe con letra

jacobo_agami
Participant
0 Kudos

Hola

Estamos tratando de generar el complemento detallista a traves del EFM, pero uno de los campos requiere el importe con letra. Alguna idea de si esto se puede generar a traves del EFM (Electronic File Manager)

Saludos

Jacobo

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

El Stored procedured es el siguiente:

CREATE Procedure [dbo].[SP_NUMLETRAS]

--@Monto  Numeric(10,0)

@Montodec   Float

,@Codmon Char(3)

As

   Set Nocount Off

   -- Variables Para Descomposición Del Monto

Declare @Montodec2          Decimal(16,2)

Declare @Monto1                    Integer

Declare @Monto                    Numeric(10,0)

Declare @Dec                    Decimal(16,2)

Declare @Dec_Char          Char(2)

Declare @Dec_Char2          Char(20)

Declare @Declen         Integer

Set  @Montodec2 = @Montodec

Set  @Monto1 = @Montodec2

Set  @Monto = @Monto1

Set @Dec_Char2 = Convert(Char(20),@Montodec2)

Set @Declen = Len(@Dec_Char2)

Set @Dec_Char  = Substring(@Dec_Char2,@Declen - 1,2)

   Declare @Cociente Numeric(9,0)

          ,@Residuo  Tinyint

          ,@Divtexto Char(12)

          ,@Divnumer Numeric(10,1)

          ,@Contapos Tinyint

   -- Tabla Temporal Para Descomposición

   -- Debido A Que No Una Estructura Tipo Array (Matriz)

   Create Table #Sp_Numlet_Num (Cifra Tinyint, Posicion Tinyint)

   -- Inicializa Contador De Posiciones

   Set @Contapos = 1

   -- Inicializa Cociente

   Set @Cociente=999999999

   -- Bucle De Descomposición Del Monto

   While @Cociente > 0

   Begin

      -- Obtener El Cociente Y El Residuo

      Set @Divnumer = @Monto/10

      Set @Divtexto = Cast(@Divnumer As Char(12))

      Set @Cociente = Cast(Left(@Divtexto, Len(@Divtexto)-2) As Numeric(9,0))

      Set @Residuo  = Cast(Right(Rtrim(@Divtexto), 1) As Tinyint)

      Set @Monto = @Cociente

      --Select @Divtexto As Division

      --      ,@Cociente As Cociente

      --      ,@Residuo  As Residuo

      -- Almacenar El Residuo En Tabla Temporal

      Insert Into #Sp_Numlet_Num Values(@Residuo, @Contapos)

      -- Aumenta Contador De Posiciones

      Set @Contapos = @Contapos + 1

   End

   ------------------------------------------------------------

   -- Ahora Tenemos El Número Descompuesto En Tabla Temporal

   -- La Primera Fila Comienza Con Las Unidades, Luego Decenas,

   -- Centenas, Millares, Decenas De Millar, Etc

   ------------------------------------------------------------

   -- Variables Para Armado Del Número En Letras

   Declare @Cifra Tinyint

          ,@Posicion Tinyint

          ,@Textocif Varchar(12)

          ,@Textopos Varchar(10)

          ,@Flgcerod Bit

          ,@Flgceroc Bit

          ,@Flagdiez Bit

          ,@Flagmill Bit

          ,@Numletras Varchar(256)

   -- Inicialización De Variable De Número En Letras

   Set @Numletras = ''

   -- Creación Del Cursor Para Bucle De Armado Ordenado Por Posición

   -- De Mayor A Menor

   Declare Cifras_Cursor Cursor Scroll For

   Select Cifra, Posicion From #Sp_Numlet_Num Order By Posicion Desc

   -- Abrir El Cursor

   Open Cifras_Cursor

   -- Traer El Primer Registro Del Cursor

   Fetch Next From Cifras_Cursor Into @Cifra, @Posicion

   -- Activación Flag Del Millones

   If @Posicion > 7

      Set @Flagmill = 1

   Else

      Set @Flagmill = 0

   -- Bucle Para El Cursor

   While @@Fetch_Status = 0

   Begin

      -- Inicialización Del Flags Cero (Para Cifra=0 En Posición Siguiente)

      Set @Flgcerod = 0 -- Para Cifra = 0 En La Siguiente Posición

      Set @Flgceroc = 0 -- Para Cifra = 0 En La Subsiguiente Posición

      -- Cuando La Posición Actual Es Decena:

      -- Salto 1 Registro Adelante Para Verificar Si La Cifra

      -- Que En La Siguente Posición (Unidad) Es Cero

      -- Cuando Cifra = 1 O Cifra = 2, Pone 'Diez' O 'Veinte'

      -- Cuando Cifra = 3..9, No Pone ' Y '

      If @Posicion In (2, 5, 😎

      Begin

         Fetch Next From Cifras_Cursor Into @Cifra, @Posicion

         If @Cifra = 0

            Set @Flgcerod = 1

         -- Regreso A La Posición Anterior Del Cursor

         Fetch Prior From Cifras_Cursor Into @Cifra, @Posicion

      End

      -- Cuando La Posición Actual Es Centena:

      -- Salto 2 Registros Adelante Para Verificar Si La Cifra

      -- Que En La Subsiguente Posición (Unidad) Es Cero

      -- Si Cifra = 1, Pone 'Cien', Para Los Demas No Tiene Efecto

      If @Posicion In (3, 6, 9)

      Begin

         Fetch Next From Cifras_Cursor Into @Cifra, @Posicion

         Fetch Next From Cifras_Cursor Into @Cifra, @Posicion

         If @Cifra = 0

            Set @Flgceroc = 1

         -- Regreso A La Posición Anterior Del Cursor

         Fetch Prior From Cifras_Cursor Into @Cifra, @Posicion

         Fetch Prior From Cifras_Cursor Into @Cifra, @Posicion

      End

      ------------------------

      -- Texto Para Las Cifras

      ------------------------

      Set @Textocif = ''

      -- Unidades

      If @Posicion In(1, 4, 7, 10)

         If @Flagdiez = 1

            Set @Textocif =

                Case @Cifra

                   When 1 Then 'ONCE '

                   When 2 Then 'DOCE '

                   When 3 Then 'TRECE '

                   When 4 Then 'CATORCE '

                   When 5 Then 'QUINCE '

                   When 6 Then 'DIECISEIS '

                   When 7 Then 'DIECISIETE '

                   When 8 Then 'DIECIOCHO '

                   When 9 Then 'DIECINUEVE '

                End

         Else

            Set @Textocif =

                Case @Cifra

                   When 1 Then 'UN '

                   When 2 Then 'DOS '

                   When 3 Then 'TRES '

                   When 4 Then 'CUATRO '

                   When 5 Then 'CINCO '

                   When 6 Then 'SEIS '

                   When 7 Then 'SIETE '

                   When 8 Then 'OCHO '

                   When 9 Then 'NUEVE '

                End

      -- Decenas

      If @Posicion In(2, 5, 😎

         If @Flgcerod = 1

            Set @Textocif =

                Case @Cifra

                   When 1 Then 'DIEZ '

                   When 2 Then 'VEINTE '

                   When 3 Then 'TREINTA '

                   When 4 Then 'CUARENTA '

                   When 5 Then 'CINCUENTA '

                   When 6 Then 'SESENTA '

                   When 7 Then 'SETENTA '

                   When 8 Then 'OCHENTA '

                   When 9 Then 'NOVENTA '

                End

         Else

            Set @Textocif =

                Case @Cifra

                   When 1 Then ''

                   When 2 Then 'VEINTI'

                   When 3 Then 'TREINTA Y '

                   When 4 Then 'CUARENTA Y '

                   When 5 Then 'CINCUENTA Y '

                   When 6 Then 'SESENTA Y '

                   When 7 Then 'SETENTA Y '

                   When 8 Then 'OCHENTA Y '

                   When 9 Then 'NOVENTA Y '

                End

      -- Centenas

      If @Posicion In(3, 6, 9)

         If @Flgceroc = 1 And @Cifra = 1

            Set @Textocif = 'CIEN '

         Else

            Set @Textocif =

                Case @Cifra

                   When 1 Then 'CIENTO '

                   When 2 Then 'DOS'

                   When 3 Then 'TRES'

                   When 4 Then 'CUATRO'

                   When 5 Then 'QUINIENTOS '

                   When 6 Then 'SEIS'

                   When 7 Then 'SETE'

                   When 8 Then 'OCHO'

                   When 9 Then 'NOVE'

                End

      ----------------------------

      -- Texto Para Las Posiciones

      ----------------------------

      -- Inicialización Del Texto De La Posición

      Set @Textopos = ''

      -- Inicialización Del Flag De Diez

      Set @Flagdiez = 0

      -- Activación Del Flag De Diez

      If @Posicion In(2, 5, 😎 And @Cifra = 1

         Set @Flagdiez = 1

      -- Texto De Posición De Centenas

      If @Posicion In(3, 6, 9) And @Cifra Not In(0, 1, 5)

         Set @Textopos = 'CIENTOS '

      -- Texto De Posición De Millares

      If @Posicion In(4, 10)

         Set @Textopos = 'MIL '

      -- Texto De Posición De Millones

      If @Posicion = 7

         If @Cifra = 1 And @Flagmill = 0

            Set @Textopos = 'MILLON '

         Else

            Set @Textopos = 'MILLONES '

      -- Concatenación Con De Texto Cifra Y Texto De La Posición

      Set @Numletras = @Numletras + Isnull(@Textocif, '') + @Textopos

     

      -- Trae El Siguiente Registro

      Fetch Next From Cifras_Cursor Into @Cifra, @Posicion

   End

   -- Cierra El Cursor

   Close Cifras_Cursor

   Deallocate Cifras_Cursor

   -- Busqueda De La Moneda

   Declare @Nommon Char(20)

   Select @Nommon = Case

when Currcode='MXP' then 'PESOS'

when Currcode='USD' then 'DÓLARES'

when Currcode='USB' then 'DÓLARES'

when Currcode='YEN' then ' YENES'

when Currcode='EUR' then 'EUROS'

End

From Ocrn Where Currcode = @Codmon

   Declare @Nommon2 Char(20)

   Select @Nommon2 = Case

          when Currcode='MXP' then 'M.N.'

          when Currcode='USD' then 'USD'

          when Currcode='USB' then 'USD'

          when Currcode='YEN' then ' '

          when Currcode='EUR' then ''

          End

   From Ocrn Where Currcode = @Codmon

   -- Concatenación Final Con Moneda

   Set @Numletras = @Numletras + Rtrim(@Nommon) +  ' ' + @Dec_Char +  '/100 '+ @Nommon2

   --

   Select @Numletras As [Número En Letras]

Y despues tienes que poner el campo de usuario:

SP_NUMLETRAS $[OINV.DocTotal], $[OINV.DocCur]

jacobo_agami
Participant
0 Kudos

Muchas gracias por su respuesta.

Saludos

Answers (1)

Answers (1)

Former Member
0 Kudos

segun lo que entiendo y lo poco que conozco... tienes que crear el campo de usuario en la factura y ponerle esta búsqueda formateada

DECLARE @Monto AS float, @Total AS float, @Pagares AS int, @Curr AS char(3), @Moneda AS char(10), @MN AS char (10),
@Idioma as char(2)
SET @Curr = $[OINV.DocCur.0.CHAR]
SET @Total = $[$29.0.NUMBER]
SET @Pagares = $[OINV.Installmnt.0.NUMBER]
SET @Monto = (SELECT ROUND(@Total / @Pagares, 2))
SET @Idioma = $[OINV.U_IME]
IF (@Curr = '$')
BEGIN
  IF (@Idioma = 'ES')
   BEGIN
    SET @Moneda = 'PESOS'
    SET @MN = 'M.N.'
    EXEC MontoEnLetraFact @Monto, @Moneda, @MN
   END
  ELSE
   BEGIN
    SET @Moneda = 'PESOS'
    SET @MN = 'M.N.'
    EXEC MontoEnLetraFact1 @Monto, @Moneda, @MN
   END
   
END
ELSE
BEGIN

  IF (@Idioma = 'ES')
   BEGIN
    SET @Moneda = 'DOLARES'
    SET @MN = 'U.S.D.'
    EXEC MontoEnLetraFact @Monto, @Moneda, @MN
   END
  ELSE
   BEGIN
    SET @Moneda = 'DOLLARS'
    SET @MN = 'U.S.D.'
    EXEC MontoEnLetraFact1 @Monto, @Moneda, @MN
   END
END

solo fijate si en BO usas $ o MXP

Former Member
0 Kudos

Que tal Oscar

Necesitas enviarle tambien el Stored Procedure que se llame MontoEnLetraFact.

Jacobo tendra que crear primero ese stored procedure y despues la consulta que le pusiste, ponersela al campo de usuario en la factura.