*&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZMMF016. TABLES:EINE,EINA,SSCRFIELDS,A017. INCLUDE OLE2INCL. TYPES:BEGIN OF TY_EXCEL, SEL(1), ICON(4), MESSAGE(100), LOHNB(1),"信息记录类型(S:标准;W:委外) INFNR TYPE EINA-INFNR, LIFNR TYPE LFA1-LIFNR, MATNR TYPE MARA-MATNR, EKORG TYPE EINE-EKORG, WERKS TYPE EINE-WERKS, EKGRP TYPE EINE-EKGRP, MWSKZ TYPE EINE-MWSKZ, APLFZ(3) TYPE C, " EINE-APLFZ, WAERS TYPE EINE-WAERS, MEINS TYPE EINA-MEINS, UMREZ(5) TYPE C, " TYPE EINA-UMREZ, UMREN(5) TYPE C, " TYPE EINA-UMREN, NETPR(11) TYPE C, "EINE-NETPR, LIFAB TYPE EINA-LIFAB, LIFBI TYPE EINA-LIFBI, KPEIN(5) TYPE C, "KONP-KPEIN, * NORBM TYPE EINE-NORBM, END OF TY_EXCEL. TYPES:BEGIN OF TY_CHECK, INFNR TYPE EINA-INFNR, LIFNR TYPE LFA1-LIFNR, MATNR TYPE MARA-MATNR, LIFAB TYPE EINA-LIFAB, EKORG TYPE EINE-EKORG, WERKS TYPE EINE-WERKS, ESOKZ TYPE EINE-ESOKZ, END OF TY_CHECK. DATA:GT_EXCEL TYPE TABLE OF TY_EXCEL, GW_EXCEL LIKE LINE OF GT_EXCEL, GT_CHECK TYPE TABLE OF TY_CHECK, GW_CHECK LIKE LINE OF GT_CHECK. DATA:GT_FIELDCAT TYPE LVC_T_FCAT. DATA GS_FIELDCAT LIKE LINE OF GT_FIELDCAT. DATA LS_LAYOUT TYPE LVC_S_LAYO. DATA : GT_EXCEL_T TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE, GS_EXCEL_T LIKE LINE OF GT_EXCEL_T. DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE. DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE. DATA: GS_CTU_PARAMS TYPE CTU_PARAMS. DATA: GS_EXCEL TYPE OLE2_OBJECT, * gs_wbooklist TYPE ole2_object, * gs_application TYPE ole2_object, GS_WORKBOOK TYPE OLE2_OBJECT. DEFINE APPEND_FIELDCAT . CLEAR GS_FIELDCAT. GS_FIELDCAT-FIELDNAME = &1. GS_FIELDCAT-SCRTEXT_L = &2. GS_FIELDCAT-OUTPUTLEN = &3. GS_FIELDCAT-NO_ZERO = &4. * IF &1 = 'MEINS'. * GS_FIELDCAT-CONVEXIT = 'ZCONV'. * ENDIF. APPEND GS_FIELDCAT TO GT_FIELDCAT. END-OF-DEFINITION. SELECTION-SCREEN:BEGIN OF BLOCK BLK01 WITH FRAME TITLE TEXT-001. PARAMETERS:P_FILE LIKE RLGRAP-FILENAME. SELECTION-SCREEN END OF BLOCK BLK01. SELECTION-SCREEN FUNCTION KEY 1. INITIALIZATION. MOVE '@49@下载模板' TO SSCRFIELDS-FUNCTXT_01. AT SELECTION-SCREEN. IF SSCRFIELDS-UCOMM = 'FC01'. PERFORM PRM_SAVE_FILE. ENDIF. AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE. PERFORM FRM_GET_FILEPATH. START-OF-SELECTION. CHECK P_FILE IS NOT INITIAL. PERFORM PRM_GET_EXCEL. PERFORM PRM_SET_FIELD. PERFORM PRM_CHECK_DATA. PERFORM PRM_SHOW. *&---------------------------------------------------------------------* *& Form FRM_GET_FILEPATH *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_GET_FILEPATH . CALL FUNCTION 'WS_FILENAME_GET' EXPORTING MASK = ',Excel(*.xls),*.XLS,*.XLSX,' TITLE = '选择文件'(100) IMPORTING FILENAME = P_FILE EXCEPTIONS INV_WINSYS = 1 NO_BATCH = 2 SELECTION_CANCEL = 3 SELECTION_ERROR = 4 OTHERS = 5. IF SY-SUBRC <> 0. MESSAGE '选择文件出错!' TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form PRM_GET_EXCEL *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM PRM_GET_EXCEL . IF P_FILE IS NOT INITIAL. *将excel数据传入内表 CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING FILENAME = P_FILE I_BEGIN_COL = '1' I_BEGIN_ROW = '2' I_END_COL = '20' I_END_ROW = '5000' TABLES INTERN = GT_EXCEL_T. ENDIF. IF GT_EXCEL_T[] IS INITIAL. MESSAGE '文件内容为空!' TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. ENDIF. LOOP AT GT_EXCEL_T INTO GS_EXCEL_T. AT NEW ROW. CLEAR:GW_EXCEL. ENDAT. CASE GS_EXCEL_T-COL. WHEN 1."信息记录类型 GW_EXCEL-LOHNB = GS_EXCEL_T-VALUE. WHEN 2."供应商 GW_EXCEL-LIFNR = GS_EXCEL_T-VALUE. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = GW_EXCEL-LIFNR IMPORTING OUTPUT = GW_EXCEL-LIFNR. WHEN 3."物料 GW_EXCEL-MATNR = GS_EXCEL_T-VALUE. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = GW_EXCEL-MATNR IMPORTING OUTPUT = GW_EXCEL-MATNR. WHEN 4."采购组织 GW_EXCEL-EKORG = GS_EXCEL_T-VALUE. WHEN 5. GW_EXCEL-WERKS = GS_EXCEL_T-VALUE. WHEN 6. GW_EXCEL-EKGRP = GS_EXCEL_T-VALUE. WHEN 7. GW_EXCEL-APLFZ = GS_EXCEL_T-VALUE. WHEN 8. GW_EXCEL-NETPR = GS_EXCEL_T-VALUE. WHEN 9. GW_EXCEL-WAERS = GS_EXCEL_T-VALUE. WHEN 10. GW_EXCEL-KPEIN = GS_EXCEL_T-VALUE. WHEN 11. GW_EXCEL-MEINS = GS_EXCEL_T-VALUE. CALL FUNCTION 'CONVERSION_EXIT_ZCONV_OUTPUT' EXPORTING INPUT = GW_EXCEL-MEINS IMPORTING OUTPUT = GW_EXCEL-MEINS EXCEPTIONS UNIT_NOT_FOUND = 1. WHEN 12. GW_EXCEL-UMREZ = GS_EXCEL_T-VALUE. WHEN 13. GW_EXCEL-UMREN = GS_EXCEL_T-VALUE. WHEN 14. GW_EXCEL-LIFAB = GS_EXCEL_T-VALUE. WHEN 15. GW_EXCEL-LIFBI = GS_EXCEL_T-VALUE. WHEN 16. GW_EXCEL-MWSKZ = GS_EXCEL_T-VALUE. WHEN OTHERS. ENDCASE. AT END OF ROW. APPEND GW_EXCEL TO GT_EXCEL. ENDAT. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form PRM_CHECK_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM PRM_CHECK_DATA . SELECT EINA~INFNR" TYPE LFA1-LIFNR, EINA~LIFNR" TYPE LFA1-LIFNR, EINA~MATNR" TYPE MARA-MATNR, EINA~LIFAB" TYPE MARA-MATNR, EINE~EKORG" TYPE EINE-EKORG, EINE~WERKS" TYPE EINE-WERKS, EINE~ESOKZ" TYPE EINE-WERKS, INTO TABLE GT_CHECK FROM EINA INNER JOIN EINE ON EINA~INFNR = EINE~INFNR FOR ALL ENTRIES IN GT_EXCEL WHERE EINA~LIFNR = GT_EXCEL-LIFNR AND EINA~MATNR = GT_EXCEL-MATNR AND EINE~EKORG = GT_EXCEL-EKORG AND EINE~WERKS = GT_EXCEL-WERKS AND EINA~LOEKZ = '' AND EINE~LOEKZ = ''. LOOP AT GT_EXCEL INTO GW_EXCEL. READ TABLE GT_CHECK INTO GW_CHECK WITH KEY LIFNR = GW_EXCEL-LIFNR MATNR = GW_EXCEL-MATNR EKORG = GW_EXCEL-EKORG WERKS = GW_EXCEL-WERKS. IF SY-SUBRC <> 0. GW_EXCEL-MESSAGE = '数据未建立,请稍后检查!'. GW_EXCEL-ICON = '@0A@'. ELSE. GW_EXCEL-INFNR = GW_CHECK-INFNR. ENDIF. CLEAR:A017. SELECT SINGLE * FROM A017 WHERE LIFNR = GW_EXCEL-LIFNR AND MATNR = GW_EXCEL-MATNR AND EKORG = GW_EXCEL-EKORG AND WERKS = GW_EXCEL-WERKS AND DATAB >= GW_EXCEL-LIFAB. IF A017 IS NOT INITIAL. GW_EXCEL-MESSAGE = '有效开始日期不能小于等于原有日期!'. GW_EXCEL-ICON = '@0A@'. ENDIF. IF GW_EXCEL-LIFAB IS INITIAL OR GW_EXCEL-LIFBI IS INITIAL. GW_EXCEL-MESSAGE = '新建日期范围必输!'. GW_EXCEL-ICON = '@0A@'. ENDIF. IF GW_EXCEL-LOHNB <> 'S' AND GW_EXCEL-LOHNB <> 'W'. GW_EXCEL-MESSAGE = '信息类型错误!'. GW_EXCEL-ICON = '@0A@'. ELSEIF GW_EXCEL-LOHNB = 'S'. IF GW_CHECK-ESOKZ <> '0'. GW_EXCEL-MESSAGE = '信息类型不匹配!'. GW_EXCEL-ICON = '@0A@'. ENDIF. ELSEIF GW_EXCEL-LOHNB = 'W'. IF GW_CHECK-ESOKZ <> '3'. GW_EXCEL-MESSAGE = '信息类型不匹配!'. GW_EXCEL-ICON = '@0A@'. ENDIF. ENDIF. * * IF GW_EXCEL-LIFAB <= GW_CHECK-LIFAB. * GW_EXCEL-MESSAGE = '有效开始日期不能小于等于原有日期!'. * GW_EXCEL-ICON = '@0A@'. * ENDIF. MODIFY GT_EXCEL FROM GW_EXCEL. CLEAR:GW_EXCEL-MESSAGE. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form PRM_SET_FIELD *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM PRM_SET_FIELD . REFRESH GT_FIELDCAT. LS_LAYOUT-CWIDTH_OPT = 'X'. "优化列宽选项是否设置 LS_LAYOUT-ZEBRA = 'X'. LS_LAYOUT-BOX_FNAME = 'SEL'. APPEND_FIELDCAT:'ICON' '标记' 1 '', 'MESSAGE' '消息' 100 '', 'LOHNB' '信息记录类型' 1 '', 'INFNR' '信息记录编号' 10 'X', 'LIFNR' '供应商编码' 10 'X', 'MATNR' '物料编码' 18 'X', 'EKORG' '采购组织' 4 '', 'EKGRP' '采购组' 3 '', 'MEINS' '订单价格单位' 5 '', 'WERKS' '工厂' 4 '', 'APLFZ' '计划交货期限' 3 '', 'WAERS' '货币码' 5 '', 'NETPR' '价格' 16 '', 'MWSKZ' '税码' 2 '', 'KPEIN' '价格倍数' 6 '', 'UMREZ' '转化分子' 5 '', 'UMREN' '转化分母' 5 '', 'LIFAB' '开始日期' 10 '', 'LIFBI' '截止日期' 10 ''. ENDFORM. *&---------------------------------------------------------------------* *& Form PRM_SHOW *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM PRM_SHOW . CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING I_CALLBACK_PROGRAM = SY-REPID IS_LAYOUT_LVC = LS_LAYOUT IT_FIELDCAT_LVC = GT_FIELDCAT[] I_CALLBACK_PF_STATUS_SET = 'PRM_SET_STATUS' I_CALLBACK_USER_COMMAND = 'PRM_USER_COMMAND' * i_grid_title = lv_title I_DEFAULT = 'X' I_SAVE = 'A' TABLES T_OUTTAB = GT_EXCEL EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF SY-SUBRC <> 0. ENDIF. ENDFORM. FORM PRM_SET_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.. SET PF-STATUS 'ZSTAT'. ENDFORM. FORM PRM_USER_COMMAND USING P_UCOMM LIKE SY-UCOMM P_SELFIELD TYPE SLIS_SELFIELD. DATA:GT_SELECT TYPE TABLE OF TY_EXCEL. DATA:GW_SELECT LIKE LINE OF GT_EXCEL. DATA:LR_GRID TYPE REF TO CL_GUI_ALV_GRID. DATA:LV_LINE TYPE I. CHECK P_UCOMM = 'GENR'. APPEND LINES OF GT_EXCEL TO GT_SELECT. DELETE GT_SELECT WHERE SEL = ''. DELETE GT_SELECT WHERE MESSAGE <> ''. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING E_GRID = LR_GRID. LOOP AT GT_SELECT INTO GW_EXCEL. CLEAR BDCDATA[]. PERFORM BDC_DYNPRO USING 'SAPMM06I' '0100'. PERFORM BDC_FIELD USING 'BDC_CURSOR' 'EINE-WERKS'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'. PERFORM BDC_FIELD USING 'EINA-LIFNR' GW_EXCEL-LIFNR. PERFORM BDC_FIELD USING 'EINA-MATNR' GW_EXCEL-MATNR. PERFORM BDC_FIELD USING 'EINE-EKORG' GW_EXCEL-EKORG. PERFORM BDC_FIELD USING 'EINE-WERKS' GW_EXCEL-WERKS. IF GW_EXCEL-LOHNB = 'S'. PERFORM BDC_FIELD USING 'RM06I-NORMB' 'X'. ELSEIF GW_EXCEL-LOHNB = 'L'. PERFORM BDC_FIELD USING 'RM06I-LOHNB' 'X'. ENDIF. PERFORM BDC_DYNPRO USING 'SAPMM06I' '0101'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '=EINE'. IF GW_EXCEL-MEINS IS NOT INITIAL. PERFORM BDC_FIELD USING 'EINA-MEINS' GW_EXCEL-MEINS. ENDIF. IF GW_EXCEL-UMREZ <> 0. PERFORM BDC_FIELD USING 'EINA-UMREZ' GW_EXCEL-UMREZ. ENDIF. IF GW_EXCEL-UMREN <> 0. PERFORM BDC_FIELD USING 'EINA-UMREN' GW_EXCEL-UMREN. ENDIF. PERFORM BDC_DYNPRO USING 'SAPMM06I' '0102'. PERFORM BDC_FIELD USING 'BDC_CURSOR' 'EINE-MWSKZ'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'. IF GW_EXCEL-APLFZ > 0. PERFORM BDC_FIELD USING 'EINE-APLFZ' GW_EXCEL-APLFZ. ENDIF. IF GW_EXCEL-EKGRP IS NOT INITIAL. PERFORM BDC_FIELD USING 'EINE-EKGRP' GW_EXCEL-EKGRP. ENDIF. * PERFORM BDC_FIELD USING 'EINE-NORBM' * RECORD-NORBM_011. * PERFORM BDC_FIELD USING 'EINE-WEBRE' * RECORD-WEBRE_012. IF GW_EXCEL-MWSKZ IS NOT INITIAL. PERFORM BDC_FIELD USING 'EINE-MWSKZ' GW_EXCEL-MWSKZ. ENDIF. * PERFORM BDC_FIELD USING 'EINE-IPRKZ' * RECORD-IPRKZ_014. PERFORM BDC_DYNPRO USING 'SAPMM06I' '0105'. PERFORM BDC_FIELD USING 'BDC_CURSOR' 'EINE-ANGNR'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '=KO'. PERFORM BDC_DYNPRO USING 'SAPLV14A' '0102'. PERFORM BDC_FIELD USING 'BDC_CURSOR' 'VAKE-DATAB(01)'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '=NEWD'. PERFORM BDC_DYNPRO USING 'SAPMV13A' '0201'. PERFORM BDC_FIELD USING 'BDC_CURSOR' 'KONP-KBETR(01)'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SICH'. PERFORM BDC_FIELD USING 'RV13A-DATAB' GW_EXCEL-LIFAB. PERFORM BDC_FIELD USING 'RV13A-DATBI' GW_EXCEL-LIFBI. PERFORM BDC_FIELD USING 'KONP-KBETR(01)' GW_EXCEL-NETPR. IF GW_EXCEL-WAERS IS NOT INITIAL. PERFORM BDC_FIELD USING 'KONP-KONWA(01)' GW_EXCEL-WAERS. ENDIF. IF GW_EXCEL-KPEIN IS NOT INITIAL. PERFORM BDC_FIELD USING 'KONP-KPEIN(01)' GW_EXCEL-KPEIN. ENDIF. * PERFORM BDC_TRANSACTION USING 'ME12'. CALL TRANSACTION 'ME12' USING BDCDATA MODE 'E' UPDATE 'S' MESSAGES INTO MESSTAB. READ TABLE MESSTAB WITH KEY MSGTYP = 'E'. IF SY-SUBRC <> 0. GW_EXCEL-MESSAGE = '修改成功!'. GW_EXCEL-ICON = '@08@'. ELSE. CONDENSE MESSTAB-MSGV1 NO-GAPS. CONDENSE MESSTAB-MSGV2 NO-GAPS. CONDENSE MESSTAB-MSGV3 NO-GAPS. CONDENSE MESSTAB-MSGV4 NO-GAPS. CONCATENATE '修改失败:' MESSTAB-MSGV1 MESSTAB-MSGV2 MESSTAB-MSGV3 MESSTAB-MSGV4 INTO GW_EXCEL-MESSAGE. GW_EXCEL-ICON = '@0A@'. ENDIF. MODIFY GT_SELECT FROM GW_EXCEL. refresh:MESSTAB. ENDLOOP. LOOP AT GT_EXCEL INTO GW_EXCEL. LV_LINE = SY-TABIX. READ TABLE GT_SELECT INTO GW_SELECT WITH KEY INFNR = GW_EXCEL-INFNR. IF SY-SUBRC = 0. GW_EXCEL-MESSAGE = GW_SELECT-MESSAGE. GW_EXCEL-ICON = GW_SELECT-ICON. MODIFY GT_EXCEL FROM GW_EXCEL INDEX LV_LINE TRANSPORTING MESSAGE ICON. ENDIF. ENDLOOP. CALL METHOD LR_GRID->REFRESH_TABLE_DISPLAY. ENDFORM. *&---------------------------------------------------------------------* *& Form BDC_DYNPRO *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_0774 text * -->P_0775 text *----------------------------------------------------------------------* FORM BDC_DYNPRO USING PROGRAM DYNPRO. CLEAR BDCDATA. BDCDATA-PROGRAM = PROGRAM. BDCDATA-DYNPRO = DYNPRO. BDCDATA-DYNBEGIN = 'X'. APPEND BDCDATA. ENDFORM. *----------------------------------------------------------------------* * Insert field * *----------------------------------------------------------------------* FORM BDC_FIELD USING FNAM FVAL. CLEAR BDCDATA. BDCDATA-FNAM = FNAM. BDCDATA-FVAL = FVAL. APPEND BDCDATA. ENDFORM. *&---------------------------------------------------------------------* *& Form PRM_SAVE_FILE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM PRM_SAVE_FILE . DATA:GV_FILE1 TYPE STRING. DATA:GV_FILE2 TYPE STRING. DATA:GV_FILE3 TYPE STRING. DATA:LS_KEY TYPE WWWDATATAB, LV_DESTINAT LIKE RLGRAP-FILENAME, LV_RC TYPE I. CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG EXPORTING WINDOW_TITLE = '保存文件到' CHANGING FILENAME = GV_FILE1 PATH = GV_FILE2 FULLPATH = GV_FILE3 EXCEPTIONS CNTL_ERROR = 1 ERROR_NO_GUI = 2 NOT_SUPPORTED_BY_GUI = 3 INVALID_DEFAULT_FILE_NAME = 4 OTHERS = 5. IF SY-SUBRC <> 0. ENDIF. IF GV_FILE3 IS NOT INITIAL. LS_KEY-RELID = 'MI'. LS_KEY-OBJID = 'ZMMF016'. LV_DESTINAT = GV_FILE3. "下载模板 CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' EXPORTING KEY = LS_KEY DESTINATION = LV_DESTINAT IMPORTING RC = LV_RC. ENDIF. ENDFORM.
模板:
必填的为黄色部分
截止日期默认:9991231
注:本程序只是在原有的采购信息记录上,新增一条新的有效期间为有效开始日期-有效截止日期的记录