IT_VALUES TYPE TT_API_VALI -> screen values table
I_ATNAM TYPE API_VALI-ATNAM -> Characteristic Name
C_DATA TYPE REF TO DATA
NO_DATA_TO_CHANGE
method move_screen_val_to_ref_data.
field-symbols: <ms> type any,
<any> type any,
<table> type any table,
<line> type any,
<p> type any,
<val> type api_vali.
data: m_p(16) type p.
data: mo_type type ref to cl_abap_elemdescr.
data: m_format type cabn-atfor.
data: m_currency type rctmv-waers.
if c_data is initial.
raise no_data_to_change.
endif.
"get characteristic ID
call function 'COC1_FEATURE_CHECK'
exporting
* feature_id = atinn
feature_neutral_name = i_atnam
importing
format = m_format
* feature_id = m_atinn
* feature_neutral_name = atnam
* conversion_exit = l_atkon
* number_of_positions = l_anzst
* set_get_parameter = l_atpid
exceptions
invalid_class_type = 1
missing_feature_information = 2
no_feature_found = 3
no_feature_valid = 4
no_language = 5
others = 6.
if sy-subrc <> 0.
* Error
* raise characteristic_unknown.
endif.
assign m_p to <p>.
assign c_data->* to <ms>.
if sy-subrc eq 0.
assign component i_atnam of structure <ms> to <table>.
if sy-subrc eq 0.
refresh <table>.
loop at it_values assigning <val>.
insert initial line into table <table> assigning <line>.
if sy-subrc eq 0.
case m_format.
when 'NUM' or 'DATE' or 'TIME'.
assign component 'LOW' of structure <line> to <any>.
if sy-subrc eq 0.
free mo_type.
mo_type ?= cl_abap_typedescr=>describe_by_data( p_data = <any> ).
case mo_type->type_kind.
when 'D' or 'T'.
<p> = <val>-atflv.
unpack <p> to <any>.
when others.
<any> = <val>-atflv.
endcase.
endif.
assign component 'HIGH' of structure <line> to <any>.
if sy-subrc eq 0.
free mo_type.
mo_type ?= cl_abap_typedescr=>describe_by_data( p_data = <any> ).
case mo_type->type_kind.
when 'D' or 'T'.
<p> = <val>-atflb.
unpack <p> to <any>.
when others.
<any> = <val>-atflb.
endcase.
endif.
assign component 'UNIT_FROM' of structure <line> to <any>.
if sy-subrc eq 0.
<any> = <val>-atawe.
endif.
assign component 'UNIT_TO' of structure <line> to <any>.
if sy-subrc eq 0.
<any> = <val>-ataw1.
endif.
when 'CURR'.
assign component 'LOW' of structure <line> to <any>.
if sy-subrc eq 0.
if <val>-atawe is initial.
select single msehi into m_currency from cabn where atnam eq i_atnam.
else.
m_currency = <val>-atawe.
endif.
call function 'KKEK_CONVERT_FLOAT_TO_CURR'
exporting
float_imp = <val>-atflv
curr_imp = m_currency
importing
curr_field_exp = <any>
exceptions
overflow = 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.
endif.
assign component 'HIGH' of structure <line> to <any>.
if sy-subrc eq 0.
if <val>-ataw1 is initial.
select single msehi into m_currency from cabn where atnam eq i_atnam.
else.
m_currency = <val>-ataw1.
endif.
call function 'KKEK_CONVERT_FLOAT_TO_CURR'
exporting
float_imp = <val>-atflb
curr_imp = m_currency
importing
curr_field_exp = <any>
exceptions
overflow = 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.
endif.
assign component 'CURRENCY_FROM' of structure <line> to <any>.
if sy-subrc eq 0.
<any> = m_currency.
endif.
assign component 'CURRENCY_TO' of structure <line> to <any>.
if sy-subrc eq 0.
<any> = m_currency.
endif.
when 'CHAR'.
assign component 'LOW' of structure <line> to <any>.
if sy-subrc eq 0.
<any> = <val>-atwrt.
endif.
assign component 'OPTLOW' of structure <line> to <any>.
if sy-subrc eq 0.
<any> = 'EQ'.
endif.
endcase.
assign component 'OPTLOW' of structure <line> to <any>.
if sy-subrc eq 0.
case <val>-atcod.
when 0 or 1 or space.
<any> = 'EQ'.
when 2 or 3 or 9.
<any> = 'GE'.
when 4 or 5 or 8.
<any> = 'GT'.
when 6.
<any> = 'LT'.
when 7.
<any> = 'LE'.
when others.
<any> = 'EQ'.
endcase.
endif.
assign component 'OPTHIGH' of structure <line> to <any>.
if sy-subrc eq 0.
case <val>-atcod.
when 2 or 4 .
<any> = 'LT'.
when 3 or 5.
<any> = 'LE'.
endcase.
endif.
endif.
endloop.
endif.
endif.
endmethod. "move_screen_val_to_ref_data