您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: