Páginas filhas
  • LOG0380_extenso_moeda

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Retorna um valor monetário por extenso, informando o código da moeda desejada.

Sintaxe

Bloco de código
log0380_extenso_moeda(<l_cod_moeda>, <p_val> , <l_comp_l1> , <l_comp_l2> , <l_comp_l3> , <l_comp_l4>) => SMALLINT | <p_val> => DECIMAL CHAR, CHAR, CHAR, CHAR

Parâmetros

Nome

Tipo

Obrigatório?

Descrição

l_cod_moeda
SMALLINT

SIM

Código da moeda.

(aviso) Precisam existir informações registradas na tabela MOEDA_COMPL. Estes dados são utilizados para montar a descrição por extenso de cada moeda. As informações são cadastradas de forma silábica. Para maiores detalhes acesse documentação do programa CON10008.

p_val
DECIMAL(15,2)
SIM

Valor a ser convertidoque deseja obter o a descrição por extenso.

l_comp_l1

SMALLINT

SIM

Tamanho de caracteres da descrição por extenso a ser retornado como primeira linha de dados.

Para mais detalhes a respeito deste parâmetro acesse o tópico Observações abaixo.

l_comp_l2
SMALLINTSIM

Tamanho de caracteres da descrição por extenso a ser retornado como segunda linha de dados.

Para mais detalhes a respeito deste parâmetro acesse o tópico Observações abaixo.

l_comp_l3
SMALLINTSIM

Tamanho de caracteres da descrição por extenso a ser retornado como terceira linha de dados.

Para mais detalhes a respeito deste parâmetro acesse o tópico Observações abaixo.

l_comp_l4
SMALLINTSIM

Tamanho de caracteres da descrição por extenso a ser retornado como quarta linha de dados.

Para mais detalhes a respeito deste parâmetro acesse o tópico Observações abaixo.


Retorno

VARCHAR (INPUT 1,39 - OUTPUT Um real e trinta e nove centavos)

Tipo

Descrição

CHAR

Valor monetário por extenso da primeira linha.

CHAR

Valor monetário por extenso da segunda linha.

CHAR

Valor monetário por extenso da terceira linha.

CHAR

Valor monetário por extenso

da quarta linha.

Exemplo

Bloco de código
linenumberstrue
DATABASE logix

MAIN
   DEFINE l_moeda LIKE moeda_compl.cod_moeda
   DEFINE l_den_moeda LIKE moeda.den_moeda

IF log0380_existe_moeda_compl() THEN
   DECLARE cq_teste CURSOR FOR
   SELECT moeda.cod_moeda, moeda.den_moeda
     FROM moeda_compl, moeda
    WHERE moeda_compl.cod_moeda = moeda.cod_moeda
    ORDER BY moeda.cod_moeda
ELSE
   DECLARE cq_teste CURSOR FOR
   SELECT moeda.cod_moeda, moeda.den_moeda
     FROM moeda
    ORDER BY moeda.cod_moeda
END IF

   FOREACH cq_teste INTO l_moeda, l_den_moeda
      CALL extenso1_processa(l_moeda, l_den_moeda, 11183.18, 50, 70,70, 100)
      CALL extenso1_processa(l_moeda, l_den_moeda, 0.29, 70, 40,70, 100)
      CALL extenso1_processa(l_moeda, l_den_moeda, 0.01, 40, 70,70, 100)
      CALL extenso1_processa(l_moeda, l_den_moeda, 83.00, 42, 78,60, 100)
      CALL extenso1_processa(l_moeda, l_den_moeda, 19437.10, 35, 75,70, 100)
      CALL extenso1_processa(l_moeda, l_den_moeda, 18.27, 30, 70,70, 100)
      CALL extenso1_processa(l_moeda, l_den_moeda, 10000.00, 65, 50,70, 100)
      CALL extenso1_processa(l_moeda, l_den_moeda, 1.39, 35, 80,70, 100)
   END FOREACH

##MOEDA VAZIA (NULL) - DEVE ASSUMIR REAL
   LET l_moeda = NULL
   LET l_den_moeda = NULL   
      CALL extenso1_processa(l_moeda, l_den_moeda, 11183.18, 50, 70,70, 100)
      CALL extenso1_processa(l_moeda, l_den_moeda, 0.29, 70, 40,70, 100)
      CALL extenso1_processa(l_moeda, l_den_moeda, 0.01, 40, 70,70, 100)
      CALL extenso1_processa(l_moeda, l_den_moeda, 83.00, 42, 78,60, 100)
      CALL extenso1_processa(l_moeda, l_den_moeda, 19437.10, 35, 75,70, 100)
      CALL extenso1_processa(l_moeda, l_den_moeda, 18.27, 30, 70,70, 100)
      CALL extenso1_processa(l_moeda, l_den_moeda, 10000.00, 65, 50,70, 100)
      CALL extenso1_processa(l_moeda, l_den_moeda, 1.39, 35, 80,70, 100)

##MOEDA NÃO CADASTRADA - DEVE ASSUMIR REAL
      CALL extenso1_processa(-1, l_den_moeda, 11183.18, 50, 70,70, 100)
      CALL extenso1_processa(-1, l_den_moeda, 0.29, 70, 40,70, 100)
      CALL extenso1_processa(-1, l_den_moeda, 0.01, 40, 70,70, 100)
      CALL extenso1_processa(-1, l_den_moeda, 83.00, 42, 78,60, 100)
      CALL extenso1_processa(-1, l_den_moeda, 19437.10, 35, 75,70, 100)
      CALL extenso1_processa(-1, l_den_moeda, 18.27, 30, 70,70, 100)
      CALL extenso1_processa(-1, l_den_moeda, 10000.00, 65, 50,70, 100)
      CALL extenso1_processa(-1, l_den_moeda, 1.39, 35, 80,70, 100)

END MAIN

FUNCTION extenso1_processa(l_cod_moeda,l_den_moeda,l_val,l_comp_l1,l_comp_l2,l_comp_l3,l_comp_l4)
  DEFINE l_val               DECIMAL(15,2),
      		 l_cod_moeda         SMALLINT,
      		 l_den_moeda         CHAR(30),
         l_comp_l1           SMALLINT,
         l_comp_l2           SMALLINT,
         l_comp_l3           SMALLINT,
         l_comp_l4           SMALLINT,
         l_lin3           VARCHAR(200),
         l_lin4           VARCHAR(200),
         l_lin1           VARCHAR(200),
         l_lin2           VARCHAR(200)

  CALL conout("MOEDA "||l_cod_moeda||" - "||l_den_moeda||" VALOR = "||l_val)

  CALL log0380_extenso_moeda(l_cod_moeda, l_val, l_comp_l1, l_comp_l2,l_comp_l3, l_comp_l4) RETURNING l_lin1, l_lin2, l_lin3, l_lin4

  CALL conout("EXTENSO ",l_lin1,l_lin2,l_lin3,l_lin4)

  RETURN l_lin1, l_lin2, l_lin3, l_lin4
END FUNCTION

Informações

Fontes: log0380.4gl

Observações

Os parâmetros de tamanho de linha (parâmetros l_comp_l1, l_comp_l2, l_comp_l3 e l_comp_l4) tem como objetivo permitir a divisão do valor por extenso em até 4 linhas de texto, respeitando a separação silábica. O valor por extenso, quando é impresso em um cheque, por exemplo, precisa ser impresso em mais linhas e com isso existe a necessidade de retornar o valor em até 4 linhas, podendo definir a quantidade de caracteres desse valor por extenso em cada linha, respeitando a separação silábica quando quando ocorrer a falta de espaço em uma linha para uma palavra completa.


Exemplo:

   VALOR: 12,19

   Linha 1 com 20 caracteres: "Doze reais e dezeno-"   

   Linha 2 com 30 caracteres: "ve centavos"