求写写一个触发器

linlizu 2008-04-10 10:50:51

大家好!我希望在PO_Podetails表写一个触发器,如果PO_Pomain的cdefine7 非零非空,则当PO_Podetails表增加采购明细后,自动增加相同采购品赠品行,数量为=赠品率×采购品总量,单价为零。


采购订单主表 PO_Pomain

Remark
采购订单可有3种状态_输入/审核执行/关闭,可参照采购计划周期
Columns
Column Name Description Datatype Length Allow Nulls
ireturncount 打回次数 int 4 True
IsWfControlled 是否启用工作流 bit 1 True
iverifystateex 单据审核状态 int 4 True
iDiscountTaxType 扣税类别 tinyint 1 True
cPOID 采购订单号 varchar 30 True
dPODate 单据日期 datetime 8 False
cVenCode 供应商编码 varchar 20 True
cDepCode 部门编码 varchar 12 True
cPersonCode 业务员编码 varchar 20 True
cPTCode 采购类型编码 varchar 2 True
cArrivalPlace 到货地址 varchar 200 True
cSCCode 发运方式编码 varchar 2 True
cexch_name 币种名称 varchar 8 True
nflat 汇率 float 8 True
iTaxRate 表头税率 float 8 True
cPayCode 付款条件编码 varchar 3 True
iCost 运费 money 8 True
iBargain 订金 money 8 True
cMemo 备注 varchar 60 True
cState 状态 tinyint 1 True
cPeriod 物料需求计划周期 varchar 12 True
cMaker 制单人 varchar 20 True
cVerifier 审核人 varchar 20 True
cCloser 关闭人 varchar 20 True
cDefine1 自定义项1 varchar 20 True
cDefine2 自定义项2 varchar 20 True
cDefine3 自定义项3 varchar 20 True
cDefine4 自定义项4 datetime 8 True
cDefine5 自定义项5 int 4 True
cDefine6 自定义项6 datetime 8 True
cDefine7 赠品率 float 8 True
cDefine8 自定义项8 varchar 4 True
cDefine9 自定义项9 varchar 8 True
cDefine10 自定义项10 varchar 60 True

POID 采购订单主表标识 int 4 False
iVTid 单据模版号 int 4 False
ufts 时间戳 timestamp 8 True
cChanger 变更人 varchar 20 True
cBusType 业务类型 varchar 8 True
cDefine11 自定义项11 varchar 120 True
cDefine12 自定义项12 varchar 120 True
cDefine13 自定义项13 varchar 120 True
cDefine14 自定义项14 varchar 120 True
cDefine15 自定义项15 int 4 True
cDefine16 自定义项16 float 8 True
cLocker 锁定人 varchar 20 True


Summary
采购订单子表 PO_Podetails

Column Name Description Datatype Length Allow Nulls
cupsocode 来源单据号 varchar 30 True
iInvMPCost 最高进价 decimal 13 True

ID 采购订单子表标识 int 4 False
cPOID 采购订单号 varchar 30 True
cInvCode 存货编码 varchar 20 True
iQuantity 数量 float 8 True
iNum 辅计量数量 float 8 True
iQuotedPrice 报价 float 8 True
iUnitPrice 原币无税单价 float 8 True
iMoney 原币无税金额 money 8 True
iTax 原币税额 money 8 True
iSum 原币价税合计 money 8 True
iDisCount 原币折扣额 money 8 True
iNatUnitPrice 本币无税单价 float 8 True
iNatMoney 本币无税金额 money 8 True
iNatTax 本币税额 money 8 True
iNatSum 本币价税合计 money 8 True
iNatDisCount 本币折扣额 money 8 True
dArriveDate 计划到货日期 datetime 8 True
iReceivedQTY 累计到货数量 float 8 True
iReceivedNum 累计到货辅计量数量 float 8 True
iReceivedMoney 累计原币到货金额 money 8 True
iInvQTY 累计发票数量 float 8 True
iInvNum 累计发票辅计量数量 float 8 True
iInvMoney 累计原币发票金额 money 8 True
cFree1 存货自由项1 varchar 20 True
cFree2 存货自由项2 varchar 20 True
iNatInvMoney 累计本币发票金额 money 8 True
iOriTotal 累计原币付款 money 8 True
iTotal 累计本币付款 money 8 True
iPerTaxRate 税率 userdecimal 13 True
cDefine22 表体自定义项22 varchar 60 True
cDefine23 表体自定义项23 varchar 60 True
cDefine24 表体自定义项24 varchar 60 True
cDefine25 表体自定义项25 varchar 60 True
cDefine26 表体自定义项26 float 8 True
cDefine27 表体自定义项27 float 8 True
iflag 标志 tinyint 1 True
cItemCode 项目编码 varchar 20 True
cItem_class 项目大类编码 varchar 10 True
PPCIds 物料需求计划子表标识 int 4 True
cItemName 项目名称 varchar 60 True
cFree3 存货自由项3 varchar 20 True
cFree4 存货自由项4 varchar 20 True
cFree5 存货自由项5 varchar 20 True
cFree6 存货自由项6 varchar 20 True
cFree7 存货自由项7 varchar 20 True
cFree8 存货自由项8 varchar 20 True
cFree9 存货自由项9 varchar 20 True
cFree10 存货自由项10 varchar 20 True
bGsp 是否质检 bit 1 True
POID 采购订单主表标识 int 4 True
cUnitID 计量单位编码 varchar 10 True
iTaxPrice 原币含税单价 userdecimal 13 True
iArrQTY 到货数量 userdecimal 13 True
iArrNum 到货辅计量数量 userdecimal 13 True
iArrMoney 原币到货金额 money 8 True
iNatArrMoney 本币到货金额 money 8 True
iAppIds 采购请购单子表标识 int 4 True
cDefine28 表体自定义项28 varchar 120 True
cDefine29 表体自定义项29 varchar 120 True
cDefine30 表体自定义项30 varchar 120 True
cDefine31 表体自定义项31 varchar 120 True
cDefine32 表体自定义项32 varchar 120 True
cDefine33 表体自定义项33 varchar 120 True
cDefine34 表体自定义项34 int 4 True
cDefine35 表体自定义项35 int 4 True
cDefine36 表体自定义项36 datetime 8 True
cDefine37 表体自定义项37 datetime 8 True
iSOsID 销售订单子表标识 int 4 True
bTaxCost 价格标准 bit 1 True
cSource 单据来源 varchar 10 True
cbCloser 行关闭人 varchar 20 True
iPPartId 母件Id int 4 True
iPQuantity 母件数量 userdecimal 13 True
iPTOSeq 选配序号 int 4 True
SoType 来源单据类型 tinyint 1 True
SoDId 来源单据子表ID int 4 True
ContractRowGUID 合同子表表识 uniqueidentifier 16 True



...全文
261 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lt_smile 2008-04-11
  • 打赏
  • 举报
回复
好长比较晕
linlizu 2008-04-11
  • 打赏
  • 举报
回复
cson_cson 你好!你说得非常好,但是目前公司并不想把此事,弄得如此完美,而是采购部反应赠品都是死,重复性工作,就希望插入新订单的时间,有赠品的,则帮自动完成即可,如果不要,自己手工删掉,因为有时候一个单很多采购明细,他可以通过用友变更功能,复制自已下订单,没有录入编码,但还是录入单价,数量。
linlizu 2008-04-11
  • 打赏
  • 举报
回复
晕!触发了,我测试了一下,我输入2条数据,触发,多生了一条赠品数据,但是名称,编码,规格,数量,单价都不对啊,多加了一条奇怪明细。是另一个存货编码的
cson_cson 2008-04-11
  • 打赏
  • 举报
回复
1、
光有插入触发器是不行的吧。
如果对订单进行修改的话,是不是也要自动修改赠品呢。
2、
如果自动增加了赠品,下次进入订单修改的时候,赠品应该也会显示在订单上面吧,是不是操作人员可以删除、修改呀。
3、
如果赠品的单价为零,对库存成本、销售成本等的计算又是怎么定义的呀。
建议:
赠品管理是一个独立的业务,需要单独建立业务流程和表格。
但可以通过一些触发器的手段实现相关的操作。
1、单独建立一张赠品表。
2、对订单明细建立全触发器,对应修改赠品表。
3、对订单主表建立修改触发器(针对审核字段),完成对赠品的业务操作。
昵称被占用了 2008-04-11
  • 打赏
  • 举报
回复
create trigger tr_PO_Podetails_Insert
on po_podetails
for insert
as
declare @id int
select @id=max(id) from PO_Podetails

insert PO_Podetails(id,
poid,cInvCode,iQuantity,
iTaxPrice,cDefine34
)
select
@id+(select count(1) from inserted where poid<=i.poid),i.poid,i.cInvCode,i.iQuantity*a.cdefine7,
iTaxPrice=0,cDefine34=1
from PO_Pomain a,inserted i
where a.poid=i.poid
and isnull(a.cdefine7,0) <>0
and i.cDefine34 <>1

昵称被占用了 2008-04-11
  • 打赏
  • 举报
回复
id不是自增长的吗?

linlizu 2008-04-11
  • 打赏
  • 举报
回复

ID POID cInvCode iQuantity iTaxPrice
175609 52985 717-20132-007E 2527.0 1.10
175610 52985 717-20132-007E 7.0 0.00
175611 52985 724-42528-008E 638.0 3.18
175612 52985 724-42528-008E 1.0 0.00


后台查询其中一张订单,PO_Podetails子表是这样的。现在就想要,当po_pomain录入cdefine7赠品率时,在
PO_Podetails表,录入
ID POID cInvCode iQuantity iTaxPrice
175609 52985 717-20132-007E 2527.0 1.10
175611 52985 724-42528-008E 638.0 3.18

触发器,自动触发增加
ID POID cInvCode iQuantity iTaxPrice
175610 52985 717-20132-007E 7.0 0.00
175612 52985 724-42528-008E 1.0 0.00

如果只是修改,删除,更新订单数据,不需要触发,好可,
谢谢,哪位大侠,救救啊。



昵称被占用了 2008-04-11
  • 打赏
  • 举报
回复
表结构没理解是没可能写好触发器的

这么多类似的字段

utpcb 2008-04-11
  • 打赏
  • 举报
回复
up 以下太长了哈不想看看
linlizu 2008-04-10
  • 打赏
  • 举报
回复
狂晕,没有人回答我的问题啊。
linlizu 2008-04-10
  • 打赏
  • 举报
回复

USE UFDATA_200_2008
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'tr_PO_Podetails_Insert' AND type = 'TR')
DROP TRIGGER tr_PO_Podetails_Insert
GO
create trigger tr_PO_Podetails_Insert
on po_podetails
for insert
as
insert PO_Podetails(id,
poid,cInvCode,iQuantity,
iTaxPrice,cDefine34
)
select
max(i.id)+1,i.poid,i.cInvCode,i.iQuantity*a.cdefine7,
iTaxPrice=0,cDefine34=1
from PO_Pomain a,inserted i
where a.poid=i.poid
and isnull(a.cdefine7,0)<>0
and i.cDefine34<>1


海阔天空,
依照人的思路,我整理一下,但是提示如下错误,服务器: 消息 8118,级别 16,状态 1,过程 tr_PO_Podetails_Insert,行 5
列 'a.POID' 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。


linlizu 2008-04-10
  • 打赏
  • 举报
回复
好, 我基本理解你的思路了,我试一下啊。
昵称被占用了 2008-04-10
  • 打赏
  • 举报
回复
大概,有些字段找不到就用中文代替了


create trigger tr_PO_Podetails_Insert
on PO_Podetails
for insert
as


insert PO_Podetails(
POID,cInvCode,iQuantity,
单价,赠品标志字段
)
select
i.POID,i.cInvCode,i,iQuantity*a.cdefine7,
单价=0,标志字段=1
from PO_Pomain a,inserted i
where a.poid=i.poid
and isnull(a.cdefine7,0)<>0
and i.赠品标志字段<>1 --赠品不能再赠

linlizu 2008-04-10
  • 打赏
  • 举报
回复
晕,弄错,物料编码相同,品名规格,也相同,只有数量,单价不一样,数量=3600×赠品率(0.01)=360,单价赠品都为零


采购订单

赠品率 0.01

序号 物料编号 品名 规格 单位 数量 备注
1 430-02301-000E 贴片MOS管(环保) SI2301(SOT-23) PCS 9000
2 343-03904-000E 贴片三极管(环保) 2N3904(SOT-23) PCS 36000
3 430-02301-000E 贴片MOS管(环保) SI2301(SOT-23) PCS 90 赠品
4 343-03904-000E 贴片三极管(环保) 2N3904(SOT-23)PCS 360 赠品
suchabbs 2008-04-10
  • 打赏
  • 举报
回复
友情up
昵称被占用了 2008-04-10
  • 打赏
  • 举报
回复
还是看不懂

物料编号相同,怎么品名、规格 就不同了

电阻当赠品也太没意思了,赠点好玩的不好吗
linlizu 2008-04-10
  • 打赏
  • 举报
回复
海阔天空 说得对的啊,多个子表记录对应一个表头,只要表头赠品率,就必须增加赠品行,子表PO_Podetails ID字段自动增加,是唯一性
linlizu 2008-04-10
  • 打赏
  • 举报
回复
3 430-02301-000E 贴片二极管(环保) 1N4148(SMDLL34) PCS 90 赠品
4 343-03904-000E 贴片电阻(环保) 0Ω-1/8W-0805±5%PCS 360 赠品
这两行,如赠品率非零, 我希望能自动增加,这只是简单例子,因为是电子行业,有时候一个单几十项,
linlizu 2008-04-10
  • 打赏
  • 举报
回复
采购订单

赠品率 0.01

序号 物料编号 品名 规格 单位
1 430-02301-000E 贴片MOS管(环保) SI2301(SOT-23) PCS 9000
2 343-03904-000E 贴片三极管(环保) 2N3904(SOT-23) PCS 36000
3 430-02301-000E 贴片二极管(环保) 1N4148(SMDLL34) PCS 90 赠品
4 343-03904-000E 贴片电阻(环保) 0Ω-1/8W-0805±5%PCS 360 赠品


像上面表的啊!找用友顾问,愿意解决,就不必在这里麻烦,各位高手了
昵称被占用了 2008-04-10
  • 打赏
  • 举报
回复
还有,PO_Podetails是子表,也就是多条记录对应一个表头记录,你在PO_Podetails加触发器是不是PO_Podetails每增加一条记录都需要增加一条赠品记录?
加载更多回复(8)

34,589

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧