$PBExportHeader$uo_buytask.sru forward global type uo_buytask from nonvisualobject end type type s_buytaskmx from structure within uo_buytask end type end forward type s_buytaskmx from structure long orderid string ordercode long mtrlid decimal { 4 } qty decimal { 10 } plprice decimal { 10 } acprice string dscrp string mtrlcode long printid decimal { 10 } fprice decimal { 4 } rebate decimal { 10 } price datetime requiredate datetime accomplishdate long storageid string status string woodcode string pcode integer iforder string sptmtrlname string unit decimal { 5 } rate decimal { 5 } uqty decimal { 10 } uprice decimal { 5 } addqty decimal { 10 } dftsptprice long relid long relprintid string relcode string formula decimal { 5 } stopqty long relid2 decimal { 5 } tax decimal { 5 } uamt decimal { 5 } uamt_tax decimal { 5 } bsamt decimal { 5 } bsamt_tax string plancode long scid long taskid decimal { 5 } assignqty datetime sys_changetime decimal { 5 } consignedqty long ctmint long stopflag string stopemp datetime stopdate string stopreason decimal { 5 } consignedaddqty datetime sptbackdate string delayreason string dscrp2 string dscrp3 string dscrp4 decimal { 5 } planprice decimal { 10 } uprice_notax string formula2 end type 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 DateTime opdate PUBLIC PROTECTEDWRITE String operator = '' PUBLIC PROTECTEDWRITE Int status = 0 PUBLIC PROTECTEDWRITE DateTime Accomplishdate PUBLIC PROTECTEDWRITE String Permit_emp = '' Long orderid = 0 String TaskCode = '' Int Kind = 0 // Long sptID = 0 String Assign_emp DateTime Requiredate String dscrp string relcode string train long banktypeid long billtype Transaction commit_transaction decimal mrate long moneyid decimal mstpayamt,payamt Long priceflag PRIVATE: s_buytaskmx buytaskmx[] //明细结构数组 Long it_MXBT = 0 //明细结构数组末指针 Boolean IT_NEWBEGIN = FALSE //新建标志 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, decimal arg_stopqty, ref string arg_msg, boolean arg_commit) public function integer addmxcmpl (long arg_scid, long arg_taskid, long arg_printid, decimal arg_qty, decimal arg_addqty, 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 stopbuytask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx (s_buytask_mx s_mx, ref string arg_msg) public function integer acceptmx (integer arg_iforder, long arg_orderid, string arg_ordercode, long arg_mtrlid, decimal arg_uqty, decimal arg_addqty, decimal arg_uprice, 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_woodcode, string arg_pcode, string arg_unit, decimal arg_rate, long arg_relid, long arg_relprintid, string arg_relcode, string arg_formula, long arg_relid2, decimal arg_tax, string arg_plancode, string arg_dscrp2, string arg_dscrp3, string arg_dscrp4) public function integer wf_check_taskdamt (integer arg_scid, integer arg_taskid, ref string msg) public function integer priceaudit (long arg_scid, long arg_taskid, boolean arg_ifcommit, ref string arg_msg) public function integer c_priceaudit (long arg_scid, long arg_taskid, boolean arg_ifcommit, ref string arg_msg) end prototypes public function integer p_reset ();//INT p_RESET() //清除对象及其明细 taskid = 0 taskcode = '' operator = '' relcode = '' status = 0 train = '' banktypeid = 0 mstpayamt = 0 it_newbegin = FALSE it_updatebegin = FALSE //清除明细 P_CLEARMX() RETURN 1 end function public function integer p_clearmx ();//INT p_clearmx() //清除明细 it_mxbt=0 mstpayamt = 0 RETURN 1 end function public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0,i Long LS_NEWtaskID DateTime server_datetime String ls_sccode Long ll_taskid IF IsNull(dscrp) THEN dscrp = '' IF IsNull(assign_emp) THEN assign_emp = '' IF IsNull(train) THEN train = '' IF IsNull(banktypeid) THEN banktypeid = 0 IF IsNull(arg_operator) THEN arg_operator = '' IF IsNull(billtype) THEN billtype = 0 IF IsNull(moneyid) THEN moneyid = 0 IF IsNull(mrate) THEN mrate = 0 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 sys_if_register = 0 THEN Long ll_bill_count SELECT count(*) INTO :ll_bill_count From u_buyTask Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询操作失败,采购订单数量 " GOTO ext END IF IF ll_bill_count > 30 THEN rslt = 0 arG_MSG = "未注册版本,采购订单只能保存30张!" GOTO ext END IF 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 Trim(assign_emp) = '' THEN rslt = 0 arG_MSG = "请输入订单负责人" GOTO ext END IF IF Kind = 0 THEN 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 ELSE sptid = -1 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 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 THEN //新建 ll_taskid = f_sys_scidentity(scid,"u_buytask","taskID",arG_MSG,True, commit_transaction) //数据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 taskcode = getid(scid,ls_sccode + 'BG',Date(server_datetime),False,commit_transaction) 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, Permit_Emp, Dscrp, opdate, orderid, relcode, train, banktypeid, billtype, moneyid, mrate, mstpayamt) VALUES ( :scid, :ll_taskid, :TaskCode, :Kind, :sptID, :requiredate, :Status, :Operator, :Assign_Emp, :Permit_Emp, :Dscrp, :opdate, :orderid, :relcode, :train, :banktypeid, :billtype, :moneyid, :mrate, :mstpayamt) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'pk_u_buyTask') > 0 THEN arG_MSG = '插入采购订单操作失败,关键字分部ID、单据ID重复' ELSEIF Pos(Lower(commit_transaction.SQLErrText),'ix_u_buyTask_1') > 0 THEN arG_MSG = '插入采购订单操作失败,单据编号重复' ELSE arG_MSG = "插入采购订单操作失败"+"~n"+commit_transaction.SQLErrText END IF GOTO ext END IF //读取新taskid 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, billtype = :billtype, moneyid = :moneyid, mrate = :mrate, mstpayamt = :mstpayamt WHERE u_buytask.taskid = :taskid AND scid = :scid And Status = 0 Using commit_transaction; IF commit_transaction.SQLCode <> 0 Or commit_transaction.SQLNRows <= 0 THEN rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'pk_u_buyTask') > 0 THEN arG_MSG = '更新采购订单操作失败,关键字分部ID、单据ID重复' ELSEIF Pos(Lower(commit_transaction.SQLErrText),'ix_u_buyTask_1') > 0 THEN arG_MSG = '更新采购订单操作失败,单据编号重复' ELSE arG_MSG = "更新采购订单操作失败"+"~n"+commit_transaction.SQLErrText END IF GOTO ext END IF //删除原有明细 DELETE FROM u_buytaskmx Where u_buytaskmx.taskid = :taskid And scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF FOR i = 1 To it_mxbt INSERT INTO u_buytaskmx ( scid, taskid, mtrlid, qty, price, dscrp, printid, fprice, rebate, requiredate, orderid, storageid, status, iforder, sptmtrlname, unit, rate, uqty, addqty, uprice, woodcode, pcode, dftsptprice, relid, relprintid, relcode, formula, relid2, tax, uamt, uamt_tax, bsamt, bsamt_tax, plancode, dscrp2, dscrp3, dscrp4, uprice_notax, formula2) VALUES (:scid, :taskid, :buytaskmx[i].mtrlid, :buytaskmx[i].QTY, :buytaskmx[i].acprice, :buytaskmx[i].dscrp, :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].addqty, :buytaskmx[i].uprice, :buytaskmx[i].woodcode, :buytaskmx[i].pcode, :buytaskmx[i].dftsptprice, :buytaskmx[i].relid, :buytaskmx[i].relprintid, :buytaskmx[i].relcode, :buytaskmx[i].formula, :buytaskmx[i].relid2, :buytaskmx[i].tax, :buytaskmx[i].uamt, :buytaskmx[i].uamt_tax, :buytaskmx[i].bsamt, :buytaskmx[i].bsamt_tax, :buytaskmx[i].plancode, :buytaskmx[i].dscrp2, :buytaskmx[i].dscrp3, :buytaskmx[i].dscrp4, :buytaskmx[i].uprice_notax, :buytaskmx[i].formula2) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN IF it_newbegin THEN taskid = 0 //还原taskid rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'pk_u_buytaskmx') > 0 THEN arG_MSG = '插入明细表操作失败,关键字分部ID、单据ID、明细ID重复' ELSEIF Pos(Lower(commit_transaction.SQLErrText),'u_buytaskmx_x') > 0 THEN arG_MSG = '插入明细表操作失败,违反唯一约束' ELSE arG_MSG = "插入明细操作失败"+"~n"+commit_transaction.SQLErrText END IF 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 arG_MSG = '采购订单,'+ arG_MSG 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, billtype, moneyid, mrate, mstpayamt, payamt, priceflag INTO :taskid, :TaskCode, :Kind, :sptID, :requiredate, :accomplishdate, :Status, :Operator, :Assign_Emp, :Permit_Emp, :Dscrp, :opdate, :orderid, :relcode, :banktypeid, :train, :billtype, :moneyid, :mrate, :mstpayamt, :payamt, :priceflag 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 IF Pos(Lower(commit_transaction.SQLErrText),'more than') > 0 THEN arg_msg = '查询单据操作失败,查询数据返回值多于一个' ELSE arg_msg = '查询订单内容失败(错误订单唯一码)' END IF 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 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 ext: if rslt=0 then p_reset() arg_msg = '采购订单,'+ arg_msg return rslt end function public function integer getinfo (integer arg_scid, long arg_taskid, ref string arg_msg);//getinfo(long arg_taskid,string arg_msg) //0 失败 1成功 Int rslt = 1,I = 1,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.addqty, u_buytaskmx.uprice, u_buytaskmx.woodcode, u_buytaskmx.pcode, u_buytaskmx.dftsptprice, u_buytaskmx.relid, u_buytaskmx.relprintid, u_buytaskmx.relcode, u_buytaskmx.stopqty, u_buytaskmx.relid2, u_buytaskmx.tax, u_buytaskmx.uamt, u_buytaskmx.uamt_tax, u_buytaskmx.bsamt, u_buytaskmx.bsamt_tax 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].addqty,:buytaskmx[I].uprice, :buytaskmx[I].woodcode,:buytaskmx[I].pcode,:buytaskmx[I].dftsptprice, :buytaskmx[I].relid,:buytaskmx[I].relprintid,:buytaskmx[I].relcode,:buytaskmx[I].stopqty, :buytaskmx[I].relid2, :buytaskmx[I].tax, :buytaskmx[I].uamt, :buytaskmx[I].uamt_tax, :buytaskmx[I].bsamt, :buytaskmx[I].bsamt_tax; 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].addqty,:buytaskmx[I].uprice, :buytaskmx[I].woodcode,:buytaskmx[I].pcode,:buytaskmx[I].dftsptprice, :buytaskmx[I].relid,:buytaskmx[I].relprintid,:buytaskmx[I].relcode,:buytaskmx[I].stopqty, :buytaskmx[I].relid2, :buytaskmx[I].tax, :buytaskmx[I].uamt, :buytaskmx[I].uamt_tax, :buytaskmx[I].bsamt, :buytaskmx[I].bsamt_tax; 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,cnt = 0 DateTime null_dt uo_saletask uo_sale uo_sale = Create uo_saletask uo_sale.commit_transaction = commit_transaction uo_order_ml_mrp uo_mrp uo_mrp = Create uo_order_ml_mrp IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误采购订单唯一码' GOTO ext END IF SetNull(null_dt) 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 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 = "查询采购订单收货数量操作失败" GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "采购订单已经有相关进仓单据,不可以撤消审核" GOTO ext END IF Decimal lde_consignedqty SELECT sum(consignedqty) INTO :lde_consignedqty FROM u_buytaskmx 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 = "查询采购订单收货数量操作失败" GOTO ext END IF IF lde_consignedqty > 0 THEN rslt = 0 ARG_MSG = "采购订单明细已经有已收货数,不可以撤消审核" GOTO ext END IF UPDATE u_buyTask SET Status = 0, permit_emp = '', permit_date = :null_dt WHERE scid = :arg_scid AND TaskID = :arg_taskid AND Status = 1 Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'pk_u_buyTask') > 0 THEN ARG_MSG = '采购订单撤消审核操作失败,关键字分部ID、单据ID重复' ELSE ARG_MSG = "采购订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText END IF GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 ARG_MSG = "订单正在更新,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //更新销售订单采购清单订购数 Long ll_i,ll_status FOR ll_i = 1 To it_mxbt IF billtype = 1 THEN IF buytaskmx[ll_i].relid > 0 And buytaskmx[ll_i].relprintid > 0 THEN IF uo_sale.addmxcmpl_assign(scid, buytaskmx[ll_i].relid, buytaskmx[ll_i].relprintid, & buytaskmx[ll_i].mtrlid, 2, 0 - buytaskmx[ll_i].qty, False, ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSEIF billtype = 2 THEN IF buytaskmx[ll_i].relid > 0 And buytaskmx[ll_i].relprintid > 0 And buytaskmx[ll_i].relid2 > 0 THEN IF uo_mrp.uof_add_rqmtrl_consignedqty(scid, buytaskmx[ll_i].relid, buytaskmx[ll_i].relprintid, buytaskmx[ll_i].relid2, 2, 0 - buytaskmx[ll_i].qty, False, ARG_MSG) = 0 THEN rslt = 0 GOTO ext 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 p_reset() Destroy uo_sale Destroy uo_mrp ARG_MSG = '采购订单,'+ ARG_MSG 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 // IF Pos(Lower(commit_transaction.SQLErrText),'pk_u_buyTask') > 0 THEN // arG_MSG = '添加备注单操作失败,关键字分部ID、单据ID重复' // ELSE arG_MSG = "添加采购订单备注操作失败"+"~n"+commit_transaction.SQLErrText // END IF 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() arG_MSG = '采购订单,'+ arG_MSG 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 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() arg_msg = '采购订单,'+ arg_msg 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 uo_order_ml_mrp uo_mrp uo_mrp = CREATE uo_order_ml_mrp 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 IF wf_check_taskdamt(arg_scid,arg_taskid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF 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 = "删除采购订单操作失败" // ROLLBACK USING commit_transaction; 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 = "删除采购订单明细操作失败" // ROLLBACK USING commit_transaction; GOTO ext END IF Long ll_i FOR ll_i = 1 TO it_MXBT IF billtype = 2 THEN IF buytaskmx[ll_i].relid > 0 AND buytaskmx[ll_i].relprintid > 0 AND buytaskmx[ll_i].relid2 > 0 THEN IF uo_mrp.uof_del_rqmtrl_relcode(scid, buytaskmx[ll_i].relid, buytaskmx[ll_i].relprintid, buytaskmx[ll_i].relid2, 2, FALSE, ARG_MSG) = 0 THEN rslt = 0 GOTO ext 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 AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() ARG_MSG = '采购订单,'+ ARG_MSG DESTROY uo_mrp Return (rslt) end function public function integer firstpermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);//buypermit Int rslt = 1,cnt = 0 uo_saletask uo_sale uo_sale = CREATE uo_saletask uo_sale.commit_transaction = commit_transaction uo_order_ml_mrp uo_mrp uo_mrp = CREATE uo_order_ml_mrp 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 Permit_Emp = :arg_emp, Permit_date = getdate(), Status = 1 WHERE scid = :arg_scid AND TaskID = :arg_taskid AND Status = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "订单最终审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 ARG_MSG = "订单正在更新,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //更新销售订单采购清单订购数 Long ll_i Decimal ll_taskrate,ll_taskaddqty,ll_buytaskqty,ll_needbuyqty //int li_plantype //li_plantype = 2 FOR ll_i = 1 TO it_mxbt IF billtype = 1 THEN IF uo_sale.addmxcmpl_assign(scid, buytaskmx[ll_i].relid, buytaskmx[ll_i].relprintid, & buytaskmx[ll_i].mtrlid, 2, buytaskmx[ll_i].qty, FALSE, ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF ELSEIF billtype = 2 THEN IF buytaskmx[ll_i].relid > 0 AND buytaskmx[ll_i].relprintid > 0 AND buytaskmx[ll_i].relid2 > 0 THEN IF uo_mrp.uof_add_rqmtrl_consignedqty(scid, buytaskmx[ll_i].relid, buytaskmx[ll_i].relprintid, buytaskmx[ll_i].relid2, 2, buytaskmx[ll_i].qty, FALSE, ARG_MSG) = 0 THEN rslt = 0 GOTO ext 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 p_reset() DESTROY uo_sale DESTROY uo_mrp ARG_MSG = '采购订单,'+ ARG_MSG 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 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() arg_msg = '采购订单,'+ arg_msg 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 if pos(lower(sqlca.SQLErrText),'more than') > 0 then arg_msg = "物料编码["+ls_mtrlcode+"],查询采购订单已完成数量操作失败,查询数据返回值多于一个" else arG_MSG="因网络或错误物料编码["+ls_mtrlcode+"]导致查询采购订单已完成数量操作失败" end if 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() arg_msg = '采购订单,'+ arg_msg 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 if_finish = TRUE DECLARE zero_cur CURSOR FOR SELECT u_buytaskmx.uqty - u_buytaskmx.stopqty - u_buytaskmx.consignedqty FROM u_buytaskmx WHERE ( u_buytaskmx.taskid = :arg_taskid ) AND ( u_buytaskmx.scid = :arg_scid ) 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 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 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() arg_msg = '采购订单,'+ arg_msg 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 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 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 ext: IF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() arg_msg = '采购订单,'+ arg_msg 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() arg_msg = '采购订单,'+ arg_msg 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, decimal arg_stopqty, ref string arg_msg, boolean arg_commit);Int rslt = 1 Int li_flag DateTime null_dt Decimal ld_notconsignedqty Decimal ld_notconsignedaddqty SetNull(null_dt) 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 stopflag INTO :li_flag FROM u_buytaskmx WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN IF Pos(Lower(sqlca.SQLErrText),'more than') > 0 THEN arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败,查询数据返回值多于一个' ELSE arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败' END IF 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, u_buyTaskMx.addQty - u_buyTaskMx.consignedaddqty INTO :ld_notconsignedqty, :ld_notconsignedaddqty FROM u_buytaskmx WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN IF Pos(Lower(sqlca.SQLErrText),'more than') > 0 THEN arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败,查询数据返回值多于一个' ELSE arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败' END IF rslt = 0 GOTO ext END IF IF ld_notconsignedqty <= 0 THEN arg_msg = '明细物料'+arg_mtrlcode+'已完成收货,不能中止' rslt = 0 GOTO ext END IF IF ld_notconsignedqty < arg_stopqty THEN arg_msg = '明细物料'+arg_mtrlcode+'未完成数量只有:' + String(ld_notconsignedqty,'###,##0.#####') + ',不能中止:' + String(arg_stopqty,'###,##0.#####') rslt = 0 GOTO ext END IF END IF IF arg_flag = 0 THEN UPDATE u_buytaskmx SET stopflag = 0, stopemp = '', stopdate = :null_dt, stopreason = '', stopqty = 0 WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid; ELSE UPDATE u_buytaskmx SET stopflag = 1, stopemp = :publ_operator, stopdate = getdate(), stopreason = :arg_stopreason, stopqty = :arg_stopqty WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid; END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新明细'+arg_mtrlcode+'中止标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_commit THEN COMMIT; END IF arg_msg = '采购订单,'+ arg_msg RETURN rslt end function public function integer addmxcmpl (long arg_scid, long arg_taskid, long arg_printid, decimal arg_qty, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1,cnt = 0 uo_saletask uo_sale uo_sale = Create uo_saletask uo_sale.commit_transaction = commit_transaction IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误采购订单唯一码' GOTO ext END IF IF arg_qty = 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 //==================================================================== // Script - addmxcmpl ( long arg_scid, long arg_taskid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit ) // Reason:检查数量限制 //-------------------------------------------------------------------- // Modified By: yyx Date: 2004.02.12 //-------------------------------------------------------------------- Decimal ls_buyqty,ls_consignedqty Decimal ls_buyaddqty,ls_consignedaddqty,ld_stopqty String ls_mtrlcode Long ll_mtrlid, ll_relid2, ll_relid, ll_relprintid Decimal ld_uprate,ld_upqty, lde_rate, ld_updatewareqty Int li_billtype SELECT billtype INTO :li_billtype FROM u_buytask WHERE scid = :arg_scid AND taskid = :arg_taskid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询采购订单信息失败,'+sqlca.SQLErrText GOTO ext END IF SELECT mtrlid, relid2, relid, relprintid, rate INTO :ll_mtrlid, :ll_relid2, :ll_relid, :ll_relprintid, :lde_rate FROM u_buytaskmx 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 = '查询采购订单,物料资料失败,'+sqlca.SQLErrText GOTO ext END IF SELECT mtrlcode, uprate , upqty INTO :ls_mtrlcode, :ld_uprate,:ld_upqty FROM u_mtrldef WHERE mtrlid = :ll_mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料资料失败' GOTO ext END IF IF sys_option_ifovertask = 0 THEN SELECT u_buytaskmx.uqty, u_buytaskmx.consignedqty, u_buytaskmx.addqty, u_buytaskmx.consignedaddqty, u_buytaskmx.stopqty INTO :ls_buyqty, :ls_consignedqty, :ls_buyaddqty, :ls_consignedaddqty, :ld_stopqty FROM u_buytaskmx WHERE ( u_buytaskmx.taskid = :arg_taskid ) AND ( u_buytaskmx.printid = :arg_printid ) AND ( u_buytaskmx.scid = :arg_scid) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询编码["+ls_mtrlcode+"]采购订单已完成数量操作失败" GOTO ext END IF IF ls_buyqty < ls_consignedqty + arg_qty THEN rslt = 0 arg_msg = "["+ls_mtrlcode+"]的未完成数量只有"+String(ls_buyqty - ls_consignedqty - ld_stopqty,'#,##0.0###')+",不能入库"+String(arg_qty,'#,##0.0#') GOTO ext END IF IF ls_buyaddqty < ls_consignedaddqty + arg_addqty THEN rslt = 0 arg_msg = "["+ls_mtrlcode+"]的未完成辅数量只有"+String(ls_buyaddqty - ls_consignedaddqty - ld_stopqty,'#,##0.0###')+",不能入库"+String(arg_addqty,'#,##0.0#') GOTO ext END IF If (ls_buyqty = ls_consignedqty + arg_qty + ld_stopqty) And (ls_buyaddqty <> ls_consignedaddqty + arg_addqty) THEN rslt = 0 arg_msg = "["+ls_mtrlcode+"]数量已全部到货时,辅数必须也全部到货." GOTO ext END IF ELSEIF sys_option_ifovertask = 2 THEN SELECT u_buytaskmx.uqty, u_buytaskmx.consignedqty, u_buytaskmx.addqty, u_buytaskmx.consignedaddqty, u_buytaskmx.stopqty INTO :ls_buyqty, :ls_consignedqty, :ls_buyaddqty, :ls_consignedaddqty, :ld_stopqty FROM u_buytaskmx WHERE ( u_buytaskmx.taskid = :arg_taskid ) AND ( u_buytaskmx.printid = :arg_printid ) AND ( u_buytaskmx.scid = :arg_scid) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询编码["+ls_mtrlcode+"]采购订单已完成数量操作失败" GOTO ext END IF IF ls_buyqty * (1 + ld_uprate) + ld_upqty < ls_consignedqty + arg_qty THEN rslt = 0 arg_msg = "["+ls_mtrlcode+"]的未完成数量只有"+String(ls_buyqty - ls_consignedqty - ld_stopqty,'#,##0.0###')+",不能入库"+String(arg_qty,'#,##0.0#') GOTO ext END IF IF ls_buyaddqty < ls_consignedaddqty + arg_addqty THEN rslt = 0 arg_msg = "["+ls_mtrlcode+"]的未完成辅数量只有"+String(ls_buyaddqty - ls_consignedaddqty ,'#,##0.0###')+",不能入库"+String(arg_addqty,'#,##0.0#') GOTO ext END IF If (ls_buyqty * (1 + ld_uprate) + ld_upqty = ls_consignedqty + arg_qty + ld_stopqty) And (ls_buyaddqty <> ls_consignedaddqty + arg_addqty) THEN rslt = 0 arg_msg = "["+ls_mtrlcode+"]数量已全部到货时,辅数必须也全部到货." GOTO ext END IF END IF UPDATE u_buytaskmx SET consignedqty = consignedqty + :arg_qty, consignedaddqty = consignedaddqty + :arg_addqty WHERE ( u_buytaskmx.taskid = :arg_taskid ) AND ( u_buytaskmx.printid = :arg_printid ) AND ( u_buytaskmx.scid = :arg_scid) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新采购订单完成数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ld_updatewareqty = arg_qty * lde_rate //库存单位 IF ll_relid2 > 0 THEN UPDATE u_OrderRqMtrl SET inqty = inqty + :ld_updatewareqty Where mxpkid = :ll_relid2 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新销售订单明细的采购需求已订货数操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF //更新销售订单已进仓数 IF li_billtype = 1 THEN IF uo_sale.addmxcmpl_assign(scid, ll_relid, ll_relprintid, & ll_mtrlid, 4, ld_updatewareqty, False, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF it_newbegin = False it_updatebegin = False ext: Destroy uo_sale IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF p_reset() arg_msg = '采购订单,'+ arg_msg 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 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<>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 it_newbegin=FALSE it_updatebegin=FALSE EXT: if arg_ifcommit and rslt=1 then COMMIT using commit_transaction; end if p_reset() arg_msg = '采购订单,'+ arg_msg return (rslt) end function public function integer stopbuytask (long arg_scid, long arg_taskid, 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 p_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 UPDATE u_buyTask SET Status = 3,accomplishdate=getdate(),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 rollback using commit_transaction; goto ext end if it_newbegin=FALSE it_updatebegin=FALSE EXT: if arg_ifcommit and rslt=1 then COMMIT using commit_transaction; end if p_reset() arg_msg = '采购订单,'+ arg_msg return (rslt) end function public function integer acceptmx (s_buytask_mx s_mx, ref string arg_msg);Long rslt = 1,cnt = 0,LS_i Dec ld_dftsptprice Dec ld_round = 100 ld_round = 10.0 ^ (2 - sys_option_inware_buy_amt_round) uo_spt_price uo_sptprice uo_sptprice = Create uo_spt_price String ls_sptmtrlname //uo_spt_price uo_price //uo_price = CREATE uo_spt_price 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.addqty) Then s_mx.addqty = 0 If IsNull(s_mx.uprice) Then s_mx.uprice = 0 If IsNull(s_mx.rebate) Then s_mx.rebate = 0 If IsNull(s_mx.planprice) Then s_mx.planprice = 0 If IsNull(s_mx.dscrp) Then s_mx.dscrp = '' 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.relid) Then s_mx.relid = 0 If IsNull(s_mx.relprintid) Then s_mx.relprintid = 0 If IsNull(s_mx.relid2) Then s_mx.relid2 = 0 If IsNull(s_mx.relcode) Then s_mx.relcode = '' If IsNull(s_mx.formula) Then s_mx.formula = '' If IsNull(s_mx.tax) Then s_mx.tax = 0 If IsNull(s_mx.plancode) Then s_mx.plancode = '' If IsNull(s_mx.uprice_notax) Then s_mx.uprice_notax = 0 //不含税单价 If IsNull(s_mx.uamt_tax) Then s_mx.uamt_tax = 0 //税金 If IsNull(s_mx.dscrp2) Then s_mx.dscrp2 = '' If IsNull(s_mx.dscrp3) Then s_mx.dscrp3 = '' If IsNull(s_mx.dscrp4) Then s_mx.dscrp4 = '' If s_mx.uprice_notax = 0 Then s_mx.uprice_notax = s_mx.uprice / (1 + s_mx.tax) End If s_mx.uqty = Round(s_mx.uqty,4) 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 = "查询操作失败,可能颜色未定义,"+s_mx.mtrlCODE+",颜色:"+s_mx.status Goto ext End If //检查销售订单单据ID If s_mx.relid > 0 Then Select count(*) Into :cnt From u_saletask Where taskid = :s_mx.relid; If sqlca.SQLCode <> 0 Then rslt = 0 arG_MSG = "查询操作失败,销售订单" Goto ext End If End If //检查物料ID Select COUNT(*) Into :cnt From u_mtrldef Where u_mtrldef.mtrlid = :s_mx.mtrlid ; If sqlca.SQLCode <> 0 Then rslt = 0 arG_MSG = "查询操作失败,物料编号" Goto ext End If If cnt = 0 Then rslt = 0 arG_MSG = "错误的编码: "+String(s_mx.mtrlCODE) Goto ext End If cnt = 0 Select COUNT(*) Into :cnt From u_storage Where u_storage.storageid = :s_mx.storageid ; 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 If s_mx.tax < 0 Then rslt = 0 arG_MSG = "税率不能为负数" Goto ext End If If sys_option_buyprice_buytask_limit = 1 Then Int li_iflimitprice Select iflimitprice Into :li_iflimitprice From u_mtrldef Where mtrlid = :s_mx.mtrlid; If sqlca.SQLCode <> 0 Then arG_MSG = '查询'+s_mx.mtrlCODE+'收货限价属性失败 ' rslt = 0 Goto ext End If If li_iflimitprice = 1 Then If uo_sptprice.uf_check_price_save(0,sptid,s_mx.mtrlid,s_mx.mtrlCODE,s_mx.unit,s_mx.status,s_mx.woodcode,s_mx.pcode,s_mx.uprice * s_mx.rebate,arG_MSG) = 0 Then rslt = 0 Goto ext End If End If End If f_get_defsptprice(sptid,s_mx.mtrlid,s_mx.unit,s_mx.status,s_mx.pcode,s_mx.woodcode,ld_dftsptprice) If sys_option_buytask_mxhb = 0 Then For LS_i = 1 To it_mxbt //合并重复项 If buytaskmx[LS_i].mtrlid = s_mx.mtrlid And & buytaskmx[LS_i].orderid = s_mx.orderid 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].unit = s_mx.unit And & buytaskmx[LS_i].relid = s_mx.relid And & buytaskmx[LS_i].relprintid = s_mx.relprintid And & buytaskmx[LS_i].relid2 = s_mx.relid2 And & buytaskmx[LS_i].plancode = s_mx.plancode Then if left(string(buytaskmx[LS_i].requiredate,'yyyy-mm-dd'),10) = left(string(s_mx.requiredate,'yyyy-mm-dd'),10) then buytaskmx[LS_i].uqty += s_mx.uqty buytaskmx[LS_i].addqty += s_mx.addqty buytaskmx[LS_i].Qty += Round(s_mx.uqty * s_mx.rate,sys_option_unit_dec) buytaskmx[LS_i].uamt += Round(s_mx.uqty * s_mx.uprice * s_mx.rebate * ld_round, 0) / ld_round //原币,实价含税金额 buytaskmx[LS_i].uamt_tax += Round((s_mx.uqty * s_mx.uprice * s_mx.rebate) * s_mx.tax / (1 + s_mx.tax) * ld_round, 0) / ld_round //原币, 税金 buytaskmx[LS_i].bsamt += Round(s_mx.uqty * s_mx.uprice * s_mx.rebate * mrate * ld_round, 0) / ld_round //本位币, 实价含税金额 buytaskmx[LS_i].bsamt_tax += Round((s_mx.uqty * s_mx.uprice * s_mx.rebate * mrate) * s_mx.tax / (1 + s_mx.tax) * ld_round, 0) / ld_round //本位币, 税金 rslt = 1 Goto ext end if End If Next End If If uo_sptprice.uf_getmtrlname(sptid,s_mx.mtrlid,ls_sptmtrlname,arG_MSG) = 0 Then rslt = 0 Goto ext End If //写入内容 it_mxbt++ buytaskmx[it_mxbt].printid = s_mx.printid 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].addqty = s_mx.addqty buytaskmx[it_mxbt].Qty = Round(s_mx.uqty * s_mx.rate,sys_option_unit_dec) buytaskmx[it_mxbt].plprice = s_mx.planprice buytaskmx[it_mxbt].dscrp = s_mx.dscrp buytaskmx[it_mxbt].dscrp2 = s_mx.dscrp2 buytaskmx[it_mxbt].dscrp3 = s_mx.dscrp3 buytaskmx[it_mxbt].dscrp4 = s_mx.dscrp4 buytaskmx[it_mxbt].mtrlCODE = s_mx.mtrlCODE buytaskmx[it_mxbt].unit = s_mx.unit buytaskmx[it_mxbt].rate = s_mx.rate buytaskmx[it_mxbt].rebate = s_mx.rebate buytaskmx[it_mxbt].tax = s_mx.tax buytaskmx[it_mxbt].uprice = s_mx.uprice If Round(s_mx.uqty * s_mx.rate,sys_option_unit_dec) <> 0 Then //出现除数为0 buytaskmx[it_mxbt].fprice = Round((s_mx.uprice * s_mx.uqty)/(Round(s_mx.uqty * s_mx.rate,sys_option_unit_dec)),10) Else buytaskmx[it_mxbt].fprice = s_mx.uprice End If buytaskmx[it_mxbt].acprice = buytaskmx[it_mxbt].fprice * s_mx.rebate //对应数据库 price buytaskmx[it_mxbt].uamt = Round(s_mx.uqty * s_mx.uprice * s_mx.rebate * ld_round, 0) / ld_round //原币,实价含税金额 If s_mx.uamt_tax = 0 Then buytaskmx[it_mxbt].uamt_tax = Round((s_mx.uqty * s_mx.uprice * s_mx.rebate) * s_mx.tax / (1 + s_mx.tax) * ld_round, 0) / ld_round //原币, 税金 Else buytaskmx[it_mxbt].uamt_tax = s_mx.uamt_tax End If buytaskmx[it_mxbt].bsamt = Round(s_mx.uqty * s_mx.uprice * s_mx.rebate * mrate * ld_round, 0) / ld_round //本位币, 实价含税金额 buytaskmx[it_mxbt].bsamt_tax = Round((s_mx.uqty * s_mx.uprice * s_mx.rebate * mrate) * s_mx.tax / (1 + s_mx.tax) * ld_round, 0) / ld_round //本位币, 税金 If sys_option_msp_multimoney = 1 Then //使用多币种 mstpayamt += buytaskmx[it_mxbt].uamt Else // 系统不使用多币种,转换为人民币 mstpayamt += buytaskmx[it_mxbt].bsamt End If 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].dftsptprice = ld_dftsptprice buytaskmx[it_mxbt].relid = s_mx.relid buytaskmx[it_mxbt].relprintid = s_mx.relprintid buytaskmx[it_mxbt].relid2 = s_mx.relid2 buytaskmx[it_mxbt].relcode = s_mx.relcode buytaskmx[it_mxbt].formula = s_mx.formula buytaskmx[it_mxbt].formula2 = s_mx.formula2 buytaskmx[it_mxbt].sptmtrlname = ls_sptmtrlname buytaskmx[it_mxbt].plancode = s_mx.plancode buytaskmx[it_mxbt].uprice_notax = s_mx.uprice_notax ext: //DESTROY uo_price Destroy uo_sptprice If rslt = 0 Then p_clearmx() arG_MSG = '采购订单,'+ arG_MSG End If 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_addqty, decimal arg_uprice, 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_woodcode, string arg_pcode, string arg_unit, decimal arg_rate, long arg_relid, long arg_relprintid, string arg_relcode, string arg_formula, long arg_relid2, decimal arg_tax, string arg_plancode, string arg_dscrp2, string arg_dscrp3, string arg_dscrp4);s_buytask_mx s_mx s_mx.mtrlid = arg_mtrlid s_mx.uqty = arg_uqty s_mx.addqty = arg_addqty s_mx.uprice = arg_uprice s_mx.rebate = arg_rebate 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.woodcode = arg_woodcode s_mx.pcode = arg_pcode s_mx.unit = arg_unit s_mx.rate = arg_rate s_mx.relid = arg_relid s_mx.relprintid = arg_relprintid s_mx.relcode = arg_relcode s_mx.formula = arg_formula s_mx.relid2 = arg_relid2 s_mx.tax = arg_tax s_mx.plancode = arg_plancode s_mx.dscrp2 = arg_dscrp2 s_mx.dscrp3 = arg_dscrp3 s_mx.dscrp4 = arg_dscrp4 return acceptmx(s_mx, arg_msg) // // // //Long rslt = 1,cnt = 0,LS_i //Dec ld_dftsptprice // //Dec ld_round = 100 //ld_round = 10.0 ^ (2 - sys_option_inware_buy_amt_round) // //uo_spt_price uo_sptprice //uo_sptprice = Create uo_spt_price // //String ls_sptmtrlname ////uo_spt_price uo_price ////uo_price = CREATE uo_spt_price // //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_addqty) Then arg_addqty = 0 //If IsNull(arg_uprice) Then arg_uprice = 0 //If IsNull(arg_rebate) Then arg_rebate = 0 //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_relid) Then arg_relid = 0 //If IsNull(arg_relprintid) Then arg_relprintid = 0 //If IsNull(arg_relid2) Then arg_relid2 = 0 // //If IsNull(arg_relcode) Then arg_relcode = '' //If IsNull(arg_formula) Then arg_formula = '' //If IsNull(arg_tax) Then arg_tax = 0 // //If IsNull(arg_plancode) Then arg_plancode = '' // // //arg_uqty = Round(arg_uqty,4) // //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 = "查询操作失败,可能颜色未定义,"+ARG_mtrlCODE+",颜色:"+arg_status // Goto ext //End If // ////检查销售订单单据ID //If arg_relid > 0 Then // Select count(*) // Into :cnt // From u_saletask // Where taskid = :arg_relid; // If sqlca.SQLCode <> 0 Then // rslt = 0 // arG_MSG = "查询操作失败,销售订单" // Goto ext // End If //End If // ////检查物料ID //Select COUNT(*) // Into :cnt // From u_mtrldef // Where u_mtrldef.mtrlid = :arg_mtrlid ; //If sqlca.SQLCode <> 0 Then // rslt = 0 // arG_MSG = "查询操作失败,物料编号" // Goto ext //End If // //If cnt = 0 Then // rslt = 0 // arG_MSG = "错误的编码: "+String(ARG_mtrlCODE) // Goto ext //End If // //cnt = 0 //Select COUNT(*) // Into :cnt // From u_storage // Where u_storage.storageid = :arg_storageid ; //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 // //If arg_tax < 0 Then // rslt = 0 // arG_MSG = "税率不能为负数" // Goto ext //End If // // //If sys_option_buyprice_buytask_limit = 1 Then // Int li_iflimitprice // Select iflimitprice Into :li_iflimitprice // From u_mtrldef // Where mtrlid = :arg_mtrlid; // If sqlca.SQLCode <> 0 Then // arG_MSG = '查询'+ARG_mtrlCODE+'收货限价属性失败 ' // rslt = 0 // Goto ext // End If // // If li_iflimitprice = 1 Then // If uo_sptprice.uf_check_price_save(0,sptid,arg_mtrlid,ARG_mtrlCODE,arg_unit,arg_status,arg_woodcode,arg_pcode,arg_uprice * arg_rebate,arG_MSG) = 0 Then // rslt = 0 // Goto ext // End If // End If //End If // //f_get_defsptprice(sptid,arg_mtrlid,arg_unit,arg_status,arg_pcode,arg_woodcode,ld_dftsptprice) // //If sys_option_buytask_mxhb = 0 Then // For LS_i = 1 To it_mxbt //合并重复项 // If buytaskmx[LS_i].mtrlid = arg_mtrlid And & // buytaskmx[LS_i].orderid = arg_orderid And & // buytaskmx[LS_i].requiredate = 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].unit = arg_unit And & // buytaskmx[LS_i].relid = arg_relid And & // buytaskmx[LS_i].relprintid = arg_relprintid And & // buytaskmx[LS_i].relid2 = arg_relid2 Then // // buytaskmx[LS_i].uqty += arg_uqty // buytaskmx[LS_i].addqty += arg_addqty // buytaskmx[LS_i].Qty += Round(arg_uqty * arg_rate,sys_option_unit_dec) // // buytaskmx[LS_i].uamt += Round(arg_uqty * arg_uprice * arg_rebate * ld_round, 0) / ld_round //原币,实价含税金额 // buytaskmx[LS_i].uamt_tax += Round((arg_uqty * arg_uprice * arg_rebate) * arg_tax / (1 + arg_tax) * ld_round, 0) / ld_round //原币, 税金 // buytaskmx[LS_i].bsamt += Round(arg_uqty * arg_uprice * arg_rebate * mrate * ld_round, 0) / ld_round //本位币, 实价含税金额 // buytaskmx[LS_i].bsamt_tax += Round((arg_uqty * arg_uprice * arg_rebate * mrate) * arg_tax / (1 + arg_tax) * ld_round, 0) / ld_round //本位币, 税金 // // rslt = 1 // Goto ext // End If // Next //End If // //If uo_sptprice.uf_getmtrlname(sptid,arg_mtrlid,ls_sptmtrlname,arG_MSG) = 0 Then // rslt = 0 // Goto ext //End If // // ////写入内容 //it_mxbt++ //buytaskmx[it_mxbt].printid = arg_printid // //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].addqty = arg_addqty //buytaskmx[it_mxbt].Qty = Round(arg_uqty * arg_rate,sys_option_unit_dec) // //buytaskmx[it_mxbt].plprice = arg_planprice //buytaskmx[it_mxbt].dscrp = arg_dscrp //buytaskmx[it_mxbt].mtrlcode = ARG_mtrlCODE // //buytaskmx[it_mxbt].unit = arg_unit //buytaskmx[it_mxbt].rate = arg_rate //buytaskmx[it_mxbt].rebate = arg_rebate //buytaskmx[it_mxbt].tax = arg_tax //buytaskmx[it_mxbt].uprice = arg_uprice // //If Round(arg_uqty * arg_rate,sys_option_unit_dec) <> 0 Then //出现除数为0 // buytaskmx[it_mxbt].fprice = Round((arg_uprice * arg_uqty)/(Round(arg_uqty * arg_rate,sys_option_unit_dec)),10) //Else // buytaskmx[it_mxbt].fprice = arg_uprice //End If // //buytaskmx[it_mxbt].acprice = buytaskmx[it_mxbt].fprice * arg_rebate //对应数据库 price // //buytaskmx[it_mxbt].uamt = Round(arg_uqty * arg_uprice * arg_rebate * ld_round, 0) / ld_round //原币,实价含税金额 //buytaskmx[it_mxbt].uamt_tax = Round((arg_uqty * arg_uprice * arg_rebate) * arg_tax / (1 + arg_tax) * ld_round, 0) / ld_round //原币, 税金 //buytaskmx[it_mxbt].bsamt = Round(arg_uqty * arg_uprice * arg_rebate * mrate * ld_round, 0) / ld_round //本位币, 实价含税金额 //buytaskmx[it_mxbt].bsamt_tax = Round((arg_uqty * arg_uprice * arg_rebate * mrate) * arg_tax / (1 + arg_tax) * ld_round, 0) / ld_round //本位币, 税金 // // //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].dftsptprice = ld_dftsptprice // //buytaskmx[it_mxbt].relid = arg_relid //buytaskmx[it_mxbt].relprintid = arg_relprintid //buytaskmx[it_mxbt].relid2 = arg_relid2 //buytaskmx[it_mxbt].relcode = arg_relcode //buytaskmx[it_mxbt].formula = arg_formula // // //buytaskmx[it_mxbt].sptmtrlname = ls_sptmtrlname //buytaskmx[it_mxbt].plancode = arg_plancode // // //ext: ////DESTROY uo_price //Destroy uo_sptprice //If rslt = 0 Then // p_clearmx() // arG_MSG = '采购订单,'+ arG_MSG //End If //Return(rslt) // // // end function public function integer wf_check_taskdamt (integer arg_scid, integer arg_taskid, ref string msg);//检查是否已开采购付款单 //0 失败 1成功 long i = 0 , rslt = 1 select COUNT(relid) into :i FROM u_taskdamt_mx INNER JOIN u_taskdamt ON u_taskdamt_mx.billid = u_taskdamt.billid where u_taskdamt_mx.relid = :arg_TaskID and u_taskdamt_mx.scid =:arg_scid and u_taskdamt.billtype = 1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 msg = "查询操作失败,采购付款单" GOTO ext END IF if i > 0 then msg= '已开采购付款单不允许删除' rslt = 0 GOTO ext end if ext: RETURN rslt end function public function integer priceaudit (long arg_scid, long arg_taskid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,i IF arg_scid < 0 THEN rslt = 0 arg_msg = "错误的分部ID" 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 priceflag = 1 THEN rslt = 0 arg_msg = "单据已经确认" GOTO ext END IF UPDATE u_buytask SET priceemp = :publ_operator, pricedate = getdate(), priceflag = 1 WHERE u_buytask.taskid = :arg_taskid AND priceflag = 0 AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在确认,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF priceflag = 1 ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer c_priceaudit (long arg_scid, long arg_taskid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,i DateTime null_dt SetNull(null_dt) IF arg_scid < 0 THEN rslt = 0 arg_msg = "错误的分部ID" 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 priceflag = 0 THEN rslt = 0 arg_msg = "单据未确认" GOTO ext END IF UPDATE u_buytask SET priceemp = '', pricedate = :null_dt, priceflag = 0 WHERE u_buytask.taskid = :arg_taskid AND priceflag = 1 AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在确认,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF priceflag = 0 ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function on uo_buytask.create call super::create TriggerEvent( this, "constructor" ) end on on uo_buytask.destroy TriggerEvent( this, "destructor" ) call super::destroy end on