segunda-feira, 13 de maio de 2013

Função - C14W_NUMBER_CHAR_CONVERSION


*  As vezes temos que trabalhar com numeros flutuantes ( type F )
* e na hora de mostrar percebos que o valor não eh muito amigável
* para um relatório, então usamos a função abaixo e o Key User
* vira nosso fã.
REPORT z_float_char_decimals.

TYPES :
  
BEGIN OF ty_saplane,
    planetype 
TYPE saplane-planetype,
    seatsmax  
TYPE saplane-seatsmax,
    consum    
TYPE saplane-consum,
    con_unit  
TYPE saplane-con_unit,
  
END OF   ty_saplane
  .

* Declaração da estrutura e variáveis
DATA :
  st_saplane 
TYPE ty_saplane,
  vg_char30  
TYPE char30,
  vg_dec     
TYPE esecompavg
  .

* Tela de seleção
SELECTION-
SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
  p_plane 
TYPE saplane-planetype obligatory.
SELECTION-
SCREEN END OF BLOCK   b1.

* Inicio do processo
START-
OF-SELECTION.

  
PERFORM : z_select_saplane,
            z_mostra_dados
          .



*&---------------------------------------------------------------------*
*&      Form  Z_SELECT_SAPLANE
*&---------------------------------------------------------------------*
FORM z_select_saplane .

* Seleção de um único registro pra trabalharmos
  
SELECT SINGLE
     planetype
     seatsmax
     consum
     con_unit
    
FROM saplane
    
INTO st_saplane
    
WHERE planetype = p_plane.

ENDFORM.                    " Z_SELECT_SAPLANE

*&---------------------------------------------------------------------*
*&      Form  Z_MOSTRA_DADOS
*&---------------------------------------------------------------------*
FORM z_mostra_dados .

  
PERFORM z_exibe USING :
          
'Sem tratar o valor Float de consumo'
           st_saplane-planetype
           st_saplane-seatsmax
           st_saplane-consum
           st_saplane-con_unit
          .

* Aqui é a função que muda de float para Char30.
  
CALL FUNCTION 'C14W_NUMBER_CHAR_CONVERSION'
   
EXPORTING
     i_float              = st_saplane-consum
*           I_DEC                = 0
*           I_DECIMALS           = 0
   
IMPORTING
     e_string             = vg_char30
*           E_FLOAT              =
*           E_DEC                =
*           E_DECIMALS           =
   
EXCEPTIONS
     number_too_big       = 
1
     
OTHERS               = 2
            .
  
IF sy-subrc <> 0.
    
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  
ENDIF.

  
PERFORM z_exibe USING :
        
'Tratando o valor Float para Char'
         st_saplane-planetype
         st_saplane-seatsmax
         vg_char30
         st_saplane-con_unit.

* Aqui é a função que muda de char30 para Decimais.
  
CALL FUNCTION 'C14W_CHAR_NUMBER_CONVERSION'
    
EXPORTING
      i_string                         = vg_char30
          
IMPORTING
*            E_FLOAT                          =
            e_dec                            = vg_dec
*            e_decimals                       =
          
EXCEPTIONS
            WRONG_CHARACTERS                 = 
1
            FIRST_CHARACTER_WRONG            = 
2
            ARITHMETIC_SIGN                  = 
3
            MULTIPLE_DECIMAL_SEPARATOR       = 
4
            THOUSANDSEP_IN_DECIMAL           = 
5
            THOUSAND_SEPARATOR               = 
6
            NUMBER_TOO_BIG                   = 
7
            
OTHERS                           = 8
            .
  
IF sy-subrc <> 0.
    
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  
ENDIF.

  
PERFORM z_exibe USING :
        
'Tratando o valor Char para Decimais'
         st_saplane-planetype
         st_saplane-seatsmax
         vg_dec
         st_saplane-con_unit.

ENDFORM.                    " Z_MOSTRA_DADOS

*&---------------------------------------------------------------------*
*&      Form  Z_EXIBE
*&---------------------------------------------------------------------*
FORM z_exibe  USING    p_text
                       p_planetype
                       p_seatsmax
                       p_consum
                       p_con_unit.

  
WRITE : p_text, /
          
'Aeronave        : ', p_planetype, /
          
'Ocupação Máxima : ', p_seatsmax, /
          
'Consumo         : ', p_consum, /
          
'Unidade         : ', p_con_unit, /
          .

ENDFORM.                    " Z_EXIBE
Comentários
0 Comentários

Nenhum comentário:

Postar um comentário