闲人闲谈PS之四十八——非标定制企业BOM传输问题

2024-01-20 03:30

本文主要是介绍闲人闲谈PS之四十八——非标定制企业BOM传输问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

惯例闲话:上个月,集团公司组织了一次信息化大会,邀请国内外10几位知名的院士嘉宾来助阵。能听这些站在知识顶端的大佬的讲座,受益匪浅。至少在当下数字化趋势之下,细分领域的发展势头,有了方向性的指点。很多情况下,受制于信息渠道,我们大部分人只是生活在信息茧房中。突破信息茧房,只有接触比自己更高阶层有真才实学愿意分享知识的人。令闲人欣慰的是,这些年自己坚持的,项目型制造为典型的工程行业(建筑、装备制造、军工、航空航天、系能源等)是当下经济发展动力主要源泉,沉淀在这些行业做数字化、信息化,在当下经济寒冬,在解决温饱问题的同时,可以探出头看看“井口”之外的天空。
在这里插入图片描述

闲话到此为止,今天聊聊非标定制行业的BOM传输问题

非标定制行业BOM特点回顾

非标定制行业,一般认为,具有数量庞大、重复使用率低、典型的行业有,装备制造行业,如锅炉制造、风电设备制造、变压器制造等,行业分支很广。工程制造行业,如机电设备安装、幕墙、给排水等。在闲人的以往文章中也有所提及,对这些行业也概览介绍,BOM是体现行业特点的关键特征数据之一。BOM的应用和特点详细就不展开了,在后面几期文章再做详细探讨。

这里仅举一个工程制造企业例子来说明一下,某家企业做的建筑工程幕墙产品

在这里插入图片描述

在这里插入图片描述
我们看这个BOM,
第一层成品UN001、第二层半成品ASS001、第三层半成品JG001、JG002,这三层和很多制造企业的产品区别不大。但是从第四层原材料XC001、XC002就出现巨大的变化了。JG001的加工长度是2.5米,用原材料XC01(6米)切割而成。而在实际业务中,存在套裁,也就是考虑到材料利用率,需要选用哪种长度的原材料来切割,选用不同的原材料,则产生BOM组成的变化。这里我们可以总结为,相同的成品或半成品,相同的工艺下,材料利用率目标不同使得原材料组成和用量均不同。这个数据对企业具有重要意义,可以分析材料利用率,从而不断优化原材料的选择。

可以推演的此类业务造成系统处理的复杂度,计划部门下同样的成品计划,每一批的原材料组成和用量都可能存在不同,从而造成BOM的单位用量不一样。可以想象,
1、当一个产品在同一时间段内,需要根据生产批次产生不同的BOM版本
2、BOM发生变更,其中一个零部件变更,需要溯源到生产批次,并对目标生产批次的BOM做全量变更,否则,BOM的用量将出现差错。

以上这个场景,在项目制的生产制造中,非常常见,特别是有金属材料加工的行业。在10几年前,闲人所经历的项目,受限于当时的技术、认知,项目组对第四层原材料层,采取了不进入BOM管理策略,领料加工直接批量挂生产工单组件方式解决,标准成本估算缺失此部分材料成本,则通过分摊分配处理。应该说,当年的方案是务实的,虽然有一部分缺陷。

如今,系统架构和硬件性能都有的质的飞跃,在新的项目上,大部分都会把原材料放到BOM中管理,通过不同的版本来管理。

在这里插入图片描述

但新的问题也随之出现,数据传输问题。

在这里插入图片描述

数据源头

对于项目型制造企业来说,PLM、ERP、MOM三件套必备。PLM管理生成物料主数据和BOM。一般采用同步的方式传输BOM。但是如果一次传输过程,SAP处理时间过长,接口必然会断开,造成传输失败。上面的截图是闲人最近遇到的比较普遍的问题,通过很多方式去解决,但是效果都不好,用户一次发图的最大数量是一个变量,所以不能用无限调节接口等待时间的方式来解决。
在这里插入图片描述
此类场景,同步方式必然会遇到瓶颈,接口等待时间也不利于业务部门人员日常作业。
按照SAP官方提供的方法,对PO的接口时间做了处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
并按照notes 3230465更改sap设置
在这里插入图片描述有改善,但是超过10分钟以上等待,还是会出问题

因此,采用异步方式是相对比较合适的处理方法。

数据传输方式和处理机制

异步的方式,其本质是一个待处理消息队列。数据接收后放在队列里里,通过后台运作机制把数据捞出来,做后续的逻辑处理,这里有几个要点:
1、消息队列的底表设计,方便业务操作隔离、不遗漏数据
这里列举的表,框出来的2个字段,是业务部门业务上的操作颗粒度,专业术语叫施工批次和发图编号,表示发BOM的最小单位。这是一个典型的业务导向的设计。
在这里插入图片描述在程序设计上,每次循环按主键作为一次循环
在这里插入图片描述

2、锁机制,防止重复运行
锁机制,则根据1 的数据表设计的主键
在这里插入图片描述
每次循环判断是否被锁,
LOOP AT LT_STBH INTO LS_STBH.
*

  •  LS_GARG-MANDT = SY-MANDT.
    
  •  LS_GARG-POTX1 = LS_STBH-POTX1.
    
  •  LS_GARG-POTX2 = LS_STBH-POTX2.
    
  •  LV_GARG = LS_GARG .CALL FUNCTION 'ENQUEUE_READ'EXPORTINGGCLIENT = SY-MANDTGNAME   = 'ZTPP_BOM_QUEUE'TABLESENQ     = LT_SEQG3.IF LT_SEQG3[] IS NOT INITIAL."有锁定条目LOOP AT LT_SEQG3 INTO LS_SEQG3 .IF  LS_SEQG3-GARG CS LS_STBH-POTX1 ANDLS_SEQG3-GARG CS LS_STBH-POTX2.LV_PROCESS = ''.EXIT."存在锁定条目ENDIF.LV_PROCESS = 'X'.ENDLOOP.
    ELSE.LV_PROCESS = 'X'.
    ENDIF.IF LV_PROCESS = 'X'."可以执行CALL FUNCTION 'ENQUEUE_EZ_ZTPP_BOM_DATA'EXPORTINGMODE_ZTPP_BOM_QUEUE = 'E'MANDT               = SY-MANDTZPOTX1              = LS_STBH-POTX1ZPOTX2              = LS_STBH-POTX2EXCEPTIONSFOREIGN_LOCK        = 1SYSTEM_FAILURE      = 2OTHERS              = 3.LOOP AT LT_ITEMS INTO LS_ITEMS WHERE POTX1 = LS_STBH-POTX1AND POTX2 = LS_STBH-POTX2 .APPEND LS_ITEMS  TO LT_STPO.DELETE LT_ITEMS.ENDLOOP.LS_DEST-DEST_ID = 'PLM'.LS_DEST-BUSS_TP = 'ZPLM_IFS005'.LS_IN-DEST = LS_DEST.LS_IN-DATA-ITEMS = LT_STPO[].CALL FUNCTION 'ZFM_BOM_MAINTAIN'EXPORTINGIS_INPUT  = LS_INIMPORTINGES_OUTPUT = LS_OUT.LT_RETURN[] = LS_OUT-DATA-MSGER.READ TABLE LT_RETURN INTO LS_RETURN WITH KEY EXT01 = ''.IF SY-SUBRC = 0."处理结果存表CALL FUNCTION 'DEQUEUE_EZ_ZTPP_BOM_DATA'EXPORTINGMODE_ZTPP_BOM_QUEUE = 'E'MANDT               = SY-MANDTZPOTX1              = LS_STBH-POTX1ZPOTX2              = LS_STBH-POTX2.IF LS_RETURN-MSGTY = 'S'.LS_RETURN-MSGTY = 'C'.ENDIF.UPDATE ZTPP_BOM_QUEUE SET TYPE = LS_RETURN-MSGTY  ZMESSAGE = LS_RETURN-MSGTXWHERE ( ZPOTX1 = LS_STBH-POTX1AND  ZPOTX2 = LS_STBH-POTX2 ).ENDIF.IF LS_RETURN-MSGTY = 'C'.LV_COLOR = 'C510'.ELSE.LV_COLOR = 'C610'.ENDIF.LV_MSG = LS_RETURN-MSGTX.
    ELSE.UPDATE ZTPP_BOM_QUEUE SET TYPE = 'W'  ZMESSAGE = '锁定,请重新执行' WHERE ( ZPOTX1 = LS_STBH-POTX1 AND  ZPOTX2 = LS_STBH-POTX2 ).LV_COLOR = 'C610'.LV_MSG = '数据被锁定'.
    ENDIF.LOOP AT  GT_DATA INTO GS_DATA WHERE POTX1 = LS_STBH-POTX1 AND POTX2 = LS_STBH-POTX2.GS_DATA-ROWCOLOR  = LV_COLOR.GS_DATA-MESSAGE = LV_MSG.MODIFY GT_DATA FROM GS_DATA  TRANSPORTING ROWCOLOR MESSAGE.
    ENDLOOP.IF SY-BATCH <> 'X'.CALL METHOD GV_ALV->REFRESH_TABLE_DISPLAY.PERFORM FRM_REFURBISH_ALV.
    ENDIF.CLEAR:LV_COLOR,LV_MSG,
    LV_PROCESS,
    LV_GARG,
    LS_GARG,
    LS_DEST,
    LT_STPO[],
    LS_RETURN,
    LT_RETURN[].
    
    ENDLOOP.

3、日志和异常处理
在后台处理时候,对表中异常和待处理数据在索引条件上做处理。这里要对SAP点赞,在程序索引入口的功能上,非常强大,而且是封装的, SELECT-OPTIONS,大大提高了程序开发效率
在这里插入图片描述
SELECTION-SCREEN BEGIN OF BLOCK SCST WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS:S_POTX1 FOR ZTPP_BOM_QUEUE-ZPOTX1,
S_POTX2 FOR ZTPP_BOM_QUEUE-ZPOTX2,
S_ERDAT FOR ZTPP_BOM_QUEUE-ERDAT,
S_TYPE FOR ZTPP_BOM_QUEUE-TYPE DEFAULT ‘I’.

SELECTION-SCREEN END OF BLOCK SCST.

其中最重要的是,不重复。这是程序设计上的注意点,也是大部分异步程序的处理关键所在。

直观感受下,一次BOM发布复杂度。
在这里插入图片描述

运行效果检验

1、数据传输等待时间质的飞跃

改之前
在这里插入图片描述
改之后

在这里插入图片描述
2、后台处理监控
目前经历2次大的数据压力测试,结果都OK。
在这里插入图片描述
小结:BOM传输问题,在特定的行业企业,会成为一个突出的问题。根源是业务,BOM的传输带着强烈的生产批次性质,那么势必带来效率的问题。在开发阶段,一定要做好两手准备,一般来说,核心处理逻辑封装成函数是必要的手段。

这篇关于闲人闲谈PS之四十八——非标定制企业BOM传输问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_47375646/article/details/134986704
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/624650

相关文章

Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题

《Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题》:本文主要介绍Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录一、前言二、系统架构检测三、卸载旧版 Go四、下载并安装正确版本五、配置环境变量六、验证安装七、常见

解决Java异常报错:java.nio.channels.UnresolvedAddressException问题

《解决Java异常报错:java.nio.channels.UnresolvedAddressException问题》:本文主要介绍解决Java异常报错:java.nio.channels.Unr... 目录异常含义可能出现的场景1. 错误的 IP 地址格式2. DNS 解析失败3. 未初始化的地址对象解决

springboot+vue项目怎么解决跨域问题详解

《springboot+vue项目怎么解决跨域问题详解》:本文主要介绍springboot+vue项目怎么解决跨域问题的相关资料,包括前端代理、后端全局配置CORS、注解配置和Nginx反向代理,... 目录1. 前端代理(开发环境推荐)2. 后端全局配置 CORS(生产环境推荐)3. 后端注解配置(按接口

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Idea插件MybatisX失效的问题解决

《Idea插件MybatisX失效的问题解决》:本文主要介绍Idea插件MybatisX失效的问题解决,详细的介绍了4种问题的解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录一、重启idea或者卸载重装MyBATis插件(无需多言)二、检查.XML文件与.Java(该文件后缀Idea可能会隐藏

Nginx 访问 /root/下 403 Forbidden问题解决

《Nginx访问/root/下403Forbidden问题解决》在使用Nginx作为Web服务器时,可能会遇到403Forbidden错误,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录解决 Nginx 访问 /root/test/1.html 403 Forbidden 问题问题复现Ng

Python的pip在命令行无法使用问题的解决方法

《Python的pip在命令行无法使用问题的解决方法》PIP是通用的Python包管理工具,提供了对Python包的查找、下载、安装、卸载、更新等功能,安装诸如Pygame、Pymysql等Pyt... 目录前言一. pip是什么?二. 为什么无法使用?1. 当我们在命令行输入指令并回车时,一般主要是出现以

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

Python解决雅努斯问题实例方案详解

《Python解决雅努斯问题实例方案详解》:本文主要介绍Python解决雅努斯问题实例方案,雅努斯问题是指AI生成的3D对象在不同视角下出现不一致性的问题,即从不同角度看物体时,物体的形状会出现不... 目录一、雅努斯简介二、雅努斯问题三、示例代码四、解决方案五、完整解决方案一、雅努斯简介雅努斯(Janu

MySQL索引失效问题及解决方案

《MySQL索引失效问题及解决方案》:本文主要介绍MySQL索引失效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql索引失效一、概要二、常见的导致MpythonySQL索引失效的原因三、如何诊断MySQL索引失效四、如何解决MySQL索引失