To set percentage value, displayed with the char. %, when you want to store only the number, you can use conversion exit.
Here I made the choice to store the number as a string, otherwise, default value is 0 and in my case, 0% is different from empty value.
Domain :
Create 2 FM, for INPUT and OUTPUT :
In TOP include, declare the constant for character % :
CONSTANTS : gc_percent TYPE char1 VALUE '%' ##NO_TEXT.
FM CONVERSION_EXIT_ZPER0_INPUT :
FUNCTION conversion_exit_zper0_input.
*"----------------------------------------------------------------------
*"*"Interface locale :
*" IMPORTING
*" VALUE(INPUT)
*" EXPORTING
*" VALUE(OUTPUT)
*" EXCEPTIONS
*" INVALID_INPUT
*"----------------------------------------------------------------------
CHECK input IS NOT INITIAL.
IF input CS gc_percent ##NO_TEXT.
REPLACE ALL OCCURRENCES OF gc_percent IN input WITH ''.
ENDIF.
IF NOT input CO '0123456789 ' ##NO_TEXT.
DATA(lv_flag_error) = abap_true.
ENDIF.
IF lv_flag_error IS INITIAL.
TRY.
DATA(lv_percent) = CONV to_int1( input ).
IF lv_percent > 100.
lv_flag_error = abap_true.
ENDIF.
CATCH cx_sy_conversion_no_number.
lv_flag_error = abap_true.
CATCH cx_sy_conversion_overflow.
lv_flag_error = abap_true.
ENDTRY.
ENDIF.
IF lv_flag_error = abap_true.
MESSAGE e086(zdte) RAISING invalid_input.
" Pourcentage : Merci de renseigner un nombre entier entre 0 et 100.
output = input.
RETURN.
ENDIF.
" --------------------------------------------------------
" Le champ est géré en chaine de caractère, car sinon, la
" valeur initiale serait 0. et 0% est différent de vide.
" On est obligé d'aligner le chiffre sur la droite si on
" veut que le tri sur champ texte fonctionne. On corrige
" la saisie utilisateur pour que lors de recherches
" (SELECT) sur ce champs, ça marche correctement.
" --------------------------------------------------------
IF lv_percent = 100.
output = input.
ELSEIF lv_percent >= 10.
output = | { condense( input ) }|. " Ajout d'un espace
ELSE.
output = | { condense( input ) }|. " Ajout de 2 espaces
ENDIF.
ENDFUNCTION.
FM CONVERSION_EXIT_ZPER0_OUTPUT :
FUNCTION conversion_exit_zper0_output.
*"----------------------------------------------------------------------
*"*"Interface locale :
*" IMPORTING
*" VALUE(INPUT)
*" EXPORTING
*" VALUE(OUTPUT)
*"----------------------------------------------------------------------
CHECK input IS NOT INITIAL.
output = condense( input ) && gc_percent.
ENDFUNCTION.
About the author