abap中TEXT_CONVERT_XLS_TO_SAP、CS_WHERE_USED_MAT的使用

本报告通过批量导入的方式查询物料清单(BOM)中指定组件的详细信息,包括组件描述、父项编号、父项描述及替代料编号。
*&---------------------------------------------------------------------*
*& REPORT  ZPP_BOM_BATCH_QUERY
*&
*& REPORTNAME   :BOM批量反查
*&---------------------------------------------------------------------*
*& CREATED BY   : LIUXINYUAN
*& CREATED DATE : 2016-03-01
*&---------------------------------------------------------------------*

REPORT  zpp_bom_batch_query.

TYPE-POOLS: slis.
TYPE-POOLS:icon.

TABLES:t001w,bseg,stpo,stas,mara,makt.

TYPE-POOLS : tpit.
DATA ls_bseg TYPE bseg." WITH HEADER LINE.
DATA it_buztab TYPE tpit_t_buztab WITH HEADER LINE.
DATA errtab TYPE tpit_t_errdoc WITH HEADER LINE.
DATA it_fldtab      TYPE tpit_t_fname       WITH HEADER LINE.

DATA it_tab TYPE truxs_t_text_data.
DATABEGIN OF itab OCCURS 0,
       werks LIKE t001w-werks, "工厂
       idnrk LIKE stpo-idnrk,  "组件编号
       maktx LIKE makt-maktx,  "组件描述
END OF itab.


DATABEGIN OF lt_itab OCCURS 0,
       werks LIKE t001w-werks, "工厂
       idnrk LIKE stpo-idnrk,  "组件编号
       maktx LIKE makt-maktx,  "组件描述
       matnr LIKE mara-matnr,  "父项编号
       maktx1 LIKE makt-maktx, "父项描述
       tdlnr(200),             "替代料编号
END OF lt_itab.



DATA : BEGIN OF itmatnr OCCURS 200,
       idnrk LIKE stpo-idnrk,
       END OF itmatnr.




DATA : BEGIN OF alttab OCCURS 200,
       matnr LIKE mast-matnr,
       menge LIKE stpo-menge,
       END OF alttab.

DATA : BEGIN OF top_code OCCURS 100,
       matnr(18),
       maktx(40),
       meins(3),
       menge LIKE stpo-menge,
       matkl(9),
       wrkst(14),
       END OF top_code.

DATA : BEGIN OF makr OCCURS 10,
       maker(7),
       idnlf(22),
       END OF makr.

DATA : BEGIN OF usedtab OCCURS 100.
        INCLUDE STRUCTURE stpov.
DATA : END OF usedtab.

DATA : BEGIN OF equicat OCCURS 100.
        INCLUDE STRUCTURE cscequi.
DATA : END OF equicat.

DATA : BEGIN OF kndcat OCCURS 100.
        INCLUDE STRUCTURE cscknd.
DATA : END OF kndcat.

DATA : BEGIN OF matcat OCCURS 100.
        INCLUDE STRUCTURE cscmat.
DATA : END OF matcat.

DATA : BEGIN OF stdcat OCCURS 100.
        INCLUDE STRUCTURE   cscstd.
DATA : END OF stdcat.

DATA : BEGIN OF tplcat OCCURS 100.
        INCLUDE STRUCTURE   csctpl.
DATA : END OF tplcat.

DATA : top_cnt(5TYPE n,
       m_cnt(5TYPE n,
       lin(5TYPE n,
       line_cnt(5TYPE n.



**ALV
DATA:gt_event_exit TYPE slis_t_event_exit.
DATA:gs_event_exit TYPE slis_event_exit.

DATA:gt_fieldcat TYPE lvc_t_fcat WITH HEADER LINE.
DATA:gc_glay TYPE lvc_s_glay.
DATA:gs_layout    TYPE lvc_s_layo,     "SLIS_LAYOUT_ALV,
     wk_repid     LIKE sy-repid.
DATA:gs_grid TYPE lvc_s_glay.
DATA:tem_grid TYPE REF TO cl_gui_alv_grid.
DATA:gt_events TYPE slis_t_event.
DATA:gs_events LIKE LINE OF gt_events.

*DATA: RESULT LIKE ITAB OCCURS 0 WITH HEADER LINE.
DATA: result LIKE bseg OCCURS 0 WITH HEADER LINE.
DATA: fieldcat  TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA:variant LIKE disvariant.
DATA lt_bseg LIKE TABLE OF bseg WITH HEADER LINE.


DATA:itstpo TYPE TABLE OF stpo WITH HEADER LINE,
     ttstpo TYPE TABLE OF stpo WITH HEADER LINE,
     itstko TYPE TABLE OF stko WITH HEADER LINE,
     itmast TYPE TABLE OF mast WITH HEADER LINE.



PARAMETER p_file LIKE rlgrap-filename DEFAULT 'C:\'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. "类似上传附件时的那个浏览按钮

******************初始屏幕结束**********************************************************************

******************批量导入的BAPI**********************************************************************

  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_filename     = space
      def_path         = p_file
      mask             = text-001
      mode             = 'O'
    IMPORTING
      filename         = p_file
    EXCEPTIONS
      selection_cancel = 0.

START-OF-SELECTION.

  CLEAR:itab,result.
  CLEAR:itab[],result[].


*excel 数据导入
  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
      i_tab_raw_data       = it_tab
      i_filename           = p_file
    TABLES
      i_tab_converted_data = itab
    EXCEPTIONS
      conversion_failed    = 1
      OTHERS               = 2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ELSE.
    DELETE itab INDEX 1.
  ENDIF.

  REFRESH lt_itab.
  CLEAR lt_itab.

  LOOP AT itab.
    REFRESH usedtab.
    CLEAR usedtab.
    CALL FUNCTION 'CS_WHERE_USED_MAT'
      EXPORTING
        datub                      = '99991231'
        datuv                      = sy-datum
        matnr                      = itab-idnrk
        werks                      = itab-werks
      TABLES
        wultb                      = usedtab
        equicat                    = equicat
        kndcat                     = kndcat
        matcat                     = matcat
        stdcat                     = stdcat
        tplcat                     = tplcat
      EXCEPTIONS
        call_invalid               = 1
        material_not_found         = 2
        no_where_used_rec_found    = 3
        no_where_used_rec_selected = 4
        no_where_used_rec_valid    = 5
        OTHERS                     = 6.

    LOOP AT usedtab WHERE stlan = '1' AND stlst = '1'.
      lt_itab-werks = usedtab-werks.
      lt_itab-idnrk = usedtab-idnrk.
      SELECT SINGLE
             maktx
             INTO lt_itab-maktx
             FROM makt
             WHERE matnr = lt_itab-idnrk
               AND spras = sy-langu.

      lt_itab-matnr = usedtab-matnr.
      SELECT SINGLE
             maktx
             INTO lt_itab-maktx1
             FROM makt
             WHERE matnr = lt_itab-matnr
               AND spras = sy-langu.


      IF usedtab-alpgr <> ''.
        REFRESH itmatnr.
        CLEAR itmatnr.

        SELECT idnrk INTO TABLE itmatnr
          FROM stpo
          WHERE stlnr = usedtab-stlnr
            AND idnrk <> usedtab-idnrk
            AND alpgr = usedtab-alpgr.
        IF itmatnr[] IS NOT INITIAL.
          SORT itmatnr BY idnrk.
          DELETE ADJACENT DUPLICATES FROM itmatnr.
          LOOP AT itmatnr.
            IF lt_itab-tdlnr = ''.
              lt_itab-tdlnr = itmatnr-idnrk.
            ELSE.
              CONCATENATE lt_itab-tdlnr ',' itmatnr-idnrk INTO lt_itab-tdlnr.
            ENDIF.

          ENDLOOP.
          APPEND lt_itab.
          CLEAR lt_itab.
        ELSE.
          APPEND lt_itab.
          CLEAR lt_itab.
        ENDIF.
      ELSE.
        APPEND lt_itab.
        CLEAR lt_itab.
      ENDIF.


    ENDLOOP.
  ENDLOOP.
  SORT lt_itab BY werks idnrk matnr tdlnr DESCENDING.
  DELETE ADJACENT DUPLICATES FROM lt_itab COMPARING werks idnrk matnr." TDLNR.

  PERFORM frm_display.


*&---------------------------------------------------------------------*
*&      FORM  DISPLAY_DATA
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM frm_display .
  REFRESH gt_fieldcat.
  CLEAR gt_fieldcat.
  REFRESH gt_events.
  CLEAR gt_events.
  CLEAR gs_layout.
  CLEAR gs_grid.

  DEFINE fill_alv.
    clear gt_fieldcat.
    gt_fieldcat-fieldname  = &1.
    gt_fieldcat-scrtext_m  = &2 .
    gt_fieldcat-outputlen  = &3.
    if gt_fieldcat-fieldname <> 'SHLV'.
      gt_fieldcat-decimals_o = &4.
    endif.
    append gt_fieldcat.
  END-OF-DEFINITION.


  fill_alv 'WERKS' '工厂    '  '12' ''.
  fill_alv 'IDNRK' '组件编号    '  '18' ''.
  fill_alv 'MAKTX' '组件描述    '  '40' ''.
  fill_alv 'MATNR' '父项编号    '  '18' ''.
  fill_alv 'MAKTX1' '父项描述    '  '40' ''.
  fill_alv 'TDLNR' '替代料编号    '  '60' ''.

  gs_layout-stylefname   = 'FSTYLE'.
  gs_layout-zebra        = 'X'.
*  GS_LAYOUT-CWIDTH_OPT   = 'X'.
*  GS_LAYOUT-BOX_FNAME = 'CHK'.
  gs_grid-edt_cll_cb = 'X'.

*  **************定义事件FORM名称*********************
  gs_events-name = 'CALLER_EXIT'.
  gs_events-form = 'CALLER_EXIT'.
  APPEND gs_events TO gt_events.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_user_command  = 'USER_COMMAND'
*     I_CALLBACK_TOP_OF_PAGE   = 'TOP_OF_PAGE'
      i_callback_pf_status_set = 'SET_PF'
      it_fieldcat_lvc          = gt_fieldcat[]
      i_grid_settings          = gs_grid
      is_layout_lvc            = gs_layout
      i_save                   = 'X'
*     IT_EVENTS                = GT_EVENTS
    TABLES
      t_outtab                 = lt_itab.

ENDFORM.                    " DISPLAY_DATA

*&---------------------------------------------------------------------*
*&      FORM  STANDARD_FULLSCREEN
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
FORM set_pf USING rt_extab TYPE slis_t_extab.

  DATA:BEGIN OF ex_tab OCCURS 0,
           fcode LIKE sy-ucomm,
        END OF ex_tab.

  SET PF-STATUS 'STANDARD_FULLSCREEN'.

ENDFORM.                    "SET_STATUS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Andrew.Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值