设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

1234下一页
返回列表 发新帖
查看: 12397|回复: 32
打印 上一主题 下一主题

[模块/函数] 浑然一体的多方式存货计价案例

[复制链接]
跳转到指定楼层
1#
发表于 2009-4-23 13:15:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 todaynew 于 2009-4-23 15:48 编辑

  存货计价方式,大体可以分为两大类。一类是计划成本计价法,一类是实际成本计价法。存货计价方式的不同对于本期发出存货的成本和存货期末结余的资产价值有很大影响。因此无论是会计准则还是企业所得税法,均对存货的计价方式做出了明确规定。本文想讨论的问题是,能否根据企业不同类别的存货采用不同类型的计价方式,混合多种计价方式如何在编程中实现。在经过两天时间的研究后,对该问题得到了肯定的答案。

  在本例中,采用了五种不同的计价方式,其中有个别计价法、先进先出法、后进先出法、移动平均法、加权平均法。这五种计价方式均归属于实际成本计价法,是企业常用的存货计价类型。在本例的操作中,个别计价法采用的是发料单价或发料金额双击方式进行运算。其余四种计价方式,在选项卡中对应选择后,点击计算发料即可。

  需要提示说明的是,存货发料计价通常是在月末进行,也就是说月度中间发料时只计数量不计金额。月末再根据不同的计价方式,计算本月发料金额以及期末结存金额。也正是因为这样一种会计核算流程,才使得后进先出法和加权平均法成为可能。

实例:

图示:


VB代码:

Private Sub 计算_Click()
If IsNull(Me.物资ID.Value) Then Exit Sub
Select Case Me.选项
    Case 1    '先进先出法
        先后法
    Case 2    '后进先出法
        先后法
    Case 3    '移动平均法
        移动法
    Case 4    '加权平均法
        加权法
End Select
Me.收发存子窗体.Form.Requery
End Sub


Private Sub 先后法()
Dim rs1 As New ADODB.Recordset
Dim sql1 As String
Dim rs2 As New ADODB.Recordset
Dim sql2 As String
Dim 收料数量 As Single
Dim 发料数量 As Single
Dim 累计金额 As Single
Dim 收发余额 As Single
sql1 = "select * from 发料查询 where format(日期,'yymm')='" & Me.月度.Value & "'and 物资ID=" & Me.物资ID.Value
rs1.Open sql1, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
If Me.选项.Value <> 2 Then
    sql2 = "select * from 库存及收料查询 where format(日期,'yymm')='" & Me.月度.Value & "'and 物资ID=" & Me.物资ID.Value
Else
    sql2 = "select * from 库存及收料查询 where format(日期,'yymm')='" & Me.月度.Value & "'and 物资ID=" & Me.物资ID.Value & " ORDER BY 编号 DESC"
End If
rs2.Open sql2, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
收发余额 = 0
Do While Not (rs1.EOF)
    If 收发余额 > 0 Then
        收料数量 = 收发余额
        收发余额 = 0
    Else
        收料数量 = rs2("数量")
    End If
    If rs1("数量") < 收料数量 Then
        rs1("单价") = rs2("单价")
        rs1("金额") = rs1("数量") * rs1("单价")
        rs1.Update
        收发余额 = 收料数量 - rs1("数量")
    Else
        累计金额 = 0
        发料数量 = rs1("数量")
        Do While Not (rs2.EOF)
            累计金额 = 累计金额 + 收料数量 * rs2("单价")
            发料数量 = 发料数量 - 收料数量
            rs2.MoveNext
            收料数量 = rs2("数量")
            If 发料数量 < 收料数量 Then
                累计金额 = 累计金额 + 发料数量 * rs2("单价")
                rs1("金额") = 累计金额
                rs1("单价") = Round(rs1("金额") / rs1("数量"), 2)
                rs1.Update
                收发余额 = rs2("数量") - 发料数量
                Exit Do
            End If
        Loop
    End If
    rs1.MoveNext
Loop
Me.收发子窗体.Form.Requery
rs1.Close
rs2.Close
End Sub

Private Sub 移动法()
Dim rs1 As New ADODB.Recordset
Dim sql1 As String
Dim rs2 As New ADODB.Recordset
Dim sql2 As String
Dim 累计数量 As Single
Dim 累计金额 As Single
Dim 库存数量 As Single
Dim 库存金额 As Single
Dim i As Long
sql1 = "select * from 发料查询 where format(日期,'yymm')='" & Me.月度.Value & "'and 物资ID=" & Me.物资ID.Value
rs1.Open sql1, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
sql2 = "select * from 库存及收料查询 where format(日期,'yymm')='" & Me.月度.Value & "'and 物资ID=" & Me.物资ID.Value
rs2.Open sql2, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
库存数量 = 0
库存金额 = 0
For i = 1 To rs1.RecordCount
    累计数量 = 库存数量
    累计金额 = 库存金额
    Do While Not (rs2.EOF)
        If rs2("编号").Value < rs1("编号").Value Then
            累计数量 = 累计数量 + rs2("数量")
            累计金额 = 累计金额 + rs2("金额")
            rs2.MoveNext
        Else
            rs2.MovePrevious
            Exit Do
        End If
    Loop
        rs1("单价") = Round(累计金额 / 累计数量, 2)
        rs1("金额") = rs1("数量") * rs1("单价")
        rs1.Update
        库存数量 = 累计数量 - rs1("数量")
        库存金额 = 累计金额 - rs1("金额")
    If rs2.EOF = False Then rs2.MoveNext
    rs1.MoveNext
Next
Me.收发子窗体.Form.Requery
rs1.Close
rs2.Close
End Sub

Private Sub 加权法()
Dim rs1 As New ADODB.Recordset
Dim sql1 As String
Dim rs2 As New ADODB.Recordset
Dim sql2 As String
Dim 累计数量 As Single
Dim 累计金额 As Single
Dim 单价 As Single
sql1 = "select * from 发料查询 where format(日期,'yymm')='" & Me.月度.Value & "'and 物资ID=" & Me.物资ID.Value
rs1.Open sql1, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
sql2 = "select * from 库存及收料查询 where format(日期,'yymm')='" & Me.月度.Value & "'and 物资ID=" & Me.物资ID.Value
rs2.Open sql2, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
累计数量 = 0
累计金额 = 0
For i = 1 To rs2.RecordCount
    累计数量 = 累计数量 + rs2("数量")
    累计金额 = 累计金额 + rs2("金额")
    rs2.MoveNext
Next
单价 = Round(累计金额 / 累计数量, 2)
For i = 1 To rs1.RecordCount
    rs1("单价") = 单价
    rs1("金额") = rs1("数量") * rs1("单价")
    rs1.Update
    rs1.MoveNext
Next
Me.收发子窗体.Form.Requery
rs1.Close
rs2.Close
End Sub

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1经验 +8 收起 理由
5988143 + 8 我很赞同

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享分享 分享淘帖 订阅订阅
2#
发表于 2009-4-23 13:37:14 | 只看该作者
學習一下,收藏~
3#
发表于 2009-4-23 13:51:08 | 只看该作者
学习
4#
发表于 2009-4-23 13:59:33 | 只看该作者
下载回家学习一下
5#
发表于 2009-4-23 14:05:31 | 只看该作者
学习一下
6#
 楼主| 发表于 2009-4-23 14:42:34 | 只看该作者
本帖最后由 todaynew 于 2009-4-23 16:32 编辑

谢谢楼上的同志们的鼓励。

同时也感谢楼下的同志们阅读和收藏。
7#
发表于 2009-4-23 14:53:44 | 只看该作者
好东西啊,收藏
8#
发表于 2009-4-23 16:50:04 | 只看该作者
收藏了
9#
发表于 2009-4-23 19:50:29 | 只看该作者
thanks
10#
发表于 2009-4-24 09:22:03 | 只看该作者
收藏学习,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-10 06:05 , Processed in 0.100943 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表