找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

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

T+铝材行业实际过磅和理论数量控制-卢儒佳

[复制链接]
发表于 2021-8-4 16:43:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

×
T+铝材行业实际过磅和理论数量控制【问题现象】
在广东铝材行业比较多,铝材行业只有销售出库的时候才会磅出准确的重量,企业内流通一般用的是一个理论重量。 问题:希望可以在销售时能将实际重量与理论重量进行对比,控制差额高于N%或者低于N%,才可以保存出库吗? 客户需求,设置差额率例如5%,(实际重量-理论重量),上下不超过5%允许保存出库,如果超过5%,那么不允许出库。
【问题分析】
理论重量就是销售出库单上的“数量”,而实际的过磅重量可以使用自定义项来实现,通过公式  (实际重量-销售出库单上的数量)/销售出库单上的数量,得出这个差额率,控制差额率的绝对值不超出5%的情况下可以保存,此需求软件无法直接实现,但是可以通过做触发器来实现。
【解决方案】
    1、T+软件中,点击单据设计,选择库存核算--销售出库单,明细--自定义项设置,启用一个数值公用自定义项,将显示名称改成“过磅数量”,适用单据选择销售出库单,值来源选择手工录入。如下图所示:


                               
登录/注册后可看大图

   2、写触发器来控制(实际重量-销售出库单上的数量)/销售出库单上的数量
       (1)触发器:顾名思义就是做一个操作的时候可以带动另外一个操作。触发器就是一段语句,可以在保存单据或者审核单据的时候让它达到修改或者受到某一控制的效果。本案例就是要达到控制到不能保存的效果。
       (2)触发器是一段语句,故它是有一个固定书写格式,这里只介绍常用的一种格式
CREATE  TRIGGER 触发器名
ON {表|视图}
FOR  insert,UPDATE,DELETE
AS
DECLARE定义变量
SELECT  变量=表中的字段名 from inserted,deleted where 条件以及其他的SQL语句
        (3)inserted和deleted是由数据库系统自动形成的两个临时表,在保存单据之前,单据上填写的数据都是在inserted中,而删除单据,会提示是否进行删除,删除后将无法恢复在没有点是之前,,数据是保存在deleted中,而修改单据,点击修改后,修改之前的数据是在deleted,修改后未点击保存前的数据是在inserted中。
       (4)点击开始程序,找到SQL SERVER2008R2,然后再找SQL SERVER management studio,用windows身份连接,点击UFTSYSTEM数据库找到EAP_Account
然后右键打开前1000行,通过其中记录找到账套对应数据库的名称,然后点击该数据库右键新建查询。由于是对销售出库单进行控制,并且所有出入库单在后台数据库中都是在同一张表中,故需要做所有的出入库单,然后查询出来销售出库单的标志。

                               
登录/注册后可看大图

发现上图中的,红色区域是不一样的,并且做了两张出库单都是同样的标志19。
      (5)做触发器:
  create  TRIGGER [chao]
  ON ST_RDRecord_b
  FOR INSERT,update
  as
    DECLARE        @quantity         decimal(28, 14),
    @pubuserdefdecm1          decimal(28, 14),
        @idRDRecordDTO  int,
        @idvouchertype int ,
        @fnumber1 VARCHAR(100)
SELECT@idRDRecordDTO=idRDRecordDTO,@pubuserdefdecm1=pubuserdefdecm1,@quantity=quantity FROM        INSERTED
set @idvouchertype=(select idvouchertype  from ST_RDRecord where ST_RDRecord.id=@idRDRecordDTO)
IF  abs((@quantity-@pubuserdefdecm1)/@quantity*100)>5 and @idvouchertype=19
BEGIN
    set @fnumber1 = '过磅数量异常,请联系经理!'
   
        RAISERROR(@fnumber1,18,18)
GOTO H_Error
END
H_Error:
   注释:
①create  TRIGGER [chao]:创建一个命名为chao的触发器。
②ON ST_RDRecord_b:ST_RDRecord_b是出入库单字表,而ON ST_RDRecord_b是对出入库单字表来创建的触发器。
③FOR INSERT,update:是对新增单据或者修改单据的时候,有效果的。
④DECLARE        @quantity:quantity是数量字段,idRDRecordDTO是主表和子表关联的id号,pubuserdefdecm1是自定义项目过磅数量,进行定义变量的时候,需要定义成和表中的字段一样的名称一样类型。
SELECT@idRDRecordDTO=idRDRecordDTO,@pubuserdefdecm1=pubuserdefdecm1,@quantity=quantity FROM        INSERTED:把在做单据并且没有保存之前的数据,取值到变量中,为后面的判断做准备。
⑤set @idvouchertype=(select idvouchertype  from ST_RDRecord where ST_RDRecord.id=@idRDRecordDTO):从主表中找到和正在新增尚未保存的销售出库单类型的标志,并且把值取给该变量。
     ⑥IF  abs((@quantity-@pubuserdefdecm1)/@quantity*100)>5 and @idvouchertype=19:判断数量和过磅数量的差超出理论数量的正负百分之五并且单据类型是销售出库单,则开始执行后面的语句,没有超出就不执行。
   ⑦RAISERROR(@fnumber1,18,18):弹出提示的信息框。
       (6)触发器是SQL语句,故打开SQL SERVER management studio,没有触发器的时候是如下图所示:
   

                               
登录/注册后可看大图

     把写好的触发器脚本语句复制到SQL SERVER management studio,如下图:

                               
登录/注册后可看大图

然后点击执行后,会在表中形成如下图所示:

                               
登录/注册后可看大图

        (7)在T+中尚未加入触发器之前,操作T+中的软件下图所示:

                               
登录/注册后可看大图

执行触发器后:

                               
登录/注册后可看大图

    总结:在软件中有些功能不能直接实现,可以考虑使用触发器,不过如果考虑做触发器其实对数据库是要特别的了解,并且只有写的多,才能书写自如。
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

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

GMT+8, 2024-5-17 02:24 , Processed in 0.019833 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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