$PBExportHeader$uo_wfjg_waste.sru forward global type uo_wfjg_waste from nonvisualobject end type end forward global type uo_wfjg_waste from nonvisualobject end type global uo_wfjg_waste uo_wfjg_waste type variables public protectedwrite long scid =0 //分部id public protectedwrite long wasteid //进仓单表自动增量id public protectedwrite string wastecode //单据的唯一编号 public protectedwrite datetime opdate //建立时间,自动 public protectedwrite string opemp //建立操作员 public protectedwrite datetime moddate //修改时间,自动 public protectedwrite string modemp //修改操作员 public protectedwrite int flag=0 //仓库审核标志 public protectedwrite int balcflag=0 //仓库结存标志 public protectedwrite datetime auditingdate //审核时间 public protectedwrite string auditingrep //审核操作员 long relid=0 //关联id datetime waste_date //进仓发生时间 string waste_rep='' //经手人 string relcode='' //相关号码 string dscrp='' //备注 long sptid=0 //供应商id string sptname='' //供应商名称(不记帐模式使用) boolean if_getid_ture=true transaction commit_transaction //数据commit事务 s_waste inwaremx_waste[] //明细结构数组 long it_mxbt=0 //明细结构数组末指针 s_waste_spt s_waste_mx_spt[] Long it_mxbt_spt = 0 boolean it_newbegin=false //新建标志 boolean it_updatebegin=false //修改标志 end variables forward prototypes public function integer newbegin (long arg_scid, integer arg_billtype, ref string arg_msg) public function integer save (boolean arg_ifcommit, ref string arg_msg) public function integer auditing (boolean arg_ifcommit, ref string arg_msg) public function integer del (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit) public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg) public function integer p_clearmx () public function integer p_reset () public function integer p_getinfo (long arg_scid, long arg_wasteid, ref string arg_msg) public function integer updatebegin (long arg_scid, long arg_wasteid, ref string arg_msg) public function integer add_dscrp (long arg_scid, long arg_wasteid, string arg_newdescrppart, ref string arg_msg) public function integer getinfo (long arg_scid, long arg_wasteid, ref string arg_msg) public function integer acceptmx_bef (long arg_mtrlwareid, decimal arg_qty, string arg_mxdscrp, long arg_printid, ref string arg_msg) public function integer acceptmx (long arg_printid, integer arg_ifrel, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, string arg_mxdscrp, ref string arg_msg, decimal arg_jgprice, long arg_relid, long arg_orderid, string arg_plancode) end prototypes public function integer newbegin (long arg_scid, integer arg_billtype, ref string arg_msg);//==================================================================== // Function: newbegin(long arg_scid,int arg_billtype,ref string arg_msg) //-------------------------------------------------------------------- // Description: 从置对象,设定业务类型,准备建立新进仓单 //-------------------------------------------------------------------- // Arguments: // value long arg_scid // value integer arg_billtype // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.12 //-------------------------------------------------------------------- // Modify History: // //==================================================================== int rslt=1 if arg_scid < 0 then arg_msg = '请选择分部' rslt = 0 goto ext end if //if not (arg_billtype=1 or arg_billtype=2 or arg_billtype=3 or arg_billtype=4 or arg_billtype=8 or arg_billtype=9 or arg_billtype=12 or arg_billtype=15) then // rslt=0 // arg_msg='此单据类型必须为:' // arg_msg=arg_msg+'1-采购进仓[记帐模式],' // arg_msg=arg_msg+'2-采购进仓[不记帐模式],' // arg_msg=arg_msg+'3-成品进仓,' // arg_msg=arg_msg+'4-外发加工进仓,' // arg_msg=arg_msg+'8-其他进仓,' // arg_msg=arg_msg+'9-盘盈进仓,' // arg_msg=arg_msg+'12-调拨进仓' // arg_msg=arg_msg+'15-拆装进仓' // goto ext //end if p_reset() //billtype=arg_billtype scid=arg_scid it_newbegin=true it_updatebegin=false ext: if rslt=0 then p_reset() return rslt end function public function integer save (boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1,cnt = 0,i DateTime server_dt Long ls_newid String ls_sccode IF IsNull(relid) THEN relid = 0 IF IsNull(waste_rep) THEN waste_rep = '' IF IsNull(dscrp) THEN dscrp = '' IF IsNull(sptid) THEN sptid = 0 IF IsNull(sptname) THEN sptname = '' IF IsNull(relcode) THEN relcode = '' IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以提交" GOTO ext END IF SELECT Top 1 getdate() INTO :server_dt FROM u_user USING commit_transaction ; //取得系统时间,借用操作员表 IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF it_mxbt = 0 THEN rslt = 0 arg_msg = "没有明细内容" GOTO ext END IF cnt = 0 //检查供应商 SELECT count(*) INTO :cnt FROM u_spt Where u_spt.sptid = :sptid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,供应商" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "供应商资料错误!" GOTO ext END IF IF Year(Date(waste_date)) < 2000 OR IsNull(waste_date) THEN rslt = 0 arg_msg = "缺少进仓发生时间或不合理" GOTO ext END IF //==================================================================== // Script - save ( boolean arg_ifcommit, ref string arg_msg ) // Reason: //-------------------------------------------------------------------- // Modified By: yyx Date: 2004.01.02 //-------------------------------------------------------------------- IF DaysAfter(Date(String(server_dt,'yyyy-mm-dd')),Date(String(waste_date,'yyyy-mm-dd'))) > 30 THEN rslt = 0 arg_msg = '进仓日期错误,日期不能超前系统日期' GOTO ext END IF IF DaysAfter(Date(String(waste_date,'yyyy-mm-dd')),Date(String(server_dt,'yyyy-mm-dd'))) > 30 THEN rslt = 0 arg_msg = '进仓日期错误,日期不能落后系统日期' GOTO ext END IF //==================================================================== ////////////////////////////////////////////////开始区分:新建/更新 处理 IF wasteid = 0 THEN //新建 ls_newid = f_sys_scidentity(scid,"u_order_wfjg_waste","wasteid",arg_msg,if_getid_ture,commit_transaction) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF //取分部代号 IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //取得新单据编号 wastecode = getid(scid,ls_sccode + 'SH',Date(server_dt),if_getid_ture,commit_transaction) IF wastecode = "err" THEN wastecode = '' rslt = 0 arg_msg = "无法获取损耗单编号"+"~n"+commit_transaction.SQLErrText GOTO ext END IF INSERT INTO u_order_wfjg_waste ( scid, wasteid, wastecode, sptid, wastedate, assign_emp, relcode, dscrp, opemp, opdate ) VALUES ( :scid, :ls_newid, :wastecode, :sptid, :waste_date, :waste_rep, :relcode, :dscrp, :publ_operator, :server_dt ) USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 if pos(lower(commit_transaction.SQLErrText),'pk_u_order_wfjg_waste') > 0 then arg_msg = '插入操作失败,关键字分部ID、单据ID重复' elseif pos(lower(commit_transaction.SQLErrText),'ix_u_order_wfjg_waste') > 0 then arg_msg = '插入操作失败,单据编号重复' else arg_msg = "因网络或其它原因导致插入操作失败"+"~n"+commit_transaction.SQLErrText end if GOTO ext END IF //读取新inwareid wasteid = ls_newid FOR i = 1 TO it_mxbt INSERT INTO u_order_wfjg_wastemx (scid, wasteid, ifrel, printid, mtrlid, status, woodcode, pcode, qty, price, wastedscrp, wfjg_orderid, wfjg_ordercode, orderid, plancode) VALUES ( :scid, :ls_newid, :inwaremx_waste[i].ifrel, :inwaremx_waste[i].printid, :inwaremx_waste[i].mtrlid, :inwaremx_waste[i].status, :inwaremx_waste[i].woodcode, :inwaremx_waste[i].pcode, :inwaremx_waste[i].qty, :inwaremx_waste[i].jgprice, :inwaremx_waste[i].mxdscrp, :inwaremx_waste[i].relid, :inwaremx_waste[i].relcode, :inwaremx_waste[i].orderid, :inwaremx_waste[i].plancode ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN wasteid = 0 //还原inwareid rslt = 0 if pos(lower(commit_transaction.SQLErrText),'pk_u_order_wfjg_wastemx') > 0 then arg_msg = '插入计划明细操作失败,关键字分部ID、单据ID、明细ID重复' else arg_msg = "因网络或其它原因导致插入计划明细操作失败"+"~n"+commit_transaction.SQLErrText end if GOTO ext END IF NEXT FOR i = 1 TO it_mxbt_spt INSERT INTO u_order_wfjg_wasteMx_spt (scid, wasteid, mtrlwareid, mtrlid, status, woodcode, pcode, plancode, qty, fprice, printid, mxdscrp) VALUES ( :scid, :ls_newid, :s_waste_mx_spt[i].mtrlwareid, :s_waste_mx_spt[i].mtrlid, :s_waste_mx_spt[i].status, :s_waste_mx_spt[i].woodcode, :s_waste_mx_spt[i].pcode, :s_waste_mx_spt[i].plancode, :s_waste_mx_spt[i].qty, :s_waste_mx_spt[i].fprice, :s_waste_mx_spt[i].printid, :s_waste_mx_spt[i].mxdscrp ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN wasteid = 0 //还原inwareid rslt = 0 if pos(lower(commit_transaction.SQLErrText),'pk_u_order_wfjg_wastemx_spt') > 0 then arg_msg = '插入外协商明细操作失败,关键字分部ID、单据ID、明细ID重复' else arg_msg = "因网络或其它原因导致插入外协商明细操作失败"+"~n"+commit_transaction.SQLErrText end if GOTO ext END IF NEXT ELSE //////////////////////////////////////////////////更新 UPDATE u_order_wfjg_waste SET sptid = :sptid, wastedate = :waste_date, assign_emp = :waste_rep, relcode = :relcode, dscrp = :dscrp, moddate = :server_dt, modemp = :publ_operator WHERE u_order_wfjg_waste.wasteid = :wasteid AND u_order_wfjg_waste.scid = :scid AND u_order_wfjg_waste.flag = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 OR commit_transaction.SQLNRows <= 0 THEN rslt = 0 if pos(lower(commit_transaction.SQLErrText),'pk_u_order_wfjg_waste') > 0 then arg_msg = '插入操作失败,关键字分部ID、单据ID重复' elseif pos(lower(commit_transaction.SQLErrText),'ix_u_order_wfjg_waste') > 0 then arg_msg = '插入操作失败,单据编号重复' else arg_msg = "因网络或其它原因导致插入操作失败"+"~n"+commit_transaction.SQLErrText end if GOTO ext END IF //删除原有明细 DELETE FROM u_order_wfjg_wastemx WHERE u_order_wfjg_wastemx.wasteid = :wasteid AND u_order_wfjg_wastemx.scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF DELETE FROM u_order_wfjg_wastemx_spt WHERE u_order_wfjg_wastemx_spt.wasteid = :wasteid AND u_order_wfjg_wastemx_spt.scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作(外协库存)失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_order_wfjg_wastemx (scid, wasteid, ifrel, printid, mtrlid, status, woodcode, pcode, qty, price, wastedscrp, wfjg_orderid, wfjg_ordercode, orderid, plancode) VALUES ( :scid, :wasteid, :inwaremx_waste[i].ifrel, :inwaremx_waste[i].printid, :inwaremx_waste[i].mtrlid, :inwaremx_waste[i].status, :inwaremx_waste[i].woodcode, :inwaremx_waste[i].pcode, :inwaremx_waste[i].qty, :inwaremx_waste[i].jgprice, :inwaremx_waste[i].mxdscrp, :inwaremx_waste[i].relid, :inwaremx_waste[i].relcode, :inwaremx_waste[i].orderid, :inwaremx_waste[i].plancode ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 if pos(lower(commit_transaction.SQLErrText),'pk_u_order_wfjg_wastemx') > 0 then arg_msg = '插入计划明细操作失败,关键字分部ID、单据ID、明细ID重复' else arg_msg = "因网络或其它原因导致插入计划明细操作失败"+"~n"+commit_transaction.SQLErrText end if GOTO ext END IF NEXT FOR i = 1 TO it_mxbt_spt INSERT INTO u_order_wfjg_wasteMx_spt (scid, wasteid, mtrlwareid, mtrlid, status, woodcode, pcode, plancode, qty, fprice, printid, mxdscrp) VALUES ( :scid, :wasteid, :s_waste_mx_spt[i].mtrlwareid, :s_waste_mx_spt[i].mtrlid, :s_waste_mx_spt[i].status, :s_waste_mx_spt[i].woodcode, :s_waste_mx_spt[i].pcode, :s_waste_mx_spt[i].plancode, :s_waste_mx_spt[i].qty, :s_waste_mx_spt[i].fprice, :s_waste_mx_spt[i].printid, :s_waste_mx_spt[i].mxdscrp ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN wasteid = 0 //还原inwareid rslt = 0 if pos(lower(commit_transaction.SQLErrText),'pk_u_order_wfjg_wastemx_spt') > 0 then arg_msg = '插入外协商明细操作失败,关键字分部ID、单据ID、明细ID重复' else arg_msg = "因网络或其它原因导致插入外协商明细操作失败"+"~n"+commit_transaction.SQLErrText end if GOTO ext END IF NEXT END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; p_clearmx() ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF arg_msg = '外协损耗单,'+ arg_msg RETURN rslt end function public function integer auditing (boolean arg_ifcommit, ref string arg_msg); Long rslt = 1,cnt = 0,i Dec new_noallocqty = 0 Long ls_newid IF wasteid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF it_newbegin OR it_updatebegin THEN rslt = 0 arg_msg = "编辑状态下不可以执行审核" GOTO ext END IF uo_order_wfjg uo_wfjg uo_wfjg = CREATE uo_order_wfjg uo_wfjg.commit_transaction = commit_transaction IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核" GOTO ext END IF UPDATE u_order_wfjg_waste SET auditingrep = :publ_operator, auditingdate = getdate(), flag = 1 WHERE u_order_wfjg_waste.wasteid = :wasteid AND flag = 0 AND scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。" GOTO ext END IF FOR i = 1 TO it_mxbt_spt IF f_update_mtrlware_spt_in(10,& 0,& s_waste_mx_spt[i].mtrlwareid,& s_waste_mx_spt[i].mtrlid,& s_waste_mx_spt[i].mtrlcode,& s_waste_mx_spt[i].plancode,& s_waste_mx_spt[i].status,& s_waste_mx_spt[i].qty,& s_waste_mx_spt[i].fprice,& sptid,& s_waste_mx_spt[i].woodcode,& s_waste_mx_spt[i].pcode,& arg_msg,FALSE,commit_transaction) = 0 THEN rslt = 0 GOTO ext END IF NEXT FOR i = 1 TO it_mxbt if inwaremx_waste[i].relid=0 then continue IF uo_wfjg.wasteqty(scid,inwaremx_waste[i].qty,& inwaremx_waste[i].relid,& inwaremx_waste[i].mtrlid,& inwaremx_waste[i].orderid,& inwaremx_waste[i].status,& inwaremx_waste[i].woodcode,& inwaremx_waste[i].pcode,& inwaremx_waste[i].mtrlcode,& arg_msg,& FALSE) = 0 THEN rslt = 0 GOTO ext END IF IF uo_wfjg.trycmplbuytask(scid,inwaremx_waste[i].relid,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT flag = 1 ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF DESTROY uo_wfjg arg_msg = '外协损耗单,'+ arg_msg RETURN rslt end function public function integer del (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit);//del(arg_scid,arg_inwareid,arg_msg) //如果单据还没有审核删除单据极其明细 //0 fail, 1 success Int rslt = 1 IF arg_inwareid = 0 THEN rslt = 0 arg_msg = "没有删除对象,操作取消" GOTO ext END IF rslt = p_getinfo(arg_scid,arg_inwareid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核,不可以删除" GOTO ext END IF DELETE FROM u_order_wfjg_wastemx WHERE u_order_wfjg_wastemx.wasteid = :arg_inwareid AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除损耗单明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF DELETE FROM u_order_wfjg_wastemx_spt WHERE wasteid = :arg_inwareid AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除损耗单明细(外协库存)操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF DELETE FROM u_order_wfjg_waste WHERE u_order_wfjg_waste.wasteid = :arg_inwareid AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除进仓单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF p_reset() arg_msg = '外协损耗单,'+ arg_msg RETURN rslt end function public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i Dec new_noallocqty = 0 Long ls_newid DateTime null_dt SetNull(null_dt) IF wasteid = 0 THEN rslt = 0 arg_msg = "没有撤审对象" GOTO ext END IF IF it_newbegin OR it_updatebegin THEN rslt = 0 arg_msg = "编辑状态下不可以执行撤核" GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = "单据还未审核" GOTO ext END IF uo_order_wfjg uo_wfjg uo_wfjg = CREATE uo_order_wfjg uo_wfjg.commit_transaction = commit_transaction UPDATE u_order_wfjg_waste SET auditingrep = '', auditingdate = :null_dt, flag = 0 WHERE u_order_wfjg_waste.wasteid = :wasteid AND flag = 1 AND scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致撤核单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在撤审,请稍后查询。" GOTO ext END IF FOR i = 1 TO it_mxbt_spt IF f_update_mtrlware_spt_in(10,& 0,& s_waste_mx_spt[i].mtrlwareid,& s_waste_mx_spt[i].mtrlid,& s_waste_mx_spt[i].mtrlcode,& s_waste_mx_spt[i].plancode,& s_waste_mx_spt[i].status,& 0 - s_waste_mx_spt[i].qty,& s_waste_mx_spt[i].fprice,& sptid,& s_waste_mx_spt[i].woodcode,& s_waste_mx_spt[i].pcode,& arg_msg,false,commit_transaction) = 0 THEN rslt = 0 GOTO ext END IF next FOR i = 1 TO it_mxbt if inwaremx_waste[i].relid=0 then continue IF uo_wfjg.wasteqty(scid,0 - inwaremx_waste[i].qty,& inwaremx_waste[i].relid,& inwaremx_waste[i].mtrlid,& inwaremx_waste[i].orderid,& inwaremx_waste[i].status,& inwaremx_waste[i].woodcode,& inwaremx_waste[i].pcode,& inwaremx_waste[i].mtrlcode,& arg_msg,& false) = 0 THEN rslt = 0 GOTO ext END IF IF uo_wfjg.trycmplbuytask(scid,inwaremx_waste[i].relid,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT flag = 0 ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF DESTROY uo_wfjg arg_msg = '外协损耗单,'+ arg_msg RETURN rslt end function public function integer p_clearmx ();//int p_clearmx() //清除明细 it_mxbt=0 it_mxbt_spt=0 return 1 end function public function integer p_reset ();//int p_reset() //清除对象及其明细 scid=0 wasteid=0 wastecode='' opemp='' modemp='' auditingrep='' flag=0 relid=0 relcode='' waste_rep='' dscrp='' sptid=0 sptname='' it_newbegin=false it_updatebegin=false //清除明细 p_clearmx() return 1 end function public function integer p_getinfo (long arg_scid, long arg_wasteid, ref string arg_msg);//p_getinfo(arg_scid,arg_inwareid,arg_msg) //0 失败 1成功 Int rslt = 1 IF arg_wasteid <= 0 THEN rslt = 0 arG_MSG = "非法进仓单唯一码" GOTO ext END IF SELECT wastecode, sptid, wastedate, assign_emp, relcode, dscrp, flag INTO :wastecode, :sptid, :waste_date, :waste_rep, :relcode, :dscrp, :flag FROM u_order_wfjg_waste WHERE u_order_wfjg_waste.wasteid = :arg_wasteid AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 if pos(lower(commit_transaction.SQLErrText),'more than') > 0 then arg_msg = '查询单据资料操作失败,查询数据返回值多于一个' else arG_MSG = "查询操作失败(错误损耗单唯一码)" end if GOTO ext END IF wasteid = arg_wasteid scid = arg_scid ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer updatebegin (long arg_scid, long arg_wasteid, ref string arg_msg);long rslt=1 if arg_scid < 0 then arg_msg = '请选择分部' rslt = 0 goto ext end if if arg_wasteid<=0 then rslt=0 goto ext end if rslt=p_getinfo(arg_scid,arg_wasteid,arg_msg) if rslt=0 then goto ext if flag=1 then rslt=0 arg_msg='单据已经审核,不可以修改' goto ext end if wasteid=arg_wasteid scid=arg_scid it_newbegin=false it_updatebegin=true p_clearmx() //清除明细 ext: if rslt=0 then p_reset() arg_msg = '外协损耗单,'+ arg_msg return rslt end function public function integer add_dscrp (long arg_scid, long arg_wasteid, string arg_newdescrppart, ref string arg_msg);//add_dscrp(string arg_newdescppart) //0 fail 1 success Int rslt = 1 arg_newdescrppart = Trim(arg_newdescrppart) IF it_updatebegin OR it_newbegin THEN rslt = 0 arg_msg = "编辑状态下不可用" GOTO ext END IF IF arg_newdescrppart = '' THEN rslt = 0 arg_msg = "要添加内容为空,操作取消" GOTO ext END IF rslt = p_getinfo(arg_scid,arg_wasteid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 0 THEN rslt = 0 arg_msg = "非审核状态下不可用" GOTO ext END IF UPDATE u_order_wfjg_waste SET dscrp = dscrp+' '+:arg_newdescrppart WHERE u_order_wfjg_waste.wasteid = :arg_wasteid AND scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ROLLBACK USING commit_transaction; rslt = 0 arg_msg = "因网络或其它原因导致添加单据备注操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF COMMIT USING commit_transaction; dscrp = dscrp+' '+arg_newdescrppart ext: arg_msg = '外协损耗单,'+ arg_msg Return (rslt) end function public function integer getinfo (long arg_scid, long arg_wasteid, ref string arg_msg);//getinfo(arg_scid,arg_inwareid,arg_msg) //0 失败 1成功 Int rslt = 1,i = 1,j=1,no_mxcheck_bef = 0 IF arg_wasteid <= 0 THEN rslt = 0 arg_msg = "非法损耗单唯一码" GOTO ext END IF rslt = p_getinfo(arg_scid,arg_wasteid,arg_msg) IF rslt = 0 THEN GOTO ext //用游标读取明细 DECLARE cur_wastemx CURSOR FOR SELECT u_order_wfjg_wastemx.printid, u_order_wfjg_wastemx.ifrel, u_order_wfjg_wastemx.mtrlid, u_order_wfjg_wastemx.status, u_order_wfjg_wastemx.woodcode, u_order_wfjg_wastemx.pcode, u_order_wfjg_wastemx.qty, u_order_wfjg_wastemx.wastedscrp, u_order_wfjg_wastemx.price, u_order_wfjg_wastemx.wfjg_orderid, u_order_wfjg_wastemx.wfjg_ordercode, u_order_wfjg_wastemx.orderid, u_order_wfjg_wastemx.plancode FROM u_order_wfjg_wastemx,u_mtrldef WHERE u_order_wfjg_wastemx.wasteid = :arg_wasteid AND u_order_wfjg_wastemx.mtrlid = u_mtrldef.mtrlid AND u_order_wfjg_wastemx.scid = :arg_scid USING commit_transaction; OPEN cur_wastemx; FETCH cur_wastemx INTO :inwaremx_waste[i].printid,:inwaremx_waste[i].ifrel,:inwaremx_waste[i].mtrlid, :inwaremx_waste[i].status,:inwaremx_waste[i].woodcode,:inwaremx_waste[i].pcode,:inwaremx_waste[i].qty, :inwaremx_waste[i].mxdscrp,:inwaremx_waste[i].jgprice, :inwaremx_waste[i].relid, :inwaremx_waste[i].relcode,:inwaremx_waste[i].orderid,:inwaremx_waste[i].plancode; DO WHILE commit_transaction.SQLCode = 0 i++ FETCH cur_wastemx INTO :inwaremx_waste[i].printid,:inwaremx_waste[i].ifrel,:inwaremx_waste[i].mtrlid, :inwaremx_waste[i].status,:inwaremx_waste[i].woodcode,:inwaremx_waste[i].pcode,:inwaremx_waste[i].qty, :inwaremx_waste[i].mxdscrp,:inwaremx_waste[i].jgprice, :inwaremx_waste[i].relid, :inwaremx_waste[i].relcode,:inwaremx_waste[i].orderid,:inwaremx_waste[i].plancode; LOOP CLOSE cur_wastemx; //用游标读取明细 DECLARE cur_wastemx_spt CURSOR FOR SELECT u_order_wfjg_wasteMx_spt.mtrlwareid, u_order_wfjg_wasteMx_spt.printid, u_order_wfjg_wasteMx_spt.mtrlid, u_order_wfjg_wasteMx_spt.plancode, u_order_wfjg_wasteMx_spt.status, u_order_wfjg_wasteMx_spt.qty, u_order_wfjg_wasteMx_spt.fprice, u_order_wfjg_wasteMx_spt.mxdscrp, u_mtrldef.mtrlcode, u_order_wfjg_wasteMx_spt.woodcode, u_order_wfjg_wasteMx_spt.pcode, u_order_wfjg_wasteMx_spt.plancode FROM u_order_wfjg_wasteMx_spt,u_mtrldef,u_order_wfjg_waste WHERE u_order_wfjg_waste.wasteid = :arg_wasteid AND u_order_wfjg_wasteMx_spt.mtrlid = u_mtrldef.mtrlid AND u_order_wfjg_waste.scid = :arg_scid AND u_order_wfjg_waste.wasteid = u_order_wfjg_wasteMx_spt.wasteid AND u_order_wfjg_waste.scid = u_order_wfjg_wasteMx_spt.scid USING commit_transaction; OPEN cur_wastemx_spt; FETCH cur_wastemx_spt INTO :s_waste_mx_spt[j].mtrlwareid, :s_waste_mx_spt[j].printid, :s_waste_mx_spt[j].mtrlid,:s_waste_mx_spt[j].plancode, :s_waste_mx_spt[j].status,:s_waste_mx_spt[j].qty,:s_waste_mx_spt[j].fprice, :s_waste_mx_spt[j].mxdscrp, :s_waste_mx_spt[j].mtrlcode,:s_waste_mx_spt[j].woodcode, :s_waste_mx_spt[j].pcode,:s_waste_mx_spt[j].plancode; DO WHILE commit_transaction.SQLCode = 0 j++ FETCH cur_wastemx_spt INTO :s_waste_mx_spt[j].mtrlwareid, :s_waste_mx_spt[j].printid, :s_waste_mx_spt[j].mtrlid,:s_waste_mx_spt[j].plancode, :s_waste_mx_spt[j].status,:s_waste_mx_spt[j].qty,:s_waste_mx_spt[j].fprice, :s_waste_mx_spt[j].mxdscrp, :s_waste_mx_spt[j].mtrlcode,:s_waste_mx_spt[j].woodcode, :s_waste_mx_spt[j].pcode,:s_waste_mx_spt[j].plancode; LOOP CLOSE cur_wastemx_spt; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck_bef FROM u_order_wfjg_wasteMx_spt WHERE u_order_wfjg_wasteMx_spt.wasteid = :arg_wasteid AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,外协收货单相关发外明细数量" GOTO ext END IF IF j <> (no_mxcheck_bef+1) THEN rslt = 0 arg_msg = "查询操作失败,外协收货单相关发外明细" GOTO ext END IF wasteid = arg_wasteid scid = arg_scid it_mxbt = i - 1 it_mxbt_spt = j - 1 it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer acceptmx_bef (long arg_mtrlwareid, decimal arg_qty, string arg_mxdscrp, long arg_printid, ref string arg_msg);Long rslt = 1,cnt = 0,LS_i Long i_mtrlid,i_sptid String i_plancode,i_mtrlcode,i_status,i_woodcode,i_pcode Double i_cost,i_newprice Decimal i_allouseqty String ls_relcode Decimal ld_rate = 1 IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF IF IsNull(arg_mtrlwareid) THEN arg_mtrlwareid = 0 IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_qty) THEN arg_qty = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF arg_mtrlwareid = 0 OR arg_qty = 0 THEN rslt = 1 GOTO ext END IF SELECT ow_wfjgware.mtrlid, ow_wfjgware.sptid, ow_wfjgware.plancode, ow_wfjgware.status, ow_wfjgware.cost, u_mtrldef.mtrlcode, ow_wfjgware.woodcode, ow_wfjgware.pcode, ow_wfjgware.noallocqty INTO :i_mtrlid, :i_sptid, :i_plancode, :i_status, :i_cost, :i_mtrlcode, :i_woodcode, :i_pcode, :i_allouseqty FROM ow_wfjgware ,u_mtrldef WHERE ( ow_wfjgware.mtrlwareid = :arg_mtrlwareid ) AND ( ow_wfjgware.mtrlid = u_mtrldef.mtrlid ) And ( ow_wfjgware.scid = :scid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 if pos(lower(commit_transaction.SQLErrText),'more than') > 0 then arg_msg = '查询库存操作失败,查询数据返回值多于一个' else arg_msg = "查询操作失败,库存编号错误" end if GOTO ext END IF IF IsNull(i_cost) THEN i_cost = 0 IF IsNull(i_plancode) THEN i_plancode = '' IF IsNull(i_status) THEN i_status = '' IF IsNull(i_mtrlid) THEN i_mtrlid = 0 IF IsNull(i_sptid) THEN i_sptid = 0 IF IsNull(i_woodcode) THEN i_woodcode = '' IF IsNull(i_pcode) THEN i_pcode = '' IF sptid <> i_sptid THEN arg_msg = "物料:" + String(i_mtrlcode) + '所属加工商资料不对应' rslt = 0 GOTO ext END IF IF i_cost < 0 THEN //检查进仓价 rslt = 0 arg_msg = "物料:" + String(i_mtrlcode)+" 单价错误" GOTO ext END IF //写入内容 it_mxbt_spt++ s_waste_mx_spt[it_mxbt_spt].mtrlwareid = arg_mtrlwareid s_waste_mx_spt[it_mxbt_spt].mtrlid = i_mtrlid s_waste_mx_spt[it_mxbt_spt].status = i_status s_waste_mx_spt[it_mxbt_spt].qty = arg_qty s_waste_mx_spt[it_mxbt_spt].sptid = i_sptid s_waste_mx_spt[it_mxbt_spt].cost = i_cost s_waste_mx_spt[it_mxbt_spt].costamt = Round(i_cost * arg_qty,2) s_waste_mx_spt[it_mxbt_spt].plancode = i_plancode s_waste_mx_spt[it_mxbt_spt].mtrlcode = i_mtrlcode s_waste_mx_spt[it_mxbt_spt].mxdscrp = arg_mxdscrp s_waste_mx_spt[it_mxbt_spt].printid = arg_printid s_waste_mx_spt[it_mxbt_spt].fprice = i_cost s_waste_mx_spt[it_mxbt_spt].woodcode = i_woodcode s_waste_mx_spt[it_mxbt_spt].pcode = i_pcode ext: IF rslt = 0 THEN p_clearmx() arg_msg = '外协损耗单,'+ arg_msg RETURN rslt end function public function integer acceptmx (long arg_printid, integer arg_ifrel, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, string arg_mxdscrp, ref string arg_msg, decimal arg_jgprice, long arg_relid, long arg_orderid, string arg_plancode);Long rslt = 1,cnt = 0,ls_i Decimal ls_planprice String ls_relcode IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF //清除空值 IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = '' IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_woodcode) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_qty) THEN arg_qty = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF IsNull(arg_jgprice) THEN arg_jgprice = 0 IF IsNull(arg_relid) THEN arg_relid = 0 IF IsNull(arg_orderid) THEN arg_orderid = 0 IF IsNull(arg_plancode) THEN arg_plancode = '' IF arg_mtrlid = 0 OR arg_qty = 0 THEN rslt = 1 GOTO ext END IF //检查外加工计划ID IF arg_ifrel = 1 THEN SELECT count(*) INTO :cnt FROM u_order_wfjg Where u_order_wfjg.wfjgID = :arg_relid AND u_order_wfjg.scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,外加工计划编号:在编码"+String(arg_mtrlcode) GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "错误的外加工计划编号:在编码 "+String(arg_mtrlcode) GOTO ext END IF END IF cnt = 0 //检查物料id SELECT COUNT(*) INTO :cnt FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_mtrlid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,编码"+String(arg_mtrlcode) GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "错误的编码: "+String(arg_mtrlcode) GOTO ext END IF cnt = 0 IF f_check_status(1, arg_status) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能颜色未定义,编码:"+arg_mtrlcode+",颜色:"+arg_status GOTO ext END IF //检查外加工计划明细,该物料记录是否存在 IF arg_relid = 0 AND arg_ifrel = 1 THEN arg_msg = '请先择相应的加工计划' rslt = 0 GOTO ext END IF IF arg_ifrel = 1 THEN SELECT taskcode INTO :ls_relcode FROM u_order_wfjgmx,u_order_wfjg WHERE u_order_wfjgmx.wfjgid = :arg_relid AND u_order_wfjgmx.mtrlid = :arg_mtrlid AND u_order_wfjgmx.wfjgid = u_order_wfjg.wfjgid AND u_order_wfjgmx.scid = u_order_wfjg.scid AND u_order_wfjgmx.scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询加工计划是否有加工产品:'+arg_mtrlcode+'失败' rslt = 0 GOTO ext END IF IF ls_relcode = '' THEN rslt = 0 arg_msg = "错误的外加工产品编码 " GOTO ext END IF END IF //写入内容 it_mxbt++ inwaremx_waste[it_mxbt].printid = arg_printid inwaremx_waste[it_mxbt].mtrlid = arg_mtrlid inwaremx_waste[it_mxbt].status = arg_status inwaremx_waste[it_mxbt].woodcode = arg_woodcode inwaremx_waste[it_mxbt].pcode = arg_pcode inwaremx_waste[it_mxbt].qty = arg_qty inwaremx_waste[it_mxbt].mxdscrp = arg_mxdscrp inwaremx_waste[it_mxbt].jgprice = arg_jgprice inwaremx_waste[it_mxbt].relid = arg_relid inwaremx_waste[it_mxbt].relcode = ls_relcode inwaremx_waste[it_mxbt].orderid = arg_orderid //生产计划ID inwaremx_waste[it_mxbt].ifrel = arg_ifrel inwaremx_waste[it_mxbt].plancode = arg_plancode ext: IF rslt = 0 THEN p_clearmx() arg_msg = '外协损耗单,'+ arg_msg RETURN(rslt) end function on uo_wfjg_waste.create call super::create TriggerEvent( this, "constructor" ) end on on uo_wfjg_waste.destroy TriggerEvent( this, "destructor" ) call super::destroy end on