Office中国论坛/Access中国论坛
标题: 请教在SQL查询分析器里可以顺利执行并获得结果,但在ACCESS项目里无法返回结果,如 [打印本页]
作者: chm11 时间: 2005-6-8 22:34
标题: 请教在SQL查询分析器里可以顺利执行并获得结果,但在ACCESS项目里无法返回结果,如
在SQL查询分析器里可以执行,
但在ACCESS项目中不能作为视图或函数(有临时表)运行,
作为存储过程可以执行但没有返回结果。请问是什么原因?
具体如下:
作者: chm11 时间: 2005-6-8 22:34
先进先出的数据冲销处理 --示例数据:
create table 销售订单(单号 varchar(10),日期 datetime,货品编码 varchar(10),数量 int)
insert 销售订单
select 'A1','2005-5-1','ABCD',100 union all
select 'A2','2005-5-3','ABCD',200 union all
select 'A3','2005-5-4','ABCD',300 union all
select 'A4','2005-5-8','ABCD',500create table 销售发货单(单号 varchar(10),日期 datetime,货品编码 varchar(10),数量 int)
insert 销售发货单
select 'B1','2005-5-05','ABCD',250 union all
select 'B2','2005-5-07','ABCD',100 union all
select 'B3','2005-5-10','ABCD',150'
GO
作者: chm11 时间: 2005-6-8 22:35
问题描述:
对于示例数据中的销售订单和销售发货单,由于客户在做销售发货时无法指定本次是要发那一张订单的东西。所以销售订单无法与销售发货单关联。客户要求以先进先出的方式统计销售订单的执行情况。对于示例数据,要求结果如下:
单号 日期 货品编码 订单数量 发货数量 待执行数量
---------- ----------------- ------------- -------------- --------------- ------------------
A1 2005-05-01 ABCD 100 100 0
A2 2005-05-03 ABCD 200 200 0
A3 2005-05-04 ABCD 300 200 100
A4 2005-05-08 ABCD 500 0 500
合计 1100 500 600
作者: chm11 时间: 2005-6-8 22:35
--查询处理的过程
select
a.单号,a.日期,a.货品编码,
订单数量=a.数量,
发货数量=isnull(case when a.s数量<b.数量 then a.数量 else b.数量-a.p数量 end,0),
待执行数量=case when a.s数量<b.数量 then 0 else a.s数量-isnull(b.数量,a.p数量) end
into # from(
select 单号,日期=convert(char(10),日期,120),货品编码,
数量=sum(数量),
p数量=isnull((select sum(数量) from 销售订单
where 货品编码=a.货品编码
and(datediff(day,日期,min(a.日期))>0
or datediff(day,日期,min(a.日期))=0 and 单号<a.单号)),0),
s数量=isnull((select sum(数量) from 销售订单
where 货品编码=a.货品编码
and(datediff(day,日期,min(a.日期))>0
or datediff(day,日期,min(a.日期))=0 and 单号<=a.单号)),0)
from 销售订单 a
group by 单号,convert(char(10),日期,120),货品编码
)a
left join(
select 货品编码,数量=sum(数量)
from 销售发货单
group by 货品编码
)b on a.货品编码=b.货品编码
and a.p数量<b.数量
order by a.单号,a.日期,a.货品编码select * from #
union all
select '','','合计',sum(订单数量),sum(发货数量),sum(待执行数量) from #
drop table #
作者: 徐阿鹏 时间: 2005-6-9 22:42
我有个先进先出的东东
作者: 徐阿鹏 时间: 2005-6-9 22:43
begin transactionCREATE TABLE #销售明细转库存临时表(
id INT PRIMARY KEY,
仓库 nvarchar(50),
销售订单号 nvarchar(50),
品名规格 nvarchar(50),
数量 real
)INSERT INTO #销售明细转库存临时表
(销售订单号, 品名规格, 数量, 仓库,id)
SELECT 销售订单号, 品名规格, 数量, @仓库 AS Expr1, id
FROM dbo.销售_订单明细表 where 销售订单号=@销售订单号
while EXISTS(SELECT * FROM #销售明细转库存临时表)
begindeclare @id int
declare @销售数 real
declare @库存数 realdeclare @品名规格 nvarchar(50)
declare @库存id int
declare @余数 real
declare @err int
declare @错误文字 nvarchar(50)set @id=(select min(id) as 最小id from #销售明细转库存临时表)
set @销售数=(select 数量 from #销售明细转库存临时表 where id=@id )
set @品名规格=(select 品名规格 from #销售明细转库存临时表 where id=@id )--------------检查是否可以出库----------------------------------------------------------------------
if not EXISTS(select 品名规格 from dbo.核算_库存成本表 WHERE (仓库 = @仓库) AND (品名规格 = @品名规格))-- and (结余数量 <> 0))
begin
select @错误='仓库里面没有 '+@品名规格+' 这个品种!无法销售!'
rollback transaction
return -100
enddeclare @总库存数 real
set @总库存数=(select sum(结余数量) from dbo.核算_库存成本表 WHERE (仓库 = @仓库) AND (品名规格 = @品名规格))--(结余数量 <> 0) AND
if @销售数>@总库存数
begin
select @错误=@品名规格+' 库存只有: '+cast(@总库存数 as nvarchar(20))+' 吨,数量不足!无法销售!'
rollback transaction
return -100
end
-------------------------------------------------------------------------------------------生成销售订单号-------------------------------------------------------------
declare @订单号 nvarchar(50)
declare @销售单位 nvarchar(50)
declare @代码 nvarchar(50)
set @销售单位=(select 销售单位 from dbo.销售_订单记录表 where 销售订单号=@销售订单号)if exists(SELECT * FROM dbo.销售_记录表 WHERE (销售日期 = CONVERT(nvarchar(10), GETDATE(), 112)) AND (销售单位 = @销售单位))
begin
set @订单号=(SELECT LEFT(MAX(销售订单号), 10) + cast(RIGHT(MAX(销售订单号), 4) + 1 as nvarchar) AS Expr1 FROM dbo.销售_记录表 WHERE (销售日期 = CONVERT(nvarchar(10), GETDATE(), 112)) AND (销售单位 = @销售单位))
endelse
begin
set @代码=(select 代码 from dbo.基础_公司设置表 where(公司设置=@销售单位))
set @订单号=@代码+'XS'+convert(nvarchar(10),getdate(),12)+'1001'
End
-------------------------------------------------------------------------------------------------------先进先出分配库存------------------------------------------------------------------------------------
-----------如果是库存是负数的,则全部滚到下批次的库存成本中---------------------------------------------------------------set @库存数=(SELECT TOP 1 结余数量 FROM dbo.核算_库存成本表 WHERE (结余数量 <> 0) AND (仓库 = @仓库) AND (品名规格 = @品名规格))
set @库存id=(SELECT TOP 1 id FROM dbo.核算_库存成本表 WHERE (结余数量 <> 0) AND (仓库 = @仓库) AND (品名规格 = @品名规格))
declare @库存订单号 nvarchar(50)
set @库存订单号=(select top 1 对应单号 from dbo.核算_库存成本表 WHERE (结余数量 <> 0) AND (仓库 = @仓库) AND (品名规格 = @品名规格)) if @销售数>@库存数
begin
UPDATE dbo.核算_库存成本表 SET 销售数量 = 销售数量+@库存数 WHERE (id = @库存id)
if (select 结余数量 from dbo.核算_库存成本表 where id=@库存id)<0
begin
rollback transaction
select @错误='程序出现错误!无法销售出库,请重试!'
return -100
end
insert into dbo.核算_销售成本先进先出表(销售单号,对应采购单号,品名,数量) values(@订单号,@库存订单号,@品名规格,@库存数)
UPDATE #销售明细转库存临时表 set 数量=数量-@库存数 WHERE (id = @id)
end
else
begin
update dbo.核算_库存成本表 SET 销售数量 = 销售数量+@销售数 WHERE (id = @库存id)
if (select 结余数量 from dbo.核算_
作者: chm11 时间: 2005-6-9 23:06
谢谢!研究中..... :)
作者: chm11 时间: 2005-6-9 23:20
增加两个声明后
declare @仓库 nvarchar(50)
declare @销售订单号 nvarchar(50)
还是返回‘在此上下文中不能使用带有返回值的 RETURN 语句。’
作者: 徐阿鹏 时间: 2005-6-10 16:48
有没有开始事务?有没有回滚事务?
作者: chm11 时间: 2005-6-10 22:50
不明白,
能不能详细解释下,
谢谢!:)
作者: 徐阿鹏 时间: 2005-6-15 17:02
先进先出的原理1、先创建一个局部临时表2、将要出货的记录导入到这个表中3、查看库存是否有足够分配的货物4、开始循环 1、提取临时表中的第一条数据和库存的第一条数据比较 2、如果临时表中的数据大于库存的第一条数据 则表明该库存第一条数据已经全部分配。更新该库存的可用库存 为0,并同时更新临时表的数据为减去库存的部分 如果临时表中的数据小于库存的第一条数据 则表明该库存第一条数据有剩余库存,更新该库存的可用库存 为余额。并删除临时表的第一条数据。3、如此循环,直到临时表没有数据为止。表的结构1、库存表 品名 数量 销售数量 可用余额(公式=数量-销售数量)更新库存时只需更新销售数量即可。
作者: chm11 时间: 2005-6-16 17:15
谢谢!
正是我目前想学的东西!
:)
作者: chm11 时间: 2005-6-16 18:01
和我工作接触情况比较类似,
不过还没有和库存联系起来,
我们有很多仓库,产品管理不严格,
同一种产品的入箱数可能不同,规格很多,太复杂,
但今后应该将库存和发货联系起来,否则实际作用要小很多。现在主要是出库及开发票,销售额、毛利、回收额的统计,
目前实际的工作是在ACCESS中完成,
SQL项目在准备中,还不是很熟,一项项的功能在SQL中实现。对于数量用real觉的有点奇怪,
我们在开增殖税发票时单价可能要精确到小数点后6位,
所以为保险起见用双精度浮点数,可能有浪费,不过比不够用要强。
用两个不确定的值运算,不确定的因素是不是会翻倍,不知道这样理解对不对。
:)
作者: chm11 时间: 2005-6-16 21:23
能不能把这个文件上传一下?
:)
[此贴子已经被作者于2005-6-16 13:49:16编辑过]
作者: 徐阿鹏 时间: 2005-6-17 02:20
对!real是有问题,在判断是否可以出库的条件时也有问题,把real改成了numeric数值,。我也是刚刚学习项目adp,正在帮公司做个进销存的软件,有分公司,分仓库,有几十个品种,做的有点晕,不过已经出来一些东西了。没有办法传给你!有msn吗?可以在上面交流一下~我的msn是xuapeng1976@hotmail.com
作者: chm11 时间: 2005-6-17 21:08
已经加了MSN了,
有空交流一下:)
[此贴子已经被作者于2005-6-17 13:11:19编辑过]
作者: 徐阿鹏 时间: 2005-6-18 03:37
没见你的msn,你的msn是多少?
作者: chm11 时间: 2005-6-20 20:19
不好意思!
刚回来!
你好:)
2005/6/20
12:16
[此贴子已经被作者于2005-7-28 13:38:29编辑过]
作者: julycy 时间: 2005-9-2 15:57
各位大侠,可否提供一个进销存月报表的存储过程,要求有期初库存,本期入库,本期出库,期末库存。我已经有一个联合查询,格式如(期间(200501,int),料号,品名,期初库存(初始),入库,出库,期初+入库-出库=期末库存),有什么好的方法生成月报表。思路又是怎么样的。
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |