terça-feira, 19 de junho de 2012
Função - SPELL_AMOUNT
" Eae galera, desculpa a ausência, mas estou respondendo os emails o mais
" rápido possível.... agora vou passar uma função interessante pra quem
" trabalha com alguns clientes que gostam mais do visual da tela... vou
" mostrar uma função onde você infoma um número e ela retorna a o texto do
" mesmo. ex. Importing 55, exporting 'CINQUENTA E CINCO' é legalzinho pra
" documentos e pra tela do User.
REPORT z_spell_amount.
" Tela de seleçãio
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
p_numero TYPE i, " Número
p_langu TYPE sy-langu. " Idioma do texto
SELECTION-SCREEN END OF BLOCK b1.
DATA :
st_words TYPE spell.
CALL FUNCTION 'SPELL_AMOUNT'
EXPORTING
amount = p_numero
* CURRENCY = ' '
* FILLER = ' '
language = p_langu
IMPORTING
in_words = st_words " Estrutura de retorno
EXCEPTIONS
not_found = 1
too_large = 2
OTHERS = 3
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
DATA :
it_split TYPE TABLE OF string,
st_split TYPE string,
vg_txt_final TYPE string.
SPLIT st_words-word AT space INTO TABLE it_split.
BREAK-POINT.
" Aqui eu criei uma tratativa para o retorno pois o mesmo, pelomenos no
" meu ambiente em um certo intervalo aparece 'UM' na frente do 'MIL',
" para não ter mais de uma interpretação eu fiz uma regrinha até o 100 mil,
" com essa regra dá pra se basear pra fazer o resto (máximo 1 bilhão).
IF p_langu <> 'PT'.
MOVE st_words-word TO vg_txt_final.
ELSE.
IF p_numero < 2000.
MOVE st_words-word TO vg_txt_final.
ELSE.
IF p_numero >= 2000
AND p_numero <= 20999 .
LOOP AT it_split INTO st_split.
IF sy-tabix <> 2.
CONCATENATE vg_txt_final st_split INTO vg_txt_final
SEPARATED BY space.
ENDIF.
ENDLOOP.
ELSE.
IF p_numero > 20999.
CASE p_numero.
WHEN 30000 OR 40000 OR 50000 OR 60000
OR 70000 OR 80000 OR 90000.
LOOP AT it_split INTO st_split.
IF sy-tabix <> 2.
CONCATENATE vg_txt_final st_split INTO vg_txt_final
SEPARATED BY space.
ENDIF.
ENDLOOP.
WHEN OTHERS.
LOOP AT it_split INTO st_split.
IF sy-tabix <> 4.
CONCATENATE vg_txt_final st_split INTO vg_txt_final
SEPARATED BY space.
ENDIF.
ENDLOOP.
ENDCASE.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
CONDENSE vg_txt_final.
WRITE vg_txt_final.
0 Comentários
Assinar:
Postar comentários (Atom)