CALL CLASSFUNCTION(Material与Batch)
来源:互联网 发布:淘宝网超然牛仔女裤 编辑:程序博客网 时间:2024/05/17 02:09
*&---------------------------------------------------------------------*
*& Report ZRSD0108 Device Material Production Creation detail report *
*& *
*&---------------------------------------------------------------------*
*& 001
*& 2007-12-11 "DEVK923716[1599] *
*&---------------------------------------------------------------------*
*& 002 vista liu Add download to server & e-mail to user for Report*
*& 2008-01-15 "DEVK923874[1637] *
*&---------------------------------------------------------------------*
REPORT ZRSD0108 .
TYPE-POOLS: SLIS .
************************************************************************
************************************************************************
* D E C L A R A T I O N
************************************************************************
************************************************************************
TABLES: MARA, AUSP, KNA1, MAKT,ADR6,TZW02,USR21.
TYPE-POOLS: SLIS, KKBLO.
DATA: BEGIN OF ITAB OCCURS 0,
MATNR LIKE MARA-MATNR, "Material Number
ERSDA LIKE MARA-ERSDA, "Create Date
ERNAM LIKE MARA-ERNAM, "Create By
MAKTX LIKE MAKT-MAKTX, "Material Description
PDIM LIKE AUSP-ATWRT, "Package Dimension
LEAD LIKE AUSP-ATWRT, "Lead Count
KUNNR LIKE KNA1-KUNNR, "Cust code
NAME1 LIKE KNA1-NAME1, "Customer Name
PACKAGE(30) TYPE C , "Package
MTART LIKE MARA-MTART, "Material Type
END OF ITAB.
DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, "ALV Field Catalog
LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
G_LAYOUT TYPE SLIS_LAYOUT_ALV,
G_TITLE TYPE LVC_TITLE,
G_REPID LIKE SY-REPID,
G_VARIANT LIKE DISVARIANT, "Layout Variant
T_SORT TYPE SLIS_T_SORTINFO_ALV, "for subtotal
T_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER. "ALV Top-of-page
SELECT-OPTIONS : S_ERSDA FOR MARA-ERSDA OBLIGATORY,
S_MTART FOR MARA-MTART OBLIGATORY.
*Start
PARAMETERS: DOWNLOAD AS CHECKBOX DEFAULT 'X'.
PARAMETERS: P_FN LIKE RLGRAP-FILENAME.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN SKIP 1.
PARAMETERS: P_SEND_X AS CHECKBOX.
SELECT-OPTIONS P_MAIL01 FOR ADR6-SMTP_ADDR NO INTERVALS.
SELECT-OPTIONS P_DLI01 FOR TZW02-DLINAM NO INTERVALS NO-DISPLAY.
SELECT-OPTIONS P_USR01 FOR USR21-BNAME NO INTERVALS NO-DISPLAY.
PARAMETERS P_SUB01 TYPE SO_OBJ_DES.
PARAMETERS P_BODY11 LIKE SOLISTI1-LINE.
PARAMETERS P_BODY12 LIKE SOLISTI1-LINE.
PARAMETERS P_BODY13 LIKE SOLISTI1-LINE.
PARAMETERS P_BODY14 LIKE SOLISTI1-LINE.
PARAMETERS P_BODY15 LIKE SOLISTI1-LINE.
DATA: G_SVFILE LIKE RLGRAP-FILENAME.
*End vista "DEVK923874[1637]
CONSTANTS: C_MATCLTYPE LIKE KLAH-KLART VALUE '001'. "Material Class
****For sending email,
DATA GS_DOCDATA LIKE SODOCCHGI1.
DATA GS_SUBJECT TYPE SO_OBJ_DES.
DATA GT_OBJPACK LIKE SOPCKLSTI1 OCCURS 1 WITH HEADER LINE.
DATA GT_OBJTXT LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
DATA GT_OBJBIN LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
DATA GT_RECLIST LIKE SOMLRECI1 OCCURS 1 WITH HEADER LINE.
DATA GT_MSGRETURN LIKE ZMSGRETURN OCCURS 1 WITH HEADER LINE.
DATA GT_CONTENTS LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
DATA GT_FILES LIKE ZFILESPATH OCCURS 1 WITH HEADER LINE.
DATA GT_SPOOL LIKE ZSPOOLPATH OCCURS 1 WITH HEADER LINE.
DATA: G_SUBRC LIKE SY-SUBRC.
*----------------------------------------------------------------------*
* INITIALIZATION *
*----------------------------------------------------------------------*
INITIALIZATION.
*----------------------------------------------------------------------*
* START-OF-SELECTION *
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM GET_DATA.
*Start
IF P_FN IS NOT INITIAL.
PERFORM DOWNLOAD_SERVER USING P_FN.
ENDIF.
IF P_SEND_X = 'X'. "send email.
* FNAME1 = FNAME.
PERFORM SEND_MAIL_VIA_SAP2.
ENDIF.
*End
END-OF-SELECTION.
*----------------------------------------------------------------------*
* END-OF-SELECTION *
*----------------------------------------------------------------------*
* Display report
PERFORM SUB_OUTPUT_TO_ALV.
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* Gte_Data
*&---------------------------------------------------------------------*
FORM GET_DATA.
SELECT MATNR ERNAM ERSDA
INTO (ITAB-MATNR, ITAB-ERNAM, ITAB-ERSDA)
FROM MARA
WHERE ERSDA IN S_ERSDA
AND MTART IN S_MTART.
SELECT SINGLE MAKTX
INTO ITAB-MAKTX
FROM MAKT WHERE MATNR = ITAB-MATNR
AND SPRAS = 'EN'.
APPEND ITAB.
CLEAR ITAB.
ENDSELECT.
DATA: L_KUNNR LIKE KNA1-KUNNR.
DATA: LT_CLASS LIKE SCLASS OCCURS 0 WITH HEADER LINE,
LT_CLOBJDAT LIKE CLOBJDAT OCCURS 0 WITH HEADER LINE,
L_OBJEK LIKE AUSP-OBJEK,
L_PACKAGE(30) TYPE C,
L_RET(40) TYPE N,
L_PACKAGE_NAME LIKE KLAH-CLASS.
LOOP AT ITAB.
L_OBJEK = ITAB-MATNR.
CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'
EXPORTING
CLASSTEXT = '' "No class text
CLASSTYPE = C_MATCLTYPE "Material classification
OBJECT = L_OBJEK "Material#
INITIAL_CHARACT = '' "No initial characteristic
TABLES
T_CLASS = LT_CLASS
T_OBJECTDATA = LT_CLOBJDAT
EXCEPTIONS
OTHERS = 4.
IF SY-SUBRC = 0 .
READ TABLE LT_CLOBJDAT WITH KEY ATNAM = 'LEAD'.
IF SY-SUBRC = 0.
MOVE LT_CLOBJDAT-AUSP1 TO ITAB-LEAD.
ENDIF.
READ TABLE LT_CLOBJDAT WITH KEY ATNAM = 'PACKAGE_DIMENSION'.
IF SY-SUBRC = 0.
MOVE LT_CLOBJDAT-AUSP1 TO ITAB-PDIM.
ENDIF.
READ TABLE LT_CLOBJDAT WITH KEY ATNAM = 'CUSTOMER'.
IF SY-SUBRC = 0.
MOVE LT_CLOBJDAT-AUSP1 TO ITAB-KUNNR.
ENDIF.
ENDIF.
CLEAR L_KUNNR.
IF NOT ITAB-KUNNR IS INITIAL.
SHIFT ITAB-KUNNR LEFT DELETING LEADING '0'.
CONCATENATE '00000' ITAB-KUNNR INTO L_KUNNR.
SELECT SINGLE NAME1 INTO (ITAB-NAME1)
FROM KNA1
WHERE KUNNR = L_KUNNR.
ENDIF.
CALL FUNCTION 'Z_GET_PACKAGE_NAME'
EXPORTING
MATERIAL_NO = ITAB-MATNR
IMPORTING
PACKAGE_NAME = L_PACKAGE.
IF SY-SUBRC = 0.
MOVE L_PACKAGE TO ITAB-PACKAGE.
ENDIF.
MODIFY ITAB TRANSPORTING LEAD PDIM KUNNR NAME1 PACKAGE.
ENDLOOP.
ENDFORM. "get_data
*&---------------------------------------------------------------------
*
*& Form download_sever
*&---------------------------------------------------------------------
*Start
FORM DOWNLOAD_SERVER USING P_FN TYPE C.
FIELD-SYMBOLS: <FS>.
DATA: L_FIELD(200) TYPE C,
L_STRING(3000) TYPE C.
DATA:P_SUBRC LIKE SY-SUBRC.
P_SUBRC = 1.
TRY.
CONCATENATE P_FN
'Device_Material_Production_Creation_report_' SY-DATUM '.xls'
INTO G_SVFILE.
OPEN DATASET G_SVFILE FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF SY-SUBRC = 0.
CONCATENATE 'Material'
'Create on'
'Create by'
'Material Description'
'PDIM'
'LEAD'
'Cust code'
'CustomerName'
'PackAge'
INTO L_STRING SEPARATED BY
CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
TRANSFER L_STRING TO G_SVFILE.
LOOP AT ITAB.
CLEAR L_STRING.
DO.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE ITAB TO <FS>.
IF
EXIT.
ENDIF.
WRITE <FS> TO L_FIELD.
CONDENSE L_FIELD.
IF SY-INDEX = 1.
L_STRING = L_FIELD.
ELSE.
CONCATENATE L_STRING L_FIELD INTO L_STRING
SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
ENDIF.
ENDDO.
TRANSFER L_STRING TO G_SVFILE.
ENDLOOP.
CLOSE DATASET G_SVFILE.
WRITE:/ 'Export is successful.'.
WRITE:/ 'Temporary file created on server:', G_SVFILE.
P_SUBRC = 0.
ELSE.
WRITE:/ 'Export is failed.'.
ENDIF.
CATCH CX_ROOT.
WRITE:/ 'Temporary file writing error on server.'.
ENDTRY.
ENDFORM. "download_server
*End
*&---------------------------------------------------------------------
*
*& Form sub_output_to_alv
*&---------------------------------------------------------------------
*
* text
*----------------------------------------------------------------------
*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------
FORM SUB_OUTPUT_TO_ALV .
G_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-TABNAME = 'ITAB'.
LS_FIELDCAT-FIELDNAME = 'MATNR'.
LS_FIELDCAT-SELTEXT_L = 'Material'.
LS_FIELDCAT-NO_ZERO = 'X'.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-TABNAME = 'ITAB'.
LS_FIELDCAT-FIELDNAME = 'ERSDA'.
LS_FIELDCAT-SELTEXT_L = 'Create on'.
LS_FIELDCAT-NO_ZERO = 'X'.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-TABNAME = 'ITAB'.
LS_FIELDCAT-FIELDNAME = 'ERNAM'.
LS_FIELDCAT-SELTEXT_L = 'Create by'.
LS_FIELDCAT-NO_ZERO = 'X'.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-TABNAME = 'ITAB'.
LS_FIELDCAT-FIELDNAME = 'MAKTX'.
LS_FIELDCAT-SELTEXT_L = 'Material description'.
LS_FIELDCAT-NO_ZERO = 'X'.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-TABNAME = 'ITAB'.
LS_FIELDCAT-FIELDNAME = 'PDIM'.
LS_FIELDCAT-SELTEXT_L = 'PDIM'.
LS_FIELDCAT-NO_ZERO = 'X'.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-TABNAME = 'ITAB'.
LS_FIELDCAT-FIELDNAME = 'LEAD'.
LS_FIELDCAT-SELTEXT_L = 'LEAD'.
LS_FIELDCAT-NO_ZERO = 'X'.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-TABNAME = 'ITAB'.
LS_FIELDCAT-FIELDNAME = 'KUNNR'.
LS_FIELDCAT-SELTEXT_L = 'Cust code'.
LS_FIELDCAT-NO_ZERO = 'X'.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-TABNAME = 'ITAB'.
LS_FIELDCAT-FIELDNAME = 'NAME1'.
LS_FIELDCAT-SELTEXT_L = 'CustomerName'.
LS_FIELDCAT-NO_ZERO = 'X'.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-TABNAME = 'ITAB'.
LS_FIELDCAT-FIELDNAME = 'PACKAGE'.
LS_FIELDCAT-SELTEXT_L = 'Package'.
LS_FIELDCAT-NO_ZERO = 'X'.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_GRID_TITLE = G_TITLE
IT_FIELDCAT = GT_FIELDCAT
I_CALLBACK_PROGRAM = G_REPID
IS_LAYOUT = G_LAYOUT
I_SAVE = 'A'
I_CALLBACK_TOP_OF_PAGE = 'SUB_SET_TOP_OF_PAGE'
TABLES
T_OUTTAB = ITAB.
ENDFORM. "sub_output_to_alv
*&--------------------------------------------------------------------*
*& Form send_mail_via_sap2
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM SEND_MAIL_VIA_SAP2 .
DATA: LT_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
DATA: LT_ADDSMTP LIKE BAPIADSMTP OCCURS 0 WITH HEADER LINE.
GS_SUBJECT = P_SUB01.
CLEAR GT_CONTENTS.
GT_CONTENTS-LINE = P_BODY11.
APPEND GT_CONTENTS.
CLEAR GT_CONTENTS.
GT_CONTENTS-LINE = P_BODY12.
APPEND GT_CONTENTS.
CLEAR GT_CONTENTS.
GT_CONTENTS-LINE = P_BODY13.
APPEND GT_CONTENTS.
CLEAR GT_CONTENTS.
GT_CONTENTS-LINE = P_BODY14.
APPEND GT_CONTENTS.
CLEAR GT_CONTENTS.
GT_CONTENTS-LINE = P_BODY15.
APPEND GT_CONTENTS.
* GT_FILES-PATHNAME = FNAME1.
GT_FILES-PATHNAME = G_SVFILE.
GT_FILES-DOC_TYPE = 'XLS'.
GT_FILES-TRANSF_TXT = SPACE.
APPEND GT_FILES.
CLEAR GT_FILES.
PERFORM TRANSFORM_FILE_TO_ATTACHMENT CHANGING G_SUBRC.
IF G_SUBRC <> 0.
*MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
CALL FUNCTION 'BAPI_USER_GET_DETAIL'
EXPORTING
USERNAME = SY-UNAME
* IMPORTING
* LOGONDATA =
* DEFAULTS =
* ADDRESS =
* COMPANY =
* SNC =
* REF_USER =
* ALIAS =
TABLES
* PARAMETER =
* PROFILES =
* ACTIVITYGROUPS =
RETURN = LT_RETURN
* ADDTEL =
* ADDFAX =
* ADDTTX =
* ADDTLX =
ADDSMTP = LT_ADDSMTP
* ADDRML =
* ADDX400 =
* ADDRFC =
* ADDPRT =
* ADDSSF =
* ADDURI =
* ADDPAG =
* ADDCOMREM =
* PARAMETER1 =
* GROUPS =
.
LOOP AT LT_ADDSMTP WHERE E_MAIL NE SPACE.
EXIT.
ENDLOOP.
IF SY-SUBRC EQ 0.
P_MAIL01-SIGN = 'I'.
P_MAIL01-OPTION = 'EQ'.
P_MAIL01-LOW = LT_ADDSMTP-E_MAIL.
INSERT P_MAIL01 INDEX 1.
ENDIF.
SORT P_MAIL01.
DELETE ADJACENT DUPLICATES FROM P_MAIL01.
GT_RECLIST-RECEIVER = P_MAIL01-LOW.
GT_RECLIST-REC_TYPE = 'U'.
APPEND GT_RECLIST.
CLEAR GT_RECLIST.
ENDLOOP.
IF
GT_RECLIST-RECEIVER = SY-UNAME.
GT_RECLIST-REC_TYPE = 'B'.
APPEND GT_RECLIST.
CLEAR GT_RECLIST.
ENDIF.
PERFORM SEND_MAIL_ATTACHMENT_SAP CHANGING G_SUBRC.
ENDIF.
ENDFORM. " SEND_MAIL_VIA_SAP2
*&--------------------------------------------------------------------*
*& Form send_mail_attachment_sap
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->P_SUBRC text
*---------------------------------------------------------------------*
FORM SEND_MAIL_ATTACHMENT_SAP CHANGING P_SUBRC.
CLEAR P_SUBRC.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = GS_DOCDATA
PUT_IN_OUTBOX = 'X'
COMMIT_WORK = 'X'
* IMPORTING
* SENT_TO_ALL =
* NEW_OBJECT_ID =
TABLES
PACKING_LIST = GT_OBJPACK
* OBJECT_HEADER =
CONTENTS_BIN = GT_OBJBIN
CONTENTS_TXT = GT_OBJTXT
* CONTENTS_HEX =
* OBJECT_PARA =
* OBJECT_PARB =
RECEIVERS = GT_RECLIST
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
.
IF SY-SUBRC <> 0.
*MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
P_SUBRC = SY-SUBRC.
ENDFORM. " send_mail_attachment_sap
*&--------------------------------------------------------------------*
*& Form transform_file_to_attachment
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->P_SUBRC text
*---------------------------------------------------------------------*
FORM TRANSFORM_FILE_TO_ATTACHMENT CHANGING P_SUBRC.
CLEAR P_SUBRC.
CALL FUNCTION 'ZBC_PREPARE_MAIL_ATT_DATA'
EXPORTING
SUBJECT = GS_SUBJECT
IMPORTING
DOCUMENT_DATA = GS_DOCDATA
TABLES
I_CONTENTS = GT_CONTENTS
I_FILE_PATH = GT_FILES
I_SPOOL_PATH = GT_SPOOL
O_PACKING_LIST = GT_OBJPACK
O_CONTENTS_BIN = GT_OBJBIN
O_CONTENTS_TXT = GT_OBJTXT
O_MSGRETURN = GT_MSGRETURN
EXCEPTIONS
FILE_OPEN_ERROR = 1
SPOOL_ATTACH_ERROR = 2
FILE_WRITE_ERROR = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
*MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
P_SUBRC = SY-SUBRC.
ENDFORM. " transform_file_to_attachmen
补充:
CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'
EXPORTING
CLASSTEXT = '' "No class text
CLASSTYPE = C_MATCLTYPE "Material classification
OBJECT = L_OBJEK "Material#
INITIAL_CHARACT = '' "No initial characteristic
TABLES
T_CLASS = LT_CLASS
T_OBJECTDATA = LT_CLOBJDAT
EXCEPTIONS
OTHERS = 4.
CLASSTYPE = 001 (是Material的Classfaction,OBJEK = Material)
CLASSTYPE = 022 (是Batch的Classfaction, OBJEK = concatenate mater werks charg)
注意(CALL BATCH CLASSFACTION)
一般情况下,call batch classification 中的object的值是由 concatenate mater werks charg
但在这样的情况下,有时会有 IF SY-SUBRC = 1. 即NO_CLASSIFICATION的错误
为什么有时会有?因为concatenate mater werks charg的object值是 00313019-33100 0100050580的形式,但Debug中,会发现后台会在table inob中的obejct值做比较,但Inob中object的值有可能是 00313019-3 31000100050580的形式,所以会有这样的Bug
解决方案:(参考程序 ZIMM0059)
select table MCHA~CUOBJ_BM INOB~OBJEK . 将 INOB~CUOBJ = MCHA~CUOBJ_BM 关联起来。
条件INOB~KLART = '022'
最后将INOB~OBJEK的值赋给 这个function中的 object
- CALL CLASSFUNCTION(Material与Batch)
- 浅谈Draw Call和Batch的区别
- 【unity扫盲】什么是Draw Call? 什么是Batch?
- 浅谈Draw Call和Batch的区别
- 浅谈Draw Call和Batch的区别
- 浅谈Draw Call和Batch的区别
- 浅谈Draw Call和Batch的区别
- BATCH file 与Makefile 之Batch篇
- at 与 batch
- 【Ubuntu】计划与任务的执行(cron、at、batch)
- call与apply(2) //有疑问
- MySQL batch 命令与transcation
- Spring Batch: 并行与扩展
- spring-batch 与 spring4.0
- Web Material-UI 详解(一) 环境搭建与Helloword
- 材质球换贴图(Material与ShareMaterial)
- Spring Batch(一)
- Spring Batch(一)
- S900 上网设置
- Java堆和栈的区别
- 关于classnofound的解决办法?
- Qt4 的ui还真是不错
- 文件的上传、下载与删除
- CALL CLASSFUNCTION(Material与Batch)
- 绝对惊喜的一段JavaScript代码
- SQL-SERVER 声明游标
- 苹果橘子经济社会学
- jsp:自定义标签实例(TLD)
- JS判断浏览器类型
- 改变Windows XP的登录背景图案和背景色
- vc6.0问题解决
- vim的基本指令