$PBExportHeader$uo_update_cost_wfjg.sru forward global type uo_update_cost_wfjg from nonvisualobject end type end forward global type uo_update_cost_wfjg from nonvisualobject end type global uo_update_cost_wfjg uo_update_cost_wfjg type variables PUBLIC PROTECTEDWRITE Long billid PUBLIC PROTECTEDWRITE string billcode PUBLIC PROTECTEDWRITE datetime opdate PUBLIC PROTECTEDWRITE datetime moddate PUBLIC PROTECTEDWRITE datetime auditingdate PUBLIC PROTECTEDWRITE string opemp PUBLIC PROTECTEDWRITE string modemp PUBLIC PROTECTEDWRITE string auditingrep PUBLIC PROTECTEDWRITE int flag int sptid string relcode string dscrp datetime billdate string rep s_updatecostmx_wfjg s_mx[] Boolean if_getid_ture = TRUE Transaction commit_transaction //数据commit事务 Long it_mxbt = 0 //明细结构数组末指针 Boolean it_newbegin = FALSE //新建标志 Boolean it_updatebegin = FALSE //修改标志 end variables forward prototypes public function integer acceptmx (long arg_printid, long arg_mtrlwareid, string arg_mtrlcode, decimal arg_newcost, string arg_mxdscrp, ref string arg_msg) public function integer p_clearmx () public function integer p_reset () public function integer newbegin () public function integer p_getinfo (long arg_billid, ref string arg_msg) public function integer updatebegin (long arg_billid, ref string arg_msg) public function integer getinfo (long arg_billid, ref string arg_msg) public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer save (boolean arg_ifcommit, ref string arg_msg) public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg) public function integer auditing (long arg_billid, boolean arg_ifcommit, ref string arg_msg) end prototypes public function integer acceptmx (long arg_printid, long arg_mtrlwareid, string arg_mtrlcode, decimal arg_newcost, string arg_mxdscrp, ref string arg_msg);Long rslt = 1,cnt = 0 IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF Long i_mtrlid,i_sptid,i_scid String i_plancode,i_status,i_woodcode,i_pcode Decimal i_cost,i_noallocqty IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = '' IF IsNull(arg_mtrlwareid) THEN arg_mtrlwareid = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF IsNull(arg_newcost) THEN arg_newcost = 0 IF arg_mtrlwareid <= 0 THEN rslt = 0 GOTO ext END IF SELECT mtrlid, status, woodcode, pcode, sptid, noallocqty, plancode, cost, scid INTO :i_mtrlid, :i_status, :i_woodcode, :i_pcode, :i_sptid, :i_noallocqty, :i_plancode, :i_cost, :i_scid FROM ow_wfjgware WHERE mtrlwareid = :arg_mtrlwareid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询物料:"+arg_mtrlcode+"外协商库存资料失败,"+commit_transaction.SQLErrText GOTO ext END IF IF i_sptid <> sptid THEN arg_msg = '外协商资料与明细库存所属外协商不相符' rslt = 0 GOTO ext END IF it_mxbt++ s_mx[it_mxbt].printid = arg_printid s_mx[it_mxbt].mtrlwarescid = i_scid s_mx[it_mxbt].mtrlwareid = arg_mtrlwareid s_mx[it_mxbt].mtrlid = i_mtrlid s_mx[it_mxbt].sptid = i_sptid s_mx[it_mxbt].status = i_status s_mx[it_mxbt].woodcode = i_woodcode s_mx[it_mxbt].pcode = i_pcode s_mx[it_mxbt].plancode = i_plancode s_mx[it_mxbt].noallocqty = i_noallocqty s_mx[it_mxbt].cost = i_cost s_mx[it_mxbt].mxdscrp = arg_mxdscrp s_mx[it_mxbt].newcost = arg_newcost ext: IF rslt = 0 THEN p_clearmx() Return(rslt) end function public function integer p_clearmx ();it_mxbt=0 return 1 end function public function integer p_reset ();billid = 0 billcode = '' opemp = '' modemp = '' auditingrep = '' flag = 0 sptid = 0 rep = '' relcode = '' dscrp = '' it_newbegin = FALSE it_updatebegin = FALSE //清除明细 p_clearmx() RETURN 1 end function public function integer newbegin ();Int rslt = 1 p_reset() it_newbegin = TRUE it_updatebegin = FALSE RETURN rslt end function public function integer p_getinfo (long arg_billid, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arG_MSG = "非法单据唯一码" GOTO ext END IF SELECT billid, billcode, sptid, relcode, dscrp, billdate, rep, opdate, moddate, auditingdate, opemp, modemp, auditingrep, flag INTO :billid, :billcode, :sptid, :relcode, :dscrp, :billdate, :rep, :opdate, :moddate, :auditingdate, :opemp, :modemp, :auditingrep, :flag FROM u_updatecost_wfjg Where billid = :arg_billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询操作失败(错误单据唯一码)"+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer updatebegin (long arg_billid, ref string arg_msg);Long rslt = 1 IF arg_billid <= 0 THEN rslt = 0 GOTO ext END IF rslt = p_getinfo(arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改' GOTO ext END IF billid = arg_billid it_newbegin = FALSE it_updatebegin = TRUE p_clearmx() //清除明细 ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer getinfo (long arg_billid, ref string arg_msg);Int rslt = 1,i = 1,no_mxcheck = 0 IF arg_billid <= 0 THEN rslt = 0 arg_msg = "非法单据唯一码" GOTO ext END IF rslt = p_getinfo(arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext DECLARE cur_mx CURSOR FOR SELECT u_updatecostmx_wfjg.printid, u_updatecostmx_wfjg.mtrlwarescid, u_updatecostmx_wfjg.mtrlwareid, u_updatecostmx_wfjg.mtrlid, u_updatecostmx_wfjg.status, u_updatecostmx_wfjg.woodcode, u_updatecostmx_wfjg.pcode, u_updatecostmx_wfjg.sptid, u_updatecostmx_wfjg.plancode, u_updatecostmx_wfjg.noallocqty, u_updatecostmx_wfjg.cost, u_updatecostmx_wfjg.newcost, u_updatecostmx_wfjg.mxdscrp, u_mtrldef.mtrlcode, u_mtrldef.unit FROM u_updatecostmx_wfjg INNER JOIN u_mtrldef ON u_updatecostmx_wfjg.mtrlid = u_mtrldef.mtrlid WHERE u_updatecostmx_wfjg.billid = :arg_billid USING commit_transaction; OPEN cur_mx; FETCH cur_mx INTO :s_mx[i].printid, :s_mx[i].mtrlwarescid, :s_mx[i].mtrlwareid, :s_mx[i].mtrlid, :s_mx[i].status, :s_mx[i].woodcode, :s_mx[i].pcode, :s_mx[i].sptid, :s_mx[i].plancode, :s_mx[i].noallocqty, :s_mx[i].cost, :s_mx[i].newcost, :s_mx[i].mxdscrp, :s_mx[i].mtrlcode, :s_mx[i].unit; DO WHILE commit_transaction.SQLCode = 0 i++ FETCH cur_mx INTO :s_mx[i].printid, :s_mx[i].mtrlwarescid, :s_mx[i].mtrlwareid, :s_mx[i].mtrlid, :s_mx[i].status, :s_mx[i].woodcode, :s_mx[i].pcode, :s_mx[i].sptid, :s_mx[i].plancode, :s_mx[i].noallocqty, :s_mx[i].cost, :s_mx[i].newcost, :s_mx[i].mxdscrp, :s_mx[i].mtrlcode, :s_mx[i].unit; LOOP CLOSE cur_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_updatecostmx_wfjg WHERE billid = :arg_billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,单据明细数量" GOTO ext END IF IF i <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,单据明细" GOTO ext END IF billid = arg_billid it_mxbt = i - 1 it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);//del(arg_scid,arg_inwareid,arg_msg) //如果单据还没有审核删除单据极其明细 //0 fail, 1 success Int rslt = 1 IF arg_billid = 0 THEN rslt = 0 arg_msg = "没有删除对象,操作取消" GOTO ext END IF rslt = p_getinfo(arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核,不可以删除" GOTO ext END IF DELETE FROM u_updatecostmx_wfjg WHERE u_updatecostmx_wfjg.billid = :arg_billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除外协商库存成本价调整单明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF DELETE FROM u_updatecost_wfjg WHERE u_updatecost_wfjg.billid = :arg_billid 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() 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(sptid) THEN sptid = 0 IF IsNull(relcode) THEN relcode = '' IF IsNull(dscrp) THEN dscrp = '' IF IsNull(rep) THEN rep = '' 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 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 = "错误的外协商唯一码: "+String(sptid) GOTO ext END IF IF Year(Date(billdate)) < 2000 OR IsNull(billdate) THEN rslt = 0 arg_msg = "缺少更新发生时间或不合理" GOTO ext END IF IF billid = 0 THEN ls_newid = f_sys_scidentity(0,"u_updatecost_wfjg","billid",arg_msg,TRUE,id_sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF //取分部代号 IF f_get_sccode(0,commit_transaction,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF billcode = getid(0,ls_sccode + 'FC',Date(server_dt),if_getid_ture,commit_transaction) IF billcode = "err" THEN billcode = '' rslt = 0 arg_msg = "无法获取单据编号"+"~n"+commit_transaction.SQLErrText GOTO ext END IF INSERT INTO u_updatecost_wfjg (billid, billcode, sptid, relcode, dscrp, billdate, rep, opdate, opemp) VALUES (:ls_newid, :billcode, :sptid, :relcode, :dscrp, :billdate, :rep, :server_dt, :publ_operator) USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF billid = ls_newid FOR i = 1 TO it_mxbt INSERT INTO u_updatecostmx_wfjg (billid, printid, mtrlwarescid, mtrlwareid, mtrlid, status, woodcode, pcode, sptid, plancode, noallocqty, cost, newcost, mxdscrp) VALUES (:ls_newid, :s_mx[i].printid, :s_mx[i].mtrlwarescid, :s_mx[i].mtrlwareid, :s_mx[i].mtrlid, :s_mx[i].status, :s_mx[i].woodcode, :s_mx[i].pcode, :s_mx[i].sptid, :s_mx[i].plancode, :s_mx[i].noallocqty, :s_mx[i].cost, :s_mx[i].newcost, :s_mx[i].mxdscrp) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN billid = 0 rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT ELSE UPDATE u_updatecost_wfjg SET sptid = :sptid, billdate = :billdate, relcode = :relcode, rep = :rep, dscrp = :dscrp, moddate = :server_dt, modemp = :publ_operator WHERE billid = :billid AND flag = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 OR commit_transaction.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM u_updatecostmx_wfjg WHERE billid = :billid 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_updatecostmx_wfjg (billid, printid, mtrlwarescid, mtrlwareid, mtrlid, status, woodcode, pcode, sptid, plancode, noallocqty, cost, newcost, mxdscrp) VALUES (:billid, :s_mx[i].printid, :s_mx[i].mtrlwarescid, :s_mx[i].mtrlwareid, :s_mx[i].mtrlid, :s_mx[i].status, :s_mx[i].woodcode, :s_mx[i].pcode, :s_mx[i].sptid, :s_mx[i].plancode, :s_mx[i].noallocqty, :s_mx[i].cost, :s_mx[i].newcost, :s_mx[i].mxdscrp) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN billid = 0 rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText 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 RETURN rslt end function public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg); Int rslt = 1 arg_newdescppart = Trim(arg_newdescppart) IF it_updatebegin OR it_newbegin THEN rslt = 0 arg_msg = "编辑状态下不可用" GOTO ext END IF IF arg_newdescppart = '' THEN rslt = 0 arg_msg = "要添加内容为空,操作取消" GOTO ext END IF rslt = p_getinfo(arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 0 THEN rslt = 0 arg_msg = "非审核状态下不可用" GOTO ext END IF UPDATE u_updatecost_wfjg SET dscrp = dscrp+' '+:arg_newdescppart WHERE billid = :arg_billid 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_newdescppart ext: Return (rslt) end function public function integer auditing (long arg_billid, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 ,cnt = 0 ,i long ll_printid IF arg_billid <= 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核" GOTO ext END IF UPDATE u_updatecost_wfjg SET auditingrep = :publ_operator, auditingdate = getdate(), flag = 1 WHERE billid = :arg_billid AND flag = 0 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 = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF uo_wfjg_py uo_ware,uo_ware_in uo_ware = CREATE uo_wfjg_py uo_ware.commit_transaction = sqlca uo_ware.if_getid_ture = false uo_ware_in = CREATE uo_wfjg_py uo_ware_in.commit_transaction = sqlca uo_ware_in.if_getid_ture = false //生成外协库存进仓单(负) IF uo_ware.newbegin(0,9,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_ware.outdate = billdate uo_ware.outrep = rep uo_ware.dscrp = "库存成本价调整单审核自动生成" uo_ware.sptid = sptid uo_ware.part = relcode //负 FOR i = 1 TO it_mxbt IF s_mx[i].mtrlwareid > 0 AND s_mx[i].noallocqty <> 0 THEN ll_printid++ IF uo_ware.acceptmx(0,& 0 - s_mx[i].noallocqty,& s_mx[i].unit,& 0 - s_mx[i].noallocqty,& s_mx[i].mxdscrp,& ll_printid,& arg_msg,& 0,& 0,& s_mx[i].mtrlid,& 0,& 0,& s_mx[i].plancode,& s_mx[i].mtrlcode,& s_mx[i].status,& s_mx[i].woodcode,& s_mx[i].pcode,& s_mx[i].cost,& 1,& 0,& 1,'','') = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT //正 FOR i = 1 TO it_mxbt IF s_mx[i].mtrlwareid > 0 AND s_mx[i].noallocqty <> 0 THEN ll_printid++ IF uo_ware.acceptmx(0,& s_mx[i].noallocqty,& s_mx[i].unit,& s_mx[i].noallocqty,& s_mx[i].mxdscrp,& ll_printid,& arg_msg,& 0,& 0,& s_mx[i].mtrlid,& 0,& 0,& s_mx[i].plancode,& s_mx[i].mtrlcode,& s_mx[i].status,& s_mx[i].woodcode,& s_mx[i].pcode,& s_mx[i].newcost,& 1,& 0,& 1,'','') = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT IF uo_ware.it_mxbt > 0 THEN IF uo_ware.Save(FALSE,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware.getinfo(uo_ware.scid,uo_ware.outwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware.auditing(FALSE,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF DESTROY uo_ware ////生成外协库存进仓单(正) //IF uo_ware_in.newbegin(0,9,arg_msg) = 0 THEN // rslt = 0 // GOTO ext //END IF // //uo_ware_in.outdate = billdate //uo_ware_in.outrep = rep //uo_ware_in.dscrp = "库存成本价调整单审核自动生成" // //uo_ware_in.sptid = sptid //uo_ware_in.part = relcode // //FOR i = 1 TO it_mxbt // IF s_mx[i].mtrlwareid > 0 AND s_mx[i].noallocqty <> 0 THEN // // IF uo_ware_in.acceptmx(0,& // s_mx[i].noallocqty,& // s_mx[i].unit,& // s_mx[i].noallocqty,& // s_mx[i].mxdscrp,& // s_mx[i].printid,& // arg_msg,& // 0,& // 0,& // s_mx[i].mtrlid,& // 0,& // 0,& // s_mx[i].plancode,& // s_mx[i].mtrlcode,& // s_mx[i].status,& // s_mx[i].woodcode,& // s_mx[i].pcode,& // s_mx[i].newcost,& // 1,& // 0,& // 1,'','') = 0 THEN // rslt = 0 // GOTO ext // END IF // END IF // //NEXT // //IF uo_ware_in.it_mxbt > 0 THEN // IF uo_ware_in.Save(FALSE,arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF // // IF uo_ware_in.getinfo(uo_ware_in.scid,uo_ware_in.outwareid,arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF // // IF uo_ware_in.auditing(FALSE,arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF //END IF DESTROY uo_ware_in flag = 1 ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function on uo_update_cost_wfjg.create call super::create TriggerEvent( this, "constructor" ) end on on uo_update_cost_wfjg.destroy TriggerEvent( this, "destructor" ) call super::destroy end on