问一个单据多对多的问题

mohugomohu 2012-02-12 02:22:20
我有两个业务流程,一个是收货,一个是发货,分别对应收货单和发货单。
他们是多对多的关系:
一个收货单里面有很多货物,可能要多个承运商来运,也就是一张收货单对应多张发货单。
一个是多张收货单给一个承运商来运,也就是多张收货单对应一张发货单。

我想了一下,可以在系统里面对收货单进行虚拟拆单,因为实际业务中收货单是不能拆分的,拿回来的单据里面是什么就是什么,但是这样的话处理起来会麻烦一点,因为得保证使用人员在操作系统时看到的就是一张收货单。
请问大家是怎么处理的?
...全文
216 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2012-02-14
  • 打赏
  • 举报
回复
你还没分清楚,业务单据是业务单据,业务是业务。

举个和程序无关的例子

药物学家想知道药物的作用机理和代谢机制怎么办。人家会把一些可跟踪的元素加进去,剩下滴就和药物学家没啥关系了。药物改怎么在人体内吸收,该怎么代谢就怎么代谢,药物学家们只是负责观测他们,药物到什么部位人体该产生什么样的反应就产生什么样的反应(相当与凭证)-------业务是业务,观测对象是观测对象,业务凭证是业务凭证

如果你还没想清楚,我在举个例子

同学录

我们都是被某个学校生产出来滴,我们的生成批号是“XXX学校XXX专业XX届”,我们被生产出来以后被发到了全国各地,有广州,有上海,有北京,还有滴今天德国国籍,明天澳大利亚国籍,虽然都各干各滴,哪有如何呢?我知道他们都在那里,都在干啥,因为同学录就在那里--------这也是一个例子,你们各有各归属,业务归业务,业务凭证归业务凭证,观测对象归观测对象。你们该工作工作,该结婚结婚,只要记着回来把同学录的信息更新一下就ok了
mohugomohu 2012-02-14
  • 打赏
  • 举报
回复
假设一个班的人全部都叫同一个名字,你说的办法就不行了。
你可能会根据别的特征来判断谁是谁,那还不如全部重新编号,是吧。
mohugomohu 2012-02-14
  • 打赏
  • 举报
回复
同学录的例子还不是很准确,因为每个同学都是不可分割的,但是要做的是要分割的。如果举例子的话用班级来举例会好一点。
而且你说的把同学录的信息进行一下更新,这个更新也是根据他的唯一标识来做的,也就是他的名字。实际上也是进行了拆单,并对里面的个体进行了编号,编号就是他的名字。
mohugomohu 2012-02-13
  • 打赏
  • 举报
回复
你们说的都是以库存的形式来处理的,也就是按照数量。
但是我做的是药品物流,每一批药品都有批号,要做全程追溯
mohugomohu 2012-02-13
  • 打赏
  • 举报
回复
我们收货之后要对客户进行反馈,告诉他这单子是不是全部都送到了。
如果一批货是给多个承运商来运,那么就要对多个发货单进行追踪然后对收货单进行确认,并不是仅仅确认发货单。
  • 打赏
  • 举报
回复
而就工作流来说,一个工作就是创建了一个独立的任务(或者说单据也不为过)。这就好像孔丘说的“逝者如斯”或者如赫拉克利特所说的“人不能两次踏入同一段河流”。或者就像是电影胶片,虽然有蒙太奇等等表现形式可以让时光倒流,但是电影胶片不会倒流。或者就好象你在电话键盘上拨号码8058.....,第二个8虽然跟第一个8号码相同,但是状态完全不同。或者就好象是配货的车送错了,又重新卸货又重新送了,你不能忽视这个过程记录。

因此就很容看出你纠结的问题,送货怎么就不能按照自己的方便去送货了,就算是一批货物分3批送货,就算有一批货物过了很多天发货,就算有些货物丢失了,就算有五分之一的货物一位内装错了车而又运回公司卸货并重新配货发送,那么也不应该纠结于“得保证使用人员在操作系统时看到的就是一张收货单”而设计不出你的系统吧。

只要你从现实出发,就能找回你总是丢失了的、起桥梁作用对象类型。否则那就是“为了死抠几个编程字眼而忘记了真正要求反应实际应用领域的问题”。
  • 打赏
  • 举报
回复
比如说快递,不同的收货的人把货进入到“当日应配货库存”里,然后才统一配货吧!那些小工每晚7点钟就蹲在我们大楼的地下室门口将收来的货再分拣开,没有见过哪一个收货的人中午刚刚在各个公司收货的时候就直接跑出去把货发出去了。
  • 打赏
  • 举报
回复
它们没有直接关系。它们跟库存都会发生关系。凡是“多对多关系”的认识,这都说明你的分析不够细致,你没有认识到中间起桥梁作用的对象类型。
wanghui0380 2012-02-12
  • 打赏
  • 举报
回复
其实这个问题我们可以用借钱来说

我现在急缺钱用,我四处找人借钱。假设我四处给朋友投“借钱申请单”,如果没人理我那也没后面的事情

如果说有2朋友正好有闲钱,也愿意给我,他们把钱借给我了,而我呢则要给他们开一个凭证“借条”,同时呢我在我的记账软件上写上“应付账款xxx元”,备注上写“欠xx多少钱”


=========================================
这里面“借钱申请单”,这个是管理流的东西,无论成不成,没人会把这玩意保存滴。

记账软件上那是实际发生的业务,他怎么发生的就怎么写

而借条是凭证,就是我证明这个业务以发生。他是证明。但不是业务本身,业务本身是人家把钱给我,我把钱入帐,同时开具凭证证明他把钱给了我
老毕 2012-02-12
  • 打赏
  • 举报
回复
可否换个角度思考这个问题:

1. 货单:记载一张货单及其包括的各类商品;
2. 承运单:记载某件货物由某个承运人运输。

那么对于开单的用户而言,货单仍旧是货单。而对于承运人,某一次的承运单,就是查询特定承运人、特定订单编号下的商品列表。
wanghui0380 2012-02-12
  • 打赏
  • 举报
回复
而且这里面还有两个状态问题

收货通知单 和 收货确认单 不是一个东西

发货申请单 和 发货确认单 也不是一个东西

当然从凭证的角度上说,发货申请单,收货通知单其实并不能叫凭证,他们其实是管理流上的东西。而真正的凭证其实是确认单
wanghui0380 2012-02-12
  • 打赏
  • 举报
回复
额,我认为lz没有分清楚 业务流程 和业务凭证的关系

收货单,发货单实际都是业务凭证,而非业务本身。所以我们不纠结这个,业务该怎么做就怎么做,到那一步改发出那个凭证就发出那个凭证。
nonocast 2012-02-12
  • 打赏
  • 举报
回复
同意你的意思,也就是以单笔操作作为系统内部的标准,然后在系统边界的时候再做composite处理
建模的过程不是对照客观事实1:1建模,二是要分析内在的逻辑
只是简单的看了一下,对你的单据不很了解,只是给个思路

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧