本人诚心接ABAP远程开发任务,价格公道,有需要的联系我,欢迎个人,甲方爸爸,乙方私信联系。
客制化的F4帮助 DEMO 如下
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_COTNO-LOW.
PERFORM FRM_F4_FOR_COTNO USING 'S_COTNO-LOW'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_COTNO-HIGH.
PERFORM FRM_F4_FOR_COTNO USING 'S_COTNO-HIGH'.
FORM FRM_F4_FOR_COTNO USING P_FIELD TYPE HELP_INFO-DYNPROFLD.
TYPES: BEGIN OF TY_COTNO,
COTNO TYPE ZHKEDITR-COTNO,
END OF TY_COTNO.
DATA: LT_COTNO TYPE STANDARD TABLE OF TY_COTNO.
SELECT DISTINCT
COTNO
FROM ZHKEDITR
INTO CORRESPONDING FIELDS OF TABLE LT_COTNO.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'COTNO'
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = P_FIELD
VALUE_ORG = 'S'
TABLES
VALUE_TAB = LT_COTNO
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " FRM_F4_HELP
根据结构自动创建field catlog
* alv字段列表。
DATA: GT_FIELDCAT TYPE LVC_T_FCAT.
DATA: GS_FIELDCAT TYPE LVC_S_FCAT.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
* I_BUFFER_ACTIVE =
I_STRUCTURE_NAME = 'ZSDS_UI_REPORTS_ALV' "alv 结构名
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_BYPASSING_BUFFER =
* I_INTERNAL_TABNAME =
CHANGING
CT_FIELDCAT = GT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
用户单击跳转标准tcode
"首先将需要单击的字段设置成hotspot
LOOP AT GT_FIELDCAT INTO GS_FIELDCAT.
IF GS_FIELDCAT-FIELDNAME = 'VGBEL'.
GS_FIELDCAT-HOTSPOT = 'X'.
ENDIF.
MODIFY GT_FIELDCAT FROM GS_FIELDCAT.
ENDLOOP.
" 这个form里面获取点击的行和字段的值
FORM FRM_ALV_USERCOMMAND USING IV_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA:LS_STABLE TYPE LVC_S_STBL. " 稳定刷新
DATA LCL_ALV TYPE REF TO CL_GUI_ALV_GRID.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = LCL_ALV.
CALL METHOD LCL_ALV->CHECK_CHANGED_DATA.
*
GV_OKCODE = IV_UCOMM.
CASE GV_OKCODE.
WHEN '&IC1'.
"获取行号
READ TABLE GT_DATA INTO GS_DATA INDEX RS_SELFIELD-TABINDEX.
IF RS_SELFIELD-FIELDNAME = 'VGBEL'.
SET PARAMETER ID 'VL' FIELD GS_DATA-VGBEL. "F1查看事务代码屏幕的parameter ID
CALL TRANSACTION 'VL33N' AND SKIP FIRST SCREEN. "调用事务代码跳过初始屏幕
ENDIF.
WHEN 'SEND'.
WHEN OTHERS.
ENDCASE.
LS_STABLE-ROW = 'X'.
LS_STABLE-COL = 'X'.
* 刷新ALV 基于行列的稳定刷新
CALL METHOD LCL_ALV->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LS_STABLE.
ENDFORM. "frm_alv_usercommand
设置单元格可编辑
*首先在这个结构中增加 CELTAB
DATA: BEGIN OF ty_data.
INCLUDE STRUCTURE zsds_sales_receipt_alv.
DATA: celtab TYPE lvc_t_styl.
DATA: BOX TYPE CHAR01.
DATA: END OF ty_data.
DATA: gs_data LIKE STANDARD TABLE OF ty_data.
DATA: gs_data LIKE ty_data.
*第二步在layout 中 设置
gs_layout-stylefname = 'CELTAB'. "将内表中的字段名存入显示格式(设置是否可编辑)
*第三步在field catlog中设置部分列全部可编辑
gs_fieldcat-edit = 'X'.
*第四步根据条件去设置是否具体某一行是否可编辑
"设置单元格不可输入
DATA: ls_celtab TYPE lvc_s_styl.
CLEAR: ls_celtab.
ls_celtab-fieldname = 'ZWRBTR'.
ls_celtab-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_celtab INTO TABLE gs_yys-celtab.
制定输入内容的弹窗,无需对话屏幕
实现效果如下:
实现代码如下:
DATA:lv_ret TYPE c,
lt_tab TYPE STANDARD TABLE OF sval WITH HEADER LINE.
CLEAR lt_tab.
lt_tab-tabname = 'ZMMS_HARDWARE_INVENTORY_ALV'.
lt_tab-fieldname = 'ZCWEI'.
APPEND lt_tab.
CLEAR lt_tab.
lt_tab-tabname = 'ZMMS_HARDWARE_INVENTORY_ALV'.
lt_tab-fieldname = 'ZKCSL'.
lt_tab-fieldtext = '转移数量'.
lt_tab-field_attr = ''.
* lt_tab-comp_tab = 'ZMMS_HARDWARE_INVENTORY_ALV'.
* lt_tab-comp_field = 'ZKCSL'.
APPEND lt_tab.
CALL FUNCTION 'POPUP_GET_VALUES_USER_HELP'
EXPORTING
f4_formname = 'ZCWEI_F4' "F4搜索帮助
f4_programname = 'ZMMR057'
programname = 'ZMMR057' "弹窗的程序
formname = 'FRM_ZCWEI_CHECK' "校验输入值
popup_title = '库存调整输入框' "弹窗名
IMPORTING
returncode = lv_ret
TABLES
fields = lt_tab
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
READ TABLE lt_tab WITH KEY fieldname = 'ZCWEI'.
IF sy-subrc = 0.
CONDENSE lt_tab-value.
ev_zcwei = lt_tab-value.
ENDIF.
READ TABLE lt_tab WITH KEY fieldname = 'ZKCSL'.
IF sy-subrc = 0.
CONDENSE lt_tab-value.
ev_menge = lt_tab-value.
ENDIF.
ENDIF.
*F4 帮助
FORM zcwei_f4 USING tabname fieldname display
CHANGING returncode value.
DATA:ls_fields TYPE sval.
DATA: BEGIN OF f_tab OCCURS 10.
INCLUDE STRUCTURE help_value.
DATA: END OF f_tab,
BEGIN OF v_tab OCCURS 200,
value(40) TYPE c,
END OF v_tab.
DATA: help_fieldname LIKE help_info-fieldname. "B20K069688
IF fieldname = 'ZCWEI'.
MOVE fieldname TO help_fieldname. "B20K069688
f_tab-tabname = 'ZTM_CWXXB'.
f_tab-fieldname = 'ZCWEI'.
f_tab-selectflag = 'X'.
APPEND f_tab.
.
DATA lt_ztm_cwxxb TYPE TABLE OF ztm_cwxxb.
DATA ls_ztm_cwxxb TYPE ztm_cwxxb.
CLEAR:lt_ztm_cwxxb,ls_ztm_cwxxb.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE lt_ztm_cwxxb
FROM ztm_cwxxb
WHERE werks = gs_data-werks
AND lgort = gs_data-lgort.
LOOP AT lt_ztm_cwxxb INTO ls_ztm_cwxxb.
v_tab = ls_ztm_cwxxb-zcwei.
APPEND v_tab.
ENDLOOP.
CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'
EXPORTING
display = display "B20K011756
fieldname = help_fieldname "B20K069688
tabname = tabname
IMPORTING
select_value = value
TABLES
valuetab = v_tab
fields = f_tab.
gv_zcwei = value.
ENDIF.
ENDFORM.
*检查输入值
FORM frm_zcwei_check TABLES fields STRUCTURE sval
CHANGING error STRUCTURE svale.
*
DATA lt_ztm_cwxxb TYPE TABLE OF ztm_cwxxb.
DATA lv_zcwei TYPE ztm_cwxxb-zcwei.
DATA: lv_menge TYPE menge_d.
CLEAR:lv_zcwei,lt_ztm_cwxxb.
DATA: ls_fields TYPE sval.
READ TABLE fields INTO ls_fields WITH KEY fieldname = 'ZCWEI'.
IF sy-subrc = 0.
CONDENSE ls_fields-value.
lv_zcwei = ls_fields-value.
IF lv_zcwei = gs_data-zcwei.
CLEAR error.
error-errortab = 'ZMMS_HARDWARE_INVENTORY_ALV'. "*019i
error-errorfield = 'ZCWEI'. "*019i
error-msgty = 'E'.
error-msgid = 'ZMM01'.
error-msgno = '002'.
error-msgv1 = |转移仓位:{ lv_zcwei }与原仓位相同!|.
EXIT.
ELSE.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE lt_ztm_cwxxb
FROM ztm_cwxxb
WHERE werks = gs_data-werks
AND lgort = gs_data-lgort
AND zcwei = lv_zcwei.
IF sy-subrc <> 0.
CLEAR error.
error-errortab = 'ZMMS_HARDWARE_INVENTORY_ALV'. "*019i
error-errorfield = 'ZCWEI'. "*019i
error-msgty = 'E'.
error-msgid = 'ZMM01'.
error-msgno = '002'.
error-msgv1 = |仓位:{ lv_zcwei }在仓位信息表中不存在!|.
EXIT.
ENDIF.
ENDIF.
ENDIF.
READ TABLE fields INTO ls_fields WITH KEY fieldname = 'ZKCSL'.
IF sy-subrc = 0.
CONDENSE ls_fields-value.
lv_menge = ls_fields-value.
IF lv_menge > gs_data-zkcsl.
CLEAR error.
error-errortab = 'ZMMS_HARDWARE_INVENTORY_ALV'. "*019i
error-errorfield = 'ZKCSL'. "*019i
error-msgty = 'E'.
error-msgid = 'ZMM01'.
error-msgno = '002'.
error-msgv1 = |转移数量:{ lv_menge }大于仓位内剩余数量!|.
EXIT.
ENDIF.
ENDIF.
ENDFORM.
F4帮助弹出选择框 供选择
实现效果如下
实现代码如下
FORM frm_get_zcwei_data USING p_fieldname TYPE lvc_fname
p_row_no TYPE lvc_s_roid
pr_event_data TYPE REF TO cl_alv_event_data.
TYPES: BEGIN OF ty_pop.
TYPES:c_sel TYPE char1.
INCLUDE TYPE ztm_sxhjkcb.
TYPES: maktx TYPE makt-maktx,
END OF ty_pop.
DATA: lt_popup TYPE TABLE OF ty_pop.
DATA: ls_selfield TYPE slis_selfield.
DATA: lv_tabname TYPE char20.
DATA: lv_structure TYPE dd02l-tabname.
DATA: lv_where TYPE string.
FIELD-SYMBOLS: <itab> TYPE lvc_t_modi.
DATA: lt_return TYPE STANDARD TABLE OF ddshretval,
ls_return TYPE ddshretval.
DATA: ls_mod_cell TYPE lvc_s_modi.
DATA: lt_item LIKE STANDARD TABLE OF ty_item.
CHECK p_fieldname = 'ZCWEI'.
READ TABLE gt_item INTO DATA(ls_item) INDEX p_row_no-row_id.
READ TABLE gt_head INTO DATA(ls_head) WITH KEY vbeln = ls_item-vbeln
posnr = ls_item-posnr.
IF ls_item-idnrk IS NOT INITIAL.
lv_where = 'MATNR EQ @LS_ITEM-IDNRK'.
ENDIF.
IF ls_head-werks IS NOT INITIAL.
lv_where = lv_where && ' AND ' && ' WERKS EQ @LS_HEAD-WERKS'.
ENDIF.
IF ls_head-lgort IS NOT INITIAL.
lv_where = lv_where && ' AND ' && ' LGORT EQ @LS_HEAD-LGORT'.
ENDIF.
IF ls_item-charg IS NOT INITIAL.
lv_where = lv_where && ' AND ' && ' CHARG EQ @LS_ITEM-CHARG'.
ENDIF.
* IF ls_zsmmr013n_i4-lifnr IS NOT INITIAL.
* lv_where = lv_where && ' AND ' && ' ZCSHA EQ @LS_ZSMMR013N_I4-LIFNR'.
* ENDIF.
IF ls_item-vbeln IS NOT INITIAL.
lv_where = lv_where && ' AND ' && ' VBELN EQ @LS_ITEM-VBELN'.
ENDIF.
IF ls_item-posnr IS NOT INITIAL.
lv_where = lv_where && ' AND ' && ' VBELP EQ @LS_ITEM-POSNR'.
ENDIF.
SELECT * FROM ztm_sxhjkcb WHERE (lv_where) INTO CORRESPONDING FIELDS OF TABLE @lt_popup.
lv_tabname = 'LT_POPUP'.
lv_structure = 'ZTM_SXHJKCB'.
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
i_checkbox_fieldname = 'C_SEL'
i_tabname = lv_tabname
i_structure_name = lv_structure
i_screen_start_column = 10
i_screen_start_line = 10
i_screen_end_column = 200
i_screen_end_line = 30
IMPORTING
es_selfield = ls_selfield
TABLES
t_outtab = lt_popup
EXCEPTIONS
program_error = 1
OTHERS = 2.
READ TABLE lt_popup TRANSPORTING NO FIELDS WITH KEY c_sel = 'X'.
IF sy-subrc <> 0.
RETURN.
ENDIF.
LOOP AT lt_popup ASSIGNING FIELD-SYMBOL(<lfs_popup>) WHERE c_sel = 'X'.
APPEND INITIAL LINE TO lt_item ASSIGNING FIELD-SYMBOL(<fs_item>).
MOVE-CORRESPONDING ls_item TO <fs_item>.
<fs_item>-zcwei = <lfs_popup>-zcwei.
<fs_item>-zzjsl = <lfs_popup>-zkcsl.
<fs_item>-charg = <lfs_popup>-charg.
ENDLOOP.
DELETE gt_item INDEX p_row_no-row_id.
APPEND LINES OF lt_item TO gt_item.
pr_event_data->m_event_handled = 'X'.
CHECK sy-subrc IS INITIAL AND ls_return-fieldval IS NOT INITIAL.
ASSIGN pr_event_data->m_data->* TO <itab>.
ls_mod_cell-row_id = p_row_no-row_id.
ls_mod_cell-fieldname = p_fieldname.
ls_mod_cell-value = ls_return-fieldval.
APPEND ls_mod_cell TO <itab>.
ENDFORM.
SAP 标准消息的报错
DATA: gt_smesg TYPE tsmesg WITH HEADER LINE.
PERFORM frm_add_message USING 'E' lv_message '' .
FORM frm_add_message USING uv_msgty uv_msgv1 uv_msgv2 .
APPEND INITIAL LINE TO gt_smesg ASSIGNING FIELD-SYMBOL(<lfs_smesg>).
<lfs_smesg>-msgty = uv_msgty.
<lfs_smesg>-arbgb = 'ZMM01'.
<lfs_smesg>-txtnr = '000'.
<lfs_smesg>-msgv1 = uv_msgv1.
<lfs_smesg>-msgv2 = uv_msgv2.
ENDFORM.
CALL FUNCTION 'FB_MESSAGES_DISPLAY_POPUP'
EXPORTING
it_smesg = gt_smesg[]
EXCEPTIONS
no_messages = 1
popup_cancelled = 2
OTHERS = 3.
自动设置全屏
DATA: GO_SPLITTER TYPE REF TO CL_GUI_SPLITTER_CONTAINER.
DATA: GO_CONTAINER TYPE REF TO CL_GUI_CONTAINER,
GO_GRID TYPE REF TO CL_GUI_ALV_GRID.
"自动设置全屏
IF GO_SPLITTER IS INITIAL .
CREATE OBJECT GO_SPLITTER
EXPORTING
PARENT = CL_GUI_CONTAINER=>SCREEN0
ROWS = 1
COLUMNS = 1.
CALL METHOD GO_SPLITTER->GET_CONTAINER
EXPORTING
ROW = 1
COLUMN = 1
RECEIVING
CONTAINER = GO_CONTAINER.
ENDIF .
CREATE OBJECT GO_GRID
EXPORTING
I_PARENT = GO_CONTAINER.
SPLITTER 设置分屏
DATA: GO_SPLITTER TYPE REF TO CL_GUI_SPLITTER_CONTAINER, "控件拆分
GO_CONTAINER1 TYPE REF TO CL_GUI_CONTAINER,
GO_CONTAINER2 TYPE REF TO CL_GUI_CONTAINER,
GO_GRID1 TYPE REF TO CL_GUI_ALV_GRID,
GO_GRID2 TYPE REF TO CL_GUI_ALV_GRID.
IF GO_SPLITTER IS INITIAL .
CREATE OBJECT GO_SPLITTER
EXPORTING
PARENT = CL_GUI_CONTAINER=>SCREEN0
ROWS = 2
COLUMNS = 1.
CALL METHOD GO_SPLITTER->GET_CONTAINER
EXPORTING
ROW = 1
COLUMN = 1
RECEIVING
CONTAINER = GO_CONTAINER1.
CALL METHOD GO_SPLITTER->GET_CONTAINER
EXPORTING
ROW = 2
COLUMN = 1
RECEIVING
CONTAINER = GO_CONTAINER2.
ENDIF .
设置屏幕不可输入
LOOP AT SCREEN.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDLOOP.
下载模板
AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN 'FC01'.
IF p_r1 IS NOT INITIAL .
PERFORM frm_download_template USING p_file
'ZMM013_OB'
'Outboud Delivery Upload Template_'.
ENDIF.
ENDCASE.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_FILE
*& --> P_
*&---------------------------------------------------------------------*
FORM frm_download_template USING p_file
VALUE(p_objid)
VALUE(p_name)
.
DATA: l_wa_objdata TYPE wwwdatatab,
l_dl_filename TYPE rlgrap-filename,
l_filename TYPE string,
l_path TYPE string,
l_fullpath TYPE string,
l_default_name TYPE string.
CONCATENATE p_name sy-datum INTO l_default_name .
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
default_extension = 'xlsx'
default_file_name = l_default_name
file_filter = '*.xlsx'
CHANGING
filename = l_filename
path = l_path
fullpath = l_fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CHECK NOT l_fullpath IS INITIAL.
l_dl_filename = l_fullpath.
l_wa_objdata-relid = 'MI'.
l_wa_objdata-objid = p_objid.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = l_wa_objdata
destination = l_dl_filename.
p_file = l_dl_filename.
ENDFORM.
读取excel
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_EXCEL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_upload_excel .
DATA: lcl_structure TYPE REF TO cl_abap_structdescr,
lt_component TYPE STANDARD TABLE OF abap_componentdescr,
ls_component TYPE abap_componentdescr.
DATA: BEGIN OF lt_excel OCCURS 0. "excel上载内表
INCLUDE STRUCTURE alsmex_tabline.
DATA: END OF lt_excel.
FIELD-SYMBOLS: <fs_excel> LIKE LINE OF lt_excel,
<fs_value>.
"根据结构获取字段名
lcl_structure ?= cl_abap_typedescr=>describe_by_data( gs_outbound_xls ).
lt_component = lcl_structure->get_components( ).
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = 3
i_end_col = 256
i_end_row = 65000
TABLES
intern = lt_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
SORT lt_excel BY row col.
LOOP AT lt_excel ASSIGNING <fs_excel>.
" 将值动态分配
ASSIGN COMPONENT <fs_excel>-col OF STRUCTURE gs_outbound_xls TO <fs_value>.
IF sy-subrc EQ 0.
"获取当前字段名
READ TABLE lt_component INTO ls_component INDEX <fs_excel>-col.
IF sy-subrc = 0.
CASE ls_component-name.
WHEN 'MENGE'.
PERFORM frm_check_number USING ls_component-name
<fs_excel>-value
CHANGING <fs_value>.
WHEN 'MATNR'.
PERFORM frm_check_matnr USING ls_component-name
<fs_excel>-value
CHANGING <fs_value>.
WHEN 'VBELN'.
PERFORM frm_check_vbeln USING ls_component-name
<fs_excel>-value
CHANGING <fs_value>.
WHEN 'BUDAT'.
PERFORM frm_check_date USING ls_component-name
<fs_excel>-value
CHANGING <fs_value>.
WHEN OTHERS.
<fs_value> = <fs_excel>-value.
ENDCASE.
ELSE.
<fs_value> = <fs_excel>-value.
ENDIF.
ENDIF.
"在行变化的时候 将每行的数据添加到内表
AT END OF row.
MOVE-CORRESPONDING gs_outbound_xls TO gs_outbound.
APPEND gs_outbound TO gt_outbound.
CLEAR:gs_outbound,gs_outbound_xls.
ENDAT.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_NUMBER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> FS_EXCEL>_VALUE
*&---------------------------------------------------------------------*
FORM frm_check_number USING iv_field
iv_value
CHANGING ev_value.
DATA: lv_message TYPE string.
DATA: lv_data TYPE p.
IF iv_value IS NOT INITIAL .
CATCH SYSTEM-EXCEPTIONS conversion_errors = 1.
MOVE iv_value TO lv_data.
ENDCATCH.
IF sy-subrc NE 0.
lv_message = |Quantity or Amount field { iv_field } value { iv_value } is illegal!|.
PERFORM frm_set_error_message USING lv_message.
ELSE.
ev_value = lv_data.
ENDIF.
ELSE.
lv_message = |Quantity or Amount field { iv_field } value is null!|.
PERFORM frm_set_error_message USING lv_message.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_ERROR_MESSAGE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LV_MESSAGE
*&---------------------------------------------------------------------*
FORM frm_set_error_message USING iv_message TYPE string.
FIELD-SYMBOLS:<fs_message> .
IF p_r1 IS NOT INITIAL .
ASSIGN COMPONENT 'MESSAGE' OF STRUCTURE gs_outbound TO <fs_message>.
ENDIF.
IF p_r2 IS NOT INITIAL .
ASSIGN COMPONENT 'MESSAGE' OF STRUCTURE gs_inbound TO <fs_message>.
ENDIF.
IF p_r3 IS NOT INITIAL .
ASSIGN COMPONENT 'MESSAGE' OF STRUCTURE gs_trans TO <fs_message>.
ENDIF.
IF <fs_message> IS ASSIGNED .
CONCATENATE <fs_message> iv_message INTO <fs_message>.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_MATNR
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LS_COMPONENT_NAME
*& --> <FS_EXCEL>_VALUE
*&---------------------------------------------------------------------*
FORM frm_check_matnr USING iv_field
iv_value
CHANGING ev_value.
DATA: lv_message TYPE string.
DATA: lv_matnr TYPE matnr.
DATA: lv_meins TYPE meins.
DATA: lv_maktx TYPE maktx.
IF iv_value IS NOT INITIAL .
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = iv_value
IMPORTING
output = lv_matnr
EXCEPTIONS
length_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF sy-subrc NE 0.
lv_message = |Material field { iv_field } value { iv_value } is illegal!|.
PERFORM frm_set_error_message USING lv_message.
ELSE.
SELECT SINGLE meins,
maktx
INTO ( @lv_meins,
@lv_maktx )
FROM mara
INNER JOIN makt ON mara~matnr = makt~matnr
WHERE mara~matnr = @lv_matnr.
IF sy-subrc = 0.
PERFORM frm_set_value USING lv_meins
lv_maktx.
ELSE.
lv_message = |Material field { iv_field } value { iv_value } is not exist!|.
PERFORM frm_set_error_message USING lv_message.
ENDIF.
ev_value = lv_matnr.
ENDIF.
ELSE.
lv_message = |Material field { iv_field } value is null!|.
PERFORM frm_set_error_message USING lv_message.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_VBELN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LS_COMPONENT_NAME
*& --> <FS_EXCEL>_VALUE
*& <-- <FS_VALUE>
*&---------------------------------------------------------------------*
FORM frm_check_vbeln USING iv_field
iv_value
CHANGING ev_value.
DATA: lv_message TYPE string.
DATA: lv_vbeln TYPE vbeln.
IF iv_value IS NOT INITIAL .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = iv_value
IMPORTING
output = lv_vbeln.
IF sy-subrc NE 0.
lv_message = |Delivery field { iv_field } value { iv_value } is illegal!|.
PERFORM frm_set_error_message USING lv_message.
ELSE.
ev_value = lv_vbeln.
ENDIF.
ELSE.
lv_message = |Delivery field { iv_field } value is null!|.
PERFORM frm_set_error_message USING lv_message.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LS_COMPONENT_NAME
*& --> <FS_EXCEL>_VALUE
*& <-- <FS_VALUE>
*&---------------------------------------------------------------------*
FORM frm_check_date USING iv_field
iv_value
CHANGING ev_value.
DATA: lv_message TYPE string.
DATA: lv_date TYPE datum.
DATA: lv_int TYPE int4.
IF iv_value IS NOT INITIAL .
CATCH SYSTEM-EXCEPTIONS conversion_errors = 1.
MOVE iv_value TO lv_date.
MOVE iv_value TO lv_int.
ENDCATCH.
IF sy-subrc NE 0.
lv_message = |Date field { iv_field } value { iv_value } is illegal!|.
PERFORM frm_set_error_message USING lv_message.
ELSE.
ev_value = lv_date.
ENDIF.
ELSE.
lv_message = |Date field { iv_field } value is null!|.
PERFORM frm_set_error_message USING lv_message.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_VALUE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LV_MEINS
*& --> LV_MAKTX
*&---------------------------------------------------------------------*
FORM frm_set_value USING iv_meins TYPE meins
iv_maktx TYPE maktx.
FIELD-SYMBOLS:<fs_meins> .
FIELD-SYMBOLS:<fs_maktx> .
IF p_r1 IS NOT INITIAL .
ASSIGN COMPONENT 'MEINS' OF STRUCTURE gs_outbound TO <fs_meins>.
ASSIGN COMPONENT 'MAKTX' OF STRUCTURE gs_outbound TO <fs_maktx>.
ENDIF.
IF p_r2 IS NOT INITIAL .
ASSIGN COMPONENT 'MEINS' OF STRUCTURE gs_inbound TO <fs_meins>.
ASSIGN COMPONENT 'MAKTX' OF STRUCTURE gs_inbound TO <fs_maktx>.
ENDIF.
IF p_r3 IS NOT INITIAL .
ASSIGN COMPONENT 'MEINS' OF STRUCTURE gs_trans TO <fs_meins>.
ASSIGN COMPONENT 'MAKTX' OF STRUCTURE gs_trans TO <fs_maktx>.
ENDIF.
IF <fs_meins> IS ASSIGNED .
<fs_meins> = iv_meins.
ENDIF.
IF <fs_maktx> IS ASSIGNED .
<fs_maktx> = iv_maktx.
ENDIF.
ENDFORM.