




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WDSQL检查功能使用说明业务背景:在905系统实际的实施使用过程中,单据保存、删除、审批、取消审批时,经常会写一些触发器完成某些列值得检查或其它更新操作,例如:客户资质审核更新客户合格标志,资质有效期判断等。又因为需求较为特殊,无法合并到标准产品中,从而会被开发上直接屏蔽掉。是否能够在这些操作中提供一种方法供实施人员灵活配置?实现方式:在单据保存、删除、提交、取消提交、审批、取消审批时,调用wdsql检查功能,实施人员可以自行向其中增加检查等语句,实现可配置的检查更新。例如在提单保存时判断,XSTD_C1不能为空,则仅需要向WDSQL中手工插入检查语句即可,不用做其它设置 insert into wdsqlvalues(S,001,BZHSTD,select case rtrim(XSTD_C1) WHEN THEN 1 ELSE 0 END FROM XSTD WHERE XSTD_TDLS = ? ,1)使用说明:1WDSQL列说明WDSQL_LX保存前执行S,删除前执行D,(审批A(approve 批准),取消审批V(veto 否决)WDSQL_DJBHLSBLM中的逻辑表名,如标准回收提单为BZHSTD,综合管理中文档项目定义的四位编号,如WD1104,该列数据取1104WDSQL_BH顺序号,同一种单据同一类型不要重复WDSQL_SQL检查更新用的SQL,最大不要大于32000个字符,注意,必须用一个“?”号接收传入的单据流水编号列WDSQL_CCTSWDSQL_QXTS提示信息WDSQL_CHECK是检查0,还是处理12WDSQL检查的使用如果设置WDSQL_CHECK 为0就会进行检查处理。检查可以返回三种值,-1(小于0都可以) 不严格判断,只提示,0不判断,1(大于0都可以)严格判断(1)统一的提示如下图,如图所示,提示会集中在一个窗口中显示出来。必须信息下面的提示就是严格判断必须遵循的业务规则的信息提示。参考信息下面的提示信息就是不严格判断的信息提示。如图所示,提示将集中在一个窗口中(2)不严格提示,允许用户交互对于不严格检查,让用户选择是否继续操作(3)简单检查相应的WDSQL中的设置如下-严格控制,select出来的是 0 就可以存盘时控制:insertintowdsqlvalues(S,001,BZHSTD,select1fromxstdwherexstd_tdls=?,提示,ERROR MSG,0)审批或者提交(免审)时控制:insertintowdsqlvalues(A,001,BZHSTD,select1fromxstdwherexstd_tdls=?,提示,ERROR MSG,0)-如果发票明细上税率都为0,则不允许发票表头的c5字段为“增值税发票”insertintowdsqlvalues(S,001,BZHSTD,selectcasecount(1)when0then0else-1endfromxstd,xstdmxwherexstd_tdls=xstdmx_tdlsandxstd_tdls=?andltrim(rtrim(xstd_c5)=增值税发票havingsum(xstdmx_sl)=0,提示,增值税发票,税率不能为0,0)-如果发票明细上税率不一样时,不允许保存insertintowdsqlvalues(S,002,BZHSTD,selectcasecount(1)when1then0else-1endfromxstd,(select1f_count,xstdmx_tdlsfromxstdmxwherexstdmx_tdls=?groupbyxstdmx_tdls,xstdmx_sl)bwhereb.xstdmx_tdls=xstd_tdls,提示,提单明细税率必须一致,0) (4)复杂的检查(MSS语法)能不能加工或者调用一个存储过程来进行复杂的判断?是可以的首先可以定义一个函数DROP function lc0039999.f_testgoCREATE function lc0039999.f_test(BB VARCHAR(20)returns int-返回值必须为整型asBEGINRETURN (1)END增加wdsql保存前检查语句insertintowdsqlvalues(S,001,BZHSTD,selectlc0039999.f_test(?) ,提示,增值税发票,税率不能为0,0)增加wdsql审批前检查语句insertintowdsqlvalues(A,001,BZHSTD,selectlc0039999.f_test(?) ,提示,增值税发票,税率不能为0,0)3非检查的其它处理如果设置WDSQL_CHECK 为1就会认为是进行非检查的其它处理,可以提供下列三类处理的调用。除非出现执行错误,否则非检查处理不会返回提示信息。(1)一般处理方式如:客户资质审核通过后更新客户合格标志;物料检验台帐与检验记录同步。-客户资质审和通过后更新客户合格标志insertintowdsqlvalues(A,001,1A81,update zwdwex set zwdwex_hgkh =1 where zwdwex_dwbh = (select WD1A81_DWBH FROM WD1A81_LSBH = ?), , ,1)-物料检验台帐删除时,同时删除检验记录台帐insertintowdsqlvalues(D,001,1A8Q,DELETE FROM WD1A8P WHERE WD1A8P_LSBH = ? , , ,1)-WD1000取消审批(无审批流程单据取消提交)时,同时删除WD2000的纪录insertintowdsqlvalues(V,001,1000,DELETE FROM WD2000 WHERE WD1000_LSBH = ? , , ,1)-物料检验台帐增加时,同时增加检验记录台帐(更新也是一样的用S)insertintowdsqlvalues(S,001,1A8Q,insert into WD1A8P SELECT * FROM WD1A8Q FROM WD1A8Q_LSBH = ? , , ,1)(2)复杂的处理(区分数据库,下面是MSS写法)除了可以使用保存前检查、删除、更新、插入,还可以进行组合使用。-创建测试表Create table t_test (col1 varchar(100),col2 varchar(100)Insert into t_test values(old,)-先在t_test增加一条数据,再更新其它col1为old的数据insertintowdsqlvalues(S,001,BZHSTD,BEGIN DECALRE LSBH VARCHAR(20); INSERT INTO T_TEST VALUES(新增加的,lsbh); update t_test set col2 = lsbh from t_test where col1 =old; end , , ,1)-测试后,测试表中的数据select * from t_test;old 0001新增加的0001WDSQL中的语句整理后就是这样的,和存储过程触发器的写法是一致的,只要注意每句话后都要带分号,单引号要双写(例如old要写为old)BeginDeclare lsbh varchar(20);Set lsbh =? ;INSERT INTO T_TEST VALUES(新增加的,lsbh); update t_test set col2 = lsbh from t_test where col1 =old; end(3)还可以调用存储过程(区分数据库,下面是MSS写法)再以上复杂处理中,还可以调用存储过程实现更复杂的处理。-先在t_test增加一条数据,再更新其它col1为old的数据insertintowdsqlvalues(S,001,BZHSTD, BEGIN DECLARE A VARCHAR(20);DECLARE BM VARCHAR(20) SET A = ?;SELECT BM = XSTD_BMBH FROM XSTD WHERE XSTD_TDLS = A; /*执行存储过程,你可以加上注释*/ EXEC PR_TEST A,BM; END , , ,1)WDSQL中的语句整理后就是这样的,和存储过程触发器的写法是一致的,你甚至可以添加注释BEGIN DECLARE A VARCHAR(20);DECLARE BM VARCHAR(20);SET A = ?;SELECT BM = XSTD_BMBH FROM XSTD WHERE XSTD_TDLS = A; /*执行存储过程,你可以加上注释*/EXEC PR_TEST A,BM; END(4)一个复杂应用的例子(销售提单保存时,在lspcsx表中增加批次信息)delete from wdsql where wdsql_djbh=BZHSTD and wdsql_bh=003go-保存前检查,自动把批次属性信息插入到lspcsx中insert into wdsqlvalues(S,003,BZHSTD,BEGINdeclare lv_tdls varchar(20)declare lv_wlbh varchar(30)declare lv_pch varchar(20)declare lv_ywrq varchar(8)declare lv_c1 varchar(8)declare lv_scrq varchar(8)declare lv_sxrq varchar(8)declare ln_wl_bzqx u001declare lv_temp varchar(10)set lv_tdls =?declare XSTDFZ_CURSOR cursor forselect xstdmx_wlbh,xstdfz_jh,xstd_ywrq,LSWLZD_BZQXfrom xstd,xstdmx,xstdfz,LSWLZDwhere xstd_tdls = xstdmx_tdls and xstdmx_tdls = xstdfz_lsbh and xstdmx_tdfl = xstdfz_flbh and xstd_tdls=lv_tdlsand xstdmx_wlbh=lswlzd_wlbh;OPEN XSTDFZ_CURSOR;FETCH NEXT FROM XSTDFZ_CURSOR INTO lv_wlbh,lv_pch,lv_ywrq,ln_wl_bzqx;WHILE FETCH_STATUS = 0BEGINif not exists(select 1 from lspcsx where lspcsx_wlbh =lv_wlbh and lspcsx_pch = lv_pch)beginset lv_temp = 20 + substring(lv_pch,1,4);if len(lv_pch) = 4 and isdate(lv_temp) = 1beginset lv_c1 = substring(CONVERT( VARCHAR, dateadd( MONTH, ln_wl_bzqx - 1, lv_temp + 01 ), 120), 1, 7 );set lv_scrq=lv_temp + 01;set lv_sxrq=substring(CONVERT( VARCHAR, dateadd( MONTH, ln_wl_bzqx , lv_temp + 01 ), 112), 1, 8 );INSERT INTO LSPCSX(LSPCSX_WLBH,LSPCSX_PCH,LSPCSX_RKRQ,LSPCSX_SCRQ,LSPCSX_SXRQ,LSPCSX_FJRQ,LSPCSX_YSPH,LSPCSX_C1)VALUES(lv_wlbh,lv_pch,lv_ywrq,lv_scrq,lv_sxrq,lv_sxrq,lv_pch,lv_c1 );endendFETCH NEXT FROM XSTDFZ_CURSOR INTO lv_wlbh,lv_pch,lv_ywrq,ln_wl_bzqx;END CLOSE XSTDFZ_CURSOR; DEALLOCATE XSTDFZ_CURSOR;END,提示,批次属性保存失败,1)go4自定义的返回提示信息有时候,可能需要自己定义返回的错误信息提示,比如:“XXX的帐期超过#天,请检查!”,格式为“-1*(错误提示)”:表示不严格判断,原来的 -1 、“-1”仍然有效“+1*(错误提示)”:表示严格判断,原来的 1 、“1”仍然有效“00*(错误提示)”:表示不判断,原来的0、“0”、“00”仍然有效(1)通过一般的SQL方式处理Select case count(1) when 1 then -1*资信已超:+cast( xstd_u1 as varchar) else 0 end from xstd;(2)通过存储过程处理,更加随意例子:create table t_test1(col1 varchar(20);-创建测试用表create procedure pr_show_test (lsbh varchar(20)创建测试用存储过程asbegininsert into t_test1 values(lsbh);select -1*这是一个存储过程返回自定义信息的测试例子;endgo-测试用的保存前检查WDSQLdelete from wdsql where wdsql_djbh=BZHSTD and wdsql_bh=004go-保存前检查,如果含税单价和销售底价不一样,并且销售底价0,需要提示是否选择预提insert into wdsqlvalues(S,004,BZHSTD,exec pr_show_test lsbh=? ,提示,含税单价和销售底价不一样,请选择预提,0)Go返回以下窗口:帐期类问题可以通过以上两种方式进行处理,大于90小于30天返回-1,小于30 返回 1即可。但是对于提示,确无法进行处理,这时我们可以分开为多条检查语句即可。(3)特别注意,这样的写法不正确insertintowdsqlvalues(S,001,BZHSTD,BEGIN DECALRE LSBH VARCHAR(20); Set lsbh =?INSERT INTO T_TEST VALUES(新增加的,lsbh); update t_test set col2 = lsbh from t_test where col1 =old; select “-1*这是一个测试”;end , , ,1)如果最后一列”WDSQL_CHECK”值为“1”,并且过程中要返回信息“select “-1*这是一个测试”;”就不能使用上面的语法“begin end”。需要把它们放到一个存储过程中。如果没有“select “-1*这是一个测试”;”类似的返回信息,就可以5WDSQL的调试增加了WDSQL后,往往不知道如何调试,其实也是较为简单的,下面以这样一个例子说明。我要把发票表体的物料名称加逗号分割后更新到发票表头的xsfp_c7字段上。相应的SQL Server下的wdsql如下,Oracle差不多:/*启用,把发票明细上的物料名称更新到表头的一个字段上*/insert into wdsqlvalues (S,910,BZHSFP,begindeclare lv_xsfp_lsbh varchar(40)declare lv_wlmc varchar(250)declare lv_temp varchar(250)set lv_xsfp_lsbh =?set lv_wlmc=DECLARE xsfpmx_Cursor CURSOR FORSELECT LSWLZD_WLMC FROM XSFPMX,LSWLZD WHERE XSFPMX_WLBH = LSWLZD_WLBH AND XSFPMX_FPLS = lv_xsfp_lsbhOPEN xsfpmx_CursorFETCH NEXT FROM xsfpmx_Cursor INTO lv_tempWHILE FETCH_STATUS = 0BEGINset lv_wlmc = lv_wlmc + ltrim(rtrim(isnull(lv_temp,)+, FETCH NEXT FROM xsfpmx_Cursor INTO lv_tempENDCLOSE xsfpmx_CursorDEALLOCATE xsfpmx_CursorUPDATE XSFP set XSFP_C7=substring(lv_wlmc,1,250) WHERE XSFP_FPLS=lv_xsfp_lsbhend,提示,把发票明细上的物料名称更新到表头时出现错误!,1)go(1)首先找到一张要测试的发票,假设找到的发票流水为104select xsfp_c7,* from xsfp where xsfp_fpls =104(2)然后把对应的WDSQL语句复制到查询分析器中begindeclare lv_xsfp_lsbh varchar(40)declare lv_wlmc varchar(250)declare lv_temp varchar(250)set lv_xsfp_lsbh =?把?号换为真正的单据流水号,别忘了更新到数据库前再换成?号set lv_wlmc=DECLARE xsfpmx_Cursor CURSOR FO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 品控技术复试题目及答案
- 分析检验技术测试题及答案
- 辅警安全培训课件
- 中国银行2025铜川市信息科技岗笔试题及答案
- 农业银行2025宿迁市笔试英文行测高频题含答案
- 交通银行2025秋招笔试英语题专练及答案安徽地区
- 邮储银行2025榆林市秋招笔试EPI能力测试题专练及答案
- 农业银行2025南宁市秋招群面模拟题及高分话术
- 2025年3D打印的器官打印
- 邮储银行2025黔东南苗族侗族自治州秋招笔试热点题型专练及答案
- 护理血站考试试题及答案
- 摩托车协议买卖合同模板
- 四川数学合格考试卷及答案
- 产后运动锻炼指导
- 模拟三力测试题及答案
- 2025年国家公务员考试行测逻辑判断100题及答案
- 秘书工作中的时间管理研究论文
- 支气管哮喘的护理个案分析
- 邮轮餐饮服务与管理 课件 1.走进邮轮
- GB/T 7019-2024纤维水泥制品试验方法
- GB/T 44808.4-2024人类工效学无障碍设计第4部分:不同年龄人群最小可辨认字符尺寸的估计方法
评论
0/150
提交评论