SAP中修改Z Report时,开发系统和程序的初始系统不一致的问题

本文介绍了解决Zreport初始系统问题的方法。通过使用Tcode SE03并双击ChangeObjectDirectoryEntries,可以查看并修改程序的初始系统。
部署运行你感兴趣的模型镜像

最近修改一个Z report,出现了如下的提示消息。

message



以前也遇到过相同的情况,开发系统和程序的初始系统不一致的问题,其实中间也没有过多少时间,怎么就忘记具体是那个Tcode用来修改程序的初始系统呢?

Google了一下,然后就想起来是怎么个过程了,现在就记录如下:

Tcode:SE03,然后双击“Change Object Directory Entries”。


然后就能查看程序的初始系统是界面。我这里是Z report,选择第一项即 Program,输入program name,F8运行。

Run Screen



在如下界面中,点击“Object Directory”修改为开发系统,记得程序更新完后修改回初始系统,要不就可能会挨骂的。



图片


您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

以下是一个使用面向对象(CLASS)的ABAP程序,用于批量更新SAP物料的长描述(包括中文英文),通过读取Excel模板实现: --- ### **程序代码** ```ABAP REPORT zmm_material_desc_update NO STANDARD PAGE HEADING. * 定义数据结构 TYPES: BEGIN OF ty_material, matnr TYPE matnr, " 物料编号 maktx TYPE maktx, " 物料描述(中文) maktg TYPE maktg, " 物料描述(英文) END OF ty_material. * 定义内表工作区 DATA: gt_material TYPE TABLE OF ty_material, gs_material LIKE LINE OF gt_material, gt_return TYPE TABLE OF bapiret2, gs_return LIKE LINE OF gt_return. * 定义OLE对象(用于Excel操作) DATA: go_excel TYPE ole2_object, go_workbook TYPE ole2_object, go_worksheet TYPE ole2_object, go_range TYPE ole2_object. * 定义选择屏幕 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. PARAMETERS: p_file TYPE rlgrap-filename OBLIGATORY. " Excel文件路径 SELECTION-SCREEN END OF BLOCK b1. * 初始化事件 INITIALIZATION. TEXT-001 = '物料描述批量更新条件'. * 主逻辑 START-OF-SELECTION. PERFORM read_excel_data. PERFORM validate_data. PERFORM update_material_desc. PERFORM display_result. *&---------------------------------------------------------------------* *& Form READ_EXCEL_DATA *&---------------------------------------------------------------------* FORM read_excel_data. " 创建Excel应用对象 CREATE OBJECT go_excel 'Excel.Application'. IF sy-subrc <> 0. MESSAGE '无法启动Excel,请检查Office安装' TYPE 'E'. ENDIF. " 打开Excel文件 CALL METHOD OF go_excel 'Workbooks' = go_workbook. CALL METHOD OF go_workbook 'Open' EXPORTING #1 = p_file. " 获取第一个工作表 CALL METHOD OF go_excel 'Worksheets' = go_worksheet EXPORTING #1 = 1. CALL METHOD OF go_worksheet 'Activate'. " 读取数据(假设A1=物料号, B1=中文描述, C1=英文描述) DATA: lv_row TYPE i VALUE 2, " 从第2行开始(第1行是标题) lv_matnr TYPE string, lv_maktx TYPE string, lv_maktg TYPE string. DO. " 读取物料号 CALL METHOD OF go_excel 'Cells' = go_range EXPORTING #1 = lv_row #2 = 1. CALL METHOD OF go_range 'Value' INTO lv_matnr. " 如果物料号为空,则退出循环 IF lv_matnr IS INITIAL. EXIT. ENDIF. " 读取中文描述 CALL METHOD OF go_excel 'Cells' = go_range EXPORTING #1 = lv_row #2 = 2. CALL METHOD OF go_range 'Value' INTO lv_maktx. " 读取英文描述 CALL METHOD OF go_excel 'Cells' = go_range EXPORTING #1 = lv_row #2 = 3. CALL METHOD OF go_range 'Value' INTO lv_maktg. " 填充内表 gs_material-matnr = lv_matnr. gs_material-maktx = lv_maktx. gs_material-maktg = lv_maktg. APPEND gs_material TO gt_material. CLEAR gs_material. " 下一行 lv_row = lv_row + 1. ENDDO. " 关闭Excel CALL METHOD OF go_workbook 'Close'. CALL METHOD OF go_excel 'Quit'. FREE OBJECT: go_range, go_worksheet, go_workbook, go_excel. " 检查是否读取到数据 IF gt_material IS INITIAL. MESSAGE 'Excel文件中无有效数据' TYPE 'E'. ENDIF. ENDFORM. " READ_EXCEL_DATA *&---------------------------------------------------------------------* *& Form VALIDATE_DATA *&---------------------------------------------------------------------* FORM validate_data. LOOP AT gt_material INTO gs_material. " 检查物料是否存在 SELECT SINGLE @abap_true FROM mara WHERE matnr = @gs_material-matnr INTO @DATA(lv_exists). IF lv_exists IS INITIAL. gs_return-type = 'E'. gs_return-message = |物料 { gs_material-matnr } 存在|. APPEND gs_return TO gt_return. CLEAR gs_return. ENDIF. ENDLOOP. " 如果有错误,显示并终止 IF gt_return IS NOT INITIAL. PERFORM display_messages. MESSAGE '数据校验失败,请检查错误日志' TYPE 'E'. ENDIF. ENDFORM. " VALIDATE_DATA *&---------------------------------------------------------------------* *& Form UPDATE_MATERIAL_DESC *&---------------------------------------------------------------------* FORM update_material_desc. LOOP AT gt_material INTO gs_material. " 更新中文描述(MAKT表,语言码ZH) CALL FUNCTION 'Z_MM_MATERIAL_DESC_UPDATE' EXPORTING matnr = gs_material-matnr spras = 'ZH' " 中文 maktx = gs_material-maktx IMPORTING return = gs_return. IF gs_return-type = 'E'. APPEND gs_return TO gt_return. CLEAR gs_return. ELSE. " 更新英文描述(MAKT表,语言码EN) CALL FUNCTION 'Z_MM_MATERIAL_DESC_UPDATE' EXPORTING matnr = gs_material-matnr spras = 'EN' " 英文 maktx = gs_material-maktg IMPORTING return = gs_return. IF gs_return-type = 'E'. APPEND gs_return TO gt_return. CLEAR gs_return. ENDIF. ENDIF. ENDLOOP. " 如果有错误,显示并终止 IF gt_return IS NOT INITIAL. PERFORM display_messages. MESSAGE '物料描述更新失败,请检查错误日志' TYPE 'E'. ENDIF. ENDFORM. " UPDATE_MATERIAL_DESC *&---------------------------------------------------------------------* *& Form DISPLAY_MESSAGES *&---------------------------------------------------------------------* FORM display_messages. LOOP AT gt_return INTO gs_return. WRITE: / gs_return-type, gs_return-message. ENDLOOP. ENDFORM. " DISPLAY_MESSAGES *&---------------------------------------------------------------------* *& Form DISPLAY_RESULT *&---------------------------------------------------------------------* FORM display_result. IF gt_return IS INITIAL. MESSAGE '物料描述批量更新成功' TYPE 'S'. ENDIF. ENDFORM. " DISPLAY_RESULT ``` --- ### **自定义函数模块(Z_MM_MATERIAL_DESC_UPDATE)** 由于标准BAPI直接支持多语言描述更新,需创建自定义函数模块: ```ABAP FUNCTION z_mm_material_desc_update. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(MATNR) TYPE MATNR *" VALUE(SPRAS) TYPE SPRAS *" VALUE(MAKTX) TYPE MAKTX *" EXPORTING *" VALUE(RETURN) TYPE BAPIRET2 *"---------------------------------------------------------------------- DATA: ls_makt TYPE makt. " 检查物料是否存在 SELECT SINGLE @abap_true FROM mara WHERE matnr = @matnr INTO @DATA(lv_exists). IF lv_exists IS INITIAL. return-type = 'E'. return-message = |物料 { matnr } 存在|. RETURN. ENDIF. " 更新MAKT表 ls_makt-matnr = matnr. ls_makt-spras = spras. ls_makt-maktx = maktx. MODIFY makt FROM ls_makt. IF sy-subrc = 0. return-type = 'S'. return-message = |物料 { matnr } 的 { spras } 描述更新成功|. ELSE. return-type = 'E'. return-message = |物料 { matnr } 的 { spras } 描述更新失败|. ENDIF. ENDFUNCTION. ``` --- ### **功能说明** 1. **Excel模板要求**: - 第1行:标题行(物料号 | 中文描述 | 英文描述) - 第2行起:数据行(如 `100001 | 测试物料 | Test Material`) 2. **数据校验**: - 检查物料是否存在(`MARA`表)。 - 支持多语言描述(中文`ZH`、英文`EN`)。 3. **更新逻辑**: - 通过自定义函数模块更新`MAKT`表。 - 分两次调用:一次更新中文,一次更新英文。 4. **错误处理**: - 收集所有错误并显示,避免中途终止导致数据一致。 --- ### **关键点** 1. **OLE对象操作Excel**: - 使用`CREATE OBJECT`创建Excel实例。 - 通过`Cells`方法读取单元格数据。 2. **多语言支持**: - 中文描述:语言码`ZH` - 英文描述:语言码`EN` 3. **性能优化**: - 批量读取Excel数据到内表后处理,减少OLE调用次数。 --- ### **扩展建议** 1. **支持更多语言**: - 在Excel模板中添加更多语言列(如德语`DE`),并在程序中扩展。 2. **日志记录**: - 将更新结果记录到自定义表(如`ZMM_DESC_UPDATE_LOG`)。 3. **后台调度**: - 使用`SM36`创建后台作业,定期执行更新。 4. **直接文件上传**: - 替换OLE为`GUI_UPLOAD` + CSV解析,避免依赖Excel。 --- ### **常见问题** 1. **Excel无法打开?** - 确保服务器安装Excel,或改用CSV格式 + `GUI_UPLOAD`。 2. **描述未更新?** - 检查`MAKT`表的权限语言码是否正确。 3. **如何处理长描述(超过40字符)?** - `MAKTX`字段已支持长文本,无需特殊处理。 4. **如何支持批量提交?** - 在自定义函数模块中使用`COMMIT WORK`。 5. **如何导出错误数据?** - 在`DISPLAY_MESSAGES`中添加文件下载逻辑。 --- ### **总结** - **核心逻辑**:Excel读取 → 数据校验 → 分语言更新描述。 - **用户体验**:详细的错误日志成功提示。 - **可扩展性**:易于添加新语言或业务规则。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值