REPORT zfid001. TYPE-POOLS: slis. TABLES: bseg,bkpf,knb1,lfb1,knvv.", ************************************************************************ * 定义类型 ************************************************************************ * 定义用与转换的类型 TYPES: BEGIN OF ty_out, object TYPE char4, lifnr TYPE char10, budat TYPE budat, belnr TYPE bseg-belnr, checkbox TYPE c LENGTH 1, cellcolor TYPE lvc_t_scol, END OF ty_out. ************************************************************************ * 声明内表、工作区和全局变量 ************************************************************************ DATA: ts_out TYPE STANDARD TABLE OF ty_out WITH HEADER LINE, tl_out LIKE LINE OF ts_out. TYPES: BEGIN OF gy_out, bukrs TYPE bukrs, prctr TYPE prctr, flag TYPE char10, lifnr TYPE char20, name1 TYPE char40, belnr TYPE bseg-belnr, pswsl TYPE pswsl, dmbtr TYPE dmbtr, rdmbtr TYPE dmbtr, shkzg TYPE char1, hkont TYPE hkont, txt50 TYPE skat-txt50, blart TYPE bkpf-blart,"凭证类型 xref3 TYPE bseg-xref3, "参考码3 sgtxt TYPE bseg-sgtxt,"文本 zuonr TYPE bseg-zuonr,"分配 kkber TYPE bseg-kkber,"信贷范围 vkbur TYPE knvv-vkbur, budat TYPE budat, bldat TYPE bldat, END OF gy_out. DATA: gs_out TYPE STANDARD TABLE OF gy_out WITH HEADER LINE, gl_out LIKE LINE OF gs_out. DATA tsk_bseg TYPE STANDARD TABLE OF bseg WITH HEADER LINE. DATA gsk_bseg TYPE STANDARD TABLE OF bseg WITH HEADER LINE. DATA ts_bseg TYPE TABLE OF bseg WITH HEADER LINE. DATA ts_bseg1 TYPE TABLE OF bseg WITH HEADER LINE. DATA ts_bseg2 TYPE TABLE OF bseg WITH HEADER LINE. DATA ts_bkpf1 TYPE TABLE OF bkpf WITH HEADER LINE. DATA ts_bkpf2 TYPE TABLE OF bkpf WITH HEADER LINE. DATA tsd_bseg TYPE STANDARD TABLE OF bseg WITH HEADER LINE. DATA gsd_bseg TYPE STANDARD TABLE OF bseg WITH HEADER LINE. DATA: ts_lfa1 TYPE TABLE OF lfa1 WITH HEADER LINE, ts_kna1 TYPE TABLE OF kna1 WITH HEADER LINE, ts_skat TYPE TABLE OF skat WITH HEADER LINE. DATA: ts_skb1 TYPE TABLE OF skb1 WITH HEADER LINE. *DATA: TS_KNVV TYPE TABLE OF KNVV WITH HEADER LINE. DATA gs_bseg TYPE STANDARD TABLE OF bseg WITH HEADER LINE. DATA w_bseg TYPE bseg. DATA: l_wrbtr_h TYPE bseg-wrbtr, l_wrbtr_s TYPE bseg-wrbtr, l_wrbtr TYPE bseg-wrbtr. DATA l_object TYPE char4. DATA l_bschl TYPE char2. DATA l_money TYPE char30. ** 使用 ALV DATA: it_fieldcat TYPE slis_t_fieldcat_alv, " ALV 标题内表 it_fieldcat01 TYPE slis_t_fieldcat_alv, " ALV 标题内表 wa_layout TYPE slis_layout_alv. " ALV 格式 * it_events TYPE slis_t_event. " ALV事件处理 FIELD-SYMBOLS <p_hsl>. " 定义指针 DATA :l_group TYPE apqi-groupid, l_subrc TYPE sy-subrc. DATA: l_t_blntab LIKE TABLE OF blntab WITH HEADER LINE, l_t_ftclear LIKE TABLE OF ftclear WITH HEADER LINE, l_t_ftpost LIKE TABLE OF ftpost WITH HEADER LINE, l_t_fttax LIKE TABLE OF fttax WITH HEADER LINE. DEFINE rellena_ftclear. l_t_ftclear-agkoa = &1. "清账条件:科目类型 l_t_ftclear-agbuk = &2. "清账条件:公司代码 l_t_ftclear-selfd = &3. "附加字段:BELNR 凭证编号 l_t_ftclear-xnops = &4. "清账条件:标准未清项目 l_t_ftclear-agums = &5. "用于选择的特殊总帐标识符 CONCATENATE &6 &7 &8 INTO l_t_ftclear-selvon. "选择未清项目的搜索标准的输入字段 APPEND l_t_ftclear. END-OF-DEFINITION. DEFINE rellena_ftpost. l_t_ftpost-stype = &1. "用于内部过帐接口的记录类型 l_t_ftpost-count = &2. "对于凭证抬头或行项目的计数器(记帐界面) l_t_ftpost-fnam = &3. "BDC 字段名 l_t_ftpost-fval = &4. "BDC 字段值 APPEND l_t_ftpost. END-OF-DEFINITION. ************************************************************************ * 选择屏幕 * ************************************************************************ SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001. SELECTION-SCREEN END OF BLOCK blk1. SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE TEXT-002. SELECT-OPTIONS: s_kunnr FOR knb1-kunnr,"客户 s_lifnr FOR lfb1-lifnr."供应商 SELECT-OPTIONS: s_budat FOR bkpf-budat, s_bldat FOR bkpf-bldat. SELECT-OPTIONS: s_kkber FOR bseg-kkber, s_vkbur FOR knvv-vkbur. PARAMETERS: p_bukrs TYPE bseg-bukrs OBLIGATORY, p_prctr TYPE bseg-prctr , p_budat TYPE bkpf-budat OBLIGATORY, p_pswsl TYPE bseg-pswsl OBLIGATORY. * p_umskz TYPE bseg-umskz."特殊总账标识 *PARAMETERS: P_XNPOS AS CHECKBOX DEFAULT '' . PARAMETERS:p_xnpos TYPE c NO-DISPLAY."不起作用 parameters : P_MODE type RFPDO-ALLGAZMD default 'E'. SELECTION-SCREEN END OF BLOCK blk2. ************************************************************************ * 初始化事件 * ************************************************************************ INITIALIZATION. ************************************************************************ * 选择屏幕事件 * ************************************************************************ AT SELECTION-SCREEN. ************************************************************************ * START-OF-SELECTION * ************************************************************************ START-OF-SELECTION. IF s_lifnr[] IS INITIAL AND s_kunnr[] IS INITIAL. MESSAGE '请填入供应商编号或客户编号' TYPE 'S'. EXIT. ENDIF. PERFORM frm_getdata. ************************************************************************ * END-OF-SELECTION * ************************************************************************ END-OF-SELECTION. * using alv to display report PERFORM frm_alv. *&---------------------------------------------------------------------* *& Form FRM_GETDATA *&---------------------------------------------------------------------* * 功能描述:按指定条件从数据库表中取出数据,并传入相应的内表或工作区 *----------------------------------------------------------------------* * 入口参数:无 * 出口参数:无 *----------------------------------------------------------------------* FORM frm_getdata . IF s_lifnr[] IS NOT INITIAL. "l_object = '供应商'. REFRESH ts_bseg1. SELECT * INTO CORRESPONDING FIELDS OF TABLE ts_bseg1 FROM bseg WHERE bukrs = p_bukrs AND prctr = p_prctr AND lifnr IN s_lifnr AND augbl = '' AND buzid = '' * AND ( umskz = p_umskz OR umskz = '') AND pswsl = p_pswsl AND kkber IN s_kkber. IF ts_bseg1[] IS NOT INITIAL. SELECT * INTO TABLE ts_bkpf1 FROM bkpf FOR ALL ENTRIES IN ts_bseg1 WHERE bukrs = ts_bseg1-bukrs AND belnr = ts_bseg1-belnr AND gjahr = ts_bseg1-gjahr AND budat IN s_budat AND bldat IN s_bldat. ENDIF. IF p_xnpos EQ 'X'. IF ts_bseg1[] IS NOT INITIAL. SELECT * INTO CORRESPONDING FIELDS OF TABLE tsk_bseg FROM bseg FOR ALL ENTRIES IN ts_bseg1 WHERE belnr = ts_bseg1-belnr AND bukrs = p_bukrs AND lifnr IN s_lifnr AND augbl = '' AND buzid = '' * AND ( umskz = p_umskz OR umskz EQ '' ) AND pswsl = p_pswsl AND kkber IN s_kkber. " and ( HKONT like '1123%' or HKONT like '2202%' or HKONT like '2241%'). ENDIF. ELSE. IF ts_bseg1[] IS NOT INITIAL. SELECT * INTO CORRESPONDING FIELDS OF TABLE tsk_bseg FROM bseg FOR ALL ENTRIES IN ts_bseg1 WHERE belnr = ts_bseg1-belnr AND bukrs = p_bukrs AND lifnr IN s_lifnr AND augbl = '' AND buzid = '' * AND umskz = p_umskz AND pswsl = p_pswsl AND kkber IN s_kkber. "and ( HKONT like '1123%' or HKONT like '2202%' or HKONT like '2241%'). ENDIF. ENDIF. ENDIF. IF s_kunnr[] IS NOT INITIAL. "l_object = '客户'. REFRESH ts_bseg2. SELECT * INTO CORRESPONDING FIELDS OF TABLE ts_bseg2 FROM bseg WHERE bukrs = p_bukrs AND prctr = p_prctr AND kunnr IN s_kunnr AND augbl = '' * AND ( umskz = p_umskz OR umskz EQ '' ) AND pswsl = p_pswsl AND kkber IN s_kkber. IF ts_bseg2[] IS NOT INITIAL. SELECT * INTO TABLE ts_bkpf2 FROM bkpf FOR ALL ENTRIES IN ts_bseg2 WHERE bukrs = ts_bseg2-bukrs AND belnr = ts_bseg2-belnr AND gjahr = ts_bseg2-gjahr AND budat IN s_budat AND bldat IN s_bldat. ENDIF. IF p_xnpos EQ 'X'. IF ts_bseg2[] IS NOT INITIAL. SELECT * INTO CORRESPONDING FIELDS OF TABLE tsd_bseg FROM bseg FOR ALL ENTRIES IN ts_bseg2 WHERE belnr = ts_bseg2-belnr AND bukrs = p_bukrs AND kunnr IN s_kunnr AND augbl = '' * AND ( umskz = p_umskz OR umskz EQ '' ) AND pswsl = p_pswsl AND kkber IN s_kkber. "and ( HKONT like '1122%' or HKONT like '1221%' or HKONT like '2203%'). ENDIF. ELSE. IF ts_bseg2[] IS NOT INITIAL. SELECT * INTO CORRESPONDING FIELDS OF TABLE tsd_bseg FROM bseg FOR ALL ENTRIES IN ts_bseg2 WHERE belnr = ts_bseg2-belnr AND bukrs = p_bukrs AND kunnr IN s_kunnr AND augbl = '' * AND umskz = p_umskz AND pswsl = p_pswsl AND kkber IN s_kkber. "and ( HKONT like '1122%' or HKONT like '1221%' or HKONT like '2203%'). ENDIF. ENDIF. ENDIF. APPEND LINES OF tsk_bseg TO gsk_bseg. APPEND LINES OF tsd_bseg TO gsd_bseg. IF gsk_bseg[] IS NOT INITIAL. SELECT * INTO TABLE ts_lfa1 FROM lfa1 FOR ALL ENTRIES IN gsk_bseg WHERE lifnr = gsk_bseg-lifnr. SELECT * INTO TABLE ts_skat FROM skat FOR ALL ENTRIES IN gsk_bseg WHERE saknr = gsk_bseg-hkont AND spras = sy-langu. SELECT * INTO TABLE ts_skb1 FROM skb1 FOR ALL ENTRIES IN gsk_bseg WHERE saknr = gsk_bseg-hkont AND bukrs = gsk_bseg-bukrs AND mitkz = 'K' . ENDIF. LOOP AT gsk_bseg. CLEAR gl_out. CLEAR ts_lfa1. READ TABLE ts_lfa1 WITH KEY lifnr = gsk_bseg-lifnr. CLEAR ts_skat. READ TABLE ts_skat WITH KEY saknr = gsk_bseg-hkont. CLEAR ts_bseg1. READ TABLE ts_bseg1 WITH KEY belnr = gsk_bseg-belnr bukrs = gsk_bseg-bukrs gjahr = gsk_bseg-gjahr. CLEAR ts_bkpf1. READ TABLE ts_bkpf1 WITH KEY belnr = gsk_bseg-belnr bukrs = gsk_bseg-bukrs gjahr = gsk_bseg-gjahr. IF sy-subrc NE 0. CONTINUE. ENDIF. CLEAR ts_skb1. READ TABLE ts_skb1 WITH KEY saknr = gsk_bseg-saknr bukrs = gsk_bseg-bukrs. IF sy-subrc NE 0. CONTINUE. ENDIF. gl_out-bukrs = gsk_bseg-bukrs. gl_out-prctr = ts_bseg1-prctr. gl_out-flag = '供应商'. gl_out-lifnr = gsk_bseg-lifnr. gl_out-name1 = ts_lfa1-name1. gl_out-belnr = gsk_bseg-belnr. gl_out-pswsl = gsk_bseg-pswsl. gl_out-dmbtr = gsk_bseg-dmbtr. gl_out-rdmbtr = gl_out-dmbtr. gl_out-shkzg = gsk_bseg-shkzg. IF gl_out-shkzg = 'H'. gl_out-shkzg = '贷'. gl_out-rdmbtr = gl_out-rdmbtr * -1. ELSE. gl_out-shkzg = '借'. ENDIF. gl_out-hkont = gsk_bseg-hkont. gl_out-txt50 = ts_skat-txt50. gl_out-blart = ts_bkpf1-blart."凭证类型 gl_out-budat = ts_bkpf1-budat. gl_out-bldat = ts_bkpf1-bldat. gl_out-xref3 = gsk_bseg-xref3. "参考码3 gl_out-sgtxt = gsk_bseg-sgtxt."文本 gl_out-zuonr = gsk_bseg-zuonr."分配 gl_out-kkber = gsk_bseg-kkber. APPEND gl_out TO gs_out. ENDLOOP. IF gsd_bseg[] IS NOT INITIAL. SELECT * INTO TABLE ts_kna1 FROM kna1 FOR ALL ENTRIES IN gsd_bseg WHERE kunnr = gsd_bseg-kunnr. SELECT * INTO TABLE ts_skat FROM skat FOR ALL ENTRIES IN gsd_bseg WHERE saknr = gsd_bseg-hkont AND spras = sy-langu. * SELECT * INTO TABLE TS_KNVV FROM KNVV FOR ALL ENTRIES IN GSD_BSEG WHERE KUNNR = GSD_BSEG-KUNNR AND VKBUR IN S_VKBUR. SELECT * INTO TABLE ts_skb1 FROM skb1 FOR ALL ENTRIES IN gsd_bseg WHERE saknr = gsd_bseg-hkont AND bukrs = gsd_bseg-bukrs AND mitkz = 'D' . ENDIF. LOOP AT gsd_bseg. CLEAR gl_out. CLEAR ts_kna1. READ TABLE ts_kna1 WITH KEY kunnr = gsd_bseg-kunnr. CLEAR ts_skat. READ TABLE ts_skat WITH KEY saknr = gsd_bseg-hkont. CLEAR ts_bseg2. READ TABLE ts_bseg2 WITH KEY belnr = gsd_bseg-belnr bukrs = gsd_bseg-bukrs gjahr = gsd_bseg-gjahr. CLEAR ts_bkpf2. READ TABLE ts_bkpf2 WITH KEY belnr = gsd_bseg-belnr bukrs = gsd_bseg-bukrs gjahr = gsd_bseg-gjahr. IF sy-subrc NE 0. CONTINUE. ENDIF. CLEAR ts_skb1. READ TABLE ts_skb1 WITH KEY saknr = gsd_bseg-saknr bukrs = gsd_bseg-bukrs. IF sy-subrc NE 0. CONTINUE. ENDIF. * CLEAR TS_KNVV. * READ TABLE TS_KNVV WITH KEY KUNNR = GSD_BSEG-KUNNR. * IF SY-SUBRC NE 0. * CONTINUE. * ENDIF. gl_out-bukrs = gsd_bseg-bukrs. gl_out-prctr = ts_bseg2-prctr. gl_out-flag = '客户'. gl_out-lifnr = gsd_bseg-kunnr. gl_out-name1 = ts_kna1-name1. gl_out-belnr = gsd_bseg-belnr. gl_out-pswsl = gsd_bseg-pswsl. gl_out-dmbtr = gsd_bseg-dmbtr. gl_out-rdmbtr = gl_out-dmbtr. gl_out-shkzg = gsd_bseg-shkzg. IF gl_out-shkzg = 'H'. gl_out-shkzg = '贷'. gl_out-rdmbtr = gl_out-rdmbtr * -1. ELSE. gl_out-shkzg = '借'. ENDIF. gl_out-hkont = gsd_bseg-hkont. gl_out-txt50 = ts_skat-txt50. gl_out-blart = ts_bkpf2-blart."凭证类型 gl_out-budat = ts_bkpf2-budat. gl_out-bldat = ts_bkpf2-bldat. gl_out-xref3 = gsd_bseg-xref3. "参考码3 gl_out-sgtxt = gsd_bseg-sgtxt."文本 gl_out-zuonr = gsd_bseg-zuonr."分配 gl_out-kkber = gsd_bseg-kkber. * GL_OUT-VKBUR = TS_KNVV-VKBUR. APPEND gl_out TO gs_out. ENDLOOP. ENDFORM. "frm_getdata *&---------------------------------------------------------------------* *& Form FRM_ALL_CLEAR *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM frm_all_clear. SORT gsk_bseg BY lifnr. DELETE ADJACENT DUPLICATES FROM gsk_bseg COMPARING lifnr hkont. SORT gsd_bseg BY kunnr. DELETE ADJACENT DUPLICATES FROM gsd_bseg COMPARING kunnr hkont. "处理供应商 l_object = '供应商'. LOOP AT gsk_bseg."供应商 REFRESH gs_bseg. APPEND LINES OF tsk_bseg TO gs_bseg. DELETE gs_bseg[] WHERE lifnr NE gsk_bseg-lifnr OR hkont NE gsk_bseg-hkont . PERFORM frm_qingzhang TABLES gs_bseg USING 'K' gsk_bseg-lifnr l_object. ENDLOOP. "供应商end "处理客户 l_object = '客户'. LOOP AT gsd_bseg."供应商 REFRESH gs_bseg. APPEND LINES OF tsd_bseg TO gs_bseg . DELETE gs_bseg[] WHERE kunnr NE gsd_bseg-kunnr OR hkont NE gsd_bseg-hkont . PERFORM frm_qingzhang TABLES gs_bseg USING 'D' gsd_bseg-kunnr l_object. ENDLOOP. "客户end ENDFORM. "FRM_ALL_CLEAR *&---------------------------------------------------------------------* *& Form QINGZHANG *&---------------------------------------------------------------------* * 清账BDC. *----------------------------------------------------------------------* FORM frm_qingzhang TABLES tt_bseg STRUCTURE tsk_bseg USING zkind TYPE c kunnr TYPE char10 object TYPE char4. REFRESH:l_t_blntab , l_t_ftclear , l_t_ftpost , l_t_fttax . CLEAR:l_t_blntab , l_t_ftclear , l_t_ftpost , l_t_fttax , l_wrbtr_h, l_wrbtr_s. rellena_ftpost 'K' 1 'BKPF-BUKRS' p_bukrs. rellena_ftpost 'K' 1 'BKPF-BLART' 'AB'. rellena_ftpost 'K' 1 'BKPF-BLDAT' p_budat. rellena_ftpost 'K' 1 'BKPF-BUDAT' p_budat. rellena_ftpost 'K' 1 'BKPF-WAERS' p_pswsl. rellena_ftpost 'K' 1 'BKPF-BKTXT' '清帐'. ** 针对借贷不平衡情况,手工追加行项目信息 "累计借贷金额 LOOP AT tt_bseg INTO w_bseg. IF w_bseg-shkzg = 'H'. l_wrbtr_h = l_wrbtr_h + w_bseg-wrbtr. ELSE. l_wrbtr_s = l_wrbtr_s + w_bseg-wrbtr. ENDIF. ENDLOOP. IF l_wrbtr_h EQ 0 OR l_wrbtr_s EQ 0. RETURN. ENDIF. "SORT tt_bseg DESCENDING BY lifnr DESCENDING kunnr DESCENDING shkzg DESCENDING zfbdt DESCENDING. " 如果借方大于贷方 IF l_wrbtr_s >= l_wrbtr_h . LOOP AT tt_bseg WHERE shkzg = 'H'. rellena_ftclear zkind p_bukrs 'BELNR' 'X' tt_bseg-umskz tt_bseg-belnr tt_bseg-gjahr tt_bseg-buzei . ENDLOOP. IF zkind = 'K'."供应商 * IF p_umskz IS NOT INITIAL."特定总账标识 * l_bschl = '29'. "S * ELSE. l_bschl = '26'. * ENDIF. * L_BSCHL = '21'. ELSE."客户 * IF p_umskz IS NOT INITIAL. * l_bschl = '09'. * ELSE. l_bschl = '06'. * ENDIF. * L_BSCHL = '01'. ENDIF. DELETE tt_bseg[] WHERE shkzg = 'H'. SORT tt_bseg BY zfbdt. LOOP AT tt_bseg INTO w_bseg. rellena_ftclear zkind p_bukrs 'BELNR' 'X' w_bseg-umskz w_bseg-belnr w_bseg-gjahr w_bseg-buzei . l_wrbtr_h = l_wrbtr_h - w_bseg-wrbtr. IF l_wrbtr_h <= 0. l_wrbtr_h = l_wrbtr_h + w_bseg-wrbtr. l_money = w_bseg-wrbtr - l_wrbtr_h. EXIT. ENDIF. ENDLOOP. IF l_wrbtr_s NE l_wrbtr_h AND l_money NE 0. * IF P_UMSKZ IS NOT INITIAL. rellena_ftpost 'P' 1 'BSEG-ZFBDT' w_bseg-zfbdt. rellena_ftpost 'P' 1 'BSEG-XNEGP' 'X'. * ENDIF. rellena_ftpost 'P' 1 'RF05A-NEWBS' l_bschl."记账码 rellena_ftpost 'P' 1 'RF05A-NEWKO' kunnr. * l_wrbtr = l_wrbtr_s - l_wrbtr_h. * l_money = l_wrbtr. SHIFT l_money LEFT DELETING LEADING ' '. rellena_ftpost 'P' 1 'BSEG-WRBTR' l_money. rellena_ftpost 'P' 1 'BSEG-UMSKZ' w_bseg-umskz. * rellena_ftpost 'P' 1 'BSEG-KKBER' w_bseg-kkber. rellena_ftpost 'P' 1 'BSEG-HKONT' w_bseg-hkont. rellena_ftpost 'P' 1 'BSEG-SGTXT' '清帐'. ENDIF. ENDIF. " 如果贷方大于借方 IF l_wrbtr_h > l_wrbtr_s. LOOP AT tt_bseg INTO w_bseg WHERE shkzg = 'S'. rellena_ftclear zkind p_bukrs 'BELNR' 'X' w_bseg-umskz w_bseg-belnr w_bseg-gjahr w_bseg-buzei . ENDLOOP. IF zkind = 'K'."供应商 * IF p_umskz IS NOT INITIAL."特定总账标识 * l_bschl = '39'. "S * ELSE. l_bschl = '36'. * ENDIF. * L_BSCHL = '31'. ELSE."客户 * IF p_umskz IS NOT INITIAL. * l_bschl = '19'. * ELSE. l_bschl = '16'. ENDIF. * L_BSCHL = '11'. * ENDIF. DELETE tt_bseg[] WHERE shkzg = 'S'. SORT tt_bseg BY zfbdt. LOOP AT tt_bseg INTO w_bseg. rellena_ftclear zkind p_bukrs 'BELNR' 'X' w_bseg-umskz w_bseg-belnr w_bseg-gjahr w_bseg-buzei . l_wrbtr_s = l_wrbtr_s - w_bseg-wrbtr. IF l_wrbtr_s <= 0. l_wrbtr_s = l_wrbtr_s + w_bseg-wrbtr. l_money = w_bseg-wrbtr - l_wrbtr_s. EXIT. ENDIF. ENDLOOP. IF l_money NE 0. * IF P_UMSKZ IS NOT INITIAL. rellena_ftpost 'P' 1 'BSEG-ZFBDT' w_bseg-zfbdt. rellena_ftpost 'P' 1 'BSEG-XNEGP' 'X'. * ENDIF. rellena_ftpost 'P' 1 'RF05A-NEWBS' l_bschl."记账码 rellena_ftpost 'P' 1 'RF05A-NEWKO' kunnr. * l_wrbtr = l_wrbtr_h - l_wrbtr_s. * l_money = l_wrbtr. SHIFT l_money LEFT DELETING LEADING ' '. rellena_ftpost 'P' 1 'BSEG-WRBTR' l_money. rellena_ftpost 'P' 1 'BSEG-UMSKZ' w_bseg-umskz. * rellena_ftpost 'P' 1 'BSEG-KKBER' w_bseg-kkber. rellena_ftpost 'P' 1 'BSEG-HKONT' w_bseg-hkont. rellena_ftpost 'P' 1 'BSEG-SGTXT' '清帐'. ENDIF. ENDIF. ** 针对借贷不平衡情况,手工追加行项目信息 end CALL FUNCTION 'POSTING_INTERFACE_START' EXPORTING i_function = 'C' "Using Call Transaction i_mode = P_MODE " i_group = l_group i_update = 'S' i_user = sy-uname EXCEPTIONS client_incorrect = 1 " i_xbdcc = 'X' function_invalid = 2 group_name_missing = 3 mode_invalid = 4 update_invalid = 5 OTHERS = 6. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. *--- Posting interface clearing CALL FUNCTION 'POSTING_INTERFACE_CLEARING' EXPORTING i_auglv = 'EINGZAHL' "清账程序 i_tcode = 'FB05' "系统使用的清账事务码 IMPORTING e_msgid = sy-msgid "i_sgfunct = 'C' e_msgno = sy-msgno e_msgty = sy-msgty e_msgv1 = sy-msgv1 e_msgv2 = sy-msgv2 e_msgv3 = sy-msgv3 e_msgv4 = sy-msgv4 e_subrc = l_subrc TABLES t_blntab = l_t_blntab "返回清账凭证号 t_ftclear = l_t_ftclear "传递未清项选择条件 t_ftpost = l_t_ftpost "传递清账凭证抬头数据 t_fttax = l_t_fttax "税务数据,一般不需要 EXCEPTIONS clearing_procedure_invalid = 1 clearing_procedure_missing = 2 table_t041a_empty = 3 transaction_code_invalid = 4 amount_format_error = 5 too_many_line_items = 6 company_code_invalid = 7 screen_not_found = 8 no_authorization = 9 OTHERS = 10. IF sy-msgty = 'E'. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. *--- Posting interface end CALL FUNCTION 'POSTING_INTERFACE_END' EXCEPTIONS session_not_processable = 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. CLEAR ts_out. READ TABLE l_t_blntab INDEX 1. IF sy-subrc EQ 0. ts_out-object = object. ts_out-lifnr = kunnr. ts_out-budat = p_budat. ts_out-belnr = l_t_blntab-belnr. APPEND ts_out. ENDIF. ENDFORM. "QINGZHANG *&---------------------------------------------------------------------* *& Form FRM_ALV *&---------------------------------------------------------------------* * 功能描述:ALV显示子程序 *----------------------------------------------------------------------* * 入口参数:无 * 出口参数:无 *----------------------------------------------------------------------* FORM frm_alv . PERFORM frm_fieldcat. PERFORM frm_layout. PERFORM frm_output. ENDFORM. " FRM_ALV *&---------------------------------------------------------------------* *& Form FRM_FIELDCAT *&---------------------------------------------------------------------* * 功能描述:显示ALV列的标题、列宽、CHECKBOX *----------------------------------------------------------------------* * 入口参数:无 * 出口参数:无 *----------------------------------------------------------------------* FORM frm_fieldcat . PERFORM frm_disp TABLES it_fieldcat USING: 'BUKRS' '公司代码' 'X' '' '' '', 'PRCTR' '利润中心' 'X' '' '' '', 'FLAG' '供应商客户标志' 'X' '' '' '', 'LIFNR' '供应商/客户编码' 'X' '' '' '', 'BUDAT' '过账日期' 'X' '' '' '', 'BLDAT' '凭证日期' 'X' '' '' '', 'KKBER' '信贷范围' 'X' '' '' '', * 'VKBUR' '销售部门' 'X' '' '' '', 'BELNR' '凭证编号' 'X' '' '' '', 'PSWSL' '货币码' 'X' '' '' '', 'RDMBTR' '金额' 'X' '' '' '', 'SHKZG' '借贷方向' 'X' '' '' '', 'HKONT' '总账科目' 'X' '' '' '', 'TXT50' '总账描述' 'X' '' '' '', 'BLART' '凭证类型' 'X' '' '' '', 'XREF3' '参考码3' 'X' '' '' '', 'SGTXT' '文本' 'X' '' '' '', 'ZUONR' '分配' 'X' '' '' ''. PERFORM frm_disp TABLES it_fieldcat01 USING: 'OBJECT' '清账对象' 'X' '' '' '', 'LIFNR' '供应商/客户编号' 'X' '' '' '', 'BUDAT' '清账过账日期' 'X' '' '' '', 'BELNR' '会计凭证编号' 'X' '' '' ''. ENDFORM. " FRM_FIELDCAT *&--------------------------------------------------------------------- *& Form FRM_FIELD_DISP *&---------------------------------------------------------------------* * 功能描述:通过传入字段名、字段名的相应描述,得到ALV视图的列标题 *----------------------------------------------------------------------* * 入口参数:大写字段名、字段名的描述,列的宽度,参考的系统表字段名,参考 * 的系统表名(不需要的参数传为空)。 * 出口参数:无 *----------------------------------------------------------------------* FORM frm_disp TABLES it_fieldcat USING fu_name TYPE slis_fieldcat_alv-fieldname" 自定义数据库表字段 fu_disp TYPE slis_fieldcat_alv-seltext_l" 字段描述 * fu_colwidth TYPE slis_fieldcat_alv-outputlen" 输出列的宽度 fu_nozero TYPE slis_fieldcat_alv-no_zero" 是否显示前导零 fu_refname TYPE slis_fieldcat_alv-ref_fieldname" 参考的系统表字段 fu_reftab TYPE slis_fieldcat_alv-ref_tabname" 参考的系统表 fu_just TYPE slis_fieldcat_alv-just. "形参类型与slis_fieldcat_alv中相应字段名的类型保持一致 DATA: lw_fieldcat TYPE slis_fieldcat_alv. CLEAR lw_fieldcat. lw_fieldcat-fieldname = fu_name. " 自定义数据库表字段 lw_fieldcat-ref_fieldname = fu_refname. " 参考的系统表字段 lw_fieldcat-ref_tabname = fu_reftab. " 参考的系统表 lw_fieldcat-seltext_l = fu_disp. " 字段描述 * lw_fieldcat-outputlen = fu_colwidth. " 输出列的宽度 lw_fieldcat-no_zero = fu_nozero. " 是否显示前导零 lw_fieldcat-just = fu_just. APPEND lw_fieldcat TO it_fieldcat. ENDFORM. " FRM_DISP *&---------------------------------------------------------------------* *& Form FRM_LAYOUT *&---------------------------------------------------------------------* * 功能描述:显示ALV报表中的斑马线,设置ALV报表的第一列为CHECKBOX *----------------------------------------------------------------------* * 入口参数:无 * 出口参数:无 *----------------------------------------------------------------------* FORM frm_layout . wa_layout-colwidth_optimize = 'X'. " ALV显示的列宽自动调整 wa_layout-zebra = 'X'. " ALV中显示斑马线 " WA_LAYOUT-BOX_FIELDNAME = 'CHECKBOX'. " 第一列设置为CHECKBOX按钮 " WA_LAYOUT-COLTAB_FIELDNAME = 'CELLCOLOR'. ENDFORM. " FRM_LAYOUT *&---------------------------------------------------------------------* *& Form FRM_OUTPUT *&---------------------------------------------------------------------* * 功能描述:输出ALV报表的视图 *----------------------------------------------------------------------* * 入口参数:无 * 出口参数:无 *----------------------------------------------------------------------* FORM frm_output . DATA: l_repid LIKE sy-repid, gs_variant TYPE disvariant. gs_variant-report = sy-repid. l_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_pf_status_set = 'FRM_SET_STATUS' "自定义按钮及事件 i_callback_user_command = 'FRM_USER_COMMAND' i_callback_program = l_repid is_variant = gs_variant i_html_height_top = 26 " i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE' is_layout = wa_layout it_fieldcat = it_fieldcat[] i_save = 'A' TABLES t_outtab = gs_out[] EXCEPTIONS program_error = 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. ENDFORM. " FRM_OUTPUT *&---------------------------------------------------------------------* *& Form FRM_OUTPUT01 *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM frm_output01. DATA: l_repid LIKE sy-repid, gs_variant TYPE disvariant. gs_variant-report = sy-repid. l_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_pf_status_set = 'FRM_SET_STATUS' "自定义按钮及事件 i_callback_user_command = 'FRM_USER_COMMAND' i_callback_program = l_repid is_variant = gs_variant i_html_height_top = 26 " i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE' is_layout = wa_layout it_fieldcat = it_fieldcat01[] i_save = 'A' TABLES t_outtab = ts_out[] EXCEPTIONS program_error = 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. ENDFORM. " FRM_OUTPUT *&---------------------------------------------------------------------* *& Form FRM_SET_STATUS *&---------------------------------------------------------------------* * 功能描述:在SE80中定义一个STANDARD_FULLSCREEN的状态栏 *----------------------------------------------------------------------* * 入口参数:无 * 出口参数:无 *----------------------------------------------------------------------* FORM frm_set_status USING rt_extab TYPE slis_t_extab.. SET PF-STATUS 'STANDARD'. "定义GUI状态,添加应用工具栏按钮 ENDFORM. " FRM_SET_STATUS *&---------------------------------------------------------------------* *& Form FRM_SET_STATUS01 *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->RT_EXTAB text *----------------------------------------------------------------------* FORM frm_set_status01 USING rt_extab TYPE slis_t_extab.. SET PF-STATUS 'STANDARD'. "定义GUI状态,添加应用工具栏按钮 ENDFORM. " FRM_SET_STATUS *&---------------------------------------------------------------------* *& Form FRM_USER_COMMAND *&---------------------------------------------------------------------* * 功能描述:响应用户的操作 *----------------------------------------------------------------------* * 入口参数:无 * 出口参数:无 *----------------------------------------------------------------------* FORM frm_user_command USING ucomm LIKE sy-ucomm selfield TYPE slis_selfield.. CASE sy-ucomm. "sy-ucomm获得按钮的功能码 WHEN 'BACK' . LEAVE TO SCREEN 0. WHEN 'EXIT'. LEAVE PROGRAM. WHEN 'CLEAR'. PERFORM frm_all_clear. PERFORM frm_output01. ENDCASE. ENDFORM. " FRM_USER_COMMANDREPORT ZFI030.
    ^_^很多人都把资料锁进了note里,以后还怎么百度呢^_^
 
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号