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.
 
Comentários
0 Comentários

Nenhum comentário:

Postar um comentário