$PBExportHeader$uo_saletask_ll.sru forward global type uo_saletask_ll from nonvisualobject end type type s_saletaskmx from structure within uo_saletask_ll end type type s_saletaskmx_mx from structure within uo_saletask_ll end type type s_saletaskmx_in from structure within uo_saletask_ll end type end forward type s_saletaskmx from structure long mtrlid decimal { 10 } saleqty decimal { 10 } plprice decimal { 10 } acprice string dscrp string mtrlcode decimal { 10 } fprice decimal { 5 } rebate string status long printid string woodcode string pcode string mtrlcuscode string mtrlchangecode decimal { 10 } enprice string outtype decimal { 10 } dftsaleprice integer auditflag string auditemp datetime auditdate datetime requiredate string pfcode string dscrp2 decimal { 10 } scidprice decimal { 10 } inwareqty decimal { 10 } usaleqty decimal { 10 } uprice decimal { 5 } rate string unit decimal { 5 } capacity end type type s_saletaskmx_mx from structure long mtrlwareid decimal { 10 } qty end type type s_saletaskmx_in from structure long mtrlid string status string woodcode string pcode string plancode string mxdscrp decimal { 5 } fprice long printid decimal { 10 } qty long storageid end type global type uo_saletask_ll from nonvisualobject end type global uo_saletask_ll uo_saletask_ll type variables 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 Public ProtectedWrite Long ctmint Long scid Long banktypeid Long moneyid Decimal damt Decimal otheramt Decimal mrate Int Kind Long cusid String assign_emp DateTime requiredate DateTime taskdate String freight String dscrp String dscrp2 String relcode String paytype String freight_tele String cus_address String cus_tele String cus_fax String upname Decimal msttakeamt,takeamt Long audit_buildtype Transaction commit_transaction //数据commit事务 Private: s_saletaskmx saletaskmx[] //明细结构 s_saletaskmx_in saletaskmx_in[] //明细结构 Long it_mxbt_in = 0 //来料加工订单收料明细 Long it_mxbt = 0 //明细结构数组末指针 Boolean it_newbegin = True //新建标志 Boolean it_updatebegin = False //修改标志 s_saletaskmx_mx taskmx[] Long it_mxbt_mx = 0 Decimal mx_sumqty = 0 String uo_option_change_status String uo_option_change_woodcode String uo_option_change_pcode Int uo_option_saletask_secaudit Int uo_option_if_oa_saletask Int uo_option_taskplancode_auto_ll Int uo_option_autocreate_buy_cp Int uo_option_m_msttake Int uo_option_taskaudit_dprice Int uo_option_if_msg Int uo_option_saletask_fore_secaudit Int uo_option_saletask_addware Int uo_option_unit_dec end variables forward prototypes public function integer p_reset () public function integer p_clearmx () public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit) private function integer uof_p_check_dprice (ref string arg_msg) public function integer acceptmx_in (long arg_mtrlid, long arg_printid, string arg_mtrlcode, long arg_storageid, decimal arg_qty, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, decimal arg_fprice, string arg_mxdscrp, ref string arg_msg) public function integer acceptmx (long arg_mtrlid, decimal arg_uqty, string arg_unit, decimal arg_rate, decimal arg_uprice, decimal arg_rebate, string arg_dscrp, string arg_dscrp2, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, long arg_printid, string arg_outtype, datetime arg_requiredate, decimal arg_scidprice, ref string arg_msg) private function integer p_getinfo (long arg_taskid, ref string arg_msg) public function integer getinfo (long arg_taskid, ref string arg_msg) public function integer addmxcmpl (long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer addmxcmpl_in (long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer cancel (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer canceloapermit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer updateassignqty (long arg_scid, long arg_taskid, long arg_printid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit) public function integer updatebegin (long arg_taskid, ref string arg_msg) public function integer trycmplsaletask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer tempstoptask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer stopsaletask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer stopmx (long arg_taskid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, ref string arg_msg, boolean arg_commit) public function integer salepermit (long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer propermit (long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer trycmptask_fore (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer ddpermit (long arg_taskid, long arg_printid, integer arg_flag, ref string arg_msg, boolean arg_ifcommit) public function integer p_cprqplan (long arg_taskid, long arg_printid, long arg_flag, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit) public function integer cancelpermit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer checkmxcmpl (long arg_taskid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg) public function integer finishtask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer cancelpropermit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer updatebqty (long arg_taskid, long arg_printid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit) public function integer updateinwareqty (long arg_taskid, long arg_printid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit) public function integer newbegin () end prototypes public function integer p_reset ();//int p_reset() //清除对象及其明细 scid = 0 taskid = 0 taskcode = '' operator = '' status = 0 damt = 0 otheramt = 0 banktypeid = 0 moneyid = 0 relcode = '' freight_tele = '' msttakeamt = 0 takeamt = 0 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_in=0 RETURN 1 end function public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0,i,j Long ls_newtaskid DateTime server_datetime Long ll_taskid String ls_sccode String ls_mtrlcuscode IF uo_option_taskplancode_auto_ll = -1000 THEN arg_msg = '选项:[133]来料加工订单生产批号类型,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF 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_fax) THEN cus_fax = '' IF IsNull(upname) THEN upname = '' IF IsNull(msttakeamt) THEN msttakeamt = 0 operator = arg_operator IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以提交" GOTO ext END IF IF Trim(assign_emp) = '' THEN rslt = 0 arg_msg = "请输入订单业务员" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_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 f_check_inoutdate(0,taskdate,FALSE,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF Date(taskdate) > Date(requiredate) THEN arg_msg = '交货日期不能在订货日期前' rslt = 0 GOTO ext END IF IF it_mxbt = 0 THEN //如果输入物料资料错则已经清空 rslt = 0 arg_msg = "没有正确销售订单明细内容" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where username = :operator USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,操作员!" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "操作员姓名未登记或已取消!" GOTO ext END IF opdate = server_datetime //填写单据建立时间(最近修改时间) ////////////////////////////////////////////// //开始区分:新建/更新 处理 IF taskid = 0 THEN //新建 ll_taskid = f_sys_scidentity(0,"u_saletask_ll","taskid",arg_msg,TRUE,id_sqlca) 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(0,ls_sccode + 'SJ',Date(server_datetime),FALSE,commit_transaction) IF taskcode = "err" THEN taskcode = '' rslt = 0 arg_msg = "无法获取来料加工订单编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_saletask_ll ( scid, taskcode, cusid, requiredate, status, opemp, assign_emp, permit_emp, dscrp, dscrp2, opdate, taskid, damt, otheramt, freight, taskdate, banktypeid, moneyid, relcode, paytype, freight_tele, cus_address, cus_tele, cus_fax, mrate, upname, msttakeamt) VALUES ( :scid, :taskcode, :cusid, :requiredate, :status, :operator, :assign_emp, :permit_emp, :dscrp, :dscrp2, :opdate, :ll_taskid, :damt, :otheramt, :freight, :taskdate, :banktypeid, :moneyid, :relcode, :paytype, :freight_tele, :cus_address, :cus_tele, :cus_fax, :mrate, :upname, :msttakeamt) USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入销售订单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //读取新taskid taskid = ll_taskid FOR i = 1 TO it_mxbt ls_mtrlcuscode = '' CHOOSE CASE uo_option_taskplancode_auto_ll CASE 1 ls_mtrlcuscode = saletaskmx[i].mtrlcuscode CASE 2 ls_mtrlcuscode = taskcode CASE 3 ls_mtrlcuscode = relcode CASE ELSE arg_msg = '错误的生产批号,管理员请在系统选项设置先设定好订单批号模式' rslt = 0 GOTO ext END CHOOSE INSERT INTO u_saletaskmx_ll ( scid, saleqty, price, mtrlid, taskid, mxdscrp, mxdscrp2, fprice, rebate, status, printid, woodcode, pcode, mtrlcuscode, enprice, outtypestr, dftsaleprice, requiredate, pfcode, scidprice, usaleqty, unit, rate) VALUES (:scid, :saletaskmx[i].saleqty, :saletaskmx[i].acprice, :saletaskmx[i].mtrlid, :ll_taskid, :saletaskmx[i].dscrp, :saletaskmx[i].dscrp2, :saletaskmx[i].fprice, :saletaskmx[i].rebate, :saletaskmx[i].status, :saletaskmx[i].printid, :saletaskmx[i].woodcode, :saletaskmx[i].pcode, :ls_mtrlcuscode, :saletaskmx[i].enprice, :saletaskmx[i].outtype, :saletaskmx[i].dftsaleprice, :saletaskmx[i].requiredate, :saletaskmx[i].pfcode, :saletaskmx[i].scidprice, :saletaskmx[i].usaleqty, :saletaskmx[i].unit, :saletaskmx[i].rate) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN taskid = 0 //还原taskid rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT FOR j = 1 TO it_mxbt_in INSERT INTO u_saletaskmx_in (scid, taskid, printid, mtrlid, plancode, status, woodcode, pcode, qty, fprice, mxdscrp, storageid) VALUES (:scid, :ll_taskid, :saletaskmx_in[j].printid, :saletaskmx_in[j].mtrlid, :saletaskmx_in[j].plancode, :saletaskmx_in[j].status, :saletaskmx_in[j].woodcode, :saletaskmx_in[j].pcode, :saletaskmx_in[j].qty, :saletaskmx_in[j].fprice, :saletaskmx_in[j].mxdscrp, :saletaskmx_in[j].storageid) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN taskid = 0 //还原taskid rslt = 0 arg_msg = "因网络或其它原因导致插入收料明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT ELSE //////////////////////////////////////////////// //更新 UPDATE u_saletask_ll 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, banktypeid = :banktypeid, moneyid = :moneyid, relcode = :relcode, paytype = :paytype, freight_tele = :freight_tele, cus_address = :cus_address, cus_tele = :cus_tele, cus_fax = :cus_fax, mrate = :mrate, upname = :upname, msttakeamt = :msttakeamt WHERE 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_ll Where u_saletaskmx_ll.taskid = :taskid AND u_saletaskmx_ll.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 ls_mtrlcuscode = '' CHOOSE CASE uo_option_taskplancode_auto_ll CASE 1 ls_mtrlcuscode = saletaskmx[i].mtrlcuscode CASE 2 ls_mtrlcuscode = taskcode CASE 3 ls_mtrlcuscode = relcode CASE ELSE arg_msg = '错误的生产批号,管理员请先设定好订单批号模式' rslt = 0 GOTO ext END CHOOSE INSERT INTO u_saletaskmx_ll ( scid, taskid, mtrlid, saleqty, price, mxdscrp, mxdscrp2, fprice, rebate, status, printid, woodcode, pcode, mtrlcuscode, enprice, outtypestr, dftsaleprice, requiredate, pfcode, scidprice, usaleqty, unit, rate) VALUES (:scid, :taskid, :saletaskmx[i].mtrlid, :saletaskmx[i].saleqty, :saletaskmx[i].acprice, :saletaskmx[i].dscrp, :saletaskmx[i].dscrp2, :saletaskmx[i].fprice, :saletaskmx[i].rebate, :saletaskmx[i].status, :saletaskmx[i].printid, :saletaskmx[i].woodcode, :saletaskmx[i].pcode, :ls_mtrlcuscode, :saletaskmx[i].enprice, :saletaskmx[i].outtype, :saletaskmx[i].dftsaleprice, :saletaskmx[i].requiredate, :saletaskmx[i].pfcode, :saletaskmx[i].scidprice, :saletaskmx[i].usaleqty, :saletaskmx[i].unit, :saletaskmx[i].rate ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT DELETE FROM u_saletaskmx_in Where u_saletaskmx_in.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 FOR j = 1 TO it_mxbt_in INSERT INTO u_saletaskmx_in (scid, taskid, printid, mtrlid, plancode, status, woodcode, pcode, qty, fprice, mxdscrp, storageid) VALUES (:scid, :taskid, :saletaskmx_in[j].printid, :saletaskmx_in[j].mtrlid, :saletaskmx_in[j].plancode, :saletaskmx_in[j].status, :saletaskmx_in[j].woodcode, :saletaskmx_in[j].pcode, :saletaskmx_in[j].qty, :saletaskmx_in[j].fprice, :saletaskmx_in[j].mxdscrp, :saletaskmx_in[j].storageid) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN taskid = 0 //还原taskid rslt = 0 arg_msg = "因网络或其它原因导致插入收料明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT END IF 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 private function integer uof_p_check_dprice (ref string arg_msg);Int rslt = 1 Long ll_i String ls_mtrlcode Decimal ld_dftsaleprice IF uo_option_taskaudit_dprice = -1000 THEN arg_msg = '选项:[051]销售订单审核前必须有定价,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_taskaudit_dprice = 0 THEN rslt = 1 GOTO ext END IF FOR ll_i = 1 TO it_mxbt ls_mtrlcode = saletaskmx[ll_i].mtrlcode ld_dftsaleprice = saletaskmx[ll_i].dftsaleprice IF saletaskmx[ll_i].outtype <> '' THEN CONTINUE IF ld_dftsaleprice = 0 THEN arg_msg = '物料:'+ls_mtrlcode+'未有定价,请检查' rslt = 0 GOTO ext END IF NEXT ext: RETURN rslt end function public function integer acceptmx_in (long arg_mtrlid, long arg_printid, string arg_mtrlcode, long arg_storageid, decimal arg_qty, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, decimal arg_fprice, string arg_mxdscrp, ref string arg_msg);Int rslt = 1 Long cnt = 0,ls_i IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF IF uo_option_change_status = '-1000' THEN arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_change_woodcode = '-1000' THEN arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_change_pcode = '-1000' THEN arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF //清除空值 IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_qty) THEN arg_qty = 0 IF IsNull(arg_fprice) THEN arg_fprice = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' 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_plancode) THEN arg_plancode = '' IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF IsNull(arg_storageid) THEN arg_storageid = 0 IF arg_mtrlid = 0 OR arg_qty = 0 THEN rslt = 1 GOTO ext END IF IF arg_storageid = 0 THEN rslt = 0 arg_msg = '请选择仓库,第'+String(arg_printid)+'行' GOTO ext END IF IF f_check_status(1,arg_status) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能'+uo_option_change_status+'未定义,物料:"+arg_mtrlcode+",内容:"+arg_status GOTO ext END IF IF f_check_status(2,arg_woodcode) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能'+uo_option_change_woodcode+'未定义,物料:"+arg_mtrlcode+",内容:"+arg_woodcode GOTO ext END IF IF f_check_status(3,arg_pcode) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能'+uo_option_change_pcode+'未定义,物料:"+arg_mtrlcode+",内容:"+arg_pcode GOTO ext END IF IF arg_fprice < 0 THEN rslt = 0 arg_msg = "物料编码:" + String(arg_mtrlcode)+" 单价错误" GOTO ext END IF FOR ls_i = 1 TO it_mxbt_in //合并重复项 IF saletaskmx_in[ls_i].mtrlid = arg_mtrlid AND & saletaskmx_in[ls_i].status = arg_status AND & saletaskmx_in[ls_i].pcode = arg_pcode AND & saletaskmx_in[ls_i].plancode = arg_plancode AND & saletaskmx_in[ls_i].woodcode = arg_woodcode and & saletaskmx_in[ls_i].storageid = arg_storageid THEN saletaskmx_in[ls_i].qty = saletaskmx_in[ls_i].qty+arg_qty rslt = 1 GOTO ext END IF NEXT //写入内容 it_mxbt_in++ saletaskmx_in[it_mxbt_in].mtrlid = arg_mtrlid saletaskmx_in[it_mxbt_in].qty = arg_qty saletaskmx_in[it_mxbt_in].fprice = arg_fprice saletaskmx_in[it_mxbt_in].mxdscrp = arg_mxdscrp saletaskmx_in[it_mxbt_in].status = arg_status saletaskmx_in[it_mxbt_in].printid = arg_printid saletaskmx_in[it_mxbt_in].woodcode = arg_woodcode saletaskmx_in[it_mxbt_in].pcode = arg_pcode saletaskmx_in[it_mxbt_in].plancode = arg_plancode saletaskmx_in[it_mxbt_in].storageid = arg_storageid ext: IF rslt = 0 THEN p_clearmx() RETURN rslt end function public function integer acceptmx (long arg_mtrlid, decimal arg_uqty, string arg_unit, decimal arg_rate, decimal arg_uprice, decimal arg_rebate, string arg_dscrp, string arg_dscrp2, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, long arg_printid, string arg_outtype, datetime arg_requiredate, decimal arg_scidprice, ref string arg_msg);Int rslt = 1 Long cnt = 0,ls_i Decimal ld_dftsaleprice Decimal ld_planprice 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_uqty) THEN arg_uqty = 0 IF IsNull(arg_uprice) THEN arg_uprice = 0 IF IsNull(arg_rebate) THEN arg_rebate = 0 IF arg_rebate = 0 THEN arg_rebate = 1 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 = '' IF IsNull(arg_mtrlcuscode) THEN arg_mtrlcuscode = '' IF IsNull(arg_dscrp2) THEN arg_dscrp2 = '' IF IsNull(arg_unit) THEN arg_unit = '' IF IsNull(arg_rate) THEN arg_rate = 1 IF arg_rate = 0 THEN arg_rate = 1 IF IsNull(arg_uprice) THEN arg_uprice = 0 IF uo_option_change_status = '-1000' THEN arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_change_woodcode = '-1000' THEN arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_change_pcode = '-1000' THEN arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_m_msttake = -1000 THEN arg_msg = '选项:[045]系统使用多币种应收帐,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_unit_dec = -1000 THEN arg_msg = '选项:[023]辅助单位转换库存单位小数位,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF arg_mtrlid = 0 OR arg_uqty = 0 THEN rslt = 1 GOTO ext END IF IF f_check_status(1,arg_status) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能"+uo_option_change_status+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_status GOTO ext END IF IF f_check_status(2,arg_woodcode) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能"+uo_option_change_woodcode+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_woodcode GOTO ext END IF IF f_check_status(3,arg_pcode) = 0 THEN rslt = 0 arg_msg = "查询操作失败,可能"+uo_option_change_pcode+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_pcode GOTO ext END IF IF arg_uprice * arg_rebate < 0 THEN rslt = 0 arg_msg = "产品:" + String(arg_mtrlcode)+" 单价错误" GOTO ext END IF IF arg_rebate <= 0 THEN arg_msg = '折扣错误,请检查' rslt = 0 GOTO ext END IF String ls_pfcode ls_pfcode = f_get_dft_pf(arg_mtrlid) //检查物料id Int li_statusflag Decimal ld_capacity,ld_capacity_zj s_mtrlcfg_expr s_pz[] String ls_status_zj long ll_i SELECT planprice,statusflag,capacity INTO :ld_planprice,:li_statusflag,:ld_capacity FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_mtrlid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,产品计划价" GOTO ext END IF IF li_statusflag = 2 AND Trim(arg_status) = '' THEN rslt = 0 arg_msg = '第'+String(arg_printid)+'行,产品:'+arg_mtrlcode+' 属于组合配置类型,但没有输入配置,请检查' GOTO ext END IF //IF li_statusflag = 2 THEN // ld_capacity = 0 // f_checkpz(arg_status,s_pz[]) // FOR ll_i = 1 TO UpperBound(s_pz) // ls_status_zj = s_pz[ll_i].cfgname // // SELECT capacity // INTO :ld_capacity_zj // FROM u_mtrl_configure // WHERE mtrlid = :arg_mtrlid // AND Name = :ls_status_zj; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "查询子件 "+ls_status_zj+" 产能参数操作失败" // GOTO ext // END IF // // ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_i].qty) // // NEXT // //END IF ld_dftsaleprice = 0 f_get_defsaleprice(cusid,arg_mtrlid,arg_status,arg_pcode,arg_woodcode,moneyid,ld_dftsaleprice) //写入内容 it_mxbt++ saletaskmx[it_mxbt].dftsaleprice = ld_dftsaleprice saletaskmx[it_mxbt].mtrlid = arg_mtrlid saletaskmx[it_mxbt].usaleqty = arg_uqty saletaskmx[it_mxbt].saleqty = Round(arg_uqty * arg_rate,uo_option_unit_dec) saletaskmx[it_mxbt].plprice = ld_planprice saletaskmx[it_mxbt].dscrp = arg_dscrp saletaskmx[it_mxbt].dscrp2 = arg_dscrp2 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].unit = arg_unit saletaskmx[it_mxbt].rate = arg_rate //saletaskmx[it_mxbt].uprice = arg_uprice saletaskmx[it_mxbt].enprice = arg_uprice // * arg_rebate//Round((arg_uprice * arg_uqty)/(Round(arg_uqty * arg_rate,uo_option_unit_dec)),10) saletaskmx[it_mxbt].rebate = arg_rebate saletaskmx[it_mxbt].fprice = arg_uprice * mrate / arg_rate saletaskmx[it_mxbt].acprice = saletaskmx[it_mxbt].fprice * arg_rebate saletaskmx[it_mxbt].scidprice = arg_scidprice saletaskmx[it_mxbt].outtype = arg_outtype saletaskmx[it_mxbt].requiredate = arg_requiredate saletaskmx[it_mxbt].pfcode = ls_pfcode IF uo_option_m_msttake = 1 THEN //使用多币种 msttakeamt = msttakeamt + arg_uprice * arg_uqty * arg_rebate ELSE // 系统不使用多币种,转换为人民币 msttakeamt = msttakeamt + arg_uprice * arg_uqty * arg_rebate * mrate END IF ext: IF rslt = 0 THEN p_clearmx() RETURN rslt end function private function integer p_getinfo (long arg_taskid, ref string arg_msg);Int rslt = 1 SELECT scid, 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, upname, ctmint, msttakeamt, takeamt INTO :scid, :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, :upname, :ctmint, :msttakeamt, :takeamt FROM u_SaleTask_ll Where u_SaleTask_ll.taskid = :arg_taskid 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 getinfo (long arg_taskid, ref string arg_msg);//getinfo(long arg_taskid,string arg_msg) //0 失败 1成功 Int rslt = 1,i = 1,j = 1 ,no_mxcheck = 0 IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误销售订单唯一码' GOTO ext END IF IF p_getinfo(arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //用游标读取明细 DECLARE cur_inwaermx CURSOR FOR SELECT u_saletaskmx_ll.mtrlid, u_saletaskmx_ll.saleqty, u_saletaskmx_ll.price, u_saletaskmx_ll.mxdscrp, u_saletaskmx_ll.mxdscrp2, u_mtrldef.mtrlcode, u_saletaskmx_ll.fprice, u_saletaskmx_ll.rebate, u_saletaskmx_ll.status, u_saletaskmx_ll.printid, u_saletaskmx_ll.woodcode, u_saletaskmx_ll.pcode, u_saletaskmx_ll.mtrlcuscode, u_saletaskmx_ll.enprice, u_saletaskmx_ll.outtypestr, u_saletaskmx_ll.dftsaleprice, u_saletaskmx_ll.requiredate, u_saletaskmx_ll.pfcode, u_saletaskmx_ll.scidprice FROM u_saletaskmx_ll,u_mtrldef WHERE u_saletaskmx_ll.taskid = :arg_taskid AND u_saletaskmx_ll.mtrlid = u_mtrldef.mtrlid USING commit_transaction; OPEN cur_inwaermx; FETCH cur_inwaermx INTO :saletaskmx[i].mtrlid,:saletaskmx[i].saleqty, :saletaskmx[i].acprice,:saletaskmx[i].dscrp,:saletaskmx[i].dscrp2, :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].requiredate, :saletaskmx[i].pfcode,:saletaskmx[i].scidprice; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_inwaermx INTO :saletaskmx[i].mtrlid,:saletaskmx[i].saleqty, :saletaskmx[i].acprice,:saletaskmx[i].dscrp,:saletaskmx[i].dscrp2, :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].requiredate, :saletaskmx[i].pfcode,:saletaskmx[i].scidprice; LOOP CLOSE cur_inwaermx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_saletaskmx_ll Where u_saletaskmx_ll.taskid = :arg_taskid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,销售订单明细数量" GOTO ext END IF IF i <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,销售订单明细" GOTO ext END IF it_mxbt = i - 1 //读取来料加工订单收料明细 //用游标读取明细 DECLARE cur_saletaskmx_in CURSOR FOR SELECT u_saletaskmx_in.mtrlid, u_saletaskmx_in.qty, u_saletaskmx_in.fprice, u_saletaskmx_in.mxdscrp, u_saletaskmx_in.status, u_saletaskmx_in.printid, u_saletaskmx_in.woodcode, u_saletaskmx_in.pcode, u_saletaskmx_in.plancode, u_saletaskmx_in.storageid FROM u_saletaskmx_in WHERE u_saletaskmx_in.taskid = :arg_taskid USING commit_transaction; OPEN cur_saletaskmx_in; FETCH cur_saletaskmx_in INTO :saletaskmx_in[j].mtrlid,:saletaskmx_in[j].qty, :saletaskmx_in[j].fprice,:saletaskmx_in[j].mxdscrp, :saletaskmx_in[j].status,:saletaskmx_in[j].printid,:saletaskmx_in[j].woodcode, :saletaskmx_in[j].pcode,:saletaskmx_in[j].plancode,:saletaskmx_in[j].storageid; DO WHILE sqlca.SQLCode = 0 j++ FETCH cur_saletaskmx_in INTO :saletaskmx_in[j].mtrlid,:saletaskmx_in[j].qty, :saletaskmx_in[j].fprice,:saletaskmx_in[j].mxdscrp, :saletaskmx_in[j].status,:saletaskmx_in[j].printid,:saletaskmx_in[j].woodcode, :saletaskmx_in[j].pcode,:saletaskmx_in[j].plancode,:saletaskmx_in[j].storageid; LOOP CLOSE cur_saletaskmx_in; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_saletaskmx_in Where u_saletaskmx_in.taskid = :arg_taskid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,销售订单明细数量" GOTO ext END IF IF j <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,销售订单明细" GOTO ext END IF it_mxbt_in = j - 1 it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer addmxcmpl (long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,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_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 AND status <> 5 THEN rslt = 0 IF status <> 1 THEN arg_msg = "销售订单只有在进行状态下才可以执行进仓" ELSEIF status <> 5 THEN arg_msg = "销售订单只有在完成状态下才可以撤消进仓" END IF GOTO ext END IF Decimal ls_usaleqty,ls_consignedqty String ls_mtrlcode SELECT u_saletaskmx_ll.usaleqty, u_saletaskmx_ll.consignedqty, u_mtrldef.mtrlcode INTO :ls_usaleqty, :ls_consignedqty, :ls_mtrlcode FROM u_saletaskmx_ll ,u_mtrldef WHERE ( u_saletaskmx_ll.taskid = :arg_taskid ) AND ( u_saletaskmx_ll.printid = :arg_printid ) AND ( u_saletaskmx_ll.stopflag = 0 ) AND ( u_saletaskmx_ll.mtrlid = u_mtrldef.mtrlid) USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品编码["+ls_mtrlcode+"]导致查询销售订单已完成数量操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF ls_usaleqty < ls_consignedqty+arg_addqty THEN rslt = 0 arg_msg = "产品["+ls_mtrlcode+"]的未完成数量只有"+String(ls_usaleqty - ls_consignedqty,'#,##0.0#')+",不能出仓"+String(arg_addqty,'#,##0.0#') GOTO ext END IF UPDATE u_saletaskmx_ll SET consignedqty = consignedqty +:arg_addqty WHERE ( u_saletaskmx_ll.taskid = :arg_taskid ) AND ( u_saletaskmx_ll.printid = :arg_printid ) AND ( u_saletaskmx_ll.stopflag = 0 ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品唯一码导致销售订单完成数量操作失败"+"~n"+ commit_transaction.SQLErrText GOTO ext END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() RETURN (rslt) end function public function integer addmxcmpl_in (long arg_taskid, long arg_printid, 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_taskid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 AND status <> 5 THEN rslt = 0 IF status <> 1 THEN ARG_MSG = "销售订单只有在进行状态下才可以执行收料进仓" ELSEIF status <> 5 THEN ARG_MSG = "销售订单只有在完成状态下才可以撤消收料进仓" END IF GOTO ext END IF Decimal ls_SaleQty,ls_consignedQty String ls_mtrlcode SELECT u_SaleTaskMx_in.Qty, u_SaleTaskMx_in.consignedQty, u_mtrldef.mtrlcode INTO :ls_SaleQty, :ls_consignedQty, :ls_mtrlcode FROM u_SaleTaskMx_in ,u_mtrldef WHERE ( u_SaleTaskMx_in.TaskID = :arg_taskid ) AND ( u_SaleTaskMx_in.printid = :arg_printid ) and ( u_SaleTaskMx_in.mtrlid = u_mtrldef.mtrlid) USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或错误产品编码["+ls_mtrlcode+"]导致查询销售订单已完成数量操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF IF ls_SaleQty < ls_consignedQty+arg_addqty THEN rslt = 0 ARG_MSG = "产品["+ls_mtrlcode+"]的未完成收料数量只有"+String(ls_SaleQty - ls_consignedQty,'#,##0.0#')+",不能出仓"+String(arg_addqty,'#,##0.0#') GOTO ext END IF UPDATE u_SaleTaskMx_in SET consignedQty = consignedQty +:arg_addqty WHERE ( u_SaleTaskMx_in.TaskID = :arg_taskid ) AND ( u_SaleTaskMx_in.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 and rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() Return (rslt) end function public function integer cancel (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误销售订单唯一码' GOTO ext END IF IF p_getinfo(arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF Status <> 0 THEN rslt = 0 arg_msg = "订单已经审核,不可以删除" GOTO ext END IF //IF sys_option_if_OA = 1 AND audit_buildtype = 0 THEN // IF f_check_if_oaflow( arg_scid,arg_taskid,6,arg_msg ) = 0 THEN // rslt = 0 // GOTO ext // END IF //END IF DELETE FROM u_saletask_ll Where u_saletask_ll.taskid = :arg_taskid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除来料加工订单操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK USING commit_transaction; GOTO ext END IF DELETE FROM u_saletaskmx_ll Where taskid = :arg_taskid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除来料加工订单发货明细操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK USING commit_transaction; GOTO ext END IF DELETE FROM u_SaleTaskMx_in Where taskid = :arg_taskid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除来料加工订单收料明细操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK USING commit_transaction; GOTO ext END IF 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 canceloapermit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);//相关OA公文被否决时调用 Int rslt = 1,cnt = 0 DateTime nulldate Decimal ls_consignedQty SetNull(nulldate) IF uo_option_saletask_secaudit = -1000 THEN arg_msg = '选项:[035]销售订单使用二级审核,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_if_oa_saletask = -1000 THEN arg_msg = '选项:[043]销售订单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误销售订单唯一码' GOTO ext END IF IF getinfo(arg_taskid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF ctmint > 0 THEN ARG_MSG = '单据已截数,不能操作' rslt = 0 GOTO ext END IF IF NOT (uo_option_saletask_secaudit = 1 AND uo_option_if_oa_saletask = 1) THEN rslt = 0 ARG_MSG = '系统设置没有使用OA审批流程,请联系管理员' GOTO ext END IF IF Status <> 4 THEN rslt = 0 ARG_MSG = "订单只有在已待生产审核状态才可以执行撤消审核,请核对" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_order_ml WHERE scid = :scid AND taskid = :arg_taskid AND ordertype = 2 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_outware_ll,u_outwaremx_ll WHERE ( u_outware_ll.outwareid = u_outwaremx_ll.outwareid ) AND ( u_outwaremx_ll.relid = :arg_taskid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致查询销售订单发货数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "销售订单已经有相关出仓单据,不可以撤消审核" GOTO ext END IF SELECT sum(u_saletaskmx_ll.consignedQty) INTO :ls_consignedQty FROM u_saletaskmx_ll WHERE ( u_saletaskmx_ll.TaskID = :arg_taskid ) AND ( u_saletaskmx_ll.stopflag = 0 ) USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询销售订单已完成数量操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF IF ls_consignedQty > 0 THEN rslt = 0 ARG_MSG = "销售订单已有完成数量,不能撤审" GOTO ext END IF UPDATE u_SaleTask_ll SET Status = 0, permit_emp = '', permit_date = :nulldate WHERE TaskID = :arg_taskid AND status = 4 USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致销售订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 ARG_MSG = "单据正在撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //默认订单调度 Long i FOR i = 1 TO it_mxbt IF p_cprqplan(arg_taskid,saletaskmx[i].printid,0,saletaskmx[i].saleqty,ARG_MSG,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() RETURN (rslt) end function public function integer updateassignqty (long arg_scid, long arg_taskid, long arg_printid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 Dec ld_SaleQty,ld_AssignQty IF p_getinfo(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 SaleQty, AssignQty INTO :ld_SaleQty, :ld_AssignQty FROM u_SaleTaskMx_ll WHERE 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 ld_SaleQty - ld_AssignQty < arg_qty THEN arg_msg = '排产数量大于待生产数!' rslt = 0 GOTO ext END IF UPDATE u_SaleTaskMx_ll SET AssignQty = AssignQty + :arg_qty WHERE taskid = :arg_taskid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新排产数失败>>'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; ELSEIF rslt = 0 THEN ROLLBACK USING commit_transaction; END IF RETURN rslt end function public function integer updatebegin (long arg_taskid, ref string arg_msg);Long rslt = 1,CNT = 0 IF uo_option_if_oa_saletask = -1000 THEN arg_msg = '选项:[043]销售订单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误销售订单唯一码' GOTO ext END IF IF p_getinfo(arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF Status <> 0 THEN rslt = 0 arg_msg = '已经处于审核或完成等状态,不可以修改,如果订单未完成并要修改请先撤销审核' GOTO ext END IF IF uo_option_if_oa_saletask = 1 AND audit_buildtype = 0 THEN IF f_check_if_oaflow(scid,arg_taskid,6,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF it_newbegin = FALSE it_updatebegin = TRUE p_clearmx() //清除明细 msttakeamt = 0 ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer trycmplsaletask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long 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_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 AND status <> 5 THEN rslt = 0 IF status <> 1 THEN arg_msg = "销售订单只有在进行状态下才可以执行设完成状态" ELSEIF status <> 5 THEN arg_msg = "销售订单只有在完成状态下才可以执行撤消完成状态" END IF GOTO ext END IF Decimal ls_zerook Boolean if_finish if_finish = TRUE DECLARE zero_cur CURSOR FOR SELECT u_saletaskmx_ll.usaleqty - u_saletaskmx_ll.consignedqty FROM u_saletaskmx_ll WHERE ( u_saletaskmx_ll.taskid = :arg_taskid ) AND ( u_saletaskmx_ll.stopflag = 0 ) 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_ll SET status = 5, accomplishdate = getdate(), finishemp = :publ_operator WHERE ( u_saletask_ll.taskid = :arg_taskid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致销售订单完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK USING commit_transaction; GOTO ext END IF END IF IF status = 5 AND NOT if_finish THEN UPDATE u_saletask_ll SET status = 1, accomplishdate = :null_dt, finishemp = '' WHERE ( u_saletask_ll.taskid = :arg_taskid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致销售订单撤消完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK USING commit_transaction; GOTO ext END IF END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() RETURN (rslt) end function public function integer tempstoptask (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_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_ll SET Status = 2,stopemp = :publ_operator Where TaskID = :arg_taskid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致暂停销售订单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ELSE UPDATE u_SaleTask_ll SET Status = 1,stopemp = '' Where TaskID = :arg_taskid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致取消暂停销售订单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() Return (rslt) end function public function integer stopsaletask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 IF uo_option_if_oa_saletask = -1000 THEN arg_msg = '选项:[043]销售订单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误销售订单唯一码' GOTO ext END IF IF p_getinfo(arg_taskid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF Status <> 1 THEN rslt = 0 ARG_MSG = "订单只有在进行状态才可以执行终止,请核对" GOTO ext END IF IF uo_option_if_oa_saletask = 1 AND audit_buildtype = 0 THEN IF f_check_if_oaflow(scid,arg_taskid,6,ARG_MSG ) = 0 THEN rslt = 0 GOTO ext END IF END IF UPDATE u_SaleTask_ll SET Status = 3, accomplishdate = getdate() , stopemp = :publ_operator WHERE TaskID = :arg_taskid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致终止销售订单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() RETURN (rslt) end function public function integer stopmx (long arg_taskid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, ref string arg_msg, boolean arg_commit);Int rslt = 1 Int li_flag,li_bjflag string ls_outtype DateTime null_dt Decimal ld_notconsignedqty SetNull(null_dt) IF p_getinfo(arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 THEN arg_msg = '订单只能在进行状态下才能操作' rslt = 0 GOTO ext END IF SELECT stopflag,outtypestr INTO :li_flag,:ls_outtype FROM u_saletaskmx_ll WHERE taskid = :arg_taskid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败' rslt = 0 GOTO ext END IF IF arg_flag = 0 THEN IF li_flag = 0 THEN arg_msg = '明细物料'+arg_mtrlcode+'还未中止,不能取消中止' rslt = 0 GOTO ext END IF ELSE IF li_flag = 1 THEN arg_msg = '明细物料'+arg_mtrlcode+'已中止,不能重复中止' rslt = 0 GOTO ext END IF END IF IF arg_flag = 1 THEN SELECT u_saletaskmx_ll.usaleQty - u_saletaskmx_ll.consignedqty INTO :ld_notconsignedqty FROM u_saletaskmx_ll WHERE taskid = :arg_taskid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败' rslt = 0 GOTO ext END IF IF ld_notconsignedqty <= 0 THEN arg_msg = '明细物料'+arg_mtrlcode+'已完成收货,不能中止' rslt = 0 GOTO ext END IF if ls_outtype = '补件' and li_bjflag = 1 then arg_msg = '该明细内容为补件明细,并已审核,不能中止' rslt = 0 goto ext end if END IF IF arg_flag = 0 THEN UPDATE u_saletaskmx_ll SET stopflag = 0, stopemp = '', stopdate = :null_dt, stopreason = '' WHERE taskid = :arg_taskid AND printid = :arg_printid; ELSE UPDATE u_saletaskmx_ll SET stopflag = 1, stopemp = :publ_operator, stopdate = getdate(), stopreason = :arg_stopreason WHERE taskid = :arg_taskid AND printid = :arg_printid; END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新明细'+arg_mtrlcode+'中止标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF trycmplsaletask(arg_taskid,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_commit THEN COMMIT; END IF RETURN rslt end function public function integer salepermit (long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 IF uo_option_saletask_secaudit = -1000 THEN arg_msg = '选项:[035]销售订单使用二级审核,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_if_oa_saletask = -1000 THEN arg_msg = '选项:[043]销售订单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_if_msg = -1000 THEN arg_msg = '选项:[044]销售订单使用消息确认,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_saletask_addware = -1000 THEN arg_msg = '选项:[039]销售订单审核自动加0库存,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误销售订单唯一码' GOTO ext END IF IF getinfo(arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 0 THEN rslt = 0 arg_msg = "订单已经审核或已作其它处理,操作取消" GOTO ext END IF //IF sys_option_if_oa = 1 AND audit_buildtype = 0 THEN // IF f_check_if_oaflow(arg_scid,arg_taskid,6,arg_msg ) = 0 THEN // rslt = 0 // GOTO ext // END IF //END IF IF uof_p_check_dprice(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 IF uo_option_saletask_secaudit = 0 THEN UPDATE u_saletask_ll SET permit_emp = :arg_emp , permit_date = getdate(), p_Auditingdate = getdate(), p_Auditingrep = :arg_emp, status = 1 WHERE taskid = :arg_taskid AND status = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致订单审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ELSE UPDATE u_saletask_ll SET permit_emp = :arg_emp , permit_date = getdate(), status = 4 WHERE taskid = :arg_taskid AND status = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致订单审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF //成品仓加0库存 //----------------------------------------------- IF uo_option_saletask_addware = 1 AND Kind > 0 THEN Long ll_storageid_arr[],ll_storageid Long ll_scid_arr[],ll_scid String ll_storagename_arr[],ls_storagename Long ll_j,count,ll_i Int li_balctype_arr[],li_balctype Long ll_cusid String ls_status,ls_mtrlcode,ls_pcode,ls_woodcode,ls_plancode Long ll_mtrlwareid,ll_mtrlid DECLARE pf_cur CURSOR FOR SELECT u_storage.storageid, u_storage.storagename, u_storage.scid, u_storage.balctype FROM u_storage Where ( u_storage.mtrlprp = 0 ); OPEN pf_cur; FETCH pf_cur INTO :ll_storageid,:ls_storagename,:ll_scid,:li_balctype; DO WHILE sqlca.SQLCode = 0 count++ ll_storageid_arr[count] = ll_storageid ll_storagename_arr[count] = ls_storagename ll_scid_arr[count] = ll_scid li_balctype_arr[count] = li_balctype FETCH pf_cur INTO :ll_storageid,:ls_storagename,:ll_scid,:li_balctype; 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 ls_plancode = saletaskmx[ll_i].mtrlcuscode FOR ll_j = 1 TO count IF li_balctype_arr[ll_j] = 1 THEN ll_cusid = cusid ELSE ll_cusid = 0 END IF 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 plancode = :ls_plancode AND pcode = :ls_pcode AND sptid = :ll_cusid; IF sqlca.SQLCode = -1 THEN arg_msg = '查询:'+ls_mtrlcode+'仓库:'+ll_storagename_arr[ll_j]+'库存失败' rslt = 0 GOTO ext ELSEIF sqlca.SQLCode = 100 THEN ll_mtrlwareid = 0 ll_mtrlwareid = f_sys_scidentity(ll_scid_arr[ll_j],"u_mtrlware","mtrlwareid",arg_msg,TRUE,id_sqlca) IF ll_mtrlwareid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_mtrlware(scid,mtrlwareid,mtrlid,storageid,noallocqty,status,plancode,woodcode,pcode,sptid) Values(:ll_scid_arr[ll_j],:ll_mtrlwareid,:ll_mtrlid,:ll_storageid_arr[ll_j],0,:ls_status,:ls_plancode,:ls_woodcode,:ls_pcode,:ll_cusid); IF sqlca.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 IF uo_option_if_msg = 1 THEN IF f_billmsg(scid,taskcode,taskcode+'销售订单确认',taskcode+'销售订单确认',commit_transaction,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF END IF //默认订单调度 Long i IF uo_option_saletask_secaudit = 0 THEN FOR i = 1 TO it_mxbt IF p_cprqplan(arg_taskid,saletaskmx[i].printid,1,saletaskmx[i].saleqty,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT END IF IF uo_option_if_oa_saletask = 1 AND uo_option_saletask_secaudit = 1 THEN IF f_oa(commit_transaction,FALSE,arg_msg,6,scid,taskid,taskcode,relcode,dscrp) = 0 THEN rslt = 0 GOTO ext END IF END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() RETURN rslt end function public function integer propermit (long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);//salepermit Int rslt = 1,cnt = 0 IF uo_option_saletask_secaudit = -1000 THEN arg_msg = '选项:[035]销售订单使用二级审核,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_if_oa_saletask = -1000 THEN arg_msg = '选项:[043]销售订单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_saletask_fore_secaudit = -1000 THEN arg_msg = '选项:[088]销售预测单二级审核,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误销售订单唯一码' GOTO ext END IF IF getinfo(arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 4 THEN rslt = 0 arg_msg = "订单不是在待生产审状态,操作取消" GOTO ext END IF IF Kind <> 0 THEN IF uo_option_if_oa_saletask = 1 AND uo_option_saletask_fore_secaudit = 1 AND audit_buildtype = 0 THEN IF f_check_if_oaflow(scid,arg_taskid,6,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF Long i FOR i = 1 TO it_mxbt IF p_cprqplan(arg_taskid,saletaskmx[i].printid,1,saletaskmx[i].saleqty,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT 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_ll SET p_Auditingdate = getdate(), p_Auditingrep = :arg_emp, status = 1 WHERE taskid = :arg_taskid AND status = 4 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致订单生产审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() Return (rslt) end function public function integer trycmptask_fore (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_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF Kind <> 0 THEN rslt = 0 arg_msg = '不是销售预测单不能按进仓数来完成单据' GOTO ext END IF IF status <> 1 AND status <> 5 THEN rslt = 0 IF status <> 1 THEN arg_msg = "销售订单只有在进行状态下才可以执行设完成状态" ELSEIF status <> 5 THEN arg_msg = "销售订单只有在完成状态下才可以执行撤消完成状态" END IF GOTO ext END IF Decimal ls_zerook Boolean if_finish if_finish = TRUE DECLARE zero_cur CURSOR FOR SELECT u_saletaskmx.saleqty - u_saletaskmx.inwareqty FROM u_saletaskmx WHERE ( u_saletaskmx.taskid = :arg_taskid ) AND ( u_saletaskmx.stopflag = 0 ) 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 ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致销售订单完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK USING commit_transaction; GOTO ext END IF END IF IF status = 5 AND NOT if_finish THEN UPDATE u_saletask SET status = 1, accomplishdate = :null_dt, finishemp = '' WHERE ( u_saletask.taskid = :arg_taskid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致销售订单撤消完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK USING commit_transaction; GOTO ext END IF END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() Return (rslt) end function public function integer add_dscrp (long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 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_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_ll SET DSCRP = DSCRP+' '+:arg_newdescppart Where u_saletask_ll.taskid = :arg_taskid 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 public function integer ddpermit (long arg_taskid, long arg_printid, integer arg_flag, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 Int li_ddflag,li_stopflag Long ll_mtrlid,ll_scid Decimal ld_bqty DateTime ldt_null SetNull(ldt_null) IF uo_option_autocreate_buy_cp = -1000 THEN arg_msg = '选项:[113]销售订单调度审核自动建立成品申购单,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF uo_requestbuy uo_rqbuy uo_rqbuy = CREATE uo_requestbuy SELECT u_saletaskmx_ll.mtrlid, u_saletaskmx_ll.ddflag, u_saletaskmx_ll.stopflag, u_saletask_ll.scid INTO :ll_mtrlid, :li_ddflag, :li_stopflag, :ll_scid FROM u_saletaskmx_ll,u_saletask_ll WHERE u_saletaskmx_ll.taskid = u_saletask_ll.taskid AND u_saletaskmx_ll.taskid = :arg_taskid AND u_saletaskmx_ll.printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询订单产品明细失败 '+SQLCA.SQLErrText GOTO ext END IF IF li_stopflag = 1 THEN rslt = 0 arg_msg = '该订单明细已经终止,不能再调度审核' GOTO ext END IF Int li_ifautodd SELECT ifautodd INTO :li_ifautodd FROM u_mtrldef Where mtrlid = :ll_mtrlid ; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询订单明细物料是否自动调度失败,'+SQLCA.SQLErrText rslt = 0 GOTO ext END IF IF li_ifautodd = 0 THEN IF arg_flag = 0 THEN IF li_ddflag = 1 THEN rslt = 0 arg_msg = '该订单明细已经调度审核' GOTO ext END IF ELSE IF li_ddflag = 0 THEN rslt = 0 arg_msg = '该订单明细未调度审核' GOTO ext END IF END IF END IF IF arg_flag = 0 THEN IF uo_option_autocreate_buy_cp = 1 THEN ld_bqty = 0 SELECT bqty INTO :ld_bqty FROM u_saletaskmx_ll WHERE taskid = :arg_taskid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询订单明细安排采购数量失败 ' + SQLCA.SQLErrText GOTO ext END IF IF ld_bqty > 0 THEN Long ll_cusid String ls_mtrlcode,ls_status,ls_woodcode,ls_pcode,ls_unit SELECT u_saletaskmx_ll.mtrlid, u_saletaskmx_ll.status, u_saletaskmx_ll.woodcode, u_saletaskmx_ll.pcode, u_mtrldef.mtrlcode, u_mtrldef.unit, u_saletask_ll.cusid INTO :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ls_mtrlcode, :ls_unit, :ll_cusid FROM u_saletaskmx_ll, u_mtrldef, u_saletask_ll WHERE u_saletaskmx_ll.mtrlid = u_mtrldef.mtrlid AND u_saletask_ll.taskid = u_saletaskmx_ll.taskid AND u_saletaskmx_ll.taskid = :arg_taskid AND u_saletaskmx_ll.printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询订单明细内容失败 ' + SQLCA.SQLErrText GOTO ext END IF s_requestbuy arg_s_rqbuy arg_s_rqbuy.scid = ll_scid arg_s_rqbuy.requestbuyid = 0 arg_s_rqbuy.requestbuydate = DateTime(Today(),Time(0)) arg_s_rqbuy.assign_emp = publ_operator arg_s_rqbuy.relcode = '' arg_s_rqbuy.dscrp = '' arg_s_rqbuy.ifauto = 1 arg_s_rqbuy.billtype = 1 arg_s_rqbuy.arg_s_rqbuymx[1].mtrlcode = ls_mtrlcode arg_s_rqbuy.arg_s_rqbuymx[1].uqty = ld_bqty arg_s_rqbuy.arg_s_rqbuymx[1].unit = ls_unit arg_s_rqbuy.arg_s_rqbuymx[1].status = ls_status arg_s_rqbuy.arg_s_rqbuymx[1].woodcode = ls_woodcode arg_s_rqbuy.arg_s_rqbuymx[1].pcode = ls_pcode arg_s_rqbuy.arg_s_rqbuymx[1].mxdscrp = '' arg_s_rqbuy.arg_s_rqbuymx[1].mtrlid = ll_mtrlid arg_s_rqbuy.arg_s_rqbuymx[1].orderid = arg_taskid arg_s_rqbuy.arg_s_rqbuymx[1].wrkgrpid = 0 arg_s_rqbuy.arg_s_rqbuymx[1].ifrel = 1 arg_s_rqbuy.arg_s_rqbuymx[1].printid = 1 arg_s_rqbuy.arg_s_rqbuymx[1].rate = 1 arg_s_rqbuy.arg_s_rqbuymx[1].dftsptid = ll_cusid arg_s_rqbuy.arg_s_rqbuymx[1].relprintid = arg_printid IF uo_rqbuy.Save(arg_s_rqbuy,publ_operator,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF IF uo_rqbuy.audit(ll_scid,uo_rqbuy.uo_requestbuyid,publ_operator,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF IF uo_rqbuy.audit_2(ll_scid,uo_rqbuy.uo_requestbuyid,publ_operator,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF UPDATE u_saletaskmx_ll SET ddflag = 1, dddate = getdate(), ddemp = :publ_operator WHERE ddflag = 0 AND taskid = :arg_taskid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新订单明细调度审核标记失败 ' + SQLCA.SQLErrText GOTO ext END IF ELSE IF uo_option_autocreate_buy_cp = 1 THEN Long ll_requestbuyid[] Long ll_i,i i = 1 DECLARE cur_rqbuy CURSOR FOR SELECT u_requestbuy.requestbuyid FROM u_requestbuymx,u_requestbuy WHERE u_requestbuymx.requestbuyid = u_requestbuy.requestbuyid AND u_requestbuy.scid = :ll_scid AND u_requestbuymx.orderid = :arg_taskid AND u_requestbuymx.relprintid = :arg_printid AND u_requestbuy.billtype = 1 USING commit_transaction; OPEN cur_rqbuy; FETCH cur_rqbuy INTO :ll_requestbuyid[i]; DO WHILE commit_transaction.SQLCode = 0 i++ FETCH cur_rqbuy INTO :ll_requestbuyid[i]; LOOP CLOSE cur_rqbuy; FOR ll_i = 1 TO i - 1 IF uo_rqbuy.caudit_2(ll_scid,ll_requestbuyid[ll_i],0,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF IF uo_rqbuy.caudit(ll_scid,ll_requestbuyid[ll_i],0,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF IF uo_rqbuy.del(ll_scid,ll_requestbuyid[ll_i],0,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT ELSE //检查申购单 SELECT count(*) INTO :cnt FROM u_requestbuymx,u_requestbuy WHERE u_requestbuymx.requestbuyid = u_requestbuy.requestbuyid AND u_requestbuy.scid = :ll_scid AND u_requestbuymx.orderid = :arg_taskid AND u_requestbuymx.relprintid = :arg_printid AND u_requestbuy.billtype = 1 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询订单相关成品申购单失败' GOTO ext END IF IF cnt <> 0 THEN rslt = 0 arg_msg = '订单已经存在相关成品申购单.不可以撤销审核' GOTO ext END IF END IF //检查生产计划 SELECT count(*) INTO :cnt FROM u_Order_ml INNER JOIN u_order_ml_mx ON u_Order_ml.scid = u_order_ml_mx.scid AND u_Order_ml.OrderID = u_order_ml_mx.orderid WHERE u_order_ml_mx.taskid = :arg_taskid AND u_order_ml_mx.taskmxid = :arg_printid AND u_order_ml_mx.scid = :ll_scid AND u_Order_ml.ordertype = 2 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_ll SET ddflag = 0, dddate = :ldt_null, ddemp = '' WHERE ddflag = 1 AND taskid = :arg_taskid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新订单明细调度审核标记失败 ' + SQLCA.SQLErrText GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF DESTROY uo_rqbuy RETURN rslt end function public function integer p_cprqplan (long arg_taskid, long arg_printid, long arg_flag, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_stopflag,li_ddflag Long ll_mtrlid,cnt DateTime ldt_null SetNull(ldt_null) IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误销售订单唯一码' GOTO ext END IF SELECT mtrlid,ddflag,stopflag INTO :ll_mtrlid,:li_ddflag,:li_stopflag FROM u_saletaskmx_ll WHERE u_saletaskmx_ll.taskid = :arg_taskid AND u_saletaskmx_ll.printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ARG_MSG = '查询订单信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_stopflag = 1 THEN rslt = 0 ARG_MSG = '查询订单明细已经终止,请检查' GOTO ext END IF Int li_ifautodd SELECT ifautodd INTO :li_ifautodd FROM u_mtrldef Where mtrlid = :ll_mtrlid ; IF commit_transaction.SQLCode <> 0 THEN ARG_MSG = '查询订单明细物料是否自动调度失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_flag = 1 THEN Int li_mtrlorigin String ls_mtrlcode Int li_iflljg SELECT mtrlorigin,mtrlcode,iflljg INTO :li_mtrlorigin,:ls_mtrlcode,:li_iflljg FROM u_mtrldef Where mtrlid = :ll_mtrlid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询订单产品['+ls_mtrlcode+']来源失败' GOTO ext END IF IF li_mtrlorigin = 0 THEN IF li_iflljg = 0 THEN UPDATE u_saletaskmx_ll SET pqty = :arg_qty WHERE taskid = :arg_taskid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '更新订单产品['+ls_mtrlcode+']排产数量失败' GOTO ext END IF ELSE UPDATE u_saletaskmx_ll SET lqty = :arg_qty WHERE taskid = :arg_taskid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '更新订单产品['+ls_mtrlcode+']客户来料数量失败' GOTO ext END IF END IF ELSEIF li_mtrlorigin = 2 THEN UPDATE u_saletaskmx_ll SET bqty = :arg_qty WHERE taskid = :arg_taskid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '更新订单产品['+ls_mtrlcode+']采购数量失败' GOTO ext END IF ELSEIF li_mtrlorigin = 3 THEN UPDATE u_saletaskmx_ll SET wqty = :arg_qty WHERE taskid = :arg_taskid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '更新订单产品['+ls_mtrlcode+']外协数量失败' GOTO ext END IF ELSEIF li_mtrlorigin = 6 THEN UPDATE u_saletaskmx_ll SET lqty = :arg_qty WHERE taskid = :arg_taskid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '更新订单产品['+ls_mtrlcode+']客户来料数量失败' GOTO ext END IF END IF ELSE IF li_ifautodd = 0 THEN IF li_ddflag = 1 THEN rslt = 0 ARG_MSG = '该订单明细已经调度审核' GOTO ext END IF END IF UPDATE u_saletaskmx_ll SET pqty = 0,bqty = 0,wqty = 0,lqty = 0 WHERE taskid = :arg_taskid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '更新订单产品['+ls_mtrlcode+']调度数量失败' GOTO ext END IF END IF IF li_ifautodd = 1 THEN IF arg_flag = 1 THEN IF ddpermit(arg_taskid,arg_printid,0,ARG_MSG,FALSE) = 0 THEN rslt = 0 GOTO ext END IF ELSE IF ddpermit(arg_taskid,arg_printid,1,ARG_MSG,FALSE) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF ext: IF rslt = 0 THEN ROLLBACK ; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF Return (rslt) end function public function integer cancelpermit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 DateTime nulldate Decimal ls_consignedQty SetNull(nulldate) IF uo_option_saletask_secaudit = -1000 THEN arg_msg = '选项:[035]销售订单使用二级审核,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_if_oa_saletask = -1000 THEN arg_msg = '选项:[043]销售订单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误销售订单唯一码' GOTO ext END IF IF getinfo(arg_taskid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF ctmint > 0 THEN ARG_MSG = '单据已截数,不能操作' rslt = 0 GOTO ext END IF IF uo_option_saletask_secaudit = 0 OR (uo_option_saletask_secaudit = 1 AND uo_option_if_oa_saletask = 1) THEN IF Status <> 1 THEN rslt = 0 IF (uo_option_saletask_secaudit = 1 AND uo_option_if_oa_saletask = 1) THEN ARG_MSG = "订单正在执行审批流程,只有在在进行状态才可以执行撤消审核" ELSE ARG_MSG = "订单只有在已审核状态才可以执行撤消审核,请核对" END IF GOTO ext END IF ELSE IF Status <> 4 THEN rslt = 0 ARG_MSG = "订单只有在已待生产审核状态才可以执行撤消审核,请核对" GOTO ext END IF END IF SELECT count(*) INTO :cnt FROM u_order_ml WHERE scid = :scid AND taskid = :arg_taskid AND ordertype = 2 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_outware_ll,u_outwaremx_ll WHERE ( u_outware_ll.outwareid = u_outwaremx_ll.outwareid ) AND ( u_outwaremx_ll.relid = :arg_taskid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致查询销售订单发货数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "销售订单已经有相关出仓单据,不可以撤消审核" GOTO ext END IF SELECT sum(u_saletaskmx_ll.consignedQty) INTO :ls_consignedQty FROM u_saletaskmx_ll WHERE ( u_saletaskmx_ll.TaskID = :arg_taskid ) AND ( u_saletaskmx_ll.stopflag = 0 ) USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询销售订单已完成数量操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF IF ls_consignedQty > 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 = 5 ) AND ( u_inware.scid = u_inwaremx.scid ) AND ( u_inware.inwareid = u_inwaremx.inwareid ) AND ( u_inwaremx.relid = :arg_taskid ) AND ( u_inware.scid = :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 SELECT sum(u_saletaskmx_in.consignedQty) INTO :ls_consignedQty FROM u_saletaskmx_in WHERE ( u_saletaskmx_in.TaskID = :arg_taskid ) USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询来料加工订单已收料数量操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF IF ls_consignedQty > 0 THEN rslt = 0 ARG_MSG = "来料加工订单已有收料数量,不能撤审" GOTO ext END IF IF uo_option_saletask_secaudit = 0 OR (uo_option_saletask_secaudit = 1 AND uo_option_if_oa_saletask = 1) THEN UPDATE u_SaleTask_ll SET Status = 0, permit_emp = '', permit_date = :nulldate, p_Auditingrep = '', p_Auditingdate = :nulldate WHERE TaskID = :arg_taskid AND status = 1 USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致销售订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 ARG_MSG = "单据正在撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ELSE UPDATE u_SaleTask_ll SET Status = 0, permit_emp = '', permit_date = :nulldate WHERE TaskID = :arg_taskid AND status = 4 USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致销售订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 ARG_MSG = "单据正在撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF //默认订单调度 Long i FOR i = 1 TO it_mxbt IF p_cprqplan(arg_taskid,saletaskmx[i].printid,0,saletaskmx[i].saleqty,ARG_MSG,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() RETURN (rslt) end function public function integer checkmxcmpl (long arg_taskid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg); Int rslt = 1 long 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_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 ) 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_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 IF uo_option_if_oa_saletask = -1000 THEN arg_msg = '选项:[043]销售订单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF p_getinfo(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 IF uo_option_if_oa_saletask = 1 AND audit_buildtype = 0 THEN IF f_check_if_oaflow(scid,arg_taskid,6,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF UPDATE u_SaleTask SET status = 5, accomplishdate = getdate(), finishemp = :publ_operator WHERE ( u_SaleTask.TaskID = :arg_taskid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致完成销售订单操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK USING commit_transaction; GOTO ext END IF ext: IF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() RETURN (rslt) end function public function integer cancelpropermit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1,cnt = 0 DateTime nulldate Decimal ls_consignedQty SetNull(nulldate) IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误销售订单唯一码' GOTO ext END IF IF getinfo(arg_taskid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF ctmint > 0 THEN ARG_MSG = '单据已截数,不能操作' rslt = 0 GOTO ext END IF IF Status <> 1 THEN rslt = 0 ARG_MSG = "订单只有在进行状态才可以执行撤消生产审核,请核对" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_order_ml WHERE taskid = :arg_taskid and ordertype = 2 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_outware_ll,u_outwaremx_ll WHERE ( u_outware_ll.outwareid = u_outwaremx_ll.outwareid ) AND ( u_outwaremx_ll.relid = :arg_taskid ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致查询销售订单发货数量操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "销售订单已经有相关出仓单据,不可以撤消审核" GOTO ext END IF SELECT sum(u_SaleTaskMx_ll.consignedQty) INTO :ls_consignedQty FROM u_SaleTaskMx_ll WHERE ( u_SaleTaskMx_ll.TaskID = :arg_taskid ) AND ( u_SaleTaskMx_ll.stopflag = 0 ) USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询来料加工订单已完成数量操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF IF ls_consignedQty > 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 = 5 ) AND ( u_inware.scid = u_inwaremx.scid ) AND ( u_inware.inwareid = u_inwaremx.inwareid ) AND ( u_inwaremx.relid = :arg_taskid ) AND ( u_inware.scid = :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 SELECT sum(u_SaleTaskMx_in.consignedQty) INTO :ls_consignedQty FROM u_SaleTaskMx_in WHERE ( u_SaleTaskMx_in.TaskID = :arg_taskid ) USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询来料加工订单已收料数量操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF IF ls_consignedQty > 0 THEN rslt = 0 ARG_MSG = "来料加工订单已有收料数量,不能撤审" GOTO ext END IF //默认订单调度 Long i FOR i = 1 TO it_mxbt IF p_cprqplan(arg_taskid,saletaskmx[i].printid,0,saletaskmx[i].saleqty,ARG_MSG,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT UPDATE u_SaleTask_ll SET Status = 4, p_Auditingrep = '', p_Auditingdate = :nulldate WHERE TaskID = :arg_taskid AND status = 1 USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致销售订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 ARG_MSG = "单据正在撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() Return (rslt) end function public function integer updatebqty (long arg_taskid, long arg_printid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Dec ld_SaleQty,ld_finishbQty,ld_bqty IF p_getinfo(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 bqty, finishbqty INTO :ld_bqty, :ld_finishbQty FROM u_saletaskmx_ll WHERE 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 ld_bqty - ld_finishbQty < arg_qty THEN arg_msg = '申购数量大于待申购数!' rslt = 0 GOTO ext END IF UPDATE u_saletaskmx_ll SET finishbqty = finishbqty + :arg_qty WHERE taskid = :arg_taskid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新订单申购数失败>>'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; ELSEIF rslt = 0 THEN ROLLBACK USING commit_transaction; END IF RETURN rslt end function public function integer updateinwareqty (long arg_taskid, long arg_printid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 Dec ld_SaleQty,ld_inwareQty IF p_getinfo(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 SaleQty, inwareQty INTO :ld_SaleQty, :ld_inwareQty FROM u_saletaskmx_ll WHERE 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 ld_SaleQty - ld_inwareQty < arg_qty THEN arg_msg = '进仓数量大于未进仓数!' rslt = 0 GOTO ext END IF UPDATE u_saletaskmx_ll SET inwareQty = inwareQty + :arg_qty WHERE taskid = :arg_taskid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新进仓数失败>>'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; ELSEIF rslt = 0 THEN ROLLBACK USING commit_transaction; END IF RETURN rslt end function public function integer newbegin ();//重置对象,设定业务类型与关联ID,准备建立新单 //0 fail 1 success int rslt=1 long CNT=0 p_reset() it_newbegin=TRUE it_updatebegin=FALSE return rslt end function on uo_saletask_ll.create call super::create TriggerEvent( this, "constructor" ) end on on uo_saletask_ll.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String arg_msg String str_optionvalue str_optionvalue = '' f_get_sys_option_value('029',str_optionvalue,arg_msg) uo_option_change_status = str_optionvalue str_optionvalue = '' f_get_sys_option_value('027',str_optionvalue,arg_msg) uo_option_change_woodcode = str_optionvalue str_optionvalue = '' f_get_sys_option_value('028',str_optionvalue,arg_msg) uo_option_change_pcode = str_optionvalue str_optionvalue = '' f_get_sys_option_value('035',str_optionvalue,arg_msg) uo_option_saletask_secaudit = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('043',str_optionvalue,arg_msg) uo_option_if_oa_saletask = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('133',str_optionvalue,arg_msg) uo_option_taskplancode_auto_ll = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('113',str_optionvalue,arg_msg) uo_option_autocreate_buy_cp = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('045',str_optionvalue,arg_msg) uo_option_m_msttake = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('051',str_optionvalue,arg_msg) uo_option_taskaudit_dprice = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('044',str_optionvalue,arg_msg) uo_option_if_msg = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('088',str_optionvalue,arg_msg) uo_option_saletask_fore_secaudit = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('039',str_optionvalue,arg_msg) uo_option_saletask_addware = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('023',str_optionvalue,arg_msg) uo_option_unit_dec = Long(str_optionvalue) end event