(一)页面设计
导入模板
(二)处理代码
REPORT ZPPD012.
********************************************************************
*&程序名称/PROGRAM NAME : ZPPD012
*&程序描述/PROGRAM DES. : 导入数据批量创建BOM
*&摘要: 1、下载BOM计划模板
*&摘要: 2、读取上传的EXCEL数据并显示ALV
*&摘要: 3、点击按钮创建BOM
*&开发日期/DATE OF APP : 2018-11-14
*&作者/AUTHOR : xiaoaman
*&完成日期/COMPLETION DATE :
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* TABLES 声明
*&---------------------------------------------------------------------*
TABLES:SSCRFIELDS.
INCLUDE ZFRM_REPORT_REGISTER.
*&---------------------------------------------------------------------*
* 类型池声明
*&---------------------------------------------------------------------*
TYPE-POOLS: SLIS.
*&---------------------------------------------------------------------*
* 类型定义
*&---------------------------------------------------------------------*
TYPES :BEGIN OF TY_EXCEL,
* MATNR TYPE MARC-MATNR, "物料号
* MAKTX TYPE MAKT-MAKTX, "物料描述
* WERKS TYPE MARC-WERKS, "工厂
* STLAN TYPE MAST-STLAN, "BOM用途
* STLAL TYPE MAST-STLAL, "BOM版本
* DATUV TYPE STRING, "起始有效日
* BMENG TYPE STRING, "基本数量
* POSNR TYPE STPO-POSNR, "项目号
* SORTF TYPE STPO-SORTF, "项目文本
* POSTP TYPE STPO-POSTP, "项目类别
* IDNRK TYPE STPO-IDNRK, "组件物料号
* ZMAKTX TYPE MAKT-MAKTX, "组件物料描述
* AUSCH TYPE STPO-AUSCH, "部件报废率
* LGORT TYPE STPO-LGORT, "生产订单的发货地点
** MENGE TYPE STRING, "数量
* MENGE TYPE STRING, "数量
* MEINS TYPE STPO-MEINS, "计量单位
* ALPGR TYPE STPO-ALPGR, "替代组
* ALPRF TYPE STPO-ALPRF, "替代优先级
* EWAHR TYPE STRING, "使用可能性
MATNR TYPE MARC-MATNR, "物料号
MAKTX TYPE MAKT-MAKTX, "物料描述
WERKS TYPE MARC-WERKS, "工厂
STLAN TYPE MAST-STLAN, "BOM用途
STLAL TYPE MAST-STLAL, "BOM版本
DATUV TYPE STKO-DATUV, "起始有效日
BMENG TYPE STKO-BMENG, "基本数量
POSNR TYPE STPO-POSNR, "项目号
SORTF TYPE STRING, "项目文本
* SORTF TYPE STPO-SORTF, "项目文本
POSTP TYPE STPO-POSTP, "项目类别
IDNRK TYPE STPO-IDNRK, "组件物料号
ZMAKTX TYPE MAKT-MAKTX, "组件物料描述
AUSCH TYPE STPO-AUSCH, "部件报废率
LGORT TYPE STPO-LGORT, "生产订单的发货地点
* MENGE TYPE STRING, "数量
MENGE TYPE STPO-MENGE, "数量
MEINS TYPE STPO-MEINS, "计量单位
ALPGR TYPE STPO-ALPGR, "替代组
ALPRF TYPE STPO-ALPRF, "替代优先级
EWAHR TYPE STRING, "使用可能性
* EWAHR TYPE STPO-EWAHR, "使用可能性
END OF TY_EXCEL.
TYPES: BEGIN OF TY_ALV,
ZCBOX TYPE C,
* SANKA TYPE C, "成本核算相关项的标识符 20181203
MTART TYPE MARA-MTART, "物料类型 20181203
FLAG TYPE C, "成功操作的数据
MESSAGE TYPE C LENGTH 100, "消息
TYPES TYPE C. "成功失败标识
INCLUDE TYPE TY_EXCEL.
TYPES:
END OF TY_ALV.
TYPES :BEGIN OF TY_MARC,
MATNR TYPE MARC-MATNR, "物料
WERKS TYPE MARC-WERKS, "工厂
END OF TY_MARC.
TYPES :BEGIN OF TY_MARA,
MATNR TYPE MARA-MATNR, "物料
MEINS TYPE MARA-MEINS, "单位
MTART TYPE MARA-MTART, "BOM类别
END OF TY_MARA.
*&---------------------------------------------------------------------*
* 全局变量声明
*&---------------------------------------------------------------------*
DATA: GT_ALV TYPE TABLE OF TY_ALV,
GT_ALV_TEM TYPE TABLE OF TY_ALV,
GS_ALV LIKE LINE OF GT_ALV.
FIELD-SYMBOLS :<FS_FIELD> TYPE ANY.
DATA :GT_DATA TYPE STANDARD TABLE OF ALSMEX_TABLINE.
DATA: GT_UPDATA TYPE TABLE OF TY_EXCEL,
GT_UPDATA_TEM TYPE TABLE OF TY_EXCEL,
GS_UPDATA TYPE TY_EXCEL.
DATA: GT_MARC TYPE TABLE OF TY_MARC, "父件物料是否存在
GT_MARC1 TYPE TABLE OF TY_MARC, "子件物料是否存在
GS_MARC TYPE TY_MARC,
GS_MARC1 TYPE TY_MARC,
GT_MEINS TYPE TABLE OF TY_MARA, "组件单位&用途校验
GS_MEINS TYPE TY_MARA.
DATA: P_PATH TYPE LOCALFILE.
DATA: GS_FUNCTXT TYPE SMP_DYNTXT.
DATA :GV_ERROR TYPE C,
GV_FLAG TYPE C. "以保存的数据不允许再次保存
*按钮生成
SELECTION-SCREEN FUNCTION KEY 1.
*&---------------------------------------------------------------------*
* ALV 变量声明
*&---------------------------------------------------------------------*
DATA: GT_FCAT TYPE LVC_T_FCAT,
GS_FCAT TYPE LVC_S_FCAT,
GS_LAYO TYPE LVC_S_LAYO.
*&---------------------------------------------------------------------*
* 选择屏幕
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_FILE1 TYPE RLGRAP-FILENAME, "上载文件路径
P_WERKS LIKE MARC-WERKS .
SELECTION-SCREEN END OF BLOCK B1.
*&---------------------------------------------------------------------*
* 初始化处理
*&---------------------------------------------------------------------*
INITIALIZATION.
**-----初始化数据
* 模板下载按钮信息
GS_FUNCTXT-ICON_ID = ICON_CREATE. "图标
GS_FUNCTXT-ICON_TEXT = TEXT-002. "模板下载
SSCRFIELDS-FUNCTXT_01 = GS_FUNCTXT.
**&--------------------------------------------------------------------*
* 选择屏幕输出事件 (PBO)
**&--------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*&----更改选择屏幕
PERFORM FRM_CHANGE_SCREEN.
*&---------------------------------------------------------------------*
* 参数输入检查 (PAI)
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
*&----下载模板路径选择
CASE SSCRFIELDS-UCOMM.
WHEN'FC01'.
PERFORM FRM_TEMP_EXCEL_GET USING 'ZPPD012_BOM' "
1.
WHEN OTHERS.
ENDCASE.
*&----上传文件选择
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE1.
PERFORM FRM_GET_PC_FILENAME USING P_FILE1.
*&---------------------------------------------------------------------*
* 程序开始处理(GET DATA)
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM SAVE_REPORT_REGISTER.
**-----在此对选择条件进行判断
PERFORM FRM_CHECK_SCREEN.
CHECK GV_ERROR IS INITIAL.
*&----清空参数变量
PERFORM FRM_CLEAR_DATA.
*&----数据上传&格式装换
PERFORM FRM_UPLOAD_DATA .
*&----数据获取&ALV数据整理
PERFORM FRM_GET_DATA.
IF GT_ALV IS NOT INITIAL.
PERFORM FRM_SET_FIELDCAT. "设置ALV所要显示的列的相关设置
PERFORM FRM_LAYOUT. "设置ALV所要显示的样式
PERFORM FRM_DISPLAY. "ALV显示数据
ELSE.
MESSAGE S000(ZZZ01) WITH '没有有效处理的数据,请检查上传的模板!' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
*&------------------------------------------------------------------
****END OF SELECTION(输出)
*&------------------------------------------------------------------
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_GETDATA
*&---------------------------------------------------------------------*
* text 获取整合数据
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
DATA:LV_NUM_Y TYPE C,
LV_SCOR TYPE CHAR10.
*&----检验父件物料是否在工厂中存在
CLEAR:GT_ALV_TEM.
APPEND LINES OF GT_ALV TO GT_ALV_TEM.
SORT GT_ALV_TEM BY WERKS MATNR.
DELETE ADJACENT DUPLICATES FROM GT_ALV_TEM COMPARING WERKS MATNR.
IF GT_ALV_TEM IS NOT INITIAL.
SELECT WERKS MATNR INTO CORRESPONDING FIELDS OF TABLE GT_MARC
FROM MARC
FOR ALL ENTRIES IN GT_ALV_TEM
WHERE MATNR = GT_ALV_TEM-MATNR
AND WERKS = GT_ALV_TEM-WERKS.
SORT GT_MARC BY WERKS MATNR .
ENDIF.
*&----检验子件物料是否在工厂中存在
CLEAR:GT_ALV_TEM.
APPEND LINES OF GT_ALV TO GT_ALV_TEM.
SORT GT_ALV_TEM BY WERKS IDNRK.
DELETE ADJACENT DUPLICATES FROM GT_ALV_TEM COMPARING WERKS IDNRK.
IF GT_ALV_TEM IS NOT INITIAL.
SELECT WERKS MATNR INTO CORRESPONDING FIELDS OF TABLE GT_MARC1
FROM MARC
FOR ALL ENTRIES IN GT_ALV_TEM
WHERE MATNR = GT_ALV_TEM-IDNRK
AND WERKS = GT_ALV_TEM-WERKS.
SORT GT_MARC1 BY WERKS MATNR .
ENDIF.
*&---子件单位的校验
CLEAR:GT_ALV_TEM.
APPEND LINES OF GT_ALV TO GT_ALV_TEM.
SORT GT_ALV_TEM BY IDNRK .
DELETE ADJACENT DUPLICATES FROM GT_ALV_TEM COMPARING IDNRK.
IF GT_ALV_TEM IS NOT INITIAL.
SELECT MATNR MEINS MTART INTO TABLE GT_MEINS
FROM MARA
FOR ALL ENTRIES IN GT_ALV_TEM
WHERE MATNR = GT_ALV_TEM-IDNRK.
SORT GT_MEINS BY MATNR MEINS.
ENDIF.
*&---S数据校验
LOOP AT GT_ALV INTO GS_ALV.
CLEAR:GS_ALV-MESSAGE.
*&---必输校验
IF GS_ALV-MATNR IS INITIAL .
GS_ALV-MESSAGE = GS_ALV-MESSAGE &&'请输入抬头物料编码' .
ENDIF.
IF GS_ALV-WERKS IS INITIAL .
GS_ALV-MESSAGE = GS_ALV-MESSAGE &&'请输入工厂' .
ENDIF.
IF GS_ALV-STLAN IS INITIAL .
GS_ALV-MESSAGE = GS_ALV-MESSAGE &&'请输入BOM用途' .
ELSEIF GS_ALV-STLAN = '1'.
*&---物料类型ZROH不支持BOM项目
READ TABLE GT_MEINS INTO GS_MEINS WITH KEY MATNR = GS_ALV-IDNRK
MTART = 'ZROH'.
IF SY-SUBRC = 0.
GS_ALV-MESSAGE = GS_ALV-MESSAGE &&'物料类型ZROH不支持BOM项目' .
ENDIF.
ENDIF.
*&---财务核算标识 ADD BY HANDKF01 20181203 S
READ TABLE GT_MEINS INTO GS_MEINS WITH KEY MATNR = GS_ALV-IDNRK.
IF SY-SUBRC = 0 .
GS_ALV-MTART = GS_MEINS-MTART.
ENDIF.
IF GS_ALV-STLAL IS INITIAL .
GS_ALV-MESSAGE = GS_ALV-MESSAGE &&'请输入BOM版本' .
ENDIF.
IF GS_ALV-DATUV IS INITIAL .
GS_ALV-MESSAGE = GS_ALV-MESSAGE &&'请输入起始有效日' .
ELSE.
*----检查导入的开始日期是否正确
DATA LV_DATE_INTERNAL TYPE SY-DATUM.
TRY .
CLEAR:LV_DATE_INTERNAL .
LV_DATE_INTERNAL = GS_ALV-DATUV.
CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
EXPORTING
DATE = LV_DATE_INTERNAL
EXCEPTIONS
PLAUSIBILITY_CHECK_FAILED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
CONCATENATE GS_ALV-MESSAGE '导入的有效开始日期格式不正确' INTO GS_ALV-MESSAGE.
ENDIF.
CATCH CX_ROOT.
CONCATENATE GS_ALV-MESSAGE '导入的有效开始日期格式不正确' INTO GS_ALV-MESSAGE.
ENDTRY.
ENDIF.
IF GS_ALV-BMENG IS INITIAL .
GS_ALV-MESSAGE = GS_ALV-MESSAGE &&'请输基本数量' .
ELSE.
*----导入数量是否是数字的
TRY .
CLEAR:LV_NUM_Y.
LV_SCOR = GS_ALV-BMENG.
IF LV_SCOR IS NOT INITIAL.
PERFORM FRM_CHECK_NUMBER USING LV_SCOR CHANGING LV_NUM_Y .
IF LV_NUM_Y IS INITIAL.
CONCATENATE GS_ALV-MESSAGE '导入的基本数量不是数字' INTO GS_ALV-MESSAGE.
* ELSE.
* GS_ALV-BMENG = GS_ALV-BMENG.
ENDIF.
ENDIF.
CATCH CX_ROOT.
CONCATENATE GS_ALV-MESSAGE '导入的基本数量不是数字' INTO GS_ALV-MESSAGE.
ENDTRY.
ENDIF.
IF GS_ALV-POSNR IS INITIAL .
GS_ALV-MESSAGE = GS_ALV-MESSAGE &&'请输入项目号' .
ENDIF.
IF GS_ALV-SORTF IS INITIAL .
* GS_ALV-MESSAGE = GS_ALV-MESSAGE &&'请输入项目文本' . "20191209 by rsz
GS_ALV-MESSAGE = GS_ALV-MESSAGE &&'请输入"排序字符串"'.
ENDIF.
IF GS_ALV-POSTP IS INITIAL .
GS_ALV-MESSAGE = GS_ALV-MESSAGE &&'请输入项目类别' .
ENDIF.
IF GS_ALV-IDNRK IS INITIAL .
GS_ALV-MESSAGE = GS_ALV-MESSAGE &&'请输入组件物料号' .
ENDIF.
IF GS_ALV-MENGE IS INITIAL .
GS_ALV-MESSAGE = GS_ALV-MESSAGE &&'请输入组件数量' .
ELSE.
*----导入数量是否是数字的
TRY .
CLEAR:LV_NUM_Y.
LV_SCOR = GS_ALV-MENGE.
IF LV_SCOR IS NOT INITIAL.
PERFORM FRM_CHECK_NUMBER USING LV_SCOR CHANGING LV_NUM_Y .
IF LV_NUM_Y IS INITIAL.
CONCATENATE GS_ALV-MESSAGE '导入的基本数量不是数字' INTO GS_ALV-MESSAGE.
* ELSE.
* GS_ALV-BMENG = GS_ALV-BMENG.
ENDIF.
ENDIF.
CATCH CX_ROOT.
CONCATENATE GS_ALV-MESSAGE '导入的基本数量不是数字' INTO GS_ALV-MESSAGE.
ENDTRY.
ENDIF.
READ TABLE GT_MARC INTO GS_MARC WITH KEY WERKS = GS_ALV-WERKS
MATNR = GS_ALV-MATNR
BINARY SEARCH.
IF SY-SUBRC NE 0.
GS_ALV-MESSAGE = GS_ALV-MESSAGE && '父件物料在工厂' && GS_ALV-WERKS && '中不存在'.
ENDIF.
READ TABLE GT_MARC1 INTO GS_MARC1 WITH KEY WERKS = GS_ALV-WERKS
MATNR = GS_ALV-IDNRK
BINARY SEARCH.
IF SY-SUBRC NE 0.
GS_ALV-MESSAGE = GS_ALV-MESSAGE && '组件物料在工厂' && GS_ALV-WERKS && '中不存在'.
ENDIF.
IF GS_ALV-MESSAGE IS NOT INITIAL.
GV_ERROR = 'X'.
ENDIF.
IF GS_ALV-MEINS IS INITIAL .
GS_ALV-MESSAGE = GS_ALV-MESSAGE &&'请输入计量单位' .
ELSE.
READ TABLE GT_MEINS INTO GS_MEINS WITH KEY MATNR = GS_ALV-IDNRK
MEINS = GS_ALV-MEINS
BINARY SEARCH.
IF SY-SUBRC NE 0.
GS_ALV-MESSAGE = GS_ALV-MESSAGE &&'计量单位' && GS_ALV-MEINS && '在工厂' && GS_ALV-WERKS &&'中不存在' .
ENDIF.
ENDIF.
IF GS_ALV-ALPGR IS NOT INITIAL . "替代组
IF GS_ALV-ALPRF IS INITIAL .
GS_ALV-MESSAGE = GS_ALV-MESSAGE &&'请输入替代优先级' .
ENDIF.
IF GS_ALV-EWAHR IS INITIAL .
GS_ALV-MESSAGE = GS_ALV-MESSAGE &&'请输入使用可能性' .
ENDIF.
ENDIF.
* READ TABLE GT_MARC INTO GS_MARC WITH KEY WERKS = GS_ALV-WERKS
* MATNR = GS_ALV-MATNR
* BINARY SEARCH.
* IF SY-SUBRC NE 0.
* GS_ALV-MESSAGE = GS_ALV-MESSAGE && '父件物料在工厂' && GS_ALV-WERKS && '中不存在'.
* ENDIF.
* READ TABLE GT_MARC1 INTO GS_MARC1 WITH KEY WERKS = GS_ALV-WERKS
* MATNR = GS_ALV-IDNRK
* BINARY SEARCH.
* IF SY-SUBRC NE 0.
* GS_ALV-MESSAGE = GS_ALV-MESSAGE && '组件物料在工厂' && GS_ALV-WERKS && '中不存在'.
* ENDIF.
* IF GS_ALV-MESSAGE IS NOT INITIAL.
* GV_ERROR = 'X'.
* ENDIF.
MODIFY GT_ALV FROM GS_ALV.
ENDLOOP.
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_EDIT_DATA
*&---------------------------------------------------------------------*
* ALV 报表数据展示
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_EDIT_DATA .
ENDFORM. " FRM_EDIT_DATA
*&---------------------------------------------------------------------*
*& Form FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SET_FIELDCAT .
*----------------------------------------------------------------------*
*字段名 字段描述 可编辑 关联字段 关联表 初始长度 NO_ZERO 选择框 初始长度
*----------------------------------------------------------------------*
CLEAR: GT_FCAT,GS_FCAT.
PERFORM SET_FEILDCAT USING : 'MATNR ' '物料号 ' '' ' MATNR ' 'MAST' '' 'X' '' '' .
PERFORM SET_FEILDCAT USING : 'MAKTX ' '物料描述 ' '' ' MAKTX ' 'MAKT' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'WERKS ' '工厂 ' '' ' WERKS ' 'MAST' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'STLAN ' 'BOM用途 ' '' ' STLAN ' 'MAST' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'STLAL ' 'BOM版本 ' '' ' STLAL ' 'MAST' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'DATUV ' '起始有效日 ' '' ' DATUV ' 'STKO' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'BMENG ' '基本数量 ' '' ' BMENG ' 'STKO' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'POSNR ' '项目号 ' '' ' POSNR ' 'STPO' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'SORTF ' '排序字符串 ' '' ' SORTF ' 'STPO' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'POSTP ' '项目类别 ' '' 'POSTP ' 'STPO' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'IDNRK ' '组件物料号 ' '' ' IDNRK ' 'STPO' '' 'X' '' '' .
PERFORM SET_FEILDCAT USING : 'ZMAKTX ' '组件物料描述 ' '' ' MAKTX ' 'MAKT' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'AUSCH ' '部件废品率 ' '' ' AUSCH ' 'STPO' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'LGORT ' '生产仓储地点 ' '' ' LGORT ' 'STPO' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'MENGE ' '数量 ' '' ' ' '' '' '' '' '' .
* PERFORM SET_FEILDCAT USING : 'MENGE ' '数量 ' '' ' MENGE ' 'STPO' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'MEINS ' '计量单位 ' '' ' MEINS ' 'STPO' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'ALPGR ' '替代组 ' '' ' ALPGR ' 'STPO' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'ALPRF ' '替代优先级 ' '' ' ALPRF ' 'STPO' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'EWAHR ' '使用可能性 ' '' ' ' '' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'MTART ' '组件物料类型 ' '' 'MTART' 'MARA' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'TYPES' '成功失败标识 ' '' '' '' '' '' '' '' .
PERFORM SET_FEILDCAT USING : 'MESSAGE' '消息文本' '' '' '' '' '' '' ''.
ENDFORM. " FRM_FIELDCAT
*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT
*&---------------------------------------------------------------------*
* text 设置ALV所要显示的样式
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_LAYOUT .
GS_LAYO-BOX_FNAME = 'ZCBOX'."选择字段
GS_LAYO-ZEBRA = 'X'. " 设置每行的背景色为交替显示
GS_LAYO-CWIDTH_OPT = 'X'. " ALV输出时自动优化宽度
GS_LAYO-SEL_MODE = 'D'. "行列可选
GS_LAYO-NO_ROWINS = 'X'. "屏蔽键盘DELETE键
ENDFORM. " FRM_LAYOUT
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
* text ALV显示数据
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DISPLAY .
DATA: LDF_GRID_SETTINGS TYPE LVC_S_GLAY.
LDF_GRID_SETTINGS-EDT_CLL_CB = 'X'. "刷新
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_GRID_SETTINGS = LDF_GRID_SETTINGS
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
* IT_EVENTS = GT_EVENT
IS_LAYOUT_LVC = GS_LAYO
IT_FIELDCAT_LVC = GT_FCAT
I_SAVE = 'A'
TABLES
T_OUTTAB = GT_ALV. "输出内容内表
IF SY-SUBRC <> 0.
"* Implement suitable error handling here
ENDIF.
ENDFORM. " FRM_DISPLAY
*&---------------------------------------------------------------------*
*& FORM PF_STATUS_SET
*&---------------------------------------------------------------------*
*& TEXT 状态栏
*&---------------------------------------------------------------------*
*& --> P1 TEXT
*& <-- P2 TEXT
*&---------------------------------------------------------------------*
FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET TITLEBAR 'TITLE' .
SET PF-STATUS 'STANDARD'.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM USER_COMMAND
*&---------------------------------------------------------------------*
*& TEXT 用户命令响应
*&---------------------------------------------------------------------*
*& --> P1 TEXT
*& <-- P2 TEXT
*&---------------------------------------------------------------------*
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD .
DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = G_GRID.
* CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY.
CALL METHOD G_GRID->CHECK_CHANGED_DATA.
RS_SELFIELD-REFRESH = 'X'.
RS_SELFIELD-COL_STABLE = 'X'.
RS_SELFIELD-ROW_STABLE = 'X'.
CASE R_UCOMM.
WHEN 'ZKEEP'. "调用BAPI创建BOM
IF GV_ERROR IS INITIAL.
PERFORM FRM_CREATE_BOM.
ELSE.
MESSAGE E001(00) WITH '请查看消息文本,更改模板数据后,重新上传数据!' .
ENDIF.
WHEN OTHERS.
ENDCASE.
* MESSAGE ' ' TYPE 'S'.
RS_SELFIELD-REFRESH = 'X'.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form FRM_GET_PC_FILENAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_FILE text
*----------------------------------------------------------------------*
FORM FRM_GET_PC_FILENAME USING P_P_FILE.
DATA: LT_FILE TYPE FILETABLE,
L_RC TYPE I.
* 打开文件夹
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
CHANGING
FILE_TABLE = LT_FILE
RC = L_RC
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF L_RC = 1.
* 路径取得
READ TABLE LT_FILE INTO P_P_FILE INDEX 1.
ENDIF.
ENDFORM. " FRM_GET_PC_FILENAME
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
* 将EXCEL数据转换至内表中
*----------------------------------------------------------------------*
* -->P_GT_DATA text
*----------------------------------------------------------------------*
FORM FRM_UPLOAD_DATA .
DATA: LS_DATA TYPE ALSMEX_TABLINE. "导入数据结构
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE1
I_BEGIN_COL = 2
I_BEGIN_ROW = 5
I_END_COL = '26'
I_END_ROW = '65535'
TABLES
INTERN = GT_DATA
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
*&----内表数据填充
LOOP AT GT_DATA INTO LS_DATA .
CASE LS_DATA-COL.
WHEN '0001'.
GS_UPDATA-MATNR = LS_DATA-VALUE. "物料
WHEN '0002'.
GS_UPDATA-MAKTX = LS_DATA-VALUE. "物料描述
WHEN '0003'.
GS_UPDATA-WERKS = LS_DATA-VALUE. "工厂
WHEN '0004'.
GS_UPDATA-STLAN = LS_DATA-VALUE. "BOM用途
WHEN '0005'.
GS_UPDATA-STLAL = LS_DATA-VALUE. "BOM版本
WHEN '0006'.
GS_UPDATA-DATUV = LS_DATA-VALUE. "起始有效日
WHEN '0007'.
GS_UPDATA-BMENG = LS_DATA-VALUE. "基本数量
WHEN '0008'.
GS_UPDATA-POSNR = LS_DATA-VALUE. "项目号
WHEN '0009'.
GS_UPDATA-SORTF = LS_DATA-VALUE. "项目文本
REPLACE '"' IN GS_UPDATA-SORTF WITH ''.
REPLACE '“' IN GS_UPDATA-SORTF WITH ''.
REPLACE '"' IN GS_UPDATA-SORTF WITH ''.
REPLACE '“' IN GS_UPDATA-SORTF WITH ''.
CONDENSE GS_UPDATA-SORTF NO-GAPS.
WHEN '0010'.
GS_UPDATA-POSTP = LS_DATA-VALUE. "项目类别
WHEN '0011'.
GS_UPDATA-IDNRK = LS_DATA-VALUE. "组件物料号
WHEN '0012'.
GS_UPDATA-ZMAKTX = LS_DATA-VALUE. "组件物料描述
WHEN '0013'.
GS_UPDATA-AUSCH = LS_DATA-VALUE. "部件报废率
WHEN '0014'.
GS_UPDATA-LGORT = LS_DATA-VALUE. "生产仓储地点
WHEN '0015'.
GS_UPDATA-MENGE = LS_DATA-VALUE. "数量
WHEN '0016'.
GS_UPDATA-MEINS = LS_DATA-VALUE. "计量单位
WHEN '0017'.
GS_UPDATA-ALPGR = LS_DATA-VALUE. "替代组
WHEN '0018'.
GS_UPDATA-ALPRF = LS_DATA-VALUE. "替代优先级
WHEN '0019'.
GS_UPDATA-EWAHR = LS_DATA-VALUE. "使用可能性
WHEN OTHERS.
ENDCASE.
AT END OF ROW.
APPEND GS_UPDATA TO GT_UPDATA.
CLEAR:GS_UPDATA.
ENDAT.
ENDLOOP.
* *&---数据格式处理
LOOP AT GT_UPDATA INTO GS_UPDATA.
*&---加0
GS_UPDATA-MATNR = |{ GS_UPDATA-MATNR ALPHA = IN } | .
GS_UPDATA-POSNR = |{ GS_UPDATA-POSNR ALPHA = IN } | .
GS_UPDATA-IDNRK = |{ GS_UPDATA-IDNRK ALPHA = IN } | .
*&---单位转化
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
INPUT = GS_UPDATA-MEINS
LANGUAGE = SY-LANGU
IMPORTING
OUTPUT = GS_UPDATA-MEINS
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
MOVE-CORRESPONDING GS_UPDATA TO GS_ALV.
APPEND GS_ALV TO GT_ALV.
ENDLOOP.
ENDFORM. " FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
*& Form FRM_CLEAR_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CLEAR_DATA .
*
CLEAR:GT_ALV_TEM,
GT_ALV,
GS_ALV,
GT_DATA,
GT_UPDATA,
GT_UPDATA_TEM,
GS_UPDATA,
GV_ERROR,
GT_MARC ,
GT_MARC1,
GS_MARC ,
GS_MARC1,
GT_MEINS,
GS_MEINS.
ENDFORM. " FRM_CLEAR_DATA
*&---------------------------------------------------------------------*
*& Form FRM_GET_PATH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_PATH CHANGING P_P_PATH .
DATA: OBJFILE TYPE REF TO CL_GUI_FRONTEND_SERVICES.
DATA: PICKEDFOLDER TYPE STRING.
DATA: INITIALFOLDER TYPE STRING.
IF SY-BATCH IS INITIAL.
CREATE OBJECT OBJFILE.
IF NOT P_P_PATH IS INITIAL.
INITIALFOLDER = P_P_PATH.
ELSE.
OBJFILE->GET_TEMP_DIRECTORY( CHANGING TEMP_DIR = INITIALFOLDER
EXCEPTIONS CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3 ).
ENDIF.
OBJFILE->DIRECTORY_BROWSE( EXPORTING INITIAL_FOLDER = INITIALFOLDER
CHANGING SELECTED_FOLDER = PICKEDFOLDER
EXCEPTIONS CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3 ).
IF SY-SUBRC = 0.
P_P_PATH = PICKEDFOLDER.
ELSE.
WRITE: / 'An error has occured picking a folder'.
ENDIF.
ENDIF.
ENDFORM. " FRM_GET_PATH
*&---------------------------------------------------------------------*
*& Form FRM_DOWN_EXCEL
*&---------------------------------------------------------------------*
* 模板下载
*----------------------------------------------------------------------*
* --> P_OBJID 程序ID
* <-- P_FLG 模板标示
*----------------------------------------------------------------------*
FORM FRM_TEMP_EXCEL_GET USING P_OBJID TYPE WWWDATA-OBJID
P_FLG TYPE I.
DATA:
LV_OBJDATA TYPE WWWDATATAB,
LV_RC TYPE SY-SUBRC, "返回值
LV_FULLPATH TYPE STRING, "文件路径
LV_FNAME TYPE RLGRAP-FILENAME. "文件路径
* 下载路径取得
PERFORM FRM_GET_FILE_NAME USING P_FLG "模板标示
CHANGING LV_FULLPATH. "文件路径
CONCATENATE LV_FULLPATH '' INTO LV_FNAME.
SELECT SINGLE
RELID "IMPORT/EXPORT 记录中的区域
OBJID
FROM WWWDATA
INTO CORRESPONDING FIELDS OF LV_OBJDATA
WHERE RELID = 'MI'
AND OBJID = P_OBJID .
IF SY-SUBRC <> 0 OR LV_OBJDATA-OBJID = SPACE.
MESSAGE '文件不存在!' TYPE 'S' DISPLAY LIKE 'E'.
ELSE.
* 模板下载
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY = LV_OBJDATA "
DESTINATION = LV_FNAME "文件路径
IMPORTING
RC = LV_RC "返回值
CHANGING
TEMP = LV_FNAME. "文件路径
IF LV_RC <> 0.
MESSAGE '文件下载失败!' TYPE 'S' DISPLAY LIKE 'E' .
ENDIF.
ENDIF.
ENDFORM. " TEMP_EXCEL_GET
*&---------------------------------------------------------------------*
*& Form FRM_GET_FILE_NAME
*&---------------------------------------------------------------------*
* 下载路径取得
*----------------------------------------------------------------------*
* -->P_FLG 模板标示
* <--P_L_FULLPATH 文件路径
*----------------------------------------------------------------------*
FORM FRM_GET_FILE_NAME USING P_FLG
CHANGING P_FULLPATH.
DATA: L_FILENAME TYPE STRING, "文件路径名
L_NAME TYPE STRING, "文件名
L_PATH TYPE STRING, "文件路径
L_FULLPATH TYPE STRING. "文件路径
CLEAR P_FULLPATH.
CASE P_FLG.
WHEN 1.
L_NAME = 'BOM批量导入模板'.
* WHEN 2.
* L_NAME = '组件分配模板'.
WHEN OTHERS.
ENDCASE.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
DEFAULT_EXTENSION = '.xls'
DEFAULT_FILE_NAME = L_NAME
PROMPT_ON_OVERWRITE = 'X'
FILE_FILTER = 'Excel|*.xls;'
CHANGING
FILENAME = L_FILENAME
PATH = L_PATH
FULLPATH = L_FULLPATH
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.
ENDIF.
P_FULLPATH = L_FULLPATH.
ENDFORM. " FRM_GET_FILE_NAME
*&---------------------------------------------------------------------*
*& Form SET_FEILDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0001 字段名称
* -->P_0002 字段描述
* -->P_0003 可编辑
* -->P_0004 关联字段
* -->P_0005 关联表
* -->P_0006 初始长度
* -->P_0007 NO_ZERO
* -->P_0008 选择框
*----------------------------------------------------------------------*
FORM SET_FEILDCAT USING VALUE(P_0001)
VALUE(P_0002)
VALUE(P_0003)
VALUE(P_0004)
VALUE(P_0005)
VALUE(P_0006)
VALUE(P_0007)
VALUE(P_0008)
VALUE(P_0009).
GS_FCAT-JUST = 'L'."左对齐
GS_FCAT-FIELDNAME = P_0001.
GS_FCAT-COLTEXT = P_0002.
GS_FCAT-SELTEXT = P_0002.
GS_FCAT-EDIT = P_0003.
GS_FCAT-REF_FIELD = P_0004.
GS_FCAT-REF_TABLE = P_0005.
GS_FCAT-INTLEN = P_0006.
GS_FCAT-NO_ZERO = P_0007.
GS_FCAT-CHECKBOX = P_0008.
GS_FCAT-OUTPUTLEN = P_0009.
APPEND GS_FCAT TO GT_FCAT.
ENDFORM. " SET_FEILDCAT
*&---------------------------------------------------------------------*
*& Form FRM_GET_ZPLNMG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GS_ALV_ZDATE+6(2) text
*----------------------------------------------------------------------*
FORM FRM_GET_ZPLNMG USING P_DATA
P_LW_ALV_STRUCT TYPE ANY
P_MENGE .
DATA : LV_FIELD TYPE STRING.
LV_FIELD = 'ZPLNMG' && P_DATA.
ASSIGN COMPONENT LV_FIELD OF STRUCTURE P_LW_ALV_STRUCT TO <FS_FIELD>.
IF <FS_FIELD> IS ASSIGNED.
* <FS_FIELD> =
<FS_FIELD> = P_MENGE.
ENDIF.
ENDFORM. " FRM_GET_ZPLNMG
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CHECK_SCREEN .
DATA:LV_STRING TYPE STRING.
IF P_WERKS IS INITIAL.
LV_STRING = '请输入工厂!!'.
ENDIF.
IF LV_STRING IS NOT INITIAL.
GV_ERROR = 'X'.
MESSAGE S000(ZZZ01) WITH LV_STRING DISPLAY LIKE 'E'.
ENDIF.
ENDFORM. " FRM_CHECK_SCREEN
*&---------------------------------------------------------------------*
*& Form FRM_CHANGE_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CHANGE_SCREEN .
LOOP AT SCREEN.
IF SCREEN-NAME = 'P_WERKS'.
SCREEN-REQUIRED = 2.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDFORM. " FRM_CHANGE_SCREEN
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_BOM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CREATE_BOM .
DATA :LS_ECSIN TYPE CSIN,
LS_ESTKOB TYPE STKOB,
LS_ESTZUB TYPE STZUB,
LS_ASTLNR TYPE STZUB-STLNR,
LT_STPOB TYPE TABLE OF STPOB,
LS_STPOB TYPE STPOB.
DATA : LT_HEAD TYPE TABLE OF TY_ALV,
LS_HEAD TYPE TY_ALV,
LT_ITEM TYPE TABLE OF TY_ALV,
LS_ITEM TYPE TY_ALV.
DATA: LV_SORTF TYPE SORTP,
LV_MESSAGE TYPE STRING.
APPEND LINES OF GT_ALV TO LT_HEAD.
SORT LT_HEAD BY MATNR WERKS STLAN STLAL DATUV .
DELETE ADJACENT DUPLICATES FROM LT_HEAD COMPARING MATNR WERKS STLAN STLAL DATUV .
APPEND LINES OF GT_ALV TO LT_ITEM.
LOOP AT LT_HEAD INTO LS_HEAD WHERE FLAG IS INITIAL .
* IF LS_HEAD-FLAG = 'X'.
* MESSAGE S000(ZZZ01) WITH '已创建成功的数据不允许再次操作' DISPLAY LIKE 'E'.
* ENDIF.
CLEAR: LS_ECSIN,LS_ESTKOB,LS_ESTZUB,LS_ASTLNR,LT_STPOB, LS_STPOB,LV_MESSAGE.
*&----BAPI头信息
LS_ECSIN-DATUV = LS_HEAD-DATUV. "有效起始日期
LS_ECSIN-EMENG = LS_HEAD-BMENG. "需求数量/BOM基本数量
LS_ECSIN-MATNR = LS_HEAD-MATNR. "物料号
LS_ECSIN-WERKS = LS_HEAD-WERKS. "工厂
LS_ECSIN-STLAN = LS_HEAD-STLAN. "BOM用途
LS_ECSIN-STLAL = LS_HEAD-STLAL. "可选BOM/BOM版本
LS_ECSIN-STLTY = 'M'. "M:物料BOM S:标准BOM E:设备BOM K:订单 BOM
LS_ESTKOB-STLTY = 'M'. "M:物料BOM S:标准BOM E:设备BOM K:订单 BOM
* LS_ESTKOB-DATUV = LS_ITEM-DATUV. "有效起始日期
* LS_ESTKOB-ANDAT = SY-DATUM. "更改日期
* LS_ESTKOB-AENAM = SY-UNAME. "对象更改人员的名称
**
* SELECT SINGLE MEINS INTO LS_ESTKOB-BMEIN FROM MARA WHERE MATNR = LS_HEAD-MATNR.
* LS_ESTKOB-BMEIN = LV_MEINS . "BOM基本单位
LS_ESTKOB-BMENG = LS_HEAD-BMENG. "BOM基本数量
LS_ESTZUB-STLAN = LS_HEAD-STLAN. "BOM类别
* LS_ESTZUB-ZTEXT = 'testsld'. "BOM文本
LOOP AT LT_ITEM INTO LS_ITEM WHERE MATNR = LS_HEAD-MATNR
AND WERKS = LS_HEAD-WERKS
AND STLAL = LS_HEAD-STLAL
AND STLAN = LS_HEAD-STLAN
AND DATUV = LS_HEAD-DATUV.
CLEAR:LS_STPOB.
LV_SORTF = LS_ITEM-SORTF.
* LS_STPOB-STLTY = 'M'.
LS_STPOB-DATUV = LS_ITEM-DATUV.
LS_STPOB-IDNRK = LS_ITEM-IDNRK. "组件物料
LS_STPOB-POSTP = LS_ITEM-POSTP. "项目类别
LS_STPOB-POSNR = LS_ITEM-POSNR. "项目行号
LS_STPOB-SORTF = LV_SORTF. "排序字符串/项目文本
LS_STPOB-MEINS = LS_ITEM-MEINS. "单位
LS_STPOB-MENGE = LS_ITEM-MENGE. "数量
IF LS_ITEM-ALPGR IS NOT INITIAL . "替代组
LS_STPOB-STLTY = 'M'.
LS_STPOB-ALPGR = LS_ITEM-ALPGR. "替代组
LS_STPOB-ALPST = '2'. "1、手工维护/按用途可能性;2、100% 检查
LS_STPOB-ALPRF = LS_ITEM-ALPRF. "替代优先级
LS_STPOB-EWAHR = LS_ITEM-EWAHR. "使用可能性
ELSE.
CLEAR:LS_STPOB-EWAHR.
ENDIF.
LS_STPOB-AUSCH = LS_ITEM-AUSCH. "部件报废率
LS_STPOB-LGORT = LS_ITEM-LGORT. "生产订单的发货地点
*&---财务成本核算相关 ADD BY HANDKF01 20181203 S
* 物料类型为Z006取消成本核算
IF LS_ITEM-MTART = 'Z006' .
LS_STPOB-SANKA = ' '.
LS_STPOB-SANFE = 'X'.
ELSE.
LS_STPOB-SANKA = 'X'.
LS_STPOB-SANFE = 'X'. "20190116
ENDIF.
*&---财务成本核算相关 ADD BY HANDKF01 20181203 E
APPEND LS_STPOB TO LT_STPOB.
ENDLOOP.
IF LT_STPOB IS NOT INITIAL .
DO 100 TIMES.
CALL FUNCTION 'ENQUEUE_ECMASTE'
EXPORTING
MODE_MAST = 'X'
* MANDT = SY-MANDT
MATNR = LS_ECSIN-MATNR
WERKS = LS_ECSIN-WERKS
STLAN = LS_ECSIN-STLAN
EXCEPTIONS
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
WAIT UP TO '0.1' SECONDS.
ELSE.
CALL FUNCTION 'DEQUEUE_ECMASTE'
EXPORTING
MODE_MAST = 'X'
* MANDT = SY-MANDT
MATNR = LS_ECSIN-MATNR
WERKS = LS_ECSIN-WERKS
STLAN = LS_ECSIN-STLAN.
EXIT.
ENDIF.
ENDDO.
CALL FUNCTION 'CSAI_BOM_CREATE'
EXPORTING
ECSIN = LS_ECSIN
ESTKOB = LS_ESTKOB
ESTZUB = LS_ESTZUB
* FL_NO_CHANGE_DOC = ' '
* FL_COMMIT_AND_WAIT = ' '
* FL_NO_COMMIT_WORK = ' '
* FL_ALE = ' '
* FL_DEFAULT_VALUES = 'X'
IMPORTING
* FL_WARNING =
ASTLNR = LS_ASTLNR
TABLES
T_STPOB = LT_STPOB
EXCEPTIONS
ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = SY-MSGID
MSGNR = SY-MSGNO
MSGV1 = SY-MSGV1
MSGV2 = SY-MSGV2
MSGV3 = SY-MSGV3
MSGV4 = SY-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = LV_MESSAGE.
ELSE.
LV_MESSAGE = 'BOM单号:' && LS_ASTLNR && '创建成功'.
COMMIT WORK AND WAIT .
ENDIF.
ENDIF.
*&----更新ALV界面
LOOP AT GT_ALV INTO GS_ALV WHERE MATNR = LS_HEAD-MATNR
AND WERKS = LS_HEAD-WERKS
AND STLAL = LS_HEAD-STLAL
AND STLAN = LS_HEAD-STLAN
AND DATUV = LS_HEAD-DATUV.
GS_ALV-MESSAGE = LV_MESSAGE.
IF LS_ASTLNR IS NOT INITIAL .
GS_ALV-TYPES = 'S'.
GS_ALV-FLAG = 'X'.
ELSE.
GS_ALV-TYPES = 'E'.
ENDIF.
MODIFY GT_ALV FROM GS_ALV.
ENDLOOP.
ENDLOOP.
ENDFORM. " FRM_CREATE_BOM
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_NUMBER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LV_SCOR text
* <--P_LV_NUM_Y text
*----------------------------------------------------------------------*
FORM FRM_CHECK_NUMBER USING LV_SCORE TYPE CHAR10 CHANGING LV_NUM TYPE C.
CLEAR LV_NUM.
CALL FUNCTION 'HRIQ_CHECK_IS_NUMBER'
EXPORTING
IP_SCORE = LV_SCORE
IMPORTING
EP_IS_NUM = LV_NUM.
ENDFORM. " FRM_CHECK_NUMBER