abap中TEXT_CONVERT_XLS_TO_SAP、CS_WHERE_USED_MAT的使用

*&---------------------------------------------------------------------*
*& 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ChampaignWolf

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

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

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

打赏作者

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

抵扣说明:

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

余额充值