$PBExportHeader$uo_buytask.sru forward global type uo_buytask from nonvisualobject end type end forward global type uo_buytask from nonvisualobject end type global uo_buytask uo_buytask type variables PUBLIC PROTECTEDWRITE Long scid = 0 PUBLIC PROTECTEDWRITE Long TaskID = 0 PUBLIC PROTECTEDWRITE String TaskCode = '' PUBLIC PROTECTEDWRITE DateTime opdate PUBLIC PROTECTEDWRITE String operator = '' PUBLIC PROTECTEDWRITE Int status = 0 PUBLIC PROTECTEDWRITE DateTime Accomplishdate PUBLIC PROTECTEDWRITE String Permit_emp = '' PUBLIC PROTECTEDWRITE Long ctmint Long orderid = 0 Int Kind = 0 Long sptID = 0 String Assign_emp DateTime Requiredate String dscrp String relcode String train Long banktypeid String reason Int billtype String firpermitemp DateTime firpermitdate Decimal billamt decimal mrate long moneyid string sptsccode Long audit_buildtype int uo_option_requestbuy_hz int uo_option_if_oa_buytask,uo_option_if_oa_buytask_cp,uo_option_if_oa_buytask_dept int uo_option_buytask_cl_secaudit,uo_option_buytask_cp_secaudit,uo_option_buytask_dept_secaudit int uo_option_ifovertask string uo_option_change_status,uo_option_change_woodcode,uo_option_change_pcode int uo_option_buyprice_buytask_notlimit int uo_option_unit_dec int uo_option_disuse_buytask int uo_option_update_rqmtrlqty_buy Transaction commit_transaction PRIVATE: s_buytaskmx buytaskmx[] //明细结构数组 Long it_MXBT = 0 //明细结构数组末指针 Boolean IT_NEWBEGIN = TRUE //新建标志 Boolean IT_UPDATEBEGIN = FALSE//修改标志 end variables forward prototypes public function integer p_reset () public function integer p_clearmx () public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit) public function integer p_getinfo (long arg_scid, long arg_taskid, ref string arg_msg) public function integer updatebegin (long arg_scid, long arg_taskid, ref string arg_msg) public function integer getinfo (integer arg_scid, long arg_taskid, ref string arg_msg) public function integer cancelpermit (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_scid, long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer tempstoptask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer firstpermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer lastpermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer checkmxmpl (long arg_scid, long arg_taskid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg) public function integer trycmplbuytask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer finishtask (integer arg_finishtype, long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer newbegin (long arg_scid, ref string arg_msg) public function integer stopmx (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, ref string arg_msg, boolean arg_commit) public function integer secpermit (long arg_scid, long arg_taskid, ref string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer cancelsecpermit (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer stopqty (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlcode, decimal arg_stopqty, decimal arg_rebuyqty, string arg_stopreason, ref string arg_msg, boolean arg_commit) public function integer ue_splitqty (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlcode, decimal arg_splitqty, datetime arg_newdate, ref string arg_msg, boolean arg_ifcommit) public function integer addmx_sptcheckqty (long arg_scid, long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer finishmx (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_disuse (long arg_scid, long arg_taskid, integer arg_disusetype, ref string arg_msg, boolean arg_ifcommit) public function integer uof_update_buyermemo (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_buyermemo, boolean arg_ifcommit, ref string arg_msg) public function integer uof_update_feedback (long arg_scid, long arg_taskid, s_buytaskmx_feedback_ljfieb arg_s_mx[], ref string arg_msg, boolean arg_ifcommit) public function integer uof_update_requiredate (long arg_scid, long arg_taskid, long arg_printid, datetime arg_requiredate, string arg_reason, ref string arg_msg, boolean arg_ifcommit) public function integer cstopbuytask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx (integer arg_iforder, long arg_orderid, string arg_ordercode, long arg_mtrlid, decimal arg_uqty, decimal arg_enprice, decimal arg_rebate, decimal arg_planprice, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, datetime arg_requiredate, long arg_storageid, string arg_status, string arg_unit, decimal arg_rate, string arg_woodcode, string arg_pcode, long arg_requestbuyid, long arg_rqmxprintid, long arg_wrkgrpid, long arg_taskmxprintid, decimal arg_tax, string arg_plancode, string arg_jgdscrp) public function integer stopbuytask (long arg_scid, long arg_taskid, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit) public function integer mod_price (long arg_scid, long arg_taskid, long arg_printid, decimal arg_enprice, decimal arg_rebate, ref string arg_msg, boolean arg_ifcommit) public function integer uof_update_requiredate_chk (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg) public function integer uof_update_billamt (long arg_scid, long arg_taskid, boolean arg_ifcommit, ref string arg_msg) public function integer addmxcmpl (long arg_scid, long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx (s_buytaskmx s_mx, ref string arg_msg) end prototypes public function integer p_reset ();//INT p_RESET() //清除对象及其明细 taskid = 0 taskcode = '' operator = '' relcode = '' status = 0 train = '' banktypeid = 0 billamt = 0 it_newbegin = FALSE it_updatebegin = FALSE //清除明细 P_CLEARMX() RETURN 1 end function public function integer p_clearmx ();//INT p_clearmx() //清除明细 it_mxbt=0 billamt = 0 RETURN 1 end function public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1 Long cnt = 0,i,ll_i DateTime server_datetime String ls_sccode Long ll_taskid Long ll_fp_array,ll_fp IF uo_option_disuse_buytask = -1000 THEN rslt = 0 arg_msg = '选项:[293]启用采购订单废弃单,读取初始默认值失败,操作取消!' GOTO ext END IF s_mtrlware_assign_plan s_fp_plan uo_mtrlware_assign uo_fp_plan uo_fp_plan = Create uo_mtrlware_assign uo_fp_plan.commit_transaction = commit_transaction datastore ds_fp_plan_del ds_fp_plan_del = Create datastore ds_fp_plan_del.DataObject = 'ds_fp_plan_plankind_del' ds_fp_plan_del.SetTransObject(commit_transaction) datastore ds_pfpack ds_pfpack = Create datastore ds_pfpack.DataObject = 'ds_pf_pack' ds_pfpack.SetTransObject(commit_transaction) s_mtrlcfg_expr s_pz[],s_pz_null[] IF IsNull(dscrp) THEN dscrp = '' IF IsNull(assign_emp) THEN assign_emp = '' IF IsNull(train) THEN train = '' IF IsNull(reason) THEN reason = '' IF IsNull(banktypeid) THEN banktypeid = 0 IF IsNull(Kind) THEN Kind = 0 IF IsNull(billamt) THEN billamt = 0 IF IsNull(arg_operator) THEN arg_operator = '' IF IsNull(mrate) THEN mrate = 0 IF IsNull(moneyid) THEN moneyid = 0 if isnull(sptsccode) then sptsccode = '' IF Len(dscrp) > 0 THEN dscrp = ' ' + dscrp operator = arg_operator IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以提交" GOTO ext END IF IF Trim(assign_emp) = '' THEN rslt = 0 arg_msg = "请输入订单负责人" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_spt Where sptid = :sptid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,供应商资料" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "供应商未定义或错误" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM cw_currency Where moneyid = :moneyid Using commit_transaction; 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 mrate = 0 THEN arg_msg = '币种汇率错误' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM cw_banktype Where banktypeid = :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 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,requiredate,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF it_mxbt = 0 THEN //如果输入物料资料错则已经清空 rslt = 0 arg_msg = "没有正确采购订单明细内容" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where username = :operator 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 opdate = server_datetime //填写单据建立时间(最近修改时间) IF taskid > 0 And uo_option_disuse_buytask = 1 THEN IF uof_disuse(scid,taskid,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF //检查供应商月订货金额限制 Long ll_bgmth, ll_billmth Decimal lde_maxamt, lde_billamt SELECT bgmth, maxamt INTO :ll_bgmth, :lde_maxamt FROM u_spt_maxamt WHERE sptid = :sptid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN ll_bgmth = 0 lde_maxamt = 0 END IF IF lde_maxamt > 0 THEN ll_billmth = Long(String(requiredate, 'yyyymm')) IF ll_billmth >= ll_bgmth THEN SELECT sum(Round(enprice * uqty * rebate,2)) INTO :lde_billamt FROM u_buytaskmx INNER join u_buytask on u_buytaskmx.scid = u_buytask.scid AND u_buytaskmx.taskid = u_buytask.taskid WHERE (CONVERT(char(7), u_buytask.requiredate, 120) = CONVERT(char(7), :requiredate, 120)) AND u_buytask.sptid = :sptid AND convert(char(7), u_buytask.taskid) + ' ' + convert(char(7), u_buytask.scid) <> convert(char(7), :taskid) + ' ' + convert(char(7), :scid) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询订单月已订货金额失败!" GOTO ext END IF IF IsNull(lde_billamt) THEN lde_billamt = 0 IF lde_maxamt < lde_billamt + billamt THEN rslt = 0 arg_msg = "供应商月订货金额限制:"+String(lde_maxamt,'#,##0.00')+",当月已订货金额:"+String(lde_billamt,'#,##0.00')+",不能再订货:"+String(billamt, '#,##0.00')+"!" GOTO ext END IF END IF END IF //billamt = billamt + Round(arg_enprice * arg_uqty * arg_rebate,2) ////////////////////////////////////////////// //开始区分:新建/更新 处理 IF taskid = 0 THEN //新建 ll_taskid = f_sys_scidentity(scid,"u_buytask","taskid",arg_msg,True,id_sqlca) //数据commit事务) IF ll_taskid <= 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF billtype = 0 THEN taskcode = getid(scid,ls_sccode + 'BG',Date(server_datetime),False,commit_transaction) ELSEIF billtype = 1 THEN taskcode = getid(scid,ls_sccode + 'BH',Date(server_datetime),False,commit_transaction) ELSEIF billtype = 2 THEN taskcode = getid(scid,ls_sccode + 'BA',Date(server_datetime),False,commit_transaction) END IF IF taskcode = "err" THEN taskcode = '' rslt = 0 arg_msg = "无法获取采购订单编号"+"~n"+commit_transaction.SQLErrText GOTO ext END IF INSERT INTO u_buytask ( scid, taskid, taskcode, kind, sptid, requiredate, status, opemp, assign_emp, dscrp, opdate, orderid, relcode, train, banktypeid, reason, billtype, billamt, moneyid, mrate, sptsccode) VALUES ( :scid, :ll_taskid, :taskcode, :Kind, :sptid, :requiredate, :status, :operator, :assign_emp, :dscrp, :opdate, :orderid, :relcode, :train, :banktypeid, :reason, :billtype, :billamt, :moneyid, :mrate, :sptsccode) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入采购订单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF FOR i = 1 To it_mxbt INSERT INTO u_buytaskmx ( scid, qty, price, mtrlid, taskid, dscrp, dscrp2, printid, fprice, rebate, requiredate, orderid, storageid, status, iforder, sptmtrlname, unit, rate, uqty, uprice, woodcode, pcode, rqmxprintid, requestbuyid, relrqbuycode, wrkgrpid, taskmxprintid, enprice, tax, plancode, buybargainid, buybargainprintid, buybargaincode, jgdscrp, lastcode, lastdate, lastprice) VALUES (:scid, :buytaskmx[i].qty, :buytaskmx[i].acprice, :buytaskmx[i].mtrlid, :ll_taskid, :buytaskmx[i].dscrp , :buytaskmx[i].dscrp2 , :buytaskmx[i].printid, :buytaskmx[i].fprice , :buytaskmx[i].rebate, :buytaskmx[i].requiredate, :buytaskmx[i].orderid, :buytaskmx[i].storageid, :buytaskmx[i].status, :buytaskmx[i].iforder, :buytaskmx[i].sptmtrlname, :buytaskmx[i].unit, :buytaskmx[i].rate, :buytaskmx[i].uqty, :buytaskmx[i].uprice, :buytaskmx[i].woodcode, :buytaskmx[i].pcode, :buytaskmx[i].rqmxprintid, :buytaskmx[i].requestbuyid, :buytaskmx[i].relrqbuycode, :buytaskmx[i].wrkgrpid, :buytaskmx[i].taskmxprintid, :buytaskmx[i].enprice, :buytaskmx[i].tax, :buytaskmx[i].plancode, :buytaskmx[i].buybargainid, :buytaskmx[i].buybargainprintid, :buytaskmx[i].buybargaincode, :buytaskmx[i].jgdscrp, :buytaskmx[i].lastcode, :buytaskmx[i].lastdate, :buytaskmx[i].lastprice) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '明细行:'+String(buytaskmx[i].printid)+",插入明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF buytaskmx[i].iffp = 1 And buytaskmx[i].orderid > 0 THEN IF billtype = 0 THEN //材料分配 ll_fp_array++ s_fp_plan.planid[ll_fp_array] = 0 s_fp_plan.assigntype[ll_fp_array] = 0 s_fp_plan.relbillid[ll_fp_array] = buytaskmx[i].orderid s_fp_plan.relprintid[ll_fp_array] = 0 s_fp_plan.plantype[ll_fp_array] = 1 s_fp_plan.plankind[ll_fp_array] = 2 s_fp_plan.plankind_relbillid[ll_fp_array] = ll_taskid s_fp_plan.plankind_relprintid[ll_fp_array] = buytaskmx[i].printid s_fp_plan.scid[ll_fp_array] = scid s_fp_plan.mtrlwareid[ll_fp_array] = 0 s_fp_plan.planassignqty[ll_fp_array] = buytaskmx[i].qty s_fp_plan.mtrlid[ll_fp_array] = buytaskmx[i].mtrlid s_fp_plan.status[ll_fp_array] = buytaskmx[i].status s_fp_plan.woodcode[ll_fp_array] = buytaskmx[i].woodcode s_fp_plan.pcode[ll_fp_array] = buytaskmx[i].pcode ELSEIF billtype = 1 THEN //成品分配 IF buytaskmx[i].outtype = 0 Or buytaskmx[i].ifpackpro = 0 THEN ll_fp_array++ s_fp_plan.planid[ll_fp_array] = 0 s_fp_plan.assigntype[ll_fp_array] = 1 s_fp_plan.relbillid[ll_fp_array] = buytaskmx[i].orderid s_fp_plan.relprintid[ll_fp_array] = buytaskmx[i].taskmxprintid s_fp_plan.plantype[ll_fp_array] = 1 s_fp_plan.plankind[ll_fp_array] = 2 s_fp_plan.plankind_relbillid[ll_fp_array] = ll_taskid s_fp_plan.plankind_relprintid[ll_fp_array] = buytaskmx[i].printid s_fp_plan.scid[ll_fp_array] = scid s_fp_plan.mtrlwareid[ll_fp_array] = 0 s_fp_plan.planassignqty[ll_fp_array] = buytaskmx[i].qty s_fp_plan.mtrlid[ll_fp_array] = buytaskmx[i].mtrlid s_fp_plan.status[ll_fp_array] = buytaskmx[i].status s_fp_plan.woodcode[ll_fp_array] = buytaskmx[i].woodcode s_fp_plan.pcode[ll_fp_array] = buytaskmx[i].pcode ELSE CHOOSE CASE buytaskmx[i].ifpackpro CASE 1,2 ds_pfpack.Retrieve(buytaskmx[i].mtrlid) IF ds_pfpack.RowCount() = 0 THEN arg_msg = '明细行:'+String(buytaskmx[i].printid)+",物料清单找不到包件明细,请检查" rslt = 0 GOTO ext END IF FOR ll_i = 1 To ds_pfpack.RowCount() ll_fp_array++ s_fp_plan.planid[ll_fp_array] = 0 s_fp_plan.assigntype[ll_fp_array] = 1 s_fp_plan.relbillid[ll_fp_array] = buytaskmx[i].orderid s_fp_plan.relprintid[ll_fp_array] = buytaskmx[i].taskmxprintid s_fp_plan.plantype[ll_fp_array] = 1 s_fp_plan.plankind[ll_fp_array] = 2 s_fp_plan.plankind_relbillid[ll_fp_array] = ll_taskid s_fp_plan.plankind_relprintid[ll_fp_array] = buytaskmx[i].printid s_fp_plan.scid[ll_fp_array] = scid s_fp_plan.mtrlwareid[ll_fp_array] = 0 s_fp_plan.planassignqty[ll_fp_array] = buytaskmx[i].qty * ds_pfpack.Object.u_prdpf_sonscale[ll_i] s_fp_plan.mtrlid[ll_fp_array] = ds_pfpack.Object.u_prdpf_sonmtrlid[ll_i] IF ds_pfpack.Object.u_prdpf_ifover[ll_i] THEN s_fp_plan.status[ll_fp_array] = ds_pfpack.Object.u_prdpf_status[ll_i] s_fp_plan.woodcode[ll_fp_array] = ds_pfpack.Object.u_prdpf_woodcode[ll_i] s_fp_plan.pcode[ll_fp_array] = ds_pfpack.Object.u_prdpf_pcode[ll_i] ELSE CHOOSE CASE ds_pfpack.Object.u_prdpf_ifover[ll_i] CASE 0 s_fp_plan.status[ll_fp_array] = buytaskmx[i].status s_fp_plan.woodcode[ll_fp_array] = '' s_fp_plan.pcode[ll_fp_array] = '' CASE 1 s_fp_plan.status[ll_fp_array] = '' s_fp_plan.woodcode[ll_fp_array] = buytaskmx[i].woodcode s_fp_plan.pcode[ll_fp_array] = '' CASE 2 s_fp_plan.status[ll_fp_array] = '' s_fp_plan.woodcode[ll_fp_array] = '' s_fp_plan.pcode[ll_fp_array] = buytaskmx[i].pcode CASE 3 s_fp_plan.status[ll_fp_array] = buytaskmx[i].status s_fp_plan.woodcode[ll_fp_array] = buytaskmx[i].woodcode s_fp_plan.pcode[ll_fp_array] = '' CASE 4 s_fp_plan.status[ll_fp_array] = '' s_fp_plan.woodcode[ll_fp_array] = buytaskmx[i].woodcode s_fp_plan.pcode[ll_fp_array] = buytaskmx[i].pcode CASE 5 s_fp_plan.status[ll_fp_array] = buytaskmx[i].status s_fp_plan.woodcode[ll_fp_array] = '' s_fp_plan.pcode[ll_fp_array] = buytaskmx[i].pcode CASE 6 s_fp_plan.status[ll_fp_array] = buytaskmx[i].status s_fp_plan.woodcode[ll_fp_array] = buytaskmx[i].woodcode s_fp_plan.pcode[ll_fp_array] = buytaskmx[i].pcode END CHOOSE END IF NEXT CASE 3,4 s_pz = s_pz_null f_checkpz(buytaskmx[i].status,s_pz[]) IF UpperBound(s_pz) = 0 THEN arg_msg = '明细行:'+String(buytaskmx[i].printid)+',拆分子件错误,请检查组合配置' rslt = 0 GOTO ext END IF FOR ll_i = 1 To UpperBound(s_pz) ll_fp_array++ s_fp_plan.planid[ll_fp_array] = 0 s_fp_plan.assigntype[ll_fp_array] = 1 s_fp_plan.relbillid[ll_fp_array] = buytaskmx[i].orderid s_fp_plan.relprintid[ll_fp_array] = buytaskmx[i].taskmxprintid s_fp_plan.plantype[ll_fp_array] = 1 s_fp_plan.plankind[ll_fp_array] = 2 s_fp_plan.plankind_relbillid[ll_fp_array] = ll_taskid s_fp_plan.plankind_relprintid[ll_fp_array] = buytaskmx[i].printid s_fp_plan.scid[ll_fp_array] = scid s_fp_plan.mtrlwareid[ll_fp_array] = 0 s_fp_plan.planassignqty[ll_fp_array] = buytaskmx[i].qty * Dec(s_pz[ll_i].qty) s_fp_plan.mtrlid[ll_fp_array] = buytaskmx[i].mtrlid s_fp_plan.status[ll_fp_array] = s_pz[ll_i].cfgname s_fp_plan.woodcode[ll_fp_array] = buytaskmx[i].woodcode s_fp_plan.pcode[ll_fp_array] = buytaskmx[i].pcode NEXT END CHOOSE END IF END IF END IF NEXT taskid = ll_taskid ELSE //////////////////////////////////////////////// //更新 UPDATE u_buytask SET kind = :Kind, sptid = :sptid, requiredate = :requiredate, assign_emp = :assign_emp, dscrp = :dscrp, moddate = getdate(), modemp = :publ_operator, orderid = :orderid, relcode = :relcode, train = :train, banktypeid = :banktypeid, reason = :reason, billamt = :billamt, moneyid = :moneyid, mrate = :mrate, sptsccode = :sptsccode WHERE u_buytask.taskid = :taskid AND u_buytask.scid = :scid And u_buytask.status = 0 Using commit_transaction; IF commit_transaction.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新采购订单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM u_buytaskmx WHERE u_buytaskmx.taskid = :taskid And u_buytaskmx.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除原明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //删除原有分配计划明细 ds_fp_plan_del.Retrieve(scid,taskid,2) IF ds_fp_plan_del.RowCount() > 0 THEN IF ds_fp_plan_del.Object.sumassignqty[1] > 0 THEN rslt = 0 arg_msg = "原分配计划明细已有分配数,操作取消" GOTO ext END IF END IF FOR ll_fp = 1 To ds_fp_plan_del.RowCount() IF uo_fp_plan.uof_plan_del(ds_fp_plan_del.Object.id[ll_fp],& ds_fp_plan_del.Object.qty[ll_fp],arg_msg,False) = 0 THEN arg_msg = '删除分配计划失败,'+arg_msg rslt = 0 GOTO ext END IF NEXT /////////////////////////////////// // FOR i = 1 To it_mxbt INSERT INTO u_buytaskmx (scid, taskid, mtrlid, qty, price, dscrp, dscrp2, printid, fprice, rebate, requiredate, orderid, storageid, status, iforder, sptmtrlname, unit, rate, uqty, uprice, woodcode, pcode, rqmxprintid, requestbuyid, relrqbuycode, wrkgrpid, taskmxprintid, enprice, tax, plancode, buybargainid, buybargainprintid, buybargaincode, jgdscrp, lastcode, lastdate, lastprice) VALUES (:scid, :taskid, :buytaskmx[i].mtrlid, :buytaskmx[i].qty, :buytaskmx[i].acprice, :buytaskmx[i].dscrp, :buytaskmx[i].dscrp2 , :buytaskmx[i].printid, :buytaskmx[i].fprice , :buytaskmx[i].rebate, :buytaskmx[i].requiredate, :buytaskmx[i].orderid, :buytaskmx[i].storageid, :buytaskmx[i].status, :buytaskmx[i].iforder, :buytaskmx[i].sptmtrlname, :buytaskmx[i].unit, :buytaskmx[i].rate, :buytaskmx[i].uqty, :buytaskmx[i].uprice, :buytaskmx[i].woodcode, :buytaskmx[i].pcode, :buytaskmx[i].rqmxprintid, :buytaskmx[i].requestbuyid, :buytaskmx[i].relrqbuycode, :buytaskmx[i].wrkgrpid, :buytaskmx[i].taskmxprintid, :buytaskmx[i].enprice, :buytaskmx[i].tax, :buytaskmx[i].plancode, :buytaskmx[i].buybargainid, :buytaskmx[i].buybargainprintid, :buytaskmx[i].buybargaincode, :buytaskmx[i].jgdscrp, :buytaskmx[i].lastcode, :buytaskmx[i].lastdate, :buytaskmx[i].lastprice) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '明细行:'+String(buytaskmx[i].printid)+",插入明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF buytaskmx[i].iffp = 1 And buytaskmx[i].orderid > 0 THEN IF billtype = 0 THEN //材料分配 ll_fp_array++ s_fp_plan.planid[ll_fp_array] = 0 s_fp_plan.assigntype[ll_fp_array] = 0 s_fp_plan.relbillid[ll_fp_array] = buytaskmx[i].orderid s_fp_plan.relprintid[ll_fp_array] = 0 s_fp_plan.plantype[ll_fp_array] = 1 s_fp_plan.plankind[ll_fp_array] = 2 s_fp_plan.plankind_relbillid[ll_fp_array] = taskid s_fp_plan.plankind_relprintid[ll_fp_array] = buytaskmx[i].printid s_fp_plan.scid[ll_fp_array] = scid s_fp_plan.mtrlwareid[ll_fp_array] = 0 s_fp_plan.planassignqty[ll_fp_array] = buytaskmx[i].qty s_fp_plan.mtrlid[ll_fp_array] = buytaskmx[i].mtrlid s_fp_plan.status[ll_fp_array] = buytaskmx[i].status s_fp_plan.woodcode[ll_fp_array] = buytaskmx[i].woodcode s_fp_plan.pcode[ll_fp_array] = buytaskmx[i].pcode ELSEIF billtype = 1 THEN //成品分配 IF buytaskmx[i].outtype = 0 Or buytaskmx[i].ifpackpro = 0 THEN ll_fp_array++ s_fp_plan.planid[ll_fp_array] = 0 s_fp_plan.assigntype[ll_fp_array] = 1 s_fp_plan.relbillid[ll_fp_array] = buytaskmx[i].orderid s_fp_plan.relprintid[ll_fp_array] = buytaskmx[i].taskmxprintid s_fp_plan.plantype[ll_fp_array] = 1 s_fp_plan.plankind[ll_fp_array] = 2 s_fp_plan.plankind_relbillid[ll_fp_array] = taskid s_fp_plan.plankind_relprintid[ll_fp_array] = buytaskmx[i].printid s_fp_plan.scid[ll_fp_array] = scid s_fp_plan.mtrlwareid[ll_fp_array] = 0 s_fp_plan.planassignqty[ll_fp_array] = buytaskmx[i].qty s_fp_plan.mtrlid[ll_fp_array] = buytaskmx[i].mtrlid s_fp_plan.status[ll_fp_array] = buytaskmx[i].status s_fp_plan.woodcode[ll_fp_array] = buytaskmx[i].woodcode s_fp_plan.pcode[ll_fp_array] = buytaskmx[i].pcode ELSE CHOOSE CASE buytaskmx[i].ifpackpro CASE 1,2 ds_pfpack.Retrieve(buytaskmx[i].mtrlid) IF ds_pfpack.RowCount() = 0 THEN arg_msg = '明细行:'+String(buytaskmx[i].printid)+",物料清单找不到包件明细,请检查" rslt = 0 GOTO ext END IF FOR ll_i = 1 To ds_pfpack.RowCount() ll_fp_array++ s_fp_plan.planid[ll_fp_array] = 0 s_fp_plan.assigntype[ll_fp_array] = 1 s_fp_plan.relbillid[ll_fp_array] = buytaskmx[i].orderid s_fp_plan.relprintid[ll_fp_array] = buytaskmx[i].taskmxprintid s_fp_plan.plantype[ll_fp_array] = 1 s_fp_plan.plankind[ll_fp_array] = 2 s_fp_plan.plankind_relbillid[ll_fp_array] = taskid s_fp_plan.plankind_relprintid[ll_fp_array] = buytaskmx[i].printid s_fp_plan.scid[ll_fp_array] = scid s_fp_plan.mtrlwareid[ll_fp_array] = 0 s_fp_plan.planassignqty[ll_fp_array] = buytaskmx[i].qty * ds_pfpack.Object.u_prdpf_sonscale[ll_i] s_fp_plan.mtrlid[ll_fp_array] = ds_pfpack.Object.u_prdpf_sonmtrlid[ll_i] IF ds_pfpack.Object.u_prdpf_ifover[ll_i] THEN s_fp_plan.status[ll_fp_array] = ds_pfpack.Object.u_prdpf_status[ll_i] s_fp_plan.woodcode[ll_fp_array] = ds_pfpack.Object.u_prdpf_woodcode[ll_i] s_fp_plan.pcode[ll_fp_array] = ds_pfpack.Object.u_prdpf_pcode[ll_i] ELSE CHOOSE CASE ds_pfpack.Object.u_prdpf_ifover[ll_i] CASE 0 s_fp_plan.status[ll_fp_array] = buytaskmx[i].status s_fp_plan.woodcode[ll_fp_array] = '' s_fp_plan.pcode[ll_fp_array] = '' CASE 1 s_fp_plan.status[ll_fp_array] = '' s_fp_plan.woodcode[ll_fp_array] = buytaskmx[i].woodcode s_fp_plan.pcode[ll_fp_array] = '' CASE 2 s_fp_plan.status[ll_fp_array] = '' s_fp_plan.woodcode[ll_fp_array] = '' s_fp_plan.pcode[ll_fp_array] = buytaskmx[i].pcode CASE 3 s_fp_plan.status[ll_fp_array] = buytaskmx[i].status s_fp_plan.woodcode[ll_fp_array] = buytaskmx[i].woodcode s_fp_plan.pcode[ll_fp_array] = '' CASE 4 s_fp_plan.status[ll_fp_array] = '' s_fp_plan.woodcode[ll_fp_array] = buytaskmx[i].woodcode s_fp_plan.pcode[ll_fp_array] = buytaskmx[i].pcode CASE 5 s_fp_plan.status[ll_fp_array] = buytaskmx[i].status s_fp_plan.woodcode[ll_fp_array] = '' s_fp_plan.pcode[ll_fp_array] = buytaskmx[i].pcode CASE 6 s_fp_plan.status[ll_fp_array] = buytaskmx[i].status s_fp_plan.woodcode[ll_fp_array] = buytaskmx[i].woodcode s_fp_plan.pcode[ll_fp_array] = buytaskmx[i].pcode END CHOOSE END IF NEXT CASE 3,4 s_pz = s_pz_null f_checkpz(buytaskmx[i].status,s_pz[]) IF UpperBound(s_pz) = 0 THEN arg_msg = '明细行:'+String(buytaskmx[i].printid)+',拆分子件错误,请检查组合配置' rslt = 0 GOTO ext END IF FOR ll_i = 1 To UpperBound(s_pz) ll_fp_array++ s_fp_plan.planid[ll_fp_array] = 0 s_fp_plan.assigntype[ll_fp_array] = 1 s_fp_plan.relbillid[ll_fp_array] = buytaskmx[i].orderid s_fp_plan.relprintid[ll_fp_array] = buytaskmx[i].taskmxprintid s_fp_plan.plantype[ll_fp_array] = 1 s_fp_plan.plankind[ll_fp_array] = 2 s_fp_plan.plankind_relbillid[ll_fp_array] = taskid s_fp_plan.plankind_relprintid[ll_fp_array] = buytaskmx[i].printid s_fp_plan.scid[ll_fp_array] = scid s_fp_plan.mtrlwareid[ll_fp_array] = 0 s_fp_plan.planassignqty[ll_fp_array] = buytaskmx[i].qty * Dec(s_pz[ll_i].qty) s_fp_plan.mtrlid[ll_fp_array] = buytaskmx[i].mtrlid s_fp_plan.status[ll_fp_array] = s_pz[ll_i].cfgname s_fp_plan.woodcode[ll_fp_array] = buytaskmx[i].woodcode s_fp_plan.pcode[ll_fp_array] = buytaskmx[i].pcode NEXT END CHOOSE END IF END IF END IF NEXT END IF FOR ll_fp = 1 To ll_fp_array IF uo_fp_plan.uof_plan_add(s_fp_plan.scid[ll_fp],& s_fp_plan.mtrlwareid[ll_fp],s_fp_plan.assigntype[ll_fp],& s_fp_plan.relbillid[ll_fp],s_fp_plan.relprintid[ll_fp],& s_fp_plan.planassignqty[ll_fp],& '',publ_operator,s_fp_plan.plantype[ll_fp],& s_fp_plan.plankind[ll_fp],s_fp_plan.plankind_relbillid[ll_fp],& s_fp_plan.plankind_relprintid[ll_fp],2,s_fp_plan.mtrlid[ll_fp],& s_fp_plan.status[ll_fp],s_fp_plan.woodcode[ll_fp],s_fp_plan.pcode[ll_fp],arg_msg,False) = 0 THEN arg_msg = '明细行:'+String(s_fp_plan.plankind_relprintid[ll_fp])+',保存库存分配计划明细表失败,'+arg_msg rslt = 0 IF it_newbegin THEN taskid = 0 GOTO ext END IF NEXT it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN p_clearmx() ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF billamt = 0 Destroy uo_fp_plan Destroy ds_fp_plan_del Destroy ds_pfpack Return(rslt) end function public function integer p_getinfo (long arg_scid, long arg_taskid, ref string arg_msg);Int rslt = 1 SELECT taskid, TaskCode, kind, sptID, requiredate, accomplishdate, Status, Opemp, Assign_Emp, Permit_Emp, Dscrp, opdate, orderid , relcode, banktypeid, train, ctmint, billtype, firpermitemp, firpermitdate, moneyid, mrate, sptsccode INTO :taskid, :TaskCode, :Kind, :sptID, :requiredate, :accomplishdate, :Status, :Operator, :Assign_Emp, :Permit_Emp, :Dscrp, :opdate, :orderid, :relcode, :banktypeid, :train, :ctmint, :billtype, :firpermitemp, :firpermitdate, :moneyid, :mrate, :sptsccode FROM u_buyTask WHERE u_buyTask.TaskID = :arg_taskid AND u_buyTask.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询订单内容失败(错误订单唯一码)' GOTO ext END IF scid = arg_scid ext: RETURN rslt end function public function integer updatebegin (long arg_scid, long arg_taskid, ref string arg_msg);//UPDATEbegin(long arg_taskid,ref string arg_msg) //从置对象,设定业务类型与关联ID,准备更新进仓单 //0 fail 1 success Long rslt = 1,CNT = 0 billamt = 0 IF arg_scid < 0 THEN arg_msg = '请选择分部' rslt = 0 GOTO ext END IF IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误采购订单唯一码' GOTO ext END IF IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF Status <> 0 THEN rslt = 0 arg_msg = '已经处于审核或完成等状态,不可以修改,如果订单未完成并要修改请先撤销审核' GOTO ext END IF it_newbegin = False it_updatebegin = True p_clearmx() //清除明细 scid = arg_scid //billamt = 0 ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer getinfo (integer arg_scid, long arg_taskid, ref string arg_msg); Int rslt = 1 Long i = 1 Long no_mxcheck = 0 IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误采购订单唯一码' GOTO ext END IF IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //用游标读取明细 DECLARE cur_inwaermx CURSOR FOR SELECT u_buytaskmx.mtrlid, u_buytaskmx.qty, u_buytaskmx.price, u_buytaskmx.dscrp, u_mtrldef.mtrlcode, u_buytaskmx.printid, u_buytaskmx.fprice, u_buytaskmx.rebate, u_buytaskmx.orderid, u_buytaskmx.storageid, u_buytaskmx.status, u_buytaskmx.sptmtrlname, u_buytaskmx.unit, u_buytaskmx.rate, u_buytaskmx.uqty, u_buytaskmx.uprice, u_buytaskmx.woodcode, u_buytaskmx.pcode, u_buytaskmx.rqmxprintid, u_buytaskmx.requestbuyid, u_buytaskmx.relrqbuycode, u_buytaskmx.wrkGrpid, u_buytaskmx.taskmxprintid, u_buytaskmx.stopqty, u_buytaskmx.rebuyqty, u_buytaskmx.enprice, u_buytaskmx.tax, u_mtrldef.iffp, u_mtrldef.outtype, u_mtrldef.storagetype, u_buytaskmx.plancode, u_buytaskmx.buybargainid, u_buytaskmx.buybargainprintid, u_buytaskmx.buybargaincode, u_buytaskmx.jgdscrp FROM u_buytaskmx,u_mtrldef WHERE u_buytaskmx.taskid = :arg_taskid AND u_buytaskmx.mtrlid = u_mtrldef.mtrlid AND u_buytaskmx.scid = :arg_scid USING commit_transaction; OPEN cur_inwaermx; FETCH cur_inwaermx INTO :buytaskmx[i].mtrlid,:buytaskmx[i].qty,:buytaskmx[i].price, :buytaskmx[i].dscrp,:buytaskmx[i].mtrlcode, :buytaskmx[i].printid,:buytaskmx[i].fprice,:buytaskmx[i].rebate, :buytaskmx[i].orderid,:buytaskmx[i].storageid,:buytaskmx[i].status, :buytaskmx[i].sptmtrlname,:buytaskmx[i].unit,:buytaskmx[i].rate, :buytaskmx[i].uqty,:buytaskmx[i].uprice,:buytaskmx[i].woodcode, :buytaskmx[i].pcode,:buytaskmx[i].rqmxprintid,:buytaskmx[i].requestbuyid, :buytaskmx[i].relrqbuycode,:buytaskmx[i].wrkGrpid,:buytaskmx[i].taskmxprintid, :buytaskmx[i].stopqty,:buytaskmx[i].rebuyqty,:buytaskmx[i].enprice, :buytaskmx[i].tax,:buytaskmx[i].iffp,:buytaskmx[i].outtype,:buytaskmx[i].storagetype,:buytaskmx[i].plancode, :buytaskmx[i].buybargainid, :buytaskmx[i].buybargainprintid, :buytaskmx[i].buybargaincode, :buytaskmx[i].jgdscrp; DO WHILE commit_transaction.SQLCode = 0 i++ FETCH cur_inwaermx INTO :buytaskmx[i].mtrlid,:buytaskmx[i].qty,:buytaskmx[i].price, :buytaskmx[i].dscrp,:buytaskmx[i].mtrlcode, :buytaskmx[i].printid,:buytaskmx[i].fprice,:buytaskmx[i].rebate, :buytaskmx[i].orderid,:buytaskmx[i].storageid,:buytaskmx[i].status, :buytaskmx[i].sptmtrlname,:buytaskmx[i].unit,:buytaskmx[i].rate, :buytaskmx[i].uqty,:buytaskmx[i].uprice,:buytaskmx[i].woodcode, :buytaskmx[i].pcode,:buytaskmx[i].rqmxprintid,:buytaskmx[i].requestbuyid, :buytaskmx[i].relrqbuycode,:buytaskmx[i].wrkGrpid,:buytaskmx[i].taskmxprintid, :buytaskmx[i].stopqty,:buytaskmx[i].rebuyqty,:buytaskmx[i].enprice, :buytaskmx[i].tax,:buytaskmx[i].iffp,:buytaskmx[i].outtype,:buytaskmx[i].storagetype,:buytaskmx[i].plancode, :buytaskmx[i].buybargainid, :buytaskmx[i].buybargainprintid, :buytaskmx[i].buybargaincode, :buytaskmx[i].jgdscrp; LOOP CLOSE cur_inwaermx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_buytaskmx WHERE u_buytaskmx.taskid = :arg_taskid AND u_buytaskmx.scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,采购订单明细数量" GOTO ext END IF IF i <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,采购订单明细" GOTO ext END IF it_mxbt = i - 1 it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer cancelpermit (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 DateTime nulldate Long ll_i Decimal lde_qty_tol, lde_addqty_order IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_requestbuy_hz = -1000 THEN rslt = 0 arg_msg = '选项:[111]申购单汇总采购,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_update_rqmtrlqty_buy = -1000 THEN rslt = 0 arg_msg = '选项:[342]采购订单审核检查并更新生产计划采购需求已订货数,读取初始默认值失败,操作取消!' GOTO ext END IF //yyx 100306 Long ll_ti,ll_rcnt //datastore ds_tmp_update //ds_tmp_update = Create datastore //ds_tmp_update.DataObject = 'ds_buytask_update_order' //ds_tmp_update.SetTransObject(sqlca) ////yyx 100306 datastore ds ds = Create datastore ds.DataObject = 'ds_orderrqmtrl_request_buytask' ds.SetTransObject(sqlca) uo_order_ml uo_order uo_order = Create uo_order_ml uo_requestbuy uo_rqbuy uo_rqbuy = Create uo_requestbuy SetNull(nulldate) IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误采购订单唯一码' GOTO ext END IF IF getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ctmint > 0 THEN arg_msg = '单据已截数,不能操作' rslt = 0 GOTO ext END IF IF Status <> 1 THEN rslt = 0 arg_msg = "订单只有在已审核状态才可以执行撤消审核,请核对" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_inwaremx,u_inware WHERE ( u_inware.scid = u_inwaremx.scid ) AND ( u_inware.inwareid = u_inwaremx.inwareid ) AND ( u_inware.billtype = 1) AND ( u_inwaremx.relid = :arg_taskid ) AND ( u_inwaremx.scid = :arg_scid) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询采购订单收货数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = "采购订单已经有相关进仓单据,不可以撤消审核" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_buytaskmx WHERE ( u_buytaskmx.taskid = :arg_taskid ) AND ( u_buytaskmx.scid = :arg_scid ) AND ( u_buytaskmx.stopqty > 0 ) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询采购订单是否有终止数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = "采购订单明细已有终止数量,不可以撤消审核" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_sptcheck_mx INNER JOIN u_sptcheck ON u_sptcheck_mx.billid = u_sptcheck.billid WHERE u_sptcheck_mx.reltaskid = :arg_taskid AND u_sptcheck.scid = :arg_scid AND u_sptcheck.billtype = 0 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询采购订单是否已开质检单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = "采购订单已经有相关质检单,不可以撤消审核" GOTO ext END IF // cnt = 0 SELECT count(*) INTO :cnt FROM u_getbar WHERE ( u_getbar.ifrel = 2) AND ( u_getbar.orderid = :arg_taskid ) AND ( u_getbar.scid = :arg_scid) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询采购订单是否已开条码生成单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = "采购订单已经有相关条码生成单,不可以撤消审核" GOTO ext END IF UPDATE u_buyTask SET Status = 4, permit_emp = '', permit_date = :nulldate WHERE TaskID = :arg_taskid And Status = 1 And scid = :arg_scid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致采购订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF String ls_unit_rq Decimal lde_rate_rq, lde_addqty FOR ll_i = 1 To it_mxbt IF buytaskmx[ll_i].requestbuyid > 0 THEN //处理单位转换,确认完成数量 SELECT unit, rate INTO :ls_unit_rq, :lde_rate_rq FROM u_requestbuymx WHERE ( printid = :buytaskmx[ll_i].rqmxprintid ) AND ( requestbuyid = :buytaskmx[ll_i].requestbuyid ) And ( scid = :scid ); IF ls_unit_rq = buytaskmx[ll_i].unit THEN //单位相同, 直接去订单数量 lde_addqty = buytaskmx[ll_i].uqty - buytaskmx[ll_i].rebuyqty ELSE //单位不同, 先转库存单位, 在转申购单位 lde_addqty = buytaskmx[ll_i].qty - buytaskmx[ll_i].rebuyqty * buytaskmx[ll_i].rate lde_addqty = lde_addqty / lde_rate_rq END IF IF uo_rqbuy.addmxcmpl(scid,buytaskmx[ll_i].requestbuyid,& buytaskmx[ll_i].rqmxprintid,0 - lde_addqty, arg_msg, False) = 0 THEN arg_msg = '第'+String(ll_i)+'行,'+arg_msg rslt = 0 GOTO ext END IF // IF uo_rqbuy.addmxcmpl(scid,buytaskmx[ll_i].requestbuyid,& // buytaskmx[ll_i].rqmxprintid,0 - (buytaskmx[ll_i].uqty - buytaskmx[ll_i].rebuyqty),ARG_MSG,False) = 0 THEN // ARG_MSG = '第'+String(ll_i)+'行,'+ARG_MSG // rslt = 0 // GOTO ext // END IF IF uo_rqbuy.tryfinish(scid,buytaskmx[ll_i].requestbuyid,arg_msg,False) = 0 THEN arg_msg = '第'+String(ll_i)+'行,'+arg_msg rslt = 0 GOTO ext END IF END IF IF billtype = 0 THEN IF uo_option_update_rqmtrlqty_buy = 1 THEN ll_rcnt = ds.Retrieve(scid,buytaskmx[ll_i].requestbuyid,buytaskmx[ll_i].mtrlid,buytaskmx[ll_i].Status,buytaskmx[ll_i].woodcode,buytaskmx[ll_i].pcode, buytaskmx[ll_i].orderid) lde_qty_tol = buytaskmx[ll_i].qty //- buytaskmx[ll_i].rebuyqty * buytaskmx[ll_i].rate FOR ll_ti = 1 To ll_rcnt IF ds.Object.u_orderrqmtrl_consignedqty[ll_ti] <= 0 THEN CONTINUE IF lde_qty_tol > ds.Object.u_orderrqmtrl_consignedqty[ll_ti] THEN lde_addqty_order = ds.Object.u_orderrqmtrl_consignedqty[ll_ti] lde_qty_tol -= lde_addqty_order ELSE lde_addqty_order = lde_qty_tol lde_qty_tol = 0 END IF lde_addqty_order = 0 - lde_addqty_order IF uo_order.f_assign_rqmtrlqty(ds.Object.u_orderrqmtrl_scid[ll_ti],ds.Object.u_orderrqmtrl_orderid[ll_ti],& ds.Object.u_orderrqmtrl_wrkGrpid[ll_ti],buytaskmx[ll_i].mtrlid,buytaskmx[ll_i].mtrlcode,buytaskmx[ll_i].Status,& buytaskmx[ll_i].woodcode,buytaskmx[ll_i].pcode,lde_addqty_order,2,arg_msg,False) = 0 THEN arg_msg = '订单明细行:'+String(ll_i)+','+arg_msg rslt = 0 GOTO ext END IF IF lde_qty_tol = 0 THEN EXIT NEXT END IF // IF uo_option_update_rqmtrlqty_buy = 1 THEN // // IF buytaskmx[ll_i].orderid > 0 THEN // IF uo_order.f_assign_rqmtrlqty(scid,buytaskmx[ll_i].orderid,buytaskmx[ll_i].wrkGrpid,& // buytaskmx[ll_i].mtrlid,buytaskmx[ll_i].mtrlcode,& // buytaskmx[ll_i].Status,buytaskmx[ll_i].woodcode,& // buytaskmx[ll_i].pcode,0 - (buytaskmx[ll_i].qty - buytaskmx[ll_i].rate * buytaskmx[ll_i].rebuyqty),2,arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext // END IF // ELSE // //YYX 100305 // IF buytaskmx[ll_i].requestbuyid > 0 And uo_option_requestbuy_hz = 1 THEN // ll_rcnt = ds_tmp_update.Retrieve(scid,buytaskmx[ll_i].requestbuyid,buytaskmx[ll_i].mtrlid,buytaskmx[ll_i].Status,buytaskmx[ll_i].woodcode,buytaskmx[ll_i].pcode) // // FOR ll_ti = 1 To ll_rcnt // IF uo_order.f_assign_rqmtrlqty(ds_tmp_update.Object.scid[ll_ti],ds_tmp_update.Object.orderid[ll_ti],& // ds_tmp_update.Object.wrkGrpid[ll_ti],buytaskmx[ll_i].mtrlid,buytaskmx[ll_i].mtrlcode,buytaskmx[ll_i].Status,& // buytaskmx[ll_i].woodcode,buytaskmx[ll_i].pcode,0 - (ds_tmp_update.Object.uqty[ll_ti] * buytaskmx[ll_i].rate),2,arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext // END IF // NEXT // END IF // //buytaskmx[ll_i].qty - buytaskmx[ll_i].rate * buytaskmx[ll_i].rebuyqty // END IF // END IF END IF NEXT it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy uo_order Destroy uo_rqbuy //Destroy ds_tmp_update Destroy ds p_reset() Return (rslt) end function public function integer add_dscrp (long arg_scid, long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);//add_dscrp(string arg_newdescppart) //0 fail 1 SUCCESS INT rslt=1 arg_newdescppart=TRIM(arg_newdescppart) IF it_updatebegin OR it_newbegin THEN rslt=0 arG_MSG="编辑状态下不可用" goto ext END IF IF arg_newdescppart='' THEN rslt=0 arG_MSG="要添加内容为空,操作取消" goto ext END IF if p_getinfo(arg_scid,arg_taskid,arg_msg)=0 then rslt=0 goto ext end if IF status=0 THEN rslt=0 arG_MSG="待采购审核状态下不可用" goto ext END IF UPDATE u_buyTask SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_buyTask.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 DSCRP = DSCRP+' '+arg_newdescppart it_newbegin=FALSE it_updatebegin=FALSE EXT: if arg_ifcommit and rslt=1 then COMMIT using commit_transaction; end if p_reset() return (rslt) end function public function integer tempstoptask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);INT rslt=1,cnt=0 IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_taskid<=0 THEN rslt=0 ARG_MSG='错误采购订单唯一码' goto ext end if if p_getinfo(arg_scid,arg_taskid,arg_msg)=0 then rslt=0 goto ext end if IF Status<>1 and Status<>2 THEN rslt=0 arG_MSG="订单只有在进行状态或暂停状态才可以执行暂停/取消暂停操作" goto ext END IF if Status=1 then UPDATE u_buyTask SET Status = 2 ,stopemp=:publ_operator WHERE TaskID = :arg_taskid and scid=:arg_scid using commit_transaction ; if commit_transaction.sqlcode<>0 then rslt=0 arG_MSG="因网络或其它原因导致暂停采购订单操作失败"+"~n"+commit_transaction.SQLErrText goto ext end if else UPDATE u_buyTask SET Status = 1,stopemp='' WHERE TaskID = :arg_taskid and scid=:arg_scid using commit_transaction; if commit_transaction.sqlcode<>0 then rslt=0 arG_MSG="因网络或其它原因导致取消暂停采购订单操作失败"+"~n"+commit_transaction.SQLErrText goto ext end if end if it_newbegin=FALSE it_updatebegin=FALSE EXT: if rslt=0 then rollback using commit_transaction; elseif arg_ifcommit then COMMIT using commit_transaction; end if p_reset() return (rslt) end function public function integer cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);//删除未审核的订单 //0 FAIL, 1 SUCCESS Int rslt = 1 Long ll_fp IF uo_option_disuse_buytask = -1000 THEN rslt = 0 arg_msg = '选项:[293]启用采购订单废弃单,读取初始默认值失败,操作取消!' GOTO ext END IF uo_mtrlware_assign uo_fp_plan uo_fp_plan = Create uo_mtrlware_assign uo_fp_plan.commit_transaction = commit_transaction datastore ds_fp_plan_del ds_fp_plan_del = Create datastore ds_fp_plan_del.DataObject = 'ds_fp_plan_plankind_del' ds_fp_plan_del.SetTransObject(commit_transaction) IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误采购订单唯一码' GOTO ext END IF IF p_getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF Status <> 0 THEN rslt = 0 ARG_MSG = "订单已经审核,不可以删除" GOTO ext END IF if uo_option_disuse_buytask = 1 then If uof_disuse(arg_scid,arg_taskid,1,arg_msg,False) = 0 Then rslt = 0 Goto ext End If end if //删除原有分配计划明细 ds_fp_plan_del.Retrieve(arg_scid,arg_taskid,2) IF ds_fp_plan_del.RowCount() > 0 THEN IF ds_fp_plan_del.Object.sumassignqty[1] > 0 THEN rslt = 0 ARG_MSG = "原分配计划明细已有分配数,操作取消" GOTO ext END IF END IF FOR ll_fp = 1 To ds_fp_plan_del.RowCount() IF uo_fp_plan.uof_plan_del(ds_fp_plan_del.Object.id[ll_fp],& ds_fp_plan_del.Object.qty[ll_fp],ARG_MSG,False) = 0 THEN ARG_MSG = '删除分配计划失败,'+ARG_MSG rslt = 0 GOTO ext END IF NEXT /////////////////////////////////// // DELETE FROM u_buytask Where u_buytask.taskid = :arg_taskid And scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "删除采购订单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF DELETE FROM u_buytaskmx Where u_buytaskmx.taskid = :arg_taskid And scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "删除采购订单明细操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF ext: it_newbegin = False it_updatebegin = False IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF Destroy uo_fp_plan Destroy ds_fp_plan_del p_reset() Return (rslt) end function public function integer firstpermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 Long ll_i Long ll_mtrlwareid,ll_cusid Int li_balctype,li_storagetype Decimal lde_qty_tol, lde_addqty_order IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_if_oa_buytask = -1000 THEN rslt = 0 arg_msg = '选项:[228]材料采购订单使用审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_buytask_cl_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[092]材料采购订单二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_if_oa_buytask_cp = -1000 THEN rslt = 0 arg_msg = '选项:[229]成品采购订单使用审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_if_oa_buytask_dept = -1000 THEN rslt = 0 arg_msg = '选项:[423]非生产采购订单使用OA审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_buytask_cp_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[093]成品采购订单二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_buytask_dept_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[422]非生产采购订单使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_requestbuy_hz = -1000 THEN rslt = 0 arg_msg = '选项:[111]申购单汇总采购,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_update_rqmtrlqty_buy = -1000 THEN rslt = 0 arg_msg = '选项:[342]采购订单保存审核检查并更新生产计划采购需求已订货数,读取初始默认值失败,操作取消!' GOTO ext END IF //yyx 100306 Long ll_ti,ll_rcnt //datastore ds_tmp_update //ds_tmp_update = Create datastore //ds_tmp_update.DataObject = 'ds_buytask_update_order' //ds_tmp_update.SetTransObject(sqlca) ////yyx 100306 datastore ds ds = Create datastore ds.DataObject = 'ds_orderrqmtrl_request_buytask' ds.SetTransObject(sqlca) uo_order_ml uo_order uo_order = Create uo_order_ml uo_requestbuy uo_rqbuy uo_rqbuy = Create uo_requestbuy IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误采购订单唯一码' GOTO ext END IF IF getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF billtype = 0 THEN IF uo_option_if_oa_buytask = 1 And uo_option_buytask_cl_secaudit = 1 And audit_buildtype = 0 THEN IF f_check_if_oaflow(arg_scid,arg_taskid,94,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSEif billtype = 1 then IF uo_option_if_oa_buytask_cp = 1 And uo_option_buytask_cp_secaudit = 1 And audit_buildtype = 0 THEN IF f_check_if_oaflow(arg_scid,arg_taskid,1277,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF elseif billtype = 2 then IF uo_option_if_oa_buytask_dept = 1 And uo_option_buytask_dept_secaudit = 1 And audit_buildtype = 0 THEN IF f_check_if_oaflow(arg_scid,arg_taskid,4299,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF IF status <> 4 THEN rslt = 0 arg_msg = "订单不是在初审状态,不可以终审" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where username = :arg_emp 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 UPDATE u_buytask SET permit_emp = :arg_emp, permit_date = getdate(), status = 1 WHERE taskid = :arg_taskid AND scid = :arg_scid And status = 4 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致订单最终审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF String ls_unit_rq Decimal lde_rate_rq, lde_addqty FOR ll_i = 1 To it_mxbt IF buytaskmx[ll_i].requestbuyid > 0 THEN ///////////////// //更新申购完成数 //处理单位转换,确认完成数量 SELECT unit, rate INTO :ls_unit_rq, :lde_rate_rq FROM u_requestbuymx WHERE ( printid = :buytaskmx[ll_i].rqmxprintid ) AND ( requestbuyid = :buytaskmx[ll_i].requestbuyid ) And ( scid = :scid ); IF ls_unit_rq = buytaskmx[ll_i].unit THEN //单位相同, 直接去订单数量 lde_addqty = buytaskmx[ll_i].uqty - buytaskmx[ll_i].rebuyqty ELSE //单位不同, 先转库存单位, 在转申购单位 lde_addqty = buytaskmx[ll_i].qty - buytaskmx[ll_i].rebuyqty * buytaskmx[ll_i].rate lde_addqty = lde_addqty / lde_rate_rq END IF //改成订单选申购单,可以再改单位, 不同单位数量要转换 IF uo_rqbuy.addmxcmpl(scid,buytaskmx[ll_i].requestbuyid,& buytaskmx[ll_i].rqmxprintid,lde_addqty,arg_msg,False) = 0 THEN arg_msg = '订单明细行:'+String(ll_i)+','+arg_msg rslt = 0 GOTO ext END IF IF uo_rqbuy.tryfinish(scid,buytaskmx[ll_i].requestbuyid,arg_msg,False) = 0 THEN arg_msg = '订单明细行:'+String(ll_i)+','+arg_msg rslt = 0 GOTO ext END IF /////////////////////// //更新主计划 已订货数 / 销售订单加库存 IF billtype = 0 THEN IF uo_option_update_rqmtrlqty_buy = 1 THEN ll_rcnt = ds.Retrieve(scid,buytaskmx[ll_i].requestbuyid,buytaskmx[ll_i].mtrlid,buytaskmx[ll_i].status,buytaskmx[ll_i].woodcode,buytaskmx[ll_i].pcode, buytaskmx[ll_i].orderid) lde_qty_tol = buytaskmx[ll_i].qty //- buytaskmx[ll_i].rebuyqty * buytaskmx[ll_i].rate FOR ll_ti = 1 To ll_rcnt IF ds.Object.u_orderrqmtrl_truerqqty[ll_ti] <= ds.Object.u_orderrqmtrl_consignedqty[ll_ti] THEN CONTINUE IF lde_qty_tol > ds.Object.u_orderrqmtrl_truerqqty[ll_ti] - ds.Object.u_orderrqmtrl_consignedqty[ll_ti] THEN lde_addqty_order = ds.Object.u_orderrqmtrl_truerqqty[ll_ti] - ds.Object.u_orderrqmtrl_consignedqty[ll_ti] lde_qty_tol -= lde_addqty_order ELSE lde_addqty_order = lde_qty_tol lde_qty_tol = 0 END IF IF uo_order.f_assign_rqmtrlqty(ds.Object.u_orderrqmtrl_scid[ll_ti],ds.Object.u_orderrqmtrl_orderid[ll_ti],& ds.Object.u_orderrqmtrl_wrkGrpid[ll_ti],buytaskmx[ll_i].mtrlid,buytaskmx[ll_i].mtrlcode,buytaskmx[ll_i].status,& buytaskmx[ll_i].woodcode,buytaskmx[ll_i].pcode,lde_addqty_order,2,arg_msg,False) = 0 THEN arg_msg = '订单明细行:'+String(ll_i)+','+arg_msg rslt = 0 GOTO ext END IF IF lde_qty_tol = 0 THEN EXIT NEXT END IF // IF uo_option_update_rqmtrlqty_buy = 1 THEN // IF buytaskmx[ll_i].orderid > 0 THEN // IF uo_order.f_assign_rqmtrlqty(scid,buytaskmx[ll_i].orderid,buytaskmx[ll_i].wrkGrpid,& // buytaskmx[ll_i].mtrlid,buytaskmx[ll_i].mtrlcode,buytaskmx[ll_i].status,& // buytaskmx[ll_i].woodcode,buytaskmx[ll_i].pcode,buytaskmx[ll_i].qty - buytaskmx[ll_i].rebuyqty * buytaskmx[ll_i].rate,2,arg_msg,False) = 0 THEN // arg_msg = '订单明细行:'+String(ll_i)+','+arg_msg // rslt = 0 // GOTO ext // END IF // ELSE // //YYX 100305 // IF buytaskmx[ll_i].requestbuyid > 0 And uo_option_requestbuy_hz = 1 THEN // ll_rcnt = ds_tmp_update.Retrieve(scid,buytaskmx[ll_i].requestbuyid,buytaskmx[ll_i].mtrlid,buytaskmx[ll_i].status,buytaskmx[ll_i].woodcode,buytaskmx[ll_i].pcode) // // lde_qty_tol = buytaskmx[ll_i].qty - buytaskmx[ll_i].rebuyqty * buytaskmx[ll_i].rate // FOR ll_ti = 1 To ll_rcnt // // IF lde_qty_tol > ds_tmp_update.Object.qty[ll_ti] THEN // lde_addqty_order = ds_tmp_update.Object.qty[ll_ti] // lde_qty_tol -= lde_addqty_order // ELSE // lde_addqty_order = lde_qty_tol // lde_qty_tol = 0 // END IF // // IF uo_order.f_assign_rqmtrlqty(ds_tmp_update.Object.scid[ll_ti],ds_tmp_update.Object.orderid[ll_ti],& // ds_tmp_update.Object.wrkGrpid[ll_ti],buytaskmx[ll_i].mtrlid,buytaskmx[ll_i].mtrlcode,buytaskmx[ll_i].status,& // buytaskmx[ll_i].woodcode,buytaskmx[ll_i].pcode,lde_addqty_order,2,arg_msg,False) = 0 THEN // arg_msg = '订单明细行:'+String(ll_i)+','+arg_msg // rslt = 0 // GOTO ext // END IF // NEXT // END IF // //buytaskmx[ll_i].qty - buytaskmx[ll_i].rebuyqty * buytaskmx[ll_i].rate // END IF // END IF ELSE //成品审核加0库存 //IF billtype = 0 THEN IF sys_option_buytask_add0ware = 1 THEN IF buytaskmx[ll_i].storageid > 0 THEN SELECT balctype,storagetype INTO :li_balctype,:li_storagetype FROM u_storage Where storageid = :buytaskmx[ll_i].storageid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '订单明细行:'+String(ll_i)+",查询仓库是否使用客户库存失败,"+commit_transaction.SQLErrText GOTO ext END IF IF li_storagetype = 1 THEN ll_cusid = 0 ELSE IF li_balctype = 0 THEN ll_cusid = 0 ELSE IF buytaskmx[ll_i].storagetype = 1 THEN ll_cusid = 0 ELSE IF buytaskmx[ll_i].orderid = 0 THEN ll_cusid = 0 ELSE SELECT u_saletask.cusid INTO :ll_cusid FROM u_saletask WHERE u_saletask.scid = :scid AND u_saletask.taskid = :buytaskmx[ll_i].orderid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '订单明细行:'+String(ll_i)+",查询对应销售订单客户id失败,"+commit_transaction.SQLErrText GOTO ext END IF END IF END IF END IF END IF Int li_ref_ifadd IF f_insert_0_mtrlware_2(ll_mtrlwareid,buytaskmx[ll_i].mtrlid,buytaskmx[ll_i].mtrlcode,buytaskmx[ll_i].storageid,& ll_cusid,buytaskmx[ll_i].status,buytaskmx[ll_i].woodcode,buytaskmx[ll_i].pcode,'','',& '',0,li_ref_ifadd,arg_msg,False) = 0 THEN arg_msg = '订单产品细行:'+String(ll_i)+',查询产品0库存信息记录失败,'+arg_msg rslt = 0 GOTO ext END IF // SELECT top 1 mtrlwareid INTO :ll_mtrlwareid // FROM u_mtrlware // WHERE scid = :scid // AND mtrlid = :buytaskmx[ll_i].mtrlid // AND storageid = :buytaskmx[ll_i].storageid // AND status = :buytaskmx[ll_i].status // AND woodcode = :buytaskmx[ll_i].woodcode // AND pcode = :buytaskmx[ll_i].pcode // AND plancode = '' // AND sptid = :ll_cusid // And mtrlcuscode = '' Using commit_transaction; // // IF commit_transaction.SQLCode = -1 THEN // arg_msg = '订单明细行:'+String(ll_i)+',查询产品库存失败,'+commit_transaction.SQLErrText // rslt = 0 // GOTO ext // ELSEIF sqlca.SQLCode = 100 THEN // ll_mtrlwareid = 0 // // ll_mtrlwareid = f_sys_scidentity(scid,"u_mtrlware","mtrlwareid",arg_msg,True,id_sqlca) // IF ll_mtrlwareid <= 0 THEN // arg_msg = '订单明细行:'+String(ll_i)+',取0库存id失败,'+arg_msg // rslt = 0 // GOTO ext // END IF // // INSERT INTO u_mtrlware(scid, // mtrlwareid, // mtrlid, // storageid, // noallocqty, // status, // plancode, // woodcode, // pcode, // sptid, // mtrlcuscode) // VALUES(:scid, // :ll_mtrlwareid, // :buytaskmx[ll_i].mtrlid, // :buytaskmx[ll_i].storageid, // 0, // :buytaskmx[ll_i].status, // '', // :buytaskmx[ll_i].woodcode, // :buytaskmx[ll_i].pcode, // :ll_cusid,'') Using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // arg_msg = '订单明细行:'+String(ll_i)+',产品加0库存失败或物料已经有库存,请检查,'+commit_transaction.SQLErrText // rslt = 0 // GOTO ext // END IF // END IF END IF END IF //IF sys_option_buytask_add0ware = 1 THEN END IF END IF //IF buytaskmx[ll_i].requestbuyid > 0 THEN NEXT it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy uo_order Destroy uo_rqbuy //Destroy ds_tmp_update Destroy ds p_reset() Return (rslt) end function public function integer lastpermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误采购订单唯一码' GOTO ext END IF IF p_getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF Status <> 4 THEN rslt = 0 ARG_MSG = "订单只有在已采购审核状态才可以执行最终审核,请核对" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where username = :arg_emp ; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询操作失败,操作员!" GOTO ext END IF IF cnt = 0 THEN rslt = 0 ARG_MSG = "操作员姓名未登记或已取消!" GOTO ext END IF UPDATE u_buyTask SET Permit_emp = :arg_emp, Status = 1 Where TaskID = :arg_taskid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致采购订单最终审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit THEN COMMIT; END IF p_reset() RETURN (rslt) end function public function integer checkmxmpl (long arg_scid, long arg_taskid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg);//checkmxcmpl(long arg_taskid,long arg_mtrlid,decimal arg_addqty,ref string arg_msg,boolean arg_ifcommit) INT rslt=1,cnt=0 IF arg_taskid<=0 THEN rslt=0 ARG_MSG='错误采购订单唯一码' goto ext end if if arg_addqty=0 then rslt=1 goto ext end if rslt=p_getinfo(arg_scid,arg_taskid,arg_msg) if rslt=0 then goto ext IF Status<>1 THEN rslt=0 arG_MSG="采购订单只有在进行状态下才可以执行进仓" goto ext END IF decimal ls_buyQty,ls_assignQty string ls_mtrlcode SELECT u_buyTaskMx.Qty, u_buyTaskMx.assignQty, u_mtrldef.mtrlcode INTO :ls_buyQty, :ls_assignQty, :ls_mtrlcode FROM u_buyTaskMx ,u_mtrldef WHERE ( u_buyTaskMx.TaskID =:arg_taskid ) AND ( u_buyTaskMx.MtrlID =:arg_mtrlid ) and ( u_mtrldef.mtrlid=u_buyTaskMx.MtrlID ) and ( u_buytaskmx.scid=:arg_scid) using commit_transaction; if commit_transaction.sqlcode<>0 then rslt=0 arG_MSG="因网络或错误物料编码["+ls_mtrlcode+"]导致查询采购订单已完成数量操作失败"+"~n"+commit_transaction.SQLErrText goto ext end if if ls_buyQty < ls_assignQty + arg_addqty then rslt=0 arG_MSG="物料["+ls_mtrlcode+"]的订单未完成数量只有"+string(ls_buyQty - ls_assignQty,'#,##0.0#')+",不能入库"+string(arg_addqty,'#,##0.0#') goto ext end if EXT: p_reset() return (rslt) end function public function integer trycmplbuytask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);//trycmplbuytask(arg_taskid,arg_msg,arg_ifcommit) Int rslt = 1,cnt = 0 DateTime null_dt SetNull(null_dt) IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误采购订单唯一码' GOTO ext END IF IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 And status <> 5 THEN rslt = 0 IF status <> 1 THEN arg_msg = "采购订单只有在进行状态下才可以执行设完成状态" ELSEIF status <> 5 THEN arg_msg = "采购订单只有在完成状态下才可以执行撤消完成状态" END IF GOTO ext END IF Decimal ls_zerook Boolean if_finish Decimal ld_autostopqty[],ld_stopqty[],ld_stopqty_ori[] String ls_mtrlcode[] Long ll_printid[] String ls_stopreason[],ls_stopreason_tmp Long ll_i = 1,j,ll_mx if_finish = True DECLARE zero_cur CURSOR FOR SELECT u_buytaskmx.uqty * (1 - u_mtrldef.downrate) - u_buytaskmx.consignedqty - u_buytaskmx.stopqty FROM u_buytaskmx,u_mtrldef WHERE ( u_buytaskmx.taskid = :arg_taskid ) AND ( u_buytaskmx.scid = :arg_scid ) AND ( u_buytaskmx.stopflag = 0 ) AND ( u_buytaskmx.mtrlid = u_mtrldef.mtrlid ) 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 status = 1 And if_finish THEN UPDATE u_buytask SET status = 5, accomplishdate = getdate(), finishemp = :publ_operator WHERE ( u_buytask.taskid = :arg_taskid ) And u_buytask.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致采购订单完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF DECLARE mx_cur CURSOR FOR SELECT u_buytaskmx.uqty - u_buytaskmx.consignedqty - u_buytaskmx.stopqty, u_buytaskmx.uqty - u_buytaskmx.consignedqty, u_buytaskmx.printid, u_mtrldef.mtrlcode, u_buytaskmx.stopreason, u_buytaskmx.stopqty FROM u_buytaskmx,u_mtrldef WHERE ( u_buytaskmx.taskid = :arg_taskid ) AND ( u_buytaskmx.scid = :arg_scid ) AND ( u_buytaskmx.stopflag = 0 ) AND ( u_buytaskmx.mtrlid = u_mtrldef.mtrlid ) Using commit_transaction ; OPEN mx_cur; FETCH mx_cur Into :ld_autostopqty[ll_i],:ld_stopqty[ll_i],:ll_printid[ll_i],:ls_mtrlcode[ll_i],:ls_stopreason[ll_i],:ld_stopqty_ori[ll_i]; DO WHILE commit_transaction.SQLCode = 0 ll_i++ FETCH mx_cur Into :ld_autostopqty[ll_i],:ld_stopqty[ll_i],:ll_printid[ll_i],:ls_mtrlcode[ll_i],:ls_stopreason[ll_i],:ld_stopqty_ori[ll_i]; LOOP CLOSE mx_cur; ll_mx = ll_i - 1 FOR j = 1 To ll_mx IF ld_autostopqty[j] > 0 THEN IF Trim(ls_stopreason[j]) = '' THEN IF ld_stopqty_ori[j] > 0 THEN ls_stopreason_tmp = leftA('原手动终止数量:'+String(ld_stopqty_ori[j],'#,##0.##########')+';现收货达下浮数量自动完成,自动终止数量:'+String(ld_autostopqty[j],'#,##0.##########'),100) ELSE ls_stopreason_tmp = '收货达下浮数量自动完成,自动终止数量:'+String(ld_autostopqty[j],'#,##0.##########') END IF ELSE ls_stopreason_tmp = leftA('原手动终止数量:'+String(ld_stopqty_ori[j],'#,##0.##########')+'原因:'+Trim(ls_stopreason[j])+';现收货达下浮数量自动完成,自动终止数量:'+String(ld_autostopqty[j],'#,##0.##########'),100) END IF UPDATE u_buytaskmx SET stopqty = :ld_stopqty[j], stopreason = :ls_stopreason_tmp, autostopqty = :ld_autostopqty[j] WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :ll_printid[j] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '物料:'+ls_mtrlcode[j]+',更新自动完成终止数失败,'+commit_transaction.SQLErrText GOTO ext END IF END IF NEXT END IF IF status = 5 And Not if_finish THEN UPDATE u_buytask SET status = 1, accomplishdate = :null_dt, finishemp = '' WHERE ( u_buytask.taskid = :arg_taskid ) And u_buytask.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致采购订单撤消完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF DECLARE mx2_cur CURSOR FOR SELECT u_buytaskmx.autostopqty, u_buytaskmx.stopqty, u_buytaskmx.printid, u_mtrldef.mtrlcode FROM u_buytaskmx,u_mtrldef WHERE ( u_buytaskmx.taskid = :arg_taskid ) AND ( u_buytaskmx.scid = :arg_scid ) AND ( u_buytaskmx.stopflag = 0 ) AND ( u_buytaskmx.mtrlid = u_mtrldef.mtrlid ) Using commit_transaction ; OPEN mx2_cur; FETCH mx2_cur Into :ld_autostopqty[ll_i],:ld_stopqty[ll_i],:ll_printid[ll_i],:ls_mtrlcode[ll_i]; DO WHILE commit_transaction.SQLCode = 0 ll_i++ FETCH mx2_cur Into :ld_autostopqty[ll_i],:ld_stopqty[ll_i],:ll_printid[ll_i],:ls_mtrlcode[ll_i]; LOOP CLOSE mx2_cur; ll_mx = ll_i - 1 FOR j = 1 To ll_mx IF ld_autostopqty[j] > 0 THEN UPDATE u_buytaskmx SET stopqty = :ld_stopqty[j] - :ld_autostopqty[j], stopreason = '', autostopqty = 0 WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :ll_printid[j] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '物料:'+ls_mtrlcode[j]+',更新自动完成终止数失败,'+commit_transaction.SQLErrText GOTO ext END IF END IF NEXT END IF it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF p_reset() Return (rslt) end function public function integer finishtask (integer arg_finishtype, long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0, i DateTime null_dt SetNull(null_dt) IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误采购订单唯一码' GOTO ext END IF IF getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF arg_finishtype = 5 Or arg_finishtype = 6 THEN IF Status <> 1 THEN rslt = 0 ARG_MSG = "采购订单只有在进行状态才可以执行完成,请核对" GOTO ext END IF ELSE IF arg_finishtype = 1 THEN IF Status <> 6 THEN rslt = 0 ARG_MSG = "采购订单只有在手动完成状态下才可以执行取消手动完成,请核对" GOTO ext END IF END IF END IF IF arg_finishtype = 5 Or arg_finishtype = 6 THEN UPDATE u_buyTask SET status = :arg_finishtype,accomplishdate = getdate(),finishemp = :publ_operator WHERE ( u_buyTask.TaskID = :arg_taskid ) AND ( u_buyTask.scid = :arg_scid) 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 ELSE UPDATE u_buyTask SET status = :arg_finishtype,accomplishdate = :null_dt,finishemp = '' WHERE ( u_buyTask.TaskID = :arg_taskid ) AND ( u_buyTask.scid = :arg_scid) 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 //更新明细完成状态 FOR i = 1 To it_mxbt IF finishmx(arg_scid, arg_taskid, buytaskmx[i].printid, ARG_MSG, False) = 0 THEN rslt = 0 GOTO ext END IF NEXT ext: IF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF p_reset() Return (rslt) end function public function integer newbegin (long arg_scid, ref string arg_msg);//重置对象,设定业务类型与关联ID,准备建立新单 //0 fail 1 success long rslt=1,CNT=0 if arg_scid < 0 then arg_msg = '请选择分部' rslt = 0 goto ext end if p_reset() it_newbegin=TRUE it_updatebegin=FALSE scid=arg_scid ext: if rslt = 0 then p_reset() return rslt end function public function integer stopmx (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, ref string arg_msg, boolean arg_commit);Int rslt = 1 //Int li_flag //DateTime null_dt //Decimal ld_notconsignedqty // //IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN // rslt = 0 // GOTO ext //END IF // //SetNull(null_dt) // //IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN // rslt = 0 // GOTO ext //END IF // //IF arg_flag = 1 THEN // IF status <> 1 THEN // arg_msg = '订单只能在进行状态才能操作' // rslt = 0 // GOTO ext // END IF //ELSE // IF status <> 1 AND status <> 5 THEN // arg_msg = '订单只能在进行状态或自动完成状态才能操作' // rslt = 0 // GOTO ext // END IF //END IF // //SELECT stopflag INTO :li_flag // FROM u_buytaskmx // WHERE scid = :arg_scid // AND taskid = :arg_taskid // AND printid = :arg_printid USING commit_transaction ; //IF sqlca.SQLCode <> 0 THEN // arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败' // rslt = 0 // GOTO ext //END IF // //IF arg_flag = 0 THEN // IF li_flag = 0 THEN // arg_msg = '明细物料'+arg_mtrlcode+'还未中止,不能取消中止' // rslt = 0 // GOTO ext // END IF //ELSE // IF li_flag = 1 THEN // arg_msg = '明细物料'+arg_mtrlcode+'已中止,不能重复中止' // rslt = 0 // GOTO ext // END IF //END IF // // //IF arg_flag = 1 THEN // SELECT u_buyTaskMx.uQty - u_buyTaskMx.consignedqty // INTO :ld_notconsignedqty // FROM u_buytaskmx // WHERE scid = :arg_scid // AND taskid = :arg_taskid // AND printid = :arg_printid USING commit_transaction ; // 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_buytaskmx // SET stopflag = 0, // stopemp = '', // stopdate = :null_dt, // stopreason = '' // WHERE scid = :arg_scid // AND taskid = :arg_taskid // AND printid = :arg_printid USING commit_transaction ; //ELSE // UPDATE u_buytaskmx // SET stopflag = 1, // stopemp = :publ_operator, // stopdate = getdate(), // stopreason = :arg_stopreason // WHERE scid = :arg_scid // AND taskid = :arg_taskid // AND printid = :arg_printid USING commit_transaction ; //END IF // //IF sqlca.SQLCode <> 0 THEN // arg_msg = '更新明细'+arg_mtrlcode+'中止标记失败,'+sqlca.SQLErrText // rslt = 0 // GOTO ext //END IF // //IF trycmplbuytask(arg_scid,arg_taskid,arg_msg,FALSE) = 0 THEN // rslt = 0 // GOTO ext //END IF // ////更新明细完成状态 //IF finishmx(arg_scid, arg_taskid, arg_printid, arg_msg, False) = 0 THEN // rslt = 0 // GOTO ext //END IF // //ext: //IF rslt = 0 THEN // ROLLBACK; //ELSEIF rslt = 1 AND arg_commit THEN // COMMIT; //END IF RETURN rslt end function public function integer secpermit (long arg_scid, long arg_taskid, ref string arg_emp, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 Long cnt = 0 Long ll_i IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_if_oa_buytask = -1000 THEN rslt = 0 arg_msg = '选项:[228]材料采购订单使用审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_buytask_cl_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[092]材料采购订单二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_if_oa_buytask_cp = -1000 THEN rslt = 0 arg_msg = '选项:[229]成品采购订单使用审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_if_oa_buytask_dept = -1000 THEN rslt = 0 arg_msg = '选项:[423]非生产采购订单使用OA审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_buytask_cp_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[093]成品采购订单二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_buytask_dept_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[422]非生产采购订单二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误采购订单唯一码' GOTO ext END IF IF getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 0 THEN rslt = 0 arg_msg = "订单不是在待审核状态,不可以再审" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where username = :arg_emp 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 UPDATE u_buytask SET firpermitemp = :arg_emp, firpermitdate = getdate(), status = 4 WHERE taskid = :arg_taskid AND scid = :arg_scid AND status = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致订单最终审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF billtype = 0 THEN IF uo_option_if_oa_buytask = 1 AND uo_option_buytask_cl_secaudit = 1 THEN IF f_oa(commit_transaction,FALSE,arg_msg,94,scid,taskid,taskcode,relcode,dscrp) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSEif billtype = 1 then IF uo_option_if_oa_buytask_cp = 1 AND uo_option_buytask_cp_secaudit = 1 THEN IF f_oa(commit_transaction,FALSE,arg_msg,1277,scid,taskid,taskcode,relcode,dscrp) = 0 THEN rslt = 0 GOTO ext END IF END IF elseif billtype = 2 then IF uo_option_if_oa_buytask_dept = 1 AND uo_option_buytask_dept_secaudit = 1 THEN IF f_oa(commit_transaction,FALSE,arg_msg,4299,scid,taskid,taskcode,relcode,dscrp) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF p_reset() Return (rslt) end function public function integer cancelsecpermit (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 DateTime nulldate Long ll_i If f_aps_mrp_cklock(arg_scid,arg_msg) = 0 Then rslt = 0 Goto ext End If If uo_option_if_oa_buytask = -1000 Then rslt = 0 arg_msg = '选项:[228]材料采购订单使用审批流程,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_buytask_cl_secaudit = -1000 Then rslt = 0 arg_msg = '选项:[092]材料采购订单二级审核,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_if_oa_buytask_cp = -1000 Then rslt = 0 arg_msg = '选项:[229]成品采购订单使用审批流程,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_if_oa_buytask_dept = -1000 Then rslt = 0 arg_msg = '选项:[423]非生产采购订单使用审批流程,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_buytask_cp_secaudit = -1000 Then rslt = 0 arg_msg = '选项:[093]成品采购订单二级审核,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_buytask_dept_secaudit = -1000 Then rslt = 0 arg_msg = '选项:[422]非生产采购订单二级审核,读取初始默认值失败,操作取消!' Goto ext End If SetNull(nulldate) If arg_taskid <= 0 Then rslt = 0 arg_msg = '错误采购订单唯一码' Goto ext End If If getinfo(arg_scid,arg_taskid,arg_msg) = 0 Then rslt = 0 Goto ext End If If ctmint > 0 Then arg_msg = '单据已截数,不能操作' rslt = 0 Goto ext End If If billtype = 0 Then If uo_option_if_oa_buytask = 1 And uo_option_buytask_cl_secaudit = 1 And audit_buildtype = 0 Then If f_check_if_oaflow_caudit(arg_scid,arg_taskid,94,arg_msg ) = 0 Then rslt = 0 Goto ext End If End If ElseIf billtype = 1 Then If uo_option_if_oa_buytask_cp = 1 And uo_option_buytask_cp_secaudit = 1 And audit_buildtype = 0 Then If f_check_if_oaflow_caudit(arg_scid,arg_taskid,1277,arg_msg ) = 0 Then rslt = 0 Goto ext End If End If ElseIf billtype = 2 Then If uo_option_if_oa_buytask_dept = 1 And uo_option_buytask_dept_secaudit = 1 And audit_buildtype = 0 Then If f_check_if_oaflow_caudit(arg_scid,arg_taskid,4299,arg_msg ) = 0 Then rslt = 0 Goto ext End If End If End If If Status <> 4 Then rslt = 0 arg_msg = "订单不是在初审状态,不可以撤审" Goto ext End If Update u_buyTask Set Status = 0, firpermitemp = '', firpermitdate = :nulldate Where TaskID = :arg_taskid And scid = :arg_scid And Status = 4 Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致采购订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If //将相关已完成的OA公文的状态设为作废 If billtype = 0 Then If (uo_option_buytask_cl_secaudit = 1 And uo_option_if_oa_buytask = 1) Then Update oa_doc Set docflag = 12 Where powerid = 94 And scid = :arg_scid And billid = :arg_taskid //and docflag = 11 Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '更新相关公文状态失败'+commit_transaction.SQLErrText Goto ext End If End If Elseif billtype = 1 then If (uo_option_buytask_cp_secaudit = 1 And uo_option_if_oa_buytask_cp = 1) Then Update oa_doc Set docflag = 12 Where powerid = 1277 And scid = :arg_scid And billid = :arg_taskid //and docflag = 11 Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '更新相关公文状态失败'+commit_transaction.SQLErrText Goto ext End If End If elseif billtype = 2 then If (uo_option_buytask_dept_secaudit = 1 And uo_option_if_oa_buytask_dept = 1) Then Update oa_doc Set docflag = 12 Where powerid = 4299 And scid = :arg_scid And billid = :arg_taskid //and docflag = 11 Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '更新相关公文状态失败'+commit_transaction.SQLErrText Goto ext End If End If End If it_newbegin = False it_updatebegin = False ext: If rslt = 0 Then Rollback Using commit_transaction; ElseIf arg_ifcommit Then Commit Using commit_transaction; End If p_reset() Return (rslt) end function public function integer stopqty (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlcode, decimal arg_stopqty, decimal arg_rebuyqty, string arg_stopreason, ref string arg_msg, boolean arg_commit); Int rslt = 1 Long cnt Int li_flag DateTime null_dt Decimal ld_notconsignedqty Long ll_requestbuyid,ll_rqmxprintid Decimal ld_r_uqty,ld_r_consignedqty,ld_rebuyqty_ori DateTime server_datetime String ls_stopemp Decimal ld_uv_uqty,ld_uv_rebuyqty String ls_unit, ls_r_unit Decimal ld_rate, ld_r_rate, lde_adduqty, lde_r_rebuyqty_ori, lde_addqty String ls_status, ls_woodcode, ls_pcode,ls_mtrlcode Long ll_orderid, ll_mtrlid , ll_wrkgrpid Decimal lde_qty_tol, lde_addqty_order IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_requestbuy uo_rqbuy uo_rqbuy = Create uo_requestbuy //yyx 100306 Long ll_ti,ll_rcnt //datastore ds_tmp_update //ds_tmp_update = Create datastore //ds_tmp_update.DataObject = 'ds_buytask_update_order' //ds_tmp_update.SetTransObject(sqlca) //yyx 100306 datastore ds ds = Create datastore ds.DataObject = 'ds_orderrqmtrl_request_buytask' ds.SetTransObject(sqlca) uo_order_ml uo_order uo_order = Create uo_order_ml 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 IsNull(arg_stopqty) THEN arg_stopqty = 0 IF IsNull(arg_rebuyqty) THEN arg_rebuyqty = 0 IF arg_stopqty < 0 THEN arg_msg = '订单终止数不能少于0,请检查' rslt = 0 GOTO ext END IF IF arg_rebuyqty > arg_stopqty THEN arg_msg = '重新采购数不能少于终止数,请检查' rslt = 0 GOTO ext END IF //采购收货选质检模式, 检查订单是否有未审质检单 , 有这不能保持; IF sys_option_check_buyin = 1 THEN IF arg_stopqty <> 0 THEN SELECT count(*) INTO :cnt FROM u_sptcheck_mx INNER JOIN u_sptcheck ON u_sptcheck_mx.billid = u_sptcheck.billid WHERE u_sptcheck.scid = :arg_scid AND u_sptcheck_mx.reltaskid = :arg_taskid AND u_sptcheck_mx.reltaskprintid = :arg_printid AND ( u_sptcheck.flag = 0 OR u_sptcheck.flag = 4) And u_sptcheck.billtype = 0; 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 END IF END IF IF arg_stopqty = 0 THEN SetNull(server_datetime) ls_stopemp = '' ELSE ls_stopemp = publ_operator END IF SetNull(null_dt) IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 And status <> 5 THEN arg_msg = '订单只能在进行状态或自动完成状态才能操作' rslt = 0 GOTO ext END IF SELECT u_buyTaskMx.uQty - u_buyTaskMx.consignedqty, requestbuyid, rqmxprintid, rebuyqty, unit, rate, orderid, wrkGrpid, mtrlid, status, woodcode, pcode INTO :ld_notconsignedqty, :ll_requestbuyid, :ll_rqmxprintid, :ld_rebuyqty_ori, :ls_unit, :ld_rate, :ll_orderid, :ll_wrkGrpid, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode FROM u_buytaskmx WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid Using commit_transaction ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败' rslt = 0 GOTO ext END IF IF arg_stopqty > ld_notconsignedqty THEN arg_msg = '明细物料'+arg_mtrlcode+'未收货数只有:'+String(ld_notconsignedqty,'#,##0.##########') +'不能终止:'+String(arg_stopqty,'#,##0.##########') rslt = 0 GOTO ext END IF IF ll_requestbuyid > 0 THEN //arg_stopqty,arg_rebuyqty - 采购单位, 更新申购要转成申购单位 SELECT uqty,consignedqty,unit,rate INTO :ld_r_uqty,:ld_r_consignedqty,:ls_r_unit, :ld_r_rate FROM u_requestbuymx WHERE scid = :arg_scid AND requestbuyid = :ll_requestbuyid And printid = :ll_rqmxprintid Using commit_transaction ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料'+arg_mtrlcode+'相关申购单信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF lde_addqty = (arg_rebuyqty - ld_rebuyqty_ori) * ld_rate //库存单位 IF ls_r_unit = ls_unit THEN //单位相同, 直接取订单数量 lde_adduqty = arg_rebuyqty lde_r_rebuyqty_ori = ld_rebuyqty_ori ELSE //单位不同, 先转库存单位, 在转申购单位 lde_adduqty = arg_rebuyqty * ld_rate lde_adduqty = lde_adduqty / ld_r_rate lde_r_rebuyqty_ori = ld_rebuyqty_ori * ld_rate lde_r_rebuyqty_ori = lde_r_rebuyqty_ori / ld_r_rate END IF lde_adduqty = lde_adduqty - lde_r_rebuyqty_ori //申购单位 IF lde_adduqty > ld_r_consignedqty THEN rslt = 0 arg_msg = '物料'+arg_mtrlcode+'相关申购单的已订货数为:'+String(ld_r_consignedqty,'#,##0.##########')+',不能重新采购:'+String(arg_rebuyqty,'#,##0.##########') GOTO ext END IF UPDATE u_requestbuymx SET consignedqty = consignedqty - :lde_adduqty WHERE scid = :arg_scid AND requestbuyid = :ll_requestbuyid And printid = :ll_rqmxprintid Using commit_transaction ; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新明细'+arg_mtrlcode+'相关申购单的已订货数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_rqbuy.tryfinish(arg_scid,ll_requestbuyid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF billtype = 0 THEN //更新主计划订货数 IF uo_option_update_rqmtrlqty_buy = 1 THEN ll_rcnt = ds.Retrieve(arg_scid,ll_requestbuyid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode, ll_orderid) lde_qty_tol = Abs(lde_addqty) FOR ll_ti = 1 To ll_rcnt IF lde_addqty > 0 THEN //增加终止 IF ds.Object.u_orderrqmtrl_consignedqty[ll_ti] <= 0 THEN CONTINUE IF lde_qty_tol > ds.Object.u_orderrqmtrl_consignedqty[ll_ti] THEN lde_addqty_order = ds.Object.u_orderrqmtrl_consignedqty[ll_ti] lde_qty_tol -= lde_addqty_order ELSE lde_addqty_order = lde_qty_tol lde_qty_tol = 0 END IF lde_addqty_order = 0 - lde_addqty_order ELSE //取消终止 IF ds.Object.u_orderrqmtrl_truerqqty[ll_ti] <= ds.Object.u_orderrqmtrl_consignedqty[ll_ti] THEN CONTINUE IF lde_qty_tol > ds.Object.u_orderrqmtrl_truerqqty[ll_ti] - ds.Object.u_orderrqmtrl_consignedqty[ll_ti] THEN lde_addqty_order = ds.Object.u_orderrqmtrl_truerqqty[ll_ti] - ds.Object.u_orderrqmtrl_consignedqty[ll_ti] lde_qty_tol -= lde_addqty_order ELSE lde_addqty_order = lde_qty_tol lde_qty_tol = 0 END IF lde_addqty_order = lde_addqty_order END IF IF uo_order.f_assign_rqmtrlqty(ds.Object.u_orderrqmtrl_scid[ll_ti],ds.Object.u_orderrqmtrl_orderid[ll_ti],& ds.Object.u_orderrqmtrl_wrkGrpid[ll_ti],ll_mtrlid,ls_mtrlcode,& ls_status,ls_woodcode,ls_pcode,lde_addqty_order,2,arg_msg,False) = 0 THEN arg_msg = '订单明细,'+arg_msg rslt = 0 GOTO ext END IF IF lde_qty_tol = 0 THEN EXIT NEXT END IF // IF ll_orderid > 0 THEN // IF uo_order.f_assign_rqmtrlqty(arg_scid,ll_orderid,ll_wrkgrpid,& // ll_mtrlid,ls_mtrlcode,ls_status,& // ls_woodcode,ls_pcode, 0 - lde_addqty,2,arg_msg,False) = 0 THEN // arg_msg = '订单明细,'+arg_msg // rslt = 0 // GOTO ext // END IF // ELSE // //YYX 100305 // IF ll_requestbuyid > 0 And uo_option_requestbuy_hz = 1 THEN // ll_rcnt = ds_tmp_update.Retrieve(arg_scid,ll_requestbuyid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode) // lde_qty_tol = Abs(lde_addqty) // FOR ll_ti = 1 To ll_rcnt // // IF lde_qty_tol > ds_tmp_update.Object.qty[ll_ti] THEN // lde_addqty_order = ds_tmp_update.Object.qty[ll_ti] // lde_qty_tol -= lde_addqty_order // ELSE // lde_addqty_order = lde_qty_tol // lde_qty_tol = 0 // END IF // // IF lde_addqty > 0 THEN //增加终止 // lde_addqty_order = 0 - lde_addqty_order // ELSE //取消终止 // lde_addqty_order = lde_addqty_order // END IF // IF uo_order.f_assign_rqmtrlqty(ds_tmp_update.Object.scid[ll_ti],ds_tmp_update.Object.orderid[ll_ti],& // ds_tmp_update.Object.wrkGrpid[ll_ti],ll_mtrlid,ls_mtrlcode,& // ls_status,ls_woodcode,ls_pcode,lde_addqty_order,2,arg_msg,False) = 0 THEN // arg_msg = '订单明细,'+arg_msg // rslt = 0 // GOTO ext // END IF // // NEXT // END IF // //buytaskmx[ll_i].qty - buytaskmx[ll_i].rebuyqty * buytaskmx[ll_i].rate // END IF END IF END IF UPDATE u_buytaskmx SET stopqty = :arg_stopqty, rebuyqty = :arg_rebuyqty, stopemp = :ls_stopemp, stopdate = :server_datetime, stopreason = :arg_stopreason WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新明细'+arg_mtrlcode+'中止标记失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF trycmplbuytask(arg_scid,arg_taskid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //更新明细完成状态 IF finishmx(arg_scid, arg_taskid, arg_printid, arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction ; ELSEIF rslt = 1 And arg_commit THEN COMMIT Using commit_transaction ; END IF Destroy uo_rqbuy Destroy uo_order //Destroy ds_tmp_update Destroy ds RETURN rslt end function public function integer ue_splitqty (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlcode, decimal arg_splitqty, datetime arg_newdate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag Decimal ld_notconsignedqty,ld_uqty Long ll_new_pid IF IsNull(arg_splitqty) THEN arg_splitqty = 0 IF arg_splitqty <= 0 THEN arG_MSG = '订单拆分数不能少于或等于0,请检查' rslt = 0 GOTO ext END IF IF p_getinfo(arg_scid,arg_taskid,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 THEN arG_MSG = '订单只能在进行状态才能操作' rslt = 0 GOTO ext END IF SELECT u_buyTaskMx.uQty - u_buyTaskMx.consignedqty - u_buyTaskMx.stopqty, u_buyTaskMx.uQty INTO :ld_notconsignedqty, :ld_uqty FROM u_buytaskmx WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arG_MSG = '查询明细物料'+arg_mtrlcode+'未完成数失败' rslt = 0 GOTO ext END IF IF arg_splitqty > ld_notconsignedqty THEN arG_MSG = '明细物料'+arg_mtrlcode+'未收货数只有:'+String(ld_notconsignedqty,'#,##0.##########') +'不能拆分:'+String(arg_splitqty,'#,##0.##########') rslt = 0 GOTO ext END IF IF arg_splitqty = ld_uqty THEN rslt = 0 arG_MSG = '拆分数不能与采购数量相同' GOTO ext END IF SELECT max(printid) INTO :ll_new_pid FROM u_buytaskmx WHERE scid = :arg_scid AND taskid = :arg_taskid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arG_MSG = '查询明细行ID失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ll_new_pid = ll_new_pid + 1 INSERT INTO u_buytaskmx ( scid, qty, price, mtrlid, taskid, dscrp, printid, fprice, rebate, requiredate, orderid, storageid, status, iforder, sptmtrlname, unit, rate, uqty, uprice, woodcode, pcode, rqmxprintid, requestbuyid, relrqbuycode, wrkGrpid, taskmxprintid, enprice) SELECT scid, :arg_splitqty * rate, price, mtrlid, taskid, dscrp, :ll_new_pid, fprice, rebate, :arg_newdate, orderid, storageid, status, iforder, sptmtrlname, unit, rate, :arg_splitqty, uprice, woodcode, pcode, rqmxprintid, requestbuyid, relrqbuycode, wrkGrpid, taskmxprintid, enprice FROM u_buyTaskMx WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arG_MSG = '插入新明细行失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_buyTaskMx SET uqty = uqty - :arg_splitqty, qty = qty - :arg_splitqty * rate WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arG_MSG = '更新原明细行数量失败,'+commit_transaction.SQLErrText rslt = 0 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 addmx_sptcheckqty (long arg_scid, long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 IF uo_option_ifovertask = -1000 THEN rslt = 0 arg_msg = '选项:[010]超采购,外协订单收货,读取初始默认值失败,操作取消!' GOTO ext END IF 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_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 And status <> 5 THEN rslt = 0 IF status <> 1 THEN arg_msg = "采购订单只有在进行状态下才可以执行质检" ELSEIF status <> 5 THEN arg_msg = "采购订单只有在完成状态下才可以撤销质检" END IF GOTO ext END IF Decimal ld_qty,ld_sptcheckqty Long ll_mtrlid String ls_mtrlcode Decimal ld_uprate,ld_upqty,ld_stopqty SELECT u_mtrldef.mtrlcode, u_buytaskmx.qty, u_buytaskmx.sptcheckqty, u_buytaskmx.stopqty, u_buytaskmx.mtrlid INTO :ls_mtrlcode, :ld_qty, :ld_sptcheckqty, :ld_stopqty, :ll_mtrlid FROM u_mtrldef,u_buytaskmx WHERE u_mtrldef.mtrlid = u_buytaskmx.mtrlid AND u_buytaskmx.scid = :arg_scid AND u_buytaskmx.taskid = :arg_taskid AND u_buytaskmx.printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询明细物料编码失败,'+commit_transaction.SQLErrText GOTO ext END IF IF uo_option_ifovertask = 1 THEN //不允许超收 IF ld_qty < ld_sptcheckqty + arg_addqty + ld_stopqty THEN rslt = 0 arg_msg = "物料:"+ls_mtrlcode+"未质检数量只有"+String(ld_qty - ld_sptcheckqty - ld_stopqty,'#,##0.0#########')+",不能质检"+String(arg_addqty,'#,##0.0#########') GOTO ext END IF ELSEIF uo_option_ifovertask = 3 THEN //允许超收但按比例限制 SELECT uprate , upqty 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 ld_qty * (1 + ld_uprate) + ld_upqty < ld_sptcheckqty + arg_addqty + ld_stopqty THEN rslt = 0 arg_msg = "物料:"+ls_mtrlcode+"未完成数量只有"+String(ld_qty - ld_sptcheckqty - ld_stopqty, '#,##0.0#########')+"允许超收上限:"+String(ld_qty * (1 + ld_uprate) + ld_upqty - ld_sptcheckqty - ld_stopqty,'#,##0.0#########')+",不能入库"+String(arg_addqty,'#,##0.0#########') GOTO ext END IF END IF IF arg_addqty < 0 And arg_addqty + ld_sptcheckqty < 0 THEN rslt = 0 arg_msg = "物料:"+ls_mtrlcode+"已质检数量只有"+String(ld_sptcheckqty, '#,##0.0###')+",不能撤审质检数量"+String(arg_addqty,'#,##0.0#########') GOTO ext END IF UPDATE u_buytaskmx SET sptcheckqty = sptcheckqty + :arg_addqty WHERE ( u_buytaskmx.taskid = :arg_taskid ) AND ( u_buytaskmx.printid = :arg_printid ) AND ( u_buytaskmx.scid = :arg_scid) AND ( u_buytaskmx.stopflag = 0 ) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品唯一码导致采购订单完成数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF p_reset() Return (rslt) end function public function integer finishmx (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误采购订单唯一码' GOTO ext END IF IF arg_printid <= 0 THEN rslt = 0 arg_msg = '错误采购订单明细ID唯一码' GOTO ext END IF Int li_status, li_stopflag Int li_finishflag = 0 String ls_finishemp DateTime ldt_finishdate Decimal ls_buyqty,ls_consignedqty Long ll_mtrlid Decimal ld_upqty,ld_stopqty SELECT status INTO :li_status FROM u_buytask WHERE scid = :arg_scid AND taskid = :arg_taskid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询采购订单状态失败,'+commit_transaction.SQLErrText GOTO ext END IF IF li_status = 5 Or li_status = 6 Or li_status = 3 THEN li_finishflag = 1 ls_finishemp = publ_operator ldt_finishdate = DateTime(Today(), Now()) ELSE SELECT u_buytaskmx.mtrlid, u_buytaskmx.uqty, u_buytaskmx.consignedqty, u_buytaskmx.stopqty, u_buytaskmx.stopflag INTO :ll_mtrlid, :ls_buyqty, :ls_consignedqty, :ld_stopqty, :li_stopflag FROM u_mtrldef,u_buytaskmx WHERE u_mtrldef.mtrlid = u_buytaskmx.mtrlid AND u_buytaskmx.scid = :arg_scid AND u_buytaskmx.taskid = :arg_taskid AND u_buytaskmx.printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询明细物料编码失败,'+commit_transaction.SQLErrText GOTO ext END IF IF li_stopflag = 1 THEN li_finishflag = 1 ls_finishemp = publ_operator ldt_finishdate = DateTime(Today(), Now()) ELSE IF ls_buyqty - ld_stopqty <= ls_consignedqty THEN li_finishflag = 1 ls_finishemp = publ_operator ldt_finishdate = DateTime(Today(), Now()) ELSE li_finishflag = 0 ls_finishemp = '' SetNull(ldt_finishdate ) END IF END IF END IF UPDATE u_buytaskmx SET finishflag = :li_finishflag, finishemp = :ls_finishemp, finishdate = :ldt_finishdate WHERE u_buytaskmx.scid = :arg_scid AND u_buytaskmx.taskid = :arg_taskid AND u_buytaskmx.printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新采购订单明细完成状态失败,'+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 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 THEN COMMIT Using commit_transaction; END IF //p_reset() Return (rslt) end function public function integer uof_disuse (long arg_scid, long arg_taskid, integer arg_disusetype, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_disuseid //arg_disusetype 0 - 修改, 1-删除 Select max(disuseid) Into :ll_disuseid From u_buyTask_disuse Where scid = :arg_scid And taskid = :arg_taskid Using commit_transaction; If commit_transaction.SQLCode = -1 Then rslt = 0 arg_msg = '获取采购订单废弃单序号失败,'+ commit_transaction.SQLErrText Goto ext ElseIf commit_transaction.SQLCode = 100 Then ll_disuseid = 0 End If if isnull(ll_disuseid) then ll_disuseid = 0 ll_disuseid++ Insert Into u_buyTask_disuse (scid, TaskID, TaskCode, orderid, kind, sptID, requiredate, accomplishdate, finishemp, Status, Opemp, Modemp, moddate, Assign_Emp, Permit_Emp, Permit_date, Dscrp, opdate, stopemp, ctmint, printnum, relcode, banktypeid, train, reason, billtype, firpermitemp, firpermitdate, billamt, moneyid, mrate, ConfirmTime, ConfirmUser, senduser, sendtime, sendcnt, sptcode, sptname, moneyname, banktypename, disuseid, disuseemp, disusedate, disusetype) Select u_buyTask.scid, u_buyTask.TaskID, u_buyTask.TaskCode, u_buyTask.orderid, u_buyTask.kind, u_buyTask.sptID, u_buyTask.requiredate, u_buyTask.accomplishdate, u_buyTask.finishemp, u_buyTask.Status, u_buyTask.Opemp, u_buyTask.Modemp, u_buyTask.moddate, u_buyTask.Assign_Emp, u_buyTask.Permit_Emp, u_buyTask.Permit_date, u_buyTask.Dscrp, u_buyTask.opdate, u_buyTask.stopemp, u_buyTask.ctmint, u_buyTask.printnum, u_buyTask.relcode, u_buyTask.banktypeid, u_buyTask.train, u_buyTask.reason, u_buyTask.billtype, u_buyTask.firpermitemp, u_buyTask.firpermitdate, u_buyTask.billamt, u_buyTask.moneyid, u_buyTask.mrate, u_buyTask.ConfirmTime, u_buyTask.ConfirmUser, u_buyTask.senduser, u_buyTask.sendtime, u_buyTask.sendcnt, u_spt.sptcode, u_spt.name, cw_currency.name, cw_banktype.banktypename, :ll_disuseid,:publ_operator,getdate(),:arg_disusetype From u_buyTask LEFT Outer JOIN cw_banktype ON u_buyTask.banktypeid = cw_banktype.banktypeid LEFT Outer JOIN cw_currency ON u_buyTask.moneyid = cw_currency.moneyid LEFT Outer JOIN u_spt ON u_buyTask.sptID = u_spt.sptid Where u_buyTask.scid = :arg_scid And u_buyTask.taskid = :arg_taskid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '插入采购订单废弃单失败,'+commit_transaction.SQLErrText Goto ext End If Insert Into u_buyTaskmx_disuse (scid, TaskID, printid, MtrlID, iforder, Qty, fprice, rebate, Price, AssignQty, status, dscrp, consignedqty, Requiredate, storageid, orderid, ctmint, sptmtrlname, uqty, uprice, unit, rate, stopflag, stopemp, stopdate, stopreason, woodcode, pcode, rqmxprintid, requestbuyid, relrqbuycode, wrkGrpid, taskmxprintid, sptbackdate, delayreason, stopqty, rebuyqty, buybargainid, buybargainprintid, buybargaincode, accomplishdate, admtrlid, relprintid, fpqty, ffpqty, autostopqty, enprice, tax, sptcheckqty, plancode, finishflag, finishemp, finishdate, mtrlcode, mtrlname, disuseid) Select u_buyTaskMx.scid, u_buyTaskMx.TaskID, u_buyTaskMx.printid, u_buyTaskMx.MtrlID, u_buyTaskMx.iforder, u_buyTaskMx.Qty, u_buyTaskMx.fprice, u_buyTaskMx.rebate, u_buyTaskMx.Price, u_buyTaskMx.AssignQty, u_buyTaskMx.status, u_buyTaskMx.dscrp, u_buyTaskMx.consignedqty, u_buyTaskMx.Requiredate, u_buyTaskMx.storageid, u_buyTaskMx.orderid, u_buyTaskMx.ctmint, u_buyTaskMx.sptmtrlname, u_buyTaskMx.uqty, u_buyTaskMx.uprice, u_buyTaskMx.unit, u_buyTaskMx.rate, u_buyTaskMx.stopflag, u_buyTaskMx.stopemp, u_buyTaskMx.stopdate, u_buyTaskMx.stopreason, u_buyTaskMx.woodcode, u_buyTaskMx.pcode, u_buyTaskMx.rqmxprintid, u_buyTaskMx.requestbuyid, u_buyTaskMx.relrqbuycode, u_buyTaskMx.wrkGrpid, u_buyTaskMx.taskmxprintid, u_buyTaskMx.sptbackdate, u_buyTaskMx.delayreason, u_buyTaskMx.stopqty, u_buyTaskMx.rebuyqty, u_buyTaskMx.buybargainid, u_buyTaskMx.buybargainprintid, u_buyTaskMx.buybargaincode, u_buyTaskMx.accomplishdate, u_buyTaskMx.admtrlid, u_buyTaskMx.relprintid, u_buyTaskMx.fpqty, u_buyTaskMx.ffpqty, u_buyTaskMx.autostopqty, u_buyTaskMx.enprice, u_buyTaskMx.tax, u_buyTaskMx.sptcheckqty, u_buyTaskMx.plancode, u_buyTaskMx.finishflag, u_buyTaskMx.finishemp, u_buyTaskMx.finishdate, u_mtrldef.mtrlcode, u_mtrldef.mtrlname,:ll_disuseid From u_buyTaskMx LEFT Outer JOIN u_mtrldef ON u_buyTaskMx.MtrlID = u_mtrldef.mtrlid Where u_buyTaskMx.scid = :arg_scid And u_buyTaskMx.taskid = :arg_taskid 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 uof_update_buyermemo (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_buyermemo, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 UPDATE u_buytaskmx SET buyermemo = :arg_buyermemo WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid And mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新订单明细备忘录失败'+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = '要更新的数据不存在,可能已删除,请重新检查' GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_update_feedback (long arg_scid, long arg_taskid, s_buytaskmx_feedback_ljfieb arg_s_mx[], ref string arg_msg, boolean arg_ifcommit);Int rslt Long ll_i Int li_ifupdate = 0 rslt = 1 If UpperBound(arg_s_mx) <= 0 Then rslt = 0 arg_msg = '没有反馈内容' Goto ext End If For ll_i = 1 To UpperBound(arg_s_mx) If arg_s_mx[ll_i].spt_uqty > 0 Then li_ifupdate = 1 Exit End If Next If li_ifupdate = 0 Then rslt = 0 arg_msg = '订单明细回复数量均为零,不能更新到原订单中' Goto ext End If If uo_option_disuse_buytask = -1000 Then rslt = 0 arg_msg = '选项:[293]启用采购订单废弃单,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_unit_dec = -1000 Then rslt = 0 arg_msg = '选项:[023]辅助单位转换库存单位小数位,读取初始默认值失败,操作取消!' Goto ext End If If p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 Then rslt = 0 Goto ext End If If status = 1 Then If cancelpermit(arg_scid,arg_taskid,arg_msg,False) = 0 Then arg_msg = '撤审采购订单失败:'+arg_msg rslt = 0 Goto ext Else If cancelsecpermit(arg_scid,arg_taskid,arg_msg,True) = 0 Then arg_msg = '撤审采购订单失败:'+arg_msg rslt = 0 Goto ext End If End If ElseIf status = 4 Then If cancelsecpermit(arg_scid,arg_taskid,arg_msg,True) = 0 Then arg_msg = '撤审采购订单失败:'+arg_msg rslt = 0 Goto ext End If End If If uo_option_disuse_buytask = 1 Then If uof_disuse(scid,taskid,0,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If For ll_i = 1 To UpperBound(arg_s_mx) If arg_s_mx[ll_i].spt_uqty = 0 Then Delete From u_buytaskmx Where mtrlid = :arg_s_mx[ll_i].mtrlid And orderid = :arg_s_mx[ll_i].orderid And status = :arg_s_mx[ll_i].status And woodcode = :arg_s_mx[ll_i].woodcode And pcode = :arg_s_mx[ll_i].pcode And wrkgrpid = :arg_s_mx[ll_i].wrkgrpid And unit = :arg_s_mx[ll_i].unit And taskmxprintid = :arg_s_mx[ll_i].taskmxprintid And requestbuyid = :arg_s_mx[ll_i].requestbuyid And rqmxprintid = :arg_s_mx[ll_i].rqmxprintid And scid = :arg_scid And taskid = :arg_taskid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "删除采购订单明细操作失败"+"~n"+SQLCA.SQLErrText Goto ext End If Else Update u_buytaskmx Set uqty = :arg_s_mx[ll_i].spt_uqty, enprice = :arg_s_mx[ll_i].spt_enprice, requiredate = :arg_s_mx[ll_i].spt_requiredate, status = :arg_s_mx[ll_i].spt_status, woodcode = :arg_s_mx[ll_i].spt_woodcode, pcode = :arg_s_mx[ll_i].spt_pcode, dscrp = :arg_s_mx[ll_i].spt_dscrp, qty = round(:arg_s_mx[ll_i].spt_uqty / rate,:uo_option_unit_dec), uprice = :arg_s_mx[ll_i].spt_enprice * :mrate, fprice = Round((:arg_s_mx[ll_i].spt_enprice * :arg_s_mx[ll_i].spt_uqty * :mrate)/(Round(:arg_s_mx[ll_i].spt_uqty * rate,:uo_option_unit_dec)),10), price = fprice * rebate Where mtrlid = :arg_s_mx[ll_i].mtrlid And orderid = :arg_s_mx[ll_i].orderid And status = :arg_s_mx[ll_i].status And woodcode = :arg_s_mx[ll_i].woodcode And pcode = :arg_s_mx[ll_i].pcode And wrkgrpid = :arg_s_mx[ll_i].wrkgrpid And unit = :arg_s_mx[ll_i].unit And taskmxprintid = :arg_s_mx[ll_i].taskmxprintid And requestbuyid = :arg_s_mx[ll_i].requestbuyid And rqmxprintid = :arg_s_mx[ll_i].rqmxprintid And scid = :arg_scid And taskid = :arg_taskid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '更新采购订单明细失败,'+commit_transaction.SQLErrText Goto ext End If End If Next 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 uof_update_requiredate (long arg_scid, long arg_taskid, long arg_printid, datetime arg_requiredate, string arg_reason, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_ifmod Int cnt SELECT CASE when u_buytaskmx.requiredate2 Is Null THEN 0 ELSE 1 END Into :li_ifmod From u_buytaskmx Where taskid = :arg_taskid And printid = :arg_printid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询采购订单明细失败,'+sqlca.SQLErrText GOTO ext END IF ////按计划的,已超期的,不能修改 //Long ll_daynum //string ls_ordercodestr //SELECT CASE when u_buytaskmx.finishflag = 1 THEN DATEDIFF(dd, u_buytaskmx.finishdate, u_buytaskmx.requiredate) when u_buyTask.Status In ( 0 ,1,2,4) THEN DATEDIFF(dd, GETDATE(), u_buytaskmx.requiredate) ELSE DATEDIFF(dd, u_buyTask.accomplishdate, u_buytaskmx.requiredate) END as daynum, isnull(u_requestbuymx.ordercodestr,'') as ordercodestr // Into :ll_daynum, :ls_ordercodestr //From u_buyTask Inner join //u_buytaskmx On u_buyTask.scid = u_buytaskmx.scid //And u_buyTask.taskid = u_buytaskmx.taskid LEFT OUTER JOIN // u_requestbuymx ON u_buyTaskMx.scid = u_requestbuymx.scid AND // u_buyTaskMx.requestbuyid = u_requestbuymx.requestbuyid AND // u_buyTaskMx.rqmxprintid = u_requestbuymx.printid //Where u_buytaskmx.taskid = :arg_taskid //And u_buytaskmx.printid = :arg_printid //And u_buytaskmx.scid = :arg_scid; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询采购订单信息失败,'+sqlca.SQLErrText // GOTO ext //END IF // //IF ll_daynum < 0 and ls_ordercodestr <> '' THEN // rslt = 0 // arg_msg = '按主生产计划的采购订单,明细已经超期,不能修改' // GOTO ext //END IF IF li_ifmod = 0 THEN UPDATE u_buytaskmx SET requiredate2 = requiredate, requiredate = :arg_requiredate, modreason = :arg_reason, modemp = :publ_operator, moddate = getdate() WHERE taskid = :arg_taskid AND printid = :arg_printid And scid = :arg_scid; ELSE UPDATE u_buytaskmx SET requiredate = :arg_requiredate, modreason = :arg_reason, modemp = :publ_operator, moddate = getdate() WHERE taskid = :arg_taskid AND printid = :arg_printid And scid = :arg_scid; END IF IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新订单明细更改后交货日期失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer cstopbuytask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0, i IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误采购订单唯一码' GOTO ext END IF IF getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF Status <> 3 THEN rslt = 0 ARG_MSG = "订单只有在终止状态才可以执行反终止,请核对" GOTO ext END IF UPDATE u_buyTask SET Status = 1,accomplishdate = null,stopemp = '' Where TaskID = :arg_taskid AND scid = :arg_scid 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 //更新明细完成状态 FOR i = 1 To it_mxbt IF finishmx(arg_scid, arg_taskid, buytaskmx[i].printid, ARG_MSG, False) = 0 THEN rslt = 0 GOTO ext END IF NEXT it_newbegin = FALSE it_updatebegin = FALSE ext: IF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() Return (rslt) end function public function integer acceptmx (integer arg_iforder, long arg_orderid, string arg_ordercode, long arg_mtrlid, decimal arg_uqty, decimal arg_enprice, decimal arg_rebate, decimal arg_planprice, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, datetime arg_requiredate, long arg_storageid, string arg_status, string arg_unit, decimal arg_rate, string arg_woodcode, string arg_pcode, long arg_requestbuyid, long arg_rqmxprintid, long arg_wrkgrpid, long arg_taskmxprintid, decimal arg_tax, string arg_plancode, string arg_jgdscrp);s_buytaskmx s_mx s_mx.iforder = arg_iforder s_mx.orderid = arg_orderid s_mx.ordercode = arg_ordercode s_mx.mtrlid = arg_mtrlid s_mx.uqty = arg_uqty s_mx.enprice = arg_enprice s_mx.rebate = arg_rebate s_mx.planprice = arg_planprice s_mx.dscrp = arg_dscrp s_mx.mtrlcode = arg_mtrlcode s_mx.printid = arg_printid s_mx.Requiredate = arg_requiredate s_mx.storageid = arg_storageid s_mx.status = arg_status s_mx.unit = arg_unit s_mx.rate = arg_rate s_mx.woodcode = arg_woodcode s_mx.pcode = arg_pcode s_mx.requestbuyid = arg_requestbuyid s_mx.rqmxprintid = arg_rqmxprintid s_mx.wrkgrpid = arg_wrkgrpid s_mx.taskmxprintid = arg_taskmxprintid s_mx.tax = arg_tax s_mx.plancode = arg_plancode s_mx.jgdscrp = arg_jgdscrp //s_mx.dscrp2 = arg_dscrp2 return acceptmx(s_mx, arg_msg) // // //Int rslt = 1 //Long cnt = 0,ls_i //Int li_mtrlkind,li_iffp //Int li_iflimitprice //Int li_statusflag,li_outtype,li_ifpackpro //String ls_relrqbuycode //Decimal ld_uprate,ld_upqty //String ls_sptmtrlname //Int li_buydec, li_buy_ceiling, li_buyunit //Int li_flag, li_issuliao // //uo_spt_price uo_sptprice //uo_sptprice = Create uo_spt_price // //uo_spt_price uo_price //uo_price = Create uo_spt_price // //IF uo_option_change_status = '-1000' THEN // rslt = 0 // arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!' // GOTO ext //END IF // //IF uo_option_change_woodcode = '-1000' THEN // rslt = 0 // arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!' // GOTO ext //END IF // //IF uo_option_change_pcode = '-1000' THEN // rslt = 0 // arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!' // GOTO ext //END IF // //IF uo_option_buyprice_buytask_notlimit = -1000 THEN // rslt = 0 // arg_msg = '选项:[079]采购订单不限制价格,读取初始默认值失败,操作取消!' // GOTO ext //END IF // //IF uo_option_update_rqmtrlqty_buy = -1000 THEN // rslt = 0 // arg_msg = '选项:[342]采购订单保存审核检查并更新生产计划采购需求已订货数,读取初始默认值失败,操作取消!' // GOTO ext //END IF // ////IF uo_option_unit_dec = -1000 THEN //// rslt = 0 //// arg_msg = '选项:[023]辅助单位转换库存单位小数位,读取初始默认值失败,操作取消!' //// GOTO ext ////END IF // //IF it_newbegin = False And it_updatebegin = False THEN // rslt = 0 // arg_msg = "非编辑状态不可以使用,操作取消" // GOTO ext //END IF // ////清除空值 //IF IsNull(arg_iforder) THEN arg_iforder = 1 //IF IsNull(arg_orderid) THEN arg_orderid = 0 //IF IsNull(arg_ordercode) THEN arg_ordercode = '' //IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 //IF IsNull(arg_uqty) THEN arg_uqty = 0 //IF IsNull(arg_enprice) THEN arg_enprice = 0 //IF IsNull(arg_rebate) THEN arg_rebate = 1 //IF IsNull(arg_planprice) THEN arg_planprice = 0 //IF IsNull(arg_dscrp) THEN arg_dscrp = '' //IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = '' //IF IsNull(arg_printid) THEN arg_printid = 0 //IF IsNull(arg_storageid) THEN arg_storageid = 0 //IF IsNull(arg_status) THEN arg_status = '' //IF IsNull(arg_woodcode) THEN arg_woodcode = '' //IF IsNull(arg_pcode) THEN arg_pcode = '' //IF IsNull(arg_unit) THEN arg_unit = '' //IF IsNull(arg_rate) THEN arg_rate = 1 //IF arg_rate = 0 THEN arg_rate = 1 //IF IsNull(arg_requestbuyid) THEN arg_requestbuyid = 0 //IF IsNull(arg_rqmxprintid) THEN arg_rqmxprintid = 0 //IF IsNull(arg_wrkgrpid) THEN arg_wrkgrpid = 0 //IF IsNull(arg_taskmxprintid) THEN arg_taskmxprintid = 0 //IF IsNull(arg_tax) THEN arg_tax = 0 //IF IsNull(arg_jgdscrp) THEN arg_jgdscrp = '' // ////if arg_rebate = 0 then arg_rebate = 1 // //IF arg_mtrlid = 0 Or arg_uqty = 0 THEN // 如果进仓数量为 0,或物料编号为空,则不作任何处理 // rslt = 1 // GOTO ext //END IF // // //IF f_check_status(1,arg_status) = 0 THEN // rslt = 0 // arg_msg = "查询操作失败,可能"+uo_option_change_status+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_status // GOTO ext //END IF // //IF f_check_status(2,arg_woodcode) = 0 THEN // rslt = 0 // arg_msg = "查询操作失败,可能"+uo_option_change_woodcode+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_woodcode // GOTO ext //END IF // //IF f_check_status(3,arg_pcode) = 0 THEN // rslt = 0 // arg_msg = "查询操作失败,可能"+uo_option_change_pcode+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_pcode // GOTO ext //END IF // //IF sys_option_nostorageid_buy = 1 THEN // cnt = 0 // SELECT count(*) // INTO :cnt // FROM u_storage // WHERE u_storage.storageid = :arg_storageid // 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 //END IF // //SELECT mtrlkind, // upbuyrate, // upbuyqty, // iffp, // iflimitprice, // statusflag, // outtype, // ifpackpro, // buyunit, // buydec, // buy_ceiling, // flag, // issuliao // INTO :li_mtrlkind, // :ld_uprate, // :ld_upqty, // :li_iffp, // :li_iflimitprice, // :li_statusflag, // :li_outtype, // :li_ifpackpro, // :li_buyunit, // :li_buydec, // :li_buy_ceiling, // :li_flag, // :li_issuliao // FROM u_mtrldef // WHERE u_mtrldef.mtrlid = :arg_mtrlid // Using commit_transaction; //IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "查询物料:"+arg_mtrlcode+',属性失败,'+commit_transaction.SQLErrText // GOTO ext //END IF // ////处理单位转换保留位数 //IF li_buyunit = 0 THEN //不使用默认采购单位, 保留N位小数也使用 // li_buydec = 10 //END IF // //IF sys_option_audit_mtrl <> 0 THEN // IF li_flag <> 2 THEN // rslt = 0 // arg_msg = "系统选项[297]限制,物料:"+arg_mtrlcode+',资料未审核,不能建单' // GOTO ext // END IF //END IF // ////ys特殊用法 //IF li_issuliao = 5 Or li_issuliao = 8 THEN // IF arg_jgdscrp = "" THEN // rslt = 0 // arg_msg = "行:"+String(arg_printid)+",物料:"+arg_mtrlcode+',请选择材质/密度' // GOTO ext // END IF //END IF // //IF arg_rebate <= 0 or arg_rebate > 1 THEN // arg_msg = '行:'+String(arg_printid)+',折扣错误,只能取范围(0, 1]' // rslt = 0 // GOTO ext //END IF // //IF Date(requiredate) > Date(arg_requiredate) THEN // arg_msg = '交货日期不能在订货日期前' // rslt = 0 // GOTO ext //END IF // //Dec ld_uqty,ld_consignedqty, lde_addqty, lde_rate_rq //String ls_unit_rq // //IF arg_iforder = 1 THEN // IF arg_requestbuyid = 0 THEN // arg_msg = '物料:'+arg_mtrlcode+',请选择申购单' // rslt = 0 // GOTO ext // END IF // // // // SELECT u_requestbuy.requestbuycode, u_requestbuymx.uqty,u_requestbuymx.consignedqty,u_requestbuymx.unit,u_requestbuymx.rate // INTO :ls_relrqbuycode, :ld_uqty,:ld_consignedqty, :ls_unit_rq, :lde_rate_rq // FROM u_requestbuy,u_requestbuymx // WHERE u_requestbuy.scid = u_requestbuymx.scid // AND u_requestbuy.requestbuyid = u_requestbuymx.requestbuyid // AND u_requestbuymx.scid = :scid // AND u_requestbuymx.requestbuyid = :arg_requestbuyid // AND u_requestbuymx.printid = :arg_rqmxprintid // Using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // arg_msg = "查询物料:"+arg_mtrlcode+'查询申购单号失败,'+commit_transaction.SQLErrText // rslt = 0 // GOTO ext // END IF // // IF ls_unit_rq = arg_unit THEN //单位相同, 直接去订单数量 // lde_addqty = arg_uqty // ELSE // //单位不同, 先转库存单位, 在转申购单位 // lde_addqty = Round(arg_uqty * arg_rate,li_buydec) // lde_addqty = lde_addqty / lde_rate_rq // END IF // // IF Not f_power_ind(1405,sys_msg_pow) Or sys_power_issuper THEN // IF ld_uqty * (1 + ld_uprate) + ld_upqty < lde_addqty + ld_consignedqty THEN // rslt = 0 // arg_msg = '物料:'+arg_mtrlcode+',申购单位:'+ls_unit_rq+',申购未完成数量:'+String(ld_uqty - ld_consignedqty,'#,##0.00##' )+',允许订货上限为:'+String(ld_uqty * (1 + ld_uprate) + ld_upqty - ld_consignedqty,'#,##0.00##')+',少于本次完成数量:'+String(lde_addqty,'#,##0.00##') // GOTO ext // END IF // ELSE // IF ld_uqty < lde_addqty + ld_consignedqty THEN // rslt = 0 // arg_msg = '物料:'+arg_mtrlcode+',申购单位:'+ls_unit_rq+',申购未完成数量:'+String(ld_uqty - ld_consignedqty,'#,##0.00##' )+',少于本次完成数量:'+String(lde_addqty,'#,##0.00##') // // IF ld_uprate > 0 Or ld_uprate > 0 THEN // arg_msg += '~r~n你没有超申购的权限' // END IF // GOTO ext // END IF // END IF // // IF uo_option_update_rqmtrlqty_buy = 1 THEN // IF arg_orderid > 0 And billtype = 0 THEN // IF li_mtrlkind = 1 THEN // arg_msg = '物料:'+arg_mtrlcode+',mrp属性设为不按计划,所以不能选择计划' // rslt = 0 // GOTO ext // END IF // // Decimal ld_truerqqty // // ld_consignedqty = 0 // // SELECT sum(truerqqty),sum(consignedqty) // INTO :ld_truerqqty,:ld_consignedqty // FROM u_orderrqmtrl // WHERE u_orderrqmtrl.orderid = :arg_orderid // AND u_orderrqmtrl.scid = :scid // AND u_orderrqmtrl.mtrlid = :arg_mtrlid // AND u_orderrqmtrl.status = :arg_status // AND u_orderrqmtrl.woodcode = :arg_woodcode // AND u_orderrqmtrl.pcode = :arg_pcode // AND u_orderrqmtrl.wrkgrpid = :arg_wrkgrpid // and u_orderrqmtrl.plantype = 2 // Using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询生产计划:'+arg_ordercode+',物料:'+arg_mtrlcode+'需求未安排数失败,'+commit_transaction.SQLErrText // GOTO ext // END IF // // //默认库存单位 // lde_addqty = Round(arg_uqty * arg_rate,li_buydec) // // IF Not f_power_ind(1405,sys_msg_pow) Or sys_power_issuper THEN // IF ld_truerqqty * (1 + ld_uprate) + ld_upqty < (lde_addqty + ld_consignedqty) THEN // rslt = 0 // arg_msg = '生产计划:'+arg_ordercode+',物料:'+arg_mtrlcode+'需求未安排数只有:'+String(ld_truerqqty - ld_consignedqty,'#,##0.0####' )+',允许订货上限为:'+String(ld_truerqqty * (1 + ld_uprate) + ld_upqty - ld_consignedqty,'#,##0.00##')+',少于本次完成数量:'+String(lde_addqty,'#,##0.00##') // GOTO ext // END IF // ELSE // IF lde_addqty > ld_truerqqty - ld_consignedqty THEN // arg_msg = '生产计划:'+arg_ordercode+',物料:'+arg_mtrlcode+'需求未安排数只有:'+String(ld_truerqqty - ld_consignedqty,'#,##0.0####') + ',不能安排:'+String(lde_addqty,'#,##0.0####') // // IF ld_uprate > 0 Or ld_uprate > 0 THEN // arg_msg += '~r~n你没有超申购的权限' // END IF // // rslt = 0 // GOTO ext // END IF // END IF // END IF // END IF //END IF // //IF li_statusflag = 2 And Trim(arg_status) = '' THEN // rslt = 0 // arg_msg = '第'+String(arg_printid)+'行,物料:'+arg_mtrlcode+' 属于组合配置类型,但没有输入配置,请检查' // GOTO ext //END IF // //IF uo_sptprice.uof_check_limitprice(0,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,arg_unit,arg_enprice * mrate * arg_rebate,arg_msg) = 0 THEN // rslt = 0 // GOTO ext //END IF // //IF uo_option_buyprice_buytask_notlimit = 0 And li_iflimitprice = 1 THEN // IF uo_sptprice.uof_check_price(0,sptid,arg_mtrlid,arg_mtrlcode,arg_unit,arg_status,arg_woodcode,arg_pcode,'',moneyid,arg_enprice * mrate * arg_rebate,requiredate,arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF //END IF // ////查询合同号 //Long ll_buybargainid, ll_buybargainprintid //String ls_buybargaincode //IF uo_sptprice.uof_getmtrlsptbuybargain(moneyid, sptid, arg_mtrlid,arg_unit,arg_status,arg_woodcode,arg_pcode,arg_jgdscrp,& // ll_buybargainid, ll_buybargainprintid, ls_buybargaincode,arg_msg) = 0 THEN // rslt = 0 // GOTO ext //END IF // ////查询最后一次收货价 //String ls_lastcode //DateTime ldt_lastdate //Decimal lde_lastprice // //SELECT top 1 u_inware.inwarecode,u_inware.indate, // u_inwaremx.uprice INTO // :ls_lastcode,:ldt_lastdate,:lde_lastprice // FROM u_inware INNER JOIN // u_inwareMx ON u_inware.inwareid = u_inwareMx.inwareid // WHERE u_inware.flag = 1 AND // u_inware.thflag = 0 AND // u_inwareMx.mtrlid = :arg_mtrlid AND // u_inwareMx.unit = :arg_unit AND // u_inwareMx.status = :arg_status AND // u_inwareMx.woodcode = :arg_woodcode AND // u_inwareMx.pcode = :arg_pcode AND // u_inware.sptid = :sptid // Order By u_inware.auditingdate Desc; // //IF sqlca.SQLCode <> 0 THEN // lde_lastprice = 0 // ls_lastcode = '' // SetNull(ldt_lastdate) //END IF // //IF IsNull(lde_lastprice) THEN lde_lastprice = 0 //IF IsNull(ls_lastcode) THEN ls_lastcode = '' ////IF IsNull(ldt_lastdate) THEN SetNull(ldt_lastdate) // //// //IF Round(arg_uqty * arg_rate,li_buydec) = 0 THEN // rslt = 0 // arg_msg = '第'+String(arg_printid)+'行,转换成库存数量后数量为0,请检查~r~n' // arg_msg += "采购数量:"+String(arg_uqty, '#,##0.#########')+",转换率:"+String(arg_rate, '#,##0.#########')+",保留小数位数:"+String(li_buydec, '##0') // GOTO ext //END IF // //FOR ls_i = 1 To it_mxbt //合并重复项 // IF buytaskmx[ls_i].mtrlid = arg_mtrlid And & // buytaskmx[ls_i].orderid = arg_orderid And & // Date(buytaskmx[ls_i].requiredate) = Date(arg_requiredate) And & // buytaskmx[ls_i].status = arg_status And & // buytaskmx[ls_i].woodcode = arg_woodcode And & // buytaskmx[ls_i].pcode = arg_pcode And & // buytaskmx[ls_i].wrkgrpid = arg_wrkgrpid And & // buytaskmx[ls_i].unit = arg_unit And & // buytaskmx[ls_i].taskmxprintid = arg_taskmxprintid And & // buytaskmx[ls_i].requestbuyid = arg_requestbuyid And & // buytaskmx[ls_i].rqmxprintid = arg_rqmxprintid And & // buytaskmx[ls_i].plancode = arg_plancode THEN // // buytaskmx[ls_i].uqty = buytaskmx[ls_i].uqty+arg_uqty // buytaskmx[ls_i].qty = buytaskmx[ls_i].qty+Round(arg_uqty * arg_rate,li_buydec) // rslt = 1 // GOTO ext // END IF //NEXT // // ////写入内容 //it_mxbt++ //buytaskmx[it_mxbt].iforder = arg_iforder //buytaskmx[it_mxbt].orderid = arg_orderid //buytaskmx[it_mxbt].ordercode = arg_ordercode //buytaskmx[it_mxbt].mtrlid = arg_mtrlid //buytaskmx[it_mxbt].uqty = arg_uqty //buytaskmx[it_mxbt].qty = Round(arg_uqty * arg_rate,li_buydec) //buytaskmx[it_mxbt].plprice = arg_planprice //buytaskmx[it_mxbt].dscrp = arg_dscrp //buytaskmx[it_mxbt].mtrlcode = arg_mtrlcode //buytaskmx[it_mxbt].printid = arg_printid //buytaskmx[it_mxbt].unit = arg_unit //buytaskmx[it_mxbt].rate = arg_rate //buytaskmx[it_mxbt].rebate = arg_rebate //buytaskmx[it_mxbt].enprice = arg_enprice //单价-外币-采购单位 //buytaskmx[it_mxbt].uprice = arg_enprice * mrate //单价-本位币-采购单位 //buytaskmx[it_mxbt].fprice = Round((arg_enprice * arg_uqty * mrate)/(Round(arg_uqty * arg_rate,li_buydec)),10) //单价-本位币-库存单位 //buytaskmx[it_mxbt].acprice = buytaskmx[it_mxbt].fprice * arg_rebate //折后单价-本位币-库存单位 //buytaskmx[it_mxbt].requiredate = arg_requiredate //buytaskmx[it_mxbt].status = arg_status //buytaskmx[it_mxbt].woodcode = arg_woodcode //buytaskmx[it_mxbt].pcode = arg_pcode //buytaskmx[it_mxbt].storageid = arg_storageid //buytaskmx[it_mxbt].tax = arg_tax //billamt = billamt + Round(arg_enprice * arg_uqty * arg_rebate,2) // //buytaskmx[it_mxbt].requestbuyid = arg_requestbuyid //buytaskmx[it_mxbt].rqmxprintid = arg_rqmxprintid //buytaskmx[it_mxbt].relrqbuycode = ls_relrqbuycode //buytaskmx[it_mxbt].wrkgrpid = arg_wrkgrpid //buytaskmx[it_mxbt].taskmxprintid = arg_taskmxprintid // //IF uo_price.uof_getmtrlname(sptid,arg_mtrlid,ls_sptmtrlname,arg_msg) = 0 THEN // rslt = 0 // GOTO ext //END IF // //buytaskmx[it_mxbt].sptmtrlname = ls_sptmtrlname //buytaskmx[it_mxbt].iffp = li_iffp //buytaskmx[it_mxbt].outtype = li_outtype //buytaskmx[it_mxbt].ifpackpro = li_ifpackpro // //buytaskmx[it_mxbt].plancode = arg_plancode // //buytaskmx[it_mxbt].buybargainid = ll_buybargainid //buytaskmx[it_mxbt].buybargainprintid = ll_buybargainprintid //buytaskmx[it_mxbt].buybargaincode = ls_buybargaincode // //buytaskmx[it_mxbt].jgdscrp = arg_jgdscrp // //buytaskmx[it_mxbt].lastcode = ls_lastcode //buytaskmx[it_mxbt].lastdate = ldt_lastdate //buytaskmx[it_mxbt].lastprice = lde_lastprice // //ext: //IF rslt = 0 THEN p_clearmx() // //Destroy uo_sptprice //Destroy uo_price // //Return(rslt) // // // // // // end function public function integer stopbuytask (long arg_scid, long arg_taskid, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0, i IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误采购订单唯一码' GOTO ext END IF IF getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF Status <> 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_buyTask SET Status = 3, accomplishdate = getdate(), stopemp = :publ_operator, stopreason = :arg_stopreason Where TaskID = :arg_taskid And scid = :arg_scid 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 //更新明细完成状态 FOR i = 1 To it_mxbt IF finishmx(arg_scid, arg_taskid, buytaskmx[i].printid, ARG_MSG, False) = 0 THEN rslt = 0 GOTO ext END IF NEXT it_newbegin = False it_updatebegin = False ext: IF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF p_reset() Return (rslt) end function public function integer mod_price (long arg_scid, long arg_taskid, long arg_printid, decimal arg_enprice, decimal arg_rebate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status = 0 THEN rslt = 0 arg_msg = '采购订单待审核状态下不能执行修改单价功能' GOTO ext END IF Decimal ld_enprice,ld_uprice,ld_uqty,ld_rate,ld_qty,ld_rebate, ld_fprice, ld_price Long ll_mtrlid String ls_status,ls_woodcode,ls_pcode,ls_plancode int li_buydec, li_buy_ceiling SELECT u_buytaskmx.enprice, u_buytaskmx.uprice, u_buytaskmx.fprice, u_buytaskmx.price, u_buytaskmx.uqty, u_buytaskmx.rate, u_buytaskmx.qty, u_buytaskmx.rebate, u_buytaskmx.mtrlid, u_buytaskmx.status, u_buytaskmx.woodcode, u_buytaskmx.pcode, u_mtrldef.buydec, u_mtrldef.buy_ceiling INTO :ld_enprice, :ld_uprice, :ld_fprice, :ld_price, :ld_uqty, :ld_rate, :ld_qty, :ld_rebate, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :li_buydec, :li_buy_ceiling FROM u_buytaskmx inner join u_mtrldef on u_buytaskmx.mtrlid = u_mtrldef.mtrlid WHERE u_buytaskmx.scid = :arg_scid AND u_buytaskmx.taskid = :arg_taskid AND u_buytaskmx.printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询采购订单明细内容失败'+commit_transaction.SQLErrText GOTO ext END IF if arg_rebate = -1 then arg_rebate = ld_rebate IF arg_enprice = ld_enprice and arg_rebate = ld_rebate THEN rslt = 0 arg_msg = '单价和折扣没有任何修改,不能保存' GOTO ext END IF Decimal ld_enprice_new, ld_uprice_new,ld_fprice_new,ld_price_new, lde_billamt ld_enprice_new = arg_enprice ld_uprice_new = Round(arg_enprice * mrate,10) ld_fprice_new = Round((ld_uprice_new * ld_uqty)/(Round(ld_uqty * ld_rate,li_buydec)),10) ld_price_new = ld_fprice_new * arg_rebate UPDATE u_buytaskmx SET enprice = :arg_enprice, uprice = :ld_uprice_new, fprice = :ld_fprice_new, price = :ld_price_new, rebate = :arg_rebate WHERE scid = :arg_scid AND 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 INSERT INTO u_buytaskmx_modprice (scid, taskid, printid, enprice_old, uprice_old, fprice_old, price_old, enprice_new, uprice_new, fprice_new, price_new, mxdscrp, opdate, opemp,rebate_old, rebate_new) VALUES (:arg_scid, :arg_taskid,:arg_printid, :ld_enprice, :ld_uprice, :ld_fprice, :ld_price, :ld_enprice_new,:ld_uprice_new, :ld_fprice_new, :ld_price_new, '', getdate(), :publ_operator,:ld_rebate,:arg_rebate)Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入修改历史失败'+commit_transaction.SQLErrText GOTO ext END IF SELECT sum(round(enprice * uqty * rebate, 2)) INTO :lde_billamt FROM u_buytaskmx WHERE scid = :arg_scid And taskid = :arg_taskid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询单据金额失败'+commit_transaction.SQLErrText GOTO ext END IF UPDATE u_buytask SET billamt = :lde_billamt WHERE scid = :arg_scid And taskid = :arg_taskid 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 uof_update_requiredate_chk (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg);Int rslt = 1 Int li_ifmod Int cnt //按计划的,已超期的,不能修改 Long ll_daynum string ls_ordercodestr SELECT CASE when u_buytaskmx.finishflag = 1 THEN DATEDIFF(dd, u_buytaskmx.finishdate, u_buytaskmx.requiredate) when u_buyTask.Status In ( 0 ,1,2,4) THEN DATEDIFF(dd, GETDATE(), u_buytaskmx.requiredate) ELSE DATEDIFF(dd, u_buyTask.accomplishdate, u_buytaskmx.requiredate) END as daynum, isnull(u_requestbuymx.ordercodestr,'') as ordercodestr Into :ll_daynum, :ls_ordercodestr From u_buyTask Inner join u_buytaskmx On u_buyTask.scid = u_buytaskmx.scid And u_buyTask.taskid = u_buytaskmx.taskid LEFT OUTER JOIN u_requestbuymx ON u_buyTaskMx.scid = u_requestbuymx.scid AND u_buyTaskMx.requestbuyid = u_requestbuymx.requestbuyid AND u_buyTaskMx.rqmxprintid = u_requestbuymx.printid Where u_buytaskmx.taskid = :arg_taskid And u_buytaskmx.printid = :arg_printid And u_buytaskmx.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询采购订单信息失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_daynum < 0 and ls_ordercodestr <> '' THEN rslt = 0 arg_msg = '按主生产计划的采购订单,明细已经超期,不能修改' GOTO ext END IF ext: RETURN rslt end function public function integer uof_update_billamt (long arg_scid, long arg_taskid, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 decimal lde_billamt Int cnt SELECT sum(round(enprice * uqty * rebate, 2)) INTO :lde_billamt FROM u_buytaskmx WHERE scid = :arg_scid And taskid = :arg_taskid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询单据金额失败'+commit_transaction.SQLErrText GOTO ext END IF UPDATE u_buytask SET billamt = :lde_billamt WHERE scid = :arg_scid And taskid = :arg_taskid 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; else commit using commit_transaction; end if RETURN rslt end function public function integer addmxcmpl (long arg_scid, long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 Decimal lde_qty_tol, lde_addqty_order IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_ifovertask = -1000 THEN rslt = 0 arg_msg = '选项:[010]超采购,外协订单收货,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_requestbuy_hz = -1000 THEN rslt = 0 arg_msg = '选项:[111]申购单汇总采购,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_update_rqmtrlqty_buy = -1000 THEN rslt = 0 arg_msg = '选项:[342]采购订单保存审核检查并更新生产计划采购需求已订货数,读取初始默认值失败,操作取消!' GOTO ext END IF //yyx 100306 Long ll_ti,ll_rcnt datastore ds_tmp_update ds_tmp_update = Create datastore ds_tmp_update.DataObject = 'ds_buytask_update_order' ds_tmp_update.SetTransObject(sqlca) //yyx 100306 datastore ds ds = Create datastore ds.DataObject = 'ds_orderrqmtrl_request_buytask' ds.SetTransObject(sqlca) 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_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 And status <> 5 THEN rslt = 0 IF status <> 1 THEN arg_msg = "采购订单只有在进行状态下才可以执行进仓" ELSEIF status <> 5 THEN arg_msg = "采购订单只有在完成状态下才可以撤消进仓" END IF GOTO ext END IF Decimal ls_buyqty,ls_consignedqty,ld_sum_consignedqty String ls_mtrlcode Long ll_orderid,ll_wrkGrpid,ll_mtrlid,ll_requestbuyid String ls_status,ls_woodcode,ls_pcode Decimal ld_uprate,ld_upqty,ld_stopqty, lde_rate SELECT u_mtrldef.mtrlcode, u_buytaskmx.orderid, u_buytaskmx.wrkGrpid, u_buytaskmx.mtrlid, u_buytaskmx.status, u_buytaskmx.woodcode, u_buytaskmx.pcode, u_buytaskmx.requestbuyid, u_buytaskmx.uqty, u_buytaskmx.consignedqty, u_buytaskmx.stopqty, u_buytaskmx.rate INTO :ls_mtrlcode, :ll_orderid, :ll_wrkGrpid, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ll_requestbuyid, :ls_buyqty, :ls_consignedqty, :ld_stopqty, :lde_rate FROM u_mtrldef,u_buytaskmx WHERE u_mtrldef.mtrlid = u_buytaskmx.mtrlid AND u_buytaskmx.scid = :arg_scid AND u_buytaskmx.taskid = :arg_taskid AND u_buytaskmx.printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询明细物料编码失败,'+commit_transaction.SQLErrText GOTO ext END IF IF uo_option_ifovertask = 1 THEN //不允许超收 IF ls_buyqty < ls_consignedqty + arg_addqty + ld_stopqty THEN rslt = 0 arg_msg = "物料:"+ls_mtrlcode+"未完成数量只有"+String(ls_buyqty - ls_consignedqty - ld_stopqty,'#,##0.0#########')+",不能入库"+String(arg_addqty,'#,##0.0#########') GOTO ext END IF ELSEIF uo_option_ifovertask = 3 THEN //允许超收但按比例限制 SELECT uprate , upqty 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 ls_buyqty * (1 + ld_uprate) + ld_upqty < ls_consignedqty + arg_addqty + ld_stopqty THEN rslt = 0 arg_msg = "物料:"+ls_mtrlcode+"未完成数量只有"+String(ls_buyqty - ls_consignedqty - ld_stopqty, '#,##0.0#########')+"允许超收上限:"+String(ls_buyqty * (1 + ld_uprate) + ld_upqty - ls_consignedqty - ld_stopqty,'#,##0.0#########')+",不能入库"+String(arg_addqty,'#,##0.0#########') GOTO ext END IF END IF IF arg_addqty < 0 And arg_addqty + ls_consignedqty < 0 THEN rslt = 0 arg_msg = "物料:"+ls_mtrlcode+"已完成数量只有"+String(ls_consignedqty, '#,##0.0###')+",不能退货"+String(arg_addqty,'#,##0.0#########') GOTO ext END IF UPDATE u_buytaskmx SET consignedqty = consignedqty + :arg_addqty WHERE ( u_buytaskmx.taskid = :arg_taskid ) AND ( u_buytaskmx.printid = :arg_printid ) AND ( u_buytaskmx.scid = :arg_scid) AND ( u_buytaskmx.stopflag = 0 ) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品唯一码导致采购订单完成数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //更新订单完成状态 IF trycmplbuytask(arg_scid, arg_taskid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //更新明细完成状态 IF finishmx(arg_scid, arg_taskid, arg_printid, arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF uo_order_ml uo_order uo_order = Create uo_order_ml IF billtype = 0 THEN IF uo_option_update_rqmtrlqty_buy = 1 THEN ll_rcnt = ds.Retrieve(scid,ll_requestbuyid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode, ll_orderid) lde_qty_tol = Abs(arg_addqty * lde_rate) //- buytaskmx[ll_i].rebuyqty * buytaskmx[ll_i].rate FOR ll_ti = 1 To ll_rcnt IF arg_addqty > 0 THEN //增加收货 IF ds.Object.u_orderrqmtrl_truerqqty[ll_ti] <= ds.Object.u_orderrqmtrl_inqty[ll_ti] THEN CONTINUE IF lde_qty_tol > ds.Object.u_orderrqmtrl_truerqqty[ll_ti] - ds.Object.u_orderrqmtrl_inqty[ll_ti] THEN lde_addqty_order = ds.Object.u_orderrqmtrl_truerqqty[ll_ti] - ds.Object.u_orderrqmtrl_inqty[ll_ti] lde_qty_tol -= lde_addqty_order ELSE lde_addqty_order = lde_qty_tol lde_qty_tol = 0 END IF lde_addqty_order = lde_addqty_order ELSE //减少收货 IF ds.Object.u_orderrqmtrl_inqty[ll_ti] <= 0 THEN CONTINUE IF lde_qty_tol > ds.Object.u_orderrqmtrl_inqty[ll_ti] THEN lde_addqty_order = ds.Object.u_orderrqmtrl_inqty[ll_ti] lde_qty_tol -= lde_addqty_order ELSE lde_addqty_order = lde_qty_tol lde_qty_tol = 0 END IF lde_addqty_order = 0 - lde_addqty_order END IF IF uo_order.f_assign_inqty(ds.Object.u_orderrqmtrl_scid[ll_ti],ds.Object.u_orderrqmtrl_orderid[ll_ti],& ds.Object.u_orderrqmtrl_wrkGrpid[ll_ti],2,& ll_mtrlid,ls_mtrlcode,ls_status,& ls_woodcode,ls_pcode,lde_addqty_order,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF lde_qty_tol = 0 THEN EXIT NEXT END IF END IF //IF uo_option_update_rqmtrlqty_buy = 1 THEN // IF billtype = 0 THEN // IF ll_orderid > 0 THEN // Long ll_cnt_order // SELECT count(*) INTO :ll_cnt_order // FROM u_order_ml // WHERE scid = :scid // AND orderid = :ll_orderid // Using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // arg_msg = '查询相关订单明细:'+String(arg_printid)+',相关生产计划失败' // rslt = 0 // GOTO ext // END IF // // IF ll_cnt_order > 0 THEN // IF uo_order.f_assign_inqty(scid,ll_orderid,ll_wrkGrpid,2,& // ll_mtrlid,ls_mtrlcode,ls_status,& // ls_woodcode,ls_pcode,arg_addqty,arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext // END IF // // arg_msg = uo_order.arg_msg_str // // END IF // ELSE // //yyx 100305 // // IF ll_requestbuyid > 0 And uo_option_requestbuy_hz = 1 THEN // ll_rcnt = ds_tmp_update.Retrieve(scid,ll_requestbuyid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode) // // FOR ll_ti = 1 To ll_rcnt // IF uo_order.f_assign_inqty(ds_tmp_update.Object.scid[ll_ti],ds_tmp_update.Object.orderid[ll_ti],& // ds_tmp_update.Object.wrkGrpid[ll_ti],2,& // ll_mtrlid,ls_mtrlcode,ls_status,& // ls_woodcode,ls_pcode,arg_addqty,arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext // END IF // NEXT // // arg_msg = uo_order.arg_msg_str // END IF // // // END IF // END IF //END IF it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy uo_order Destroy ds_tmp_update Destroy ds p_reset() Return (rslt) end function public function integer acceptmx (s_buytaskmx s_mx, ref string arg_msg);Int rslt = 1 Long cnt = 0,ls_i Int li_mtrlkind,li_iffp Int li_iflimitprice Int li_statusflag,li_outtype,li_ifpackpro String ls_relrqbuycode Decimal ld_uprate,ld_upqty String ls_sptmtrlname Int li_buydec, li_buy_ceiling, li_buyunit Int li_flag, li_issuliao uo_spt_price uo_sptprice uo_sptprice = Create uo_spt_price uo_spt_price uo_price uo_price = Create uo_spt_price IF uo_option_change_status = '-1000' THEN rslt = 0 arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_change_woodcode = '-1000' THEN rslt = 0 arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_change_pcode = '-1000' THEN rslt = 0 arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_buyprice_buytask_notlimit = -1000 THEN rslt = 0 arg_msg = '选项:[079]采购订单不限制价格,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_update_rqmtrlqty_buy = -1000 THEN rslt = 0 arg_msg = '选项:[342]采购订单保存审核检查并更新生产计划采购需求已订货数,读取初始默认值失败,操作取消!' GOTO ext END IF //IF uo_option_unit_dec = -1000 THEN // rslt = 0 // arg_msg = '选项:[023]辅助单位转换库存单位小数位,读取初始默认值失败,操作取消!' // GOTO ext //END IF IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF //清除空值 IF IsNull(s_mx.iforder) THEN s_mx.iforder = 1 IF IsNull(s_mx.orderid) THEN s_mx.orderid = 0 IF IsNull(s_mx.ordercode) THEN s_mx.ordercode = '' IF IsNull(s_mx.mtrlid) THEN s_mx.mtrlid = 0 IF IsNull(s_mx.uqty) THEN s_mx.uqty = 0 IF IsNull(s_mx.enprice) THEN s_mx.enprice = 0 IF IsNull(s_mx.rebate) THEN s_mx.rebate = 1 IF IsNull(s_mx.planprice) THEN s_mx.planprice = 0 IF IsNull(s_mx.dscrp) THEN s_mx.dscrp = '' IF IsNull(s_mx.dscrp2) THEN s_mx.dscrp2 = '' IF IsNull(s_mx.mtrlcode) THEN s_mx.mtrlcode = '' IF IsNull(s_mx.printid) THEN s_mx.printid = 0 IF IsNull(s_mx.storageid) THEN s_mx.storageid = 0 IF IsNull(s_mx.status) THEN s_mx.status = '' IF IsNull(s_mx.woodcode) THEN s_mx.woodcode = '' IF IsNull(s_mx.pcode) THEN s_mx.pcode = '' IF IsNull(s_mx.unit) THEN s_mx.unit = '' IF IsNull(s_mx.rate) THEN s_mx.rate = 1 IF s_mx.rate = 0 THEN s_mx.rate = 1 IF IsNull(s_mx.requestbuyid) THEN s_mx.requestbuyid = 0 IF IsNull(s_mx.rqmxprintid) THEN s_mx.rqmxprintid = 0 IF IsNull(s_mx.wrkgrpid) THEN s_mx.wrkgrpid = 0 IF IsNull(s_mx.taskmxprintid) THEN s_mx.taskmxprintid = 0 IF IsNull(s_mx.tax) THEN s_mx.tax = 0 IF IsNull(s_mx.jgdscrp) THEN s_mx.jgdscrp = '' //if s_mx.rebate = 0 then s_mx.rebate = 1 IF s_mx.mtrlid = 0 Or s_mx.uqty = 0 THEN // 如果进仓数量为 0,或物料编号为空,则不作任何处理 rslt = 1 GOTO ext END IF IF f_check_status(1,s_mx.status) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能"+uo_option_change_status+"未定义,物料:"+s_mx.mtrlcode+",内容:"+s_mx.status GOTO ext END IF IF f_check_status(2,s_mx.woodcode) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能"+uo_option_change_woodcode+"未定义,物料:"+s_mx.mtrlcode+",内容:"+s_mx.woodcode GOTO ext END IF IF f_check_status(3,s_mx.pcode) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能"+uo_option_change_pcode+"未定义,物料:"+s_mx.mtrlcode+",内容:"+s_mx.pcode GOTO ext END IF IF sys_option_nostorageid_buy = 1 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_storage WHERE u_storage.storageid = :s_mx.storageid 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 END IF SELECT mtrlkind, upbuyrate, upbuyqty, iffp, iflimitprice, statusflag, outtype, ifpackpro, buyunit, buydec, buy_ceiling, flag, issuliao INTO :li_mtrlkind, :ld_uprate, :ld_upqty, :li_iffp, :li_iflimitprice, :li_statusflag, :li_outtype, :li_ifpackpro, :li_buyunit, :li_buydec, :li_buy_ceiling, :li_flag, :li_issuliao FROM u_mtrldef WHERE u_mtrldef.mtrlid = :s_mx.mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询物料:"+s_mx.mtrlcode+',属性失败,'+commit_transaction.SQLErrText GOTO ext END IF //处理单位转换保留位数 IF li_buyunit = 0 THEN //不使用默认采购单位, 保留N位小数也使用 li_buydec = 10 END IF IF sys_option_audit_mtrl <> 0 THEN IF li_flag <> 2 THEN rslt = 0 arg_msg = "系统选项[297]限制,物料:"+s_mx.mtrlcode+',资料未审核,不能建单' GOTO ext END IF END IF //ys特殊用法 IF li_issuliao = 5 Or li_issuliao = 8 THEN IF s_mx.jgdscrp = "" THEN rslt = 0 arg_msg = "行:"+String(s_mx.printid)+",物料:"+s_mx.mtrlcode+',请选择材质/密度' GOTO ext END IF END IF IF s_mx.rebate <= 0 or s_mx.rebate > 1 THEN arg_msg = '行:'+String(s_mx.printid)+',折扣错误,只能取范围(0, 1]' rslt = 0 GOTO ext END IF IF Date(requiredate) > Date(s_mx.requiredate) THEN arg_msg = '交货日期不能在订货日期前' rslt = 0 GOTO ext END IF Dec ld_uqty,ld_consignedqty, lde_addqty, lde_rate_rq String ls_unit_rq IF s_mx.iforder = 1 THEN IF s_mx.requestbuyid = 0 THEN arg_msg = '物料:'+s_mx.mtrlcode+',请选择申购单' rslt = 0 GOTO ext END IF SELECT u_requestbuy.requestbuycode, u_requestbuymx.uqty,u_requestbuymx.consignedqty,u_requestbuymx.unit,u_requestbuymx.rate INTO :ls_relrqbuycode, :ld_uqty,:ld_consignedqty, :ls_unit_rq, :lde_rate_rq FROM u_requestbuy,u_requestbuymx WHERE u_requestbuy.scid = u_requestbuymx.scid AND u_requestbuy.requestbuyid = u_requestbuymx.requestbuyid AND u_requestbuymx.scid = :scid AND u_requestbuymx.requestbuyid = :s_mx.requestbuyid AND u_requestbuymx.printid = :s_mx.rqmxprintid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "查询物料:"+s_mx.mtrlcode+'查询申购单号失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF ls_unit_rq = s_mx.unit THEN //单位相同, 直接去订单数量 lde_addqty = s_mx.uqty ELSE //单位不同, 先转库存单位, 在转申购单位 lde_addqty = Round(s_mx.uqty * s_mx.rate,li_buydec) lde_addqty = Truncate(lde_addqty / lde_rate_rq,li_buydec) END IF IF Not f_power_ind(1405,sys_msg_pow) Or sys_power_issuper THEN IF ld_uqty * (1 + ld_uprate) + ld_upqty < lde_addqty + ld_consignedqty THEN rslt = 0 arg_msg = '物料:'+s_mx.mtrlcode+',申购单位:'+ls_unit_rq+',申购未完成数量:'+String(ld_uqty - ld_consignedqty,'#,##0.00######' )+',允许订货上限为:'+String(ld_uqty * (1 + ld_uprate) + ld_upqty - ld_consignedqty,'#,##0.00######')+',少于本次完成数量:'+String(lde_addqty,'#,##0.00######') GOTO ext END IF ELSE IF ld_uqty < lde_addqty + ld_consignedqty THEN rslt = 0 arg_msg = '物料:'+s_mx.mtrlcode+',申购单位:'+ls_unit_rq+',申购未完成数量:'+String(ld_uqty - ld_consignedqty,'#,##0.00######' )+',少于本次完成数量:'+String(lde_addqty,'#,##0.00######') IF ld_uprate > 0 Or ld_uprate > 0 THEN arg_msg += '~r~n你没有超申购的权限' END IF GOTO ext END IF END IF IF uo_option_update_rqmtrlqty_buy = 1 THEN IF s_mx.orderid > 0 And billtype = 0 THEN IF li_mtrlkind = 1 THEN arg_msg = '物料:'+s_mx.mtrlcode+',mrp属性设为不按计划,所以不能选择计划' rslt = 0 GOTO ext END IF Decimal ld_truerqqty ld_consignedqty = 0 SELECT sum(truerqqty),sum(consignedqty) INTO :ld_truerqqty,:ld_consignedqty FROM u_orderrqmtrl WHERE u_orderrqmtrl.orderid = :s_mx.orderid AND u_orderrqmtrl.scid = :scid AND u_orderrqmtrl.mtrlid = :s_mx.mtrlid AND u_orderrqmtrl.status = :s_mx.status AND u_orderrqmtrl.woodcode = :s_mx.woodcode AND u_orderrqmtrl.pcode = :s_mx.pcode AND u_orderrqmtrl.wrkgrpid = :s_mx.wrkgrpid and u_orderrqmtrl.plantype = 2 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产计划:'+s_mx.ordercode+',物料:'+s_mx.mtrlcode+'需求未安排数失败,'+commit_transaction.SQLErrText GOTO ext END IF //默认库存单位 lde_addqty = Round(s_mx.uqty * s_mx.rate,li_buydec) IF Not f_power_ind(1405,sys_msg_pow) Or sys_power_issuper THEN IF ld_truerqqty * (1 + ld_uprate) + ld_upqty < (lde_addqty + ld_consignedqty) THEN rslt = 0 arg_msg = '生产计划:'+s_mx.ordercode+',物料:'+s_mx.mtrlcode+'需求未安排数只有:'+String(ld_truerqqty - ld_consignedqty,'#,##0.0####' )+',允许订货上限为:'+String(ld_truerqqty * (1 + ld_uprate) + ld_upqty - ld_consignedqty,'#,##0.00##')+',少于本次完成数量:'+String(lde_addqty,'#,##0.00##') GOTO ext END IF ELSE IF lde_addqty > ld_truerqqty - ld_consignedqty THEN arg_msg = '生产计划:'+s_mx.ordercode+',物料:'+s_mx.mtrlcode+'需求未安排数只有:'+String(ld_truerqqty - ld_consignedqty,'#,##0.0####') + ',不能安排:'+String(lde_addqty,'#,##0.0####') IF ld_uprate > 0 Or ld_uprate > 0 THEN arg_msg += '~r~n你没有超申购的权限' END IF rslt = 0 GOTO ext END IF END IF END IF END IF END IF IF li_statusflag = 2 And Trim(s_mx.status) = '' THEN rslt = 0 arg_msg = '第'+String(s_mx.printid)+'行,物料:'+s_mx.mtrlcode+' 属于组合配置类型,但没有输入配置,请检查' GOTO ext END IF IF uo_sptprice.uof_check_limitprice(0,s_mx.mtrlid,s_mx.status,s_mx.woodcode,s_mx.pcode,s_mx.unit,s_mx.enprice * mrate * s_mx.rebate,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_buyprice_buytask_notlimit = 0 And li_iflimitprice = 1 THEN IF uo_sptprice.uof_check_price(0,sptid,s_mx.mtrlid,s_mx.mtrlcode,s_mx.unit,s_mx.status,s_mx.woodcode,s_mx.pcode,'',moneyid,s_mx.enprice * mrate * s_mx.rebate,requiredate,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF //查询合同号 Long ll_buybargainid, ll_buybargainprintid String ls_buybargaincode IF uo_sptprice.uof_getmtrlsptbuybargain(moneyid, sptid, s_mx.mtrlid,s_mx.unit,s_mx.status,s_mx.woodcode,s_mx.pcode,s_mx.jgdscrp,& ll_buybargainid, ll_buybargainprintid, ls_buybargaincode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //查询最后一次收货价 String ls_lastcode DateTime ldt_lastdate Decimal lde_lastprice SELECT top 1 u_inware.inwarecode,u_inware.indate, u_inwaremx.uprice INTO :ls_lastcode,:ldt_lastdate,:lde_lastprice FROM u_inware INNER JOIN u_inwareMx ON u_inware.inwareid = u_inwareMx.inwareid WHERE u_inware.flag = 1 AND u_inware.thflag = 0 AND u_inwareMx.mtrlid = :s_mx.mtrlid AND u_inwareMx.unit = :s_mx.unit AND u_inwareMx.status = :s_mx.status AND u_inwareMx.woodcode = :s_mx.woodcode AND u_inwareMx.pcode = :s_mx.pcode AND u_inware.sptid = :sptid Order By u_inware.auditingdate Desc; IF sqlca.SQLCode <> 0 THEN lde_lastprice = 0 ls_lastcode = '' SetNull(ldt_lastdate) END IF IF IsNull(lde_lastprice) THEN lde_lastprice = 0 IF IsNull(ls_lastcode) THEN ls_lastcode = '' //IF IsNull(ldt_lastdate) THEN SetNull(ldt_lastdate) // IF Round(s_mx.uqty * s_mx.rate,li_buydec) = 0 THEN rslt = 0 arg_msg = '第'+String(s_mx.printid)+'行,转换成库存数量后数量为0,请检查~r~n' arg_msg += "采购数量:"+String(s_mx.uqty, '#,##0.#########')+",转换率:"+String(s_mx.rate, '#,##0.#########')+",保留小数位数:"+String(li_buydec, '##0') GOTO ext END IF FOR ls_i = 1 To it_mxbt //合并重复项 IF buytaskmx[ls_i].mtrlid = s_mx.mtrlid And & buytaskmx[ls_i].orderid = s_mx.orderid And & Date(buytaskmx[ls_i].requiredate) = Date(s_mx.requiredate) And & buytaskmx[ls_i].status = s_mx.status And & buytaskmx[ls_i].woodcode = s_mx.woodcode And & buytaskmx[ls_i].pcode = s_mx.pcode And & buytaskmx[ls_i].wrkgrpid = s_mx.wrkgrpid And & buytaskmx[ls_i].unit = s_mx.unit And & buytaskmx[ls_i].taskmxprintid = s_mx.taskmxprintid And & buytaskmx[ls_i].requestbuyid = s_mx.requestbuyid And & buytaskmx[ls_i].rqmxprintid = s_mx.rqmxprintid And & buytaskmx[ls_i].plancode = s_mx.plancode THEN buytaskmx[ls_i].uqty = buytaskmx[ls_i].uqty+s_mx.uqty buytaskmx[ls_i].qty = buytaskmx[ls_i].qty+Round(s_mx.uqty * s_mx.rate,li_buydec) rslt = 1 GOTO ext END IF NEXT //写入内容 it_mxbt++ buytaskmx[it_mxbt].iforder = s_mx.iforder buytaskmx[it_mxbt].orderid = s_mx.orderid buytaskmx[it_mxbt].ordercode = s_mx.ordercode buytaskmx[it_mxbt].mtrlid = s_mx.mtrlid buytaskmx[it_mxbt].uqty = s_mx.uqty buytaskmx[it_mxbt].qty = Round(s_mx.uqty * s_mx.rate,li_buydec) buytaskmx[it_mxbt].plprice = s_mx.planprice buytaskmx[it_mxbt].dscrp = s_mx.dscrp buytaskmx[it_mxbt].dscrp2 = s_mx.dscrp2 buytaskmx[it_mxbt].mtrlcode = s_mx.mtrlcode buytaskmx[it_mxbt].printid = s_mx.printid buytaskmx[it_mxbt].unit = s_mx.unit buytaskmx[it_mxbt].rate = s_mx.rate buytaskmx[it_mxbt].rebate = s_mx.rebate buytaskmx[it_mxbt].enprice = s_mx.enprice //单价-外币-采购单位 buytaskmx[it_mxbt].uprice = s_mx.enprice * mrate //单价-本位币-采购单位 buytaskmx[it_mxbt].fprice = Round((s_mx.enprice * s_mx.uqty * mrate)/(Round(s_mx.uqty * s_mx.rate,li_buydec)),10) //单价-本位币-库存单位 buytaskmx[it_mxbt].acprice = buytaskmx[it_mxbt].fprice * s_mx.rebate //折后单价-本位币-库存单位 buytaskmx[it_mxbt].requiredate = s_mx.requiredate buytaskmx[it_mxbt].status = s_mx.status buytaskmx[it_mxbt].woodcode = s_mx.woodcode buytaskmx[it_mxbt].pcode = s_mx.pcode buytaskmx[it_mxbt].storageid = s_mx.storageid buytaskmx[it_mxbt].tax = s_mx.tax billamt = billamt + Round(s_mx.enprice * s_mx.uqty * s_mx.rebate,2) buytaskmx[it_mxbt].requestbuyid = s_mx.requestbuyid buytaskmx[it_mxbt].rqmxprintid = s_mx.rqmxprintid buytaskmx[it_mxbt].relrqbuycode = ls_relrqbuycode buytaskmx[it_mxbt].wrkgrpid = s_mx.wrkgrpid buytaskmx[it_mxbt].taskmxprintid = s_mx.taskmxprintid IF uo_price.uof_getmtrlname(sptid,s_mx.mtrlid,ls_sptmtrlname,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF buytaskmx[it_mxbt].sptmtrlname = ls_sptmtrlname buytaskmx[it_mxbt].iffp = li_iffp buytaskmx[it_mxbt].outtype = li_outtype buytaskmx[it_mxbt].ifpackpro = li_ifpackpro buytaskmx[it_mxbt].plancode = s_mx.plancode buytaskmx[it_mxbt].buybargainid = ll_buybargainid buytaskmx[it_mxbt].buybargainprintid = ll_buybargainprintid buytaskmx[it_mxbt].buybargaincode = ls_buybargaincode buytaskmx[it_mxbt].jgdscrp = s_mx.jgdscrp buytaskmx[it_mxbt].lastcode = ls_lastcode buytaskmx[it_mxbt].lastdate = ldt_lastdate buytaskmx[it_mxbt].lastprice = lde_lastprice ext: IF rslt = 0 THEN p_clearmx() Destroy uo_sptprice Destroy uo_price Return(rslt) end function on uo_buytask.create call super::create TriggerEvent( this, "constructor" ) end on on uo_buytask.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String str_optionvalue,arg_msg f_get_sys_option_value('111',str_optionvalue,arg_msg) uo_option_requestbuy_hz = Long(str_optionvalue) f_get_sys_option_value('228',str_optionvalue,arg_msg) uo_option_if_oa_buytask = Long(str_optionvalue) f_get_sys_option_value('229',str_optionvalue,arg_msg) uo_option_if_oa_buytask_cp = Long(str_optionvalue) f_get_sys_option_value('423',str_optionvalue,arg_msg) uo_option_if_oa_buytask_dept = Long(str_optionvalue) f_get_sys_option_value('092',str_optionvalue,arg_msg) uo_option_buytask_cl_secaudit = Long(str_optionvalue) f_get_sys_option_value('093',str_optionvalue,arg_msg) uo_option_buytask_cp_secaudit = Long(str_optionvalue) f_get_sys_option_value('422',str_optionvalue,arg_msg) uo_option_buytask_dept_secaudit = Long(str_optionvalue) f_get_sys_option_value('010',str_optionvalue,arg_msg) uo_option_ifovertask = Long(str_optionvalue) f_get_sys_option_value('029',str_optionvalue,arg_msg) uo_option_change_status = str_optionvalue f_get_sys_option_value('027',str_optionvalue,arg_msg) uo_option_change_woodcode = str_optionvalue f_get_sys_option_value('028',str_optionvalue,arg_msg) uo_option_change_pcode = str_optionvalue f_get_sys_option_value('079',str_optionvalue,arg_msg) uo_option_buyprice_buytask_notlimit = Long(str_optionvalue) f_get_sys_option_value('023',str_optionvalue,arg_msg) uo_option_unit_dec = Long(str_optionvalue) f_get_sys_option_value('293',str_optionvalue,arg_msg) uo_option_disuse_buytask = Long(str_optionvalue) f_get_sys_option_value('342',str_optionvalue,arg_msg) uo_option_update_rqmtrlqty_buy = Long(str_optionvalue) end event