$PBExportHeader$uo_requestbuy.sru forward global type uo_requestbuy from nonvisualobject end type end forward global type uo_requestbuy from nonvisualobject end type global uo_requestbuy uo_requestbuy type variables Long uo_requestbuyid String uo_requestbuycode Int uo_option_requestbuy_hz Int uo_option_buytask_spt int uo_option_rqbuy_checkdate int uo_option_cl_cp_buy int uo_option_if_oa_requestbuy_dept int uo_option_request_dept_secaudit Long audit_buildtype end variables forward prototypes public function integer updatebegin (long arg_scid, long arg_requestbuyid, ref string arg_msg) public function integer save (s_requestbuy arg_rqbuy, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer finishorder (long arg_scid, long arg_requestbuyid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer cfinishorder (long arg_scid, long arg_requestbuyid, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_scid, long arg_requestbuyid, string arg_newdescppart, ref string arg_msg) public function integer tmpstoporder (long arg_scid, long arg_requestbuyid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer p_getifauto (long arg_scid, long arg_requestbuyid, ref integer arg_ifauto, ref string arg_msg) public function integer del (long arg_scid, long arg_requestbuyid, integer arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit) public function integer tryfinish (long arg_scid, long arg_requestbuyid, ref string arg_msg, boolean arg_ifcommit) public function integer audit (long arg_scid, long arg_requestbuyid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer audit_2 (long arg_scid, long arg_requestbuyid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer caudit (long arg_scid, long arg_requestbuyid, integer arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit) public function integer p_getflag (long arg_scid, long arg_requestbuyid, ref integer arg_flag, ref integer arg_billtype, ref string arg_msg) public function integer addmxcmpl (long arg_scid, long arg_requestbuyid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer caudit_2 (long arg_scid, long arg_requestbuyid, integer arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit) public function integer audit_mx (long arg_scid, long arg_requestbuyid, long arg_printid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer caudit_mx (long arg_scid, long arg_requestbuyid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_scid, long arg_requestbuyid, ref s_requestbuymx arg_ref_rqmx[], ref long arg_arr_cnt, ref s_requestbuymx arg_ref_rqmxmx[], ref long arg_arr_cnt_mx, ref string arg_msg) public function integer stopmx (long arg_scid, long arg_requestbuyid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit) public function integer stoporder (long arg_scid, long arg_requestbuyid, string arg_stopreason, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer stopqty (long arg_scid, long arg_requestbuyid, long arg_printid, string arg_mtrlcode, decimal arg_stopqty, string arg_stopreason, ref string arg_msg, boolean arg_commit) public function integer uof_cmpl_cf (s_requestbuymx arg_s_rqbuymxmx[], long it_mxbt_mx, ref s_requestbuymx arg_s_rqbuymxmx_pqty[], ref long it_mxbt_mx_p, ref string arg_msg) public function integer uof_cmpl_hz (ref s_requestbuymx arg_s_rqbuymx[], boolean arg_ifhz, ref s_requestbuymx arg_s_rqbuymxmx[], ref long it_mxbt_mx, ref string arg_msg) public function integer uof_update_buy_flag (long arg_scid, long arg_requestbuyid, ref string arg_msg, boolean arg_ifcommit) public function integer stopordercancel (long arg_scid, long arg_requestbuyid, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer updatebegin (long arg_scid, long arg_requestbuyid, ref string arg_msg);Int rslt = 1 Int li_flag,li_ifauto,li_billtype Long cnt IF arg_requestbuyid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改,要修改请先撤销审核' GOTO ext END IF IF p_getifauto(arg_scid,arg_requestbuyid,li_ifauto,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_ifauto = 1 THEN rslt = 0 arg_msg = '单据为动建立的单据,不可以修改' GOTO ext END IF SELECT count(*) INTO :cnt FROM u_buytaskmx WHERE scid = :arg_scid AND requestbuyid = :arg_requestbuyid; 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 ext: RETURN rslt end function public function integer save (s_requestbuy arg_rqbuy, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0 DateTime server_dt Long ll_requestbuyid,it_mxbt,i,j String ls_sccode,ls_requestbuycode Long ll_mx_dftsptid Int li_mtrlkind String ls_ordercode Long ll_sptmode,ll_sptid String ls_relcode String ls_ordercodestr,ls_relcodestr Int li_ifsendlot Decimal ld_maxqty,ld_minqty,ld_maxdays,ld_mindays Decimal ld_qty DateTime ldt_rqdate Int li_buydec, li_flag String ls_unit Decimal ld_adddec Boolean lb_chk_mtrl = True //物料资料相关信息检查 Boolean lb_chk_order = True //是否超计划相关信息检查 String ls_msg, ls_msg2 String ls_mtrlname, ls_mtrlmode IF uo_option_requestbuy_hz = -1000 THEN arg_msg = '选项:[111]申购单汇总采购,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_rqbuy_checkdate = -1000 THEN arg_msg = '选项:[314]申购单保存不检查交货日期,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_cl_cp_buy = -1000 THEN arg_msg = '选项:[319]材料采购与成品采购合并显示,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF IsNull(arg_rqbuy.scid) THEN arg_rqbuy.scid = 0 IF IsNull(arg_rqbuy.requestbuyid) THEN arg_rqbuy.requestbuyid = 0 IF IsNull(arg_rqbuy.assign_emp) THEN arg_rqbuy.assign_emp = '' IF IsNull(arg_rqbuy.relcode) THEN arg_rqbuy.relcode = '' IF IsNull(arg_rqbuy.dscrp) THEN arg_rqbuy.dscrp = '' IF IsNull(arg_rqbuy.ifauto) THEN arg_rqbuy.ifauto = 0 IF IsNull(arg_rqbuy.deptid) THEN arg_rqbuy.deptid = 0 IF arg_rqbuy.assign_emp = '' 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 IF f_check_inoutdate(-100,arg_rqbuy.requestbuydate,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF it_mxbt = UpperBound(arg_rqbuy.arg_s_rqbuymx) IF it_mxbt <= 0 THEN rslt = 0 arg_msg = "没有正确明细内容" GOTO ext END IF FOR i = 1 To it_mxbt IF arg_rqbuy.arg_s_rqbuymx[i].rate = 0 THEN arg_rqbuy.arg_s_rqbuymx[i].rate = 1 //处理转换率 SELECT mtrlkind,sptmode,dftsptid, unit,adddec, flag, mtrlname, mtrlmode INTO :li_mtrlkind,:ll_sptmode,:ll_sptid, :ls_unit,:ld_adddec, :li_flag, :ls_mtrlname, :ls_mtrlmode FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_rqbuy.arg_s_rqbuymx[i].mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',查询物料资料失败,'+sqlca.SQLErrText GOTO ext END IF IF sys_option_audit_mtrl <> 0 THEN IF li_flag <> 2 THEN lb_chk_mtrl = False //改成汇总提示 ls_msg += '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',资料未审核~r~n' END IF END IF //判断日期 IF uo_option_rqbuy_checkdate = 0 THEN IF Date(arg_rqbuy.arg_s_rqbuymx[i].rqdate) < Date(arg_rqbuy.requestbuydate) THEN arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',需求日期小于申购日期' rslt = 0 GOTO ext END IF END IF //判断单位 IF arg_rqbuy.arg_s_rqbuymx[i].rate <> 1 THEN IF ls_unit = arg_rqbuy.arg_s_rqbuymx[i].unit THEN arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',转换率不为1但单位与库存单位相同' rslt = 0 GOTO ext END IF END IF //处理默认供应商 IF ll_sptmode = 0 THEN //无默认供应商 arg_rqbuy.arg_s_rqbuymx[i].sptid = 0 ELSEIF ll_sptmode = 1 THEN //按主供应商 arg_rqbuy.arg_s_rqbuymx[i].sptid = ll_sptid ELSEIF ll_sptmode = 2 THEN //自动带最低价供应商 SELECT TOP 1 sptid INTO :ll_sptid FROM u_spt_price WHERE ( mtrlid = :arg_rqbuy.arg_s_rqbuymx[i].mtrlid ) AND ( status = :arg_rqbuy.arg_s_rqbuymx[i].status ) AND ( unit = :arg_rqbuy.arg_s_rqbuymx[i].unit ) Order By fprice; IF sqlca.SQLCode <> 0 THEN ll_sptid = 0 END IF arg_rqbuy.arg_s_rqbuymx[i].sptid = ll_sptid ELSEIF ll_sptmode = 3 THEN //自动带上次供应商 SELECT TOP 1 sptid INTO :ll_sptid FROM u_spt_price WHERE ( mtrlid = :arg_rqbuy.arg_s_rqbuymx[i].mtrlid ) AND ( status = :arg_rqbuy.arg_s_rqbuymx[i].status ) AND ( unit = :arg_rqbuy.arg_s_rqbuymx[i].unit ) Order By sys_changetime Desc; IF sqlca.SQLCode <> 0 THEN ll_sptid = 0 END IF arg_rqbuy.arg_s_rqbuymx[i].sptid = ll_sptid END IF //计算库存数量 IF arg_rqbuy.arg_s_rqbuymx[i].rate = 1 THEN arg_rqbuy.arg_s_rqbuymx[i].qty = arg_rqbuy.arg_s_rqbuymx[i].uqty ELSE arg_rqbuy.arg_s_rqbuymx[i].qty = Round(arg_rqbuy.arg_s_rqbuymx[i].uqty * arg_rqbuy.arg_s_rqbuymx[i].rate,10) END IF IF arg_rqbuy.billtype = 0 THEN IF li_mtrlkind = 1 And arg_rqbuy.arg_s_rqbuymx[i].ifrel = 1 THEN arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',MRP属性设为不按计划,所以不能选择计划' rslt = 0 GOTO ext END IF END IF //根据用户权限,[]严格按计划物料必须按计划建立申请单, 检查是否有不安计划的物料 IF f_power_ind(3263,sys_msg_pow) And Not sys_power_issuper THEN IF arg_rqbuy.arg_s_rqbuymx[i].ifrel = 0 THEN //不按计划的 IF li_mtrlkind = 0 THEN //领用属性 -- 严格按计划[0] arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',物料领用属性为严格按计划,权限限制,请选择计划,'+sys_msg_pow rslt = 0 GOTO ext END IF END IF END IF IF arg_rqbuy.arg_s_rqbuymx[i].ifrel = 1 THEN IF arg_rqbuy.arg_s_rqbuymx[i].orderid = 0 THEN IF arg_rqbuy.billtype = 0 THEN arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',请选择计划' ELSE arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',请选择销售订单' END IF rslt = 0 GOTO ext ELSE ls_ordercode = '' IF arg_rqbuy.billtype = 0 THEN SELECT ordercode,relcode INTO :ls_ordercode,:ls_relcode FROM u_order_ml WHERE orderid = :arg_rqbuy.arg_s_rqbuymx[i].orderid And scid = :arg_rqbuy.scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',查询计划编号失败' rslt = 0 GOTO ext END IF //检查申购数量 是否超过计划申购数量 Dec ld_truerqqty, ld_consignedqty, ld_thisqty SELECT rqbuyqty, truerqqty INTO :ld_consignedqty, :ld_truerqqty FROM u_OrderRqMtrl WHERE orderid = :arg_rqbuy.arg_s_rqbuymx[i].orderid AND wrkGrpid = :arg_rqbuy.arg_s_rqbuymx[i].wrkGrpid AND mtrlid = :arg_rqbuy.arg_s_rqbuymx[i].mtrlid AND status = :arg_rqbuy.arg_s_rqbuymx[i].status AND woodcode = :arg_rqbuy.arg_s_rqbuymx[i].woodcode AND pcode = :arg_rqbuy.arg_s_rqbuymx[i].pcode AND scid = :arg_rqbuy.scid And plantype = 2; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',查询物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+'计划已申购数(申请)数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF IsNull(ld_consignedqty) THEN ld_consignedqty = 0 IF IsNull(ld_truerqqty) THEN ld_truerqqty = 0 IF i > 1 THEN FOR j = 1 To i - 1 IF arg_rqbuy.arg_s_rqbuymx[i].ifrel = arg_rqbuy.arg_s_rqbuymx[j].ifrel & And arg_rqbuy.arg_s_rqbuymx[i].orderid = arg_rqbuy.arg_s_rqbuymx[j].orderid & And arg_rqbuy.arg_s_rqbuymx[i].mtrlid = arg_rqbuy.arg_s_rqbuymx[j].mtrlid & And arg_rqbuy.arg_s_rqbuymx[i].status = arg_rqbuy.arg_s_rqbuymx[j].status & And arg_rqbuy.arg_s_rqbuymx[i].woodcode = arg_rqbuy.arg_s_rqbuymx[j].woodcode & And arg_rqbuy.arg_s_rqbuymx[i].pcode = arg_rqbuy.arg_s_rqbuymx[j].pcode & And arg_rqbuy.arg_s_rqbuymx[i].wrkGrpid = arg_rqbuy.arg_s_rqbuymx[j].wrkGrpid THEN ld_thisqty += arg_rqbuy.arg_s_rqbuymx[j].qty END IF NEXT END IF // //dyy 屏蔽于 2013-04-27 // If arg_rqbuy.arg_s_rqbuymx[i].rate = 1 Then // ld_adddec = 0 // End If IF ld_consignedqty + arg_rqbuy.arg_s_rqbuymx[i].qty + ld_thisqty > ld_truerqqty + ld_adddec THEN lb_chk_order = False //改成汇总提示 ls_msg2 += '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料编码:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',物料名称:'+ls_mtrlname+',物料规格:'+ls_mtrlmode+',计划号:'+ls_ordercode ls_msg2 += ',已安排数:'+String(ld_consignedqty,'#,#0.0#########')+'未安排申购(申请):'+String(ld_truerqqty - ld_consignedqty,'#,#0.0#########') IF ld_thisqty <> 0 THEN ls_msg2 += ',本单已安排:'+String(ld_thisqty,'#,#0.0#########') END IF ls_msg2 += ',不能安排:'+String(arg_rqbuy.arg_s_rqbuymx[i].qty,'#,#0.0#########')+';~r~n' END IF ELSE SELECT u_saletask.taskcode,u_saletask.relcode INTO :ls_ordercode,:ls_relcode FROM u_saletask,u_saletaskmx WHERE u_saletask.taskid = u_saletaskmx.taskid AND u_saletask.scid = u_saletaskmx.scid AND u_saletaskmx.scid = :arg_rqbuy.scid AND u_saletaskmx.taskid = :arg_rqbuy.arg_s_rqbuymx[i].orderid And u_saletaskmx.printid = :arg_rqbuy.arg_s_rqbuymx[i].relprintid; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',查询订单编号失败' rslt = 0 GOTO ext END IF END IF arg_rqbuy.arg_s_rqbuymx[i].ordercode = ls_ordercode arg_rqbuy.arg_s_rqbuymx[i].relcode = ls_relcode END IF ELSE IF arg_rqbuy.arg_s_rqbuymx[i].orderid > 0 THEN arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',不能选择计划' rslt = 0 GOTO ext END IF arg_rqbuy.arg_s_rqbuymx[i].ordercode = '' arg_rqbuy.arg_s_rqbuymx[i].relcode = '' END IF NEXT IF sys_option_audit_mtrl <> 0 THEN IF Not lb_chk_mtrl THEN //用于汇总提示错误 rslt = 0 arg_msg = "系统选项[297]限制,~r~n" + ls_msg //物料资料未审核 GOTO ext END IF END IF IF Not lb_chk_order THEN //用于汇总提示错误 rslt = 0 arg_msg = "超计划安排申购:~r~n" + ls_msg2 //物料资料未审核 GOTO ext END IF //汇总明细 Long ll_i,ll_j Long it_mxbt_mx,it_mxbt_mx_p Int li_buy_autoday Decimal lde_minbuyqty Boolean lb_hz = False, lb_cmpl_ifhz = False Long ll_days s_requestbuymx arg_s_rqbuymxmx[],arg_s_rqbuymxmx_pqty[] IF uo_option_requestbuy_hz = 1 And (arg_rqbuy.billtype = 0 Or uo_option_cl_cp_buy = 1 ) THEN lb_cmpl_ifhz = True ELSE lb_cmpl_ifhz = False END IF //汇总 IF uof_cmpl_hz(arg_rqbuy.arg_s_rqbuymx, lb_cmpl_ifhz, arg_s_rqbuymxmx, it_mxbt_mx, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //==================================================================== // 修改:增加按最少采购量处理采购数量的代码,可能导致it_mxbt变化 //-------------------------------------------------------------------- // 作者: LHD 日期: 2013年08月23日 //==================================================================== it_mxbt = UpperBound(arg_rqbuy.arg_s_rqbuymx) //拆分 IF uof_cmpl_cf( arg_s_rqbuymxmx, it_mxbt_mx, arg_s_rqbuymxmx_pqty, it_mxbt_mx_p, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_rqbuy.requestbuyid = 0 THEN ll_requestbuyid = f_sys_scidentity(0,"u_requestbuy","requestbuyid",arg_msg,True,id_sqlca) IF ll_requestbuyid <= 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(arg_rqbuy.scid,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_rqbuy.billtype = 0 THEN ls_requestbuycode = getid(arg_rqbuy.scid,ls_sccode + 'RQ',Date(server_dt),False,sqlca) ELSEIF arg_rqbuy.billtype = 1 THEN ls_requestbuycode = getid(arg_rqbuy.scid,ls_sccode + 'AQ',Date(server_dt),False,sqlca) ELSEIF arg_rqbuy.billtype = 2 THEN ls_requestbuycode = getid(arg_rqbuy.scid,ls_sccode + 'MQ',Date(server_dt),False,sqlca) END IF IF ls_requestbuycode = "err" THEN rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_requestbuy (scid, requestbuyid, requestbuycode, requestbuydate, assign_emp, opdate, opemp, flag, relcode, dscrp, ifauto, billtype, deptid, billmtrltype) VALUES ( :arg_rqbuy.scid, :ll_requestbuyid, :ls_requestbuycode, :arg_rqbuy.requestbuydate, :arg_rqbuy.assign_emp, getdate(), :arg_opemp, 0, :arg_rqbuy.relcode, :arg_rqbuy.dscrp, :arg_rqbuy.ifauto, :arg_rqbuy.billtype, :arg_rqbuy.deptid, :arg_rqbuy.billmtrltype) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "建立单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF // uo_requestbuyid = ll_requestbuyid uo_requestbuycode = ls_requestbuycode ELSE UPDATE u_requestbuy SET requestbuydate = :arg_rqbuy.requestbuydate, assign_emp = :arg_rqbuy.assign_emp, moddate = getdate(), modemp = :arg_opemp, relcode = :arg_rqbuy.relcode, dscrp = :arg_rqbuy.dscrp, deptid = :arg_rqbuy.deptid WHERE requestbuyid = :arg_rqbuy.requestbuyid AND scid = :arg_rqbuy.scid And flag = 0; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_requestbuymx WHERE requestbuyid = :arg_rqbuy.requestbuyid And scid = :arg_rqbuy.scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有汇总明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_requestbuymxmx WHERE requestbuyid = :arg_rqbuy.requestbuyid And scid = :arg_rqbuy.scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ll_requestbuyid = arg_rqbuy.requestbuyid END IF FOR i = 1 To it_mxbt INSERT INTO u_requestbuymxmx (scid, requestbuyid, printid, orderid, mtrlid, status, woodcode, pcode, dftsptid, uqty, unit, rate, Qty, mxdscrp, ifrel, ordercode, rqdate, wrkGrpid, relprintid, storageid, sptid, plancode, relpid, price, mxdscrp2) VALUES ( :arg_rqbuy.scid, :ll_requestbuyid, :arg_rqbuy.arg_s_rqbuymx[i].printid, :arg_rqbuy.arg_s_rqbuymx[i].orderid, :arg_rqbuy.arg_s_rqbuymx[i].mtrlid, :arg_rqbuy.arg_s_rqbuymx[i].status, :arg_rqbuy.arg_s_rqbuymx[i].woodcode, :arg_rqbuy.arg_s_rqbuymx[i].pcode, :arg_rqbuy.arg_s_rqbuymx[i].dftsptid, :arg_rqbuy.arg_s_rqbuymx[i].uqty, :arg_rqbuy.arg_s_rqbuymx[i].unit, :arg_rqbuy.arg_s_rqbuymx[i].rate, :arg_rqbuy.arg_s_rqbuymx[i].qty, :arg_rqbuy.arg_s_rqbuymx[i].mxdscrp, :arg_rqbuy.arg_s_rqbuymx[i].ifrel, :arg_rqbuy.arg_s_rqbuymx[i].ordercode, :arg_rqbuy.arg_s_rqbuymx[i].rqdate, :arg_rqbuy.arg_s_rqbuymx[i].wrkGrpid, :arg_rqbuy.arg_s_rqbuymx[i].relprintid, :arg_rqbuy.arg_s_rqbuymx[i].storageid, :arg_rqbuy.arg_s_rqbuymx[i].sptid, :arg_rqbuy.arg_s_rqbuymx[i].plancode, :arg_rqbuy.arg_s_rqbuymx[i].relpid, :arg_rqbuy.arg_s_rqbuymx[i].price, :arg_rqbuy.arg_s_rqbuymx[i].mxdscrp2); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT FOR i = 1 To it_mxbt_mx_p //汇总内容 ls_ordercodestr = arg_s_rqbuymxmx_pqty[i].ordercodestr ls_relcodestr = arg_s_rqbuymxmx_pqty[i].relcodestr IF lena(ls_ordercodestr) > 255 THEN ls_ordercodestr = LeftA(ls_ordercodestr,255) IF lena(ls_relcodestr) > 255 THEN ls_relcodestr = LeftA(ls_relcodestr,255) IF lena(arg_s_rqbuymxmx_pqty[i].mxdscrp) > 200 THEN arg_s_rqbuymxmx_pqty[i].mxdscrp = LeftA(arg_s_rqbuymxmx_pqty[i].mxdscrp,200) INSERT INTO u_requestbuymx (scid, requestbuyid, printid, orderid, mtrlid, status, woodcode, pcode, dftsptid, uqty, unit, rate, Qty, mxdscrp, ifrel, ordercode, rqdate, wrkGrpid, relprintid, storageid, sptid, ordercodestr, relcodestr, plancode, relpid) VALUES ( :arg_rqbuy.scid, :ll_requestbuyid, :arg_s_rqbuymxmx_pqty[i].printid, :arg_s_rqbuymxmx_pqty[i].orderid, :arg_s_rqbuymxmx_pqty[i].mtrlid, :arg_s_rqbuymxmx_pqty[i].status, :arg_s_rqbuymxmx_pqty[i].woodcode, :arg_s_rqbuymxmx_pqty[i].pcode, :arg_s_rqbuymxmx_pqty[i].dftsptid, :arg_s_rqbuymxmx_pqty[i].uqty, :arg_s_rqbuymxmx_pqty[i].unit, :arg_s_rqbuymxmx_pqty[i].rate, :arg_s_rqbuymxmx_pqty[i].qty, :arg_s_rqbuymxmx_pqty[i].mxdscrp, :arg_s_rqbuymxmx_pqty[i].ifrel, :arg_s_rqbuymxmx_pqty[i].ordercode, :arg_s_rqbuymxmx_pqty[i].rqdate, :arg_s_rqbuymxmx_pqty[i].wrkGrpid, :arg_s_rqbuymxmx_pqty[i].relprintid, :arg_s_rqbuymxmx_pqty[i].storageid, :arg_s_rqbuymxmx_pqty[i].sptid, :ls_ordercodestr, :ls_relcodestr, :arg_s_rqbuymxmx_pqty[i].plancode, :arg_s_rqbuymxmx_pqty[i].relpid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "插入汇总内容操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT uo_requestbuyid = ll_requestbuyid IF uof_update_buy_flag(arg_rqbuy.scid,uo_requestbuyid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext 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 finishorder (long arg_scid, long arg_requestbuyid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 long cnt Int li_flag,li_billtype IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,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_buyTaskMx INNER JOIN u_buyTask ON u_buyTaskMx.scid = u_buyTask.scid AND u_buyTaskMx.taskid = u_buyTask.taskid WHERE u_buyTask.scid = :arg_scid AND u_buyTaskMx.requestbuyid = :arg_requestbuyid And ( u_buyTask.status = 0 Or u_buyTask.status = 4) and (u_buytask.billtype = :li_billtype); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询是否有未终审采购订单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = "当前申购单明细有未终审采购订单,不能执行手动完成" GOTO ext END IF UPDATE u_requestbuy SET flag = 6, accomplishdate = getdate(), finishemp = :arg_opemp WHERE requestbuyid = :arg_requestbuyid And scid = :arg_scid; 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 And rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer cfinishorder (long arg_scid, long arg_requestbuyid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_billtype DateTime null_dt SetNull(null_dt) IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 6 THEN rslt = 0 arg_msg = "单据只有在手动完成状态下才可以执行取消手动完成,请核对" GOTO ext END IF UPDATE u_requestbuy SET flag = 1, accomplishdate = :null_dt, finishemp = '' WHERE requestbuyid = :arg_requestbuyid AND scid = :arg_scid; 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 AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer add_dscrp (long arg_scid, long arg_requestbuyid, string arg_newdescppart, ref string arg_msg); Int rslt = 1 Int li_flag,li_billtype IF arg_newdescppart = '' THEN rslt = 0 arG_MSG = "要添加内容为空,操作取消" GOTO ext END IF IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,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_requestbuy SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_requestbuy.requestbuyid = :arg_requestbuyid AND u_requestbuy.scid = :arg_scid; IF SQLCA.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF ext: IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; END IF Return (rslt) end function public function integer tmpstoporder (long arg_scid, long arg_requestbuyid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_billtype IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,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_requestbuy SET flag = 2, stopemp = :arg_opemp WHERE requestbuyid = :arg_requestbuyid AND scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致暂停计划操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ELSE UPDATE u_requestbuy SET flag = 1, stopemp = '' WHERE requestbuyid = :arg_requestbuyid AND scid = :arg_scid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致取消暂停计划操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF 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 p_getifauto (long arg_scid, long arg_requestbuyid, ref integer arg_ifauto, ref string arg_msg);Int rslt = 1 SELECT ifauto INTO :arg_ifauto FROM u_requestbuy WHERE requestbuyid = :arg_requestbuyid AND scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '查询单据建立标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer del (long arg_scid, long arg_requestbuyid, integer arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_ifauto,li_billtype Long ll_orderid_arr[] Long cnt,ll_i cnt = 1 IF arg_requestbuyid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 0 THEN rslt = 0 arg_msg = '单据不是在待一审状态,不可以删除' GOTO ext END IF IF arg_ifcheck_auto = 1 THEN IF p_getifauto(arg_scid,arg_requestbuyid,li_ifauto,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_ifauto = 1 THEN rslt = 0 arg_msg = '单据为动建立的单据,不可以修改' GOTO ext END IF END IF IF uof_update_buy_flag(arg_scid,arg_requestbuyid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //DECLARE cur_mx CURSOR FOR // SELECT u_requestbuymxmx.orderid // FROM u_requestbuymxmx // WHERE u_requestbuymxmx.scid = :arg_scid // AND u_requestbuymxmx.requestbuyid = :arg_requestbuyid // And u_requestbuymxmx.orderid > 0; // //OPEN cur_mx; // //FETCH cur_mx Into :ll_orderid_arr[cnt]; // //DO WHILE sqlca.SQLCode = 0 // cnt++ // FETCH cur_mx Into :ll_orderid_arr[cnt]; //LOOP // //CLOSE cur_mx; // //cnt = cnt - 1 DELETE FROM u_requestbuymxmx WHERE requestbuyid = :arg_requestbuyid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_requestbuymx WHERE requestbuyid = :arg_requestbuyid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_requestbuy WHERE requestbuyid = :arg_requestbuyid AND scid = :arg_scid And flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //FOR ll_i = 1 To cnt // UPDATE u_order_ml // SET u_Order_ml.buy_flag = isnull(uv_order_request_buy_flag.flag, 0) // FROM u_Order_ml LEFT OUTER JOIN // uv_order_request_buy_flag ON // u_Order_ml.scid = uv_order_request_buy_flag.scid AND // u_Order_ml.OrderID = uv_order_request_buy_flag.OrderID // WHERE u_order_ml.scid = :arg_scid // And u_order_ml.orderid = :ll_orderid_arr[ll_i] ; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '更新相关生产计划申购单状态失败,'+sqlca.SQLErrText // GOTO ext // END IF //NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer tryfinish (long arg_scid, long arg_requestbuyid, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1,cnt = 0 Int li_flag,li_billtype DateTime null_dt SetNull(null_dt) IF arg_requestbuyid <= 0 THEN rslt = 0 arg_msg = '尝试完成申购单失败>错误申购单唯一码' GOTO ext END IF IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 1 AND li_flag <> 5 THEN rslt = 0 IF li_flag <> 1 THEN arg_msg = "申购单只有在进行状态下才可以执行设完成状态" ELSEIF li_flag <> 5 THEN arg_msg = "申购只有在完成状态下才可以执行撤消完成状态" END IF GOTO ext END IF Decimal ls_zerook Boolean if_finish if_finish = TRUE DECLARE zero_cur CURSOR FOR SELECT u_requestbuymx.uqty - u_requestbuymx.consignedqty - u_requestbuymx.stopqty FROM u_requestbuymx WHERE ( u_requestbuymx.requestbuyid = :arg_requestbuyid ) And ( u_requestbuymx.scid = :arg_scid ) and ( u_requestbuymx.stopflag = 0); OPEN zero_cur; FETCH zero_cur INTO :ls_zerook; DO WHILE sqlca.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_requestbuy SET flag = 5, accomplishdate = getdate(), finishemp = :publ_operator WHERE ( u_requestbuy.requestbuyid = :arg_requestbuyid ) AND u_requestbuy.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致申购完成状态设置操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF IF li_flag = 5 AND NOT if_finish THEN UPDATE u_requestbuy SET flag = 1, accomplishdate = :null_dt, finishemp = '' WHERE ( u_requestbuy.requestbuyid = :arg_requestbuyid ) AND u_requestbuy.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致申购单撤消完成状态设置操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF 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 audit (long arg_scid, long arg_requestbuyid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_billtype String ls_requestbuycode,ls_relcode,ls_dscrp IF uo_option_if_oa_requestbuy_dept = -1000 THEN rslt = 0 arg_msg = '选项:[425]非生产类物料申购单使用OA审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_request_dept_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[426]非生产类物料申购单使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_requestbuyid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 0 THEN rslt = 0 arg_msg = '单据不是在待一审状态,不可以再审' GOTO ext END IF SELECT requestbuycode,relcode,dscrp INTO :ls_requestbuycode,:ls_relcode,:ls_dscrp FROM u_requestbuy WHERE requestbuyid = :arg_requestbuyid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询单据信息失败,'+sqlca.SQLErrText GOTO ext END IF //更新审核标记 UPDATE u_requestbuy SET auditingrep = :arg_opemp, auditingdate = getdate(), flag = 4 WHERE requestbuyid = :arg_requestbuyid AND scid = :arg_scid And flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //非生产类物料申购单使用OA IF uo_option_if_oa_requestbuy_dept = 1 And uo_option_request_dept_secaudit = 1 and li_billtype = 2 THEN IF f_oa(sqlca,False,arg_msg,4174,arg_scid,arg_requestbuyid,ls_requestbuycode,ls_relcode,ls_dscrp) = 0 THEN rslt = 0 GOTO ext END IF 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 audit_2 (long arg_scid, long arg_requestbuyid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_billtype DateTime ldt_requestbuydate, ldt_opdate IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_order_ml uo_order uo_order = Create uo_order_ml uo_saletask uo_task uo_task = Create uo_saletask uo_task.commit_transaction = sqlca IF arg_requestbuyid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 4 THEN rslt = 0 arg_msg = '单据不是在一审状态,不可以再二审' GOTO ext END IF SELECT requestbuydate, opdate INTO :ldt_requestbuydate, :ldt_opdate FROM u_requestbuy WHERE requestbuyid = :arg_requestbuyid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据日期标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ldt_opdate = DateTime(Date(ldt_opdate)) s_requestbuymx s_rqbuy_mx[],s_rqbuy_mxmx[] Long ll_arr_cnt,ll_i,ll_arr_cnt_mx Long ll_scid IF getinfo(arg_scid,arg_requestbuyid,s_rqbuy_mx,ll_arr_cnt,s_rqbuy_mxmx,ll_arr_cnt_mx,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF FOR ll_i = 1 To ll_arr_cnt IF s_rqbuy_mx[ll_i].rqdate < ldt_opdate THEN arg_msg = '汇总行:'+String(ll_i)+',需求日期早于单据建立日期' rslt = 0 GOTO ext END IF NEXT //增加计划已订货数 FOR ll_i = 1 To ll_arr_cnt_mx IF s_rqbuy_mxmx[ll_i].orderid > 0 THEN IF li_billtype = 0 THEN IF uo_order.f_add_rqbuyqty(arg_scid,s_rqbuy_mxmx[ll_i].orderid,& s_rqbuy_mxmx[ll_i].wrkGrpid,& 2,& s_rqbuy_mxmx[ll_i].mtrlid,& s_rqbuy_mxmx[ll_i].mtrlcode,& s_rqbuy_mxmx[ll_i].status,& s_rqbuy_mxmx[ll_i].woodcode,& s_rqbuy_mxmx[ll_i].pcode,& s_rqbuy_mxmx[ll_i].qty,& arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ELSE SELECT scid INTO :ll_scid FROM u_saletask Where taskcode = :s_rqbuy_mxmx[ll_i].ordercode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关销售订单分部失败,'+sqlca.SQLErrText GOTO ext END IF IF uo_task.updatebqty(ll_scid,s_rqbuy_mxmx[ll_i].orderid,& s_rqbuy_mxmx[ll_i].relprintid,& s_rqbuy_mxmx[ll_i].relpid,& s_rqbuy_mxmx[ll_i].qty,& arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF NEXT //更新审核标记 UPDATE u_requestbuy SET secauditingrep = :arg_opemp, secauditingdate = getdate(), flag = 1 WHERE requestbuyid = :arg_requestbuyid AND scid = :arg_scid And flag = 4; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致单据二审操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF uof_update_buy_flag(arg_scid,arg_requestbuyid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_order RETURN rslt end function public function integer caudit (long arg_scid, long arg_requestbuyid, integer arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_ifauto,li_billtype Long cnt DateTime null_dt IF uo_option_if_oa_requestbuy_dept = -1000 THEN rslt = 0 arg_msg = '选项:[425]非生产类物料申购单使用OA审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_request_dept_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[426]非生产类物料申购单使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_if_oa_requestbuy_dept = 1 And uo_option_request_dept_secaudit = 1 THEN IF f_check_if_oaflow_caudit(arg_scid,arg_requestbuyid,4174,ARG_MSG ) = 0 THEN rslt = 0 GOTO ext END IF END IF IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF SetNull(null_dt) IF arg_requestbuyid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 4 THEN rslt = 0 ARG_MSG = '单据不是在初审状态,不可以撤审' GOTO ext END IF IF arg_ifcheck_auto = 1 THEN IF p_getifauto(arg_scid,arg_requestbuyid,li_ifauto,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF li_ifauto = 1 THEN rslt = 0 ARG_MSG = '单据为动建立的单据,不可以撤审' GOTO ext END IF END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_buytaskmx WHERE scid = :arg_scid AND requestbuyid = :arg_requestbuyid; 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 //更新审核标记 UPDATE u_requestbuy SET auditingrep = '', auditingdate = :null_dt, flag = 0 WHERE requestbuyid = :arg_requestbuyid AND scid = :arg_scid AND flag = 4; 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 p_getflag (long arg_scid, long arg_requestbuyid, ref integer arg_flag, ref integer arg_billtype, ref string arg_msg);Int rslt = 1 SELECT flag,billtype INTO :arg_flag,:arg_billtype FROM u_requestbuy WHERE requestbuyid = :arg_requestbuyid AND scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer addmxcmpl (long arg_scid, long arg_requestbuyid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 Dec ld_uqty,ld_consignedqty String ls_mtrlname,ls_mtrlcode Int li_flag,li_billtype IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 1 AND li_flag <> 5 THEN rslt = 0 arg_msg = "申购单只有在进行或完成状态下才可以执行操作" GOTO ext END IF IF arg_addqty = 0 THEN arg_msg = '没有完成数量' rslt = 0 GOTO ext END IF SELECT mtrlname,mtrlcode INTO :ls_mtrlname,:ls_mtrlcode FROM u_mtrldef,u_requestbuymx WHERE u_requestbuymx.printid = :arg_printid AND u_requestbuymx.requestbuyid = :arg_requestbuyid AND u_requestbuymx.scid = :arg_scid AND u_mtrldef.mtrlid = u_requestbuymx.mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品唯一码导致查询产品操作失败" GOTO ext END IF Long ll_mtrlid //检查是否完成 SELECT uqty,consignedqty,mtrlid INTO :ld_uqty,:ld_consignedqty,:ll_mtrlid FROM u_requestbuymx WHERE ( printid = :arg_printid ) AND ( requestbuyid = :arg_requestbuyid ) And ( scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误查询产品唯一码或计划计划数和完成数量操作失败" GOTO ext END IF Decimal ld_uprate,ld_upqty SELECT upbuyrate , upbuyqty INTO :ld_uprate,:ld_upqty FROM u_mtrldef Where mtrlid = :ll_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+Trim(ls_mtrlcode)+'超收货比例失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF NOT f_power_ind(1405,sys_msg_pow) OR sys_power_issuper THEN IF ld_uqty * (1 + ld_uprate) + ld_upqty < arg_addqty + ld_consignedqty THEN rslt = 0 arg_msg = '该申购单明细产品:'+ls_mtrlname+'未完成数量:'+String(ld_uqty - ld_consignedqty,'#,##0.00##' )+',允许订货上限为:'+String(ld_uqty * (1 + ld_uprate) + ld_upqty - ld_consignedqty,'#,##0.00##')+',少于本次完成数量:'+String(arg_addqty,'#,##0.00##') GOTO ext END IF ELSE IF ld_uqty < arg_addqty + ld_consignedqty THEN rslt = 0 arg_msg = '该申购单明细产品:'+ls_mtrlname+'未完成数量:'+String(ld_uqty - ld_consignedqty,'#,##0.00##' )+',少于本次完成数量:'+String(arg_addqty,'#,##0.00##') GOTO ext END IF END IF UPDATE u_requestbuymx SET consignedqty = consignedqty + :arg_addqty WHERE ( printid = :arg_printid ) AND ( requestbuyid = :arg_requestbuyid ) And ( scid = :arg_scid ); 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 AND rslt = 1 THEN COMMIT; END IF Return (rslt) end function public function integer caudit_2 (long arg_scid, long arg_requestbuyid, integer arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_ifauto,li_billtype DateTime null_dt Long cnt IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF SetNull(null_dt) IF uo_option_buytask_spt = -1000 THEN arg_msg = '选项:[109]采购订单供应商严格按申购单,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_if_oa_requestbuy_dept = -1000 THEN rslt = 0 arg_msg = '选项:[425]非生产类物料申购单使用OA审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_request_dept_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[426]非生产类物料申购单使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF uo_order_ml uo_order uo_order = CREATE uo_order_ml uo_saletask uo_task uo_task = CREATE uo_saletask uo_task.commit_transaction = sqlca IF arg_requestbuyid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF uo_option_if_oa_requestbuy_dept = 1 And uo_option_request_dept_secaudit = 1 and audit_buildtype = 0 THEN IF f_check_if_oaflow(arg_scid,arg_requestbuyid,4174,ARG_MSG ) = 0 THEN rslt = 0 GOTO ext END IF END IF IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,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_buytaskmx WHERE ( u_buytaskmx.scid = :arg_scid ) AND ( u_buytaskmx.requestbuyid = :arg_requestbuyid ) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致查询申购单数量操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "申购单已经有相关采购订单,不可以撤消审核" GOTO ext END IF //检查明细是否已有审核内容 IF uo_option_buytask_spt = 1 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_requestbuymx WHERE requestbuyid = :arg_requestbuyid AND scid = :arg_scid AND flag = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询明细是否有已审核内容失败'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = '申购单存在已审核供应商的明细内容,不可以撤审单据' GOTO ext END IF END IF IF arg_ifcheck_auto = 1 THEN IF p_getifauto(arg_scid,arg_requestbuyid,li_ifauto,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF li_ifauto = 1 THEN rslt = 0 ARG_MSG = '单据为动建立的单据,不可以撤审' GOTO ext END IF END IF s_requestbuymx s_rqbuy_mx[],s_rqbuy_mxmx[] Long ll_arr_cnt,ll_i,ll_arr_cnt_mx long ll_scid IF getinfo(arg_scid,arg_requestbuyid,s_rqbuy_mx,ll_arr_cnt,s_rqbuy_mxmx,ll_arr_cnt_mx,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF FOR ll_i = 1 TO ll_arr_cnt_mx IF s_rqbuy_mxmx[ll_i].orderid > 0 THEN IF li_billtype = 0 THEN IF uo_order.f_add_rqbuyqty(arg_scid,s_rqbuy_mxmx[ll_i].orderid,& s_rqbuy_mxmx[ll_i].wrkGrpid,& 2,& s_rqbuy_mxmx[ll_i].mtrlid,& s_rqbuy_mxmx[ll_i].mtrlcode,& s_rqbuy_mxmx[ll_i].status,& s_rqbuy_mxmx[ll_i].woodcode,& s_rqbuy_mxmx[ll_i].pcode,& 0 - s_rqbuy_mxmx[ll_i].qty,& ARG_MSG,FALSE) = 0 THEN rslt = 0 GOTO ext END IF ELSE select scid into :ll_scid from u_saletask where taskcode = :s_rqbuy_mxmx[ll_i].ordercode; if sqlca.sqlcode <> 0 then rslt = 0 arg_msg = '查询相关销售订单分部失败,'+sqlca.sqlerrtext goto ext end if IF uo_task.updatebqty(ll_scid,s_rqbuy_mxmx[ll_i].orderid,& s_rqbuy_mxmx[ll_i].relprintid,& s_rqbuy_mxmx[ll_i].relpid,& 0 - s_rqbuy_mxmx[ll_i].qty,& ARG_MSG,FALSE) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF NEXT //更新审核标记 UPDATE u_requestbuy SET secauditingrep = '', secauditingdate = :null_dt, flag = 4 WHERE requestbuyid = :arg_requestbuyid AND scid = :arg_scid AND flag = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致单据二级撤审操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF uof_update_buy_flag(arg_scid,arg_requestbuyid,arG_MSG,False) = 0 THEN rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF DESTROY uo_order RETURN rslt end function public function integer audit_mx (long arg_scid, long arg_requestbuyid, long arg_printid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_billtype Long ll_sptid Long ll_flagmx IF arg_requestbuyid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 1 THEN rslt = 0 ARG_MSG = '单据不是在进行状态,不可以审核明细内容' GOTO ext END IF SELECT sptid,flag INTO :ll_sptid,:ll_flagmx FROM u_requestbuymx WHERE scid = :arg_scid AND requestbuyid = :arg_requestbuyid AND printid = :arg_printid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询明细供应商内容失败'+sqlca.SQLErrText GOTO ext END IF IF ll_flagmx = 1 THEN rslt = 0 ARG_MSG = '只在在待供应商审核的状态下才能执行供应商审核' GOTO ext END IF IF ll_sptid = 0 THEN rslt = 0 ARG_MSG = '没有指定供应商,不能执行明细审核' GOTO ext END IF //更新审核标记 UPDATE u_requestbuymx SET auditrep = :arg_opemp, auditdate = getdate(), flag = 1 WHERE requestbuyid = :arg_requestbuyid AND scid = :arg_scid AND printid = :arg_printid 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_mx (long arg_scid, long arg_requestbuyid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_ifauto,li_billtype Long cnt DateTime null_dt SetNull(null_dt) IF arg_requestbuyid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF SELECT flag INTO :li_flag FROM u_requestbuymx WHERE requestbuyid = :arg_requestbuyid AND scid = :arg_scid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询申购单明细审核状态失败'+sqlca.SQLErrText GOTO ext END IF IF li_flag = 0 THEN rslt = 0 ARG_MSG = '申购单明细只有在已审核状态下才能执行撤审' GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_buytaskmx WHERE scid = :arg_scid AND requestbuyid = :arg_requestbuyid AND rqmxprintid = :arg_printid and uqty > rebuyqty; 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 //更新审核标记 UPDATE u_requestbuymx SET auditrep = '', auditdate = :null_dt, flag = 0 WHERE requestbuyid = :arg_requestbuyid AND scid = :arg_scid AND printid = :arg_printid AND flag = 1; 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 getinfo (long arg_scid, long arg_requestbuyid, ref s_requestbuymx arg_ref_rqmx[], ref long arg_arr_cnt, ref s_requestbuymx arg_ref_rqmxmx[], ref long arg_arr_cnt_mx, ref string arg_msg);Int rslt = 1 Long i = 1,no_mxcheck = 0 IF arg_requestbuyid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF //用游标读取明细 DECLARE cur_rqbuymx CURSOR FOR SELECT u_requestbuymx.orderid, u_requestbuymx.mtrlid, u_requestbuymx.status, u_requestbuymx.woodcode, u_requestbuymx.pcode, u_requestbuymx.Qty, u_mtrldef.mtrlcode, u_requestbuymx.wrkGrpid, u_requestbuymx.relprintid, u_requestbuymx.storageid, u_requestbuymx.relpid, u_requestbuymx.rqdate FROM u_requestbuymx,u_mtrldef WHERE u_requestbuymx.requestbuyid = :arg_requestbuyid AND u_requestbuymx.scid = :arg_scid AND u_requestbuymx.mtrlid = u_mtrldef.mtrlid Order By u_requestbuymx.printid; OPEN cur_rqbuymx; FETCH cur_rqbuymx INTO :arg_ref_rqmx[i].orderid, :arg_ref_rqmx[i].mtrlid, :arg_ref_rqmx[i].status,:arg_ref_rqmx[i].woodcode, :arg_ref_rqmx[i].pcode,:arg_ref_rqmx[i].Qty, :arg_ref_rqmx[i].mtrlcode,:arg_ref_rqmx[i].wrkGrpid, :arg_ref_rqmx[i].relprintid,:arg_ref_rqmx[i].storageid, :arg_ref_rqmx[i].relpid, :arg_ref_rqmx[i].rqdate; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_rqbuymx INTO :arg_ref_rqmx[i].orderid, :arg_ref_rqmx[i].mtrlid, :arg_ref_rqmx[i].status,:arg_ref_rqmx[i].woodcode, :arg_ref_rqmx[i].pcode,:arg_ref_rqmx[i].Qty, :arg_ref_rqmx[i].mtrlcode,:arg_ref_rqmx[i].wrkGrpid, :arg_ref_rqmx[i].relprintid,:arg_ref_rqmx[i].storageid, :arg_ref_rqmx[i].relpid, :arg_ref_rqmx[i].rqdate; LOOP CLOSE cur_rqbuymx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_requestbuymx WHERE scid = :arg_scid And requestbuyid = :arg_requestbuyid; 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 Long j j = 1 //用游标读取明细 DECLARE cur_rqbuymxmx CURSOR FOR SELECT u_requestbuymxmx.orderid, u_requestbuymxmx.mtrlid, u_requestbuymxmx.status, u_requestbuymxmx.woodcode, u_requestbuymxmx.pcode, u_requestbuymxmx.Qty, u_mtrldef.mtrlcode, u_requestbuymxmx.wrkGrpid, u_requestbuymxmx.relprintid, u_requestbuymxmx.storageid, u_requestbuymxmx.ordercode, u_requestbuymxmx.relpid, u_requestbuymxmx.price, u_requestbuymxmx.mxdscrp2 FROM u_requestbuymxmx,u_mtrldef WHERE u_requestbuymxmx.requestbuyid = :arg_requestbuyid AND u_requestbuymxmx.scid = :arg_scid AND u_requestbuymxmx.mtrlid = u_mtrldef.mtrlid Order By u_requestbuymxmx.printid; OPEN cur_rqbuymxmx; FETCH cur_rqbuymxmx INTO :arg_ref_rqmxmx[j].orderid, :arg_ref_rqmxmx[j].mtrlid, :arg_ref_rqmxmx[j].status,:arg_ref_rqmxmx[j].woodcode, :arg_ref_rqmxmx[j].pcode,:arg_ref_rqmxmx[j].Qty, :arg_ref_rqmxmx[j].mtrlcode,:arg_ref_rqmxmx[j].wrkGrpid, :arg_ref_rqmxmx[j].relprintid,:arg_ref_rqmxmx[j].storageid, :arg_ref_rqmxmx[j].ordercode,:arg_ref_rqmxmx[j].relpid, :arg_ref_rqmxmx[j].price,:arg_ref_rqmxmx[j].mxdscrp2; DO WHILE sqlca.SQLCode = 0 j++ FETCH cur_rqbuymxmx INTO :arg_ref_rqmxmx[j].orderid, :arg_ref_rqmxmx[j].mtrlid, :arg_ref_rqmxmx[j].status,:arg_ref_rqmxmx[j].woodcode, :arg_ref_rqmxmx[j].pcode,:arg_ref_rqmxmx[j].Qty, :arg_ref_rqmxmx[j].mtrlcode,:arg_ref_rqmxmx[j].wrkGrpid, :arg_ref_rqmxmx[j].relprintid,:arg_ref_rqmxmx[j].storageid, :arg_ref_rqmxmx[j].ordercode,:arg_ref_rqmxmx[j].relpid, :arg_ref_rqmxmx[j].price,:arg_ref_rqmxmx[j].mxdscrp2; LOOP CLOSE cur_rqbuymxmx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_requestbuymxmx WHERE scid = :arg_scid And requestbuyid = :arg_requestbuyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,单据明细数量" GOTO ext END IF IF j <> (no_mxcheck + 1) THEN rslt = 0 arg_msg = "查询操作失败,单据明细内容" GOTO ext END IF arg_arr_cnt_mx = j - 1 ext: RETURN rslt end function public function integer stopmx (long arg_scid, long arg_requestbuyid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_stopflag String ls_outtype DateTime null_dt Decimal ld_notconsignedqty Int ll_flag,ll_billtype IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF SetNull(null_dt) IF p_getflag(arg_scid,arg_requestbuyid,ll_flag,ll_billtype,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 1 THEN arg_msg = '申购单只能在进行状态下才能操作' rslt = 0 GOTO ext END IF SELECT stopflag INTO :li_stopflag FROM u_requestbuymx WHERE scid = :arg_scid AND requestbuyid = :arg_requestbuyid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败' rslt = 0 GOTO ext END IF IF arg_flag = 0 THEN IF li_stopflag = 0 THEN arg_msg = '明细物料'+arg_mtrlcode+'还未中止,不能取消中止' rslt = 0 GOTO ext END IF ELSE IF li_stopflag = 1 THEN arg_msg = '明细物料'+arg_mtrlcode+'已中止,不能重复中止' rslt = 0 GOTO ext END IF END IF IF arg_flag = 1 THEN SELECT u_requestbuymx.uQty - u_requestbuymx.consignedqty INTO :ld_notconsignedqty FROM u_requestbuymx WHERE scid = :arg_scid AND requestbuyid = :arg_requestbuyid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败' rslt = 0 GOTO ext END IF IF ld_notconsignedqty <= 0 THEN arg_msg = '明细物料'+arg_mtrlcode+'已完成订货,不能中止' rslt = 0 GOTO ext END IF END IF IF arg_flag = 0 THEN UPDATE u_requestbuymx SET stopflag = 0, stopemp = '', stopdate = :null_dt, stopreason = '' WHERE scid = :arg_scid AND requestbuyid = :arg_requestbuyid AND printid = :arg_printid; ELSE UPDATE u_requestbuymx SET stopflag = 1, stopemp = :publ_operator, stopdate = getdate(), stopreason = :arg_stopreason WHERE scid = :arg_scid AND requestbuyid = :arg_requestbuyid AND printid = :arg_printid; END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新明细'+arg_mtrlcode+'中止标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF tryfinish(arg_scid,arg_requestbuyid,arg_msg,FALSE) = 0 THEN rslt = 0 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 stoporder (long arg_scid, long arg_requestbuyid, string arg_stopreason, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_billtype IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 1 THEN rslt = 0 arg_msg = "单据只有在进行状态才可以执行终止,请核对" GOTO ext END IF arg_stopreason = Trim(arg_stopreason) IF arg_stopreason = '' THEN rslt = 0 ARG_MSG = "请输入终止原因" GOTO ext END IF UPDATE u_requestbuy SET flag = 3, stopemp = :arg_opemp, stopreason = :arg_stopreason, accomplishdate = getdate(), finishemp = :arg_opemp WHERE requestbuyid = :arg_requestbuyid AND scid = :arg_scid AND flag = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致终止单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSE IF sqlca.SQLNRows = 0 THEN arg_msg = '单据正在终止...' rslt = 0 GOTO ext END IF 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 stopqty (long arg_scid, long arg_requestbuyid, long arg_printid, string arg_mtrlcode, decimal arg_stopqty, string arg_stopreason, ref string arg_msg, boolean arg_commit); Int rslt = 1 Int li_flag, li_billtype DateTime null_dt Decimal ld_notconsignedqty, lde_stopqty DateTime server_datetime String ls_stopemp decimal ld_not_auditqty SELECT Top 1 getdate() Into :server_datetime From u_user Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF IsNull(arg_stopqty) THEN arg_stopqty = 0 IF arg_stopqty < 0 THEN arg_msg = '订单终止数不能少于0,请检查' rslt = 0 GOTO ext END IF IF arg_stopqty = 0 THEN SetNull(server_datetime) ls_stopemp = '' arg_stopreason = '' ELSE ls_stopemp = publ_operator END IF SetNull(null_dt) IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,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 u_requestbuymx.uQty - u_requestbuymx.consignedqty, u_requestbuymx.stopqty, isnull(v_noaudit_qty.uqty,0) - isnull(v_noaudit_qty.rebuyqty,0) not_auditqty INTO :ld_notconsignedqty, :lde_stopqty, :ld_not_auditqty FROM u_requestbuymx LEFT OUTER JOIN (SELECT u_buyTaskMx.requestbuyid, u_buyTaskMx.rqmxprintid, u_buyTaskMx.scid, SUM(u_buyTaskMx.Qty) AS qty, SUM(CASE WHEN dbo.u_buyTaskMx.unit = u_requestbuymx.unit THEN dbo.u_buyTaskMx.uqty ELSE round(dbo.u_buyTaskMx.uqty * dbo.u_buyTaskMx.rate / dbo.u_requestbuymx.rate, 5) END) AS uqty, SUM(CASE WHEN dbo.u_buyTaskMx.unit = u_requestbuymx.unit THEN dbo.u_buyTaskMx.rebuyqty ELSE round(dbo.u_buyTaskMx.rebuyqty * dbo.u_buyTaskMx.rate / dbo.u_requestbuymx.rate, 5) END) AS rebuyqty FROM u_buyTaskMx INNER JOIN u_requestbuymx ON u_buyTaskMx.scid = u_requestbuymx.scid AND u_buyTaskMx.requestbuyid = u_requestbuymx.requestbuyid AND u_buyTaskMx.rqmxprintid = u_requestbuymx.printid INNER JOIN u_buyTask ON u_buyTaskMx.scid = u_buyTask.scid AND u_buyTaskMx.TaskID = u_buyTask.TaskID WHERE (u_buyTaskMx.iforder = 1) AND (u_buyTaskMx.requestbuyid > 0) AND (u_buyTask.Status = 0) GROUP BY u_buyTaskMx.requestbuyid, u_buyTaskMx.rqmxprintid, u_buyTaskMx.scid) v_noaudit_qty ON u_requestbuymx.scid = v_noaudit_qty.scid AND u_requestbuymx.requestbuyid = v_noaudit_qty.requestbuyid AND u_requestbuymx.printid = v_noaudit_qty.rqmxprintid WHERE u_requestbuymx.scid = :arg_scid AND u_requestbuymx.requestbuyid = :arg_requestbuyid And u_requestbuymx.printid = :arg_printid Using sqlca ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败' rslt = 0 GOTO ext END IF IF arg_stopqty > ld_notconsignedqty - ld_not_auditqty THEN arg_msg = '明细物料'+arg_mtrlcode+'可终止数只有:'+String(ld_notconsignedqty - ld_not_auditqty,'#,##0.##########') +'不能终止:'+String(arg_stopqty,'#,##0.##########') rslt = 0 GOTO ext END IF UPDATE u_requestbuymx SET stopqty = :arg_stopqty, stopemp = :ls_stopemp, stopdate = :server_datetime, stopreason = :arg_stopreason WHERE scid = :arg_scid AND requestbuyid = :arg_requestbuyid And printid = :arg_printid Using sqlca ; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新明细'+arg_mtrlcode+'中止标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF tryfinish(arg_scid,arg_requestbuyid,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK Using sqlca ; ELSEIF rslt = 1 And arg_commit THEN COMMIT Using sqlca ; END IF //Destroy uo_rqbuy //Destroy uo_order //Destroy ds_tmp_update RETURN rslt end function public function integer uof_cmpl_cf (s_requestbuymx arg_s_rqbuymxmx[], long it_mxbt_mx, ref s_requestbuymx arg_s_rqbuymxmx_pqty[], ref long it_mxbt_mx_p, ref string arg_msg);//arg_s_rqbuymxmx[it_mxbt_mx //按需拆分 汇总明细 Long rslt = 1 //Long it_mxbt, it_mxbt_mx_tmp //it_mxbt_mx, Long i,j //Int li_buy_autoday //Decimal lde_minbuyqty //Boolean lb_hz = False //Long ll_days Decimal ld_minqty, ld_maxqty, ld_maxdays, ld_mindays, ld_qty Int li_ifsendlot, li_buydec it_mxbt_mx_p = 0 //s_requestbuymx arg_s_rqbuymxmx_pqty[] //拆分汇总明细 //==================================================================== // 修改:只增加注释,没有修改 // 拆分条件 // 1.使用送货批量勾上; // 2.拆分批量 = 报警上限-报警下限 > 0; // 3.拆分天数 = 库存上限使用天数 - 库存下限使用天数 > 0 //-------------------------------------------------------------------- // 作者: LHD 日期: 2013年08月29日 //==================================================================== FOR i = 1 To it_mxbt_mx SELECT ifsendlot,maxqty,minqty,maxdays,mindays,buydec INTO :li_ifsendlot,:ld_maxqty,:ld_minqty,:ld_maxdays,:ld_mindays,:li_buydec FROM u_mtrldef Where mtrlid = :arg_s_rqbuymxmx[i].mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料是否使用送货批量失败,'+sqlca.SQLErrText GOTO ext END IF IF li_ifsendlot = 0 Or (ld_maxqty - ld_minqty = 0) THEN it_mxbt_mx_p++ arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].printid = it_mxbt_mx_p arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].orderid = arg_s_rqbuymxmx[i].orderid arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].mtrlid = arg_s_rqbuymxmx[i].mtrlid arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].status = arg_s_rqbuymxmx[i].status arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].woodcode = arg_s_rqbuymxmx[i].woodcode arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].pcode = arg_s_rqbuymxmx[i].pcode arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].dftsptid = arg_s_rqbuymxmx[i].dftsptid arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].uqty = arg_s_rqbuymxmx[i].uqty arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].unit = arg_s_rqbuymxmx[i].unit arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].rate = arg_s_rqbuymxmx[i].rate arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].qty = arg_s_rqbuymxmx[i].qty arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].mxdscrp = arg_s_rqbuymxmx[i].mxdscrp arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].ifrel = arg_s_rqbuymxmx[i].ifrel arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].ordercode = arg_s_rqbuymxmx[i].ordercode arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].rqdate = arg_s_rqbuymxmx[i].rqdate arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].wrkGrpid = arg_s_rqbuymxmx[i].wrkGrpid arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].relprintid = arg_s_rqbuymxmx[i].relprintid arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].storageid = arg_s_rqbuymxmx[i].storageid arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].sptid = arg_s_rqbuymxmx[i].sptid arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].ordercodestr = arg_s_rqbuymxmx[i].ordercodestr arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].relcodestr = arg_s_rqbuymxmx[i].relcodestr arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].plancode = arg_s_rqbuymxmx[i].plancode arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].relpid = arg_s_rqbuymxmx[i].relpid ELSE FOR j = 1 To Ceiling(Truncate(arg_s_rqbuymxmx[i].qty / (ld_maxqty - ld_minqty),10)) IF j = Ceiling(Truncate(arg_s_rqbuymxmx[i].qty / (ld_maxqty - ld_minqty),10)) THEN ld_qty = arg_s_rqbuymxmx[i].qty - (ld_maxqty - ld_minqty) * (j - 1) ELSE ld_qty = (ld_maxqty - ld_minqty) END IF it_mxbt_mx_p++ arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].printid = it_mxbt_mx_p arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].orderid = arg_s_rqbuymxmx[i].orderid arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].mtrlid = arg_s_rqbuymxmx[i].mtrlid arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].status = arg_s_rqbuymxmx[i].status arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].woodcode = arg_s_rqbuymxmx[i].woodcode arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].pcode = arg_s_rqbuymxmx[i].pcode arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].dftsptid = arg_s_rqbuymxmx[i].dftsptid arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].uqty = Round(ld_qty / arg_s_rqbuymxmx[i].rate,li_buydec) arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].unit = arg_s_rqbuymxmx[i].unit arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].rate = arg_s_rqbuymxmx[i].rate arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].qty = ld_qty arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].mxdscrp = arg_s_rqbuymxmx[i].mxdscrp arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].ifrel = arg_s_rqbuymxmx[i].ifrel arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].ordercode = arg_s_rqbuymxmx[i].ordercode arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].rqdate = DateTime(RelativeDate(Date(arg_s_rqbuymxmx[i].rqdate),(ld_maxdays - ld_mindays) * (j - 1) ),Time(arg_s_rqbuymxmx[i].rqdate)) arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].wrkGrpid = arg_s_rqbuymxmx[i].wrkGrpid arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].relprintid = arg_s_rqbuymxmx[i].relprintid arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].storageid = arg_s_rqbuymxmx[i].storageid arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].sptid = arg_s_rqbuymxmx[i].sptid arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].ordercodestr = arg_s_rqbuymxmx[i].ordercodestr arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].relcodestr = arg_s_rqbuymxmx[i].relcodestr arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].plancode = arg_s_rqbuymxmx[i].plancode arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].relpid = arg_s_rqbuymxmx[i].relpid NEXT END IF NEXT ext: RETURN rslt end function public function integer uof_cmpl_hz (ref s_requestbuymx arg_s_rqbuymx[], boolean arg_ifhz, ref s_requestbuymx arg_s_rqbuymxmx[], ref long it_mxbt_mx, ref string arg_msg);//arg_s_rqbuymxmx[it_mxbt_mx //汇总明细 Long rslt = 1 Long it_mxbt, it_mxbt_mx_tmp //it_mxbt_mx, Long it_mxbt_mx_p Long ll_i,ll_j, ll_k, ll_m,ll_n, ll_row Int li_buy_autoday, li_rebuytype Decimal lde_minbuyqty, lde_total_qty, lde_restqty, lde_restuqty, lde_addqty, lde_adduqty, lde_rebuylot Boolean lb_mx_hz = False //明细是否合并 Boolean lb_hz = False //是否合并 Boolean lb_NewHzType = False //是否按新的合并补足方式处理 Decimal lde_PBuyQty //采购批量;按li_rebuytype处理,2-申购批量,4-最少采购量 Long ll_days Decimal ld_minqty, ld_maxqty, ld_maxdays, ld_mindays, lde_bz_qty //补足数量 Int li_ifsendlot, li_buydec Int li_balctype, li_storagetype, li_ifpackpro datastore ds_hz ds_hz = Create datastore ds_hz.DataObject = 'dw_uo_requestbuy_hz_cmpl' it_mxbt_mx = 0 it_mxbt_mx_p = 0 s_requestbuymx arg_s_hz_tmp[] , arg_s_null[] //, arg_s_rqbuymxmx[],arg_s_rqbuymxmx_pqty[] it_mxbt = UpperBound(arg_s_rqbuymx) FOR ll_i = 1 To it_mxbt //增加一种方式, 考虑仓库是否使用客户库存,且物料资料的<仓库属性>使用0-根据仓库属性, 满足条件的不合并 lhd20140813 IF arg_ifhz THEN IF arg_s_rqbuymx[ll_i].ifrel = 0 THEN lb_mx_hz = True ELSE IF arg_s_rqbuymx[ll_i].storageid = 0 THEN li_balctype = 0 ELSE SELECT u_storage.balctype INTO :li_balctype FROM u_storage Where storageid = :arg_s_rqbuymx[ll_i].storageid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询仓库属性失败,'+sqlca.SQLErrText GOTO ext END IF END IF SELECT storagetype, ifpackpro INTO :li_storagetype, :li_ifpackpro FROM u_mtrldef Where mtrlid = :arg_s_rqbuymx[ll_i].mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料资料库存属性失败,'+sqlca.SQLErrText GOTO ext END IF IF li_balctype = 1 And li_storagetype = 0 and li_ifpackpro <> 0 THEN lb_mx_hz = False ELSE lb_mx_hz = True END IF END IF ELSE lb_mx_hz = False END IF IF lb_mx_hz THEN IF arg_s_rqbuymx[ll_i].ifcmpl = 1 THEN CONTINUE //已经处理过的,不再重复 it_mxbt_mx_tmp = 0 arg_s_hz_tmp = arg_s_null //当前处理的物料汇总结果 lde_total_qty = 0 //重置ds ds_hz.Reset() //先插入自己一行 ll_row = ds_hz.InsertRow(0) ds_hz.Object.id[ll_row] = ll_i //对应的数组下标 ds_hz.Object.rqdate[ll_row] = arg_s_rqbuymx[ll_i].rqdate lde_total_qty += arg_s_rqbuymx[ll_i].qty //采购总数量 //找相同的物料, 准备批量处理数据 IF ll_j < it_mxbt THEN FOR ll_j = ll_i + 1 To it_mxbt IF arg_s_rqbuymx[ll_j].mtrlid = arg_s_rqbuymx[ll_i].mtrlid And & arg_s_rqbuymx[ll_j].status = arg_s_rqbuymx[ll_i].status And & arg_s_rqbuymx[ll_j].woodcode = arg_s_rqbuymx[ll_i].woodcode And & arg_s_rqbuymx[ll_j].pcode = arg_s_rqbuymx[ll_i].pcode And & arg_s_rqbuymx[ll_j].unit = arg_s_rqbuymx[ll_i].unit And & arg_s_rqbuymx[ll_j].plancode = arg_s_rqbuymx[ll_i].plancode And & arg_s_rqbuymx[ll_j].storageid = arg_s_rqbuymx[ll_i].storageid THEN ll_row = ds_hz.InsertRow(0) ds_hz.Object.id[ll_row] = ll_j ds_hz.Object.rqdate[ll_row] = arg_s_rqbuymx[ll_j].rqdate lde_total_qty += arg_s_rqbuymx[ll_j].qty END IF NEXT END IF //排序 按时间 ds_hz.SetSort('rqdate') ds_hz.Sort() SELECT ifsendlot,maxqty,minqty,maxdays,mindays,buydec,buy_autoday, minbuyqty, rebuytype, rebuylot INTO :li_ifsendlot,:ld_maxqty,:ld_minqty,:ld_maxdays,:ld_mindays,:li_buydec, :li_buy_autoday, :lde_minbuyqty, :li_rebuytype,:lde_rebuylot FROM u_mtrldef Where mtrlid = :arg_s_rqbuymx[ll_i].mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料是否考虑合并天数失败,'+sqlca.SQLErrText GOTO ext END IF ll_n = 1 //采购批量 IF li_rebuytype = 4 THEN lde_PBuyQty = lde_minbuyqty ELSEIF li_rebuytype = 2 THEN lde_PBuyQty = lde_rebuylot ELSE lde_PBuyQty = lde_minbuyqty //暂时默认考虑最少采购量 END IF If (li_rebuytype = 4 And lde_minbuyqty > 0) Or (li_rebuytype = 2 And lde_rebuylot > 0) THEN //采用新的汇总补足方式 lb_NewHzType = True ELSE lb_NewHzType = False END IF IF Not lb_NewHzType THEN //Not 按倍数补足且批量>0 //按最少采购量 //合并 FOR ll_k = 1 To ds_hz.RowCount() ll_j = ds_hz.Object.id[ll_k] lb_hz = False FOR ll_m = ll_n To UpperBound(arg_s_hz_tmp) //检查物料是否有符号合并条件的 //20130829 新合并原则 //1.总数量 < 最少采购量的, 全部合并且按最少采购量补足 //2.总数量 >= 最少采购量的,只考虑合并天数合并 IF lde_total_qty < lde_PBuyQty THEN //考虑最少采购量 lb_hz = True ELSE //考虑合并天数 ll_days = DaysAfter(Date(arg_s_hz_tmp[ll_m].rqdate), Date(arg_s_rqbuymx[ll_j].rqdate)) IF ll_days >= 0 THEN IF ll_days <= li_buy_autoday THEN lb_hz = True ELSE lb_hz = False END IF ELSE IF Abs(ll_days) <= li_buy_autoday THEN lb_hz = True ELSE lb_hz = False END IF END IF END IF //合并的 IF lb_hz THEN arg_s_hz_tmp[ll_m].qty += arg_s_rqbuymx[ll_j].qty arg_s_hz_tmp[ll_m].uqty += arg_s_rqbuymx[ll_j].uqty IF Trim(arg_s_rqbuymx[ll_j].ordercode) <> '' THEN IF Trim(arg_s_hz_tmp[ll_m].ordercodestr) = '' THEN arg_s_hz_tmp[ll_m].ordercodestr = arg_s_rqbuymx[ll_j].ordercode ELSE arg_s_hz_tmp[ll_m].ordercodestr = arg_s_hz_tmp[ll_m].ordercodestr + ','+ arg_s_rqbuymx[ll_j].ordercode END IF END IF IF Trim(arg_s_rqbuymx[ll_j].relcode) <> '' THEN IF Trim(arg_s_hz_tmp[ll_m].relcodestr) = '' THEN arg_s_hz_tmp[ll_m].relcodestr = arg_s_rqbuymx[ll_j].relcode ELSE arg_s_hz_tmp[ll_m].relcodestr = arg_s_hz_tmp[ll_m].relcodestr + ','+ arg_s_rqbuymx[ll_j].relcode END IF END IF arg_s_hz_tmp[ll_m].ifrel = 0 arg_s_hz_tmp[ll_m].ordercode = '' arg_s_hz_tmp[ll_m].wrkGrpid = 0 arg_s_hz_tmp[ll_m].relprintid = 0 arg_s_hz_tmp[ll_m].orderid = 0 arg_s_hz_tmp[ll_m].relpid = 0 arg_s_rqbuymx[ll_j].ifcmpl = 1 //标记已处理 //ll_n = ll_m //下一条循环, 从这条开始计算合并 GOTO next_ END IF NEXT //不合并的, 新增一条记录 it_mxbt_mx_tmp++ arg_s_hz_tmp[it_mxbt_mx_tmp].printid = it_mxbt_mx_tmp arg_s_hz_tmp[it_mxbt_mx_tmp].orderid = arg_s_rqbuymx[ll_j].orderid arg_s_hz_tmp[it_mxbt_mx_tmp].mtrlid = arg_s_rqbuymx[ll_j].mtrlid arg_s_hz_tmp[it_mxbt_mx_tmp].status = arg_s_rqbuymx[ll_j].status arg_s_hz_tmp[it_mxbt_mx_tmp].woodcode = arg_s_rqbuymx[ll_j].woodcode arg_s_hz_tmp[it_mxbt_mx_tmp].pcode = arg_s_rqbuymx[ll_j].pcode arg_s_hz_tmp[it_mxbt_mx_tmp].dftsptid = arg_s_rqbuymx[ll_j].dftsptid arg_s_hz_tmp[it_mxbt_mx_tmp].uqty = arg_s_rqbuymx[ll_j].uqty arg_s_hz_tmp[it_mxbt_mx_tmp].unit = arg_s_rqbuymx[ll_j].unit arg_s_hz_tmp[it_mxbt_mx_tmp].rate = arg_s_rqbuymx[ll_j].rate arg_s_hz_tmp[it_mxbt_mx_tmp].qty = arg_s_rqbuymx[ll_j].qty arg_s_hz_tmp[it_mxbt_mx_tmp].mxdscrp = arg_s_rqbuymx[ll_j].mxdscrp arg_s_hz_tmp[it_mxbt_mx_tmp].ifrel = arg_s_rqbuymx[ll_j].ifrel arg_s_hz_tmp[it_mxbt_mx_tmp].ordercode = arg_s_rqbuymx[ll_j].ordercode arg_s_hz_tmp[it_mxbt_mx_tmp].rqdate = arg_s_rqbuymx[ll_j].rqdate arg_s_hz_tmp[it_mxbt_mx_tmp].wrkGrpid = arg_s_rqbuymx[ll_j].wrkGrpid arg_s_hz_tmp[it_mxbt_mx_tmp].relprintid = arg_s_rqbuymx[ll_j].relprintid arg_s_hz_tmp[it_mxbt_mx_tmp].storageid = arg_s_rqbuymx[ll_j].storageid arg_s_hz_tmp[it_mxbt_mx_tmp].sptid = arg_s_rqbuymx[ll_j].sptid arg_s_hz_tmp[it_mxbt_mx_tmp].ordercodestr = arg_s_rqbuymx[ll_j].ordercode arg_s_hz_tmp[it_mxbt_mx_tmp].relcodestr = arg_s_rqbuymx[ll_j].relcode arg_s_hz_tmp[it_mxbt_mx_tmp].plancode = arg_s_rqbuymx[ll_j].plancode arg_s_hz_tmp[it_mxbt_mx_tmp].relpid = arg_s_rqbuymx[ll_j].relpid arg_s_rqbuymx[ll_j].ifcmpl = 1 //标记已处理 next_: NEXT //==================================================================== // 修改: 且补足至最少采购量 //-------------------------------------------------------------------- // 作者: LHD 日期: 2013年08月23日 //==================================================================== //如果只有一条采购信息,而且采购数量<最少采购数量, 则增加一条不按计划的采购记录 IF it_mxbt_mx_tmp = 1 THEN IF arg_s_hz_tmp[1].qty < lde_PBuyQty THEN //增加明细结构 it_mxbt++ arg_s_rqbuymx[it_mxbt].ifcmpl = 1 //标记已处理 arg_s_rqbuymx[it_mxbt].printid = it_mxbt arg_s_rqbuymx[it_mxbt].orderid = 0 arg_s_rqbuymx[it_mxbt].mtrlid = arg_s_hz_tmp[1].mtrlid arg_s_rqbuymx[it_mxbt].status = arg_s_hz_tmp[1].status arg_s_rqbuymx[it_mxbt].woodcode = arg_s_hz_tmp[1].woodcode arg_s_rqbuymx[it_mxbt].pcode = arg_s_hz_tmp[1].pcode arg_s_rqbuymx[it_mxbt].dftsptid = arg_s_hz_tmp[1].dftsptid arg_s_rqbuymx[it_mxbt].uqty = Round((lde_PBuyQty - arg_s_hz_tmp[1].qty) / arg_s_hz_tmp[1].rate, 10) arg_s_rqbuymx[it_mxbt].unit = arg_s_hz_tmp[1].unit arg_s_rqbuymx[it_mxbt].rate = arg_s_hz_tmp[1].rate arg_s_rqbuymx[it_mxbt].qty = lde_PBuyQty - arg_s_hz_tmp[1].qty arg_s_rqbuymx[it_mxbt].mxdscrp = '采购总量少于最少采购数,自动补足' arg_s_rqbuymx[it_mxbt].ifrel = 0 arg_s_rqbuymx[it_mxbt].ordercode = '' arg_s_rqbuymx[it_mxbt].rqdate = arg_s_hz_tmp[1].rqdate arg_s_rqbuymx[it_mxbt].wrkGrpid = 0 arg_s_rqbuymx[it_mxbt].relprintid = 0 arg_s_rqbuymx[it_mxbt].storageid = arg_s_hz_tmp[1].storageid arg_s_rqbuymx[it_mxbt].sptid = arg_s_hz_tmp[1].sptid arg_s_rqbuymx[it_mxbt].plancode = arg_s_hz_tmp[1].plancode arg_s_rqbuymx[it_mxbt].relpid = 0 //增加汇总结构 arg_s_hz_tmp[1].qty = lde_PBuyQty arg_s_hz_tmp[1].uqty = Round(lde_PBuyQty / arg_s_rqbuymx[ll_j].rate, 10) arg_s_hz_tmp[1].ifrel = 0 arg_s_hz_tmp[1].ordercode = '' arg_s_hz_tmp[1].wrkGrpid = 0 arg_s_hz_tmp[1].relprintid = 0 arg_s_hz_tmp[1].orderid = 0 arg_s_hz_tmp[1].relpid = 0 END IF END IF ELSE //lb_NewHzType Decimal lde_pulgrate //判断是否补足 IF Mod(lde_total_qty, lde_PBuyQty) = 0 THEN lde_bz_qty = 0 ELSE lde_bz_qty = lde_PBuyQty - Mod(lde_total_qty, lde_PBuyQty) END IF //合并规则 //0.前提: 物料资料: 1)申购补足数量方式 设置为 4-按最少采购量补足; 2) 最少采购量 > 0 //1.按时间顺序, 每次收货批量 = 最少采购量 * N (N >= 1); //2.如果合并后还有多条同一天收货的记录,继续合并成1条收货明细; //3.如果最后记录不足够批量(最少采购量 * N), 按差额自动补足; FOR ll_k = 1 To ds_hz.RowCount() ll_j = ds_hz.Object.id[ll_k] lb_hz = False //特殊合并原则 //1.只考虑“采购批量”, 达到就分批 //2.如果系同一日的,也合并 //只取最后一行比较,如果最后一行达到的就分 // ll_m = UpperBound(arg_s_hz_tmp) IF ll_m > 0 THEN IF Mod(arg_s_hz_tmp[ll_m].qty, lde_PBuyQty) = 0 THEN //足够整数倍的, 不合并 lb_hz = False ELSE lb_hz = True END IF //合并的, 只补足为批量, 多余的分行 IF lb_hz THEN ll_days = DaysAfter(Date(arg_s_hz_tmp[ll_m].rqdate), Date(arg_s_rqbuymx[ll_j].rqdate)) //如果系同一天的,要将全部都合并进去 IF ll_days = 0 THEN //N倍采购批量 lde_pulgrate = Int((arg_s_hz_tmp[ll_m].qty + arg_s_rqbuymx[ll_j].qty) / lde_PBuyQty) + 1 ELSE lde_pulgrate = Int(arg_s_hz_tmp[ll_m].qty / lde_PBuyQty) + 1 END IF IF arg_s_hz_tmp[ll_m].qty + arg_s_rqbuymx[ll_j].qty <= lde_PBuyQty * lde_pulgrate THEN lde_restqty = 0 lde_restuqty = 0 arg_s_hz_tmp[ll_m].qty += arg_s_rqbuymx[ll_j].qty arg_s_hz_tmp[ll_m].uqty += arg_s_rqbuymx[ll_j].uqty ELSE lde_restqty = arg_s_hz_tmp[ll_m].qty + arg_s_rqbuymx[ll_j].qty - lde_PBuyQty * lde_pulgrate lde_restuqty = Round(lde_restqty / arg_s_hz_tmp[ll_m].rate, 10) arg_s_hz_tmp[ll_m].qty += arg_s_rqbuymx[ll_j].qty - lde_restqty arg_s_hz_tmp[ll_m].uqty += arg_s_rqbuymx[ll_j].uqty - lde_restuqty END IF IF Trim(arg_s_rqbuymx[ll_j].ordercode) <> '' THEN IF Trim(arg_s_hz_tmp[ll_m].ordercodestr) = '' THEN arg_s_hz_tmp[ll_m].ordercodestr = arg_s_rqbuymx[ll_j].ordercode ELSE arg_s_hz_tmp[ll_m].ordercodestr = arg_s_hz_tmp[ll_m].ordercodestr + ','+ arg_s_rqbuymx[ll_j].ordercode END IF END IF IF Trim(arg_s_rqbuymx[ll_j].relcode) <> '' THEN IF Trim(arg_s_hz_tmp[ll_m].relcodestr) = '' THEN arg_s_hz_tmp[ll_m].relcodestr = arg_s_rqbuymx[ll_j].relcode ELSE arg_s_hz_tmp[ll_m].relcodestr = arg_s_hz_tmp[ll_m].relcodestr + ','+ arg_s_rqbuymx[ll_j].relcode END IF END IF arg_s_hz_tmp[ll_m].ifrel = 0 arg_s_hz_tmp[ll_m].ordercode = '' arg_s_hz_tmp[ll_m].wrkGrpid = 0 arg_s_hz_tmp[ll_m].relprintid = 0 arg_s_hz_tmp[ll_m].orderid = 0 arg_s_hz_tmp[ll_m].relpid = 0 IF lde_restqty > 0 THEN //按批量分配 lde_addqty = lde_restqty lde_restqty = 0 lde_adduqty = Round(lde_addqty / arg_s_rqbuymx[ll_j].rate, 10) //不合并的, 新增一条记录 it_mxbt_mx_tmp++ arg_s_hz_tmp[it_mxbt_mx_tmp].printid = it_mxbt_mx_tmp arg_s_hz_tmp[it_mxbt_mx_tmp].orderid = arg_s_rqbuymx[ll_j].orderid arg_s_hz_tmp[it_mxbt_mx_tmp].mtrlid = arg_s_rqbuymx[ll_j].mtrlid arg_s_hz_tmp[it_mxbt_mx_tmp].status = arg_s_rqbuymx[ll_j].status arg_s_hz_tmp[it_mxbt_mx_tmp].woodcode = arg_s_rqbuymx[ll_j].woodcode arg_s_hz_tmp[it_mxbt_mx_tmp].pcode = arg_s_rqbuymx[ll_j].pcode arg_s_hz_tmp[it_mxbt_mx_tmp].dftsptid = arg_s_rqbuymx[ll_j].dftsptid arg_s_hz_tmp[it_mxbt_mx_tmp].uqty = lde_adduqty //arg_s_rqbuymx[ll_j].uqty arg_s_hz_tmp[it_mxbt_mx_tmp].unit = arg_s_rqbuymx[ll_j].unit arg_s_hz_tmp[it_mxbt_mx_tmp].rate = arg_s_rqbuymx[ll_j].rate arg_s_hz_tmp[it_mxbt_mx_tmp].qty = lde_addqty //arg_s_rqbuymx[ll_j].qty arg_s_hz_tmp[it_mxbt_mx_tmp].mxdscrp = arg_s_rqbuymx[ll_j].mxdscrp arg_s_hz_tmp[it_mxbt_mx_tmp].ifrel = arg_s_rqbuymx[ll_j].ifrel arg_s_hz_tmp[it_mxbt_mx_tmp].ordercode = arg_s_rqbuymx[ll_j].ordercode arg_s_hz_tmp[it_mxbt_mx_tmp].rqdate = arg_s_rqbuymx[ll_j].rqdate arg_s_hz_tmp[it_mxbt_mx_tmp].wrkGrpid = arg_s_rqbuymx[ll_j].wrkGrpid arg_s_hz_tmp[it_mxbt_mx_tmp].relprintid = arg_s_rqbuymx[ll_j].relprintid arg_s_hz_tmp[it_mxbt_mx_tmp].storageid = arg_s_rqbuymx[ll_j].storageid arg_s_hz_tmp[it_mxbt_mx_tmp].sptid = arg_s_rqbuymx[ll_j].sptid arg_s_hz_tmp[it_mxbt_mx_tmp].ordercodestr = arg_s_rqbuymx[ll_j].ordercode arg_s_hz_tmp[it_mxbt_mx_tmp].relcodestr = arg_s_rqbuymx[ll_j].relcode arg_s_hz_tmp[it_mxbt_mx_tmp].plancode = arg_s_rqbuymx[ll_j].plancode arg_s_hz_tmp[it_mxbt_mx_tmp].relpid = arg_s_rqbuymx[ll_j].relpid END IF arg_s_rqbuymx[ll_j].ifcmpl = 1 //标记已处理 //ll_n = ll_m //下一条循环, 从这条开始计算合并 GOTO next2_ END IF END IF //不合并 lde_restqty = arg_s_rqbuymx[ll_j].qty IF lde_restqty > 0 THEN //循环按批量分配 lde_addqty = arg_s_rqbuymx[ll_j].qty lde_restqty = 0 lde_adduqty = arg_s_rqbuymx[ll_j].uqty //不合并的, 新增一条记录 it_mxbt_mx_tmp++ arg_s_hz_tmp[it_mxbt_mx_tmp].printid = it_mxbt_mx_tmp arg_s_hz_tmp[it_mxbt_mx_tmp].orderid = arg_s_rqbuymx[ll_j].orderid arg_s_hz_tmp[it_mxbt_mx_tmp].mtrlid = arg_s_rqbuymx[ll_j].mtrlid arg_s_hz_tmp[it_mxbt_mx_tmp].status = arg_s_rqbuymx[ll_j].status arg_s_hz_tmp[it_mxbt_mx_tmp].woodcode = arg_s_rqbuymx[ll_j].woodcode arg_s_hz_tmp[it_mxbt_mx_tmp].pcode = arg_s_rqbuymx[ll_j].pcode arg_s_hz_tmp[it_mxbt_mx_tmp].dftsptid = arg_s_rqbuymx[ll_j].dftsptid arg_s_hz_tmp[it_mxbt_mx_tmp].uqty = lde_adduqty //arg_s_rqbuymx[ll_j].uqty arg_s_hz_tmp[it_mxbt_mx_tmp].unit = arg_s_rqbuymx[ll_j].unit arg_s_hz_tmp[it_mxbt_mx_tmp].rate = arg_s_rqbuymx[ll_j].rate arg_s_hz_tmp[it_mxbt_mx_tmp].qty = lde_addqty //arg_s_rqbuymx[ll_j].qty arg_s_hz_tmp[it_mxbt_mx_tmp].mxdscrp = arg_s_rqbuymx[ll_j].mxdscrp arg_s_hz_tmp[it_mxbt_mx_tmp].ifrel = arg_s_rqbuymx[ll_j].ifrel arg_s_hz_tmp[it_mxbt_mx_tmp].ordercode = arg_s_rqbuymx[ll_j].ordercode arg_s_hz_tmp[it_mxbt_mx_tmp].rqdate = arg_s_rqbuymx[ll_j].rqdate arg_s_hz_tmp[it_mxbt_mx_tmp].wrkGrpid = arg_s_rqbuymx[ll_j].wrkGrpid arg_s_hz_tmp[it_mxbt_mx_tmp].relprintid = arg_s_rqbuymx[ll_j].relprintid arg_s_hz_tmp[it_mxbt_mx_tmp].storageid = arg_s_rqbuymx[ll_j].storageid arg_s_hz_tmp[it_mxbt_mx_tmp].sptid = arg_s_rqbuymx[ll_j].sptid arg_s_hz_tmp[it_mxbt_mx_tmp].ordercodestr = arg_s_rqbuymx[ll_j].ordercode arg_s_hz_tmp[it_mxbt_mx_tmp].relcodestr = arg_s_rqbuymx[ll_j].relcode arg_s_hz_tmp[it_mxbt_mx_tmp].plancode = arg_s_rqbuymx[ll_j].plancode arg_s_hz_tmp[it_mxbt_mx_tmp].relpid = arg_s_rqbuymx[ll_j].relpid END IF arg_s_rqbuymx[ll_j].ifcmpl = 1 //标记已处理 next2_: NEXT IF lde_bz_qty > 0 THEN ll_m = UpperBound(arg_s_hz_tmp) //增加明细结构 it_mxbt++ arg_s_rqbuymx[it_mxbt].ifcmpl = 1 //标记已处理 arg_s_rqbuymx[it_mxbt].printid = it_mxbt arg_s_rqbuymx[it_mxbt].orderid = 0 arg_s_rqbuymx[it_mxbt].mtrlid = arg_s_hz_tmp[ll_m].mtrlid arg_s_rqbuymx[it_mxbt].status = arg_s_hz_tmp[ll_m].status arg_s_rqbuymx[it_mxbt].woodcode = arg_s_hz_tmp[ll_m].woodcode arg_s_rqbuymx[it_mxbt].pcode = arg_s_hz_tmp[ll_m].pcode arg_s_rqbuymx[it_mxbt].dftsptid = arg_s_hz_tmp[ll_m].dftsptid arg_s_rqbuymx[it_mxbt].uqty = Round(lde_bz_qty / arg_s_hz_tmp[ll_m].rate, 10) arg_s_rqbuymx[it_mxbt].unit = arg_s_hz_tmp[ll_m].unit arg_s_rqbuymx[it_mxbt].rate = arg_s_hz_tmp[ll_m].rate arg_s_rqbuymx[it_mxbt].qty = lde_bz_qty arg_s_rqbuymx[it_mxbt].mxdscrp = '采购总量少于最少采购数,自动补足' arg_s_rqbuymx[it_mxbt].ifrel = 0 arg_s_rqbuymx[it_mxbt].ordercode = '' arg_s_rqbuymx[it_mxbt].rqdate = arg_s_hz_tmp[ll_m].rqdate //arg_s_hz_tmp[ll_m].rqdate arg_s_rqbuymx[it_mxbt].wrkGrpid = 0 arg_s_rqbuymx[it_mxbt].relprintid = 0 arg_s_rqbuymx[it_mxbt].storageid = arg_s_hz_tmp[ll_m].storageid arg_s_rqbuymx[it_mxbt].sptid = arg_s_hz_tmp[ll_m].sptid arg_s_rqbuymx[it_mxbt].plancode = arg_s_hz_tmp[ll_m].plancode arg_s_rqbuymx[it_mxbt].relpid = 0 arg_s_hz_tmp[ll_m].qty += lde_bz_qty arg_s_hz_tmp[ll_m].uqty += Round(lde_bz_qty / arg_s_hz_tmp[ll_m].rate, 10) arg_s_hz_tmp[ll_m].ifrel = 0 arg_s_hz_tmp[ll_m].ordercode = '' arg_s_hz_tmp[ll_m].wrkGrpid = 0 arg_s_hz_tmp[ll_m].relprintid = 0 arg_s_hz_tmp[ll_m].orderid = 0 arg_s_hz_tmp[ll_m].relpid = 0 END IF END IF //汇总成 采购汇总明细 FOR ll_j = 1 To it_mxbt_mx_tmp it_mxbt_mx++ arg_s_rqbuymxmx[it_mxbt_mx] = arg_s_hz_tmp[ll_j] NEXT ELSE //IF arg_ifhz THEN //不汇总的 it_mxbt_mx++ arg_s_rqbuymxmx[it_mxbt_mx].printid = it_mxbt_mx arg_s_rqbuymxmx[it_mxbt_mx].orderid = arg_s_rqbuymx[ll_i].orderid arg_s_rqbuymxmx[it_mxbt_mx].mtrlid = arg_s_rqbuymx[ll_i].mtrlid arg_s_rqbuymxmx[it_mxbt_mx].status = arg_s_rqbuymx[ll_i].status arg_s_rqbuymxmx[it_mxbt_mx].woodcode = arg_s_rqbuymx[ll_i].woodcode arg_s_rqbuymxmx[it_mxbt_mx].pcode = arg_s_rqbuymx[ll_i].pcode arg_s_rqbuymxmx[it_mxbt_mx].dftsptid = arg_s_rqbuymx[ll_i].dftsptid arg_s_rqbuymxmx[it_mxbt_mx].uqty = arg_s_rqbuymx[ll_i].uqty arg_s_rqbuymxmx[it_mxbt_mx].unit = arg_s_rqbuymx[ll_i].unit arg_s_rqbuymxmx[it_mxbt_mx].rate = arg_s_rqbuymx[ll_i].rate arg_s_rqbuymxmx[it_mxbt_mx].qty = arg_s_rqbuymx[ll_i].qty arg_s_rqbuymxmx[it_mxbt_mx].mxdscrp = arg_s_rqbuymx[ll_i].mxdscrp arg_s_rqbuymxmx[it_mxbt_mx].ifrel = arg_s_rqbuymx[ll_i].ifrel arg_s_rqbuymxmx[it_mxbt_mx].ordercode = arg_s_rqbuymx[ll_i].ordercode arg_s_rqbuymxmx[it_mxbt_mx].rqdate = arg_s_rqbuymx[ll_i].rqdate arg_s_rqbuymxmx[it_mxbt_mx].wrkGrpid = arg_s_rqbuymx[ll_i].wrkGrpid arg_s_rqbuymxmx[it_mxbt_mx].relprintid = arg_s_rqbuymx[ll_i].relprintid arg_s_rqbuymxmx[it_mxbt_mx].storageid = arg_s_rqbuymx[ll_i].storageid arg_s_rqbuymxmx[it_mxbt_mx].sptid = arg_s_rqbuymx[ll_i].sptid arg_s_rqbuymxmx[it_mxbt_mx].ordercodestr = arg_s_rqbuymx[ll_i].ordercode arg_s_rqbuymxmx[it_mxbt_mx].relcodestr = arg_s_rqbuymx[ll_i].relcode arg_s_rqbuymxmx[it_mxbt_mx].plancode = arg_s_rqbuymx[ll_i].plancode arg_s_rqbuymxmx[it_mxbt_mx].relpid = arg_s_rqbuymx[ll_i].relpid arg_s_rqbuymx[ll_i].ifcmpl = 1 END IF NEXT ext: RETURN rslt end function public function integer uof_update_buy_flag (long arg_scid, long arg_requestbuyid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 UPDATE u_Order_ml SET u_Order_ml.buy_flag = isnull(uv_order_request_buy_flag.flag,0) FROM u_requestbuymxmx INNER JOIN uv_order_request_buy_flag ON u_requestbuymxmx.scid = uv_order_request_buy_flag.scid AND u_requestbuymxmx.orderid = uv_order_request_buy_flag.OrderID INNER JOIN u_Order_ml ON uv_order_request_buy_flag.scid = u_Order_ml.scid AND uv_order_request_buy_flag.OrderID = u_Order_ml.OrderID WHERE u_requestbuymxmx.scid = :arg_scid And u_requestbuymxmx.requestbuyid = :arg_requestbuyid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新相关生产计划申购单状态失败,'+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 stopordercancel (long arg_scid, long arg_requestbuyid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_billtype DateTime null_dt SetNull(null_dt) IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag <> 3 THEN rslt = 0 arg_msg = "单据只有在终止状态下才可以执行取消终止,请核对" GOTO ext END IF UPDATE u_requestbuy SET flag = 1, accomplishdate = :null_dt, finishemp = '', stopemp = '', stopreason = '' WHERE requestbuyid = :arg_requestbuyid AND scid = :arg_scid; 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 AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function on uo_requestbuy.create call super::create TriggerEvent( this, "constructor" ) end on on uo_requestbuy.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String arg_msg String str_optionvalue str_optionvalue = '' f_get_sys_option_value('111',str_optionvalue,arg_msg) uo_option_requestbuy_hz = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('109',str_optionvalue,arg_msg) uo_option_buytask_spt = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('314',str_optionvalue,arg_msg) uo_option_rqbuy_checkdate = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('319',str_optionvalue,arg_msg) uo_option_cl_cp_buy = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('425',str_optionvalue,arg_msg) uo_option_if_oa_requestbuy_dept = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('426',str_optionvalue,arg_msg) uo_option_request_dept_secaudit = Long(str_optionvalue) end event