$PBExportHeader$uo_saletask.sru forward global type uo_saletask from nonvisualobject end type type s_saletaskmx_mx from structure within uo_saletask end type end forward type s_saletaskmx_mx from structure long mtrlwareid decimal { 5 } qty end type global type uo_saletask from nonvisualobject end type global uo_saletask uo_saletask type variables PUBLIC PROTECTEDWRITE Long scid PUBLIC PROTECTEDWRITE Long taskid PUBLIC PROTECTEDWRITE String taskcode PUBLIC PROTECTEDWRITE DateTime opdate PUBLIC PROTECTEDWRITE String operator PUBLIC PROTECTEDWRITE Int status PUBLIC PROTECTEDWRITE DateTime accomplishdate PUBLIC PROTECTEDWRITE String permit_emp PUBLIC PROTECTEDWRITE String last_emp Long banktypeid Long moneyid Decimal damt Decimal otheramt Decimal mrate Decimal msttakeamt Int Kind Long cusid String assign_emp DateTime requiredate DateTime taskdate String freight string transcode string carcode String dscrp String dscrp2 String relcode String paytype String freight_tele String cus_address String cus_tele String cus_tele1 String cus_fax string dscrp3 string rel_rep string freight_address datetime sendTime string sendUser string fiebrelcode long priceflag //确认 Transaction commit_transaction //数据commit事务 PRIVATE: s_saletaskmx saletaskmx[] //明细结构 Long it_mxbt = 0 //明细结构数组末指针 Boolean it_newbegin = FALSE //新建标志 Boolean it_updatebegin = FALSE//修改标志 s_saletaskmx_mx taskmx[] Long it_mxbt_mx = 0 decimal mx_sumqty = 0 s_saletask_itemmx saletask_itemmx[] Long it_mxbt_item = 0 Long it_mxbt_pf = 0 //清单反扣MEI end variables forward prototypes public function integer p_reset () public function integer p_clearmx () public function integer add_dscrp (long arg_scid, long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) private function integer p_getinfo (long arg_scid, long arg_taskid, ref string arg_msg) public function integer cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer cancelpermit (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer checkmxcmpl (long arg_scid, long arg_taskid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg) public function integer finishtask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_scid, long arg_taskid, ref string arg_msg) public function integer propermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer salepermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer stopsaletask (long arg_scid, long arg_taskid, 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 updatebegin (long arg_scid, long arg_taskid, ref string arg_msg) public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit) public function integer trycmplsaletask (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 uof_del_del (long arg_scid, long arg_taskid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_msg, boolean arg_ifcommit) public function integer uof_update_mx (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlchangecode, ref string arg_msg, boolean arg_ifcommit) public function integer uof_mtrlchange (long arg_scid, long arg_taskid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, long arg_smtrlid, long arg_omtrlid, string arg_pfgroup, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx_mx (long arg_scid, long arg_mtrlwareid, decimal arg_qty, ref string arg_msg) public function integer addmxcmpl_assign (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, integer arg_plantype, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg) public function integer uof_update_relcode (long arg_scid, long arg_taskid, string arg_newrelcode, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_0_mtrlware (ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx (long arg_mtrlid, decimal arg_usaleqty, decimal arg_orderqty, decimal arg_needbuyqty, decimal arg_enprice, decimal arg_rebate, decimal arg_planprice, string arg_dscrp, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, long arg_printid, integer arg_outtype, ref string arg_msg, string arg_unit, decimal arg_rate, string arg_formula, decimal arg_addqty, string arg_mxdscrp2, decimal arg_needwfjgqty, string arg_plancode, decimal arg_tax) public function integer acceptmx (s_saletaskmx s_mx, ref string arg_msg) public function integer finishtask_cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) 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 uof_stopqty (long arg_scid, long arg_taskid, long arg_printid, decimal arg_stopqty, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_tc (long arg_scid, long arg_taskid, s_saletaskmx s_mx[], s_saletaskmx_outrep s_mx_rep[], ref string arg_msg, boolean arg_ifcommit) public function integer audit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer audit_cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx_item (s_saletask_itemmx arg_item, ref string arg_msg) public function integer save_end (ref string arg_msg, boolean arg_ifcommit) public function integer stopsaletask_cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx_chk (s_saletaskmx s_mx, ref string arg_msg) public function integer auditing_chk (ref string arg_msg) public function integer uf_create_scll (long arg_scid, long arg_billid, string arg_billcode, ref string arg_msg) public function integer uf_get_pfmtrlmx (long arg_mtrlid, decimal arg_qty, ref s_inware_cp_fkmx arg_s_fkmx, ref string arg_msg) public function integer uf_cmpl_rqmtrl (long arg_mtrlid, decimal arg_qty, long arg_lp, long arg_flag, string arg_mtrlcode, s_inware_cp_fkmx arg_s_fkmx, string arg_msg) public function integer uf_get_mtrlware (long arg_storageid, long arg_mtrlid, decimal arg_qty, string arg_mtrlcode, string arg_storagename, ref s_mtrlware_fk s_fk, ref string arg_msg) public function integer uf_update_inware_cost (ref string arg_msg, boolean arg_ifcommit) public function integer uf_destroy_scll (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit) public function integer priceaudit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer priceaudit_cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer uf_chk_assemble_qty (long arg_scid, ref string arg_msg) public function integer salecheck (long arg_scid, long arg_taskid, long arg_printid, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer salecheck_cancel (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_insertwaste (integer arg_wastetype, integer arg_taskid, integer arg_scid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_save_dytitle_saletask (long arg_hang, string arg_name, string arg_dwtitlename, string arg_execltitlename, string arg_filtername, ref string arg_msg) end prototypes public function integer p_reset ();//int p_reset() //清除对象及其明细 taskid=0 taskcode='' operator='' status=0 damt = 0 otheramt = 0 banktypeid = 0 moneyid = 0 relcode = '' freight_tele= '' it_newbegin=false it_updatebegin=false //清除明细 p_clearmx() return 1 end function public function integer p_clearmx ();//INT p_clearmx() //清除明细 it_mxbt=0 it_mxbt_item=0 msttakeamt = 0 RETURN 1 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_saletask SET DSCRP = DSCRP+' '+:arg_newdescppart Where u_saletask.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 DSCRP = DSCRP+' '+arg_newdescppart 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 private function integer p_getinfo (long arg_scid, long arg_taskid, ref string arg_msg);Int rslt = 1 SELECT taskid, TaskCode, kind, CusID, requiredate, accomplishdate, Status, Opemp, Assign_Emp, Permit_Emp, Dscrp, Dscrp2, opdate, damt, otheramt, freight, taskdate, banktypeid , moneyid, relcode, paytype, freight_tele, cus_address, cus_tele, cus_fax, mrate, scid, cus_tele1, priceflag INTO :taskid, :TaskCode, :Kind, :CusID, :requiredate, :accomplishdate, :Status, :Operator, :Assign_Emp, :Permit_Emp, :Dscrp, :Dscrp2, :opdate , :damt, :otheramt, :freight, :taskdate, :banktypeid, :moneyid, :relcode, :paytype, :freight_tele, :cus_address, :cus_tele, :cus_fax, :mrate, :scid, :cus_tele1, :priceflag FROM u_SaleTask Where u_SaleTask.taskid = :arg_taskid And scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询订单内容失败(错误订单唯一码)' GOTO ext END IF ext: 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 cnt 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 priceflag = 1 THEN rslt = 0 arg_msg = '单据已确认,不能删除' GOTO ext END IF IF Status <> 0 THEN rslt = 0 arg_msg = "订单已经审核,不可以删除" GOTO ext END IF SELECT count(*) INTO :cnt 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 = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询订单是否有相关订单收款单数据失败,"+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = "订单已经有相关订单收款单数据,不可以删除" GOTO ext END IF if sys_saletask_autowaste = 1 then //登记删除 if uof_insertwaste(0,taskid,scid,arg_msg,false) = 0 then arg_msg = '插入销售废弃单操作失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext end if end if DELETE FROM u_saletask Where u_saletask.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 DELETE FROM u_saletaskmx Where u_saletaskmx.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 IF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF ext: 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 nulldate 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 Status <> 1 THEN rslt = 0 ARG_MSG = "订单只有在已审核状态才可以执行撤消审核,请核对" GOTO ext END IF //检查发货 cnt = 0 SELECT count(*) INTO :cnt FROM u_outware,u_outwaremx WHERE ( u_outware.billtype = 1 ) AND ( u_outware.scid = u_outwaremx.scid ) AND ( u_outware.outwareid = u_outwaremx.outwareid ) AND ( u_outwaremx.relid = :arg_taskid ) AND ( u_outware.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_inware,u_inwaremx WHERE ( u_inware.billtype = 3 ) AND ( u_inware.scid = u_inwaremx.scid ) AND ( u_inware.inwareid = u_inwaremx.inwareid ) AND ( u_inwaremx.relid = :arg_taskid ) AND ( u_inware.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_buytask INNER join u_buytaskmx on u_buytask.scid = u_buytaskmx.scid AND u_buytask.taskid = u_buytaskmx.taskid WHERE u_buytask.billtype <> 0 AND u_buytask.scid = :arg_scid And u_buytaskmx.relid = :arg_taskid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ARG_MSG = "查询销售订单是否建立采购订单操作失败"+"~n"+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "销售订单已经有相关采购订单,不可以撤消审核" GOTO ext END IF //检查外协订单 已订购数 cnt = 0 SELECT COUNT(*) INTO :cnt FROM u_order_wfjg INNER join u_order_wfjgMx on u_order_wfjg.scid = u_order_wfjgMx.scid AND u_order_wfjg.wfjgid = u_order_wfjgMx.wfjgid WHERE u_order_wfjg.billtype <> 0 AND u_order_wfjg.scid = :arg_scid And u_order_wfjgMx.orderid = :arg_taskid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ARG_MSG = "查询销售订单是否建立外协订单操作失败"+"~n"+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "销售订单已经有相关外协订单,不可以撤消审核" GOTO ext END IF //检查排产 IF sys_version <> 802001 THEN Long ll_scllflag,ll_flag,ll_ifsc,i,ll_count FOR i = 1 To it_mxbt ll_count = 0 SELECT scllflag, flag, ifsc INTO :ll_scllflag, :ll_flag, :ll_ifsc FROM u_saletaskmx WHERE u_saletaskmx.scid = :arg_scid AND u_saletaskmx.taskid = :arg_taskid AND u_saletaskmx.printid = :saletaskmx[i].printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "销售订单明细行:" + String(saletaskmx[i].printid) + "信息操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF ll_scllflag = 1 THEN rslt = 0 ARG_MSG = "销售订单明细行:" + String(saletaskmx[i].printid) + ",编码:" + saletaskmx[i].mtrlcode + "已领料审核,销售订单不能撤审!" GOTO ext END IF IF ll_flag = 1 THEN rslt = 0 ARG_MSG = "销售订单明细行:" + String(saletaskmx[i].printid) + ",编码:" + saletaskmx[i].mtrlcode + "已审核,销售订单不能撤审!" GOTO ext END IF IF ll_ifsc = 1 THEN rslt = 0 ARG_MSG = "销售订单明细行:" + String(saletaskmx[i].printid) + ",编码:" + saletaskmx[i].mtrlcode + "已排产,销售订单不能撤审!" GOTO ext END IF SELECT count(*) INTO :ll_count FROM u_saletaskmx_card WHERE u_saletaskmx_card.scid = :arg_scid AND u_saletaskmx_card.taskid = :arg_taskid AND u_saletaskmx_card.mxprintid = :saletaskmx[i].printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "销售订单明细行:" + String(saletaskmx[i].printid) + "信息操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF ll_count > 0 THEN rslt = 0 ARG_MSG = "销售订单明细行:" + String(saletaskmx[i].printid) + ",编码:" + saletaskmx[i].mtrlcode + "已生成流程卡,销售订单不能撤审!" GOTO ext END IF NEXT END IF //检查计件 //个人产品工序 已开单数 cnt = 0 SELECT COUNT(*) INTO :cnt FROM u_scwg_taskwork_2,u_scwg_taskwork_2_mx WHERE u_scwg_taskwork_2_mx.billid = u_scwg_taskwork_2.billid AND u_scwg_taskwork_2_mx.orderid = :arg_taskid And u_scwg_taskwork_2_mx.relscid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ARG_MSG = "查询销售订单是否建立个人产品工序计件单操作失败"+"~n"+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "销售订单已经有相关个人产品工序计件单,不可以撤消审核" GOTO ext END IF //产品个人工序 已开单数 cnt = 0 SELECT COUNT(*) INTO :cnt FROM u_sc_taskworkmx,u_sc_taskwork WHERE u_sc_taskworkmx.billid = u_sc_taskwork.billid AND u_sc_taskworkmx.scid = u_sc_taskwork.scid And u_sc_taskwork.orderid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = "查询销售订单是否建立产品个人工序计件单操作失败"+"~n"+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "销售订单已经有相关产品个人工序计件单,不可以撤消审核" GOTO ext END IF //订单收款单 cnt = 0 select count(*) into :cnt from u_taskdamt_mx inner join u_taskdamt on u_taskdamt_mx.scid = u_taskdamt.scid and u_taskdamt_mx.billid = u_taskdamt.billid where u_taskdamt_mx.scid = :arg_scid and u_taskdamt_mx.relid = :arg_taskid and u_taskdamt.billtype = 0; 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_SaleTask SET Status = 4, permit_emp = '', permit_date = :nulldate 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 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 checkmxcmpl (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_saleQty,ls_assignQty String ls_mtrlcode SELECT u_saleTaskMx.saleQty, u_saleTaskMx.assignqty, u_mtrldef.mtrlcode INTO :ls_saleQty, :ls_assignQty, :ls_mtrlcode FROM u_saleTaskMx ,u_mtrldef WHERE ( u_saleTaskMx.TaskID = :arg_taskid ) AND ( u_saleTaskMx.MtrlID = :arg_mtrlid ) AND ( u_mtrldef.mtrlid = u_saleTaskMx.MtrlID ) AND ( u_saleTaskMx.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_saleQty < ls_assignQty + arg_addqty THEN rslt = 0 ARG_MSG = "物料["+ls_mtrlcode+"]的订单未完成数量只有"+String(ls_saleQty - ls_assignQty,'#,##0.0#')+",不能入库"+String(arg_addqty,'#,##0.0#') GOTO ext END IF ext: p_reset() Return (rslt) end function public function integer finishtask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);//手动完成 Int rslt = 1,cnt = 0 IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF rslt = 0 THEN GOTO ext IF Status <> 1 THEN rslt = 0 arg_msg = "销售订单只有在进行状态才可以执行完成,请核对" GOTO ext END IF UPDATE u_SaleTask SET status = 6, accomplishdate = getdate(), finishemp = :publ_operator WHERE ( u_SaleTask.TaskID = :arg_taskid ) AND ( u_SaleTask.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 ext: IF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF p_reset() Return (rslt) end function public function integer getinfo (long 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_saletaskmx.mtrlid, u_saletaskmx.saleqty, u_saletaskmx.price, u_saletaskmx.mxdscrp, u_mtrldef.mtrlcode, u_saletaskmx.fprice, u_saletaskmx.rebate, u_saletaskmx.status, u_saletaskmx.printid, u_saletaskmx.woodcode, u_saletaskmx.pcode, u_saletaskmx.mtrlcuscode, u_saletaskmx.enprice, u_saletaskmx.outtype, u_saletaskmx.dftsaleprice, u_saletaskmx.unit, u_saletaskmx.rate, u_saletaskmx.usaleqty, u_saletaskmx.ware_enprice, u_saletaskmx.ware_fprice, u_saletaskmx.ware_price, u_saletaskmx.orderqty, u_saletaskmx.needbuyqty, u_saletaskmx.needwfjgqty, u_saletaskmx.tax, u_saletaskmx.packqty, u_saletaskmx.plancode, u_saletaskmx.enamt, u_saletaskmx.enamt_tax, u_saletaskmx.bsamt, u_saletaskmx.bsamt_tax FROM u_saletaskmx,u_mtrldef WHERE u_saletaskmx.taskid = :arg_taskid AND u_saletaskmx.mtrlid = u_mtrldef.mtrlid AND u_saletaskmx.scid = :arg_scid Using commit_transaction; OPEN cur_inwaermx; FETCH cur_inwaermx INTO :saletaskmx[i].mtrlid,:saletaskmx[i].saleqty, :saletaskmx[i].acprice,:saletaskmx[i].dscrp, :saletaskmx[i].mtrlcode,:saletaskmx[i].fprice, :saletaskmx[i].rebate,:saletaskmx[i].status, :saletaskmx[i].printid,:saletaskmx[i].woodcode, :saletaskmx[i].pcode,:saletaskmx[i].mtrlcuscode, :saletaskmx[i].enprice,:saletaskmx[i].outtype, :saletaskmx[i].dftsaleprice,:saletaskmx[i].unit, :saletaskmx[i].rate,:saletaskmx[i].usaleqty,:saletaskmx[i].ware_enprice, :saletaskmx[i].ware_fprice,:saletaskmx[i].ware_price, :saletaskmx[i].orderqty,:saletaskmx[i].needbuyqty, :saletaskmx[i].needwfjgqty, :saletaskmx[i].tax, :saletaskmx[i].packqty, :saletaskmx[i].plancode, :saletaskmx[i].enamt, :saletaskmx[i].enamt_tax, :saletaskmx[i].bsamt, :saletaskmx[i].bsamt_tax; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_inwaermx INTO :saletaskmx[i].mtrlid,:saletaskmx[i].saleqty, :saletaskmx[i].acprice,:saletaskmx[i].dscrp, :saletaskmx[i].mtrlcode,:saletaskmx[i].fprice, :saletaskmx[i].rebate,:saletaskmx[i].status, :saletaskmx[i].printid,:saletaskmx[i].woodcode, :saletaskmx[i].pcode,:saletaskmx[i].mtrlcuscode, :saletaskmx[i].enprice,:saletaskmx[i].outtype, :saletaskmx[i].dftsaleprice,:saletaskmx[i].unit, :saletaskmx[i].rate,:saletaskmx[i].usaleqty,:saletaskmx[i].ware_enprice, :saletaskmx[i].ware_fprice,:saletaskmx[i].ware_price, :saletaskmx[i].orderqty,:saletaskmx[i].needbuyqty, :saletaskmx[i].needwfjgqty, :saletaskmx[i].tax, :saletaskmx[i].packqty, :saletaskmx[i].plancode, :saletaskmx[i].enamt, :saletaskmx[i].enamt_tax, :saletaskmx[i].bsamt, :saletaskmx[i].bsamt_tax; LOOP CLOSE cur_inwaermx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_saletaskmx Where u_saletaskmx.taskid = :arg_taskid And 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 taskid = arg_taskid scid = arg_scid it_mxbt = i - 1 it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer propermit (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 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_SaleTask // SET last_Emp = :arg_emp, // Status = 1 //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 // // // //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 salepermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);//salepermit Int rslt = 1,cnt = 0 Long ll_storageid_arr[],ll_storageid Long ll_scid_arr[],ll_scid Long ll_if_cus_mtrlware_arr[],ll_if_cus_mtrlware String ll_storagename_arr[],ls_storagename Long ll_inwaretype_arr[],ll_inwaretype Long ll_j,count,ll_i Decimal ld_add_qty Decimal ld_orderqty Long if_plancode_arr[],if_plancode String ls_status,ls_mtrlcode,ls_pcode,ls_woodcode Long ll_mtrlwareid,ll_mtrlid Long ll_cusid 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 <> 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 Decimal lde_lmsaleprice //检查客户定价 IF sys_option_saletask_dft_lmsaleprice = 1 THEN FOR ll_i = 1 To it_mxbt IF saletaskmx[ll_i].dftsaleprice = 0 THEN rslt = 0 arg_msg = "系统选项[074]限制,行:"+String(ll_i)+",产品编号: "+String(saletaskmx[ll_i].mtrlcode)+", 需先设定客户定价" GOTO ext END IF NEXT END IF UPDATE u_SaleTask SET Permit_Emp = :arg_emp , Permit_date = getdate(), Status = 1 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 //成品仓加0库存 //----------------------------------------------- IF uof_add_0_mtrlware(arg_msg, False) = 0 THEN rslt = 0 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 stopsaletask (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_SaleTask 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 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 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_SaleTask 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_SaleTask 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 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 priceflag = 1 THEN rslt = 0 arg_msg = '单据已确认,不能修改' 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() return rslt 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 Long ll_taskid String ls_sccode String ls_plancode String lss_cusname IF IsNull(dscrp) THEN dscrp = '' IF IsNull(dscrp2) THEN dscrp2 = '' IF IsNull(assign_emp) THEN assign_emp = '' IF IsNull(arg_operator) THEN arg_operator = '' IF IsNull(paytype) THEN paytype = '' IF IsNull(relcode) THEN relcode = '' IF IsNull(banktypeid) THEN banktypeid = 0 IF IsNull(moneyid) THEN moneyid = 0 IF IsNull(damt) THEN damt = 0 IF IsNull(otheramt) THEN otheramt = 0 IF IsNull(mrate) THEN mrate = 0 IF IsNull(Kind) THEN Kind = 0 IF IsNull(freight) THEN freight = '' IF IsNull(freight_tele) THEN freight_tele = '' IF IsNull(cus_address) THEN cus_address = '' IF IsNull(cus_tele) THEN cus_tele = '' IF IsNull(cus_tele1) THEN cus_tele1 = '' IF IsNull(cus_fax) THEN cus_fax = '' IF IsNull(dscrp3) THEN dscrp3 = '' IF IsNull(rel_rep) THEN rel_rep = '' IF IsNull(fiebrelcode) THEN fiebrelcode = '' IF IsNull(transcode) THEN transcode = '' IF IsNull(carcode) THEN carcode = '' IF IsNull(freight_address) THEN freight_address = '' 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_saletask; IF sqlca.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 IF Trim(assign_emp) = '' THEN rslt = 0 arg_msg = "请输入订单业务员" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_cust Where cusid = :cusid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,客户资料" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "客户未定义或错误" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM cw_banktype Where banktypeid = :banktypeid; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询结算方式失败' rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '结算方式不存在' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM cw_currency Where moneyid = :moneyid; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询币种失败' rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '币种资料不存在' rslt = 0 GOTO ext END IF IF mrate = 0 THEN arg_msg = '币种汇率错误' rslt = 0 GOTO ext END IF SELECT Top 1 getdate() Into :server_datetime From u_user Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF 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 //填写单据建立时间(最近修改时间) // //计算单据总额,要扣除优惠金额 //msttakeamt -= otheramt //messagebox("",msttakeamt) IF sys_option_mst_multimoney = 1 THEN //使用多币种 msttakeamt -= otheramt ELSE // 系统不使用多币种,转换为人民币 msttakeamt -= Round(otheramt * mrate, 2) END IF ////////////////////////////////////////////// //开始区分:新建/更新 处理 IF taskid = 0 THEN //新建 ll_taskid = f_sys_scidentity(scid,"u_saletask","taskid",arg_msg,False,commit_transaction) 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 + 'SG',Date(server_datetime),False,commit_transaction) IF taskcode = "err" THEN taskcode = '' rslt = 0 arg_msg = "无法获取销售订单编号"+"~n"+sqlca.SQLErrText GOTO ext END IF //messagebox("",freight_address) INSERT INTO u_saletask ( scid, taskcode, kind, cusid, requiredate, status, opemp, assign_emp, permit_emp, dscrp, dscrp2, opdate, taskid, damt, otheramt, freight, taskdate, transcode, carcode, banktypeid, moneyid, relcode, paytype, freight_tele, cus_address, cus_tele, cus_tele1, cus_fax, mrate, dscrp3, rel_rep, fiebrelcode, msttakeamt, freight_address) VALUES ( :scid, :taskcode, :Kind, :cusid, :requiredate, :status, :operator, :assign_emp, :permit_emp, :dscrp, :dscrp2, :opdate, :ll_taskid, :damt, :otheramt, :freight, :taskdate, :transcode, :carcode, :banktypeid, :moneyid, :relcode, :paytype, :freight_tele, :cus_address, :cus_tele, :cus_tele1, :cus_fax, :mrate, :dscrp3, :rel_rep, :fiebrelcode, :msttakeamt, :freight_address) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_saletask') > 0 THEN arg_msg = '插入销售订单操作失败,关键字ID重复' ELSEIF Pos(Lower(commit_transaction.SQLErrText),'IX_u_saletask') > 0 THEN arg_msg = '插入销售订单操作失败,单据编号重复' ELSE arg_msg = '插入销售订单操作失败,'+commit_transaction.SQLErrText END IF GOTO ext END IF //读取新taskid taskid = ll_taskid ELSE //////////////////////////////////////////////// //更新 if sys_saletask_autowaste = 1 then //登记修改 if uof_insertwaste(1,taskid,scid,arg_msg,false) = 0 then arg_msg = '插入销售废弃单操作失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext end if end if UPDATE u_saletask SET kind = :Kind, cusid = :cusid, requiredate = :requiredate, assign_emp = :assign_emp, dscrp = :dscrp, dscrp2 = :dscrp2, moddate = :opdate, modemp = :operator, damt = :damt, otheramt = :otheramt, freight = :freight, taskdate = :taskdate, transcode = :transcode, carcode = :carcode, banktypeid = :banktypeid, moneyid = :moneyid, relcode = :relcode, paytype = :paytype, freight_tele = :freight_tele, cus_address = :cus_address, cus_tele = :cus_tele, cus_tele1 = :cus_tele1, cus_fax = :cus_fax, mrate = :mrate, dscrp3 = :dscrp3, rel_rep = :rel_rep, msttakeamt = :msttakeamt, freight_address = :freight_address WHERE u_saletask.taskid = :taskid AND scid = :scid And status = 0 Using commit_transaction; IF commit_transaction.SQLCode <> 0 Or commit_transaction.SQLNRows <= 0 THEN rslt = 0 arg_msg = "更新销售订单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM u_saletaskmx Where u_saletaskmx.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 ls_plancode = '' IF sys_option_taskplancode_auto = 1 THEN ls_plancode = taskcode + '.' + String(i, '000') ELSEIF sys_option_taskplancode_auto = 2 THEN ls_plancode = taskcode ELSEIF sys_option_taskplancode_auto = 3 THEN ls_plancode = relcode ELSEIF sys_option_taskplancode_auto = 4 THEN ls_plancode = saletaskmx[i].plancode ELSEIF sys_option_taskplancode_auto = 5 THEN lss_cusname = '' SELECT Top 1 Name Into :lss_cusname From u_cust Where cusid = :cusid; IF IsNull(lss_cusname) THEN lss_cusname = '' ls_plancode = lss_cusname ELSEIF sys_option_taskplancode_auto = 6 THEN //自定义 datastore ds_pricestr String ls_gongsi,s_rtn ds_pricestr = Create datastore ds_pricestr.DataObject = 'ds_pricestr_cmpl' ds_pricestr.SetTransObject(sqlca) ds_pricestr.Retrieve() ls_gongsi = '' ls_gongsi = 'f_plug_taskplancode( ' + "'" + taskcode + "'" + " , " + string(i) + " ) " s_rtn = '' s_rtn = ds_pricestr.Modify('cmpl.expression= "'+ls_gongsi+'"') IF s_rtn <> '' THEN s_rtn = '' END IF s_rtn = String(ds_pricestr.Object.cmpl[1]) IF s_rtn = 'false' Or s_rtn = '' THEN s_rtn = '' END IF ls_plancode=s_rtn END IF INSERT INTO u_saletaskmx ( scid, taskid, mtrlid, saleqty, price, plprice, mxdscrp, fprice, rebate, status, printid, woodcode, pcode, mtrlcuscode, enprice, outtype, dftsaleprice, unit, rate, usaleqty, ware_enprice, ware_fprice, ware_price, orderqty, needbuyqty, formula, addqty, mxdscrp2, needwfjgqty, plancode, tax, packqty, gbrate, enamt, enamt_tax, bsamt, bsamt_tax, net_weight, gross_weight, cubage, requiredate, mxdscrp3, mxdscrp4, priceformula, enprice_notax, otherprice) VALUES (:scid, :taskid, :saletaskmx[i].mtrlid, :saletaskmx[i].saleqty, :saletaskmx[i].acprice, :saletaskmx[i].plprice, :saletaskmx[i].dscrp, :saletaskmx[i].fprice, :saletaskmx[i].rebate, :saletaskmx[i].status, :saletaskmx[i].printid, :saletaskmx[i].woodcode, :saletaskmx[i].pcode, :saletaskmx[i].mtrlcuscode, :saletaskmx[i].enprice, :saletaskmx[i].outtype, :saletaskmx[i].dftsaleprice, :saletaskmx[i].unit, :saletaskmx[i].rate, :saletaskmx[i].usaleqty, :saletaskmx[i].ware_enprice, :saletaskmx[i].ware_fprice, :saletaskmx[i].ware_price, :saletaskmx[i].orderqty, :saletaskmx[i].needbuyqty, :saletaskmx[i].formula, :saletaskmx[i].addqty, :saletaskmx[i].mxdscrp2, :saletaskmx[i].needwfjgqty, :ls_plancode, :saletaskmx[i].tax, :saletaskmx[i].packqty, :saletaskmx[i].gbrate, :saletaskmx[i].enamt, :saletaskmx[i].enamt_tax, :saletaskmx[i].bsamt, :saletaskmx[i].bsamt_tax, :saletaskmx[i].net_weight, :saletaskmx[i].gross_weight, :saletaskmx[i].cubage, :saletaskmx[i].requiredate, :saletaskmx[i].mxdscrp3, :saletaskmx[i].mxdscrp4, :saletaskmx[i].priceformula, :saletaskmx[i].enprice_notax, :saletaskmx[i].otherprice) 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_saletaskmx') > 0 THEN arg_msg = '插入销售订单明细操作失败,关键字单据ID重复,分部ID,序号' ELSE arg_msg = '插入销售订单明细操作失败,'+commit_transaction.SQLErrText END IF GOTO ext END IF NEXT it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; p_clearmx() ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer trycmplsaletask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);//trycmplsaletask(arg_taskid,arg_msg,arg_ifcommit) Int rslt = 1,cnt = 0,ll_status 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 = 1 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_saletaskmx.usaleqty - u_saletaskmx.consignedqty - u_saletaskmx.stopqty FROM u_saletaskmx WHERE ( u_saletaskmx.taskid = :arg_taskid ) AND ( u_saletaskmx.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_saletask SET status = 5, accomplishdate = getdate(), finishemp = :publ_operator WHERE ( u_saletask.taskid = :arg_taskid ) And u_saletask.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_saletask SET status = 1, accomplishdate = :null_dt, finishemp = '' WHERE ( u_saletask.taskid = :arg_taskid ) And u_saletask.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 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 uof_del_del (long arg_scid, long arg_taskid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DELETE FROM u_saletaskmx_mtrlchange WHERE scid = :arg_scid AND taskid = :arg_taskid AND mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode And pcode = :arg_pcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '删除原有换料失败' rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_update_mx (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlchangecode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 UPDATE u_saletaskmx SET mtrlchangecode = :arg_mtrlchangecode WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新换料备注失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_mtrlchange (long arg_scid, long arg_taskid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, long arg_smtrlid, long arg_omtrlid, string arg_pfgroup, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 INSERT INTO u_saletaskmx_mtrlchange (scid, taskid, mtrlid, status, woodcode, pcode, smtrlid, omtrlid, pfgroup) VALUES (:arg_scid, :arg_taskid, :arg_mtrlid, :arg_status, :arg_woodcode, :arg_pcode, :arg_smtrlid, :arg_omtrlid, :arg_pfgroup); IF sqlca.SQLCode <> 0 THEN arg_msg = '建立换料失败'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer acceptmx_mx (long arg_scid, long arg_mtrlwareid, decimal arg_qty, ref string arg_msg);//return 0 fail 1 success // 函数增加一个明细项 Long rslt = 1,cnt = 0,ls_i Decimal ld_noallocqty,ld_allocqty ////清除空值 //IF IsNull(arg_scid) THEN arg_scid = 0 //IF IsNull(arg_mtrlwareid) THEN arg_mtrlid = 0 //IF IsNull(arg_qty) THEN arg_qty = 0 // //IF arg_mtrlwareid = 0 OR arg_qty = 0 THEN // rslt = 1 // GOTO ext //END IF // // // // //SELECT noallocqty,allocqty INTO :ld_noallocqty,:ld_allocqty // FROM u_mtrlware // Where scid = :arg_scid // and mtrlwareid = :arg_mtrlwareid; //IF sqlca.SQLCode <> 0 THEN // arg_msg = '查询库存资料失败' // rslt = 0 // GOTO ext //END IF // //IF arg_qty > ld_noallocqty - ld_allocqty THEN // rslt = 0 // arg_msg = "库存" + String(arg_mtrlcode)+" 单价错误" // GOTO ext //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 // //String ls_status,ls_pcode,ls_woodcode // //IF sys_option_price_if_status = 0 THEN // ls_status = '' // ls_pcode = '' // ls_woodcode = '' //ELSE // ls_status = arg_status // ls_pcode = arg_pcode // ls_woodcode = arg_woodcode //END IF // // //SELECT top 1 price INTO :ld_dftsaleprice // FROM u_sale_price_list,u_sale_price_mx // WHERE u_sale_price_list.pricelistid = u_sale_price_mx.pricelistid // AND u_sale_price_list.dftflag = 1 // AND u_sale_price_mx.mtrlid = :arg_mtrlid // AND u_sale_price_mx.status = :ls_status // AND u_sale_price_mx.pcode = :ls_woodcode // AND u_sale_price_mx.pcode = :ls_pcode // AND u_sale_price_list.moneyid = :moneyid; // //IF sqlca.SQLCode <> 0 THEN ld_dftsaleprice = 0 // //FOR ls_i = 1 TO it_mxbt //合并重复项 // IF saletaskmx[it_mxbt].mtrlid = arg_mtrlid AND & // saletaskmx[it_mxbt].status = arg_status AND & // saletaskmx[it_mxbt].pcode = arg_pcode AND & // saletaskmx[it_mxbt].mtrlcuscode = arg_mtrlcuscode AND & // saletaskmx[it_mxbt].woodcode = arg_woodcode THEN // // saletaskmx[it_mxbt].saleqty = saletaskmx[it_mxbt].saleqty+arg_qty // rslt = 1 // GOTO ext // END IF //NEXT // ////写入内容 //it_mxbt++ //saletaskmx[it_mxbt].dftsaleprice = ld_dftsaleprice //saletaskmx[it_mxbt].mtrlid = arg_mtrlid //saletaskmx[it_mxbt].saleqty = arg_qty //saletaskmx[it_mxbt].plprice = arg_planprice //saletaskmx[it_mxbt].dscrp = arg_dscrp //saletaskmx[it_mxbt].mtrlcode = arg_mtrlcode //saletaskmx[it_mxbt].status = arg_status //saletaskmx[it_mxbt].printid = arg_printid //saletaskmx[it_mxbt].woodcode = arg_woodcode //saletaskmx[it_mxbt].pcode = arg_pcode //saletaskmx[it_mxbt].mtrlcuscode = arg_mtrlcuscode // //saletaskmx[it_mxbt].enprice = arg_fprice //saletaskmx[it_mxbt].rebate = arg_rebate //saletaskmx[it_mxbt].fprice = arg_fprice * ld_rate //saletaskmx[it_mxbt].acprice = arg_fprice * ld_rate * arg_rebate // //saletaskmx[it_mxbt].outtype = arg_outtype //ext: IF rslt = 0 THEN p_clearmx() RETURN(rslt) end function public function integer addmxcmpl_assign (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, integer arg_plantype, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg);//0:增加需排产数-已进仓数; 生产进仓调用 //, 采购进仓调用 //2:增加需订购数-已订购数; 采购订单调用 //3:增加需外协数-已外协数; 外协订单调用 //4:采购进仓调用 Int rslt = 1 Long i Int li_flag //查找单号 Dec lde_orderQty,lde_AssignQty,lde_needbuyqty,lde_needwfjgqty Dec lde_buytaskqty,lde_wfjgtaskqty Decimal ll_taskrate,ll_taskaddqty String ls_mtrlcode IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status = 0 THEN arg_msg = '订单未审核,不能更新!' rslt = 0 GOTO ext END IF SELECT orderqty,needbuyqty,needwfjgqty, AssignQty,buytaskqty,wfjgtaskqty INTO :lde_orderQty,:lde_needbuyqty,:lde_needwfjgqty, :lde_AssignQty,:lde_buytaskqty,:lde_wfjgtaskqty FROM u_SaleTaskMx 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 SELECT mtrlcode,taskrate,taskaddqty INTO :ls_mtrlcode,:ll_taskrate,:ll_taskaddqty FROM u_mtrldef Where mtrlid = :arg_mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询物料资料失败!'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF CHOOSE CASE arg_plantype CASE 0 //自制, 采购, 外协 总和, 进仓总数 IF sys_option_inware_cp_assignqty = 0 THEN IF lde_orderQty + lde_needbuyqty + lde_needwfjgqty - lde_AssignQty < arg_addqty THEN arg_msg = '物料['+ls_mtrlcode +'],进仓数量大于销售订单安排未进仓数量' rslt = 0 GOTO ext END IF END IF IF sys_version = 802003 THEN //只有工业版+是用审核的 IF lde_orderQty + lde_needbuyqty + lde_needwfjgqty <= lde_AssignQty + arg_addqty THEN li_flag = 5 ELSE IF lde_orderQty > 0 THEN li_flag = 1 ELSE li_flag = 0 END IF END IF ELSE li_flag = 0 END IF UPDATE u_SaleTaskMx SET AssignQty = AssignQty + :arg_addqty, flag = :li_flag WHERE scid = :scid AND taskid = :arg_taskid AND printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新销售订单已进仓数量失败~n'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF CASE 2 //采购 //ll_needbuyqty * (1 +ll_taskrate ) + ll_taskaddqty 超收比例和超收数量 IF lde_needbuyqty * (1 +ll_taskrate ) + ll_taskaddqty < lde_buytaskqty + arg_addqty THEN rslt = 0 arg_msg = "物料["+ ls_mtrlcode +"],订货数大于销售订单可订货数" IF ll_taskrate <> 0 THEN arg_msg += "~n超订比例["+String(ll_taskrate,'#,##0.####')+"]" END IF IF ll_taskaddqty <> 0 THEN arg_msg += "~n超订数量["+String(ll_taskaddqty,'#,##0.####')+"]" END IF GOTO ext END IF UPDATE u_saletaskmx SET Buytaskqty = Buytaskqty + :arg_addqty WHERE scid = :scid AND taskid = :arg_taskid AND printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新销售订单已订购数量失败~n'+commit_transaction.SQLErrText GOTO ext END IF CASE 3 //外协 IF lde_needwfjgqty < lde_wfjgtaskqty + arg_addqty THEN rslt = 0 arg_msg = "物料["+ ls_mtrlcode +"],外协订货数大于销售订单未外协数" GOTO ext END IF UPDATE u_saletaskmx SET wfjgtaskqty = wfjgtaskqty + :arg_addqty WHERE scid = :scid AND taskid = :arg_taskid AND printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新销售订单已外协数量失败~n'+commit_transaction.SQLErrText GOTO ext END IF CASE 4//采购收货 IF sys_version = 802003 THEN //只有工业版+是用审核的 IF lde_orderQty + lde_needbuyqty + lde_needwfjgqty <= lde_AssignQty + arg_addqty THEN li_flag = 5 ELSE IF lde_orderQty > 0 THEN li_flag = 1 ELSE li_flag = 0 END IF END IF ELSE li_flag = 0 END IF UPDATE u_SaleTaskMx SET AssignQty = AssignQty + :arg_addqty, flag = :li_flag WHERE scid = :scid AND taskid = :arg_taskid AND printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新销售订单已进仓数量失败~n'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END CHOOSE ext: IF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; ELSEIF rslt = 0 THEN ROLLBACK Using commit_transaction; END IF arg_msg = "销售订单["+taskcode+"]"+arg_msg RETURN rslt end function public function integer uof_update_relcode (long arg_scid, long arg_taskid, string arg_newrelcode, ref string arg_msg, boolean arg_ifcommit);//add_dscrp(string arg_newrelcode) //0 fail 1 SUCCESS Int rslt = 1 arg_newrelcode = Trim(arg_newrelcode) 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_saletask SET relcode = :arg_newrelcode Where scid = :arg_scid and u_saletask.taskid = :arg_taskid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致修改销售订单相关号操作失败"+"~n"+ commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit THEN COMMIT USING commit_transaction; END IF p_reset() Return (rslt) end function public function integer uof_add_0_mtrlware (ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 Long ll_storageid_arr[],ll_storageid Long ll_scid_arr[],ll_scid Long ll_if_cus_mtrlware_arr[],ll_if_cus_mtrlware String ll_storagename_arr[],ls_storagename Long ll_inwaretype_arr[],ll_inwaretype Long ll_j,count,ll_i Decimal ld_add_qty Decimal ld_orderqty Long if_plancode_arr[],if_plancode String ls_status,ls_mtrlcode,ls_pcode,ls_woodcode Long ll_mtrlwareid,ll_mtrlid Long ll_cusid String ls_plancode //成品仓加0库存 //----------------------------------------------- //USING commit_transaction; IF sys_option_saletask_addware = 1 & Or ( sys_option_saletask_addware_taskqty = 1 And sys_option_saletask_addware_taskqty_qty > 0 ) & Or sys_option_saletask_addware_taskqty = 2 THEN DECLARE pf_cur CURSOR FOR SELECT u_storage.storageid, u_storage.storagename, u_storage.scid, u_storage.balctype, u_storage.inwaretype, u_storage.if_plancode FROM u_storage WHERE ( u_storage.Mtrlprp = 0 ) AND ( u_storage.scid = :scid ) Using commit_transaction; OPEN pf_cur; FETCH pf_cur Into :ll_storageid,:ls_storagename,:ll_scid,:ll_if_cus_mtrlware,:ll_inwaretype,:if_plancode; DO WHILE commit_transaction.SQLCode = 0 count++ ll_storageid_arr[count] = ll_storageid ll_storagename_arr[count] = ls_storagename ll_scid_arr[count] = ll_scid ll_if_cus_mtrlware_arr[count] = ll_if_cus_mtrlware ll_inwaretype_arr[count] = ll_inwaretype if_plancode_arr[count] = if_plancode FETCH pf_cur Into :ll_storageid,:ls_storagename,:ll_scid,:ll_if_cus_mtrlware,:ll_inwaretype,:if_plancode; LOOP CLOSE pf_cur; FOR ll_i = 1 To it_mxbt ll_mtrlid = saletaskmx[ll_i].mtrlid ls_mtrlcode = saletaskmx[ll_i].mtrlcode ls_status = saletaskmx[ll_i].Status ls_pcode = saletaskmx[ll_i].pcode ls_woodcode = saletaskmx[ll_i].woodcode ld_orderqty = saletaskmx[ll_i].orderqty IF sys_option_saletask_addware = 1 THEN ld_add_qty = 0 ELSEIF sys_option_saletask_addware_taskqty = 1 THEN ld_add_qty = sys_option_saletask_addware_taskqty_qty ELSEIF sys_option_saletask_addware_taskqty = 2 THEN ld_add_qty = ld_orderqty ELSE ld_add_qty = 0 END IF FOR ll_j = 1 To count ll_cusid = 0 IF ll_if_cus_mtrlware_arr[ll_j] = 1 THEN ll_cusid = cusid ELSE ll_cusid = 0 END IF IF if_plancode_arr[ll_j] = 0 THEN ls_plancode = '' ELSE ls_plancode = saletaskmx[ll_i].plancode END IF // IF if_plancode_arr[ll_j] = 1 AND ll_inwaretype_arr[ll_j] = 3 THEN // ls_plancode = taskcode // ELSE // ls_plancode = '' // END IF // ls_plancode = saletaskmx[ll_i].plancode SELECT top 1 mtrlwareid INTO :ll_mtrlwareid FROM u_mtrlware WHERE mtrlid = :ll_mtrlid AND status = :ls_status AND storageid = :ll_storageid_arr[ll_j] AND woodcode = :ls_woodcode AND pcode = :ls_pcode AND SCID = :ll_scid_arr[ll_j] AND ( sptid = :ll_cusid OR :ll_cusid = 0 ) AND plancode = :ls_plancode Using commit_transaction; IF commit_transaction.SQLCode = 0 THEN UPDATE u_mtrlware SET noallocqty = noallocqty + :ld_add_qty WHERE mtrlwareid = :ll_mtrlwareid AND scid = :ll_scid_arr[ll_j] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ARG_MSG = '产品:' + ls_mtrlcode+'仓库:'+ll_storagename_arr[ll_j]+'增加库存失败' rslt = 0 GOTO ext END IF ELSEIF commit_transaction.SQLCode = -1 THEN ARG_MSG = '查询:'+ls_mtrlcode+'仓库:'+ll_storagename_arr[ll_j]+'库存失败' rslt = 0 GOTO ext ELSEIF commit_transaction.SQLCode = 100 THEN ll_mtrlwareid = 0 ll_mtrlwareid = f_sys_scidentity(ll_scid_arr[ll_j],"u_mtrlware","mtrlwareid",ARG_MSG,False,commit_transaction) IF ll_mtrlwareid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_mtrlware(scid, mtrlwareid, mtrlid, storageid, noallocqty, status, woodcode, pcode, sptid, plancode) VALUES(:ll_scid_arr[ll_j], :ll_mtrlwareid, :ll_mtrlid, :ll_storageid_arr[ll_j], :ld_add_qty, :ls_status, :ls_woodcode, :ls_pcode, :ll_cusid, :ls_plancode) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ARG_MSG = '产品:'+ls_mtrlcode+'仓库:'+ll_storagename_arr[ll_j]+'加0库存失败或物料已经有库存,请检查' rslt = 0 GOTO ext END IF END IF NEXT NEXT END IF ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer acceptmx (long arg_mtrlid, decimal arg_usaleqty, decimal arg_orderqty, decimal arg_needbuyqty, decimal arg_enprice, decimal arg_rebate, decimal arg_planprice, string arg_dscrp, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, long arg_printid, integer arg_outtype, ref string arg_msg, string arg_unit, decimal arg_rate, string arg_formula, decimal arg_addqty, string arg_mxdscrp2, decimal arg_needwfjgqty, string arg_plancode, decimal arg_tax);//==================================================================== // 事件: uo_saletask.Script - acceptmx ( long arg_mtrlid, decimal arg_usaleqty, decimal arg_orderqty, decimal arg_needbuyqty, decimal arg_enprice, decimal arg_rebate, decimal arg_planprice, string arg_dscrp, string arg_mtrlcode, string arg_status, string arg_woodcode, string() //-------------------------------------------------------------------- // 描述: //-------------------------------------------------------------------- // 参数: // value long arg_mtrlid // value decimal arg_usaleqty // value decimal arg_orderqty // value decimal arg_needbuyqty // value decimal arg_enprice // value decimal arg_rebate // value decimal arg_planprice // value string arg_dscrp // value string arg_mtrlcode // value string arg_status // value string arg_woodcode // value string arg_pcode // value string arg_mtrlcuscode // value long arg_printid // value integer arg_outtype // reference string arg_msg // value string arg_unit // value decimal arg_rate // value string arg_formula // value decimal arg_addqty // value string arg_mxdscrp2 // value decimal arg_needwfjgqty // value string arg_plancode // value decimal arg_tax //-------------------------------------------------------------------- // 返回: (none) //-------------------------------------------------------------------- // 作者: LHD 日期: 2013年10月23日 //-------------------------------------------------------------------- // Copyright (c) 2002-2018 RICHTA(TM), All rights reserved. //-------------------------------------------------------------------- // 修改历史: // //==================================================================== s_saletaskmx s_mx s_mx.mtrlid = arg_mtrlid s_mx.usaleqty = arg_usaleqty s_mx.orderqty = arg_orderqty s_mx.needbuyqty = arg_needbuyqty 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.status = arg_status s_mx.woodcode = arg_woodcode s_mx.pcode = arg_pcode s_mx.mtrlcuscode = arg_mtrlcuscode s_mx.printid = arg_printid s_mx.outtype = arg_outtype s_mx.unit = arg_unit s_mx.rate = arg_rate s_mx.formula = arg_formula s_mx.addqty = arg_addqty s_mx.mxdscrp2 = arg_mxdscrp2 s_mx.needwfjgqty = arg_needwfjgqty s_mx.plancode = arg_plancode s_mx.tax = arg_tax return acceptmx(s_mx, arg_msg) /* //return 0 fail 1 success // 函数增加一个明细项 Long rslt = 1,cnt = 0,ls_i Decimal ld_dftsaleprice, lde_saleqty IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF //清除空值 IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_usaleqty) THEN arg_usaleqty = 0 IF IsNull(arg_orderqty) THEN arg_orderqty = 0 IF IsNull(arg_needbuyqty) THEN arg_needbuyqty = 0 IF IsNull(arg_needwfjgqty) THEN arg_needwfjgqty = 0 IF IsNull(arg_enprice) THEN arg_enprice = 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_status) THEN arg_status = '' IF IsNull(arg_woodcode) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_outtype) THEN arg_outtype = 0 IF IsNull(arg_mtrlcuscode) THEN arg_mtrlcuscode = '' IF IsNull(arg_unit) THEN arg_unit = '' IF IsNull(arg_rate) Or arg_rate = 0 THEN arg_rate = 1 IF IsNull(arg_formula) THEN arg_formula = '' IF IsNull(arg_addqty) THEN arg_addqty = 0 IF IsNull(arg_mxdscrp2) THEN arg_mxdscrp2 = '' IF IsNull(arg_plancode) THEN arg_plancode = '' IF IsNull(arg_tax) THEN arg_tax = 0 IF arg_mtrlid = 0 Or arg_usaleqty = 0 THEN 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 IF arg_enprice * arg_rebate < 0 THEN rslt = 0 arg_msg = "产品:" + String(arg_mtrlcode)+" 单价错误" GOTO ext 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 Long ll_Mtrlorigin Decimal lde_lmsaleprice SELECT Mtrlorigin, lmsaleprice INTO :ll_Mtrlorigin, :lde_lmsaleprice 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 //取客户定价, 即已审核的客户价格表或默认价格表的价格 f_get_defsaleprice(cusid,arg_mtrlid,arg_unit,arg_status,arg_pcode,arg_woodcode,moneyid,ld_dftsaleprice) IF sys_option_saletask_plan = 1 THEN // arg_orderqty = arg_orderqty // arg_needbuyqty = arg_needbuyqty ELSEIF sys_option_saletask_plan = 2 THEN arg_orderqty = 0 arg_needbuyqty = arg_usaleqty * arg_rate arg_needwfjgqty = 0 ELSEIF sys_option_saletask_plan = 3 THEN arg_orderqty = arg_usaleqty * arg_rate arg_needbuyqty = 0 arg_needwfjgqty = 0 elseif sys_option_saletask_plan =5 THEN arg_orderqty =0 arg_needbuyqty = 0 arg_needwfjgqty = arg_usaleqty * arg_rate elseif sys_option_saletask_plan =6 THEN arg_orderqty =arg_usaleqty * arg_rate arg_needbuyqty = 0 arg_needwfjgqty = arg_usaleqty * arg_rate ELSE CHOOSE CASE ll_Mtrlorigin CASE 0,4 arg_orderqty = arg_usaleqty * arg_rate arg_needbuyqty = 0 arg_needwfjgqty = 0 CASE 2 arg_orderqty = 0 arg_needbuyqty = arg_usaleqty * arg_rate arg_needwfjgqty = 0 CASE ELSE // arg_orderqty = arg_orderqty // arg_needbuyqty = arg_needbuyqty END CHOOSE END IF IF arg_orderqty + arg_needbuyqty + arg_needwfjgqty > arg_usaleqty * arg_rate THEN arg_msg = '需排产数 + 需订购数 + 需外协数 > 订单数量,请检查' rslt = 0 GOTO ext END IF lde_saleqty = Round(arg_usaleqty * arg_rate ,5) IF arg_tax < 0 THEN rslt = 0 arg_msg = "税率不能为负数" GOTO ext END IF FOR ls_i = 1 To it_mxbt //合并重复项 IF saletaskmx[ls_i].mtrlid = arg_mtrlid And & saletaskmx[ls_i].status = arg_status And & saletaskmx[ls_i].pcode = arg_pcode And & saletaskmx[ls_i].mtrlcuscode = arg_mtrlcuscode And & saletaskmx[ls_i].woodcode = arg_woodcode And & saletaskmx[ls_i].unit = arg_unit THEN saletaskmx[ls_i].usaleqty = saletaskmx[ls_i].usaleqty + arg_usaleqty saletaskmx[ls_i].saleqty = saletaskmx[ls_i].saleqty + lde_saleqty //arg_usaleqty saletaskmx[ls_i].addqty = saletaskmx[ls_i].addqty + arg_addqty saletaskmx[ls_i].orderqty = saletaskmx[ls_i].orderqty + arg_orderqty saletaskmx[ls_i].needbuyqty = saletaskmx[ls_i].needbuyqty + arg_needbuyqty saletaskmx[ls_i].needwfjgqty = saletaskmx[ls_i].needwfjgqty + arg_needwfjgqty rslt = 1 GOTO ext END IF NEXT //写入内容 it_mxbt++ saletaskmx[it_mxbt].printid = arg_printid saletaskmx[it_mxbt].mtrlid = arg_mtrlid saletaskmx[it_mxbt].usaleqty = arg_usaleqty saletaskmx[it_mxbt].saleqty = lde_saleqty saletaskmx[it_mxbt].addqty = arg_addqty saletaskmx[it_mxbt].orderqty = arg_orderqty saletaskmx[it_mxbt].needbuyqty = arg_needbuyqty saletaskmx[it_mxbt].needwfjgqty = arg_needwfjgqty saletaskmx[it_mxbt].dftsaleprice = ld_dftsaleprice saletaskmx[it_mxbt].plprice = arg_planprice saletaskmx[it_mxbt].enprice = arg_enprice saletaskmx[it_mxbt].tax = arg_tax saletaskmx[it_mxbt].rebate = arg_rebate saletaskmx[it_mxbt].fprice = arg_enprice * mrate saletaskmx[it_mxbt].acprice = arg_enprice * mrate * arg_rebate IF sys_option_mst_multimoney = 1 THEN //使用多币种 msttakeamt += Round(arg_enprice * arg_usaleqty * arg_rebate,2) ELSE // 系统不使用多币种,转换为人民币 msttakeamt += Round(arg_enprice * mrate * arg_usaleqty * arg_rebate,2) END IF saletaskmx[it_mxbt].unit = arg_unit saletaskmx[it_mxbt].rate = arg_rate saletaskmx[it_mxbt].ware_enprice = Round((arg_enprice * arg_usaleqty)/lde_saleqty,10) saletaskmx[it_mxbt].ware_fprice = Round((arg_enprice * arg_usaleqty)/lde_saleqty,10) * mrate saletaskmx[it_mxbt].ware_price = Round((arg_enprice * arg_usaleqty)/lde_saleqty,10) * mrate * arg_rebate saletaskmx[it_mxbt].mtrlcode = arg_mtrlcode saletaskmx[it_mxbt].status = arg_status saletaskmx[it_mxbt].woodcode = arg_woodcode saletaskmx[it_mxbt].pcode = arg_pcode saletaskmx[it_mxbt].mtrlcuscode = arg_mtrlcuscode saletaskmx[it_mxbt].plancode = arg_plancode saletaskmx[it_mxbt].outtype = arg_outtype saletaskmx[it_mxbt].formula = arg_formula saletaskmx[it_mxbt].dscrp = arg_dscrp saletaskmx[it_mxbt].mxdscrp2 = arg_mxdscrp2 ext: IF rslt = 0 THEN p_clearmx() arg_msg = "第" + String(arg_printid) + "行," + arg_msg END IF Return(rslt) */ end function public function integer acceptmx (s_saletaskmx s_mx, ref string arg_msg);//return 0 fail 1 success // 函数增加一个明细项 Long rslt = 1,cnt = 0,ls_i Decimal ld_dftsaleprice, lde_saleqty If it_newbegin = False And it_updatebegin = False Then rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" Goto ext End If //清除空值 If IsNull(s_mx.mtrlid) Then s_mx.mtrlid = 0 If IsNull(s_mx.usaleqty) Then s_mx.usaleqty = 0 If IsNull(s_mx.orderqty) Then s_mx.orderqty = 0 If IsNull(s_mx.needbuyqty) Then s_mx.needbuyqty = 0 If IsNull(s_mx.needwfjgqty) Then s_mx.needwfjgqty = 0 If IsNull(s_mx.enprice) Then s_mx.enprice = 0 If IsNull(s_mx.rebate) Then s_mx.rebate = 0 If IsNull(s_mx.tax) Then s_mx.tax = 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.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.printid) Then s_mx.printid = 0 If IsNull(s_mx.outtype) Then s_mx.outtype = 0 If IsNull(s_mx.mtrlcuscode) Then s_mx.mtrlcuscode = '' If IsNull(s_mx.unit) Then s_mx.unit = '' If IsNull(s_mx.rate) Or s_mx.rate = 0 Then s_mx.rate = 1 If IsNull(s_mx.formula) Then s_mx.formula = '' If IsNull(s_mx.priceformula) Then s_mx.priceformula = '' If IsNull(s_mx.addqty) Then s_mx.addqty = 0 If IsNull(s_mx.mxdscrp2) Then s_mx.mxdscrp2 = '' If IsNull(s_mx.plancode) Then s_mx.plancode = '' If IsNull(s_mx.packqty) Then s_mx.packqty = 0 If IsNull(s_mx.net_weight) Then s_mx.net_weight = 0 If IsNull(s_mx.gross_weight) Then s_mx.gross_weight = 0 If IsNull(s_mx.cubage) Then s_mx.cubage = 0 If IsNull(s_mx.otherprice) Then s_mx.otherprice = 0 If IsNull(s_mx.mxdscrp3) Then s_mx.mxdscrp3 = '' If IsNull(s_mx.mxdscrp4) Then s_mx.mxdscrp4 = '' If IsNull(s_mx.enprice_notax) Then s_mx.enprice_notax = 0 If IsNull(s_mx.enamt_tax) Then s_mx.enamt_tax = 0 //税金 If IsNull(s_mx.enprice_notax) Then s_mx.enprice_notax = 0 //不含税单价 If s_mx.enprice_notax = 0 Then s_mx.enprice_notax = s_mx.enprice / (1 + s_mx.tax) End If If s_mx.mtrlid = 0 Or s_mx.usaleqty = 0 Then 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 If acceptmx_chk(s_mx, arg_msg) = 0 Then rslt = 0 Goto ext End If If s_mx.enprice * s_mx.rebate < 0 Then rslt = 0 arg_msg = "产品:" + String(s_mx.mtrlcode)+" 单价错误" Goto ext End If If s_mx.tax < 0 Then rslt = 0 arg_msg = "税率不能为负数" Goto ext End If Long ll_Mtrlorigin Decimal lde_lmsaleprice, lde_gbrate Select Mtrlorigin, lmsaleprice,gbrate Into :ll_Mtrlorigin, :lde_lmsaleprice, :lde_gbrate From u_mtrldef Where u_mtrldef.mtrlid = :s_mx.mtrlid ; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "查询操作失败,产品信息" Goto ext End If //取客户定价, 即已审核的客户价格表或默认价格表的价格 f_get_defsaleprice(cusid,s_mx.mtrlid,s_mx.unit,s_mx.status,s_mx.pcode,s_mx.woodcode,moneyid,ld_dftsaleprice,s_mx.usaleqty) lde_saleqty = Round(s_mx.usaleqty * s_mx.rate ,sys_option_unit_dec_sale) s_mx.fprice = s_mx.enprice * mrate If sys_option_saletask_plan = 1 Then // s_mx.orderqty = s_mx.orderqty // s_mx.needbuyqty = s_mx.needbuyqty ElseIf sys_option_saletask_plan = 2 Then s_mx.orderqty = 0 s_mx.needbuyqty = lde_saleqty //s_mx.usaleqty * s_mx.rate s_mx.needwfjgqty = 0 ElseIf sys_option_saletask_plan = 3 Then s_mx.orderqty = lde_saleqty //s_mx.usaleqty * s_mx.rate s_mx.needbuyqty = 0 s_mx.needwfjgqty = 0 ElseIf sys_option_saletask_plan = 5 Then s_mx.orderqty = 0 //s_mx.usaleqty * s_mx.rate s_mx.needbuyqty = 0 s_mx.needwfjgqty = lde_saleqty ElseIf sys_option_saletask_plan = 6 Then s_mx.orderqty = lde_saleqty //s_mx.usaleqty * s_mx.rate s_mx.needbuyqty = 0 s_mx.needwfjgqty = lde_saleqty Else Choose Case ll_Mtrlorigin Case 0,4 s_mx.orderqty = lde_saleqty //s_mx.usaleqty * s_mx.rate s_mx.needbuyqty = 0 s_mx.needwfjgqty = 0 Case 2 s_mx.orderqty = 0 s_mx.needbuyqty = lde_saleqty //s_mx.usaleqty * s_mx.rate s_mx.needwfjgqty = 0 Case 3 s_mx.needwfjgqty = lde_saleqty s_mx.orderqty = 0 s_mx.needbuyqty =0 Case Else // s_mx.orderqty = s_mx.orderqty // s_mx.needbuyqty = s_mx.needbuyqty End Choose End If // //取消限制 //IF s_mx.orderqty + s_mx.needbuyqty + s_mx.needwfjgqty > s_mx.usaleqty * s_mx.rate THEN // arg_msg = '需排产数 + 需订购数 + 需外协数 > 订单数量,请检查' // rslt = 0 // GOTO ext //END IF If sys_option_saletask_mxhb = 0 Then For ls_i = 1 To it_mxbt //合并重复项 If saletaskmx[ls_i].mtrlid = s_mx.mtrlid And & saletaskmx[ls_i].status = s_mx.status And & saletaskmx[ls_i].pcode = s_mx.pcode And & saletaskmx[ls_i].mtrlcuscode = s_mx.mtrlcuscode And & saletaskmx[ls_i].woodcode = s_mx.woodcode And & saletaskmx[ls_i].unit = s_mx.unit And & saletaskmx[ls_i].enprice = s_mx.enprice And & saletaskmx[ls_i].rebate = s_mx.rebate And & saletaskmx[ls_i].tax = s_mx.tax Then Decimal lde_add_enamt, lde_add_bsamt saletaskmx[ls_i].usaleqty += s_mx.usaleqty saletaskmx[ls_i].saleqty += lde_saleqty //s_mx.usaleqty saletaskmx[ls_i].addqty += s_mx.addqty saletaskmx[ls_i].orderqty += s_mx.orderqty saletaskmx[ls_i].needbuyqty += s_mx.needbuyqty saletaskmx[ls_i].needwfjgqty += s_mx.needwfjgqty lde_add_enamt = Round(s_mx.usaleqty * s_mx.enprice * s_mx.rebate, 2) lde_add_bsamt = Round(s_mx.usaleqty * s_mx.fprice * s_mx.rebate, 2) saletaskmx[ls_i].enamt += Round(s_mx.usaleqty * s_mx.enprice * s_mx.rebate, 2) //原币, 实价含税金额 saletaskmx[ls_i].enamt_tax += Round((s_mx.usaleqty * s_mx.enprice * s_mx.rebate) * s_mx.tax / (1 + s_mx.tax), 2) //原币, 税金 saletaskmx[ls_i].bsamt += Round(s_mx.usaleqty * s_mx.fprice * s_mx.rebate, 2) //本位币, 实价含税金额 saletaskmx[ls_i].bsamt_tax += Round((s_mx.usaleqty * s_mx.fprice * s_mx.rebate) * s_mx.tax / (1 + s_mx.tax), 2) //本位币, 税金 Choose Case sys_option_outware_sale_amt_round Case 0 //分 saletaskmx[ls_i].enamt = Round(saletaskmx[ls_i].enamt, 2) saletaskmx[ls_i].enamt_tax = Round(saletaskmx[ls_i].enamt_tax, 2) saletaskmx[ls_i].bsamt = Round(saletaskmx[ls_i].bsamt, 2) saletaskmx[ls_i].bsamt_tax = Round(saletaskmx[ls_i].bsamt_tax, 2) lde_add_enamt = Round(lde_add_enamt, 2) lde_add_bsamt = Round(lde_add_bsamt, 2) Case 1 saletaskmx[ls_i].enamt = Round(saletaskmx[ls_i].enamt, 1) saletaskmx[ls_i].enamt_tax = Round(saletaskmx[ls_i].enamt_tax, 1) saletaskmx[ls_i].bsamt = Round(saletaskmx[ls_i].bsamt, 1) saletaskmx[ls_i].bsamt_tax = Round(saletaskmx[ls_i].bsamt_tax, 1) lde_add_enamt = Round(lde_add_enamt, 1) lde_add_bsamt = Round(lde_add_bsamt, 1) Case 2 saletaskmx[ls_i].enamt = Round(saletaskmx[ls_i].enamt, 0) saletaskmx[ls_i].enamt_tax = Round(saletaskmx[ls_i].enamt_tax, 0) saletaskmx[ls_i].bsamt = Round(saletaskmx[ls_i].bsamt, 0) saletaskmx[ls_i].bsamt_tax = Round(saletaskmx[ls_i].bsamt_tax, 0) lde_add_enamt = Round(lde_add_enamt, 0) lde_add_bsamt = Round(lde_add_bsamt, 0) Case 3 saletaskmx[ls_i].enamt = Round(saletaskmx[ls_i].enamt / 10, 0) * 10 saletaskmx[ls_i].enamt_tax = Round(saletaskmx[ls_i].enamt_tax / 10, 0) * 10 saletaskmx[ls_i].bsamt = Round(saletaskmx[ls_i].bsamt / 10, 0) * 10 saletaskmx[ls_i].bsamt_tax = Round(saletaskmx[ls_i].bsamt_tax / 10, 0) * 10 lde_add_enamt = Round(lde_add_enamt / 10, 0) * 10 lde_add_bsamt = Round(lde_add_bsamt / 10, 0) * 10 Case 4 saletaskmx[ls_i].enamt = Round(saletaskmx[ls_i].enamt / 100, 0) * 100 saletaskmx[ls_i].enamt_tax = Round(saletaskmx[ls_i].enamt_tax / 100, 0) * 100 saletaskmx[ls_i].bsamt = Round(saletaskmx[ls_i].bsamt / 100, 0) * 100 saletaskmx[ls_i].bsamt_tax = Round(saletaskmx[ls_i].bsamt_tax / 100, 0) * 100 lde_add_enamt = Round(lde_add_enamt / 100, 0) * 100 lde_add_bsamt = Round(lde_add_bsamt / 100, 0) * 100 End Choose If sys_option_mst_multimoney = 1 Then //使用多币种 msttakeamt += lde_add_enamt Else // 系统不使用多币种,转换为人民币 msttakeamt += lde_add_bsamt End If rslt = 1 Goto ext End If Next End If //写入内容 it_mxbt++ saletaskmx[it_mxbt].printid = s_mx.printid saletaskmx[it_mxbt].mtrlid = s_mx.mtrlid saletaskmx[it_mxbt].usaleqty = s_mx.usaleqty saletaskmx[it_mxbt].saleqty = lde_saleqty saletaskmx[it_mxbt].addqty = s_mx.addqty saletaskmx[it_mxbt].orderqty = s_mx.orderqty saletaskmx[it_mxbt].needbuyqty = s_mx.needbuyqty saletaskmx[it_mxbt].needwfjgqty = s_mx.needwfjgqty saletaskmx[it_mxbt].dftsaleprice = ld_dftsaleprice saletaskmx[it_mxbt].plprice = s_mx.planprice saletaskmx[it_mxbt].enprice = s_mx.enprice saletaskmx[it_mxbt].tax = s_mx.tax //税率 saletaskmx[it_mxbt].rebate = s_mx.rebate saletaskmx[it_mxbt].fprice = s_mx.enprice * mrate saletaskmx[it_mxbt].acprice = s_mx.enprice * mrate * s_mx.rebate saletaskmx[it_mxbt].enamt = Round(s_mx.usaleqty * s_mx.enprice * s_mx.rebate, 2) //原币, 实价含税金额 If s_mx.enamt_tax = 0 Then saletaskmx[it_mxbt].enamt_tax = Round((s_mx.usaleqty * s_mx.enprice * s_mx.rebate) * s_mx.tax / (1 + s_mx.tax), 2) //原币, 税金 Else saletaskmx[it_mxbt].enamt_tax = s_mx.enamt_tax End If saletaskmx[it_mxbt].bsamt = Round(s_mx.usaleqty * s_mx.fprice * s_mx.rebate, 2) //本位币, 实价含税金额 saletaskmx[it_mxbt].bsamt_tax = Round((s_mx.usaleqty * s_mx.fprice * s_mx.rebate) * s_mx.tax / (1 + s_mx.tax), 2) //本位币, 税金 Choose Case sys_option_outware_sale_amt_round Case 0 //分 saletaskmx[it_mxbt].enamt = Round(saletaskmx[it_mxbt].enamt, 2) saletaskmx[it_mxbt].enamt_tax = Round(saletaskmx[it_mxbt].enamt_tax, 2) saletaskmx[it_mxbt].bsamt = Round(saletaskmx[it_mxbt].bsamt, 2) saletaskmx[it_mxbt].bsamt_tax = Round(saletaskmx[it_mxbt].bsamt_tax, 2) Case 1 saletaskmx[it_mxbt].enamt = Round(saletaskmx[it_mxbt].enamt, 1) saletaskmx[it_mxbt].enamt_tax = Round(saletaskmx[it_mxbt].enamt_tax, 1) saletaskmx[it_mxbt].bsamt = Round(saletaskmx[it_mxbt].bsamt, 1) saletaskmx[it_mxbt].bsamt_tax = Round(saletaskmx[it_mxbt].bsamt_tax, 1) Case 2 saletaskmx[it_mxbt].enamt = Round(saletaskmx[it_mxbt].enamt, 0) saletaskmx[it_mxbt].enamt_tax = Round(saletaskmx[it_mxbt].enamt_tax, 0) saletaskmx[it_mxbt].bsamt = Round(saletaskmx[it_mxbt].bsamt, 0) saletaskmx[it_mxbt].bsamt_tax = Round(saletaskmx[it_mxbt].bsamt_tax, 0) Case 3 saletaskmx[it_mxbt].enamt = Round(saletaskmx[it_mxbt].enamt / 10, 0) * 10 saletaskmx[it_mxbt].enamt_tax = Round(saletaskmx[it_mxbt].enamt_tax / 10, 0) * 10 saletaskmx[it_mxbt].bsamt = Round(saletaskmx[it_mxbt].bsamt / 10, 0) * 10 saletaskmx[it_mxbt].bsamt_tax = Round(saletaskmx[it_mxbt].bsamt_tax / 10, 0) * 10 Case 4 saletaskmx[it_mxbt].enamt = Round(saletaskmx[it_mxbt].enamt / 100, 0) * 100 saletaskmx[it_mxbt].enamt_tax = Round(saletaskmx[it_mxbt].enamt_tax / 100, 0) * 100 saletaskmx[it_mxbt].bsamt = Round(saletaskmx[it_mxbt].bsamt / 100, 0) * 100 saletaskmx[it_mxbt].bsamt_tax = Round(saletaskmx[it_mxbt].bsamt_tax / 100, 0) * 100 End Choose If sys_option_mst_multimoney = 1 Then //使用多币种 msttakeamt += saletaskmx[it_mxbt].enamt Else // 系统不使用多币种,转换为人民币 msttakeamt += saletaskmx[it_mxbt].bsamt End If saletaskmx[it_mxbt].unit = s_mx.unit saletaskmx[it_mxbt].rate = s_mx.rate saletaskmx[it_mxbt].ware_enprice = Round((s_mx.enprice * s_mx.usaleqty)/lde_saleqty,10) saletaskmx[it_mxbt].ware_fprice = Round((s_mx.enprice * s_mx.usaleqty)/lde_saleqty,10) * mrate saletaskmx[it_mxbt].ware_price = Round((s_mx.enprice * s_mx.usaleqty)/lde_saleqty,10) * mrate * s_mx.rebate saletaskmx[it_mxbt].mtrlcode = s_mx.mtrlcode saletaskmx[it_mxbt].status = s_mx.status saletaskmx[it_mxbt].woodcode = s_mx.woodcode saletaskmx[it_mxbt].pcode = s_mx.pcode saletaskmx[it_mxbt].mtrlcuscode = s_mx.mtrlcuscode saletaskmx[it_mxbt].plancode = s_mx.plancode saletaskmx[it_mxbt].outtype = s_mx.outtype saletaskmx[it_mxbt].formula = s_mx.formula saletaskmx[it_mxbt].priceformula = s_mx.priceformula saletaskmx[it_mxbt].dscrp = s_mx.dscrp saletaskmx[it_mxbt].mxdscrp2 = s_mx.mxdscrp2 saletaskmx[it_mxbt].mxdscrp3 = s_mx.mxdscrp3 saletaskmx[it_mxbt].mxdscrp4 = s_mx.mxdscrp4 saletaskmx[it_mxbt].packqty = s_mx.packqty saletaskmx[it_mxbt].otherprice = s_mx.otherprice saletaskmx[it_mxbt].gbrate = lde_gbrate //saletaskmx[it_mxbt].gbotheramt = lde_gbotheramt saletaskmx[it_mxbt].net_weight = s_mx.net_weight saletaskmx[it_mxbt].gross_weight = s_mx.gross_weight saletaskmx[it_mxbt].cubage = s_mx.cubage saletaskmx[it_mxbt].requiredate = s_mx.requiredate saletaskmx[it_mxbt].enprice_notax = s_mx.enprice_notax //不含税单价 ext: If rslt = 0 Then p_clearmx() arg_msg = "第" + String(s_mx.printid) + "行," + arg_msg End If Return(rslt) end function public function integer finishtask_cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);//撤销手动完成 Int rslt = 1,cnt = 0 IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF rslt = 0 THEN GOTO ext IF Status <> 6 THEN rslt = 0 arg_msg = "销售订单只有在手动完成状态才可以撤销完成,请核对" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_saletask INNER join u_saletaskmx on u_saletask.scid = u_saletaskmx.scid AND u_saletask.taskid = u_saletaskmx.taskid WHERE ( u_SaleTask.TaskID = :arg_taskid ) AND ( u_SaleTask.scid = :arg_scid) AND u_saletaskmx.usaleqty - u_saletaskmx.consignedqty > 0 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询销售订单信息失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF Not cnt > 0 THEN rslt = 0 arg_msg = '销售订单明细已完成,不能手动撤销完成' GOTO ext END IF UPDATE u_SaleTask SET status = 1, accomplishdate = NULL, finishemp = '' WHERE ( u_SaleTask.TaskID = :arg_taskid ) AND ( u_saletask.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 ext: IF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF p_reset() 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);//addmxcmpl(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 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 lde_upsalerate, lde_upsaleqty Decimal ls_uSaleQty,ls_consignedQty, lde_stopqty String ls_mtrlcode SELECT u_SaleTaskMx.uSaleQty, u_SaleTaskMx.consignedQty, u_SaleTaskMx.stopqty, u_mtrldef.mtrlcode, u_mtrldef.upsalerate, u_mtrldef.upsaleqty INTO :ls_uSaleQty, :ls_consignedQty, :lde_stopqty, :ls_mtrlcode, :lde_upsalerate, :lde_upsaleqty FROM u_SaleTaskMx ,u_mtrldef WHERE ( u_mtrldef.mtrlid = u_SaleTaskMx.MtrlID ) AND ( u_saletaskmx.scid = :arg_scid) AND ( u_SaleTaskMx.TaskID = :arg_taskid ) AND ( u_SaleTaskMx.printid = :arg_printid ) USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "产品["+ls_mtrlcode+"]查询销售订单已完成数量操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF ls_uSaleQty = abs(ls_uSaleQty * (1 + lde_upsalerate ) + lde_upsaleqty) IF ls_uSaleQty < ls_consignedQty + lde_stopqty + arg_addqty THEN rslt = 0 ARG_MSG = "产品["+ls_mtrlcode+"]的未完成数量只有"+String(ls_uSaleQty - ls_consignedQty - lde_stopqty,'#,##0.0#')+",不能出仓"+String(arg_addqty,'#,##0.0#') GOTO ext END IF UPDATE u_SaleTaskMx SET consignedQty = consignedQty +:arg_addqty WHERE( u_saletaskmx.scid = :arg_scid) AND ( u_SaleTaskMx.TaskID = :arg_taskid ) AND ( u_SaleTaskMx.printid = :arg_printid ) 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 uof_stopqty (long arg_scid, long arg_taskid, long arg_printid, decimal arg_stopqty, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag DateTime null_dt DateTime server_datetime String ls_stopemp Decimal ld_saleqty,ld_consignedQty Decimal ld_enprice,ld_rebate,ld_stopamt Decimal ld_stopqty_ori,ld_stopamt_ori Long ll_mtrlid Long ll_assignid,j Decimal ld_assignqty,ld_qty_cancel,ld_qty String ls_status,ls_woodcode,ls_pcode Int li_outtype,li_ifpackpro s_mtrlcfg_expr s_pz[] Long it_mxt,cnt String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[] Int li_ifover[],li_dipztype[] Decimal ld_Sonscale[] Long ll_SonMtrlid[] Long ll_l,ll_j 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 arg_stopqty < 0 THEN arg_msg = '订单终止数不能少于0,请检查' rslt = 0 GOTO ext END IF IF arg_stopqty = 0 THEN SetNull(server_datetime) ls_stopemp = '' ELSE ls_stopemp = publ_operator IF arg_stopreason = "" THEN arg_msg = '请填写终止原因' rslt = 0 GOTO ext END IF 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_SaleTaskMx.SaleQty, u_SaleTaskMx.consignedQty, u_SaleTaskMx.enprice, u_SaleTaskMx.rebate, u_SaleTaskMx.stopqty, u_SaleTaskMx.mtrlid, u_SaleTaskMx.status, u_SaleTaskMx.woodcode, u_SaleTaskMx.pcode INTO :ld_saleqty, :ld_consignedQty, :ld_enprice, :ld_rebate, :ld_stopqty_ori, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode FROM u_SaleTaskMx INNER JOIN u_mtrldef ON u_SaleTaskMx.MtrlID = u_mtrldef.mtrlid WHERE u_SaleTaskMx.scid = :arg_scid AND u_SaleTaskMx.TaskID = :arg_taskid And u_SaleTaskMx.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_stopqty > ld_saleqty - ld_consignedQty THEN arg_msg = '明细物料未发货单数只有:'+String(ld_saleqty - ld_consignedQty,'#,##0.##########')+',不能终止:'+String(arg_stopqty,'#,##0.##########') rslt = 0 GOTO ext END IF IF arg_stopqty > 0 THEN END IF UPDATE u_saletaskmx SET stopqty = :arg_stopqty, 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 = '更新明细中止标记失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF //IF uo_option_m_msttake = 1 THEN //使用多币种 // ld_stopamt = round(ld_enprice * arg_stopqty * ld_rebate,2) // ld_stopamt_ori = round(ld_enprice * ld_stopqty_ori * ld_rebate,2) //ELSE // 系统不使用多币种,转换为人民币 // ld_stopamt = round(ld_enprice * mrate * arg_stopqty * ld_rebate,2) // ld_stopamt_ori = round(ld_enprice * mrate * ld_stopqty_ori * ld_rebate,2) //END IF //UPDATE u_saletask // SET msttakeamt = msttakeamt + :ld_stopamt_ori - :ld_stopamt // WHERE scid = :arg_scid // And TaskID = :arg_taskid Using commit_transaction ; // //IF commit_transaction.SQLCode <> 0 THEN // arg_msg = '更新订单单据金额失败,'+sqlca.SQLErrText // rslt = 0 // GOTO ext //END IF // IF trycmplsaletask(arg_scid,arg_taskid,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_ifcommit THEN COMMIT Using commit_transaction ; END IF RETURN rslt end function public function integer uof_add_tc (long arg_scid, long arg_taskid, s_saletaskmx s_mx[], s_saletaskmx_outrep s_mx_rep[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long i FOR i = 1 To UpperBound(s_mx) UPDATE u_saletaskmx SET gbrate = :s_mx[i].gbrate, gbotheramt = :s_mx[i].gbotheramt WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :s_mx[i].printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新订单明细失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF NEXT //删除原有明细 DELETE FROM u_SaleTaskMx_outrep Where taskid = :arg_taskid And scid = :arg_scid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有提成明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 To UpperBound(s_mx_rep) INSERT INTO u_SaleTaskMx_outrep (scid, taskid, outrepname, rate, amt) VALUES (:arg_scid, :arg_taskid, :s_mx_rep[i].outrepname, :s_mx_rep[i].rate,:s_mx_rep[i].amt); IF sqlca.SQLCode <> 0 THEN arg_msg = '插入订单提成明细失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer audit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);//audit Int rslt = 1,cnt = 0 Long ll_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 sys_option_saletask_use_priceflag = 1 THEN //系统选项284,启动确认流程 ,请先确认 IF priceflag = 0 THEN rslt = 0 arg_msg = '系统启动确认流程 ,请先确认,系统选项284' GOTO ext END IF 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 //sys_option_saletask_chk_wkd //销售订单审核时,使用物料清单计算库存 系统选项291 IF sys_option_saletask_chk_wkd = 1 THEN IF uf_chk_assemble_qty(scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF Decimal lde_lmsaleprice //检查客户定价 IF sys_option_saletask_dft_lmsaleprice = 1 THEN FOR ll_i = 1 To it_mxbt IF saletaskmx[ll_i].dftsaleprice = 0 THEN rslt = 0 arg_msg = "系统选项[074]限制,行:"+String(ll_i)+",产品编号: "+String(saletaskmx[ll_i].mtrlcode)+", 需先设定客户定价" GOTO ext END IF NEXT END IF /*MEI:生成领料单操作 20160511*/ IF auditing_chk(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_SaleTask SET auditEmp = :arg_emp , auditdate = getdate(), Status = 4 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 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 audit_cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 DateTime nulldate 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 Status <> 4 THEN rslt = 0 ARG_MSG = "订单只有在待二审状态才可以执行撤消审核,请核对" GOTO ext END IF UPDATE u_SaleTask SET Status = 0, auditEmp = '', auditdate = :nulldate 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 IF uf_destroy_scll(scid, taskid, arg_msg, False) = 0 THEN rslt = 0 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 acceptmx_item (s_saletask_itemmx arg_item, ref string arg_msg);Int rslt = 1 Long cnt cnt = 0 IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF IF IsNull(arg_item.scid) THEN arg_item.scid = 0 IF IsNull(arg_item.saletaskid) THEN arg_item.saletaskid = 0 IF IsNull(arg_item.printid) THEN arg_item.printid = 0 IF IsNull(arg_item.itemid) THEN arg_item.itemid = 0 IF IsNull(arg_item.amt) THEN arg_item.amt = 0 IF IsNull(arg_item.amtyfh) THEN arg_item.amtyfh = 0 IF IsNull(arg_item.mxdscrp) THEN arg_item.mxdscrp = '' IF IsNull(arg_item.itype) THEN arg_item.itype =1//默认方向类型为增项 IF arg_item.itemid = 0 Or arg_item.amt = 0 THEN rslt = 1 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_itemdef Where itemid = :arg_item.itemid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询收支项目是否存在失败,'+commit_transaction.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '第'+String(arg_item.printid)+'行,收支项目不存在,请检查' GOTO ext END IF it_mxbt_item++ saletask_itemmx[it_mxbt_item] = arg_item ext: IF rslt = 0 THEN p_clearmx() RETURN rslt end function public function integer save_end (ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 Long i DELETE FROM u_saletask_itemmx WHERE u_saletask_itemmx.saletaskid = :taskid And u_saletask_itemmx.scid = :scid 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_item INSERT INTO u_saletask_itemmx (scid, saletaskid, printid, itemid, amt, amtyfh, mxdscrp, itype ) VALUES (:scid, :taskid, :saletask_itemmx[i].printid, :saletask_itemmx[i].itemid, :saletask_itemmx[i].amt, :saletask_itemmx[i].amtyfh, :saletask_itemmx[i].mxdscrp, :saletask_itemmx[i].itype ) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN IF it_newbegin THEN taskid = 0 //还原outwareid rslt = 0 arg_msg = "因网络或其它原因导致插入费用明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; p_clearmx() it_mxbt_item = 0 ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; it_mxbt_item = 0 END IF RETURN rslt end function public function integer stopsaletask_cancel (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_SaleTask 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 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 acceptmx_chk (s_saletaskmx s_mx, ref string arg_msg);int rslt = 1 //检查物料id Int li_statusflag,li_woodcodeflag,li_pcodeflag Int li_status_check,li_woodcode_check,li_pcode_check Decimal ld_capacity,ld_capacity_zj s_mtrlcfg_expr s_pz[] String ls_status_zj Long ll_i //检查物料id SELECT statusflag, woodcodeflag, pcodeflag, status_check, woodcode_check, pcode_check INTO :li_statusflag, :li_woodcodeflag, :li_pcodeflag, :li_status_check, :li_woodcode_check, :li_pcode_check FROM u_mtrldef Where u_mtrldef.mtrlid = :s_mx.mtrlid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "第" + String(s_mx.printid) + "行,查询操作失败,编码:"+s_mx.mtrlcode GOTO ext END IF IF li_statusflag = 2 THEN IF s_mx.status = '' THEN arg_msg = '行:'+String(s_mx.printid)+',物料'+sys_option_change_status + '字段使用组合配置,请输入' rslt = 0 GOTO ext END IF ELSEIF li_statusflag = 4 And li_status_check = 1 THEN IF s_mx.status = '' THEN arg_msg = '行:'+String(s_mx.printid)+',物料'+sys_option_change_woodcode + '字段使用部件选配,请输入' rslt = 0 GOTO ext END IF ELSEIF li_statusflag = 1 Or li_statusflag = 0 THEN IF f_check_status(1,s_mx.status) = 0 THEN rslt = 0 arg_msg = '行:'+String(s_mx.printid)+",查询操作失败,可能"+sys_option_change_status+"未定义,物料:"+s_mx.mtrlcode+",内容:"+s_mx.status GOTO ext END IF END IF IF li_woodcodeflag = 4 And li_woodcode_check = 1 THEN IF s_mx.woodcode = '' THEN arg_msg = '行:'+String(s_mx.printid)+',物料'+sys_option_change_woodcode + '字段使用部件选配,请输入' rslt = 0 GOTO ext END IF ELSEIF li_woodcodeflag = 1 Or li_woodcodeflag = 0 THEN IF f_check_status(2,s_mx.woodcode) = 0 THEN rslt = 0 arg_msg = '行:'+String(s_mx.printid)+",查询操作失败,可能"+sys_option_change_woodcode+"未定义,物料:"+s_mx.mtrlcode+",内容:"+s_mx.woodcode GOTO ext END IF END IF IF li_pcodeflag = 4 And li_pcode_check = 1 THEN IF s_mx.pcode = '' THEN arg_msg = '行:'+String(s_mx.printid)+',物料'+sys_option_change_pcode + '字段使用部件选配,请输入' rslt = 0 GOTO ext END IF ELSEIF li_pcodeflag = 1 Or li_pcodeflag = 0 THEN IF f_check_status(3,s_mx.pcode) = 0 THEN rslt = 0 arg_msg = '行:'+String(s_mx.printid)+",查询操作失败,可能"+sys_option_change_pcode+"未定义,物料:"+s_mx.mtrlcode+",内容:"+s_mx.pcode GOTO ext END IF END IF ext: return rslt end function public function integer auditing_chk (ref string arg_msg);Long rslt = 1 Long i //IF sys_option_hide_ware = 0 THEN // IF billtype <> 9 THEN // IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF // ELSE // IF Not sysautobuild THEN // IF dscrp = '盘点表审核自动生成盘盈单' THEN // arg_msg = '系统自动生成的单据不能手动审核' // rslt = 0 // GOTO ext // END IF // END IF // END IF //END IF //// //建立自动反扣领料单 IF uf_create_scll(scid,taskid,taskcode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //IF uf_update_inware_cost ( arg_msg, False) <> 1 THEN // rslt = 0 // GOTO ext //END IF ext: RETURN rslt end function public function integer uf_create_scll (long arg_scid, long arg_billid, string arg_billcode, ref string arg_msg);//uf_create_scll(arg_scid,arg_billid,arg_billcode,arg_storageid,arg_storageid_arr,arg_mtrlid_arr,arg_qty_arr,arg_msg) Long rslt = 1 Long i, j,k,l,pid, ll_cnt, ll_cnt_2 String ls_mtrlcode,ls_storagename,ls_unit Long ll_rqmtrlid Long ll_taskid, ll_printid, ll_ifrel Long ll_outwareid Long ll_storageid_arr[], ll_wrkgrpid_arr[], ll_mtrlid_arr[],ll_rqmtrlid_arr[],ll_storageid_bill[], ll_wrkgrpid_bill[] Decimal lde_qty_arr[], lde_add_DstrQty, lde_trueRqqty, lde_DstrQty uo_outware_scll uo_ware uo_ware = Create uo_outware_scll uo_ware.commit_transaction = commit_transaction s_mtrlware_fk s_fk, s_fk_null s_inware_cp_fkmx s_fpmx,s_null FOR i = 1 To it_mxbt //// //获取产品反扣物料资料 s_fpmx = s_null //mei IF uf_get_pfmtrlmx(saletaskmx[i].mtrlid,saletaskmx[i].saleqty,s_fpmx,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //汇总需领料的物料 FOR j = 1 To UpperBound(s_fpmx.storageid) ll_rqmtrlid = 0 IF saletaskmx[i].taskid > 0 THEN SELECT rqmtrlid INTO :ll_rqmtrlid FROM u_saleRqMtrl_scll WHERE taskID = :saletaskmx[i].taskid AND printid = :saletaskmx[i].printid And mtrlid = :s_fpmx.mtrlid[j]; IF sqlca.SQLCode <> 0 THEN ll_rqmtrlid = 0 END IF END IF //统计物料 FOR k = 1 To UpperBound(ll_storageid_arr) IF ll_storageid_arr[k] = s_fpmx.storageid[j] And & ll_mtrlid_arr[k] = s_fpmx.mtrlid[j] And & ll_wrkgrpid_arr[k] = s_fpmx.wrkgrpid[j] And & ll_rqmtrlid_arr[k] = ll_rqmtrlid THEN lde_qty_arr[k] = lde_qty_arr[k] + s_fpmx.qty[j] GOTO nxt END IF NEXT ll_cnt++ ll_storageid_arr[ll_cnt] = s_fpmx.storageid[j] ll_wrkgrpid_arr[ll_cnt] = s_fpmx.wrkgrpid[j] ll_mtrlid_arr[ll_cnt] = s_fpmx.mtrlid[j] ll_rqmtrlid_arr[ll_cnt] = ll_rqmtrlid lde_qty_arr[ll_cnt] = s_fpmx.qty[j] nxt: //统计仓库 FOR k = 1 To UpperBound(ll_storageid_bill) IF ll_storageid_bill[k] = s_fpmx.storageid[j] And ll_wrkgrpid_bill[k] = s_fpmx.wrkgrpid[j] THEN GOTO nxt2 END IF NEXT ll_cnt_2++ ll_storageid_bill[ll_cnt_2] = s_fpmx.storageid[j] ll_wrkgrpid_bill[ll_cnt_2] = s_fpmx.wrkgrpid[j] nxt2: NEXT NEXT //按仓库, 工作中心 生成领料单 FOR i = 1 To UpperBound(ll_storageid_bill) pid = 0 IF uo_ware.newbegin(arg_scid,3,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_ware.outdate = DateTime(Today(),Now()) uo_ware.outrep = publ_operator uo_ware.dscrp = '销售订单自动生成领料' uo_ware.storageid = ll_storageid_bill[i] uo_ware.relid = ll_wrkgrpid_bill[i] /// //领料组、工作中心ID uo_ware.relint_1 = arg_billid uo_ware.part = arg_billcode SELECT storagename INTO :ls_storagename FROM u_storage WHERE storageid = :ll_storageid_bill[i] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询仓库资料失败' GOTO ext END IF FOR j = 1 To UpperBound(ll_storageid_arr) IF ll_storageid_arr[j] = ll_storageid_bill[i] And ll_wrkgrpid_arr[j] = ll_wrkgrpid_bill[i] THEN s_fk = s_fk_null ll_rqmtrlid = 0 ll_taskid = 0 ll_printid = 0 ll_ifrel = 0 IF ll_rqmtrlid_arr[j] > 0 THEN SELECT taskID, printid,trueRqqty , DstrQty INTO :ll_taskid, :ll_printid, :lde_trueRqqty, :lde_DstrQty FROM u_saleRqMtrl_scll Where rqmtrlid = :ll_rqmtrlid_arr[j] Using commit_transaction; IF commit_transaction.SQLCode = 0 THEN ll_rqmtrlid = ll_rqmtrlid_arr[j] ll_ifrel = 1 END IF END IF SELECT mtrlcode,unit INTO :ls_mtrlcode,:ls_unit FROM u_mtrldef Where mtrlid = :ll_mtrlid_arr[j] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料资料失败' GOTO ext END IF lde_add_DstrQty = lde_qty_arr[j] IF ll_ifrel = 1 THEN IF lde_add_DstrQty > lde_trueRqqty - lde_DstrQty THEN lde_add_DstrQty = lde_trueRqqty - lde_DstrQty END IF END IF IF lde_add_DstrQty > 0 THEN //MEI IF uf_get_mtrlware( ll_storageid_bill[i],ll_mtrlid_arr[j],lde_add_DstrQty,ls_mtrlcode,ls_storagename,s_fk,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF FOR k = 1 To UpperBound(s_fk.mtrlwareid) pid++ IF uo_ware.acceptmx(s_fk.mtrlwareid[k],& s_fk.qty[k], s_fk.addqty[k], s_fk.cost[k],1,& '',pid,arg_msg,ll_ifrel,ll_taskid,ll_printid,ll_rqmtrlid,& 0,0,0,& ls_unit,1,'','') = 0 THEN rslt = 0 GOTO ext END IF NEXT END IF END IF NEXT IF uo_ware.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF sys_option_saletask_autocreatescll = 1 THEN ll_outwareid = uo_ware.outwareid IF uo_ware.getinfo(arg_scid,ll_outwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware.auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT ext: Destroy uo_ware RETURN rslt end function public function integer uf_get_pfmtrlmx (long arg_mtrlid, decimal arg_qty, ref s_inware_cp_fkmx arg_s_fkmx, ref string arg_msg);Long rslt = 1 Long ll_ifautoscll,ll_fklevel,ll_sauditflag String ls_mtrlcode SELECT ifautoscll_saletask,fklevel,mtrlcode,sauditflag INTO :ll_ifautoscll,:ll_fklevel,:ls_mtrlcode,:ll_sauditflag FROM u_mtrldef Where mtrlid = :arg_mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询产品资料失败,产品唯一码错误' GOTO ext END IF IF ll_ifautoscll = 0 THEN rslt = 1 GOTO ext END IF IF ll_sauditflag = 0 THEN rslt = 0 arg_msg = '产品['+ls_mtrlcode+']清单还没审核,请先审核' GOTO ext END IF Dec lde_Sonscale,lde_sonloss,lde_sondecloss Long ll_SonMtrlid,ll_storageid,k,ll_dft,cnt,ll_wrkgrpid String ls_mtrlcode_pf IF ll_fklevel = 0 THEN // //清单反扣直接下级物料 datastore ds_pfmx ds_pfmx = Create datastore ds_pfmx.DataObject = 'ds_mtrl_pfmx' ds_pfmx.SetTransObject(commit_transaction) ds_pfmx.Retrieve(arg_mtrlid) IF ds_pfmx.RowCount() = 0 THEN rslt = 1 GOTO ext END IF FOR k = 1 To ds_pfmx.RowCount() IF ll_SonMtrlid <> ds_pfmx.Object.u_prdpf_sonmtrlid[k] THEN ll_SonMtrlid = ds_pfmx.Object.u_prdpf_sonmtrlid[k] ll_storageid = ds_pfmx.Object.u_mtrl_storage_storageid[k] lde_Sonscale = ds_pfmx.Object.u_prdpf_sonscale[k] lde_sonloss = ds_pfmx.Object.u_prdpf_sonloss[k] lde_sondecloss = ds_pfmx.Object.u_prdpf_sondecloss[k] ls_mtrlcode_pf = ds_pfmx.Object.u_mtrldef_mtrlcode[k] ll_wrkgrpid = ds_pfmx.Object.u_prdpf_wrkgrpid[k] IF ll_wrkgrpid <= 0 THEN rslt = 0 arg_msg = '产品['+ls_mtrlcode+']清单中物料['+ls_mtrlcode_pf+']还没设定领料组,请先设定' GOTO ext END IF IF ds_pfmx.Object.u_mtrl_storage_dft[k] <> 1 THEN rslt = 0 arg_msg = '物料['+ls_mtrlcode_pf+']还没设定默认反扣仓库,请先设定' GOTO ext END IF cnt++ arg_s_fkmx.storageid[cnt] = ll_storageid arg_s_fkmx.mtrlid[cnt] = ll_SonMtrlid arg_s_fkmx.wrkgrpid[cnt] = ll_wrkgrpid arg_s_fkmx.qty[cnt] = arg_qty * lde_Sonscale / (1 - lde_sonloss) + lde_sondecloss END IF NEXT ELSEIF ll_fklevel = 1 THEN // //清单反扣最底层物料 IF uf_cmpl_rqmtrl(arg_mtrlid,arg_qty,0,ll_sauditflag,ls_mtrlcode,arg_s_fkmx,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF ext: RETURN rslt end function public function integer uf_cmpl_rqmtrl (long arg_mtrlid, decimal arg_qty, long arg_lp, long arg_flag, string arg_mtrlcode, s_inware_cp_fkmx arg_s_fkmx, string arg_msg);Long rslt = 1 Long ll_cnt,ll_lp,ll_rft,k,i Dec lde_Sonscale,lde_sonloss,lde_sondecloss,lde_qty Long ll_SonMtrlid,ll_storageid,ll_dft,ll_flag,ll_wrkgrpid String ls_mtrlcode_pf,ls_mtrlcode Long ll_SonMtrlid_arr[],ll_storageid_arr[],ll_flag_arr[],ll_wrkgrpid_arr[] Dec ll_qty_arr[] String ls_mtrlcode_arr[] SELECT count(*) INTO :ll_cnt FROM u_PrdPF Where u_PrdPF.mtrlid = :arg_mtrlid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询产品['+arg_mtrlcode+']清单失败' GOTO ext END IF IF arg_lp = 0 THEN IF ll_cnt = 0 THEN rslt = 0 arg_msg = '产品['+arg_mtrlcode+']还没设定清单,请先设定' GOTO ext END IF IF arg_flag = 0 THEN rslt = 0 arg_msg = '产品['+arg_mtrlcode+']清单还没审核,请先审核' GOTO ext END IF ELSE IF ll_cnt = 0 THEN rslt = 2 GOTO ext ELSEIF ll_cnt > 0 AND arg_flag = 0 THEN rslt = 0 arg_msg = '物料['+arg_mtrlcode+']清单还没审核,请先审核' GOTO ext END IF END IF ll_cnt = 0 DECLARE cur_pf CURSOR FOR SELECT u_PrdPF.Sonscale, u_PrdPF.sonloss, u_PrdPF.sondecloss, u_PrdPF.SonMtrlid, u_mtrldef.mtrlcode, u_mtrldef.sauditflag, u_PrdPF.wrkgrpid FROM u_PrdPF INNER JOIN u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid Where ( u_PrdPF.mtrlid = :arg_mtrlid ) USING commit_transaction; OPEN cur_pf; FETCH cur_pf INTO :lde_Sonscale,:lde_sonloss,:lde_sondecloss,:ll_SonMtrlid,:ls_mtrlcode_pf,:ll_flag,:ll_wrkgrpid; DO WHILE commit_transaction.SQLCode = 0 lde_qty = arg_qty * lde_Sonscale / (1 - lde_sonloss) + lde_sondecloss k++ ll_SonMtrlid_arr[k] = ll_SonMtrlid ll_qty_arr[k] = lde_qty ll_flag_arr[k] = ll_flag ls_mtrlcode_arr[k] = ls_mtrlcode_pf ll_wrkgrpid_arr[k] = ll_wrkgrpid FETCH cur_pf INTO :lde_Sonscale,:lde_sonloss,:lde_sondecloss,:ll_SonMtrlid,:ls_mtrlcode_pf,:ll_flag,:ll_wrkgrpid; LOOP CLOSE cur_pf; FOR i = 1 TO UpperBound(ll_SonMtrlid_arr) ll_lp = arg_lp + 1 IF ll_wrkgrpid_arr[i] <= 0 THEN rslt = 0 arg_msg = '产品['+arg_mtrlcode+']清单中物料['+ls_mtrlcode_arr[i]+']领料组还没设定,请先设定' GOTO ext END IF ll_rft = uf_cmpl_rqmtrl(ll_SonMtrlid_arr[i],ll_qty_arr[i],ll_lp,ll_flag_arr[i],ls_mtrlcode_arr[i],arg_s_fkmx,arg_msg) IF ll_rft = 0 THEN rslt = 0 GOTO ext ELSEIF ll_rft = 1 THEN CONTINUE END IF IF ll_SonMtrlid_arr[i] > 0 THEN SELECT count(*) INTO :ll_cnt FROM u_mtrldef LEFT OUTER JOIN u_mtrl_storage ON u_mtrldef.mtrlid = u_mtrl_storage.mtrlid WHERE u_mtrldef.mtrlid = :ll_SonMtrlid_arr[i] AND IsNull(u_mtrl_storage.dft,0) = 1 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料['+ls_mtrlcode_arr[i]+']默认反扣仓库失败' GOTO ext END IF IF ll_cnt = 0 THEN rslt = 0 arg_msg = '物料['+ls_mtrlcode_arr[i]+']还没设定默认反扣仓库,请先设定' GOTO ext ELSEIF ll_cnt > 1 THEN rslt = 0 arg_msg = '物料['+ls_mtrlcode_arr[i]+']设定了多个默认反扣仓库,只能设置一个' GOTO ext END IF SELECT u_mtrl_storage.storageid INTO :ll_storageid FROM u_mtrldef LEFT OUTER JOIN u_mtrl_storage ON u_mtrldef.mtrlid = u_mtrl_storage.mtrlid WHERE u_mtrldef.mtrlid = :ll_SonMtrlid_arr[i] AND IsNull(u_mtrl_storage.dft,0) = 1 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料['+ls_mtrlcode_arr[i]+']默认反扣仓库失败' GOTO ext END IF END IF it_mxbt_pf++ arg_s_fkmx.storageid[it_mxbt_pf] = ll_storageid arg_s_fkmx.mtrlid[it_mxbt_pf] = ll_SonMtrlid_arr[i] arg_s_fkmx.wrkgrpid[it_mxbt_pf] = ll_wrkgrpid_arr[i] arg_s_fkmx.qty[it_mxbt_pf] = ll_qty_arr[i] NEXT ext: RETURN rslt end function public function integer uf_get_mtrlware (long arg_storageid, long arg_mtrlid, decimal arg_qty, string arg_mtrlcode, string arg_storagename, ref s_mtrlware_fk s_fk, ref string arg_msg);//uf_get_mtrlware(arg_storageid,arg_mtrlid,arg_qty,arg_mtrlcode,arg_storagename,s_fk,arg_msg) Long rslt = 1 Dec ll_sumqty Long plancnt SELECT isnull(sum(noallocqty),0) INTO :ll_sumqty FROM u_mtrlware WHERE ( mtrlid = :arg_mtrlid) AND (storageid = :arg_storageid) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料['+arg_mtrlcode+']库存失败' GOTO ext END IF IF ll_sumqty < arg_qty THEN rslt = 0 arg_msg = '物料['+arg_mtrlcode+']在仓库['+arg_storagename+']库存为:'+String(ll_sumqty,'#,##0.#####')+',少于需领数:'+String(arg_qty,'#,##0.#####') GOTO ext END IF SELECT count(*) INTO :plancnt FROM u_mtrlware WHERE ( u_mtrlware.mtrlid = :arg_mtrlid ) AND ( u_mtrlware.storageid = :arg_storageid ) AND ( u_mtrlware.noallocqty > 0 ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料['+arg_mtrlcode+']库存资料失败' GOTO ext END IF Long ins_mtrlwareid Dec ins_qty,ins_addqty,ins_cost Long count,i Dec sumqty,noallocqty,allocqty,i_qty noallocqty = arg_qty DECLARE pf_cur CURSOR FOR SELECT u_mtrlware.mtrlwareid, u_mtrlware.noallocqty, u_mtrlware.noallocaddqty, u_mtrlware.cost FROM u_mtrlware WHERE ( u_mtrlware.mtrlid = :arg_mtrlid ) AND ( u_mtrlware.storageid = :arg_storageid ) AND ( u_mtrlware.noallocqty > 0 ) Order By u_mtrlware.noallocqty Asc USING commit_transaction; OPEN pf_cur; count = 1 FETCH pf_cur INTO :ins_mtrlwareid, & :ins_qty,:ins_addqty,:ins_cost ; DO WHILE sqlca.SQLCode = 0 AND sumqty < arg_qty count++ sumqty = sumqty+ins_qty IF ins_qty > noallocqty THEN i_qty = noallocqty allocqty = allocqty+i_qty noallocqty = 0 ins_addqty = Int(ins_addqty * noallocqty / ins_qty) ELSEIF ins_qty = noallocqty THEN i_qty = noallocqty allocqty = allocqty+i_qty noallocqty = 0 //noallocqty - ins_qty ELSE IF plancnt > 1 THEN i_qty = sumqty - allocqty allocqty = allocqty+i_qty noallocqty = arg_qty - allocqty ELSE i_qty = arg_qty noallocqty = 0 END IF END IF i++ s_fk.mtrlwareid[i] = ins_mtrlwareid s_fk.addqty[i] = ins_addqty s_fk.qty[i] = i_qty s_fk.cost[i] = ins_cost FETCH pf_cur INTO :ins_mtrlwareid,& :ins_qty,:ins_addqty,:ins_cost ; LOOP count = count - 1 CLOSE pf_cur; ext: RETURN rslt end function public function integer uf_update_inware_cost (ref string arg_msg, boolean arg_ifcommit);//Int rslt = 1 // //long i //Long ll_inprice_mode //Decimal ld_planprice // //Decimal wfjgprice, jgprice,outcost //Decimal ld_outamt //Decimal ld_inamt //Decimal ld_cost_price //Decimal ld_fprice // //FOR i = 1 To it_mxbt // // SELECT inprice_mode, planprice // INTO :ll_inprice_mode, :ld_planprice // FROM u_mtrldef // Where mtrlid = :inwaremx[i].mtrlid // using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询物料生产进仓取价模式失败,' + commit_transaction.SQLErrText // GOTO ext // END IF // // // ll_inprice_mode 进仓成本模式; 0-取计划价; 1-按领用材料最新采购价; 2-按领用材料出仓成本价 // IF ll_inprice_mode = 0 THEN //取计划价 // //不需要修改, 成功,下一条 // CONTINUE // END IF // // SELECT TOP 1 u_mtrlprice_sum.wfjgprice, u_mtrlprice_sum.jgprice, u_mtrlprice_sum.outcost // INTO :wfjgprice,:jgprice,:outcost // FROM u_mtrldef INNER JOIN // u_mtrlprice_sum ON u_mtrldef.mtrlid = u_mtrlprice_sum.mtrlid INNER JOIN // (SELECT MAX(sumdate) AS sumdate, mtrlid, pfcode, status, woodcode, pcode // FROM u_mtrlprice_sum AS u_mtrlprice_sum_1 // GROUP BY mtrlid, pfcode, status, woodcode, pcode) AS v_mtrlid_sumdate ON // u_mtrlprice_sum.status = v_mtrlid_sumdate.status AND // u_mtrlprice_sum.woodcode = v_mtrlid_sumdate.woodcode AND // u_mtrlprice_sum.pcode = v_mtrlid_sumdate.pcode AND // u_mtrlprice_sum.mtrlid = v_mtrlid_sumdate.mtrlid AND // u_mtrlprice_sum.pfcode = v_mtrlid_sumdate.pfcode AND // u_mtrlprice_sum.sumdate = v_mtrlid_sumdate.sumdate // WHERE (u_mtrlprice_sum.mtrlid = :inwaremx[i].mtrlid) // AND (u_mtrlprice_sum.status = :inwaremx[i].status) // AND (u_mtrlprice_sum.woodcode = :inwaremx[i].woodcode) // And (u_mtrlprice_sum.pcode = :inwaremx[i].pcode) // using commit_transaction; // // IF commit_transaction.SQLCode <> 0 THEN //统计成本 // wfjgprice = 0 // jgprice = 0 // outcost = 0 // END IF // // // IF IsNull(wfjgprice) THEN wfjgprice = 0 // IF IsNull(jgprice) THEN jgprice = 0 // IF IsNull(outcost) THEN outcost = 0 // // // IF ll_inprice_mode = 1 THEN //按领用材料最新采购价 // // SELECT ISNULL(SUM(u_outwaremx.qty * v_maxprice_sptprice.price),0) // INTO :ld_outamt // FROM u_outwaremx INNER JOIN // u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid INNER JOIN // v_maxprice_sptprice ON u_outwaremx.mtrlid = v_maxprice_sptprice.mtrlid AND // u_outwaremx.status = v_maxprice_sptprice.status AND // u_outwaremx.woodcode = v_maxprice_sptprice.woodcode AND // u_outwaremx.pcode = v_maxprice_sptprice.pcode // WHERE (u_outware.billtype = 3) // AND (u_outwaremx.scid = :scid) // AND (u_outwaremx.relid = :inwaremx[i].relid) // AND (u_outwaremx.relprintid = :inwaremx[i].relprintid) // using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询生产进仓明细的订单明细的出仓总金额失败,' + commit_transaction.SQLErrText // GOTO ext // END IF // // SELECT ISNULL(SUM(u_inwaremx.cost_price * u_inwaremx.qty),0) // INTO :ld_inamt // FROM u_inwaremx INNER JOIN // u_inware ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid // WHERE (u_inware.billtype = 3) // AND (u_inwaremx.scid = :scid) // AND (u_inwaremx.relid = :inwaremx[i].relid) // AND (u_inwaremx.relprintid = :inwaremx[i].relprintid) // AND (u_inwaremx.inwareid <> :inwareid OR u_inwaremx.printid <> :inwaremx[i].printid) // And (u_inware.flag = 1) // using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询生产进仓明细的订单明细的其它明细进仓总金额失败,' + commit_transaction.SQLErrText // GOTO ext // END IF // // ld_cost_price = (ld_outamt - ld_inamt) / inwaremx[i].qty // ld_fprice = ld_cost_price + wfjgprice + jgprice + outcost // // // // ELSEIF ll_inprice_mode = 2 THEN //按领用材料出仓成本价 // SELECT ISNULL(SUM(u_outwaremx.qty * u_outwaremx.fprice),0) // INTO :ld_outamt // FROM u_outwaremx INNER JOIN // u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid // WHERE (u_outware.billtype = 3) // AND (u_outwaremx.scid = :scid) // AND (u_outwaremx.relid = :inwaremx[i].relid) // AND (u_outwaremx.relprintid = :inwaremx[i].relprintid) // using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询生产进仓明细的订单明细的出仓总金额失败,' + commit_transaction.SQLErrText // GOTO ext // END IF // // SELECT ISNULL(SUM(u_inwaremx.cost_price * u_inwaremx.qty),0) // INTO :ld_inamt // FROM u_inwaremx INNER JOIN // u_inware ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid // WHERE (u_inware.billtype = 3) // AND (u_inwaremx.scid = :scid) // AND (u_inwaremx.relid = :inwaremx[i].relid) // AND (u_inwaremx.relprintid = :inwaremx[i].relprintid) // AND (u_inwaremx.inwareid <> :inwareid OR u_inwaremx.printid <> :inwaremx[i].printid) // And (u_inware.flag = 1) // using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询生产进仓明细的订单明细的其它明细进仓总金额失败,' + commit_transaction.SQLErrText // GOTO ext // END IF // // ld_cost_price = (ld_outamt - ld_inamt) / inwaremx[i].qty // ld_fprice = ld_cost_price + wfjgprice + jgprice + outcost // // END IF // // inwaremx[i].fprice = ld_fprice // inwaremx[i].cost = ld_fprice // inwaremx[i].costamt = round(inwaremx[i].qty * ld_fprice, 2) // // UPDATE u_inwaremx // SET cost_price = :ld_cost_price, // fprice = :ld_fprice, // cost = :ld_fprice, // costamt = round(qty * :ld_fprice,2) // WHERE scid = :scid // AND inwareid = :inwareid // And printid = :inwaremx[i].printid // using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // IF ll_inprice_mode = 1 THEN // arg_msg = '行:'+String(i)+',按领用材料最新采购价更新生产进仓明细单价失败,' + commit_transaction.SQLErrText // ELSEIF ll_inprice_mode = 2 THEN // arg_msg = '行:'+String(i)+',按领用材料出仓成本价更新生产进仓明细单价失败,' + commit_transaction.SQLErrText // ELSE // arg_msg = '行:'+String(i)+',更新生产进仓明细单价失败,' + commit_transaction.SQLErrText // END IF // GOTO ext // END IF //NEXT // //ext: // //IF rslt = 0 THEN // ROLLBACK Using commit_transaction; //ELSEIF arg_ifcommit THEN // COMMIT Using commit_transaction; //END IF // //RETURN rslt // // return 1 // // // // end function public function integer uf_destroy_scll (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 Long i,ch Long ll_outwareid_arr[],ll_outwareid Int li_flag_arr[], li_flag String ls_outwarecode_arr[], ls_outwarecode uo_outware_scll uo_ware uo_ware = Create uo_outware_scll uo_ware.commit_transaction = commit_transaction uo_ware.if_getid_ture = False //读取单据 DECLARE getoutware CURSOR FOR SELECT outwareid , flag, outwarecode FROM u_outware WHERE billtype = 3 AND relint_1 = :arg_inwareid AND dscrp = '销售订单自动生成领料' Using commit_transaction; OPEN getoutware; DO WHILE commit_transaction.SQLCode = 0 FETCH getoutware Into :ll_outwareid, :li_flag, :ls_outwarecode; IF commit_transaction.SQLCode <> 0 THEN EXIT ch++ ll_outwareid_arr[ch] = ll_outwareid li_flag_arr[ch] = li_flag ls_outwarecode_arr[ch] = ls_outwarecode LOOP CLOSE getoutware; //检查审核 IF sys_option_saletask_autocreatescll = 0 THEN FOR i = 1 To ch IF li_flag_arr[i] = 1 THEN rslt = 0 arg_msg = "系统选项[082]限制,相关领料单["+ls_outwarecode_arr[i]+"]已审核,请手动撤审后再处理生产进仓单" GOTO ext END IF NEXT END IF //删除单据 String ls_msg FOR i = 1 To ch IF sys_option_saletask_autocreatescll = 1 THEN //自动撤审 IF uo_ware.getinfo(arg_scid,ll_outwareid_arr[i],arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware.c_auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF IF uo_ware.del(arg_scid,ll_outwareid_arr[i],arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF sys_option_saletask_autocreatescll = 1 THEN ls_msg = "销售订单撤审自动撤审、删除相关领料单" ELSE ls_msg = "销售订单撤审自动删除相关领料单" END IF if f_setsysoplog('领料单',ls_msg+',id:'+String(ll_outwareid_arr[i])+',code:'+ls_outwarecode_arr[i],arg_msg,False) = 0 then rslt = 0 goto ext end if NEXT ext: Destroy uo_ware IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSE COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer priceaudit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);//audit Int rslt = 1,cnt = 0 Long ll_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 priceflag <> 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_SaleTask SET priceemp = :arg_emp , pricedate = getdate(), priceflag = 1 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 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 priceaudit_cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 DateTime nulldate 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 priceflag = 0 THEN rslt = 0 arg_msg = "订单未确认,操作取消" GOTO ext END IF UPDATE u_SaleTask SET priceflag = 0, priceemp = '', pricedate = :nulldate 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 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 uf_chk_assemble_qty (long arg_scid, ref string arg_msg); Int rslt = 1 Long i,j,k,new_it_mxbt Long li_flag //检查物料是否有清单 s_saletaskmx temp_outwaremx[],new_outwaremx[] ,new_sonmtrl_outwaremx[],null_outwaremx[] //明细结构数组 temp_outwaremx = saletaskmx Long ll_flag1 FOR i = 1 To it_mxbt FOR j = 1 To UpperBound(new_outwaremx) IF temp_outwaremx[i].mtrlid = new_outwaremx[j].mtrlid And temp_outwaremx[i].status = new_outwaremx[j].status And temp_outwaremx[i].woodcode = new_outwaremx[j].woodcode And temp_outwaremx[i].pcode = new_outwaremx[j].pcode THEN new_outwaremx[j].usaleqty = new_outwaremx[j].usaleqty + temp_outwaremx[i].usaleqty GOTO nxt1 END IF NEXT //查mtlwareid Long ll_temp_mtrlwareid ll_temp_mtrlwareid = 0 SELECT Top 1 mtrlwareid Into :ll_temp_mtrlwareid From u_mtrlware Where ( u_mtrlware.scid = :arg_scid ) And ( u_mtrlware.mtrlid = :new_sonmtrl_outwaremx[i].mtrlid ) And ( u_mtrlware.status = :new_sonmtrl_outwaremx[i].status ) And ( u_mtrlware.woodcode = :new_sonmtrl_outwaremx[i].woodcode ) And ( u_mtrlware.pcode = :new_sonmtrl_outwaremx[i].pcode ) Order By u_mtrlware.noallocqty Desc Using commit_transaction; IF IsNull(ll_temp_mtrlwareid) THEN ll_temp_mtrlwareid = 0 new_it_mxbt++ new_outwaremx[new_it_mxbt].mtrlwareid = ll_temp_mtrlwareid new_outwaremx[new_it_mxbt].mtrlid = temp_outwaremx[i].mtrlid new_outwaremx[new_it_mxbt].usaleqty = temp_outwaremx[i].usaleqty new_outwaremx[new_it_mxbt].status = temp_outwaremx[i].status new_outwaremx[new_it_mxbt].woodcode = temp_outwaremx[i].woodcode new_outwaremx[new_it_mxbt].pcode = temp_outwaremx[i].pcode nxt1: NEXT Decimal i_noauditingqty = 0 //已开单未审 Decimal i_noallocqty = 0 //现库存数 FOR i = 1 To UpperBound(new_outwaremx) i_noauditingqty = 0 i_noallocqty = 0 //计算库存数 SELECT IsNull(u_mtrlware.noallocqty,0) Into :i_noallocqty From u_mtrlware Left Outer join uv_mtrlware_noauditingqty On ( u_mtrlware.mtrlwareid = uv_mtrlware_noauditingqty.mtrlwareid) And ( u_mtrlware.scid = uv_mtrlware_noauditingqty.scid) Inner join u_mtrldef On ( u_mtrlware.mtrlid = u_mtrldef.mtrlid ) Where ( u_mtrlware.scid = :arg_scid ) And ( u_mtrlware.mtrlwareid = :new_outwaremx[i].mtrlwareid ) Using commit_transaction; //计算已开单数 SELECT isnull(sum(u_outwaremx.uqty),0) INTO :i_noauditingqty FROM u_outwaremx INNER join u_outware on u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid WHERE u_outwaremx.scid = :arg_scid AND u_outware.flag = 0 AND u_outwaremx.mtrlwareid = :new_outwaremx[i].mtrlwareid Using commit_transaction; NEXT //查下级物料清单 Long cur_mxt_pf Long ll_SonMtrlid[],temp_ll[] String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[],temp_str[] Decimal ld_Sonscale[] new_it_mxbt = 0 new_sonmtrl_outwaremx = null_outwaremx //物料清单汇总 FOR i = 1 To UpperBound(new_outwaremx) cur_mxt_pf = 1 ll_SonMtrlid = temp_ll ls_pf_status = temp_str ls_pf_woodcode = temp_str ls_pf_pcode = temp_str DECLARE cur_pf CURSOR FOR SELECT u_PrdPF.SonMtrlid, u_PrdPF.Sonscale, u_PrdPF.status, u_PrdPF.woodcode, u_PrdPF.pcode FROM u_PrdPF Where u_PrdPF.mtrlid = :new_outwaremx[i].mtrlid; OPEN cur_pf; FETCH cur_pf Into :ll_SonMtrlid[cur_mxt_pf],:ld_Sonscale[cur_mxt_pf],:ls_pf_status[cur_mxt_pf],:ls_pf_woodcode[cur_mxt_pf],:ls_pf_pcode[cur_mxt_pf]; DO WHILE sqlca.SQLCode = 0 cur_mxt_pf++ FETCH cur_pf Into :ll_SonMtrlid[cur_mxt_pf],:ld_Sonscale[cur_mxt_pf],:ls_pf_status[cur_mxt_pf],:ls_pf_woodcode[cur_mxt_pf],:ls_pf_pcode[cur_mxt_pf]; LOOP cur_mxt_pf = cur_mxt_pf - 1 CLOSE cur_pf; //物料清单 放到新数组 FOR j = 1 To cur_mxt_pf FOR k = 1 To UpperBound(new_sonmtrl_outwaremx) IF new_sonmtrl_outwaremx[k].mtrlid = ll_SonMtrlid[j] And new_sonmtrl_outwaremx[k].status = ls_pf_status[j] And new_sonmtrl_outwaremx[k].woodcode = ls_pf_woodcode[j] And new_sonmtrl_outwaremx[k].pcode = ls_pf_pcode[j] THEN new_sonmtrl_outwaremx[k].usaleqty = new_sonmtrl_outwaremx[k].usaleqty + ld_Sonscale[j] * new_outwaremx[i].usaleqty GOTO nxt2 END IF NEXT new_it_mxbt++ new_sonmtrl_outwaremx[new_it_mxbt].mtrlid = ll_SonMtrlid[j] new_sonmtrl_outwaremx[new_it_mxbt].usaleqty = ld_Sonscale[j] * new_outwaremx[i].usaleqty new_sonmtrl_outwaremx[new_it_mxbt].status = ls_pf_status[j] new_sonmtrl_outwaremx[new_it_mxbt].woodcode = ls_pf_woodcode[j] new_sonmtrl_outwaremx[new_it_mxbt].pcode = ls_pf_pcode[j] NEXT nxt2: NEXT //检查下级清单够不够库存 String ls_mtrlcode,ls_mtrlname FOR i = 1 To UpperBound(new_sonmtrl_outwaremx) i_noallocqty = 0 ls_mtrlcode = '' ls_mtrlname = '' //计算库存数 SELECT u_mtrldef.mtrlcode, u_mtrldef.mtrlname, IsNull(sum(u_mtrlware.noallocqty),0) Into :ls_mtrlcode, :ls_mtrlname, :i_noallocqty From u_mtrlware Left Outer join uv_mtrlware_noauditingqty On ( u_mtrlware.mtrlwareid = uv_mtrlware_noauditingqty.mtrlwareid) And ( u_mtrlware.scid = uv_mtrlware_noauditingqty.scid) Inner join u_mtrldef On ( u_mtrlware.mtrlid = u_mtrldef.mtrlid ) Where ( u_mtrlware.scid = :arg_scid ) And ( u_mtrlware.mtrlid = :new_sonmtrl_outwaremx[i].mtrlid ) And ( u_mtrlware.status = :new_sonmtrl_outwaremx[i].status ) And ( u_mtrlware.woodcode = :new_sonmtrl_outwaremx[i].woodcode ) And ( u_mtrlware.pcode = :new_sonmtrl_outwaremx[i].pcode ) Group By u_mtrldef.mtrlcode, u_mtrldef.mtrlname Using commit_transaction; IF new_sonmtrl_outwaremx[i].usaleqty > i_noallocqty THEN IF arg_msg = '' THEN arg_msg = '物料编码:' + String(ls_mtrlcode) + ' 物料名称:' + String(ls_mtrlname) + ' 总需求数(本单+其他已开单):' + String(new_sonmtrl_outwaremx[i].usaleqty,'#,##0.00') + ' 当前库存数:' + String(i_noallocqty,'#,##0.00') + ' 还差:' + String(new_sonmtrl_outwaremx[i].usaleqty - i_noallocqty,'#,##0.00') + '~r~n' ELSE arg_msg = arg_msg + '~r~n' + '物料编码:' + String(ls_mtrlcode) + ' 物料名称:' + String(ls_mtrlname) + ' 总需求数(本单+其他已开单):' + String(new_sonmtrl_outwaremx[i].usaleqty,'#,##0.00') + ' 当前库存数:' + String(i_noallocqty,'#,##0.00') + ' 还差:' + String(new_sonmtrl_outwaremx[i].usaleqty - i_noallocqty,'#,##0.00') + '~r~n' END IF END IF NEXT IF arg_msg <> '' THEN rslt = 0 END IF RETURN rslt end function public function integer salecheck (long arg_scid, long arg_taskid, long arg_printid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 string ls_emp long ll_scid,ll_taskid,ll_printid 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 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_saletaskmx Set checkemp = :arg_emp , checkdate = getdate(), checkflag = 1 Where scid = :arg_scid And TaskID = :arg_taskid And printid = :arg_printid; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg ='因网络或其他原因导致订单核对失败!'+'~n'+commit_transaction.SQLErrText GOTO ext End If ext: If rslt = 0 Then Rollback Using commit_transaction; ElseIf arg_ifcommit Then Commit Using commit_transaction; End If Return (rslt) end function public function integer salecheck_cancel (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 long ll_scid,ll_taskid,ll_printid Datetime nulldate Setnull(nulldate) UPDATE u_saletaskmx SET checkflag = 0, checkemp = '', checkdate = :nulldate WHERE taskid = :arg_taskid AND scid = :arg_scid AND printid = :arg_printid; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg ='因网络或其他原因导致订单核对失败!'+'~n'+commit_transaction.SQLErrText GOTO ext End If ext: If rslt = 0 Then Rollback Using commit_transaction; ElseIf arg_ifcommit Then Commit Using commit_transaction; End If Return (rslt) end function public function integer uof_insertwaste (integer arg_wastetype, integer arg_taskid, integer arg_scid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt Long ll_wastenum DateTime server_dt IF arg_scid < 0 THEN arg_msg = '错误的分部' rslt = 0 GOTO ext END IF IF arg_taskid <= 0 THEN arg_msg = '错误销售订单唯一码' rslt = 0 GOTO ext END IF SELECT Top 1 getdate() INTO :server_dt FROM u_user Using commit_transaction; //取得系统时间,借用操作员表 IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF //明细 cnt = 0 SELECT count(*) INTO :cnt FROM u_saletask_waste 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 ELSE IF cnt = 0 THEN ll_wastenum = 1 ELSE SELECT max(wastenum) INTO :ll_wastenum FROM u_saletask_waste 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 ll_wastenum++ END IF END IF INSERT INTO u_saletaskmx_waste (wastenum, scid, taskid, mtrlid, enprice_notax, checkdate, cubage, checkflag, priceformula, checkemp, mxdscrp4, mxdscrp3, net_weight, gross_weight, bsamt_tax, bsamt, enamt_tax, enamt, stopqty, stopreason, stopdate, stopemp, stopflag, gbotheramt, gbrate, packqty, tax, requiredate, plancode, wfjgtaskqty, needwfjgqty, mxdscrp2, auditemp, audittime, printnum, auditingdate, auditingrep, flag, sclldate, scllrep, scllflag, formula, ifsc, buytaskqty, needbuyqty, orderqty, ware_price, ware_fprice, ware_enprice, usaleqty, rate, unit, consignedaddqty, addqty, pqty, bqty, outtype, dftsaleprice, ctmint, enprice, mtrlchangecode, mtrlcuscode, woodcode, pcode, printid, status, sys_changetime, mxdscrp, assignqty, consignedqty, rebate, price, fprice, plprice, saleqty) SELECT :ll_wastenum, scid, taskid, mtrlid, enprice_notax, checkdate, cubage, checkflag, priceformula, checkemp, mxdscrp4, mxdscrp3, net_weight, gross_weight, bsamt_tax, bsamt, enamt_tax, enamt, stopqty, stopreason, stopdate, stopemp, stopflag, gbotheramt, gbrate, packqty, tax, requiredate, plancode, wfjgtaskqty, needwfjgqty, mxdscrp2, auditemp, audittime, printnum, auditingdate, auditingrep, flag, sclldate, scllrep, scllflag, formula, ifsc, buytaskqty, needbuyqty, orderqty, ware_price, ware_fprice, ware_enprice, usaleqty, rate, unit, consignedaddqty, addqty, pqty, bqty, outtype, dftsaleprice, ctmint, enprice, mtrlchangecode, mtrlcuscode, woodcode, pcode, printid, status, sys_changetime, mxdscrp, assignqty, consignedqty, rebate, price, fprice, plprice, saleqty FROM u_saletaskmx Where scid = :arg_scid AND taskid = :arg_taskid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_saletaskmx_waste') > 0 THEN arg_msg = '插入单据明细资料失败,关键字ID重复' ELSE arg_msg = '插入单据明细资料失败,'+commit_transaction.SQLErrText END IF GOTO ext END IF INSERT INTO u_saletask_waste (wastetype, wastenum, wastedate, wasterep, scid, taskid, taskcode, kind, cusid, taskdate, requiredate, accomplishdate, finishemp, status, opemp, modemp, moddate, assign_emp, permit_emp, permit_date, dscrp, opdate, stopemp, sys_changetime, ctmint, freight, printnum, banktypeid, damt, moneyid, relcode, paytype, dscrp2, freight_tele, cus_address, cus_tele, cus_fax, otheramt, mrate, dscrp3, rel_rep, senduser, sendtime, sendcnt, fiebrelcode, msttakeamt, takeamt, takedamt, cus_tele1, auditemp, auditdate, transcode, carcode, freight_address, pricedate, priceemp, priceflag ) SELECT :arg_wastetype, :ll_wastenum, :server_dt, :publ_operator, scid, taskid, taskcode, kind, cusid, taskdate, requiredate, accomplishdate, finishemp, status, opemp, modemp, moddate, assign_emp, permit_emp, permit_date, dscrp, opdate, stopemp, sys_changetime, ctmint, freight, printnum, banktypeid, damt, moneyid, relcode, paytype, dscrp2, freight_tele, cus_address, cus_tele, cus_fax, otheramt, mrate, dscrp3, rel_rep, senduser, sendtime, sendcnt, fiebrelcode, msttakeamt, takeamt, takedamt, cus_tele1, auditemp, auditdate, transcode, carcode, freight_address, pricedate, priceemp, priceflag FROM u_saletask Where scid = :arg_scid AND taskid = :arg_taskid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_outware_waste') > 0 THEN arg_msg = '插入发货单据资料失败,关键字ID重复' ELSE arg_msg = '插入发货单据资料失败,'+commit_transaction.SQLErrText END IF 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_save_dytitle_saletask (long arg_hang, string arg_name, string arg_dwtitlename, string arg_execltitlename, string arg_filtername, ref string arg_msg);Long rslt = 1, i if isnull(arg_filtername) then arg_filtername='' UPDATE u_dytitle_saletask SET hang = :arg_hang, dwtitlename = :arg_dwtitlename, execltitlename = :arg_execltitlename, filtername=:arg_filtername WHERE name = :arg_name Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新明细标题与execl标题对应关系表操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN INSERT INTO u_dytitle_saletask(hang,name,dwtitlename,execltitlename,filtername) VALUES (:arg_hang,:arg_name,:arg_dwtitlename,:arg_execltitlename,:arg_filtername) Using commit_transaction; END IF ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSE COMMIT Using commit_transaction; END IF RETURN rslt end function on uo_saletask.create call super::create TriggerEvent( this, "constructor" ) end on on uo_saletask.destroy TriggerEvent( this, "destructor" ) call super::destroy end on