Office中国论坛/Access中国论坛

标题: 浑然一体的多方式存货计价案例 [打印本页]

作者: todaynew    时间: 2009-4-23 13:15
标题: 浑然一体的多方式存货计价案例
本帖最后由 todaynew 于 2009-4-23 15:48 编辑

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

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

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

实例:[attach]37462[/attach]

图示:
[attach]37461[/attach]

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

作者: 5988143    时间: 2009-4-23 13:37
學習一下,收藏~
作者: Henry D. Sy    时间: 2009-4-23 13:51
学习
作者: chuang0321    时间: 2009-4-23 13:59
下载回家学习一下
作者: andymark    时间: 2009-4-23 14:05
学习一下
作者: todaynew    时间: 2009-4-23 14:42
本帖最后由 todaynew 于 2009-4-23 16:32 编辑

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

同时也感谢楼下的同志们阅读和收藏。
作者: asklove    时间: 2009-4-23 14:53
好东西啊,收藏
作者: WDLRCZT    时间: 2009-4-23 16:50
收藏了
作者: 82077802    时间: 2009-4-23 19:50
thanks
作者: jackysu78    时间: 2009-4-24 09:22
收藏学习,谢谢
作者: gdjdyyj    时间: 2010-8-5 08:18
学习!!!
作者: sxb2007    时间: 2010-8-5 11:18
学习!!!
作者: accesscx    时间: 2010-8-27 12:04
收藏
作者: kent_73    时间: 2010-8-27 12:06
好东西啊,收藏了
作者: zhao__feng    时间: 2010-8-29 19:09
下来学习
作者: yanjja    时间: 2010-9-1 21:57
下来学习
作者: girder    时间: 2010-11-15 12:14
好东西 学习了
作者: szyewj    时间: 2011-5-11 00:26
挑战自我,超越无限
作者: wgh3g    时间: 2011-7-7 19:36
好东西,下来学习
作者: qczvba    时间: 2011-7-22 16:23
很好的贴子,看来懂库管和财务的不多。太委屈版主了。狂顶一下。
作者: yanghua1900363    时间: 2011-7-28 11:10
谢谢分享!
作者: huxinhua    时间: 2012-1-11 09:14
收藏了
作者: lg270    时间: 2012-1-11 09:25
好好学习
作者: MXD2010    时间: 2012-1-11 13:11
{:soso_e179:}
作者: shslsun    时间: 2015-1-23 16:57
认真地学习一下。
作者: nncchh    时间: 2015-5-25 23:09
学习一下
作者: nncchh    时间: 2015-5-25 23:09
谢谢分享
作者: purplerose    时间: 2016-3-18 13:38
收藏,以备以后用的着 谢了
作者: cxtrj    时间: 2016-3-18 13:57
顶起来。
作者: cxtrj    时间: 2016-3-18 13:58
谢谢分享。

作者: pwj2009    时间: 2017-7-16 23:13
000学习一下!
作者: 灰太郎    时间: 2017-12-17 16:29
77777
作者: 灰太郎    时间: 2017-12-17 16:30
ccccccc




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