空bom查询

55 篇文章 5 订阅

场景:挂空bom 导致部分零件在跑bom时出不来该零件

*&---------------------------------------------------------------------*
*& REPORT ZRPT_MM_BOM_NULL_GET
*&
*&---------------------------------------------------------------------*
*& author 8256
*& date 20210118
*& from
*& Tcode
*&---------------------------------------------------------------------*
REPORT ZRPT_MM_BOM_NULL_GET.

TABLES: MAST,mara.

SELECTION-SCREEN BEGIN OF BLOCK 001 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS S_MATNR FOR MAST-MATNR.          "物料编号
SELECT-OPTIONS S_WERKS FOR MAST-WERKS.          "工厂
SELECT-OPTIONS S_STLAN FOR MAST-STLAN.          "物料清单用途
SELECT-OPTIONS S_STLNR FOR MAST-STLNR.          "物料单
SELECT-OPTIONS S_STLAL FOR MAST-STLAL.          "可选的 BOM
PARAMETERS:pLVORM like mara-LVORM."删除标记
SELECTION-SCREEN END OF BLOCK 001.

TYPES:
  BEGIN OF TYP_DATA,
    MATNR TYPE MAST-MATNR,          "物料编号
    WERKS TYPE MAST-WERKS,          "工厂
    STLAN TYPE MAST-STLAN,          "物料清单用途
    STLNR TYPE MAST-STLNR,          "物料单
    STLAL TYPE MAST-STLAL,          "可选的 BOM
    LOSVN TYPE MAST-LOSVN,          "从批量
    LOSBS TYPE MAST-LOSBS,          "到批量
    ANDAT TYPE MAST-ANDAT,          "日期记录创建于
    ANNAM TYPE MAST-ANNAM,          "创建记录的用户
    AEDAT TYPE MAST-AEDAT,          "更改日期
    AENAM TYPE MAST-AENAM,          "对象更改人员的名称
    CSLTY TYPE MAST-CSLTY,          "标志: 配置物料(物料变式)
    LVORM TYPE MARA-LVORM,         "删除标记
  END OF TYP_DATA.

DATA:
  STDATUM LIKE SY-DATUM,
  STUZEIT LIKE SY-UZEIT,
  GT_DATA     TYPE TABLE OF TYP_DATA WITH HEADER LINE,
  GS_DATA     TYPE TYP_DATA,
  GT_FIELDCAT TYPE LVC_T_FCAT,
  GS_FIELDCAT TYPE LVC_S_FCAT,
  GS_LAYOUT   TYPE LVC_S_LAYO.

INITIALIZATION.
  %_S_MATNR_%_APP_%-TEXT = '物料编号'.
  %_S_WERKS_%_APP_%-TEXT = '工厂'.
  %_S_STLAN_%_APP_%-TEXT = '物料清单用途'.
  %_S_STLNR_%_APP_%-TEXT = '物料单'.
  %_S_STLAL_%_APP_%-TEXT = '可选的 BOM'.
  %_PLVORM_%_APP_%-TEXT = '删除'.

START-OF-SELECTION.
  STDATUM = SY-DATUM.
  STUZEIT = SY-UZEIT.
  PERFORM GET_DATA.
  PERFORM PROCESS_DATA.
  PERform WRITERPTRUNRECORD.
  PERFORM DISPLAY_DATA.

*&---------------------------------------------------------------------*
*&      FORM  GET_DATA
*&---------------------------------------------------------------------*
*       获取数据
*----------------------------------------------------------------------*
FORM GET_DATA.
  SELECT
    MAST~MATNR          "物料编号
    MAST~WERKS          "工厂
    MAST~STLAN          "物料清单用途
    MAST~STLNR          "物料单
    MAST~STLAL          "可选的 BOM
    MAST~LOSVN          "从批量
    MAST~LOSBS          "到批量
    MAST~ANDAT          "日期记录创建于
    MAST~ANNAM          "创建记录的用户
    MAST~AEDAT          "更改日期
    MAST~AENAM          "对象更改人员的名称
    MAST~CSLTY          "标志: 配置物料(物料变式)
    MARA~LVORM
    INTO TABLE GT_DATA
    FROM MAST
    JOIN MARA ON MARA~MATNR = MAST~MATNR
    WHERE MAST~MATNR IN S_MATNR
      AND MARA~LVORM  = PLVORM
      AND MAST~WERKS IN S_WERKS
      AND MAST~STLAN IN S_STLAN
      AND MAST~STLNR IN S_STLNR
      AND MAST~STLAL IN S_STLAL and
      MAST~STLNR not in ( select STLNR from STPO ) and
      MAST~STLNR not in ( select STLNR from STAS )."永久bom
ENDFORM.                    "GET_DATA
*&---------------------------------------------------------------------*
*&      FORM  WRITERPTRUNRECORD
*&---------------------------------------------------------------------*
*       获取数据
*----------------------------------------------------------------------*
FORM WRITERPTRUNRECORD.

  GET TIME.
  CALL FUNCTION 'ZSYS_RPT_RUNRECORD'
    EXPORTING
      TCODE     = SY-TCODE
      PROGRAMM  = SY-CPROG
*     bukrs     = GS_BW-BUKRS
*     werks     = GS_BW-werks
      DATUMRST  = STDATUM
      UZEITRST  = STUZEIT
      BATCH     = SY-BATCH
      DATUMREND = SY-datum
      UZEITREND = sy-UZEIT
      DATUMC    = '20210118'
      RUNNER    = SY-UNAME
      RPTSRC    = 'BOM维护'.

ENDFORM.                    "WRITERPTRUNRECORD
*&---------------------------------------------------------------------*
*&      FORM  PROCESS_DATA
*&---------------------------------------------------------------------*
*       处理数据
*----------------------------------------------------------------------*
FORM PROCESS_DATA.

* data for send function
  DATA DOC_DATA LIKE SODOCCHGI1.
  DATA OBJECT_ID LIKE SOODK.
  DATA OBJCONT   LIKE SOLI OCCURS 10 WITH HEADER LINE.
  DATA RECEIVER LIKE SOMLRECI1 OCCURS 1 WITH HEADER LINE.
  data: objhead like SOLISTI1 OCCURS  0 WITH HEADER LINE,
        objitem like SOLISTI1 OCCURS 0 WITH HEADER LINE.
  data:lt_packing_list like SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,
        ls_packing_list like SOPCKLSTI1.
  data:g_tab_lines TYPE i.
  "Write Packing List for Body
  CLEAR: lt_packing_list, ls_packing_list.
  DESCRIBE TABLE GT_DATA LINES g_tab_lines.
  ls_packing_list-head_start = 1.
  ls_packing_list-head_num   = 0.
  ls_packing_list-body_start = 1.
  ls_packing_list-body_num   = g_tab_lines.
*    ls_packing_list-doc_type   = 'RAW'.                       "V005
  ls_packing_list-doc_type   = 'HTM'.                       "V005
  APPEND ls_packing_list TO lt_packing_list .
  "Write Packing List for Attachment
  ls_packing_list-transf_bin = 'X'.
  ls_packing_list-head_start = 1.
  ls_packing_list-head_num   = 1.
  ls_packing_list-body_start = 1.
  DESCRIBE TABLE objbin LINES ls_packing_list-body_num.
  ls_packing_list-doc_type   = 'XLS'.
  ls_packing_list-obj_descr  = 'EXCEL Attachment'.
  ls_packing_list-obj_name   = 'XLS_ATTACHMENT'.
  APPEND ls_packing_list TO lt_packing_list.
  "Fill the document data and get size of attachment
  ls_document_data-obj_langu  = nast-spras.
  READ TABLE lt_packing_list  INTO ls_packing_list INDEX g_tab_lines.
  ls_document_data-doc_size = ( g_tab_lines - 1 ) * 255 + STRLEN( ls_packing_list ).

  objhead-LINE = '物料,工厂'.append objhead.
*  objhead-LINE = '工厂'.append objhead.

  loop at GT_DATA.
    objitem-LINE = GT_DATA-matnr && ',' && GT_DATA-WERKS.
    APPEND  objitem.
  endloop.

* insert receiver (sap name)
  REFRESH RECEIVER.
  CLEAR RECEIVER.

  MOVE: SY-UNAME TO RECEIVER-RECEIVER,
  'X'      TO RECEIVER-EXPRESS,
  'B'      TO RECEIVER-REC_TYPE.
  APPEND RECEIVER.

* insert mail description
  WRITE 'Sending a mail through abap'
  TO DOC_DATA-OBJ_DESCR.

*  CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
*    EXPORTING
*      DOCUMENT_DATA              = DOC_DATA
*    IMPORTING
*      NEW_OBJECT_ID              = OBJECT_ID
*    TABLES
*      OBJECT_CONTENT             = objitem "OBJCONT
*      OBJECT_HEADER = objhead
*      RECEIVERS                  = RECEIVER
*    EXCEPTIONS
*      TOO_MANY_RECEIVERS         = 1
*      DOCUMENT_NOT_SENT          = 2
*      DOCUMENT_TYPE_NOT_EXIST    = 3
*      OPERATION_NO_AUTHORIZATION = 4
*      PARAMETER_ERROR            = 5
*      X_ERROR                    = 6
*      ENQUEUE_ERROR              = 7
*      OTHERS                     = 8.

  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
*     DOCUMENT_DATA              =
      PUT_IN_OUTBOX              = 'X'
      COMMIT_WORK                = 'X'
    TABLES
      RECEIVERS                  = RECEIVER
      OBJECT_HEADER              = objhead
      CONTENTS_TXT               = objitem
    EXCEPTIONS
      too_many_receivers         = 1
      document_not_sent          = 2
      document_type_not_exist    = 3
      operation_no_authorization = 4
      parameter_error            = 5
      x_error                    = 6
      enqueue_error              = 7
      OTHERS                     = 8.


ENDFORM.                    "PROCESS_DATA
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT USING P_FIELDNAME   TYPE FIELDNAME
                          P_QFIELDNAME  TYPE LVC_QFNAME
                          P_CFIELDNAME  TYPE LVC_CFNAME
                          P_REF_TABLE   TYPE LVC_RTNAME
                          P_REF_FIELD   TYPE LVC_RFNAME
                          P_CONVEXIT    TYPE CONVEXIT
                          P_EMPHASIZE   TYPE LVC_EMPHSZ
                          P_SCRTEXT_L   TYPE SCRTEXT_L
                          P_NO_ZERO     TYPE XFLAG.
  GS_FIELDCAT-FIELDNAME     = P_FIELDNAME.
  GS_FIELDCAT-QFIELDNAME    = P_QFIELDNAME.
  GS_FIELDCAT-CFIELDNAME    = P_CFIELDNAME.
  GS_FIELDCAT-REF_TABLE     = P_REF_TABLE.
  GS_FIELDCAT-REF_FIELD     = P_REF_FIELD.
  GS_FIELDCAT-CONVEXIT      = P_CONVEXIT.
  GS_FIELDCAT-EMPHASIZE     = P_EMPHASIZE.
  GS_FIELDCAT-SCRTEXT_L     = P_SCRTEXT_L.
  GS_FIELDCAT-NO_ZERO   = P_NO_ZERO.
  GS_FIELDCAT-COLDDICTXT    = 'L'.
  APPEND GS_FIELDCAT TO GT_FIELDCAT.
  CLEAR: GS_FIELDCAT.
ENDFORM.                    "BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*&      FORM  DISPLAY_DATA
*&---------------------------------------------------------------------*
*       显示数据
*----------------------------------------------------------------------*
FORM DISPLAY_DATA.
  PERFORM BUILD_FIELDCAT USING 'MATNR' '' '' 'MAST' 'MATNR' '' '' '物料编号' 'X'.
  PERFORM BUILD_FIELDCAT USING 'WERKS' '' '' 'MAST' 'WERKS' '' '' '工厂' ''.
  PERFORM BUILD_FIELDCAT USING 'STLAN' '' '' 'MAST' 'STLAN' '' '' '物料清单用途' ''.
  PERFORM BUILD_FIELDCAT USING 'STLNR' '' '' 'MAST' 'STLNR' '' '' '物料单' ''.
  PERFORM BUILD_FIELDCAT USING 'STLAL' '' '' 'MAST' 'STLAL' '' '' '可选的 BOM' ''.
  PERFORM BUILD_FIELDCAT USING 'LOSVN' '' '' 'MAST' 'LOSVN' '' '' '从批量' ''.
  PERFORM BUILD_FIELDCAT USING 'LOSBS' '' '' 'MAST' 'LOSBS' '' '' '到批量' ''.
  PERFORM BUILD_FIELDCAT USING 'ANDAT' '' '' 'MAST' 'ANDAT' '' '' '日期记录创建于' ''.
  PERFORM BUILD_FIELDCAT USING 'ANNAM' '' '' 'MAST' 'ANNAM' '' '' '创建记录的用户' ''.
  PERFORM BUILD_FIELDCAT USING 'AEDAT' '' '' 'MAST' 'AEDAT' '' '' '更改日期' ''.
  PERFORM BUILD_FIELDCAT USING 'AENAM' '' '' 'MAST' 'AENAM' '' '' '对象更改人员的名称' ''.
  PERFORM BUILD_FIELDCAT USING 'CSLTY' '' '' 'MAST' 'CSLTY' '' '' '标志: 配置物料(物料变式)' ''.
  PERFORM BUILD_FIELDCAT USING 'LVORM' '' '' 'MARA' 'LVORM' '' '' '集团级的删除' ''.

  gs_layout-cwidth_opt = 'X'.
  gs_layout-zebra = 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM      = SY-REPID
        "      I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_ALV'
      I_CALLBACK_USER_COMMAND = 'USER_COMMAND_ALV'
      IT_FIELDCAT_LVC         = GT_FIELDCAT
      IS_LAYOUT_LVC           = GS_LAYOUT
      I_DEFAULT               = 'X'
      I_SAVE                  = 'A'
    TABLES
      T_OUTTAB                = GT_DATA
    EXCEPTIONS
      OTHERS                  = 1.
ENDFORM.                    "DISPLAY_DATA
**&---------------------------------------------------------------------*
**&      FORM  PF_STATUS_ALV
**&---------------------------------------------------------------------*
**       TEXT
**----------------------------------------------------------------------*
*FORM PF_STATUS_ALV USING RT_EXTAB TYPE SLIS_T_EXTAB .
*  SET PF-STATUS 'STATUS_ALV' EXCLUDING RT_EXTAB.
*ENDFORM.                    "PF_STATUS_ALV
*&---------------------------------------------------------------------*
*&      FORM  USER_COMMAND_ALV
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
FORM USER_COMMAND_ALV USING R_UCOMM     LIKE SY-UCOMM
                            RS_SELFIELD TYPE SLIS_SELFIELD.
  CASE R_UCOMM.
    WHEN '&IC1'.
      CASE RS_SELFIELD-FIELDNAME.
        WHEN ''.
*          CHECK RS_SELFIELD-VALUE IS NOT INITIAL.
*          SET PARAMETER ID 'MBN' FIELD RS_SELFIELD-VALUE.
*          CALL TRANSACTION 'MB03' AND SKIP FIRST SCREEN.
      ENDCASE.
  ENDCASE.
ENDFORM.                    "USER_COMMAND_ALV

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

gavin_gxh

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

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

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

打赏作者

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

抵扣说明:

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

余额充值