F4搜索帮助
2014-05-04 15:35
447 查看
需求: 搜索帮助的部分信息不作为查询条件使用,只做输出使用
FORM SUB_SET_FPH_F4_DATA TABLES P_TAB_ZFI1003T STRUCTURE ZFI1003T
USING P_PJH TYPE ZFI1003T-ZPJH
CHANGING P_REC_ZFI1003T TYPE ZFI1003T.
TYPES: BEGIN OF TYP_OUTPUT.
INCLUDE STRUCTURE ZFI1003T.
TYPES: SERIAL TYPE ZESERIAL.
TYPES: END OF TYP_OUTPUT.
TYPES: BEGIN OF TYP_PJH,
SERIAL TYPE ZESERIAL, "---序号
ZPJLX TYPE ZFI1003T-ZPJLX, "---票据类型
ZPJLX_DES TYPE ZFI1004T-ZPJLX_DES, "---票据类型描述
ZPJH TYPE ZFI1003T-ZPJH, "---票据号
ZQTFPH TYPE ZFI1003T-ZQTFPH, "---其它发票号
ZFPRQ TYPE ZFI1003T-ZFPRQ, "---发票日期
ZPJNR TYPE ZFI1003T-ZPJNR, "---发票内容
ZKPDWN TYPE ZFI1003T-ZKPDWN, "---开票单位
ZKPDW TYPE ZEKPDW, "---开票单位描述
ZSPDWN TYPE ZFI1003T-ZSPDWN, "---收票单位
ZSPDW TYPE ZESPDW, "---收票单位描述
WRBTR TYPE ZFI1003T-WRBTR, "---发票金额
WAERS TYPE ZFI1003T-WAERS, "---币种
ZBCFP TYPE ZFI1003T-ZBCFP, "---关联发票
ZFPZT TYPE ZFI1003T-ZFPZT,
ZFPZT_DES TYPE ZEFPZT_T,
END OF TYP_PJH.
DATA: REC_ZFI1003T TYPE ZFI1003T.
DATA: REC_OUTPUT TYPE TYP_OUTPUT,
TAB_OUTPUT TYPE TABLE OF TYP_OUTPUT.
DATA: REC_PJH TYPE TYP_PJH,
TAB_PJH TYPE TABLE OF TYP_PJH.
DATA: L_SERIAL TYPE ZESERIAL.
DATA: REC_ZFI1004T TYPE ZFI1004T,
TAB_ZFI1004T TYPE TABLE OF ZFI1004T.
DATA: REC_T880 TYPE T880,
TAB_T880 TYPE TABLE OF T880.
DATA: L_WINDOW_TITLE(30) TYPE C.
DATA: L_FIELDNAME TYPE LVC_FNAME.
DATA: REC_RETURN TYPE DDSHRETVAL,
TAB_RETURN TYPE TABLE OF DDSHRETVAL.
CLEAR: L_SERIAL, REC_OUTPUT, TAB_OUTPUT.
CLEAR: REC_PJH, TAB_PJH.
LOOP AT P_TAB_ZFI1003T INTO REC_ZFI1003T.
L_SERIAL = L_SERIAL + 1.
MOVE-CORRESPONDING REC_ZFI1003T TO REC_OUTPUT.
REC_OUTPUT-SERIAL = L_SERIAL.
APPEND REC_OUTPUT TO TAB_OUTPUT.
MOVE-CORRESPONDING REC_OUTPUT TO REC_PJH.
APPEND REC_PJH TO TAB_PJH.
ENDLOOP.
"---查询单位描述
IF TAB_PJH IS NOT INITIAL.
SELECT * FROM ZFI1004T INTO TABLE TAB_ZFI1004T.
SELECT * FROM T880 INTO TABLE TAB_T880
FOR ALL ENTRIES IN TAB_PJH
WHERE ( RCOMP = TAB_PJH-ZKPDWN OR
RCOMP = TAB_PJH-ZSPDWN ).
ENDIF.
"---更新单位描述
LOOP AT TAB_PJH INTO REC_PJH.
READ TABLE TAB_T880 INTO REC_T880 WITH KEY RCOMP = REC_PJH-ZKPDWN.
IF SY-SUBRC = 0.
REC_PJH-ZKPDW = REC_T880-NAME1.
ENDIF.
READ TABLE TAB_T880 INTO REC_T880 WITH KEY RCOMP = REC_PJH-ZSPDWN.
IF SY-SUBRC = 0.
REC_PJH-ZSPDW = REC_T880-NAME1.
ENDIF.
READ TABLE TAB_ZFI1004T INTO REC_ZFI1004T WITH KEY ZPJLX = REC_PJH-ZPJLX.
IF SY-SUBRC = 0.
REC_PJH-ZPJLX_DES = REC_ZFI1004T-ZPJLX_DES.
ENDIF.
CASE REC_PJH-ZFPZT.
WHEN '1'.
REC_PJH-ZFPZT_DES = '正常发票'.
WHEN '2'.
REC_PJH-ZFPZT_DES = '补差发票'.
WHEN '3'.
REC_PJH-ZFPZT_DES = '退回作废'.
WHEN '4'.
REC_PJH-ZFPZT_DES = '红字发票'.
WHEN OTHERS.
ENDCASE.
MODIFY TAB_PJH FROM REC_PJH.
ENDLOOP.
"---票据号输入,且只存在一条信息时,直接输出并推出
IF P_PJH IS NOT INITIAL.
IF LINES( TAB_OUTPUT ) = 1.
CLEAR: REC_ZFI1003T.
READ TABLE P_TAB_ZFI1003T INTO REC_ZFI1003T INDEX 1.
MOVE-CORRESPONDING REC_ZFI1003T TO P_REC_ZFI1003T.
EXIT.
ENDIF.
ENDIF.
"---未输入票据号或者票据号输入存在多条结果时,F4输出
CLEAR: TAB_RETURN.
L_FIELDNAME = 'SERIAL'.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = L_FIELDNAME
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
WINDOW_TITLE = L_WINDOW_TITLE
VALUE_ORG = 'S'
CALLBACK_PROGRAM = SY-REPID " <------- Current Program name
CALLBACK_FORM = 'SUB_F4CALLBACK_FP' " <------ Form name
TABLES
VALUE_TAB = TAB_PJH[]
RETURN_TAB = TAB_RETURN
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
CLEAR: REC_RETURN.
READ TABLE TAB_RETURN INTO REC_RETURN INDEX 1.
CLEAR: REC_OUTPUT, REC_ZFI1003T.
READ TABLE TAB_OUTPUT INTO REC_OUTPUT WITH KEY SERIAL = REC_RETURN-FIELDVAL.
MOVE-CORRESPONDING REC_OUTPUT TO REC_ZFI1003T.
MOVE-CORRESPONDING REC_ZFI1003T TO P_REC_ZFI1003T.
ENDFORM. "sub_set_fph_f4_data
*&---------------------------------------------------------------------*
*& Form SUB_F4CALLBACK_fp
*&---------------------------------------------------------------------*
* 发票类型F4,取消查询界面部分查询输入字段
*----------------------------------------------------------------------*
* -->RECORD_TAB text
* -->SHLP text
* -->CALLCONTROL text
*----------------------------------------------------------------------*
FORM SUB_F4CALLBACK_FP TABLES RECORD_TAB STRUCTURE SEAHLPRES
CHANGING SHLP TYPE SHLP_DESCR
CALLCONTROL LIKE DDSHF4CTRL.
SHLP-INTDESCR-DIALOGTYPE = 'C'. " <----
CALLCONTROL-NO_MAXDISP = ''. " <----
FIELD-SYMBOLS <FS> TYPE DDSHFPROP.
LOOP AT SHLP-FIELDPROP ASSIGNING <FS>.
IF <FS>-FIELDNAME = 'F0001'.
<FS>-SHLPINPUT = ''.
<FS>-SHLPSELPOS = '00'.
ELSEIF <FS>-FIELDNAME = 'F0003'.
<FS>-SHLPINPUT = ''.
<FS>-SHLPSELPOS = '00'.
ELSEIF <FS>-FIELDNAME = 'F0007'.
<FS>-SHLPINPUT = ''.
<FS>-SHLPSELPOS = '00'.
ELSEIF <FS>-FIELDNAME = 'F0009'.
<FS>-SHLPINPUT = ''.
<FS>-SHLPSELPOS = '00'.
ELSEIF <FS>-FIELDNAME = 'F0011'.
<FS>-SHLPINPUT = ''.
<FS>-SHLPSELPOS = '00'.
ELSEIF <FS>-FIELDNAME = 'F0016'.
<FS>-SHLPINPUT = ''.
<FS>-SHLPSELPOS = '00'.
ENDIF.
ENDLOOP.
*--------------------------------------------------------------------------------
* For getting Maximum no of hits tab
ENDFORM. "SUB_F4CALLBACK_fp
FORM SUB_SET_FPH_F4_DATA TABLES P_TAB_ZFI1003T STRUCTURE ZFI1003T
USING P_PJH TYPE ZFI1003T-ZPJH
CHANGING P_REC_ZFI1003T TYPE ZFI1003T.
TYPES: BEGIN OF TYP_OUTPUT.
INCLUDE STRUCTURE ZFI1003T.
TYPES: SERIAL TYPE ZESERIAL.
TYPES: END OF TYP_OUTPUT.
TYPES: BEGIN OF TYP_PJH,
SERIAL TYPE ZESERIAL, "---序号
ZPJLX TYPE ZFI1003T-ZPJLX, "---票据类型
ZPJLX_DES TYPE ZFI1004T-ZPJLX_DES, "---票据类型描述
ZPJH TYPE ZFI1003T-ZPJH, "---票据号
ZQTFPH TYPE ZFI1003T-ZQTFPH, "---其它发票号
ZFPRQ TYPE ZFI1003T-ZFPRQ, "---发票日期
ZPJNR TYPE ZFI1003T-ZPJNR, "---发票内容
ZKPDWN TYPE ZFI1003T-ZKPDWN, "---开票单位
ZKPDW TYPE ZEKPDW, "---开票单位描述
ZSPDWN TYPE ZFI1003T-ZSPDWN, "---收票单位
ZSPDW TYPE ZESPDW, "---收票单位描述
WRBTR TYPE ZFI1003T-WRBTR, "---发票金额
WAERS TYPE ZFI1003T-WAERS, "---币种
ZBCFP TYPE ZFI1003T-ZBCFP, "---关联发票
ZFPZT TYPE ZFI1003T-ZFPZT,
ZFPZT_DES TYPE ZEFPZT_T,
END OF TYP_PJH.
DATA: REC_ZFI1003T TYPE ZFI1003T.
DATA: REC_OUTPUT TYPE TYP_OUTPUT,
TAB_OUTPUT TYPE TABLE OF TYP_OUTPUT.
DATA: REC_PJH TYPE TYP_PJH,
TAB_PJH TYPE TABLE OF TYP_PJH.
DATA: L_SERIAL TYPE ZESERIAL.
DATA: REC_ZFI1004T TYPE ZFI1004T,
TAB_ZFI1004T TYPE TABLE OF ZFI1004T.
DATA: REC_T880 TYPE T880,
TAB_T880 TYPE TABLE OF T880.
DATA: L_WINDOW_TITLE(30) TYPE C.
DATA: L_FIELDNAME TYPE LVC_FNAME.
DATA: REC_RETURN TYPE DDSHRETVAL,
TAB_RETURN TYPE TABLE OF DDSHRETVAL.
CLEAR: L_SERIAL, REC_OUTPUT, TAB_OUTPUT.
CLEAR: REC_PJH, TAB_PJH.
LOOP AT P_TAB_ZFI1003T INTO REC_ZFI1003T.
L_SERIAL = L_SERIAL + 1.
MOVE-CORRESPONDING REC_ZFI1003T TO REC_OUTPUT.
REC_OUTPUT-SERIAL = L_SERIAL.
APPEND REC_OUTPUT TO TAB_OUTPUT.
MOVE-CORRESPONDING REC_OUTPUT TO REC_PJH.
APPEND REC_PJH TO TAB_PJH.
ENDLOOP.
"---查询单位描述
IF TAB_PJH IS NOT INITIAL.
SELECT * FROM ZFI1004T INTO TABLE TAB_ZFI1004T.
SELECT * FROM T880 INTO TABLE TAB_T880
FOR ALL ENTRIES IN TAB_PJH
WHERE ( RCOMP = TAB_PJH-ZKPDWN OR
RCOMP = TAB_PJH-ZSPDWN ).
ENDIF.
"---更新单位描述
LOOP AT TAB_PJH INTO REC_PJH.
READ TABLE TAB_T880 INTO REC_T880 WITH KEY RCOMP = REC_PJH-ZKPDWN.
IF SY-SUBRC = 0.
REC_PJH-ZKPDW = REC_T880-NAME1.
ENDIF.
READ TABLE TAB_T880 INTO REC_T880 WITH KEY RCOMP = REC_PJH-ZSPDWN.
IF SY-SUBRC = 0.
REC_PJH-ZSPDW = REC_T880-NAME1.
ENDIF.
READ TABLE TAB_ZFI1004T INTO REC_ZFI1004T WITH KEY ZPJLX = REC_PJH-ZPJLX.
IF SY-SUBRC = 0.
REC_PJH-ZPJLX_DES = REC_ZFI1004T-ZPJLX_DES.
ENDIF.
CASE REC_PJH-ZFPZT.
WHEN '1'.
REC_PJH-ZFPZT_DES = '正常发票'.
WHEN '2'.
REC_PJH-ZFPZT_DES = '补差发票'.
WHEN '3'.
REC_PJH-ZFPZT_DES = '退回作废'.
WHEN '4'.
REC_PJH-ZFPZT_DES = '红字发票'.
WHEN OTHERS.
ENDCASE.
MODIFY TAB_PJH FROM REC_PJH.
ENDLOOP.
"---票据号输入,且只存在一条信息时,直接输出并推出
IF P_PJH IS NOT INITIAL.
IF LINES( TAB_OUTPUT ) = 1.
CLEAR: REC_ZFI1003T.
READ TABLE P_TAB_ZFI1003T INTO REC_ZFI1003T INDEX 1.
MOVE-CORRESPONDING REC_ZFI1003T TO P_REC_ZFI1003T.
EXIT.
ENDIF.
ENDIF.
"---未输入票据号或者票据号输入存在多条结果时,F4输出
CLEAR: TAB_RETURN.
L_FIELDNAME = 'SERIAL'.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = L_FIELDNAME
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
WINDOW_TITLE = L_WINDOW_TITLE
VALUE_ORG = 'S'
CALLBACK_PROGRAM = SY-REPID " <------- Current Program name
CALLBACK_FORM = 'SUB_F4CALLBACK_FP' " <------ Form name
TABLES
VALUE_TAB = TAB_PJH[]
RETURN_TAB = TAB_RETURN
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
CLEAR: REC_RETURN.
READ TABLE TAB_RETURN INTO REC_RETURN INDEX 1.
CLEAR: REC_OUTPUT, REC_ZFI1003T.
READ TABLE TAB_OUTPUT INTO REC_OUTPUT WITH KEY SERIAL = REC_RETURN-FIELDVAL.
MOVE-CORRESPONDING REC_OUTPUT TO REC_ZFI1003T.
MOVE-CORRESPONDING REC_ZFI1003T TO P_REC_ZFI1003T.
ENDFORM. "sub_set_fph_f4_data
*&---------------------------------------------------------------------*
*& Form SUB_F4CALLBACK_fp
*&---------------------------------------------------------------------*
* 发票类型F4,取消查询界面部分查询输入字段
*----------------------------------------------------------------------*
* -->RECORD_TAB text
* -->SHLP text
* -->CALLCONTROL text
*----------------------------------------------------------------------*
FORM SUB_F4CALLBACK_FP TABLES RECORD_TAB STRUCTURE SEAHLPRES
CHANGING SHLP TYPE SHLP_DESCR
CALLCONTROL LIKE DDSHF4CTRL.
SHLP-INTDESCR-DIALOGTYPE = 'C'. " <----
CALLCONTROL-NO_MAXDISP = ''. " <----
FIELD-SYMBOLS <FS> TYPE DDSHFPROP.
LOOP AT SHLP-FIELDPROP ASSIGNING <FS>.
IF <FS>-FIELDNAME = 'F0001'.
<FS>-SHLPINPUT = ''.
<FS>-SHLPSELPOS = '00'.
ELSEIF <FS>-FIELDNAME = 'F0003'.
<FS>-SHLPINPUT = ''.
<FS>-SHLPSELPOS = '00'.
ELSEIF <FS>-FIELDNAME = 'F0007'.
<FS>-SHLPINPUT = ''.
<FS>-SHLPSELPOS = '00'.
ELSEIF <FS>-FIELDNAME = 'F0009'.
<FS>-SHLPINPUT = ''.
<FS>-SHLPSELPOS = '00'.
ELSEIF <FS>-FIELDNAME = 'F0011'.
<FS>-SHLPINPUT = ''.
<FS>-SHLPSELPOS = '00'.
ELSEIF <FS>-FIELDNAME = 'F0016'.
<FS>-SHLPINPUT = ''.
<FS>-SHLPSELPOS = '00'.
ENDIF.
ENDLOOP.
*--------------------------------------------------------------------------------
* For getting Maximum no of hits tab
ENDFORM. "SUB_F4CALLBACK_fp
相关文章推荐
- F4搜索帮助 F4IF_INT_TABLE_VALUE_REQUEST
- ABAP开发中常用的两个F4搜索帮助函数的区别
- [SAP ABAP开发技术总结]搜索帮助Search Help (F4)
- SAP F4搜索帮助的高级版
- 【转载】如何建立SAP F4搜索帮助
- FM实现F4帮助系列二:联动的搜索
- SAP中如何建立F4搜索帮助
- 使用matchcode object + 搜索帮助 实现F4
- 关于F4搜索帮助返回多列值的实现方法
- FM实现F4帮助系列二:联动的搜索
- F4字段搜索帮助
- ALV通过F4事件,实现自定义搜索帮助F4
- F4搜索帮助 带回多个值
- 自定义搜索帮助
- ABAP search help (搜索帮助) 五种方法
- 搜索帮助的建立一(基于维护视图或者参考表)
- 在程序中使用搜索帮助
- 选择屏幕搜索帮助
- 国外10个优秀域名工具站点 帮助搜索好域名
- ABAP 屏幕F4帮助 调用函数实现