REPORT ZFIR_0018. INCLUDE zfir_0018top. INCLUDE zfir_0018s01. INCLUDE zfir_0018e01. INCLUDE zfir_

REPORT  ZFIR_0018 .

INCLUDE zfir_0018top.

TYPE-POOLS:slis.

TABLES:bkpf,bseg,VBAK.

DATAg_repid LIKE sy-repid,"程序名
      gs_disvar TYPE disvariant,    "ALV 显示格式
      gs_print  TYPE slis_print_alv,    "ALV打印格式
      gs_layout TYPE slis_layout_alv"ALV输出样式
      gt_events TYPE slis_t_event WITH HEADER LINE,"ALV事件
      gt_sort TYPE slis_t_sortinfo_alv WITH HEADER LINE"ALV 排序内表
      gt_fieldcat TYPE slis_t_fieldcat_alv  WITH HEADER LINE"字段目录
      gt_listheader  TYPE slis_t_listheader WITH HEADER LINE."ALV表头

DATABEGIN OF gt_result OCCURS 0,
  bukrs LIKE bseg-bukrs,
  butxt LIKE t001-butxt,
  gjahr LIKE bseg-gjahr,
  budat LIKE bkpf-budat,
  belnr LIKE bseg-belnr,
*  buzei LIKE bseg-buzei,
  shkzg LIKE bseg-shkzg,
  awkey LIKE bkpf-awkey,"发票号
*  vbeln LIKE vbap-vbeln,
*  posnr LIKE vbap-posnr,
  matnr LIKE bseg-matnr,
  maktx LIKE makt-maktx,
  hkont LIKE bseg-hkont,"总账科目
  txt20 LIKE skat-txt20,
  dmbtr LIKE bseg-dmbtr,"金额
  fkimg LIKE vbrp-fkimg,"数量
  VRKME LIKE vbrp-VRKME,"销售单位
  netpr LIKE vbap-netpr,"单价
  kunrg LIKE vbrk-kunrg,
  name1 LIKE kna1-name1,
  AUBEL LIKE VBRP-AUBEL,
  dmbtr1 LIKE bseg-dmbtr,"折扣折让
  netpr1 LIKE vbap-netpr,"单价
  AUART LIKE VBAK-AUART,"订单类型
  BEZEI LIKE TVAKT-BEZEI,"订单类型描述
END OF gt_result.

DATABEGIN OF gt_bkpf OCCURS 0,
  bukrs LIKE bkpf-bukrs,
  belnr LIKE bkpf-belnr,
  gjahr LIKE bkpf-gjahr,
  budat LIKE bkpf-budat,
  awkey LIKE bkpf-awkey,"发票号
  XBLNR LIKE BKPF-XBLNR,
  BLART LIKE BKPF-BLART,
END OF gt_bkpf.

DATABEGIN OF gt_bseg OCCURS 0,
  bukrs LIKE bseg-bukrs,
  belnr LIKE bseg-belnr,
  gjahr LIKE bseg-gjahr,
  buzei LIKE bseg-buzei,
  shkzg LIKE bseg-shkzg,
  dmbtr LIKE bseg-dmbtr,
  matnr LIKE bseg-matnr,
  hkont LIKE bseg-hkont,
  menge like bseg-menge,
  MEINS like bseg-MEINS,
  ERFMG like bseg-ERFMG,
  ERFME like bseg-ERFME,
  VBUND like bseg-VBUND,
END OF gt_bseg.

DATA:BEGIN OF lt_vbrp OCCURS 0,
  vbeln LIKE vbrp-vbeln,"发票号
  posnr LIKE vbrp-posnr,
  matnr LIKE vbrp-matnr,
  fkimg LIKE vbrp-fkimg,
  VRKME LIKE vbrp-VRKME,
  MEINS LIKE vbrp-MEINS,
  FKLMG LIKE vbrp-FKLMG,
END OF lt_vbrp.

data gt_bseg1 like TABLE OF gt_bseg WITH HEADER LINE.

INCLUDE zfir_0018s01.

SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE t1.
SELECT-OPTIONS:s_bukrs FOR bkpf-bukrs OBLIGATORY,
               s_gjahr FOR bkpf-gjahr DEFAULT sy-datum+0(4),
               s_budat FOR bkpf-budat,
               s_hkont FOR bseg-hkont,
               s_auart FOR VBAK-AUART,
               s_matnr FOR bseg-matnr.
SELECTION-SCREEN END OF BLOCK blk1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_hkont-low.
  PERFORM frm_onf4_hkont USING 'S_HKONT-LOW'.

INCLUDE zfir_0018e01.

INITIALIZATION.
  t1 '数据库选择'.

AT SELECTION-SCREEN.
  PERFORM frm_auth_check.

START-OF-SELECTION.
  PERFORM frm_select_data.
  PERFORM frm_comment_build.
  PERFORM init_layout.      "设置输出格式
  PERFORM init_fieldcat.    "设置输出字段
  PERFORM frm_output.       "输出

INCLUDE zfir_0018f01.

FORM frm_onf4_hkont USING p_field.
  TYPES:BEGIN OF ty_skat,
      saknr TYPE skat-saknr,
      txt20 TYPE skat-txt20,
  END OF ty_skat.
  DATA:lt_skat TYPE TABLE OF ty_skat WITH HEADER LINE.

  SELECT
    saknr
    txt20
    FROM skat
    INTO TABLE lt_skat
    WHERE saknr IN ('6001010000','6001020000','6051010000','6051020000','6051980000',
                    '6401010000','6401020000','6402010000','6402020000','6402980000')
        AND spras sy-langu.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
*     DDIC_STRUCTURE   = ' '
      retfield         'SAKNR' "预选值要填入的字段名
*     PVALKEY          = ' '
      dynpprog         sy-repid
      dynpnr           sy-dynnr
      dynprofield      p_field  " 此屏幕字段参数
      value_org        'S'
*     multiple_choice  = 'X'
      callback_program sy-repid
    TABLES
      value_tab        lt_skat[]    " 存放预选值清单的内表
*     FIELD_TAB        =
*     DYNPFLD_MAPPING  =
    EXCEPTIONS
      parameter_error  1
      no_values_found  2
      OTHERS           3.
ENDFORM.                    " frm_onf4_bukrs

*&---------------------------------------------------------------------*
*&      Form  frm_auth_check
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_auth_check.
  DATA lt_t001 LIKE TABLE OF t001 WITH HEADER LINE.

  SELECT
    bukrs
    INTO CORRESPONDING FIELDS OF TABLE lt_t001
    FROM t001
    WHERE bukrs IN s_bukrs.

  LOOP AT lt_t001.
    CALL FUNCTION'ZZ_CHECK_REPAUTH'
    EXPORTING
            i_module 'FC'
            i_bukrs lt_t001-bukrs
*          i_werks =
    EXCEPTIONS
            not_authorized 1
            no_module 2
    OTHERS 3.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
  ENDLOOP.
ENDFORM." FRM_CHECK_INPUT

*&---------------------------------------------------------------------*
*&      Form  frm_select_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_select_data.

PERFORM FRM_ADDED.

  SELECT
    bukrs
    belnr
    gjahr
    budat
    awkey
    XBLNR
    BLART
    INTO CORRESPONDING FIELDS OF TABLE gt_bkpf
    FROM bkpf
    WHERE bukrs IN s_bukrs AND
          gjahr IN s_gjahr AND
          budat IN s_budat AND
          xreversal EQ '' AND"冲销标识
          blart 'RV'.

  SELECT
    bukrs
    belnr
    gjahr
    budat
    awkey
    XBLNR
    BLART
    APPENDING CORRESPONDING FIELDS OF TABLE gt_bkpf
    FROM bkpf
    WHERE bukrs IN s_bukrs AND
          gjahr IN s_gjahr AND
          budat IN s_budat AND
          xreversal EQ '' AND"冲销标识
          blart IN ('WL','ML','SA'AND
*          BVORG EQ '' AND   "公司往来记帐业务凭证号
          BUKRS IN ('1000','1010','1020','1030').
*DELETE L_T_BKPF WHERE BLART = 'ML'.

  IF gt_bkpf[] IS NOT INITIAL.
    SELECT
      bukrs
      belnr
      gjahr
      buzei
      shkzg
      dmbtr
      matnr
      hkont
      menge
      MEINS
      ERFMG
      ERFME
      VBUND
      INTO CORRESPONDING FIELDS OF TABLE gt_bseg
      FROM bseg
      FOR ALL ENTRIES IN gt_bkpf
      WHERE bukrs gt_bkpf-bukrs AND
            belnr gt_bkpf-belnr AND
            gjahr gt_bkpf-gjahr AND
            matnr IN s_matnr AND
            hkont IN s_hkont AND
            hkont IN ('6001010000','6001020000','6051010000','6051020000','6051980000',
                      '6401010000','6401020000','6402010000','6402020000','6402980000').

    SELECT
      bukrs
      belnr
      gjahr
      buzei
      shkzg
      dmbtr
      matnr
      hkont
      menge
      MEINS
      ERFMG
      ERFME
      VBUND
      INTO CORRESPONDING FIELDS OF TABLE gt_bseg1
      FROM bseg
      FOR ALL ENTRIES IN gt_bkpf
      WHERE bukrs gt_bkpf-bukrs AND
            belnr gt_bkpf-belnr AND
            gjahr gt_bkpf-gjahr AND
            matnr IN s_matnr AND
            hkont IN ('1122030000').

    IF gt_bseg[] IS NOT INITIAL.
      LOOP AT gt_bseg.
        READ TABLE gt_bkpf WITH KEY bukrs gt_bseg-bukrs
                                    belnr gt_bseg-belnr
                                    gjahr gt_bseg-gjahr.
        IF sy-subrc 0.
          gt_result-belnr gt_bkpf-belnr.
          gt_result-bukrs gt_bkpf-bukrs.
          gt_result-gjahr gt_bkpf-gjahr.
          gt_result-budat gt_bkpf-budat.
          if gt_result-bukrs 1310.
          gt_result-awkey gt_bkpf-awkey.
          else.
          gt_result-awkey gt_bkpf-XBLNR.
          endif.
          gt_result-belnr gt_bseg-belnr.
*          if gt_bseg-bukrs = '1000' OR gt_bseg-bukrs = '1010' OR gt_bseg-bukrs = '1020' OR gt_bseg-bukrs = '1030'.
*            if gt_bseg-hkont = '6401010000' OR gt_bseg-hkont = '6401020000' OR gt_bseg-hkont = '6402010000' OR gt_bseg-hkont = '6402020000' OR gt_bseg-hkont = '6402980000'.
*          gt_result-buzei = gt_bseg-buzei. "20120922
*              endif.
*          endif.
          gt_result-shkzg gt_bseg-shkzg.
          gt_result-matnr gt_bseg-matnr.
          gt_result-hkont gt_bseg-hkont.
          gt_result-dmbtr gt_bseg-dmbtr.

if gt_bseg-bukrs '1000' OR gt_bseg-bukrs '1010' OR gt_bseg-bukrs '1020' OR gt_bseg-bukrs '1030'.
  IF gt_bseg-hkont '6401010000' OR gt_bseg-hkont '6401020000' OR gt_bseg-hkont '6402010000' OR gt_bseg-hkont '6402020000' OR gt_bseg-hkont '6402980000'.
    gt_result-fkimg gt_bseg-menge.
    gt_result-VRKME gt_bseg-MEINS.
    IF gt_bseg-ERFMG NE AND gt_bseg-ERFME IS NOT INITIAL.
    gt_result-fkimg gt_bseg-ERFMG.
    gt_result-VRKME gt_bseg-ERFME.
    ENDIF.
    CONCATENATE '0090' gt_bseg-VBUND INTO gt_result-KUNRG.
  ENDIF.
ENDIF.

*if gt_bseg-hkont = '6001010000'.
*READ TABLE gt_bseg1 WITH KEY bukrs = gt_bseg-bukrs belnr = gt_bseg-belnr gjahr = gt_bseg-gjahr matnr = gt_bseg-matnr.
*if sy-subrc = 0.
*if gt_result-shkzg = 'H'.
*gt_result-dmbtr1 = 0 - gt_bseg1-dmbtr.
*ELSE.
*gt_result-dmbtr1 = gt_bseg1-dmbtr.
*ENDIF.
*endif.
*endif.

          COLLECT gt_result.
          CLEAR gt_result.
        ENDIF.
      ENDLOOP.

loop at gt_bseg1.
  if gt_bseg1-bukrs '1330'.
    READ TABLE gt_result WITH KEY bukrs gt_bseg1-bukrs belnr gt_bseg1-belnr gjahr gt_bseg1-gjahr matnr gt_bseg1-matnr
                                  hkont '6001020000'.
    if sy-subrc 0.
      if gt_bseg1-shkzg 'H'.
      gt_result-dmbtr1 gt_result-dmbtr1 gt_bseg1-dmbtr.
      ELSE.
      gt_result-dmbtr1 gt_result-dmbtr1 + gt_bseg1-dmbtr.
      ENDIF.
    MODIFY gt_result INDEX SY-TABIX TRANSPORTING dmbtr1.
    endif.
  else.
    READ TABLE gt_result WITH KEY bukrs gt_bseg1-bukrs belnr gt_bseg1-belnr gjahr gt_bseg1-gjahr matnr gt_bseg1-matnr
                                  hkont '6001010000'.
    if sy-subrc 0.
      if gt_bseg1-shkzg 'H'.
      gt_result-dmbtr1 gt_result-dmbtr1 gt_bseg1-dmbtr.
      ELSE.
      gt_result-dmbtr1 gt_result-dmbtr1 + gt_bseg1-dmbtr.
      ENDIF.
    MODIFY gt_result INDEX SY-TABIX TRANSPORTING dmbtr1.
    endif.
  endif.
endloop.


      LOOP AT gt_result.
        REFRESH lt_vbrp.
        SELECT
          vbeln
          posnr
          matnr
          fkimg
          VRKME
          MEINS
          FKLMG
          INTO CORRESPONDING FIELDS OF TABLE lt_vbrp
          FROM vbrp
          WHERE vbeln gt_result-awkey AND
                matnr gt_result-matnr."开票数量
if sy-subrc 0.

*LOOP AT l_t_vbrp.
*  READ TABLE l_t_vbfa WITH KEY VBELV = gt_result-awkey VBELN = l_t_vbrp-VBELN POSNN = l_t_vbrp-POSNR.
*  IF SY-SUBRC NE 0.
*    DELETE l_t_vbrp.
*  ENDIF.
*ENDLOOP.

        DATA:l_fkimg LIKE vbrp-fkimg.
        l_fkimg 0.
        LOOP AT lt_vbrp.
          l_fkimg l_fkimg + lt_vbrp-fkimg.
        ENDLOOP.
        gt_result-fkimg l_fkimg."开票数量
endif.
        SELECT SINGLE kunrg INTO gt_result-kunrg FROM vbrk WHERE vbeln gt_result-awkey.

*addded by pym 20120920
DATABEGIN OF L_T_VBFA OCCURS 0,
  VBELV LIKE VBFA-VBELV,
  POSNV LIKE VBFA-POSNV,
  VBELN LIKE VBFA-VBELN,
  POSNN LIKE VBFA-POSNN,
  VBTYP_N LIKE VBFA-VBTYP_N,"发票号
*  XBLNR LIKE BKPF-XBLNR,
END OF L_T_VBFA.
DATABEGIN OF L_T_VBRK OCCURS 0,
  VBELN LIKE VBRK-VBELN,
  FKART LIKE VBRK-FKART,
  FKTYP LIKE VBRK-FKTYP,
  VBTYP LIKE VBRK-VBTYP,
  FKSTO LIKE VBRK-FKSTO,
  KUNRG LIKE VBRK-KUNRG,
END OF L_T_VBRK.
DATA:BEGIN OF l_t_vbrp OCCURS 0,
  vbeln LIKE vbrp-vbeln,"发票号
  posnr LIKE vbrp-posnr,
  matnr LIKE vbrp-matnr,
  fkimg LIKE vbrp-fkimg,
END OF l_t_vbrp.

REFRESHL_T_VBRK,l_t_vbrp,L_T_VBFA.
IF gt_result-BUKRS '1000' OR gt_result-BUKRS '1010' OR gt_result-BUKRS '1020' OR gt_result-BUKRS '1030'.
  IF gt_result-awkey IS INITIAL.
  CLEAR gt_result-KUNRG.
  ELSE.
select
  VBELV
  POSNV
  VBELN
  POSNN
  VBTYP_N
  INTO CORRESPONDING FIELDS OF TABLE l_t_vbfa
  FROM VBFA
  WHERE VBELV gt_result-awkey
  AND VBTYP_N '5' OR VBTYP_N '6')"'M'.
*  AND VBTYP_N = '5'. "'M'.
IF SY-SUBRC 0.
SELECT
  VBELN
  FKART
  FKTYP
  VBTYP
  FKSTO
  KUNRG
  INTO CORRESPONDING FIELDS OF TABLE L_T_VBRK
  FROM VBRK
  FOR ALL ENTRIES IN l_t_vbfa
  WHERE VBELN l_t_vbfa-VBELN
  AND FKART 'IV' OR FKART 'IG' OR FKART 'ZIV' OR FKART 'ZIG' )
  AND FKSTO NE 'X'.
IF SY-SUBRC 0.
SELECT
  VBELN
  POSNR
  MATNR
  FKIMG
  INTO CORRESPONDING FIELDS OF TABLE l_t_vbrp
  FROM VBRP
  FOR ALL ENTRIES IN L_T_VBRK
  WHERE VBELN L_T_VBRK-VBELN
  AND MATNR gt_result-matnr.

LOOP AT l_t_vbrp.
  READ TABLE l_t_vbfa WITH KEY VBELV gt_result-awkey VBELN l_t_vbrp-VBELN POSNN l_t_vbrp-POSNR.
  IF SY-SUBRC NE 0.
    DELETE l_t_vbrp.
  ENDIF.
ENDLOOP.
        l_fkimg 0.
        LOOP AT l_t_vbrp.
          l_fkimg l_fkimg + l_t_vbrp-fkimg.
        ENDLOOP.
        gt_result-fkimg l_fkimg.

        READ TABLE L_T_VBRK INDEX 1.
*        READ TABLE L_T_VBRK.
        IF SY-SUBRC 0.
        gt_result-awkey L_T_VBRK-VBELN.
        gt_result-KUNRG L_T_VBRK-KUNRG.
        ENDIF.
ENDIF.
else.
**  IF SY-UNAME = 'ZBIT'.
*    DELETE gt_result.
*  CONTINUE.
**  EXIT.
*  gt_result-fkimg = gt_bseg.
**  ENDIF.
ENDIF.
ENDIF.
ENDIF.
*end of inserted

*        SELECT SINGLE kunrg INTO gt_result-kunrg FROM vbrk WHERE vbeln = gt_result-awkey.
        SELECT SINGLE name1 INTO gt_result-name1 FROM kna1 WHERE kunnr gt_result-kunrg.
        SELECT SINGLE butxt INTO gt_result-butxt FROM t001 WHERE bukrs gt_result-bukrs.
        SELECT SINGLE maktx INTO gt_result-maktx FROM makt WHERE spras sy-langu AND matnr gt_result-matnr.
        SELECT SINGLE txt20 INTO gt_result-txt20 FROM skat WHERE spras sy-langu AND saknr gt_result-hkont.
        IF gt_result-shkzg 'H'.
          gt_result-dmbtr gt_result-dmbtr.
          gt_result-fkimg gt_result-fkimg.
        ENDIF.
        IF gt_result-fkimg IS NOT INITIAL.
          gt_result-netpr gt_result-dmbtr / gt_result-fkimg.
        ENDIF.
        IF gt_result-dmbtr1 IS NOT INITIAL AND gt_result-fkimg IS NOT INITIAL.
          gt_result-netpr1 gt_result-dmbtr + gt_result-dmbtr1 / gt_result-fkimg.
        ENDIF.


        MODIFY gt_result.
        CLEAR gt_result.
      ENDLOOP.
      SORT gt_result BY budat belnr.
    ELSE.
      MESSAGE '未找到相关数据' TYPE 'S' DISPLAY LIKE 'E'.
      STOP.
    ENDIF.
  ELSE.
    MESSAGE '未找到相关数据' TYPE 'S' DISPLAY LIKE 'E'.
    STOP.
  ENDIF.

PERFORM FRM_ADDED_ONE"免费订单和免费项目

PERFORM FRM_ADDED_TWO"订单类型 订单类型描述

ENDFORM.                    "frm_select_data

*&---------------------------------------------------------------------*
*&      Form  frm_comment_build
*&---------------------------------------------------------------------*
*       设置表头
*----------------------------------------------------------------------*
FORM frm_comment_build .
  CLEAR:gt_listheader,gt_listheader[].
  gt_listheader-typ  'H'.
  gt_listheader-info '产品收入明细报表'.
  APPEND gt_listheader.
ENDFORM.                    " FRM_COMMENT_BUILD

*&---------------------------------------------------------------------*
*&      Form  init_layout
*&---------------------------------------------------------------------*
*       设置输出格式
*----------------------------------------------------------------------*
FORM init_layout .
*  gs_layout-zebra = 'X'.
  gs_layout-colwidth_optimize 'X'."列宽自动优化
  gs_layout-totals_only  'X'.
ENDFORM.                    " INIT_LAYOUT

*&---------------------------------------------------------------------*
*&      Form  init_fieldcat
*&---------------------------------------------------------------------*
*       设置输出字段
*----------------------------------------------------------------------*
FORM init_fieldcat.
  CLEAR:gt_fieldcat[].
  PERFORM frm_fill_fieldcat USING 'BELNR' '凭证编码' 'X'.
*IF SY-TCODE = 'ZFI0018'.
*  PERFORM frm_fill_fieldcat USING 'BUZEI' '行项目' space.  "
*endif.
  PERFORM frm_fill_fieldcat USING 'AWKEY' '出具发票' 'X'.
  PERFORM frm_fill_fieldcat USING 'AUBEL' '订单号' space.
  PERFORM frm_fill_fieldcat USING 'BUKRS' '公司代码' space.
  PERFORM frm_fill_fieldcat USING 'BUTXT' '公司描述' space.
  PERFORM frm_fill_fieldcat USING 'AUART' '订单类型' space.
  PERFORM frm_fill_fieldcat USING 'BEZEI' '订单类型描述' space.
  PERFORM frm_fill_fieldcat USING 'KUNRG' '客户' space.
  PERFORM frm_fill_fieldcat USING 'NAME1' '客户描述' space.
  PERFORM frm_fill_fieldcat USING 'GJAHR' '会计年度' space.
  PERFORM frm_fill_fieldcat USING 'BUDAT' '过账日期' space.
  PERFORM frm_fill_fieldcat USING 'MATNR' '物料编码' space.
  PERFORM frm_fill_fieldcat USING 'MAKTX' '物料描述' space.
  PERFORM frm_fill_fieldcat USING 'HKONT' '总账科目' space.
  PERFORM frm_fill_fieldcat USING 'TXT20' '总账科目描述' space.
  PERFORM frm_fill_fieldcat USING 'DMBTR' '金额' space.
  PERFORM frm_fill_fieldcat USING 'FKIMG' '数量' space.
  PERFORM frm_fill_fieldcat USING 'NETPR' '不含税单价' space.
  PERFORM frm_fill_fieldcat USING 'DMBTR1' '折扣折让' space.
  PERFORM frm_fill_fieldcat USING 'NETPR1' '单价' space.
ENDFORM.                    " INIT_FIELDCAT

*&---------------------------------------------------------------------*
*&      Form  FRM_FILL_FIELDCAT
*&---------------------------------------------------------------------*
*       填充fieldcat
*----------------------------------------------------------------------*
FORM frm_fill_fieldcat USING p_fieldname p_text p_hotspot.
  CLEAR gt_fieldcat.
  gt_fieldcat-fieldname p_fieldname.
  gt_fieldcat-seltext_m p_text.
  gt_fieldcat-no_zero 'X'.
  IF p_fieldname 'DMBTR' OR p_fieldname 'FKIMG'.
    gt_fieldcat-do_sum 'X'.
  ENDIF.
  gt_fieldcat-hotspot p_hotspot.
*IF SY-TCODE = 'ZFI0018'.
*if p_fieldname = 'BUZEI'.
*  gt_fieldcat-no_out = 'X'.
*endif.
*endif.
  APPEND gt_fieldcat.
ENDFORM.                    " FRM_FILL_FIELDCAT

*&---------------------------------------------------------------------*
*&      Form  frm_output
*&---------------------------------------------------------------------*
*       输出
*----------------------------------------------------------------------*
FORM frm_output .
*ALV输出
  g_repid sy-repid."作用于表头输出

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      g_repid
      i_callback_user_command 'FRM_USER_COMMAND'"处理用户双击事件
      is_layout               gs_layout "布局设置
      it_fieldcat             gt_fieldcat[]
      i_save                  'A'
      is_variant              gs_disvar
      it_events               gt_events[] "ALV表头
*     it_sort                 = gt_sort[] "小计
    TABLES
      t_outtab                gt_result[]
    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_top_of_page
*&---------------------------------------------------------------------*
*       表头
*----------------------------------------------------------------------*
FORM  frm_top_of_page.
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary gt_listheader[].
ENDFORM.                    "FRM_TOP_OF_PAGE


*&---------------------------------------------------------------------*
*&      Form  frm_user_command
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM frm_user_command USING r_ucomm LIKE sy-ucomm
                                            rs_selfield TYPE slis_selfield.
  rs_selfield-refresh 'X'.
  CASE r_ucomm.
    WHEN '&IC1'.
      IF rs_selfield-fieldname 'BELNR'.
        READ TABLE gt_result INDEX rs_selfield-tabindex.
        IF sy-subrc 0.
          SET PARAMETER ID 'BLN' FIELD gt_result-belnr.
          SET PARAMETER ID 'BUK' FIELD gt_result-bukrs.
          SET PARAMETER ID 'GJR' FIELD gt_result-gjahr.
          CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
        ENDIF.
      ELSEIF rs_selfield-fieldname 'AWKEY'.
        READ TABLE gt_result INDEX rs_selfield-tabindex.
        IF sy-subrc 0.
          SET PARAMETER ID 'VF' FIELD gt_result-awkey.
          CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
        ENDIF.
      ENDIF.
  ENDCASE.
ENDFORM.                    " frm_user_command

*&---------------------------------------------------------------------*
*&      Form  FRM_ADDED
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_ADDED .

DATA WT_TEMP LIKE ZZT_FI_005.
  WT_TEMP-DATUM SY-DATUM.
  WT_TEMP-UZEIT SY-UZEIT.
  WT_TEMP-UNAME SY-UNAME.
  WT_TEMP-TCODE SY-TCODE.
  WT_TEMP-CPROG SY-CPROG.
  WT_TEMP-BATCH SY-BATCH.
  WT_TEMP-CALLD SY-CALLD.
  CONCATENATE 'bukrs:' s_bukrs-LOW ',' s_bukrs-HIGH ';gjahr:' s_gjahr-LOW ',' s_gjahr-HIGH
  ';budat:' s_budat-LOW ',' s_budat-HIGH ';hkont:' s_hkont-LOW ',' s_hkont-HIGH
  ';matnr:' s_matnr-LOW ',' s_matnr-HIGH INTO WT_TEMP-TITLE.
  MODIFY ZZT_FI_005 FROM WT_TEMP.
  IF SY-SUBRC 0.
*  IF sy-subrc <> 0.
*    ROLLBACK WORK.
*  ELSE.
    COMMIT WORK.
  ENDIF.

ENDFORM.                    " FRM_ADDED


*&---------------------------------------------------------------------*
*&      Form  FRM_ADDED_ONE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_ADDED_ONE .

DATABEGIN OF L_T_VBRK OCCURS 0,
  VBELN LIKE VBRK-VBELN,
  FKART LIKE VBRK-FKART,
  FKTYP LIKE VBRK-FKTYP,
  VBTYP LIKE VBRK-VBTYP,
  FKDAT LIKE VBRK-FKDAT,
  BUKRS LIKE VBRK-BUKRS,
  XBLNR LIKE VBRK-XBLNR,
  KUNRG LIKE VBRK-KUNRG,
  END OF L_T_VBRK.

DATABEGIN OF L_T_VBRP OCCURS 0,
  VBELN LIKE VBRP-VBELN,
  POSNR LIKE VBRP-POSNR,
  FKIMG LIKE VBRP-FKIMG,
  VGTYP LIKE VBRP-VGTYP,
  AUBEL LIKE VBRP-AUBEL,
  AUPOS LIKE VBRP-AUPOS,
  MATNR LIKE VBRP-MATNR,
  NETWR LIKE VBRP-NETWR,
  END OF L_T_VBRP.

DATA:L_V_AUART TYPE AUART.
DATA L_T_VBRP_1 LIKE TABLE OF L_T_VBRP WITH HEADER LINE.
DATA L_T_VBRP_2 LIKE TABLE OF L_T_VBRP WITH HEADER LINE.
DATA L_T_VBRP_3 LIKE TABLE OF L_T_VBRP WITH HEADER LINE.

select
  VBELN
  FKART
  FKTYP
  VBTYP
  FKDAT
  BUKRS
  XBLNR
  KUNRG
  INTO CORRESPONDING FIELDS OF TABLE L_T_VBRK
  FROM VBRK
  WHERE FKART 'ZBF2' OR FKART 'RE' )
  AND FKTYP 'L'
*  AND VBTYP = 'M'
  AND FKDAT IN s_budat
  AND BUKRS IN s_bukrs
  AND BUKRS IN ('1300','1310','1320','1330','1340','1350')
  AND fksto <> 'X'.


IF L_T_VBRK[] IS NOT INITIAL.
SELECT
  VBELN
  POSNR
  FKIMG
  VGTYP
  AUBEL
  AUPOS
  MATNR
*  ARKTX
  NETWR
  INTO CORRESPONDING FIELDS OF TABLE L_T_VBRP
  FROM VBRP
  FOR ALL ENTRIES IN L_T_VBRK
  WHERE VBELN L_T_VBRK-VBELN.
ENDIF.

LOOP AT L_T_VBRP.
SELECT SINGLE AUART INTO L_V_AUART FROM VBAK WHERE VBELN L_T_VBRP-AUBEL.
  if sy-subrc 0.
    IF L_V_AUART 'ZBFR'.
        APPEND L_T_VBRP TO L_T_VBRP_2.
    ELSE."IF L_V_AUART = 'ZBOR' OR L_V_AUART = 'ZBCE' OR L_V_AUART = 'ZBCR' OR L_V_AUART = 'ZBRE' OR L_V_AUART = 'ZBRF'.
      IF L_T_VBRP-NETWR NE 0.
*      DELETE L_T_VBRP.
      ELSE.
        APPEND L_T_VBRP TO L_T_VBRP_1.
      ENDIF.
*    ELSE.
*      DELETE L_T_VBRP.
    ENDIF.
  endif.
ENDLOOP.

DELETE L_T_VBRP WHERE MATNR NOT IN s_matnr.
DELETE L_T_VBRP_1 WHERE MATNR NOT IN s_matnr.
DELETE L_T_VBRP_2 WHERE MATNR NOT IN s_matnr.

LOOP AT L_T_VBRP.
LOOP AT L_T_VBRP_1 WHERE VBELN L_T_VBRP-VBELN.
IF L_T_VBRP-MATNR L_T_VBRP_1-MATNR AND L_T_VBRP-POSNR NE L_T_VBRP_1-POSNR.
IF L_T_VBRP-NETWR NE 0.
APPEND L_T_VBRP TO L_T_VBRP_3.
ENDIF.
ENDIF.
ENDLOOP.
ENDLOOP.

LOOP AT L_T_VBRP_1.
READ TABLE L_T_VBRP_3 WITH KEY VBELN L_T_VBRP_1-VBELN.
IF SY-SUBRC 0.
*  DELETE L_T_VBRP_1.
ELSE.
  APPEND L_T_VBRP_1 TO L_T_VBRP_2.
ENDIF.
ENDLOOP.


DATA L_V_TITLE TYPE VALUE 0.
READ TABLE gt_bseg WITH KEY HKONT '6001010000' BUKRS '1300'.
IF SY-SUBRC 0.
L_V_TITLE 1.
ENDIF.
READ TABLE gt_bseg WITH KEY HKONT '6001010000' BUKRS '1310'.
IF SY-SUBRC 0.
L_V_TITLE 1.
ENDIF.
READ TABLE gt_bseg WITH KEY HKONT '6001010000' BUKRS '1320'.
IF SY-SUBRC 0.
L_V_TITLE 1.
ENDIF.
READ TABLE gt_bseg WITH KEY HKONT '6001010000' BUKRS '1330'.
IF SY-SUBRC 0.
L_V_TITLE 1.
ENDIF.
READ TABLE gt_bseg WITH KEY HKONT '6001010000' BUKRS '1340'.
IF SY-SUBRC 0.
L_V_TITLE 1.
ENDIF.


*IF L_V_TITLE = 1.
*LOOP AT L_T_VBRP.
*  READ TABLE L_T_VBRK WITH KEY VBELN = L_T_VBRP-VBELN.
*IF SY-SUBRC = 0.
*gt_result-AUBEL = L_T_VBRP-AUBEL.
*gt_result-bukrs = L_T_VBRK-bukrs.
*gt_result-gjahr = L_T_VBRK-FKDAT+0(4).
*gt_result-budat = L_T_VBRK-FKDAT.
*gt_result-KUNRG = L_T_VBRK-KUNRG.
*gt_result-MATNR = L_T_VBRP-MATNR.
*gt_result-hkont = '6001010000'.
*gt_result-fkimg = 0 - L_T_VBRP-fkimg.
*        SELECT SINGLE name1 INTO gt_result-name1 FROM kna1 WHERE kunnr = gt_result-kunrg.
*        SELECT SINGLE butxt INTO gt_result-butxt FROM t001 WHERE bukrs = gt_result-bukrs.
*        SELECT SINGLE maktx INTO gt_result-maktx FROM makt WHERE spras = sy-langu AND matnr = gt_result-matnr.
*        SELECT SINGLE txt20 INTO gt_result-txt20 FROM skat WHERE spras = sy-langu AND saknr = gt_result-hkont.
*
*APPEND gt_result.
*CLEAR gt_result.
*ENDIF.
*ENDLOOP.
*ENDIF.

IF L_V_TITLE 1.
LOOP AT L_T_VBRP_2.
  READ TABLE L_T_VBRK WITH KEY VBELN L_T_VBRP_2-VBELN.
IF SY-SUBRC 0.
gt_result-AUBEL L_T_VBRP_2-AUBEL.
gt_result-bukrs L_T_VBRK-bukrs.
gt_result-gjahr L_T_VBRK-FKDAT+0(4).
gt_result-budat L_T_VBRK-FKDAT.
gt_result-KUNRG L_T_VBRK-KUNRG.
gt_result-MATNR L_T_VBRP_2-MATNR.
gt_result-hkont '6001010000'.
IF L_T_VBRK-FKART 'ZBF2'.
gt_result-fkimg L_T_VBRP_2-fkimg.
ELSEIF L_T_VBRK-FKART 'RE'.
gt_result-fkimg L_T_VBRP_2-fkimg.
ENDIF.
        SELECT SINGLE name1 INTO gt_result-name1 FROM kna1 WHERE kunnr gt_result-kunrg.
        SELECT SINGLE butxt INTO gt_result-butxt FROM t001 WHERE bukrs gt_result-bukrs.
        SELECT SINGLE maktx INTO gt_result-maktx FROM makt WHERE spras sy-langu AND matnr gt_result-matnr.
        SELECT SINGLE txt20 INTO gt_result-txt20 FROM skat WHERE spras sy-langu AND saknr gt_result-hkont.

APPEND gt_result.
CLEAR gt_result.
ENDIF.
ENDLOOP.
ENDIF.


ENDFORM.                    " FRM_ADDED_ONE


*&---------------------------------------------------------------------*
*&      Form  FRM_ADDED_TWO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_ADDED_TWO .
data l_v_AUBEL type VBELN_VA.
data l_v_FKART type FKART.
data l_v_VBELV type VBELN.


LOOP AT gt_result.


IF gt_result-AUBEL is NOT INITIAL.
    SELECT SINGLE AUART into gt_result-AUART FROM VBAK WHERE VBELN gt_result-AUBEL.

ELSEIF gt_result-AWKEY is NOT INITIAL.
    SELECT SINGLE AUBEL INTO l_v_AUBEL FROM VBRP WHERE VBELN gt_result-AWKEY.
      if sy-subrc 0.
            gt_result-AUBEL l_v_AUBEL.
        SELECT SINGLE FKART INTO l_v_FKART FROM VBRK WHERE VBELN gt_result-AWKEY.
          IF SY-SUBRC 0.
            IF l_v_FKART EQ 'ZIV'.
            SELECT SINGLE BSART INTO gt_result-AUART FROM EKKO WHERE EBELN l_v_AUBEL.
            ELSE.
            SELECT SINGLE AUART into gt_result-AUART FROM VBAK WHERE VBELN l_v_AUBEL.
            ENDIF.
          ENDIF.
      else.
        SELECT SINGLE VBELV INTO l_v_VBELV FROM vbfa WHERE VBELN gt_result-AWKEY AND VBTYP_N 'J'.
          IF SY-SUBRC 0.
            gt_result-AUBEL l_v_VBELV.
            SELECT SINGLE AUART into gt_result-AUART FROM VBAK WHERE VBELN l_v_VBELV.
          ENDIF.
      endif.

ELSE.
endif.


if gt_result-AUART is NOT INITIAL .
  SELECT SINGLE BEZEI INTO gt_result-BEZEI FROM TVAKT WHERE SPRAS '1' AND AUART gt_result-AUART.
    IF SY-SUBRC 0.
    ELSE.
      SELECT SINGLE BATXT INTO gt_result-BEZEI FROM T161T WHERE SPRAS '1' AND BSART gt_result-AUART AND BSTYP 'F' .
    ENDIF.
endif.
MODIFY gt_result TRANSPORTING AUART BEZEI AUBEL.

ENDLOOP.

DELETE gt_result WHERE AUART NOT IN S_AUART.

ENDFORM.                    " FRM_ADDED_TWO

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值