但是如果这个销售订单刚下,其他部门根据还没有处理。或者说其他部门在处理之前的审核过程中发现了问题,告知了业务员。在这种情况下是否允许用户打开订单来更改呢?一般在这种情况下是允许的。因为没有关联纪录,此时更改源数据不会对其他部门产生连锁反应。而如果采用其他单据来更改这个订单信息的话(如通过订单变更单来更改),虽然从技术上说是可行的,但是一般没有这个必要。毕竟在这种情况下,还没有给企业带来实质性的损失。而如果通过订单变更单来更改的话,反而会造成比较多的垃圾数据。所以在这种情况下,才真正的需要重新打开订单的作业。三、在技术上如何将这种限制落实到实处业务背景了解了,具体的限制也心中有数了,接下去的工作就是需要设计,如何将这种限制落实到实处。虽然说条条道路通罗马,但是我们在具体实现的过程中,还是需要兼顾成本、效益、安全等原则。以这个“重新打开订单”的业务来说,从技术上看可以按照如下这个思路进行限制。第一步:可以在订单级别,设置几个字段,用来关联后续的单据。如可以在销售订单单头的数据表中,设置一个“生产计划”的字段。如果这个字段有相关的内容,则表示这个订单已经生成了生产计划。在执行“重新打开订单”这个业务的时候,就需要先去判断这个字段的值。如果非空的话,那么就不允许重新打开订单。相反,如果为空的话,表示没有后续关联的单据,则允许用户打开订单。如果销售订单关联采购订单或者关联出货单,都可以进行类似的设置。第二步:其他相关联单据生成的时候,注意需要会写相关的字段。如现在用户根据销售订单来生成采购计划。当采购计划正常生成之后,需要将生成采购计划的序列号回写道对应的销售订单字段中。只有如此,销售订单中这些控制性字段的信息才能够得到及时更新。“重新打开订单”作业才能够根据这些字段来进行作业的控制。第三步:删除作业时的处理。在实际工作中,还可能会遇到这种情况。如某个销售订单中有100个产品。而由于客户的原因,需要更改其中50个产品的数量。此时对于采购计划与采购订单的影响就会比较大。遇到这种情况时,用户可能宁愿删掉采购计划,让销售员重新打开销售订单更改数量。然后用户再重新生成采购计划。遇到这种情况该如何处理呢?这也就是说,当删除采购计划的时候,也需要同时清空对应销售订单中“采购计划”这个字段中的值。当这个值变为空之后,“重新打开销售订单作业”就可以重新打开销售订单,让用户进行修改。以上这个步骤,从开发语言上来看,主要就是用来IF判断语句与Update更新语句。在应用程序开发上,没有多大的困难。而主要的问题就是,作为系统分析师,要将这些内容一一考虑到。其实系统分析师就好像是一幢大楼的设计人员。而程序开发人员就好像是造房子的人,他们只需要根据设计人员的图纸来建造即可。系统分析师需要对最后的运行结果负责,开发人员只需要保证在代码的编写上不要出现错误即可。为此系统分析师在这里起到的作用是非常之大的。其实这个需求还有其他的处理方式。如在执行“重新打开订单”作业的时候,可以去采购计划那边查询,看看有没有目标定单的相关信息。从技术上讲,这是可行的。但是笔者不建议这么设计。在文章一开头,笔者谈到过系统分析师在分析业务逻辑的时候,需要成本、效益、安全等兼顾。根据上面这种方法,虽然最终可以达到用户所需要的目标。但是不符合安全、效益的原则。如如果采用第一种方法,即在订单单头表中放入控制字段的话,那么就可以从销售订单中直接关联到采购计划,也就是说可以直接从销售订单关联查询到采购计划。而如果采用第二种方式的话,就只能够实现控制,而不能够实现关联查询的功能。此时在选择方法的时候,就需要考虑效益原则,而不能够光考虑目标。简单的说,就是选择具体的实现方式时,如果能够给用户带来额外的附带价值,那是最好的。