$PBExportHeader$uo_saletask.sru forward global type uo_saletask from nonvisualobject end type type s_saletaskmx from structure within uo_saletask end type type s_saletaskmx_mx from structure within uo_saletask end type type s_saletaskmx_in from structure within uo_saletask end type type s_saletask_itemmx from structure within uo_saletask end type end forward type s_saletaskmx from structure long mtrlid decimal { 10 } saleqty decimal { 10 } plprice decimal { 10 } acprice decimal { 10 } enacprice string dscrp string mtrlcode decimal { 10 } fprice decimal { 10 } u_mtrldef_expday 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 long quoteid string quotecode long quoteprintid string pocode string typestr string pricetype decimal { 5 } capacity decimal { 5 } nprice decimal { 5 } planprice decimal { 10 } stopqty long poid decimal { 10 } fpqty string dscrp_text decimal { 5 } taxrate decimal { 10 } addqty string priceformula long sampleid decimal { 10 } net_weight decimal { 10 } gross_weight decimal { 10 } cubage long fjcnt string fjstr decimal { 10 } porebate 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 type s_saletask_itemmx from structure long scid long taskid long printid long itemid decimal{2} amt string mxdscrp 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 Public ProtectedWrite Long ctmint 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 dscrp3 String relcode String paytype String freight_tele String cus_address String cus_tele String cus_fax String upname Decimal msttakeamt,takeamt Long typeid String rel_rep Int Level long exchangeid string station_address DateTime sendTime String sendUser,fiebrelcode int selecttype Long audit_buildtype int priceflag datetime pricedate string pricerep Transaction commit_transaction //数据commit事务 Private: s_saletaskmx saletaskmx[] //明细结构 s_saletaskmxmx saletaskmxmx[] //明细结构 s_saletaskmx_in saletaskmx_in[] //明细结构 s_saletask_itemmx saletask_itemmx[] Long it_mxbt_in = 0 //来料加工订单收料明细 Long it_mxbt = 0 //明细结构数组末指针 Long it_mxbtmx = 0 //明细结构数组末指针 Long it_mxbt_item = 0 //费用明细指针 Boolean it_newbegin = False //新建标志 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_price_rmb Int uo_option_m_msttake Int uo_option_saletask_secaudit Int uo_option_saletask_fore_secaudit Int uo_option_if_oa_saletask Int uo_option_if_oa_saletask_fore Int uo_option_taskplancode_auto Int uo_option_taskaudit_dprice Int uo_option_autocreate_buy_cp Int uo_option_saletask_addware Int uo_option_if_msg Int uo_option_saletask_set_planprice Int uo_option_checkprice_native Int uo_option_inout_type Int uo_option_if_pricetype Int uo_option_if_saleout Int uo_option_disuse_saletask Int uo_option_sale_ifuse_negativeprice Int uo_option_saletask_ifuse_typebillcode Int uo_option_dd_allto_pqty int uo_option_saletask_rebate_check int uo_option_saletask_packprobom_check int uo_option_saletask_fore_addware int uo_option_saletask_stopqty_type int uo_option_saletask_affirm_produce 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 getinfo (long arg_scid, long arg_taskid, ref string arg_msg) public function integer salepermit (long arg_scid, long arg_taskid, string arg_emp, 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 acceptmx_mx (long arg_scid, long arg_mtrlwareid, decimal arg_qty, ref string arg_msg) public function integer stopmx (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, ref string arg_msg, boolean arg_commit) public function integer bjmx (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlcode, integer arg_flag, ref string arg_msg, boolean arg_commit) public function integer bjprice (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlcode, decimal arg_enprice, decimal arg_rebate, ref string arg_msg, boolean arg_commit) public function integer propermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer cancelpropermit (long arg_scid, 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) private function integer uof_p_check_dprice (ref string arg_msg) public function integer ddpermit (long arg_scid, long arg_taskid, long arg_printid, integer arg_flag, ref string arg_msg, boolean arg_ifcommit) public function integer p_cprqplan (long arg_scid, long arg_taskid, long arg_printid, long arg_flag, decimal arg_qty, 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 canceloapermit (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer addmxcmpl_in (long arg_scid, long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) 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 updateinwareqty (long arg_scid, long arg_taskid, long arg_printid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit) public function integer trycmptask_fore (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_getpriceorder (long arg_cusid, long arg_mtrlid, ref string arg_pocode, ref string arg_typestr, ref string arg_msg) public function integer uof_add_plan (s_saletask_plan arg_s_plan, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer uof_del_plan (long arg_planid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer uof_finish_plan (long arg_planid, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp2 (long arg_scid, long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer addmxsaleout (long arg_scid, long arg_taskid, long arg_printid, decimal arg_addqty, 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 stopqty (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlcode, decimal arg_stopqty, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit) public function integer add_wrkgrp_mxdscrp (long arg_scid, long arg_taskid, s_saletaskmx_wrkgrp_mxdscrp arg_s_mx, long arg_cnt, ref string arg_msg, boolean arg_ifcommit) public function integer add_relcode (long arg_scid, long arg_taskid, string arg_add_relcode, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx_item (long arg_printid, long arg_itemid, decimal arg_amt, string arg_mxdscrp, ref string arg_msg) public function integer add_dscrpmx (long arg_scid, long arg_taskid, long arg_printid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer finishtask (long arg_scid, long arg_taskid, integer arg_status, ref string arg_msg, boolean arg_ifcommit) public function integer finishtask_cancel (long arg_scid, long arg_taskid, integer arg_status, ref string arg_msg, boolean arg_ifcommit) public function integer uof_disuse (long arg_scid, long arg_taskid, integer arg_disusetype, ref string arg_msg, boolean arg_ifcommit) public function integer uof_updatesaleoutcodestr (long arg_scid, long arg_taskid, long arg_printid, boolean arg_ifcommit, ref string arg_msg) public function integer add_dscrp3 (long arg_scid, long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer stopsaletask (long arg_scid, long arg_taskid, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit) public function integer updatebqty (long arg_scid, long arg_taskid, long arg_printid, long arg_pid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_cmp_pack (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, decimal arg_qty, ref string arg_msg) public function integer uof_mod_requiredate (long arg_scid[], long arg_taskid[], long arg_printid[], datetime arg_olddate[], datetime arg_newdate[], ref string arg_msg, boolean arg_ifcommit) public function integer acceptmxmx (s_saletaskmxmx arg_s_mx, ref string arg_msg) private function integer uof_p_check_date (ref string arg_msg) public function integer acceptmx (long arg_mtrlid, decimal arg_qty, decimal arg_enprice, 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, long arg_quoteid, string arg_quotecode, long arg_quoteprintid, string arg_pricetype, decimal arg_nprice, long arg_poid, string arg_dscrp_text, decimal arg_taxrate, decimal arg_addqty, string arg_priceformula, long arg_sampleid, decimal arg_net_weight, decimal arg_gross_weight, decimal arg_cubage, long arg_fjcnt, string arg_fjstr, ref string arg_msg) private function integer uof_p_check_packprobom (ref string arg_msg) public function integer uof_add_reminddscrp (long arg_scid, long arg_taskid, string arg_reminddscrp, ref string arg_msg, boolean arg_ifcommit) public function integer priceaudit (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer c_priceaudit (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_mx (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit) 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= '' msttakeamt = 0 takeamt = 0 dscrp = '' dscrp2 = '' dscrp3 = '' relcode = '' it_newbegin=false it_updatebegin=false //清除明细 p_clearmx() return 1 end function public function integer p_clearmx ();//INT p_clearmx() //清除明细 it_mxbt = 0 it_mxbtmx = 0 it_mxbt_in = 0 it_mxbt_item = 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 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, typeid, rel_rep, level, dscrp3, exchangeid, station_address, priceflag, pricedate, pricerep, selecttype 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, :typeid, :rel_rep, :level, :dscrp3, :exchangeid, :station_address, :priceflag, :pricedate, :pricerep, :selecttype 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 = '查询订单内容失败(错误订单id:'+string(arg_taskid)+'),'+string(commit_transaction.SQLCode)+','+commit_transaction.sqlerrtext 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 uo_option_disuse_saletask = -1000 Then rslt = 0 arg_msg = '选项:[291]启用销售订单废弃单,读取初始默认值失败,操作取消!' Goto ext End If If arg_scid < 0 Then arg_msg = '请选择分部' rslt = 0 Goto ext End If If arg_taskid <= 0 Then rslt = 0 arg_msg = '错误销售订单唯一码' Goto ext End If If p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 Then rslt = 0 Goto ext End If If Status <> 0 Then rslt = 0 arg_msg = "订单已经审核,不可以删除" Goto ext End If cnt = 0 Select count(*) Into :cnt From u_taskdamt_mx Where u_taskdamt_mx.relid = :arg_taskid And u_taskdamt_mx.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 If cnt > 0 Then rslt = 0 arg_msg = "订单已开订单收款单,操作取消,如需删除订单请先删除订单收款单" Rollback Using commit_transaction; Goto ext End If Select count(*) Into :cnt From u_bmsttake_fpmx Where relid = :arg_taskid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "查询相关应收帐金额是否已分配订单失败"+"~n"+sqlca.SQLErrText Goto ext End If If cnt > 0 Then rslt = 0 arg_msg = "本订单已进行应收帐金额已分配,不能删除" Goto ext End If //IF 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 Kind = 1 And uo_option_disuse_saletask = 1 Then If uof_disuse(arg_scid,arg_taskid,1,arg_msg,False) = 0 Then 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 Delete From u_saletaskmxmx Where taskid = :arg_taskid And scid = :arg_scid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "删除销售订单明细操作失败"+"~n"+commit_transaction.SQLErrText Rollback Using commit_transaction; Goto ext End If Delete From u_saletaskmx_mtrlchange Where u_saletaskmx_mtrlchange.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_dscrp Where taskid = :arg_taskid And scid = :arg_scid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "删除旧有明细备注操作失败"+"~n"+commit_transaction.SQLErrText Rollback Using commit_transaction; Goto ext End If Delete From u_saletask_itemmx Where taskid = :arg_taskid And scid = :arg_scid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "删除销售订单费用明细操作失败"+"~n"+commit_transaction.SQLErrText Rollback Using commit_transaction; Goto ext End If Delete From u_saletask_plan Where u_saletask_plan.taskid = :arg_taskid And u_saletask_plan.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 Decimal ls_consignedQty,ls_fpQty SetNull(nulldate) IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_price_order uo_po uo_po = Create uo_price_order uo_cust_sample uo_cs uo_cs = Create uo_cust_sample IF uo_option_saletask_secaudit = -1000 THEN arg_msg = '选项:[035]销售订单使用二级审核,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_saletask_fore_secaudit = -1000 THEN arg_msg = '选项:[088]销售预测单二级审核,读取初始默认值失败,操作取消!' 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_oa_saletask_fore = -1000 THEN arg_msg = '选项:[227]销售预测单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误销售订单唯一码' GOTO ext END IF IF getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ctmint > 0 THEN arg_msg = '单据已截数,不能操作' rslt = 0 GOTO ext END IF IF Kind <> 0 THEN 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 ELSE IF uo_option_saletask_fore_secaudit = 0 Or (uo_option_saletask_secaudit = 1 And uo_option_if_oa_saletask_fore = 1) THEN IF Status <> 1 THEN rslt = 0 If (uo_option_saletask_fore_secaudit = 1 And uo_option_if_oa_saletask_fore = 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 END IF SELECT count(*) INTO :cnt FROM u_order_ml WHERE scid = :arg_scid AND taskid = :arg_taskid AND (ordertype = 0 OR ordertype = 1) 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_saleoutmx WHERE scid = :arg_scid And 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 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 SELECT sum(u_SaleTaskMx.consignedQty) INTO :ls_consignedQty FROM u_SaleTaskMx WHERE ( u_SaleTaskMx.TaskID = :arg_taskid ) AND ( u_SaleTaskMx.scid = :arg_scid ) AND ( u_SaleTaskMx.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 SELECT sum(u_SaleTaskMx.fpqty) INTO :ls_fpQty FROM u_SaleTaskMx WHERE ( u_SaleTaskMx.TaskID = :arg_taskid ) AND ( u_SaleTaskMx.scid = :arg_scid ) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询销售订单已分配数量操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF IF ls_fpQty > 0 THEN rslt = 0 arg_msg = "销售订单已有分配数量,不能撤审" GOTO ext END IF IF Kind <> 0 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_taskdamt_mx WHERE scid = :arg_scid And relid = :arg_taskid; IF SQLCA.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询订单是否已开订单收款单失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = "订单已开订单收款单,不能撤审" GOTO ext END IF END IF //来料加工订单,检查是否已开收料单 IF Kind = 2 THEN 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 = :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 SELECT sum(u_SaleTaskMx_in.consignedQty) INTO :ls_consignedQty FROM u_SaleTaskMx_in WHERE ( u_SaleTaskMx_in.TaskID = :arg_taskid ) AND ( u_SaleTaskMx_in.scid = :arg_scid ) 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 END IF //默认订单调度 Long i FOR i = 1 To it_mxbt IF p_cprqplan(arg_scid,arg_taskid,saletaskmx[i].printid,0,saletaskmx[i].saleqty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT Int li_isuse FOR i = 1 To it_mxbt SELECT isuse INTO :li_isuse FROM u_mtrldef Where mtrlid = :saletaskmx[i].mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询:'+saletaskmx[i].mtrlcode+'资料属性失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF li_isuse = 2 THEN UPDATE u_mtrldef SET stopsaleqty = stopsaleqty - :saletaskmx[i].saleqty Where mtrlid = :saletaskmx[i].mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新:'+saletaskmx[i].mtrlcode+'资料待停产后已订数失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF NEXT IF Kind <> 0 THEN IF uo_option_saletask_secaudit = 0 Or (uo_option_saletask_secaudit = 1 And uo_option_if_oa_saletask = 1) THEN UPDATE u_SaleTask SET Status = 0, permit_emp = '', permit_date = :nulldate, p_Auditingrep = '', p_Auditingdate = :nulldate WHERE TaskID = :arg_taskid AND scid = :arg_scid 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 SET Status = 0, permit_emp = '', permit_date = :nulldate WHERE TaskID = :arg_taskid AND scid = :arg_scid AND status = 4 Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致销售订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF ELSE IF uo_option_saletask_fore_secaudit = 0 Or (uo_option_saletask_fore_secaudit = 1 And uo_option_if_oa_saletask_fore = 1) THEN UPDATE u_SaleTask SET Status = 0, permit_emp = '', permit_date = :nulldate, p_Auditingrep = '', p_Auditingdate = :nulldate WHERE TaskID = :arg_taskid AND scid = :arg_scid 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 SET Status = 0, permit_emp = '', permit_date = :nulldate WHERE TaskID = :arg_taskid AND scid = :arg_scid AND status = 4 Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致销售订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF END IF DELETE FROM u_saletaskmx_moddate_log Where scid = :arg_scid And taskid = :arg_taskid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致清除明细交期变更历史操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF DELETE FROM u_saletask_stoplog Where scid = :arg_scid And taskid = :arg_taskid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致清除明细终止数量记录失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //将相关已完成的OA公文的状态设为作废 IF Kind <> 0 THEN If (uo_option_saletask_secaudit = 1 And uo_option_if_oa_saletask = 1) THEN UPDATE oa_doc SET docflag = 12 WHERE powerid = 6 AND scid = :arg_scid AND billid = :arg_taskid //And docflag = 11 Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新相关公文状态失败'+commit_transaction.SQLErrText GOTO ext END IF END IF ELSE If (uo_option_saletask_fore_secaudit = 1 And uo_option_if_oa_saletask_fore = 1) THEN UPDATE oa_doc SET docflag = 12 WHERE powerid = 1324 AND scid = :arg_scid AND billid = :arg_taskid //And docflag = 11 Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新相关公文状态失败'+commit_transaction.SQLErrText GOTO ext END IF END IF END IF IF Kind <> 0 THEN //更新价格指令使用次数 FOR i = 1 To it_mxbt IF saletaskmx[i].poid > 0 THEN IF uo_po.uof_add_salenum(saletaskmx[i].poid, saletaskmx[i].saleqty, 1, False, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT END IF //更新意向单完成数, 完成意向单 FOR i = 1 To it_mxbt IF saletaskmx[i].sampleid > 0 THEN IF uo_cs.trycmpl(saletaskmx[i].sampleid, 0 - saletaskmx[i].saleqty, arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF p_reset() Destroy uo_po Destroy uo_cs 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 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,j = 1 ,no_mxcheck = 0,k = 1 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_saletaskmx.mxdscrp2, 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.outtypestr, u_saletaskmx.dftsaleprice, u_saletaskmx.requiredate, u_saletaskmx.pfcode, u_saletaskmx.scidprice, u_saletaskmx.pricetype, u_saletaskmx.capacity, u_saletaskmx.nprice, u_mtrldef.planprice, u_saletaskmx.poid, u_saletaskmx.fpqty, u_saletaskmx.taxrate, u_saletaskmx.addqty, u_saletaskmx.sampleid, u_saletaskmx.net_weight, u_saletaskmx.gross_weight, u_saletaskmx.cubage, u_mtrldef.expday, u_saletaskmx.fjcnt, u_saletaskmx.fjstr 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].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, :saletaskmx[i].pricetype, :saletaskmx[i].capacity, :saletaskmx[i].nprice, :saletaskmx[i].planprice, :saletaskmx[i].poid,:saletaskmx[i].fpqty, :saletaskmx[i].taxrate,:saletaskmx[i].addqty, :saletaskmx[i].sampleid,:saletaskmx[i].net_weight, :saletaskmx[i].gross_weight, :saletaskmx[i].cubage,:saletaskmx[i].u_mtrldef_expday, :saletaskmx[i].fjcnt,:saletaskmx[i].fjstr; 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, :saletaskmx[i].pricetype, :saletaskmx[i].capacity, :saletaskmx[i].nprice, :saletaskmx[i].planprice, :saletaskmx[i].poid,:saletaskmx[i].fpqty, :saletaskmx[i].taxrate,:saletaskmx[i].addqty, :saletaskmx[i].sampleid,:saletaskmx[i].net_weight, :saletaskmx[i].gross_weight, :saletaskmx[i].cubage,:saletaskmx[i].u_mtrldef_expday, :saletaskmx[i].fjcnt,:saletaskmx[i].fjstr; 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 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 AND u_saletaskmx_in.scid = :arg_scid 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 And scid = :arg_scid 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 //////////////////////// // //读取来料加工订单费用明细 DECLARE cur_saletaskmx_item CURSOR FOR SELECT scid, taskid, printid, itemid, amt, mxdscrp FROM u_saletask_itemmx WHERE u_saletask_itemmx.taskid = :arg_taskid AND u_saletask_itemmx.scid = :arg_scid Using commit_transaction; OPEN cur_saletaskmx_item; FETCH cur_saletaskmx_item INTO :saletask_itemmx[k].scid,:saletask_itemmx[k].taskid, :saletask_itemmx[k].printid,:saletask_itemmx[k].itemid, :saletask_itemmx[k].amt,:saletask_itemmx[k].mxdscrp; DO WHILE commit_transaction.SQLCode = 0 k++ FETCH cur_saletaskmx_item INTO :saletask_itemmx[k].scid,:saletask_itemmx[k].taskid, :saletask_itemmx[k].printid,:saletask_itemmx[k].itemid, :saletask_itemmx[k].amt,:saletask_itemmx[k].mxdscrp; LOOP CLOSE cur_saletaskmx_item; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_saletask_itemmx Where 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 k <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,销售订单费用明细" GOTO ext END IF it_mxbt_item = k - 1 it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN 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);Int rslt = 1,cnt = 0 Long i Decimal ld_stoppqty,ld_stopsaleqty Int li_isuse If f_aps_mrp_cklock(arg_scid,arg_msg) = 0 Then rslt = 0 Goto ext End If uo_price_order uo_po uo_po = Create uo_price_order uo_cust_sample uo_cs uo_cs = Create uo_cust_sample If uo_option_saletask_secaudit = -1000 Then arg_msg = '选项:[035]销售订单使用二级审核,读取初始默认值失败,操作取消!' rslt = 0 Goto ext End If If uo_option_saletask_fore_secaudit = -1000 Then arg_msg = '选项:[088]销售预测单二级审核,读取初始默认值失败,操作取消!' 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_oa_saletask_fore = -1000 Then arg_msg = '选项:[227]销售预测单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 Goto ext End If If uo_option_saletask_addware = -1000 Then arg_msg = '选项:[039]销售订单审核自动加0库存,读取初始默认值失败,操作取消!' rslt = 0 Goto ext End If If uo_option_saletask_fore_addware = -1000 Then arg_msg = '选项:[402]销售预测单审核自动加0库存,读取初始默认值失败,操作取消!' 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_set_planprice = -1000 Then arg_msg = '选项:[201]销售订单/预测单审核前必须设定计划价,读取初始默认值失败,操作取消!' rslt = 0 Goto ext End If If uo_option_inout_type = -1000 Then arg_msg = '选项:[142]进出仓高级选项,读取初始默认值失败,操作取消!' rslt = 0 Goto ext End If If arg_taskid <= 0 Then rslt = 0 arg_msg = '错误销售订单唯一码' Goto ext End If If getinfo(arg_scid,arg_taskid,arg_msg) = 0 Then rslt = 0 Goto ext End If If status <> 0 Then rslt = 0 arg_msg = "订单已经审核或已作其它处理,操作取消" Goto ext End If //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 Kind > 0 Then If uof_p_check_dprice(arg_msg) = 0 Then rslt = 0 Goto ext End If //yyx2014-1-4 If uof_p_check_date(arg_msg) = 0 Then rslt = 0 Goto ext End If // //lhd20140703 If uof_p_check_packprobom(arg_msg) = 0 Then rslt = 0 Goto ext End If // For i = 1 To it_mxbt Select stoppqty,stopsaleqty,isuse Into :ld_stoppqty,:ld_stopsaleqty,:li_isuse From u_mtrldef Where mtrlid = :saletaskmx[i].mtrlid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then arg_msg = '查询:'+saletaskmx[i].mtrlcode+'资料属性失败,'+commit_transaction.SQLErrText rslt = 0 Goto ext End If If li_isuse = 2 Then If saletaskmx[i].saleqty > ld_stoppqty - ld_stopsaleqty Then arg_msg = '产品:'+saletaskmx[i].mtrlcode+' 已待停产,待停产后可订数量为:'+String(ld_stoppqty,'#,##0.##########')+',待停产后已订数量为:'+String(ld_stopsaleqty,'#,##0.##########')+',不能再订:'+String(saletaskmx[i].saleqty,'#,##0.##########') rslt = 0 Goto ext End If Update u_mtrldef Set stopsaleqty = stopsaleqty + :saletaskmx[i].saleqty Where mtrlid = :saletaskmx[i].mtrlid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then arg_msg = '更新:'+saletaskmx[i].mtrlcode+'资料待停产后已订数失败,'+commit_transaction.SQLErrText rslt = 0 Goto ext End If End If Next End If Boolean lb_noplan = False If uo_option_saletask_set_planprice = 1 Then For i = 1 To it_mxbt //销售订单/预测单审核前必须设定计划价 If saletaskmx[i].planprice <= 0 Then arg_msg = arg_msg + '产品:'+saletaskmx[i].mtrlcode+'计划价未设定~r~n' lb_noplan = True End If Next If lb_noplan Then rslt = 0 Goto ext End If 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 Kind <> 0 Then If uo_option_saletask_secaudit = 0 Then Update u_saletask Set permit_emp = :arg_emp , permit_date = getdate(), p_Auditingdate = getdate(), p_Auditingrep = :arg_emp, status = 1 Where taskid = :arg_taskid And scid = :arg_scid And status = 0 Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致订单审核操作失败"+"~n"+commit_transaction.SQLErrText Goto ext ElseIf commit_transaction.SQLNRows = 0 Then rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText Goto ext End If Else Update u_saletask Set permit_emp = :arg_emp , permit_date = getdate(), status = 4 Where taskid = :arg_taskid And scid = :arg_scid And status = 0 Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致订单审核操作失败"+"~n"+commit_transaction.SQLErrText Goto ext ElseIf commit_transaction.SQLNRows = 0 Then rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText Goto ext End If End If Else If uo_option_saletask_fore_secaudit = 0 Then Update u_saletask Set permit_emp = :arg_emp , permit_date = getdate(), p_Auditingdate = getdate(), p_Auditingrep = :arg_emp, status = 1 Where taskid = :arg_taskid And scid = :arg_scid And status = 0 Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致订单审核操作失败"+"~n"+commit_transaction.SQLErrText Goto ext ElseIf commit_transaction.SQLNRows = 0 Then rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText Goto ext End If Else Update u_saletask Set permit_emp = :arg_emp , permit_date = getdate(), status = 4 Where taskid = :arg_taskid And scid = :arg_scid And status = 0 Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致订单审核操作失败"+"~n"+commit_transaction.SQLErrText Goto ext ElseIf commit_transaction.SQLNRows = 0 Then rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText Goto ext End If End If End If //成品仓加0库存 //----------------------------------------------- If (uo_option_saletask_addware > 0 And Kind > 0) or (uo_option_saletask_fore_addware > 0 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 Int li_outtype_storage_arr[],li_outtype_storage Int li_storagetype_storage_arr[],li_storagetype_storage Long ll_cusid String ls_status,ls_mtrlcode,ls_pcode,ls_woodcode,ls_plancode Long ll_mtrlwareid,ll_mtrlid Int li_storagetype Int li_outtype,li_ifpackpro,li_ifmrppackpf String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[] Int li_ifover[],li_dipztype[] Long ll_SonMtrlid[] Long it_mxt = 1 Long ll_k String ls_status_find,ls_woodcode_find,ls_pcode_find //在订单所属分部的全部成品仓加0库存 If (uo_option_saletask_addware = 1 And Kind > 0) or (uo_option_saletask_fore_addware = 1 and kind = 0) Then Declare pf_cur Cursor For Select u_storage.storageid, u_storage.storagename, u_storage.scid, u_storage.balctype, u_storage.outtype, u_storage.storagetype From u_storage Where ( u_storage.mtrlprp = 0 ) And ( u_storage.inuse = 1 ) And (u_storage.scid = :arg_scid); Open pf_cur; Fetch pf_cur Into :ll_storageid,:ls_storagename,:ll_scid,:li_balctype,:li_outtype_storage,:li_storagetype_storage; 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 li_outtype_storage_arr[count] = li_outtype_storage li_storagetype_storage_arr[count] = li_storagetype_storage Fetch pf_cur Into :ll_storageid,:ls_storagename,:ll_scid,:li_balctype,:li_outtype_storage,:li_storagetype_storage; Loop Close pf_cur; End If 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 Select storagetype,outtype,ifpackpro,ifmrppackpf Into :li_storagetype,:li_outtype,:li_ifpackpro,:li_ifmrppackpf From u_mtrldef Where mtrlid = :ll_mtrlid; If sqlca.SQLCode <> 0 Then arg_msg = '查询:'+ls_mtrlcode+'库存属性失败' rslt = 0 Goto ext End If //在订单所属分部产品默认成品仓加0库存 If (uo_option_saletask_addware = 2 And Kind > 0) or (uo_option_saletask_fore_addware = 2 and kind = 0) Then count = 0 Declare cur_mtrl_storage Cursor For Select u_storage.storageid, u_storage.storagename, u_storage.scid, u_storage.balctype, u_storage.outtype, u_storage.storagetype From u_storage,u_mtrl_storage Where ( u_storage.storageid = u_mtrl_storage.storageid ) And ( u_mtrl_storage.mtrlid = :ll_mtrlid ) And ( u_storage.mtrlprp = 0 ) And ( u_storage.inuse = 1 ) And ( u_storage.scid = :arg_scid ); Open cur_mtrl_storage; Fetch cur_mtrl_storage Into :ll_storageid,:ls_storagename,:ll_scid,:li_balctype,:li_outtype_storage,:li_storagetype_storage; 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 li_outtype_storage_arr[count] = li_outtype_storage li_storagetype_storage_arr[count] = li_storagetype_storage Fetch cur_mtrl_storage Into :ll_storageid,:ls_storagename,:ll_scid,:li_balctype,:li_outtype_storage,:li_storagetype_storage; Loop Close cur_mtrl_storage; End If For ll_j = 1 To count If li_storagetype_storage_arr[ll_j] = 1 Then ll_cusid = 0 Else If li_balctype_arr[ll_j] = 1 Then ll_cusid = cusid Else ll_cusid = 0 End If End If If li_storagetype = 1 Then ll_cusid = 0 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 If sys_option_saletask_addware_addbj = 1 Then If uo_option_inout_type <> 0 And li_outtype <> 0 And li_ifpackpro = 1 Then it_mxt = 1 Declare cur_pf Cursor For Select u_PrdPF.SonMtrlid, u_PrdPF.status, u_PrdPF.woodcode, u_PrdPF.pcode, u_PrdPF.ifover, u_prdpf.dipztype From u_PrdPF,u_mtrl_pf Where ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid ) And ( u_PrdPF.pfcode = u_mtrl_pf.pfcode ) And ( u_PrdPF.mtrlid = :ll_mtrlid ) And ( u_mtrl_pf.ifdi = 1 And :li_ifpackpro = 0 Or u_mtrl_pf.ifdft = 1 And :li_ifpackpro = 1 And :li_ifmrppackpf = 0 Or u_mtrl_pf.ifdi = 2 And :li_ifpackpro = 1 And :li_ifmrppackpf = 1 ); Open cur_pf; Fetch cur_pf Into :ll_SonMtrlid[it_mxt],:ls_pf_status[it_mxt], :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],:li_dipztype[it_mxt]; Do While sqlca.SQLCode = 0 it_mxt++ Fetch cur_pf Into :ll_SonMtrlid[it_mxt],:ls_pf_status[it_mxt], :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],:li_dipztype[it_mxt]; Loop it_mxt = it_mxt - 1 Close cur_pf; For ll_k = 1 To it_mxt If li_ifover[ll_k] = 1 Then Choose Case li_dipztype[ll_k] Case 0 ls_status_find = ls_status ls_woodcode_find = '' ls_pcode_find = '' Case 1 ls_status_find = '' ls_woodcode_find = ls_woodcode ls_pcode_find = '' Case 2 ls_status_find = '' ls_woodcode_find = '' ls_pcode_find = ls_pcode Case 3 ls_status_find = ls_status ls_woodcode_find = ls_woodcode ls_pcode_find = '' Case 4 ls_status_find = '' ls_woodcode_find = ls_woodcode ls_pcode_find = ls_pcode Case 5 ls_status_find = ls_status ls_woodcode_find = '' ls_pcode_find = ls_pcode Case 6 ls_status_find = ls_status ls_woodcode_find = ls_woodcode ls_pcode_find = ls_pcode End Choose Else ls_status_find = ls_pf_status[ll_k] ls_woodcode_find = ls_pf_woodcode[ll_k] ls_pcode_find = ls_pf_pcode[ll_k] End If ls_status_find = Trim(ls_status_find) ls_woodcode_find = Trim(ls_woodcode_find) ls_pcode_find = Trim(ls_pcode_find) Select top 1 mtrlwareid Into :ll_mtrlwareid From u_mtrlware Where mtrlid = :ll_SonMtrlid[ll_k] And status = :ls_status_find And storageid = :ll_storageid_arr[ll_j] And woodcode = :ls_woodcode_find And plancode = :ls_plancode And pcode = :ls_pcode_find 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_SonMtrlid[ll_k],:ll_storageid_arr[ll_j],0,:ls_status_find,:ls_plancode,:ls_woodcode_find,:ls_pcode_find,: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 End If End If Next Next End If If uo_option_if_msg = 1 Then If f_billmsg(arg_scid,taskcode,taskcode+'销售订单确认',taskcode+'销售订单确认',commit_transaction,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If //默认订单调度 If Kind <> 0 Then If uo_option_saletask_secaudit = 0 Then For i = 1 To it_mxbt If p_cprqplan(arg_scid,arg_taskid,saletaskmx[i].printid,1,saletaskmx[i].saleqty,arg_msg,False) = 0 Then rslt = 0 Goto ext End If Next End If Else If uo_option_saletask_fore_secaudit = 0 Then For i = 1 To it_mxbt If p_cprqplan(arg_scid,arg_taskid,saletaskmx[i].printid,1,saletaskmx[i].saleqty,arg_msg,False) = 0 Then rslt = 0 Goto ext End If Next End If End If If Kind <> 0 Then 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 Else If uo_option_if_oa_saletask_fore = 1 And uo_option_saletask_fore_secaudit = 1 Then If f_oa(commit_transaction,False,arg_msg,1324,scid,taskid,taskcode,relcode,dscrp) = 0 Then rslt = 0 Goto ext End If End If End If If Kind <> 0 Then //更新价格指令使用次数 For i = 1 To it_mxbt If saletaskmx[i].poid > 0 Then If uo_po.uof_add_salenum(saletaskmx[i].poid, saletaskmx[i].saleqty, 0, False, arg_msg) = 0 Then rslt = 0 Goto ext End If End If Next End If //更新意向单完成数, 完成意向单 For i = 1 To it_mxbt If saletaskmx[i].sampleid > 0 Then If uo_cs.trycmpl(saletaskmx[i].sampleid, saletaskmx[i].saleqty, arg_msg, False) = 0 Then rslt = 0 Goto ext End If End If Next it_newbegin = False it_updatebegin = False ext: If rslt = 0 Then Rollback Using commit_transaction; ElseIf arg_ifcommit And rslt = 1 Then Commit Using commit_transaction; End If p_reset() Destroy uo_po Destroy uo_cs 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 AND rslt = 1 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 uo_option_if_oa_saletask = -1000 THEN arg_msg = '选项:[043]销售订单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_if_oa_saletask_fore = -1000 THEN arg_msg = '选项:[227]销售预测单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF arg_scid < 0 THEN arg_msg = '请选择分部' rslt = 0 GOTO ext END IF IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误销售订单唯一码' GOTO ext END IF IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF Status <> 0 THEN rslt = 0 arg_msg = '已经处于审核或完成等状态,不可以修改,如果订单未完成并要修改请先撤销审核' GOTO ext END IF if priceflag <> 0 then rslt = 0 arg_msg = '单据已确认,不能修改' goto ext end if IF Kind <> 0 THEN IF uo_option_if_oa_saletask = 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 ELSE IF uo_option_if_oa_saletask_fore = 1 And audit_buildtype = 0 THEN IF f_check_if_oaflow(arg_scid,arg_taskid,1324,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF it_newbegin = False it_updatebegin = True p_clearmx() //清除明细 msttakeamt = 0 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,j,k Long ls_newtaskid DateTime server_datetime Long ll_taskid String ls_sccode String ls_mtrlcuscode String ls_typebillcode Long ll_typeid String ls_taskcode Int li_pricelistflag Int li_selecttype_cust,li_selecttype_def,li_ifbj If uo_option_disuse_saletask = -1000 Then rslt = 0 arg_msg = '选项:[291]启用销售订单废弃单,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_taskplancode_auto = -1000 Then arg_msg = '选项:[048]销售订单生产批号类型,读取初始默认值失败,操作取消!' rslt = 0 Goto ext End If If uo_option_saletask_rebate_check = -1000 Then arg_msg = '选项:[364]客户折扣没有审核,不能保存销售订单,读取初始默认值失败,操作取消!' 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 If IsNull(typeid) Then typeid = 0 If IsNull(cusid) Then cusid = 0 If IsNull(rel_rep) Then rel_rep = '' If IsNull(Level) Then Level = 2 If IsNull(dscrp3) Then dscrp3 = '' If IsNull(station_address) Then station_address = '' If IsNull(sendUser) Then sendUser = '' If IsNull(fiebrelcode) Then fiebrelcode = '' If IsNull(exchangeid) Then exchangeid = 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 If Kind <> 4 Then arg_msg = "请输入订单业务员" Else arg_msg = "请输入经手员" End If Goto ext End If If Kind > 0 And Kind <> 3 And Kind <> 4 Then 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 If uo_option_saletask_rebate_check = 1 Then Select pricelistflag Into :li_pricelistflag From u_cust Where cusid = :cusid Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "查询操作失败,客户默认价格表/折扣" Goto ext End If If li_pricelistflag = 0 Then rslt = 0 arg_msg = "客户折扣未审核,不能保存" Goto ext End If End If cnt = 0 Select count(*) Into :cnt From cw_banktype Where banktypeid = :banktypeid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then arg_msg = '查询结算方式失败' rslt = 0 Goto ext End If If cnt = 0 Then arg_msg = '结算方式不存在' rslt = 0 Goto ext End If cnt = 0 Select count(*) Into :cnt From cw_currency Where moneyid = :moneyid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then arg_msg = '查询币种失败' rslt = 0 Goto ext End If If cnt = 0 Then arg_msg = '币种资料不存在' rslt = 0 Goto ext End If If mrate = 0 Then arg_msg = '币种汇率错误' rslt = 0 Goto ext End If If f_moneyid_rate_check(moneyid,mrate,arg_msg) = 0 Then rslt = 0 Goto ext End If //综合订单分类及客户设定,得出最终生效的选择限制 selecttype If f_get_selecttype(typeid,cusid,selecttype,arg_msg) = 0 Then rslt = 0 Goto ext End If ElseIf Kind = 0 And cusid > 0 Then 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 End If If Kind > 0 And Kind <> 4 Then If uo_option_saletask_ifuse_typebillcode = 1 Then If typeid = 0 Then arg_msg = '请先选择订单分类' rslt = 0 Goto ext End If Select billcode Into :ls_typebillcode From u_saletype Where typeid = :typeid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then arg_msg = '查询销售订单分类属性失败,'+commit_transaction.SQLErrText rslt = 0 Goto ext End If If ls_typebillcode = '' Then arg_msg = '订单分类未设置对应单据抬头,请检查' rslt = 0 Goto ext End If End If 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 //检查订货日期是否合法(不能距离当前时间10年以上) if abs(year(date(server_datetime)) - year(date(taskdate))) > 10 then rslt = 0 arg_msg = '请检查订货日期是否正确(不能距离当前时间10年以上)!' goto ext end if If f_check_inoutdate(0,taskdate,False,arg_msg) = 0 Then rslt = 0 Goto ext End If If it_mxbt = 0 Then //如果输入物料资料错则已经清空 rslt = 0 arg_msg = "没有正确销售订单明细内容" Goto ext End If If Date(taskdate) > Date(requiredate) Then arg_msg = '交货日期不能在订货日期前' rslt = 0 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 Kind = 1 And taskid > 0 And uo_option_disuse_saletask = 1 Then If uof_disuse(scid,taskid,0,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If ////////////////////////////////////////////// //开始区分:新建/更新 处理 If taskid = 0 Then //新建 ll_taskid = f_sys_scidentity(scid,"u_saletask","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 If Kind = 0 Then taskcode = getid(scid,ls_sccode + 'SF',Date(server_datetime),False,commit_transaction) If taskcode = "err" Then taskcode = '' rslt = 0 arg_msg = "无法获取销售预测单编号"+"~n"+sqlca.SQLErrText Goto ext End If ElseIf Kind = 1 Then If uo_option_saletask_ifuse_typebillcode = 0 Then 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 Else taskcode = getid_saletask(scid,ls_sccode + ls_typebillcode,Date(server_datetime),False,commit_transaction) If taskcode = "err" Then taskcode = '' rslt = 0 arg_msg = "无法获取销售订单分类编号"+"~n"+sqlca.SQLErrText Goto ext End If End If ElseIf Kind = 2 Then taskcode = getid(scid,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 ElseIf Kind = 3 Then taskcode = getid(scid,ls_sccode + 'SR',Date(server_datetime),False,commit_transaction) If taskcode = "err" Then taskcode = '' rslt = 0 arg_msg = "无法获取销售返工订单编号"+"~n"+sqlca.SQLErrText Goto ext End If ElseIf Kind = 4 Then taskcode = getid(scid,ls_sccode + 'FX',Date(server_datetime),False,commit_transaction) If taskcode = "err" Then taskcode = '' rslt = 0 arg_msg = "无法获取分部需求单编号"+"~n"+sqlca.SQLErrText Goto ext End If End If Insert Into u_saletask ( scid, taskcode, kind, cusid, requiredate, status, opemp, assign_emp, dscrp, dscrp2, opdate, taskid, damt, otheramt, freight, taskdate, banktypeid, moneyid, relcode, paytype, freight_tele, cus_address, cus_tele, cus_fax, mrate, upname, msttakeamt, typeid, rel_rep, level, sendTime, sendUser, fiebrelcode, mxrowcount, dscrp3, exchangeid, station_address, selecttype) Values ( :scid, :taskcode, :Kind, :cusid, :requiredate, :status, :operator, :assign_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, :typeid, :rel_rep, :Level, :sendTime, :sendUser, :fiebrelcode, :it_mxbt, :dscrp3, :exchangeid, :station_address, :selecttype) 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 = '' If Kind = 4 Then ls_mtrlcuscode = saletaskmx[i].mtrlcuscode Else Choose Case uo_option_taskplancode_auto Case 1 ls_mtrlcuscode = saletaskmx[i].mtrlcuscode Case 2 ls_mtrlcuscode = taskcode Case 3 ls_mtrlcuscode = relcode Case 4 ls_mtrlcuscode = taskcode + '.' + String(i,'000') Case 5 ls_mtrlcuscode = '' Case Else arg_msg = '错误的生产批号,管理员请在系统选项设置先设定好订单批号模式' rslt = 0 Goto ext End Choose End If Insert Into u_saletaskmx ( scid, saleqty, price, plprice, mtrlid, taskid, mxdscrp, mxdscrp2, fprice, rebate, status, printid, woodcode, pcode, mtrlcuscode, enprice, outtypestr, dftsaleprice, requiredate, pfcode, scidprice, quoteid, quotecode, quoteprintid, pricetype, capacity, nprice, poid, taxrate, addqty, priceformula, sampleid, enacprice, net_weight, gross_weight, cubage, fjcnt, fjstr, porebate) Values (:scid, :saletaskmx[i].saleqty, :saletaskmx[i].acprice, :saletaskmx[i].plprice, :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].quoteid, :saletaskmx[i].quotecode, :saletaskmx[i].quoteprintid, :saletaskmx[i].pricetype, :saletaskmx[i].capacity, :saletaskmx[i].nprice, :saletaskmx[i].poid, :saletaskmx[i].taxrate, :saletaskmx[i].addqty, :saletaskmx[i].priceformula, :saletaskmx[i].sampleid, :saletaskmx[i].enacprice, :saletaskmx[i].net_weight, :saletaskmx[i].gross_weight, :saletaskmx[i].cubage, :saletaskmx[i].fjcnt, :saletaskmx[i].fjstr, :saletaskmx[i].porebate) Using commit_transaction; If commit_transaction.SQLCode <> 0 Then taskid = 0 //还原taskid rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If If Len(Trim(saletaskmx[i].dscrp_text)) > 0 Then Insert Into u_SaleTaskMx_dscrp (scid, taskid, printid, dscrp) Values (:scid, :ll_taskid, :saletaskmx[i].printid, :saletaskmx[i].dscrp_text) Using commit_transaction; If commit_transaction.SQLCode <> 0 Then taskid = 0 //还原taskid rslt = 0 arg_msg = "因网络或其它原因导致插入明细备注操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If End If Next For i = 1 To it_mxbtmx ls_mtrlcuscode = '' If Kind = 4 Then ls_mtrlcuscode = saletaskmxmx[i].mtrlcuscode Else Choose Case uo_option_taskplancode_auto Case 1 ls_mtrlcuscode = saletaskmxmx[i].mtrlcuscode Case 2 ls_mtrlcuscode = taskcode Case 3 ls_mtrlcuscode = relcode Case 4 ls_mtrlcuscode = taskcode + '.' + String(i,'000') Case 5 ls_mtrlcuscode = '' Case Else arg_msg = '错误的生产批号,管理员请在系统选项设置先设定好订单批号模式' rslt = 0 Goto ext End Choose End If Insert Into u_saletaskmxmx ( scid, saleqty, price, plprice, mtrlid, taskid, mxdscrp, mxdscrp2, fprice, rebate, status, printid, woodcode, pcode, mtrlcuscode, enprice, outtypestr, dftsaleprice, requiredate, pfcode, scidprice, quoteid, quotecode, quoteprintid, pricetype, capacity, nprice, poid, taxrate, addqty, priceformula, enacprice, net_weight, gross_weight, cubage) Values (:scid, :saletaskmxmx[i].saleqty, :saletaskmxmx[i].price, :saletaskmxmx[i].plprice, :saletaskmxmx[i].mtrlid, :ll_taskid, :saletaskmxmx[i].mxdscrp, :saletaskmxmx[i].mxdscrp2, :saletaskmxmx[i].fprice, :saletaskmxmx[i].rebate, :saletaskmxmx[i].status, :saletaskmxmx[i].printid, :saletaskmxmx[i].woodcode, :saletaskmxmx[i].pcode, :ls_mtrlcuscode, :saletaskmxmx[i].enprice, :saletaskmxmx[i].outtypestr, :saletaskmxmx[i].dftsaleprice, :saletaskmxmx[i].requiredate, :saletaskmxmx[i].pfcode, :saletaskmxmx[i].scidprice, :saletaskmxmx[i].quoteid, :saletaskmxmx[i].quotecode, :saletaskmxmx[i].quoteprintid, :saletaskmxmx[i].pricetype, :saletaskmxmx[i].capacity, :saletaskmxmx[i].nprice, :saletaskmxmx[i].poid, :saletaskmxmx[i].taxrate, :saletaskmxmx[i].addqty, :saletaskmxmx[i].priceformula, :saletaskmxmx[i].enacprice, :saletaskmxmx[i].net_weight, :saletaskmxmx[i].gross_weight, :saletaskmxmx[i].cubage) 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 If Kind = 2 Then 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 End If For k = 1 To it_mxbt_item Insert Into u_saletask_itemmx (scid, taskid, printid, itemid, amt, mxdscrp) Values (:scid, :ll_taskid, :saletask_itemmx[k].printid, :saletask_itemmx[k].itemid, :saletask_itemmx[k].amt, :saletask_itemmx[k].mxdscrp) 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 cnt = 0 Select count(*) Into :cnt From u_cust_wrkgrp_mxdscrp Where cusid = :cusid And mtrlid = 0; If sqlca.SQLCode <> 0 Then cnt = 0 If cnt > 0 Then Insert Into u_saletaskmx_wrkgrp_mxdscrp (scid, taskid, printid, wrkgrpid, mxdscrp) Select u_SaleTaskMx.scid, u_SaleTaskMx.TaskID, u_SaleTaskMx.printid, u_cust_wrkgrp_mxdscrp.wrkgrpid, u_cust_wrkgrp_mxdscrp.mxdscrp From u_SaleTask Inner JOIN u_SaleTaskMx ON u_SaleTask.scid = u_SaleTaskMx.scid And u_SaleTask.TaskID = u_SaleTaskMx.TaskID Inner JOIN u_cust_wrkgrp_mxdscrp ON u_SaleTask.CusID = u_cust_wrkgrp_mxdscrp.cusid Where u_SaleTask.scid = :scid And u_saletask.taskid = :ll_taskid And (u_cust_wrkgrp_mxdscrp.mtrlid = 0) Using commit_transaction; If commit_transaction.SQLCode <> 0 Then taskid = 0 //还原taskid rslt = 0 arg_msg = "因网络或其它原因导致插入默认车间备注(通用)操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If Update u_saletaskmx_wrkgrp_mxdscrp Set u_saletaskmx_wrkgrp_mxdscrp.mxdscrp = u_cust_wrkgrp_mxdscrp.mxdscrp From u_saletaskmx_wrkgrp_mxdscrp Inner JOIN u_SaleTask ON u_saletaskmx_wrkgrp_mxdscrp.scid = u_SaleTask.scid And u_saletaskmx_wrkgrp_mxdscrp.taskid = u_SaleTask.TaskID Inner JOIN u_cust_wrkgrp_mxdscrp ON u_SaleTask.CusID = u_cust_wrkgrp_mxdscrp.cusid And u_saletaskmx_wrkgrp_mxdscrp.wrkgrpid = u_cust_wrkgrp_mxdscrp.wrkgrpid Inner JOIN u_SaleTaskMx ON u_saletaskmx_wrkgrp_mxdscrp.scid = u_SaleTaskMx.scid And u_saletaskmx_wrkgrp_mxdscrp.taskid = u_SaleTaskMx.TaskID And u_saletaskmx_wrkgrp_mxdscrp.printid = u_SaleTaskMx.printid And u_cust_wrkgrp_mxdscrp.mtrlid = u_SaleTaskMx.MtrlID Where u_SaleTask.scid = :scid And u_saletask.taskid = :ll_taskid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then taskid = 0 //还原taskid rslt = 0 arg_msg = "因网络或其它原因导致更新默认车间备注操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If Else Insert Into u_saletaskmx_wrkgrp_mxdscrp (scid, taskid, printid, wrkgrpid, mxdscrp) Select u_SaleTaskMx.scid, u_SaleTaskMx.TaskID, u_SaleTaskMx.printid, u_cust_wrkgrp_mxdscrp.wrkgrpid, u_cust_wrkgrp_mxdscrp.mxdscrp From u_SaleTask Inner JOIN u_SaleTaskMx ON u_SaleTask.scid = u_SaleTaskMx.scid And u_SaleTask.TaskID = u_SaleTaskMx.TaskID Inner JOIN u_cust_wrkgrp_mxdscrp ON u_SaleTask.CusID = u_cust_wrkgrp_mxdscrp.cusid And u_SaleTaskMx.MtrlID = u_cust_wrkgrp_mxdscrp.mtrlid Where u_SaleTask.scid = :scid And u_saletask.taskid = :ll_taskid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then taskid = 0 //还原taskid rslt = 0 arg_msg = "因网络或其它原因导致插入默认车间备注操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If End If Else //////////////////////////////////////////////// //更新 Select typeid,taskcode Into :ll_typeid,:ls_taskcode From u_saletask Where taskid = :taskid And scid = :scid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then arg_msg = '查询销售订单分类属性失败,'+commit_transaction.SQLErrText rslt = 0 Goto ext End If If uo_option_saletask_ifuse_typebillcode = 1 Then If ll_typeid <> typeid Then Select billcode Into :ls_typebillcode From u_saletype Where typeid = :typeid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then arg_msg = '查询销售订单分类属性失败,'+commit_transaction.SQLErrText rslt = 0 Goto ext End If If ls_typebillcode = '' Then arg_msg = '订单分类未设置对应单据抬头,请检查' 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_saletask(scid,ls_sccode + ls_typebillcode,Date(server_datetime),False,commit_transaction) If taskcode = "err" Then taskcode = '' rslt = 0 arg_msg = "无法获取销售订单分类编号"+"~n"+sqlca.SQLErrText Goto ext End If ls_taskcode = taskcode 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, 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, typeid = :typeid, rel_rep = :rel_rep, level = :Level, sendTime = :sendTime, sendUser = :sendUser, fiebrelcode = :fiebrelcode, mxrowcount = :it_mxbt, dscrp3 = :dscrp3, taskcode = :ls_taskcode, exchangeid = :exchangeid, station_address = :station_address, selecttype = :selecttype 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 //删除原有明细 Delete From u_saletaskmxmx Where u_saletaskmxmx.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 //删除原有明细 Delete From u_SaleTaskMx_dscrp Where 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 i = 1 To it_mxbt ls_mtrlcuscode = '' If Kind = 4 Then ls_mtrlcuscode = saletaskmx[i].mtrlcuscode Else Choose Case uo_option_taskplancode_auto Case 1 ls_mtrlcuscode = saletaskmx[i].mtrlcuscode Case 2 ls_mtrlcuscode = taskcode Case 3 ls_mtrlcuscode = relcode Case 4 ls_mtrlcuscode = taskcode + '.' + String(i,'000') Case 5 ls_mtrlcuscode = '' Case Else arg_msg = '错误的生产批号,管理员请先设定好订单批号模式' rslt = 0 Goto ext End Choose End If Insert Into u_saletaskmx ( scid, taskid, mtrlid, saleqty, price, plprice, mxdscrp, mxdscrp2, fprice, rebate, status, printid, woodcode, pcode, mtrlcuscode, enprice, outtypestr, dftsaleprice, requiredate, pfcode, scidprice, quoteid, quotecode, quoteprintid, pricetype, capacity, nprice, poid, taxrate, addqty, priceformula, sampleid, enacprice, net_weight, gross_weight, cubage, fjcnt, fjstr, porebate) Values (:scid, :taskid, :saletaskmx[i].mtrlid, :saletaskmx[i].saleqty, :saletaskmx[i].acprice, :saletaskmx[i].plprice, :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].quoteid, :saletaskmx[i].quotecode, :saletaskmx[i].quoteprintid, :saletaskmx[i].pricetype, :saletaskmx[i].capacity, :saletaskmx[i].nprice, :saletaskmx[i].poid, :saletaskmx[i].taxrate, :saletaskmx[i].addqty, :saletaskmx[i].priceformula, :saletaskmx[i].sampleid, :saletaskmx[i].enacprice, :saletaskmx[i].net_weight, :saletaskmx[i].gross_weight, :saletaskmx[i].cubage, :saletaskmx[i].fjcnt, :saletaskmx[i].fjstr, :saletaskmx[i].porebate) Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If If Len(Trim(saletaskmx[i].dscrp_text)) > 0 Then Insert Into u_SaleTaskMx_dscrp (scid, taskid, printid, dscrp) Values (:scid, :taskid, :saletaskmx[i].printid, :saletaskmx[i].dscrp_text) Using commit_transaction; If commit_transaction.SQLCode <> 0 Then taskid = 0 //还原taskid rslt = 0 arg_msg = "因网络或其它原因导致插入明细备注操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If End If Next For i = 1 To it_mxbtmx ls_mtrlcuscode = '' If Kind = 4 Then ls_mtrlcuscode = saletaskmxmx[i].mtrlcuscode Else Choose Case uo_option_taskplancode_auto Case 1 ls_mtrlcuscode = saletaskmxmx[i].mtrlcuscode Case 2 ls_mtrlcuscode = taskcode Case 3 ls_mtrlcuscode = relcode Case 4 ls_mtrlcuscode = taskcode + '.' + String(i,'000') Case 5 ls_mtrlcuscode = '' Case Else arg_msg = '错误的生产批号,管理员请在系统选项设置先设定好订单批号模式' rslt = 0 Goto ext End Choose End If Insert Into u_saletaskmxmx ( scid, saleqty, price, plprice, mtrlid, taskid, mxdscrp, mxdscrp2, fprice, rebate, status, printid, woodcode, pcode, mtrlcuscode, enprice, outtypestr, dftsaleprice, requiredate, pfcode, scidprice, quoteid, quotecode, quoteprintid, pricetype, capacity, nprice, poid, taxrate, addqty, priceformula, enacprice, net_weight, gross_weight, cubage) Values (:scid, :saletaskmxmx[i].saleqty, :saletaskmxmx[i].price, :saletaskmxmx[i].plprice, :saletaskmxmx[i].mtrlid, :taskid, :saletaskmxmx[i].mxdscrp, :saletaskmxmx[i].mxdscrp2, :saletaskmxmx[i].fprice, :saletaskmxmx[i].rebate, :saletaskmxmx[i].status, :saletaskmxmx[i].printid, :saletaskmxmx[i].woodcode, :saletaskmxmx[i].pcode, :ls_mtrlcuscode, :saletaskmxmx[i].enprice, :saletaskmxmx[i].outtypestr, :saletaskmxmx[i].dftsaleprice, :saletaskmxmx[i].requiredate, :saletaskmxmx[i].pfcode, :saletaskmxmx[i].scidprice, :saletaskmxmx[i].quoteid, :saletaskmxmx[i].quotecode, :saletaskmxmx[i].quoteprintid, :saletaskmxmx[i].pricetype, :saletaskmxmx[i].capacity, :saletaskmxmx[i].nprice, :saletaskmxmx[i].poid, :saletaskmxmx[i].taxrate, :saletaskmxmx[i].addqty, :saletaskmxmx[i].priceformula, :saletaskmxmx[i].enacprice, :saletaskmxmx[i].net_weight, :saletaskmxmx[i].gross_weight, :saletaskmxmx[i].cubage) 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 If Kind = 2 Then 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 Delete From u_saletask_itemmx Where u_saletask_itemmx.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 k = 1 To it_mxbt_item Insert Into u_saletask_itemmx (scid, taskid, printid, itemid, amt, mxdscrp) Values (:scid, :taskid, :saletask_itemmx[k].printid, :saletask_itemmx[k].itemid, :saletask_itemmx[k].amt, :saletask_itemmx[k].mxdscrp) 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 Update u_saletaskmxmx Set u_saletaskmxmx.relpid = u_SaleTaskMx.printid From u_SaleTaskMx Inner JOIN u_saletaskmxmx ON u_SaleTaskMx.scid = u_saletaskmxmx.scid And u_SaleTaskMx.TaskID = u_saletaskmxmx.TaskID And u_SaleTaskMx.MtrlID = u_saletaskmxmx.MtrlID And u_SaleTaskMx.status = u_saletaskmxmx.status And u_SaleTaskMx.pcode = u_saletaskmxmx.pcode And u_SaleTaskMx.woodcode = u_saletaskmxmx.woodcode And u_SaleTaskMx.mtrlcuscode = u_saletaskmxmx.mtrlcuscode And u_SaleTaskMx.enprice = u_saletaskmxmx.enprice Where u_SaleTaskMx.scid = :scid And u_saletaskmx.taskid = :taskid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then taskid = 0 rslt = 0 arg_msg = '更新明细相关printid失败,'+commit_transaction.SQLErrText Goto ext End If it_newbegin = False it_updatebegin = False ext: If rslt = 0 Then Rollback Using commit_transaction; p_clearmx() msttakeamt = 0 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 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_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ctmint > 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.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 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 ) 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 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 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 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 stopmx (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, ref string arg_msg, boolean arg_commit);Int rslt = 1 Int li_flag,li_bjflag String ls_outtype DateTime null_dt Decimal ld_notconsignedqty Long ll_assignid,j Decimal ld_assignqty uo_mtrlware_assign uo_ma uo_ma = Create uo_mtrlware_assign uo_ma.commit_transaction = commit_transaction datastore ds_fp_del ds_fp_del = Create datastore ds_fp_del.DataObject = 'ds_rp_cust_saletask_fp_mx_fp_del_p' ds_fp_del.SetTransObject(commit_transaction) IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF SetNull(null_dt) IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 THEN arg_msg = '订单只能在进行状态下才能操作' rslt = 0 GOTO ext END IF SELECT stopflag,outtypestr,bjflag INTO :li_flag,:ls_outtype,:li_bjflag FROM u_saletaskmx WHERE scid = :arg_scid AND 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.saleQty - u_saletaskmx.consignedqty INTO :ld_notconsignedqty FROM u_saletaskmx WHERE scid = :arg_scid AND 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 //取消分配 ds_fp_del.Retrieve(arg_scid,arg_taskid,arg_printid) FOR j = 1 To ds_fp_del.RowCount() ll_assignid = ds_fp_del.Object.u_mtrlware_assign_assignid[j] ld_assignqty = ds_fp_del.Object.u_mtrlware_assign_assignqty[j] - ds_fp_del.Object.u_mtrlware_assign_outqty[j] IF uo_ma.uof_assign_del(ll_assignid,ld_assignqty,arg_msg,False) = 0 THEN arg_msg = '删除库存分配失败,'+arg_msg rslt = 0 GOTO ext END IF NEXT END IF IF arg_flag = 0 THEN UPDATE u_saletaskmx SET stopflag = 0, stopemp = '', stopdate = :null_dt, stopreason = '' WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid; ELSE UPDATE u_saletaskmx SET stopflag = 1, stopemp = :publ_operator, stopdate = getdate(), stopreason = :arg_stopreason WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid; END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新明细'+arg_mtrlcode+'中止标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF trycmplsaletask(arg_scid,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 Destroy uo_ma Destroy ds_fp_del RETURN rslt end function public function integer bjmx (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlcode, integer arg_flag, ref string arg_msg, boolean arg_commit);Int rslt = 1 Int li_bjflag DateTime null_dt string ls_outtype Decimal ld_notconsignedqty SetNull(null_dt) IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 THEN arg_msg = '订单只能在进行状态下才能操作' rslt = 0 GOTO ext END IF SELECT outtypestr,bjflag INTO :ls_outtype,:li_bjflag FROM u_saletaskmx WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询明细物料'+arg_mtrlcode+'补件审核标记失败' rslt = 0 GOTO ext END IF IF ls_outtype <> '补件' THEN arg_msg = '明细物料'+arg_mtrlcode+'不是补件明细,不能修改单价' rslt = 0 GOTO ext END IF IF arg_flag = 0 THEN IF li_bjflag = 0 THEN arg_msg = '明细物料'+arg_mtrlcode+'还未补件审核,不能取消补件审核' rslt = 0 GOTO ext END IF ELSE IF li_bjflag = 1 THEN arg_msg = '明细物料'+arg_mtrlcode+'已补件审核,不能重复审核' rslt = 0 GOTO ext END IF END IF IF arg_flag = 0 THEN UPDATE u_saletaskmx SET bjflag = 0, bjemp = '', bjdate = :null_dt WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid; ELSE UPDATE u_saletaskmx SET bjflag = 1, bjemp = :publ_operator, bjdate = getdate() WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid; END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新明细'+arg_mtrlcode+'补件标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_commit THEN COMMIT; END IF RETURN rslt end function public function integer bjprice (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlcode, decimal arg_enprice, decimal arg_rebate, ref string arg_msg, boolean arg_commit);Int rslt = 1 Int li_bjflag string ls_outtype decimal ld_fprice,ld_price IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 THEN arg_msg = '订单只能在进行状态下才能操作' rslt = 0 GOTO ext END IF if arg_enprice < 0 or arg_rebate < 0 then arg_msg = '错误单价或折扣' rslt = 0 end if SELECT outtypestr,bjflag INTO :ls_outtype,:li_bjflag FROM u_saletaskmx WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询明细物料'+arg_mtrlcode+'补件审核标记失败' rslt = 0 GOTO ext END IF IF ls_outtype <> '补件' THEN arg_msg = '明细物料'+arg_mtrlcode+'不是补件明细,不能修改单价' rslt = 0 GOTO ext END IF IF li_bjflag = 1 THEN arg_msg = '明细物料'+arg_mtrlcode+'已补件审核,不能修改单价' rslt = 0 GOTO ext END IF ld_fprice = arg_enprice * mrate ld_price = arg_enprice * mrate * arg_rebate UPDATE u_saletaskmx SET enprice = :arg_enprice, rebate = :arg_rebate, fprice = :ld_fprice, price = :ld_price WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新明细'+arg_mtrlcode+'单价失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_commit THEN COMMIT; END IF RETURN rslt end function public function integer propermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);//salepermit Int rslt = 1,cnt = 0 IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_saletask_secaudit = -1000 THEN arg_msg = '选项:[035]销售订单使用二级审核,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_saletask_fore_secaudit = -1000 THEN arg_msg = '选项:[088]销售预测单二级审核,读取初始默认值失败,操作取消!' 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_oa_saletask_fore = -1000 THEN arg_msg = '选项:[227]销售预测单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误销售订单唯一码' GOTO ext END IF IF getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 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_secaudit = 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 ELSE IF uo_option_if_oa_saletask_fore = 1 AND uo_option_saletask_fore_secaudit = 1 And audit_buildtype = 0 THEN IF f_check_if_oaflow(arg_scid,arg_taskid,1324,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_scid,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 SET p_Auditingdate = getdate(), p_Auditingrep = :arg_emp, status = 1 WHERE taskid = :arg_taskid AND scid = :arg_scid AND status = 4 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致订单生产审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext 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 cancelpropermit (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1,cnt = 0 DateTime nulldate Decimal ls_consignedQty IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF SetNull(nulldate) IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误销售订单唯一码' GOTO ext END IF IF getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF ctmint > 0 THEN ARG_MSG = '单据已截数,不能操作' rslt = 0 GOTO ext END IF IF Status <> 1 THEN rslt = 0 ARG_MSG = "订单只有在进行状态才可以执行撤消生产审核,请核对" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_order_ml WHERE scid = :arg_scid AND taskid = :arg_taskid AND (ordertype = 0 OR ordertype = 1) 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_saleoutmx WHERE scid = :arg_scid And 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 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 SELECT sum(u_SaleTaskMx.consignedQty) INTO :ls_consignedQty FROM u_SaleTaskMx WHERE ( u_SaleTaskMx.TaskID = :arg_taskid ) AND ( u_SaleTaskMx.scid = :arg_scid ) AND ( u_SaleTaskMx.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 IF Kind <> 0 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_taskdamt_mx WHERE scid = :arg_scid And relid = :arg_taskid; IF SQLCA.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询订单是否已开订单收款单失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = "订单已开订单收款单,不能撤审" GOTO ext END IF END IF //来料加工订单,检查是否已开收料单 IF Kind = 2 THEN 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 = :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 SELECT sum(u_SaleTaskMx_in.consignedQty) INTO :ls_consignedQty FROM u_SaleTaskMx_in WHERE ( u_SaleTaskMx_in.TaskID = :arg_taskid ) AND ( u_SaleTaskMx_in.scid = :arg_scid ) 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 END IF //默认订单调度 Long i FOR i = 1 To it_mxbt IF p_cprqplan(arg_scid,arg_taskid,saletaskmx[i].printid,0,saletaskmx[i].saleqty,ARG_MSG,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT UPDATE u_SaleTask SET Status = 4, p_Auditingrep = '', p_Auditingdate = :nulldate WHERE TaskID = :arg_taskid AND scid = :arg_scid 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 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_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 pQty + wqty, AssignQty INTO :ld_SaleQty, :ld_AssignQty 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 IF ld_SaleQty - ld_AssignQty < arg_qty THEN arg_msg = '排产数量大于待生产数!' rslt = 0 GOTO ext END IF UPDATE u_SaleTaskMx SET AssignQty = AssignQty + :arg_qty WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新排产数失败>>'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_SaleTaskMx SET u_SaleTaskMx.perfinishdate = uv_order_perfinishdate.perfinishdate FROM u_SaleTaskMx,uv_order_perfinishdate WHERE u_SaleTaskMx.scid = uv_order_perfinishdate.scid AND u_SaleTaskMx.taskid = uv_order_perfinishdate.taskid AND u_SaleTaskMx.printid = uv_order_perfinishdate.taskmxid 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 = -1 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 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 ddpermit (long arg_scid, 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 DateTime ldt_null SetNull(ldt_null) Decimal ld_bqty String ls_pfcode Int li_ifautodd,li_ifrebuypack,li_ifpackpro Long ll_scid Int li_isuse Long ll_cusid,ll_pid String ls_mtrlcode,ls_status,ls_woodcode,ls_pcode,ls_unit,ls_mtrlcuscode DateTime ldt_rqdate String ls_mxdscrp Decimal ld_bqty_pack Long ll_cnt ll_cnt = 0 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 mtrlid, ddflag, stopflag, bqty, pfcode, status, woodcode, pcode, mtrlcuscode, requiredate, mxdscrp INTO :ll_mtrlid, :li_ddflag, :li_stopflag, :ld_bqty, :ls_pfcode, :ls_status, :ls_woodcode, :ls_pcode, :ls_mtrlcuscode, :ldt_rqdate, :ls_mxdscrp FROM u_saletaskmx 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 = '明细行:'+String(arg_printid)+',查询订单产品明细失败 '+SQLCA.SQLErrText GOTO ext END IF IF li_stopflag = 1 THEN rslt = 0 arg_msg = '明细行:'+String(arg_printid)+',该订单明细已经终止,不能再调度审核' GOTO ext END IF SELECT ifautodd, scid, ifrebuypack , ifpackpro, mtrlcode, isuse INTO :li_ifautodd, :ll_scid, :li_ifrebuypack, :li_ifpackpro, :ls_mtrlcode, :li_isuse FROM u_mtrldef Where mtrlid = :ll_mtrlid ; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '明细行:'+String(arg_printid)+',物料:'+ls_mtrlcode+'查询订单明细物料是否自动调度失败,'+SQLCA.SQLErrText rslt = 0 GOTO ext END IF IF ld_bqty > 0 And li_ifrebuypack = 1 And li_ifpackpro <> 0 And arg_flag = 0 THEN IF uof_cmp_pack(arg_scid,arg_taskid,arg_printid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ls_mtrlcuscode,ld_bqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF IF li_ifautodd = 0 THEN IF arg_flag = 0 THEN IF li_isuse = 0 THEN arg_msg = '明细行:'+String(arg_printid)+',物料'+ls_mtrlcode+',不是有效物料,请检查' rslt = 0 GOTO ext END IF IF li_ddflag = 1 THEN rslt = 0 arg_msg = '明细行:'+String(arg_printid)+',物料'+ls_mtrlcode+',该订单明细已经调度审核' GOTO ext END IF ELSE IF li_ddflag = 0 THEN rslt = 0 arg_msg = '明细行:'+String(arg_printid)+',物料'+ls_mtrlcode+',该订单明细未调度审核' 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 WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '明细行:'+String(arg_printid)+',物料'+ls_mtrlcode+',查询订单明细安排采购数量失败 ' + SQLCA.SQLErrText GOTO ext END IF IF ld_bqty > 0 THEN 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 IF Not (li_ifrebuypack = 1 And li_ifpackpro = 1 ) THEN SELECT u_saletaskmx.mtrlid, u_saletaskmx.status, u_saletaskmx.woodcode, u_saletaskmx.pcode, u_mtrldef.mtrlcode, u_mtrldef.unit, u_saletask.cusid, u_saletaskmx.requiredate, u_saletaskmx.mtrlcuscode, u_saletaskmx.mxdscrp INTO :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ls_mtrlcode, :ls_unit, :ll_cusid, :ldt_rqdate, :ls_mtrlcuscode, :ls_mxdscrp FROM u_saletaskmx, u_mtrldef, u_saletask WHERE u_saletaskmx.mtrlid = u_mtrldef.mtrlid AND u_saletask.taskid = u_saletaskmx.taskid AND u_saletask.scid = u_saletaskmx.scid 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 = '明细行:'+String(arg_printid)+',物料'+ls_mtrlcode+',查询订单明细内容失败 ' + SQLCA.SQLErrText GOTO ext END IF 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 = ls_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 arg_s_rqbuy.arg_s_rqbuymx[1].rqdate = ldt_rqdate arg_s_rqbuy.arg_s_rqbuymx[1].plancode = ls_mtrlcuscode ELSE DECLARE cur_pack CURSOR FOR SELECT u_saletaskmx_pack.pid, u_saletaskmx_pack.mtrlid, u_saletaskmx_pack.bqty, u_saletaskmx_pack.status, u_saletaskmx_pack.woodcode, u_saletaskmx_pack.pcode, u_saletaskmx_pack.mtrlcuscode, u_mtrldef.mtrlcode, u_mtrldef.unit, u_SaleTask.CusID FROM u_saletaskmx_pack INNER JOIN u_mtrldef ON u_saletaskmx_pack.mtrlid = u_mtrldef.mtrlid INNER JOIN u_SaleTask ON u_saletaskmx_pack.scid = u_SaleTask.scid AND u_saletaskmx_pack.taskid = u_SaleTask.TaskID WHERE u_saletaskmx_pack.scid = :arg_scid AND u_saletaskmx_pack.taskid = :arg_taskid AND u_saletaskmx_pack.printid = :arg_printid ORDER BY u_saletaskmx_pack.pid Using commit_transaction; OPEN cur_pack; FETCH cur_pack Into :ll_pid,:ll_mtrlid,:ld_bqty_pack,:ls_status,:ls_woodcode,:ls_pcode,:ls_mtrlcuscode,:ls_mtrlcode,:ls_unit,:ll_cusid; DO WHILE SQLCA.SQLCode = 0 ll_cnt++ arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].mtrlcode = ls_mtrlcode arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].uqty = ld_bqty arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].unit = ls_unit arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].status = ls_status arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].woodcode = ls_woodcode arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].pcode = ls_pcode arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].mxdscrp = ls_mxdscrp arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].mtrlid = ll_mtrlid arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].orderid = arg_taskid arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].wrkgrpid = 0 arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].ifrel = 1 arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].printid = ll_cnt arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].rate = 1 arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].dftsptid = ll_cusid arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].relprintid = arg_printid arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].rqdate = ldt_rqdate arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].plancode = ls_mtrlcuscode arg_s_rqbuy.arg_s_rqbuymx[ll_cnt].relpid = ll_pid FETCH cur_pack Into :ll_pid,:ll_mtrlid,:ld_bqty_pack,:ls_status,:ls_woodcode,:ls_pcode,:ls_mtrlcuscode,:ls_mtrlcode,:ls_unit,:ll_cusid; LOOP CLOSE cur_pack; END IF IF uo_rqbuy.Save(arg_s_rqbuy,publ_operator,arg_msg,False) = 0 THEN arg_msg = '明细行:'+String(arg_printid)+',物料'+ls_mtrlcode+','+arg_msg rslt = 0 GOTO ext END IF IF uo_rqbuy.audit(ll_scid,uo_rqbuy.uo_requestbuyid,publ_operator,arg_msg,False) = 0 THEN arg_msg = '明细行:'+String(arg_printid)+',物料'+ls_mtrlcode+','+arg_msg rslt = 0 GOTO ext END IF IF uo_rqbuy.audit_2(ll_scid,uo_rqbuy.uo_requestbuyid,publ_operator,arg_msg,False) = 0 THEN arg_msg = '明细行:'+String(arg_printid)+',物料'+ls_mtrlcode+','+arg_msg rslt = 0 GOTO ext END IF END IF END IF UPDATE u_saletaskmx SET ddflag = 1, dddate = getdate(), ddemp = :publ_operator WHERE ddflag = 0 AND scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '明细行:'+String(arg_printid)+',物料'+ls_mtrlcode+',更新订单明细调度审核标记失败 ' + 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 distinct 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 arg_msg = '明细行:'+String(arg_printid)+',物料'+ls_mtrlcode+','+arg_msg rslt = 0 GOTO ext END IF IF uo_rqbuy.caudit(ll_scid,ll_requestbuyid[ll_i],0,arg_msg,False) = 0 THEN arg_msg = '明细行:'+String(arg_printid)+',物料'+ls_mtrlcode+','+arg_msg rslt = 0 GOTO ext END IF IF uo_rqbuy.del(ll_scid,ll_requestbuyid[ll_i],0,arg_msg,False) = 0 THEN arg_msg = '明细行:'+String(arg_printid)+',物料'+ls_mtrlcode+','+arg_msg 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 = '明细行:'+String(arg_printid)+',物料'+ls_mtrlcode+',查询订单相关成品申购单失败' GOTO ext END IF IF cnt <> 0 THEN rslt = 0 arg_msg = '明细行:'+String(arg_printid)+',物料'+ls_mtrlcode+',订单已经存在相关成品申购单.不可以撤销审核' GOTO ext END IF END IF //检查生产计划 String ls_ordercode,ls_ordercode_str cnt = 0 DECLARE cur_order CURSOR FOR SELECT distinct u_Order_ml.ordercode FROM u_order_ml_mx INNER JOIN u_Order_ml ON u_order_ml_mx.scid = u_Order_ml.scid AND u_order_ml_mx.orderid = u_Order_ml.OrderID WHERE u_order_ml_mx.taskid = :arg_taskid AND u_order_ml_mx.taskmxid = :arg_printid AND u_order_ml_mx.scid = :arg_scid And (u_Order_ml.ordertype = 0 Or u_Order_ml.ordertype = 1) Using commit_transaction; OPEN cur_order; FETCH cur_order Into :ls_ordercode; DO WHILE commit_transaction.SQLCode = 0 cnt++ IF ls_ordercode_str = '' THEN ls_ordercode_str = ls_ordercode ELSE ls_ordercode_str = ls_ordercode_str + ',' + ls_ordercode END IF FETCH cur_order Into :ls_ordercode; LOOP CLOSE cur_order; IF cnt <> 0 THEN rslt = 0 arg_msg = '明细行:'+String(arg_printid)+',物料'+ls_mtrlcode+',订单已经存在相关生产计划:'+ls_ordercode_str+',不可以撤销审核' GOTO ext END IF DELETE FROM u_saletaskmx_pack WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '明细行:'+String(arg_printid)+',物料'+ls_mtrlcode+',删除包件待申购列表失败 ' + SQLCA.SQLErrText GOTO ext END IF UPDATE u_saletaskmx SET ddflag = 0, dddate = :ldt_null, ddemp = '' WHERE ddflag = 1 AND scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '明细行:'+String(arg_printid)+',物料'+ls_mtrlcode+',更新订单明细调度审核标记失败 ' + 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_scid, 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,li_ifbj Long ll_mtrlid,cnt,ll_typeid DateTime ldt_null SetNull(ldt_null) IF uo_option_dd_allto_pqty = -1000 THEN arg_msg = '选项:[335]销售订单及销售预测单自动调度全部调度到自制排产,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误销售订单唯一码' GOTO ext END IF IF arg_flag = 1 THEN SELECT typeid INTO :ll_typeid FROM u_saletask WHERE scid = :arg_scid AND taskid = :arg_taskid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ARG_MSG = '明细行:'+String(arg_printid)+',查询订单分类信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_typeid > 0 THEN SELECT ifbj INTO :li_ifbj FROM u_saletype Where typeid = :ll_typeid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ARG_MSG = '明细行:'+String(arg_printid)+',查询订单分类是否补件信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF END IF SELECT mtrlid,ddflag,stopflag INTO :ll_mtrlid,:li_ddflag,:li_stopflag FROM u_saletaskmx 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 ARG_MSG = '明细行:'+String(arg_printid)+',查询订单信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_stopflag = 1 THEN rslt = 0 ARG_MSG = '明细行:'+String(arg_printid)+',查询订单明细已经终止,请检查' 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 = '明细行:'+String(arg_printid)+',查询订单明细物料是否自动调度失败,'+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 = '明细行:'+String(arg_printid)+',查询订单产品['+ls_mtrlcode+']来源失败' GOTO ext END IF IF li_ifbj = 1 or uo_option_dd_allto_pqty = 1 THEN UPDATE u_saletaskmx SET pqty = :arg_qty WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '明细行:'+String(arg_printid)+',更新订单产品['+ls_mtrlcode+']排产数量失败' GOTO ext END IF ELSE IF li_mtrlorigin = 0 THEN IF li_iflljg = 0 THEN UPDATE u_saletaskmx SET pqty = :arg_qty WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '明细行:'+String(arg_printid)+',更新订单产品['+ls_mtrlcode+']排产数量失败' GOTO ext END IF ELSE UPDATE u_saletaskmx SET lqty = :arg_qty WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '明细行:'+String(arg_printid)+',更新订单产品['+ls_mtrlcode+']客户来料数量失败' GOTO ext END IF END IF ELSEIF li_mtrlorigin = 2 THEN UPDATE u_saletaskmx SET bqty = :arg_qty WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '明细行:'+String(arg_printid)+',更新订单产品['+ls_mtrlcode+']采购数量失败' GOTO ext END IF ELSEIF li_mtrlorigin = 3 THEN UPDATE u_saletaskmx SET wqty = :arg_qty WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '明细行:'+String(arg_printid)+',更新订单产品['+ls_mtrlcode+']外协数量失败' GOTO ext END IF ELSEIF li_mtrlorigin = 6 THEN UPDATE u_saletaskmx SET lqty = :arg_qty WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '明细行:'+String(arg_printid)+',更新订单产品['+ls_mtrlcode+']客户来料数量失败' GOTO ext END IF END IF END IF ELSE IF li_ifautodd = 0 THEN IF li_ddflag = 1 THEN rslt = 0 ARG_MSG = '明细行:'+String(arg_printid)+',该订单明细已经调度审核' GOTO ext END IF END IF UPDATE u_saletaskmx SET pqty = 0,bqty = 0,wqty = 0,lqty = 0 WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '明细行:'+String(arg_printid)+',更新订单产品['+ls_mtrlcode+']调度数量失败' GOTO ext END IF END IF IF li_ifautodd = 1 THEN IF arg_flag = 1 THEN IF ddpermit(arg_scid,arg_taskid,arg_printid,0,ARG_MSG,False) = 0 THEN rslt = 0 GOTO ext END IF ELSE IF ddpermit(arg_scid,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 addmxcmpl (long arg_scid, long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 datetime null_dt setnull(null_dt) IF uo_option_if_saleout = -1000 THEN rslt = 0 arg_msg = '选项:[200]使用发货通知单,读取初始默认值失败,操作取消!' GOTO ext END IF IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误销售订单唯一码' GOTO ext END IF IF arg_addqty = 0 THEN rslt = 1 GOTO ext END IF IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 And status <> 5 THEN rslt = 0 IF status <> 1 THEN arg_msg = "销售订单只有在进行状态下才可以执行进仓" ELSEIF status <> 5 THEN arg_msg = "销售订单只有在完成状态下才可以撤消进仓" END IF GOTO ext END IF Decimal ls_SaleQty,ls_consignedQty,ld_saleoutqty String ls_mtrlcode Int li_stopflag Decimal ld_upsalerate,ld_upsaleqty SELECT u_SaleTaskMx.SaleQty, u_SaleTaskMx.consignedQty, u_mtrldef.mtrlcode, u_SaleTaskMx.stopflag, u_mtrldef.upsalerate, u_mtrldef.upsaleqty INTO :ls_SaleQty, :ls_consignedQty, :ls_mtrlcode, :li_stopflag, :ld_upsalerate, :ld_upsaleqty FROM u_SaleTaskMx ,u_mtrldef WHERE ( u_SaleTaskMx.TaskID = :arg_taskid ) AND ( u_SaleTaskMx.printid = :arg_printid ) AND ( u_saletaskmx.scid = :arg_scid) AND ( u_SaleTaskMx.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 li_stopflag = 1 THEN rslt = 0 arg_msg = "产品编码["+ls_mtrlcode+"]对应的销售订单明细已终止,不能执行更新订单完成数操作" GOTO ext END IF IF arg_addqty < 0 THEN IF ls_consignedQty + arg_addqty < 0 THEN rslt = 0 arg_msg = "产品:"+ls_mtrlcode+",的订单已完成数量只有"+String(ls_consignedQty,'#,##0.0#')+",不能退货"+String(arg_addqty,'#,##0.0#') GOTO ext END IF END IF IF ls_SaleQty * (1+ ld_upsalerate) + ld_upsaleqty < ls_consignedQty + arg_addqty THEN rslt = 0 arg_msg = "产品["+ls_mtrlcode+"]的未完成数量只有"+String(ls_SaleQty - ls_consignedQty,'#,##0.0#')+",可发货上限为:"+String(ls_SaleQty * (1+ ld_upsalerate) + ld_upsaleqty - ls_consignedQty,'#,##0.0#')+",不能发货"+String(arg_addqty,'#,##0.0#') GOTO ext END IF IF uo_option_if_saleout = 1 And arg_addqty < 0 THEN ld_saleoutqty = arg_addqty ELSE ld_saleoutqty = 0 END IF UPDATE u_SaleTaskMx SET consignedQty = consignedQty +:arg_addqty, saleoutqty = saleoutqty + :ld_saleoutqty, accomplishdate = case when :ls_consignedQty + :arg_addqty >= :ls_SaleQty then getdate() else :null_dt end WHERE ( u_SaleTaskMx.TaskID = :arg_taskid ) AND ( u_SaleTaskMx.printid = :arg_printid ) AND ( u_saletaskmx.scid = :arg_scid) AND ( u_SaleTaskMx.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 canceloapermit (long arg_scid, 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_saletask_fore_secaudit = -1000 THEN arg_msg = '选项:[088]销售预测单二级审核,读取初始默认值失败,操作取消!' 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_oa_saletask_fore = -1000 THEN arg_msg = '选项:[227]销售预测单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误销售订单唯一码' GOTO ext END IF IF getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF ctmint > 0 THEN ARG_MSG = '单据已截数,不能操作' rslt = 0 GOTO ext END IF IF Kind <> 0 THEN IF Not (uo_option_saletask_secaudit = 1 AND uo_option_if_oa_saletask = 1) THEN rslt = 0 ARG_MSG = '系统设置没有使用OA审批流程,请联系管理员' GOTO ext END IF ELSE IF Not (uo_option_saletask_fore_secaudit = 1 AND uo_option_if_oa_saletask_fore = 1) THEN rslt = 0 ARG_MSG = '系统设置没有使用OA审批流程,请联系管理员' GOTO ext END IF END IF IF Status <> 4 THEN rslt = 0 ARG_MSG = "订单只有在已待生产审核状态才可以执行撤消审核,请核对" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_order_ml WHERE scid = :arg_scid AND taskid = :arg_taskid and (ordertype = 0 or ordertype = 1) 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,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 SELECT sum(u_SaleTaskMx.consignedQty) INTO :ls_consignedQty FROM u_SaleTaskMx WHERE ( u_SaleTaskMx.TaskID = :arg_taskid ) AND ( u_SaleTaskMx.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 SET Status = 0, permit_emp = '', permit_date = :nulldate WHERE TaskID = :arg_taskid AND scid = :arg_scid AND status = 4 USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致销售订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext 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_scid,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 addmxcmpl_in (long arg_scid, 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_scid,arg_taskid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 AND status <> 5 THEN rslt = 0 IF status <> 1 THEN ARG_MSG = "销售订单只有在进行状态下才可以执行收料进仓" ELSEIF status <> 5 THEN ARG_MSG = "销售订单只有在完成状态下才可以撤消收料进仓" END IF GOTO ext END IF Decimal ls_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 ) and ( u_SaleTaskMx_in.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 and rslt = 1 THEN COMMIT USING commit_transaction; END IF p_reset() 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 updateinwareqty (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_inwareQty 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 SaleQty, inwareQty INTO :ld_SaleQty, :ld_inwareQty 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 IF ld_SaleQty - ld_inwareQty < arg_qty THEN arg_msg = '进仓数量大于未进仓数!' rslt = 0 GOTO ext END IF UPDATE u_SaleTaskMx SET inwareQty = inwareQty + :arg_qty WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新进仓数失败>>'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 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 trycmptask_fore (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 Kind <> 0 THEN rslt = 0 arg_msg = '不是销售预测单不能按进仓数来完成单据' GOTO ext END IF IF status <> 1 And status <> 5 And status <> 3 THEN rslt = 0 IF status <> 1 THEN arg_msg = "销售预测单只有在进行状态下才可以执行设完成状态" ELSEIF status <> 5 THEN arg_msg = "销售预测单只有在完成状态下才可以执行撤消完成状态" ELSE arg_msg = "销售预测单不是在进行,已完成或已终止状态,不能操作" END IF GOTO ext END IF Decimal ls_zerook,ls_stopok Boolean if_finish,if_stop if_finish = True if_stop = True DECLARE zero_cur CURSOR FOR SELECT u_saletaskmx.saleqty - u_saletaskmx.inwareqty - u_saletaskmx.stopqty, u_saletaskmx.saleqty - 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,:ls_stopok; DO WHILE commit_transaction.SQLCode = 0 IF if_finish THEN IF ls_zerook > 0 THEN if_finish = False END IF IF if_stop THEN IF ls_zerook > 0 THEN if_stop = False END IF FETCH zero_cur Into :ls_zerook,:ls_stopok; LOOP CLOSE zero_cur; IF if_stop THEN UPDATE u_saletask SET status = 3, accomplishdate = getdate(), stopemp = :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 ELSE IF 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 ROLLBACK Using commit_transaction; GOTO ext END IF ELSEIF 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 ROLLBACK Using commit_transaction; GOTO ext END IF END IF END IF it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF p_reset() Return (rslt) end function public function integer uof_getpriceorder (long arg_cusid, long arg_mtrlid, ref string arg_pocode, ref string arg_typestr, ref string arg_msg);Int rslt = 1 DateTime server_time Long ll_mtrltypeid_arr[],ll_cusareaid_arr[] String ls_mtrlsectype,ls_zxmtrlmode,ls_usermtrlmode Long ll_mtrltypeid,ll_cusareaid Long ll_parentid Long ll_cnt = 0,ll_cnt2 = 0 Long ll_row String ls_pocode,ls_typestr SELECT mtrlsectype,zxmtrlmode,usermtrlmode INTO :ls_mtrlsectype,:ls_zxmtrlmode,:ls_usermtrlmode FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其他原因查询产品资料失败'+sqlca.SQLErrText GOTO ext END IF SELECT Top 1 getdate() INTO :server_time FROM u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其他原因取服务器时间失败'+sqlca.SQLErrText GOTO ext END IF server_time = DateTime(Date(String(server_time,'yyyy-mm-dd')),Time(0)) // SELECT mtrltypeid INTO :ll_mtrltypeid FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询产品类型失败'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ll_cnt++ ll_mtrltypeid_arr[ll_cnt] = ll_mtrltypeid SELECT parentid INTO :ll_parentid FROM u_mtrltype WHERE mtrltypeid = :ll_mtrltypeid AND parentid > 0 ; DO WHILE sqlca.SQLCode = 0 ll_cnt++ ll_mtrltypeid_arr[ll_cnt] = ll_parentid ll_mtrltypeid = ll_parentid SELECT parentid INTO :ll_parentid FROM u_mtrltype WHERE mtrltypeid = :ll_mtrltypeid AND parentid > 0 ; LOOP // // SELECT cusareaid INTO :ll_cusareaid FROM u_cust Where cusid = :arg_cusid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询客户区域失败'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ll_cnt2++ ll_cusareaid_arr[ll_cnt2] = ll_cusareaid SELECT parentid INTO :ll_parentid FROM u_Cusarea WHERE CusareaID = :ll_cusareaid AND parentid > 0 ; DO WHILE sqlca.SQLCode = 0 ll_cnt2++ ll_cusareaid_arr[ll_cnt2] = ll_parentid ll_cusareaid = ll_parentid SELECT parentid INTO :ll_parentid FROM u_Cusarea WHERE CusareaID = :ll_cusareaid AND parentid > 0 ; LOOP datastore ds_price ds_price = CREATE datastore ds_price.DataObject = 'ds_price_order_index' ds_price.SetTransObject(sqlca) ds_price.Retrieve(arg_mtrlid,ll_mtrltypeid_arr[],arg_cusid,ll_cusareaid_arr[],server_time,ls_mtrlsectype,ls_zxmtrlmode,ls_usermtrlmode,0) ll_row = ds_price.RowCount() IF ll_row = 0 THEN ls_pocode = '' ls_typestr = '' ELSE ls_pocode = ds_price.Object.pocode[ll_row] ls_typestr = ds_price.Object.typestr[ll_row] END IF ext: IF rslt = 0 THEN arg_pocode = '' arg_typestr = '' ELSE arg_pocode = ls_pocode arg_typestr = ls_typestr END IF RETURN rslt end function public function integer uof_add_plan (s_saletask_plan arg_s_plan, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt,ll_planid IF IsNull(arg_s_plan.planid) THEN arg_s_plan.planid = 0 IF IsNull(arg_s_plan.scid) THEN arg_s_plan.scid = 0 IF IsNull(arg_s_plan.taskid) THEN arg_s_plan.taskid = 0 IF IsNull(arg_s_plan.planemp) THEN arg_s_plan.planemp = '' IF IsNull(arg_s_plan.plandscrp) THEN arg_s_plan.plandscrp = '' IF arg_s_plan.taskid = 0 THEN arg_msg = '不合理的销售订单唯一码' rslt = 0 GOTO ext END IF IF arg_s_plan.planemp = '' THEN arg_msg = '请填写经手人' rslt = 0 GOTO ext END IF IF arg_s_plan.plandscrp = '' THEN arg_msg = '请填写工作计划内容' rslt = 0 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_saletask WHERE scid = :arg_s_plan.scid AND taskid = :arg_s_plan.taskid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询销售订单信息失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '销售订单不存在,请检查' rslt = 0 GOTO ext END IF IF arg_s_plan.planid = 0 THEN ll_planid = f_sys_scidentity(0,"u_saletask_plan","planid",arg_msg,TRUE,id_sqlca) IF ll_planid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_saletask_plan (planid, scid, taskid, planemp, plandate, plandscrp, opdate, opemp) VALUES (:ll_planid, :arg_s_plan.scid, :arg_s_plan.taskid, :arg_s_plan.planemp, :arg_s_plan.plandate, :arg_s_plan.plandscrp, getdate(), :arg_opemp) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '建立销售订单工作计划失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ELSE UPDATE u_saletask_plan SET planemp = :arg_s_plan.planemp, plandate = :arg_s_plan.plandate, plandscrp = :arg_s_plan.plandscrp, moddate = getdate(), modemp = :arg_opemp Where planid = :arg_s_plan.planid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新销售订单工作计划失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF 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_del_plan (long arg_planid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 String ls_opemp Int li_flag SELECT opemp,flag INTO :ls_opemp,:li_flag FROM u_saletask_plan Where planid = :arg_planid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询客户工作计划失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF NOT sys_power_issuper AND arg_opemp <> ls_opemp THEN arg_msg = '不是资料建立人或系统管理员,不能删除' rslt = 0 GOTO ext END IF IF li_flag = 1 THEN arg_msg = '工作计划已完成,不能删除' rslt = 0 GOTO ext END IF DELETE FROM u_saletask_plan Where planid = :arg_planid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '删除销售订单工作计划失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer uof_finish_plan (long arg_planid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag IF IsNull(arg_planid) THEN arg_planid = 0 IF arg_planid <= 0 THEN rslt = 0 arg_msg = '错误的工作计划唯一码' GOTO ext END IF SELECT flag INTO :li_flag FROM u_saletask_plan Where planid = :arg_planid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工作计划信息失败,'+commit_transaction.SQLErrText GOTO ext END IF IF li_flag = 1 THEN rslt = 0 arg_msg = '工作计划已完成,不能重复完成,请检查' GOTO ext END IF UPDATE u_saletask_plan SET flag = 1 Where planid = :arg_planid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新工作计划完成状态失败,'+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer add_dscrp2 (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 IF status = 1 THEN rslt = 0 arG_MSG = "只有在生产审核前才可以使用" GOTO ext END IF UPDATE u_saletask SET dscrp2 = dscrp2+' '+: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 dscrp2 = dscrp2+' '+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 addmxsaleout (long arg_scid, 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_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 Decimal ls_SaleQty,ld_saleoutqty String ls_mtrlcode decimal ld_upsalerate,ld_upsaleqty SELECT u_SaleTaskMx.SaleQty, u_SaleTaskMx.saleoutqty, u_mtrldef.mtrlcode, u_mtrldef.upsalerate, u_mtrldef.upsaleqty INTO :ls_SaleQty, :ld_saleoutqty, :ls_mtrlcode, :ld_upsalerate, :ld_upsaleqty FROM u_SaleTaskMx ,u_mtrldef WHERE ( u_SaleTaskMx.scid = :arg_scid ) AND ( u_SaleTaskMx.TaskID = :arg_taskid ) AND ( u_SaleTaskMx.printid = :arg_printid ) AND ( u_SaleTaskMx.stopflag = 0 ) AND ( u_SaleTaskMx.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 * (1 + ld_upsalerate) + ld_upsaleqty < ld_saleoutqty + arg_addqty THEN rslt = 0 ARG_MSG = "产品["+ls_mtrlcode+"]的未通知发货数量只有"+String(ls_SaleQty - ld_saleoutqty,'#,##0.0#')+",上限:"+string(ls_SaleQty * (1 + ld_upsalerate) + ld_upsaleqty - ld_saleoutqty,'#,##0.0#')+",不能下单"+String(arg_addqty,'#,##0.0#') GOTO ext END IF UPDATE u_SaleTaskMx SET saleoutqty = saleoutqty +:arg_addqty WHERE ( u_SaleTaskMx.TaskID = :arg_taskid ) AND ( u_SaleTaskMx.printid = :arg_printid ) AND ( u_saletaskmx.scid = :arg_scid) AND ( u_SaleTaskMx.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 stopsaletask_cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 datetime ld_nulldt setnull(ld_nulldt) IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_taskid <= 0 THEN rslt = 0 ARG_MSG = '错误销售订单唯一码' GOTO ext END IF IF p_getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF Status <> 3 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 UPDATE u_SaleTask SET Status = 1, accomplishdate = :ld_nulldt, stopemp = '', stopreason = '' WHERE TaskID = :arg_taskid AND scid = :arg_scid AND Status = 3 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 = "正在终止销售订单,请稍后查询" 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 stopqty (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlcode, 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_saleoutqty,ld_consignedQty,ld_noauditqty 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[],ld_Sonscale_fm[] Long ll_SonMtrlid[] Long ll_l,ll_j Decimal ld_stopqty_this = 0 Long ll_pid uo_mtrlware_assign uo_ma uo_ma = Create uo_mtrlware_assign uo_ma.commit_transaction = commit_transaction datastore ds_fp_del ds_fp_del = Create datastore ds_fp_del.DataObject = 'ds_rp_cust_saletask_fp_mx_fp_del_p' ds_fp_del.SetTransObject(commit_transaction) datastore ds_fp_del_pack ds_fp_del_pack = Create datastore ds_fp_del_pack.DataObject = 'ds_rp_cust_saletask_fp_mx_fp_del_pack' ds_fp_del_pack.SetTransObject(commit_transaction) If uo_option_m_msttake = -1000 Then arg_msg = '选项:[045]系统使用多币种应收帐,读取初始默认值失败,操作取消!' rslt = 0 Goto ext End If If uo_option_saletask_stopqty_type = -1000 Then arg_msg = '选项:[404]销售订单终止数量录入方式,读取初始默认值失败,操作取消!' rslt = 0 Goto ext End If If f_aps_mrp_cklock(arg_scid,arg_msg) = 0 Then 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 Select u_SaleTaskMx.SaleQty, u_SaleTaskMx.saleoutqty, u_SaleTaskMx.consignedQty, isnull(uv_outware_sale_noaudit_qty.qty,0), u_SaleTaskMx.enprice, u_SaleTaskMx.rebate, u_SaleTaskMx.stopqty, u_mtrldef.outtype, u_mtrldef.ifpackpro, u_SaleTaskMx.mtrlid, u_SaleTaskMx.status, u_SaleTaskMx.woodcode, u_SaleTaskMx.pcode Into :ld_saleqty, :ld_saleoutqty, :ld_consignedQty, :ld_noauditqty, :ld_enprice, :ld_rebate, :ld_stopqty_ori, :li_outtype, :li_ifpackpro, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode From u_SaleTaskMx Inner JOIN u_mtrldef ON u_SaleTaskMx.MtrlID = u_mtrldef.mtrlid LEFT Outer JOIN uv_outware_sale_noaudit_qty ON u_SaleTaskMx.scid = uv_outware_sale_noaudit_qty.scid And u_SaleTaskMx.TaskID = uv_outware_sale_noaudit_qty.relid And u_SaleTaskMx.printid = uv_outware_sale_noaudit_qty.relprintid 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 = '查询物料'+arg_mtrlcode+'可终止数失败,'+commit_transaction.SQLErrText Goto ext End If If IsNull(arg_stopqty) Then arg_stopqty = 0 //如果 arg_stopqty 代表的是本次终止数量, 需要把原终止数加上,得出订单明细总终止数 //计算本次终止数,保存到终止数量记录表中 If uo_option_saletask_stopqty_type = 1 Then ld_stopqty_this = arg_stopqty arg_stopqty = arg_stopqty + ld_stopqty_ori Else //如果arg_stopqty 代表总终止数, 本次终止数 = 总终止数 - 原终止数 ld_stopqty_this = arg_stopqty - ld_stopqty_ori End If 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 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 And status <> 3 Then arg_msg = '订单只能在进行状态或自动完成状态才能操作' rslt = 0 Goto ext End If If arg_stopqty > ld_saleqty - ld_consignedQty - ld_noauditqty Then arg_msg = '明细物料'+arg_mtrlcode+'未开发货单数只有:'+String(ld_saleqty - ld_consignedQty - ld_noauditqty,'#,##0.##########')+',不能终止:'+String(arg_stopqty,'#,##0.##########') rslt = 0 Goto ext End If If arg_stopqty > ld_saleqty - ld_saleoutqty Then arg_msg = '明细物料'+arg_mtrlcode+'未开发货通知单数只有:'+String(ld_saleqty - ld_saleoutqty,'#,##0.##########')+',不能终止:'+String(arg_stopqty,'#,##0.##########') rslt = 0 Goto ext End If If arg_stopqty > 0 Then If Not ((li_outtype = 1 Or li_outtype = 2) And li_ifpackpro > 0) Then ds_fp_del.Retrieve(arg_scid,arg_taskid,arg_printid) ld_qty = arg_stopqty For j = 1 To ds_fp_del.RowCount() ll_assignid = ds_fp_del.Object.u_mtrlware_assign_assignid[j] ld_assignqty = ds_fp_del.Object.u_mtrlware_assign_assignqty[j] - ds_fp_del.Object.u_mtrlware_assign_outqty[j] If ld_qty = 0 Then Exit If ld_qty <= ld_assignqty Then ld_qty_cancel = ld_qty ld_qty = 0 Else ld_qty_cancel = ld_assignqty ld_qty = ld_qty - ld_assignqty End If If uo_ma.uof_assign_del(ll_assignid,ld_qty_cancel,arg_msg,False) = 0 Then arg_msg = '删除库存分配失败,'+arg_msg rslt = 0 Goto ext End If Next Else If li_ifpackpro = 1 Or li_ifpackpro = 2 Then it_mxt = 1 cnt = 0 //查是否有换清单 If li_ifpackpro = 2 Then Select count(*) Into :cnt From u_saletaskmx_pf 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 End If If cnt > 0 Then Declare cur_pf_saletaskmx Cursor For Select u_saletaskmx_pf.SonMtrlid, u_saletaskmx_pf.status, u_saletaskmx_pf.woodcode, u_saletaskmx_pf.pcode, u_saletaskmx_pf.Sonscale, u_saletaskmx_pf.Sonscale_fm From u_saletaskmx_pf Where ( u_saletaskmx_pf.scid = :arg_scid ) And ( u_saletaskmx_pf.taskid = :arg_taskid ) And ( u_saletaskmx_pf.printid = :arg_printid ); Open cur_pf_saletaskmx; Fetch cur_pf_saletaskmx Into :ll_SonMtrlid[it_mxt],:ls_pf_status[it_mxt], :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:ld_Sonscale[it_mxt],:ld_Sonscale_fm[it_mxt]; Do While sqlca.SQLCode = 0 it_mxt++ Fetch cur_pf_saletaskmx Into :ll_SonMtrlid[it_mxt],:ls_pf_status[it_mxt], :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:ld_Sonscale[it_mxt],:ld_Sonscale_fm[it_mxt]; Loop it_mxt = it_mxt - 1 Close cur_pf_saletaskmx; Else Declare cur_pf Cursor For Select u_PrdPF.SonMtrlid, u_PrdPF.status, u_PrdPF.woodcode, u_PrdPF.pcode, u_prdpf.Sonscale, 1 From u_PrdPF,u_mtrl_pf,u_mtrldef Where ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid ) And ( u_PrdPF.pfcode = u_mtrl_pf.pfcode ) And ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid ) And ( u_PrdPF.mtrlid = :ll_mtrlid ) And ( u_mtrl_pf.ifdi = 1 And :li_ifpackpro = 0 Or u_mtrl_pf.ifdft = 1 And (:li_ifpackpro = 1 Or :li_ifpackpro = 2) And u_mtrldef.ifpack > 0) Order By u_PrdPF.printid; Open cur_pf; Fetch cur_pf Into :ll_SonMtrlid[it_mxt],:ls_pf_status[it_mxt], :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:ld_Sonscale[it_mxt],:ld_Sonscale_fm[it_mxt]; Do While sqlca.SQLCode = 0 it_mxt++ Fetch cur_pf Into :ll_SonMtrlid[it_mxt],:ls_pf_status[it_mxt], :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:ld_Sonscale[it_mxt],:ld_Sonscale_fm[it_mxt]; Loop it_mxt = it_mxt - 1 Close cur_pf; End If Else f_checkpz(ls_status,s_pz[]) it_mxt = UpperBound(s_pz) For ll_l = 1 To it_mxt ll_SonMtrlid[ll_l] = ll_mtrlid ls_pf_status[ll_l] = s_pz[ll_l].cfgname ls_pf_woodcode[ll_l] = ls_woodcode ls_pf_pcode[ll_l] = ls_pcode ld_Sonscale[ll_l] = Dec(s_pz[ll_l].qty) ld_Sonscale_fm[ll_l] = 1 Next End If For ll_j = 1 To it_mxt ds_fp_del_pack.Retrieve(arg_scid,arg_taskid,arg_printid,ll_SonMtrlid[ll_j],ls_pf_status[ll_j],ls_pf_woodcode[ll_j],ls_pf_pcode[ll_j]) ld_qty = arg_stopqty * ld_Sonscale[ll_j]/ld_Sonscale_fm[ll_j] For j = 1 To ds_fp_del_pack.RowCount() ll_assignid = ds_fp_del_pack.Object.u_mtrlware_assign_assignid[j] ld_assignqty = ds_fp_del_pack.Object.u_mtrlware_assign_assignqty[j] - ds_fp_del_pack.Object.u_mtrlware_assign_outqty[j] If ld_qty = 0 Then Exit If ld_qty <= ld_assignqty Then ld_qty_cancel = ld_qty ld_qty = 0 Else ld_qty_cancel = ld_assignqty ld_qty = ld_qty - ld_assignqty End If If uo_ma.uof_assign_del(ll_assignid,ld_qty_cancel,arg_msg,False) = 0 Then arg_msg = '删除库存分配失败,'+arg_msg rslt = 0 Goto ext End If Next Next End If 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 = '更新明细'+arg_mtrlcode+'中止标记失败,'+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 = '更新订单单据金额失败,'+commit_transaction.SQLErrText rslt = 0 Goto ext End If If Kind <> 0 Then If trycmplsaletask(arg_scid,arg_taskid,arg_msg,False) = 0 Then rslt = 0 Goto ext End If Else If trycmptask_fore(arg_scid,arg_taskid,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If //记录终止操作记录(终止数,终止时间) If ld_stopqty_this <> 0 Then Select max(pid) Into :ll_pid From u_saletask_stoplog Where scid = :arg_scid And taskid = :arg_taskid And printid = :arg_printid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then ll_pid = 0 if isnull(ll_pid) then ll_pid = 0 ll_pid++ Insert Into u_saletask_stoplog (scid, taskid, printid, pid, stopqty, stopemp, stopdate, stopreason) Values (:arg_scid, :arg_taskid, :arg_printid, :ll_pid, :ld_stopqty_this, :publ_operator, getdate(), :arg_stopreason) Using commit_transaction; If commit_transaction.SQLCode <> 0 Then arg_msg = '增加订单明细终止记录失败,'+commit_transaction.SQLErrText rslt = 0 Goto ext End If End If ext: If rslt = 0 Then Rollback Using commit_transaction ; ElseIf rslt = 1 And arg_ifcommit Then Commit Using commit_transaction ; End If Destroy uo_ma Destroy ds_fp_del Destroy ds_fp_del_pack Return rslt end function public function integer add_wrkgrp_mxdscrp (long arg_scid, long arg_taskid, s_saletaskmx_wrkgrp_mxdscrp arg_s_mx, long arg_cnt, ref string arg_msg, boolean arg_ifcommit);//add_wrkgrp_mxdscrp(string arg_newdescppart) //0 fail 1 SUCCESS Int rslt = 1 Long i IF it_updatebegin Or it_newbegin 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 DELETE FROM u_saletaskmx_wrkgrp_mxdscrp WHERE scid = :arg_scid And taskid = :arg_taskid 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 arg_cnt INSERT INTO u_saletaskmx_wrkgrp_mxdscrp (scid, taskid, printid, wrkgrpid, mxdscrp) VALUES (:arg_s_mx.scid[i], :arg_s_mx.taskid[i], :arg_s_mx.printid[i], :arg_s_mx.wrkgrpid[i], :arg_s_mx.mxdscrp[i] ) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致新建销售订单车间备注操作失败"+"~n"+ commit_transaction.SQLErrText GOTO ext END IF NEXT it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF p_reset() Return (rslt) end function public function integer add_relcode (long arg_scid, long arg_taskid, string arg_add_relcode, ref string arg_msg, boolean arg_ifcommit);//add_dscrp(string arg_newdescppart) //0 fail 1 SUCCESS Int rslt = 1 arg_add_relcode = Trim(arg_add_relcode) IF it_updatebegin Or it_newbegin THEN rslt = 0 arG_MSG = "编辑状态下不可用" GOTO ext END IF IF arg_add_relcode = '' 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 //rtrim(relcode)+' '+ UPDATE u_saletask SET relcode = :arg_add_relcode 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 relcode = relcode+' '+arg_add_relcode 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 (long arg_printid, long arg_itemid, decimal arg_amt, string arg_mxdscrp, ref string arg_msg);Int rslt = 1 Long cnt,ll_i cnt = 0 IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_itemid) THEN arg_itemid = 0 IF IsNull(arg_amt) THEN arg_amt = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF arg_itemid = 0 Or arg_amt = 0 THEN rslt = 1 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_itemdef Where itemid = :arg_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_printid)+'行,收支项目不存在,请检查' GOTO ext END IF //合并重复项 FOR ll_i = 1 To it_mxbt_item IF arg_itemid = saletask_itemmx[ll_i].itemid THEN saletask_itemmx[ll_i].amt = saletask_itemmx[ll_i].amt + arg_amt rslt = 1 GOTO ext END IF NEXT it_mxbt_item++ saletask_itemmx[it_mxbt_item].printid = arg_printid saletask_itemmx[it_mxbt_item].itemid = arg_itemid saletask_itemmx[it_mxbt_item].amt = arg_amt saletask_itemmx[it_mxbt_item].mxdscrp = arg_mxdscrp ext: IF rslt = 0 THEN p_clearmx() RETURN rslt end function public function integer add_dscrpmx (long arg_scid, long arg_taskid, long arg_printid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 arg_newdescppart = Trim(arg_newdescppart) 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 <> 4 and status <> 1 THEN rslt = 0 arG_MSG = "非待生产审核状态或在进行状态下不可用" GOTO ext END IF UPDATE u_saletaskmx SET mxDSCRP = mxDSCRP+' '+:arg_newdescppart WHERE u_saletaskmx.taskid = :arg_taskid AND u_saletaskmx.scid = :arg_scid AND u_saletaskmx.printid = :arg_printid And assignqty = 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 = "添加销售订单明细备注,更新操作:0 行,可能明细已有排产数,请检查" 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 finishtask (long arg_scid, long arg_taskid, integer arg_status, ref string arg_msg, boolean arg_ifcommit);//arg_status 5 - 自动完成; 6 - 手动完成 Int rslt = 1 Long cnt = 0 Long ll_assignid,j,i Decimal ld_assignqty uo_mtrlware_assign uo_ma uo_ma = Create uo_mtrlware_assign uo_ma.commit_transaction = commit_transaction datastore ds_fp_del ds_fp_del = Create datastore ds_fp_del.DataObject = 'ds_rp_cust_saletask_fp_mx_fp_del_p' ds_fp_del.SetTransObject(commit_transaction) IF uo_option_if_oa_saletask = -1000 THEN arg_msg = '选项:[043]销售订单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_if_oa_saletask_fore = -1000 THEN arg_msg = '选项:[227]销售预测单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 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 IF uo_option_if_oa_saletask = 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 UPDATE u_SaleTask SET status = :arg_status, 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 FOR i = 1 To it_mxbt ds_fp_del.Retrieve(arg_scid,arg_taskid,saletaskmx[i].printid) FOR j = 1 To ds_fp_del.RowCount() ll_assignid = ds_fp_del.Object.u_mtrlware_assign_assignid[j] ld_assignqty = ds_fp_del.Object.u_mtrlware_assign_assignqty[j] - ds_fp_del.Object.u_mtrlware_assign_outqty[j] IF uo_ma.uof_assign_del(ll_assignid,ld_assignqty,arg_msg,False) = 0 THEN arg_msg = '删除库存分配失败,'+arg_msg rslt = 0 GOTO ext END IF NEXT NEXT ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF Destroy uo_ma Destroy ds_fp_del p_reset() Return (rslt) end function public function integer finishtask_cancel (long arg_scid, long arg_taskid, integer arg_status, ref string arg_msg, boolean arg_ifcommit);//arg_status 5 - 自动完成; 6 - 手动完成 Int rslt = 1 Long cnt = 0 DateTime null_dt SetNull(null_dt) IF uo_option_if_oa_saletask = -1000 THEN arg_msg = '选项:[043]销售订单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_if_oa_saletask_fore = -1000 THEN arg_msg = '选项:[227]销售预测单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF if arg_status = 5 then IF Status <> 5 THEN rslt = 0 arg_msg = "销售订单只有在完成状态才可以执行取消完成,请核对" GOTO ext END IF elseif arg_status = 6 then IF Status <> 6 THEN rslt = 0 arg_msg = "销售订单只有在手动完成状态才可以执行取消手动完成,请核对" GOTO ext END IF end if IF ctmint > 0 THEN rslt = 0 arg_msg = '销售订单已被截数,操作取消' GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_saletaskmx WHERE u_saletaskmx.scid = :arg_scid AND u_saletaskmx.taskid = :arg_taskid AND u_saletaskmx.saleqty > u_saletaskmx.consignedQty Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询订单是否自动完成失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '订单不是手动完成,操作取消' rslt = 0 GOTO ext END IF //IF uo_option_if_oa_saletask = 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 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 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 uof_disuse (long arg_scid, long arg_taskid, integer arg_disusetype, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_disuseid //arg_disusetype 0 - 修改, 1-删除 Select max(disuseid) Into :ll_disuseid From u_SaleTask_disuse Where scid = :arg_scid And taskid = :arg_taskid Using commit_transaction; If commit_transaction.SQLCode = -1 Then rslt = 0 arg_msg = '获取销售订单废弃单序号失败,'+ commit_transaction.SQLErrText Goto ext ElseIf commit_transaction.SQLCode = 100 Then ll_disuseid = 0 End If if isnull(ll_disuseid) then ll_disuseid = 0 ll_disuseid++ Insert Into u_SaleTask_disuse (scid, TaskID, disuseid, disusetype, TaskCode, kind, CusID, taskdate, requiredate, accomplishdate, finishemp, Status, opemp, modemp, moddate, Assign_Emp, Permit_Emp, Permit_date, Dscrp, opdate, stopemp, ctmint, freight, printnum, banktypeid, damt, moneyid, relcode, paytype, dscrp2, freight_tele, cus_address, cus_tele, cus_fax, otheramt, mrate, upname, p_Auditingdate, p_Auditingrep, msttakeamt, takeamt, takedamt, typeid, rel_rep, level, sendTime, sendUser, fiebrelcode, mxrowcount, cuscode, cusname, moneyname, banktypename, typename, disuseemp,disusedate) Select u_SaleTask.scid, u_SaleTask.TaskID, :ll_disuseid, :arg_disusetype,u_SaleTask.TaskCode, u_SaleTask.kind, u_SaleTask.CusID, u_SaleTask.taskdate, u_SaleTask.requiredate, u_SaleTask.accomplishdate, u_SaleTask.finishemp, u_SaleTask.Status, u_SaleTask.opemp, u_SaleTask.modemp, u_SaleTask.moddate, u_SaleTask.Assign_Emp, u_SaleTask.Permit_Emp, u_SaleTask.Permit_date, u_SaleTask.Dscrp, u_SaleTask.opdate, u_SaleTask.stopemp, u_SaleTask.ctmint, u_SaleTask.freight, u_SaleTask.printnum, u_SaleTask.banktypeid, u_SaleTask.damt, u_SaleTask.moneyid, u_SaleTask.relcode, u_SaleTask.paytype, u_SaleTask.dscrp2, u_SaleTask.freight_tele, u_SaleTask.cus_address, u_SaleTask.cus_tele, u_SaleTask.cus_fax, u_SaleTask.otheramt, u_SaleTask.mrate, u_SaleTask.upname, u_SaleTask.p_Auditingdate, u_SaleTask.p_Auditingrep, u_SaleTask.msttakeamt, u_SaleTask.takeamt, u_SaleTask.takedamt, u_SaleTask.typeid, u_SaleTask.rel_rep, u_SaleTask.level, u_SaleTask.sendTime, u_SaleTask.sendUser, u_SaleTask.fiebrelcode, u_SaleTask.mxrowcount, u_cust.cuscode, u_cust.name, cw_currency.name , cw_banktype.banktypename, u_saletype.typename, :publ_operator,getdate() From u_SaleTask LEFT Outer JOIN cw_banktype ON u_SaleTask.banktypeid = cw_banktype.banktypeid LEFT Outer JOIN u_saletype ON u_SaleTask.typeid = u_saletype.typeid LEFT Outer JOIN u_cust ON u_SaleTask.CusID = u_cust.cusid LEFT Outer JOIN cw_currency ON u_SaleTask.moneyid = cw_currency.moneyid Where u_SaleTask.scid = :arg_scid And u_SaleTask.taskid = :arg_taskid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '插入销售订单废弃单失败,'+commit_transaction.SQLErrText Goto ext End If Insert Into u_SaleTaskMx_disuse (scid, TaskID, disuseid, printid, MtrlID, SaleQty, PlPrice, fprice, rebate, Price, consignedQty, AssignQty, mxdscrp, status, pcode, woodcode, mtrlcuscode, mtrlchangecode, enprice, ctmint, outtype, dftsaleprice, bqty, pqty, stopflag, stopemp, stopdate, stopreason, bjflag, bjdate, bjemp, wqty, auditemp, auditflag, auditdate, lqty, finishbqty, dddate, ddemp, ddflag, mqty, requiredate, pfcode, mxdscrp2, scidprice, inwareqty, outtypestr, changedscrp, quoteid, quotecode, quoteprintid, pricetype, capacity, nprice, saleoutqty, stopqty, fpqty, poid, taxrate, perfinishdate, addqty, mtrlcode, mtrlname) Select u_SaleTaskMx.scid, u_SaleTaskMx.TaskID, :ll_disuseid,u_SaleTaskMx.printid, u_SaleTaskMx.MtrlID, u_SaleTaskMx.SaleQty, u_SaleTaskMx.PlPrice, u_SaleTaskMx.fprice, u_SaleTaskMx.rebate, u_SaleTaskMx.Price, u_SaleTaskMx.consignedQty, u_SaleTaskMx.AssignQty, u_SaleTaskMx.mxdscrp, u_SaleTaskMx.status, u_SaleTaskMx.pcode, u_SaleTaskMx.woodcode, u_SaleTaskMx.mtrlcuscode, u_SaleTaskMx.mtrlchangecode, u_SaleTaskMx.enprice, u_SaleTaskMx.ctmint, u_SaleTaskMx.outtype, u_SaleTaskMx.dftsaleprice, u_SaleTaskMx.bqty, u_SaleTaskMx.pqty, u_SaleTaskMx.stopflag, u_SaleTaskMx.stopemp, u_SaleTaskMx.stopdate, u_SaleTaskMx.stopreason, u_SaleTaskMx.bjflag, u_SaleTaskMx.bjdate, u_SaleTaskMx.bjemp, u_SaleTaskMx.wqty, u_SaleTaskMx.auditemp, u_SaleTaskMx.auditflag, u_SaleTaskMx.auditdate, u_SaleTaskMx.lqty, u_SaleTaskMx.finishbqty, u_SaleTaskMx.dddate, u_SaleTaskMx.ddemp, u_SaleTaskMx.ddflag, u_SaleTaskMx.mqty, u_SaleTaskMx.requiredate, u_SaleTaskMx.pfcode, u_SaleTaskMx.mxdscrp2, u_SaleTaskMx.scidprice, u_SaleTaskMx.inwareqty, u_SaleTaskMx.outtypestr, u_SaleTaskMx.changedscrp, u_SaleTaskMx.quoteid, u_SaleTaskMx.quotecode, u_SaleTaskMx.quoteprintid, u_SaleTaskMx.pricetype, u_SaleTaskMx.capacity, u_SaleTaskMx.nprice, u_SaleTaskMx.saleoutqty, u_SaleTaskMx.stopqty, u_SaleTaskMx.fpqty, u_SaleTaskMx.poid, u_SaleTaskMx.taxrate, u_SaleTaskMx.perfinishdate, u_SaleTaskMx.addqty, u_mtrldef.mtrlcode, u_mtrldef.mtrlname From u_SaleTaskMx LEFT Outer JOIN u_mtrldef ON u_SaleTaskMx.MtrlID = u_mtrldef.mtrlid Where u_SaleTaskMx.scid = :arg_scid And u_SaleTaskMx.taskid = :arg_taskid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '插入销售订单废弃单明细失败,'+commit_transaction.SQLErrText Goto ext End If Insert Into u_saletask_itemmx_disuse (scid, taskid, disuseid, printid, itemid, amt, mxdscrp, itemcode, itemname, itemtype) Select u_saletask_itemmx.scid, u_saletask_itemmx.taskid, :ll_disuseid,u_saletask_itemmx.printid, u_saletask_itemmx.itemid, u_saletask_itemmx.amt, u_saletask_itemmx.mxdscrp, u_itemdef.itemcode, u_itemdef.itemname, u_itemdef.itemtype From u_saletask_itemmx LEFT Outer JOIN u_itemdef ON u_saletask_itemmx.itemid = u_itemdef.itemid Where u_saletask_itemmx.scid = :arg_scid And u_saletask_itemmx.taskid = :arg_taskid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '插入销售订单废弃单费用明细失败,'+commit_transaction.SQLErrText Goto ext End If ext: If rslt = 0 Then Rollback Using commit_transaction; ElseIf rslt = 1 And arg_ifcommit Then Commit Using commit_transaction; End If Return rslt end function public function integer uof_updatesaleoutcodestr (long arg_scid, long arg_taskid, long arg_printid, boolean arg_ifcommit, ref string arg_msg);//uof_UpdateSaleOutCodeStr Int rslt = 1 String ls_SaleOutCodeStr //查找单号 Long i, ll_rowcnt datastore ds ds = Create datastore ds.DataObject = "ds_saletask_saleoutcodestr" ds.SetTransObject(sqlca) ll_rowcnt = ds.Retrieve(arg_scid, arg_taskid, arg_printid) FOR i = 1 To ll_rowcnt ls_SaleOutCodeStr = ds.Object.u_saleout_taskcode[i] + "," NEXT IF ls_SaleOutCodeStr <> "" THEN ls_SaleOutCodeStr = Left(ls_SaleOutCodeStr, Len(ls_SaleOutCodeStr) - 1) END IF UPDATE u_saletaskmx SET SaleOutCodeStr = :ls_SaleOutCodeStr WHERE scid = :arg_scid AND taskid = :arg_taskid And printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新销售订单已开未发货单发货通知单号失败,"+sqlca.SQLErrText GOTO ext END IF ext: Destroy ds IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer add_dscrp3 (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 IF status = 1 THEN rslt = 0 arG_MSG = "只有在生产审核前才可以使用" GOTO ext END IF UPDATE u_saletask SET dscrp3 = dscrp3+' '+: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 dscrp3 = dscrp3+' '+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 stopsaletask (long arg_scid, long arg_taskid, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_assignid,j,i Decimal ld_assignqty uo_mtrlware_assign uo_ma uo_ma = Create uo_mtrlware_assign uo_ma.commit_transaction = commit_transaction datastore ds_fp_del ds_fp_del = Create datastore ds_fp_del.DataObject = 'ds_rp_cust_saletask_fp_mx_fp_del_p' ds_fp_del.SetTransObject(commit_transaction) IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN 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_oa_saletask_fore = -1000 THEN arg_msg = '选项:[227]销售预测单使用OA审批流程,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF arg_taskid <= 0 THEN rslt = 0 arg_msg = '错误销售订单唯一码' GOTO ext END IF IF getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF Status <> 1 THEN rslt = 0 arg_msg = "订单只有在进行状态才可以执行终止,请核对" GOTO ext END IF IF Kind <> 0 THEN IF uo_option_if_oa_saletask = 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 ELSE IF uo_option_if_oa_saletask_fore = 1 And audit_buildtype = 0 THEN IF f_check_if_oaflow(arg_scid,arg_taskid,1324,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF UPDATE u_SaleTask SET Status = 3, accomplishdate = getdate() , stopemp = :publ_operator, stopreason = :arg_stopreason Where TaskID = :arg_taskid And scid = :arg_scid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致终止销售订单操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF FOR i = 1 To it_mxbt ds_fp_del.Retrieve(arg_scid,arg_taskid,saletaskmx[i].printid) FOR j = 1 To ds_fp_del.RowCount() ll_assignid = ds_fp_del.Object.u_mtrlware_assign_assignid[j] ld_assignqty = ds_fp_del.Object.u_mtrlware_assign_assignqty[j] - ds_fp_del.Object.u_mtrlware_assign_outqty[j] IF uo_ma.uof_assign_del(ll_assignid,ld_assignqty,arg_msg,False) = 0 THEN arg_msg = '删除库存分配失败,'+arg_msg rslt = 0 GOTO ext END IF NEXT 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 Destroy uo_ma Destroy ds_fp_del p_reset() Return (rslt) end function public function integer updatebqty (long arg_scid, long arg_taskid, long arg_printid, long arg_pid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Dec ld_SaleQty,ld_finishbQty,ld_bqty 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 IF arg_pid = 0 THEN SELECT bqty, finishbqty INTO :ld_bqty, :ld_finishbQty 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 IF ld_bqty - ld_finishbQty < arg_qty THEN arg_msg = '申购数量大于待申购数!' rslt = 0 GOTO ext END IF UPDATE u_SaleTaskMx SET finishbqty = finishbqty + :arg_qty WHERE scid = :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 ELSE SELECT bqty, finishbqty INTO :ld_bqty, :ld_finishbQty FROM u_saletaskmx_pack WHERE scid = :arg_scid AND taskid = :arg_taskid AND printid = :arg_printid AND pid = :arg_pid 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_pack SET finishbqty = finishbqty + :arg_qty WHERE scid = :scid AND taskid = :arg_taskid AND printid = :arg_printid AND pid = :arg_pid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新订单申购数失败>>'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF 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 uof_cmp_pack (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, decimal arg_qty, ref string arg_msg);Int rslt = 1 Long cnt Long ll_SonMtrlid[] String ls_status,ls_woodcode,ls_pcode,ls_mtrlcuscode Decimal ld_Sonscale[],ld_Sonscale_fm[] Int li_ifover[],li_dipztype[],li_ifpack[] String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[] int li_if_inherit[] int li_if_inherit_tmp Long it_mxt = 1 Decimal ld_qty Long ll_i Long ll_statusflag,ll_woodcodeflag,ll_pcodeflag Int li_ifpackpro String ls_mtrlcode String ls_pf_mtrlcode[] s_mtrlcfg_expr s_mtrlcfg[] Long ll_cfg,ll_cnt_s_mtrlcfg Long ll_scid,ll_taskid,ll_printid Int li_ordertype_order Decimal ld_bqty SELECT ifpackpro,statusflag,woodcodeflag,pcodeflag,mtrlcode,if_inherit INTO :li_ifpackpro,:ll_statusflag,:ll_woodcodeflag,:ll_pcodeflag,:ls_mtrlcode,:li_if_inherit_tmp FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料是否包件产品失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_ifpackpro = 1 Or li_ifpackpro = 2 THEN //查询个性包件产品订单明细是否有换包件 IF li_ifpackpro = 2 And arg_mtrlcuscode <> '' THEN SELECT ordertype INTO :li_ordertype_order From u_order_ml Where ordercode = :arg_mtrlcuscode Using commit_transaction; IF sqlca.SQLCode <> 0 THEN cnt = 0 ELSE IF li_ordertype_order = 4 THEN SELECT u_order_ml_p.scid,u_order_ml_p.taskid,u_order_ml_p.taskmxid INTO :ll_scid,:ll_taskid,:ll_printid FROM u_order_ml,u_order_ml u_order_ml_p WHERE u_order_ml.ordercode = :arg_mtrlcuscode AND u_order_ml.scid = u_order_ml_p.scid AND u_order_ml.porderid = u_order_ml_p.orderid Using commit_transaction; IF sqlca.SQLCode <> 0 THEN ll_taskid = 0 END IF ELSE SELECT scid,taskid,taskmxid INTO :ll_scid,:ll_taskid,:ll_printid FROM u_order_ml Where ordercode = :arg_mtrlcuscode Using commit_transaction; IF sqlca.SQLCode <> 0 THEN ll_taskid = 0 END IF END IF IF ll_taskid = 0 THEN cnt = 0 ELSE //查是否有换清单 SELECT count(*) INTO :cnt FROM u_saletaskmx_pf WHERE scid = :ll_scid AND taskid = :ll_taskid And printid = :ll_printid Using commit_transaction; IF sqlca.SQLCode <> 0 THEN cnt = 0 END IF END IF END IF END IF IF cnt > 0 THEN DECLARE cur_pf_saletaskmx CURSOR FOR SELECT u_saletaskmx_pf.SonMtrlid, u_saletaskmx_pf.Sonscale, u_saletaskmx_pf.Sonscale_fm, u_saletaskmx_pf.status, u_saletaskmx_pf.woodcode, u_saletaskmx_pf.pcode, 0, 0, u_mtrldef.ifpack, u_mtrldef.mtrlcode, u_mtrldef.if_inherit FROM u_saletaskmx_pf,u_mtrldef WHERE ( u_saletaskmx_pf.scid = :ll_scid ) AND ( u_saletaskmx_pf.taskid = :ll_taskid ) AND ( u_saletaskmx_pf.printid = :ll_printid ) AND ( u_saletaskmx_pf.SonMtrlid = u_mtrldef.mtrlid ) Using commit_transaction; OPEN cur_pf_saletaskmx; FETCH cur_pf_saletaskmx INTO :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ld_Sonscale_fm[it_mxt],:ls_pf_status[it_mxt], :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],:li_dipztype[it_mxt], :li_ifpack[it_mxt],:ls_pf_mtrlcode[it_mxt],:li_if_inherit[it_mxt]; DO WHILE sqlca.SQLCode = 0 it_mxt++ FETCH cur_pf_saletaskmx INTO :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ld_Sonscale_fm[it_mxt],:ls_pf_status[it_mxt], :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],:li_dipztype[it_mxt], :li_ifpack[it_mxt],:ls_pf_mtrlcode[it_mxt],:li_if_inherit[it_mxt]; LOOP it_mxt = it_mxt - 1 CLOSE cur_pf_saletaskmx; ELSE DECLARE cur_pf CURSOR FOR SELECT u_PrdPF.SonMtrlid, u_PrdPF.Sonscale, 1, u_PrdPF.status, u_PrdPF.woodcode, u_PrdPF.pcode, u_PrdPF.ifover, u_prdpf.dipztype, u_mtrldef.ifpack, u_mtrldef.mtrlcode, u_mtrldef.if_inherit FROM u_PrdPF,u_mtrl_pf,u_mtrldef WHERE (u_PrdPF.mtrlid = :arg_mtrlid) AND ( u_mtrl_pf.ifdi = 1 AND :li_ifpackpro = 0 OR u_mtrl_pf.ifdft = 1 AND (:li_ifpackpro = 1 OR :li_ifpackpro = 2) AND u_mtrldef.ifpack > 0) AND ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid ) AND ( u_PrdPF.pfcode = u_mtrl_pf.pfcode ) AND ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid ) ORDER BY u_PrdPF.printid Using commit_transaction; OPEN cur_pf; FETCH cur_pf INTO :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ld_Sonscale_fm[it_mxt],:ls_pf_status[it_mxt], :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],:li_dipztype[it_mxt], :li_ifpack[it_mxt],:ls_pf_mtrlcode[it_mxt],:li_if_inherit[it_mxt]; DO WHILE sqlca.SQLCode = 0 it_mxt++ FETCH cur_pf INTO :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ld_Sonscale_fm[it_mxt],:ls_pf_status[it_mxt], :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],:li_dipztype[it_mxt], :li_ifpack[it_mxt],:ls_pf_mtrlcode[it_mxt],:li_if_inherit[it_mxt]; LOOP it_mxt = it_mxt - 1 CLOSE cur_pf; END IF IF it_mxt = 0 THEN IF li_ifpackpro = 0 THEN arg_msg = '该产品没有建立组装清单,不能计算' ELSE arg_msg = '该产品没有建立默认清单,不能计算' END IF rslt = 0 GOTO ext END IF ELSE it_mxt = 0 IF arg_status = '' THEN rslt = 1 GOTO ext ELSE f_checkpz(arg_status,s_mtrlcfg) ll_cnt_s_mtrlcfg = UpperBound(s_mtrlcfg) IF ll_cnt_s_mtrlcfg = 0 THEN rslt = 1 GOTO ext ELSE FOR ll_cfg = 1 To ll_cnt_s_mtrlcfg it_mxt++ ll_SonMtrlid[it_mxt] = arg_mtrlid ls_pf_status[it_mxt] = s_mtrlcfg[ll_cfg].cfgname ls_pf_woodcode[it_mxt] = arg_woodcode ls_pf_pcode[it_mxt] = arg_pcode ls_pf_mtrlcode[it_mxt] = ls_mtrlcode ld_Sonscale[it_mxt] = Dec(s_mtrlcfg[ll_cfg].qty) ld_Sonscale_fm[it_mxt] = 1 li_ifover[it_mxt] = 0 li_ifpack[it_mxt] = 0 li_if_inherit[it_mxt] = li_if_inherit_tmp NEXT END IF END IF END IF FOR ll_i = 1 To it_mxt IF li_ifover[ll_i] = 1 THEN CHOOSE CASE li_dipztype[ll_i] CASE 0 ls_status = arg_status ls_woodcode = '' ls_pcode = '' CASE 1 ls_status = '' ls_woodcode = arg_woodcode ls_pcode = '' CASE 2 ls_status = '' ls_woodcode = '' ls_pcode = arg_pcode CASE 3 ls_status = arg_status ls_woodcode = arg_woodcode ls_pcode = '' CASE 4 ls_status = '' ls_woodcode = arg_woodcode ls_pcode = arg_pcode CASE 5 ls_status = arg_status ls_woodcode = '' ls_pcode = arg_pcode CASE 6 ls_status = arg_status ls_woodcode = arg_woodcode ls_pcode = arg_pcode END CHOOSE ELSE ls_status = ls_pf_status[ll_i] ls_woodcode = ls_pf_woodcode[ll_i] ls_pcode = ls_pf_pcode[ll_i] END IF // IF li_ifpackpro = 2 Or li_ifpackpro = 4 THEN if li_if_inherit[ll_i] = 1 then ls_mtrlcuscode = arg_mtrlcuscode ELSE ls_mtrlcuscode = '' END IF ld_bqty = arg_qty * ld_Sonscale[ll_i]/ld_Sonscale_fm[ll_i] INSERT INTO u_saletaskmx_pack (scid, taskid, printid, pid, mtrlid, bqty, status, woodcode, pcode, mtrlcuscode) VALUES (:arg_scid, :arg_taskid, :arg_printid, :ll_i, :ll_SonMtrlid[ll_i], :ld_bqty, :ls_status, :ls_woodcode, :ls_pcode, :ls_mtrlcuscode) Using commit_transaction; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入包件待申购列表失败,'+commit_transaction.SQLErrText GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; END IF RETURN rslt end function public function integer uof_mod_requiredate (long arg_scid[], long arg_taskid[], long arg_printid[], datetime arg_olddate[], datetime arg_newdate[], ref string arg_msg, boolean arg_ifcommit);Int rslt rslt = 1 Long cnt Long ll_pid,ll_i,ll_j DateTime server_dt Long ll_scid_arr[],ll_taskid_arr[] Long ll_itmx DateTime ld_requestdate_max 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 FOR ll_i = 1 To UpperBound(arg_taskid) IF Date(arg_olddate[ll_i]) = Date(arg_newdate[ll_i]) THEN CONTINUE cnt = 0 SELECT count(*) INTO :cnt FROM u_saletaskmx_moddate_log WHERE scid = :arg_scid[ll_i] AND taskid = :arg_taskid[ll_i] And printid = :arg_printid[ll_i] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询日期修改历史失败'+'~n'+commit_transaction.SQLErrText GOTO ext END IF ll_pid = 0 IF cnt = 0 THEN ll_pid = 0 ELSE SELECT max(pid) INTO :ll_pid FROM u_saletaskmx_moddate_log WHERE scid = :arg_scid[ll_i] AND taskid = :arg_taskid[ll_i] And printid = :arg_printid[ll_i] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询预计完成日期修改日志失败'+'~n'+commit_transaction.SQLErrText GOTO ext END IF END IF ll_pid++ INSERT INTO u_saletaskmx_moddate_log (scid, taskid, printid, pid, olddate, newdate, opdate, opemp) VALUES (:arg_scid[ll_i], :arg_taskid[ll_i], :arg_printid[ll_i], :ll_pid, :arg_olddate[ll_i], :arg_newdate[ll_i], :server_dt, :publ_operator) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细交货日期修改日志操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF UPDATE u_SaleTaskMx SET requiredate = :arg_newdate[ll_i] WHERE taskid = :arg_taskid[ll_i] AND scid = :arg_scid[ll_i] And printid = :arg_printid[ll_i] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新明细交货日期失败,'+commit_transaction.SQLErrText GOTO ext END IF NEXT FOR ll_i = 1 To UpperBound(arg_taskid) FOR ll_j = 1 To ll_itmx IF arg_taskid[ll_i] = ll_taskid_arr[ll_j] And arg_scid[ll_i] = ll_scid_arr[ll_j] THEN GOTO _next_task END IF NEXT ll_itmx++ ll_scid_arr[ll_itmx] = arg_scid[ll_i] ll_taskid_arr[ll_itmx] = arg_taskid[ll_i] _next_task: NEXT FOR ll_i = 1 To ll_itmx SELECT max(requiredate) INTO :ld_requestdate_max FROM u_SaleTaskMx WHERE taskid = :ll_taskid_arr[ll_i] And scid = :ll_scid_arr[ll_i] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询明细最迟交货日期失败,scid = '+String(ll_scid_arr[ll_i]) + ',taskid = '+String(ll_taskid_arr[ll_i])+'~r~n'+commit_transaction.SQLErrText GOTO ext END IF UPDATE u_SaleTask SET requiredate = :ld_requestdate_max WHERE taskid = :ll_taskid_arr[ll_i] And scid = :ll_scid_arr[ll_i] Using commit_transaction; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新主表交货日期失败,scid = '+String(ll_scid_arr[ll_i]) + ',taskid = '+String(ll_taskid_arr[ll_i])+'~r~n'+commit_transaction.SQLErrText GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF Return(rslt) end function public function integer acceptmxmx (s_saletaskmxmx arg_s_mx, ref string arg_msg);Int rslt = 1 Long cnt = 0,ls_i,ll_i Decimal ld_dftsaleprice Decimal ld_planprice uo_cusprice uo_price uo_price = Create uo_cusprice 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 uo_option_m_msttake = -1000 THEN arg_msg = '选项:[045]系统使用多币种应收帐,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_checkprice_native = -1000 THEN arg_msg = '选项:[056]销售价格按本位币限价,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_if_pricetype = -1000 THEN arg_msg = '选项:[154]启用价格分类,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_price_rmb = -1000 THEN arg_msg = '选项:[238]销售单价按人民币单价折算,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF //清除空值 IF IsNull(arg_s_mx.mtrlid) THEN arg_s_mx.mtrlid = 0 IF IsNull(arg_s_mx.saleqty) THEN arg_s_mx.saleqty = 0 IF IsNull(arg_s_mx.enprice) THEN arg_s_mx.enprice = 0 IF IsNull(arg_s_mx.rebate) THEN arg_s_mx.rebate = 0 IF IsNull(arg_s_mx.mxdscrp) THEN arg_s_mx.mxdscrp = '' IF IsNull(arg_s_mx.mtrlcode) THEN arg_s_mx.mtrlcode = '' IF IsNull(arg_s_mx.status) THEN arg_s_mx.status = '' IF IsNull(arg_s_mx.woodcode) THEN arg_s_mx.woodcode = '' IF IsNull(arg_s_mx.pcode) THEN arg_s_mx.pcode = '' IF IsNull(arg_s_mx.printid) THEN arg_s_mx.printid = 0 IF IsNull(arg_s_mx.outtype) THEN arg_s_mx.outtype = 0 IF IsNull(arg_s_mx.mtrlcuscode) THEN arg_s_mx.mtrlcuscode = '' IF IsNull(arg_s_mx.mxdscrp2) THEN arg_s_mx.mxdscrp2 = '' IF IsNull(arg_s_mx.nprice) THEN arg_s_mx.nprice = 0 IF IsNull(arg_s_mx.poid) THEN arg_s_mx.poid = 0 IF IsNull(arg_s_mx.taxrate) THEN arg_s_mx.taxrate = 0 IF IsNull(arg_s_mx.addqty) THEN arg_s_mx.addqty = 0 IF IsNull(arg_s_mx.priceformula) THEN arg_s_mx.priceformula = '' IF IsNull(arg_s_mx.net_weight) THEN arg_s_mx.net_weight = 0 IF IsNull(arg_s_mx.gross_weight) THEN arg_s_mx.gross_weight = 0 IF IsNull(arg_s_mx.cubage) THEN arg_s_mx.cubage = 0 arg_s_mx.status = Trim(arg_s_mx.status) arg_s_mx.woodcode = Trim(arg_s_mx.woodcode) arg_s_mx.pcode = Trim(arg_s_mx.pcode) arg_s_mx.mtrlcuscode = Trim(arg_s_mx.mtrlcuscode) IF arg_s_mx.mtrlid = 0 Or arg_s_mx.saleqty = 0 THEN rslt = 1 GOTO ext END IF IF Kind > 0 THEN IF uo_option_sale_ifuse_negativeprice = 0 THEN IF arg_s_mx.enprice * arg_s_mx.rebate < 0 THEN rslt = 0 arg_msg = "产品:" + String(arg_s_mx.mtrlcode)+" 单价错误" GOTO ext END IF END IF IF arg_s_mx.rebate < 0 THEN arg_msg = '折扣错误,请检查' rslt = 0 GOTO ext END IF IF arg_s_mx.taxrate < 0 THEN arg_msg = '不合理的税率' rslt = 0 GOTO ext END IF END IF String ls_pfcode ls_pfcode = '[' + arg_s_mx.status + ']' & + '[' + arg_s_mx.woodcode + ']' & + '[' + arg_s_mx.pcode + ']' IF Len(ls_pfcode) > 255 THEN ls_pfcode = Mid(ls_pfcode, 1, 251) + '...]' END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_mtrl_pf Where pfcode = :ls_pfcode; IF sqlca.SQLCode <> 0 THEN cnt = 0 IF cnt = 0 THEN ls_pfcode = f_get_dft_pf(arg_s_mx.mtrlid) END IF //检查物料id Int li_statusflag,li_woodcodeflag,li_pcodeflag Int li_isuse Decimal ld_capacity,ld_capacity_zj s_mtrlcfg_expr s_pz[] String ls_status_zj Int li_status_check,li_woodcode_check,li_pcode_check SELECT planprice, statusflag, capacity, woodcodeflag, pcodeflag, status_check, woodcode_check, pcode_check, capacity * capaparm, isuse INTO :ld_planprice, :li_statusflag, :ld_capacity, :li_woodcodeflag, :li_pcodeflag, :li_status_check, :li_woodcode_check, :li_pcode_check, :ld_capacity, :li_isuse FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_s_mx.mtrlid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,产品计划价" GOTO ext END IF IF Kind = 0 And li_isuse = 2 THEN arg_msg = '行:'+String(arg_s_mx.printid)+',物料是待停产物料,不能建立销售预测单' rslt = 0 GOTO ext END IF IF li_statusflag = 2 THEN IF arg_s_mx.status = '' THEN arg_msg = '行:'+String(arg_s_mx.printid)+',物料'+uo_option_change_status + '字段使用组合配置,请输入' rslt = 0 GOTO ext END IF ld_capacity = 0 f_checkpz(arg_s_mx.status,s_pz[]) FOR ll_i = 1 To UpperBound(s_pz) ls_status_zj = s_pz[ll_i].cfgname SELECT capacity * capaparm INTO :ld_capacity_zj FROM u_mtrl_configure WHERE mtrlid = :arg_s_mx.mtrlid And Name = :ls_status_zj; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '行:'+String(arg_s_mx.printid)+",物料查询子件 "+ls_status_zj+" 折算套数参数操作失败" GOTO ext END IF ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_i].qty) NEXT ELSEIF li_statusflag = 4 And li_status_check = 1 THEN IF arg_s_mx.status = '' THEN arg_msg = '行:'+String(arg_s_mx.printid)+',物料'+uo_option_change_woodcode + '字段使用部件选配,请输入' rslt = 0 GOTO ext END IF ELSEIF li_statusflag = 1 Or li_statusflag = 0 THEN IF f_check_status(1,arg_s_mx.status) = 0 THEN rslt = 0 arg_msg = '行:'+String(arg_s_mx.printid)+",物料查询操作失败,可能"+uo_option_change_status+"未定义,物料:"+arg_s_mx.mtrlcode+",内容:"+arg_s_mx.status GOTO ext END IF END IF IF li_woodcodeflag = 4 And li_woodcode_check = 1 THEN IF arg_s_mx.woodcode = '' THEN arg_msg = '行:'+String(arg_s_mx.printid)+',物料'+uo_option_change_woodcode + '字段使用部件选配,请输入' rslt = 0 GOTO ext END IF ELSEIF li_woodcodeflag = 1 Or li_woodcodeflag = 0 THEN IF f_check_status(2,arg_s_mx.woodcode) = 0 THEN rslt = 0 arg_msg = '行:'+String(arg_s_mx.printid)+",物料查询操作失败,可能"+uo_option_change_woodcode+"未定义,物料:"+arg_s_mx.mtrlcode+",内容:"+arg_s_mx.woodcode GOTO ext END IF END IF IF li_pcodeflag = 4 And li_pcode_check = 1 THEN IF arg_s_mx.pcode = '' THEN arg_msg = '行:'+String(arg_s_mx.printid)+',物料'+uo_option_change_pcode + '字段使用部件选配,请输入' rslt = 0 GOTO ext END IF ELSEIF li_pcodeflag = 1 Or li_pcodeflag = 0 THEN IF f_check_status(3,arg_s_mx.pcode) = 0 THEN rslt = 0 arg_msg = '行:'+String(arg_s_mx.printid)+",物料查询操作失败,可能"+uo_option_change_pcode+"未定义,物料:"+arg_s_mx.mtrlcode+",内容:"+arg_s_mx.pcode GOTO ext END IF END IF IF Kind > 0 THEN ld_dftsaleprice = 0 f_get_defsaleprice(cusid,arg_s_mx.mtrlid,arg_s_mx.status,arg_s_mx.pcode,arg_s_mx.woodcode,moneyid,ld_dftsaleprice) END IF IF Kind = 1 THEN Int li_ifcheckprice,ll_pricelimittype // IF uo_option_if_pricetype = 1 And arg_s_mx.pricetype <> '' THEN SELECT pricelimittype INTO :ll_pricelimittype FROM u_saletype Where typeid = :typeid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询销售订单分类属性失败,'+commit_transaction.SQLErrText GOTO ext END IF IF arg_s_mx.pricetype <> '' THEN SELECT ifcheckprice INTO :li_ifcheckprice FROM u_pricetype Where pricetype = :arg_s_mx.pricetype Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询价格分类是否属于赠送类型失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ELSE li_ifcheckprice = 1 END IF IF li_ifcheckprice = 2 THEN arg_s_mx.rebate = 0 IF li_ifcheckprice = 1 And ll_pricelimittype = 1 THEN IF uo_option_checkprice_native = 1 THEN IF uo_price.uof_check_price_saletask (typeid,cusid,arg_s_mx.mtrlid,& arg_s_mx.mtrlcode,arg_s_mx.status,arg_s_mx.woodcode,arg_s_mx.pcode,& moneyid,scid,arg_s_mx.quoteid,arg_s_mx.quoteprintid,arg_s_mx.enprice * mrate * arg_s_mx.rebate,arg_s_mx.saleqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ELSE IF uo_price.uof_check_price_saletask (typeid,cusid,arg_s_mx.mtrlid,& arg_s_mx.mtrlcode,arg_s_mx.status,arg_s_mx.woodcode,arg_s_mx.pcode,& moneyid,scid,arg_s_mx.quoteid,arg_s_mx.quoteprintid,arg_s_mx.enprice * arg_s_mx.rebate,arg_s_mx.saleqty,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF // END IF END IF //写入内容 it_mxbtmx++ saletaskmxmx[it_mxbtmx].dftsaleprice = ld_dftsaleprice saletaskmxmx[it_mxbtmx].mtrlid = arg_s_mx.mtrlid saletaskmxmx[it_mxbtmx].saleqty = arg_s_mx.saleqty saletaskmxmx[it_mxbtmx].plprice = ld_planprice saletaskmxmx[it_mxbtmx].mxdscrp = arg_s_mx.mxdscrp saletaskmxmx[it_mxbtmx].mxdscrp2 = arg_s_mx.mxdscrp2 saletaskmxmx[it_mxbtmx].mtrlcode = arg_s_mx.mtrlcode saletaskmxmx[it_mxbtmx].status = arg_s_mx.status saletaskmxmx[it_mxbtmx].printid = arg_s_mx.printid saletaskmxmx[it_mxbtmx].woodcode = arg_s_mx.woodcode saletaskmxmx[it_mxbtmx].pcode = arg_s_mx.pcode saletaskmxmx[it_mxbtmx].quotecode = arg_s_mx.quotecode saletaskmxmx[it_mxbtmx].quoteid = arg_s_mx.quoteid saletaskmxmx[it_mxbtmx].quoteprintid = arg_s_mx.quoteprintid saletaskmxmx[it_mxbtmx].mtrlcuscode = arg_s_mx.mtrlcuscode saletaskmxmx[it_mxbtmx].enprice = arg_s_mx.enprice saletaskmxmx[it_mxbtmx].rebate = arg_s_mx.rebate IF uo_option_price_rmb = 0 THEN saletaskmxmx[it_mxbtmx].fprice = arg_s_mx.enprice * mrate IF mrate = 0 THEN saletaskmxmx[it_mxbtmx].enacprice = saletaskmxmx[it_mxbtmx].fprice * arg_s_mx.rebate ELSE saletaskmxmx[it_mxbtmx].enacprice = saletaskmxmx[it_mxbtmx].fprice * arg_s_mx.rebate / mrate END IF saletaskmxmx[it_mxbtmx].price = saletaskmxmx[it_mxbtmx].fprice * arg_s_mx.rebate ELSE saletaskmxmx[it_mxbtmx].fprice = Round(arg_s_mx.enprice * mrate,2) IF mrate = 0 THEN saletaskmxmx[it_mxbtmx].enacprice = Round(saletaskmxmx[it_mxbtmx].fprice * arg_s_mx.rebate,2) ELSE saletaskmxmx[it_mxbtmx].enacprice = Round(saletaskmxmx[it_mxbtmx].fprice * arg_s_mx.rebate / mrate,2) END IF saletaskmxmx[it_mxbtmx].price = Round(saletaskmxmx[it_mxbtmx].fprice * arg_s_mx.rebate,2) END IF saletaskmxmx[it_mxbtmx].scidprice = arg_s_mx.scidprice saletaskmxmx[it_mxbtmx].outtypestr = arg_s_mx.outtypestr saletaskmxmx[it_mxbtmx].requiredate = arg_s_mx.requiredate saletaskmxmx[it_mxbtmx].pfcode = ls_pfcode saletaskmxmx[it_mxbtmx].pricetype = arg_s_mx.pricetype saletaskmxmx[it_mxbtmx].capacity = ld_capacity * arg_s_mx.saleqty saletaskmxmx[it_mxbtmx].nprice = arg_s_mx.nprice saletaskmxmx[it_mxbtmx].poid = arg_s_mx.poid //使用到的价格指令ID saletaskmxmx[it_mxbtmx].taxrate = arg_s_mx.taxrate saletaskmxmx[it_mxbtmx].addqty = arg_s_mx.addqty saletaskmxmx[it_mxbtmx].priceformula = arg_s_mx.priceformula IF uo_option_m_msttake = 1 THEN //使用多币种 msttakeamt = msttakeamt + Round(arg_s_mx.enprice * arg_s_mx.saleqty * arg_s_mx.rebate,2) ELSE // 系统不使用多币种,转换为人民币 msttakeamt = msttakeamt + Round(arg_s_mx.enprice * mrate * arg_s_mx.saleqty * arg_s_mx.rebate,2) END IF saletaskmxmx[it_mxbtmx].net_weight = arg_s_mx.net_weight saletaskmxmx[it_mxbtmx].gross_weight = arg_s_mx.gross_weight saletaskmxmx[it_mxbtmx].cubage = arg_s_mx.cubage //汇总到saletaskmx FOR ll_i = 1 To it_mxbt IF saletaskmx[ll_i].mtrlid = arg_s_mx.mtrlid And & saletaskmx[ll_i].status = arg_s_mx.status And & saletaskmx[ll_i].woodcode = arg_s_mx.woodcode And & saletaskmx[ll_i].pcode = arg_s_mx.pcode And & saletaskmx[ll_i].mtrlcuscode = arg_s_mx.mtrlcuscode And & saletaskmx[ll_i].enprice = arg_s_mx.enprice THEN saletaskmx[ll_i].saleqty = saletaskmx[ll_i].saleqty + arg_s_mx.saleqty saletaskmx[ll_i].capacity = saletaskmx[ll_i].capacity + ld_capacity * arg_s_mx.saleqty saletaskmx[ll_i].addqty = saletaskmx[ll_i].addqty + arg_s_mx.addqty IF arg_s_mx.requiredate < saletaskmx[ll_i].requiredate THEN saletaskmx[ll_i].requiredate = arg_s_mx.requiredate END IF saletaskmx[ll_i].dscrp = '' saletaskmx[ll_i].dscrp2 = '' GOTO ext END IF NEXT it_mxbt++ saletaskmx[it_mxbt].dftsaleprice = ld_dftsaleprice saletaskmx[it_mxbt].mtrlid = arg_s_mx.mtrlid saletaskmx[it_mxbt].saleqty = arg_s_mx.saleqty saletaskmx[it_mxbt].plprice = ld_planprice saletaskmx[it_mxbt].dscrp = arg_s_mx.mxdscrp saletaskmx[it_mxbt].dscrp2 = arg_s_mx.mxdscrp2 saletaskmx[it_mxbt].mtrlcode = arg_s_mx.mtrlcode saletaskmx[it_mxbt].status = arg_s_mx.status saletaskmx[it_mxbt].printid = it_mxbt saletaskmx[it_mxbt].woodcode = arg_s_mx.woodcode saletaskmx[it_mxbt].pcode = arg_s_mx.pcode saletaskmx[it_mxbt].mtrlcuscode = arg_s_mx.mtrlcuscode saletaskmx[it_mxbt].enprice = arg_s_mx.enprice saletaskmx[it_mxbt].rebate = arg_s_mx.rebate IF uo_option_price_rmb = 0 THEN saletaskmx[it_mxbt].fprice = arg_s_mx.enprice * mrate IF mrate = 0 THEN saletaskmx[it_mxbt].enacprice = saletaskmx[it_mxbt].fprice * arg_s_mx.rebate ELSE saletaskmx[it_mxbt].enacprice = saletaskmx[it_mxbt].fprice * arg_s_mx.rebate / mrate END IF saletaskmx[it_mxbt].acprice = saletaskmx[it_mxbt].fprice * arg_s_mx.rebate ELSE saletaskmx[it_mxbt].fprice = Round(arg_s_mx.enprice * mrate,2) IF mrate = 0 THEN saletaskmx[it_mxbt].enacprice = Round(saletaskmx[it_mxbt].fprice * arg_s_mx.rebate,2) ELSE saletaskmx[it_mxbt].enacprice = Round(saletaskmx[it_mxbt].fprice * arg_s_mx.rebate / mrate,2) END IF saletaskmx[it_mxbt].acprice = Round(saletaskmx[it_mxbt].fprice * arg_s_mx.rebate,2) END IF saletaskmx[it_mxbt].scidprice = arg_s_mx.scidprice saletaskmx[it_mxbt].outtype = arg_s_mx.outtypestr saletaskmx[it_mxbt].requiredate = arg_s_mx.requiredate saletaskmx[it_mxbt].pfcode = ls_pfcode saletaskmx[it_mxbt].quoteid = arg_s_mx.quoteid saletaskmx[it_mxbt].quotecode = arg_s_mx.quotecode saletaskmx[it_mxbt].quoteprintid = arg_s_mx.quoteprintid saletaskmx[it_mxbt].pricetype = arg_s_mx.pricetype saletaskmx[it_mxbt].capacity = ld_capacity * arg_s_mx.saleqty saletaskmx[it_mxbt].nprice = arg_s_mx.nprice saletaskmx[it_mxbt].poid = arg_s_mx.poid //使用到的价格指令ID saletaskmx[it_mxbt].dscrp_text = '' saletaskmx[it_mxbt].taxrate = arg_s_mx.taxrate saletaskmx[it_mxbt].addqty = arg_s_mx.addqty saletaskmx[it_mxbt].priceformula = arg_s_mx.priceformula saletaskmx[it_mxbt].sampleid = 0 saletaskmx[it_mxbt].net_weight = arg_s_mx.net_weight saletaskmx[it_mxbt].gross_weight = arg_s_mx.gross_weight saletaskmx[it_mxbt].cubage = arg_s_mx.cubage saletaskmx[it_mxbt].fjcnt = arg_s_mx.fjcnt saletaskmx[it_mxbt].fjstr = arg_s_mx.fjstr ext: IF rslt = 0 THEN p_clearmx() Destroy uo_price RETURN rslt end function private function integer uof_p_check_date (ref string arg_msg);Int rslt = 1 Long ll_i String ls_mtrlcode String ls_msg_pow DateTime serverdt IF Not f_power_ind(3990,ls_msg_pow) or sys_power_issuper THEN rslt = 1 GOTO ext END IF SELECT Top 1 getdate() Into :serverdt From u_user Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期,"+sqlca.SQLErrText GOTO ext END IF FOR ll_i = 1 To it_mxbt ls_mtrlcode = saletaskmx[ll_i].mtrlcode IF RelativeDate ( Date(serverdt), saletaskmx[ll_i].u_mtrldef_expday ) > Date(saletaskmx[ll_i].requiredate ) THEN arg_msg = '物料:'+ls_mtrlcode+',审核日期('+string(serverdt,'yyyy-mm-dd')+')+生产周期('+string(saletaskmx[ll_i].u_mtrldef_expday,'##0')+'天) > 订单明细交期('+string(saletaskmx[ll_i].requiredate,'yyyy-mm-dd')+'),请检查' rslt = 0 GOTO ext END IF NEXT ext: RETURN rslt end function public function integer acceptmx (long arg_mtrlid, decimal arg_qty, decimal arg_enprice, 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, long arg_quoteid, string arg_quotecode, long arg_quoteprintid, string arg_pricetype, decimal arg_nprice, long arg_poid, string arg_dscrp_text, decimal arg_taxrate, decimal arg_addqty, string arg_priceformula, long arg_sampleid, decimal arg_net_weight, decimal arg_gross_weight, decimal arg_cubage, long arg_fjcnt, string arg_fjstr, ref string arg_msg);Int rslt = 1 Long cnt = 0,ls_i,ll_i Decimal ld_dftsaleprice Decimal ld_planprice Decimal ld_stoppqty,ld_stopsaleqty decimal lde_list_price, lde_porebate uo_cusprice uo_price uo_price = Create uo_cusprice 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 uo_option_m_msttake = -1000 Then arg_msg = '选项:[045]系统使用多币种应收帐,读取初始默认值失败,操作取消!' rslt = 0 Goto ext End If If uo_option_checkprice_native = -1000 Then arg_msg = '选项:[056]销售价格按本位币限价,读取初始默认值失败,操作取消!' rslt = 0 Goto ext End If If uo_option_if_pricetype = -1000 Then arg_msg = '选项:[154]启用价格分类,读取初始默认值失败,操作取消!' rslt = 0 Goto ext End If If uo_option_price_rmb = -1000 Then arg_msg = '选项:[238]销售单价按人民币单价折算,读取初始默认值失败,操作取消!' 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_enprice) Then arg_enprice = 0 If IsNull(arg_rebate) Then arg_rebate = 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 = '' If IsNull(arg_mtrlcuscode) Then arg_mtrlcuscode = '' If IsNull(arg_dscrp2) Then arg_dscrp2 = '' If IsNull(arg_quoteid) Then arg_quoteid = 0 If IsNull(arg_quotecode) Then arg_quotecode = '' If IsNull(arg_quoteprintid) Then arg_quoteprintid = 0 If IsNull(arg_nprice) Then arg_nprice = 0 If IsNull(arg_poid) Then arg_poid = 0 If IsNull(arg_dscrp_text) Then arg_dscrp_text = '' If IsNull(arg_taxrate) Then arg_taxrate = 0 If IsNull(arg_addqty) Then arg_addqty = 0 If IsNull(arg_priceformula) Then arg_priceformula = '' If IsNull(arg_sampleid) Then arg_sampleid = 0 If IsNull(arg_net_weight) Then arg_net_weight = 0 If IsNull(arg_gross_weight) Then arg_gross_weight = 0 If IsNull(arg_cubage) Then arg_cubage = 0 arg_status = Trim(arg_status) arg_woodcode = Trim(arg_woodcode) arg_pcode = Trim(arg_pcode) arg_mtrlcuscode = Trim(arg_mtrlcuscode) If arg_mtrlid = 0 Or arg_qty = 0 Then rslt = 1 Goto ext End If If Kind > 0 Then If uo_option_sale_ifuse_negativeprice = 0 Then If arg_enprice * arg_rebate < 0 Then rslt = 0 arg_msg = "产品:" + String(arg_mtrlcode)+" 单价错误" Goto ext End If End If If arg_rebate < 0 Then arg_msg = '折扣错误,请检查' rslt = 0 Goto ext End If If arg_taxrate < 0 Then arg_msg = '不合理的税率' rslt = 0 Goto ext End If End If //检查物料id Int li_statusflag,li_woodcodeflag,li_pcodeflag Int li_isuse,li_ifpackpro Decimal ld_capacity,ld_capacity_zj s_mtrlcfg_expr s_pz[] String ls_status_zj Int li_status_check,li_woodcode_check,li_pcode_check Select planprice, statusflag, capacity, woodcodeflag, pcodeflag, status_check, woodcode_check, pcode_check, capacity * capaparm, isuse, ifpackpro Into :ld_planprice, :li_statusflag, :ld_capacity, :li_woodcodeflag, :li_pcodeflag, :li_status_check, :li_woodcode_check, :li_pcode_check, :ld_capacity, :li_isuse, :li_ifpackpro From u_mtrldef Where u_mtrldef.mtrlid = :arg_mtrlid Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "查询操作失败,产品计划价" Goto ext End If If Kind = 0 And li_isuse = 2 Then arg_msg = '行:'+String(arg_printid)+',物料是待停产物料,不能建立销售预测单' rslt = 0 Goto ext End If String ls_pfcode If li_ifpackpro = 5 And taskid > 0 Then ls_pfcode = Trim(taskcode)+'.'+String(arg_printid) Else ls_pfcode = '[' + arg_status + ']' & + '[' + arg_woodcode + ']' & + '[' + arg_pcode + ']' If Len(ls_pfcode) > 255 Then ls_pfcode = Mid(ls_pfcode, 1, 251) + '...]' End If cnt = 0 Select count(*) Into :cnt From u_mtrl_pf Where pfcode = :ls_pfcode mtrlid = :arg_mtrlid; If sqlca.SQLCode <> 0 Then cnt = 0 If cnt = 0 Then ls_pfcode = f_get_dft_pf(arg_mtrlid) End If End If If li_statusflag = 2 Then If arg_status = '' Then arg_msg = '行:'+String(arg_printid)+',物料'+uo_option_change_status + '字段使用组合配置,请输入' rslt = 0 Goto ext End If 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 * capaparm Into :ld_capacity_zj From u_mtrl_configure Where mtrlid = :arg_mtrlid And Name = :ls_status_zj Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '行:'+String(arg_printid)+",物料查询子件 "+ls_status_zj+" 折算套数参数操作失败" Goto ext End If ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_i].qty) Next ElseIf li_statusflag = 4 And li_status_check = 1 Then If arg_status = '' Then arg_msg = '行:'+String(arg_printid)+',物料'+uo_option_change_status + '字段使用部件选配,请输入' rslt = 0 Goto ext End If ElseIf li_statusflag = 1 Or li_statusflag = 0 Then If f_check_status(1,arg_status) = 0 Then rslt = 0 arg_msg = '行:'+String(arg_printid)+",物料查询操作失败,可能"+uo_option_change_status+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_status Goto ext End If End If If li_woodcodeflag = 4 And li_woodcode_check = 1 Then If arg_woodcode = '' Then arg_msg = '行:'+String(arg_printid)+',物料'+uo_option_change_woodcode + '字段使用部件选配,请输入' rslt = 0 Goto ext End If ElseIf li_woodcodeflag = 1 Or li_woodcodeflag = 0 Then If f_check_status(2,arg_woodcode) = 0 Then rslt = 0 arg_msg = '行:'+String(arg_printid)+",物料查询操作失败,可能"+uo_option_change_woodcode+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_woodcode Goto ext End If End If If li_pcodeflag = 4 And li_pcode_check = 1 Then If arg_pcode = '' Then arg_msg = '行:'+String(arg_printid)+',物料'+uo_option_change_pcode + '字段使用部件选配,请输入' rslt = 0 Goto ext End If ElseIf li_pcodeflag = 1 Or li_pcodeflag = 0 Then If f_check_status(3,arg_pcode) = 0 Then rslt = 0 arg_msg = '行:'+String(arg_printid)+",物料查询操作失败,可能"+uo_option_change_pcode+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_pcode Goto ext End If End If If Kind > 0 And Kind <> 4 Then ld_dftsaleprice = 0 f_get_defsaleprice(cusid,arg_mtrlid,arg_status,arg_pcode,arg_woodcode,moneyid,ld_dftsaleprice) End If If Kind = 1 Then Int li_ifcheckprice,ll_pricelimittype // IF uo_option_if_pricetype = 1 And arg_pricetype <> '' THEN Select pricelimittype Into :ll_pricelimittype From u_saletype Where typeid = :typeid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '查询销售订单分类属性失败,'+commit_transaction.SQLErrText Goto ext End If If arg_pricetype <> '' Then Select ifcheckprice Into :li_ifcheckprice From u_pricetype Where pricetype = :arg_pricetype Using commit_transaction; If commit_transaction.SQLCode <> 0 Then arg_msg = '查询价格分类是否属于赠送类型失败,'+commit_transaction.SQLErrText rslt = 0 Goto ext End If Else li_ifcheckprice = 1 End If If li_ifcheckprice = 2 Then arg_rebate = 0 If li_ifcheckprice = 1 And ll_pricelimittype = 1 Then If uo_option_checkprice_native = 1 Then If uo_price.uof_check_price_saletask (typeid,cusid,arg_mtrlid,& arg_mtrlcode,arg_status,arg_woodcode,arg_pcode,& moneyid,scid,arg_quoteid,arg_quoteprintid,arg_enprice * mrate * arg_rebate,arg_qty,arg_msg) = 0 Then rslt = 0 Goto ext End If Else If uo_price.uof_check_price_saletask (typeid,cusid,arg_mtrlid,& arg_mtrlcode,arg_status,arg_woodcode,arg_pcode,& moneyid,scid,arg_quoteid,arg_quoteprintid,arg_enprice * arg_rebate,arg_qty,arg_msg) = 0 Then rslt = 0 Goto ext End If End If End If // END IF // Select stoppqty,stopsaleqty,isuse // Into :ld_stoppqty,:ld_stopsaleqty,:li_isuse // From u_mtrldef // Where mtrlid = :arg_mtrlid Using commit_transaction; // If commit_transaction.SQLCode <> 0 Then // arg_msg = '查询:'+arg_mtrlcode+'资料属性失败,'+commit_transaction.SQLErrText // rslt = 0 // Goto ext // End If // // If li_isuse = 2 Then // If arg_qty > ld_stoppqty - ld_stopsaleqty Then // arg_msg = '产品:'+arg_mtrlcode+' 已待停产,待停产后可订数量为:'+String(ld_stoppqty,'#,##0.##########')+',待停产后已订数量为:'+String(ld_stopsaleqty,'#,##0.##########')+',不能再订:'+String(arg_qty,'#,##0.##########') // rslt = 0 // Goto ext // End If // End If End If //使用价格策略的 if arg_poid > 0 then //记录目标折扣 SELECT top 1 u_sale_price_mx.price INTO :lde_list_price FROM u_sale_price_list INNER JOIN u_sale_price_mx ON u_sale_price_list.pricelistid = u_sale_price_mx.pricelistid WHERE (u_sale_price_list.dftflag = 1) AND (u_sale_price_mx.flag = 1) And (u_sale_price_mx.mtrlid = :arg_mtrlid) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN lde_list_price = 0 END IF if lde_list_price > 0 then lde_porebate = round(arg_enprice / lde_list_price, 5) else lde_porebate = 0 end if 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].outtype = arg_outtype THEN // // saletaskmx[ls_i].saleqty = saletaskmx[ls_i].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 = 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].enprice = arg_enprice saletaskmx[it_mxbt].rebate = arg_rebate If uo_option_price_rmb = 0 Then saletaskmx[it_mxbt].fprice = arg_enprice * mrate If mrate = 0 Then saletaskmx[it_mxbt].enacprice = saletaskmx[it_mxbt].fprice * arg_rebate Else saletaskmx[it_mxbt].enacprice = saletaskmx[it_mxbt].fprice * arg_rebate / mrate End If saletaskmx[it_mxbt].acprice = saletaskmx[it_mxbt].fprice * arg_rebate Else saletaskmx[it_mxbt].fprice = Round(arg_enprice * mrate,2) If mrate = 0 Then saletaskmx[it_mxbt].enacprice = Round(saletaskmx[it_mxbt].fprice * arg_rebate,2) Else saletaskmx[it_mxbt].enacprice = Round(saletaskmx[it_mxbt].fprice * arg_rebate / mrate,2) End If saletaskmx[it_mxbt].acprice = Round(saletaskmx[it_mxbt].fprice * arg_rebate,2) End If saletaskmx[it_mxbt].scidprice = arg_scidprice saletaskmx[it_mxbt].outtype = arg_outtype saletaskmx[it_mxbt].requiredate = arg_requiredate saletaskmx[it_mxbt].pfcode = ls_pfcode saletaskmx[it_mxbt].quoteid = arg_quoteid saletaskmx[it_mxbt].quotecode = arg_quotecode saletaskmx[it_mxbt].quoteprintid = arg_quoteprintid saletaskmx[it_mxbt].pricetype = arg_pricetype saletaskmx[it_mxbt].capacity = ld_capacity * arg_qty saletaskmx[it_mxbt].nprice = arg_nprice saletaskmx[it_mxbt].poid = arg_poid //使用到的价格指令ID saletaskmx[it_mxbt].dscrp_text = arg_dscrp_text saletaskmx[it_mxbt].taxrate = arg_taxrate saletaskmx[it_mxbt].addqty = arg_addqty saletaskmx[it_mxbt].priceformula = arg_priceformula saletaskmx[it_mxbt].sampleid = arg_sampleid If uo_option_m_msttake = 1 Then //使用多币种 msttakeamt = msttakeamt + Round(arg_enprice * arg_qty * arg_rebate,2) Else // 系统不使用多币种,转换为人民币 msttakeamt = msttakeamt + Round(arg_enprice * mrate * arg_qty * arg_rebate,2) End If saletaskmx[it_mxbt].net_weight = arg_net_weight saletaskmx[it_mxbt].gross_weight = arg_gross_weight saletaskmx[it_mxbt].cubage = arg_cubage saletaskmx[it_mxbt].fjcnt = arg_fjcnt saletaskmx[it_mxbt].fjstr = arg_fjstr saletaskmx[it_mxbt].porebate = lde_porebate ext: If rslt = 0 Then p_clearmx() Destroy uo_price Return rslt end function private function integer uof_p_check_packprobom (ref string arg_msg);Int rslt = 1 Long ll_i String ls_mtrlcode,ls_msg Long ll_mtrlid Long cnt Int li_ifpackpro IF uo_option_saletask_packprobom_check = -1000 THEN arg_msg = '选项:[399]销售订单审核检查包件产品选项,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_saletask_packprobom_check = 0 THEN rslt = 1 GOTO ext END IF FOR ll_i = 1 To it_mxbt ll_mtrlid = saletaskmx[ll_i].mtrlid ls_mtrlcode = saletaskmx[ll_i].mtrlcode SELECT ifpackpro INTO :li_ifpackpro FROM u_mtrldef Where mtrlid = :ll_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '物料:'+ls_mtrlcode+'查询信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_ifpackpro = 1 Or li_ifpackpro = 2 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_Mtrl_pf WHERE u_Mtrl_pf.mtrlid = :ll_mtrlid AND u_Mtrl_pf.flag = 0 And u_Mtrl_pf.ifdft = 1; IF sqlca.SQLCode <> 0 THEN ls_msg += '查询产品:'+ls_mtrlcode + ',默认清单是否审核失败,'+sqlca.SQLErrText+' ~r~n ' CONTINUE END IF IF cnt > 0 THEN ls_msg += '产品:'+ls_mtrlcode + ',默认清单未审核,请检查'+' ~r~n ' CONTINUE END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_PrdPF,u_Mtrl_pf,u_mtrldef WHERE u_Mtrl_pf.mtrlid = :ll_mtrlid AND u_PrdPF.pfcode = u_Mtrl_pf.pfcode AND u_PrdPF.mtrlid = u_Mtrl_pf.mtrlid AND u_PrdPF.sonmtrlid = u_mtrldef.mtrlid AND u_Mtrl_pf.ifdft = 1 And u_mtrldef.ifpack > 0; IF sqlca.SQLCode <> 0 THEN ls_msg += '查询产品:'+ls_mtrlcode + ',默认清单是否含有包件失败,'+sqlca.SQLErrText+' ~r~n ' CONTINUE END IF IF cnt = 0 THEN ls_msg += '产品:'+ls_mtrlcode + ',默认清单未含有包件,请检查'+' ~r~n ' CONTINUE END IF END IF NEXT IF ls_msg <> '' THEN arg_msg = ls_msg rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer uof_add_reminddscrp (long arg_scid, long arg_taskid, string arg_reminddscrp, ref string arg_msg, boolean arg_ifcommit);//add_dscrp(string arg_newdescppart) //0 fail 1 SUCCESS Int rslt = 1 arg_reminddscrp = Trim(arg_reminddscrp) IF it_updatebegin Or it_newbegin THEN rslt = 0 arG_MSG = "编辑状态下不可用" GOTO ext END IF IF arg_reminddscrp = '' 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 reminddscrp = reminddscrp + :arg_reminddscrp 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 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 (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Decimal ld_notsecaudit_amt,ld_notsecaudit_enamt,ld_notsecaudit_billamt Decimal arg_cusbalcamt,arg_cusmaxamt,arg_outrep_balcamt,arg_outrep_maxamt Int lst Decimal ld_maxamt_user If uo_option_saletask_affirm_produce = -1000 Then arg_msg = '选项:[413]销售订单财务确认后排产,读取初始默认值失败,操作取消!' rslt = 0 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 uo_option_saletask_affirm_produce > 0 And Status <> 1 Then rslt = 0 arg_msg = '选项:[413]销售订单财务确认后排产 开启后,单据只能在进行后才能财务确认' Goto ext End If If uo_option_saletask_affirm_produce = 2 Then //检查信用额 Select sum(round(u_outwaremx.qty * u_outwaremx.price,2)), sum(round(u_outwaremx.qty * u_outwaremx.enprice * u_outwaremx.rebate,2)) Into :ld_notsecaudit_amt,:ld_notsecaudit_enamt From u_outware,u_outwaremx Where u_outware.scid = u_outwaremx.scid And u_outware.outwareid = u_outwaremx.outwareid And u_outware.billtype = 1 And u_outware.secflag = 0 And u_outware.cusid = :cusid And (:sys_option_scid_msttake_mstpay = 1 And u_outware.scid = :scid Or :sys_option_scid_msttake_mstpay = 0 ) And (:sys_option_m_msttake = 1 And u_outware.relint_2 = :moneyid Or :sys_option_m_msttake = 0); If sqlca.SQLCode <> 0 Then ld_notsecaudit_amt = 0 ld_notsecaudit_enamt = 0 End If If IsNull(ld_notsecaudit_amt) Then ld_notsecaudit_amt = 0 If IsNull(ld_notsecaudit_enamt) Then ld_notsecaudit_enamt = 0 If sys_option_m_msttake = 1 Then ld_notsecaudit_billamt = ld_notsecaudit_enamt Else ld_notsecaudit_billamt = ld_notsecaudit_amt End If Select maxamt Into :ld_maxamt_user From u_user Where empid = :sys_empid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询当前操作员信用额失败,'+sqlca.SQLErrText Goto ext End If lst = f_getcusrepamt_info(cusid,scid,moneyid,arg_cusbalcamt,arg_cusmaxamt,arg_outrep_balcamt,arg_outrep_maxamt) If lst <= 0 Then rslt = 0 arg_msg = '查询信用额及欠款失败' Goto ext Else If arg_cusbalcamt + ld_notsecaudit_billamt + msttakeamt > arg_cusmaxamt + ld_maxamt_user Then rslt = 0 arg_msg = '客户信用额 + 操作员信用额 - 客户欠款 - 未财务审金额 - 本单金额:'+String(arg_cusmaxamt,'#0.0#')+' + '+String(ld_maxamt_user,'#0.0#') + ' - '+String(arg_cusbalcamt,'#0.0#')+ ' - '+String(ld_notsecaudit_billamt,'#0.0#') + ' - '+String(msttakeamt,'#0.0#') + ' = ' + String(arg_cusmaxamt + ld_maxamt_user - arg_cusbalcamt - ld_notsecaudit_billamt - msttakeamt,'#0.0#') + ',客户欠款超信用额,不能财务确认' Goto ext End If End If End If Update u_saletask Set pricerep = :publ_operator, pricedate = getdate(), priceflag = 1 Where taskid = :arg_taskid And priceflag = 0 And scid = :arg_scid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+commit_transaction.SQLErrText Goto ext ElseIf commit_transaction.SQLNRows = 0 Then rslt = 0 arg_msg = "单据正在确认,请稍后查询。"+"~n"+commit_transaction.SQLErrText Goto ext End If priceflag = 1 ext: If rslt = 0 Then Rollback Using commit_transaction; ElseIf rslt = 1 And arg_ifcommit Then Commit Using commit_transaction; End If Return rslt end function public function integer c_priceaudit (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 datetime null_dt setnull(null_dt) If p_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 pricerep = '', pricedate = :null_dt, priceflag = 0 Where taskid = :arg_taskid And priceflag = 1 And scid = :arg_scid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+commit_transaction.SQLErrText Goto ext ElseIf commit_transaction.SQLNRows = 0 Then rslt = 0 arg_msg = "单据正在确认,请稍后查询。"+"~n"+commit_transaction.SQLErrText Goto ext End If priceflag = 0 ext: If rslt = 0 Then Rollback Using commit_transaction; ElseIf rslt = 1 And arg_ifcommit Then Commit Using commit_transaction; End If Return rslt end function public function integer uof_add_mx (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1 Long i String ls_mtrlcuscode Long ll_printid IF uo_option_taskplancode_auto = -1000 THEN arg_msg = '选项:[048]销售订单生产批号类型,读取初始默认值失败,操作取消!' rslt = 0 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 max(printid) INTO :ll_printid FROM u_saletaskmx WHERE scid = :arg_scid And taskid = :arg_taskid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询单据明细信息失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF IsNull(ll_printid) THEN ll_printid = 0 FOR i = 1 To it_mxbt ls_mtrlcuscode = '' IF Kind = 4 THEN ls_mtrlcuscode = saletaskmx[i].mtrlcuscode ELSE CHOOSE CASE uo_option_taskplancode_auto CASE 1 ls_mtrlcuscode = saletaskmx[i].mtrlcuscode CASE 2 ls_mtrlcuscode = taskcode CASE 3 ls_mtrlcuscode = relcode CASE 4 ls_mtrlcuscode = taskcode + '.' + String(i,'000') CASE 5 ls_mtrlcuscode = '' CASE ELSE arg_msg = '错误的生产批号,管理员请先设定好订单批号模式' rslt = 0 GOTO ext END CHOOSE END IF ll_printid++ INSERT INTO u_saletaskmx ( scid, taskid, mtrlid, saleqty, price, plprice, mxdscrp, mxdscrp2, fprice, rebate, status, printid, woodcode, pcode, mtrlcuscode, enprice, outtypestr, dftsaleprice, requiredate, pfcode, scidprice, quoteid, quotecode, quoteprintid, pricetype, capacity, nprice, poid, taxrate, addqty, priceformula, sampleid, enacprice, net_weight, gross_weight, cubage, fjcnt, fjstr, porebate) VALUES (:arg_scid, :arg_taskid, :saletaskmx[i].mtrlid, :saletaskmx[i].saleqty, :saletaskmx[i].acprice, :saletaskmx[i].plprice, :saletaskmx[i].dscrp, :saletaskmx[i].dscrp2, :saletaskmx[i].fprice, :saletaskmx[i].rebate, :saletaskmx[i].status, :ll_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].quoteid, :saletaskmx[i].quotecode, :saletaskmx[i].quoteprintid, :saletaskmx[i].pricetype, :saletaskmx[i].capacity, :saletaskmx[i].nprice, :saletaskmx[i].poid, :saletaskmx[i].taxrate, :saletaskmx[i].addqty, :saletaskmx[i].priceformula, :saletaskmx[i].sampleid, :saletaskmx[i].enacprice, :saletaskmx[i].net_weight, :saletaskmx[i].gross_weight, :saletaskmx[i].cubage, :saletaskmx[i].fjcnt, :saletaskmx[i].fjstr, :saletaskmx[i].porebate) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; p_clearmx() msttakeamt = 0 ELSEIF arg_ifcommit And rslt = 1 THEN 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 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('045',str_optionvalue,arg_msg) uo_option_m_msttake = Long(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('088',str_optionvalue,arg_msg) uo_option_saletask_fore_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('227',str_optionvalue,arg_msg) uo_option_if_oa_saletask_fore = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('048',str_optionvalue,arg_msg) uo_option_taskplancode_auto = 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('051',str_optionvalue,arg_msg) uo_option_taskaudit_dprice = 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('044',str_optionvalue,arg_msg) uo_option_if_msg = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('201',str_optionvalue,arg_msg) uo_option_saletask_set_planprice = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('056',str_optionvalue,arg_msg) uo_option_checkprice_native = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('142',str_optionvalue,arg_msg) uo_option_inout_type = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('154',str_optionvalue,arg_msg) uo_option_if_pricetype = Long(str_optionvalue) f_get_sys_option_value('200',str_optionvalue,arg_msg) uo_option_if_saleout = Long(str_optionvalue) f_get_sys_option_value('200',str_optionvalue,arg_msg) uo_option_if_saleout = Long(str_optionvalue) f_get_sys_option_value('291',str_optionvalue,arg_msg) uo_option_disuse_saletask = Long(str_optionvalue) f_get_sys_option_value('300',str_optionvalue,arg_msg) uo_option_sale_ifuse_negativeprice = Long(str_optionvalue) f_get_sys_option_value('301',str_optionvalue,arg_msg) uo_option_saletask_ifuse_typebillcode = Long(str_optionvalue) f_get_sys_option_value('238',str_optionvalue,arg_msg) uo_option_price_rmb = Long(str_optionvalue) f_get_sys_option_value('335',str_optionvalue,arg_msg) uo_option_dd_allto_pqty = Long(str_optionvalue) f_get_sys_option_value('364',str_optionvalue,arg_msg) uo_option_saletask_rebate_check = Long(str_optionvalue) f_get_sys_option_value('399',str_optionvalue,arg_msg) uo_option_saletask_packprobom_check = Long(str_optionvalue) f_get_sys_option_value('402',str_optionvalue,arg_msg) uo_option_saletask_fore_addware = Long(str_optionvalue) f_get_sys_option_value('404',str_optionvalue,arg_msg) uo_option_saletask_stopqty_type = Long(str_optionvalue) f_get_sys_option_value('413',str_optionvalue,arg_msg) uo_option_saletask_affirm_produce = Long(str_optionvalue) end event