$PBExportHeader$uo_saletaskmx_change.sru forward global type uo_saletaskmx_change from nonvisualobject end type end forward global type uo_saletaskmx_change from nonvisualobject end type global uo_saletaskmx_change uo_saletaskmx_change type variables Long uo_billid String uo_billcode end variables forward prototypes public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer updatebegin (long arg_billid, ref string arg_msg) public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer save (s_saletaskmx_change arg_s_change, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_billid, ref s_saletaskmx_changemx arg_ref_changemx[], ref long arg_arr_cnt, ref string arg_msg) public function integer p_getflag (long arg_billid, ref s_saletaskmx_change arg_s_change, ref string arg_msg) public function integer affirm (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer caffirm (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);int rslt = 1 long ll_flag if arg_billid <= 0 then rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF s_saletaskmx_change arg_change IF p_getflag(arg_billid,arg_change,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF if arg_change.affirmflag <> 0 then rslt = 0 arg_msg = '单据不是在待审核状态,不能删除' GOTO ext END IF if arg_change.flag <> 0 then rslt = 0 arg_msg = '单据不是在待审核状态,不能删除' GOTO ext END IF DELETE FROM u_saletaskmx_changemx WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_saletaskmx_change WHERE billid = :arg_billid AND flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1 long li_flag IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF s_saletaskmx_change arg_change IF p_getflag(arg_billid,arg_change,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_change.flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改,要修改请先撤销审核' GOTO ext END IF IF arg_change.affirmflag = 1 THEN rslt = 0 ARG_MSG = '单据已经初审,不可以修改,要修改请先撤销审核' GOTO ext END IF ext: RETURN rslt end function public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flag Long ll_mtrlid,cnt,ll_cnt Int li_ordertype_mtrl,li_statusflag,li_ifpackpro String ls_ordercode,ls_ordercode_str If arg_billid <= 0 Then rslt = 0 ARG_MSG = '错误单据唯一码' Goto ext End If s_saletaskmx_change arg_change If p_getflag(arg_billid,arg_change,ARG_MSG) = 0 Then rslt = 0 Goto ext End If If f_aps_mrp_cklock(arg_change.scid,ARG_MSG) = 0 Then rslt = 0 Goto ext End If s_saletaskmx_changemx arg_changmx[] Long it_max,i If getinfo(arg_billid,arg_changmx,it_max,ARG_MSG) = 0 Then rslt = 0 Goto ext End If If arg_change.affirmflag <> 1 Then rslt = 0 ARG_MSG = '单据没有初审,不可以终审' Goto ext End If If arg_change.flag <> 0 Then rslt = 0 ARG_MSG = '单据不是在待审核状态,不可以再审' Goto ext End If //dyy2014-07-26 检查明细,如果没有主计划的明细,检查订单是否已下生产计划,如果是,要求用户修改单据,重新生成明细 cnt = 0 For i = 1 To it_max If arg_changmx[i].mxtype = 0 Then cnt++ End If Next //明细没有主计划类型,检查实际是否存在订单相关的主生产计划 If cnt = 0 Then Select count(*) Into :ll_cnt From u_Order_ml Where u_Order_ml.scid = :arg_change.scid And u_Order_ml.taskid = :arg_change.taskid And u_Order_ml.taskmxid = :arg_change.printid And u_Order_ml.ordertype <> 4 ; If sqlca.SQLCode <> 0 Then ARG_MSG = '查询订单明细是否已有主生产计划失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If ll_cnt > 0 Then rslt = 0 ARG_MSG = '订单明细已有生产计划,单据明细没有生产计划类型的明细,请修改单据,执行单据功能-重新生成明细功能' Goto ext End If End If // //yyx2013-7-29 cnt = 0 Select count(*) Into :cnt From u_mtrlware_assign Where u_mtrlware_assign.assigntype = 1 And u_mtrlware_assign.scid = :arg_change.scid And u_mtrlware_assign.Relbillid = :arg_change.taskid And u_mtrlware_assign.Relprintid = :arg_change.printid; If sqlca.SQLCode <> 0 Then ARG_MSG = '查询订单明细是否已有库存分配失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then ARG_MSG = '订单明细已有库存分配,操作取消,如需变更,请先取消库存分配' rslt = 0 Goto ext End If //yyx2013-7-29_end Update u_SaleTaskMx Set status = :arg_change.newstatus, pcode = :arg_change.newpcode, woodcode = :arg_change.newwoodcode, mxdscrp = :arg_change.newmxdscrp, mxdscrp2 = :arg_change.newmxdscrp2, changedscrp = :arg_change.billcode Where u_SaleTaskMx.scid = :arg_change.scid And u_SaleTaskMx.taskid = :arg_change.taskid And u_SaleTaskMx.printid = :arg_change.printid ; If sqlca.SQLCode <> 0 Then rslt = 0 ARG_MSG = "因网络或其它原因导致更新销售订单明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Select u_SaleTaskMx.mtrlid,u_mtrldef.ordertype,u_mtrldef.statusflag,u_mtrldef.ifpackpro Into :ll_mtrlid,:li_ordertype_mtrl,:li_statusflag,:li_ifpackpro From u_SaleTaskMx,u_mtrldef Where u_SaleTaskMx.mtrlid = u_mtrldef.mtrlid And u_SaleTaskMx.scid = :arg_change.scid And u_SaleTaskMx.taskid = :arg_change.taskid And u_SaleTaskMx.printid = :arg_change.printid ; If sqlca.SQLCode <> 0 Then rslt = 0 ARG_MSG = "因网络或其它原因导致更新销售订单明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If //检查生产计划/指令单是否已开条码生成单,有则要求作废 cnt = 0 For i = 1 To it_max If arg_changmx[i].mxtype = 0 Or arg_changmx[i].mxtype = 1 Then Select count(*) Into :ll_cnt From u_getbar Inner JOIN u_mtrlware_mx ON u_getbar.getbarid = u_mtrlware_mx.getbarid Where u_getbar.scid = :arg_changmx[i].scid And u_getbar.orderid = :arg_changmx[i].orderid And u_getbar.ifrel = 1 And u_mtrlware_mx.isuse = 1; If sqlca.SQLCode <> 0 Then rslt = 0 ARG_MSG = '查询明细生产计划/指令单是否已开条码生成单失败,'+sqlca.SQLErrText Goto ext End If If ll_cnt > 0 Then Select ordercode Into :ls_ordercode From u_order_ml Where scid = :arg_changmx[i].scid And orderid = :arg_changmx[i].orderid; If sqlca.SQLCode <> 0 Then rslt = 0 ARG_MSG = '第'+String(i)+'行,查询明细生产计划/指令单信息失败,'+sqlca.SQLErrText Goto ext End If cnt = cnt + ll_cnt ls_ordercode_str = ls_ordercode+ ',' + ls_ordercode_str End If End If Next If cnt > 0 Then rslt = 0 ARG_MSG = '相关生产计划/指令单已开条码生成单,请先作废,单号:'+ls_ordercode_str Goto ext End If For i = 1 To it_max If arg_changmx[i].mxtype = 2 Then //申购 Update u_requestbuymx Set status = :arg_change.newstatus, woodcode = :arg_change.newwoodcode, pcode = :arg_change.newpcode, mxdscrp = :arg_changmx[i].newdscrp Where scid = :arg_changmx[i].scid And requestbuyid = :arg_changmx[i].orderid And printid = :arg_changmx[i].Relprintid; ElseIf arg_changmx[i].mxtype = 3 Then //采购 Update u_buyTaskMx Set status = :arg_change.newstatus, woodcode = :arg_change.newwoodcode, pcode = :arg_change.newpcode, dscrp = :arg_changmx[i].newdscrp Where scid = :arg_changmx[i].scid And taskid = :arg_changmx[i].orderid And printid = :arg_changmx[i].Relprintid; Else If li_statusflag = 2 And li_ifpackpro = 4 Then Update u_Order_ml Set woodcode = :arg_change.newwoodcode, pcode = :arg_change.newpcode, dscrp = :arg_changmx[i].newdscrp, thdscrp = :arg_changmx[i].newthdscrp, secdscrp = :arg_changmx[i].newsecdscrp, changedscrp = :arg_change.billcode Where scid = :arg_changmx[i].scid And orderid = :arg_changmx[i].orderid; Else Update u_Order_ml Set status_mode = :arg_change.newstatus, woodcode = :arg_change.newwoodcode, pcode = :arg_change.newpcode, dscrp = :arg_changmx[i].newdscrp, thdscrp = :arg_changmx[i].newthdscrp, secdscrp = :arg_changmx[i].newsecdscrp, changedscrp = :arg_change.billcode Where scid = :arg_changmx[i].scid And orderid = :arg_changmx[i].orderid; End If End If If sqlca.SQLCode <> 0 Then rslt = 0 If arg_changmx[i].mxtype = 2 Then //申购 ARG_MSG = "因网络或其它原因导致更新成品申购单操作失败"+"~n"+sqlca.SQLErrText ElseIf arg_changmx[i].mxtype = 3 Then //采购 ARG_MSG = "因网络或其它原因导致更新成品采购订单单操作失败"+"~n"+sqlca.SQLErrText Else ARG_MSG = "因网络或其它原因导致更新主计划/排产指令操作失败"+"~n"+sqlca.SQLErrText End If Goto ext End If If arg_changmx[i].mxtype = 0 Then Update u_OrderRqMtrl Set status = :arg_change.newstatus, pcode = :arg_change.newpcode, woodcode = :arg_change.newwoodcode Where scid = :arg_changmx[i].scid And orderid = :arg_changmx[i].orderid And mtrlid = :ll_mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 ARG_MSG = "因网络或其它原因导致更新生产计划用料需求操作失败"+"~n"+sqlca.SQLErrText Goto ext // ELSE // IF li_ordertype_mtrl = 1 THEN // IF sqlca.SQLNRows = 0 THEN // rslt = 0 // ARG_MSG = "订单产品为分离排产产品,更新主生产计划分离排产自制需求0行,请检查(可能主生产计划未计算用料)" // GOTO ext // END IF // END IF End If End If Next //更新审核标记 Update u_saletaskmx_change Set auditemp = :arg_opemp, auditdate = getdate(), flag = 1 Where billid = :arg_billid And flag = 0; If sqlca.SQLCode <> 0 Then rslt = 0 ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText Goto ext End If ext: If rslt = 0 Then Rollback; ElseIf rslt = 1 And arg_ifcommit Then Commit; End If Return rslt end function public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flag DateTime null_dt SetNull(null_dt) IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF s_saletaskmx_change arg_change IF p_getflag(arg_billid,arg_change,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF f_aps_mrp_cklock(arg_change.scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_change.flag <> 1 THEN rslt = 0 ARG_MSG = '单据不是在审核状态,不可以撤审' GOTO ext END IF //更新审核标记 UPDATE u_saletaskmx_change SET auditemp = '', auditdate = :null_dt, flag = 0 Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致单据撤审操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer save (s_saletaskmx_change arg_s_change, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0 DateTime server_dt Decimal ld_saletaskmx_mqty Long ll_billid,it_mxbt,i Int li_ordertype_mtrl String ls_sccode,ls_billcode IF IsNull(arg_s_change.scid) THEN arg_s_change.scid = 0 IF IsNull(arg_s_change.billid) THEN arg_s_change.billid = 0 IF IsNull(arg_s_change.rep) THEN arg_s_change.rep = '' IF IsNull(arg_s_change.relcode) THEN arg_s_change.relcode = '' IF IsNull(arg_s_change.taskid) THEN arg_s_change.taskid = 0 IF IsNull(arg_s_change.printid) THEN arg_s_change.printid = 0 IF IsNull(arg_s_change.oldstatus) THEN arg_s_change.oldstatus = '' IF IsNull(arg_s_change.oldwoodcode) THEN arg_s_change.oldwoodcode = '' IF IsNull(arg_s_change.oldpcode) THEN arg_s_change.oldpcode = '' IF IsNull(arg_s_change.oldmxdscrp) THEN arg_s_change.oldmxdscrp = '' IF IsNull(arg_s_change.oldmxdscrp2) THEN arg_s_change.oldmxdscrp2 = '' IF IsNull(arg_s_change.newstatus) THEN arg_s_change.newstatus = '' IF IsNull(arg_s_change.newwoodcode) THEN arg_s_change.newwoodcode = '' IF IsNull(arg_s_change.newpcode) THEN arg_s_change.newpcode = '' IF IsNull(arg_s_change.newmxdscrp) THEN arg_s_change.newmxdscrp = '' IF IsNull(arg_s_change.newmxdscrp2) THEN arg_s_change.newmxdscrp2 = '' IF IsNull(arg_s_change.dscrp) THEN arg_s_change.dscrp = '' IF arg_s_change.rep = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF IF arg_s_change.taskid = 0 THEN arg_msg = '请选择订单明细' rslt = 0 GOTO ext END IF SELECT Top 1 getdate() Into :server_dt From u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF it_mxbt = UpperBound(arg_s_change.arg_s_changemx) SELECT u_saletaskmx.mqty,u_mtrldef.ordertype INTO :ld_saletaskmx_mqty,:li_ordertype_mtrl FROM u_saletaskmx,u_mtrldef WHERE u_saletaskmx.mtrlid = u_mtrldef.mtrlid AND u_saletaskmx.scid = :arg_s_change.scid AND u_saletaskmx.taskid = :arg_s_change.taskid And u_saletaskmx.printid = :arg_s_change.printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询订单明细调度是否调库存失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //IF ld_saletaskmx_mqty = 0 THEN // IF it_mxbt <= 0 THEN // rslt = 0 // arg_msg = "没有正确明细内容" // GOTO ext // END IF //END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_mtrlware_assign WHERE u_mtrlware_assign.assigntype = 1 AND u_mtrlware_assign.scid = :arg_s_change.scid AND u_mtrlware_assign.Relbillid = :arg_s_change.taskid And u_mtrlware_assign.Relprintid = :arg_s_change.printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询订单明细是否已有库存分配失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '订单明细已有库存分配,操作取消,如需变更,请先取消库存分配' rslt = 0 GOTO ext END IF //IF li_ordertype_mtrl = 1 THEN // FOR i = 1 To it_mxbt // IF arg_s_change.arg_s_changemx[i].mxtype = 0 THEN // cnt = 0 // SELECT count(*) INTO :cnt // FROM u_OrderRqMtrl_tree // WHERE u_OrderRqMtrl_tree.scid = :arg_s_change.scid // And u_OrderRqMtrl_tree = :arg_s_change.arg_s_changemx[i].orderid; // IF sqlca.SQLCode <> 0 THEN // arg_msg = '查询主生产计划是否已运算失败,'+sqlca.SQLErrText // rslt = 0 // GOTO ext // END IF // // IF cnt = 0 THEN // arg_msg = '主生产计划未运算,请检查' // rslt = 0 // GOTO ext // END IF // END IF // NEXT //END IF IF arg_s_change.billid = 0 THEN ll_billid = f_sys_scidentity(0,"u_saletaskmx_change","billid",arg_msg,True,id_sqlca) IF ll_billid <= 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(arg_s_change.scid,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ls_billcode = getid(arg_s_change.scid,ls_sccode + 'XC',Date(server_dt),False,sqlca) IF ls_billcode = "err" THEN rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_saletaskmx_change ( scid, Billid, billcode, billdate, rep, relcode, taskid, printid, oldstatus, oldwoodcode, oldpcode, oldmxdscrp, oldmxdscrp2, newstatus, newwoodcode, newpcode, newmxdscrp, newmxdscrp2, opemp, opdate, dscrp) VALUES ( :arg_s_change.scid, :ll_billid, :ls_billcode, :arg_s_change.billdate, :arg_s_change.rep, :arg_s_change.relcode, :arg_s_change.taskid, :arg_s_change.printid, :arg_s_change.oldstatus, :arg_s_change.oldwoodcode, :arg_s_change.oldpcode, :arg_s_change.oldmxdscrp, :arg_s_change.oldmxdscrp2, :arg_s_change.newstatus, :arg_s_change.newwoodcode, :arg_s_change.newpcode, :arg_s_change.newmxdscrp, :arg_s_change.newmxdscrp2, :arg_opemp, getdate(), :arg_s_change.dscrp) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 To it_mxbt INSERT INTO u_saletaskmx_changemx ( billid, printid, mxtype, orderid, olddscrp, oldsecdscrp, oldthdscrp, newdscrp, newsecdscrp, newthdscrp, relprintid, scid) VALUES ( :ll_billid, :arg_s_change.arg_s_changemx[i].printid, :arg_s_change.arg_s_changemx[i].mxtype, :arg_s_change.arg_s_changemx[i].orderid, :arg_s_change.arg_s_changemx[i].olddscrp, :arg_s_change.arg_s_changemx[i].oldsecdscrp, :arg_s_change.arg_s_changemx[i].oldthdscrp, :arg_s_change.arg_s_changemx[i].newdscrp, :arg_s_change.arg_s_changemx[i].newsecdscrp, :arg_s_change.arg_s_changemx[i].newthdscrp, :arg_s_change.arg_s_changemx[i].relprintid, :arg_s_change.scid ) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT uo_billid = ll_billid uo_billcode = ls_billcode ELSE UPDATE u_saletaskmx_change SET scid = :arg_s_change.scid, billdate = :arg_s_change.billdate, rep = :arg_s_change.rep, relcode = :arg_s_change.relcode, taskid = :arg_s_change.taskid, printid = :arg_s_change.printid, oldstatus = :arg_s_change.oldstatus, oldwoodcode = :arg_s_change.oldwoodcode, oldpcode = :arg_s_change.oldpcode, oldmxdscrp = :arg_s_change.oldmxdscrp, oldmxdscrp2 = :arg_s_change.oldmxdscrp2, newstatus = :arg_s_change.newstatus, newwoodcode = :arg_s_change.newwoodcode, newpcode = :arg_s_change.newpcode, newmxdscrp = :arg_s_change.newmxdscrp, newmxdscrp2 = :arg_s_change.newmxdscrp2, Modemp = :arg_opemp, Moddate = getdate(), dscrp = :arg_s_change.dscrp WHERE u_saletaskmx_change.flag = 0 AND u_saletaskmx_change.billid = :arg_s_change.billid; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_saletaskmx_changemx Where billid = :arg_s_change.billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 To it_mxbt INSERT INTO u_saletaskmx_changemx ( billid, printid, mxtype, orderid, olddscrp, oldsecdscrp, oldthdscrp, newdscrp, newsecdscrp, newthdscrp, relprintid, scid ) VALUES ( :arg_s_change.billid, :arg_s_change.arg_s_changemx[i].printid, :arg_s_change.arg_s_changemx[i].mxtype, :arg_s_change.arg_s_changemx[i].orderid, :arg_s_change.arg_s_changemx[i].olddscrp, :arg_s_change.arg_s_changemx[i].oldsecdscrp, :arg_s_change.arg_s_changemx[i].oldthdscrp, :arg_s_change.arg_s_changemx[i].newdscrp, :arg_s_change.arg_s_changemx[i].newsecdscrp, :arg_s_change.arg_s_changemx[i].newthdscrp, :arg_s_change.arg_s_changemx[i].relprintid, :arg_s_change.scid ) ; NEXT uo_billid = arg_s_change.billid END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer getinfo (long arg_billid, ref s_saletaskmx_changemx arg_ref_changemx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1 Long i = 1,no_mxcheck = 0 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF //用游标读取明细 DECLARE cur_costmx CURSOR FOR SELECT u_saletaskmx_changemx.orderid, u_saletaskmx_changemx.olddscrp, u_saletaskmx_changemx.oldsecdscrp, u_saletaskmx_changemx.oldthdscrp, u_saletaskmx_changemx.newdscrp, u_saletaskmx_changemx.newsecdscrp, u_saletaskmx_changemx.newthdscrp, u_saletaskmx_changemx.mxtype, u_saletaskmx_changemx.relprintid, u_saletaskmx_changemx.scid FROM u_saletaskmx_changemx WHERE u_saletaskmx_changemx.billid = :arg_billid Order By u_saletaskmx_changemx.printid; OPEN cur_costmx; FETCH cur_costmx INTO :arg_ref_changemx[i].orderid, :arg_ref_changemx[i].olddscrp, :arg_ref_changemx[i].oldsecdscrp, :arg_ref_changemx[i].oldthdscrp, :arg_ref_changemx[i].newdscrp, :arg_ref_changemx[i].newsecdscrp, :arg_ref_changemx[i].newthdscrp, :arg_ref_changemx[i].mxtype, :arg_ref_changemx[i].relprintid, :arg_ref_changemx[i].scid; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_costmx INTO :arg_ref_changemx[i].orderid, :arg_ref_changemx[i].olddscrp, :arg_ref_changemx[i].oldsecdscrp, :arg_ref_changemx[i].oldthdscrp, :arg_ref_changemx[i].newdscrp, :arg_ref_changemx[i].newsecdscrp, :arg_ref_changemx[i].newthdscrp, :arg_ref_changemx[i].mxtype, :arg_ref_changemx[i].relprintid, :arg_ref_changemx[i].scid; LOOP CLOSE cur_costmx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_saletaskmx_changemx Where billid = :arg_billid; IF sqlca.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 arg_arr_cnt = i - 1 ext: RETURN rslt end function public function integer p_getflag (long arg_billid, ref s_saletaskmx_change arg_s_change, ref string arg_msg);Int rslt = 1 SELECT flag, taskid, billcode, printid, scid, newstatus, newwoodcode, newpcode, newmxdscrp, newmxdscrp2, affirmflag, affirmrep, affirmdate INTO :arg_s_change.flag, :arg_s_change.taskid, :arg_s_change.billcode, :arg_s_change.printid, :arg_s_change.scid, :arg_s_change.newstatus, :arg_s_change.newwoodcode, :arg_s_change.newpcode, :arg_s_change.newmxdscrp, :arg_s_change.newmxdscrp2, :arg_s_change.affirmflag, :arg_s_change.affirmrep, :arg_s_change.affirmdate FROM u_saletaskmx_change Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer affirm (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 long cnt IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF s_saletaskmx_change arg_s_ref IF p_getflag(arg_billid,arg_s_ref,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_ref.affirmflag <> 0 THEN rslt = 0 ARG_MSG = '单据不是在待初审状态,不可以初审' GOTO ext END IF //yyx2013-7-29 cnt = 0 SELECT count(*) INTO :cnt FROM u_mtrlware_assign WHERE u_mtrlware_assign.assigntype = 1 AND u_mtrlware_assign.scid = :arg_s_ref.scid AND u_mtrlware_assign.Relbillid = :arg_s_ref.taskid And u_mtrlware_assign.Relprintid = :arg_s_ref.printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询订单明细是否已有库存分配失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '订单明细已有库存分配,操作取消,如需变更,请先取消库存分配' rslt = 0 GOTO ext END IF //yyx2013-7-29_end //更新审核标记 UPDATE u_saletaskmx_change SET affirmrep = :arg_opemp, affirmdate = getdate(), affirmflag = 1 WHERE billid = :arg_billid And affirmflag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 ARG_MSG = "单据正在审核,请稍后重试" GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer caffirm (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 datetime ldt_null setnull(ldt_null) IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF s_saletaskmx_change arg_s_ref IF p_getflag(arg_billid,arg_s_ref,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_ref.affirmflag <> 1 THEN rslt = 0 ARG_MSG = '单据不是在待终审状态,不可以初撤' GOTO ext END IF IF arg_s_ref.flag <> 0 THEN rslt = 0 ARG_MSG = '单据不是在待终审状态,不可以初撤' GOTO ext END IF //更新审核标记 UPDATE u_saletaskmx_change SET affirmrep = '', affirmdate = :ldt_null, affirmflag = 0 WHERE billid = :arg_billid And affirmflag = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 ARG_MSG = "单据正在审核,请稍后重试" GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);//add_dscrp(string arg_newdescppart) //0 fail 1 SUCCESS Int rslt = 1 arg_newdescppart = Trim(arg_newdescppart) IF arg_newdescppart = '' THEN rslt = 0 arG_MSG = "要添加内容为空,操作取消" GOTO ext END IF s_saletaskmx_change arg_s_ref IF p_getflag(arg_billid,arg_s_ref,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_ref.affirmflag = 0 THEN rslt = 0 ARG_MSG = '单据不是在已审核状态,不可以增加备注' GOTO ext END IF UPDATE u_saletaskmx_change SET DSCRP = DSCRP+' '+:arg_newdescppart Where billid = :arg_billid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致添加单据备注操作失败"+"~n"+ sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit THEN COMMIT; END IF Return (rslt) end function on uo_saletaskmx_change.create call super::create TriggerEvent( this, "constructor" ) end on on uo_saletaskmx_change.destroy TriggerEvent( this, "destructor" ) call super::destroy end on