因为项目的原因,最近研究了一下SBO系统SBO_SP_TransactionNotification 存储过程的应用(不了解SBO_SP_TransactionNotification 存储过程的朋友可以看这里:[url]http://www.itpub.net/780713.html[/url])。 在项目实施过程中遇到了一个难题,生产订单在下达后,由于库管员未能在产成品入库前完成材料发货的处理,引起了生产订单成本的巨大变动,这也对管理造成了 非常不良的影响,也可以直接说是管理的一个漏洞。在建议客户方从管理制度上进行约束和控制未果的情况下,首先想到使用SBO的这个存储过程进行强制控制。
强制控制的好处是明显的:一、生产订单成本会相对准确;二、有效控制生产过程,实现对生产成本的严格管理和准确核算;三、可以防止库管员违规操作,养成库管员遵循管理规则工作的良好习惯;四、堵住了库房管的漏洞,减少人为差错的可能性。
但是,强制控制也有缺点:一是钢性的管理控制不利于优良企业文化的形成,企业管理层将会以技术手段来代替管理的各项规章和制度;二是强制控制不灵活,如在 实际生产过程中的确可以出现在标准生产用量的情况下多加工产成品的情况,在这种情况下将不能进行产成品入库;……

以下是原代码,有兴趣的朋友可以拿去用,有什么意见欢迎来踩一下。在代码里各关键点有相关注释,有SQL经验的朋友应该一看就明白,如果有想转载的朋友,请注明出处!谢谢!!!

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
ALTER proc SBO_SP_TransactionNotification
@object_type nvarchar(25), -- SBO Object Type
@transaction_type nchar(1), -- [A]dd, pdate, [D]elete, [C]ancel, C[L]ose
@num_of_cols_in_key int,
@list_of_key_cols_tab_del nvarchar(255),
@list_of_cols_val_tab_del nvarchar(255)
AS
begin
-- Return values
declare @error int -- Result (0 for no error)
declare @error_message nvarchar (200) -- Error string to be displayed
select @error = 0
select @error_message = N'Ok'
--------------------------------------------------------------------------------------------------------------------------------
-- ADD YOUR CODE HERE
declare @ItemCode nvarchar(20) --用于处理过程中涉及到的物料编码
declare @ItemName nvarchar(200) --用于存储物料名称
declare @outWhsCode nvarchar(10) --用于存储调出仓库编码
declare @inWhsCode nvarchar(10) --用于存储调入仓库编码
declare @DocNum nvarchar(10) --用于存储单据编号

--============================= 生产收货库存控制 ===============================
--使用说明:在生产收货时核对已发原材料数量是否满足生产需要,如不满足则不允许生产收货处理。
--设计时间:20070924
--版 本:V1.0
--设 计 者:盛普科技 蒋晓冬

if @object_type='59' and @transaction_type in ( N'A',N'U')
--收货单类型代码为'59'(注意:库存交易收货对象代码也为59),控制类型为'A'添加类型、'U'更新类型
begin
declare @CmpltQty numeric --完工数量
declare @BaseQty numeric --基本数量
declare @IssuedQty numeric --已发货数量
declare @chdItemcode nvarchar(20) --子件物料编码
/* --如需在制作收货单时严格控制收货数量,可使用本段代码
if exists( --判断当前入库数量是否大于生产计划中未入库数量
SELECT T0.DocEntry, T0.BaseRef, T0.BaseType, T0.BaseEntry, T0.BaseLine, T0.ItemCode, T0.Dscription, T0.Quantity,
T1.DocNum, T1.DocEntry, T1.ItemCode, T1.PlannedQty, T1.CmpltQty, T1.Warehouse
FROM IGN1 T0
inner join OWOR T1 ON T0.BaseEntry = T1.DocEntry and T0.ItemCode=T1.Itemcode
WHERE T0.BaseType ='202' and T0.DocEntry = cast(@list_of_cols_val_tab_del as int) and T0.Quantity >(T1.PlannedQty-T1.CmpltQty)
)
begin
select @error = 1
select @error_message = '添加生产收货单出错,所收产品数量大于生产订单未入库数量!'
end
else
*/
if ( --判断当前收货成品是否已发出足额原材料,否则不允许保存
SELECT count(*)
FROM OWOR T0
INNER JOIN IGN1 T1 ON T1.BaseEntry = T0.DocEntry and T0.ItemCode=T1.Itemcode
INNER JOIN WOR1 T2 ON T0.DocEntry = T2.DocEntry
WHERE T1.DocEntry = cast(@list_of_cols_val_tab_del as int)
AND T1.BaseType = '202' --生产收货单代码为'202'
AND T0.Status <> 'L' --生产订单单据状态:'L'为未清,'C'为已清
AND T2.IssueType = 'M' --生产订单中发货类型:'M'为手动方式
AND (T0.CmpltQty * T2.BaseQty ) > T2.IssuedQty --此行为关键判断条件:生产订单完成数量×订单基本数量 > 生产订单中材料已发货数量
) > 0
begin
/* --本段用于调试程序,有不明错误发生时,可打开本段代码,在SBO系统信息栏内将显示相关单据信息
-- SELECT top 1 @Itemcode=T0.Itemcode,@chdItemcode=T2.itemcode,@CmpltQty = T0.CmpltQty, @BaseQty = abs((T0.CmpltQty * T2.BaseQty ) - T2.IssuedQty), @IssuedQty = T2.IssuedQty
-- SELECT T1.DocEntry,T0.Itemcode,T0.DocEntry,T2.itemcode,T0.CmpltQty, T2.BaseQty, (T0.CmpltQty * T2.BaseQty ), T2.IssuedQty
FROM OWOR T0
INNER JOIN IGN1 T1 ON T1.BaseEntry = T0.DocEntry and T0.ItemCode=T1.Itemcode
INNER JOIN WOR1 T2 ON T0.DocEntry = T2.DocEntry
WHERE T1.DocEntry =cast(isnull(@list_of_cols_val_tab_del,0) as int)
AND T1.BaseType = '202'
AND T0.Status <> 'L'
AND T2.IssueType = 'M'
AND (T0.CmpltQty * T2.BaseQty ) > T2.IssuedQty
-- select @error_message ='收货单号:'+ISNULL(@list_of_cols_val_tab_del,'0') +'__母件编码:'+@Itemcode +'__子件编码:'+@chdItemcode +'__入库数量:'+ ltrim(cast(ISNULL(@CmpltQty,0) as nvarchar(20)))+ '__基本数量:'+ltrim(cast(isNULL(@BaseQty,0) as nvarchar(20)))+ '__已发货数量:'+ltrim(cast(isnull(@IssuedQty,0) as nvarchar(20)))
*/
select @error_message = '添加生产收货单出错,所发原料不能满足生产需求!' --如需使用调试程序段,请将本行进行注释!!
select @error = 1
end
end
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
-- Select the return values
select @error, @error_message
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SBO_SP_TransactionNotification 存储过程的应用相关推荐

  1. SBO中流程控制功能的实现-SBO_SP_TransactionNotification

    大家打开sqlserver的查询分析器,打开SBO的一个公司数据库,查找一个存储过程:SBO_SP_TransactionNotification <?xml:namespace prefix ...

  2. hql调用mysql存储过程_hibernate调用mysql存储过程

    在mysql中创建两个存储过程,如下: 1.根据id查找某条数据: 1 CREATE PROCEDURE `findEmpById`(IN id INTEGER(11))2 begin3      s ...

  3. mysql 分号 存储过程_MySql 存储过程

    自动增长列.字段值唯一性约束 create table aa( id int auto_increment primary key, sname varchar(32) unique ); inser ...

  4. 常用MySQL函数存储过程_解析MySQL存储过程、常用函数代码

    mysql存储过程的概念: 存储在数据库当中可以执行特定工作(查询和更新)的一组SQL代码的程序段. mysql函数的概念: 函数是完成特定功能的SQL语句,函数分为内置函数和自定义函数(user-d ...

  5. oracle 存储过程 状态,查看ORACLE中正在运行的存储过程 | 学步园

    1.如何查看ORACLE中正在运行的存储过程 select owner,name from v$db_object_cache where type like '%PROCE%' and locks ...

  6. MySQL 学习笔记(6)— 存储过程创建、调用、删除以及带参数的存储过程

    1. 存储过程总结 存储过程是一种存储在数据库中的程序.它可以包含多个 SQL 语句,并提供许多过程语言的功能,例如变量定义.条件控制语句.循环语句.游标以及异常处理等. 1.1 存储过程优点 实现代 ...

  7. SER SERVER存储过程

    Transact-SQL中的存储过程,非常类似于C#语言中的方法,可以重复调用.当存储过程执行一次后,可以将语句存储到缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. 一 ...

  8. MySQL 存储过程传参之in, out, inout 参数用法

    存储过程传参:存储过程的括号里,可以声明参数. 语法是 create procedure p([in/out/inout] 参数名  参数类型 ..) in :给参数传入值,定义的参数就得到了值 ou ...

  9. SQL Server存储过程输入参数使用表值

    在2008之前如果我们想要将表作为输入参数传递给SQL Server存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML传入. 在2008中提供了表值参数.使用表值参数,可以不 ...

最新文章

  1. 语义分割--Fully Convolutional DenseNets for Semantic Segmentation
  2. 《数学之美》第29章 各个击破算法和Google云计算的基础
  3. Fastadmin笔记
  4. 有种软件你不得不备着,那就是数据恢复类软件
  5. js 选择 checkbox
  6. leetcode算法题--二进制求和
  7. 算法2:邻居好说话:冒泡排序
  8. OVS vxlan 底层结构分析 - 每天5分钟玩转 OpenStack(148)
  9. programing python_Programing in Python3(Second Edition)_实例
  10. boost asio io_context 没任务不退出
  11. 解决Tomcat.exe或者startup.bat 一闪无法打开的问题
  12. 虚拟服务器ip是什么意思,虚拟主机独立ip是什么意思
  13. php类的实例化方法,php中类的定义和实例化方法
  14. 数据结构上机实践第七周项目2 - 自建算法库——链队(链式队列)
  15. 英国航空系统周末故障,可能会损失掉全年将近 3% 的利润
  16. 经典相声——企业信息化新“五官争功”
  17. 随机生成验证码(JAVA代码)
  18. Spring Boot电商项目6:数据库设计与项目初始化一:数据库表设计;
  19. C++语言的表达式模板:表达式模板的入门性介绍
  20. 各种国内地图坐标系总结

热门文章

  1. 基础知识漫谈(3) 组合基础知识,设计游戏框架
  2. RFC 协议下载方法
  3. nginx反向代理nexus私服
  4. 软件质量保证与测试笔记——江湖救急版
  5. R语言:再谈REmap包
  6. jmeter压测_jmeter压测学习2linux运行jmeter环境
  7. golang int 转string_Golang的逃逸分析
  8. sas和python哪个更容易_我该选择谁?SAS VS Python
  9. android自定义控件绘制位置,Android自定义控件之——文字圆形边框(将文字绘制在圆中间)...
  10. java 导出csv 格式,java导出csv格式文件的方法