一、弹出文本框
1.1、使用函数:TERM_CONTROL_EDIT
1.2、函数参数解释:titel→文本框名称,langu→语言,gt_textlines→将要输入的文本内表
1.3、文本框效果:
1.4、废话不说,直接上代码:
DATA:gt_textlines TYPE string_table WITH HEADER LINE.
DATA:BEGIN OF ls_ZJSNO,
zjsno TYPE char15,
END OF ls_ZJSNO.
DATA:lT_ZJSNO LIKE TABLE OF ls_ZJSNO.
DATA:lv_TDLINE TYPE tdline.
DATA:l_len TYPE i.
DATA:w_ZJSNO TYPE char15.
DATA:l_zbz TYPE char255.
CLEAR:lt_ZJSNO.
LOOP AT gt_two INTO gs_two WHERE checkbox = 'X'.
ls_ZJSNO-zjsno = gs_two-zjsno.
APPEND ls_ZJSNO TO lt_ZJSNO.
CLEAR:gs_two,ls_ZJSNO.
ENDLOOP.
SORT lt_ZJSNO BY zjsno.
DELETE ADJACENT DUPLICATES FROM lt_ZJSNO COMPARING zjsno.
DELETE lt_ZJSNO WHERE zjsno = ''.
IF lt_ZJSNO IS INITIAL.
MESSAGE '请选择已生成单据的项目' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN 100.
ENDIF.
CLEAR:l_zbz,gt_textlines.
CALL FUNCTION 'TERM_CONTROL_EDIT'
EXPORTING
titel = '发票备注'
langu = '1'
TABLES
textlines = gt_textlines
EXCEPTIONS
user_cancelled = 1
OTHERS = 2.
LOOP AT gt_textlines.
CONDENSE gt_textlines NO-GAPS.
l_len = strlen( gt_textlines ).
IF l_len > 255.
MESSAGE '您输入的备注超过了255字符,请检查' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN 100.
ENDIF.
IF l_zbz IS INITIAL.
l_zbz = gt_textlines.
ENDIF.
ENDLOOP.
SORT gt_two BY zjsno.
SORT lt_ZJSNO BY zjsno.
CLEAR:w_ZJSNO.
IF l_zbz IS NOT INITIAL.
LOOP AT gt_two INTO gs_two.
READ TABLE lt_ZJSNO INTO ls_ZJSNO WITH KEY zjsno = gs_two-zjsno BINARY SEARCH.
IF sy-subrc = 0.
gs_two-checkbox = 'X'.
gs_two-zmark = l_zbz.
ENDIF.
*_________________________________________更新抬头G表的发票备注
IF w_ZJSNO IS INITIAL OR w_ZJSNO <> ls_ZJSNO-zjsno.
w_ZJSNO = ls_ZJSNO-zjsno.
UPDATE ztfico007g SET zmark = l_zbz
WHERE zjsno = ls_ZJSNO-zjsno.
ENDIF.
MODIFY gt_two FROM gs_two.
CLEAR:gs_two.
ENDLOOP.
ENDIF.
二、弹出参数框的使用
2.1、使用函数:POPUP_GET_VALUES
2.2、函数参数解释:popup_title→参数框名称;start_column→参数框宽度;start_row→参数框高度;lt_mess→参数内表(内表中常用字段的解释:TABNAME→参考表名,FIELDNAME→参考表的参考字段名,fieldtext→字段文本名称,FIELD_OBL→是否必输,value→参数值,field_attr→外观属性,值含义范围见下图)
一般正常输入数据会直接空着,密码不显示可以选04(例子没有选),弹出前赋值做显示用选02,但我下面的例子选的05它也可以(奇怪)
2.3、参数框效果图:
2.4、上代码:
DATA:lv_MESSAGE TYPE bapi_msg,
lv_MSGTYPE TYPE bapi_mtype,
lv_errcode TYPE char4,
lv_description TYPE char100.
DATA:lt_mess LIKE TABLE OF sval WITH HEADER LINE.
DATA:rtncode TYPE char1.
DATA:lv_zpass TYPE char10.
DATA:lv_zfpdm TYPE zfpdm.
DATA:lv_pbs TYPE char1.
DATA:l_lines TYPE i.
DATA:BEGIN OF ls_zjsno,
zjsno TYPE char15,
maber TYPE char2,
zfpdm TYPE zfpdm,
zfphm TYPE zfphm,
zkpr TYPE char12,
zstatus TYPE char1,
END OF ls_zjsno.
DATA:w_bukrs TYPE char4.
DATA:lt_zjsno LIKE TABLE OF ls_zjsno.
DATA:lt_ztfico007z TYPE TABLE OF ztfico007z.
DATA:ls_ztfico007z TYPE ztfico007z.
DATA:lv_zczrzh TYPE char12.
CLEAR:lt_ZJSNO.
LOOP AT gt_two INTO gs_two WHERE checkbox = 'X'.
IF w_bukrs IS INITIAL.
w_bukrs = gs_two-bukrs.
ENDIF.
IF gs_two-zjsno <> ''.
IF gs_two-state = '已开具' OR gs_two-state = '已红冲'.
MOVE-CORRESPONDING gs_two TO ls_ZJSNO.
IF gs_two-state = '已红冲'.
ls_ZJSNO-zfphm = gs_two-zhcfph.
ls_ZJSNO-zfpdm = gs_two-zhcfpdm.
.ENDIF.
APPEND ls_ZJSNO TO lt_ZJSNO.
ENDIF.
ENDIF.
CLEAR:gs_two,ls_ZJSNO.
ENDLOOP.
DATA(lt_check) = lt_zjsno.
SORT lt_check BY zjsno.
DELETE ADJACENT DUPLICATES FROM lt_check COMPARING zjsno.
l_lines = lines( lt_check ).
IF l_lines > 1.
SELECT SINGLE zczrzh INTO lv_zczrzh FROM ztfico007k WHERE zczrzh = sy-uname.
IF sy-subrc <> 0.
MESSAGE '请单张作废' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN 100.
ENDIF.
ENDIF.
DELETE lt_ZJSNO WHERE zstatus = '5'.
IF lt_ZJSNO IS INITIAL.
MESSAGE '您选择的数据已作废过' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN 100.
ENDIF.
DELETE lt_ZJSNO WHERE zfpdm = ''.
IF lt_ZJSNO IS INITIAL.
MESSAGE '请选择已传输成功的单据项目' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN 100.
ENDIF.
SORT lt_ZJSNO BY zjsno.
DELETE ADJACENT DUPLICATES FROM lt_ZJSNO COMPARING zjsno.
DELETE lt_ZJSNO WHERE zjsno = ''.
IF lt_ZJSNO IS INITIAL.
MESSAGE '请选择已生成单据的项目' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN 100.
ENDIF.
"作废二次弹窗密码确认
READ TABLE lt_ZJSNO INTO ls_zjsno INDEX 1.
IF sy-subrc = 0.
lv_zfpdm = ls_zjsno-zfpdm.
ENDIF.
CLEAR:lt_mess[],lv_ZPASS,ls_zjsno.
lt_mess-tabname = 'ZTFICO007G'.
lt_mess-fieldname = 'ZFPDM'.
lt_mess-fieldtext = '金税发票代码'.
lt_mess-field_attr = '05'.
lt_mess-value = lv_zfpdm.
APPEND lt_mess.
CLEAR:lt_mess.
lt_mess-tabname = 'ZTFICO007R'.
lt_mess-fieldname = 'ZPASS'.
lt_mess-fieldtext = '密码'..
APPEND lt_mess.
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
no_value_check = ' '
popup_title = '作废密码二次确认'
start_column = '5'
start_row = '5'
IMPORTING
returncode = rtncode
TABLES
fields = lt_mess
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.
CHECK rtncode <> 'A'.
READ TABLE lt_mess WITH KEY fieldname = 'ZPASS'.
IF sy-subrc = 0.
CONDENSE lt_mess-value NO-GAPS.
lv_ZPASS = lt_mess-value.
ENDIF.
SELECT SINGLE zpass INTO lv_zpass FROM ztfico007r WHERE zpass = lv_ZPASS AND bukrs = s_bukrs-low.
IF sy-subrc <> 0.
MESSAGE '密码错误,请检查' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN 100.
ENDIF.