BOM批量修改

在项目中,有时候会批量修改BOM的一些属性,利用的函数有三个,CSAP_MAT_BOM_OPEN ;CSAP_BOM_ITEM_MAINTAIN;CSAP_MAT_BOM_CLOSE,以下代码的需求是批量刷新BOM组件的展开类型,可根据需要,刷新其他的属性,也可以利用这三个函数做一些其他对BOM修改的操作的程序,分享一下,希望对用到的兄弟有帮助。

*&---------------------------------------------------------------------*

*& Report  Z_BOM_BATCH_REFRESH

*&

*&---------------------------------------------------------------------*

*&

*&

*&---------------------------------------------------------------------*

REPORT  Z_BOM_BATCH_REFRESH.

TABLES:MAST.

DATA:ITMAST TYPE STANDARD TABLE OF MAST WITH HEADER LINE,

ITSTKO TYPE STANDARD TABLE OF STKO WITH HEADER LINE,

ITSTPO TYPE STANDARD TABLE OF STPO WITH HEADER LINE.

DATA:LV_DATUV TYPE CSAP_MBOM-DATUV.

DATA:T_STPO TYPE STANDARD TABLE OF STPO_API02 WITH HEADER LINE.

TYPES:BEGIN OF TY_RESULT,

MATNR TYPE MARA-MATNR,

IDNRK TYPE STPO-IDNRK,

MESSAGE(120),

END OF TY_RESULT.

DATA:ITRESULT TYPE TABLE OF TY_RESULT WITH HEADER LINE.

DATA: BEGIN OF G_MATNR OCCURS 0,

MATNR LIKE MARA-MATNR,

END OF G_MATNR.

DATA: FILENAME TYPE STRING.

DATA: SCOUNTER,FCOUNTER,LCOUNTER TYPE I. "成功条数,失败条数,序号

DATA ISFALSE TYPE C VALUE ‘‘.            "判断是否有组件异常

*&---------------------------------------------------------------------*

*&      选择屏幕

*&---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME TITLE TEXT-001 .  "‘请指定选择条件‘.

"BOM 选择条件

SELECT-OPTIONS: S_WERKS FOR MAST-WERKS,   "工厂

S_MATNR FOR MAST-MATNR.

SELECTION-SCREEN END OF BLOCK BLOCK1.

*&---------------------------------------------------------------------*

*&      主程序

*&---------------------------------------------------------------------*

START-OF-SELECTION.

REFRESH ITMAST.

CLEAR ITMAST.

SELECT *

INTO TABLE ITMAST

FROM MAST

WHERE WERKS IN S_WERKS

AND ( MATNR LIKE ‘A%‘ OR MATNR LIKE ‘P%‘ OR MATNR LIKE ‘S%‘ OR MATNR LIKE ‘U%‘ OR MATNR LIKE ‘G%‘ OR MATNR LIKE ‘J%‘ OR MATNR LIKE ‘F%‘)

AND STLAN = ‘1‘

AND MATNR IN S_MATNR.

IF ITMAST[] IS NOT INITIAL.

REFRESH ITSTKO.

CLEAR ITSTKO.

SELECT *

INTO TABLE ITSTKO

FROM STKO

FOR ALL ENTRIES IN ITMAST

WHERE STLTY = ‘M‘

AND STLNR = ITMAST-STLNR

AND STLAL = ITMAST-STLAL

AND STLST = ‘1‘.

REFRESH ITSTPO.

CLEAR ITSTPO.

IF ITSTKO[] IS NOT INITIAL.

SELECT *

INTO TABLE ITSTPO

FROM STPO

FOR ALL ENTRIES IN ITSTKO

WHERE STLTY = ITSTKO-STLTY

AND STLNR = ITSTKO-STLNR.

ENDIF.

ENDIF.

IF ITSTKO[] IS NOT INITIAL.

REFRESH ITRESULT.

CLEAR ITRESULT.

LOOP AT ITMAST.

CLEAR ITSTKO.

READ TABLE ITSTKO WITH KEY STLTY = ‘M‘ STLNR = ITMAST-STLNR STLAL = ITMAST-STLAL.

IF SY-SUBRC EQ 0.

CLEAR T_STPO.

REFRESH T_STPO.

CLEAR LV_DATUV.

LV_DATUV = ITSTKO-DATUV.

*                    OPEN BOM

CALL FUNCTION ‘CSAP_MAT_BOM_OPEN‘

EXPORTING

MATERIAL               = ITMAST-MATNR

PLANT                  = ITMAST-WERKS

BOM_USAGE              = ‘1‘

ALTERNATIVE            = ITMAST-STLAL   "P_ALT

VALID_FROM             = LV_DATUV"ITSTKO-DATUV   "P_DATUV

*                         CHANGE_NO              =

*                         REVISION_LEVEL         =

*                         FL_NO_CHANGE_DOC       = ‘ ‘

*                     IMPORTING

*                         O_STKO                 =

*                         FL_WARNING             =

TABLES

T_STPO                 = T_STPO[]

*                         T_DEP_DATA             =

*                         T_DEP_DESCR            =

*                         T_DEP_ORDER            =

*                         T_DEP_SOURCE           =

*                         T_DEP_DOC              =

EXCEPTIONS

ERROR                  = 1

OTHERS                 = 2

.

LOOP AT T_STPO.

IF T_STPO-COMPONENT+0(2) <> ‘YZ‘.

DELETE T_STPO.

CONTINUE.

ENDIF.

ENDLOOP.

LOOP AT T_STPO.

T_STPO-EXPL_TYPE  = ‘D2‘.

MODIFY T_STPO.

CLEAR T_STPO.

ENDLOOP.

*                    维护BOM

LOOP AT T_STPO.

CALL FUNCTION ‘CSAP_BOM_ITEM_MAINTAIN‘

EXPORTING

I_STPO                   = T_STPO "HEADLINE

*                             FL_DEP_ALE_CONFORM       = ‘ ‘

*                             IMPORTING

*                             O_STPO                   =

*                             FL_WARNING               =

*                         TABLES

*                             T_DEP_DATA               =

*                             T_DEP_DESCR              =

*                             T_DEP_ORDER              =

*                             T_DEP_SOURCE             =

*                             T_DEP_DOC                =

EXCEPTIONS

ERROR                    = 1

OTHERS                   = 2

.

IF SY-SUBRC = 1.

ITRESULT-MATNR = ITMAST-MATNR.

ITRESULT-IDNRK = T_STPO-COMPONENT.

CONCATENATE ‘BOM‘ ITMAST-MATNR ‘更改失败,‘ ‘组件‘ T_STPO-COMPONENT ‘异常‘ INTO ITRESULT-MESSAGE.

APPEND ITRESULT.

CLEAR ITRESULT.

ELSEIF SY-SUBRC = 2.

ITRESULT-MATNR = ITMAST-MATNR.

ITRESULT-IDNRK = T_STPO-COMPONENT.

CONCATENATE ‘BOM‘ ITMAST-MATNR ‘更改失败,‘ ‘组件‘ T_STPO-COMPONENT ‘异常‘ INTO ITRESULT-MESSAGE.

APPEND ITRESULT.

CLEAR ITRESULT.

ELSEIF SY-SUBRC = 0.

ITRESULT-MATNR = ITMAST-MATNR.

ITRESULT-IDNRK = T_STPO-COMPONENT.

CONCATENATE ‘BOM‘ ITMAST-MATNR ‘更改成功,‘ ‘组件‘ T_STPO-COMPONENT ‘更改成功‘ INTO ITRESULT-MESSAGE.

APPEND ITRESULT.

CLEAR ITRESULT.

ENDIF.

ENDLOOP.

*                    关闭BOM

CALL FUNCTION ‘CSAP_MAT_BOM_CLOSE‘

*                     EXPORTING

*                         FL_COMMIT_AND_WAIT       = ‘X‘

*                     IMPORTING

*                         FL_WARNING               =

EXCEPTIONS

ERROR                    = 1

OTHERS                   = 2

.

IF SY-SUBRC = 0.

ENDIF.

ENDIF.

ENDLOOP.

MESSAGE ‘BOM更改完成,更改结果保存在C盘下!‘ TYPE ‘S‘.

PERFORM FRM_DOWNLOAD.

ELSE.

MESSAGE ‘没找到相对应的BOM‘ TYPE ‘S‘.

ENDIF.

END-OF-SELECTION.

*&---------------------------------------------------------------------*

*&      Form  FRM_DOWNLOAD

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM FRM_DOWNLOAD .

DATA:LV_FILENAME TYPE STRING.

CLEAR LV_FILENAME.

CONCATENATE ‘C:/ZPP110-BOM刷新展开类型结果表‘ SY-DATUM SY-UZEIT ‘.TXT‘ INTO LV_FILENAME.

CALL FUNCTION ‘GUI_DOWNLOAD‘

EXPORTING

FILENAME                        = LV_FILENAME

FILETYPE                        = ‘ASC‘

APPEND                          = ‘ ‘

TABLES

DATA_TAB                        = ITRESULT.

IF SY-SUBRC <> 0.

ENDIF.

ENDFORM.

时间: 2024-08-26 11:08:43

BOM批量修改的相关文章

orcad元件属性批量修改及BOM表

本文适合于没有使用CIS的情况下,提高元件属性修改的效率和BOM生成. 第一步:编号 首先给元件编好号: 如果是沿用旧工程,用这个编号.如果是创建的新工程,使用第二项,强制从头开始编号.因为编号与PCB是相对应的,如果任意改动旧工程的编号会导致PCB出错,所以添加新元件后通常都是使用自增编号:而新工程不会存在这个问题,从头开始编号正规.美观. 第二步:导出属性表格 选择导出的路径,将文件导出来. 在文件上右键,选择用EXCEL打开: 它里面有好多默认属性,这个不用管,右键插入列,将自定义的属性加

使用powershell批量修改文本为utf8

根据上一篇powershell生成pro的方法,增加一个批量修改文本文件为utf8格式的方法 $incPath = dir -filter "*.c" -Recurse $temp = " " foreach($fpath in $incPath) { $headList=$fpath.DirectoryName + "\" + $fpath.name $temp = cat $headList $temp | Out-File -Encodin

利用shell脚本批量修改表

最近公司里因为开发新功能,程序员需要快速在某一个库里的所有表添加字段,于是就用shell脚本简单快速实现批量修改表添加字段 #!/bin/bash export mysql_bin=/usr/local/mysql/bin export database=database export tables=`$mysql_bin/mysql -Bse "use ${database};show tables;"` for i in ${tables}         do          

Altium原理图中利用封装管理器批量修改元器件封装

批量修改封装,或者别人拿来原理图让我们画板时,发现封装全不对.如果原理图中同样封装的器件很多时,那么批量修改封装将大大减少你的工作量.下面将我批量修改封装的方法共享给大家. 在原理图界面,打开封装管理器:快捷键T-G,如图,在Design Item ID下选择需要修改的元器件ID,这个ID在设计原理图就确定了,不可以随便改变.如果全局修改本类别的元器件选择这个选项.也可以根据需求选择其他选项.如图,选中需要更改的PC814,并全选. 在图的右下角有Add添加按钮,添加封装,如图: 这时在窗口可以

mysql表名等大小写敏感问题、字段类型timestamp、批量修改表名、oracle查询历史操作记录等

mysql表名等大小写敏感问题:http://blog.csdn.net/postnull/article/details/72455768: 1 MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的: 2 1.数据库名与表名是严格区分大小写的: 3 2.表的别名是严格区分大小写的: 4 3.列名与列的别名在所有的情况下均是忽略大小写的: 5 4.字段内容默认情况下是大小写不敏感的. ================================================

gitlab连接并批量修改数据库账号邮箱地址(上)

最近,由于公司的域名发生变化,导致需要批量修改gitlab的账号.这个工作对于运维人员来说,工作量还是相对较大的.因此,尝试通过脚本修改数据库的方式进行批量修改. 整个过程大致分为几个阶段: 1)搞清楚gitlab的数据库结构 2)使用Python对相关的字段进行修改,若发现以@xxx结尾的域名,自动替换为@aaa的域名 注:本文中所采用的gitlab安装方式为官方默认的yum安装 1)gitlab的数据库采用的是postgresql,连接库时需要修改pg_hba.conf文件的相关配置 vim

如何批量修改200台以上web服务器密码

作为一个运维工作人员,有时候我们需要对自己负责的web服务器批量修改密码,如果一台一台改,会相对来说较为麻烦,所以在这里我们可以使用NIS账户统一认证. 我们假设有一部账号主控服务器来管理网域中所有主机的账号, 当其他的主机有用户登入的需求时,才到这部主控服务器上面要求相关的账号.密码等用户信息,如此一来,如果想要增加.修改.删除用户数据,只要到这部主控服务器上面处理即可, 这样就能够降低重复设定使用者账号的步骤了! NIS=Network Information Service   网络信息服

Unity3D Editor模式下批量修改prefab

最经遇到一个需要批量修改已经做好的prefab的问题,查了一些资料最终实现了但是还是不够完美,通过学习也发现unity的编辑器功能还是非常强大的.废话不多说直接上代码: 1 [ExecuteInEditMode] 2 [MenuItem("Tools/RecordPoint Add Flame")] 3 private static void RecordPointAddFlame() 4 { 5 GameObject twoSphere = AssetDatabase.LoadAss

【Unity小工具】批量修改原始资源设置

需求:项目中导入了近200个音效文件,我需要批量修改设置,但是编辑器下无法多选修改设置. 解决办法:重写OnPreprocessAudio方法 using UnityEngine; using System.Collections; using UnityEditor; public class AudioSet : AssetPostprocessor { public void OnPreprocessAudio(){ AudioImporter audioImport=assetImpor