注册 登录
编程论坛 SQL Server论坛

如何在SQL中利用UPdata在产品销售表中更新产品成本价格,

Jym5278 发布于 2016-11-06 12:46, 4526 次点击
有两个表,一个是产品销售表,其中有产品名称,规格,价格,成本价格等等,另一个是产品成本价格表,其中有产品名称,规格,成本价格,成本价格往往是随着时间变化的,经常要通过产品成本价格表来更新产品销售表中的部分价格,想了许久,没有实现,请帮忙。
12 回复
#2
梦幻倩影2016-11-07 09:43
首先产品的成本价格涉及到的计算方法有很多,这里先不说简单的计划成本,因为计划成本是固定的,只有期末时成本差异需要处理,主要说下实际成本的计算:
不管是生产还是采购,每批次的成本都有可能不一样,具体要如何计算库存产品的成本呢?采用不同的方法系统处理的过程和结果也有所不同,以下供参考:

成本核算方法1:移动加权平均法
概念:或称移动平均法指本次收货的成本加原有库存的成本,除以本次收货数量加原有存货数量,据以计算加权单价,并对发出存货进行计价的一种方法。(该核算方法自2007年执行新会计准则时终止使用,具体说明请查看>>>)
特点:其优点在于能使管理当局及时了解存货的结存情况,而且计算的平均单位成本以及发出和结存的存货成本比较客观。缺点是每次收货都要计算一次平均单价,计算工作量较大,对收发货较频繁的企业不适用。
适用范围:是实际工作当中运用最广泛的成本核算方法。
存货成本核算方法(会计知识的补充说明)
成本核算方法2:个别计价法
概念:又称个别认定法、具体辨认法、分批实际法。采用这一方法是假设存货的成本流转与实物流转相一致,按照各种存货逐一辨认各批发出存货和期末存货所属的购进批别或生产批别,分别按其购入或生产时所确定的单位成本作为计算各批发出存货和期末存货成本的方法。
特点:采用这种方法,计算发出存货的成本和期末存货的成本比较合理、准确,但这种方法的前提是需要对发出和结存存货的批次进行具体认定,以辨别其所属的收入批次,所以实务操作的工作量繁重,困难较大。
适用范围:适用于容易识别、存货品种数量不多、单位成本较高的存货计价,如房产、船舶、飞机、重型设备、珠宝、名画等贵重物品。
成本核算方法3:全月一次加权平均法
概念:即加权平均法,指以本月全部收货数量加月初存货数量作为权数,去除本月全部收货成本加上月初存货成本,计算出存货的加权平均单位成本,从而确定存货的发出和存货成本。
特点: 采用此方法只在月末一次计算加权平均单价,比较简单,而且在市场价格上涨或下跌时所计算出来的单位成本平均化,对存货成本的分摊较为折中。但是,这种方法平时无法从账上提供发出和结存存货的单价及金额,不利于加强对存货的管理。
适用范围:适合各期存货成本变动不大的情况。
存货成本核算方法(会计知识的补充说明)
成本核算方法4:先进先出法
概念:先进先出是核算发出存货成本的方法之一,是假定先进的货品先销售或先耗用,并根据这种假定的流转次序对发出存货和期末存货进行计价;具体做法是:接收存货时,逐笔登记每一批存货的数量、单价和金额;发出存货时,按照先进先出的原则计价,逐笔登记存货的发出和结存的数量、金额。
特点: 其优点在于存货实际成本最接近市场价格,较为客观。
在收发业务频繁及单价变动较大的情况下,计价工作量较大,且产品成本偏低,不符合谨慎原则。
适用范围:适用于收发业务不是非常频繁的存货计价。
#3
梦幻倩影2016-11-07 09:47
弄清楚上面的计算方法后,你就知道籽如何计算库存成本了,当然得有一个表存放现有库存数量及现有库存成本,当库存增加或,或者库存减少,时及时更新现有库存成本,当然如果涉及采购或销售,你还得同时更新应付款项,或是应收款项,及发出产品对应的成本结转
#4
Jym52782016-11-14 11:58
谢谢你了,可能我没有说清楚,我请教的是一个编程问题。我们知道企业的采购成本不停的变化,销售价格也会经常变化,不同的时间有不同的价格,我是希望通过UPdata语句,更新数据表中的成本价格,方便销售结算。
比如下面的价格表,产品名称(垫板),规格(15-6),价格16.8元,我是希望把这条信息中的价格,去更新销售表中的成本价格。
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2016-11-15 08:42编辑过]

#5
mywisdom882016-11-14 13:36
以下是引用Jym5278在2016-11-14 11:58:19的发言:

谢谢你了,可能我没有说清楚,我请教的是一个编程问题。我们知道企业的采购成本不停的变化,销售价格也会经常变化,不同的时间有不同的价格,我是希望

#6
厨师王德榜2016-11-15 12:38
某产品五月价格90,六月变成了95,那么要更新销售表中的订单,原来成交的订单,其价格也要更新?
我感觉这样有问题,一般情况下,你的销售订单,除了[订单号],[单价]、[成交价]之外,一定有[订单日期]这一列吧,
那么,你的价格表变化了,难度不关联日期条件吗?不管他何时成交的,一律更新成当前的价格?这个不合逻辑吧。
#7
mywisdom882016-11-15 13:46
你涉及到多个问题
1、库存成本计算问题,如2楼说的,你采用那个?
2、库存表结构问题,要有个字段,记录当前成本价格
3、当库存成本价格发生变化时,更新“未完成”的销售单的成本价格,销售单上要有个字段,记录成本价格。好处是,只要我销售单完成了,这个成本价格就固定下来了,不受其他影响。

按你4楼的描述,用当前库存的成本价格去更新销售成本价格,是个很简单的问题。如下
--通过编号关联,利用表A的成本更新表B的成本。
update 表b set 成本=a.成本 from 表A a where 表B.编号=a.编号
#8
Jym52782016-11-17 11:35
use 库管总帐
update 发货明细表 set 结算价格=经营结算价格.结算价格
from 发货明细表 where 发货明细表.产品名称=经营结算价格.产品名称
and 发货明细表.规格=经营结算价格.规格

结算价格=经营结算价格.结算价格 系统提示:无法绑定由多个部分组成的标识符:结算价格=经营结算价格.结算价格

我原来也认为是个小问题。
#9
mywisdom882016-11-17 16:45
use 库管总帐
update fh set fh.结算价格=jy.结算价格
from 发货明细表 as fh,经营结算价格 as jy where fh.产品名称=jy.产品名称 and fh.规格=jy.规格
这样看看
#10
mywisdom882016-11-17 16:52
create table #发货明细表(产品名称 varchar(10),规格 varchar(10),结算价格 numeric(10,2))
insert into #发货明细表
select '产品A','20支',0 union all
select '产品B','30支',0 union all
select '产品C','40支',0

create table #经营结算价格(产品名称 varchar(10),规格 varchar(10),结算价格 numeric(10,2))
insert into #经营结算价格
select '产品A','20支',1000 union all
select '产品B','30支',2000 union all
select '产品C','40支',3000

select * from #经营结算价格

select * from #发货明细表

update fh set fh.结算价格=jy.结算价格
from #发货明细表 as fh,#经营结算价格 as jy where fh.产品名称=jy.产品名称 and fh.规格=jy.规格

select * from #发货明细表
只有本站会员才能查看附件,请 登录
#11
mywisdom882016-11-17 17:01
以下是引用Jym5278在2016-11-17 11:35:14的发言:
use 库管总帐
update 发货明细表 set 结算价格=经营结算价格.结算价格
from 发货明细表 where 发货明细表.产品名称=经营结算价格.产品名称
and 发货明细表.规格=经营结算价格.规格
结算价格=经营结算价格.结算价格 系统提示:无法绑定由多个部分组成的标识符:结算价格=经营结算价格.结算价格
我原来也认为是个小问题。

你的格式有问题:
1、如果更新本表 from 表名,可以不要,如
 update 表a set 字段1='值' where ...
2、如果更新的数据来自其他表,字段没有相同的, from 其他表名,如
update 表a set 字段1=其他表名.字段11 from 其他表名 where ...
3、如果更新的数据来自其他表,字段存在相同的, from 表a,其他表名,如
update 表a set 表a.字段1=其他表名.字段1 from 表a,其他表名 where ...
4、在3的基础上,用别名
update a set a.字段1=q.字段1 from 表a as a,其他表名 as q where a.字段2=q.字段2 and ...



#12
Jym52782016-11-17 18:35
很好,很好,可以了,谢谢你,
与我的编程也差不多吧,可怎么不行呢
#13
mywisdom882016-11-17 19:41
以下是引用Jym5278在2016-11-17 18:35:24的发言:

很好,很好,可以了,谢谢你,
与我的编程也差不多吧,可怎么不行呢
你的:
update 发货明细表 set 结算价格=经营结算价格.结算价格
from 发货明细表 where 发货明细表.产品名称=经营结算价格.产品名称
and 发货明细表.规格=经营结算价格.规格
改为:
update 发货明细表 set 结算价格=经营结算价格.结算价格
from 发货明细表,经营结算价格 where 发货明细表.产品名称=经营结算价格.产品名称
and 发货明细表.规格=经营结算价格.规格

1