场景:挂空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