$PBExportHeader$uo_saleout.sru forward global type uo_saleout from nonvisualobject end type end forward global type uo_saleout from nonvisualobject end type global uo_saleout uo_saleout type variables Transaction commit_transaction //数据commit事务 long taskid int uo_option_confirmaudit_sale,uo_option_sale_use_planqty end variables forward prototypes public function integer save (s_saleout arg_saleout, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer p_getflag (long arg_taskid, ref integer arg_flag, ref string arg_msg) public function integer updatebegin (long arg_taskid, ref string arg_msg) public function integer del (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_taskid, ref s_saleoutmx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg) public function integer addmxcmpl (long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer trycmpsaleout (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer stoptask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer tmpstoptask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer finishtask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp2 (long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer stopqty (long arg_taskid, long arg_printid, decimal arg_stopqty, string arg_stopreason, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer uof_updatesaleoutcodestr (long arg_scid, long arg_taskid, ref string arg_msg) public function integer sec_audit (long arg_taskid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer audit (long arg_taskid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer sec_caudit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer caudit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer save (s_saleout arg_saleout, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt,ll_i Long it_mxbt, it_mxbt_item Long ll_taskid String ls_taskcode,ls_sccode DateTime server_datetime Decimal ls_SaleQty,ld_saleoutqty,ld_qty_noaudit String ls_mtrlcode Decimal ld_upsalerate,ld_upsaleqty IF IsNull(arg_saleout.dscrp) THEN arg_saleout.dscrp = '' IF IsNull(arg_saleout.dscrp2) THEN arg_saleout.dscrp2 = '' IF IsNull(arg_saleout.assign_emp) THEN arg_saleout.assign_emp = '' IF IsNull(arg_saleout.paytype) THEN arg_saleout.paytype = '' IF IsNull(arg_saleout.relcode) THEN arg_saleout.relcode = '' IF IsNull(arg_saleout.banktypeid) THEN arg_saleout.banktypeid = 0 IF IsNull(arg_saleout.moneyid) THEN arg_saleout.moneyid = 0 //IF IsNull(arg_saleout.damt) THEN arg_saleout.damt = 0 //IF IsNull(arg_saleout.otheramt) THEN arg_saleout.otheramt = 0 IF IsNull(arg_saleout.mrate) THEN arg_saleout.mrate = 0 IF IsNull(arg_saleout.freight) THEN arg_saleout.freight = '' IF IsNull(arg_saleout.freight_tele) THEN arg_saleout.freight_tele = '' IF IsNull(arg_saleout.cus_address) THEN arg_saleout.cus_address = '' IF IsNull(arg_saleout.cus_tele) THEN arg_saleout.cus_tele = '' IF IsNull(arg_saleout.cus_fax) THEN arg_saleout.cus_fax = '' IF IsNull(arg_saleout.upname) THEN arg_saleout.upname = '' IF IsNull(arg_saleout.cusid) THEN arg_saleout.cusid = 0 IF Trim(arg_saleout.assign_emp) = '' THEN rslt = 0 arg_msg = "请输入订单业务员" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_cust Where cusid = :arg_saleout.cusid 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 cnt = 0 SELECT count(*) INTO :cnt FROM cw_banktype Where banktypeid = :arg_saleout.banktypeid; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询结算方式失败' rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '结算方式不存在' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM cw_currency Where moneyid = :arg_saleout.moneyid; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询币种失败' rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '币种资料不存在' rslt = 0 GOTO ext END IF IF arg_saleout.mrate = 0 THEN arg_msg = '币种汇率错误' rslt = 0 GOTO ext END IF SELECT Top 1 getdate() Into :server_datetime From u_user Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF f_check_inoutdate(0,arg_saleout.taskdate,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF it_mxbt = UpperBound(arg_saleout.arg_s_mx) it_mxbt_item = UpperBound(arg_saleout.arg_s_itemmx) IF it_mxbt <= 0 THEN rslt = 0 arg_msg = "没有正确明细内容" GOTO ext END IF FOR ll_i = 1 To it_mxbt IF arg_saleout.arg_s_mx[ll_i].mtrlid = 0 Or arg_saleout.arg_s_mx[ll_i].saleqty = 0 THEN CONTINUE SELECT count(*) INTO :cnt FROM u_mtrldef Where mtrlid = :arg_saleout.arg_s_mx[ll_i].mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询产品资料:'+arg_saleout.arg_s_mx[ll_i].mtrlcode+' 失败' GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '产品资料:'+ arg_saleout.arg_s_mx[ll_i].mtrlcode +'不存在' GOTO ext END IF IF arg_saleout.arg_s_mx[ll_i].enprice * arg_saleout.arg_s_mx[ll_i].rebate < 0 THEN rslt = 0 arg_msg = "产品:" + String(arg_saleout.arg_s_mx[ll_i].mtrlcode)+" 单价错误" GOTO ext END IF IF arg_saleout.arg_s_mx[ll_i].rebate < 0 THEN arg_msg = '折扣错误,请检查' rslt = 0 GOTO ext END IF //检查已开单数 IF arg_saleout.arg_s_mx[ll_i].relid > 0 THEN SELECT u_SaleTaskMx.SaleQty, u_SaleTaskMx.saleoutqty, u_mtrldef.mtrlcode, u_mtrldef.upsalerate, u_mtrldef.upsaleqty INTO :ls_SaleQty, :ld_saleoutqty, :ls_mtrlcode, :ld_upsalerate, :ld_upsaleqty FROM u_SaleTaskMx ,u_mtrldef WHERE ( u_SaleTaskMx.scid = :arg_saleout.scid ) AND ( u_SaleTaskMx.TaskID = :arg_saleout.arg_s_mx[ll_i].relid ) AND ( u_SaleTaskMx.printid = :arg_saleout.arg_s_mx[ll_i].relprintid ) AND ( u_SaleTaskMx.mtrlid = u_mtrldef.mtrlid) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品编码["+ls_mtrlcode+"]导致查询销售订单已完成数量操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF //已开单未审核(非本单) SELECT SUM(u_saleoutmx.saleqty) INTO :ld_qty_noaudit FROM u_saleoutmx INNER JOIN u_saleout ON u_saleoutmx.taskid = u_saleout.taskid WHERE (u_saleout.flag = 0) AND ( u_saleoutmx.scid = :arg_saleout.scid ) AND ( u_saleoutmx.relid = :arg_saleout.arg_s_mx[ll_i].relid ) AND ( u_saleoutmx.relprnitid = :arg_saleout.arg_s_mx[ll_i].relprintid ) AND ( u_saleout.taskid <> :arg_saleout.TaskID) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN ld_qty_noaudit = 0 END IF IF ls_SaleQty * (1 + ld_upsalerate) + ld_upsaleqty < ld_saleoutqty +ld_qty_noaudit+ arg_saleout.arg_s_mx[ll_i].saleqty THEN rslt = 0 arg_msg = "产品["+ls_mtrlcode+"]的未通知发货数量只有"+String(ls_SaleQty - ld_saleoutqty - ld_qty_noaudit,'#,##0.0#')+",上限:"+String(ls_SaleQty * (1 + ld_upsalerate) + ld_upsaleqty - ld_saleoutqty - ld_qty_noaudit,'#,##0.0#')+",不能下单"+String(arg_saleout.arg_s_mx[ll_i].saleqty,'#,##0.0#') GOTO ext END IF END IF NEXT FOR ll_i = 1 To it_mxbt_item SELECT count(*) INTO :cnt FROM u_itemdef Where itemid = :arg_saleout.arg_s_itemmx[ll_i].itemid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询收支项目是否存在失败,'+commit_transaction.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '第'+String(arg_saleout.arg_s_itemmx[ll_i].printid)+'行,收支项目不存在,请检查' GOTO ext END IF NEXT IF arg_saleout.TaskID = 0 THEN ll_taskid = f_sys_scidentity(0,"u_saleout","taskid",arg_msg,True,id_sqlca) IF ll_taskid <= 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(arg_saleout.scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ls_taskcode = getid(arg_saleout.scid,ls_sccode + 'SO',Date(server_datetime),False,commit_transaction) IF ls_taskcode = "err" THEN rslt = 0 arg_msg = "无法获取单据编号"+"~n"+SQLCA.SQLErrText GOTO ext END IF INSERT INTO u_saleout (scid, taskid, taskcode, cusid, taskdate, relcode, dscrp, dscrp2, cus_address, cus_tele, cus_fax, freight, freight_tele, assign_emp, upname, banktypeid, paytype, opemp, opdate, moneyid, mrate) VALUES (:arg_saleout.scid, :ll_taskid, :ls_taskcode, :arg_saleout.cusid, :arg_saleout.taskdate, :arg_saleout.relcode, :arg_saleout.dscrp, :arg_saleout.dscrp2, :arg_saleout.cus_address, :arg_saleout.cus_tele, :arg_saleout.cus_fax, :arg_saleout.freight, :arg_saleout.freight_tele, :arg_saleout.assign_emp, :arg_saleout.upname, :arg_saleout.banktypeid, :arg_saleout.paytype, :arg_opemp, getdate(), :arg_saleout.moneyid, :arg_saleout.mrate) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入发货通知单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF TaskID = ll_taskid FOR ll_i = 1 To it_mxbt INSERT INTO u_saleoutmx (scid, taskid, printid, ifrel, mtrlid, saleqty, enprice, fprice, rebate, status, woodcode, pcode, mtrlcuscode, outtypestr, mxdscrp, mxdscrp2, relid, relprintid, relcode, mtrlcuscode2) VALUES (:arg_saleout.scid, :ll_taskid, :arg_saleout.arg_s_mx[ll_i].printid, :arg_saleout.arg_s_mx[ll_i].ifrel, :arg_saleout.arg_s_mx[ll_i].mtrlid, :arg_saleout.arg_s_mx[ll_i].saleqty, :arg_saleout.arg_s_mx[ll_i].enprice, :arg_saleout.arg_s_mx[ll_i].fprice, :arg_saleout.arg_s_mx[ll_i].rebate, :arg_saleout.arg_s_mx[ll_i].status, :arg_saleout.arg_s_mx[ll_i].woodcode, :arg_saleout.arg_s_mx[ll_i].pcode, :arg_saleout.arg_s_mx[ll_i].mtrlcuscode, :arg_saleout.arg_s_mx[ll_i].outtypestr, :arg_saleout.arg_s_mx[ll_i].mxdscrp, :arg_saleout.arg_s_mx[ll_i].mxdscrp2, :arg_saleout.arg_s_mx[ll_i].relid, :arg_saleout.arg_s_mx[ll_i].relprintid, :arg_saleout.arg_s_mx[ll_i].relcode, :arg_saleout.arg_s_mx[ll_i].mtrlcuscode2) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入发货通知单明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT ELSE UPDATE u_saleout SET cusid = :arg_saleout.cusid, taskdate = :arg_saleout.taskdate, relcode = :arg_saleout.relcode, dscrp = :arg_saleout.dscrp, dscrp2 = :arg_saleout.dscrp2, cus_address = :arg_saleout.cus_address, cus_tele = :arg_saleout.cus_tele, cus_fax = :arg_saleout.cus_fax, freight = :arg_saleout.freight, freight_tele = :arg_saleout.freight_tele, assign_emp = :arg_saleout.assign_emp, upname = :arg_saleout.upname, banktypeid = :arg_saleout.banktypeid, paytype = :arg_saleout.paytype, modemp = :arg_opemp, moddate = getdate() , moneyid = :arg_saleout.moneyid, mrate = :arg_saleout.mrate Where TaskID = :arg_saleout.TaskID Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新发货通知单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF DELETE FROM u_saleoutmx Where TaskID = :arg_saleout.TaskID Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF FOR ll_i = 1 To it_mxbt INSERT INTO u_saleoutmx (scid, taskid, printid, ifrel, mtrlid, saleqty, enprice, fprice, rebate, status, woodcode, pcode, mtrlcuscode, outtypestr, mxdscrp, mxdscrp2, relid, relprintid, relcode, mtrlcuscode2) VALUES (:arg_saleout.scid, :arg_saleout.taskid, :arg_saleout.arg_s_mx[ll_i].printid, :arg_saleout.arg_s_mx[ll_i].ifrel, :arg_saleout.arg_s_mx[ll_i].mtrlid, :arg_saleout.arg_s_mx[ll_i].saleqty, :arg_saleout.arg_s_mx[ll_i].enprice, :arg_saleout.arg_s_mx[ll_i].fprice, :arg_saleout.arg_s_mx[ll_i].rebate, :arg_saleout.arg_s_mx[ll_i].status, :arg_saleout.arg_s_mx[ll_i].woodcode, :arg_saleout.arg_s_mx[ll_i].pcode, :arg_saleout.arg_s_mx[ll_i].mtrlcuscode, :arg_saleout.arg_s_mx[ll_i].outtypestr, :arg_saleout.arg_s_mx[ll_i].mxdscrp, :arg_saleout.arg_s_mx[ll_i].mxdscrp2, :arg_saleout.arg_s_mx[ll_i].relid, :arg_saleout.arg_s_mx[ll_i].relprintid, :arg_saleout.arg_s_mx[ll_i].relcode, :arg_saleout.arg_s_mx[ll_i].mtrlcuscode2) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入发货通知单明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT TaskID = arg_saleout.TaskID DELETE FROM u_saleout_itemmx Where TaskID = :arg_saleout.TaskID Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有费用明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF FOR ll_i = 1 To it_mxbt_item INSERT INTO u_saleout_itemmx (scid, taskid, printid, itemid, amt, mxdscrp) VALUES (:arg_saleout.scid, :taskid, :arg_saleout.arg_s_itemmx[ll_i].printid, :arg_saleout.arg_s_itemmx[ll_i].itemid, :arg_saleout.arg_s_itemmx[ll_i].amt, :arg_saleout.arg_s_itemmx[ll_i].mxdscrp) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN TaskID = arg_saleout.TaskID //还原taskid rslt = 0 arg_msg = "因网络或其它原因导致插入发货通知单费用明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer p_getflag (long arg_taskid, ref integer arg_flag, ref string arg_msg);Int rslt = 1 SELECT flag INTO :arg_flag FROM u_saleout Where taskid = :arg_taskid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询单据状态失败,'+commit_transaction.SQLErrText GOTO ext END IF ext: RETURN rslt end function public function integer updatebegin (long arg_taskid, ref string arg_msg);Int rslt = 1 Int li_flag Long cnt IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误的单据唯一码' GOTO ext END IF IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 0 THEN rslt = 0 arg_msg = '单据不是在待审核状态,不可以修改,要修改请先撤销审核' GOTO ext END IF ext: RETURN rslt end function public function integer del (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误的单据唯一码' GOTO ext END IF IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 0 THEN rslt = 0 arg_msg = '单据不是在待审核状态,不能删除' GOTO ext END IF DELETE FROM u_saleoutmx WHERE taskid = :arg_taskid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除明细失败,'+commit_transaction.SQLErrText GOTO ext END IF DELETE FROM u_saleout WHERE taskid = :arg_taskid AND flag = 0 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 ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer getinfo (long arg_taskid, ref s_saleoutmx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1 Long i = 1,no_mxcheck = 0 IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF DECLARE cur_mx CURSOR FOR SELECT u_saleoutmx.scid, u_saleoutmx.printid, u_saleoutmx.ifrel, u_saleoutmx.mtrlid, u_saleoutmx.saleqty, u_saleoutmx.consignedqty, u_saleoutmx.relid, u_saleoutmx.relprintid, u_saleoutmx.stopqty, u_saleoutmx.status, u_saleoutmx.woodcode, u_saleoutmx.pcode, u_mtrldef.mtrlcode FROM u_saleoutmx INNER JOIN u_mtrldef ON u_saleoutmx.mtrlid = u_mtrldef.mtrlid WHERE u_saleoutmx.taskid = :arg_taskid Order By u_saleoutmx.printid Using commit_transaction; OPEN cur_mx; FETCH cur_mx INTO :arg_ref_mx[i].scid, :arg_ref_mx[i].printid, :arg_ref_mx[i].ifrel, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].saleqty, :arg_ref_mx[i].consignedqty, :arg_ref_mx[i].relid, :arg_ref_mx[i].relprintid, :arg_ref_mx[i].stopqty, :arg_ref_mx[i].status, :arg_ref_mx[i].woodcode, :arg_ref_mx[i].pcode, :arg_ref_mx[i].mtrlcode; DO WHILE commit_transaction.SQLCode = 0 i++ FETCH cur_mx INTO :arg_ref_mx[i].scid, :arg_ref_mx[i].printid, :arg_ref_mx[i].ifrel, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].saleqty, :arg_ref_mx[i].consignedqty, :arg_ref_mx[i].relid, :arg_ref_mx[i].relprintid, :arg_ref_mx[i].stopqty, :arg_ref_mx[i].status, :arg_ref_mx[i].woodcode, :arg_ref_mx[i].pcode, :arg_ref_mx[i].mtrlcode; LOOP CLOSE cur_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_saleoutmx Where taskid = :arg_taskid; 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 addmxcmpl (long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误的发货通知单唯一码' GOTO ext END IF IF arg_addqty = 0 THEN rslt = 1 GOTO ext END IF IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN rslt = 0 arg_msg = '查询发货通知单状态失败' GOTO ext END IF IF li_flag <> 1 And li_flag <> 5 THEN rslt = 0 arg_msg = '发货通知单只有在进行或已完成状态下才能执行更新已发货数操作' GOTO ext END IF Decimal ld_saleqty,ld_consignedqty,ld_stopqty String ls_mtrlcode SELECT u_saleoutmx.saleqty, u_saleoutmx.consignedqty, u_mtrldef.mtrlcode, u_saleoutmx.stopqty INTO :ld_saleqty, :ld_consignedqty, :ls_mtrlcode, :ld_stopqty FROM u_saleoutmx,u_mtrldef WHERE (u_saleoutmx.mtrlid = u_mtrldef.mtrlid) AND (u_saleoutmx.taskid = :arg_taskid) And (u_saleoutmx.printid = :arg_printid) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品编码["+ls_mtrlcode+"]导致查询发货通知单已发货数量操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF IF ld_saleqty > 0 THEN IF ld_saleqty < ld_consignedqty + ld_stopqty + arg_addqty THEN rslt = 0 arg_msg = "产品["+ls_mtrlcode+"]的未发货数量只有"+String(ld_saleqty - ld_consignedqty - ld_stopqty,'#,##0.##########')+",不能发货"+String(arg_addqty,'#,##0.##########') GOTO ext END IF ELSE IF Abs(ld_saleqty) < Abs(ld_consignedqty + ld_stopqty + arg_addqty) THEN rslt = 0 arg_msg = "产品["+ls_mtrlcode+"]的未发货数量只有"+String(ld_saleqty - ld_consignedqty - ld_stopqty,'#,##0.##########')+",不能发货"+String(arg_addqty,'#,##0.##########') GOTO ext END IF END IF UPDATE u_saleoutmx SET consignedqty = consignedqty + :arg_addqty WHERE (u_saleoutmx.taskid = :arg_taskid) And (u_saleoutmx.printid = :arg_printid) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品唯一码导致发货通知单已发货数量操作失败"+"~n"+ commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer trycmpsaleout (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime null_dt Int li_flag SetNull(null_dt) IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误销售订单唯一码' GOTO ext END IF IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN rslt = 0 arg_msg = '查询发货通知单状态失败' GOTO ext END IF IF li_flag <> 1 AND li_flag <> 5 THEN rslt = 0 arg_msg = '发货通知单只有在进行和已完成状态下才能执行完成和撤销完成操作' GOTO ext END IF Decimal ls_zerook Boolean if_finish if_finish = TRUE DECLARE zero_cur CURSOR FOR SELECT u_saleoutmx.saleqty - u_saleoutmx.consignedqty - u_saleoutmx.stopqty FROM u_saleoutmx WHERE u_saleoutmx.taskid = :arg_taskid USING commit_transaction ; OPEN zero_cur; FETCH zero_cur INTO :ls_zerook; DO WHILE commit_transaction.SQLCode = 0 IF if_finish THEN IF ls_zerook > 0 THEN if_finish = FALSE END IF FETCH zero_cur INTO :ls_zerook; LOOP CLOSE zero_cur; IF li_flag = 1 AND if_finish THEN UPDATE u_saleout SET flag = 5, accomplishdate = getdate(), finishemp = :publ_operator Where ( u_saleout.taskid = :arg_taskid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致发货通知单完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK USING commit_transaction; GOTO ext END IF END IF IF li_flag = 5 AND NOT if_finish THEN UPDATE u_saleout SET flag = 1, accomplishdate = :null_dt, finishemp = '' Where ( u_saleout.taskid = :arg_taskid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致发货通知单撤消完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK USING commit_transaction; GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer stoptask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误发货通知单唯一码' GOTO ext END IF IF p_getflag(arg_taskid,li_flag,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 1 THEN rslt = 0 ARG_MSG = '发货通知单只有在进行状态下才能执行终止操作' GOTO ext END IF UPDATE u_saleout SET flag = 3, accomplishdate = getdate() , stopemp = :publ_operator Where TaskID = :arg_taskid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致终止发货通知单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer tmpstoptask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误发货通知单唯一码' GOTO ext END IF IF p_getflag(arg_taskid,li_flag,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 1 AND li_flag <> 2 THEN rslt = 0 ARG_MSG = '发货通知单只有在进行或已暂停状态下才能执行暂停/取消暂停操作' GOTO ext END IF IF li_flag = 1 THEN UPDATE u_saleout SET flag = 2, stopemp = :publ_operator Where TaskID = :arg_taskid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致暂停发货通知单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ELSE UPDATE u_saleout SET flag = 1, stopemp = '' Where TaskID = :arg_taskid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致取消暂停发货通知单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer finishtask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误发货通知单唯一码' GOTO ext END IF IF p_getflag(arg_taskid,li_flag,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 1 THEN rslt = 0 ARG_MSG = '发货通知单只有在进行状态下才能执行完成操作' GOTO ext END IF UPDATE u_saleout SET flag = 5, accomplishdate = getdate() , finishemp = :publ_operator Where TaskID = :arg_taskid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致完成发货通知单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer add_dscrp (long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 Int li_flag arg_newdescppart = Trim(arg_newdescppart) IF arg_newdescppart = '' THEN rslt = 0 arG_MSG = "要添加内容为空,操作取消" GOTO ext END IF IF p_getflag(arg_taskid,li_flag,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag = 0 THEN rslt = 0 arG_MSG = "待审核状态下不可用" GOTO ext END IF UPDATE u_saleout SET DSCRP = DSCRP+' '+:arg_newdescppart Where u_saleout.taskid = :arg_taskid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致添加销售订单备注操作失败"+"~n"+ commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF Return (rslt) end function public function integer add_dscrp2 (long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 Int li_flag arg_newdescppart = Trim(arg_newdescppart) IF arg_newdescppart = '' THEN rslt = 0 arG_MSG = "要添加内容为空,操作取消" GOTO ext END IF IF p_getflag(arg_taskid,li_flag,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag = 0 THEN rslt = 0 arG_MSG = "待审核状态下不可用" GOTO ext END IF UPDATE u_saleout SET DSCRP2 = DSCRP2+' '+:arg_newdescppart Where u_saleout.taskid = :arg_taskid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致添加销售订单备注操作失败"+"~n"+ commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF Return (rslt) end function public function integer stopqty (long arg_taskid, long arg_printid, decimal arg_stopqty, string arg_stopreason, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag Decimal ld_saleqty,ld_consignedqty,ld_stopqty_ori Decimal lde_notauditqty,lde_notauditqty_plan Long ll_relid,ll_relprintid,ll_scid Boolean lb_ifplan = False uo_saletask obj_saletask obj_saletask = Create uo_saletask obj_saletask.commit_transaction = commit_transaction IF uo_option_confirmaudit_sale = -1000 THEN rslt = 0 arg_msg = '选项:[025]销售单先确认后审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_sale_use_planqty = -1000 THEN rslt = 0 arg_msg = '选项:[115]销售发货单使用计划发货数,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_confirmaudit_sale = 1 And uo_option_sale_use_planqty = 1 THEN lb_ifplan = True IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误的单据唯一码' GOTO ext END IF IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 1 And li_flag <> 5 THEN arg_msg = '发货通知单只能在进行状态或已完成状态才能操作' rslt = 0 GOTO ext END IF SELECT saleqty,consignedqty,relid,relprintid,scid,stopqty INTO :ld_saleqty,:ld_consignedqty,:ll_relid,:ll_relprintid,:ll_scid,:ld_stopqty_ori FROM u_saleoutmx WHERE taskid = :arg_taskid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询发货通知单明细信息失败,'+commit_transaction.SQLErrText GOTO ext END IF SELECT isnull(sum(qty),0),isnull(sum(planqty),0) INTO :lde_notauditqty,:lde_notauditqty_plan FROM u_outwaremx INNER JOIN u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid WHERE u_outware.billtype = 1 AND (u_outwaremx.saleoutid = :arg_taskid) AND (u_outwaremx.saleoutprintid = :arg_printid) And (u_outware.flag = 0 ) ; IF commit_transaction.SQLCode = -1 THEN rslt = 0 arg_msg = '查询发货通知单明细信息失败,'+commit_transaction.SQLErrText GOTO ext END IF IF IsNull(lde_notauditqty) THEN lde_notauditqty = 0 IF IsNull(lde_notauditqty_plan) THEN lde_notauditqty_plan = 0 IF lb_ifplan THEN IF ld_saleqty - ld_consignedqty - lde_notauditqty < arg_stopqty THEN rslt = 0 arg_msg = '发货通知单明细未发货数只有:'+String(ld_saleqty - ld_consignedqty - lde_notauditqty,'#,##0.##########')+',不能再终止:'+String(arg_stopqty,'#,##0.##########') GOTO ext END IF ELSE IF ld_saleqty - ld_consignedqty - lde_notauditqty_plan < arg_stopqty THEN rslt = 0 arg_msg = '发货通知单明细未发货数只有:'+String(ld_saleqty - ld_consignedqty - lde_notauditqty_plan,'#,##0.##########')+',不能再终止:'+String(arg_stopqty,'#,##0.##########') GOTO ext END IF END IF IF ll_relid > 0 THEN IF obj_saletask.addmxsaleout(ll_scid,ll_relid,ll_relprintid, ld_stopqty_ori - arg_stopqty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF UPDATE u_saleoutmx SET stopqty = :arg_stopqty, stopreason = :arg_stopreason, stopemp = :arg_opemp WHERE taskid = :arg_taskid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新发货通知单明细终止数失败,'+commit_transaction.SQLErrText GOTO ext END IF IF trycmpsaleout(arg_taskid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF Destroy obj_saletask RETURN rslt end function public function integer uof_updatesaleoutcodestr (long arg_scid, long arg_taskid, ref string arg_msg);if sys_option_if_saleout = 0 then return 1 Int rslt = 1 Long i Long ll_scid, ll_taskid, ll_printid long it_mxbt s_saleoutmx s_mx[] uo_bgtr_timer uo_tr uo_tr = Create uo_bgtr_timer IF getinfo( arg_taskid, s_mx, it_mxbt, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF FOR i = 1 To it_mxbt ll_taskid = s_mx[i].relid ll_printid = s_mx[i].relprintid IF ll_taskid > 0 And ll_printid > 0 THEN IF uo_tr.uf_update_saleoutcodestr(arg_scid, ll_taskid, ll_printid, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT ext: Destroy uo_tr RETURN rslt end function public function integer sec_audit (long arg_taskid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag uo_saletask obj_saletask obj_saletask = CREATE uo_saletask obj_saletask.commit_transaction = commit_transaction IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误的单据唯一码' GOTO ext END IF IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 4 THEN rslt = 0 arg_msg = '单据不是在待终审状态,不可以再审' GOTO ext END IF s_saleoutmx arg_ref_mx[] Long ll_arr_cnt,ll_i IF getinfo(arg_taskid,arg_ref_mx,ll_arr_cnt,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF FOR ll_i = 1 TO ll_arr_cnt IF arg_ref_mx[ll_i].relid > 0 THEN IF obj_saletask.addmxsaleout(arg_ref_mx[ll_i].scid,arg_ref_mx[ll_i].relid,arg_ref_mx[ll_i].relprintid,arg_ref_mx[ll_i].saleqty,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT UPDATE u_saleout SET flag = 1 , sec_auditemp = :arg_opemp, sec_auditdate = getdate() WHERE taskid = :arg_taskid AND flag = 4 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 ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF DESTROY obj_saletask RETURN rslt end function public function integer audit (long arg_taskid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误的单据唯一码' GOTO ext END IF IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 0 THEN rslt = 0 arg_msg = '单据不是在待审核状态,不可以再审' GOTO ext END IF UPDATE u_saleout SET flag = 4 , auditemp = :arg_opemp, auditdate = getdate() WHERE taskid = :arg_taskid AND flag = 0 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 ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer sec_caudit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag DateTime null_dt Long cnt SetNull(null_dt) uo_saletask obj_saletask obj_saletask = CREATE uo_saletask obj_saletask.commit_transaction = commit_transaction IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误的单据唯一码' GOTO ext END IF IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 1 THEN rslt = 0 arg_msg = '单据不是在进行状态,不可以撤审' GOTO ext END IF SELECT count(*) INTO :cnt FROM u_outwaremx Where saleoutid = :arg_taskid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询发货通知单是否有相关销售发货单失败,'+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '发货通知单已有相关销售发货单,不能撤审' GOTO ext END IF s_saleoutmx arg_ref_mx[] Long ll_arr_cnt,ll_i IF getinfo(arg_taskid,arg_ref_mx,ll_arr_cnt,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF FOR ll_i = 1 TO ll_arr_cnt IF arg_ref_mx[ll_i].relid > 0 THEN IF obj_saletask.addmxsaleout(arg_ref_mx[ll_i].scid,arg_ref_mx[ll_i].relid,arg_ref_mx[ll_i].relprintid,0 - arg_ref_mx[ll_i].saleqty,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT UPDATE u_saleout SET flag = 4 , sec_auditemp = '', sec_auditdate = :null_dt WHERE taskid = :arg_taskid AND flag = 1 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 ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF DESTROY obj_saletask RETURN rslt end function public function integer caudit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag DateTime null_dt Long cnt SetNull(null_dt) IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误的单据唯一码' GOTO ext END IF IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 4 THEN rslt = 0 arg_msg = '单据不是待终审状态,不可以撤审' GOTO ext END IF s_saleoutmx arg_ref_mx[] Long ll_arr_cnt,ll_i IF getinfo(arg_taskid,arg_ref_mx,ll_arr_cnt,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_saleout SET flag = 0 , auditemp = '', auditdate = :null_dt WHERE taskid = :arg_taskid AND flag = 4 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 ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF RETURN rslt end function on uo_saleout.create call super::create TriggerEvent( this, "constructor" ) end on on uo_saleout.destroy TriggerEvent( this, "destructor" ) call super::destroy end on