Histórico da Página
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. 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 |
| 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 | SMALLINT | SIM | 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 | SMALLINT | SIM | 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 | SMALLINT | SIM | 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
Tipo | Descrição | |
---|---|---|
| Valor monetário por extenso da primeira linha. | |
| Valor monetário por extenso da segunda linha. | |
| Valor monetário por extenso da terceira linha. | |
| Valor monetário por extenso | (INPUT 1,39 - OUTPUT Um real e trinta e nove centavos)da quarta linha. |
Exemplo
Bloco de código | ||
---|---|---|
| ||
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"