Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

求助--如何使用VBA代码计算产品耗用料件情况

悠悠  发表于:2011-08-25 21:37:49  
复制

求助--如何使用VBA代码计算产品耗用料件

 

附件EXCEL文件有四个SHEET,分别是“客户定单”、“产品生产耗用料件”、“产品销售情况”、“已销售产品耗用料件和剩余产品耗用料件”。在EXCEL中可以根据客户定单、产品生产耗用料件、产品销售情况按照生产批次的先后顺序(M0325M0326M0327M0328M0329的顺序)手工制作出已销售产品耗用料件和剩余产品耗用料件。

如果只有一个型号的产品,可以很快的通过手工方式制作“已销售产品耗用料件和剩余产品耗用料件”的清单。但是,如果有上万个型号的话,手工方式制作相当麻烦,而且容易出错。不知道是否能够使用ACCESS来自动制作“已销售产品耗用料件和剩余产品耗用料件”?

如果可以,应该如何编程呢?附件是根据EXCEL文件制作的“料件核销”数据库。请高手在数据库中给出代码。不胜感激!

点击下载此附件

 

Top
悠悠 发表于:2011-09-28 20:03:00

说的不对,这里不单单是财务的问题,还有海关在监管时需要做到一一对应。如果不能做到一一对应的话就不符合海关的监管要求。



细水长流 发表于:2011-09-29 21:29:58

这贴子,我看了好几次,实在忍不住说上两句:

楼主真正搞清楚了成本的概念及其核算方法,这问题就迎刃而解了

请自已搞清楚如下内容:

什么是生产成本?是如何核算的?

什么是产品成本?是如何核算的?

什么是产品销售成本?是如何核算的?



细水长流 发表于:2011-09-29 21:36:13

另:要与海关合同对应很简单,建一个一对多的货品编码对应表即解决问题



dbaseIIIer 发表于:2011-09-29 23:22:00

成本中心, 以财务来说有多种核算方法, 也需要有明确的数据支持的,

 

其中包括

1. 悠悠 所需要的 先入先出 法,

2. 煮江品茶 认为比较简单的 平均成本法,

3. 也有比较特殊行业的 先入后出法.

 

一般含生产的ERP的成本中心都同时支持以上三个方法的.

会根据成本中心定义的 产品, 工艺, 或物料来定义的.

 

既然 悠悠 想要先入先出, 就建个简单模块满足他心愿吧!

做excel也不是不好, 直观, 但数据完整性不够

做access也不一定很好, 数据处理能力强, 但调度弹性不够,如批次调给不同订单交货, 临时用代用物料 等

 

先入先出算法

需求表: 营销订单, 需求数量, 已完成数(可有可无,用EXCEL必需 )

供应表: 生成单,  生成数量, 单价, 已用完数(可有可无,用EXCEL必需)

多对多表: 营销订单, 生成单, 供求数量, 单价

 

set rsNeed = CurrentDB().OpenRecordSet("select 需求表.营销订单, 需求数量-Sum( 供求数量) as 需求余数 from 需求表 inner join 多对多表 on 需求表.营销订单=多对多表.营销订单 group by 需求表.营销订单, 需求表.需求数量 Having Sum( 供求数量)<需求数量 order by 营销订单")

 

set rsSupply = CurrentDB().OpenRecordSet("select 供应表.生成单, 生成数量-Sum( 供求数量) as 供应余数 from 供应表 inner join 多对多表 on 供应表.生成单=多对多表.生成单 group by 供应表.生成单, 供应表.生成数量 Having Sum( 供求数量)<生成数量 order by 生成单")

 

nQty = rsNeed!需求余数

do while not rsSupply.EOF

    if rsNeed.EOF then

        Msgbox "供应已经超过需求!"

        Exit Sub

    end if

    sQty = rsSupply!供应余数

 

    Do While sQty > 0          ' 处理完这批供应数, 离开这个循环, 就处理下一批供应数

        addQty = IIF( sQty <= nQty, sQty, nQty)

        docmd.runsql "insert into 多对多表 (营销订单,生成单,供求数量,单价) values ('" & rsNeed!营销订单 & "','" & rsSupply!生成单 & "'," & addQty & "," & rsSupply!单价 & ")"

 

        sQty = sQty - addQty

        nQty = nQty - addQty

 

        if nQty=0 Then

            rsNeed.MoveNext

            if rsNeed.EOF then Exit Sub '已完成所有需求

        end if

    loop

    rsSupply.MoveNext

loop

 

完成后, 需求表 以订单编号 关联 多对多表  若 Sum(多对多表.供求数量) = 需求表.需求数量 时,

就完全供够了的订单, 订单的单只成本就会是  Sum( 多对多表.供求数量 * 多对多表.单价)/需求表.需求数量

 

 



dbaseIIIer 发表于:2011-09-29 23:22:34

成本中心, 以财务来说有多种核算方法, 也需要有明确的数据支持的,

 

其中包括

1. 悠悠 所需要的 先入先出 法,

2. 煮江品茶 认为比较简单的 平均成本法,

3. 也有比较特殊行业的 先入后出法.

 

一般含生产的ERP的成本中心都同时支持以上三个方法的.

会根据成本中心定义的 产品, 工艺, 或物料来定义的.

 

既然 悠悠 想要先入先出, 就建个简单模块满足他心愿吧!

做excel也不是不好, 直观, 但数据完整性不够

做access也不一定很好, 数据处理能力强, 但调度弹性不够,如批次调给不同订单交货, 临时用代用物料 等

 

先入先出算法

需求表: 营销订单, 需求数量, 已完成数(可有可无,用EXCEL必需 )

供应表: 生成单,  生成数量, 单价, 已用完数(可有可无,用EXCEL必需)

多对多表: 营销订单, 生成单, 供求数量, 单价

 

set rsNeed = CurrentDB().OpenRecordSet("select 需求表.营销订单, 需求数量-Sum( 供求数量) as 需求余数 from 需求表 inner join 多对多表 on 需求表.营销订单=多对多表.营销订单 group by 需求表.营销订单, 需求表.需求数量 Having Sum( 供求数量)<需求数量 order by 营销订单")

 

set rsSupply = CurrentDB().OpenRecordSet("select 供应表.生成单, 生成数量-Sum( 供求数量) as 供应余数 from 供应表 inner join 多对多表 on 供应表.生成单=多对多表.生成单 group by 供应表.生成单, 供应表.生成数量 Having Sum( 供求数量)<生成数量 order by 生成单")

 

nQty = rsNeed!需求余数

do while not rsSupply.EOF

    if rsNeed.EOF then

        Msgbox "供应已经超过需求!"

        Exit Sub

    end if

    sQty = rsSupply!供应余数

 

    Do While sQty > 0          ' 处理完这批供应数, 离开这个循环, 就处理下一批供应数

        addQty = IIF( sQty <= nQty, sQty, nQty)

        docmd.runsql "insert into 多对多表 (营销订单,生成单,供求数量,单价) values ('" & rsNeed!营销订单 & "','" & rsSupply!生成单 & "'," & addQty & "," & rsSupply!单价 & ")"

 

        sQty = sQty - addQty

        nQty = nQty - addQty

 

        if nQty=0 Then

            rsNeed.MoveNext

            if rsNeed.EOF then Exit Sub '已完成所有需求

        end if

    loop

    rsSupply.MoveNext

loop

 

完成后, 需求表 以订单编号 关联 多对多表  若 Sum(多对多表.供求数量) = 需求表.需求数量 时,

就完全供够了的订单, 订单的单只成本就会是  Sum( 多对多表.供求数量 * 多对多表.单价)/需求表.需求数量

 

 



dbaseIIIer 发表于:2011-09-29 23:42:38

如果是真实交代海关核对数, 那就算出来提交就可以了!

都是三四年前盛行的(提交真实数据).

 

但仍有部份企业是提交假数据的,或者根本真不了的,

因为跟供应商及客户结转数据时,

1. 会有单位转换的问题, (原材料供应可能以公斤做关封, 自己厂会以平方作关封)

2. 耗用比率指标都是预先报的, 与实际数会有大的偏差,

3. 废率亦是预报的, 突然有大批量的报废, 就要调节了,

所以会以多种不同的方式处理的.

 

真实提交做关封, 也不一定能 核销报关合同的.



总记录:26篇  页次:2/2 9 7 1 2 :