Office中国论坛/Access中国论坛

标题: 【Access小品】万法归一 --- 以单据为中心的物料管理系统示例 [打印本页]

作者: todaynew    时间: 2013-12-16 10:17
标题: 【Access小品】万法归一 --- 以单据为中心的物料管理系统示例
本帖最后由 todaynew 于 2014-3-16 11:16 编辑

  先前写过几个关于物料管理的示例,分别从几个角度说明相关的问题。近日应几个版友的要求,对这几个示例进行了进一步整合,写了这个示例。在这个示例中,进一步突出了单据集中管理这个概念,并体现到数据表设计、窗体设计中。

  对于一个小型的生产企业来说,物料的管理过程中,大体需要使用到销售订单、生产指令(或者叫排产及采购计划)、采购订单、采购入库单、委外加工入库单、产品及半成品入库单、采购发票、销售出库单、销售发票、生产领用出库单、委外加工出库单、调整单这样十多种不同的单据。你当然可以针对这些不同的单据设计数据表和它们的明细表,也可以在此基础上设计出窗体来进行数据的编辑和查询。问题在于这样做的效率很低,维护起来也甚为麻烦。那么能否将这些单据进行整合,提炼出他们的共性,然后进行一致性的处理呢?答案是肯定的。

  在本示例中,采用了单据表和单据明细表这样两个数据表,对以上十多个单据进行了统一。这样做的好处是数据管理效率极大的提高,整个系统使用到的表、查询、窗体、报表等大大减少。但凡一事有利必有弊,在高度统一的基础上,要对不同的单据实现有差异的处理,就需要相对复杂的程序结构,也就是说代码的复杂程度就会有所提高。

  写这个示例,重点不是想告诉同志们应该怎么来组织数据表、怎么来写代码以实现需要的功能,这些东西不是最重要的。重要的是处理问题的思路,也就是怎么去观察问题、分析问题、找到比较好的解决问题的途径。而这个问题,往往对于初学者是极为容易忽略的。直接拿别人的东西来用,或者直接模仿他人的代码,这是很初级的阶段,当然这个阶段必不可少。如果能看到对问题的处理思路,并由此得到启发,能够在不同的领域进行类似的运用,这应该是比较高级的学习方法。

  这个示例并没有写完整,有些部分写了一小段,其他的部分空了下来。所以不要指望直接使用这个系统,这不是一个可以运用的系统,只是提供学习的一个参考资料。所以不要问我为什么某些地方不能操作。

  进行测试时,按照销售订单--生产指令--采购订单--入库单--采购发票--出库单--销售发票这样的顺序进行。每种单据都需要进行审核,审核为不定流程的审核,只有提交到该单据的最终有权审核人,经该审核人审批后,审核流程结束。在综合查询中,有一个单据链查询,这是一个比较有趣的处理,其背后包含了一个单据关联关系的设计思想。程序中还有比较丰富的关于会计处理的知识,你可以在测试中自己观察。最后请注意单据的编制权限通过TreeView的控制处理方法,这是一个具有想象力的处理方法。

  寻求万法归一,是一种归纳,是一种提炼。最简单的是最深刻的,请记住这个观点。


[attach]53565[/attach] 2014/3/15更新



[attach]52871[/attach]


作者: admin    时间: 2013-12-16 10:27
又一力作!!{:soso_e179:}{:soso_e179:}
作者: XB2009    时间: 2013-12-16 10:50
{:soso_e179:}
作者: yanwei82123300    时间: 2013-12-16 11:45
又一力作!!

作者: aslxt    时间: 2013-12-16 12:18
这个要顶!
作者: huanghyd    时间: 2013-12-17 15:44
学习学习
作者: ycxchen    时间: 2013-12-19 09:48
某个时候,方法比什么都重要。学习!
作者: tzh1600    时间: 2013-12-19 09:53
思路很重要,赞
作者: ycxchen    时间: 2013-12-19 10:11
运行出错

作者: sql999    时间: 2013-12-19 10:16
有高度
作者: ycxchen    时间: 2013-12-19 10:37
本帖最后由 ycxchen 于 2013-12-19 10:39 编辑

调试时提示如下函数出错:找不到工程或库
Function GetBillName(ByVal n As Node) As String
    '返回选中节点的单据名称
    Dim str As String
    str = ""
    If n.Key Like "c*" Then
        str = Left(n.Text, Len(n.Text) - 4)
    Else
        If n.Key Like "e*" Then
            str = Left(n.Text, Len(n.Text) - 10)
        End If
    End If
    GetBillName = str
End Function
作者: nncchh    时间: 2015-7-20 12:30
学习学习
作者: nncchh    时间: 2015-7-20 12:30
学习学习
作者: 风中漫步    时间: 2015-10-25 09:52
正学习bom,看看图.
谢谢分享
作者: nncchh    时间: 2016-1-31 13:28
谢谢分享
作者: changxing    时间: 2016-5-24 20:57
谢谢分享!!支持原创!!
作者: alingyct    时间: 2016-5-25 08:37
学习了,多谢
作者: panjie9327    时间: 2016-6-24 12:57
谢谢分享
作者: wsl020304    时间: 2016-6-26 00:09
这个要顶一下,感谢楼主分享
作者: 李力军2    时间: 2016-7-4 08:37
好贴,顶
作者: p51219    时间: 2016-7-14 18:51
好好好好好
作者: owen2016    时间: 2016-8-20 16:32
已经阅读,谢谢
作者: 648616904    时间: 2016-9-1 09:57
谢谢分享
作者: 灰太郎    时间: 2018-1-1 18:28
qqqqqqqqqqqqqqqqq
作者: 灰太郎    时间: 2018-1-1 18:28
33333
作者: boon    时间: 2019-5-18 07:30
顶一个!!
作者: weykz    时间: 2019-11-1 15:44
好难的样子。。。。
作者: whblywch    时间: 2021-9-3 20:21
谢谢分享




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3