TYPE-POOLS : SLIS,ICON,TRUXS .
TYPES:
BEGIN OF TY_ALV,
BOX TYPE C,
PLNBEZ TYPE AFKO-PLNBEZ, "物料
MAKTX TYPE MAKT-MAKTX, "物料描述
WERKS TYPE AUFK-WERKS, "工厂
AUART TYPE AUFK-AUART, "订单类型
GAMNG TYPE AFKO-GAMNG, "总数量
MEINS TYPE MARA-MEINS, "基本单位
VERID TYPE AFPO-VERID, "生产版本
ZBC001 TYPE AUFK-ZBC001, "排产日期
ZBC002 TYPE AUFK-ZBC002, "班次
ZBC003 TYPE AUFK-ZBC003, "排产人员
MESS(200) TYPE C,
AUFNR TYPE AUFK-AUFNR, "订单
ZJIANCHA TYPE C,
END OF TY_ALV.
DATA : GT_ALV TYPE TABLE OF TY_ALV,
GS_ALV LIKE LINE OF GT_ALV.
DATA : GT_ALV2 TYPE TABLE OF TY_ALV,
GS_ALV2 LIKE LINE OF GT_ALV2.
TYPES:
BEGIN OF TY_UPLOAD,
PLNBEZ TYPE AFKO-PLNBEZ, "物料
WERKS TYPE AUFK-WERKS, "工厂
AUART TYPE AUFK-AUART, "订单类型
GAMNG TYPE STRING, "总数量
* GAMNG TYPE AFKO-GAMNG, "总数量
VERID TYPE AFPO-VERID, "生产版本
ZBC001 TYPE AUFK-ZBC001, "排产日期
ZBC002 TYPE AUFK-ZBC002, "班次
ZBC003 TYPE AUFK-ZBC003, "排产人员
AUFNR TYPE AUFK-AUFNR, "订单
END OF TY_UPLOAD.
DATA : GT_UPLOAD TYPE TABLE OF TY_UPLOAD,
GS_UPLOAD LIKE LINE OF GT_UPLOAD.
DATA GT_BDCDATA TYPE TABLE OF BDCDATA WITH HEADER LINE. "BDC执行内表
DATA GT_MSGTAB TYPE TABLE OF BDCMSGCOLL WITH HEADER LINE . "BDC返回信息表
TYPES: BEGIN OF TY_MESSAGE,
MESSAGE(100) TYPE C,
ZTYPE TYPE C,
END OF TY_MESSAGE.
DATA:GT_MES TYPE TABLE OF TY_MESSAGE,
GS_MES TYPE TY_MESSAGE.
TYPES :
BEGIN OF TY_MARC,
MATNR TYPE MARC-MATNR,
WERKS TYPE MARC-WERKS,
END OF TY_MARC.
DATA : GT_MARC TYPE TABLE OF TY_MARC,
GS_MARC LIKE LINE OF GT_MARC.
TYPES :
BEGIN OF TY_MAKT,
MATNR TYPE MAKT-MATNR,
MAKTX TYPE MAKT-MAKTX,
END OF TY_MAKT.
DATA : GT_MAKT TYPE TABLE OF TY_MAKT,
GS_MAKT LIKE LINE OF GT_MAKT.
TYPES :
BEGIN OF TY_MARA,
MATNR TYPE MARA-MATNR,
MEINS TYPE MARA-MEINS,
END OF TY_MARA.
DATA : GT_MARA TYPE TABLE OF TY_MARA,
GS_MARA LIKE LINE OF GT_MARA.
*&---定义ALV显示的字段列及其描述等属性
DATA: GT_FIELDCAT TYPE TABLE OF LVC_S_FCAT,
GS_FIELDCAT TYPE LVC_S_FCAT,
GS_LAYOUT TYPE LVC_S_LAYO,
G_REPID LIKE SY-REPID VALUE SY-REPID.
*----------------------------------------------------------------------*
*---------------------------------选择屏幕-----------------------------*
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
PARAMETERS:P_PATH LIKE RLGRAP-FILENAME, "文件路径
RB_UP TYPE C RADIOBUTTON GROUP GRP1,
RB_DOWN TYPE C RADIOBUTTON GROUP GRP1.
SELECTION-SCREEN END OF BLOCK BLK1.
*---------------------------------------------------------------------*
* AT SELECTION-SCREEN ON VALUE-REQUEST
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_PATH. "为P_PATH创建搜索帮助
PERFORM FRM_BROWSER_FILE. "选择屏幕获取本地EXCEL
START-OF-SELECTION.
IF RB_UP = 'X'.
IF P_PATH IS INITIAL .
MESSAGE '上传文件路径不能为空' TYPE 'S' DISPLAY LIKE 'E' .
LEAVE LIST-PROCESSING AND RETURN TO SCREEN 0.
ENDIF.
PERFORM FRM_UP_EXCEL. "上传Excel数据
PERFORM FRM_CHK_DATA. "检查数据
PERFORM FRM_LAYOUT.
PERFORM FRM_FIELDCAT.
PERFORM FRM_DISPLAY.
ELSEIF RB_DOWN = 'X'.
PERFORM FRM_DOWN_EXCEL.
ENDIF.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_BROWSER_FILE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_BROWSER_FILE .
DATA: LV_RC TYPE I,
LV_USER TYPE I,
LT_FILE TYPE FILETABLE,
LS_FILE TYPE FILE_TABLE.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = '选择文件'
FILE_FILTER = 'EXCEL文件(*.XLSX)|*.XLS|*.XLSX|全部文件 (*.*)|*.*|'
CHANGING
FILE_TABLE = LT_FILE
RC = LV_RC
USER_ACTION = LV_USER
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
CHECK LV_RC = 1
AND LV_USER <> 9.
READ TABLE LT_FILE INTO LS_FILE INDEX 1.
P_PATH = LS_FILE-FILENAME.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> GV_FULLPATH
*&---------------------------------------------------------------------*
FORM FRM_DOWN_EXCEL .
*&---变量定义
DATA:LV_TEXT TYPE STRING, "MESSAGE
LV_FILENAME TYPE STRING, "DOWNLOAD FILE NAME
LV_PATH TYPE STRING, "DOWNLOAD FILE PATH
LV_FUNCTXT TYPE SMP_DYNTXT, "MENU NAME
LV_FILEPATH TYPE RLGRAP-FILENAME VALUE 'C', "FILE PATCH
LV_TITLE TYPE STRING , "TITLE
LV_TITLE_NAME TYPE STRING, "TITLE NAME
LV_MOD(20), "MODEL
LV_FULLPATH TYPE STRING, "FULL PATH
LV_OBJECT TYPE WWWDATATAB, "OBJECT NAME
LV_RC TYPE SY-SUBRC. "RETURN CODE
* SMWO 模板名称
LV_MOD = 'ZPPB_142'. "XXX下载文件名
* 调用OS 操作系统对话框
LV_TITLE = '模板下载'.
LV_TITLE_NAME = '生产订单'.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
WINDOW_TITLE = LV_TITLE " 保存'
DEFAULT_FILE_NAME = LV_TITLE_NAME " 发票预制导入模板
CHANGING
FILENAME = LV_FILENAME
PATH = LV_PATH
FULLPATH = LV_FULLPATH.
* 操作系统文件路径
CONCATENATE LV_PATH
LV_FILENAME
'.XLS'
INTO LV_FILEPATH.
* OS长度控制/下载模板
IF STRLEN( LV_FILEPATH ) <> 4.
* 查询模板.
SELECT SINGLE RELID
OBJID
FROM WWWDATA
INTO CORRESPONDING FIELDS OF LV_OBJECT
WHERE SRTF2 = '0'
AND OBJID = LV_MOD. "SMW0里对象名称
IF SY-SUBRC <> 0 OR LV_OBJECT-OBJID = SPACE .
CONCATENATE TEXT-021"'模板文件:'
LV_MOD
TEXT-022"'不存在,请用SMW0进行加载.'
INTO LV_TEXT.
MESSAGE LV_TEXT TYPE 'E'.
STOP.
ENDIF.
* 下载模板
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY = LV_OBJECT
DESTINATION = LV_FILEPATH
IMPORTING
RC = LV_RC.
IF LV_RC <> 0.
CONCATENATE '模板文件:' LV_MOD '下载失败,请与开发人员联系.'"''下载失败,请与开发人员联系.'
INTO LV_TEXT.
MESSAGE LV_TEXT TYPE 'E'.
STOP.
ENDIF.
* '已下载'
MESSAGE '已下载' TYPE 'S'.
ELSE.
* '已取消下载'
MESSAGE '已取消下载' TYPE 'S'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UP_EXCEL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_UP_EXCEL .
DATA: LT_FILENAME TYPE RLGRAP-FILENAME, "路径
LT_DATA TYPE TRUXS_T_TEXT_DATA.
LT_FILENAME = P_PATH. "路径
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR = 'X'
I_LINE_HEADER = 'X'
I_TAB_RAW_DATA = LT_DATA
I_FILENAME = LT_FILENAME
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.
*&---------------------------------------------------------------------*
*& Form FRM_CHK_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_CHK_DATA .
LOOP AT GT_UPLOAD INTO GS_UPLOAD.
MOVE-CORRESPONDING GS_UPLOAD TO GS_ALV.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
INPUT = GS_ALV-PLNBEZ
IMPORTING
OUTPUT = GS_ALV-PLNBEZ
EXCEPTIONS
LENGTH_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
APPEND GS_ALV TO GT_ALV.
CLEAR : GS_UPLOAD.
ENDLOOP.
IF GT_ALV IS NOT INITIAL.
SELECT
MATNR
WERKS
INTO CORRESPONDING FIELDS OF TABLE GT_MARC
FROM MARC
FOR ALL ENTRIES IN GT_ALV
WHERE WERKS = GT_ALV-WERKS
AND MATNR = GT_ALV-PLNBEZ.
SELECT
MAKTX
MATNR
INTO CORRESPONDING FIELDS OF TABLE GT_MAKT
FROM
MAKT
FOR ALL ENTRIES IN GT_ALV
WHERE MATNR = GT_ALV-PLNBEZ
AND SPRAS = SY-LANGU.
SELECT
MEINS
MATNR
INTO CORRESPONDING FIELDS OF TABLE GT_MARA
FROM
MARA
FOR ALL ENTRIES IN GT_ALV
WHERE MATNR = GT_ALV-PLNBEZ.
ENDIF.
LOOP AT GT_ALV INTO GS_ALV.
READ TABLE GT_MARC INTO GS_MARC WITH KEY MATNR = GS_ALV-PLNBEZ WERKS = GS_ALV-WERKS.
IF SY-SUBRC <> 0.
GS_ALV-MESS = '物料不存在'.
ENDIF.
READ TABLE GT_MAKT INTO GS_MAKT WITH KEY MATNR = GS_ALV-PLNBEZ.
IF SY-SUBRC = 0.
GS_ALV-MAKTX = GS_MAKT-MAKTX.
ENDIF.
READ TABLE GT_MARA INTO GS_MARA WITH KEY MATNR = GS_ALV-PLNBEZ.
IF SY-SUBRC = 0.
GS_ALV-MEINS = GS_MARA-MEINS.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
INPUT = GS_ALV-PLNBEZ
IMPORTING
OUTPUT = GS_ALV-PLNBEZ .
MODIFY GT_ALV FROM GS_ALV.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_LAYOUT .
GS_LAYOUT-ZEBRA = 'X'.
GS_LAYOUT-CWIDTH_OPT = 'X'.
GS_LAYOUT-BOX_FNAME = 'BOX'. " ALV 左侧选择框
GS_LAYOUT-SEL_MODE = 'A'.
ENDFORM.
FORM FRM_FIELDCAT .
* CLEAR GS_FIELDCAT.
* GS_FIELDCAT-FIELDNAME = 'BOX'.
* GS_FIELDCAT-COLTEXT = '选择'.
* GS_FIELDCAT-OUTPUTLEN = 10.
* GS_FIELDCAT-EDIT = 'X'.
* GS_FIELDCAT-CHECKBOX = 'X'.
* APPEND GS_FIELDCAT TO GT_FIELDCAT .
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'AUFNR'.
GS_FIELDCAT-COLTEXT = '订单'.
* GS_FIELDCAT-CONVEXIT = 'ALPHA'.
GS_FIELDCAT-OUTPUTLEN = 10.
GS_FIELDCAT-NO_ZERO = 'X'.
APPEND GS_FIELDCAT TO GT_FIELDCAT .
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'PLNBEZ'.
GS_FIELDCAT-COLTEXT = '物料'.
* GS_FIELDCAT-CONVEXIT = 'MATN1'.
GS_FIELDCAT-OUTPUTLEN = 10.
APPEND GS_FIELDCAT TO GT_FIELDCAT .
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'MAKTX'.
GS_FIELDCAT-COLTEXT = '物料描述'.
* GS_FIELDCAT-CONVEXIT = 'MATN1'.
GS_FIELDCAT-OUTPUTLEN = 10.
APPEND GS_FIELDCAT TO GT_FIELDCAT .
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'WERKS'.
GS_FIELDCAT-COLTEXT = '工厂'.
GS_FIELDCAT-OUTPUTLEN = 10.
APPEND GS_FIELDCAT TO GT_FIELDCAT .
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'AUART'.
GS_FIELDCAT-COLTEXT = '订单类型'.
GS_FIELDCAT-OUTPUTLEN = 10.
APPEND GS_FIELDCAT TO GT_FIELDCAT .
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'GAMNG'.
GS_FIELDCAT-COLTEXT = '总数量'.
GS_FIELDCAT-OUTPUTLEN = 10.
APPEND GS_FIELDCAT TO GT_FIELDCAT .
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'MEINS'.
GS_FIELDCAT-COLTEXT = '基本单位'.
GS_FIELDCAT-OUTPUTLEN = 10.
APPEND GS_FIELDCAT TO GT_FIELDCAT .
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'VERID'.
GS_FIELDCAT-COLTEXT = '生产版本'.
GS_FIELDCAT-OUTPUTLEN = 10.
APPEND GS_FIELDCAT TO GT_FIELDCAT .
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'ZBC001'.
GS_FIELDCAT-COLTEXT = '排产日期'.
GS_FIELDCAT-OUTPUTLEN = 10.
GS_FIELDCAT-NO_ZERO = 'X'.
APPEND GS_FIELDCAT TO GT_FIELDCAT .
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'ZBC002'.
GS_FIELDCAT-COLTEXT = '班次'.
GS_FIELDCAT-OUTPUTLEN = 10.
APPEND GS_FIELDCAT TO GT_FIELDCAT .
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'ZBC003'.
GS_FIELDCAT-COLTEXT = '排产人员'.
GS_FIELDCAT-OUTPUTLEN = 10.
APPEND GS_FIELDCAT TO GT_FIELDCAT .
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'MESS'.
GS_FIELDCAT-COLTEXT = '信息'.
GS_FIELDCAT-OUTPUTLEN = 200.
APPEND GS_FIELDCAT TO GT_FIELDCAT .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_LAYOUT_LVC = GS_LAYOUT
IT_FIELDCAT_LVC = GT_FIELDCAT
TABLES
T_OUTTAB = GT_ALV
EXCEPTIONS
PROGRAM_ERROR = 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.
FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STATUS'.
ENDFORM.
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: GV_GRID TYPE REF TO CL_GUI_ALV_GRID .
*--------------------刷新-------------------*
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = GV_GRID.
CALL METHOD GV_GRID->CHECK_CHANGED_DATA.
CALL METHOD GV_GRID->REFRESH_TABLE_DISPLAY.
RS_SELFIELD-REFRESH = 'X'.
CASE R_UCOMM.
WHEN 'ZSAVE'.
PERFORM FRM_DEAL_DATE.
PERFORM FRM_CHECK_DATE.
PERFORM FRM_BDC.
ENDCASE.
CALL METHOD GV_GRID->REFRESH_TABLE_DISPLAY.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BDC
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_BDC .
LOOP AT GT_ALV INTO GS_ALV WHERE BOX = 'X'
AND MESS IS NOT INITIAL.
ENDLOOP.
IF SY-SUBRC = 0.
MESSAGE '不能选中错误数据导入' TYPE 'E'.
ENDIF.
CLEAR : GS_ALV.
LOOP AT GT_ALV INTO GS_ALV WHERE BOX = 'X' AND ZJIANCHA <> 'X'.
PERFORM BDC_DYNPRO USING 'SAPLCOKO1' '0100'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ENTK'.
PERFORM BDC_FIELD USING 'CAUFVD-MATNR'
GS_ALV-PLNBEZ. "物料
PERFORM BDC_FIELD USING 'CAUFVD-WERKS'
GS_ALV-WERKS. "工厂
PERFORM BDC_FIELD USING 'AUFPAR-PP_AUFART'
GS_ALV-AUART. "订单类型
PERFORM BDC_DYNPRO USING 'SAPLCOKO1' '0115'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=SLAP'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'CAUFVD-GLTRP'.
PERFORM BDC_FIELD USING 'CAUFVD-GAMNG'
GS_ALV-GAMNG. "总数量
PERFORM BDC_FIELD USING 'CAUFVD-GLTRP'
GS_ALV-ZBC001. "排产日期
PERFORM BDC_FIELD USING 'CAUFVD-GSTRP'
GS_ALV-ZBC001. "排产日期
PERFORM BDC_DYNPRO USING 'SAPLCOKO1' '0115'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=STAK'.
PERFORM BDC_DYNPRO USING 'SAPLCOKO1' '0131'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ENT1'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RC62F-PROD_VERS'. "生产版本
PERFORM BDC_FIELD USING 'RC62F-VER_SEL'
'X'. "生产版本
PERFORM BDC_FIELD USING 'RC62F-PROD_VERS'
GS_ALV-VERID. "生产版本
PERFORM BDC_DYNPRO USING 'SAPLCOKO1' '0115'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=+COI'.
PERFORM BDC_DYNPRO USING 'SAPLCOKO1' '0115'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BU'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'ZCAUFVD-ZBC003'.
PERFORM BDC_FIELD USING 'ZCAUFVD-ZBC001'
GS_ALV-ZBC001. "排产日期
PERFORM BDC_FIELD USING 'ZCAUFVD-ZBC002'
GS_ALV-ZBC002. "班次
PERFORM BDC_FIELD USING 'ZCAUFVD-ZBC003'
GS_ALV-ZBC003. "排产人员
CALL TRANSACTION 'CO01' USING GT_BDCDATA
MODE 'N'
MESSAGES INTO GT_MSGTAB
UPDATE 'S'.
LOOP AT GT_MSGTAB."获取MESSAGE
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = GT_MSGTAB-MSGID
MSGNR = GT_MSGTAB-MSGNR
MSGV1 = GT_MSGTAB-MSGV1
MSGV2 = GT_MSGTAB-MSGV2
MSGV3 = GT_MSGTAB-MSGV3
MSGV4 = GT_MSGTAB-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = GS_MES.
IF GT_MSGTAB-MSGTYP = 'S' AND GT_MSGTAB-MSGID = 'CO' AND GT_MSGTAB-MSGV1 <> ''.
* IF SY-SUBRC = 0.
GS_ALV-AUFNR = GT_MSGTAB-MSGV1.
GS_ALV-ZJIANCHA = 'X'.
* ENDIF.
ELSE.
GS_ALV-AUFNR = ''.
GS_ALV-ZJIANCHA = 'X'.
ENDIF.
CLEAR: GT_BDCDATA[] .
ENDLOOP.
GS_ALV-MESS = GS_MES-MESSAGE.
MODIFY GT_ALV FROM GS_ALV TRANSPORTING AUFNR MESS ZJIANCHA.
CLEAR: GT_BDCDATA[] ,GS_ALV.
ENDLOOP.
ENDFORM.
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR GT_BDCDATA.
GT_BDCDATA-PROGRAM = PROGRAM.
GT_BDCDATA-DYNPRO = DYNPRO.
GT_BDCDATA-DYNBEGIN = 'X'.
APPEND GT_BDCDATA.
ENDFORM.
*----------------------------------------------------------------------*
* INSERT FIELD *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
* IF FVAL <> NODATA.
CLEAR GT_BDCDATA.
GT_BDCDATA-FNAM = FNAM.
GT_BDCDATA-FVAL = FVAL.
SHIFT GT_BDCDATA-FVAL LEFT DELETING LEADING SPACE.
APPEND GT_BDCDATA.
* ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DEAL_DATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DEAL_DATE .
CLEAR : GT_ALV2,GS_ALV2.
LOOP AT GT_ALV INTO GS_ALV WHERE BOX = 'X'.
MOVE-CORRESPONDING GS_ALV TO GS_ALV2.
APPEND GS_ALV2 TO GT_ALV2.
ENDLOOP.
IF GT_ALV2 IS INITIAL.
MESSAGE '请选择数据再保存' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING AND RETURN TO SCREEN 0.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_CHECK_DATE .
SORT GT_ALV BY BOX ZJIANCHA.
READ TABLE GT_ALV INTO GS_ALV WITH KEY BOX = 'X' ZJIANCHA = 'X'.
IF SY-SUBRC = 0.
MESSAGE '这条数据已经创建过,请重新选择' TYPE 'E'.
EXIT.
ENDIF.
ENDFORM.
-
- 需要注意的要点
上传的接收内表数量类型定义STRING,不然导入的时候当数量小于1的时候会扩大倍数
TYPES:
BEGIN OF TY_UPLOAD,
PLNBEZ TYPE AFKO-PLNBEZ, "物料
WERKS TYPE AUFK-WERKS, "工厂
AUART TYPE AUFK-AUART, "订单类型
GAMNG TYPE STRING, "总数量
* GAMNG TYPE AFKO-GAMNG, "总数量
VERID TYPE AFPO-VERID, "生产版本
ZBC001 TYPE AUFK-ZBC001, "排产日期
ZBC002 TYPE AUFK-ZBC002, "班次
ZBC003 TYPE AUFK-ZBC003, "排产人员
AUFNR TYPE AUFK-AUFNR, "订单
END OF TY_UPLOAD.
DATA : GT_UPLOAD TYPE TABLE OF TY_UPLOAD,
GS_UPLOAD LIKE LINE OF GT_UPLOAD.
1.3.2 在BDC录屏之后的FORM BDC_FIELD USING FNAM FVAL. 要删除前导空格
SHIFT GT_BDCDATA-FVAL LEFT DELETING LEADING SPACE.
FORM BDC_FIELD USING FNAM FVAL.
* IF FVAL <> NODATA.
CLEAR GT_BDCDATA.
GT_BDCDATA-FNAM = FNAM.
GT_BDCDATA-FVAL = FVAL.
SHIFT GT_BDCDATA-FVAL LEFT DELETING LEADING SPACE.
APPEND GT_BDCDATA.
* ENDIF.
ENDFORM.