* 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,
* 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