找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

初学者课程:T3自学|T6自学|U8自学软件下载课件下载工具下载资料:通资料|U8资料|NC|培训|年结积分规则 | 使用常见问题Q&A
知识库:U8 | | NC | U9 | OA | 政务U8|U9|NCC|NC65|NC65客开|NCC客开新手必读 | 任务 | 快速增金币用友QQ群[微信群]
查看: 12223|回复: 16

货位内的存量如何控制不出现负存量,以及货位存量数据库表名

[复制链接]
发表于 2012-7-2 10:16:32 | 显示全部楼层 |阅读模式
悬赏30金币未解决
U8的 货位管理开启后,货位存货的表中
发现存货的数量在货位上无法控制负数。
对应的仓库存量是可以控制负数不出现,但是货位上却不能
有什么方法可以解决?
出现的问题如下:
A产品,在001货位存量600 002货位存量-400 总存量200(这个和仓库的存量一致。)
我要控制不出现-400,或者当要出现这个状态的时候应该要报警。

另外,我想知道货位存量数据库的表名是什么。

因为我想知道
数据库表中,哪一个表 是显示 A产品在001货位有多少货,002货位有多少货。B产品在003货位有多少货,C产品有多少货。

因为我想做一个触发器,把某个产品的货位上数量最多的 货位 提取出来。

发表于 2012-7-2 12:36:17 | 显示全部楼层
首先在库存管理选项中不能允许货位零出库,其次不允许超预计可用量出库。货位指定表:InvPosition

点评

此外,货位指定表我知道,但是我想知道货位存量的表在哪里。系统里面在库存管理模块下,报表中货位账,下面有个货位现存量,但是无法找到这个数据库的表在哪里,和现存量表一样,我都不知道,这在哪里,视图里面也没  发表于 2012-7-3 09:08
不允许0货位出库我知道在库存设置里面有,但是无法控制,货位成为负数。 因为只要销售出库单强制写货位就可以变成负数。 不允许超可用量这个已经设置。 但是就和我说的,当A货位有100,B货位有-80的时候?可用量为   发表于 2012-7-3 09:06
回复

使用道具 举报

 楼主| 发表于 2012-7-4 15:54:02 | 显示全部楼层
真没有人知道 这个U8里面的 货位现存量 这张数据库 表 是怎么出来的?
回复

使用道具 举报

发表于 2012-7-5 10:21:31 | 显示全部楼层
刚刚帮你做了个跟踪,货位现存量不是单独放在哪一个表里的,而是查询的时候通过临时表来实现的,有别于库存现存量。至于你所说的货位报警,软件中没有发现。
提供个思路给你,你做一个触发器,在触发器中做判断通过IF语句实现,触发器绑定表为出入库单rdrecords  当填写出库单时,触发事件,具体实现办法为判断最大单据号(MAX)的审核是否为空,为空时不执行,不为空时执行。
在执行时,在分两种情况即是否货位0出库。是0出库执行报错语句,不是0出库不执行报错语句。
至于如何判断就否0出库,可以通过InvPosition表来实现,即sum(入库数)-sum(出库数)是否大于0


代码就不帮你写了!!!!!!!!

点评

把跟踪的关键语句发给你吧,我改了下,不然你不能执行。 SELECT max(cs.autoid) as autoid,CS.cWhCode,max(W.cWhName) as cWhName,CS.cPosCode,max(Position.cPosName) as cPosName,CS.cInvCode,CS.cBatch, isnul  详情 回复 发表于 2012-7-5 14:32
那能不能告诉我,货位的现存量的临时表 是那些表关联起来的。我这样就直接对这张表进行 触发控制 就可以了。  发表于 2012-7-5 13:52
回复

使用道具 举报

发表于 2012-7-5 14:32:09 | 显示全部楼层

把跟踪的关键语句发给你吧,我改了下,不然你不能执行。
SELECT max(cs.autoid) as autoid,CS.cWhCode,max(W.cWhName) as cWhName,CS.cPosCode,max(Position.cPosName) as cPosName,CS.cInvCode,CS.cBatch,
isnull(cs.cvmivencode,N'') as cvmivencode,max(v1.cvenabbname) as cvmivenname,max(CS.dMadeDate) AS dMDate, max(CS.iMassDate) AS iMassDate,
max(CS.cMassUnit) as cMassUnit, max(isnull(E.enumname,N'')) AS cMassUnitName, max(CS.dVDate) as dVDate,
sum(CS.iQuantity) as iQuantity, sum(CS.iNum) iNum,max(I.cInvAddCode) as cInvAddCode, max(I.cInvName) as cInvName,
CS.cFree1, CS.cFree2, CS.cFree3, CS.cFree4, CS.cFree5, CS.cFree6,CS.cFree7, CS.cFree8, CS.cFree9, CS.cFree10,
max(v2.enumname) as 有效期推算方式,max(CS.cExpirationdate) as 有效期至,
max(I.cInvStd) as cInvStd,max(I.cInvCCode) AS cInvCCode, max(InventoryClass.cInvCName) AS cInvCName
----------INTO tempdb..TempRepHHCL_UfidaCW06_0
FROM InvPositionSum CS with (nolock)
left JOIN Warehouse W with (nolock) ON W.cWhCode = CS.cWhCode
left JOIN Inventory I ON CS.cinvcode = I.cinvcode
LEFT JOIN Position ON CS.cPosCode=Position.cPosCode  LEFT JOIN InventoryClass ON InventoryClass.cInvCCode=I.cInvCCode
LEFT OUTER JOIN v_aa_enum E with (nolock) ON E.EnumCode=convert(nvarchar,CS.cMassUnit) and E.enumType=N'ST.MassUnit'
left join vendor v1 on cs.cvmivencode = v1.cvencode
left join v_aa_enum v2 on v2.enumcode=ISNULL(CS.iExpiratDateCalcu,0) and v2.enumtype=N'SCM.ExpiratDateCalcu'
WHERE (1=1)
AND  1=1  group by CS.cWhCode,CS.cPosCode,CS.cInvCode,CS.cBatch,isnull(cs.cvmivencode,N''),
CS.cFree1, CS.cFree2, CS.cFree3, CS.cFree4, CS.cFree5, CS.cFree6,CS.cFree7, CS.cFree8, CS.cFree9, CS.cFree10
go

点评

执行好后,列名为iQuantity的,是货位现存量  详情 回复 发表于 2012-7-5 14:33
回复

使用道具 举报

发表于 2012-7-5 14:33:30 | 显示全部楼层
kzhongw 发表于 2012-7-5 14:32
把跟踪的关键语句发给你吧,我改了下,不然你不能执行。
SELECT max(cs.autoid) as autoid,CS.cWhCode,m ...

执行好后,列名为iQuantity的,是货位现存量
回复

使用道具 举报

发表于 2012-7-5 14:47:08 | 显示全部楼层
在上面的回复中只注释了下面的这个,
----------INTO tempdb..TempRepHHCL_UfidaCW06_0
回复

使用道具 举报

 楼主| 发表于 2012-7-5 15:47:33 | 显示全部楼层
我按照这个查询出来的不是 货位现存量。
是收发的总数量

而且看了这么多并表,发现其实主要还是对  InvPosition 表进行分类统计。

我做了 收发子表,对一个产品,一个货位的 入库和出库的 累计加减,发现最终的货位数量还是和系统查询出来的不一样。

点评

期初的有没有包含进去?  详情 回复 发表于 2012-7-5 16:29
回复

使用道具 举报

发表于 2012-7-5 16:29:40 | 显示全部楼层
xmzlwyq 发表于 2012-7-5 15:47
我按照这个查询出来的不是 货位现存量。
是收发的总数量

期初的有没有包含进去?
回复

使用道具 举报

 楼主| 发表于 2012-7-5 16:54:44 | 显示全部楼层
包含了! 而且我是统计了所有的 收发的 字段 0 和 1
我是分开后计算 然后重新统计的

统计了两次 主要是在线人太多,跟踪的时候 一会就找不到哪个是哪个了

半夜没空去看这个。
回复

使用道具 举报

 楼主| 发表于 2012-7-6 09:17:47 | 显示全部楼层
原来 收发的 0 和 1 标志 也不一定是 入库 和出库
他们中也有数字是 蓝字 和 红字之分
所以无法统计出来 正确的 数量
回复

使用道具 举报

 楼主| 发表于 2012-7-6 09:30:42 | 显示全部楼层
本帖最后由 xmzlwyq 于 2012-7-6 10:06 编辑

现在我统计出来了,正确的货位现存量。
我想问问 如何写这句SQL。
select cposname as 货位名称,iquantity as 存货数量 ,brdflag as 收发标志, cinvcode as 存货名称
from  InvPositionD
group by cinvcode,cposname,brdflag

关键是如何把iquantity  按照什么样的条件,区分之后 相减

我用EXECL 可以做,但是SQL 不会


有知道 怎么相减两张表 的 数量
select distinct  cwhcode as 仓库, cinvcode  as 存货名称,cposname as 货位名称,brdflag as 收发标志,sum(iquantity) as 存货数量
from  invpositiond
where  cwhcode='SH01' and brdflag='1' -- 入库
group by cinvcode,cposname,brdflag,cwhcode
order by cinvcode

select distinct  cwhcode as 仓库, cinvcode  as 存货名称,cposname as 货位名称,brdflag as 收发标志,sum(iquantity) as 存货数量
from  invpositiond
where  cwhcode='SH01' and brdflag='0' --出库
group by cinvcode,cposname,brdflag,cwhcode


现在 我就想知道 怎么查询出 这两个表中 存货名称一致,货位名称一致 ,并且数量不等于0的 所有存货的 数量

回复

使用道具 举报

 楼主| 发表于 2012-7-6 10:45:50 | 显示全部楼层
终于试验出来了
原来就不要这么复杂

select cwhcode as 仓库, cinvcode  as 存货名称,cposname as 货位名称,sum(case when brdflag='1' then + iquantity else -iquantity end) as 存货数量
from  invpositiond
group by cinvcode,cposname,cwhcode
order by cinvcode
回复

使用道具 举报

 楼主| 发表于 2012-7-6 16:12:42 | 显示全部楼层
但是有个问题又出现了 ,如果做了货位调整单的话 以上的货位被移动的数量就不知道了。
回复

使用道具 举报

发表于 2012-9-18 09:42:20 | 显示全部楼层
学习一下!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-4-30 04:13 , Processed in 0.069107 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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