ABAP-商品进价批导程序(零售)
*1.根据模板把数据批导进入程序 * *2.根据导入数据更新物料进价
*&---------------------------------------------------------------------* * TITLE ZMDT003 * APPLICATION : MD * * SUBJECT : 商品进价批导程序 * * REQUESTED BY : * * EXECUTION : USER REQUIRED * * REF NO: : * * AUTHOR : zcwei * * REQ DATE : 20141117 * ********************************************************************* * 设计主要逻辑与原理说明 * ********************************************************************* *1.根据模板把数据批导进入程序 * *2.根据导入数据更新物料进价 * ********************************************************************* REPORT ZMDT003 MESSAGE-ID ZBH1. TABLES: SSCRFIELDS. TYPES: BEGIN OF TY_UPLOAD, MATNR TYPE EINA-MATNR, "物料 LIFNR TYPE EINA-LIFNR, "供应商 ESOKZ TYPE EINE-ESOKZ, "经营方式 KBETR TYPE KONP-KBETR, "价格 PEINH TYPE EINE-PEINH, "价格单位 MEINS TYPE EINA-MEINS, "定价单位 KONWA TYPE KONP-KONWA, "货币 INDAT(10), DATAB TYPE KONH-DATAB, "开始生效日期 ZZMSG(200), STATUS(1), SELDA(1), ICON TYPE ICON-ID, END OF TY_UPLOAD. DATA: GT_UPLOAD TYPE TABLE OF TY_UPLOAD, GS_UPLOAD TYPE TY_UPLOAD. *----------------------------------------------------------------------* *ALV DEFINE *----------------------------------------------------------------------* DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, GS_FIELDCAT TYPE SLIS_FIELDCAT_ALV, GS_LAYOUT TYPE SLIS_LAYOUT_ALV. SELECTION-SCREEN BEGIN OF BLOCK SC1 WITH FRAME TITLE TEXT-001. PARAMETER: P_FILE TYPE RLGRAP-FILENAME." SELECTION-SCREEN END OF BLOCK SC1. SELECTION-SCREEN FUNCTION KEY 1. INITIALIZATION. SSCRFIELDS-FUNCTXT_01 = '下载模板'. AT SELECTION-SCREEN. PERFORM FRM_DOWNLOAD_TEMPLATE. AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE. PERFORM FRM_GETPATH. START-OF-SELECTION. PERFORM FRM_UPLOAD_DATA. PERFORM FRM_DATA_CHECK. PERFORM FRM_SHOW_MSG. * PERFORM FRM_CALL_BAPI. *&---------------------------------------------------------------------* *& Form FRM_DOWNLOAD_TEMPLATE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_DOWNLOAD_TEMPLATE . DATA: LS_KEY TYPE WWWDATATAB, LV_TEMP TYPE C, LV_FILE TYPE STRING VALUE '\ZMDT003.XLSX', LV_FILEPATH TYPE RLGRAP-FILENAME, LV_RESULT TYPE ABAP_BOOL, LV_PATH TYPE STRING, LV_MSG TYPE STRING. CASE SSCRFIELDS-UCOMM. WHEN 'FC01'. CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE EXPORTING WINDOW_TITLE = '选择文件目录' * initial_folder = 'C:\TEMP' CHANGING SELECTED_FOLDER = LV_PATH EXCEPTIONS CNTL_ERROR = 1 ERROR_NO_GUI = 2 NOT_SUPPORTED_BY_GUI = 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. ELSE. CONCATENATE LV_PATH LV_FILE INTO LV_FILE. CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST EXPORTING FILE = LV_FILE RECEIVING RESULT = LV_RESULT EXCEPTIONS CNTL_ERROR = 1 ERROR_NO_GUI = 2 WRONG_PARAMETER = 3 NOT_SUPPORTED_BY_GUI = 4 OTHERS = 5. IF LV_RESULT = 'X'. CONCATENATE '模板' LV_FILE '已存在!' INTO LV_MSG. MESSAGE LV_MSG TYPE 'S'. STOP. ELSE. LS_KEY-RELID = 'MI'. LS_KEY-OBJID = 'ZMDT003'. "SMW0定义的对象名称 LV_FILEPATH = LV_FILE. CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' EXPORTING KEY = LS_KEY DESTINATION = LV_FILEPATH. IF SY-SUBRC <> 0. MESSAGE '下载模板失败!' TYPE 'E'. ELSE. MESSAGE S000 WITH '成功下载模板,请重新调整以适应本机!下载目录:' LV_FILEPATH '。'. ENDIF. ENDIF. ENDIF. ENDCASE. ENDFORM. " FRM_DOWNLOAD_TEMPLATE *&---------------------------------------------------------------------* *& Form FRM_GETPATH *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_P_FNAME text *----------------------------------------------------------------------* FORM FRM_GETPATH. CALL FUNCTION 'TB_LIMIT_WS_FILENAME_GET' EXPORTING DEF_FILENAME = '*.xls' DEF_PATH = 'C:\' MASK = ',All Files,*.*,Excel Files,*.xls.' MODE = 'O' TITLE = 'Please choose file to use ' IMPORTING FILENAME = P_FILE EXCEPTIONS INV_WINSYS = 1 NO_BATCH = 2 SELECTION_CANCEL = 3 SELECTION_ERROR = 4 OTHERS = 5. ENDFORM. " FRM_GETPATH *---------------------------------------------------------------------* * FORM FRM_UPLOAD_DATA * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* FORM FRM_UPLOAD_DATA. * DATA: LV_TABIX TYPE SY-TABIX. * * DATA: LT_EXCEL TYPE TABLE OF ZSALSMEX. * FIELD-SYMBOLS: * <FS_EXCEL> LIKE LINE OF LT_EXCEL, * <FS_FIELD> TYPE ANY. * * CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE' * EXPORTING * FILENAME = P_FILE * I_BEGIN_COL = 1 * I_BEGIN_ROW = 2 * I_END_COL = 130 * I_END_ROW = 10000 * TABLES * INTERN = LT_EXCEL * EXCEPTIONS * INCONSISTENT_PARAMETERS = 1 * UPLOAD_OLE = 2 * OTHERS = 3. * IF SY-SUBRC <> 0. * IF SY-MSGTY IS NOT INITIAL. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. * ELSE. * MESSAGE ID SY-MSGID TYPE 'E' NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. * ENDIF. * ENDIF. * LOOP AT LT_EXCEL ASSIGNING <FS_EXCEL>. * * ASSIGN COMPONENT <FS_EXCEL>-COL OF STRUCTURE GS_UPLOAD TO <FS_FIELD>. * <FS_FIELD> = <FS_EXCEL>-VALUE. * * AT END OF ROW. * APPEND GS_UPLOAD TO GT_UPLOAD. * CLEAR GS_UPLOAD. * ENDAT. * ENDLOOP. DATA: LT_RAW TYPE TRUXS_T_TEXT_DATA. CLEAR: LT_RAW[], GT_UPLOAD. CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' EXPORTING * I_FIELD_SEPERATOR = I_LINE_HEADER = 'X' I_TAB_RAW_DATA = LT_RAW I_FILENAME = P_FILE TABLES I_TAB_CONVERTED_DATA = GT_UPLOAD EXCEPTIONS CONVERSION_FAILED = 1 OTHERS = 2. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. "FRM_UPLOAD_DATA *&---------------------------------------------------------------------* *& Form FRM_CALL_BAPI *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_CALL_BAPI . DATA: LS_EINA_I TYPE EINA, LS_EINE_I TYPE EINE, LS_EINA_O TYPE EINA, LS_EINE_O TYPE EINE, LT_EINA TYPE TABLE OF EINA, LT_EINE TYPE TABLE OF EINE, LT_A018 TYPE TABLE OF A018, LS_A018 TYPE A018, LT_A018_DEL TYPE TABLE OF A018, LV_KBETR TYPE KONP-KBETR, LV_KEY TYPE BAPICONDCT-VARKEY, LV_LEN TYPE I, LV_KNUMH TYPE KONH-KNUMH, LT_DATA TYPE TABLE OF ZTBHSPPRICE, LS_DATA TYPE ZTBHSPPRICE, LT_ZEORD TYPE TABLE OF ZTIFEORD, LS_ZEORD TYPE ZTIFEORD, LV_INDEX TYPE I, LV_CINDEX(9), LV_COND_NO TYPE KNUMH, LV_MSGFN TYPE MSGFN. DATA:LT_CONDCT TYPE TABLE OF BAPICONDCT, LS_CONDCT TYPE BAPICONDCT, LT_CONDHD TYPE TABLE OF BAPICONDHD, LS_CONDHD TYPE BAPICONDHD, LT_CONDIT TYPE TABLE OF BAPICONDIT, LS_CONDIT TYPE BAPICONDIT, LT_CONDQS TYPE TABLE OF BAPICONDQS, LS_CONDQS TYPE BAPICONDQS, LT_CONDVS TYPE TABLE OF BAPICONDVS, LS_CONDVS TYPE BAPICONDVS, LT_RET_MES TYPE TABLE OF BAPIRET2, LS_RET_MES TYPE BAPIRET2, LT_KNUMHS TYPE TABLE OF BAPIKNUMHS, LS_KNUMHS TYPE BAPIKNUMHS, LT_MEM_INITIAL TYPE TABLE OF CND_MEM_INITIAL, LS_MEM_INITIAL TYPE CND_MEM_INITIAL. CLEAR: LT_CONDCT,LS_CONDCT,LT_CONDHD,LS_CONDHD,LT_CONDIT,LS_CONDIT, LT_CONDQS,LS_CONDQS,LT_CONDVS,LS_CONDVS,LT_RET_MES,LS_RET_MES, LT_KNUMHS,LS_KNUMHS,LT_MEM_INITIAL,LS_MEM_INITIAL. LOOP AT GT_UPLOAD INTO GS_UPLOAD WHERE STATUS NE 'E' AND SELDA EQ 'X'. CLEAR: LS_EINA_I,LS_EINE_I,LS_EINA_O,LS_EINE_O,LT_EINA,LT_EINE,LS_A018,LV_KBETR,LV_KEY. CLEAR: LV_COND_NO. LV_INDEX = LV_INDEX + 1. LV_CINDEX = LV_INDEX. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = LV_CINDEX IMPORTING OUTPUT = LV_CINDEX. CONCATENATE '$' LV_CINDEX INTO LV_COND_NO. LV_KBETR = GS_UPLOAD-KBETR. SELECT * FROM A018 INTO TABLE LT_A018 WHERE MATNR = GS_UPLOAD-MATNR AND LIFNR = GS_UPLOAD-LIFNR AND EKORG = 'P001' AND ESOKZ = GS_UPLOAD-ESOKZ. SELECT SINGLE * FROM EINA INTO LS_EINA_I WHERE MATNR = GS_UPLOAD-MATNR AND LIFNR = GS_UPLOAD-LIFNR. IF SY-SUBRC = 0 . SELECT SINGLE * FROM EINE INTO LS_EINE_I WHERE INFNR = LS_EINA_I-INFNR AND EKORG = 'P001' AND ESOKZ = GS_UPLOAD-ESOKZ. ENDIF . LS_EINA_O = LS_EINA_I . LS_EINE_O = LS_EINE_I . LS_EINE_I-NETPR = LV_KBETR. LS_EINE_I-EFFPR = LV_KBETR. * CALL FUNCTION 'ME_UPDATE_INFORECORD' * EXPORTING * XEINA = LS_EINA_I * XEINE = LS_EINE_I * YEINA = LS_EINA_O * YEINE = LS_EINE_O * REG_EINA = LS_EINA_I. APPEND LS_EINE_I TO LT_EINE. CALL FUNCTION 'ME_UPDATE_INFORECORD_COND' TABLES REINE = LT_EINE. *& 条件价格赋值 LOOP AT LT_A018 INTO LS_A018. LV_MSGFN = '004'. IF LS_A018-DATAB >= GS_UPLOAD-DATAB AND LS_A018-DATBI >= GS_UPLOAD-DATAB. LV_MSGFN = '003'. ENDIF. CLEAR LS_CONDCT. LS_CONDCT-COND_USAGE = 'A'. LS_CONDCT-TABLE_NO = '018'. LS_CONDCT-COND_TYPE = 'PB00'. LS_CONDCT-APPLICATIO = 'M'. LS_CONDCT-OPERATION = LV_MSGFN. "003 -- 删除 004 -- 修改 009 -- 新建 LS_CONDCT-COND_NO = LS_A018-KNUMH. LS_CONDCT-VALID_FROM = LS_A018-DATAB. IF LS_A018-DATBI >= GS_UPLOAD-DATAB AND LS_A018-DATAB <= GS_UPLOAD-DATAB. LS_CONDCT-VALID_TO = GS_UPLOAD-DATAB - 1. IF LS_A018-DATBI NE '99991231'. APPEND LS_A018 TO LT_A018_DEL. ENDIF. ELSE. LS_CONDCT-VALID_TO = LS_A018-DATBI. ENDIF. CLEAR LV_KEY. LV_KEY(10) = GS_UPLOAD-LIFNR. LV_KEY+10(18) = GS_UPLOAD-MATNR. CONCATENATE LV_KEY 'P001' GS_UPLOAD-ESOKZ INTO LV_KEY. LS_CONDCT-VARKEY = LV_KEY. * IF LS_A018-DATAB <> GS_UPLOAD-DATAB AND LS_CONDCT-VALID_TO >= LS_CONDCT-VALID_FROM. APPEND LS_CONDCT TO LT_CONDCT. * ENDIF. CLEAR LS_CONDHD. LS_CONDHD-COND_NO = LS_A018-KNUMH. LS_CONDHD-OPERATION = LV_MSGFN. "003 -- 删除 004 -- 修改 009 -- 新建 LS_CONDHD-COND_USAGE = 'A'. LS_CONDHD-TABLE_NO = '018'. LS_CONDHD-APPLICATIO = 'M'. LS_CONDHD-COND_TYPE = 'PB00'. LS_CONDHD-VARKEY = LV_KEY. LS_CONDHD-VALID_FROM = LS_A018-DATAB. IF LS_A018-DATBI >= GS_UPLOAD-DATAB AND LS_A018-DATAB <= GS_UPLOAD-DATAB. LS_CONDHD-VALID_TO = GS_UPLOAD-DATAB - 1. ELSE. LS_CONDHD-VALID_TO = LS_A018-DATBI. ENDIF. * IF LS_A018-DATAB <> GS_UPLOAD-DATAB AND LS_CONDHD-VALID_TO >= LS_CONDHD-VALID_FROM. APPEND LS_CONDHD TO LT_CONDHD. * ENDIF. CLEAR LS_CONDIT. LS_CONDIT-COND_NO = LS_A018-KNUMH. LS_CONDIT-OPERATION = LV_MSGFN. "003 -- 删除 004 -- 修改 009 -- 新建 LS_CONDIT-COND_COUNT = '01'. LS_CONDIT-APPLICATIO = 'M'. LS_CONDIT-COND_TYPE = 'PB00'. LS_CONDIT-SCALETYPE = 'A'. LS_CONDIT-SCALEBASIN = 'C'. * LS_CONDIT-CONDITIDX = '01'. LS_CONDIT-COND_P_UNT = LS_EINE_I-PEINH. LS_CONDIT-COND_UNIT = LS_EINE_I-BPRME. LS_CONDIT-CALCTYPCON = 'C'. LS_CONDIT-EXCLUSION = 'X'. LS_CONDIT-PMNTTRMS = ''. LS_CONDIT-CONDCURR = LS_EINE_I-WAERS. SELECT SINGLE KBETR INTO LS_CONDIT-COND_VALUE FROM KONP WHERE KNUMH = LS_A018-KNUMH AND KOPOS = '01'. * LS_CONDIT-COND_VALUE = LS_EINE_O-NETPR. * IF LS_A018-DATAB <> GS_UPLOAD-DATAB AND LS_CONDCT-VALID_TO >= LS_CONDCT-VALID_FROM. APPEND LS_CONDIT TO LT_CONDIT. * ENDIF. ENDLOOP. CLEAR LS_CONDCT. LS_CONDCT-COND_USAGE = 'A'. LS_CONDCT-TABLE_NO = '018'. LS_CONDCT-COND_TYPE = 'PB00'. LS_CONDCT-APPLICATIO = 'M'. LS_CONDCT-OPERATION = '009'. "004 -- 修改 009 -- 新建 LS_CONDCT-COND_NO = LV_COND_NO. "'$000000001'. "LS_A018-KNUMH. LS_CONDCT-VALID_FROM = GS_UPLOAD-DATAB. LS_CONDCT-VALID_TO = '99991231'. CLEAR LV_KEY. LV_KEY(10) = GS_UPLOAD-LIFNR. LV_KEY+10(18) = GS_UPLOAD-MATNR. CONCATENATE LV_KEY 'P001' GS_UPLOAD-ESOKZ INTO LV_KEY. LS_CONDCT-VARKEY = LV_KEY. APPEND LS_CONDCT TO LT_CONDCT. CLEAR LS_CONDHD. LS_CONDHD-COND_NO = LV_COND_NO. "'$000000001'. "LS_A018-KNUMH. LS_CONDHD-OPERATION = '009'. "004 -- 修改 009 -- 新建 LS_CONDHD-CREATED_BY = SY-UNAME. LS_CONDHD-CREAT_DATE = SY-DATUM. LS_CONDHD-COND_USAGE = 'A'. LS_CONDHD-TABLE_NO = '018'. LS_CONDHD-APPLICATIO = 'M'. LS_CONDHD-COND_TYPE = 'PB00'. LS_CONDHD-VARKEY = LV_KEY. LS_CONDHD-VALID_FROM = GS_UPLOAD-DATAB. LS_CONDHD-VALID_TO = '99991231'. APPEND LS_CONDHD TO LT_CONDHD. CLEAR LS_CONDIT. LS_CONDIT-COND_NO = LV_COND_NO. "'$000000001'. "LS_A018-KNUMH. LS_CONDIT-OPERATION = '009'. "004 -- 修改 009 -- 新建 LS_CONDIT-COND_COUNT = '01'. LS_CONDIT-APPLICATIO = 'M'. LS_CONDIT-COND_TYPE = 'PB00'. LS_CONDIT-SCALETYPE = 'A'. LS_CONDIT-SCALEBASIN = 'C'. * LS_CONDIT-CONDITIDX = '01'. LS_CONDIT-COND_P_UNT = GS_UPLOAD-PEINH. LS_CONDIT-COND_UNIT = GS_UPLOAD-MEINS. PERFORM CONVERT_INTO_INPUT CHANGING LS_CONDIT-COND_UNIT. LS_CONDIT-CALCTYPCON = 'C'. LS_CONDIT-EXCLUSION = 'X'. LS_CONDIT-PMNTTRMS = ''. LS_CONDIT-CONDCURR = GS_UPLOAD-KONWA. LS_CONDIT-COND_VALUE = LV_KBETR. APPEND LS_CONDIT TO LT_CONDIT. MODIFY GT_UPLOAD FROM GS_UPLOAD. ENDLOOP. BREAK ZCWEI. CALL FUNCTION 'BAPI_PRICES_CONDITIONS' EXPORTING PI_PHYSICAL_DELETION = 'X' TABLES TI_BAPICONDCT = LT_CONDCT TI_BAPICONDHD = LT_CONDHD TI_BAPICONDIT = LT_CONDIT TI_BAPICONDQS = LT_CONDQS TI_BAPICONDVS = LT_CONDVS TO_BAPIRET2 = LT_RET_MES TO_BAPIKNUMHS = LT_KNUMHS TO_MEM_INITIAL = LT_MEM_INITIAL EXCEPTIONS UPDATE_ERROR = 1 OTHERS = 2. IF SY-SUBRC = 0. LOOP AT LT_KNUMHS INTO LS_KNUMHS. READ TABLE LT_CONDIT INTO LS_CONDIT WITH KEY COND_NO = LS_KNUMHS-COND_NO_OLD. IF SY-SUBRC EQ 0. CLEAR LS_DATA. SELECT SINGLE * INTO LS_DATA FROM ZTBHSPPRICE WHERE KNUMH = LS_KNUMHS-COND_NO_NEW. LS_DATA-KNUMH = LS_KNUMHS-COND_NO_NEW. LS_DATA-KSCHL = LS_CONDIT-COND_TYPE. LS_DATA-KBETR = LS_CONDIT-COND_VALUE. LS_DATA-KONWA = LS_CONDIT-CONDCURR. LS_DATA-KPEIN = LS_CONDIT-COND_P_UNT. LS_DATA-KMEIN = LS_CONDIT-COND_UNIT. LS_DATA-TCODE = SY-TCODE. LS_DATA-ZTRANS = ' '. IF LS_KNUMHS-COND_NO_OLD CP '$*'. LS_DATA-ERNAM = SY-UNAME. LS_DATA-ERDAT = SY-DATUM. ELSE. LS_DATA-AENAM = SY-UNAME. LS_DATA-AEDAT = SY-DATUM. ENDIF. CONCATENATE SY-DATUM SY-UZEIT INTO LS_DATA-TIMET. READ TABLE LT_CONDHD INTO LS_CONDHD WITH KEY COND_NO = LS_KNUMHS-COND_NO_OLD. IF SY-SUBRC EQ 0. LS_DATA-LIFNR = LS_CONDHD-VARKEY(10). LS_DATA-MATNR = LS_CONDHD-VARKEY+10(18). LS_DATA-EKORG = 'P001'. ENDIF. APPEND LS_DATA TO LT_DATA. MOVE: SY-MANDT TO LS_ZEORD-MANDT, LS_DATA-MATNR TO LS_ZEORD-MATNR, * N_EINE-WERKS TO LS_ZEORD-WERKS, LS_DATA-LIFNR TO LS_ZEORD-LIFNR, SY-UNAME TO LS_ZEORD-WUSER, SY-REPID TO LS_ZEORD-WREPID, SY-TCODE TO LS_ZEORD-WTCODE, 'SAP2SCM012' TO LS_ZEORD-JIEKNO, ' ' TO LS_ZEORD-DFLAG. CONCATENATE SY-DATUM SY-UZEIT INTO LS_ZEORD-WTIME. APPEND LS_ZEORD TO LT_ZEORD. ENDIF. ENDLOOP. *_插入数据到接口传输表 MODIFY ZTBHSPPRICE FROM TABLE LT_DATA. MODIFY ZTIFEORD FROM TABLE LT_ZEORD. DELETE A018 FROM TABLE LT_A018_DEL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING WAIT = 'X'. LOOP AT GT_UPLOAD INTO GS_UPLOAD WHERE STATUS NE 'E' AND SELDA EQ 'X'. GS_UPLOAD-STATUS = 'S'. GS_UPLOAD-ICON = '@08@'. "成功 GS_UPLOAD-ZZMSG = '修改成功'. MODIFY GT_UPLOAD FROM GS_UPLOAD. ENDLOOP. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. LOOP AT GT_UPLOAD INTO GS_UPLOAD WHERE STATUS NE 'E' AND SELDA EQ 'X'. GS_UPLOAD-STATUS = 'E'. GS_UPLOAD-ICON = '@0A@'. "失败 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 INTO GS_UPLOAD-ZZMSG. MODIFY GT_UPLOAD FROM GS_UPLOAD. ENDLOOP. ENDIF. ENDFORM. " FRM_CALL_BAPI *&---------------------------------------------------------------------* *& Form CONVERT_INTO_INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * <--P_IT_CONDIT_COND_UNIT text *----------------------------------------------------------------------* FORM CONVERT_INTO_INPUT CHANGING P_COND_UNIT. CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' EXPORTING INPUT = P_COND_UNIT LANGUAGE = SY-LANGU IMPORTING OUTPUT = P_COND_UNIT EXCEPTIONS UNIT_NOT_FOUND = 1 OTHERS = 2. ENDFORM. " CONVERT_INTO_INPUT *&---------------------------------------------------------------------* *& Form FRM_SHOW_MSG *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_SHOW_MSG . PERFORM FRM_FILL_FIELDCAT. PERFORM FRM_FILL_LAYOUT. PERFORM FRM_OUTPUT_LIST . ENDFORM. " FRM_SHOW_MSG *&---------------------------------------------------------------------* *& FORM FRM_FILL_FIELDCAT *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* * --> P1 TEXT * <-- P2 TEXT *----------------------------------------------------------------------* FORM FRM_FILL_FIELDCAT . DATA: LV_POS TYPE I. CLEAR LV_POS. CLEAR GT_FIELDCAT[]. DEFINE D_GET_FIELD. LV_POS = LV_POS + 1. CLEAR GS_FIELDCAT. GS_FIELDCAT-COL_POS = LV_POS. GS_FIELDCAT-FIELDNAME = &1. GS_FIELDCAT-SELTEXT_L = &2. GS_FIELDCAT-OUTPUTLEN = &3. IF ( &1 EQ 'LIFNR' OR &1 EQ 'KBETR' OR &1 EQ 'PEINH' OR &1 EQ 'MATNR' ). GS_FIELDCAT-NO_ZERO = 'X'. ENDIF. IF &1 EQ 'SELDA'. GS_FIELDCAT-EDIT = 'X'. GS_FIELDCAT-CHECKBOX = 'X'. ENDIF. APPEND GS_FIELDCAT TO GT_FIELDCAT. END-OF-DEFINITION. D_GET_FIELD: 'SELDA' '选择' '4', 'ICON' '信号灯' '4', 'MATNR' '物料' '18', 'LIFNR' '供应商' '10', 'ESOKZ' '经营方式' '10', 'KBETR' '价格' '10', 'PEINH' '价格单位' '10', 'MEINS' '定价单位' '10', 'KONWA' '货币' '10', 'DATAB' '开始生效日期' '20', 'ZZMSG' '信息文本' '50'. ENDFORM. " FRM_FILL_FIELDCAT *&---------------------------------------------------------------------* *& FORM FRM_FILL_LAYOUT *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* * --> P1 TEXT * <-- P2 TEXT *----------------------------------------------------------------------* FORM FRM_FILL_LAYOUT . * W_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. * 定义条纹显示 GS_LAYOUT-ZEBRA = 'X'. ENDFORM. " FRM_FILL_LAYOUT *&---------------------------------------------------------------------* *& FORM FRM_OUTPUT_LIST *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* * --> P1 TEXT * <-- P2 TEXT *----------------------------------------------------------------------* FORM FRM_OUTPUT_LIST . DATA: LV_REPID LIKE SY-REPID. DATA: LS_VARIANT LIKE DISVARIANT. DATA: LV_SETTING TYPE LVC_S_GLAY. LV_REPID = SY-REPID. LS_VARIANT-REPORT = SY-REPID. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING * I_BYPASSING_BUFFER = 'X' * I_GRID_SETTINGS = LV_SETTING I_CALLBACK_PROGRAM = LV_REPID IS_LAYOUT = GS_LAYOUT I_CALLBACK_PF_STATUS_SET = 'PF_STATUS' I_CALLBACK_USER_COMMAND = 'USER_COMMAND' IT_FIELDCAT = GT_FIELDCAT[] * IT_SORT = I_SORT[] * IT_EVENTS = GT_EVENTS[] * IS_PRINT = W_PRINT I_SAVE = 'A' * IS_VARIANT = LS_VARIANT TABLES T_OUTTAB = GT_UPLOAD EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF SY-SUBRC = 0. ENDIF. ENDFORM. " FRM_OUTPUT_LIST *&---------------------------------------------------------------------* *& FORM STANDARD_ER01 *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* * -->EXTAB TEXT *----------------------------------------------------------------------* FORM PF_STATUS USING EXTAB TYPE SLIS_T_EXTAB. DATA: LS_EXTAB TYPE SLIS_EXTAB. SET PF-STATUS 'MENU'." EXCLUDING RT_EXTAB. ENDFORM. "STANDARD_ER01 *&---------------------------------------------------------------------* *& Form FRM_DATA_CHECK *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_DATA_CHECK . DATA: LS_EINA_I TYPE EINA, LS_EINE_I TYPE EINE. DATA: LV_LEN TYPE I. LOOP AT GT_UPLOAD INTO GS_UPLOAD. ***** 转换日期 LV_LEN = STRLEN( GS_UPLOAD-INDAT ). IF LV_LEN EQ 10. CONCATENATE GS_UPLOAD-INDAT(4) GS_UPLOAD-INDAT+5(2) GS_UPLOAD-INDAT+8(2) INTO GS_UPLOAD-DATAB. ELSEIF LV_LEN EQ 8. GS_UPLOAD-DATAB = GS_UPLOAD-INDAT. ELSE. GS_UPLOAD-DATAB = SY-DATUM. ENDIF. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = GS_UPLOAD-MATNR IMPORTING OUTPUT = GS_UPLOAD-MATNR. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = GS_UPLOAD-LIFNR IMPORTING OUTPUT = GS_UPLOAD-LIFNR. GS_UPLOAD-STATUS = 'S'. GS_UPLOAD-ICON = '@08@'. "成功 SELECT SINGLE * FROM EINA INTO LS_EINA_I WHERE MATNR = GS_UPLOAD-MATNR AND LIFNR = GS_UPLOAD-LIFNR. IF SY-SUBRC = 0 . SELECT SINGLE * FROM EINE INTO LS_EINE_I WHERE INFNR = LS_EINA_I-INFNR AND EKORG = 'P001' AND ESOKZ = GS_UPLOAD-ESOKZ. IF SY-SUBRC NE 0. GS_UPLOAD-STATUS = 'E'. GS_UPLOAD-ICON = '@0A@'. "失败 CONCATENATE '请先维护商品' GS_UPLOAD-MATNR '供应商' GS_UPLOAD-LIFNR '的采购信息记录' INTO GS_UPLOAD-ZZMSG. ENDIF. ELSE. GS_UPLOAD-STATUS = 'E'. GS_UPLOAD-ICON = '@0A@'. "失败 CONCATENATE '请先维护商品' GS_UPLOAD-MATNR '供应商' GS_UPLOAD-LIFNR '的采购信息记录' INTO GS_UPLOAD-ZZMSG. ENDIF . MODIFY GT_UPLOAD FROM GS_UPLOAD. ENDLOOP. ENDFORM. " FRM_DATA_CHECK *&--------------------------------------------------------------------* *& Form user_command *&--------------------------------------------------------------------* * 响应用户事件,例如双击事件等 *---------------------------------------------------------------------* * -->U_UCOMM 系统按钮变量 * -->SELFIELD 选择的栏位名 *---------------------------------------------------------------------* FORM USER_COMMAND USING U_UCOMM LIKE SY-UCOMM SELFIELD TYPE SLIS_SELFIELD. DATA:LV_GRID TYPE REF TO CL_GUI_ALV_GRID. DATA:LO_GUID TYPE REF TO CL_GUI_ALV_GRID. DATA: LV_INDEX TYPE SY-TABIX. " ALV GridControl full screen. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING E_GRID = LO_GUID. " Verification of Changes. CALL METHOD LO_GUID->CHECK_CHANGED_DATA. SELFIELD-REFRESH = 'X'. "自动刷新 SELFIELD-COL_STABLE = 'X'. "防止列跑位 SELFIELD-ROW_STABLE = 'X'. "防止行跑位 CASE U_UCOMM. WHEN 'EXEC'. READ TABLE GT_UPLOAD INTO GS_UPLOAD WITH KEY SELDA = 'X' STATUS = 'S'. IF SY-SUBRC EQ 0. PERFORM FRM_CALL_BAPI. ELSE. MESSAGE '请先选择可以导入的数据!' TYPE 'E'. ENDIF. WHEN 'ALSEL'. LOOP AT GT_UPLOAD INTO GS_UPLOAD. GS_UPLOAD-SELDA = 'X'. MODIFY GT_UPLOAD FROM GS_UPLOAD. ENDLOOP. WHEN 'UNSEL'. LOOP AT GT_UPLOAD INTO GS_UPLOAD. GS_UPLOAD-SELDA = ''. MODIFY GT_UPLOAD FROM GS_UPLOAD. ENDLOOP. ENDCASE. ENDFORM.
本人常年接收SAP运维和远程项目,ECC,S/4HANA,CRM,WDA.
远程人天可谈,终身售后,有活请联系V信:18925782767(问问题免费,欢迎交流!)
!!请关注本人技术分享公众号:SAP翔子(可扫头像二维码)
每天分享新知识,博客文章也会陆续整理并迁移至公众号,与您一起共同学习

浙公网安备 33010602011771号