一个外行对ERP的问题的思考方式=原创

ERP的实施遇到困难时,先撇开软件,从规范管理的角度去思考问题怎么解决

本文经修改后发表于

http://tech.it168.com/erp/2007-12-03/200712031652771.shtml


我是外行,地地道道的ERP外行(不是什么客气的话,我也没那谦虚的品质)。虽然我接触ERP已经12年了(那时候还叫MRPII),我对ERP所有的理论基础绝大多数来源于那本《制造行业信息化---MRPII原理》,我所有参加的ERP相关的培训不会超过30个小时,其他的都是在三个软件的使用中得到的经验。

最早知道MRPII1995年,我当时在一家大型国有整车厂给老总做秘书,象培训这样的好事我是从来不缺席的。北京利玛的专家(当时还不叫顾问)大致的讲解了一下MRPII的原理和推行MRPII的好处,然后留下了几本书。我把那几本书看了几遍,脑子中总算有了一些概念,物料清单、主生产计划、安全库存等,可是那几本书上没有具体的推导过程和应用案例,只是说上了MRPII会增长效益,降低库存,是个好东西。所以,当时MRPII在我心中是无所不能的万试万灵的神药。

1996年,我和老总到另外一家大型国有整车厂去参观他们的信息中心,具体什么软件不清楚了,反正很贵。里面有个员工和老总很熟悉,苦笑着说,这套系统是个摆设,来人参观的时候,可以演示一下,平常是没有使用的。我当时就愣住了:原来上了MRPII并不代表什么,企业的管理水平没有增长,和企业的效益也没有直接的关系。

1997年,我公司准备上MRPII,开始做前期的数据准备工作。由于企业比较正规,人力资源充足,在设计管理和工艺管理方面还是相当严格的,甚至采用单台发料生产线跟踪的方法来确认产品的物料清单。至于四大工艺的生产节拍、单件工时、准备工时,那是很早就有的数据了。采购的提前期当时确认的比较复杂,但是我们后来采用预测+滚动的方式,消除了部分库存的波动。而且由于采购比较强势,于1998年开始推行日送货,在公司内建立了一个外租仓库,要求供应商将库存放在仓库里,每个月使用之后才通知按照当月使用的数量开发票,开创了国内代保管方式的先河。1999年,我离开公司之前,MRPII始终没有上线,但是先期的准备工作做得很多,为以后上大型的ERP打下了很好的基础。这里我要提一下那个老总,记得是96年的时候,他说:如果通过互联网,把供应商和主机厂联系起来,那么我们可以更好的利用供应商的资源,降低库存。这个说法,与福特汽车公司目前的做法不谋而合。

1999年,我到了一家美国独资的企业,该企业是集团公司下属的企业之一,全集团13个企业用的都是四班(FOUR SHIFT)。因为我对MRPII有一定的了解,而且任成本物流部的经理,仓库全在我的管辖之下,所以我成为公司推行MRPII三人领导小组的成员之一。为了不让自己露怯,我弄到了一本《制造行业信息化---MRPII原理》,开始恶补。2000年的5月,在一次QS9000内部审核员的培训之后,我突然发现MRPII和质量管理体系之间有很多共同的东西。比如:

1、 MRPII原理66.只有通过找出并解决过剩的原因才能显著地削减库存,和质量管理体系通用的帕雷托(80-20)法则;

2、 MRPII原理62.供应商按时交货靠的是足够的能力与短提前期,不是靠客户所有权、关系密切与神通,和质量管理体系强调供方选择的重要性;

3、 MRPII原理58.返回到原计划比重新计划更加困难──但更加好,和质量管理体系的PDCA

4、 MRPII原理1.对于一切制造行业,有效的计划与控制所需的系统框架是共同的,和质量管理体系要求的输入识别和输出验证。

有着异曲同工之妙。随着职位的变化,当我从生产的角度来看待MRPIIISO的时候,我更加确信了我的观点:MRPIIISO都是管理的工具,是为管理服务的,而不是主导。

2003年,当我到一家新加坡企业的时候,那时候看他们用的管理软件是K3,已经号称是ERP了。有着ISO和四班的基础,而且只针对采购模块,熟悉这个软件用了不多的时间,精力主要放在对其他部门接口的具体操作和人员熟悉上。两个星期之后,开始对原有的流程进行了大规模的改善,取得了不错的成果,也得到了领导的肯定,仓库也划归我管辖。在对仓库进行改造的过程中,我失败了。但是和软件本身没有任何关系,是对物料编码的策划没有做好。成绩还是有的,最起码在我的推动下,采购、仓库、财务三个原来相互独立的模块终于串联在一起了。从这次的经历中,我体会到:很多时候管理软件的实施,功夫都是在系统外的。

2005年,我在一家国有企业作为采购部的经理,负责推行用友的U8。项目进行到一半的时候,原来支持我的总经理辞职了,新换的总经理对这个项目不闻不问,就我们一群傻鸟在下面忙活。好歹项目是上线了,可是要说成功了,我自己都不相信。这次的经历对我是个教训,我开始思考企业对管理需求的迫切程度以及其他的因素,对实施ERP成功影响的不同程度。开始的时候我的想法是这样的:管理层的重视是第一位的,只要有改善的需求或者愿望,那么总会成功的;其次是企业的基础管理,如果物料清单没有那么滥,也不会有那么多的麻烦;再次就是顾问的水平,从头到底都是提出了很少有效的建议,让我们走了很多弯路;至于软件么,我没太在意,估计选K10.3U860,是一样的效果。但是最近,认为处于不同发展阶段的企业,对管理的需求是不同的,那么各种因素对ERP成功在不同时期的影响也是不一样的,所以写了一篇文章《企业不同的发展阶段对ERP的需求》,对我以前的观点进行反思。

从接触MRPII到现在,我对硬件的配置、软件二次开发、一些软件具体的功能或者查询,我一无所知,所以我是个标准的外行。那么一个外行在遇到ERP的问题是如何思考的呢?
首先,对于遇到的问题,比如成本核算、外协、倒冲、不合格品的处理等,我的惯性思维就是没有系统的时候是如何操作的,如何能与ISO或者企业的管理标准相结合,于是分析的时候着重于现状与标准管理流程的差异,而不是某个系统里如何操作。
其次,既然是管理流程的问题,那么很多时候,解决的办法不止一个,没有哪个是绝对正确的,只要企业或者软件合适操作,能起到控制的作用,就可以了。比如对于同一个物料多个供方,用库位、批次或者特征码的方式都可以起到管理的作用,至于如何选择,那就要看企业的力度和软件是否支持了。
再者就是思考基础是管理的相通性,而不是差异性。我承认管理是有差异的,但是远不如管理的通用性普遍。基于MRP逻辑上的ERP,和基于ISO标准上的管理,为我对问题的思考提供了方向。最明显的例子就是:公司的物料编码该如何编制?对于这样的问题,只能应用通用的原则(相通性),但是落实到具体的编码上,确实没有一家是一样的(差异性)。还不如我去设计部门请教一下公司的命名规则来的实际。
最后说一句,很多时候的问题,其实大家知道怎么做,就是领导不支持或者是执行力度不够。对这样的问题,我的想法就是:ERP好运!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7942439/viewspace-21456/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7942439/viewspace-21456/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的俄罗斯方块小游戏的Python代码示例,基于Pygame库: ```python import pygame import random pygame.init() # 游戏窗口大小 WINDOW_WIDTH = 400 WINDOW_HEIGHT = 600 # 方块大小 BLOCK_SIZE = 20 # 游戏区域大小 PLAY_WIDTH = 10 * BLOCK_SIZE PLAY_HEIGHT = 20 * BLOCK_SIZE # 游戏区域位置 PLAY_X = (WINDOW_WIDTH - PLAY_WIDTH) // 2 PLAY_Y = WINDOW_HEIGHT - PLAY_HEIGHT - 50 # 方块类型和颜色 SHAPES = [ ([(0, 0), (1, 0), (2, 0), (3, 0)], (255, 0, 0)), # I ([(0, 0), (1, 0), (0, 1), (1, 1)], (0, 255, 0)), # O ([(0, 0), (1, 0), (1, 1), (2, 1)], (0, 0, 255)), # J ([(2, 0), (1, 0), (1, 1), (0, 1)], (255, 255, 0)), # L ([(1, 0), (0, 1), (1, 1), (2, 1)], (255, 0, 255)), # T ([(0, 1), (1, 1), (1, 0), (2, 0)], (0, 255, 255)), # Z ([(2, 1), (1, 1), (1, 0), (0, 0)], (255, 128, 0)), # S ] # 初始化游戏窗口 window = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT)) pygame.display.set_caption("俄罗斯方块") # 游戏区域背景颜色 PLAY_BG_COLOR = (0, 0, 0) # 方块移动速度 FPS = 60 clock = pygame.time.Clock() class Block: def __init__(self, shape, color): self.shape = shape self.color = color self.x = PLAY_X + PLAY_WIDTH // 2 - BLOCK_SIZE * 2 self.y = PLAY_Y - BLOCK_SIZE * 4 # 旋转方块 def rotate(self): self.shape = [(y, -x) for x, y in self.shape[::-1]] # 移动方块 def move(self, dx, dy): self.x += dx * BLOCK_SIZE self.y += dy * BLOCK_SIZE # 在游戏区域中检查方块是否合法 def check_valid(self, board): for x, y in self.shape: if not (0 <= self.x + x * BLOCK_SIZE < PLAY_WIDTH and 0 <= self.y + y * BLOCK_SIZE < PLAY_HEIGHT) or board[ (self.y + y * BLOCK_SIZE) // BLOCK_SIZE][(self.x + x * BLOCK_SIZE) // BLOCK_SIZE]: return False return True # 在游戏区域中放置方块 def place(self, board): for x, y in self.shape: board[(self.y + y * BLOCK_SIZE) // BLOCK_SIZE][(self.x + x * BLOCK_SIZE) // BLOCK_SIZE] = self.color # 绘制方块 def draw(self, surface): for x, y in self.shape: pygame.draw.rect(surface, self.color, (self.x + x * BLOCK_SIZE, self.y + y * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE)) # 初始化游戏区域 board = [[(0, 0, 0) for _ in range(PLAY_WIDTH // BLOCK_SIZE)] for _ in range(PLAY_HEIGHT // BLOCK_SIZE)] # 初始化当前方块和下一个方块 current_block = Block(*random.choice(SHAPES)) next_block = Block(*random.choice(SHAPES)) # 初始化游戏分数 score = 0 # 游戏循环 while True: # 处理游戏事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: pygame.quit() exit() elif event.key == pygame.K_LEFT: current_block.move(-1, 0) if not current_block.check_valid(board): current_block.move(1, 0) elif event.key == pygame.K_RIGHT: current_block.move(1, 0) if not current_block.check_valid(board): current_block.move(-1, 0) elif event.key == pygame.K_DOWN: current_block.move(0, 1) if not current_block.check_valid(board): current_block.move(0, -1) elif event.key == pygame.K_UP: current_block.rotate() if not current_block.check_valid(board): current_block.rotate() # 更新方块位置 current_block.move(0, 1) if not current_block.check_valid(board): current_block.move(0, -1) current_block.place(board) current_block = next_block next_block = Block(*random.choice(SHAPES)) # 消除满行 for y in range(len(board)): if all(board[y]): board.pop(y) board.insert(0, [(0, 0, 0) for _ in range(PLAY_WIDTH // BLOCK_SIZE)]) score += 10 # 绘制游戏界面 window.fill(PLAY_BG_COLOR) for y, row in enumerate(board): for x, color in enumerate(row): pygame.draw.rect(window, color, (PLAY_X + x * BLOCK_SIZE, PLAY_Y + y * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE)) current_block.draw(window) # 绘制分数 font = pygame.font.Font(None, 36) text = font.render("Score: " + str(score), True, (255, 255, 255)) window.blit(text, (10, 10)) # 绘制下一个方块 font = pygame.font.Font(None, 24) text = font.render("Next:", True, (255, 255, 255)) window.blit(text, (PLAY_X + PLAY_WIDTH + 20, PLAY_Y)) next_block.draw(window) pygame.display.update() # 控制游戏帧率 clock.tick(FPS) ``` 该代码实现了一个简单的俄罗斯方块小游戏,包括方块的移动、旋转、落下、消除满行等基本操作,还有分数统计和下一个方块的预览功能。可以通过改变游戏窗口大小、方块大小、方块类型和颜色、游戏区域大小等参数来进行自定义修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值