$PBExportHeader$uo_order_ml.sru forward global type uo_order_ml from nonvisualobject end type type s_order_ml from structure within uo_order_ml end type end forward type s_order_ml from structure string relcode datetime orderdate long taskid string taskcode long mtrlid string status_mode string woodcode string pcode decimal { 10 } orderqty datetime requiredate string dscrp string gydscrp string assign_emp integer ordertype string taskrelcode long cusid string pfcode long taskmxid string mtrlcode integer iffp long porderid string pordercode long utid long wrkgrpid string pfklmode long pforderid string pfordercode decimal { 10 } pfqty string secdscrp string thdscrp long taskscid datetime perfinishdate long storageid decimal { 5 } capacity long tmpid integer level string typename string p_taskrelcode string cusname integer p_ordertype long p_cusid string outtypestr integer inwareflag integer outscllflag long pzlorderid string saletaskcode string saletaskrelcode long upmtrlid integer iffg integer ifwforder integer ifauto long p_taskid long p_taskmxid long p_mtrlid integer fpkind long fgid integer if_inherit decimal { 10 } addqty string wpcode integer pctype decimal { 10 } notmrpqty integer ifpban integer ifupban end type global type uo_order_ml from nonvisualobject end type global uo_order_ml uo_order_ml type variables Public ProtectedWrite Long scid Public ProtectedWrite Long orderid Public ProtectedWrite String ordercode Public ProtectedWrite Int okplan_flag Public ProtectedWrite Int scllflag Public ProtectedWrite Int scllsecflag Public ProtectedWrite Int status Public ProtectedWrite DateTime accomplishdate Public ProtectedWrite String Accomplishemp Public ProtectedWrite String permit_emp Public ProtectedWrite DateTime permit_date Public ProtectedWrite String opemp Public ProtectedWrite DateTime opdate Public ProtectedWrite String modemp Public ProtectedWrite DateTime moddate Public ProtectedWrite String stopemp Public ProtectedWrite Long ctmint Public ProtectedWrite Int ifpackpro_mtrl String billcode Int ordertype String relcode DateTime orderdate Long mtrlid String status_mode String woodcode String pcode Decimal orderqty Decimal AcmpQty Decimal stopqty DateTime requiredate String dscrp String Assign_emp String taskrelcode String pfcode,wpcode Long taskid Long taskmxid String taskcode Long cusid Long porderid String pordercode Long relrqbuyid String relrqbuycode Decimal planqty Long wrkGrpid String gydscrp String pfklmode Long relrqwfjgid String relrqwfjgcode DateTime perfinishdate int pctype Decimal addqty Long pforderid String pfordercode Decimal pfqty String secdscrp String thdscrp Long taskscid Int stopjj String stopjjemp DateTime stopjjdate String stopjjreason Long storageid Decimal capacity String cusname,p_taskrelcode String outtypestr Int ifwforder Int inwareflag,outscllflag Long pzlorderid String pzlordercode_tmp //用于生成派生指令单号 Int iffg Int ifauto Long fgid Int ifauto_optype = 1 //对象调用模式, 0:手动, 1:自动 Int if_inherit int ifpban,ifupban Long orderid_arr[],orderqty_arr[] String arg_msg_str = '' Long audit_buildtype Int Level String typename Boolean if_getid_ture = True s_aps_orderrqmtrl ins_s_rqmtrl,ins_s_empty Long it_mx_rq s_workpricetable ins_s_wp[] Long it_mx_bomwp Long deep Private: Long it_mxbt = 0 s_order_ml s_order_mx[] Long it_mxbt_ut = 0 s_order_ml s_order_ut[] Long it_mxbt_wrk = 0 s_ordermtrl_workgroup_tmp s_wrk_tmp[] Int uo_option_if_oa_order_ml Int uo_option_order_ml_secaudit Int uo_option_if_oa_order_zl Int uo_option_order_ml_zl_secaudit Int uo_option_order_bh_use_yc Int uo_option_def_bom Int uo_option_order_mtrlware Int uo_option_inware_mtrlcuscode Int uo_option_order_ml_save_reccl Int uo_option_order_ml_add_use_wkp Int uo_option_ifovertask_cp Int uo_option_if_taskwork_acmpqty Int uo_option_ml_wkp Int uo_option_auto_wrkdate Int uo_option_use_sc_date Int uo_option_unite_order_ml Int uo_option_unite_order_ml_zl Int uo_option_order_ml_scll_secaudit Int uo_option_autocreate_buy Int uo_option_autocreate_wfjg Int uo_option_def_workprice Int uo_option_orderrqwp_union Int uo_option_requestbuy_hz Int uo_option_requestwfjg_hz Int uo_option_zlmtrlchange_wx_update_rqwfjg Int uo_option_scll_rate Int uo_option_skl_overscll Int uo_option_skl_overscll_rate Int uo_option_use_suliao Int uo_option_management_cost Int uo_option_ect_price Int uo_option_order_ml_use_zl Int uo_option_use_workgroup_tree = 0 //使用工艺路线 Int uo_option_scllaudit_autobuild = 0 //主生产计划用料审核自动生成相关指令单及派工单 Int uo_option_def_mtrlwkp = 0 //生产计划审核前检查工组流程是否定义 Int uo_option_scllaudit_autobuild_tech = 0 Int uo_option_auto_finish_zl Int uo_option_update_lockdateflag Int uo_option_packpro2_not_use_pack1 Int uo_option_order_capacity Int uo_option_order_ml_zl_checkdate Int uo_option_order_zl_3_day Long ins_produce_wrkgrpid_bj Int uo_option_ifpackpro2_if_no_pack2 int uo_option_scll_back_check int uo_option_autostop_porder int uo_option_bujian_notmrpqty int uo_option_orderrqwp_auditgj int uo_option_order_zl_auto_getbar int uo_option_canpack_ifzanyong end variables forward prototypes private function integer p_reset () public function integer f_distribute_dstrqty (long arg_atid, ref string arg_msg) public function integer add_dscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg) public function integer del (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer updatebegin (long arg_scid, long arg_orderid, ref string arg_msg) public function integer audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer tmpstoporder (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer finishorder (integer arg_finishtype, long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer tryfinishorder (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer cancel_finishorder (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer save (ref string arg_msg, boolean arg_ifcommit) public function integer update (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer addmxcmpl (long arg_scid, long arg_orderid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) private function integer p_getinfo (long arg_scid, long arg_orderid, ref string arg_msg) private function integer p_clearmx () public function integer newbegin (long arg_scid) public function integer update_bom (long arg_scid, long arg_orderid, string arg_pfcode, ref string arg_msg) public function integer uof_finish_procode_qty (long arg_scid, long arg_orderid, string arg_procode, integer arg_type, ref string arg_msg, boolean arg_ifcommit) public function integer addmxcmpl_planqty (long arg_scid, long arg_orderid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) private subroutine p_replace_mx () public function integer getinfo (long arg_scid, long arg_orderid, ref string arg_msg) public function integer f_assign_inqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, integer arg_plantype, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_pz_change (integer arg_type, string arg_updatestr, long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_msg) public function integer audit_scll (long arg_scid, long arg_orderid, integer arg_scllflag, ref string arg_msg, boolean arg_ifcommit) public function integer caudit_scll (long arg_scid, long arg_orderid, integer arg_scllflag, ref string arg_msg, boolean arg_ifcommit) public function integer uof_check_if_zl (long arg_scid, long arg_orderid, ref string arg_msg) public function integer uof_get_scllflag (long arg_scid, long arg_orderid, ref integer arg_scllflag, ref string arg_msg) public function integer uof_check_if_rbuy (long arg_scid, long arg_orderid, ref string arg_msg) public function integer uof_check_if_wfjg (long arg_scid, long arg_orderid, ref string arg_msg) public function integer f_add_conpfqty (long arg_scid, long arg_orderid, decimal arg_pfqty, ref string arg_msg, boolean arg_ifcommit) public function integer f_add_rqbuyqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_plantype, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit) public function integer f_assign_rqmtrlqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, integer arg_plantype, ref string arg_msg, boolean arg_ifcommit) public function integer add_secdscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg) public function integer add_thdscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg) public function integer uof_tryfinish_packorder (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer mod_perfinishdate (long arg_scid, long arg_orderid, datetime arg_oridate, datetime arg_newdate, string arg_reason, ref string arg_msg, boolean arg_ifcommit) public function integer f_add_dstrqty_ws (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_noallocqty, decimal arg_allocqty, ref string arg_msg, boolean arg_ifcommit) public function integer f_add_dstrqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, decimal arg_costamt, ref string arg_msg, boolean arg_ifcommit, long arg_relint_1, ref decimal arg_overqty) public function integer uof_stopjj (long arg_scid, long arg_orderid, string arg_reason, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_fpqty (long arg_scid, long arg_orderid, long arg_fpscid, long arg_fporderid, decimal arg_fpqty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_del_fpqty (long arg_scid, long arg_orderid, long arg_fpscid, long arg_fporderid, ref string arg_msg, boolean arg_ifcommit) public function integer uf_add_taskqty (long arg_scid, long arg_orderid, long arg_mtrlid, string arg_procode, decimal arg_taskqty, ref string arg_msg, boolean arg_ifcommit) public function integer addmxskl (long arg_scid, long arg_orderid, decimal arg_qty, decimal arg_costamt, ref string arg_msg, boolean arg_ifcommit) public function integer uof_order_cmpcost (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_reccl (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_order_add_wkp_tree (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer addmxcmpl_planqty_wkp (long arg_scid, long arg_orderid, string arg_wkpname, long arg_wrkgrpid, long arg_owrkgrpid, decimal arg_addqty, datetime arg_bdate, datetime arg_edate, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx_wrk (long arg_tmpid, long arg_wrkgrpid, long arg_owrkgrpid, string arg_wkpname, datetime arg_begindate, datetime arg_requiredate, decimal arg_lastdays, decimal arg_lasthour, ref string arg_msg) public function integer uof_order_add_wkp_tmp (long arg_scid, long arg_orderid, long arg_tmpid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_auto_order_plan (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer add_newdscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg) public function integer sec_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer c_sec_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_procode_qty (long arg_scid, long arg_orderid, string arg_procode, datetime arg_billdate, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_workgroup_qty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, datetime arg_finishdate, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit) public function integer uo_cmp_datediff_wrk (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_ordermtrl_tree_acmpqty (long arg_scid, long arg_orderid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_ordermtrl_tree_sqty (long arg_scid, long arg_orderid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer uo_cmp_tree_date (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer uo_cmp_wrk_edate (datetime arg_sdate, long arg_wrkgrpid, decimal arg_lasthour, ref datetime arg_edate, ref decimal arg_resthour_e, ref string arg_msg) public function integer uof_create_order_plan_tech (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_delete_order_plan_tech (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_order_cmp_wrk_date (long arg_scid, long arg_orderid, datetime arg_sdate, ref string arg_msg, boolean arg_ifcommit) public function integer mod_order_requiredate (long arg_scid, long arg_orderid, datetime arg_oridate, datetime arg_newdate, datetime arg_oriredate, datetime arg_newredate, string arg_reason, boolean arg_ifcmpdate, ref string arg_msg, boolean arg_ifcommit) public function integer uof_update_outtypestr_zl (long arg_scid[], long arg_orderid[], ref string arg_msg, boolean arg_ifcommit) public function integer uof_tryfinish_packorder2 (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer c_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer uf_add_ftaskqty (long arg_scid, long arg_orderid, long arg_mtrlid, string arg_procode, datetime arg_billdate, decimal arg_ftaskqty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_okplan (long arg_scid, long arg_orderid, integer arg_okplanflag, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer uof_reset_tree_barcode (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_order_add_wkp_tree_doing (long arg_scid, long arg_orderid, long arg_this_printid, long arg_next_printid, s_ordermtrl_workgroup_tree arg_s_tree[], integer arg_kind, ref string arg_msg, boolean arg_ifcommit) public function integer uof_update_minbdate (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_update_orderrqmtrl_zlqty (long arg_scid, long arg_orderid, long arg_mtrlid, long arg_wrkgrpid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_zlqty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_workgroup_barcode_pt (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_update_mrpcode (long arg_scid, long arg_orderid, string arg_mrpcode, ref string arg_msg, boolean arg_ifcommit) public function integer stoporder_cancel (long arg_scid, long arg_orderid, integer arg_ifchange, ref string arg_msg, boolean arg_ifcommit) public function integer plan_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer c_plan_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer p_update_orderdate (long arg_scid, long arg_orderid, datetime arg_orderdate, datetime arg_requiredate, string arg_dscrp, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg) public function integer uf_createorder_pt (long arg_scid, long arg_orderid, integer arg_pttype, integer arg_bomflag, boolean arg_ifcommit, ref string arg_msg) public function integer stoporder (long arg_scid, long arg_orderid, integer arg_ifchange, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit) public function integer f_add_flqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_bom_workprice (long arg_mtrlid, string arg_pfcode, decimal arg_qty, ref string arg_msg) public function integer uof_protype_workprice (long arg_mtrlid, string arg_pfcode, string arg_wpcode, decimal arg_qty, ref string arg_msg) public function integer add_gydscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg) public function integer uof_stop_tree (long arg_scid, long arg_orderid, decimal arg_stopqty, integer arg_type, integer arg_ifaddhis, ref string arg_msg, boolean arg_ifcommit) public function integer uof_mtrl_change (long arg_scid, long arg_orderid, decimal arg_rate, integer arg_type, integer arg_ifchange, integer arg_ifaddhis, ref string arg_msg, boolean arg_ifcommit) public function integer uof_c_stopjj (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_workprice_parm (long arg_mtrlid, string arg_wpcode, string arg_procode, decimal arg_proqty, string arg_parmstr, integer arg_kind, ref string arg_value_str, ref decimal arg_value_dec) public function integer uof_tryfinish_packorder_buy (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_reccl_cf (long arg_scid, long arg_orderid, s_order_ml_rqmtrl_scll arg_s_mtrl_scll, ref string arg_msg, boolean arg_ifcommit) public function integer uof_order_add_tree_barcode (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx (string arg_relcode, datetime arg_orderdate, long arg_taskid, string arg_taskcode, long arg_cusid, long arg_mtrlid, string arg_status_mode, string arg_woodcode, string arg_pcode, decimal arg_orderqty, string arg_dscrp, string arg_assign_emp, datetime arg_requiredate, integer arg_ordertype, string arg_taskrelcode, string arg_pfcode, long arg_taskmxid, long arg_porderid, long arg_utid, long arg_wrkgrpid, string arg_gydscrp, string arg_pfklmode, long arg_pforderid, string arg_pfordercode, decimal arg_pfqty, string arg_secdscrp, string arg_thdscrp, long arg_taskscid, datetime arg_perfinishdate, long arg_storageid, long arg_tmpid, integer arg_level, string arg_typename, string arg_outtypestr, long arg_pzlorderid, integer arg_iffg, integer arg_ifauto, integer arg_if_inherit, decimal arg_addqty, string arg_wpcode, integer arg_pctype, ref string arg_msg) public function integer tmp_order_add_pro (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_order_add_pro (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit, boolean arg_ifall, boolean arg_ifupdateprice, integer arg_ifproaudit) public function integer uof_order_add_wkp (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit, integer arg_if_olddate) public function integer addmxcmpl_rqacmpqty (long arg_scid, long arg_orderid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) public function integer addmx_sptcheckqty (long arg_scid, long arg_orderid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit) end prototypes private function integer p_reset ();//int p_reset() //清除对象及其明细 scid = 0 orderid = 0 ordercode = '' Accomplishemp = '' permit_emp = '' opemp = '' modemp = '' stopemp = '' relcode = '' mtrlid = 0 status_mode = '' woodcode = '' pcode = '' orderqty = 0 AcmpQty = 0 stopqty = 0 dscrp = '' Assign_emp = '' wrkGrpid = 0 gydscrp = '' secdscrp = '' thdscrp = '' stopjj = 0 stopjjemp = '' stopjjreason = '' storageid = 0 capacity = 0 arg_msg_str = '' //清除明细 p_clearmx() RETURN 1 end function public function integer f_distribute_dstrqty (long arg_atid, ref string arg_msg);//分摊材料用量 //1.查询时间段副材料用料量 //2.查询时间段生产计划明细完成时间入仓产品用料分摊 //==================================================================== // Function: f_distribute_dstrqty() //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // value long arg_atid // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2004.10.04 //-------------------------------------------------------------------- // Modify History: // //==================================================================== int rslt = 1 //long count,i,k //long ls_mtrlid,arr_mtrlid[] //string ls_mtrlcode,arr_mtrlcode[],ls_mtrlname,arr_mtrlname[] //decimal ls_outqty,arr_outqty[] //datetime ls_firstdate,ls_enddate //datastore ds_dstrqty //long li_orderid,li_olmtrlid,li_mtrlid //decimal li_rqqty,li_sumrqqty // //select firstdate,enddate //into :ls_firstdate,:ls_enddate //from u_apportion_time //where atid = :arg_atid; //if sqlca.sqlcode <> 0 then // rslt =0 // arg_msg = '查询盘点时间失败' // goto ext //end if // //declare cur_apportion cursor for // select u_mtrldef.mtrlid, // u_apportion.orqty + u_apportion.inqty - u_apportion.balcqty, // u_mtrldef.mtrlcode, // u_mtrldef.mtrlname // from u_mtrldef, // u_apportion // where ( u_mtrldef.mtrlid = u_apportion.mtrlid ) // and ( u_mtrldef.mtrlkind = 1 ) // and ( u_apportion.atid = :arg_atid ); //open cur_apportion; //fetch cur_apportion into :ls_mtrlid,:ls_outqty,:ls_mtrlcode,:ls_mtrlname; //do while sqlca.sqlcode = 0 // count++ // arr_mtrlid[count] = ls_mtrlid // arr_mtrlcode[count] = ls_mtrlcode // arr_mtrlname[count] = ls_mtrlname // arr_outqty[count] = ls_outqty // fetch cur_apportion into :ls_mtrlid,:ls_outqty,:ls_mtrlcode,:ls_mtrlname; //loop //close cur_apportion; // //if count <= 0 then // arg_msg = '该分摊时间还未盘车间数量' // rslt = 0 // goto ext //end if // //ds_dstrqty = create datastore //ds_dstrqty.dataobject = 'ds_distribute_dstrqty' //ds_dstrqty.settransobject(sqlca) //for i = 1 to count // li_orderid = 0 // li_olmtrlid = 0 // li_mtrlid = 0 // li_rqqty = 0 // li_sumrqqty = 0 // // if ds_dstrqty.retrieve(ls_firstdate,ls_enddate,arr_mtrlid[i]) <= 0 then continue // li_sumrqqty = ds_dstrqty.object.sum_rqqty[1] // // ds_dstrqty.accepttext() // for k = 1 to ds_dstrqty.rowcount() // li_orderid = ds_dstrqty.object.u_orderrqmtrl_orderid[i] // li_olmtrlid = ds_dstrqty.object.u_orderrqmtrl_olmtrlid[i] // li_mtrlid = ds_dstrqty.object.u_orderrqmtrl_mtrlid[i] // li_rqqty = ds_dstrqty.object.u_orderrqmtrl_rqqty[i] // // update u_OrderRqMtrl // set DstrQty = DstrQty + (:li_rqqty / :li_sumrqqty) * :li_sumrqqty, // atid = :arg_atid // where orderid = :li_orderid // and olmtrlid = :li_olmtrlid // and mtrlid = :li_mtrlid; // if sqlca.sqlcode <> 0 then // rslt = 0 // arg_msg = '分摊物料'+arr_mtrlname[i]+'用料量失败~n'+sqlca.sqlerrtext // goto ext // end if // next //next // //ext: return rslt end function public function integer add_dscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg); Int rslt = 1 IF arg_newdescppart = '' THEN rslt = 0 arG_MSG = "要添加内容为空,操作取消" GOTO ext END IF rslt = p_getinfo(arg_scid,arg_orderid, arG_MSG) IF rslt = 0 THEN GOTO ext IF status = 0 THEN rslt = 0 arG_MSG = "待审核状态下不可用" GOTO ext END IF UPDATE u_order_ml SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_order_ml.orderid = :arg_orderid AND u_order_ml.scid = :arg_scid; IF SQLCA.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致添加计划备注操作失败"+"~n"+SQLCA.SQLErrText ROLLBACK; GOTO ext END IF DSCRP = DSCRP+' '+arg_newdescppart ext: IF rslt = 1 THEN COMMIT; END IF p_reset() RETURN (rslt) end function public function integer del (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_fp Long i,cnt Long ll_scid,ll_orderid,ll_mtrlid,ll_wrkgrpid String ls_status,ls_woodcode,ls_pcode Decimal ld_fpqty uo_mtrlware_assign uo_fp_plan uo_fp_plan = Create uo_mtrlware_assign uo_fp_plan.commit_transaction = sqlca datastore ds_fp_plan_del ds_fp_plan_del = Create datastore ds_fp_plan_del.DataObject = 'ds_fp_plan_plankind_del' ds_fp_plan_del.SetTransObject(sqlca) datastore ds_zl_fp_del ds_zl_fp_del = Create datastore ds_zl_fp_del.DataObject = 'ds_zl_scllqty_from_orderrqmtrl_fp_cancel' ds_zl_fp_del.SetTransObject(sqlca) rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) IF rslt = 0 THEN GOTO ext IF Status <> 0 THEN rslt = 0 arg_msg = "计划已经审核,不可以删除" GOTO ext END IF DELETE FROM u_OrderRqMtrl WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除计划的计划用料表相应记录操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM U_OrderRqwp WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除计划的工序表相应记录操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_OrderMtrl_workgroup WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除计划的交接明细表相应记录操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_ordermtrl_wrk_jd WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除工组工作量明细表相应记录操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_order_ml_perfinishdate_log WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除计划的预计完成日期修改日志操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_OrderRqMtrl_tree WHERE u_OrderRqMtrl_tree.orderid = :arg_orderid And u_OrderRqMtrl_tree.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除生产计划运算树操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //处理分配占用数 cnt = 0 SELECT count(*) INTO :cnt FROM u_OrderRqMtrl_scll WHERE ( u_OrderRqMtrl_scll.scid = :arg_scid ) AND ( u_OrderRqMtrl_scll.OrderID = :arg_orderid ) AND ( u_OrderRqMtrl_scll.fpqty > 0 ); IF sqlca.SQLCode <> 0 THEN arg_msg = '查询指令领料明细是否有已分配数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //取消分配 IF cnt > 0 THEN ds_zl_fp_del.Retrieve(arg_scid,arg_orderid) FOR i = 1 To ds_zl_fp_del.RowCount() ll_scid = ds_zl_fp_del.Object.scid[i] ll_orderid = ds_zl_fp_del.Object.orderid[i] ll_mtrlid = ds_zl_fp_del.Object.mtrlid[i] ll_wrkgrpid = ds_zl_fp_del.Object.wrkgrpid[i] ls_status = ds_zl_fp_del.Object.Status[i] ls_woodcode = ds_zl_fp_del.Object.woodcode[i] ls_pcode = ds_zl_fp_del.Object.pcode[i] ld_fpqty = ds_zl_fp_del.Object.fpqty[i] IF uo_fp_plan.uof_assign_add_to_zl_scll(ll_scid,ll_orderid,ll_mtrlid,ll_wrkgrpid,& ls_status,ls_woodcode,ls_pcode,0 - ld_fpqty,0,0,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT END IF /////////////////////////////////// // DELETE FROM u_OrderRqMtrl_scll WHERE u_OrderRqMtrl_scll.orderid = :arg_orderid And u_OrderRqMtrl_scll.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除生产计划用料明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_order_ml_mx WHERE u_order_ml_mx.orderid = :arg_orderid And u_order_ml_mx.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除生产计划明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //删除原有分配计划明细 ds_fp_plan_del.Retrieve(arg_scid,arg_orderid,1) IF ds_fp_plan_del.RowCount() > 0 THEN IF ds_fp_plan_del.Object.sumassignqty[1] > 0 THEN rslt = 0 arg_msg = "原分配计划明细已有分配数,操作取消" GOTO ext END IF END IF FOR ll_fp = 1 To ds_fp_plan_del.RowCount() IF uo_fp_plan.uof_plan_del(ds_fp_plan_del.Object.id[ll_fp],& ds_fp_plan_del.Object.qty[ll_fp],arg_msg,False) = 0 THEN arg_msg = '删除分配计划失败,'+arg_msg rslt = 0 GOTO ext END IF NEXT /////////////////////////////////// // DELETE FROM u_order_zl_planmx WHERE u_order_zl_planmx.orderid = :arg_orderid And u_order_zl_planmx.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除生产计划进仓计划操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_order_ml WHERE u_order_ml.orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除生产计划操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //扣减相关部件生产计划的已分配数量 IF pforderid > 0 THEN IF f_add_conpfqty(arg_scid,pforderid,0 - pfqty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF //更新主计划自制需求指令单数量yyx20120815 IF ordertype = 4 And pzlorderid = 0 THEN IF uof_update_orderrqmtrl_zlqty(arg_scid,porderid,mtrlid,wrkgrpid,& status_mode,woodcode,pcode,0 - orderqty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF // ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_fp_plan Destroy ds_fp_plan_del Destroy ds_zl_fp_del Return (rslt) end function public function integer updatebegin (long arg_scid, long arg_orderid, ref string arg_msg);Long rslt = 1 IF uo_option_if_oa_order_ml = -1000 THEN rslt = 0 arg_msg = '选项:[230]生产计划使用审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_order_ml_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[225]生产计划使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_if_oa_order_zl = -1000 THEN rslt = 0 arg_msg = '选项:[231]生产指令单使用审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_order_ml_zl_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[226]生产指令单使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF p_reset() rslt = p_getinfo(arg_scid,arg_orderid,arg_msg) IF rslt = 0 THEN GOTO ext IF ordertype <> 4 THEN IF uo_option_if_oa_order_ml = 1 And uo_option_order_ml_secaudit = 1 And audit_buildtype = 0 THEN IF f_check_if_oaflow(arg_scid,arg_orderid,36,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSE IF uo_option_if_oa_order_zl = 1 And uo_option_order_ml_zl_secaudit = 1 And audit_buildtype = 0 THEN IF f_check_if_oaflow(arg_scid,arg_orderid,1138,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF IF Status <> 0 THEN rslt = 0 arg_msg = '已经处于审核或完成等状态,不可以修改,如果计划未领料并要修改请先撤销审核' GOTO ext END IF p_clearmx() //清除明细 ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 Long ls_i String ls_mtrlcode Int ll_statustype,ll_ordertype,li_ifpackpro,li_ifpack,li_storagetype_mtrl Long ll_porderid Int li_ifzl_add0ware String ls_wpcode Long ll_mtrlid,ll_wrkid Int li_mtrlorigin Decimal ld_packqty_mtrl String ls_plancode If f_aps_mrp_cklock(arg_scid,arg_msg) = 0 Then rslt = 0 Goto ext End If datastore ds_tree ds_tree = Create datastore ds_tree.DataObject = 'ds_orderrqmtrl_tree_ifpack2' ds_tree.SetTransObject(sqlca) datastore ds_gb_mx ds_gb_mx = Create datastore ds_gb_mx.DataObject = 'dw_getbarmx_edit' ds_gb_mx.SetTransObject(sqlca) uo_order_ml uo_zl uo_zl = Create uo_order_ml uo_getbar uo_get uo_get = Create uo_getbar If uo_option_if_oa_order_ml = -1000 Then rslt = 0 arg_msg = '选项:[230]生产计划使用审批流程,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_order_ml_secaudit = -1000 Then rslt = 0 arg_msg = '选项:[225]生产计划使用二级审核,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_if_oa_order_zl = -1000 Then rslt = 0 arg_msg = '选项:[231]生产指令单使用审批流程,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_order_ml_zl_secaudit = -1000 Then rslt = 0 arg_msg = '选项:[226]生产指令单使用二级审核,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_order_bh_use_yc = -1000 Then rslt = 0 arg_msg = '选项:[074]备货生产计划选销售预测单,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_def_bom = -1000 Then rslt = 0 arg_msg = '选项:[013]生产计划审核时需要检查是否已定义物料清单,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_order_mtrlware = -1000 Then rslt = 0 arg_msg = '选项:[143]生产计划审核增加0库存,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_inware_mtrlcuscode = -1000 Then rslt = 0 arg_msg = '选项:[138]生产进仓单产品批号策略按指令单号,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_use_workgroup_tree = -1000 Then rslt = 0 arg_msg = '选项:[233]使用工艺路线,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_def_mtrlwkp = -1000 Then rslt = 0 arg_msg = '选项:[239]生产计划审核时需要检查是否检查工组流程是否定义,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_ifpackpro2_if_no_pack2 = -1000 Then rslt = 0 arg_msg = '选项:[340]个性包件产品物料清单允许没有个性包件,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_order_zl_auto_getbar = -1000 Then rslt = 0 arg_msg = '选项:[403]胚板指令单终审是否自动生成条码生成单并审核,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_canpack_ifzanyong = -1000 Then rslt = 0 arg_msg = '选项:[417]通用包件产品可装数选项,读取初始默认值失败,操作取消!' Goto ext End If uo_saletask uo_task uo_task = Create uo_saletask uo_task.commit_transaction = sqlca uo_saletask_ll uo_task_ll uo_task_ll = Create uo_saletask_ll uo_task_ll.commit_transaction = sqlca If arg_orderid = 0 Then rslt = 0 arg_msg = "没有审核对象" Goto ext End If If p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then rslt = 0 Goto ext End If If status <> 0 Then rslt = 0 arg_msg = "计划只有在待审批状态才可以执行审批,请核对" Goto ext End If If getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then rslt = 0 Goto ext End If //检查是否有相关配置变更单未审 cnt = 0 Select count(*) Into :cnt From u_saletaskmx_change Inner JOIN u_saletaskmx_changemx ON u_saletaskmx_change.Billid = u_saletaskmx_changemx.billid Where (u_saletaskmx_change.affirmflag = 0 Or u_saletaskmx_change.flag = 0) And (u_saletaskmx_changemx.orderid = :arg_orderid) And (u_saletaskmx_changemx.scid = :arg_scid) ; If sqlca.SQLCode <> 0 Then arg_msg = ordercode + ',查询是否有相关配置变更单未审失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then arg_msg = ordercode + ',有相关配置变更单未审,请先审核' rslt = 0 Goto ext End If Select mtrlcode, statusflag, ordertype, ifpackpro, ifpack, storagetype, mtrlorigin, packqty Into :ls_mtrlcode, :ll_statustype, :ll_ordertype, :li_ifpackpro, :li_ifpack, :li_storagetype_mtrl, :li_mtrlorigin, :ld_packqty_mtrl From u_mtrldef Where mtrlid = :mtrlid; If sqlca.SQLCode <> 0 Then arg_msg = '查询产品资料失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If //检查是否已建立清单 If ordertype <> 4 Then If ll_statustype <> 2 Then If uo_option_def_bom = 1 Then If li_mtrlorigin <> 2 Then cnt = 0 Select count(*) Into :cnt From u_PrdPF,u_Mtrl_pf Where u_PrdPF.mtrlid = :mtrlid And u_PrdPF.pfcode = u_Mtrl_pf.pfcode And u_PrdPF.mtrlid = u_Mtrl_pf.mtrlid And u_Mtrl_pf.pfcode = :pfcode And u_Mtrl_pf.flag = 1; If sqlca.SQLCode <> 0 Then arg_msg = '查询产品:'+ls_mtrlcode + ',清单:'+ pfcode +',是否已设置物料清单明细失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt = 0 Then arg_msg = '产品:'+ls_mtrlcode + ',清单:'+ pfcode +',物料清单用料明细未建立,请检查' rslt = 0 Goto ext End If End If ElseIf uo_option_def_bom = 2 Then If f_check_pf_flag(mtrlid,pfcode,0,arg_msg) = 0 Then rslt = 0 Goto ext End If End If End If End If //检查是否已建立工组流程 If uo_option_def_mtrlwkp = 1 Then cnt = 0 Select count(*) Into :cnt From u_mtrl_wkp Where u_mtrl_wkp.mtrlid = :mtrlid; If sqlca.SQLCode <> 0 Then arg_msg = '查询产品:'+ls_mtrlcode +',是否已设置工组流程明细失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt = 0 Then arg_msg = '产品:'+ls_mtrlcode + ',工组流程明细未建立,请检查' rslt = 0 Goto ext End If End If If ordertype = 1 Or & ordertype = 2 Or & ordertype = 3 Or & ordertype = 0 And & uo_option_order_bh_use_yc = 1 Then If ordertype <> 3 Then If it_mxbt = 0 Then rslt = 0 arg_msg = '没有订单明细,操作终止,请检查' Goto ext End If End If If ordertype = 2 Then For ls_i = 1 To it_mxbt If s_order_mx[ls_i].taskid > 0 Then If uo_task_ll.updateassignqty(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,s_order_mx[ls_i].taskmxid,s_order_mx[ls_i].orderqty,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If Next Else For ls_i = 1 To it_mxbt If s_order_mx[ls_i].taskid > 0 Then If uo_task.updateassignqty(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,s_order_mx[ls_i].taskmxid,s_order_mx[ls_i].orderqty,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If Next End If ElseIf ordertype = 4 And pzlorderid = 0 Then If it_mxbt = 0 Then rslt = 0 arg_msg = '没有计划明细,操作终止,请检查' Goto ext End If For ls_i = 1 To it_mxbt If s_order_mx[ls_i].taskid > 0 Then Int li_plantype Long ll_wrkGrpid_scll Select plantype,wrkGrpid Into :li_plantype,:ll_wrkGrpid_scll From u_OrderRqMtrl Where scid = :scid And orderid = :s_order_mx[ls_i].taskid And mxpkid = :s_order_mx[ls_i].taskmxid; If sqlca.SQLCode <> 0 Then arg_msg = '查询生产自制需求资料失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If f_assign_rqmtrlqty(scid,s_order_mx[ls_i].taskid,ll_wrkGrpid_scll,& mtrlid,ls_mtrlcode,status_mode,& woodcode,pcode,s_order_mx[ls_i].orderqty,0,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If Next End If Update u_order_ml Set permit_emp = :publ_operator, permit_date = getdate(), status = 7 Where orderid = :arg_orderid And scid = :scid And status = 0; If sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 Then rslt = 0 arg_msg = "因网络或其它原因导致计划审批操作失败"+"~n"+sqlca.SQLErrText Goto ext End If //==================================================================== // 更新订单排产数量,加工生产计划工序 //==================================================================== If Not (ordertype <> 4 And ll_ordertype = 1) Then If outscllflag = 1 And ordertype <> 3 Then If uof_order_add_pro(arg_scid,arg_orderid,arg_msg,False,True,False,0) = 0 Then rslt = 0 Goto ext End If If uof_order_add_wkp(arg_scid,arg_orderid,arg_msg,False,0) = 0 Then rslt = 0 Goto ext End If If uof_order_add_wkp_tree(arg_scid,arg_orderid,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If End If If uo_option_order_mtrlware > 0 Then Long ll_mtrlwareid,ll_storageid_p Long ll_mtrlid_p String ls_mtrlcuscode String ls_taskrelcode_p,ls_ordercode_p Long ll_cusid_p Int li_balctype If uo_option_inware_mtrlcuscode = 0 Or li_ifpackpro = 1 Or li_ifpackpro = 3 Then ls_mtrlcuscode = '' Else ls_mtrlcuscode = ordercode End If If storageid > 0 Then Select balctype Into :li_balctype From u_storage Where storageid = :storageid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "查询仓库是否使用客户库存失败失败,"+sqlca.SQLErrText Goto ext End If End If If ordertype <> 4 And ll_ordertype = 0 And storageid > 0 Then //合并排产,生产计划增加0库存,否则相关指令单增加库存 If (li_ifpackpro = 2 Or li_ifpackpro = 4) And ll_ordertype = 0 Then ls_mtrlcuscode = ordercode End If If li_balctype = 0 Then cusid = 0 Else If li_storagetype_mtrl = 1 Then cusid = 0 End If If li_ifpackpro = 1 And uo_option_canpack_ifzanyong = 1 Then ls_plancode = '' Else ls_plancode = taskrelcode End If Select top 1 mtrlwareid Into :ll_mtrlwareid From u_mtrlware Where mtrlid = :mtrlid And status = :status_mode And storageid = :storageid And woodcode = :woodcode And plancode = :ls_plancode And pcode = :pcode And sptid = :cusid And mtrlcuscode = :ls_mtrlcuscode; If sqlca.SQLCode = -1 Then arg_msg = '查询产品库存失败,'+sqlca.SQLErrText rslt = 0 Goto ext ElseIf sqlca.SQLCode = 100 Then ll_mtrlwareid = 0 ll_mtrlwareid = f_sys_scidentity(scid,"u_mtrlware","mtrlwareid",arg_msg,True,id_sqlca) If ll_mtrlwareid <= 0 Then rslt = 0 Goto ext End If Insert Into u_mtrlware(scid,mtrlwareid,mtrlid,storageid,noallocqty,status,plancode,woodcode,pcode,sptid,mtrlcuscode) Values(:scid,:ll_mtrlwareid,:mtrlid,:storageid,0,:status_mode,:ls_plancode,:woodcode,:pcode,:cusid,:ls_mtrlcuscode); If sqlca.SQLCode <> 0 Then arg_msg = '主生产计划产品加0库存失败或物料已经有库存,请检查,'+sqlca.SQLErrText rslt = 0 Goto ext End If End If ElseIf ordertype = 4 And porderid > 0 Then Select u_order_ml.mtrlid,u_order_ml.taskrelcode,u_order_ml.cusid,u_order_ml.storageid,u_order_ml.ordercode Into :ll_mtrlid_p,:ls_taskrelcode_p,:ll_cusid_p,:ll_storageid_p,:ls_ordercode_p From u_order_ml Where u_order_ml.orderid = :porderid And u_order_ml.scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "加0库存时,指令单查询上级主生产计划资料失败,"+sqlca.SQLErrText Goto ext End If If ll_storageid_p > 0 Then Select balctype Into :li_balctype From u_storage Where storageid = :ll_storageid_p; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "查询主生产计划仓库是否使用客户库存失败失败,"+sqlca.SQLErrText Goto ext End If If ll_ordertype = 1 And ll_mtrlid_p = mtrlid Or li_ifpack = 2 Then If ll_ordertype = 1 And ll_mtrlid_p = mtrlid And (li_ifpackpro = 0 Or li_ifpackpro = 2 Or li_ifpackpro = 4) And pzlorderid = 0 Then ls_mtrlcuscode = ordercode ls_plancode = ls_taskrelcode_p li_ifzl_add0ware = 1 ElseIf ll_ordertype = 1 And ll_mtrlid_p = mtrlid And (li_ifpackpro = 2 Or li_ifpackpro = 4) And pzlorderid > 0 Or li_ifpack = 2 And ll_mtrlid_p <> mtrlid Then Select u_order_ml.taskrelcode,u_order_ml.cusid,u_order_ml.ordercode Into :ls_taskrelcode_p,:ll_cusid_p,:ls_ordercode_p From u_order_ml Where u_order_ml.orderid = :pzlorderid And u_order_ml.scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "加0库存时,查询上级指令资料失败,"+sqlca.SQLErrText Goto ext End If ls_mtrlcuscode = ls_ordercode_p If uo_option_order_mtrlware = 1 Then li_ifzl_add0ware = 1 ElseIf uo_option_order_mtrlware = 2 Then li_ifzl_add0ware = 0 End If ElseIf ll_ordertype = 1 And li_ifpack = 2 And ll_mtrlid_p = mtrlid Then ls_mtrlcuscode = ordercode ls_plancode = ls_taskrelcode_p If uo_option_order_mtrlware = 1 Then li_ifzl_add0ware = 1 ElseIf uo_option_order_mtrlware = 2 Then li_ifzl_add0ware = 0 End If ElseIf ll_ordertype = 1 And ll_mtrlid_p = mtrlid And (li_ifpackpro = 1 Or li_ifpackpro = 3) Then ls_mtrlcuscode = '' If li_ifpackpro = 1 And uo_option_canpack_ifzanyong = 1 Then ls_plancode = '' Else ls_plancode = ls_taskrelcode_p End If li_ifzl_add0ware = 1 End If If li_ifzl_add0ware = 1 Then If li_balctype = 0 Then ll_cusid_p = 0 Else If li_storagetype_mtrl = 1 Then ll_cusid_p = 0 End If Select top 1 mtrlwareid Into :ll_mtrlwareid From u_mtrlware Where mtrlid = :mtrlid And status = :status_mode And storageid = :ll_storageid_p And woodcode = :woodcode And plancode = :ls_plancode And pcode = :pcode And sptid = :ll_cusid_p And mtrlcuscode = :ls_mtrlcuscode; If sqlca.SQLCode = -1 Then arg_msg = '查询指令单产品是否有库存记录失败,'+sqlca.SQLErrText rslt = 0 Goto ext ElseIf sqlca.SQLCode = 100 Then ll_mtrlwareid = 0 ll_mtrlwareid = f_sys_scidentity(scid,"u_mtrlware","mtrlwareid",arg_msg,True,id_sqlca) If ll_mtrlwareid <= 0 Then rslt = 0 Goto ext End If Insert Into u_mtrlware(scid,mtrlwareid,mtrlid,storageid,noallocqty,status,plancode,woodcode,pcode,sptid,mtrlcuscode) Values(:scid,:ll_mtrlwareid,:mtrlid,:ll_storageid_p,0,:status_mode,:ls_plancode,:woodcode,:pcode,:ll_cusid_p,:ls_mtrlcuscode); If sqlca.SQLCode <> 0 Then arg_msg = '指令单产品加0库存失败或物料已经有库存,请检查,'+sqlca.SQLErrText rslt = 0 Goto ext End If End If End If End If End If End If End If Int li_ordertype_p,li_ifpackpro_p Long ll_i,ll_j Long ll_orderid_tmp Long ll_pmtrlid String ls_p_status,ls_p_woodcode,ls_p_pcode Boolean lb_if_autozl = False s_mtrlcfg_expr s_pz[] If ordertype <> 4 Then If (li_ifpackpro = 4 Or li_ifpackpro = 2 ) And ll_ordertype = 0 Then lb_if_autozl = True End If ll_porderid = arg_orderid Else If porderid = 0 Then lb_if_autozl = False Else Select u_mtrldef.ordertype, u_mtrldef.ifpackpro, u_Order_ml.mtrlid, u_Order_ml.status_mode, u_Order_ml.woodcode, u_Order_ml.pcode Into :li_ordertype_p, :li_ifpackpro_p, :ll_pmtrlid, :ls_p_status, :ls_p_woodcode, :ls_p_pcode From u_Order_ml Inner JOIN u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid Where u_Order_ml.orderid = :porderid And u_order_ml.scid = :scid; If sqlca.SQLCode <> 0 Then arg_msg = '查询上级计划产品相关信息失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If li_ordertype_p = 1 And & mtrlid = ll_pmtrlid And & (li_ifpackpro_p = 2 Or li_ifpackpro_p = 4 And status_mode = ls_p_status And woodcode = ls_p_woodcode And pcode = ls_p_pcode And pzlorderid = 0) Then lb_if_autozl = True End If ll_porderid = porderid End If End If Decimal ld_pzqty If lb_if_autozl Then uo_zl.newbegin(arg_scid) If li_ifpackpro = 4 Then f_checkpz(status_mode,s_pz[]) For ll_i = 1 To UpperBound(s_pz) ld_pzqty = Dec(s_pz[ll_i].qty) If uo_zl.acceptmx(relcode,& orderdate,& 0,& '',& 0,& mtrlid,& s_pz[ll_i].cfgname,& woodcode,& pcode,& orderqty * ld_pzqty,& dscrp,& publ_operator,& requiredate,& 4,& taskrelcode,& pfcode,& taskmxid,& ll_porderid,& ll_i,& wrkGrpid,& gydscrp,& pfklmode,& 0,'',0,& secdscrp,& thdscrp,& arg_scid,& perfinishdate,& 0,& 0,& Level,& typename,& outtypestr,& arg_orderid,& 0,& 0,0,addqty,& wpcode,0,& arg_msg) = 0 Then arg_msg = '建立相关生产指令单失败,'+arg_msg rslt = 0 Goto ext End If Next ElseIf li_ifpackpro = 2 Then If ll_ordertype = 0 Then ds_tree.Retrieve(arg_scid,arg_orderid) Else ds_tree.Retrieve(arg_scid,ll_porderid) End If For ll_i = 1 To ds_tree.RowCount() ll_mtrlid = ds_tree.Object.u_orderrqmtrl_tree_mtrlid[ll_i] ll_wrkid = ds_tree.Object.u_orderrqmtrl_tree_produce_wrkgrpid[ll_i] Select top 1 wpcode Into :ls_wpcode From u_mtrl_workprice Where mtrlid = :ll_mtrlid And wrkid = :ll_wrkid Order By ifdft Desc; If sqlca.SQLCode <> 0 Then ls_wpcode = '' If uo_zl.acceptmx(relcode,& orderdate,& 0,& '',& 0,& ds_tree.Object.u_orderrqmtrl_tree_mtrlid[ll_i],& ds_tree.Object.u_orderrqmtrl_tree_status[ll_i],& ds_tree.Object.u_orderrqmtrl_tree_woodcode[ll_i],& ds_tree.Object.u_orderrqmtrl_tree_pcode[ll_i],& ds_tree.Object.u_orderrqmtrl_tree_truerqqty[ll_i]*orderqty/ds_tree.Object.u_order_ml_orderqty[ll_i],& dscrp,& publ_operator,& requiredate,& 4,& taskrelcode,& ds_tree.Object.u_orderrqmtrl_tree_pfcode[ll_i],& taskmxid,& ll_porderid,& ll_i,& ds_tree.Object.u_orderrqmtrl_tree_produce_wrkgrpid[ll_i],& gydscrp,& pfklmode,& 0,'',0,& secdscrp,& thdscrp,& arg_scid,& perfinishdate,& 0,& 0,& Level,& typename,& outtypestr,& arg_orderid,& 0,& 0,0,0,& ls_wpcode,0,& arg_msg) = 0 Then arg_msg = '建立相关生产指令单失败,'+arg_msg rslt = 0 Goto ext End If Next End If uo_zl.pzlordercode_tmp = ordercode If ds_tree.RowCount() > 0 And li_ifpackpro = 2 Or UpperBound(s_pz) > 0 And li_ifpackpro = 4 Then If uo_zl.Save(arg_msg,False) = 0 Then arg_msg = '保存相关生产指令单失败,'+arg_msg rslt = 0 Goto ext End If uo_zl.pzlordercode_tmp = '' If uo_option_ifpackpro2_if_no_pack2 = 0 Then If UpperBound(uo_zl.orderid_arr) = 0 Then rslt = 0 arg_msg = '没有生成相关进仓指令单,请检查,可能没有个性包件或组合配置子件' Goto ext End If End If For ll_j = 1 To UpperBound(uo_zl.orderid_arr) ll_orderid_tmp = uo_zl.orderid_arr[ll_j] If uo_zl.audit(arg_scid,ll_orderid_tmp,arg_msg,False) = 0 Then rslt = 0 arg_msg = '审核相关生产指令单失败(初审),'+arg_msg Goto ext End If If uo_zl.plan_audit(arg_scid,ll_orderid_tmp,arg_msg,False) = 0 Then rslt = 0 arg_msg = '审核相关生产指令单失败(二审),'+arg_msg Goto ext End If If uo_zl.sec_audit(arg_scid,ll_orderid_tmp,arg_msg,False) = 0 Then rslt = 0 arg_msg = '审核相关生产指令单失败(终审),'+arg_msg Goto ext End If Next End If End If If ordertype <> 4 Then If uo_option_if_oa_order_ml = 1 And uo_option_order_ml_secaudit = 1 Then If f_oa(sqlca,False,arg_msg,36,arg_scid,arg_orderid,ordercode,relcode,dscrp) = 0 Then rslt = 0 Goto ext End If End If Else If uo_option_if_oa_order_zl = 1 And uo_option_order_ml_zl_secaudit = 1 Then If f_oa(sqlca,False,arg_msg,1138,arg_scid,arg_orderid,ordercode,relcode,dscrp) = 0 Then rslt = 0 Goto ext End If End If End If //yyx20140723 //胚板指令终审自动建立条码生成单 If uo_option_order_zl_auto_getbar = 1 And ordertype = 4 And ifpban = 1 Then s_getbar arg_s_gb Long ll_storageid_wrkgrpid Decimal ld_packqty Long ll_cnt,child_row,j String ls_barcode DateTime server_dt Select Top 1 getdate() Into :server_dt From u_user; If sqlca.SQLCode <> 0 Then arg_msg = '查询服务器时间失败,操作取消' rslt = 0 Goto ext End If Select storageid Into :ll_storageid_wrkgrpid From u_sc_wkp Where wrkGrpid = :wrkGrpid; If sqlca.SQLCode <> 0 Then arg_msg = '查询胚板指令单车间资料对应仓库失败,操作取消' rslt = 0 Goto ext End If If ll_storageid_wrkgrpid = 0 Then arg_msg = '胚板指令单车间资料对应仓库未设置,操作取消' rslt = 0 Goto ext End If If ld_packqty_mtrl = 0 Then ld_packqty_mtrl = 1 // arg_msg = '胚板指令单物料未设置包装件数,操作取消' // rslt = 0 // GOTO ext End If arg_s_gb.scid = arg_scid arg_s_gb.getbarid = 0 arg_s_gb.getbardate = server_dt arg_s_gb.ifrel = 1 arg_s_gb.orderid = arg_orderid arg_s_gb.storageid = ll_storageid_wrkgrpid arg_s_gb.mtrlid = mtrlid arg_s_gb.cusid = 0 arg_s_gb.plancode = '' arg_s_gb.status = status_mode arg_s_gb.woodcode = woodcode arg_s_gb.pcode = pcode arg_s_gb.mtrlcuscode = '' arg_s_gb.Location = '' arg_s_gb.packqty = ld_packqty_mtrl arg_s_gb.qty = orderqty arg_s_gb.dscrp = '胚板指令单终审自动建立条码单' arg_s_gb.reason = '' arg_s_gb.buytaskprintid = 0 arg_s_gb.packuqty = 0 arg_s_gb.uqty = 0 arg_s_gb.rate = 0 ds_gb_mx.Reset() If ld_packqty_mtrl >= 1 Then ll_cnt = Ceiling(Truncate(orderqty/ld_packqty_mtrl,10)) ld_packqty = ld_packqty_mtrl Else ll_cnt = Ceiling(orderqty*ld_packqty_mtrl) ld_packqty = Long(1/ld_packqty_mtrl) End If For j = 1 To ll_cnt ls_barcode = getid(0,"TXM",Date(server_dt),False,sqlca) //取得新单据编号 If ls_barcode = "err" Then ls_barcode = '' arg_msg = '胚板指令单无法获取条码,操作取消' rslt = 0 Goto ext End If child_row = ds_gb_mx.InsertRow(0) ds_gb_mx.Object.barcode[child_row] = ls_barcode If Mod(orderqty,ld_packqty) = 0 Then ds_gb_mx.Object.packqty[child_row] = ld_packqty Else If j <> ll_cnt Then ds_gb_mx.Object.packqty[child_row] = ld_packqty Else ds_gb_mx.Object.packqty[child_row] = orderqty - ld_packqty * ( ll_cnt - 1 ) End If End If Next ds_gb_mx.AcceptText() For j = 1 To ds_gb_mx.RowCount() arg_s_gb.arg_s_mx[j].barcode = ds_gb_mx.Object.barcode[j] arg_s_gb.arg_s_mx[j].packqty = ds_gb_mx.Object.packqty[j] arg_s_gb.arg_s_mx[j].packuqty = ds_gb_mx.Object.packuqty[j] arg_s_gb.arg_s_mx[j].rate = ds_gb_mx.Object.rate[j] arg_s_gb.arg_s_mx[j].qty = ds_gb_mx.Object.qty[j] arg_s_gb.arg_s_mx[j].mxdscrp = '' Next If uo_get.Save(arg_s_gb,publ_operator,arg_msg,False) = 0 Then arg_msg = '保存胚板指令单终审自动建立条码生成单失败,'+arg_msg rslt = 0 Goto ext End If If uo_get.auditing(uo_get.uo_getbarid,publ_operator,arg_msg,False) = 0 Then arg_msg = '审核胚板指令单终审自动建立条码生成单失败,'+arg_msg rslt = 0 Goto ext End If End If // ext: If rslt = 0 Then Rollback; p_reset() ElseIf arg_ifcommit And rslt = 1 Then Commit; End If Destroy uo_task Destroy uo_task_ll Destroy uo_zl Destroy uo_get Destroy ds_tree Destroy ds_gb_mx Return rslt end function public function integer tmpstoporder (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 If f_aps_mrp_cklock(arg_scid,arg_msg) = 0 Then rslt = 0 Goto ext End If rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) If rslt = 0 Then Goto ext If status <> 1 And status <> 2 Then rslt = 0 arg_msg = "计划只有在进行状态或暂停状态才可以执行暂停/取消暂停操作" Goto ext End If If status = 1 Then cnt = 0 Select count(*) Into :cnt From u_inwaremx Inner JOIN u_inware ON u_inwaremx.scid = u_inware.scid And u_inwaremx.inwareid = u_inware.inwareid Where (u_inware.billtype = 3) And (u_inware.flag = 0) And (u_inwaremx.scid = :arg_scid) And (u_inwaremx.relid = :arg_orderid); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = OrderCode+' 查询是否有相关未审核生产进仓单失败'+sqlca.SQLErrText Goto ext End If If cnt > 0 Then rslt = 0 arg_msg = OrderCode+' 有相关未审核生产进仓单,不能暂停' Goto ext End If Update u_order_ml Set status = 2, stopemp = :publ_operator Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致暂停计划操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Else Update u_order_ml Set status = 1, stopemp = '' Where orderid = :arg_orderid And scid = :arg_scid ; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致取消暂停计划操作失败"+"~n"+sqlca.SQLErrText Goto ext End If End If ext: If rslt = 0 Then Rollback; p_reset() ElseIf arg_ifcommit And rslt = 1 Then Commit; End If Return (rslt) end function public function integer finishorder (integer arg_finishtype, long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 DateTime null_dt SetNull(null_dt) If uo_option_auto_finish_zl = -1000 Then rslt = 0 arg_msg = '选项:[255]生产计划完成,相关指令单自动完成,读取初始默认值失败,操作取消!' Goto ext End If rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) If rslt = 0 Then Goto ext If arg_finishtype = 5 Or arg_finishtype = 6 Then If status <> 1 Then rslt = 0 arg_msg = "生产计划只有在进行状态才可以执行完成,请核对" Goto ext End If //如果是主计划,下级指令单状态有1,2,4,7,不允许终止主计划 If ordertype <> 4 Then Select count(*) Into :cnt From u_order_ml Where ordertype = 4 And porderid = :arg_orderid And scid = :arg_scid And status In (1,2,4,7); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = OrderCode+'查询下级指令单状态失败'+sqlca.SQLErrText Goto ext End If If cnt > 0 Then rslt = 0 arg_msg = OrderCode+',有下级指令单处于在进行、暂停、待二审或待终审状态,不能手动完成主计划' Goto ext End If End If Else If arg_finishtype = 1 Then If status <> 6 Then rslt = 0 arg_msg = "生产计划只有在手动完成状态下才可以执行取消手动完成,请核对" Goto ext End If End If End If If arg_finishtype = 5 Or arg_finishtype = 6 Then Update u_order_ml Set status = :arg_finishtype, accomplishdate = getdate(), Accomplishemp = :publ_operator Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致完成生产计划操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Else Update u_order_ml Set status = :arg_finishtype, accomplishdate = :null_dt, Accomplishemp = '' Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致取消手动完成生产计划操作失败"+"~n"+sqlca.SQLErrText Goto ext End If End If If uo_option_auto_finish_zl = 1 And ordertype <> 4 Then If arg_finishtype = 5 Or arg_finishtype = 6 Then Update u_order_ml Set status = 5 Where porderid = :arg_orderid And scid = :arg_scid And ordertype = 4; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其他原因导致更新相关指令单状态操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Else Update u_order_ml Set status = 1 Where porderid = :arg_orderid And scid = :arg_scid And orderqty > acmpqty And ordertype = 4; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其他原因导致更新相关指令单状态操作失败"+"~n"+sqlca.SQLErrText Goto ext End If End If End If Int li_ifpack If ordertype = 4 Then Select u_mtrldef.ifpack Into :li_ifpack From u_mtrldef Where u_mtrldef.mtrlid = :mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询物料是否属于包件失败'+sqlca.SQLErrText Goto ext End If If li_ifpack = 1 Then If uof_tryfinish_packorder(arg_scid,arg_orderid,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If End If If uof_order_cmpcost(arg_scid,arg_orderid,arg_msg,False) = 0 Then rslt = 0 Goto ext End If ext: If rslt = 0 Then Rollback; ElseIf arg_ifcommit And rslt = 1 Then Commit; End If p_reset() Return (rslt) end function public function integer tryfinishorder (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,cnt = 0 Decimal ld_not_finishqty Boolean if_finish DateTime null_dt SetNull(null_dt) IF uo_option_auto_finish_zl = -1000 THEN rslt = 0 arg_msg = '选项:[255]生产计划完成,相关指令单自动完成,读取初始默认值失败,操作取消!' GOTO ext END IF IF p_getinfo(arg_scid,arg_orderid,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 if_finish = True SELECT u_order_ml.orderqty - u_order_ml.acmpqty - u_order_ml.stopqty INTO :ld_not_finishqty FROM u_order_ml WHERE ( u_order_ml.orderid = :arg_orderid ) And ( u_order_ml.scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN arg_msg = '查询生产计划未完成数量失败' rslt = 0 GOTO ext END IF IF if_finish THEN IF ld_not_finishqty > 0 THEN if_finish = False END IF IF status = 1 And if_finish THEN UPDATE u_order_ml SET status = 5, accomplishdate = getdate(), accomplishemp = :publ_operator WHERE ( u_order_ml.orderid = :arg_orderid ) And ( u_order_ml.scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致生产计划完成状态设置操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF IF status = 5 And Not if_finish THEN UPDATE u_order_ml SET status = 1, accomplishdate = :null_dt, accomplishemp = '' WHERE ( u_order_ml.orderid = :arg_orderid ) And ( u_order_ml.scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致生产计划撤消完成状态设置操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF IF uo_option_auto_finish_zl = 1 And ordertype <> 4 THEN IF if_finish THEN UPDATE u_order_ml SET status = 5 WHERE porderid = :arg_orderid AND scid = :arg_scid And ordertype = 4; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致更新相关指令单状态操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ELSE UPDATE u_order_ml SET status = 1 WHERE porderid = :arg_orderid AND scid = :arg_scid AND orderqty > acmpqty And ordertype = 4; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致更新相关指令单状态操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF END IF Int li_ifpack,li_ifpackpro IF ordertype = 4 THEN SELECT u_mtrldef.ifpack,u_mtrldef.ifpackpro INTO :li_ifpack,:li_ifpackpro FROM u_mtrldef Where u_mtrldef.mtrlid = :mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料是否属于包件失败'+sqlca.SQLErrText GOTO ext END IF IF li_ifpack = 1 Or li_ifpack = 2 Or li_ifpackpro = 3 THEN IF uof_tryfinish_packorder(arg_scid,arg_orderid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF IF li_ifpackpro = 4 THEN IF uof_tryfinish_packorder2(arg_scid,arg_orderid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF IF uof_order_cmpcost(arg_scid,arg_orderid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF p_reset() Return(rslt) end function public function integer cancel_finishorder (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit); int rslt = 1,cnt = 0 datetime null_dt setnull(null_dt) rslt =p_getinfo(arg_scid,arg_orderid,arg_msg) if rslt = 0 then goto ext update u_order_ml set status = 1, accomplishdate = :null_dt, Accomplishemp = '' where orderid = :arg_orderid and scid = :arg_scid; if sqlca.sqlcode <> 0 then rslt = 0 arg_msg = "因网络或其它原因导致取消完成生产计划操作失败"+"~n"+sqlca.sqlerrtext goto ext end if ext: if rslt=0 then rollback; elseif arg_ifcommit and rslt = 1 then commit; end if p_reset() return (rslt) end function public function integer save (ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1 Long ls_i,ls_j,ll_k,ll_m,ll_n,ll_o,ll_p DateTime server_dt String ls_sccode String ls_billcode Long ll_orderid[],ll_orderqty_array[],ll_tmp_orderid String ls_ordercode[],ls_tmp_ordercode Decimal ld_SaleQty,ld_AssignQty,ld_ordermx_qty Long cnt,mx_cnt Long ll_taskid String ls_taskcode Decimal ld_upddrate,ld_upddqty Long ll_cnt_code String ls_code_find_str Long ll_lp,ll_loop Long ll_mtrlid String ls_status,ls_woodcode,ls_pcode Boolean lb_iffind = False DateTime ldt_RqDate,ldt_edate,ldt_RqDate_tree,ldt_edate_tree,ldt_rqdate_up,ldt_edate_up Decimal ld_buydays,ld_wfjgdays,ld_Relative Long ll_mtrlid_tree,ll_wrkgrpid,ll_produce_wrkgrpid,li_plantype String ls_status_tree,ls_woodcode_tree,ls_pcode_tree // ll_printid Long ll_fp_array,ll_fp Int li_ifpackpro,li_ordertype s_mtrlware_assign_plan s_fp_plan datastore ds_tree ds_tree = Create datastore ds_tree.DataObject = 'ds_orderrqmtrl_tree_stop' ds_tree.SetTransObject(sqlca) uo_mtrlware_assign uo_fp_plan uo_fp_plan = Create uo_mtrlware_assign uo_fp_plan.commit_transaction = sqlca IF uo_option_order_bh_use_yc = -1000 THEN rslt = 0 arg_msg = '选项:[074]备货生产计划选销售预测单,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_order_ml_save_reccl = -1000 THEN rslt = 0 arg_msg = '选项:[222]生产指令单保存时计算用料,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_order_ml_add_use_wkp = -1000 THEN rslt = 0 arg_msg = '选项:[186]生产计划新建时显示工作量,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_order_zl_3_day = -1000 THEN rslt = 0 arg_msg = '选项:[316]指令单保存时更新相关采购需求明细日期,读取初始默认值失败,操作取消!' GOTO ext END IF IF scid < 0 THEN rslt = 0 arg_msg = '请选择正确的分部' GOTO ext END IF IF it_mxbt = 0 THEN arg_msg = '没有计划明细保存' rslt = 0 GOTO ext END IF FOR ls_i = 1 To it_mxbt IF s_order_mx[ls_i].ordertype = 1 THEN //检查主计划 SELECT u_SaleTaskMx.pqty, u_SaleTaskMx.AssignQty, u_mtrldef.upddrate, u_mtrldef.upddqty INTO :ld_SaleQty, :ld_AssignQty, :ld_upddrate, :ld_upddqty FROM u_SaleTaskMx,u_mtrldef WHERE u_SaleTaskMx.mtrlid = u_mtrldef.mtrlid AND u_SaleTaskMx.scid = :s_order_mx[ls_i].taskscid AND u_SaleTaskMx.taskid = :s_order_mx[ls_i].taskid AND u_SaleTaskMx.printid = :s_order_mx[ls_i].taskmxid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询销售订单已排产数量失败!'+sqlca.SQLErrText rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt 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 = :s_order_mx[ls_i].taskid AND u_order_ml_mx.taskscid = :s_order_mx[ls_i].taskscid AND u_order_ml_mx.taskmxid = :s_order_mx[ls_i].taskmxid AND u_Order_ml.status = 0 ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询是否有未审核生产计划失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ld_ordermx_qty = 0 IF cnt > 0 THEN SELECT sum(u_order_ml_mx.qty) INTO :ld_ordermx_qty 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 = :s_order_mx[ls_i].taskid AND u_order_ml_mx.taskscid = :s_order_mx[ls_i].taskscid AND u_order_ml_mx.taskmxid = :s_order_mx[ls_i].taskmxid AND u_Order_ml.status = 0 ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询已开生计划未审核数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF s_order_mx[ls_i].orderqty > ld_SaleQty * (1 + ld_upddrate) + ld_upddqty - ld_AssignQty - ld_ordermx_qty THEN arg_msg = '第'+String(ls_i)+'行待排产数只有:'+String(ld_SaleQty * (1 + ld_upddrate) + ld_upddqty - ld_AssignQty - ld_ordermx_qty,'#,##0.##########')+',不能再排产:'+String(s_order_mx[ls_i].orderqty,'#,##0.##########') rslt = 0 GOTO ext END IF ELSEIF s_order_mx[ls_i].ordertype = 4 THEN //检查指令单 IF s_order_mx[ls_i].pzlorderid = 0 THEN SELECT sum(u_OrderRqMtrl.truerqqty), sum(u_OrderRqMtrl.consignedQty), u_mtrldef.upddrate, u_mtrldef.upddqty INTO :ld_SaleQty, :ld_AssignQty, :ld_upddrate, :ld_upddqty FROM u_OrderRqMtrl,u_mtrldef WHERE u_OrderRqMtrl.mtrlid = u_mtrldef.mtrlid AND u_OrderRqMtrl.scid = :scid AND u_OrderRqMtrl.orderid = :s_order_mx[ls_i].porderid AND u_OrderRqMtrl.mtrlid = :s_order_mx[ls_i].mtrlid AND u_OrderRqMtrl.status = :s_order_mx[ls_i].status_mode AND u_OrderRqMtrl.woodcode = :s_order_mx[ls_i].woodcode AND u_OrderRqMtrl.pcode = :s_order_mx[ls_i].pcode GROUP BY u_mtrldef.upddrate, u_mtrldef.upddqty; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询主生产计划已排产数量失败!'+sqlca.SQLErrText rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_Order_ml WHERE u_Order_ml.scid = :scid AND u_Order_ml.porderid = :s_order_mx[ls_i].porderid AND u_Order_ml.mtrlid = :s_order_mx[ls_i].mtrlid AND u_Order_ml.status_mode = :s_order_mx[ls_i].status_mode AND u_Order_ml.woodcode = :s_order_mx[ls_i].woodcode AND u_Order_ml.pcode = :s_order_mx[ls_i].pcode AND u_Order_ml.status = 0 ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询是否有未审核车间生产指令失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ld_ordermx_qty = 0 IF cnt > 0 THEN SELECT sum(u_Order_ml.orderqty) INTO :ld_ordermx_qty FROM u_Order_ml WHERE u_Order_ml.scid = :scid AND u_Order_ml.porderid = :s_order_mx[ls_i].porderid AND u_Order_ml.mtrlid = :s_order_mx[ls_i].mtrlid AND u_Order_ml.status_mode = :s_order_mx[ls_i].status_mode AND u_Order_ml.woodcode = :s_order_mx[ls_i].woodcode AND u_Order_ml.pcode = :s_order_mx[ls_i].pcode AND u_Order_ml.status = 0 ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询已开车间生产指令未审核数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF s_order_mx[ls_i].orderqty > ld_SaleQty * (1 + ld_upddrate) + ld_upddqty - ld_AssignQty - ld_ordermx_qty THEN arg_msg = '第'+String(ls_i)+'行待排产数只有:'+String(ld_SaleQty * (1 + ld_upddrate) + ld_upddqty - ld_AssignQty - ld_ordermx_qty,'#,##0.##########')+',不能再排产:'+String(s_order_mx[ls_i].orderqty,'#,##0.##########') rslt = 0 GOTO ext END IF END IF END IF NEXT //**合并产品 p_replace_mx() IF it_mxbt_ut = 0 THEN arg_msg = '没有计划保存' rslt = 0 GOTO ext END IF SELECT Top 1 getdate() Into :server_dt From u_user ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF f_get_sccode(scid,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF sys_option_if_order_billcode = 1 THEN ls_billcode = getid(scid,ls_sccode+"PC",Date(server_dt),if_getid_ture,sqlca) IF ls_billcode = "err" THEN rslt = 0 arg_msg = "无法获取排产号"+"~n"+sqlca.SQLErrText GOTO ext END IF ELSE ls_billcode = '' END IF //**取ID,单号 FOR ls_i = 1 To it_mxbt_ut ll_tmp_orderid = f_sys_scidentity(scid,"u_order_ml","orderid",arg_msg,True,id_sqlca) IF ll_tmp_orderid <= 0 THEN rslt = 0 GOTO ext END IF IF s_order_ut[1].ordertype = 4 THEN IF s_order_ut[ls_i].pzlorderid = 0 THEN ls_tmp_ordercode = getid(scid,ls_sccode+"ZL",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号 ELSE ls_code_find_str = pzlordercode_tmp+'.%' ll_cnt_code = 0 SELECT COUNT(*) INTO :ll_cnt_code FROM u_Order_ml Where (OrderCode Like :ls_code_find_str); IF sqlca.SQLCode <> 0 THEN ll_cnt_code = 0 ll_cnt_code++ ls_tmp_ordercode = pzlordercode_tmp + '.'+String(ll_cnt_code,'00') FOR ll_k = 1 To UpperBound(ls_ordercode) IF ls_tmp_ordercode = ls_ordercode[ll_k] THEN ll_cnt_code++ ls_tmp_ordercode = pzlordercode_tmp + '.'+String(ll_cnt_code,'00') ll_k = 0 END IF NEXT END IF ELSE ls_tmp_ordercode = getid(scid,ls_sccode+"SC",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号 END IF IF ls_tmp_ordercode = "err" THEN rslt = 0 arg_msg = "无法获取计划编号"+"~n"+sqlca.SQLErrText GOTO ext END IF ll_orderid[ls_i] = ll_tmp_orderid ls_ordercode[ls_i] = ls_tmp_ordercode ll_orderqty_array[ls_i] = s_order_ut[ls_i].orderqty NEXT FOR ls_i = 1 To it_mxbt_ut mx_cnt = 0 ls_taskcode = s_order_ut[ls_i].taskcode IF lena(ls_taskcode) > 255 THEN ls_taskcode = lefta(ls_taskcode,255) if isnull(s_order_ut[ls_i].ifpban) then s_order_ut[ls_i].ifpban = 0 if isnull(s_order_ut[ls_i].ifupban) then s_order_ut[ls_i].ifupban = 0 INSERT INTO u_order_ml (scid, orderid, ordercode, billcode, relcode, orderdate, mtrlid, status_mode, woodcode, pcode, requiredate, orderqty, Opemp, opdate, dscrp, Assign_emp, ordertype, taskrelcode, pfcode, taskid, taskcode, taskmxid, cusid, porderid, pordercode, wrkGrpid, gydscrp, pfklmode, pforderid, pfordercode, pfqty, secdscrp, thdscrp, taskscid, perfinishdate, storageid, capacity, level, typename, p_taskrelcode, saletaskcode, saletaskrelcode, cusname, p_ordertype, p_cusid, p_mtrlid, outtypestr, pzlorderid, inwareflag, outscllflag, iffg, ifauto, upmtrlid, if_inherit, addqty, ifwforder, wpcode, pctype, notmrpqty, ifpban, ifupban) VALUES ( :scid, :ll_orderid[ls_i], :ls_ordercode[ls_i], :ls_billcode, :s_order_ut[ls_i].relcode, :s_order_ut[ls_i].orderdate, :s_order_ut[ls_i].mtrlid, :s_order_ut[ls_i].status_mode, :s_order_ut[ls_i].woodcode, :s_order_ut[ls_i].pcode, :s_order_ut[ls_i].requiredate, :s_order_ut[ls_i].orderqty, :publ_operator, :server_dt, :s_order_ut[ls_i].dscrp, :s_order_ut[ls_i].Assign_emp, :s_order_ut[ls_i].ordertype, :s_order_ut[ls_i].taskrelcode, :s_order_ut[ls_i].pfcode, :s_order_ut[ls_i].taskid, :ls_taskcode, :s_order_ut[ls_i].taskmxid, :s_order_ut[ls_i].cusid, :s_order_ut[ls_i].porderid, :s_order_ut[ls_i].pordercode, :s_order_ut[ls_i].wrkGrpid, :s_order_ut[ls_i].gydscrp, :s_order_ut[ls_i].pfklmode, :s_order_ut[ls_i].pforderid, :s_order_ut[ls_i].pfordercode, :s_order_ut[ls_i].pfqty, :s_order_ut[ls_i].secdscrp, :s_order_ut[ls_i].thdscrp, :s_order_ut[ls_i].taskscid, :s_order_ut[ls_i].perfinishdate, :s_order_ut[ls_i].storageid, :s_order_ut[ls_i].capacity, :s_order_ut[ls_i].level, :s_order_ut[ls_i].typename, :s_order_ut[ls_i].p_taskrelcode, :s_order_ut[ls_i].saletaskcode, :s_order_ut[ls_i].saletaskrelcode, :s_order_ut[ls_i].cusname, :s_order_ut[ls_i].p_ordertype, :s_order_ut[ls_i].p_cusid, :s_order_ut[ls_i].p_mtrlid, :s_order_ut[ls_i].outtypestr, :s_order_ut[ls_i].pzlorderid, :s_order_ut[ls_i].inwareflag, :s_order_ut[ls_i].outscllflag, :s_order_ut[ls_i].iffg, :s_order_ut[ls_i].ifauto, :s_order_ut[ls_i].upmtrlid, :s_order_ut[ls_i].if_inherit, :s_order_ut[ls_i].addqty, :s_order_ut[ls_i].ifwforder, :s_order_ut[ls_i].wpcode, :s_order_ut[ls_i].pctype, :s_order_ut[ls_i].notmrpqty, :s_order_ut[ls_i].ifpban, :s_order_ut[ls_i].ifupban) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入计划操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF s_order_ut[ls_i].ordertype = 1 Or & s_order_ut[ls_i].ordertype = 2 Or & s_order_ut[ls_i].ordertype = 3 Or & s_order_ut[ls_i].ordertype = 4 Or & s_order_ut[ls_i].ordertype = 0 And & uo_option_order_bh_use_yc = 1 THEN FOR ls_j = 1 To it_mxbt IF s_order_mx[ls_j].utid = s_order_ut[ls_i].utid THEN IF s_order_ut[ls_i].iffp = 1 And s_order_ut[ls_i].inwareflag = 1 And s_order_ut[ls_i].fpkind >= 0 THEN IF s_order_ut[ls_i].ordertype = 4 And s_order_mx[ls_j].porderid > 0 THEN ll_fp_array++ s_fp_plan.planid[ll_fp_array] = 0 IF s_order_ut[ls_i].fpkind = 1 THEN s_fp_plan.assigntype[ll_fp_array] = 1 ELSE s_fp_plan.assigntype[ll_fp_array] = 0 END IF s_fp_plan.plantype[ll_fp_array] = 1 s_fp_plan.plankind[ll_fp_array] = 1 s_fp_plan.plankind_relbillid[ll_fp_array] = ll_orderid[ls_i] s_fp_plan.plankind_relprintid[ll_fp_array] = 0 s_fp_plan.scid[ll_fp_array] = scid s_fp_plan.mtrlwareid[ll_fp_array] = 0 IF s_order_ut[ls_i].fpkind = 1 THEN s_fp_plan.relbillid[ll_fp_array] = s_order_mx[ls_j].p_taskid s_fp_plan.relprintid[ll_fp_array] = s_order_mx[ls_j].p_taskmxid ELSE s_fp_plan.relbillid[ll_fp_array] = s_order_mx[ls_j].porderid s_fp_plan.relprintid[ll_fp_array] = 0 END IF s_fp_plan.planassignqty[ll_fp_array] = s_order_mx[ls_j].orderqty s_fp_plan.mtrlid[ll_fp_array] = s_order_mx[ls_j].mtrlid s_fp_plan.status[ll_fp_array] = s_order_mx[ls_j].status_mode s_fp_plan.woodcode[ll_fp_array] = s_order_mx[ls_j].woodcode s_fp_plan.pcode[ll_fp_array] = s_order_mx[ls_j].pcode ELSEIF s_order_ut[ls_i].ordertype = 1 THEN //订单 ll_fp_array++ s_fp_plan.planid[ll_fp_array] = 0 s_fp_plan.assigntype[ll_fp_array] = 1 s_fp_plan.plantype[ll_fp_array] = 1 s_fp_plan.plankind[ll_fp_array] = 1 s_fp_plan.plankind_relbillid[ll_fp_array] = ll_orderid[ls_i] s_fp_plan.plankind_relprintid[ll_fp_array] = 0 s_fp_plan.scid[ll_fp_array] = scid s_fp_plan.mtrlwareid[ll_fp_array] = 0 s_fp_plan.relbillid[ll_fp_array] = s_order_mx[ls_j].taskid s_fp_plan.relprintid[ll_fp_array] = s_order_mx[ls_j].taskmxid s_fp_plan.planassignqty[ll_fp_array] = s_order_mx[ls_j].orderqty s_fp_plan.mtrlid[ll_fp_array] = s_order_mx[ls_j].mtrlid s_fp_plan.status[ll_fp_array] = s_order_mx[ls_j].status_mode s_fp_plan.woodcode[ll_fp_array] = s_order_mx[ls_j].woodcode s_fp_plan.pcode[ll_fp_array] = s_order_mx[ls_j].pcode END IF END IF IF s_order_ut[ls_i].ordertype = 1 Or & s_order_ut[ls_i].ordertype = 2 Or & s_order_ut[ls_i].ordertype = 3 Or & s_order_ut[ls_i].ordertype = 0 And & uo_option_order_bh_use_yc = 1 THEN ll_taskid = s_order_mx[ls_j].taskid ls_taskcode = s_order_mx[ls_j].taskcode ELSE ll_taskid = s_order_mx[ls_j].porderid ls_taskcode = s_order_mx[ls_j].pordercode END IF UPDATE u_order_ml_mx SET qty = qty + :s_order_mx[ls_j].orderqty WHERE scid = :scid AND orderid = :ll_orderid[ls_i] AND taskid = :ll_taskid And taskmxid = :s_order_mx[ls_j].taskmxid; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO u_order_ml_mx (scid, orderid, taskid, taskmxid, taskcode, qty, cusid, taskscid) VALUES( :scid, :ll_orderid[ls_i], :ll_taskid, :s_order_mx[ls_j].taskmxid, :ls_taskcode, :s_order_mx[ls_j].orderqty, :s_order_mx[ls_j].cusid, :s_order_mx[ls_j].taskscid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入计划明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF mx_cnt++ END IF ELSE rslt = 0 arg_msg = "因网络或其它原因导致更新计划明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF NEXT IF mx_cnt = 0 THEN rslt = 0 IF s_order_ut[ls_i].ordertype = 4 THEN arg_msg = '指令单没有相关计划明细,请检查' ELSE arg_msg = '主生产计划没有相关订单明细,请检查' END IF GOTO ext END IF END IF IF uo_option_order_ml_save_reccl = 1 THEN IF s_order_ut[ls_i].ordertype = 4 And s_order_ut[ls_i].pzlorderid = 0 THEN IF uof_reccl(scid,ll_orderid[ls_i],arg_msg,False) = 0 THEN rslt = 0 arg_msg = '计算领料明细失败,'+arg_msg GOTO ext END IF END IF IF uo_option_order_zl_3_day = 1 THEN IF s_order_ut[ls_i].ordertype = 4 THEN //如果是包件产品并且是分离排产的,下级的采购包件按指令单要求完成日期减7天 SELECT ifpackpro,ordertype INTO :li_ifpackpro,:li_ordertype FROM u_mtrldef Where mtrlid = :s_order_ut[ls_i].mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询产品信息失败,'+sqlca.SQLErrText GOTO ext END IF IF li_ifpackpro > 0 And li_ordertype = 1 THEN UPDATE u_OrderRqMtrl SET u_orderrqmtrl.RqDate = dateadd(day, -7, u_Order_ml.requiredate), u_orderrqmtrl.edate = dateadd(day, 0 - u_mtrldef.buydays, dateadd(day, -7, u_Order_ml.requiredate)), u_orderrqmtrl.rqdate_ori = case when u_orderrqmtrl.rqdate_ori is NULL then u_orderrqmtrl.RqDate else u_orderrqmtrl.rqdate_ori END , u_orderrqmtrl.edate_ori = case when u_orderrqmtrl.edate_ori is NULL then u_orderrqmtrl.edate else u_orderrqmtrl.edate_ori END FROM u_Order_ml INNER JOIN u_OrderRqMtrl_scll ON u_Order_ml.OrderID = u_OrderRqMtrl_scll.OrderID AND u_Order_ml.scid = u_OrderRqMtrl_scll.scid INNER JOIN u_Order_ml u_Order_ml_p ON u_Order_ml.porderid = u_Order_ml_p.OrderID AND u_Order_ml.scid = u_Order_ml_p.scid INNER JOIN u_OrderRqMtrl ON u_Order_ml_p.OrderID = u_OrderRqMtrl.OrderID AND u_Order_ml_p.scid = u_OrderRqMtrl.scid AND u_OrderRqMtrl_scll.MtrlID = u_OrderRqMtrl.MtrlID AND u_OrderRqMtrl_scll.wrkGrpid = u_OrderRqMtrl.wrkGrpid INNER JOIN u_mtrldef ON u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid WHERE (u_OrderRqMtrl.plantype = 2) AND (u_mtrldef.ifpack > 0) AND (u_OrderRqMtrl_scll.scid = :scid) And (u_OrderRqMtrl_scll.orderid = :ll_orderid[ls_i]) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新需求明细日期操作失败(采购包件)"+"~n"+sqlca.SQLErrText GOTO ext END IF ELSE //直接采购下级 UPDATE u_OrderRqMtrl SET u_orderrqmtrl.RqDate = dateadd(day, -3, u_Order_ml.orderdate), u_orderrqmtrl.edate = dateadd(day, 0 - u_mtrldef.buydays, dateadd(day, -3, u_Order_ml.orderdate)), u_orderrqmtrl.rqdate_ori = case when u_orderrqmtrl.rqdate_ori is NULL then u_orderrqmtrl.RqDate else u_orderrqmtrl.rqdate_ori END , u_orderrqmtrl.edate_ori = case when u_orderrqmtrl.edate_ori is NULL then u_orderrqmtrl.edate else u_orderrqmtrl.edate_ori END FROM u_Order_ml INNER JOIN u_OrderRqMtrl_scll ON u_Order_ml.OrderID = u_OrderRqMtrl_scll.OrderID AND u_Order_ml.scid = u_OrderRqMtrl_scll.scid INNER JOIN u_Order_ml u_Order_ml_p ON u_Order_ml.porderid = u_Order_ml_p.OrderID AND u_Order_ml.scid = u_Order_ml_p.scid INNER JOIN u_OrderRqMtrl ON u_Order_ml_p.OrderID = u_OrderRqMtrl.OrderID AND u_Order_ml_p.scid = u_OrderRqMtrl.scid AND u_OrderRqMtrl_scll.MtrlID = u_OrderRqMtrl.MtrlID AND u_OrderRqMtrl_scll.wrkGrpid = u_OrderRqMtrl.wrkGrpid INNER JOIN u_mtrldef ON u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid WHERE (u_OrderRqMtrl.plantype = 2) AND (u_OrderRqMtrl_scll.scid = :scid) And (u_OrderRqMtrl_scll.orderid = :ll_orderid[ls_i]) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新需求明细日期操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //下级外协,以及外协下级的外协或采购 ds_tree.Retrieve(scid,s_order_ut[ls_i].porderid) //定位指令单在运算树中的位置 FOR ll_m = 1 To ds_tree.RowCount() ll_mtrlid = ds_tree.Object.mtrlid[ll_m] ls_status = ds_tree.Object.status[ll_m] ls_woodcode = ds_tree.Object.woodcode[ll_m] ls_pcode = ds_tree.Object.pcode[ll_m] IF ll_mtrlid = s_order_ut[ls_i].mtrlid And ls_status = s_order_ut[ls_i].status_mode And ls_woodcode = s_order_ut[ls_i].woodcode And ls_pcode = s_order_ut[ls_i].pcode THEN ll_lp = ds_tree.Object.lp[ll_m] lb_iffind = True EXIT END IF NEXT IF lb_iffind THEN FOR ll_n = ll_m + 1 To ds_tree.RowCount() IF ds_tree.Object.lp[ll_n] <= ll_lp THEN EXIT IF ds_tree.Object.lp[ll_n] = ll_lp + 1 And ds_tree.Object.plantype[ll_n] = 3 THEN ld_wfjgdays = ds_tree.Object.u_mtrldef_wfjgdays[ll_n] ll_mtrlid_tree = ds_tree.Object.mtrlid[ll_n] ll_wrkgrpid = ds_tree.Object.wrkGrpid[ll_n] ll_produce_wrkgrpid = ds_tree.Object.produce_wrkgrpid[ll_n] li_plantype = ds_tree.Object.plantype[ll_n] ls_status_tree = ds_tree.Object.status[ll_n] ls_woodcode_tree = ds_tree.Object.woodcode[ll_n] ls_pcode_tree = ds_tree.Object.pcode[ll_n] ldt_RqDate = DateTime(RelativeDate(Date(s_order_ut[ls_i].orderdate),-3),Time(0)) ldt_edate = DateTime(RelativeDate(Date(ldt_RqDate),0 - Int(ld_wfjgdays)),Time(0)) ds_tree.Object.u_orderrqmtrl_tree_rqdate[ll_n] = ldt_RqDate ds_tree.Object.u_orderrqmtrl_tree_edate[ll_n] = ldt_edate ds_tree.AcceptText() UPDATE u_orderrqmtrl SET u_orderrqmtrl.RqDate = :ldt_RqDate, u_orderrqmtrl.edate = :ldt_edate, u_orderrqmtrl.rqdate_ori = case when u_orderrqmtrl.rqdate_ori is NULL then u_orderrqmtrl.RqDate else u_orderrqmtrl.rqdate_ori END , u_orderrqmtrl.edate_ori = case when u_orderrqmtrl.edate_ori is NULL then u_orderrqmtrl.edate else u_orderrqmtrl.edate_ori END WHERE scid = :scid AND orderid = :s_order_ut[ls_i].porderid AND mtrlid = :ll_mtrlid_tree AND wrkgrpid = :ll_wrkgrpid AND status = :ls_status_tree AND woodcode = :ls_woodcode_tree AND pcode = :ls_pcode_tree And plantype = :li_plantype; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其它原因导致更新生产计划用料需求日期失败'+"~n"+sqlca.SQLErrText GOTO ext END IF FOR ll_o = ll_n + 1 To ds_tree.RowCount() IF ds_tree.Object.lp[ll_o] <= ll_lp + 1 THEN EXIT IF ds_tree.Object.plantype[ll_o] <> 2 And ds_tree.Object.plantype[ll_o] <> 3 THEN EXIT ll_mtrlid_tree = ds_tree.Object.mtrlid[ll_o] ll_wrkgrpid = ds_tree.Object.wrkGrpid[ll_o] ll_produce_wrkgrpid = ds_tree.Object.produce_wrkgrpid[ll_o] li_plantype = ds_tree.Object.plantype[ll_o] ls_status_tree = ds_tree.Object.status[ll_o] ls_woodcode_tree = ds_tree.Object.woodcode[ll_o] ls_pcode_tree = ds_tree.Object.pcode[ll_o] FOR ll_p = ll_o - 1 To 1 Step -1 IF ds_tree.Object.lp[ll_p] = ds_tree.Object.lp[ll_o] - 1 THEN ldt_rqdate_up = ds_tree.Object.u_orderrqmtrl_tree_rqdate[ll_p] ldt_edate_up = ds_tree.Object.u_orderrqmtrl_tree_edate[ll_p] EXIT END IF NEXT IF ds_tree.Object.plantype[ll_o] = 2 THEN ld_Relative = ds_tree.Object.u_mtrldef_buydays[ll_o] ELSEIF ds_tree.Object.plantype[ll_o] = 3 THEN ld_Relative = ds_tree.Object.u_mtrldef_wfjgdays[ll_o] END IF ldt_RqDate_tree = DateTime(RelativeDate(Date(ldt_edate_up),-3),Time(0)) ldt_edate_tree = DateTime(RelativeDate(Date(ldt_RqDate_tree),0 - Int(ld_Relative)),Time(0)) ds_tree.Object.u_orderrqmtrl_tree_rqdate[ll_o] = ldt_RqDate_tree ds_tree.Object.u_orderrqmtrl_tree_edate[ll_o] = ldt_edate_tree ds_tree.AcceptText() UPDATE u_orderrqmtrl SET u_orderrqmtrl.RqDate = :ldt_RqDate_tree, u_orderrqmtrl.edate = :ldt_edate_tree, u_orderrqmtrl.rqdate_ori = case when u_orderrqmtrl.rqdate_ori is NULL then u_orderrqmtrl.RqDate else u_orderrqmtrl.rqdate_ori END , u_orderrqmtrl.edate_ori = case when u_orderrqmtrl.edate_ori is NULL then u_orderrqmtrl.edate else u_orderrqmtrl.edate_ori END WHERE scid = :scid AND orderid = :s_order_ut[ls_i].porderid AND mtrlid = :ll_mtrlid_tree AND wrkgrpid = :ll_wrkgrpid AND status = :ls_status_tree AND woodcode = :ls_woodcode_tree AND pcode = :ls_pcode_tree And plantype = :li_plantype; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其它原因导致更新生产计划用料需求日期失败'+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT ll_n = ll_o - 1 END IF NEXT END IF END IF END IF END IF END IF IF uo_option_order_ml_add_use_wkp = 1 THEN IF s_order_ut[ls_i].ordertype <> 4 THEN IF uof_order_add_wkp_tmp(scid,ll_orderid[ls_i],s_order_ut[ls_i].tmpid,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '生成工组进度失败,'+arg_msg GOTO ext END IF END IF END IF //更新主计划自制需求指令单数量yyx20120815 IF s_order_ut[ls_i].ordertype = 4 And s_order_ut[ls_i].pzlorderid = 0 THEN IF uof_update_orderrqmtrl_zlqty(scid,s_order_ut[ls_i].porderid,s_order_ut[ls_i].mtrlid,& s_order_ut[ls_i].wrkGrpid,s_order_ut[ls_i].status_mode,s_order_ut[ls_i].woodcode,& s_order_ut[ls_i].pcode,s_order_ut[ls_i].orderqty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF // //加入进仓计划 IF s_order_ut[ls_i].inwareflag = 1 THEN INSERT INTO u_order_zl_planmx (scid,orderid,aps_plancode,begindate,enddate,orderqty) VALUES(:scid,:ll_orderid[ls_i],'', :s_order_ut[ls_i].orderdate, :s_order_ut[ls_i].requiredate, :s_order_ut[ls_i].orderqty); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入进仓计划操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF NEXT FOR ll_fp = 1 To ll_fp_array IF uo_fp_plan.uof_plan_add(s_fp_plan.scid[ll_fp],& s_fp_plan.mtrlwareid[ll_fp],s_fp_plan.assigntype[ll_fp],& s_fp_plan.relbillid[ll_fp],s_fp_plan.relprintid[ll_fp],& s_fp_plan.planassignqty[ll_fp],& '',publ_operator,s_fp_plan.plantype[ll_fp],& s_fp_plan.plankind[ll_fp],s_fp_plan.plankind_relbillid[ll_fp],& s_fp_plan.plankind_relprintid[ll_fp],2,s_fp_plan.mtrlid[ll_fp],& s_fp_plan.status[ll_fp],s_fp_plan.woodcode[ll_fp],s_fp_plan.pcode[ll_fp],arg_msg,False) = 0 THEN arg_msg = '明细行:'+String(ll_fp)+',保存库存分配计划明细表失败,'+arg_msg rslt = 0 GOTO ext END IF NEXT orderid_arr = ll_orderid orderqty_arr = ll_orderqty_array ext: IF rslt = 0 THEN ROLLBACK; p_clearmx() ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF Destroy ds_tree Destroy uo_fp_plan Return(rslt) end function public function integer update (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1 Long cnt = 0,ls_j String ls_mtrlcode Decimal ld_SaleQty,ld_AssignQty,ld_ordermx_qty,ld_this_orderqty Decimal ld_upddrate,ld_upddqty Long ll_fp_array,ll_fp Int li_p_ordertype,li_p_ifpackpro,li_ifpack,li_ordertype_mtrldef Long ll_p_mtrlid,ll_p_taskid,ll_p_taskmxid Long ll_statustype Decimal ld_capacity,ld_capacity_zj s_mtrlcfg_expr s_pz[] String ls_status_zj long ll_i long ll_p_taskscid int li_ifbj decimal ld_notmrpqty s_mtrlware_assign_plan s_fp_plan uo_mtrlware_assign uo_fp_plan uo_fp_plan = Create uo_mtrlware_assign uo_fp_plan.commit_transaction = sqlca datastore ds_fp_plan_del ds_fp_plan_del = Create datastore ds_fp_plan_del.DataObject = 'ds_fp_plan_plankind_del' ds_fp_plan_del.SetTransObject(sqlca) IF uo_option_def_bom = -1000 THEN rslt = 0 arg_msg = '选项:[013]生产计划审核时需要检查是否已定义物料清单,读取初始默认值失败,操作取消!' GOTO ext END IF If uo_option_order_capacity = -1000 Then rslt = 0 arg_msg = '选项:[304]指令单保存按车间产能总量限制,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_bujian_notmrpqty = -1000 Then rslt = 0 arg_msg = '选项:[388]补件类型主计划下属的半成品不参与其他计划的可用数,读取初始默认值失败,操作取消!' Goto ext End If IF IsNull(billcode) THEN billcode = '' IF IsNull(ordertype) THEN ordertype = 0 IF IsNull(relcode) THEN relcode = '' IF IsNull(mtrlid) THEN mtrlid = 0 IF IsNull(status_mode) THEN status_mode = '' IF IsNull(woodcode) THEN woodcode = '' IF IsNull(pcode) THEN pcode = '' IF IsNull(orderqty) THEN orderqty = 0 IF IsNull(Assign_emp) THEN Assign_emp = '' IF IsNull(pfcode) THEN pfcode = '' IF IsNull(taskrelcode) THEN taskrelcode = '' IF IsNull(taskcode) THEN taskcode = '' IF IsNull(taskid) THEN taskid = 0 IF IsNull(taskmxid) THEN taskmxid = 0 IF IsNull(cusid) THEN cusid = 0 IF IsNull(wrkGrpid) THEN wrkGrpid = 0 IF IsNull(porderid) THEN porderid = 0 IF IsNull(pordercode) THEN pordercode = '' IF IsNull(gydscrp) THEN gydscrp = '' IF IsNull(pfklmode) THEN pfklmode = '' IF IsNull(dscrp) THEN dscrp = '' IF IsNull(secdscrp) THEN secdscrp = '' IF IsNull(thdscrp) THEN thdscrp = '' IF Len(dscrp) > 0 THEN dscrp = ' ' + dscrp IF IsNull(storageid) THEN storageid = 0 IF IsNull(Level) THEN Level = 2 IF IsNull(typename) THEN typename = '' IF IsNull(p_taskrelcode) THEN p_taskrelcode = '' IF IsNull(cusname) THEN cusname = '' IF IsNull(outtypestr) THEN outtypestr = '' IF IsNull(iffg) THEN iffg = 0 IF IsNull(ifauto) THEN ifauto = 0 IF IsNull(fgid) THEN fgid = 0 if isnull(if_inherit) then if_inherit = 0 if isnull(addqty) then addqty = 0 if isnull(wpcode) then wpcode = '' if isnull(pctype) then pctype = 0 IF Assign_emp = '' THEN arg_msg = '请输入计划负责人' rslt = 0 GOTO ext END IF IF IsNull(orderdate) Or Year(Date(orderdate)) < 2001 THEN rslt = 0 arg_msg = "请输入合理计划日期" GOTO ext END IF if wpcode = '' then arg_msg = '请选择工价表号' rslt = 0 goto ext end if SELECT mtrlcode,ifpack,ordertype INTO :ls_mtrlcode,:li_ifpack,:li_ordertype_mtrldef FROM u_mtrldef Where mtrlid = :mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料编码失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_option_def_bom = 1 THEN IF pfcode = '' THEN arg_msg = '物料:'+ls_mtrlcode+'请选择物料清单' rslt = 0 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_mtrl_pf WHERE mtrlid = :mtrlid And pfcode = :pfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+ls_mtrlcode+'对应物料清单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt <> 1 THEN arg_msg = '物料:'+ls_mtrlcode+'不存在或重复物料清单:'+pfcode rslt = 0 GOTO ext END IF END IF Select mtrlcode, statusflag, capacity * capaparm Into :ls_mtrlcode, :ll_statustype, :ld_capacity From u_mtrldef Where mtrlid = :mtrlid; If sqlca.SQLCode <> 0 Then arg_msg = '查询物料编号失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If ll_statustype = 2 Then ld_capacity = 0 f_checkpz(status_mode,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 = :mtrlid And Name = :ls_status_zj; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "查询子件 "+ls_status_zj+" 折算套数参数操作失败" Goto ext End If ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_i].qty) Next End If If uo_option_order_capacity = 1 then //And outscllflag = 1 Then DateTime server_dt,ldt_sdate,ldt_edate Decimal ld_capatotal,ld_capatotal_ot,ld_capacity_sum String ls_wrkgrpname Select Top 1 getdate() Into :server_dt From u_user; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "查询操作失败,日期 " Goto ext End If ldt_sdate = DateTime(Date(server_dt),Time(0)) ldt_edate = DateTime(Date(server_dt),Time('23:59:59')) Select capatotal,capatotal_ot,wrkgrpname Into :ld_capatotal,:ld_capatotal_ot,:ls_wrkgrpname From u_sc_wkp Where wrkGrpid = :wrkgrpid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询车间设定产能总量失败,车间ID:'+String(wrkgrpid) Goto ext End If Select sum(capacity) Into :ld_capacity_sum From u_order_ml Where orderdate >= :ldt_sdate And orderdate <= :ldt_edate And wrkGrpid = :wrkgrpid and orderid <> :orderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询车间当天已排产能失败,车间:'+ls_wrkgrpname Goto ext End If if isnull(ld_capacity_sum) then ld_capacity_sum = 0 If ld_capacity_sum + ld_capacity * orderqty > ld_capatotal + ld_capatotal_ot Then rslt = 0 arg_msg = '车间:'+ls_wrkgrpname+'当天已排产能:'+String(ld_capacity_sum,'#,##0.##########')+',车间设定产能总量:'+String(ld_capatotal + ld_capatotal_ot,'#,##0.##########')+',不能再排产能:'+String(ld_capacity * orderqty,'#,##0.##########') Goto ext End If End If IF ordertype = 1 THEN IF it_mxbt = 0 THEN arg_msg = '没有计划明细保存' rslt = 0 GOTO ext END IF IF it_mxbt = 1 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_cust Where cusid = :cusid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询客户资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt <> 1 THEN arg_msg = '不存在客户资料或客户资料重复' rslt = 0 GOTO ext END IF SELECT name INTO :cusname FROM u_cust Where cusid = :cusid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询客户资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF FOR ls_j = 1 To it_mxbt cnt = 0 SELECT count(*) INTO :cnt FROM u_saletaskmx WHERE scid = :s_order_mx[ls_j].taskscid AND taskid = :s_order_mx[ls_j].taskid And printid = :s_order_mx[ls_j].taskmxid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+ls_mtrlcode+'订单资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '不存在订单明细:'+ls_mtrlcode rslt = 0 GOTO ext END IF SELECT u_SaleTaskMx.pqty, u_SaleTaskMx.AssignQty, u_mtrldef.upddrate, u_mtrldef.upddqty INTO :ld_SaleQty, :ld_AssignQty, :ld_upddrate, :ld_upddqty FROM u_SaleTaskMx,u_mtrldef WHERE u_SaleTaskMx.mtrlid = u_mtrldef.mtrlid AND u_SaleTaskMx.scid = :s_order_mx[ls_j].taskscid AND u_SaleTaskMx.taskid = :s_order_mx[ls_j].taskid AND u_saletaskmx.printid = :s_order_mx[ls_j].taskmxid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询销售订单已排产数量失败!'+sqlca.SQLErrText rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_order_ml_mx WHERE u_order_ml_mx.taskid = :s_order_mx[ls_j].taskid AND u_order_ml_mx.taskscid = :s_order_mx[ls_j].taskscid AND u_order_ml_mx.taskmxid = :s_order_mx[ls_j].taskmxid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询是否已开生计划失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ld_ordermx_qty = 0 ld_this_orderqty = 0 IF cnt > 0 THEN SELECT sum(u_order_ml_mx.qty) INTO :ld_ordermx_qty FROM u_order_ml_mx WHERE u_order_ml_mx.taskid = :s_order_mx[ls_j].taskid AND u_order_ml_mx.taskscid = :s_order_mx[ls_j].taskscid AND u_order_ml_mx.taskmxid = :s_order_mx[ls_j].taskmxid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询已开生产计划数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT u_order_ml_mx.qty INTO :ld_this_orderqty FROM u_order_ml_mx WHERE u_order_ml_mx.scid = :arg_scid AND u_order_ml_mx.orderid = :arg_orderid AND u_order_ml_mx.taskid = :s_order_mx[ls_j].taskid AND u_order_ml_mx.taskscid = :s_order_mx[ls_j].taskscid AND u_order_ml_mx.taskmxid = :s_order_mx[ls_j].taskmxid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询修改前的已开生产计划数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF s_order_mx[ls_j].orderqty > ld_SaleQty * (1 + ld_upddrate) + ld_upddqty - ld_AssignQty - ld_ordermx_qty + ld_this_orderqty THEN arg_msg = '第'+String(ls_j)+'行待排产数只有:'+String(ld_SaleQty * (1 + ld_upddrate) + ld_upddqty - ld_AssignQty - ld_ordermx_qty + ld_this_orderqty,'#,##0.##########')+',不能再排产:'+String(s_order_mx[ls_j].orderqty,'#,##0.##########') rslt = 0 GOTO ext END IF NEXT END IF ELSEIF ordertype = 4 THEN IF porderid = 0 THEN arg_msg = '指令单没有主生产计划相关联' rslt = 0 GOTO ext END IF IF wrkGrpid = 0 THEN arg_msg = '指令单没有生产车间' rslt = 0 GOTO ext END IF SELECT u_order_ml.taskrelcode, u_order_ml.cusname, u_order_ml.ordertype, u_order_ml.mtrlid, u_mtrldef.ifpackpro, u_order_ml.taskid, u_order_ml.taskmxid, u_order_ml.taskscid INTO :p_taskrelcode, :cusname, :li_p_ordertype, :ll_p_mtrlid, :li_p_ifpackpro, :ll_p_taskid, :ll_p_taskmxid, :ll_p_taskscid FROM u_order_ml,u_mtrldef WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid AND u_order_ml.scid = :scid And u_order_ml.orderid = :porderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询相关主生产计划信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF Select u_saletype.ifbj Into :li_ifbj From u_SaleTask Inner JOIN u_saletype ON u_SaleTask.typeid = u_saletype.typeid Where u_SaleTask.scid = :ll_p_taskscid And u_saletask.taskid = :ll_p_taskid; If sqlca.SQLCode <> 0 Then li_ifbj = 0 If li_ifbj = 1 And uo_option_bujian_notmrpqty = 1 Then ld_notmrpqty = orderqty Else ld_notmrpqty = 0 End If cnt = 0 SELECT count(*) INTO :cnt FROM u_sc_wkp Where wrkGrpid = :wrkGrpid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询车间资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF UPDATE u_order_ml SET relcode = :relcode, orderdate = :orderdate, requiredate = :requiredate, orderqty = :orderqty, modemp = :publ_operator, moddate = getdate(), dscrp = :dscrp, Assign_emp = :Assign_emp, taskrelcode = :taskrelcode, billcode = :billcode, status_mode = :status_mode, woodcode = :woodcode, pcode = :pcode, pfcode = :pfcode, taskid = :taskid, taskmxid = :taskmxid, taskcode = :taskcode, cusid = :cusid, mtrlid = :mtrlid, wrkGrpid = :wrkGrpid, gydscrp = :gydscrp, pfqty = :pfqty, porderid = :porderid, pordercode = :pordercode, secdscrp = :secdscrp, thdscrp = :thdscrp, perfinishdate = :perfinishdate, storageid = :storageid, level = :Level, typename = :typename, p_taskrelcode = :p_taskrelcode, cusname = :cusname, outtypestr = :outtypestr, iffg = :iffg, ifauto = :ifauto, if_inherit = :if_inherit, addqty = :addqty, capacity = :ld_capacity * :orderqty, wpcode = :wpcode, pctype = :pctype, notmrpqty = :ld_notmrpqty WHERE u_order_ml.orderid = :arg_orderid AND u_order_ml.scid = :arg_scid And status = 0 ; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新计划操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_order_ml_mx WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致删除计划明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //删除原有分配计划明细 ds_fp_plan_del.Retrieve(arg_scid,arg_orderid,1) IF ds_fp_plan_del.RowCount() > 0 THEN IF ds_fp_plan_del.Object.sumassignqty[1] > 0 THEN rslt = 0 arg_msg = "原分配计划明细已有分配数,操作取消" GOTO ext END IF END IF FOR ll_fp = 1 To ds_fp_plan_del.RowCount() IF uo_fp_plan.uof_plan_del(ds_fp_plan_del.Object.id[ll_fp],& ds_fp_plan_del.Object.qty[ll_fp],arg_msg,False) = 0 THEN arg_msg = '删除分配计划失败,'+arg_msg rslt = 0 GOTO ext END IF NEXT /////////////////////////////////// // FOR ls_j = 1 To it_mxbt Long ll_taskid String ls_taskcode IF ordertype <> 4 THEN ll_taskid = s_order_mx[ls_j].taskid ls_taskcode = s_order_mx[ls_j].taskcode ELSE ll_taskid = s_order_mx[ls_j].porderid ls_taskcode = s_order_mx[ls_j].pordercode END IF INSERT INTO u_order_ml_mx (scid, orderid, taskid, taskmxid, taskcode, cusid, qty, taskscid) VALUES( :arg_scid, :arg_orderid, :ll_taskid, :s_order_mx[ls_j].taskmxid, :ls_taskcode, :s_order_mx[ls_j].cusid, :s_order_mx[ls_j].orderqty, :s_order_mx[ls_j].taskscid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入计划明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF inwareflag = 1 THEN IF ordertype = 4 And li_p_ordertype = 1 THEN IF s_order_mx[ls_j].iffp = 1 And s_order_mx[ls_j].porderid > 0 THEN ll_fp_array++ s_fp_plan.planid[ll_fp_array] = 0 CHOOSE CASE li_p_ifpackpro CASE 0,3,4 IF li_ordertype_mtrldef = 1 And ll_p_mtrlid = mtrlid THEN s_fp_plan.assigntype[ll_fp_array] = 1 s_fp_plan.relbillid[ll_fp_array] = ll_p_taskid s_fp_plan.relprintid[ll_fp_array] = ll_p_taskmxid ELSE s_fp_plan.assigntype[ll_fp_array] = 0 s_fp_plan.relbillid[ll_fp_array] = s_order_mx[ls_j].porderid s_fp_plan.relprintid[ll_fp_array] = 0 END IF CASE 1,2 IF li_ifpack > 0 THEN s_fp_plan.assigntype[ll_fp_array] = 1 s_fp_plan.relbillid[ll_fp_array] = ll_p_taskid s_fp_plan.relprintid[ll_fp_array] = ll_p_taskmxid ELSE s_fp_plan.assigntype[ll_fp_array] = 0 s_fp_plan.relbillid[ll_fp_array] = s_order_mx[ls_j].porderid s_fp_plan.relprintid[ll_fp_array] = 0 END IF END CHOOSE s_fp_plan.plantype[ll_fp_array] = 1 s_fp_plan.plankind[ll_fp_array] = 1 s_fp_plan.plankind_relbillid[ll_fp_array] = arg_orderid s_fp_plan.plankind_relprintid[ll_fp_array] = 0 s_fp_plan.scid[ll_fp_array] = arg_scid s_fp_plan.mtrlwareid[ll_fp_array] = 0 s_fp_plan.planassignqty[ll_fp_array] = s_order_mx[ls_j].orderqty s_fp_plan.mtrlid[ll_fp_array] = s_order_mx[ls_j].mtrlid s_fp_plan.status[ll_fp_array] = s_order_mx[ls_j].status_mode s_fp_plan.woodcode[ll_fp_array] = s_order_mx[ls_j].woodcode s_fp_plan.pcode[ll_fp_array] = s_order_mx[ls_j].pcode END IF ELSEIF ordertype = 1 THEN IF s_order_mx[ls_j].iffp = 1 And s_order_mx[ls_j].porderid > 0 THEN ll_fp_array++ s_fp_plan.planid[ll_fp_array] = 0 s_fp_plan.assigntype[ll_fp_array] = 1 s_fp_plan.plantype[ll_fp_array] = 1 s_fp_plan.plankind[ll_fp_array] = 1 s_fp_plan.plankind_relbillid[ll_fp_array] = arg_orderid s_fp_plan.plankind_relprintid[ll_fp_array] = 0 s_fp_plan.scid[ll_fp_array] = arg_scid s_fp_plan.mtrlwareid[ll_fp_array] = 0 s_fp_plan.relbillid[ll_fp_array] = s_order_mx[ls_j].taskid s_fp_plan.relprintid[ll_fp_array] = s_order_mx[ls_j].taskmxid s_fp_plan.planassignqty[ll_fp_array] = s_order_mx[ls_j].orderqty s_fp_plan.mtrlid[ll_fp_array] = s_order_mx[ls_j].mtrlid s_fp_plan.status[ll_fp_array] = s_order_mx[ls_j].status_mode s_fp_plan.woodcode[ll_fp_array] = s_order_mx[ls_j].woodcode s_fp_plan.pcode[ll_fp_array] = s_order_mx[ls_j].pcode END IF END IF END IF NEXT FOR ll_fp = 1 To ll_fp_array IF uo_fp_plan.uof_plan_add(s_fp_plan.scid[ll_fp],& s_fp_plan.mtrlwareid[ll_fp],s_fp_plan.assigntype[ll_fp],& s_fp_plan.relbillid[ll_fp],s_fp_plan.relprintid[ll_fp],& s_fp_plan.planassignqty[ll_fp],& '',publ_operator,s_fp_plan.plantype[ll_fp],& s_fp_plan.plankind[ll_fp],s_fp_plan.plankind_relbillid[ll_fp],& s_fp_plan.plankind_relprintid[ll_fp],2,s_fp_plan.mtrlid[ll_fp],& s_fp_plan.status[ll_fp],s_fp_plan.woodcode[ll_fp],s_fp_plan.pcode[ll_fp],arg_msg,False) = 0 THEN arg_msg = '明细行:'+String(s_fp_plan.plankind_relprintid[ll_fp])+',保存库存分配计划明细表失败,'+arg_msg rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; p_clearmx() ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF Destroy uo_fp_plan Destroy ds_fp_plan_del Return(rslt) end function public function integer addmxcmpl (long arg_scid, long arg_orderid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0,ll_mtrlid,ll_mtrlid_p Decimal ld_orderqty,ld_acmpqty,ld_inqty,ld_inqty_update Long j String ls_aps_plancode String ls_mtrlname,ls_mtrlcode datastore ds_order_inplanmx ds_order_inplanmx = Create datastore If arg_addqty > 0 Then ds_order_inplanmx.DataObject = 'ds_aps_order_plancode_in' Else ds_order_inplanmx.DataObject = 'ds_aps_order_plancode_in_cancel' End If ds_order_inplanmx.SetTransObject(sqlca) If uo_option_order_bh_use_yc = -1000 Then rslt = 0 arg_msg = '选项:[074]备货生产计划选销售预测单,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_ifovertask_cp = -1000 Then rslt = 0 arg_msg = '选项:[112]超生产计划进仓,读取初始默认值失败,操作取消!' Goto ext End If uo_saletask uo_task uo_task = Create uo_saletask uo_task.commit_transaction = sqlca rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) If rslt = 0 Then Goto ext If arg_addqty = 0 Then arg_msg = '没有完成数量' rslt = 0 Goto ext End If If status <> 1 And status <> 5 Then rslt = 0 arg_msg = "计划["+ordercode+"]只有在进行或完成状态下才可以执行操作" Goto ext End If Select mtrlname,mtrlcode,u_order_ml.mtrlid Into :ls_mtrlname,:ls_mtrlcode,:ll_mtrlid From u_mtrldef,u_order_ml Where u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid And u_mtrldef.mtrlid = u_order_ml.mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或错误产品唯一码导致查询产品操作失败" Goto ext End If Decimal ld_uprate,ld_upqty If uo_option_ifovertask_cp = 1 or uo_option_ifovertask_cp = 4 Then //不允许超收 //检查是否完成 Select orderqty - stopqty,acmpqty Into :ld_orderqty,:ld_acmpqty From u_order_ml Where ( orderid = :arg_orderid ) And ( scid = :arg_scid ); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或错误查询产品唯一码或计划计划数和完成数量操作失败" Goto ext End If If ld_orderqty < arg_addqty + ld_acmpqty Then rslt = 0 arg_msg = '该计划明细产品['+ls_mtrlname+']未完成数量'+String(ld_orderqty - ld_acmpqty,'#,##0.00##' )+'小于本次完成数量' Goto ext End If ElseIf uo_option_ifovertask_cp = 3 Then //允许超收但按比例限制 Select uprate , upqty Into :ld_uprate,:ld_upqty From u_mtrldef Where mtrlid = :ll_mtrlid; If sqlca.SQLCode <> 0 Then arg_msg = '查询物料:'+Trim(ls_mtrlcode)+'超收货比例失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If Select orderqty - stopqty,acmpqty Into :ld_orderqty,:ld_acmpqty From u_order_ml Where ( orderid = :arg_orderid ) And ( scid = :arg_scid ); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或错误查询产品唯一码或计划计划数和完成数量操作失败" Goto ext End If If ld_orderqty * (1 + ld_uprate) + ld_upqty < arg_addqty + ld_acmpqty Then rslt = 0 arg_msg = '该计划明细产品['+ls_mtrlname+']未完成数量'+String(ld_orderqty - ld_acmpqty,'#,##0.00##' )+',允许超收上限:'+String(ld_orderqty * (1 + ld_uprate) + ld_upqty - ld_acmpqty,'#,##0.00##' )+',小于本次完成数量:'+String(arg_addqty,'#,##0.00##' ) Goto ext End If End If Update u_order_ml Set acmpqty = acmpqty + :arg_addqty Where ( orderid = :arg_orderid ) And ( scid = :arg_scid ); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或错误产品唯一码导致更新生产计划完成数量操作失败"+"~n"+sqlca.SQLErrText Goto ext End If uo_order_ml uo_order uo_order = Create uo_order_ml Long ls_i If getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then rslt = 0 Goto ext End If Decimal ld_addqty,ld_noinwareqty,ld_addinqty,ld_inwareqty,ld_saleqty ld_addqty = arg_addqty If ordertype = 0 And uo_option_order_bh_use_yc = 1 Then If ld_addqty > 0 Then For ls_i = 1 To it_mxbt If s_order_mx[ls_i].taskid > 0 Then Select SaleQty , inwareQty Into :ld_saleqty,:ld_inwareqty From u_saletaskmx Where scid = :s_order_mx[ls_i].taskscid And taskid = :s_order_mx[ls_i].taskid And printid = :s_order_mx[ls_i].taskmxid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询相关订单明细未进仓数失败'+"~n"+sqlca.SQLErrText Goto ext End If ld_noinwareqty = ld_saleqty - ld_inwareqty If ld_noinwareqty > 0 Then If ld_addqty > ld_noinwareqty Then ld_addinqty = ld_noinwareqty ld_addqty = ld_addqty - ld_noinwareqty Else ld_addinqty = ld_addqty ld_addqty = 0 End If If uo_task.updateinwareqty(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,s_order_mx[ls_i].taskmxid,ld_addinqty,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If If uo_task.trycmptask_fore(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,arg_msg,False) = 0 Then rslt = 0 Goto ext End If If ld_addqty = 0 Then Exit End If Next Else For ls_i = it_mxbt To 1 Step -1 If s_order_mx[ls_i].taskid > 0 Then Select SaleQty , inwareQty Into :ld_saleqty,:ld_inwareqty From u_saletaskmx Where scid = :s_order_mx[ls_i].taskscid And taskid = :s_order_mx[ls_i].taskid And printid = :s_order_mx[ls_i].taskmxid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询相关订单明细未进仓数失败'+"~n"+sqlca.SQLErrText Goto ext End If If ld_inwareqty > 0 Then If 0 - ld_addqty > ld_inwareqty Then ld_addinqty = 0 - ld_inwareqty ld_addqty = ld_addqty + ld_inwareqty Else ld_addinqty = ld_addqty ld_addqty = 0 End If End If If uo_task.updateinwareqty(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,s_order_mx[ls_i].taskmxid,ld_addinqty,arg_msg,False) = 0 Then rslt = 0 Goto ext End If If uo_task.trycmptask_fore(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,arg_msg,False) = 0 Then rslt = 0 Goto ext End If If ld_addqty = 0 Then Exit End If Next End If End If //更新分离排产产品上级计划完成数 If ordertype = 4 And porderid > 0 And pzlorderid = 0 Then Long ll_cnt_order Select count(*) Into :ll_cnt_order From u_order_ml Where scid = :scid And orderid = :porderid; If sqlca.SQLCode <> 0 Then arg_msg = '查询相关生产计划失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If ll_cnt_order > 0 Then If uo_order.f_assign_inqty(scid,porderid,wrkGrpid,0,& mtrlid,ls_mtrlcode,status_mode,& woodcode,pcode,arg_addqty,arg_msg,False) = 0 Then rslt = 0 Goto ext End If Select u_order_ml.mtrlid Into :ll_mtrlid_p From u_order_ml Where u_order_ml.orderid = :porderid And u_order_ml.scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "查询主生产计划物料ID失败,"+sqlca.SQLErrText Goto ext End If If ll_mtrlid_p = ll_mtrlid Then If uo_order.addmxcmpl(arg_scid,porderid,arg_addqty,arg_msg,False) = 0 Then rslt = 0 Goto ext End If If uo_order.tryfinishorder(arg_scid,porderid,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If End If End If //更新进仓计划 If inwareflag = 1 Then ds_order_inplanmx.Retrieve(arg_scid,arg_orderid) If arg_addqty > 0 Then ld_inqty = arg_addqty If ds_order_inplanmx.RowCount() = 0 Then arg_msg = '指令单没有排程批次,请检查' rslt = 0 Goto ext End If For j = 1 To ds_order_inplanmx.RowCount() If ld_inqty = 0 Then Exit If j = ds_order_inplanmx.RowCount() Then ld_inqty_update = ld_inqty ld_inqty = 0 Else If ds_order_inplanmx.Object.notinqty[j] <= 0 Then Continue If ld_inqty > ds_order_inplanmx.Object.notinqty[j] Then ld_inqty_update = ds_order_inplanmx.Object.notinqty[j] ld_inqty = ld_inqty - ds_order_inplanmx.Object.notinqty[j] Else ld_inqty_update = ld_inqty ld_inqty = 0 End If End If ls_aps_plancode = ds_order_inplanmx.Object.aps_plancode[j] Update u_order_zl_planmx Set inqty = inqty + :ld_inqty_update Where scid = :arg_scid And orderid = :arg_orderid And aps_plancode = :ls_aps_plancode; If sqlca.SQLCode <> 0 Then arg_msg = '更新进仓计划已进仓数失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If Next // IF ld_inqty > 0 THEN // arg_msg = '进仓计划有余数,请检查' // rslt = 0 // GOTO ext // END IF Else ld_inqty = Abs(arg_addqty) If ds_order_inplanmx.RowCount() = 0 Then arg_msg = '指令单没有排程批次,请检查' rslt = 0 Goto ext End If For j = 1 To ds_order_inplanmx.RowCount() If ld_inqty = 0 Then Exit If ld_inqty > ds_order_inplanmx.Object.inqty[j] Then ld_inqty_update = ds_order_inplanmx.Object.inqty[j] ld_inqty = ld_inqty - ds_order_inplanmx.Object.inqty[j] Else ld_inqty_update = ld_inqty ld_inqty = 0 End If ls_aps_plancode = ds_order_inplanmx.Object.aps_plancode[j] Update u_order_zl_planmx Set inqty = inqty - :ld_inqty_update Where scid = :arg_scid And orderid = :arg_orderid And aps_plancode = :ls_aps_plancode; If sqlca.SQLCode <> 0 Then arg_msg = '更新进仓计划已进仓数失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If Next If ld_inqty > 0 Then arg_msg = '进仓计划有余数,请检查' rslt = 0 Goto ext End If End If End If ext: If rslt = 0 Then Rollback; ElseIf arg_ifcommit And rslt = 1 Then Commit; End If Destroy uo_order p_reset() Return (rslt) end function private function integer p_getinfo (long arg_scid, long arg_orderid, ref string arg_msg);Int rslt = 1,i = 1,no_mxcheck = 0 IF arg_orderid <= 0 THEN rslt = 0 arg_msg = '错误生产计划唯一码' GOTO ext END IF SELECT u_Order_ml.OrderCode, u_Order_ml.relcode, u_Order_ml.orderdate, u_Order_ml.mtrlid, u_Order_ml.Status, u_Order_ml.status_mode, u_Order_ml.woodcode, u_Order_ml.pcode, u_Order_ml.orderqty, u_Order_ml.AcmpQty, u_Order_ml.stopqty, u_Order_ml.Requiredate, u_Order_ml.Accomplishdate, u_Order_ml.Accomplishemp, u_Order_ml.Opemp, u_Order_ml.Permit_emp, u_Order_ml.Permit_date, u_Order_ml.Opdate, u_Order_ml.stopemp, u_Order_ml.Dscrp, u_Order_ml.Modemp, u_Order_ml.moddate, u_Order_ml.Assign_emp, u_Order_ml.ordertype, u_Order_ml.taskrelcode, u_Order_ml.pfcode, u_Order_ml.taskid, u_Order_ml.taskmxid, u_Order_ml.taskcode, u_Order_ml.cusid, u_Order_ml.ctmint, u_Order_ml.porderid, u_Order_ml.pordercode, u_Order_ml.scllflag, u_Order_ml.scllsecflag, u_Order_ml.relrqbuyid, u_Order_ml.relrqbuycode, u_Order_ml.planqty, u_Order_ml.wrkGrpid, u_Order_ml.gydscrp, u_Order_ml.pfklmode, u_Order_ml.relrqwfjgid, u_Order_ml.relrqwfjgcode, u_order_ml.pforderid, u_order_ml.pfordercode, u_order_ml.pfqty, u_order_ml.taskscid, u_order_ml.perfinishdate, u_order_ml.stopjj, u_order_ml.stopjjemp, u_order_ml.stopjjdate, u_order_ml.stopjjreason, u_order_ml.storageid, u_order_ml.capacity, u_order_ml.inwareflag, u_order_ml.outscllflag, u_order_ml.pzlorderid, u_order_ml.secdscrp, u_order_ml.thdscrp, u_order_ml.Level, u_order_ml.typename, u_mtrldef.ifpackpro, u_order_ml.iffg, u_order_ml.ifauto, u_order_ml.okplan_flag, u_order_ml.if_inherit, u_order_ml.addqty, u_order_ml.ifwforder, u_order_ml.wpcode, u_order_ml.pctype, u_order_ml.ifpban, u_order_ml.ifupban INTO :OrderCode, :relcode, :orderdate, :mtrlid, :Status, :status_mode, :woodcode, :pcode, :orderqty, :AcmpQty, :stopqty, :Requiredate, :Accomplishdate, :Accomplishemp, :Opemp, :Permit_emp, :Permit_date, :Opdate, :stopemp, :Dscrp, :Modemp, :moddate, :Assign_emp, :ordertype, :taskrelcode, :pfcode, :taskid, :taskmxid, :taskcode, :cusid, :ctmint, :porderid, :pordercode, :scllflag, :scllsecflag, :relrqbuyid, :relrqbuycode, :planqty, :wrkGrpid, :gydscrp, :pfklmode, :relrqwfjgid, :relrqwfjgcode, :pforderid, :pfordercode, :pfqty, :taskscid, :perfinishdate, :stopjj, :stopjjemp, :stopjjdate, :stopjjreason, :storageid, :capacity, :inwareflag, :outscllflag, :pzlorderid, :secdscrp, :thdscrp, :Level, :typename, :ifpackpro_mtrl, :iffg, :ifauto, :okplan_flag, :if_inherit, :addqty, :ifwforder, :wpcode, :pctype, :ifpban, :ifupban FROM u_Order_ml inner join u_mtrldef on u_Order_ml.mtrlid = u_mtrldef.mtrlid WHERE u_order_ml.orderid = :arg_orderid AND u_Order_ml.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产计划内容失败(错误生产计划唯一码)' GOTO ext END IF scid = arg_scid orderid = arg_orderid ext: IF rslt = 0 THEN p_reset() RETURN rslt end function private function integer p_clearmx ();//int p_clearmx() //清除明细 it_mxbt = 0 it_mxbt_ut = 0 it_mxbt_wrk = 0 RETURN 1 end function public function integer newbegin (long arg_scid);Long rslt = 1 p_reset() scid = arg_scid RETURN rslt end function public function integer update_bom (long arg_scid, long arg_orderid, string arg_pfcode, ref string arg_msg); Int rslt = 1 Long cnt = 0 Int li_ifpackpro rslt = p_getinfo(arg_scid,arg_orderid, arG_MSG) IF rslt = 0 THEN GOTO ext IF status <> 1 THEN rslt = 0 arG_MSG = "只有在进行状态下才能重选清单" GOTO ext END IF // IF scllflag = 1 THEN rslt = 0 arG_MSG = "计划已执行用料初审,不能重选清单" GOTO ext END IF IF scllsecflag = 1 THEN rslt = 0 arG_MSG = "计划已执行用料终审,不能重选清单" GOTO ext END IF // //检查是否已开指令单,申购单,外协申请单 IF uof_check_if_zl(arg_scid,arg_orderid,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF uof_check_if_rbuy(arg_scid,arg_orderid,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF uof_check_if_wfjg(arg_scid,arg_orderid,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF // SELECT count(*) INTO :cnt FROM u_mtrl_pf WHERE mtrlid = :mtrlid And pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN arG_MSG = '查询产品BOM资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN arG_MSG = '产品BOM资料不存在' rslt = 0 GOTO ext END IF SELECT ifpackpro INTO :li_ifpackpro FROM u_mtrldef Where mtrlid = :mtrlid; IF sqlca.SQLCode <> 0 THEN arG_MSG = '查询计划物料包件产品属性失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_ifpackpro = 2 And pfcode <> arg_pfcode THEN DELETE FROM u_saletaskmx_pf WHERE scid = :arg_scid AND taskid = :taskid And printid = :taskmxid; IF sqlca.SQLCode <> 0 THEN arG_MSG = '主生产计划对应销售订单明细删除包件清单明细失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF INSERT INTO u_saletaskmx_pf (scid, taskid, printid, mtrlid, sonmtrlid, status, woodcode, pcode, Sonscale, Sonscale_fm) SELECT :arg_scid, :taskid, :taskmxid, :MtrlID, u_prdpf.sonmtrlid, case u_prdpf.ifover when 0 then u_prdpf.status when 1 then case when u_prdpf.dipztype=0 or u_prdpf.dipztype=3 or u_prdpf.dipztype=5 or u_prdpf.dipztype=6 then :status_mode else '' END END, case u_prdpf.ifover when 0 then u_prdpf.woodcode when 1 then case when u_prdpf.dipztype=1 or u_prdpf.dipztype=3 or u_prdpf.dipztype=4 or u_prdpf.dipztype=6 then :woodcode else '' END END, case u_prdpf.ifover when 0 then u_prdpf.pcode when 1 then case when u_prdpf.dipztype=2 or u_prdpf.dipztype=4 or u_prdpf.dipztype=5 or u_prdpf.dipztype=6 then :pcode else '' END END, u_prdpf.sonscale, 1 FROM u_prdpf,u_mtrldef WHERE u_prdpf.mtrlid = :MtrlID AND u_prdpf.pfcode = :arg_pfcode AND u_prdpf.sonmtrlid = u_mtrldef.mtrlid AND u_mtrldef.ifpack > 0; IF sqlca.SQLCode <> 0 THEN arg_msg = '新建主生产计划对应销售订单明细包件清单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END if UPDATE u_order_ml SET pfcode = :arg_pfcode WHERE u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致更新计划BOM失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 1 THEN COMMIT; else rollback; END IF p_reset() Return (rslt) end function public function integer uof_finish_procode_qty (long arg_scid, long arg_orderid, string arg_procode, integer arg_type, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_finishflag DateTime null_dt SetNull(null_dt) IF uo_option_ml_wkp = -1000 THEN rslt = 0 arg_msg = '选项:[047]生产计划直接确认车间完成,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_ml_wkp = 0 THEN arg_msg = '系统没有设置为直接确认生产计划车间完成' rslt = 0 GOTO ext END IF SELECT finishflag INTO :li_finishflag FROM U_OrderRqwp WHERE scid = :arg_scid AND orderid = :arg_orderid AND Procode = :arg_procode; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询工序完成标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_type = 0 THEN IF li_finishflag = 1 THEN arg_msg = '工序已确认完成,不能再确认' rslt = 0 GOTO ext END IF UPDATE U_OrderRqwp SET finishflag = 1, finishdate = getdate(), finishqty = proqty WHERE scid = :arg_scid AND orderid = :arg_orderid AND Procode = :arg_procode AND finishflag = 0; IF sqlca.SQLCode <> 0 THEN arg_msg = '确认工序完成失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ELSE IF li_finishflag = 0 THEN arg_msg = '工序还未确认,不能取消确认' rslt = 0 GOTO ext END IF UPDATE U_OrderRqwp SET finishflag = 0, finishdate = :null_dt, finishqty = 0 WHERE scid = :arg_scid AND orderid = :arg_orderid AND Procode = :arg_procode AND finishflag = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '取消确认工序完成失败,'+sqlca.SQLErrText rslt = 0 GOTO ext 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_planqty (long arg_scid, long arg_orderid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 long cnt = 0 Dec ld_orderqty,ld_planqty String ls_mtrlname rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) IF rslt = 0 THEN GOTO ext IF arg_addqty = 0 THEN arg_msg = '没有完成数量' rslt = 0 GOTO ext END IF IF status <> 1 THEN rslt = 0 arg_msg = "计划["+ordercode+"]只有在进行状态下才可以执行操作" GOTO ext END IF SELECT mtrlname INTO :ls_mtrlname FROM u_mtrldef,u_order_ml Where u_order_ml.orderid = :arg_orderid and u_order_ml.scid = :arg_scid and u_mtrldef.mtrlid = u_order_ml.mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品唯一码导致查询产品操作失败" GOTO ext END IF //检查是否完成 SELECT orderqty,planqty INTO :ld_orderqty,:ld_planqty FROM u_order_ml WHERE ( orderid = :arg_orderid ) AND ( scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误查询产品唯一码或计划计划数和已排程数量操作失败" GOTO ext END IF IF status = 1 THEN IF ld_orderqty < arg_addqty + ld_planqty THEN rslt = 0 arg_msg = '该计划明细产品:'+ls_mtrlname+',未排程数'+String(ld_orderqty - ld_planqty,'#,##0.00##' )+'小于本次排程数' GOTO ext END IF END IF UPDATE u_order_ml SET planqty = planqty + :arg_addqty WHERE ( orderid = :arg_orderid ) AND ( scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品唯一码导致更新生产计划完成数量操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF p_reset() RETURN (rslt) end function private subroutine p_replace_mx ();Long ll_i,ll_j FOR ll_i = 1 TO it_mxbt If ( s_order_mx[ll_i].ordertype = 1 AND uo_option_unite_order_ml = 1 OR & s_order_mx[ll_i].ordertype = 4 AND uo_option_unite_order_ml_zl = 1 OR & s_order_mx[ll_i].ordertype = 0 AND uo_option_order_bh_use_yc = 1 ) THEN FOR ll_j = 1 TO it_mxbt_ut IF s_order_ut[ll_j].utid = s_order_mx[ll_i].utid THEN s_order_ut[ll_j].orderqty = s_order_ut[ll_j].orderqty + s_order_mx[ll_i].orderqty s_order_ut[ll_j].pfqty = s_order_ut[ll_j].pfqty + s_order_mx[ll_i].pfqty s_order_ut[ll_j].capacity = s_order_ut[ll_j].capacity + s_order_mx[ll_i].capacity s_order_ut[ll_j].addqty = s_order_ut[ll_j].addqty + s_order_mx[ll_i].addqty s_order_ut[ll_j].notmrpqty = s_order_ut[ll_j].notmrpqty + s_order_mx[ll_i].notmrpqty s_order_ut[ll_j].taskcode = s_order_ut[ll_j].taskcode + ','+s_order_mx[ll_i].taskcode s_order_ut[ll_j].taskrelcode = '' s_order_ut[ll_j].cusid = 0 s_order_ut[ll_j].taskid = 0 s_order_ut[ll_j].taskmxid = 0 s_order_ut[ll_j].pzlorderid = 0 s_order_ut[ll_j].porderid = 0 s_order_ut[ll_j].pordercode = '' s_order_ut[ll_j].p_taskrelcode = '' s_order_ut[ll_j].cusname = '' s_order_ut[ll_j].outtypestr = '' GOTO next_ END IF NEXT END IF it_mxbt_ut++ s_order_ut[it_mxbt_ut].relcode = s_order_mx[ll_i].relcode s_order_ut[it_mxbt_ut].orderdate = s_order_mx[ll_i].orderdate s_order_ut[it_mxbt_ut].mtrlid = s_order_mx[ll_i].mtrlid s_order_ut[it_mxbt_ut].status_mode = s_order_mx[ll_i].status_mode s_order_ut[it_mxbt_ut].woodcode = s_order_mx[ll_i].woodcode s_order_ut[it_mxbt_ut].pcode = s_order_mx[ll_i].pcode s_order_ut[it_mxbt_ut].orderqty = s_order_mx[ll_i].orderqty s_order_ut[it_mxbt_ut].dscrp = s_order_mx[ll_i].dscrp s_order_ut[it_mxbt_ut].assign_emp = s_order_mx[ll_i].assign_emp s_order_ut[it_mxbt_ut].requiredate = s_order_mx[ll_i].requiredate s_order_ut[it_mxbt_ut].ordertype = s_order_mx[ll_i].ordertype s_order_ut[it_mxbt_ut].pfcode = s_order_mx[ll_i].pfcode s_order_ut[it_mxbt_ut].taskid = s_order_mx[ll_i].taskid s_order_ut[it_mxbt_ut].taskcode = s_order_mx[ll_i].taskcode s_order_ut[it_mxbt_ut].taskrelcode = s_order_mx[ll_i].taskrelcode s_order_ut[it_mxbt_ut].taskmxid = s_order_mx[ll_i].taskmxid s_order_ut[it_mxbt_ut].cusid = s_order_mx[ll_i].cusid s_order_ut[it_mxbt_ut].porderid = s_order_mx[ll_i].porderid s_order_ut[it_mxbt_ut].pordercode = s_order_mx[ll_i].pordercode s_order_ut[it_mxbt_ut].utid = s_order_mx[ll_i].utid s_order_ut[it_mxbt_ut].wrkGrpid = s_order_mx[ll_i].wrkGrpid s_order_ut[it_mxbt_ut].gydscrp = s_order_mx[ll_i].gydscrp s_order_ut[it_mxbt_ut].pfklmode = s_order_mx[ll_i].pfklmode s_order_ut[it_mxbt_ut].pforderid = s_order_mx[ll_i].pforderid s_order_ut[it_mxbt_ut].pfordercode = s_order_mx[ll_i].pfordercode s_order_ut[it_mxbt_ut].pfqty = s_order_mx[ll_i].pfqty s_order_ut[it_mxbt_ut].secdscrp = s_order_mx[ll_i].secdscrp s_order_ut[it_mxbt_ut].thdscrp = s_order_mx[ll_i].thdscrp s_order_ut[it_mxbt_ut].taskscid = s_order_mx[ll_i].taskscid s_order_ut[it_mxbt_ut].perfinishdate = s_order_mx[ll_i].perfinishdate s_order_ut[it_mxbt_ut].storageid = s_order_mx[ll_i].storageid s_order_ut[it_mxbt_ut].capacity = s_order_mx[ll_i].capacity s_order_ut[it_mxbt_ut].tmpid = s_order_mx[ll_i].tmpid s_order_ut[it_mxbt_ut].level = s_order_mx[ll_i].level s_order_ut[it_mxbt_ut].typename = s_order_mx[ll_i].typename s_order_ut[it_mxbt_ut].p_taskrelcode = s_order_mx[ll_i].p_taskrelcode s_order_ut[it_mxbt_ut].saletaskcode = s_order_mx[ll_i].saletaskcode s_order_ut[it_mxbt_ut].saletaskrelcode = s_order_mx[ll_i].saletaskrelcode s_order_ut[it_mxbt_ut].cusname = s_order_mx[ll_i].cusname s_order_ut[it_mxbt_ut].p_ordertype = s_order_mx[ll_i].p_ordertype s_order_ut[it_mxbt_ut].p_cusid = s_order_mx[ll_i].p_cusid s_order_ut[it_mxbt_ut].p_mtrlid = s_order_mx[ll_i].p_mtrlid s_order_ut[it_mxbt_ut].outtypestr = s_order_mx[ll_i].outtypestr s_order_ut[it_mxbt_ut].pzlorderid = s_order_mx[ll_i].pzlorderid s_order_ut[it_mxbt_ut].inwareflag = s_order_mx[ll_i].inwareflag s_order_ut[it_mxbt_ut].outscllflag = s_order_mx[ll_i].outscllflag s_order_ut[it_mxbt_ut].iffg = s_order_mx[ll_i].iffg s_order_ut[it_mxbt_ut].ifauto = s_order_mx[ll_i].ifauto s_order_ut[it_mxbt_ut].upmtrlid = s_order_mx[ll_i].upmtrlid s_order_ut[it_mxbt_ut].iffp = s_order_mx[ll_i].iffp s_order_ut[it_mxbt_ut].fpkind = s_order_mx[ll_i].fpkind s_order_ut[it_mxbt_ut].p_taskid = s_order_mx[ll_i].p_taskid s_order_ut[it_mxbt_ut].p_taskmxid = s_order_mx[ll_i].p_taskmxid s_order_ut[it_mxbt_ut].fgid = s_order_mx[ll_i].fgid s_order_ut[it_mxbt_ut].if_inherit = s_order_mx[ll_i].if_inherit s_order_ut[it_mxbt_ut].addqty = s_order_mx[ll_i].addqty s_order_ut[it_mxbt_ut].ifwforder = s_order_mx[ll_i].ifwforder s_order_ut[it_mxbt_ut].wpcode = s_order_mx[ll_i].wpcode s_order_ut[it_mxbt_ut].pctype = s_order_mx[ll_i].pctype s_order_ut[it_mxbt_ut].notmrpqty = s_order_mx[ll_i].notmrpqty s_order_ut[it_mxbt_ut].ifpban = s_order_mx[ll_i].ifpban s_order_ut[it_mxbt_ut].ifupban = s_order_mx[ll_i].ifupban next_: NEXT end subroutine public function integer getinfo (long arg_scid, long arg_orderid, ref string arg_msg);Int rslt = 1 Long i = 1,no_mxcheck = 0 IF arg_orderid <= 0 THEN rslt = 0 arg_msg = "非法单据唯一码" GOTO ext END IF //用游标读取明细 DECLARE cur_ordermx CURSOR FOR SELECT u_order_ml_mx.taskid, u_order_ml_mx.taskmxid, u_order_ml_mx.qty, u_order_ml_mx.taskscid FROM u_order_ml_mx WHERE u_order_ml_mx.orderid = :arg_orderid AND u_order_ml_mx.scid = :arg_scid ; OPEN cur_ordermx; FETCH cur_ordermx INTO :s_order_mx[i].taskid, :s_order_mx[i].taskmxid, :s_order_mx[i].orderqty, :s_order_mx[i].taskscid; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_ordermx INTO :s_order_mx[i].taskid, :s_order_mx[i].taskmxid, :s_order_mx[i].orderqty, :s_order_mx[i].taskscid; LOOP CLOSE cur_ordermx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_order_ml_mx WHERE orderid = :arg_orderid AND scid = :arg_scid ; IF sqlca.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 ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer f_assign_inqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, integer arg_plantype, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_mtrlkind,li_ifpack,li_ifpackpro,li_ifpackpro2 Int li_pordermtrl_ordertype IF arg_orderid <= 0 THEN rslt = 0 arg_msg = '错误的计划唯一码' GOTO ext END IF IF arg_mtrlid <= 0 THEN rslt = 0 arg_msg = '错误的物料唯一码' GOTO ext END IF SELECT mtrlkind,ifpack,ifpackpro2 INTO :li_mtrlkind,:li_ifpack,:li_ifpackpro2 FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '物料:'+arg_mtrlcode+'查询领料属性失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_mtrlkind = 1 THEN rslt = 1 GOTO ext END IF CHOOSE CASE arg_plantype CASE 0 UPDATE u_OrderRqMtrl SET inqty = inqty + :arg_qty WHERE orderid = :arg_orderid AND produce_wrkGrpid = :arg_wrkGrpid AND mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND scid = :arg_scid And plantype = 0; CASE 2,3 UPDATE u_OrderRqMtrl SET inqty = inqty + :arg_qty WHERE orderid = :arg_orderid AND wrkGrpid = :arg_wrkGrpid AND mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND scid = :arg_scid And (plantype = 2 Or plantype = 3); END CHOOSE IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN arg_msg = '更新物料:'+arg_mtrlcode + '已进仓数明细失败(更新行数 = 0),'+sqlca.SQLErrText rslt = 1 ELSEIF sqlca.SQLNRows > 1 THEN arg_msg = '更新物料:'+arg_mtrlcode + '已进仓数明细失败(更新行数 > 1),'+sqlca.SQLErrText rslt = 1 END IF IF Trim(arg_msg) <> '' THEN arg_msg_str = arg_msg END IF ELSE rslt = 0 arg_msg = '更新物料:'+arg_mtrlcode+'已进仓数量失败,'+sqlca.SQLErrText GOTO ext END IF IF li_ifpack > 0 THEN SELECT u_mtrldef.ifpackpro,u_mtrldef.ordertype INTO :li_ifpackpro,:li_pordermtrl_ordertype FROM u_order_ml,u_mtrldef WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid AND u_order_ml.scid = :arg_scid And u_order_ml.orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料:'+arg_mtrlcode+'对应生产计划产品是否包件产品失败,'+sqlca.SQLErrText GOTO ext END IF END IF //当是包件产品生产计划包件进仓时,进仓数自动更新为已领数 //当是组合配置包件产品生产计划包件进仓时,进仓数自动更新为已领数 IF arg_plantype = 0 THEN IF li_ifpack = 1 And li_ifpackpro = 1 Or li_ifpackpro2 = 1 THEN UPDATE u_OrderRqMtrl SET DstrQty = DstrQty + :arg_qty WHERE orderid = :arg_orderid AND produce_wrkGrpid = :arg_wrkGrpid AND mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND scid = :arg_scid And plantype = 0; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN arg_msg = '更新物料:'+arg_mtrlcode + '已领数明细失败(包件,更新行数 = 0),'+sqlca.SQLErrText rslt = 1 ELSEIF sqlca.SQLNRows > 1 THEN arg_msg = '更新物料:'+arg_mtrlcode + '已领数明细失败(包件,行数 > 1),'+sqlca.SQLErrText rslt = 1 END IF IF Trim(arg_msg) <> '' THEN arg_msg_str = arg_msg END IF ELSE rslt = 0 arg_msg = '更新物料:'+arg_mtrlcode+'已进仓数量失败,'+sqlca.SQLErrText GOTO ext END IF END IF ELSEIF arg_plantype = 2 THEN //yyx2013-9-3 采购包件进仓完成计划 IF li_ifpack = 1 And li_ifpackpro = 1 THEN UPDATE u_OrderRqMtrl SET DstrQty = DstrQty + :arg_qty WHERE orderid = :arg_orderid AND mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND scid = :arg_scid And plantype = 2; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN arg_msg = '更新物料:'+arg_mtrlcode + '已领数明细失败(包件,更新行数 = 0),'+sqlca.SQLErrText rslt = 1 ELSEIF sqlca.SQLNRows > 1 THEN arg_msg = '更新物料:'+arg_mtrlcode + '已领数明细失败(包件,行数 > 1),'+sqlca.SQLErrText rslt = 1 END IF IF Trim(arg_msg) <> '' THEN arg_msg_str = arg_msg END IF ELSE rslt = 0 arg_msg = '更新物料:'+arg_mtrlcode+'已进仓数量失败,'+sqlca.SQLErrText GOTO ext END IF IF uof_tryfinish_packorder_buy(arg_scid,arg_orderid,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 uof_pz_change (integer arg_type, string arg_updatestr, long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_msg);Int rslt = 1 CHOOSE CASE arg_type CASE 1 UPDATE u_OrderRqMtrl_scll SET status = :arg_updatestr WHERE u_OrderRqMtrl_scll.scid = :arg_scid AND u_OrderRqMtrl_scll.wrkgrpid = :arg_wrkgrpid AND u_OrderRqMtrl_scll.orderid = :arg_orderid AND u_OrderRqMtrl_scll.mtrlid = :arg_mtrlid AND u_OrderRqMtrl_scll.status = :arg_status AND u_OrderRqMtrl_scll.woodcode = :arg_woodcode And u_OrderRqMtrl_scll.pcode = :arg_pcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF CASE 2 UPDATE u_OrderRqMtrl_scll SET woodcode = :arg_updatestr WHERE u_OrderRqMtrl_scll.scid = :arg_scid AND u_OrderRqMtrl_scll.wrkgrpid = :arg_wrkgrpid AND u_OrderRqMtrl_scll.orderid = :arg_orderid AND u_OrderRqMtrl_scll.mtrlid = :arg_mtrlid AND u_OrderRqMtrl_scll.status = :arg_status AND u_OrderRqMtrl_scll.woodcode = :arg_woodcode And u_OrderRqMtrl_scll.pcode = :arg_pcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF CASE 3 UPDATE u_OrderRqMtrl_scll SET pcode = :arg_updatestr WHERE u_OrderRqMtrl_scll.scid = :arg_scid AND u_OrderRqMtrl_scll.wrkgrpid = :arg_wrkgrpid AND u_OrderRqMtrl_scll.orderid = :arg_orderid AND u_OrderRqMtrl_scll.mtrlid = :arg_mtrlid AND u_OrderRqMtrl_scll.status = :arg_status AND u_OrderRqMtrl_scll.woodcode = :arg_woodcode And u_OrderRqMtrl_scll.pcode = :arg_pcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END CHOOSE UPDATE u_OrderRqMtrl SET u_OrderRqMtrl.status = u_OrderRqMtrl_scll.status, u_OrderRqMtrl.woodcode = u_OrderRqMtrl_scll.woodcode, u_OrderRqMtrl.pcode = u_OrderRqMtrl_scll.pcode FROM u_OrderRqMtrl INNER JOIN u_OrderRqMtrl_scll ON u_OrderRqMtrl.scid = u_OrderRqMtrl_scll.scid AND u_OrderRqMtrl.OrderID = u_OrderRqMtrl_scll.OrderID AND u_OrderRqMtrl.MtrlID = u_OrderRqMtrl_scll.MtrlID AND u_OrderRqMtrl.wrkGrpid = u_OrderRqMtrl_scll.wrkGrpid WHERE ((u_OrderRqMtrl.status <> u_OrderRqMtrl_scll.status) OR (u_OrderRqMtrl.woodcode <> u_OrderRqMtrl_scll.woodcode) OR (u_OrderRqMtrl.pcode <> u_OrderRqMtrl_scll.pcode)) AND (u_OrderRqMtrl.scid = :arg_scid) And (u_OrderRqMtrl.orderid = :arg_orderid); IF sqlca.SQLCode <> 0 THEN arg_msg = '更新需求表失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer audit_scll (long arg_scid, long arg_orderid, integer arg_scllflag, ref string arg_msg, boolean arg_ifcommit);//arg_scllflag 1 :初审,2:终审 Int rslt = 1 Long cnt = 0 Long ls_i,ll_j,ll_k,ll_sp_cnt,ll_l Long ll_orderid_tmp Decimal ld_eoq,ld_splitrate,ld_truerqqty,ld_qty Long ll_cnt = 0 Long ll_porderid Int li_ifpackpro String ls_mtrlcode String ls_mtrlsectype String ls_zxmtrlmode String ls_unit Long ll_OrderID Long ll_MtrlID Decimal ld_noconsignedqty String ls_status String ls_woodcode String ls_pcode Long ll_wrkgrpid,ll_wrkid Long ll_storageid_last,ll_m DateTime ld_rqdate String ls_wpcode String ls_taskrelcode Long ll_cnt_mxt Decimal ld_qty_arr[],ld_trueqty_tmp Long count = 0 String ls_plancode rslt = 1 If f_aps_mrp_cklock(arg_scid,arg_msg) = 0 Then rslt = 0 Goto ext End If If uo_option_order_ml_scll_secaudit = -1000 Then rslt = 0 arg_msg = '选项:[065]生产计划用料二级审核,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_autocreate_buy = -1000 Then rslt = 0 arg_msg = '选项:[054]生产计划审核自动建立申购单,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_autocreate_wfjg = -1000 Then rslt = 0 arg_msg = '选项:[068]生产计划审核自动建立外协申请单,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_scllaudit_autobuild = -1000 Then rslt = 0 arg_msg = '选项:[234]主生产计划用料审自动生成相关指令单,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_scllaudit_autobuild_tech = -1000 Then rslt = 0 arg_msg = '选项:[245]主生产计划用料审自动生成相关指令单的工组派工单,读取初始默认值失败,操作取消!' Goto ext End If uo_requestbuy uo_rqbuy uo_rqbuy = Create uo_requestbuy uo_request_wfjg uo_wfjg uo_wfjg = Create uo_request_wfjg uo_wfjg.commit_transaction = sqlca uo_wfjg.if_getid_ture = False uo_order_ml uo_ml uo_ml = Create uo_order_ml uo_ml.if_getid_ture = False uo_order_ml_mrp uo_ml_mrp uo_ml_mrp = Create uo_order_ml_mrp s_order_ml_rqmtrl s_mtrl,s_mtrl_null datastore ds_ch_pack ds_ch_pack = Create datastore ds_ch_pack.DataObject = 'ds_order_ml_mrptree_pack' ds_ch_pack.SetTransObject(sqlca) datastore ds_orderrqmx ds_orderrqmx = Create datastore ds_orderrqmx.DataObject = 'dw_order_ml_zl_orderrqmx' ds_orderrqmx.SetTransObject(sqlca) datastore ds_reqmtrl ds_reqmtrl = Create datastore ds_reqmtrl.DataObject = 'ds_order_ml_reqmtrl_mx' ds_reqmtrl.SetTransObject(sqlca) If arg_orderid = 0 Then rslt = 0 arg_msg = "没有审核对象" Goto ext End If If p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then rslt = 0 Goto ext End If If status <> 1 Then rslt = 0 arg_msg = "计划只有在在进行状态才可以执行用料审批,请核对" Goto ext End If //检查是否有相关配置变更单未审 cnt = 0 Select count(*) Into :cnt From u_saletaskmx_change Inner JOIN u_saletaskmx_changemx ON u_saletaskmx_change.Billid = u_saletaskmx_changemx.billid Where (u_saletaskmx_change.affirmflag = 0 Or u_saletaskmx_change.flag = 0) And (u_saletaskmx_changemx.orderid = :arg_orderid) And (u_saletaskmx_changemx.scid = :arg_scid) ; If sqlca.SQLCode <> 0 Then arg_msg = ordercode + ',查询是否有相关配置变更单未审失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then arg_msg = ordercode + ',有相关配置变更单未审,请先审核' rslt = 0 Goto ext End If If uo_option_order_ml_scll_secaudit = 0 Then If scllflag = 1 Then rslt = 0 arg_msg = "计划已执行用料审批,请核对" Goto ext End If Else If arg_scllflag = 1 Then If scllflag = 1 Then rslt = 0 arg_msg = "计划已执行用料初审,请核对" Goto ext End If Else If scllflag = 0 Then rslt = 0 arg_msg = "计划未执行用料初审,请核对" Goto ext End If If scllsecflag = 1 Then rslt = 0 arg_msg = "计划已执行用料终审,请核对" Goto ext End If End If End If If uo_option_order_ml_scll_secaudit = 0 Then Update u_order_ml Set scllemp = :publ_operator, sclldate = getdate(), scllflag = 1, scllsecemp = :publ_operator, scllsecdate = getdate(), scllsecflag = 1 Where orderid = :arg_orderid And scid = :arg_scid And scllflag = 0 And scllsecflag = 0 And status = 1; Else If arg_scllflag = 1 Then Update u_order_ml Set scllemp = :publ_operator, sclldate = getdate(), scllflag = 1 Where orderid = :arg_orderid And scid = :arg_scid And scllflag = 0 And status = 1; Else Update u_order_ml Set scllsecemp = :publ_operator, scllsecdate = getdate(), scllsecflag = 1 Where orderid = :arg_orderid And scid = :arg_scid And scllflag = 1 And scllsecflag = 0 And status = 1; End If End If If sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 Then rslt = 0 arg_msg = "因网络或其它原因导致更新计划用料审核标记失败"+"~n"+sqlca.SQLErrText Goto ext End If If uo_option_order_ml_scll_secaudit = 0 Or & uo_option_order_ml_scll_secaudit = 1 And arg_scllflag = 2 Then //自动建申购单 If uo_option_autocreate_buy = 1 Then cnt = 0 Select count(*) Into :cnt From u_mtrldef, u_OrderRqMtrl Where ( u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid ) And ( u_OrderRqMtrl.plantype = 2 ) And ( u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 2) And ( u_OrderRqMtrl.scid = :arg_scid ) And ( u_OrderRqMtrl.orderid = :arg_orderid ) And ( u_OrderRqMtrl.truerqqty - u_OrderRqMtrl.consignedqty > 0); If sqlca.SQLCode <> 0 Then arg_msg = '查询自动材料申购单物料明细数目失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then s_requestbuy arg_s_rqbuy arg_s_rqbuy.scid = 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 = 0 Declare cur_rqbuy Cursor For Select u_mtrldef.mtrlcode, u_mtrldef.mtrlsectype, u_mtrldef.zxmtrlmode, u_OrderRqMtrl.OrderID, u_OrderRqMtrl.MtrlID, u_OrderRqMtrl.truerqqty - u_OrderRqMtrl.consignedqty, u_OrderRqMtrl.status , u_OrderRqMtrl.woodcode , u_OrderRqMtrl.pcode, u_OrderRqMtrl.wrkgrpid, u_orderrqmtrl.rqdate, u_mtrldef.unit From u_mtrldef, u_OrderRqMtrl Where ( u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid ) And ( u_OrderRqMtrl.plantype = 2 ) And ( u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 2 ) And ( u_OrderRqMtrl.scid = :arg_scid ) And ( u_OrderRqMtrl.orderid = :arg_orderid ) And ( u_OrderRqMtrl.truerqqty - u_OrderRqMtrl.consignedqty > 0); Open cur_rqbuy; Fetch cur_rqbuy Into :ls_mtrlcode,:ls_mtrlsectype,:ls_zxmtrlmode, :ll_OrderID,:ll_MtrlID,:ld_noconsignedqty,:ls_status, :ls_woodcode,:ls_pcode,:ll_wrkgrpid,:ld_rqdate,:ls_unit; Do While sqlca.SQLCode = 0 count++ arg_s_rqbuy.arg_s_rqbuymx[count].mtrlcode = ls_mtrlcode arg_s_rqbuy.arg_s_rqbuymx[count].uqty = ld_noconsignedqty arg_s_rqbuy.arg_s_rqbuymx[count].unit = ls_unit arg_s_rqbuy.arg_s_rqbuymx[count].status = ls_status arg_s_rqbuy.arg_s_rqbuymx[count].woodcode = ls_woodcode arg_s_rqbuy.arg_s_rqbuymx[count].pcode = ls_pcode arg_s_rqbuy.arg_s_rqbuymx[count].mxdscrp = '' arg_s_rqbuy.arg_s_rqbuymx[count].MtrlID = ll_MtrlID arg_s_rqbuy.arg_s_rqbuymx[count].orderid = ll_OrderID arg_s_rqbuy.arg_s_rqbuymx[count].wrkgrpid = ll_wrkgrpid arg_s_rqbuy.arg_s_rqbuymx[count].storageid = ll_storageid_last arg_s_rqbuy.arg_s_rqbuymx[count].ifrel = 1 arg_s_rqbuy.arg_s_rqbuymx[count].printid = count arg_s_rqbuy.arg_s_rqbuymx[count].rate = 1 arg_s_rqbuy.arg_s_rqbuymx[count].rqdate = ld_rqdate If if_inherit = 1 Then arg_s_rqbuy.arg_s_rqbuymx[count].plancode = taskrelcode Else arg_s_rqbuy.arg_s_rqbuymx[count].plancode = '' End If Fetch cur_rqbuy Into :ls_mtrlcode,:ls_mtrlsectype,:ls_zxmtrlmode, :ll_OrderID,:ll_MtrlID,:ld_noconsignedqty,:ls_status, :ls_woodcode,:ls_pcode,:ll_wrkgrpid,:ld_rqdate,:ls_unit; Loop Close cur_rqbuy; //查默认仓库及最近收货仓库 For ll_m = 1 To count arg_s_rqbuy.arg_s_rqbuymx[ll_m].storageid = f_mtrl_storageid(scid,arg_s_rqbuy.arg_s_rqbuymx[ll_m].MtrlID) Next If uo_rqbuy.Save(arg_s_rqbuy,publ_operator,arg_msg,False) = 0 Then rslt = 0 Goto ext End If If uo_rqbuy.audit(scid,uo_rqbuy.uo_requestbuyid,publ_operator,arg_msg,False) = 0 Then rslt = 0 Goto ext End If If uo_rqbuy.audit_2(scid,uo_rqbuy.uo_requestbuyid,publ_operator,arg_msg,False) = 0 Then rslt = 0 Goto ext End If If uo_rqbuy.uo_requestbuyid = 0 Or uo_rqbuy.uo_requestbuycode = '' Then arg_msg = '更新计划时获得错误的自动申购单号唯一码' rslt = 0 Goto ext End If Update u_order_ml Set relrqbuyid = :uo_rqbuy.uo_requestbuyid, relrqbuycode = :uo_rqbuy.uo_requestbuycode Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then arg_msg = '更新计划申购单号失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If End If End If //自动建外协申请单 If uo_option_autocreate_wfjg = 1 Then cnt = 0 Select count(*) Into :cnt From u_mtrldef,u_OrderRqMtrl Where ( u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid ) And ( u_OrderRqMtrl.plantype = 3 ) And ( u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 2) And ( u_OrderRqMtrl.scid = :arg_scid ) And ( u_OrderRqMtrl.orderid = :arg_orderid ) And ( u_OrderRqMtrl.truerqqty - u_OrderRqMtrl.consignedqty > 0); If sqlca.SQLCode <> 0 Then arg_msg = '查询自动外协申请单物料明细数目失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then datastore ds_wfjg ds_wfjg = Create datastore ds_wfjg.DataObject = 'ds_order_ml_rqwfjg' ds_wfjg.SetTransObject(sqlca) ds_wfjg.Retrieve(arg_orderid,arg_scid) If uo_wfjg.newbegin(arg_scid,arg_msg) = 0 Then rslt = 0 Goto ext End If uo_wfjg.Requiredate = DateTime(Today(),Time(0)) uo_wfjg.assign_emp = publ_operator uo_wfjg.dscrp = '' uo_wfjg.ifauto = 1 If if_inherit = 1 Then ls_plancode = taskrelcode Else ls_plancode = '' End If For ll_j = 1 To ds_wfjg.RowCount() If uo_wfjg.acceptmx(1,& arg_orderid,& ds_wfjg.Object.u_order_ml_ordercode[ll_j],& ds_wfjg.Object.u_orderrqmtrl_mtrlid[ll_j],& ds_wfjg.Object.u_orderrqmtrl_truerqqty[ll_j],& ds_wfjg.Object.u_orderrqmtrl_gydscrp[ll_j],& ds_wfjg.Object.u_mtrldef_mtrlcode[ll_j],& arg_msg,& ll_j,& ds_wfjg.Object.u_orderrqmtrl_rqdate[ll_j],& '',& ds_wfjg.Object.u_orderrqmtrl_status[ll_j],& ds_wfjg.Object.u_orderrqmtrl_woodcode[ll_j],& ds_wfjg.Object.u_orderrqmtrl_pcode[ll_j],& ds_wfjg.Object.u_orderrqmtrl_wrkgrpid[ll_j],& ds_wfjg.Object.u_orderrqmtrl_pfcode[ll_j],& ls_plancode,& ds_wfjg.Object.u_mtrldef_unit[ll_j],& ds_wfjg.Object.u_orderrqmtrl_truerqqty[ll_j],& 1) = 0 Then rslt = 0 Goto ext End If Next If uo_wfjg.savesubmit(publ_operator,arg_msg,False) = 0 Then rslt = 0 Goto ext End If If uo_wfjg.audit(scid,uo_wfjg.wfjgid,publ_operator,arg_msg,False) = 0 Then rslt = 0 Goto ext End If If uo_wfjg.audit_2(scid,uo_wfjg.wfjgid,publ_operator,arg_msg,False) = 0 Then rslt = 0 Goto ext End If If uo_wfjg.wfjgid = 0 Or uo_wfjg.taskcode = '' Then arg_msg = '更新计划时获得错误的自动外协申请单号唯一码' rslt = 0 Goto ext End If Update u_order_ml Set relrqwfjgid = :uo_wfjg.wfjgid, relrqwfjgcode = :uo_wfjg.taskcode Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then arg_msg = '更新计划外协申请单号失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If End If End If If uo_option_scllaudit_autobuild <> 0 Then SELECT u_mtrldef.ifpackpro INTO :li_ifpackpro FROM u_mtrldef,u_order_ml WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid AND u_order_ml.scid = :arg_scid And u_order_ml.orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询计划包件产品属性失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF If uo_option_scllaudit_autobuild_tech = 1 Then If uof_create_order_plan_tech(arg_scid,arg_orderid,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If ds_reqmtrl.Retrieve(arg_scid,arg_orderid) If ds_reqmtrl.RowCount() > 0 Then uo_ml.newbegin(arg_scid) End If For ll_j = 1 To ds_reqmtrl.RowCount() ld_eoq = ds_reqmtrl.Object.u_mtrldef_eoq[ll_j] //最小经济批量 ld_splitrate = ds_reqmtrl.Object.u_mtrldef_splitrate[ll_j] //最大经济批量 ld_truerqqty = ds_reqmtrl.Object.u_orderrqmtrl_truerqqty[ll_j] ld_trueqty_tmp = ld_truerqqty //yyx2014-2-28 //yyx2014-09-17 // IF pctype = 1 THEN // ld_eoq = 1 // ld_splitrate = 1 // END IF If ld_splitrate > 0 And ld_truerqqty > ld_splitrate Then ll_sp_cnt = Ceiling(Truncate(ld_truerqqty / ld_splitrate,10)) Else ll_sp_cnt = 1 End If ll_cnt_mxt = 0 For ll_k = 1 To ll_sp_cnt If ll_k = ll_sp_cnt Then ll_cnt_mxt++ ld_qty_arr[ll_cnt_mxt] = ld_trueqty_tmp ld_trueqty_tmp = 0 Else If ld_trueqty_tmp - ld_splitrate < ld_eoq Then ll_cnt_mxt++ ld_qty_arr[ll_cnt_mxt] = ld_trueqty_tmp - ld_eoq ld_trueqty_tmp = ld_eoq Else ll_cnt_mxt++ ld_qty_arr[ll_cnt_mxt] = ld_splitrate ld_trueqty_tmp = ld_trueqty_tmp - ld_splitrate End If End If Next For ll_k = 1 To ll_cnt_mxt ls_taskrelcode = '' If MtrlID = ds_reqmtrl.Object.u_orderrqmtrl_mtrlid[ll_j] Or ds_reqmtrl.Object.u_mtrldef_if_inherit[ll_j] = 1 Then ls_taskrelcode = taskrelcode Else ls_taskrelcode = '' End If ll_MtrlID = ds_reqmtrl.Object.u_orderrqmtrl_mtrlid[ll_j] ll_wrkid = ds_reqmtrl.Object.u_orderrqmtrl_produce_wrkGrpid[ll_j] Select top 1 wpcode Into :ls_wpcode From u_mtrl_workprice Where mtrlid = :ll_mtrlid And wrkid = :ll_wrkid Order By ifdft Desc; If sqlca.SQLCode <> 0 Then ls_wpcode = '' ll_cnt++ If uo_ml.acceptmx(relcode,& ds_reqmtrl.Object.u_orderrqmtrl_edate[ll_j],& 0,& '',& 0,& ds_reqmtrl.Object.u_orderrqmtrl_mtrlid[ll_j],& ds_reqmtrl.Object.u_orderrqmtrl_status[ll_j],& ds_reqmtrl.Object.u_orderrqmtrl_woodcode[ll_j],& ds_reqmtrl.Object.u_orderrqmtrl_pcode[ll_j],& ld_qty_arr[ll_k],& dscrp,& publ_operator,& ds_reqmtrl.Object.u_orderrqmtrl_rqdate[ll_j],& 4,& ls_taskrelcode,& ds_reqmtrl.Object.u_orderrqmtrl_pfcode[ll_j],& ds_reqmtrl.Object.u_orderrqmtrl_mxpkid[ll_j],& arg_orderid,& ll_cnt,& ds_reqmtrl.Object.u_orderrqmtrl_produce_wrkGrpid[ll_j],& ds_reqmtrl.Object.u_orderrqmtrl_gydscrp[ll_j],& ds_reqmtrl.Object.u_orderrqmtrl_pfklmode[ll_j],& 0,'',0,& secdscrp,& thdscrp,& arg_scid,& ds_reqmtrl.Object.u_orderrqmtrl_rqdate[ll_j],& 0,& 0,& ds_reqmtrl.Object.u_order_ml_level[ll_j],& ds_reqmtrl.Object.u_order_ml_typename[ll_j],& ds_reqmtrl.Object.u_order_ml_outtypestr[ll_j],& 0,& 0,& 0,0,0,& ls_wpcode,0,& arg_msg) = 0 Then arg_msg = '建立相关生产指令单失败,'+arg_msg rslt = 0 Goto ext End If Next Next If ds_reqmtrl.RowCount() > 0 Then If uo_ml.Save(arg_msg,False) = 0 Then arg_msg = '保存相关生产指令单失败,'+arg_msg rslt = 0 Goto ext End If If uo_option_scllaudit_autobuild = 1 Then For ll_j = 1 To UpperBound(uo_ml.orderid_arr) ll_orderid_tmp = uo_ml.orderid_arr[ll_j] If uo_ml.audit(arg_scid,ll_orderid_tmp,arg_msg,False) = 0 Then rslt = 0 arg_msg = '审核相关生产指令单失败(初审),'+arg_msg Goto ext End If If uo_ml.plan_audit(arg_scid,ll_orderid_tmp,arg_msg,False) = 0 Then rslt = 0 arg_msg = '审核相关生产指令单失败(二审),'+arg_msg Goto ext End If If uo_ml.sec_audit(arg_scid,ll_orderid_tmp,arg_msg,False) = 0 Then rslt = 0 arg_msg = '审核相关生产指令单失败(终审),'+arg_msg Goto ext End If If ifpackpro_mtrl = 5 Then If uo_ml.uof_order_add_tree_barcode(arg_scid,ll_orderid_tmp,arg_msg,False) = 0 Then rslt = 0 arg_msg = '相关生产指令单生成工艺条码失败,'+arg_msg Goto ext End If End If If uo_ml_mrp.uof_del_rqmtrl_scll(arg_scid,ll_orderid_tmp,False,arg_msg) = 0 Then arg_msg = '删除相关生产指令单用料失败,'+arg_msg rslt = 0 Goto ext End If ds_orderrqmx.Retrieve(ll_orderid_tmp,arg_scid) For ll_l = 1 To ds_orderrqmx.RowCount() s_mtrl = s_mtrl_null ll_porderid = ds_orderrqmx.Object.u_order_ml_mx_taskid[ll_l] If uo_ml_mrp.uof_get_rqmtrl(arg_scid,ll_orderid_tmp,ll_porderid,s_mtrl,arg_msg) = 0 Then arg_msg = '计算相关生产指令单用料失败1,'+arg_msg rslt = 0 Goto ext End If If uo_ml_mrp.uof_add_rqmtrl_scll(s_mtrl,False,arg_msg) = 0 Then arg_msg = '计算相关生产指令单用料失败2,'+arg_msg rslt = 0 Goto ext End If Next If uo_option_scllaudit_autobuild_tech = 1 Then If uo_ml.uof_create_order_plan_tech(arg_scid,ll_orderid_tmp,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If Next End If End If End If //yyx2-12=10-24 //删进仓计划 Delete From u_order_zl_planmx Where u_order_zl_planmx.orderid = :arg_orderid And u_order_zl_planmx.scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除生产计划进仓计划操作失败"+"~n"+sqlca.SQLErrText Goto ext End If //加入进仓计划 If inwareflag = 1 Then Insert Into u_order_zl_planmx (scid,orderid,aps_plancode,begindate,enddate,orderqty) Values(:arg_scid,:arg_orderid,'', :orderdate, :requiredate, :orderqty); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致插入进仓计划操作失败"+"~n"+sqlca.SQLErrText Goto ext End If End If End If //个性包件产品如果有换包件则更新到订单包件明细 Long k Long ll_s_mtrlid String ls_s_status,ls_s_woodcode,ls_s_pcode Decimal ld_s_soncale,ld_s_soncale_fm If arg_scllflag = 1 And ifpackpro_mtrl = 2 Then cnt = 0 Select count(*) Into :cnt From u_OrderRqMtrl_tree,u_mtrldef Where ( u_OrderRqMtrl_tree.MtrlID = u_mtrldef.mtrlid ) And ( u_OrderRqMtrl_tree.scid = :arg_scid ) And ( u_OrderRqMtrl_tree.OrderID = :arg_orderid ) And ( u_OrderRqMtrl_tree.lp = 1 ) And ( u_mtrldef.ifpack > 0 ) And ( u_OrderRqMtrl_tree.ifchanged = 1 ); If sqlca.SQLCode <> 0 Then arg_msg = '查询主生产计划是否有换包件失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then ds_ch_pack.Retrieve(arg_scid,arg_orderid) If ds_ch_pack.RowCount() > 0 Then Delete From u_saletaskmx_pf Where scid = :arg_scid And taskid = :taskid And printid = :taskmxid; If sqlca.SQLCode <> 0 Then arg_msg = '主生产计划对应销售订单明细删除包件清单明细失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If For k = 1 To ds_ch_pack.RowCount() ll_s_mtrlid = ds_ch_pack.Object.u_orderrqmtrl_tree_mtrlid[k] ls_s_status = ds_ch_pack.Object.u_orderrqmtrl_tree_status[k] ls_s_woodcode = ds_ch_pack.Object.u_orderrqmtrl_tree_woodcode[k] ls_s_pcode = ds_ch_pack.Object.u_orderrqmtrl_tree_pcode[k] ld_s_soncale = ds_ch_pack.Object.u_orderrqmtrl_tree_rqqty[k] ld_s_soncale_fm = orderqty Insert Into u_saletaskmx_pf (scid,taskid,printid,mtrlid,sonmtrlid,status,woodcode,pcode,Sonscale,Sonscale_fm) Values(:arg_scid,:taskid,:taskmxid,:MtrlID,:ll_s_mtrlid,:ls_s_status,:ls_s_woodcode,:ls_s_pcode,:ld_s_soncale,:ld_s_soncale_fm); If sqlca.SQLCode <> 0 Then arg_msg = '新建主生产计划对应销售订单明细包件清单失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If Next End If End If End If ext: If rslt = 0 Then Rollback; p_reset() ElseIf arg_ifcommit And rslt = 1 Then Commit; End If Destroy uo_rqbuy Destroy uo_wfjg Destroy uo_ml Destroy ds_reqmtrl Destroy ds_wfjg Destroy ds_ch_pack Return rslt end function public function integer caudit_scll (long arg_scid, long arg_orderid, integer arg_scllflag, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt Long ll_orderid_arr[] Long ll_mxbt = 1,ll_i Int li_status IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_order_ml_scll_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[065]生产计划用料二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_autocreate_buy = -1000 THEN rslt = 0 arg_msg = '选项:[054]生产计划审核自动建立申购单,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_autocreate_wfjg = -1000 THEN rslt = 0 arg_msg = '选项:[068]生产计划审核自动建立外协申请单,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_scllaudit_autobuild = -1000 THEN rslt = 0 arg_msg = '选项:[234]主生产计划用料审核自动生成相关指令单及派工单,读取初始默认值失败,操作取消!' GOTO ext END IF uo_requestbuy uo_rqbuy uo_rqbuy = Create uo_requestbuy uo_request_wfjg uo_wfjg uo_wfjg = Create uo_request_wfjg uo_wfjg.commit_transaction = sqlca uo_order_ml uo_ml uo_ml = Create uo_order_ml DateTime null_dt SetNull(null_dt) IF arg_orderid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF p_getinfo(arg_scid,arg_orderid,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_order_ml_scll_secaudit = 0 THEN IF scllflag = 0 THEN rslt = 0 arg_msg = "计划还未执行用料审批,请核对" GOTO ext END IF ELSE IF arg_scllflag = 1 THEN IF scllflag = 0 THEN rslt = 0 arg_msg = "计划还未执行用料初审,请核对" GOTO ext END IF IF scllsecflag = 1 THEN rslt = 0 arg_msg = "计划已执行用料终审,请核对" GOTO ext END IF ELSE IF scllsecflag = 0 THEN rslt = 0 arg_msg = "计划还未执行用料终审,请核对" GOTO ext END IF END IF END IF //检查是否已开指令单 IF ordertype <> 4 And uo_option_scllaudit_autobuild = 0 THEN IF uof_check_if_zl(arg_scid,arg_orderid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF // IF uo_option_order_ml_scll_secaudit = 0 THEN UPDATE u_order_ml SET scllemp = '', sclldate = :null_dt, scllflag = 0, scllsecemp = '', scllsecdate = :null_dt, scllsecflag = 0 WHERE orderid = :arg_orderid AND scid = :scid AND scllflag = 1 AND scllsecflag = 1 And status = 1; ELSE IF arg_scllflag = 1 THEN UPDATE u_order_ml SET scllemp = '', sclldate = :null_dt, scllflag = 0 WHERE orderid = :arg_orderid AND scid = :scid AND scllflag = 1 AND scllsecflag = 0 And status = 1; ELSE UPDATE u_order_ml SET scllsecemp = '', scllsecdate = :null_dt, scllsecflag = 0 WHERE orderid = :arg_orderid AND scid = :scid AND scllflag = 1 AND scllsecflag = 1 And status = 1; END IF END IF IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新计划用料审批标记失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF uo_option_order_ml_scll_secaudit = 0 Or & uo_option_order_ml_scll_secaudit = 1 And arg_scllflag = 2 THEN cnt = 0 IF relrqbuyid > 0 THEN SELECT count(*) INTO :cnt FROM u_requestbuy WHERE scid = :scid AND requestbuyid = :relrqbuyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关申购单是否存在失败,'+sqlca.SQLErrText GOTO ext END IF END IF IF uo_option_autocreate_buy = 1 And cnt > 0 THEN IF uo_rqbuy.caudit_2(scid,relrqbuyid,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF uo_rqbuy.caudit(scid,relrqbuyid,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF uo_rqbuy.del(scid,relrqbuyid,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF cnt = 0 IF relrqwfjgid > 0 THEN SELECT count(*) INTO :cnt FROM u_request_wfjg WHERE scid = :scid AND wfjgid = :relrqwfjgid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关外协申请单是否存在失败,'+sqlca.SQLErrText GOTO ext END IF END IF IF uo_option_autocreate_wfjg = 1 And cnt > 0 THEN IF uo_wfjg.caudit_2(scid,relrqwfjgid,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF uo_wfjg.caudit(scid,relrqwfjgid,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF uo_wfjg.Cancel(scid,relrqwfjgid,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF //检查是否已开材料申购单,外协申请单 IF ordertype <> 4 THEN IF uof_check_if_rbuy(arg_scid,arg_orderid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uof_check_if_wfjg(arg_scid,arg_orderid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF UPDATE u_order_ml SET relrqwfjgid = 0, relrqwfjgcode = '', relrqbuyid = 0, relrqbuycode = '' WHERE orderid = :arg_orderid And scid = :scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新相关申购单信息失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF uo_option_scllaudit_autobuild <> 0 And ordertype <> 4 THEN IF uof_delete_order_plan_tech(arg_scid,arg_orderid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF DECLARE cur_porder CURSOR FOR SELECT orderid FROM u_order_ml WHERE porderid = :arg_orderid AND scid = :arg_scid And pzlorderid = 0; OPEN cur_porder; FETCH cur_porder Into :ll_orderid_arr[ll_mxbt]; DO WHILE sqlca.SQLCode = 0 ll_mxbt++ FETCH cur_porder Into :ll_orderid_arr[ll_mxbt]; LOOP CLOSE cur_porder; ll_mxbt = ll_mxbt - 1 FOR ll_i = 1 To ll_mxbt IF uo_ml.uof_delete_order_plan_tech(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF SELECT status INTO :li_status FROM u_order_ml WHERE scid = :arg_scid And orderid = :ll_orderid_arr[ll_i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关指令单状态失败,id:'+String(ll_orderid_arr[ll_i])+','+arg_msg GOTO ext END IF IF li_status = 1 THEN IF uo_ml.c_sec_audit(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN rslt = 0 arg_msg = '撤审相关生产指令单失败,id:'+String(ll_orderid_arr[ll_i])+','+arg_msg GOTO ext END IF END IF SELECT status INTO :li_status FROM u_order_ml WHERE scid = :arg_scid And orderid = :ll_orderid_arr[ll_i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关指令单状态失败,id:'+String(ll_orderid_arr[ll_i])+','+arg_msg GOTO ext END IF IF li_status = 4 THEN IF uo_ml.c_plan_audit(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN rslt = 0 arg_msg = '撤审相关生产指令单失败,id:'+String(ll_orderid_arr[ll_i])+','+arg_msg GOTO ext END IF END IF SELECT status INTO :li_status FROM u_order_ml WHERE scid = :arg_scid And orderid = :ll_orderid_arr[ll_i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关指令单状态失败,id:'+String(ll_orderid_arr[ll_i])+','+arg_msg GOTO ext END IF IF li_status = 7 THEN IF uo_ml.c_audit(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN rslt = 0 arg_msg = '撤审相关生产指令单失败,id:'+String(ll_orderid_arr[ll_i])+','+arg_msg GOTO ext END IF END IF IF uo_ml.del(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN rslt = 0 arg_msg = '删除相关生产指令单失败,id:'+String(ll_orderid_arr[ll_i])+','+arg_msg GOTO ext END IF NEXT END IF UPDATE u_order_ml SET u_order_ml.plan_flag = 0 WHERE u_order_ml.scid = :arg_scid And u_order_ml.orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新主生产计划排程标记失败,'+sqlca.SQLErrText GOTO ext END IF //删进仓计划 DELETE FROM u_order_zl_planmx WHERE u_order_zl_planmx.orderid = :arg_orderid And u_order_zl_planmx.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除生产计划进仓计划操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF //个性包件产品如果有换包件则更新到订单包件明细 //IF arg_scllflag = 1 And ifpackpro_mtrl = 2 THEN // DELETE FROM u_saletaskmx_pf // WHERE scid = :arg_scid // AND taskid = :taskid // And printid = :taskmxid; // IF sqlca.SQLCode <> 0 THEN // arg_msg = '删除主生产计划对应销售订单明细包件清单失败,'+sqlca.SQLErrText // rslt = 0 // GOTO ext // END IF //END IF ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF Destroy uo_rqbuy Destroy uo_wfjg Destroy uo_ml RETURN rslt end function public function integer uof_check_if_zl (long arg_scid, long arg_orderid, ref string arg_msg);Int rslt = 1 Long cnt cnt = 0 SELECT count(*) INTO :cnt FROM u_Order_ml INNER JOIN u_order_ml_mx ON u_Order_ml.scid = u_order_ml_mx.scid AND u_Order_ml.OrderID = u_order_ml_mx.orderid WHERE u_order_ml_mx.scid = :arg_scid AND u_order_ml_mx.taskid = :arg_orderid AND u_Order_ml.ordertype = 4 and u_order_ml.pzlorderid = 0 ; IF sqlca.SQLCode <> 0 THEN arg_msg = '检查生产计划是否已开指令单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF IsNull(cnt) THEN cnt = 0 IF cnt > 0 THEN arg_msg = '生产计划已开指令单,不能撤审或修改用料' rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer uof_get_scllflag (long arg_scid, long arg_orderid, ref integer arg_scllflag, ref string arg_msg);Int rslt = 1 int li_scllflag SELECT scllflag INTO :li_scllflag FROM u_order_ml WHERE scid = :arg_scid AND orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '检查生产计划是否已用料审失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF arg_scllflag = li_scllflag ext: RETURN rslt end function public function integer uof_check_if_rbuy (long arg_scid, long arg_orderid, ref string arg_msg);Int rslt = 1 Long cnt cnt = 0 SELECT count(*) INTO :cnt FROM u_requestbuymx,u_requestbuy WHERE u_requestbuymx.scid = :arg_scid AND u_requestbuymx.orderid = :arg_orderid and u_requestbuymx.scid = u_requestbuy.scid and u_requestbuymx.requestbuyid = u_requestbuy.requestbuyid and u_requestbuy.billtype = 0 ; IF sqlca.SQLCode <> 0 THEN arg_msg = '检查生产计划是否已开材料申购单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF IsNull(cnt) THEN cnt = 0 IF cnt > 0 THEN arg_msg = '生产计划已开材料申购单,不能撤审或修改用料' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_requestbuymxmx,u_requestbuy WHERE u_requestbuymxmx.scid = :arg_scid AND u_requestbuymxmx.orderid = :arg_orderid and u_requestbuymxmx.scid = u_requestbuy.scid and u_requestbuymxmx.requestbuyid = u_requestbuy.requestbuyid and u_requestbuy.billtype = 0 ; IF sqlca.SQLCode <> 0 THEN arg_msg = '检查生产计划是否已开材料申购单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF IsNull(cnt) THEN cnt = 0 IF cnt > 0 THEN arg_msg = '生产计划已开材料申购单,不能撤审或修改用料' rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer uof_check_if_wfjg (long arg_scid, long arg_orderid, ref string arg_msg);Int rslt = 1 Long cnt cnt = 0 SELECT count(*) INTO :cnt FROM u_request_wfjgMx WHERE u_request_wfjgMx.scid = :arg_scid AND u_request_wfjgMx.orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '检查生产计划是否已开外协申请单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF IsNull(cnt) THEN cnt = 0 IF cnt > 0 THEN arg_msg = '生产计划已开外协申请单,不能撤审或修改用料' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_request_wfjgMxmx WHERE u_request_wfjgMxmx.scid = :arg_scid AND u_request_wfjgMxmx.orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '检查生产计划是否已开外协申请单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF IsNull(cnt) THEN cnt = 0 IF cnt > 0 THEN arg_msg = '生产计划已开外协申请单,不能撤审或修改用料' rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer f_add_conpfqty (long arg_scid, long arg_orderid, decimal arg_pfqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Decimal ld_orderqty,ld_conpfqty SELECT orderqty,conpfqty INTO :ld_orderqty,:ld_conpfqty FROM u_order_ml WHERE scid = :arg_scid AND orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询部件生产计划相关信息失败'+sqlca.SQLErrText GOTO ext END IF IF arg_pfqty > ld_orderqty - ld_conpfqty THEN rslt = 0 arg_msg = '部件生产计划未分配数量只有:'+String( ld_orderqty - ld_conpfqty,'#,##0.0###')+',不能再分配:'+String(arg_pfqty,'#,##0.0###') GOTO ext END IF UPDATE u_order_ml SET conpfqty = conpfqty + :arg_pfqty WHERE scid = :arg_scid AND orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新部件生产计划已分配数量失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer f_add_rqbuyqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_plantype, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_mtrlkind Decimal ld_consignedqty,ld_truerqqty,ld_adddec IF arg_orderid <= 0 THEN rslt = 0 arg_msg = '错误的计划唯一码' GOTO ext END IF IF arg_mtrlid <= 0 THEN rslt = 0 arg_msg = '错误的物料唯一码' GOTO ext END IF SELECT mtrlkind,adddec INTO :li_mtrlkind,:ld_adddec FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '物料:'+arg_mtrlcode+'查询MRP属性失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_mtrlkind = 1 THEN rslt = 1 GOTO ext END IF SELECT rqbuyqty, truerqqty INTO :ld_consignedqty, :ld_truerqqty FROM u_OrderRqMtrl WHERE orderid = :arg_orderid AND wrkGrpid = :arg_wrkGrpid AND mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND scid = :arg_scid and plantype = :arg_plantype; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+arg_mtrlcode+'计划已申购数(申请)数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF IsNull(ld_consignedqty) THEN ld_consignedqty = 0 IF IsNull(ld_truerqqty) THEN ld_truerqqty = 0 IF ld_consignedqty + arg_qty > ld_truerqqty + ld_adddec THEN arg_msg = '物料:'+arg_mtrlcode+'未安排申购(申请)只有:'+String(ld_truerqqty - ld_consignedqty,'#,#0.0#########')+',不能安排:'+String(arg_qty,'#,#0.0#########') rslt = 0 GOTO ext END IF UPDATE u_OrderRqMtrl SET rqbuyqty = rqbuyqty + :arg_qty WHERE orderid = :arg_orderid AND wrkGrpid = :arg_wrkGrpid AND mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND scid = :arg_scid and plantype = :arg_plantype; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN arg_msg = '更新物料:'+arg_mtrlcode + '需求申购(申请)明细失败(更新行数 = 0),'+sqlca.SQLErrText rslt = 0 GOTO ext ELSEIF sqlca.SQLNRows > 1 THEN arg_msg = '更新物料:'+arg_mtrlcode + '需求申购(申请)明细失败(更新行数 > 1),'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ELSE rslt = 0 arg_msg = '更新物料:'+arg_mtrlcode+'已申购(申请)数量失败,'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer f_assign_rqmtrlqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, integer arg_plantype, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_mtrlkind Long i String ls_ordercode DateTime ldt_rqdate,ldt_edate Decimal ld_consignedqty,ld_truerqqty,ld_uprate,ld_upqty Decimal ld_updateqty,ld_oriqty Boolean lb_ifcheck = True IF uo_option_requestbuy_hz = -1000 THEN rslt = 0 arg_msg = '选项:[111]申购单汇总采购,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_requestwfjg_hz = -1000 THEN rslt = 0 arg_msg = '选项:[121]外协申请单汇总外协,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_zlmtrlchange_wx_update_rqwfjg = -1000 THEN rslt = 0 arg_msg = '选项:[333]指令单外协物料换料单更新外协申请单和外协订单,读取初始默认值失败,操作取消!' GOTO ext END IF datastore ds_update ds_update = Create datastore IF arg_orderid <= 0 THEN rslt = 0 arg_msg = '错误的计划唯一码' GOTO ext END IF SELECT ordercode INTO :ls_ordercode FROM u_order_ml WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '物料:'+arg_mtrlcode+'查询主生产计划编号失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_mtrlid <= 0 THEN rslt = 0 arg_msg = '错误的物料唯一码' GOTO ext END IF SELECT mtrlkind,uprate , upqty,mtrlcode INTO :li_mtrlkind,:ld_uprate,:ld_upqty,:arg_mtrlcode FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '物料:'+arg_mtrlcode+'查询MRP属性失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_mtrlkind = 1 THEN rslt = 1 GOTO ext END IF SELECT sum(consignedqty), sum(truerqqty) INTO :ld_consignedqty, :ld_truerqqty FROM u_OrderRqMtrl WHERE orderid = :arg_orderid AND wrkGrpid = :arg_wrkGrpid AND mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND scid = :arg_scid And plantype = :arg_plantype ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',已安排数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF IsNull(ld_consignedqty) THEN ld_consignedqty = 0 IF IsNull(ld_truerqqty) THEN ld_truerqqty = 0 IF arg_plantype = 0 Or arg_plantype = 6 THEN lb_ifcheck = True ELSEIF arg_plantype = 2 THEN IF uo_option_requestbuy_hz = 0 THEN lb_ifcheck = True ELSE lb_ifcheck = False END IF ELSEIF arg_plantype = 3 THEN IF uo_option_requestwfjg_hz = 0 THEN IF uo_option_zlmtrlchange_wx_update_rqwfjg = 0 THEN lb_ifcheck = False ELSE lb_ifcheck = True END IF ELSE lb_ifcheck = False END IF END IF IF lb_ifcheck THEN IF arg_qty > 0 THEN IF Not f_power_ind(1405,sys_msg_pow) Or sys_power_issuper THEN IF ld_truerqqty * (1 + ld_uprate) + ld_upqty < (arg_qty + ld_consignedqty) THEN rslt = 0 arg_msg = '物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',需求未安排数只有:'+String(ld_truerqqty - ld_consignedqty,'#,##0.0####' )+',允许订货上限为:'+String(ld_truerqqty * (1 + ld_uprate) + ld_upqty - ld_consignedqty,'#,##0.00##')+',少于本次安排数量:'+String(arg_qty,'#,##0.00##') GOTO ext END IF ELSE IF ld_consignedqty + arg_qty > ld_truerqqty THEN arg_msg = '物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',未安排数只有:'+String(ld_truerqqty - ld_consignedqty,'#,#0.0#')+',不能安排:'+String(arg_qty,'#,#0.0#') rslt = 0 GOTO ext END IF END IF ELSE IF ld_consignedqty < Abs( arg_qty ) THEN arg_msg = '物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',已安排数只有:'+String(ld_consignedqty,'#,#0.0#')+',不能取消安排:'+String(Abs(arg_qty),'#,#0.0#') rslt = 0 GOTO ext END IF END IF END IF IF arg_plantype = 2 And uo_option_requestbuy_hz = 1 THEN IF arg_qty > 0 THEN ds_update.DataObject = 'ds_assign_rqmtrlqty1' ELSE ds_update.DataObject = 'ds_assign_rqmtrlqty2' END IF ds_update.SetTransObject(sqlca) ds_update.Retrieve(arg_scid,arg_orderid,arg_mtrlid,arg_wrkGrpid,arg_status,arg_woodcode,arg_pcode,arg_plantype) IF ds_update.RowCount() = 0 THEN rslt = 1 GOTO ext // arg_msg = '物料:'+arg_mtrlcode +',计划:'+ls_ordercode+',没有需求明细,请检查主生产计划需求明细'+sqlca.SQLErrText // rslt = 0 // GOTO ext END IF IF arg_qty > 0 THEN ld_oriqty = arg_qty FOR i = 1 To ds_update.RowCount() ldt_rqdate = ds_update.Object.rqdate[i] ldt_edate = ds_update.Object.edate[i] IF ld_oriqty > ds_update.Object.notconsignedqty[i] THEN ld_updateqty = ds_update.Object.notconsignedqty[i] ld_oriqty = ld_oriqty - ds_update.Object.notconsignedqty[i] ELSE ld_updateqty = ld_oriqty ld_oriqty = 0 END IF IF i = ds_update.RowCount() THEN //处理超申购特殊情况 IF ld_oriqty > 0 THEN ld_updateqty = ld_updateqty + ld_oriqty ld_oriqty = 0 END IF END IF UPDATE u_OrderRqMtrl SET consignedqty = consignedqty + :ld_updateqty WHERE orderid = :arg_orderid AND wrkGrpid = :arg_wrkGrpid AND mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND scid = :arg_scid AND plantype = :arg_plantype AND rqdate = :ldt_rqdate And edate = :ldt_edate; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN arg_msg = '更新物料:'+arg_mtrlcode +',计划:'+ls_ordercode+',需求明细失败,(没有找到更新行)' rslt = 0 GOTO ext END IF ELSE rslt = 0 arg_msg = '更新物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',已安排数量失败,'+sqlca.SQLErrText GOTO ext END IF NEXT IF ld_oriqty > 0 THEN rslt = 0 arg_msg = '物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',已安排数量更新有更新余数:'+String(ld_oriqty)+',操作取消' GOTO ext END IF ELSE ld_oriqty = Abs(arg_qty) FOR i = 1 To ds_update.RowCount() ldt_rqdate = ds_update.Object.rqdate[i] ldt_edate = ds_update.Object.edate[i] IF ld_oriqty > ds_update.Object.notconsignedqty[i] THEN ld_updateqty = ds_update.Object.notconsignedqty[i] ld_oriqty = ld_oriqty - ds_update.Object.notconsignedqty[i] ELSE ld_updateqty = ld_oriqty ld_oriqty = 0 END IF UPDATE u_OrderRqMtrl SET consignedqty = consignedqty - :ld_updateqty WHERE orderid = :arg_orderid AND wrkGrpid = :arg_wrkGrpid AND mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND scid = :arg_scid AND plantype = :arg_plantype AND rqdate = :ldt_rqdate And edate = :ldt_edate; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN arg_msg = '更新物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',需求明细失败,(没有找到更新行)' rslt = 0 GOTO ext END IF ELSE rslt = 0 arg_msg = '更新物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',已安排数量失败,'+sqlca.SQLErrText GOTO ext END IF NEXT // IF ld_oriqty > 0 THEN // rslt = 0 // arg_msg = '物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',已安排数量更新有更新余数:'+String(ld_oriqty)+',操作取消' // GOTO ext // END IF END IF ELSE UPDATE u_OrderRqMtrl SET consignedqty = consignedqty + :arg_qty WHERE orderid = :arg_orderid AND wrkGrpid = :arg_wrkGrpid AND mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND scid = :arg_scid And plantype = :arg_plantype; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN arg_msg = '更新物料:'+arg_mtrlcode +',计划:'+ls_ordercode+',需求明细失败,(没有找到更新行)' rslt = 0 GOTO ext END IF ELSE rslt = 0 arg_msg = '更新物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',已安排数量失败,'+sqlca.SQLErrText GOTO ext END IF END IF UPDATE u_order_ml SET u_Order_ml.zlflag = isnull(uv_order_zl_flag.flag,0) FROM u_Order_ml LEFT OUTER JOIN uv_order_zl_flag ON u_Order_ml.scid = uv_order_zl_flag.scid AND u_Order_ml.OrderID = uv_order_zl_flag.OrderID WHERE u_order_ml.scid = :arg_scid And u_order_ml.orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新相关主生产计划指令单状态失败,'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy ds_update RETURN rslt end function public function integer add_secdscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg); Int rslt = 1 IF arg_newdescppart = '' THEN rslt = 0 arG_MSG = "要添加内容为空,操作取消" GOTO ext END IF rslt = p_getinfo(arg_scid,arg_orderid, arG_MSG) IF rslt = 0 THEN GOTO ext IF status = 0 THEN rslt = 0 arG_MSG = "待审核状态下不可用" GOTO ext END IF UPDATE u_order_ml SET secdscrp = :arg_newdescppart WHERE u_order_ml.orderid = :arg_orderid AND u_order_ml.scid = :arg_scid; IF SQLCA.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致修改计划备注2操作失败"+"~n"+SQLCA.SQLErrText ROLLBACK; GOTO ext END IF secdscrp = arg_newdescppart ext: IF rslt = 1 THEN COMMIT; END IF p_reset() RETURN (rslt) end function public function integer add_thdscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg); Int rslt = 1 IF arg_newdescppart = '' THEN rslt = 0 arG_MSG = "要添加内容为空,操作取消" GOTO ext END IF rslt = p_getinfo(arg_scid,arg_orderid, arG_MSG) IF rslt = 0 THEN GOTO ext IF status = 0 THEN rslt = 0 arG_MSG = "待审核状态下不可用" GOTO ext END IF UPDATE u_order_ml SET thdscrp = :arg_newdescppart WHERE u_order_ml.orderid = :arg_orderid AND u_order_ml.scid = :arg_scid; IF SQLCA.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致修改计划备注3操作失败"+"~n"+SQLCA.SQLErrText ROLLBACK; GOTO ext END IF thdscrp = arg_newdescppart ext: IF rslt = 1 THEN COMMIT; END IF p_reset() RETURN (rslt) end function public function integer uof_tryfinish_packorder (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt rslt = 1 rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) IF rslt = 0 THEN GOTO ext Decimal ld_qty Int li_ifpackpro,li_ifpack,li_pordermtrl_ordertype Long ll_porder_mtrlid DateTime null_dt SetNull(null_dt) Long ll_cnt_zl,ll_cnt_zl_finish Int ll_pack1_finish //如果不是指令单,或者合并指令单的情况不作处理 IF porderid = 0 THEN rslt = 1 GOTO ext END IF SELECT u_mtrldef.ifpackpro,u_mtrldef.ordertype,u_mtrldef.mtrlid INTO :li_ifpackpro,:li_pordermtrl_ordertype,:ll_porder_mtrlid FROM u_mtrldef,u_order_ml WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid AND u_order_ml.orderid = :porderid And u_order_ml.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关主计划产品是否全包件产品失败,'+sqlca.SQLErrText GOTO ext END IF IF li_ifpackpro = 0 THEN //不是全包件产品,退出函数,否则检查主计划相关指令单是否全部完成 rslt = 1 GOTO ext END IF Long ll_cnt,cnt ll_cnt = 0 IF li_ifpackpro = 1 Or li_ifpackpro = 2 THEN SELECT count(*) INTO :ll_cnt FROM u_orderrqmtrl,u_mtrldef WHERE u_orderrqmtrl.mtrlid = u_mtrldef.mtrlid AND u_orderrqmtrl.orderid = :porderid AND u_orderrqmtrl.scid = :arg_scid AND ( u_mtrldef.ifpack = 1 OR u_mtrldef.ifpack = 2 ) And (u_orderrqmtrl.plantype = 0 or u_orderrqmtrl.plantype = 2) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询包件产品主生产计划相关生产需求失败'+sqlca.SQLErrText GOTO ext END IF ELSEIF li_ifpackpro = 3 THEN SELECT count(*) INTO :ll_cnt FROM u_orderrqmtrl,u_order_ml WHERE u_orderrqmtrl.scid = u_order_ml.scid AND u_orderrqmtrl.orderid = u_order_ml.orderid AND u_orderrqmtrl.mtrlid = u_order_ml.mtrlid AND u_orderrqmtrl.orderid = :porderid AND u_orderrqmtrl.scid = :arg_scid And u_orderrqmtrl.plantype = 0 ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询组合配置包件产品主生产计划相关生产需求失败'+sqlca.SQLErrText GOTO ext END IF END IF //1.先检查主生产计划自制需求,需求数是否等于用料数,不等即说明有分配库存,跳过判断完成比例 //2.查询相应部件的完成情况,按需求量对比后得出主计划物料的完成数量 IF li_ifpackpro = 1 Or li_ifpackpro = 3 THEN IF ll_cnt > 0 THEN cnt = 0 IF li_ifpackpro = 1 THEN SELECT count(*) INTO :cnt FROM u_orderrqmtrl,u_mtrldef WHERE u_orderrqmtrl.mtrlid = u_mtrldef.mtrlid AND ( u_mtrldef.ifpack = 1 ) AND u_orderrqmtrl.orderid = :porderid AND u_orderrqmtrl.scid = :arg_scid AND u_orderrqmtrl.inqty < u_orderrqmtrl.truerqqty And (u_orderrqmtrl.plantype = 0 or u_orderrqmtrl.plantype = 2) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询包件产品主生产计划相关指令单是否全部完成失败'+sqlca.SQLErrText GOTO ext END IF ELSEIF li_ifpackpro = 3 THEN SELECT count(*) INTO :cnt FROM u_orderrqmtrl,u_order_ml WHERE u_orderrqmtrl.scid = u_order_ml.scid AND u_orderrqmtrl.orderid = u_order_ml.orderid AND u_orderrqmtrl.mtrlid = u_order_ml.mtrlid AND u_orderrqmtrl.orderid = :porderid AND u_orderrqmtrl.scid = :arg_scid AND u_orderrqmtrl.inqty < u_orderrqmtrl.truerqqty And u_orderrqmtrl.plantype = 0 ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询组合配置包件产品主生产计划相关指令单是否全部完成失败'+sqlca.SQLErrText GOTO ext END IF END IF IF cnt = 0 THEN //相关自制需求全部完成,更新主生产计划已完成数及状态 UPDATE u_order_ml SET status = 5, accomplishdate = getdate(), accomplishemp = :publ_operator, acmpqty = orderqty WHERE ( u_order_ml.orderid = :porderid ) And (u_order_ml.scid = :arg_scid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致生产计划完成状态设置操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //更新分离排产包件产品指令完成数 IF li_ifpackpro = 1 And li_pordermtrl_ordertype = 1 THEN UPDATE u_order_ml SET status = 5, accomplishdate = getdate(), accomplishemp = :publ_operator, acmpqty = orderqty FROM u_order_ml WHERE (u_order_ml.scid = :arg_scid) AND (u_order_ml.porderid = :porderid) And (u_order_ml.mtrlid = :ll_porder_mtrlid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新包件产品主生产计划对应【指令单分离】相关对应产品指令单状态操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF ELSE //如果没有全部完成,则取自制需求的最小完成率去计算主生产计划的完成数 Decimal ld_minrate IF li_ifpackpro = 1 THEN SELECT min(inqty / truerqqty) INTO :ld_minrate FROM u_orderrqmtrl,u_mtrldef WHERE u_orderrqmtrl.mtrlid = u_mtrldef.mtrlid AND u_orderrqmtrl.orderid = :porderid AND u_orderrqmtrl.scid = :arg_scid AND ( u_mtrldef.ifpack = 1 ) AND (u_orderrqmtrl.plantype = 0 or u_orderrqmtrl.plantype = 2) And u_orderrqmtrl.truerqqty > 0 ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关包件产品主生产计划自制需求完成率失败'+"~n"+sqlca.SQLErrText GOTO ext END IF ElseIf ( li_ifpackpro = 3 ) THEN SELECT min(inqty / truerqqty) INTO :ld_minrate FROM u_orderrqmtrl,u_order_ml WHERE u_orderrqmtrl.scid = u_order_ml.scid AND u_orderrqmtrl.orderid = u_order_ml.orderid AND u_orderrqmtrl.mtrlid = u_order_ml.mtrlid AND u_orderrqmtrl.orderid = :porderid AND u_orderrqmtrl.scid = :arg_scid AND u_orderrqmtrl.plantype = 0 And u_orderrqmtrl.truerqqty > 0 ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关组合配置包件产品主生产计划自制需求完成率失败'+"~n"+sqlca.SQLErrText GOTO ext END IF END IF UPDATE u_order_ml SET status = 1, accomplishdate = :null_dt, accomplishemp = '', acmpqty = orderqty * :ld_minrate WHERE ( u_order_ml.orderid = :porderid ) And (u_order_ml.scid = :arg_scid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新包件产品主生产计划状态操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //更新分离排产包件产品指令完成数 IF li_ifpackpro = 1 And li_pordermtrl_ordertype = 1 THEN UPDATE u_order_ml SET status = 1, accomplishdate = :null_dt, accomplishemp = '', acmpqty = orderqty * :ld_minrate WHERE (u_order_ml.scid = :arg_scid) AND (u_order_ml.porderid = :porderid) And (u_order_ml.mtrlid = :ll_porder_mtrlid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新包件产品主生产计划对应【指令单分离】相关对应产品指令单状态操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF END IF END IF ELSE //1.先检查主生产计划自制需求,需求数是否等于用料数,不等即说明有分配库存,跳过判断完成比例 //2.查询相应部件的完成情况,按需求量对比后得出主计划物料的完成数量 SELECT count(*) INTO :ll_cnt_zl FROM u_order_ml,u_mtrldef WHERE (u_order_ml.mtrlid = u_mtrldef.mtrlid) AND ( u_order_ml.porderid = :porderid ) AND ( u_order_ml.scid = :arg_scid ) AND ( u_order_ml.pzlorderid > 0 ) And ( u_mtrldef.ifpack = 2 ); IF sqlca.SQLCode <> 0 THEN arg_msg = '查询包件产品主生产计划个性包件指令状态失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_cnt_zl = 0 THEN arg_msg = '错误的个性包件指令数量,请检查' rslt = 0 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_order_ml WHERE u_order_ml.pzlorderid = :pzlorderid AND u_order_ml.scid = :arg_scid AND u_order_ml.AcmpQty < u_order_ml.orderqty - u_order_ml.stopqty And u_order_ml.ordertype = 4; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询个性包件产品主生产计划【分离指令】相关个性包件指令是否全部完成或终止失败'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN //相关自制需求全部完成,更新主生产计划已完成数及状态 IF pzlorderid = 0 THEN UPDATE u_order_ml SET status = 5, accomplishdate = getdate(), accomplishemp = :publ_operator, acmpqty = orderqty WHERE ( u_order_ml.porderid = :porderid ) AND (u_order_ml.scid = :arg_scid) And (u_order_ml.mtrlid = :ll_porder_mtrlid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "通用包件指令更新个性包件产品主生产计划【分离指令】完成状态失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ELSE UPDATE u_order_ml SET status = 5, accomplishdate = getdate(), accomplishemp = :publ_operator, acmpqty = orderqty WHERE ( u_order_ml.orderid = :pzlorderid ) And (u_order_ml.scid = :arg_scid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "个性包件指令更新个性包件产品主生产计划【分离指令】完成状态失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF ELSE //如果没有全部完成,则取自制需求的最小完成率去计算主生产计划的完成数 IF pzlorderid > 0 THEN SELECT min(AcmpQty/orderqty) INTO :ld_minrate FROM u_order_ml WHERE u_order_ml.pzlorderid = :pzlorderid AND u_order_ml.scid = :arg_scid And u_order_ml.ordertype = 4; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询个性包件产品主生产计划【分离指令】相关个性包件指令完成率失败'+"~n"+sqlca.SQLErrText GOTO ext END IF UPDATE u_order_ml SET status = 1, accomplishdate = :null_dt, accomplishemp = '', acmpqty = orderqty * :ld_minrate WHERE ( u_order_ml.orderid = :pzlorderid ) And (u_order_ml.scid = :arg_scid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新个性包件产品主生产计划【分离指令】完成状态失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF END IF IF ll_cnt > 0 THEN IF uo_option_packpro2_not_use_pack1 = 1 THEN ll_pack1_finish = 1 ELSE cnt = 0 SELECT count(*) INTO :cnt FROM u_orderrqmtrl,u_mtrldef WHERE u_orderrqmtrl.mtrlid = u_mtrldef.mtrlid AND ( u_mtrldef.ifpack = 1 ) AND u_orderrqmtrl.orderid = :porderid AND u_orderrqmtrl.scid = :arg_scid AND u_orderrqmtrl.inqty < u_orderrqmtrl.truerqqty AND u_orderrqmtrl.plantype = 0 And u_mtrldef.ifpack = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询个性包件产品主生产计划自制需求通用包件是否全部完成失败'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN ll_pack1_finish = 0 ELSE ll_pack1_finish = 1 END IF END IF ELSE ll_pack1_finish = 1 END IF ld_qty = 0 SELECT isnull(sum(AcmpQty),0) INTO :ld_qty FROM u_order_ml WHERE u_order_ml.porderid = :porderid AND u_order_ml.ordertype = 4 AND u_order_ml.pzlorderid = 0 And u_order_ml.mtrlid = :ll_porder_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关相关个性包件产品主生产计划【分离指令】完成数失败'+"~n"+sqlca.SQLErrText GOTO ext END IF UPDATE u_order_ml SET status = case when :ll_pack1_finish = 1 AND u_order_ml.orderqty - u_order_ml.stopqty = :ld_qty then 5 else 1 END, accomplishdate = case when :ll_pack1_finish = 1 AND u_order_ml.orderqty - u_order_ml.stopqty = :ld_qty then getdate() else :null_dt END, accomplishemp = case when :ll_pack1_finish = 1 AND u_order_ml.orderqty - u_order_ml.stopqty = :ld_qty then :publ_operator else '' END, acmpqty = :ld_qty WHERE ( u_order_ml.orderid = :porderid ) And (u_order_ml.scid = :arg_scid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新个性包件产品主生产计划完成状态失败"+"~n"+sqlca.SQLErrText GOTO ext 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 mod_perfinishdate (long arg_scid, long arg_orderid, datetime arg_oridate, datetime arg_newdate, string arg_reason, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime server_dt IF p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF Date(arg_oridate) = Date(arg_newdate) THEN rslt = 0 arg_msg = '新预计完成日期与原日期相同,无须更新,操作取消' GOTO ext END IF IF Date(arg_newdate) < Date(orderdate) THEN rslt = 0 arg_msg = '不合理的新预计完成日期(新预计完成日期早于生产计划日期)' GOTO ext END IF arg_reason = Trim(arg_reason) Long cnt Long ll_printid cnt = 0 SELECT count(*) INTO :cnt FROM u_order_ml_perfinishdate_log WHERE scid = :arg_scid AND orderid = :arg_orderid and logtype = 0 ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询预计完成日期修改日志失败'+'~n'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN ll_printid = 0 ELSE SELECT max(printid) INTO :ll_printid FROM u_order_ml_perfinishdate_log WHERE scid = :arg_scid AND orderid = :arg_orderid and logtype = 0 ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询预计完成日期修改日志失败'+'~n'+sqlca.SQLErrText GOTO ext END IF END IF ll_printid++ SELECT Top 1 getdate() INTO :server_dt FROM u_user ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF INSERT INTO u_order_ml_perfinishdate_log (scid, orderid, printid, logtype, oridate, newdate, reason, modemp, moddate) VALUES (:arg_scid, :arg_orderid, :ll_printid, 0, :arg_oridate, :arg_newdate, :arg_reason, :publ_operator, :server_dt); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入预计完成日期修改日志操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF UPDATE u_order_ml SET perfinishdate = :arg_newdate WHERE scid = :arg_scid AND orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新预计完成日期失败'+'~n'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF Return(rslt) end function public function integer f_add_dstrqty_ws (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_noallocqty, decimal arg_allocqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_ordertype Long cnt Long ll_taskid[] Decimal ld_qty_tmp,ld_rqqty_tmp,ld_dstrqty_tmp,ld_update_qty Long ll_porderid Long i Boolean lb_iffind Long ll_i,ll_cnt Long ll_issuliao Long ll_wrkGrpid,ll_storageid Decimal ld_price IF arg_orderid <= 0 THEN rslt = 0 arg_msg = '错误的指令单唯一码' GOTO ext END IF IF arg_wrkGrpid <= 0 THEN rslt = 0 arg_msg = '错误的工作组唯一码' GOTO ext END IF IF arg_mtrlid <= 0 THEN rslt = 0 arg_msg = '错误的物料唯一码' GOTO ext END IF SELECT issuliao INTO :ll_issuliao FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料领料属性失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_issuliao = 2 Or ll_issuliao = 3 THEN Decimal ld_slscllweight,ld_orderweight UPDATE u_order_ml SET slscllweight = slscllweight + :arg_noallocqty FROM u_order_ml WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新塑料领料总重失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF SELECT wrkGrpid INTO :ll_wrkGrpid FROM u_order_ml WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询指令单所属车间失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT u_sc_wkp.storageid INTO :ll_storageid FROM u_storage,u_sc_wkp WHERE u_sc_wkp.wrkgrpid = :ll_wrkgrpid And u_sc_wkp.storageid = u_storage.storageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询车间对应仓库属性失败'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT top 1 u_mtrlware.cost INTO :ld_price FROM u_mtrlware,u_mtrldef WHERE u_mtrlware.storageid = :ll_storageid AND u_mtrlware.mtrlid = :arg_mtrlid AND u_mtrlware.status = :arg_status AND u_mtrlware.woodcode = :arg_woodcode AND u_mtrlware.pcode = :arg_pcode And u_mtrlware.mtrlid = u_mtrldef.mtrlid; IF sqlca.SQLCode <> 0 THEN // arg_msg = '查询库存成本价失败,'+string(arg_mtrlid)+sqlca.SQLErrText // rslt = 0 // GOTO ext ld_price = 0 END IF IF IsNull(ld_price) THEN ld_price = 0 UPDATE u_orderrqmtrl_scll SET DstrQty = DstrQty + :arg_noallocqty, wsdstrqty = wsdstrqty + :arg_noallocqty + :arg_allocqty, costamt = costamt + :arg_noallocqty * :ld_price WHERE orderid = :arg_orderid AND mtrlid = :arg_mtrlid AND wrkGrpid = :arg_wrkGrpid AND scid = :arg_scid AND status = :arg_status AND woodcode = :arg_woodcode And pcode = :arg_pcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_order_ml_mx WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询计划明细失败,'+sqlca.SQLErrText GOTO ext END IF SELECT ordertype,porderid INTO :li_ordertype,:ll_porderid FROM u_order_ml WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询生产计划资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 1 THEN IF li_ordertype = 4 And ll_porderid = 0 THEN arg_msg = '错误的计划资料,计划类型为指令单,但没有上级生产计划' rslt = 0 GOTO ext END IF ELSE IF li_ordertype = 4 THEN IF arg_noallocqty > 0 THEN DECLARE cur_mx CURSOR FOR SELECT taskid FROM u_order_ml_mx WHERE scid = :arg_scid AND orderid = :arg_orderid Order By taskid ; OPEN cur_mx ; FETCH cur_mx Into :ll_taskid[i]; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx Into :ll_taskid[i]; LOOP CLOSE cur_mx; ELSE DECLARE cur_mx_2 CURSOR FOR SELECT taskid FROM u_order_ml_mx WHERE scid = :arg_scid AND orderid = :arg_orderid Order By taskid Desc; OPEN cur_mx_2 ; FETCH cur_mx_2 Into :ll_taskid[i]; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx_2 Into :ll_taskid[i]; LOOP CLOSE cur_mx_2; END IF END IF END IF //更新需求表 Long ll_orderid_update IF cnt = 1 THEN IF li_ordertype = 4 THEN ll_orderid_update = ll_porderid ELSE ll_orderid_update = arg_orderid END IF UPDATE u_orderrqmtrl SET DstrQty = DstrQty + :arg_noallocqty WHERE orderid = :ll_orderid_update AND mtrlid = :arg_mtrlid AND wrkGrpid = :arg_wrkgrpid AND scid = :arg_scid AND status = :arg_status AND woodcode = :arg_woodcode And pcode = :arg_pcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText GOTO ext END IF ELSE IF li_ordertype <> 4 THEN //如果是主计划,直接更新 UPDATE u_orderrqmtrl SET DstrQty = DstrQty + :arg_noallocqty WHERE orderid = :arg_orderid AND mtrlid = :arg_mtrlid AND wrkGrpid = :arg_wrkgrpid AND scid = :arg_scid AND status = :arg_status AND woodcode = :arg_woodcode And pcode = :arg_pcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText GOTO ext END IF ELSE ld_qty_tmp = arg_noallocqty lb_iffind = False FOR ll_i = 1 To cnt ll_cnt = 0 SELECT count(*) INTO :ll_cnt FROM u_orderrqmtrl WHERE orderid = :ll_taskid[ll_i] AND mtrlid = :arg_mtrlid AND wrkGrpid = :arg_wrkgrpid AND scid = :arg_scid AND status = :arg_status AND woodcode = :arg_woodcode And pcode = :arg_pcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText GOTO ext END IF IF ll_cnt = 0 THEN IF ll_i = cnt And lb_iffind = False THEN rslt = 0 arg_msg = '查询物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText GOTO ext ELSE CONTINUE END IF ELSE lb_iffind = True END IF SELECT rqqty,DstrQty INTO :ld_rqqty_tmp,:ld_dstrqty_tmp FROM u_orderrqmtrl WHERE orderid = :ll_taskid[ll_i] AND mtrlid = :arg_mtrlid AND wrkGrpid = :arg_wrkgrpid AND scid = :arg_scid AND status = :arg_status AND woodcode = :arg_woodcode And pcode = :arg_pcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText GOTO ext END IF IF arg_noallocqty > 0 THEN //领料单审核 IF ld_qty_tmp > ld_rqqty_tmp - ld_dstrqty_tmp THEN IF ll_i = cnt THEN ld_update_qty = ld_qty_tmp ld_qty_tmp = 0 ELSE ld_update_qty = ld_rqqty_tmp - ld_dstrqty_tmp ld_qty_tmp = ld_qty_tmp - (ld_rqqty_tmp - ld_dstrqty_tmp) END IF ELSE ld_update_qty = ld_qty_tmp ld_qty_tmp = 0 END IF ELSEIF arg_noallocqty < 0 THEN //领料单撤审 IF 0 - ld_qty_tmp > ld_dstrqty_tmp THEN IF ll_i = cnt THEN ld_update_qty = 0 - ld_dstrqty_tmp ld_qty_tmp = 0 ELSE ld_update_qty = 0 - ld_dstrqty_tmp ld_qty_tmp = ld_qty_tmp + ld_dstrqty_tmp END IF ELSE ld_update_qty = ld_qty_tmp ld_qty_tmp = 0 END IF END IF UPDATE u_orderrqmtrl SET DstrQty = DstrQty + :ld_update_qty WHERE orderid = :ll_taskid[ll_i] AND mtrlid = :arg_mtrlid AND wrkGrpid = :arg_wrkgrpid AND scid = :arg_scid AND status = :arg_status AND woodcode = :arg_woodcode And pcode = :arg_pcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText GOTO ext END IF IF ld_qty_tmp = 0 THEN EXIT NEXT 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 f_add_dstrqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, decimal arg_costamt, ref string arg_msg, boolean arg_ifcommit, long arg_relint_1, ref decimal arg_overqty);Int rslt = 1 Long ll_wrkgrpid,ll_porderid Decimal ld_rqqty,ld_dstrqty Int li_ordertype Long cnt Long ll_taskid[] String ls_taskcode[] Long i = 1 Long ll_i Decimal ld_qty_tmp,ld_rqqty_tmp,ld_dstrqty_tmp,ld_update_qty Long ll_cnt Boolean lb_iffind = False Decimal ld_update_qty_scll,ld_update_amt_scll Long ll_mtrlkind,ll_issuliao Decimal ld_scllrate,ld_scllqty String ls_ordercode,ls_pordercode If uo_option_scll_back_check = -1000 Then rslt = 0 arg_msg = '选项:[379]退料单检查允许退料数量,读取初始默认值失败,操作取消!' Goto ext End If it_mx_rq = 0 ins_s_rqmtrl = ins_s_empty If arg_orderid <= 0 Then rslt = 0 arg_msg = '错误的计划唯一码' Goto ext End If cnt = 0 Select count(*) Into :cnt From u_order_ml_mx Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询计划明细失败,'+sqlca.SQLErrText Goto ext End If Select ordertype,porderid,ordercode,pordercode Into :li_ordertype,:ll_porderid,:ls_ordercode,:ls_pordercode From u_order_ml Where scid = :arg_scid And orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then arg_msg = '查询生产计划资料失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt = 1 Then If li_ordertype = 4 And ll_porderid = 0 Then arg_msg = '错误的计划资料,计划类型为指令单,但没有上级生产计划' rslt = 0 Goto ext End If Else If li_ordertype = 4 Then If arg_qty > 0 Then Declare cur_mx Cursor For Select taskid,taskcode From u_order_ml_mx Where scid = :arg_scid And orderid = :arg_orderid Order By taskid ; Open cur_mx ; Fetch cur_mx Into :ll_taskid[i],:ls_taskcode[i]; Do While sqlca.SQLCode = 0 i++ Fetch cur_mx Into :ll_taskid[i],:ls_taskcode[i]; Loop Close cur_mx; Else Declare cur_mx_2 Cursor For Select taskid,taskcode From u_order_ml_mx Where scid = :arg_scid And orderid = :arg_orderid Order By taskid Desc; Open cur_mx_2 ; Fetch cur_mx_2 Into :ll_taskid[i],:ls_taskcode[i]; Do While sqlca.SQLCode = 0 i++ Fetch cur_mx_2 Into :ll_taskid[i],:ls_taskcode[i]; Loop Close cur_mx_2; End If End If End If //后面增加top 1 处理 2013.06.18 //If arg_wrkGrpid <= 0 Then // rslt = 0 // arg_msg = '错误的工作中心唯一码' // Goto ext //End If If arg_mtrlid <= 0 Then rslt = 0 arg_msg = '错误的物料唯一码' Goto ext End If Select mtrlkind, issuliao, scllrate, scllqty Into :ll_mtrlkind, :ll_issuliao, :ld_scllrate, :ld_scllqty From u_mtrldef Where mtrlid = :arg_mtrlid; If sqlca.SQLCode <> 0 Then arg_msg = '指令单:'+ls_ordercode+'查询物料领料属性失败,ID'+String(arg_mtrlid) +' ' +sqlca.SQLErrText rslt = 0 Goto ext End If //后面增加top 1 处理 2013.06.18 If arg_wrkGrpid > 0 Then Select wrkGrpid Into :ll_wrkgrpid From u_workgroup Where workgroupid = :arg_wrkGrpid; If sqlca.SQLCode <> 0 Then arg_msg = '指令单:'+ls_ordercode+'查询工作中心所属工组失败,ID:'+String(arg_wrkGrpid) +' ' +sqlca.SQLErrText rslt = 0 Goto ext End If Else ll_wrkgrpid = 0 End If If ll_issuliao = 2 Or ll_issuliao = 3 Then Decimal ld_slscllweight,ld_orderweight Update u_order_ml Set slscllweight = slscllweight + :arg_qty From u_order_ml Where orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then arg_msg = '更新塑料领料总重失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If End If If arg_relint_1 = 0 Or arg_relint_1 = 2 Or arg_relint_1 = 5 Then //领料单 or 退料单 Select truerqqty,dstrqty Into :ld_rqqty,:ld_dstrqty From u_orderrqmtrl_scll Where orderid = :arg_orderid And mtrlid = :arg_mtrlid And wrkGrpid = :ll_wrkgrpid And scid = :arg_scid And status = :arg_status And woodcode = :arg_woodcode And pcode = :arg_pcode; If sqlca.SQLCode <> 0 Then arg_msg = '指令单:'+ls_ordercode+'查询物料:'+arg_mtrlcode+'已领料数失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If IsNull(ld_rqqty) Then ld_rqqty = 0 If IsNull(ld_dstrqty) Then ld_dstrqty = 0 If arg_relint_1 = 0 Or arg_relint_1 = 5 Then If ll_mtrlkind = 0 Then If ld_dstrqty + arg_qty > ld_rqqty * (1 + ld_scllrate) + ld_scllqty Then arg_msg = '指令单:'+ls_ordercode+'物料:'+arg_mtrlcode+'未领料数只有:'+String(ld_rqqty - ld_dstrqty,'#,#0.0#') + ',可领数只有:' +String(ld_rqqty * (1 + ld_scllrate) + ld_scllqty - ld_dstrqty,'#,#0.0#')+',不能领料:'+String(arg_qty,'#,#0.0#') rslt = 0 Goto ext End If ld_update_qty_scll = arg_qty ld_update_amt_scll = arg_costamt arg_overqty = 0 Else If arg_qty > 0 Then If ld_dstrqty + arg_qty > ld_rqqty Then ld_update_qty_scll = ld_rqqty - ld_dstrqty ld_update_amt_scll = (arg_costamt / arg_qty) * (ld_rqqty - ld_dstrqty) arg_overqty = ld_dstrqty + arg_qty - ld_rqqty Else ld_update_qty_scll = arg_qty ld_update_amt_scll = arg_costamt arg_overqty = 0 End If Else If ld_dstrqty + arg_qty < 0 Then ld_update_qty_scll = 0 - ld_dstrqty ld_update_amt_scll = (arg_costamt / arg_qty) * (0 - ld_dstrqty) arg_overqty = ld_dstrqty + arg_qty Else ld_update_qty_scll = arg_qty ld_update_amt_scll = arg_costamt arg_overqty = 0 End If End If End If ElseIf arg_relint_1 = 2 Then If arg_qty < 0 Then //审核还料单时检查,撤审时不检查 If ld_dstrqty < Abs(arg_qty) Then arg_msg = '指令单:'+ls_ordercode+'物料:'+arg_mtrlcode+'已领料数只有:'+String(ld_dstrqty,'#,#0.0#')+',不能退料:'+String(arg_qty,'#,#0.0#') rslt = 0 Goto ext End If If uo_option_scll_back_check = 1 Then Decimal ld_orderqty,ld_acmpqty Decimal ld_blrate,ld_canbackqty Select orderqty,acmpqty Into :ld_orderqty,:ld_acmpqty From u_order_ml Where scid = :arg_scid And orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询指令单:'+ls_ordercode+'已进仓数失败,'+sqlca.SQLErrText Goto ext End If If ld_orderqty > 0 Then ld_blrate = ld_rqqty / ld_orderqty ld_canbackqty = ld_dstrqty - ld_blrate * ld_acmpqty If Abs(arg_qty) > ld_canbackqty Then arg_msg = '指令单:'+ls_ordercode+'已进仓数:'+string(ld_acmpqty,'#,#0.0#')+',物料:'+arg_mtrlcode+'对应已用料数量:'+string(ld_blrate * ld_acmpqty,'#,#0.0#')+',已领数:'+string(ld_dstrqty,'#,#0.0#')+',可退料数只有:'+String(ld_canbackqty,'#,#0.0#')+',不能退料:'+String(arg_qty,'#,#0.0#') rslt = 0 Goto ext End If End If End If End If ld_update_qty_scll = arg_qty ld_update_amt_scll = arg_costamt End If ElseIf arg_relint_1 = -1 Then ld_update_qty_scll = arg_qty ld_update_amt_scll = arg_costamt End If If Not (arg_relint_1 = -1 And li_ordertype <> 3) Then Update u_orderrqmtrl_scll Set DstrQty = DstrQty + :ld_update_qty_scll, costamt = costamt + :ld_update_amt_scll Where orderid = :arg_orderid And mtrlid = :arg_mtrlid And wrkGrpid = :ll_wrkgrpid And scid = :arg_scid And status = :arg_status And woodcode = :arg_woodcode And pcode = :arg_pcode; If sqlca.SQLCode = 0 Then If sqlca.SQLNRows = 0 Then Insert Into u_orderrqmtrl_scll (scid, OrderID, MtrlID, wrkGrpid, truerqqty, DstrQty, costamt, status, woodcode, pcode) Values (:arg_scid, :arg_orderid, :arg_mtrlid, :ll_wrkgrpid, :arg_Qty, 0, :arg_costamt, :arg_status, :arg_woodcode, :arg_pcode); If sqlca.SQLCode <> 0 Then arg_msg = '指令单:'+ls_ordercode+'物料:'+arg_mtrlcode + '新建领料明细失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If End If datastore ds_sl ds_sl = Create datastore ds_sl.DataObject = "ds_slcost" ds_sl.SetTransObject(sqlca) ds_sl.Retrieve(arg_scid,arg_orderid) Long ll_row Decimal ld_slcost = 0,ld_planslcost = 0 ll_row = ds_sl.RowCount() If ll_row > 0 Then For ll_i = 1 To ll_row If ds_sl.Object.u_mtrldef_issuliao[ll_i] = 2 Or ds_sl.Object.u_mtrldef_issuliao[ll_i] = 3 Then ld_slcost = ld_slcost + ds_sl.Object.u_orderrqmtrl_scll_costamt[ll_i] //ds_sl.Object.u_orderrqmtrl_truerqqty[ll_i] * ds_sl.Object.price[ll_i] ld_planslcost = ld_planslcost + ds_sl.Object.u_orderrqmtrl_scll_truerqqty[ll_i] * ds_sl.Object.price[ll_i] End If Next End If Update u_order_ml Set u_order_ml.slcost = :ld_slcost, u_order_ml.planslcost = :ld_planslcost Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '指令单:'+ls_ordercode+'更新计划塑料成本失败,'+sqlca.SQLErrText Goto ext End If Else rslt = 0 arg_msg = '指令单:'+ls_ordercode+'更新物料:'+arg_mtrlcode+',领料数失败>>'+sqlca.SQLErrText Goto ext End If End If //更新需求表 Long ll_orderid_update String ls_ordercode_update If cnt = 1 Then If li_ordertype = 4 Then ll_orderid_update = ll_porderid ls_ordercode_update = ls_pordercode Else ll_orderid_update = arg_orderid ls_ordercode_update = ls_ordercode End If Update u_orderrqmtrl Set DstrQty = DstrQty + :arg_qty Where orderid = :ll_orderid_update And mtrlid = :arg_mtrlid And wrkGrpid = :ll_wrkgrpid And scid = :arg_scid And status = :arg_status And woodcode = :arg_woodcode And pcode = :arg_pcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '生产计划:'+ls_ordercode_update +',更新物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText Goto ext ElseIf sqlca.SQLNRows = 0 Then Select top 1 wrkgrpid Into :ll_wrkgrpid From u_orderrqmtrl Where orderid = :ll_orderid_update And mtrlid = :arg_mtrlid And scid = :arg_scid And status = :arg_status And woodcode = :arg_woodcode And pcode = :arg_pcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '生产计划:'+ls_ordercode_update +',物料:'+arg_mtrlcode+',查询物料需求明细失败(领料组)>>'+sqlca.SQLErrText Goto ext ElseIf sqlca.SQLNRows = 0 Then rslt = 0 arg_msg = '生产计划:'+ls_ordercode_update +',物料:'+arg_mtrlcode+',查询物料需求明细失败(领料组)>>找不到相关行' Goto ext End If Update u_orderrqmtrl Set DstrQty = DstrQty + :arg_qty Where orderid = :ll_orderid_update And mtrlid = :arg_mtrlid And wrkGrpid = :ll_wrkgrpid And scid = :arg_scid And status = :arg_status And woodcode = :arg_woodcode And pcode = :arg_pcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '生产计划:'+ls_ordercode_update +',更新物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText Goto ext ElseIf sqlca.SQLNRows = 0 Then rslt = 0 arg_msg = '生产计划:'+ls_ordercode_update +',更新物料:'+arg_mtrlcode+',计划需求明细失败>>找不到相关更新行' Goto ext End If End If it_mx_rq++ ins_s_rqmtrl.mtrlid[it_mx_rq] = arg_mtrlid ins_s_rqmtrl.status[it_mx_rq] = arg_status ins_s_rqmtrl.woodcode[it_mx_rq] = arg_woodcode ins_s_rqmtrl.pcode[it_mx_rq] = arg_pcode ins_s_rqmtrl.wrkGrpid[it_mx_rq] = ll_wrkgrpid ins_s_rqmtrl.orderid[it_mx_rq] = ll_orderid_update ins_s_rqmtrl.qty[it_mx_rq] = arg_qty ins_s_rqmtrl.scid[it_mx_rq] = arg_scid Else If li_ordertype <> 4 Then //如果是主计划,直接更新 Update u_orderrqmtrl Set DstrQty = DstrQty + :arg_qty Where orderid = :arg_orderid And mtrlid = :arg_mtrlid And wrkGrpid = :ll_wrkgrpid And scid = :arg_scid And status = :arg_status And woodcode = :arg_woodcode And pcode = :arg_pcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '生产计划:'+ls_ordercode+'更新物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText Goto ext ElseIf sqlca.SQLNRows = 0 Then rslt = 0 arg_msg = '生产计划:'+ls_ordercode+'更新物料:'+arg_mtrlcode+',计划需求明细失败>>找不到相关更新行' Goto ext End If it_mx_rq++ ins_s_rqmtrl.mtrlid[it_mx_rq] = arg_mtrlid ins_s_rqmtrl.status[it_mx_rq] = arg_status ins_s_rqmtrl.woodcode[it_mx_rq] = arg_woodcode ins_s_rqmtrl.pcode[it_mx_rq] = arg_pcode ins_s_rqmtrl.wrkGrpid[it_mx_rq] = ll_wrkgrpid ins_s_rqmtrl.orderid[it_mx_rq] = arg_orderid ins_s_rqmtrl.qty[it_mx_rq] = arg_qty ins_s_rqmtrl.scid[it_mx_rq] = arg_scid Else ld_qty_tmp = arg_qty lb_iffind = False For ll_i = 1 To cnt ll_cnt = 0 Select count(*) Into :ll_cnt From u_orderrqmtrl Where orderid = :ll_taskid[ll_i] And mtrlid = :arg_mtrlid And wrkGrpid = :ll_wrkgrpid And scid = :arg_scid And status = :arg_status And woodcode = :arg_woodcode And pcode = :arg_pcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '生产计划:'+ls_taskcode[ll_i]+',查询物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText Goto ext End If If ll_cnt = 0 Then If ll_i = cnt And lb_iffind = False Then rslt = 0 arg_msg = '生产计划:'+ls_taskcode[ll_i]+',查询物料:'+arg_mtrlcode+',计划需求明细失败>>找不到相关行' Goto ext Else Continue End If Else lb_iffind = True End If Select rqqty,DstrQty Into :ld_rqqty_tmp,:ld_dstrqty_tmp From u_orderrqmtrl Where orderid = :ll_taskid[ll_i] And mtrlid = :arg_mtrlid And wrkGrpid = :ll_wrkgrpid And scid = :arg_scid And status = :arg_status And woodcode = :arg_woodcode And pcode = :arg_pcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '生产计划:'+ls_taskcode[ll_i]+',查询物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText Goto ext ElseIf sqlca.SQLNRows = 0 Then rslt = 0 arg_msg = '生产计划:'+ls_taskcode[ll_i]+',查询物料:'+arg_mtrlcode+',计划需求明细失败>>找不到相关行' Goto ext End If If arg_qty > 0 Then //领料单审核 If ld_qty_tmp > ld_rqqty_tmp - ld_dstrqty_tmp Then If ll_i = cnt Then ld_update_qty = ld_qty_tmp ld_qty_tmp = 0 Else ld_update_qty = ld_rqqty_tmp - ld_dstrqty_tmp ld_qty_tmp = ld_qty_tmp - (ld_rqqty_tmp - ld_dstrqty_tmp) End If Else ld_update_qty = ld_qty_tmp ld_qty_tmp = 0 End If ElseIf arg_qty < 0 Then //领料单撤审 If 0 - ld_qty_tmp > ld_dstrqty_tmp Then If ll_i = cnt Then ld_update_qty = 0 - ld_dstrqty_tmp ld_qty_tmp = 0 Else ld_update_qty = 0 - ld_dstrqty_tmp ld_qty_tmp = ld_qty_tmp + ld_dstrqty_tmp End If Else ld_update_qty = ld_qty_tmp ld_qty_tmp = 0 End If End If Update u_orderrqmtrl Set DstrQty = DstrQty + :ld_update_qty Where orderid = :ll_taskid[ll_i] And mtrlid = :arg_mtrlid And wrkGrpid = :ll_wrkgrpid And scid = :arg_scid And status = :arg_status And woodcode = :arg_woodcode And pcode = :arg_pcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '生产计划:'+ls_taskcode[ll_i]+',更新物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText Goto ext ElseIf sqlca.SQLNRows = 0 Then rslt = 0 arg_msg = '生产计划:'+ls_taskcode[ll_i]+',更新物料:'+arg_mtrlcode+',计划需求明细失败>>找不到相关更新行' Goto ext End If it_mx_rq++ ins_s_rqmtrl.mtrlid[it_mx_rq] = arg_mtrlid ins_s_rqmtrl.status[it_mx_rq] = arg_status ins_s_rqmtrl.woodcode[it_mx_rq] = arg_woodcode ins_s_rqmtrl.pcode[it_mx_rq] = arg_pcode ins_s_rqmtrl.wrkGrpid[it_mx_rq] = ll_wrkgrpid ins_s_rqmtrl.orderid[it_mx_rq] = ll_taskid[ll_i] ins_s_rqmtrl.qty[it_mx_rq] = ld_update_qty ins_s_rqmtrl.scid[it_mx_rq] = arg_scid If ld_qty_tmp = 0 Then Exit Next 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 uof_stopjj (long arg_scid, long arg_orderid, string arg_reason, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) IF rslt = 0 THEN GOTO ext IF status = 0 THEN rslt = 0 arg_msg = "待审核状态下不能执行终止计件操作,请核对" GOTO ext END IF IF stopjj = 1 THEN rslt = 0 arg_msg = '已执行过终止计件操作,不能重复执行' GOTO ext END IF IF Trim(arg_reason) = '' THEN rslt = 0 arg_msg = '请说明终止计件的原因' GOTO ext END IF UPDATE u_order_ml SET stopjj = 1, stopjjemp = :publ_operator, stopjjdate = getdate(), stopjjreason = :arg_reason WHERE orderid = :arg_orderid AND scid = :arg_scid and stopjj = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致终止计件操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF Return (rslt) end function public function integer uof_add_fpqty (long arg_scid, long arg_orderid, long arg_fpscid, long arg_fporderid, decimal arg_fpqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt String ls_ordercode String ls_fpdscrp IF IsNull(arg_scid) THEN arg_scid = 0 IF IsNull(arg_orderid) THEN arg_orderid = 0 IF IsNull(arg_fpscid) THEN arg_fpscid = 0 IF IsNull(arg_fporderid) THEN arg_fporderid = 0 IF IsNull(arg_fpqty) THEN arg_fpqty = 0 IF arg_fpqty <= 0 THEN rslt = 0 arg_msg = '不合理的分配数量' GOTO ext END IF SELECT count(*) INTO :cnt FROM u_order_ml WHERE scid = :arg_scid AND orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询主计划资料失败,'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '主计划资料不存在' GOTO ext END IF SELECT count(*) INTO :cnt FROM u_order_ml WHERE scid = :arg_fpscid AND orderid = :arg_fporderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询被分配主计划资料失败,'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '被分配计划资料不存在' GOTO ext END IF Decimal ld_fpqty Decimal ld_orderqty SELECT orderqty,fpqty INTO :ld_orderqty,:ld_fpqty FROM u_order_ml WHERE scid = :arg_fpscid AND orderid = :arg_fporderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询被分配计划信息失败'+sqlca.SQLErrText GOTO ext END IF IF ld_fpqty + arg_fpqty > ld_orderqty THEN rslt = 0 arg_msg = '分配数量'+String(arg_fpqty,'#,##0.##########')+' 不能大于被分配计划的未分配数量'+String(ld_orderqty - ld_fpqty,'#,##0.##########') GOTO ext END IF INSERT INTO u_order_fpmx (scid, orderid, fpscid, fporderid, fpqty) VALUES (:arg_scid, :arg_orderid, :arg_fpscid, :arg_fporderid, :arg_fpqty); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入分配明细表失败'+sqlca.SQLErrText GOTO ext END IF SELECT ordercode INTO :ls_ordercode FROM u_order_ml WHERE scid = :arg_scid AND orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询主计划号失败'+sqlca.SQLErrText GOTO ext END IF ls_fpdscrp = ls_ordercode+'/'+String(arg_fpqty,'#,##0.##########')+';' UPDATE u_order_ml SET fpqty = fpqty + :arg_fpqty, fpdscrp = fpdscrp + :ls_fpdscrp WHERE scid = :arg_fpscid AND orderid = :arg_fporderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询被分配计划的分配数量失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_del_fpqty (long arg_scid, long arg_orderid, long arg_fpscid, long arg_fporderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt String ls_ordercode String ls_fpdscrp IF IsNull(arg_scid) THEN arg_scid = 0 IF IsNull(arg_orderid) THEN arg_orderid = 0 IF IsNull(arg_fpscid) THEN arg_fpscid = 0 IF IsNull(arg_fporderid) THEN arg_fporderid = 0 SELECT count(*) INTO :cnt FROM u_order_ml WHERE scid = :arg_scid AND orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询主计划资料失败,'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '主计划资料不存在' GOTO ext END IF SELECT count(*) INTO :cnt FROM u_order_ml WHERE scid = :arg_fpscid AND orderid = :arg_fporderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询被分配主计划资料失败,'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '被分配计划资料不存在' GOTO ext END IF Decimal ld_fpqty SELECT fpqty INTO :ld_fpqty FROM u_order_fpmx WHERE scid = :arg_scid AND orderid = :arg_orderid AND fpscid = :arg_fpscid AND fporderid = :arg_fporderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询分配数量失败'+sqlca.SQLErrText GOTO ext END IF SELECT ordercode INTO :ls_ordercode FROM u_order_ml WHERE scid = :arg_scid AND orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询主计划号失败'+sqlca.SQLErrText GOTO ext END IF ls_fpdscrp = ls_ordercode+'/'+String(ld_fpqty,'#,##0.##########')+';' UPDATE u_order_ml SET fpqty = fpqty - :ld_fpqty, fpdscrp = replace(fpdscrp,:ls_fpdscrp,'') WHERE scid = :arg_fpscid AND orderid = :arg_fporderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询被分配计划的分配数量失败'+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_order_fpmx WHERE orderid = :arg_orderid AND scid = :arg_scid and fpscid = :arg_fpscid and fporderid = :arg_fporderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除计划分配明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uf_add_taskqty (long arg_scid, long arg_orderid, long arg_mtrlid, string arg_procode, decimal arg_taskqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 If arg_orderid <= 0 Then rslt = 0 arg_msg = '错误的计划唯一码' Goto ext End If If arg_mtrlid <= 0 Then rslt = 0 arg_msg = '错误的物料ID唯一码' Goto ext End If If arg_procode = '' Or IsNull(arg_procode) Then rslt = 0 arg_msg = '错误的工序序号' Goto ext End If Int li_status,li_finish_scflag Select status,finish_scflag Into :li_status,:li_finish_scflag From u_order_ml Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then arg_msg = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If //IF li_status <> 1 and li_status <> 5 and li_status <> 6 THEN // rslt = 0 // arg_msg = "计划只有在进行或已完成状态才可以执行操作,请核对" // GOTO ext //END IF If li_status = 0 Then rslt = 0 arg_msg = "计划只有在进行或已完成状态才可以执行操作,请核对" Goto ext End If If li_finish_scflag = 1 Then rslt = 0 arg_msg = '生产计划/指令单已完成派工,请核对' Goto ext End If Update u_orderrqwp Set taskqty = taskqty + :arg_taskqty Where orderid = :arg_orderid And mtrlid = :arg_mtrlid And procode = :arg_procode And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '因网络或其他原因导致更新已安排时数失败'+sqlca.SQLErrText Goto ext Else If sqlca.SQLNRows = 0 Then rslt = 0 arg_msg = '没有找到可更新的指令单工序进度' Goto ext 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 addmxskl (long arg_scid, long arg_orderid, decimal arg_qty, decimal arg_costamt, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 Decimal ld_slweight,ld_sklweight,ld_slscllweight String ls_mtrlname IF uo_option_skl_overscll = -1000 THEN rslt = 0 arg_msg = '选项:[160]是否允许水口料超领料数入库,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_skl_overscll_rate = -1000 THEN rslt = 0 arg_msg = '选项:[197]水口料超计划回收比例,读取初始默认值失败,操作取消!' GOTO ext END IF rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) IF rslt = 0 THEN GOTO ext IF arg_qty = 0 THEN rslt = 0 arg_msg = "没有水口料回收数量" GOTO ext END IF SELECT u_mtrldef.mtrlname INTO :ls_mtrlname FROM u_Order_ml INNER JOIN u_mtrldef_sl ON u_Order_ml.mtrlid = u_mtrldef_sl.mtrlid INNER JOIN u_mtrldef ON u_mtrldef_sl.sk_mtrlid = u_mtrldef.mtrlid Where u_Order_ml.orderid = :arg_orderid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品唯一码导致查询水口料操作失败" GOTO ext END IF IF uo_option_skl_overscll = 0 THEN //不允许超计划 SELECT slweight,sklweight,slscllweight INTO :ld_slweight,:ld_sklweight,:ld_slscllweight FROM u_order_ml WHERE ( orderid = :arg_orderid ) And ( scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误查询生产计划塑料成品总重或水口料总重操作失败" GOTO ext END IF IF ld_slscllweight < ld_sklweight + ld_slweight + arg_qty THEN rslt = 0 arg_msg = '该计划明细对应的水口料['+ls_mtrlname+']'+'~r~n'+'本次回收数量大于本计划水口料可回收数:'+String(ld_slscllweight - ld_slweight - ld_sklweight,'0.####')+'~r~n' +'塑料成品总重:'+String(ld_slweight,'0.####')+',塑料领料总重:'+String(ld_slscllweight,'0.####')+', 已回收水口料重量:'+String(ld_sklweight,'0.####') GOTO ext END IF ELSEIF uo_option_skl_overscll = 2 THEN //允许但按比例限制 SELECT slweight,sklweight,slscllweight INTO :ld_slweight,:ld_sklweight,:ld_slscllweight FROM u_order_ml WHERE ( orderid = :arg_orderid ) And ( scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误查询生产计划塑料成品总重或水口料总重操作失败" GOTO ext END IF IF (ld_slscllweight - ld_slweight) * (1 + uo_option_skl_overscll_rate) < ld_sklweight + arg_qty THEN rslt = 0 arg_msg = '该计划明细对应的水口料['+ls_mtrlname+']'+'~r~n'+'本次回收数量大于本计划水口料可回收数:'+String( (ld_slscllweight - ld_slweight) * (1 + uo_option_skl_overscll_rate) - ld_sklweight,'0.####')+'~r~n' +'塑料成品总重:'+String(ld_slweight,'0.####')+',塑料领料总重:'+String(ld_slscllweight,'0.####')+', 已回收水口料重量:'+String(ld_sklweight,'0.####') GOTO ext END IF END IF UPDATE u_order_ml SET sklweight = sklweight + :arg_qty, slcost = slcost - :arg_costamt WHERE ( orderid = :arg_orderid ) And ( scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品唯一码导致更新生产计划水口料重量操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF p_reset() Return (rslt) end function public function integer uof_order_cmpcost (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 Long ll_issuliao Long ll_mtrlid IF uo_option_use_suliao = -1000 THEN rslt = 0 arg_msg = '选项:[159]启用注塑模块,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_management_cost = -1000 THEN rslt = 0 arg_msg = '选项:[161]月设备总管理费,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_ect_price = -1000 THEN rslt = 0 arg_msg = '选项:[162]电费单价,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_use_suliao = 0 THEN RETURN 1 IF p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF SELECT u_mtrldef.mtrlid,issuliao INTO :ll_mtrlid,:ll_issuliao FROM u_mtrldef,u_order_ml WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid AND u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料属性失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_issuliao = 1 THEN //如果是塑料件,则计算注塑成本 Decimal ld_ysamt,ld_bgamt,ld_kcamt,ld_bxamt,ld_bzamt,ld_wfjgamt,ld_qtamt Decimal ld_ftqty Decimal ld_ftcost Long ll_macnt,ll_wage_rowcnt,ll_i,ll_sb_rowcnt,ll_j Decimal ld_award,ld_stantby,ld_zxcost,ld_cp,ld_bcp,ld_rlcost Decimal ld_time,ld_ect,ld_sbcost,ld_glcost,ld_ectcost //查询分滩成本 SELECT ysamt, bgamt, kcamt, bxamt, bzamt, ftqty, wfjgamt, qtamt INTO :ld_ysamt, :ld_bgamt, :ld_kcamt, :ld_bxamt, :ld_bzamt, :ld_ftqty , :ld_wfjgamt, :ld_qtamt FROM u_order_ml WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询分滩数量失败,'+sqlca.SQLErrText GOTO ext END IF IF ld_ftqty > 0 THEN ld_ftcost = (ld_ysamt + ld_bgamt + ld_kcamt + ld_bxamt + ld_bzamt + ld_qtamt) / ld_ftqty ELSE ld_ftcost = 0 END IF //查询本厂机台数量,用于计算管理成本 SELECT count(*) INTO :ll_macnt FROM u_workgroup WHERE mode = 1 And ifm = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询机台数量失败,'+sqlca.SQLErrText GOTO ext END IF //计算工资成本,数据来源于相关质检单的工资明细 datastore ds_wage ds_wage = Create datastore ds_wage.DataObject = "ds_data_wage" ds_wage.SetTransObject(sqlca) ds_wage.Retrieve(arg_scid,arg_orderid) ll_wage_rowcnt = ds_wage.RowCount() IF ll_wage_rowcnt > 0 THEN FOR ll_i = 1 To ll_wage_rowcnt ld_award = ds_wage.Object.awardprice[ll_i] ld_stantby = ds_wage.Object.stantby_price[ll_i] ld_zxcost = ds_wage.Object.zx_price[ll_i] * ds_wage.Object.zx_qty[ll_i] ld_cp = ds_wage.Object.cp_price[ll_i] ld_bcp = ds_wage.Object.bcp_price[ll_i] ld_rlcost = ld_rlcost + ld_award + ld_stantby + ld_cp + ld_bcp //+ ld_zxcost NEXT END IF //设备成本 -电费,管理费,设备耗损费,数据源于质检单"生产现场数据"及设备定义 datastore ds_sb ds_sb = Create datastore ds_sb.DataObject = "ds_sbcost" ds_sb.SetTransObject(sqlca) ds_sb.Retrieve(arg_orderid) ll_sb_rowcnt = ds_sb.RowCount() IF ll_sb_rowcnt > 0 THEN FOR ll_j = 1 To ll_sb_rowcnt ld_time = ds_sb.Object.u_data_collect_stantby_time[ll_j] + ds_sb.Object.u_data_collect_worktime[ll_j] ld_ect = ds_sb.Object.u_data_collect_ammeter_end[ll_j] - ds_sb.Object.u_data_collect_ammeter_start[ll_j] ld_sbcost = ld_sbcost + ld_time * ds_sb.Object.u_equipment_manage_depreciation_cost[ll_j] ld_glcost = ld_glcost + (uo_option_management_cost / 30 / ll_macnt / 24 ) * ld_time ld_ectcost = ld_ectcost + ld_ect * uo_option_ect_price NEXT END IF //更新生产计划成本 UPDATE u_order_ml SET rlcost = :ld_rlcost, sbcost = :ld_sbcost, glcost = :ld_glcost, ectcost = :ld_ectcost WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新成本失败,'+sqlca.SQLErrText GOTO ext END IF END IF //重算所有相关成本,得出生产计划成本 //ds_slcost - 本生产计划领料明细 datastore ds_sl,ds_son ds_sl = Create datastore ds_sl.DataObject = "ds_slcost" ds_sl.SetTransObject(sqlca) ds_sl.Retrieve(arg_scid,arg_orderid) Long ll_row,ll_sonrow,i Decimal ld_slcost = 0,ld_planslcost = 0 Decimal ld_slmtrlcost = 0,ld_slqty ll_row = ds_sl.RowCount() //计算产品材料成本.如果下级物料有子生产计划,则取子生产计划的成本作为下级物料的领料成本,否则按领料单. IF ll_row > 0 THEN FOR ll_i = 1 To ll_row IF ds_sl.Object.u_mtrldef_issuliao[ll_i] = 0 Or ds_sl.Object.u_mtrldef_issuliao[ll_i] = 1 THEN ld_slcost = ld_slcost + ds_sl.Object.u_orderrqmtrl_scll_costamt[ll_i] END IF NEXT END IF UPDATE u_order_ml SET u_order_ml.sumclcost = :ld_slcost WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新非塑料材料成本失败,'+sqlca.SQLErrText GOTO ext END IF Decimal ld_sumrlcost Decimal ld_taskworkcost,ld_scwg_cost,ld_scwg_day_cost SELECT isnull(sum(Workprice * Amount),0) INTO :ld_taskworkcost FROM u_sc_taskworkmx INNER JOIN u_sc_taskwork ON u_sc_taskworkmx.Billid = u_sc_taskwork.billid WHERE u_sc_taskwork.orderid = :arg_orderid And u_sc_taskwork.scid = :arg_scid; IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询生产计划相关产品个人计件单失败,'+sqlca.SQLErrText GOTO ext END IF IF IsNull(ld_taskworkcost) THEN ld_taskworkcost = 0 SELECT isnull(sum(u_scwg_taskwork_2_mx.qty * u_scwg_taskwork_2_mx.price),0) INTO :ld_scwg_cost FROM u_scwg_taskwork_2 INNER JOIN u_scwg_taskwork_2_mx ON u_scwg_taskwork_2.billid = u_scwg_taskwork_2_mx.billid WHERE u_scwg_taskwork_2.scid = :arg_scid And u_scwg_taskwork_2_mx.orderid = :arg_orderid; IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询生产计划相关工组月计件单失败,'+sqlca.SQLErrText GOTO ext END IF IF IsNull(ld_scwg_cost) THEN ld_scwg_cost = 0 SELECT isnull(sum(u_scwg_taskwork_day_mx.qty * u_scwg_taskwork_day_mx.price),0) INTO :ld_scwg_day_cost FROM u_scwg_taskwork_day INNER JOIN u_scwg_taskwork_day_mx ON u_scwg_taskwork_day.billid = u_scwg_taskwork_day_mx.billid WHERE u_scwg_taskwork_day.scid = :arg_scid And u_scwg_taskwork_day_mx.orderid = :arg_orderid; IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = "查询生产计划相关工组日计件单失败,"+sqlca.SQLErrText GOTO ext END IF IF IsNull(ld_scwg_day_cost) THEN ld_scwg_day_cost = 0 ld_sumrlcost = ld_taskworkcost + ld_scwg_cost + ld_scwg_day_cost UPDATE u_order_ml SET sumrlcost = :ld_sumrlcost Where u_order_ml.orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新非塑料人力成本失败,"+sqlca.SQLErrText GOTO ext END IF SELECT ysamt,bgamt,kcamt,bxamt,bzamt,ftqty,wfjgamt,qtamt INTO :ld_ysamt,:ld_bgamt,:ld_kcamt,:ld_bxamt,:ld_bzamt,:ld_ftqty , :ld_wfjgamt , :ld_qtamt FROM u_order_ml Where orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询分滩费用/加工费失败,"+sqlca.SQLErrText GOTO ext END IF IF ld_ftqty > 0 THEN ld_ftcost = (ld_ysamt + ld_bgamt + ld_kcamt + ld_bxamt + ld_bzamt + ld_qtamt) / ld_ftqty ELSE ld_ftcost = 0 END IF UPDATE u_order_ml SET sumcost = :ld_ftcost * acmpqty + sumrlcost + sumclcost + slcost + rlcost + sbcost + glcost + ectcost + :ld_wfjgamt WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新生产计划总成本失败,"+sqlca.SQLErrText GOTO ext END IF //计算单产品成本 :生产计划总成本 / 生产数量 Decimal ld_latest_pdcode SELECT CASE u_order_ml.acmpqty when 0 THEN 0 ELSE u_order_ml.sumcost / u_order_ml.acmpqty END Into :ld_latest_pdcode From u_order_ml Where u_order_ml.orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新生产计划单产品成本失败,"+sqlca.SQLErrText GOTO ext END IF IF ld_latest_pdcode > 0 THEN // UPDATE u_mtrldef // SET u_mtrldef.planprice = case u_mtrldef.latest_pdcost when 0 then u_mtrldef.planprice else u_mtrldef.latest_pdcost end , // u_mtrldef.latest_pdcost = :ld_latest_pdcode // Where u_mtrldef.mtrlid = :ll_mtrlid ; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "更新产品最新成本价失败,"+sqlca.SQLErrText // GOTO ext // END IF IF f_update_planprice(ll_mtrlid,status_mode,woodcode,pcode,1,ld_latest_pdcode,arg_msg,False,sqlca) = 0 THEN rslt = 0 arg_msg = '更新产品计划成本价失败'+arg_msg GOTO ext 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 uof_reccl (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_scid Long ll_orderid,ll_porderid String ls_ordercode,ls_pordercode Long cnt cnt = 0 SELECT count(*) INTO :cnt FROM u_OrderRqMtrl_scll WHERE orderid = :ll_orderid AND scid = :ll_scid AND u_OrderRqMtrl_scll.DstrQty > 0 ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否有已领数失败'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '已有已领料,不能重新计算用料' GOTO ext END IF uo_order_ml_mrp uo_ml_mrp uo_ml_mrp = CREATE uo_order_ml_mrp IF uo_ml_mrp.uof_del_rqmtrl_scll(arg_scid,arg_orderid,FALSE,arg_msg) = 0 THEN // arg_msg = ls_ordercode+','+arg_msg rslt = 0 GOTO ext END IF Long ll_i Boolean if_commit //20080715改,方便批操作调用而改成用datastore datastore ds_orderrqmx ds_orderrqmx = CREATE datastore ds_orderrqmx.DataObject = 'dw_order_ml_zl_orderrqmx' ds_orderrqmx.SetTransObject(sqlca) ds_orderrqmx.Retrieve(arg_orderid,arg_scid) s_order_ml_rqmtrl s_mtrl,s_mtrl_null FOR ll_i = 1 TO ds_orderrqmx.RowCount() s_mtrl = s_mtrl_null ll_porderid = ds_orderrqmx.Object.u_order_ml_mx_taskid[ll_i] ls_pordercode = ds_orderrqmx.Object.u_order_ml_mx_taskcode[ll_i] IF uo_ml_mrp.uof_get_rqmtrl(arg_scid,arg_orderid,ll_porderid,s_mtrl,arg_msg) = 0 THEN arg_msg = '上级计划:'+ls_pordercode+','+arg_msg rslt = 0 GOTO ext END IF IF uo_ml_mrp.uof_add_rqmtrl_scll(s_mtrl,arg_ifcommit,arg_msg) = 0 THEN arg_msg = '上级计划:'+ls_pordercode+','+arg_msg rslt = 0 GOTO ext END IF NEXT DESTROY uo_ml_mrp DESTROY ds_orderrqmx ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF Return(rslt) end function public function integer uof_order_add_wkp_tree (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Decimal ld_finishqty,ld_sqty,ld_oqty Long ll_dftwrkgrpid Int li_if_tree_wkp DateTime ldt_tmp Long ll_statusflag,ll_ordertype,ll_printid Long ll_swkpid,ll_owkpid String ls_partname,ls_relname Long ll_lp Int li_if_inherit String ls_partname_inherit Long ll_parentid,ll_workgroupid Decimal ld_minlasthour,ld_lasthour,ld_eoq,ld_splitrate,ld_waittime,ld_beforehour,ld_afterhour,ld_eq_empnum,ld_eqworkhour Int li_if_barcode Long ll_equipmenttypeid Int li_ifaccept Decimal ld_baseqty Int li_if_follow,li_ifgroup Decimal ld_workhour_minute,ld_workhour Long ll_printid_mx Long ll_j Long ll_mtrlid Decimal ld_orderqty Long printid,iflast,lp Decimal lasthour,workhour Long workgroupid DateTime begindate,enddate String ls_pfgroup,ls_promode,ls_pfklmode,ls_pfgroupmode,ls_gydscrp Decimal ld_pfgroupqty String ls_relname_up Int li_ifsj_ban String ls_wenli, ls_fengbian, ls_paikong, ls_luoji, ls_penyou Long ll_sonmtrlid datastore ds_tree_hz ds_tree_hz = Create datastore ds_tree_hz.DataObject = 'ds_ordermtrl_workgroup_tree_hz' ds_tree_hz.SetTransObject(sqlca) datastore ds_tech_mx ds_tech_mx = Create datastore ds_tech_mx.DataObject = 'ds_mtrl_wkp_tech_mx' ds_tech_mx.SetTransObject(sqlca) datastore ds_modle_pf ds_modle_pf = Create datastore ds_modle_pf.DataObject = 'ds_mtrl_wkp_tech_modle_pf' ds_modle_pf.SetTransObject(sqlca) If arg_orderid = 0 Then rslt = 0 arg_msg = "没有审核对象" Goto ext End If If p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then rslt = 0 Goto ext End If If wrkGrpid = 0 Then rslt = 1 Goto ext End If Select ordertype Into :ll_ordertype From u_mtrldef Where mtrlid = :mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询物料计划属性失败,'+sqlca.SQLErrText Goto ext End If If (ordertype <> 4 And ll_ordertype = 1) Then rslt = 1 Goto ext End If If status <> 4 And status <> 1 And status <> 7 Then rslt = 0 arg_msg = "计划只有在已审核状态才可以执行生成工组进度,请核对" Goto ext End If Select dftwrkgrpid,statusflag Into :ll_dftwrkgrpid,:ll_statusflag From u_mtrldef Where mtrlid = :mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询物料默认生产车间失败'+'~n'+sqlca.SQLErrText Goto ext End If If wrkGrpid <> ll_dftwrkgrpid Then rslt = 1 arg_msg = '生产指令单或生产计划的车间与计划物料默认的生产车间不一致,不能生成工组进度' Goto ext End If Select if_tree_wkp Into :li_if_tree_wkp From u_sc_wkp Where wrkGrpid = :wrkGrpid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询生产车间排程属性失败'+'~n'+sqlca.SQLErrText Goto ext End If Select sum(sqty),sum(oqty) Into :ld_sqty,:ld_oqty From u_OrderMtrl_workgroup_tree Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "查询计划是否已交接操作失败"+"~n"+sqlca.SQLErrText Goto ext End If If IsNull(ld_sqty) Then ld_sqty = 0 If IsNull(ld_oqty) Then ld_oqty = 0 If ld_sqty > 0 Then arg_msg = '计划已有完成数,不能重新生成条码工组进度' rslt = 0 Goto ext End If If ld_oqty > 0 Then arg_msg = '计划已有接收数,不能重新生成条码工组进度' rslt = 0 Goto ext End If Long ll_wrkgrpid[],ll_owrkgrpid[] String ls_wkpname[] Long ll_ifjd[] DateTime ld_requiredate[],ld_begindate[] String ls_dscrp[] Decimal ll_lastdays[] Long i,cnt Long ll_i s_mtrlcfg_expr s_pz[] String ls_status_zj Decimal ld_qty_zj Int li_ifpackpro_p If ordertype = 4 And porderid > 0 Then Select ifpackpro Into :li_ifpackpro_p From u_Order_ml Inner JOIN u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid Where u_order_ml.orderid = :porderid And u_Order_ml.scid = :scid; If sqlca.SQLCode <> 0 Then li_ifpackpro_p = 0 Else li_ifpackpro_p = 0 End If Delete From u_OrderMtrl_workgroup_tree Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除计划的交接明细表相应记录操作失败"+"~n"+sqlca.SQLErrText Goto ext End If If li_ifpackpro_p <> 5 Then Insert Into u_OrderMtrl_workgroup_tree (scid, orderid, printid, swkpid, owkpid, partname, lp, iflast, relname, orderqty, sqty, oqty, if_inherit, partname_inherit, parentid, workgroupid, lasthour, workhour, if_barcode, eoq, splitrate, waittime, beforehour, afterhour, eq_empnum, eqworkhour, equipmenttypeid, ifaccept, baseqty, if_follow, printid_sort, ifgroup, ifsj_ban) Select u_order_ml.scid, u_order_ml.orderid, u_mtrl_wkp_tech.printid, u_mtrl_wkp_tech.swkpid, u_mtrl_wkp_tech.owkpid, u_mtrl_wkp_tech.partname, u_mtrl_wkp_tech.lp, u_mtrl_wkp_tech.iflast, u_mtrl_wkp_tech.relname, :orderqty, 0, 0, u_mtrl_wkp_tech.if_inherit, u_mtrl_wkp_tech.partname_inherit, u_mtrl_wkp_tech.parentid, u_mtrl_wkp_tech.workgroupid, case when :Level = 0 then u_mtrl_wkp_tech.minlasthour else u_mtrl_wkp_tech.lasthour End , u_mtrl_wkp_tech.workhour, u_mtrl_wkp_tech.if_barcode, u_mtrl_wkp_tech.eoq, u_mtrl_wkp_tech.splitrate, u_mtrl_wkp_tech.waittime, u_mtrl_wkp_tech.beforehour, u_mtrl_wkp_tech.afterhour, u_mtrl_wkp_tech.eq_empnum, u_mtrl_wkp_tech.eqworkhour, u_mtrl_wkp_tech.equipmenttypeid, u_mtrl_wkp_tech.ifaccept, case u_mtrl_wkp_tech.baseqty when 0 then :orderqty else u_mtrl_wkp_tech.baseqty End, u_mtrl_wkp_tech.if_follow, u_mtrl_wkp_tech.printid * 10, u_mtrl_wkp_tech.ifgroup, u_mtrl_wkp_tech.ifsj_ban From u_mtrl_wkp_tech,u_order_ml Where u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid And u_mtrl_wkp_tech.mtrlid = u_Order_ml.mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '从产品工艺流程加入生产计划工艺进度失败,原因:'+sqlca.SQLErrText Goto ext End If If ll_statusflag = 2 Then f_checkpz(status_mode,s_pz[]) For ll_i = 1 To UpperBound(s_pz) ls_status_zj = s_pz[ll_i].cfgname ld_qty_zj = Dec(s_pz[ll_i].qty) ds_tech_mx.Retrieve(mtrlid,ls_status_zj) For ll_j = 1 To ds_tech_mx.RowCount() ll_printid_mx = ds_tech_mx.Object.printid[ll_j] ld_workhour_minute = ds_tech_mx.Object.workhour_minute[ll_j] ld_workhour = ds_tech_mx.Object.workhour[ll_j] ld_beforehour = ds_tech_mx.Object.beforehour[ll_j] ld_afterhour = ds_tech_mx.Object.afterhour[ll_j] ld_eq_empnum = ds_tech_mx.Object.eq_empnum[ll_j] ld_eqworkhour = ds_tech_mx.Object.eqworkhour[ll_j] Update u_OrderMtrl_workgroup_tree Set workhour = workhour + :ld_workhour * :ld_qty_zj, beforehour = beforehour + :ld_beforehour * :ld_qty_zj, afterhour = afterhour + :ld_afterhour * :ld_qty_zj, eq_empnum = eq_empnum + :ld_eq_empnum * :ld_qty_zj, eqworkhour = eqworkhour + :ld_eqworkhour * :ld_qty_zj Where scid = :arg_scid And orderid = :arg_orderid And printid = :ll_printid_mx; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '从工艺流程配置明细更新生产计划工艺进度失败,原因:'+sqlca.SQLErrText Goto ext End If Next Next End If Else ds_modle_pf.Retrieve(mtrlid,pfcode) ll_printid = 1 Insert Into u_OrderMtrl_workgroup_tree (scid, orderid, printid, partname, lp, iflast, relname, orderqty) Values (:arg_scid, :arg_orderid, :ll_printid, '成品', 0, 1, '成品', :orderqty); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '从工艺流程配置明细更新生产计划工艺进度失败,原因:'+sqlca.SQLErrText Goto ext End If For ll_i = 1 To ds_modle_pf.RowCount() ll_printid++ ll_swkpid = ds_modle_pf.Object.u_mtrl_wkp_tech_swkpid[ll_i] ll_owkpid = ds_modle_pf.Object.u_mtrl_wkp_tech_owkpid[ll_i] ll_lp = ds_modle_pf.Object.u_mtrl_wkp_tech_lp[ll_i] li_if_inherit = ds_modle_pf.Object.u_mtrl_wkp_tech_if_inherit[ll_i] ls_partname_inherit = ds_modle_pf.Object.u_mtrl_wkp_tech_partname_inherit[ll_i] ll_parentid = ds_modle_pf.Object.u_mtrl_wkp_tech_parentid[ll_i] ll_workgroupid = ds_modle_pf.Object.u_mtrl_wkp_tech_workgroupid[ll_i] ld_minlasthour = ds_modle_pf.Object.u_mtrl_wkp_tech_minlasthour[ll_i] ld_lasthour = ds_modle_pf.Object.u_mtrl_wkp_tech_lasthour[ll_i] ld_workhour = ds_modle_pf.Object.u_mtrl_wkp_tech_workhour[ll_i] li_if_barcode = ds_modle_pf.Object.u_mtrl_wkp_tech_if_barcode[ll_i] ld_eoq = ds_modle_pf.Object.u_mtrl_wkp_tech_eoq[ll_i] ld_splitrate = ds_modle_pf.Object.u_mtrl_wkp_tech_splitrate[ll_i] ld_waittime = ds_modle_pf.Object.u_mtrl_wkp_tech_waittime[ll_i] ld_beforehour = ds_modle_pf.Object.u_mtrl_wkp_tech_beforehour[ll_i] ld_afterhour = ds_modle_pf.Object.u_mtrl_wkp_tech_afterhour[ll_i] ld_eq_empnum = ds_modle_pf.Object.u_mtrl_wkp_tech_eq_empnum[ll_i] ld_eqworkhour = ds_modle_pf.Object.u_mtrl_wkp_tech_eqworkhour[ll_i] ll_equipmenttypeid = ds_modle_pf.Object.u_mtrl_wkp_tech_equipmenttypeid[ll_i] li_ifaccept = ds_modle_pf.Object.u_mtrl_wkp_tech_ifaccept[ll_i] ld_baseqty = ds_modle_pf.Object.u_mtrl_wkp_tech_baseqty[ll_i] li_if_follow = ds_modle_pf.Object.u_mtrl_wkp_tech_if_follow[ll_i] li_ifgroup = ds_modle_pf.Object.u_mtrl_wkp_tech_ifgroup[ll_i] ld_pfgroupqty = ds_modle_pf.Object.u_prdpf_pfgroupqty[ll_i] ls_pfgroupmode = ds_modle_pf.Object.u_prdpf_pfgroupmode[ll_i] ls_gydscrp = ds_modle_pf.Object.u_prdpf_dscrp[ll_i] ls_pfgroup = ds_modle_pf.Object.u_prdpf_pfgroup[ll_i] ls_promode = ds_modle_pf.Object.u_prdpf_promode[ll_i] ls_pfklmode = ds_modle_pf.Object.u_prdpf_pfklmode[ll_i] li_ifsj_ban = ds_modle_pf.Object.u_mtrl_wkp_tech_ifsj_ban[ll_i] ls_partname = ds_modle_pf.Object.u_mtrl_wkp_tech_partname[ll_i] ls_wenli = ds_modle_pf.Object.u_prdpf_wenli[ll_i] ls_fengbian = ds_modle_pf.Object.u_prdpf_fengbian[ll_i] ls_paikong = ds_modle_pf.Object.u_prdpf_paikong[ll_i] ls_luoji = ds_modle_pf.Object.u_prdpf_luoji[ll_i] ls_penyou = ds_modle_pf.Object.u_prdpf_penyou[ll_i] ll_sonmtrlid = ds_modle_pf.Object.u_prdpf_sonmtrlid[ll_i] If IsNull(ll_swkpid) Then ll_swkpid = 0 If IsNull(ll_owkpid) Then ll_owkpid = 0 If IsNull(ll_lp) Then ll_lp = 0 If IsNull(li_if_inherit) Then li_if_inherit = 0 If IsNull(ls_partname_inherit) Then ls_partname_inherit = '' If IsNull(ll_parentid) Then ll_parentid = 0 If IsNull(ll_workgroupid) Then ll_workgroupid = 0 If IsNull(ld_minlasthour) Then ld_minlasthour = 0 If IsNull(ld_lasthour) Then ld_lasthour = 0 If IsNull(ld_workhour) Then ld_workhour = 0 If IsNull(li_if_barcode) Then li_if_barcode = 1 If IsNull(ld_eoq) Then ld_eoq = 0 If IsNull(ld_splitrate) Then ld_splitrate = 0 If IsNull(ld_waittime) Then ld_waittime = 0 If IsNull(ld_beforehour) Then ld_beforehour = 0 If IsNull(ld_afterhour) Then ld_afterhour = 0 If IsNull(ld_eq_empnum) Then ld_eq_empnum = 0 If IsNull(ld_eqworkhour) Then ld_eqworkhour = 0 If IsNull(ll_equipmenttypeid) Then ll_equipmenttypeid = 0 If IsNull(li_ifaccept) Then li_ifaccept = 0 If IsNull(ld_baseqty) Then ld_baseqty = 0 If IsNull(li_if_follow) Then li_if_follow = 0 If IsNull(li_ifgroup) Then li_ifgroup = 0 If IsNull(ld_pfgroupqty) Then ld_pfgroupqty = 1 If IsNull(ls_pfgroupmode) Then ls_pfgroupmode = '' If IsNull(ls_gydscrp) Then ls_gydscrp = '' If IsNull(ls_pfgroup) Then ls_pfgroup = '' If IsNull(ls_promode) Then ls_promode = '' If IsNull(ls_pfklmode) Then ls_pfklmode = '' If IsNull(ls_partname) Then ls_partname = '' If IsNull(li_ifsj_ban) Then li_ifsj_ban = 0 If IsNull(ls_wenli) Then ls_wenli = '' If IsNull(ls_fengbian) Then ls_fengbian = '' If IsNull(ls_paikong) Then ls_paikong = '' If IsNull(ls_luoji) Then ls_luoji = '' If IsNull(ls_penyou) Then ls_penyou = '' If IsNull(ll_sonmtrlid) Then ll_sonmtrlid = 0 If ll_lp = 0 Then If li_ifsj_ban = 0 Then ls_partname = ls_pfgroup + '('+ls_pfklmode+')' ls_relname = ls_pfgroup + '('+ls_pfklmode+')' ls_relname_up = ls_relname Else ls_partname = ls_pfgroup + '['+ ls_partname + ']' ls_relname = ls_partname ls_relname_up = ls_relname End If Else ls_partname = ds_modle_pf.Object.u_mtrl_wkp_tech_partname[ll_i] ls_relname = ls_relname_up //ds_modle_pf.Object.u_mtrl_wkp_tech_relname[ll_i] End If Insert Into u_OrderMtrl_workgroup_tree (scid, orderid, printid, swkpid, owkpid, partname, lp, iflast, relname, orderqty, sqty, oqty, if_inherit, partname_inherit, parentid, workgroupid, lasthour, workhour, if_barcode, eoq, splitrate, waittime, beforehour, afterhour, eq_empnum, eqworkhour, equipmenttypeid, ifaccept, baseqty, if_follow, printid_sort, ifgroup, pfgroup, promode, pfgroupmode, pfklmode, gydscrp, ifsj_ban, wenli, fengbian, paikong, luoji, penyou, sonmtrlid) Values (:arg_scid, :arg_orderid, :ll_printid, :ll_swkpid, :ll_owkpid, :ls_partname, :ll_lp + 1, 0, :ls_relname, :orderqty * :ld_pfgroupqty, 0, 0, :li_if_inherit, :ls_partname_inherit, :ll_parentid, :ll_workgroupid, case when :Level = 0 then :ld_minlasthour else :ld_lasthour End , :ld_workhour, :li_if_barcode, :ld_eoq, :ld_splitrate, :ld_waittime, :ld_beforehour, :ld_afterhour, :ld_eq_empnum, :ld_eqworkhour, :ll_equipmenttypeid, :li_ifaccept, case :ld_baseqty when 0 then :orderqty else :ld_baseqty End , :li_if_follow, :ll_printid * 10, :li_ifgroup, :ls_pfgroup, :ls_promode, :ls_pfgroupmode, :ls_pfklmode, :ls_gydscrp, :li_ifsj_ban, :ls_wenli, :ls_fengbian, :ls_paikong, :ls_luoji, :ls_penyou, :ll_sonmtrlid); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '从工艺流程配置明细更新生产计划工艺进度失败,原因:'+sqlca.SQLErrText + '~r~n' Goto ext End If Next End If //根据公式刷新工时及周期 String ls_workhour_formula,ls_lasthour_formula Long ll_printid_tree Decimal ld_orderqty_tree String s_rtn Decimal ld_workhour_str,ld_lasthour_str datastore ds_tree ds_tree = Create datastore ds_tree.DataObject = 'ds_ordermtrl_workgroup_tree_cmp' ds_tree.SetTransObject(sqlca) ds_tree.Retrieve(arg_scid,arg_orderid) datastore ds_pricestr ds_pricestr = Create datastore ds_pricestr.DataObject = 'ds_pricestr_cmpl' ds_pricestr.SetTransObject(sqlca) For ll_i = 1 To ds_tree.RowCount() ls_workhour_formula = ds_tree.Object.u_mtrl_wkp_tech_workhour_formula[ll_i] ls_lasthour_formula = ds_tree.Object.u_mtrl_wkp_tech_lasthour_formula[ll_i] ll_printid_tree = ds_tree.Object.printid[ll_i] ld_orderqty_tree = ds_tree.Object.orderqty[ll_i] If Trim(ls_workhour_formula) <> '' Then Select Top 1 Replace( :ls_workhour_formula,'不包含',' not like ') Into :ls_workhour_formula From u_user; Select Top 1 Replace( :ls_workhour_formula,'不等于','<>') Into :ls_workhour_formula From u_user; Select Top 1 Replace( :ls_workhour_formula,'包含',' like ') Into :ls_workhour_formula From u_user; Select Top 1 Replace( :ls_workhour_formula,'数量',:ld_orderqty_tree) Into :ls_workhour_formula From u_user; Select Top 1 Replace( :ls_workhour_formula,'等于',' = ') Into :ls_workhour_formula From u_user; Select Top 1 Replace( :ls_workhour_formula,'大于',' > ') Into :ls_workhour_formula From u_user; Select Top 1 Replace( :ls_workhour_formula,'小于',' < ') Into :ls_workhour_formula From u_user; If Pos(ls_workhour_formula,'配置2') > 0 Then Select Top 1 Replace( :ls_workhour_formula,'配置2',"'"+:pcode+"'") Into :ls_workhour_formula From u_user; End If If Pos(ls_workhour_formula,'配置1') > 0 Then Select Top 1 Replace( :ls_workhour_formula,'配置1',"'"+:woodcode+"'") Into :ls_workhour_formula From u_user; End If If Pos(ls_workhour_formula,'配置') > 0 Then Select Top 1 Replace( :ls_workhour_formula,'配置',"'"+:status_mode+"'") Into :ls_workhour_formula From u_user; End If ds_pricestr.Retrieve() ds_pricestr.Modify('cmpl.expression= "'+ls_workhour_formula+'"') s_rtn = String(ds_pricestr.Object.cmpl[1]) If s_rtn = 'false' Then Goto _lasthour Else ld_workhour_str = Round(Dec(s_rtn),5) End If Update u_OrderMtrl_workgroup_tree Set workhour = :ld_workhour_str / 60 Where scid = :arg_scid And orderid = :arg_orderid And printid = :ll_printid_tree; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '按公式更新工时失败,'+sqlca.SQLErrText Goto ext End If End If _lasthour: If Trim(ls_lasthour_formula) <> '' Then Select Top 1 Replace( :ls_lasthour_formula,'不包含',' not like ') Into :ls_lasthour_formula From u_user; Select Top 1 Replace( :ls_lasthour_formula,'不等于','<>') Into :ls_lasthour_formula From u_user; Select Top 1 Replace( :ls_lasthour_formula,'包含',' like ') Into :ls_lasthour_formula From u_user; Select Top 1 Replace( :ls_lasthour_formula,'数量',:ld_orderqty_tree) Into :ls_lasthour_formula From u_user; Select Top 1 Replace( :ls_lasthour_formula,'等于',' = ') Into :ls_lasthour_formula From u_user; Select Top 1 Replace( :ls_lasthour_formula,'大于',' > ') Into :ls_lasthour_formula From u_user; Select Top 1 Replace( :ls_lasthour_formula,'小于',' < ') Into :ls_lasthour_formula From u_user; If Pos(ls_lasthour_formula,'配置2') > 0 Then Select Top 1 Replace( :ls_lasthour_formula,'配置2',"'"+:pcode+"'") Into :ls_lasthour_formula From u_user; End If If Pos(ls_lasthour_formula,'配置1') > 0 Then Select Top 1 Replace( :ls_lasthour_formula,'配置1',"'"+:woodcode+"'") Into :ls_lasthour_formula From u_user; End If If Pos(ls_lasthour_formula,'配置') > 0 Then Select Top 1 Replace( :ls_lasthour_formula,'配置',"'"+:status_mode+"'") Into :ls_lasthour_formula From u_user; End If ds_pricestr.Retrieve() ds_pricestr.Modify('cmpl.expression= "'+ls_lasthour_formula+'"') s_rtn = String(ds_pricestr.Object.cmpl[1]) If s_rtn = 'false' Then Continue Else ld_lasthour_str = Round(Dec(s_rtn),5) End If Update u_OrderMtrl_workgroup_tree Set lasthour = :ld_lasthour_str Where scid = :arg_scid And orderid = :arg_orderid And printid = :ll_printid_tree; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '按公式更新交接周期失败,'+sqlca.SQLErrText Goto ext End If End If Next If uo_cmp_tree_date(arg_scid,arg_orderid,arg_msg,False) = 0 Then rslt = 0 Goto ext End If Delete From u_ordermtrl_workgroup_barcode Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除计划已生成的工组条码操作失败"+"~n"+sqlca.SQLErrText Goto ext End If If li_if_tree_wkp = 1 Then Delete From u_OrderMtrl_workgroup Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除计划已工组进度操作失败"+"~n"+sqlca.SQLErrText Goto ext End If ds_tree_hz.Retrieve(arg_scid,arg_orderid) For ll_i = 1 To ds_tree_hz.RowCount() ll_mtrlid = ds_tree_hz.Object.mtrlid[ll_i] ll_swkpid = ds_tree_hz.Object.swkpid[ll_i] ll_owkpid = ds_tree_hz.Object.owkpid[ll_i] ld_orderqty = ds_tree_hz.Object.min_orderqty[ll_i] iflast = ds_tree_hz.Object.iflast[ll_i] lp = ds_tree_hz.Object.max_lp[ll_i] lasthour = ds_tree_hz.Object.lasthour[ll_i] workhour = ds_tree_hz.Object.workhour[ll_i] workgroupid = ds_tree_hz.Object.workgroupid[ll_i] begindate = ds_tree_hz.Object.begindate[ll_i] enddate = ds_tree_hz.Object.enddate[ll_i] Insert Into u_ordermtrl_workgroup (scid, orderid, mtrlid, wrkgrpid, owrkgrpid, orderqty, lastdays, ifjd, wkpname, printid, iflast, groupstr, lp, printlp, lasthour, workgroupid, begindate, requiredate, workhour) Values (:arg_scid, :arg_orderid, :ll_mtrlid, :ll_swkpid, :ll_owkpid, :ld_orderqty, :lasthour / 8, 1, '', :ll_i, :iflast, '', :lp, 0, :lasthour, :workgroupid, :begindate, :enddate, :workhour); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '从工艺流程进度加入生产计划工组进度失败,原因:'+sqlca.SQLErrText Goto ext End If Next If uof_update_minbdate(arg_scid,arg_orderid,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If ////按APS结果更新工艺进度开始结束时间 2014-09-22 Update u_OrderMtrl_workgroup_tree Set u_OrderMtrl_workgroup_tree.begindate = u_OrderRqMtrl_tech.begindate, u_OrderMtrl_workgroup_tree.enddate = u_OrderRqMtrl_tech.enddate, u_OrderMtrl_workgroup_tree.workhour = u_OrderRqMtrl_tech.workhour, u_OrderMtrl_workgroup_tree.beforehour = u_OrderRqMtrl_tech.beforehour, u_OrderMtrl_workgroup_tree.afterhour = u_OrderRqMtrl_tech.afterhour From u_OrderMtrl_workgroup_tree Inner JOIN u_Order_ml ON u_OrderMtrl_workgroup_tree.scid = u_Order_ml.scid And u_OrderMtrl_workgroup_tree.orderid = u_Order_ml.OrderID Inner JOIN u_OrderRqMtrl_tech ON u_Order_ml.scid = u_OrderRqMtrl_tech.scid And u_Order_ml.mtrlid = u_OrderRqMtrl_tech.MtrlID And u_Order_ml.status_mode = u_OrderRqMtrl_tech.status And u_Order_ml.woodcode = u_OrderRqMtrl_tech.woodcode And u_Order_ml.pcode = u_OrderRqMtrl_tech.pcode And u_Order_ml.wrkGrpid = u_OrderRqMtrl_tech.wrkGrpid And u_OrderMtrl_workgroup_tree.swkpid = u_OrderRqMtrl_tech.swkpid And u_OrderMtrl_workgroup_tree.owkpid = u_OrderRqMtrl_tech.owkpid And u_OrderMtrl_workgroup_tree.lp = u_OrderRqMtrl_tech.lp And u_OrderMtrl_workgroup_tree.partname = u_OrderRqMtrl_tech.partname And u_OrderMtrl_workgroup_tree.relname = u_OrderRqMtrl_tech.relname Where (u_Order_ml.porderid = u_OrderRqMtrl_tech.OrderID And u_order_ml.ordertype = 4 Or u_Order_ml.orderid = u_OrderRqMtrl_tech.OrderID And u_order_ml.ordertype <> 4) And (u_order_ml.scid = :arg_scid) And (u_Order_ml.orderid = :arg_orderid); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '按APS结果更新工艺进度开始结束时间失败,原因:'+sqlca.SQLErrText Goto ext End If //// ext: If rslt = 0 Then Rollback; p_reset() ElseIf arg_ifcommit And rslt = 1 Then Commit; End If Destroy ds_tree_hz Destroy ds_tech_mx Destroy ds_tree Destroy ds_pricestr Destroy ds_modle_pf Return rslt end function public function integer addmxcmpl_planqty_wkp (long arg_scid, long arg_orderid, string arg_wkpname, long arg_wrkgrpid, long arg_owrkgrpid, decimal arg_addqty, datetime arg_bdate, datetime arg_edate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 Dec ld_orderqty,ld_planqty String ls_mtrlname IF uo_option_update_lockdateflag = -1000 THEN rslt = 0 arg_msg = '选项:[270]工组派工单审核完毕自动写排程审核状态为最高级审核(全锁),读取初始默认值失败,操作取消!' GOTO ext END IF rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) IF rslt = 0 THEN GOTO ext IF arg_addqty = 0 THEN arg_msg = '没有完成数量' rslt = 0 GOTO ext END IF IF status <> 1 THEN rslt = 0 arg_msg = "计划["+ordercode+"]只有在进行状态下才可以执行操作" GOTO ext END IF SELECT mtrlname INTO :ls_mtrlname FROM u_mtrldef,u_order_ml WHERE u_order_ml.orderid = :arg_orderid AND u_order_ml.scid = :arg_scid And u_mtrldef.mtrlid = u_order_ml.mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品唯一码导致查询产品操作失败" GOTO ext END IF //检查是否完成 SELECT orderqty,taskqty INTO :ld_orderqty,:ld_planqty FROM u_OrderMtrl_workgroup WHERE ( u_OrderMtrl_workgroup.orderid = :arg_orderid ) AND ( u_OrderMtrl_workgroup.scid = :arg_scid ) AND ( u_OrderMtrl_workgroup.wkpname = :arg_wkpname ) AND ( u_OrderMtrl_workgroup.wrkgrpid = :arg_wrkgrpid ) And ( u_OrderMtrl_workgroup.owrkgrpid = :arg_owrkgrpid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误查询产品唯一码或计划计划数和已排程数量操作失败" GOTO ext END IF IF status = 1 THEN IF ld_orderqty < arg_addqty + ld_planqty THEN rslt = 0 arg_msg = '该计划明细产品:'+ls_mtrlname+',未派工数'+String(ld_orderqty - ld_planqty,'#,##0.00##' )+'小于本次排程数' GOTO ext END IF END IF IF arg_addqty < 0 THEN SetNull(arg_bdate) SetNull(arg_edate) END IF UPDATE u_OrderMtrl_workgroup SET u_OrderMtrl_workgroup.taskqty = u_OrderMtrl_workgroup.taskqty + :arg_addqty, u_OrderMtrl_workgroup.bdate = :arg_bdate, u_OrderMtrl_workgroup.edate = :arg_edate WHERE ( u_OrderMtrl_workgroup.orderid = :arg_orderid ) AND ( u_OrderMtrl_workgroup.scid = :arg_scid ) AND ( u_OrderMtrl_workgroup.wkpname = :arg_wkpname ) AND ( u_OrderMtrl_workgroup.wrkgrpid = :arg_wrkgrpid ) And ( u_OrderMtrl_workgroup.owrkgrpid = :arg_owrkgrpid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品唯一码导致更新生产计划完成数量操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF uo_option_update_lockdateflag = 1 THEN SELECT count(*) INTO :cnt FROM u_OrderMtrl_workgroup WHERE orderqty > taskqty AND scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单工组是否完成派工失败,'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN UPDATE u_order_ml SET lockdateflag = 0 WHERE scid = :arg_scid And orderid = :arg_orderid; ELSE UPDATE u_order_ml SET lockdateflag = 3 WHERE scid = :arg_scid And orderid = :arg_orderid; END IF IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新指令单排程状态失败,'+sqlca.SQLErrText GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF p_reset() Return (rslt) end function public function integer acceptmx_wrk (long arg_tmpid, long arg_wrkgrpid, long arg_owrkgrpid, string arg_wkpname, datetime arg_begindate, datetime arg_requiredate, decimal arg_lastdays, decimal arg_lasthour, ref string arg_msg);Int rslt = 1 IF IsNull(arg_tmpid) THEN arg_tmpid = 0 IF IsNull(arg_wrkgrpid) THEN arg_wrkgrpid = 0 IF IsNull(arg_owrkgrpid) THEN arg_owrkgrpid = 0 IF IsNull(arg_wkpname) THEN arg_wkpname = '' IF IsNull(arg_lastdays) THEN arg_lastdays = 0 IF IsNull(arg_lasthour) THEN arg_lasthour = 0 it_mxbt_wrk++ s_wrk_tmp[it_mxbt_wrk].tmpid = arg_tmpid s_wrk_tmp[it_mxbt_wrk].wrkgrpid = arg_wrkgrpid s_wrk_tmp[it_mxbt_wrk].owrkgrpid = arg_owrkgrpid s_wrk_tmp[it_mxbt_wrk].wkpname = arg_wkpname s_wrk_tmp[it_mxbt_wrk].begindate = arg_begindate s_wrk_tmp[it_mxbt_wrk].requiredate = arg_requiredate s_wrk_tmp[it_mxbt_wrk].lastdays = arg_lastdays s_wrk_tmp[it_mxbt_wrk].lasthour = arg_lasthour RETURN rslt end function public function integer uof_order_add_wkp_tmp (long arg_scid, long arg_orderid, long arg_tmpid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Decimal ld_finishqty Long ll_dftwrkgrpid DateTime ldt_tmp IF arg_orderid = 0 THEN rslt = 0 arg_msg = "没有建立对象" GOTO ext END IF Long ll_wrkgrpid[],ll_owrkgrpid[] String ls_wkpname[] Long ll_ifjd[] DateTime ld_requiredate[],ld_begindate[] String ls_dscrp[] Decimal ll_lastdays[],ld_lasthour[] Decimal ld_orderqty[] Long i,cnt Long ll_i i = 1 DELETE FROM u_OrderMtrl_workgroup WHERE orderid = :arg_orderid AND scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除计划的交接明细表相应记录操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_ordermtrl_workgroup (scid, orderid, mtrlid, wrkgrpid, owrkgrpid, orderqty, lastdays, ifjd, wkpname, printid, iflast, groupstr, lp, printlp, lasthour, workgroupid) SELECT u_order_ml.scid, u_order_ml.orderid, u_order_ml.mtrlid, u_mtrl_wkp.swkpid, u_mtrl_wkp.owkpid, u_order_ml.orderqty, u_mtrl_wkp.lastdays, 1, u_mtrl_wkp.wkpname, u_mtrl_wkp.printid, u_mtrl_wkp.iflast, u_mtrl_wkp.groupstr, u_mtrl_wkp.lp, u_mtrl_wkp.printlp, u_mtrl_wkp.lasthour, u_mtrl_wkp.workgroupid FROM u_mtrl_wkp,u_order_ml WHERE u_order_ml.orderid = :arg_orderid AND u_order_ml.scid = :arg_scid AND u_mtrl_wkp.mtrlid = u_order_ml.mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '从物料生产流程加入生产计划车间失败,原因:'+sqlca.SQLErrText GOTO ext END IF IF ordertype <> 4 THEN INSERT INTO u_ordermtrl_workgroup (scid, orderid, mtrlid, wrkgrpid, owrkgrpid, orderqty, lastdays, ifjd, printid, groupstr, lp, printlp) SELECT u_order_ml.scid, u_order_ml.orderid, u_order_ml.mtrlid, u_sc_workgroup.wrkgrpid, 0, u_order_ml.orderqty, 0,0,1000,'',0,0 FROM u_sc_workgroup,u_order_ml WHERE u_order_ml.orderid = :arg_orderid AND u_order_ml.scid = :arg_scid AND u_sc_workgroup.ifprint = 1 AND u_sc_workgroup.ifjj = 1 AND u_sc_workgroup.wrkgrpid NOT In (SELECT u_mtrl_wkp.swkpid FROM u_mtrl_wkp Where u_mtrl_wkp.mtrlid = :mtrlid) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '从车间资料加入工生产计划车间失败,原因:'+sqlca.SQLErrText GOTO ext END IF END IF Long l_wrkgrpid[],l_owrkgrpid[],l_ifjd[],l_printid[] Decimal l_lastdays[],l_lasthour[] String l_wkpname[],l_groupstr[] Long j,cnt_2,ll_count,ll_j DateTime ld_sdate,ld_edate,ld_update_edate DateTime ld_sdate_max Decimal ld_resthour,ld_workhour,ld_resthour_e Int li_timehour Int li_rdate Decimal ld_resthour_tmp DateTime ld_workdate_tmp Long l_printid_gr[] String l_groupstr_gr[] Long cnt_gr DateTime ld_sdate_gr[] Long ll_workgroupid[] Long k Boolean lb_if_find = FALSE String ls_arg_date IF uo_option_auto_wrkdate = -1000 THEN rslt = 0 arg_msg = '选项:[126]生产计划,生产指令自动计算工组开始日期,结束日期,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_use_sc_date = -1000 THEN rslt = 0 arg_msg = '选项:[180]工组进度按小时统计,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_auto_wrkdate = 1 THEN SELECT orderdate INTO :ld_sdate_max FROM u_order_ml WHERE orderid = :arg_orderid AND scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产计划或指令单计划开始日期失败'+sqlca.SQLErrText GOTO ext END IF ld_sdate_max = DateTime(Date(ld_sdate_max),Time('8:00:00')) IF uof_order_cmp_wrk_date(arg_scid,arg_orderid,ld_sdate_max,arg_msg,False) = 0 THEN arg_msg = '计算工组日期失败,'+arg_msg rslt = 0 GOTO ext END IF // j = 1 // // DECLARE cur_wrkmx_2 CURSOR FOR // SELECT wrkgrpid, // owrkgrpid, // wkpname, // ifjd, // printid, // lastdays, // groupstr, // lasthour // FROM u_OrderMtrl_workgroup // WHERE orderid = :arg_orderid // AND scid = :arg_scid // Order By printid; // // OPEN cur_wrkmx_2; // FETCH cur_wrkmx_2 INTO :l_wrkgrpid[j],:l_owrkgrpid[j], // :l_wkpname[j],:l_ifjd[j],:l_printid[j],:l_lastdays[j], // :l_groupstr[j],:l_lasthour[j]; // // DO WHILE sqlca.SQLCode = 0 // j++ // FETCH cur_wrkmx_2 INTO :l_wrkgrpid[j],:l_owrkgrpid[j], // :l_wkpname[j],:l_ifjd[j],:l_printid[j],:l_lastdays[j], // :l_groupstr[j],:l_lasthour[j]; // LOOP // CLOSE cur_wrkmx_2; // cnt_2 = j - 1 // // FOR ll_i = 1 TO cnt_2 // ll_count = 0 // IF l_ifjd[ll_i] = 1 THEN // // IF l_groupstr[ll_i] <> '' THEN // lb_if_find = FALSE // FOR k = 1 TO cnt_gr // IF l_groupstr_gr[k] = l_groupstr[ll_i] THEN // ld_sdate = ld_sdate_gr[k] // lb_if_find = TRUE // EXIT // END IF // NEXT // // IF lb_if_find = FALSE THEN // ld_sdate = ld_sdate_max // END IF // ELSE // ld_sdate = ld_sdate_max // END IF // // ls_arg_date = String(ld_sdate,'yyyy-mm-dd') // // IF uo_option_use_sc_date = 1 THEN // SELECT sum(banhour) INTO :ld_workhour // FROM u_sc_date // WHERE CONVERT(CHAR(10), Workdate, 120) = :ls_arg_date // AND Proid = :l_wrkgrpid[ll_i]; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询工组日历失败'+sqlca.SQLErrText // GOTO ext // END IF // ELSE // ld_workhour = 8 // END IF // // li_timehour = Hour(Time(ld_sdate)) // // IF li_timehour <= 12 THEN // ld_resthour = ld_workhour - (li_timehour - 8) // ELSEIF li_timehour > 12 AND li_timehour <= 18 THEN // ld_resthour = ld_workhour - (li_timehour - 14 + 4) // ELSEIF li_timehour > 18 THEN // ld_resthour = ld_workhour - (li_timehour - 19 + 8) // END IF // // IF ld_resthour >= l_lasthour[ll_i] THEN // IF li_timehour + l_lasthour[ll_i] <= 12 THEN // ld_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_i]) + ':00:00')) // ELSEIF li_timehour + l_lasthour[ll_i] <= 18 THEN // IF li_timehour < 12 THEN // ld_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_i] + 2) + ':00:00')) // ELSE // ld_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_i]) + ':00:00')) // END IF // ELSE // IF li_timehour < 12 THEN // ld_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_i] + 3) + ':00:00')) // ELSEIF li_timehour < 18 THEN // ld_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_i] + 1) + ':00:00')) // ELSE // ld_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_i]) + ':00:00')) // END IF // END IF // ld_resthour_e = ld_resthour - l_lasthour[ll_i] // ELSE // IF uo_option_use_sc_date = 0 THEN // li_rdate = Int((l_lasthour[ll_i] - ld_resthour) / 8 ) // ld_resthour_tmp = Mod((l_lasthour[ll_i] - ld_resthour),8) // // // IF ld_resthour_tmp = 0 THEN // ld_resthour_tmp = 8 // li_rdate = li_rdate // ELSE // li_rdate = li_rdate + 1 // END IF // // IF 8 + ld_resthour_tmp <= 12 THEN // ld_edate = DateTime(RelativeDate(Date(ld_sdate),li_rdate),Time(String(8 + ld_resthour_tmp) + ':00:00')) // ELSEIF 8 + ld_resthour_tmp + 2 <= 18 THEN // ld_edate = DateTime(RelativeDate(Date(ld_sdate),li_rdate),Time(String(8 + ld_resthour_tmp + 2) + ':00:00')) // ELSE // ld_edate = DateTime(RelativeDate(Date(ld_sdate),li_rdate),Time(String(8 + ld_resthour_tmp + 3) + ':00:00')) // END IF // ld_resthour_e = ld_workhour - ld_resthour_tmp // ELSE // ld_resthour_tmp = l_lasthour[ll_i] - ld_resthour // // SELECT top 1 sum(banhour),workdate INTO :ld_workhour,:ld_workdate_tmp // FROM u_sc_date // WHERE CONVERT(CHAR(10), Workdate, 120) > :ls_arg_date // AND Proid = :l_wrkgrpid[ll_i] // group by workdate // Order By Workdate; // DO WHILE ld_resthour_tmp > ld_workhour AND sqlca.SQLCode = 0 // // ls_arg_date = String(ld_workdate_tmp,'yyyy-mm-dd') // ld_resthour_tmp = ld_resthour_tmp - ld_workhour // SELECT top 1 sum(banhour),workdate INTO :ld_workhour,:ld_workdate_tmp // FROM u_sc_date // WHERE CONVERT(CHAR(10), Workdate, 120) > :ls_arg_date // AND Proid = :l_wrkgrpid[ll_i] // group by workdate // Order By Workdate; // LOOP // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询工组日历失败'+sqlca.SQLErrText // GOTO ext // END IF // IF 8 + ld_resthour_tmp <= 12 THEN // ld_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp) + ':00:00')) // ELSEIF 8 + ld_resthour_tmp + 2 <= 18 THEN // ld_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp + 2) + ':00:00')) // ELSE // ld_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp + 3) + ':00:00')) // END IF // // ld_resthour_e = ld_workhour - ld_resthour_tmp // END IF // // END IF // // UPDATE u_ordermtrl_workgroup // SET begindate = :ld_sdate, // requiredate = :ld_edate // WHERE orderid = :arg_orderid // AND scid = :arg_scid // AND wrkGrpid = :l_wrkgrpid[ll_i] // AND owrkgrpid = :l_owrkgrpid[ll_i] // AND wkpname = :l_wkpname[ll_i]; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '更新工组开始及完成时间失败'+sqlca.SQLErrText // GOTO ext // END IF // // IF l_groupstr[ll_i] <> '' THEN // lb_if_find = FALSE // // IF ld_resthour_e > 0 THEN // IF Hour(Time(ld_edate)) = 12 THEN // ld_sdate = DateTime(Date(ld_edate),Time('14:00:00')) // ELSEIF Hour(Time(ld_edate)) = 18 THEN // ld_sdate = DateTime(Date(ld_edate),Time('19:00:00')) // ELSE // ld_sdate = ld_edate // END IF // ELSE // ld_sdate = DateTime(RelativeDate(Date(ld_edate),1),Time('8:00:00')) // END IF // // FOR k = 1 TO cnt_gr // IF l_groupstr_gr[k] = l_groupstr[ll_i] THEN // ld_sdate_gr[k] = ld_sdate // l_printid_gr[k] = l_printid[ll_i] // lb_if_find = TRUE // EXIT // END IF // NEXT // // IF lb_if_find = FALSE THEN // cnt_gr++ // l_printid_gr[cnt_gr] = l_printid[ll_i] // l_groupstr_gr[cnt_gr] = l_groupstr[ll_i] // ld_sdate_gr[cnt_gr] = ld_sdate // END IF // END IF // // FOR ll_j = ll_i + 1 TO cnt_2 // IF l_ifjd[ll_j] = 1 AND & // l_printid[ll_j] = l_printid[ll_i] THEN // // // IF l_groupstr[ll_j] <> '' THEN // lb_if_find = FALSE // FOR k = 1 TO cnt_gr // IF l_groupstr_gr[k] = l_groupstr[ll_j] THEN // ld_sdate = ld_sdate_gr[k] // lb_if_find = TRUE // EXIT // END IF // NEXT // // IF lb_if_find = FALSE THEN // ld_sdate = ld_sdate_max // END IF // ELSE // ld_sdate = ld_sdate_max // END IF // // ls_arg_date = String(ld_sdate,'yyyy-mm-dd') // // IF uo_option_use_sc_date = 1 THEN // SELECT sum(banhour) INTO :ld_workhour // FROM u_sc_date // WHERE CONVERT(CHAR(10), Workdate, 120) = :ls_arg_date // AND Proid = :l_wrkgrpid[ll_j]; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询工组日历失败'+sqlca.SQLErrText // GOTO ext // END IF // ELSE // ld_workhour = 8 // END IF // // li_timehour = Hour(Time(ld_sdate)) // // IF li_timehour <= 12 THEN // ld_resthour = ld_workhour - (li_timehour - 8) // ELSEIF li_timehour > 12 AND li_timehour <= 18 THEN // ld_resthour = ld_workhour - (li_timehour - 14 + 4) // ELSEIF li_timehour > 18 THEN // ld_resthour = ld_workhour - (li_timehour - 19 + 8) // END IF // // IF ld_resthour >= l_lasthour[ll_j] THEN // IF li_timehour + l_lasthour[ll_j] <= 12 THEN // ld_update_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_j]) + ':00:00')) // ELSEIF li_timehour + l_lasthour[ll_j] <= 18 THEN // IF li_timehour < 12 THEN // ld_update_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_j] + 2) + ':00:00')) // ELSE // ld_update_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_j]) + ':00:00')) // END IF // ELSE // IF li_timehour < 12 THEN // ld_update_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_j] + 3) + ':00:00')) // ELSEIF li_timehour < 18 THEN // ld_update_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_j] + 1) + ':00:00')) // ELSE // ld_update_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_j]) + ':00:00')) // END IF // END IF // ld_resthour_e = ld_resthour - l_lasthour[ll_j] // ELSE // IF uo_option_use_sc_date = 0 THEN // li_rdate = Int((l_lasthour[ll_j] - ld_resthour) / 8 ) // ld_resthour_tmp = Mod((l_lasthour[ll_j] - ld_resthour),8) // // IF ld_resthour_tmp = 0 THEN // ld_resthour_tmp = 8 // li_rdate = li_rdate // ELSE // li_rdate = li_rdate + 1 // END IF // // IF 8 + ld_resthour_tmp <= 12 THEN // ld_update_edate = DateTime(RelativeDate(Date(ld_sdate),li_rdate),Time(String(8 + ld_resthour_tmp) + ':00:00')) // ELSEIF 8 + ld_resthour_tmp + 2 <= 18 THEN // ld_update_edate = DateTime(RelativeDate(Date(ld_sdate),li_rdate),Time(String(8 + ld_resthour_tmp + 2) + ':00:00')) // ELSE // ld_update_edate = DateTime(RelativeDate(Date(ld_sdate),li_rdate),Time(String(8 + ld_resthour_tmp + 3) + ':00:00')) // END IF // ld_resthour_e = ld_workhour - ld_resthour_tmp // ELSE // ld_resthour_tmp = l_lasthour[ll_j] - ld_resthour // // SELECT top 1 sum(banhour),workdate INTO :ld_workhour,:ld_workdate_tmp // FROM u_sc_date // WHERE CONVERT(CHAR(10), Workdate, 120) > :ls_arg_date // AND Proid = :l_wrkgrpid[ll_j] // group by workdate // Order By Workdate; // DO WHILE ld_resthour_tmp > ld_workhour AND sqlca.SQLCode = 0 // // ls_arg_date = String(ld_workdate_tmp,'yyyy-mm-dd') // ld_resthour_tmp = ld_resthour_tmp - ld_workhour // SELECT top 1 sum(banhour),workdate INTO :ld_workhour,:ld_workdate_tmp // FROM u_sc_date // WHERE CONVERT(CHAR(10), Workdate, 120) > :ls_arg_date // AND Proid = :l_wrkgrpid[ll_j] // group by workdate // Order By Workdate; // LOOP // // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询工组日历失败'+sqlca.SQLErrText // GOTO ext // END IF // // IF 8 + ld_resthour_tmp <= 12 THEN // ld_update_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp) + ':00:00')) // ELSEIF 8 + ld_resthour_tmp + 2 <= 18 THEN // ld_update_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp + 2) + ':00:00')) // ELSE // ld_update_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp + 3) + ':00:00')) // END IF // END IF // END IF // // UPDATE u_ordermtrl_workgroup // SET begindate = :ld_sdate, // requiredate = :ld_update_edate // WHERE orderid = :arg_orderid // AND scid = :arg_scid // AND wrkGrpid = :l_wrkgrpid[ll_j] // AND owrkgrpid = :l_owrkgrpid[ll_j] // AND wkpname = :l_wkpname[ll_j]; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '更新工组开始及完成时间失败'+sqlca.SQLErrText // GOTO ext // END IF // // IF l_groupstr[ll_j] <> '' THEN // lb_if_find = FALSE // // IF ld_resthour_e > 0 THEN // IF Hour(Time(ld_update_edate)) = 12 THEN // ld_sdate = DateTime(Date(ld_update_edate),Time('14:00:00')) // ELSEIF Hour(Time(ld_edate)) = 18 THEN // ld_sdate = DateTime(Date(ld_update_edate),Time('19:00:00')) // ELSE // ld_sdate = ld_update_edate // END IF // // ELSE // ld_sdate = DateTime(RelativeDate(Date(ld_update_edate),1),Time('8:00:00')) // END IF // // FOR k = 1 TO cnt_gr // IF l_groupstr_gr[k] = l_groupstr[ll_j] THEN // ld_sdate_gr[k] = ld_sdate // l_printid_gr[k] = l_printid[ll_j] // lb_if_find = TRUE // EXIT // END IF // NEXT // // IF lb_if_find = FALSE THEN // cnt_gr++ // l_printid_gr[cnt_gr] = l_printid[ll_j] // l_groupstr_gr[cnt_gr] = l_groupstr[ll_j] // ld_sdate_gr[cnt_gr] = ld_sdate // END IF // END IF // // IF ld_edate < ld_update_edate THEN // ld_edate = ld_update_edate // END IF // ll_count++ // END IF // NEXT // ll_i = ll_i + ll_count // // IF Hour(Time(ld_edate)) = 18 THEN // ldt_tmp = DateTime(RelativeDate(Date(ld_edate),1),Time('8:00:00')) // ELSEIF Hour(Time(ld_edate)) = 12 THEN // ldt_tmp = DateTime(Date(ld_edate),Time('14:00:00')) // ELSE // ldt_tmp = ld_edate // END IF // // IF ld_sdate_max < ldt_tmp THEN // ld_sdate_max = ldt_tmp // END IF // END IF // NEXT END IF //更新要求完成日期 DECLARE cur_wrk_tmp CURSOR FOR SELECT requiredate, begindate, lastdays, lasthour, workgroupid, wrkgrpid, owrkgrpid, wkpname FROM u_OrderMtrl_workgroup_tmp Where tmpid = :arg_tmpid; OPEN cur_wrk_tmp; j = 1 FETCH cur_wrk_tmp INTO :ld_requiredate[j],:ld_begindate[j],:ll_lastdays[j],:ld_lasthour[j],:ll_workgroupid[j], :ll_wrkgrpid[j],:ll_owrkgrpid[j],:ls_wkpname[j]; DO WHILE sqlca.SQLCode = 0 j++ FETCH cur_wrk_tmp INTO :ld_requiredate[j],:ld_begindate[j],:ll_lastdays[j],:ld_lasthour[j],:ll_workgroupid[j], :ll_wrkgrpid[j],:ll_owrkgrpid[j],:ls_wkpname[j]; LOOP CLOSE cur_wrk_tmp; cnt = j - 1 FOR ll_i = 1 TO cnt UPDATE u_ordermtrl_workgroup SET requiredate = :ld_requiredate[ll_i], begindate = :ld_begindate[ll_i], lastdays = :ll_lastdays[ll_i], lasthour = :ld_lasthour[ll_i], workgroupid = :ll_workgroupid[ll_i] WHERE orderid = :arg_orderid AND scid = :arg_scid AND wrkgrpid = :ll_wrkgrpid[ll_i] AND owrkgrpid = :ll_owrkgrpid[ll_i] AND wkpname = :ls_wkpname[ll_i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新要求完成时间失败,原因:'+sqlca.SQLErrText GOTO ext END IF NEXT //按日期加入进度表 DELETE FROM u_ordermtrl_wrk_jd WHERE orderid = :arg_orderid AND scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除工组工作量明细表相应记录操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF j = 1 DECLARE cur_wrkmx_jd CURSOR FOR SELECT wrkgrpid, owrkgrpid, wkpname, requiredate, begindate, orderqty, workgroupid FROM u_OrderMtrl_workgroup WHERE orderid = :arg_orderid AND scid = :arg_scid; OPEN cur_wrkmx_jd; FETCH cur_wrkmx_jd INTO :ll_wrkgrpid[j],:ll_owrkgrpid[j], :ls_wkpname[j],:ld_requiredate[j],:ld_begindate[j],:ld_orderqty[j],:ll_workgroupid[j]; DO WHILE sqlca.SQLCode = 0 j++ FETCH cur_wrkmx_jd INTO :ll_wrkgrpid[j],:ll_owrkgrpid[j], :ls_wkpname[j],:ld_requiredate[j],:ld_begindate[j],:ld_orderqty[j],:ll_workgroupid[j]; LOOP CLOSE cur_wrkmx_jd; cnt = j - 1 Long ll_DaysAfter DateTime ldt_wrkdate Decimal ld_order_wrk FOR ll_i = 1 TO cnt ll_DaysAfter = DaysAfter(Date(ld_begindate[ll_i]), Date(ld_requiredate[ll_i])) IF ll_DaysAfter + 1 <> 0 THEN ld_order_wrk = ld_orderqty[ll_i] / (ll_DaysAfter + 1) FOR ll_j = 1 TO ll_DaysAfter + 1 ldt_wrkdate = DateTime(RelativeDate(Date(ld_begindate[ll_i]),ll_j - 1 ),Time(0)) INSERT INTO u_ordermtrl_wrk_jd (scid, orderid, wrkgrpid, owrkgrpid, wkpname, wrkdate, orderqty, workgroupid) VALUES (:arg_scid, :arg_orderid, :ll_wrkgrpid[ll_i], :ll_owrkgrpid[ll_i], :ls_wkpname[ll_i], :ldt_wrkdate, :ld_order_wrk, :ll_workgroupid[ll_i]); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "插入工组工作量明细表失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer uof_auto_order_plan (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 s_order_plan arg_s_plan,arg_s_empty Long ll_wrkgrpid[],ll_owrkgrpid[] String ls_mtrlcode[] Decimal ld_orderqty[] DateTime ldt_requiredate[],ldt_begindate[] String ls_wkpname[] Long ll_workgroupid[],ll_rel_planid[],ll_rel_planprintid[] Long ll_mxbt Long ll_i Long cnt Long ll_planid,ll_printid Int li_flag,li_secflag uo_order_Plan uo_plan uo_plan = CREATE uo_order_Plan ll_mxbt = 1 DECLARE cur_ordermtrl CURSOR FOR SELECT u_OrderMtrl_workgroup.wrkGrpid, u_OrderMtrl_workgroup.owrkGrpid, u_mtrldef.mtrlcode, u_OrderMtrl_workgroup.orderqty, u_OrderMtrl_workgroup.begindate, u_OrderMtrl_workgroup.requiredate, u_OrderMtrl_workgroup.wkpname, u_OrderMtrl_workgroup.workgroupid, u_OrderMtrl_workgroup.rel_planid, u_OrderMtrl_workgroup.rel_planprintid FROM u_OrderMtrl_workgroup INNER JOIN u_mtrldef ON u_OrderMtrl_workgroup.mtrlid = u_mtrldef.mtrlid WHERE u_OrderMtrl_workgroup.scid = :arg_scid AND u_OrderMtrl_workgroup.orderid = :arg_orderid Order By u_OrderMtrl_workgroup.printid,u_OrderMtrl_workgroup.groupstr; OPEN cur_ordermtrl; FETCH cur_ordermtrl INTO :ll_wrkgrpid[ll_mxbt], :ll_owrkgrpid[ll_mxbt], :ls_mtrlcode[ll_mxbt], :ld_orderqty[ll_mxbt], :ldt_begindate[ll_mxbt], :ldt_requiredate[ll_mxbt], :ls_wkpname[ll_mxbt], :ll_workgroupid[ll_mxbt], :ll_rel_planid[ll_mxbt], :ll_rel_planprintid[ll_mxbt]; DO WHILE sqlca.SQLCode = 0 ll_mxbt++ FETCH cur_ordermtrl INTO :ll_wrkgrpid[ll_mxbt], :ll_owrkgrpid[ll_mxbt], :ls_mtrlcode[ll_mxbt], :ld_orderqty[ll_mxbt], :ldt_begindate[ll_mxbt], :ldt_requiredate[ll_mxbt], :ls_wkpname[ll_mxbt], :ll_workgroupid[ll_mxbt], :ll_rel_planid[ll_mxbt], :ll_rel_planprintid[ll_mxbt]; LOOP CLOSE cur_ordermtrl; ll_mxbt = ll_mxbt - 1 FOR ll_i = 1 TO ll_mxbt IF ll_rel_planid[ll_i] > 0 AND ll_rel_planprintid[ll_i] > 0 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_order_planmx WHERE scid = :arg_scid AND oplanid = :ll_rel_planid[ll_i] AND printid = :ll_rel_planprintid[ll_i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否已有派工单失败,'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN ll_planid = 0 ll_printid = 0 ELSE ll_planid = ll_rel_planid[ll_i] ll_printid = ll_rel_planprintid[ll_i] SELECT flag,secflag INTO :li_flag,:li_secflag FROM u_order_plan WHERE scid = :arg_scid AND oplanid = :ll_planid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关派工单状态失败,'+sqlca.SQLErrText GOTO ext END IF END IF ELSE ll_planid = 0 ll_printid = 0 END IF IF li_secflag = 1 THEN IF uo_plan.caudit_2(arg_scid,ll_planid,arg_msg,FALSE) = 0 THEN arg_msg = '相关派工单撤二审失败,'+arg_msg rslt = 0 GOTO ext END IF END IF IF li_flag = 1 THEN IF uo_plan.caudit(arg_scid,ll_planid,arg_msg,FALSE) = 0 THEN arg_msg = '相关派工单撤审失败,'+arg_msg rslt = 0 GOTO ext END IF END IF arg_s_plan = arg_s_empty arg_s_plan.scid = arg_scid arg_s_plan.oplanid = ll_planid arg_s_plan.oplandate = ldt_begindate[ll_i] arg_s_plan.assign_emp = publ_operator arg_s_plan.relcode = '' arg_s_plan.dscrp = '' arg_s_plan.workgroupid = ll_workgroupid[ll_i] arg_s_plan.wrkGrpid = ll_wrkgrpid[ll_i] arg_s_plan.arg_s_planmx[1].mtrlcode = ls_mtrlcode[ll_i] arg_s_plan.arg_s_planmx[1].qty = ld_orderqty[ll_i] arg_s_plan.arg_s_planmx[1].mxdscrp = '' arg_s_plan.arg_s_planmx[1].orderid = arg_orderid arg_s_plan.arg_s_planmx[1].requiredate = ldt_requiredate[ll_i] arg_s_plan.arg_s_planmx[1].wkpname = ls_wkpname[ll_i] arg_s_plan.arg_s_planmx[1].owrkGrpid = ll_owrkgrpid[ll_i] arg_s_plan.arg_s_planmx[1].printid = 1 IF uo_plan.Save(arg_s_plan,publ_operator,arg_msg,FALSE) = 0 THEN arg_msg = '相关派工单保存失败,'+arg_msg rslt = 0 GOTO ext END IF IF uo_plan.audit(arg_scid,uo_plan.uo_oplanid,publ_operator,arg_msg,FALSE) = 0 THEN arg_msg = '相关派工单审核失败,'+arg_msg rslt = 0 GOTO ext END IF IF uo_plan.audit_2(arg_scid,uo_plan.uo_oplanid,publ_operator,arg_msg,FALSE) = 0 THEN arg_msg = '相关派工单二审失败,'+arg_msg rslt = 0 GOTO ext END IF UPDATE u_OrderMtrl_workgroup SET rel_planid = :uo_plan.uo_oplanid, rel_planprintid = 1 WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkgrpid = :ll_wrkgrpid[ll_i] AND owrkGrpid = :ll_owrkgrpid[ll_i] AND wkpname = :ls_wkpname[ll_i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新相关单据唯一码失败,'+sqlca.SQLErrText GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer add_newdscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg); Int rslt = 1 IF arg_newdescppart = '' THEN rslt = 0 arG_MSG = "要添加内容为空,操作取消" GOTO ext END IF rslt = p_getinfo(arg_scid,arg_orderid, arG_MSG) IF rslt = 0 THEN GOTO ext IF status = 0 THEN rslt = 0 arG_MSG = "待审核状态下不可用" GOTO ext END IF UPDATE u_order_ml SET DSCRP = :arg_newdescppart WHERE u_order_ml.orderid = :arg_orderid AND u_order_ml.scid = :arg_scid; IF SQLCA.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致添加计划备注操作失败"+"~n"+SQLCA.SQLErrText ROLLBACK; GOTO ext END IF DSCRP = arg_newdescppart ext: IF rslt = 1 THEN COMMIT; END IF p_reset() RETURN (rslt) end function public function integer sec_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 Long ls_i IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_if_oa_order_ml = -1000 THEN rslt = 0 arg_msg = '选项:[230]生产计划使用审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_order_ml_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[225]生产计划使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_if_oa_order_zl = -1000 THEN rslt = 0 arg_msg = '选项:[231]生产指令单使用审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_order_ml_zl_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[226]生产指令单使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF arg_orderid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //检查是否有相关配置变更单未审 cnt = 0 SELECT count(*) INTO :cnt FROM u_saletaskmx_change INNER JOIN u_saletaskmx_changemx ON u_saletaskmx_change.Billid = u_saletaskmx_changemx.billid WHERE (u_saletaskmx_change.affirmflag = 0 OR u_saletaskmx_change.flag = 0) AND (u_saletaskmx_changemx.orderid = :arg_orderid) And (u_saletaskmx_changemx.scid = :arg_scid) ; IF sqlca.SQLCode <> 0 THEN arg_msg = ordercode + ',查询是否有相关配置变更单未审失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = ordercode + ',有相关配置变更单未审,请先审核' rslt = 0 GOTO ext END IF IF ordertype <> 4 THEN IF uo_option_if_oa_order_ml = 1 And uo_option_order_ml_secaudit = 1 And audit_buildtype = 0 THEN IF f_check_if_oaflow(arg_scid,arg_orderid,36,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSE IF uo_option_if_oa_order_zl = 1 And uo_option_order_ml_zl_secaudit = 1 And audit_buildtype = 0 THEN IF f_check_if_oaflow(arg_scid,arg_orderid,1138,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF IF status <> 4 THEN rslt = 0 arg_msg = "计划只有在待终审状态才可以执行终审,请核对" GOTO ext END IF UPDATE u_order_ml SET sec_permit_emp = :publ_operator, sec_permit_date = getdate(), status = 1 WHERE orderid = :arg_orderid AND scid = :scid And status = 4; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致计划终审操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer c_sec_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 Long ls_i String ls_mtrlcode Decimal finishqty,ld_sqty,ld_oqty DateTime null_dt SetNull(null_dt) IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) IF rslt = 0 THEN GOTO ext IF ctmint > 0 THEN arg_msg = '单据已截数,不能操作' rslt = 0 GOTO ext END IF //IF pzlorderid > 0 THEN // arg_msg = '自动生成的指令,不能操作' // rslt = 0 // GOTO ext //END IF IF status <> 1 THEN rslt = 0 arg_msg = "只有在已审核状态才可以执行撤消审核,请核对" GOTO ext END IF IF scllflag = 1 THEN rslt = 0 arg_msg = "计划已执行用料审批,请先用料撤审" GOTO ext END IF IF ordertype = 4 THEN IF ifauto_optype = 0 THEN IF iffg = 1 And ifauto = 1 THEN arg_msg = '自动生成的返工指令,不能手动撤审,需撤审相应返工物料运算批' rslt = 0 GOTO ext END IF END IF END IF //查询是否已开生产指令单终止单 cnt = 0 SELECT count(*) INTO :cnt FROM u_order_ml_stop WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询是否有相关的生产指令单终止单失败' rslt = 0 GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '本生产计划已开了相关的生产指令单终止单,不能撤审' GOTO ext END IF // //查询是否有相关的成品生产计划 cnt = 0 SELECT count(*) INTO :cnt FROM u_order_ml WHERE scid = :arg_scid And pforderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询是否有相关的成品生产计划失败' rslt = 0 GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '本生产计划已开了相关的成品生产计划,不能撤审' GOTO ext END IF // SELECT mtrlcode INTO :ls_mtrlcode FROM u_mtrldef Where mtrlid = :mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询产品编号失败' rslt = 0 GOTO ext END IF IF getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //检查报数单 SELECT sum(finishqty) INTO :finishqty FROM u_OrderMtrl_workgroup WHERE orderid = :arg_orderid And scid = :scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询生产计划工组报数失败' rslt = 0 GOTO ext END IF IF finishqty > 0 THEN arg_msg = '生产计划已有工组报数,不能撤审' rslt = 0 GOTO ext END IF //条码进度 SELECT sum(sqty),sum(oqty) INTO :ld_sqty,:ld_oqty FROM u_OrderMtrl_workgroup_tree WHERE orderid = :arg_orderid And scid = :scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询生产计划工组报数失败' rslt = 0 GOTO ext END IF IF ld_sqty > 0 THEN arg_msg = '生产计划已有工组完成数,不能撤审' rslt = 0 GOTO ext END IF IF ld_oqty > 0 THEN arg_msg = '生产计划已有工组接收数,不能撤审' rslt = 0 GOTO ext END IF //检查已完成数量 IF AcmpQty > 0 THEN arg_msg = '生产计划已有进仓数,不能撤审' rslt = 0 GOTO ext END IF IF planqty > 0 THEN arg_msg = '生产计划已有排程数,不能撤审' rslt = 0 GOTO ext END IF //检查工序已开单数,已确认完成数 Decimal ld_amount Decimal ld_finishqty ld_amount = 0 SELECT sum(isnull(v_order_procode.amount,0)) INTO :ld_amount FROM v_order_procode WHERE v_order_procode.orderid = :arg_orderid And v_order_procode.scid = :scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询工序已开单数操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF ld_amount > 0 THEN arg_msg = '生产计划工序已有开单数,不能撤审' rslt = 0 GOTO ext END IF ld_finishqty = 0 SELECT sum(U_OrderRqwp.finishqty) INTO :ld_finishqty FROM U_OrderRqwp WHERE ( U_OrderRqwp.scid = :scid ) AND ( U_OrderRqwp.orderid = :arg_orderid ) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询工序已确认完成数操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF ld_finishqty > 0 THEN arg_msg = '生产计划工序已确认完成数,不能撤审' rslt = 0 GOTO ext END IF //检查派工数量 cnt = 0 SELECT count(*) INTO :cnt FROM u_order_planmx WHERE ( u_order_planmx.orderid = :arg_orderid ) AND ( u_order_planmx.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 ordertype <> 4 THEN IF uof_check_if_zl(arg_scid,arg_orderid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF //检查进数量 cnt = 0 SELECT count(*) INTO :cnt FROM u_inware,u_inwaremx WHERE ( u_inware.billtype = 3 ) AND ( u_inware.scid = u_inwaremx.scid ) AND ( u_inware.inwareid = u_inwaremx.inwareid ) AND ( u_inwaremx.relid = :arg_orderid ) AND ( u_inwaremx.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 //检查领料数量 SELECT count(*) INTO :cnt FROM u_outware,u_outwaremx WHERE ( u_outware.billtype = 3 ) AND ( u_outware.scid = u_outwaremx.scid ) AND ( u_outware.outwareid = u_outwaremx.outwareid ) AND ( u_outwaremx.relid = :arg_orderid ) AND ( u_outwaremx.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 //检查工序派工单 SELECT count(*) INTO :cnt FROM u_sc_task WHERE scid = :arg_scid And orderid = :arg_orderid; 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 //检查是否已开发料通知单 cnt = 0 SELECT count(*) INTO :cnt FROM u_outware_scllplan_mx,u_outware_scllplan WHERE ( u_outware_scllplan.outwareid = u_outware_scllplan_mx.outwareid ) AND ( u_outware_scllplan_mx.orderid = :arg_orderid ) AND ( u_outware_scllplan.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 UPDATE u_order_ml SET status = 4, sec_Permit_emp = '', sec_Permit_date = :null_dt WHERE orderid = :arg_orderid AND scid = :arg_scid And status = 1; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致计划撤消审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Return (rslt) end function public function integer uof_add_procode_qty (long arg_scid, long arg_orderid, string arg_procode, datetime arg_billdate, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);//更新工序进度完成数 Int rslt = 1 String ls_ordercode String ls_mtrlcode Decimal ld_orderqty,ld_acmpqty,ld_trueqty DateTime null_dt Long cnt SetNull(null_dt) If uo_option_if_taskwork_acmpqty = -1000 Then rslt = 0 arg_msg = '选项:[202]计件单选生产计划时按已进仓数限制,读取初始默认值失败,操作取消!' Goto ext End If If arg_orderid <= 0 Then rslt = 0 arg_msg = '错误的计划唯一码' Goto ext End If Select ordercode Into :ls_ordercode From u_Order_ml Where OrderID = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then arg_msg = '查询生产计划编号失败' rslt = 0 Goto ext End If Select u_mtrldef.mtrlcode , u_order_ml.orderqty, u_order_ml.acmpqty Into :ls_mtrlcode, :ld_orderqty, :ld_acmpqty From u_mtrldef,u_order_ml Where u_order_ml.mtrlid = u_mtrldef.mtrlid And u_order_ml.scid = :arg_scid And u_Order_ml.OrderID = :arg_orderid; If sqlca.SQLCode <> 0 Then arg_msg = '查询物料编号失败' rslt = 0 Goto ext End If If uo_option_if_taskwork_acmpqty = 1 Then ld_trueqty = ld_acmpqty Else ld_trueqty = ld_orderqty End If Decimal ld_nofinqty Long ll_mtrlid Select (U_OrderRqwp.proqty / :ld_orderqty) * :ld_trueqty - U_OrderRqwp.finishqty, mtrlid Into :ld_nofinqty, :ll_mtrlid From U_OrderRqwp Where orderid = :arg_orderid And scid = :arg_scid And Procode = :arg_procode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',未完成数量失败>>'+sqlca.SQLErrText Goto ext End If If arg_qty > ld_nofinqty Then rslt = 0 arg_msg = '生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',未完成数量为:'+String(ld_nofinqty,'#,##0.##########')+',不能再完成:'+String(arg_qty,'#,##0.##########') Goto ext End If Update U_OrderRqwp Set finishqty = finishqty + :arg_qty Where orderid = :arg_orderid And scid = :arg_scid And Procode = :arg_procode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',完成数量失败>>'+sqlca.SQLErrText Goto ext End If //如果工组进度解决方案为[按末工序计件确认数更新工组完成数],且工组末工序,更新工组完成数 //////////////////////////////////////////////// // Long ll_wrkGrpid, ll_proorder_max, ll_proorder Select wrkGrpid, proorder Into :ll_wrkGrpid, :ll_proorder From U_OrderRqwp Where orderid = :arg_orderid And scid = :arg_scid And Procode = :arg_procode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',对应工组失败>>'+sqlca.SQLErrText Goto ext End If //检查工组,工组进度解决方案 110527 Int li_jdtype Select jdtype Into :li_jdtype From u_sc_workgroup Where wrkGrpid = :ll_wrkGrpid Using sqlca; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "查询工组进度解决方案操作失败"+"~n"+sqlca.SQLErrText Goto ext End If If li_jdtype = 2 Then Select max(proorder) Into :ll_proorder_max From U_OrderRqwp Where orderid = :arg_orderid And scid = :arg_scid And wrkGrpid = :ll_wrkGrpid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',所属工组最后工序失败>>'+sqlca.SQLErrText Goto ext End If Select count(*) Into :cnt From U_OrderRqwp Where orderid = :arg_orderid And scid = :arg_scid And proorder = :ll_proorder_max; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',最大工序号:'+String(ll_proorder_max)+'是否唯一失败>>'+sqlca.SQLErrText Goto ext End If If cnt > 1 Then rslt = 0 arg_msg = '查询生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',存在多个工序设了相同的最大工序号,请检查' Goto ext End If If ll_proorder = ll_proorder_max Then //当前工序为最后工序 If uof_add_workgroup_qty(arg_scid, arg_orderid , ll_wrkGrpid, ll_mtrlid, arg_billdate, arg_qty, arg_msg, False) = 0 Then rslt = 0 arg_msg = '生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',所属工组更新完成数失败>>'+arg_msg 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 uof_add_workgroup_qty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, datetime arg_finishdate, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);//更新工组进度完成数 Int rslt = 1 String ls_ordercode String ls_mtrlcode Decimal ld_orderqty,ld_acmpqty,ld_trueqty DateTime null_dt SetNull(null_dt) DateTime dt_fdate uo_order_wkp_jd uo_jd uo_jd = Create uo_order_wkp_jd IF arg_orderid <= 0 THEN rslt = 0 arg_msg = '错误的计划唯一码' GOTO ext END IF SELECT ordercode INTO :ls_ordercode FROM u_Order_ml WHERE OrderID = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询生产计划编号失败' rslt = 0 GOTO ext END IF SELECT u_mtrldef.mtrlcode , u_order_ml.orderqty, u_order_ml.acmpqty INTO :ls_mtrlcode, :ld_orderqty, :ld_acmpqty FROM u_mtrldef,u_order_ml WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid AND u_order_ml.scid = :arg_scid And u_Order_ml.OrderID = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料编号失败' rslt = 0 GOTO ext END IF //arg_wrkgrpid:源工组; Decimal not_finishqty SELECT orderqty - finishqty - stopqty INTO :not_finishqty FROM u_OrderMtrl_workgroup WHERE orderid = :arg_orderid AND wrkGrpid = :arg_wrkgrpid AND owrkGrpid > 0 and scid = :arg_scid and ifjd = 1 Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = ',查询物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_qty > not_finishqty THEN arg_msg = '物料:'+ls_mtrlcode+'当前数量'+String(arg_qty,'#,##0.0###')+' > 工组未完成数量'+String(not_finishqty,'#,##0.0###')+',不能审核' rslt = 0 GOTO ext END IF UPDATE u_OrderMtrl_workgroup SET finishqty = finishqty + :arg_qty, finishflag = case when orderqty <= finishqty + :arg_qty + stopqty then 1 else 0 END , finishdate = case when orderqty <= finishqty + :arg_qty + stopqty then :arg_finishdate else :null_dt END WHERE orderid = :arg_orderid AND wrkGrpid = :arg_wrkgrpid AND owrkGrpid > 0 and ifjd = 1 and scid = :arg_scid Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF Long ll_cnt SELECT count(0) INTO :ll_cnt FROM u_OrderMtrl_workgroup WHERE scid = :arg_scid AND orderid = :arg_orderid And finishflag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单是否派工完成失败,' + sqlca.SQLErrText GOTO ext END IF IF ll_cnt = 0 THEN UPDATE u_Order_ml SET finish_scflag = 1 WHERE scid = :arg_scid And OrderID = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新指令单派工完成标记失败,' + sqlca.SQLErrText GOTO ext END IF else UPDATE u_Order_ml SET finish_scflag = 0 WHERE scid = :arg_scid And OrderID = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新指令单派工完成标记失败,' + sqlca.SQLErrText GOTO ext END IF END IF IF uo_jd.uof_order_add_wrk_jd(arg_scid,arg_orderid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF dt_fdate = DateTime(Date(arg_finishdate), Time(0)) UPDATE u_OrderMtrl_workgroup_date SET fqty = fqty + :arg_qty WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkgrpid = :arg_wrkgrpid And fdate = :dt_fdate; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO u_OrderMtrl_workgroup_date (scid,orderid,wrkgrpid,fdate,fqty) VALUES (:arg_scid,:arg_orderid,:arg_wrkgrpid,:dt_fdate,:arg_qty); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入工组当天进度失败,'+sqlca.SQLErrText GOTO ext END IF END IF ELSE rslt = 0 arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_jd RETURN rslt end function public function integer uo_cmp_datediff_wrk (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 datastore ds_diff ds_diff = Create datastore ds_diff.DataObject = 'ds_order_ml_wkp_datediff' ds_diff.SetTransObject(sqlca) ds_diff.Retrieve(arg_scid,arg_orderid) ds_diff.AcceptText() ds_diff.SetSort('u_ordermtrl_workgroup_printid A ,u_ordermtrl_workgroup_groupstr A,u_ordermtrl_workgroup_wkpname A') ds_diff.Sort() Long ll_i,ll_j Long ll_owrkgrpid String ls_groupstr DateTime ldt_bdate,ldt_edate DateTime ldt_begindate,ldt_requiredate Decimal ld_hourdiffdef,ld_hourdiff Int li_datediff Int li_bhour,li_ehour Long ll_daysaffter Int li_diffhour DateTime ldt_nextbdate,ldt_nextedate Decimal ld_hourdiff_update,ld_hourdiffdef_update Long ll_wrkgrpid String ls_wkpname ds_diff.AcceptText() FOR ll_i = 1 To ds_diff.RowCount() IF ds_diff.Object.ifjd[ll_i] = 1 THEN ll_owrkgrpid = ds_diff.Object.u_ordermtrl_workgroup_owrkgrpid[ll_i] ldt_requiredate = ds_diff.Object.u_ordermtrl_workgroup_requiredate[ll_i] FOR ll_j = ll_i + 1 To ds_diff.RowCount() IF ds_diff.Object.u_ordermtrl_workgroup_wrkgrpid[ll_j] = ll_owrkgrpid And & ds_diff.Object.ifjd[ll_j] = 1 THEN ldt_edate = ds_diff.Object.u_ordermtrl_workgroup_requiredate[ll_j] ld_hourdiffdef = ds_diff.Object.lasthour[ll_j] IF Hour(Time(ldt_requiredate)) = 12 THEN ldt_bdate = DateTime(Date(ldt_requiredate),Time('14:00:00')) ELSEIF Hour(Time(ldt_requiredate)) = 18 THEN ldt_bdate = DateTime(RelativeDate(Date(ldt_requiredate),1),Time('8:00:00')) ELSE ldt_bdate = ldt_requiredate END IF ds_diff.Object.nextbdate[ll_i] = ldt_bdate ds_diff.Object.nextedate[ll_i] = ldt_edate // ll_daysaffter = DaysAfter(Date(ldt_bdate),Date(ldt_edate)) li_bhour = Hour(Time(ldt_bdate)) li_ehour = Hour(Time(ldt_edate)) IF li_bhour <= 12 And li_ehour <= 12 THEN li_diffhour = li_ehour - li_bhour li_datediff = ll_daysaffter * 8 +li_diffhour ELSEIF li_bhour >= 14 And li_ehour >= 14 THEN li_diffhour = li_ehour - li_bhour li_datediff = ll_daysaffter * 8 +li_diffhour ELSEIF li_bhour >= 8 And li_bhour <= 12 And li_ehour >= 14 THEN li_diffhour = li_ehour - li_bhour - 2 li_datediff = ll_daysaffter * 8 +li_diffhour ELSE li_diffhour = 10 + li_ehour - li_bhour li_datediff = (ll_daysaffter - 1) * 8 + li_diffhour END IF ld_hourdiff = li_datediff ds_diff.Object.hourdiff[ll_i] = ld_hourdiff ds_diff.Object.hourdiffdef[ll_i] = ld_hourdiffdef EXIT END IF NEXT END IF NEXT ds_diff.AcceptText() FOR ll_i = 1 To ds_diff.RowCount() IF ds_diff.Object.ifjd[ll_i] = 1 THEN ldt_nextbdate = ds_diff.Object.nextbdate[ll_i] ldt_nextedate = ds_diff.Object.nextedate[ll_i] ld_hourdiff_update = ds_diff.Object.hourdiff[ll_i] ld_hourdiffdef_update = ds_diff.Object.hourdiffdef[ll_i] ll_owrkgrpid = ds_diff.Object.u_ordermtrl_workgroup_owrkgrpid[ll_i] ll_wrkgrpid = ds_diff.Object.u_ordermtrl_workgroup_wrkgrpid[ll_i] ls_wkpname = ds_diff.Object.u_ordermtrl_workgroup_wkpname[ll_i] UPDATE u_ordermtrl_workgroup SET nextbdate = :ldt_nextbdate, nextedate = :ldt_nextedate, hourdiff = :ld_hourdiff_update, hourdiffdef = :ld_hourdiffdef_update WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkgrpid = :ll_wrkgrpid AND owrkgrpid = :ll_owrkgrpid And wkpname = :ls_wkpname; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新下工组完成时间失败,'+sqlca.SQLErrText GOTO ext END IF END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF destroy ds_diff RETURN rslt end function public function integer uof_add_ordermtrl_tree_acmpqty (long arg_scid, long arg_orderid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);//更新工组进度完成数 Int rslt = 1 String ls_ordercode String ls_mtrlcode Decimal ld_orderqty,ld_acmpqty String ls_relname,ls_partname String ls_treename DateTime null_dt SetNull(null_dt) IF arg_orderid <= 0 THEN rslt = 0 arg_msg = '错误的计划唯一码' GOTO ext END IF SELECT ordercode INTO :ls_ordercode FROM u_Order_ml WHERE OrderID = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询生产计划编号失败' rslt = 0 GOTO ext END IF SELECT relname,partname INTO :ls_relname,:ls_partname FROM u_OrderMtrl_workgroup_tree WHERE scid = :arg_scid AND orderid = :arg_orderid AND printid = :arg_printid Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询指令单:'+ls_ordercode+'工艺路线信息失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ls_relname = ls_partname THEN ls_treename = ls_relname ELSE ls_treename = ls_relname + '-'+ls_partname END IF Decimal not_finishqty SELECT orderqty - acmpqty INTO :not_finishqty FROM u_OrderMtrl_workgroup_tree WHERE scid = :arg_scid AND orderid = :arg_orderid AND printid = :arg_printid Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询指令单:'+ls_ordercode+'工艺路线:'+ls_treename +'未派工数量失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_addqty > not_finishqty THEN arg_msg = '指令单:'+ls_ordercode+'工艺路线:'+ls_treename+'未派工数量只有 '+String(not_finishqty,'#,##0.##########')+','+'不能派工'+String(arg_addqty,'#,##0.##########') rslt = 0 GOTO ext END IF UPDATE u_OrderMtrl_workgroup_tree SET acmpqty = acmpqty + :arg_addqty WHERE scid = :arg_scid AND orderid = :arg_orderid AND printid = :arg_printid Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新指令单:'+ls_ordercode+'工艺路线:'+ls_treename+'已派工数量失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_add_ordermtrl_tree_sqty (long arg_scid, long arg_orderid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);//更新工组进度完成数 Int rslt = 1 String ls_ordercode String ls_mtrlcode Decimal ld_orderqty,ld_acmpqty String ls_relname,ls_partname String ls_treename DateTime null_dt SetNull(null_dt) IF arg_orderid <= 0 THEN rslt = 0 arg_msg = '错误的计划唯一码' GOTO ext END IF SELECT ordercode INTO :ls_ordercode FROM u_Order_ml WHERE OrderID = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询生产计划编号失败' rslt = 0 GOTO ext END IF SELECT relname,partname INTO :ls_relname,:ls_partname FROM u_OrderMtrl_workgroup_tree WHERE scid = :arg_scid AND orderid = :arg_orderid AND printid = :arg_printid Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询指令单:'+ls_ordercode+'工艺路线信息失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ls_relname = ls_partname THEN ls_treename = ls_relname ELSE ls_treename = ls_relname + '-'+ls_partname END IF Decimal not_finishqty SELECT orderqty - sqty INTO :not_finishqty FROM u_OrderMtrl_workgroup_tree WHERE scid = :arg_scid AND orderid = :arg_orderid AND printid = :arg_printid Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询指令单:'+ls_ordercode+'工艺路线:'+ls_treename +'未完工数量失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_addqty > not_finishqty THEN arg_msg = '指令单:'+ls_ordercode+'工艺路线:'+ls_treename+'未完工数量只有 '+String(not_finishqty,'#,##0.##########')+','+'不能完工'+String(arg_addqty,'#,##0.##########') rslt = 0 GOTO ext END IF UPDATE u_OrderMtrl_workgroup_tree SET sqty = sqty + :arg_addqty, sdate = case when sqty + :arg_addqty = 0 then :null_dt else getdate() end WHERE scid = :arg_scid AND orderid = :arg_orderid AND printid = :arg_printid Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新指令单:'+ls_ordercode+'工艺路线:'+ls_treename+'已完工数量失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uo_cmp_tree_date (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_i,ll_j Long ll_lp[],ll_mxbt = 1 DateTime ldt_sdate,ldt_edate,ldt_sdate_order,ldt_edate_before Long ll_row,ll_printid String ls_arg_date Long ll_wrkgrpid Decimal ld_workhour,ld_resthour,ld_lasthour,ld_resthour_tmp Int li_timehour,li_rdate Decimal ld_workdate_tmp Decimal ld_resthour_e SELECT orderdate INTO :ldt_sdate_order FROM u_order_ml WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单开始日期失败,'+sqlca.SQLErrText GOTO ext END IF DECLARE cur_lp CURSOR FOR SELECT DISTINCT lp FROM u_OrderMtrl_workgroup_tree WHERE (scid = :arg_scid) AND (orderid = :arg_orderid) Order By lp Desc; OPEN cur_lp; FETCH cur_lp Into :ll_lp[ll_mxbt]; DO WHILE sqlca.SQLCode = 0 ll_mxbt++ FETCH cur_lp Into :ll_lp[ll_mxbt]; LOOP CLOSE cur_lp; ll_mxbt = ll_mxbt - 1 datastore ds_tree ds_tree = Create datastore ds_tree.DataObject = 'ds_ordermtrl_workgroup_tree_date' ds_tree.SetTransObject(sqlca) ds_tree.Retrieve(arg_scid,arg_orderid) FOR ll_i = 1 To ll_mxbt FOR ll_j = 1 To ds_tree.RowCount() IF ds_tree.Object.lp[ll_j] = ll_lp[ll_i] THEN ll_printid = ds_tree.Object.printid[ll_j] ld_lasthour = ds_tree.Object.lasthour[ll_j] ll_wrkgrpid = ds_tree.Object.swkpid[ll_j] ll_row = ds_tree.Find('parentid = '+String(ll_printid),1,ds_tree.RowCount()) IF ll_row = 0 THEN ldt_sdate = DateTime(Date(ldt_sdate_order),Time('8:00:00')) ELSE ldt_edate_before = ds_tree.Object.enddate[ll_row] IF Hour(Time(ldt_edate_before)) = 18 THEN ldt_sdate = DateTime(RelativeDate(Date(ldt_edate_before),1),Time('8:00:00')) ELSEIF Hour(Time(ldt_edate_before)) = 12 THEN ldt_sdate = DateTime(Date(ldt_edate_before),Time('14:00:00')) ELSE ldt_sdate = ldt_edate_before END IF END IF IF uo_cmp_wrk_edate(ldt_sdate,ll_wrkgrpid,ld_lasthour,ldt_edate,ld_resthour_e,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ds_tree.Object.begindate[ll_j] = ldt_sdate ds_tree.Object.enddate[ll_j] = ldt_edate ds_tree.AcceptText() UPDATE u_OrderMtrl_workgroup_tree SET begindate = :ldt_sdate, enddate = :ldt_edate WHERE scid = :arg_scid AND orderid = :arg_orderid And printid = :ll_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新日期失败,'+sqlca.SQLErrText GOTO ext END IF END IF NEXT NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uo_cmp_wrk_edate (datetime arg_sdate, long arg_wrkgrpid, decimal arg_lasthour, ref datetime arg_edate, ref decimal arg_resthour_e, ref string arg_msg);Int rslt = 1 String ls_arg_date Decimal ld_workhour,ld_resthour Int li_timehour,li_rdate Decimal ld_resthour_tmp DateTime ld_workdate_tmp ls_arg_date = String(arg_sdate,'yyyy-mm-dd') IF uo_option_use_sc_date = 1 THEN SELECT sum(banhour) INTO :ld_workhour FROM u_sc_date WHERE CONVERT(CHAR(10), Workdate, 120) = :ls_arg_date And Proid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工组日历失败'+sqlca.SQLErrText GOTO ext END IF ELSE ld_workhour = 8 END IF li_timehour = Hour(Time(arg_sdate)) IF li_timehour <= 12 THEN ld_resthour = ld_workhour - (li_timehour - 8) ELSEIF li_timehour > 12 And li_timehour <= 18 THEN ld_resthour = ld_workhour - (li_timehour - 14 + 4) ELSEIF li_timehour > 18 THEN ld_resthour = ld_workhour - (li_timehour - 19 + 8) END IF IF ld_resthour >= arg_lasthour THEN IF li_timehour + arg_lasthour <= 12 THEN arg_edate = DateTime(Date(arg_sdate),Time(String(li_timehour + arg_lasthour) + ':00:00')) ELSEIF li_timehour + arg_lasthour <= 18 THEN IF li_timehour < 12 THEN arg_edate = DateTime(Date(arg_sdate),Time(String(li_timehour + arg_lasthour + 2) + ':00:00')) ELSE arg_edate = DateTime(Date(arg_sdate),Time(String(li_timehour + arg_lasthour) + ':00:00')) END IF ELSE IF li_timehour < 12 THEN arg_edate = DateTime(Date(arg_sdate),Time(String(li_timehour + arg_lasthour + 3) + ':00:00')) ELSEIF li_timehour < 18 THEN arg_edate = DateTime(Date(arg_sdate),Time(String(li_timehour + arg_lasthour + 1) + ':00:00')) ELSE arg_edate = DateTime(Date(arg_sdate),Time(String(li_timehour + arg_lasthour) + ':00:00')) END IF END IF arg_resthour_e = ld_resthour - arg_lasthour ELSE IF uo_option_use_sc_date = 0 THEN li_rdate = Int((arg_lasthour - ld_resthour) / 8 ) ld_resthour_tmp = Mod((arg_lasthour - ld_resthour),8) IF ld_resthour_tmp = 0 THEN ld_resthour_tmp = 8 li_rdate = li_rdate ELSE li_rdate = li_rdate + 1 END IF IF 8 + ld_resthour_tmp <= 12 THEN arg_edate = DateTime(RelativeDate(Date(arg_sdate),li_rdate),Time(String(8 + ld_resthour_tmp) + ':00:00')) ELSEIF 8 + ld_resthour_tmp + 2 <= 18 THEN arg_edate = DateTime(RelativeDate(Date(arg_sdate),li_rdate),Time(String(8 + ld_resthour_tmp + 2) + ':00:00')) ELSE arg_edate = DateTime(RelativeDate(Date(arg_sdate),li_rdate),Time(String(8 + ld_resthour_tmp + 3) + ':00:00')) END IF arg_resthour_e = ld_workhour - ld_resthour_tmp ELSE ld_resthour_tmp = arg_lasthour - ld_resthour SELECT top 1 sum(banhour),workdate INTO :ld_workhour,:ld_workdate_tmp FROM u_sc_date WHERE CONVERT(CHAR(10), Workdate, 120) > :ls_arg_date AND Proid = :arg_wrkgrpid GROUP BY workdate Order By Workdate; DO WHILE ld_resthour_tmp > ld_workhour And sqlca.SQLCode = 0 ls_arg_date = String(ld_workdate_tmp,'yyyy-mm-dd') ld_resthour_tmp = ld_resthour_tmp - ld_workhour SELECT top 1 sum(banhour),workdate INTO :ld_workhour,:ld_workdate_tmp FROM u_sc_date WHERE CONVERT(CHAR(10), Workdate, 120) > :ls_arg_date AND Proid = :arg_wrkgrpid GROUP BY workdate Order By Workdate; LOOP IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工组日历失败'+sqlca.SQLErrText GOTO ext END IF IF 8 + ld_resthour_tmp <= 12 THEN arg_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp) + ':00:00')) ELSEIF 8 + ld_resthour_tmp + 2 <= 18 THEN arg_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp + 2) + ':00:00')) ELSE arg_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp + 3) + ':00:00')) END IF arg_resthour_e = ld_workhour - ld_resthour_tmp END IF END IF ext: RETURN rslt end function public function integer uof_create_order_plan_tech (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_i datetime server_dt s_order_plan_tech arg_s_tech uo_order_plan_tech uo_tech uo_tech = Create uo_order_plan_tech datastore ds_tree ds_tree = Create datastore ds_tree.DataObject = 'ds_ordermtrl_workgroup_tree_date' ds_tree.SetTransObject(sqlca) SELECT Top 1 getdate() Into :server_dt From u_user ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF ds_tree.Retrieve(arg_scid,arg_orderid) ds_tree.setsort('printid desc') ds_tree.sort() FOR ll_i = 1 To ds_tree.RowCount() arg_s_tech.scid = ds_tree.Object.scid[ll_i] arg_s_tech.orderid = ds_tree.Object.orderid[ll_i] arg_s_tech.billid = 0 arg_s_tech.rep = publ_operator arg_s_tech.wrkgrpid = ds_tree.Object.swkpid[ll_i] arg_s_tech.workgroupid = ds_tree.Object.workgroupid[ll_i] arg_s_tech.printid = ds_tree.Object.printid[ll_i] arg_s_tech.parentid = ds_tree.Object.parentid[ll_i] arg_s_tech.qty = ds_tree.Object.orderqty[ll_i] arg_s_tech.begindate = ds_tree.Object.begindate[ll_i] arg_s_tech.enddate = ds_tree.Object.enddate[ll_i] arg_s_tech.billdate = server_dt IF uo_tech.Save(arg_s_tech,publ_operator,arg_msg,False) = 0 THEN arg_msg = '建立相关派工单失败,'+arg_msg rslt = 0 GOTO ext END IF IF uo_tech.audit(uo_tech.uo_billid,publ_operator,arg_msg,False) = 0 THEN arg_msg = '审核相关派工单失败,'+arg_msg rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_tech Destroy ds_tree RETURN rslt end function public function integer uof_delete_order_plan_tech (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt String ls_ordercode Long ll_billid[] Int li_flag[] Long ll_mxbt = 1,ll_i uo_order_plan_tech uo_tech uo_tech = Create uo_order_plan_tech //SELECT ordercode INTO :ls_ordercode // FROM u_order_ml // WHERE scid = :arg_scid // And orderid = :arg_orderid; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询指令单信息失败,'+sqlca.SQLErrText // GOTO ext //END IF // //SELECT count(*) // INTO :cnt // FROM u_order_plan_tech // WHERE scid = :arg_scid // AND orderid = :arg_orderid // And flag = 1; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询指令单:'+ls_ordercode+'相关已审工艺派工单失败,'+sqlca.SQLErrText // GOTO ext //END IF // //IF cnt > 0 THEN // rslt = 0 // arg_msg = '指令单:'+ls_ordercode+'已有相关已审工艺派工单,不能删除相关工艺派工单' // GOTO ext //END IF DECLARE cur_plan CURSOR FOR SELECT billid,flag FROM u_order_plan_tech WHERE scid = :arg_scid And orderid = :arg_orderid; OPEN cur_plan; FETCH cur_plan Into :ll_billid[ll_mxbt],:li_flag[ll_mxbt]; DO WHILE sqlca.SQLCode = 0 ll_mxbt++ FETCH cur_plan Into :ll_billid[ll_mxbt],:li_flag[ll_mxbt]; LOOP CLOSE cur_plan; ll_mxbt = ll_mxbt - 1 FOR ll_i = 1 To ll_mxbt IF li_flag[ll_i] = 1 THEN IF uo_tech.caudit(ll_billid[ll_i],arg_msg,False) = 0 THEN rslt = 0 arg_msg = '撤审相关工艺派工单失败,'+arg_msg GOTO ext END IF END IF IF uo_tech.del(ll_billid[ll_i],arg_msg,False) = 0 THEN rslt = 0 arg_msg = '删除相关工艺派工单失败,'+arg_msg GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_tech RETURN rslt end function public function integer uof_order_cmp_wrk_date (long arg_scid, long arg_orderid, datetime arg_sdate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long l_wrkgrpid[],l_owrkgrpid[],l_ifjd[],l_printid[] Decimal l_lastdays[],l_lasthour[] String l_wkpname[],l_groupstr[] Long j,cnt_2,ll_count,ll_j DateTime ld_sdate,ld_edate,ld_update_edate DateTime ld_sdate_max Decimal ld_resthour,ld_workhour,ld_resthour_e Int li_timehour Int li_rdate Decimal ld_resthour_tmp DateTime ld_workdate_tmp Long l_printid_gr[] String l_groupstr_gr[] Long cnt_gr DateTime ld_sdate_gr[] Long k Boolean lb_if_find = False String ls_arg_date DateTime ldt_tmp Long ll_i ld_sdate_max = arg_sdate j = 1 DECLARE cur_wrkmx_2 CURSOR FOR SELECT wrkgrpid, owrkgrpid, wkpname, ifjd, printid, lastdays, groupstr, lasthour FROM u_OrderMtrl_workgroup WHERE orderid = :arg_orderid AND scid = :arg_scid Order By printid; OPEN cur_wrkmx_2; FETCH cur_wrkmx_2 INTO :l_wrkgrpid[j],:l_owrkgrpid[j], :l_wkpname[j],:l_ifjd[j],:l_printid[j],:l_lastdays[j], :l_groupstr[j],:l_lasthour[j]; DO WHILE sqlca.SQLCode = 0 j++ FETCH cur_wrkmx_2 INTO :l_wrkgrpid[j],:l_owrkgrpid[j], :l_wkpname[j],:l_ifjd[j],:l_printid[j],:l_lastdays[j], :l_groupstr[j],:l_lasthour[j]; LOOP CLOSE cur_wrkmx_2; cnt_2 = j - 1 FOR ll_i = 1 To cnt_2 ll_count = 0 IF l_ifjd[ll_i] = 1 THEN IF l_groupstr[ll_i] <> '' THEN lb_if_find = False FOR k = 1 To cnt_gr IF l_groupstr_gr[k] = l_groupstr[ll_i] THEN ld_sdate = ld_sdate_gr[k] lb_if_find = True EXIT END IF NEXT IF lb_if_find = False THEN ld_sdate = ld_sdate_max END IF ELSE ld_sdate = ld_sdate_max END IF IF uo_cmp_wrk_edate(ld_sdate,l_wrkgrpid[ll_i],l_lasthour[ll_i],ld_edate,ld_resthour_e,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_ordermtrl_workgroup SET begindate = :ld_sdate, requiredate = :ld_edate WHERE orderid = :arg_orderid AND scid = :arg_scid AND wrkGrpid = :l_wrkgrpid[ll_i] AND owrkgrpid = :l_owrkgrpid[ll_i] And wkpname = :l_wkpname[ll_i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新工组开始及完成时间失败'+sqlca.SQLErrText GOTO ext END IF IF l_groupstr[ll_i] <> '' THEN lb_if_find = False IF ld_resthour_e > 0 THEN IF Hour(Time(ld_edate)) = 12 THEN ld_sdate = DateTime(Date(ld_edate),Time('14:00:00')) ELSEIF Hour(Time(ld_edate)) = 18 THEN ld_sdate = DateTime(Date(ld_edate),Time('19:00:00')) ELSE ld_sdate = ld_edate END IF ELSE ld_sdate = DateTime(RelativeDate(Date(ld_edate),1),Time('8:00:00')) END IF FOR k = 1 To cnt_gr IF l_groupstr_gr[k] = l_groupstr[ll_i] THEN ld_sdate_gr[k] = ld_sdate l_printid_gr[k] = l_printid[ll_i] lb_if_find = True EXIT END IF NEXT IF lb_if_find = False THEN cnt_gr++ l_printid_gr[cnt_gr] = l_printid[ll_i] l_groupstr_gr[cnt_gr] = l_groupstr[ll_i] ld_sdate_gr[cnt_gr] = ld_sdate END IF END IF FOR ll_j = ll_i + 1 To cnt_2 IF l_ifjd[ll_j] = 1 And & l_printid[ll_j] = l_printid[ll_i] THEN IF l_groupstr[ll_j] <> '' THEN lb_if_find = False FOR k = 1 To cnt_gr IF l_groupstr_gr[k] = l_groupstr[ll_j] THEN ld_sdate = ld_sdate_gr[k] lb_if_find = True EXIT END IF NEXT IF lb_if_find = False THEN ld_sdate = ld_sdate_max END IF ELSE ld_sdate = ld_sdate_max END IF IF uo_cmp_wrk_edate(ld_sdate,l_wrkgrpid[ll_i],l_lasthour[ll_i],ld_update_edate,ld_resthour_e,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_ordermtrl_workgroup SET begindate = :ld_sdate, requiredate = :ld_update_edate WHERE orderid = :arg_orderid AND scid = :arg_scid AND wrkGrpid = :l_wrkgrpid[ll_j] AND owrkgrpid = :l_owrkgrpid[ll_j] And wkpname = :l_wkpname[ll_j]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新工组开始及完成时间失败'+sqlca.SQLErrText GOTO ext END IF IF l_groupstr[ll_j] <> '' THEN lb_if_find = False IF ld_resthour_e > 0 THEN IF Hour(Time(ld_update_edate)) = 12 THEN ld_sdate = DateTime(Date(ld_update_edate),Time('14:00:00')) ELSEIF Hour(Time(ld_edate)) = 18 THEN ld_sdate = DateTime(Date(ld_update_edate),Time('19:00:00')) ELSE ld_sdate = ld_update_edate END IF ELSE ld_sdate = DateTime(RelativeDate(Date(ld_update_edate),1),Time('8:00:00')) END IF FOR k = 1 To cnt_gr IF l_groupstr_gr[k] = l_groupstr[ll_j] THEN ld_sdate_gr[k] = ld_sdate l_printid_gr[k] = l_printid[ll_j] lb_if_find = True EXIT END IF NEXT IF lb_if_find = False THEN cnt_gr++ l_printid_gr[cnt_gr] = l_printid[ll_j] l_groupstr_gr[cnt_gr] = l_groupstr[ll_j] ld_sdate_gr[cnt_gr] = ld_sdate END IF END IF IF ld_edate < ld_update_edate THEN ld_edate = ld_update_edate END IF ll_count++ END IF NEXT ll_i = ll_i + ll_count IF Hour(Time(ld_edate)) = 18 THEN ldt_tmp = DateTime(RelativeDate(Date(ld_edate),1),Time('8:00:00')) ELSEIF Hour(Time(ld_edate)) = 12 THEN ldt_tmp = DateTime(Date(ld_edate),Time('14:00:00')) ELSE ldt_tmp = ld_edate END IF IF ld_sdate_max < ldt_tmp THEN ld_sdate_max = ldt_tmp END IF END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer mod_order_requiredate (long arg_scid, long arg_orderid, datetime arg_oridate, datetime arg_newdate, datetime arg_oriredate, datetime arg_newredate, string arg_reason, boolean arg_ifcmpdate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime server_dt IF p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF Date(arg_oridate) = Date(arg_newdate) And Date(arg_oriredate) = Date(arg_newredate) THEN rslt = 0 arg_msg = '新日期与原日期相同,无须更新,操作取消' GOTO ext END IF arg_reason = Trim(arg_reason) Long cnt Long ll_printid cnt = 0 SELECT count(*) INTO :cnt FROM u_order_ml_perfinishdate_log WHERE scid = :arg_scid AND orderid = :arg_orderid And logtype = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询预计完成日期修改日志失败'+'~n'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN ll_printid = 0 ELSE SELECT max(printid) INTO :ll_printid FROM u_order_ml_perfinishdate_log WHERE scid = :arg_scid AND orderid = :arg_orderid And logtype = 1 ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询预计完成日期修改日志失败'+'~n'+sqlca.SQLErrText GOTO ext END IF END IF ll_printid++ SELECT Top 1 getdate() Into :server_dt From u_user ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF INSERT INTO u_order_ml_perfinishdate_log (scid, orderid, printid, logtype, oridate, newdate, oriredate, newredate, reason, modemp, moddate) VALUES (:arg_scid, :arg_orderid, :ll_printid, 1, :arg_oridate, :arg_newdate, :arg_oriredate, :arg_newredate, :arg_reason, :publ_operator, :server_dt); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入预计完成日期修改日志操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF UPDATE u_order_ml SET orderdate = :arg_newdate, requiredate = :arg_newredate WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新预计完成日期失败'+'~n'+sqlca.SQLErrText GOTO ext END IF IF arg_ifcmpdate THEN DateTime ld_sdate_max ld_sdate_max = DateTime(Date(arg_newdate),Time('8:00:00')) IF uof_order_cmp_wrk_date(arg_scid,arg_orderid,ld_sdate_max,arg_msg,False) = 0 THEN arg_msg = '计算工组日期失败,'+arg_msg rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF Return(rslt) end function public function integer uof_update_outtypestr_zl (long arg_scid[], long arg_orderid[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_scid Long ll_i,ll_j,ll_k,ll_l Long ll_mxbt String ls_outtypestr_p String ls_outtypestr[],ls_empty[] Long ll_mtrlid,ll_orderid_mx,ll_porderid_mx String ls_status,ls_woodcode,ls_pcode String ls_outtypestr_zl DateTime server_dt IF UpperBound(arg_orderid) <= 0 THEN rslt = 1 GOTO ext END IF SELECT Top 1 getdate() Into :server_dt From u_user ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF ll_scid = arg_scid[1] datastore ds_outtype,ds_mtrlid,ds_mx ds_outtype = Create datastore ds_outtype.DataObject = 'ds_order_zl_outtypestr_cnt' ds_outtype.SetTransObject(sqlca) ds_mtrlid = Create datastore ds_mtrlid.DataObject = 'ds_order_zl_outtypestr_mtrlid' ds_mtrlid.SetTransObject(sqlca) ds_mx = Create datastore ds_mx.DataObject = 'ds_order_zl_outtypestr_mx' ds_mx.SetTransObject(sqlca) ds_outtype.Retrieve(ll_scid,arg_orderid) FOR ll_i = 1 To ds_outtype.RowCount() ls_outtypestr_p = ds_outtype.Object.outtypestr[ll_i] ls_outtypestr = ls_empty ll_mxbt = 0 FOR ll_j = 1 To ds_outtype.Object.maxcnt[ll_i] //取组号 ls_outtypestr_zl = getid(0,'OUT',Date(server_dt),if_getid_ture,sqlca) //取得新单据编号 IF ls_outtypestr_zl = "err" THEN rslt = 0 arg_msg = "无法获取组号"+"~n"+sqlca.SQLErrText GOTO ext END IF // ll_mxbt++ ls_outtypestr[ll_mxbt] = ls_outtypestr_zl NEXT ds_mtrlid.Retrieve(ll_scid,arg_orderid,ls_outtypestr_p) FOR ll_k = 1 To ds_mtrlid.RowCount() ll_mtrlid = ds_mtrlid.Object.u_order_ml_mtrlid[ll_k] ls_status = ds_mtrlid.Object.u_order_ml_status_mode[ll_k] ls_woodcode = ds_mtrlid.Object.u_order_ml_woodcode[ll_k] ls_pcode = ds_mtrlid.Object.u_order_ml_pcode[ll_k] ll_porderid_mx = ds_mtrlid.Object.u_order_ml_porderid[ll_k] ds_mx.Retrieve(ll_scid,ll_porderid_mx,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ls_outtypestr_p) FOR ll_l = 1 To ds_mx.RowCount() IF ll_l > ll_mxbt THEN EXIT ll_orderid_mx = ds_mx.Object.u_order_ml_orderid[ll_l] UPDATE u_order_ml SET outtypestr = :ls_outtypestr[ll_l] WHERE scid = :ll_scid And orderid = :ll_orderid_mx; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新指令单组号失败,'+sqlca.SQLErrText GOTO ext END IF NEXT NEXT NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_tryfinish_packorder2 (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt rslt = 1 rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) IF rslt = 0 THEN GOTO ext Int li_ifpackpro,li_orderype_mtrl Long ll_porderid,cnt Decimal ld_minrate,ld_qty DateTime null_dt SetNull(null_dt) //如果不是指令单,或者合并指令单的情况不作处理 IF porderid = 0 THEN rslt = 1 GOTO ext END IF SELECT u_mtrldef.ordertype,u_mtrldef.ifpackpro,u_order_ml.porderid INTO :li_orderype_mtrl,:li_ifpackpro,:ll_porderid FROM u_mtrldef,u_order_ml WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid AND u_order_ml.orderid = :pzlorderid And u_order_ml.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询组合配置整排指令是否指令单分离属性失败,'+sqlca.SQLErrText GOTO ext END IF IF li_ifpackpro <> 4 THEN //不是整排散进组合配置包件产品,退出函数,否则检查主计划相关指令单是否全部完成 rslt = 1 GOTO ext END IF //1.先检查主生产计划自制需求,需求数是否等于用料数,不等即说明有分配库存,跳过判断完成比例 //2.查询相应部件的完成情况,按需求量对比后得出主计划物料的完成数量 SELECT count(*) INTO :cnt FROM u_order_ml WHERE u_order_ml.pzlorderid = :pzlorderid AND u_order_ml.scid = :arg_scid AND u_order_ml.AcmpQty < u_order_ml.orderqty And u_order_ml.ordertype = 4; IF sqlca.SQLCode <> 0 THEN rslt = 0 IF li_orderype_mtrl = 0 THEN arg_msg = '查询组合配置包件产品主生产计划相关分子件指令单是否全部完成失败'+sqlca.SQLErrText ELSE arg_msg = '查询组合配置包件产品主生产计划【分离指令】相关子件指令单是否全部完成失败'+sqlca.SQLErrText END IF GOTO ext END IF IF cnt = 0 THEN //相关自制需求全部完成,更新主生产计划已完成数及状态 UPDATE u_order_ml SET status = 5, accomplishdate = getdate(), accomplishemp = :publ_operator, acmpqty = orderqty WHERE ( u_order_ml.orderid = :pzlorderid ) And (u_order_ml.scid = :arg_scid); IF sqlca.SQLCode <> 0 THEN rslt = 0 IF li_orderype_mtrl = 0 THEN arg_msg = "更新组合配置包件产品主生产计划完成状态失败"+"~n"+sqlca.SQLErrText ELSE arg_msg = "更新组合配置包件产品主生产计划【分离指令】完成状态失败"+"~n"+sqlca.SQLErrText END IF GOTO ext END IF ELSE //如果没有全部完成,则取自制需求的最小完成率去计算主生产计划的完成数 SELECT min(AcmpQty/orderqty) INTO :ld_minrate FROM u_order_ml WHERE u_order_ml.pzlorderid = :pzlorderid AND u_order_ml.scid = :arg_scid And u_order_ml.ordertype = 4; IF sqlca.SQLCode <> 0 THEN rslt = 0 IF li_orderype_mtrl = 0 THEN arg_msg = '查询相关组合配置包件产品主生产计划子件指令完成率失败'+"~n"+sqlca.SQLErrText ELSE arg_msg = '查询相关组合配置包件产品主生产计划【分离指令】子件指令完成率失败'+"~n"+sqlca.SQLErrText END IF GOTO ext END IF UPDATE u_order_ml SET status = 1, accomplishdate = :null_dt, accomplishemp = '', acmpqty = orderqty * :ld_minrate WHERE ( u_order_ml.orderid = :pzlorderid ) And (u_order_ml.scid = :arg_scid); IF sqlca.SQLCode <> 0 THEN rslt = 0 IF li_orderype_mtrl = 0 THEN arg_msg = "更新组合配置包件产品主生产计划完成状态失败"+"~n"+sqlca.SQLErrText ELSE arg_msg = "更新组合配置包件产品主生产计划【分离指令】完成状态失败"+"~n"+sqlca.SQLErrText END IF GOTO ext END IF END IF IF li_orderype_mtrl = 1 THEN SELECT isnull(sum(AcmpQty),0) INTO :ld_qty FROM u_order_ml WHERE u_order_ml.porderid = :ll_porderid AND u_order_ml.ordertype = 4 AND u_order_ml.pzlorderid = 0 And u_order_ml.mtrlid = :mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询组合配置包件产品主生产计划相关【分离指令】完数失败'+"~n"+sqlca.SQLErrText GOTO ext END IF UPDATE u_order_ml SET status = case when u_order_ml.orderqty - u_order_ml.stopqty = :ld_qty then 5 else 1 END, accomplishdate = case when u_order_ml.orderqty - u_order_ml.stopqty = :ld_qty then getdate() else :null_dt END, accomplishemp = case when u_order_ml.orderqty - u_order_ml.stopqty = :ld_qty then :publ_operator else '' END, acmpqty = :ld_qty WHERE ( u_order_ml.orderid = :ll_porderid ) And (u_order_ml.scid = :arg_scid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新组合配置包件产品主生产计划完成状态失败"+"~n"+sqlca.SQLErrText GOTO ext 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 c_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 Long ls_i,ll_fp String ls_mtrlcode IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_saletask uo_task uo_task = Create uo_saletask uo_task.commit_transaction = sqlca uo_saletask_ll uo_task_ll uo_task_ll = Create uo_saletask_ll uo_task_ll.commit_transaction = sqlca uo_mtrlware_assign uo_mtrlware_fp uo_mtrlware_fp = Create uo_mtrlware_assign uo_mtrlware_fp.commit_transaction = sqlca uo_getbar uo_get uo_get = Create uo_getbar datastore ds_fp_del ds_fp_del = Create datastore ds_fp_del.DataObject = 'ds_order_fp_del' ds_fp_del.SetTransObject(sqlca) Decimal finishqty,ld_sqty,ld_oqty DateTime null_dt SetNull(null_dt) IF uo_option_if_oa_order_ml = -1000 THEN rslt = 0 arg_msg = '选项:[230]生产计划使用审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_order_ml_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[225]生产计划使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_if_oa_order_zl = -1000 THEN rslt = 0 arg_msg = '选项:[231]生产指令单使用审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_order_ml_zl_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[226]生产指令单使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_order_bh_use_yc = -1000 THEN rslt = 0 arg_msg = '选项:[074]备货生产计划选销售预测单,读取初始默认值失败,操作取消!' GOTO ext END IF rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) IF rslt = 0 THEN GOTO ext IF ctmint > 0 THEN arg_msg = '单据已截数,不能操作' rslt = 0 GOTO ext END IF //IF pzlorderid > 0 THEN // arg_msg = '自动生成的指令,不能操作' // rslt = 0 // GOTO ext //END IF //yyx20140723 //胚板指令终审自动建立条码生成单 IF uo_option_order_zl_auto_getbar = 1 And ordertype = 4 And ifpban = 1 THEN Long ll_getbarid SELECT getbarid Into :ll_getbarid From u_getbar Where ifrel = 1 And orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode = -1 THEN arg_msg = '查询胚板指令单自动建立的条码生成单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext ELSEIF sqlca.SQLCode = 100 THEN ll_getbarid = 0 END IF IF ll_getbarid > 0 THEN IF uo_get.c_auditing(ll_getbarid,False,arg_msg,False) = 0 THEN arg_msg = '撤审胚板指令单自动建立的条码生成单失败,'+arg_msg rslt = 0 GOTO ext END IF IF uo_get.del(ll_getbarid,arg_msg,False) = 0 THEN arg_msg = '删除胚板指令单自动建立的条码生成单失败,'+arg_msg rslt = 0 GOTO ext END IF END IF END IF //end_yyx20140723 IF ordertype = 4 THEN IF ifauto_optype = 0 THEN IF iffg = 1 And ifauto = 1 THEN arg_msg = '自动生成的返工指令,不能手动撤审,需撤审相应返工物料运算批' rslt = 0 GOTO ext END IF END IF END IF IF ordertype <> 4 THEN IF uo_option_order_ml_secaudit = 1 And uo_option_if_oa_order_ml = 1 And audit_buildtype = 0 THEN IF f_check_if_oaflow_caudit(arg_scid,arg_orderid,36,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSE IF uo_option_order_ml_zl_secaudit = 1 And uo_option_if_oa_order_zl = 1 And audit_buildtype = 0 THEN IF f_check_if_oaflow_caudit(arg_scid,arg_orderid,1138,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF IF Status <> 7 THEN rslt = 0 arg_msg = "生产计划只有在待二审状态才可以执行撤消审核,请核对" GOTO ext END IF IF scllflag = 1 THEN rslt = 0 arg_msg = "计划已执行用料审批,请先用料撤审" GOTO ext END IF //查询是否已开生产指令单终止单 cnt = 0 SELECT count(*) INTO :cnt FROM u_order_ml_stop WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询是否有相关的生产指令单终止单失败' rslt = 0 GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '本生产计划已开了相关的生产指令单终止单,不能撤审' GOTO ext END IF // //查询是否有相关的成品生产计划 cnt = 0 SELECT count(*) INTO :cnt FROM u_order_ml WHERE scid = :arg_scid And pforderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询是否有相关的成品生产计划失败' rslt = 0 GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '本生产计划已开了相关的成品生产计划,不能撤审' GOTO ext END IF // SELECT mtrlcode INTO :ls_mtrlcode FROM u_mtrldef Where mtrlid = :mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询产品编号失败' rslt = 0 GOTO ext END IF IF getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //检查报数单 SELECT sum(finishqty) INTO :finishqty FROM u_OrderMtrl_workgroup WHERE orderid = :arg_orderid And scid = :scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询生产计划工组报数失败' rslt = 0 GOTO ext END IF IF finishqty > 0 THEN arg_msg = '生产计划已有工组报数,不能撤审' rslt = 0 GOTO ext END IF //条码进度 SELECT sum(sqty),sum(oqty) INTO :ld_sqty,:ld_oqty FROM u_OrderMtrl_workgroup_tree WHERE orderid = :arg_orderid And scid = :scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询生产计划工组报数失败' rslt = 0 GOTO ext END IF IF ld_sqty > 0 THEN arg_msg = '生产计划已有工组完成数,不能撤审' rslt = 0 GOTO ext END IF IF ld_oqty > 0 THEN arg_msg = '生产计划已有工组接收数,不能撤审' rslt = 0 GOTO ext END IF //检查已完成数量 IF AcmpQty > 0 THEN arg_msg = '生产计划已有进仓数,不能撤审' rslt = 0 GOTO ext END IF IF planqty > 0 THEN arg_msg = '生产计划已有排程数,不能撤审' rslt = 0 GOTO ext END IF //检查工序已开单数,已确认完成数 Decimal ld_amount Decimal ld_finishqty ld_amount = 0 SELECT sum(isnull(v_order_procode.amount,0)) INTO :ld_amount FROM v_order_procode WHERE v_order_procode.orderid = :arg_orderid And v_order_procode.scid = :scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询工序已开单数操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF ld_amount > 0 THEN arg_msg = '生产计划工序已有开单数,不能撤审' rslt = 0 GOTO ext END IF ld_finishqty = 0 SELECT sum(U_OrderRqwp.finishqty) INTO :ld_finishqty FROM U_OrderRqwp WHERE ( U_OrderRqwp.scid = :scid ) AND ( U_OrderRqwp.orderid = :arg_orderid ) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询工序已确认完成数操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF ld_finishqty > 0 THEN arg_msg = '生产计划工序已确认完成数,不能撤审' rslt = 0 GOTO ext END IF //检查派工数量 cnt = 0 SELECT count(*) INTO :cnt FROM u_order_planmx WHERE ( u_order_planmx.orderid = :arg_orderid ) AND ( u_order_planmx.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 ordertype <> 4 THEN IF uof_check_if_zl(arg_scid,arg_orderid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF //检查进数量 cnt = 0 SELECT count(*) INTO :cnt FROM u_inware,u_inwaremx WHERE ( u_inware.billtype = 3 ) AND ( u_inware.scid = u_inwaremx.scid ) AND ( u_inware.inwareid = u_inwaremx.inwareid ) AND ( u_inwaremx.relid = :arg_orderid ) AND ( u_inwaremx.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 //检查领料数量 cnt = 0 SELECT count(*) INTO :cnt FROM u_outware,u_outwaremx WHERE ( u_outware.billtype = 3 ) AND ( u_outware.scid = u_outwaremx.scid ) AND ( u_outware.outwareid = u_outwaremx.outwareid ) AND ( u_outwaremx.relid = :arg_orderid ) AND ( u_outwaremx.scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询计划领料数量操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN String ls_rel_scllcode,ls_msg_scllcode DECLARE cur_check_code CURSOR FOR SELECT u_outware.outwarecode FROM u_outware,u_outwaremx WHERE ( u_outware.billtype = 3 ) AND ( u_outware.scid = u_outwaremx.scid ) AND ( u_outware.outwareid = u_outwaremx.outwareid ) AND ( u_outwaremx.relid = :arg_orderid ) AND ( u_outwaremx.scid = :arg_scid ); OPEN cur_check_code; FETCH cur_check_code Into :ls_rel_scllcode; DO WHILE sqlca.SQLCode = 0 IF Trim(ls_msg_scllcode) = '' THEN ls_msg_scllcode = ls_rel_scllcode ELSE ls_msg_scllcode = ls_msg_scllcode +',' + ls_rel_scllcode END IF FETCH cur_check_code Into :ls_rel_scllcode; LOOP CLOSE cur_check_code; rslt = 0 arg_msg = "指令单已经有相关领料出仓单据,不可以撤消审核,请先删除相关单据再撤审"+'~r~n' + '相关领料单号:'+ls_msg_scllcode GOTO ext END IF //检查是否已开发料通知单 cnt = 0 SELECT count(*) INTO :cnt FROM u_outware_scllplan_mx,u_outware_scllplan WHERE ( u_outware_scllplan.outwareid = u_outware_scllplan_mx.outwareid ) AND ( u_outware_scllplan_mx.orderid = :arg_orderid ) AND ( u_outware_scllplan.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 //检查工序派工单 cnt = 0 SELECT count(*) INTO :cnt FROM u_sc_task WHERE scid = :arg_scid And orderid = :arg_orderid; 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 //检查工艺派工单 cnt = 0 SELECT count(*) INTO :cnt FROM u_order_plan_tech WHERE scid = :arg_scid And orderid = :arg_orderid; 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 //检查条码生成单 cnt = 0 SELECT count(*) INTO :cnt FROM u_getbar WHERE scid = :arg_scid AND orderid = :arg_orderid And ifrel = 1; 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 //==================================================================== // 删除工序明细/工组明细 //==================================================================== DELETE FROM U_OrderRqwp WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除指令单工序明细失败,原因>>'+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_OrderRqMtrl WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除计划的计划用料表相应记录操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_OrderRqMtrl_tree WHERE u_OrderRqMtrl_tree.orderid = :arg_orderid And u_OrderRqMtrl_tree.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除生产计划运算树操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_OrderMtrl_workgroup WHERE u_OrderMtrl_workgroup.orderid = :arg_orderid And u_OrderMtrl_workgroup.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除生产计划工组进度操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_OrderMtrl_workgroup_tree WHERE u_OrderMtrl_workgroup_tree.orderid = :arg_orderid And u_OrderMtrl_workgroup_tree.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除生产计划条码工组进度操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_ordermtrl_workgroup_barcode WHERE u_ordermtrl_workgroup_barcode.orderid = :arg_orderid And u_ordermtrl_workgroup_barcode.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除相关工组条码明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_order_ml_barcode WHERE u_order_ml_barcode.orderid = :arg_orderid And u_order_ml_barcode.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除相关条码明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_ordermtrl_wrk_jd WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除工组工作量明细表相应记录操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_order_ml_stop_mtrl_his WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除变更记录操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF ordertype = 1 Or & ordertype = 2 Or & ordertype = 3 Or & ordertype = 0 And & uo_option_order_bh_use_yc = 1 THEN IF ordertype = 2 THEN FOR ls_i = 1 To it_mxbt IF s_order_mx[ls_i].taskid > 0 THEN IF uo_task_ll.updateassignqty(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,s_order_mx[ls_i].taskmxid,0 - s_order_mx[ls_i].orderqty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT ELSE FOR ls_i = 1 To it_mxbt IF s_order_mx[ls_i].taskid > 0 THEN IF uo_task.updateassignqty(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,s_order_mx[ls_i].taskmxid,0 - s_order_mx[ls_i].orderqty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT END IF ELSEIF ordertype = 4 And pzlorderid = 0 THEN FOR ls_i = 1 To it_mxbt IF s_order_mx[ls_i].taskid > 0 THEN Int li_plantype Long ll_wrkGrpid_scll SELECT plantype,wrkGrpid INTO :li_plantype,:ll_wrkGrpid_scll FROM u_OrderRqMtrl WHERE scid = :scid AND orderid = :s_order_mx[ls_i].taskid And mxpkid = :s_order_mx[ls_i].taskmxid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询生产自制需求资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF f_assign_rqmtrlqty(scid,s_order_mx[ls_i].taskid,ll_wrkGrpid_scll,& mtrlid,ls_mtrlcode,status_mode,& woodcode,pcode,0 - s_order_mx[ls_i].orderqty,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT END IF IF ordertype <> 4 THEN //删除原分配 ds_fp_del.Retrieve(arg_scid,arg_orderid) FOR ll_fp = 1 To ds_fp_del.RowCount() IF ds_fp_del.Object.fptype[ll_fp] = 0 THEN IF uo_mtrlware_fp.uof_assign_del(ds_fp_del.Object.id[ll_fp],& ds_fp_del.Object.qty[ll_fp],arg_msg,False) = 0 THEN arg_msg = '删除分配失败,'+arg_msg rslt = 0 GOTO ext END IF ELSE IF uo_mtrlware_fp.uof_plan_del(ds_fp_del.Object.id[ll_fp],& ds_fp_del.Object.qty[ll_fp],arg_msg,False) = 0 THEN arg_msg = '删除分配计划失败,'+arg_msg rslt = 0 GOTO ext END IF END IF NEXT // END IF /// // Long ll_mxbt = 1,ll_i,ll_orderid_arr[] Int li_status uo_order_ml uo_ml uo_ml = Create uo_order_ml DECLARE cur_porder CURSOR FOR SELECT orderid FROM u_order_ml WHERE pzlorderid = :arg_orderid And scid = :arg_scid; OPEN cur_porder; FETCH cur_porder Into :ll_orderid_arr[ll_mxbt]; DO WHILE sqlca.SQLCode = 0 ll_mxbt++ FETCH cur_porder Into :ll_orderid_arr[ll_mxbt]; LOOP CLOSE cur_porder; ll_mxbt = ll_mxbt - 1 FOR ll_i = 1 To ll_mxbt IF uo_ml.uof_delete_order_plan_tech(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF SELECT status INTO :li_status FROM u_order_ml WHERE scid = :arg_scid And orderid = :ll_orderid_arr[ll_i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关指令单状态失败,'+arg_msg GOTO ext END IF IF li_status = 1 THEN IF uo_ml.c_sec_audit(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN rslt = 0 arg_msg = '撤审相关生产指令单失败,'+arg_msg GOTO ext END IF END IF SELECT status INTO :li_status FROM u_order_ml WHERE scid = :arg_scid And orderid = :ll_orderid_arr[ll_i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关指令单状态失败,'+arg_msg GOTO ext END IF IF li_status = 4 THEN IF uo_ml.c_plan_audit(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN rslt = 0 arg_msg = '撤审相关生产指令单失败,'+arg_msg GOTO ext END IF END IF SELECT status INTO :li_status FROM u_order_ml WHERE scid = :arg_scid And orderid = :ll_orderid_arr[ll_i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关指令单状态失败,'+arg_msg GOTO ext END IF IF li_status = 7 THEN IF uo_ml.c_audit(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN rslt = 0 arg_msg = '撤审相关生产指令单失败,'+arg_msg GOTO ext END IF END IF IF uo_ml.del(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN rslt = 0 arg_msg = '删除相关生产指令单失败,'+arg_msg GOTO ext END IF NEXT // // UPDATE u_order_ml SET status = 0, Permit_emp = '', Permit_date = :null_dt WHERE orderid = :arg_orderid AND scid = :arg_scid And Status = 7; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致计划撤消审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_task Destroy uo_task_ll Destroy uo_mtrlware_fp Destroy ds_fp_del Destroy uo_ml Destroy uo_get Return (rslt) end function public function integer uf_add_ftaskqty (long arg_scid, long arg_orderid, long arg_mtrlid, string arg_procode, datetime arg_billdate, decimal arg_ftaskqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF arg_orderid <= 0 THEN rslt = 0 arg_msg = '错误的计划唯一码' GOTO ext END IF IF arg_mtrlid <= 0 THEN rslt = 0 arg_msg = '错误的物料ID唯一码' GOTO ext END IF IF arg_procode = '' OR IsNull(arg_procode) THEN rslt = 0 arg_msg = '错误的工序序号' GOTO ext END IF Int li_status string ls_mtrlcode,ls_ordercode long ll_mtrlid SELECT u_order_ml.status, u_mtrldef.mtrlcode, u_order_ml.ordercode, u_order_ml.mtrlid INTO :li_status, :ls_mtrlcode, :ls_ordercode, :ll_mtrlid FROM u_mtrldef,u_order_ml WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid and u_order_ml.orderid = :arg_orderid AND u_order_ml.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //IF li_status <> 1 and li_status <> 5 and li_status <> 6 THEN // rslt = 0 // arg_msg = "计划只有在进行或已完成状态才可以执行操作,请核对" // GOTO ext //END IF UPDATE u_orderrqwp SET ftaskqty = ftaskqty + :arg_ftaskqty WHERE orderid = :arg_orderid AND mtrlid = :arg_mtrlid AND procode = :arg_procode AND scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '因网络或其他原因导致更新已安排时数失败'+sqlca.SQLErrText GOTO ext END IF //如果工组进度解决方案为[按末工序计件确认数更新工组完成数],且工组末工序,更新工组完成数 //////////////////////////////////////////////// // Long ll_wrkGrpid, ll_proorder_max, ll_proorder SELECT wrkGrpid, proorder INTO :ll_wrkGrpid, :ll_proorder FROM U_OrderRqwp WHERE orderid = :arg_orderid AND scid = :arg_scid And Procode = :arg_procode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',对应工组失败>>'+sqlca.SQLErrText GOTO ext END IF //检查工组,工组进度解决方案 110527 Int li_jdtype SELECT jdtype INTO :li_jdtype FROM u_sc_workgroup Where wrkGrpid = :ll_wrkGrpid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询工组进度解决方案操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF li_jdtype = 3 or li_jdtype = 4 THEN SELECT max(proorder) INTO :ll_proorder_max FROM U_OrderRqwp WHERE orderid = :arg_orderid AND scid = :arg_scid And wrkGrpid = :ll_wrkGrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',所属工组最后工序失败>>'+sqlca.SQLErrText GOTO ext END IF IF ll_proorder = ll_proorder_max THEN //当前工序为最后工序 IF uof_add_workgroup_qty(arg_scid, arg_orderid , ll_wrkGrpid, ll_mtrlid, arg_billdate, arg_ftaskqty, arg_msg, False) = 0 THEN rslt = 0 arg_msg = '生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',所属工组更新完成数失败>>'+arg_msg 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 uof_okplan (long arg_scid, long arg_orderid, integer arg_okplanflag, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime null_dt SetNull(null_dt) rslt = p_getinfo(arg_scid,arg_orderid,arg_msg) IF rslt = 0 THEN GOTO ext IF ctmint > 0 THEN arg_msg = '单据已截数,不能操作' rslt = 0 GOTO ext END IF IF arg_okplanflag = 1 THEN IF okplan_flag = 1 THEN rslt = 1 GOTO ext END IF UPDATE u_order_ml SET okplan_flag = 1, okplan_emp = :arg_opemp, okplan_date = getdate() WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "更新可排程标记失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ELSE IF okplan_flag = 0 THEN rslt = 1 GOTO ext END IF UPDATE u_order_ml SET okplan_flag = 0, okplan_emp = '', okplan_date = :null_dt WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "更新可排程标记失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Return (rslt) end function public function integer uof_reset_tree_barcode (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime ldt_null Long cnt SetNull(ldt_null) //1.删除PDA扫描记录 DELETE FROM u_order_wkp_barcode_pda WHERE (barcode IN (SELECT barcode FROM u_ordermtrl_workgroup_barcode Where (orderid = :arg_orderid) And (scid = :arg_scid))); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除PDA扫描记录失败,'+sqlca.SQLErrText GOTO ext END IF //2.删除条码扫描更新工组每天进度记录 DELETE FROM u_OrderMtrl_workgroup_date WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除工组每天进度记录失败,'+sqlca.SQLErrText GOTO ext END IF //3.删除部件条码 DELETE FROM u_ordermtrl_workgroup_barcode Where (orderid = :arg_orderid) And (scid = :arg_scid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除部件条码失败,'+sqlca.SQLErrText GOTO ext END IF //4.清空工艺进度数量 UPDATE u_OrderMtrl_workgroup_tree SET sqty = 0, oqty = 0, sdate = :ldt_null, odate = :ldt_null WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '清空工艺进度数量失败,'+sqlca.SQLErrText GOTO ext END IF //5.清空使用条码更新模式的工组进度 UPDATE u_OrderMtrl_workgroup SET u_OrderMtrl_workgroup.finishqty = 0, u_OrderMtrl_workgroup.finishdate = :ldt_null, u_OrderMtrl_workgroup.finishflag = 0 FROM u_OrderMtrl_workgroup INNER JOIN u_sc_workgroup ON u_OrderMtrl_workgroup.wrkGrpid = u_sc_workgroup.wrkGrpid WHERE (u_sc_workgroup.jdtype = 6) AND (u_OrderMtrl_workgroup.scid = :arg_scid) And (u_OrderMtrl_workgroup.orderid = :arg_orderid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '清空使用条码更新模式的工组进度失败,'+sqlca.SQLErrText GOTO ext END IF //6.清空工艺派工单的完成数 SELECT count(*) INTO :cnt FROM u_finish_tech_mx WHERE relid IN ( SELECT billid FROM u_order_plan_tech WHERE scid = :arg_scid And orderid = :arg_orderid); 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 UPDATE u_order_plan_tech SET fqty = 0 WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品唯一码导致更新派工单完成数量操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_order_add_wkp_tree_doing (long arg_scid, long arg_orderid, long arg_this_printid, long arg_next_printid, s_ordermtrl_workgroup_tree arg_s_tree[], integer arg_kind, ref string arg_msg, boolean arg_ifcommit);//==================================================================== // 修改:工艺进度插入并生成相关资料 //-------------------------------------------------------------------- // 作者: Dyy 日期: 2012年06月30日 //==================================================================== /*名称解释: A-本级(arg_this_printid) B-下级(arg_next_printid) C-新增级 情况1: A与B之间插入C (arg_kind : 1~4) 情况2: A加入下级C (arg_kind: 5,6) arg_kind 使用说明: (A与B之间插入C) 1.A本身继承B,新增的C必须继承B,A改为继承C(a,b,c) 2.A不是继承B,新增的C继承B(a,c) 3.A不是继承B,A继承新增的C(a,b,d) 4.A不是继承B,新增的C不存在继承关系(a,e) (A加入下级C) 5.A继承C(b,d) 6.A不继承C(e) 处理方法列表: a.更改B的parentid (1,2,3,4) b.更改A的继承关系(A条码要改继承属性) (1,3,5) c.增加C的条码(复制B条码) (1,2) d.增加C的条码(复制A条码)(A条码要改继承属性) (3,5) e.增加C的条码(新建条码) (4,6) **刷新printid_sort */ Int rslt = 1 Long ll_mxbt,ll_i Long swkpid ,owkpid ,printid String partname Long lp ,iflast String relname Decimal ld_orderqty String partname_inherit DateTime begindate ,enddate Long parentid ,workgroupid Decimal lasthour ,workhour ,eoq Long if_barcode Decimal splitrate ,waittime Long li_if_inherit ,ifaccept Decimal baseqty Long printid_sort DateTime server_dt Long ll_max_pid,ll_pid,ll_cnt String ls_barcode Decimal ld_qty Long ll_printid Long ll_lp_this,ll_lp_min,ll_printid_min datastore ds_barcode ds_barcode = Create datastore ds_barcode.DataObject = 'ds_ordermtrl_workgroup_barcode_doing' ds_barcode.SetTransObject(sqlca) datastore ds_tree ds_tree = Create datastore ds_tree.DataObject = 'ds_OrderMtrl_workgroup_tree_sort' ds_tree.SetTransObject(sqlca) IF uo_option_scllaudit_autobuild_tech = -1000 THEN rslt = 0 arg_msg = '选项:[245]主生产计划用料审自动生成相关指令单的工组派工单,读取初始默认值失败,操作取消!' GOTO ext END IF s_order_plan_tech arg_s_tech uo_order_plan_tech uo_tech uo_tech = Create uo_order_plan_tech SELECT Top 1 getdate() Into :server_dt From u_user ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF ll_mxbt = UpperBound(arg_s_tree) IF ll_mxbt <> 1 THEN rslt = 0 arg_msg = '没有正确的新增工艺资料' GOTO ext END IF //更新A下级的层级lp IF arg_kind = 1 Or arg_kind = 2 Or arg_kind = 3 Or arg_kind = 4 THEN SELECT lp INTO :ll_lp_this FROM u_ordermtrl_workgroup_tree WHERE scid = :arg_scid AND orderid = :arg_orderid And printid = :arg_this_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询本级层级数值失败,'+sqlca.SQLErrText GOTO ext END IF SELECT top 1 printid INTO :ll_printid_min FROM u_ordermtrl_workgroup_tree WHERE scid = :arg_scid AND orderid = :arg_orderid AND lp <= :ll_lp_this AND printid > :arg_this_printid Order By printid_sort; IF sqlca.SQLCode <> 0 THEN IF sqlca.SQLCode = 100 THEN ll_printid_min = 0 ELSE rslt = 0 arg_msg = '查询本级所有层级数值失败,'+sqlca.SQLErrText GOTO ext END IF END IF UPDATE u_ordermtrl_workgroup_tree SET lp = lp + 1 WHERE (scid = :arg_scid) AND (orderid = :arg_orderid) AND (printid > :arg_this_printid) And (printid < :ll_printid_min Or :ll_printid_min = 0 ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新本级下级的层级数值失败,'+sqlca.SQLErrText GOTO ext END IF END IF printid = arg_s_tree[1].printid swkpid = arg_s_tree[1].swkpid owkpid = arg_s_tree[1].owkpid partname = arg_s_tree[1].partname lp = arg_s_tree[1].lp iflast = arg_s_tree[1].iflast relname = arg_s_tree[1].relname ld_orderqty = arg_s_tree[1].orderqty partname_inherit = arg_s_tree[1].partname_inherit begindate = arg_s_tree[1].begindate enddate = arg_s_tree[1].enddate parentid = arg_s_tree[1].parentid workgroupid = arg_s_tree[1].workgroupid lasthour = arg_s_tree[1].lasthour workhour = arg_s_tree[1].workhour eoq = arg_s_tree[1].eoq if_barcode = arg_s_tree[1].if_barcode splitrate = arg_s_tree[1].splitrate waittime = arg_s_tree[1].waittime li_if_inherit = arg_s_tree[1].if_inherit ifaccept = arg_s_tree[1].ifaccept baseqty = arg_s_tree[1].baseqty printid_sort = arg_s_tree[1].printid_sort INSERT INTO u_ordermtrl_workgroup_tree ( scid, orderid, printid, swkpid , owkpid , partname , lp , iflast , relname , orderqty , partname_inherit , begindate , enddate , parentid , workgroupid , lasthour , workhour , eoq , if_barcode , splitrate , waittime , if_inherit , ifaccept , baseqty , printid_sort) VALUES ( :arg_scid, :arg_orderid, :printid, :swkpid , :owkpid , :partname , :lp , :iflast , :relname , :ld_orderqty , :partname_inherit , :begindate , :enddate , :parentid , :workgroupid , :lasthour , :workhour , :eoq , :if_barcode , :splitrate , :waittime , :li_if_inherit , :ifaccept , :baseqty , :printid_sort); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入工艺进度失败,'+sqlca.SQLErrText GOTO ext END IF Int li_scllsecflag,li_ordertype SELECT scllsecflag,ordertype INTO :li_scllsecflag,:li_ordertype FROM u_order_ml WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单/生产计划属性失败,'+sqlca.SQLErrText GOTO ext END IF IF li_ordertype = 4 Or (li_ordertype <> 4 And li_scllsecflag = 1 ) THEN IF uo_option_scllaudit_autobuild_tech = 1 THEN arg_s_tech.scid = arg_scid arg_s_tech.orderid = arg_orderid arg_s_tech.billid = 0 arg_s_tech.rep = publ_operator arg_s_tech.wrkgrpid = swkpid arg_s_tech.workgroupid = workgroupid arg_s_tech.printid = printid arg_s_tech.parentid = parentid arg_s_tech.qty = ld_orderqty arg_s_tech.begindate = begindate arg_s_tech.enddate = enddate arg_s_tech.billdate = server_dt IF uo_tech.Save(arg_s_tech,publ_operator,arg_msg,False) = 0 THEN arg_msg = '建立相关派工单失败,'+arg_msg rslt = 0 GOTO ext END IF IF uo_tech.audit(uo_tech.uo_billid,publ_operator,arg_msg,False) = 0 THEN arg_msg = '审核相关派工单失败,'+arg_msg rslt = 0 GOTO ext END IF END IF END IF //根据arg_kind执行不同的操作 //更改B的parentid IF arg_kind = 1 Or arg_kind = 2 Or arg_kind = 3 Or arg_kind = 4 THEN UPDATE u_ordermtrl_workgroup_tree SET parentid = :printid WHERE scid = :arg_scid AND orderid = :arg_orderid And printid = :arg_next_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新下级的相关parentid失败,'+sqlca.SQLErrText GOTO ext END IF END IF //更改A的继承关系 IF arg_kind = 1 Or arg_kind = 3 Or arg_kind = 5 THEN UPDATE u_ordermtrl_workgroup_tree SET partname_inherit = :partname, if_inherit = 1 WHERE scid = :arg_scid AND orderid = :arg_orderid And printid = :arg_this_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新本级继承关系失败,'+sqlca.SQLErrText GOTO ext END IF UPDATE u_ordermtrl_workgroup_barcode SET partname_inherit = :partname WHERE scid = :arg_scid AND orderid = :arg_orderid And printid = :arg_this_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新本级相关条码继承关系失败,'+sqlca.SQLErrText GOTO ext END IF END IF //增加C的条码(复制B条码) IF if_barcode = 1 THEN IF arg_kind = 1 Or arg_kind = 2 THEN ds_barcode.Retrieve(arg_scid,arg_orderid,arg_next_printid) SELECT max(pid) INTO :ll_max_pid FROM u_ordermtrl_workgroup_barcode WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工艺条码信息失败,'+sqlca.SQLErrText GOTO ext END IF ll_cnt = 0 FOR ll_i = 1 To ds_barcode.RowCount() ll_cnt++ ll_pid = ll_max_pid + ll_cnt ls_barcode = ds_barcode.Object.barcode[ll_i] ld_qty = ds_barcode.Object.qty[ll_i] INSERT INTO u_ordermtrl_workgroup_barcode (scid, orderid, printid, pid, barcode, qty, swkpid, owkpid, relname, partname, if_inherit, partname_inherit, workgroupid) VALUES (:arg_scid, :arg_orderid, :printid, :ll_pid, :ls_barcode, :ld_qty, :swkpid, :owkpid, :relname, :partname, :li_if_inherit, :partname_inherit, :workgroupid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '生成新增工艺的条码失败,'+sqlca.SQLErrText GOTO ext END IF NEXT END IF END IF //增加C的条码(复制A条码) IF if_barcode = 1 THEN IF arg_kind = 3 Or arg_kind = 5 THEN ds_barcode.Retrieve(arg_scid,arg_orderid,arg_this_printid) SELECT max(pid) INTO :ll_max_pid FROM u_ordermtrl_workgroup_barcode WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工艺条码信息失败,'+sqlca.SQLErrText GOTO ext END IF ll_cnt = 0 FOR ll_i = 1 To ds_barcode.RowCount() ll_cnt++ ll_pid = ll_max_pid + ll_cnt ls_barcode = ds_barcode.Object.barcode[ll_i] ld_qty = ds_barcode.Object.qty[ll_i] INSERT INTO u_ordermtrl_workgroup_barcode (scid, orderid, printid, pid, barcode, qty, swkpid, owkpid, relname, partname, if_inherit, partname_inherit, workgroupid) VALUES (:arg_scid, :arg_orderid, :printid, :ll_pid, :ls_barcode, :ld_qty, :swkpid, :owkpid, :relname, :partname, :li_if_inherit, :partname_inherit, :workgroupid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '生成新增工艺的条码失败,'+sqlca.SQLErrText GOTO ext END IF NEXT UPDATE u_ordermtrl_workgroup_barcode SET if_inherit = 1 WHERE scid = :arg_scid AND orderid = :arg_orderid And printid = :arg_this_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新本级条码继承属性失败,'+sqlca.SQLErrText GOTO ext END IF END IF END IF //增加C的条码(新建) IF if_barcode = 1 THEN IF arg_kind = 4 Or arg_kind = 6 THEN FOR ll_i = 1 To Ceiling(Round(ld_orderqty/baseqty,10)) IF ll_i = Ceiling(Round(ld_orderqty/baseqty,10)) THEN ld_qty = ld_orderqty - (ll_i - 1) * baseqty ELSE ld_qty = baseqty END IF SELECT max(pid) INTO :ll_max_pid FROM u_ordermtrl_workgroup_barcode WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工艺条码信息失败,'+sqlca.SQLErrText GOTO ext END IF ll_cnt = 0 ll_cnt++ ll_pid = ll_max_pid + ll_cnt ls_barcode = getid(0,"BARCODE1",Date(server_dt),True,sqlca) INSERT INTO u_ordermtrl_workgroup_barcode (scid, orderid, printid, pid, barcode, qty, swkpid, owkpid, relname, partname, if_inherit, partname_inherit, workgroupid) VALUES (:arg_scid, :arg_orderid, :printid, :ll_pid, :ls_barcode, :ld_qty, :swkpid, :owkpid, :relname, :partname, :li_if_inherit, :partname_inherit, :workgroupid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '生成新增工艺的条码失败,'+sqlca.SQLErrText GOTO ext END IF NEXT END IF END IF //更新工艺路线的printid_sort ds_tree.Retrieve(arg_scid,arg_orderid) FOR ll_i = 1 To ds_tree.RowCount() ll_printid = ds_tree.Object.printid[ll_i] UPDATE u_OrderMtrl_workgroup_tree SET printid_sort = :ll_i * 10 WHERE scid = :arg_scid AND orderid = :arg_orderid And printid = :ll_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新工艺进度排序失败,'+sqlca.SQLErrText GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_tech Destroy ds_barcode RETURN rslt end function public function integer uof_update_minbdate (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_ordertype Long ll_porderid Long ll_orderid_tree SELECT ordertype,porderid INTO :li_ordertype,:ll_porderid FROM u_order_ml WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单信息失败,'+sqlca.SQLErrText GOTO ext END IF IF li_ordertype <> 4 THEN ll_orderid_tree = arg_orderid ELSE ll_orderid_tree = ll_porderid END IF UPDATE u_OrderMtrl_workgroup SET u_OrderMtrl_workgroup.minbdate = DATEADD(dd,ISNULL(v_minbdate.dayadd, 0), GETDATE()) FROM u_OrderMtrl_workgroup LEFT OUTER JOIN (SELECT wrkGrpid, MAX(dayadd) AS dayadd FROM (SELECT u_OrderRqMtrl_tree.wrkGrpid, CASE u_mtrldef.Mtrlorigin WHEN 2 THEN u_mtrldef.buydays WHEN 3 THEN u_mtrldef.wfjgdays WHEN 6 THEN u_mtrldef.aheaddays when 0 then u_mtrldef.expday END AS dayadd FROM u_OrderRqMtrl_tree INNER JOIN u_mtrldef ON u_OrderRqMtrl_tree.MtrlID = u_mtrldef.mtrlid WHERE (u_OrderRqMtrl_tree.OrderID = :ll_orderid_tree) AND (u_OrderRqMtrl_tree.scid = :arg_scid) AND (u_OrderRqMtrl_tree.truerqqty > 0) AND ((u_mtrldef.Mtrlorigin <> 0) or (u_mtrldef.Mtrlorigin = 0 and u_mtrldef.ifselforder = 1))) v_tree GROUP BY wrkGrpid) v_minbdate ON u_OrderMtrl_workgroup.wrkGrpid = v_minbdate.wrkGrpid WHERE u_OrderMtrl_workgroup.scid = :arg_scid And u_OrderMtrl_workgroup.orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新工组理论最早齐料启产日期失败,'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_update_orderrqmtrl_zlqty (long arg_scid, long arg_orderid, long arg_mtrlid, long arg_wrkgrpid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_zlqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 UPDATE u_OrderRqMtrl SET u_OrderRqMtrl.zlqty = u_OrderRqMtrl.zlqty + :arg_zlqty FROM u_OrderRqMtrl WHERE u_OrderRqMtrl.produce_wrkGrpid = :arg_wrkgrpid AND u_OrderRqMtrl.status = :arg_status AND u_OrderRqMtrl.woodcode = :arg_woodcode AND u_OrderRqMtrl.pcode = :arg_pcode AND u_OrderRqMtrl.plantype = 0 AND u_OrderRqMtrl.scid = :arg_scid AND u_OrderRqMtrl.orderid = :arg_orderid And u_OrderRqMtrl.mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新相关主生产计划自制需求指令单数量失败,'+sqlca.SQLErrText GOTO ext END IF UPDATE u_order_ml SET u_Order_ml.zlflag = isnull(uv_order_zl_flag.flag,0) FROM u_Order_ml LEFT OUTER JOIN uv_order_zl_flag ON u_Order_ml.scid = uv_order_zl_flag.scid AND u_Order_ml.OrderID = uv_order_zl_flag.OrderID WHERE u_order_ml.scid = :arg_scid And u_order_ml.orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新相关主生产计划指令单状态失败,'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_workgroup_barcode_pt (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit);// 部件条码自动配套 Int rslt = 1 Decimal ld_minsqty Decimal ld_finishqty Decimal ld_addqty Long ll_printid, arr_printid[] Long ll_cnt = 0 Long i, j Long ll_pid, arr_pid[] Long ll_ptflag, arr_ptflag[] Decimal ld_qty, arr_qty[] Long ll_bar_cnt = 0 Decimal ld_ptqty DateTime dt_server Long ll_jdtype SELECT jdtype INTO :ll_jdtype FROM u_sc_workgroup Where wrkgrpid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工组进度生成模式失败,' + sqlca.SQLErrText GOTO ext END IF IF ll_jdtype <> 6 THEN GOTO ext END IF SELECT top 1 GETDATE() INTO :dt_server From u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询服务器日期失败,' + sqlca.SQLErrText GOTO ext END IF ld_minsqty = 0 SELECT MIN(sqty) INTO :ld_minsqty FROM (SELECT scid, orderid, swkpid, SUM(qty) AS sqty, printid FROM u_ordermtrl_workgroup_barcode WHERE scid = :arg_scid AND orderid = :arg_orderid AND swkpid = :arg_wrkgrpid AND sflag = 1 Group By scid, orderid, swkpid, printid) a; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单可配套数失败,' + sqlca.SQLErrText GOTO ext END IF IF IsNull(ld_minsqty) THEN ld_minsqty = 0 ld_finishqty = 0 SELECT MIN(ptcnt) INTO :ld_finishqty FROM (SELECT scid, orderid, swkpid, printid, SUM(qty) AS ptcnt FROM u_ordermtrl_workgroup_barcode WHERE (scid = :arg_scid) AND (orderid = :arg_orderid) AND (swkpid = :arg_wrkgrpid) AND sflag = 1 AND ptflag = 1 Group By scid, orderid, swkpid, printid) b; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单已配套数失败,' + sqlca.SQLErrText GOTO ext END IF IF IsNull(ld_finishqty) THEN ld_finishqty = 0 ld_addqty = ld_minsqty - ld_finishqty IF ld_addqty > 0 THEN ll_cnt = 0 DECLARE cur1 CURSOR FOR SELECT printid FROM u_OrderMtrl_workgroup_tree WHERE (scid = :arg_scid) AND (orderid = :arg_orderid) And (swkpid = :arg_wrkgrpid); OPEN cur1; FETCH cur1 Into :ll_printid; DO WHILE sqlca.SQLCode = 0 ll_cnt++ arr_printid[ll_cnt] = ll_printid FETCH cur1 Into :ll_printid; LOOP CLOSE cur1; FOR i = 1 To ll_cnt ll_printid = arr_printid[i] ll_bar_cnt = 0 DECLARE cur2 CURSOR FOR SELECT pid, ptflag, qty FROM u_ordermtrl_workgroup_barcode WHERE (scid = :arg_scid) AND (orderid = :arg_orderid) AND (printid = :ll_printid) AND (sflag = 1) Order By ptflag Desc, sdate; OPEN cur2; FETCH cur2 Into :ll_pid, :ll_ptflag, :ld_qty; DO WHILE sqlca.SQLCode = 0 ll_bar_cnt++ arr_pid[ll_bar_cnt] = ll_pid arr_ptflag[ll_bar_cnt] = ll_ptflag arr_qty[ll_bar_cnt] = ld_qty FETCH cur2 Into :ll_pid, :ll_ptflag, :ld_qty; LOOP CLOSE cur2; j = 0 ld_ptqty = ld_minsqty DO WHILE j < ll_bar_cnt And ld_ptqty > 0 j++ ll_pid = arr_pid[j] ll_ptflag = arr_ptflag[j] ld_qty = arr_qty[j] IF ll_ptflag <> 1 THEN UPDATE u_ordermtrl_workgroup_barcode SET ptflag = 1, ptdate = :dt_server WHERE scid = :arg_scid AND orderid = :arg_orderid AND printid = :ll_printid And pid = :ll_pid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新配套标记失败,' + sqlca.SQLErrText GOTO ext END IF IF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = '更新配套标记失败,部件条码已经不存在' GOTO ext END IF END IF ld_ptqty = ld_ptqty - ld_qty LOOP NEXT IF uof_add_workgroup_qty(arg_scid, arg_orderid, arg_wrkgrpid, 0, dt_server, ld_addqty, arg_msg, False) <> 1 THEN rslt = 0 GOTO ext END IF END IF ext: IF arg_ifcommit THEN IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; END IF END IF RETURN rslt end function public function integer uof_update_mrpcode (long arg_scid, long arg_orderid, string arg_mrpcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 UPDATE u_order_ml SET u_order_ml.mrpcode = :arg_mrpcode WHERE u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '主生产计划更新运算批号失败,'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE IF arg_ifcommit THEN COMMIT; END IF END IF RETURN rslt end function public function integer stoporder_cancel (long arg_scid, long arg_orderid, integer arg_ifchange, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,ll_rslt Int li_ifpackpro,li_ordertype,li_ifpack Long ll_porderid,ll_mtrlid_p,ls_i String ls_status_p,ls_woodcode_p,ls_pcode_p DateTime ld_nulldt SetNull(ld_nulldt) Decimal ld_stopqty_ori,ld_stopqty uo_saletask uo_task uo_task = Create uo_saletask uo_task.commit_transaction = sqlca If uo_option_order_bh_use_yc = -1000 Then rslt = 0 arg_msg = '选项:[074]备货生产计划选销售预测单,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_autostop_porder = -1000 Then rslt = 0 arg_msg = '选项:[383]终止分离排产指令单自动终止相关主生产计划,读取初始默认值失败,操作取消!' Goto ext End If If f_aps_mrp_cklock(arg_scid,arg_msg) = 0 Then rslt = 0 Goto ext End If rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) If rslt = 0 Then Goto ext If status <> 3 Then rslt = 0 arg_msg = "计划或指令单只有在终止状态才可以执行撤消终止,请核对" Goto ext End If If getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then rslt = 0 Goto ext End If If ordertype = 0 And uo_option_order_bh_use_yc = 1 Then For ls_i = 1 To it_mxbt If s_order_mx[ls_i].taskid > 0 Then Select stopqty Into :ld_stopqty_ori From u_saletaskmx Where scid = :s_order_mx[ls_i].taskscid And taskid = :s_order_mx[ls_i].taskid And printid = :s_order_mx[ls_i].taskmxid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询生产计划相关销售预测单信息失败'+sqlca.SQLErrText Goto ext End If ld_stopqty = ld_stopqty_ori - s_order_mx[ls_i].orderqty If uo_task.stopqty(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,s_order_mx[ls_i].taskmxid,'',ld_stopqty,'',arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If Next End If //扣减相关部件生产计划的已分配数量 If pforderid > 0 Then If f_add_conpfqty(arg_scid,pforderid, 0 - (pfqty * (acmpqty - orderqty)) / orderqty ,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If //是否终止用料 If arg_ifchange = 1 Or arg_ifchange = 2 Then ll_rslt = uof_mtrl_change(arg_scid,arg_orderid,0,1,arg_ifchange,1,arg_msg,False) If ll_rslt = 0 Then rslt = 0 Goto ext End If End If //yyx2013-11-9 String ls_mtrlcode If ordertype = 4 And pzlorderid = 0 And (arg_ifchange = 1 Or arg_ifchange = 2) Then If it_mxbt = 0 Then rslt = 0 arg_msg = '没有计划明细,操作终止,请检查' Goto ext End If For ls_i = 1 To it_mxbt If s_order_mx[ls_i].taskid > 0 Then Int li_plantype Long ll_wrkGrpid_scll Select plantype,wrkGrpid Into :li_plantype,:ll_wrkGrpid_scll From u_OrderRqMtrl Where scid = :scid And orderid = :s_order_mx[ls_i].taskid And mxpkid = :s_order_mx[ls_i].taskmxid; If sqlca.SQLCode <> 0 Then arg_msg = '查询生产自制需求资料失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If f_assign_rqmtrlqty(scid,s_order_mx[ls_i].taskid,ll_wrkGrpid_scll,& mtrlid,ls_mtrlcode,status_mode,& woodcode,pcode,s_order_mx[ls_i].orderqty,0,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If Next End If //yyx2013-11-9_end //如果是通用包件产品,检查相关包件指令是否终止 //如果是分离排产的指令单,要终止相关主生产计划 If ordertype = 4 And porderid > 0 Then Select ifpack Into :li_ifpack From u_mtrldef Where mtrlid = :mtrlid; If sqlca.SQLCode <> 0 Then arg_msg = '查询指令单物料资料包件属性失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If Select u_mtrldef.ifpackpro, u_mtrldef.ordertype, u_order_ml.mtrlid, u_order_ml.status_mode, u_order_ml.woodcode, u_order_ml.pcode Into :li_ifpackpro, :li_ordertype, :ll_mtrlid_p, :ls_status_p, :ls_woodcode_p, :ls_pcode_p From u_Order_ml Inner JOIN u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid Where u_Order_ml.scid = :scid And u_order_ml.orderid = :porderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询相关主生产计划产品属性失败,'+sqlca.SQLErrText Goto ext End If ll_porderid = porderid If li_ifpackpro = 1 And li_ifpack = 1 Then Update u_order_ml Set status = 1, stopemp = '', Accomplishdate = :ld_nulldt, stopreason = '' Where u_order_ml.scid = :scid And u_order_ml.orderid = :porderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '自动取消终止包件产品主生产计划失败,'+arg_msg Goto ext End If End If //如果是分离排产,还要同时终止主生产计划对应的指令单(非包件产品) If uo_option_autostop_porder = 1 Then If li_ordertype = 1 And & ll_mtrlid_p = mtrlid And & ls_status_p = status_mode And & ls_woodcode_p = woodcode And & ls_pcode_p = pcode And & li_ifpackpro = 0 Then Update u_order_ml Set stopqty = stopqty - (:orderqty - :acmpqty - :stopqty), status = 1, stopemp = '', Accomplishdate = :ld_nulldt, stopreason = '' Where u_order_ml.scid = :scid And u_order_ml.orderid = :porderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新分离排产对应主生产计划终止数量失败,'+arg_msg Goto ext End If End If End If End If Update u_order_ml Set status = 1, stopemp = '', Accomplishdate = :ld_nulldt, stopreason = '', stopqty = 0 Where orderid = :arg_orderid And scid = :arg_scid And status = 3; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致终止生产计划操作失败"+"~n"+sqlca.SQLErrText Goto ext ElseIf sqlca.SQLNRows = 0 Then rslt = 0 arg_msg = "正在终止生产计划,请稍后重试" Goto ext End If ext: If rslt = 0 Then Rollback; p_reset() ElseIf arg_ifcommit And rslt = 1 Then Commit; End If Destroy uo_task Return (rslt) end function public function integer plan_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0,li_ptflag Long ls_i IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_orderid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 7 THEN rslt = 0 arg_msg = "计划只有在待二审状态才可以执行二审,请核对" GOTO ext END IF IF ordertype = 4 THEN SELECT ptflag INTO :li_ptflag FROM u_sc_wkp Where wrkGrpid = :wrkGrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = OrderCode+'查询生产车间配置属性失败'+sqlca.SQLErrText GOTO ext END IF IF li_ptflag = 1 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_orderrqmtrl_scll WHERE u_orderrqmtrl_scll.scid = :arg_scid AND u_orderrqmtrl_scll.orderid = :arg_orderid And u_orderrqmtrl_scll.wareqty > 0; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询指令单领料明细是否有配套材料失败,请检查,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = OrderCode+'计划由于至少没有找到任何一种材料配套,不能审核'+sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_order_ml SET ptflag = 5 WHERE orderid = :arg_orderid AND scid = :arg_scid And status = 7; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = OrderCode+"更新指令单配套状态操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF END IF UPDATE u_order_ml SET plan_emp = :publ_operator, plan_auditdate = getdate(), status = 4 WHERE orderid = :arg_orderid AND scid = :scid And status = 7; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致计划二审操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer c_plan_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 Long ls_i,li_ptflag String ls_mtrlcode Decimal finishqty,ld_sqty,ld_oqty DateTime null_dt SetNull(null_dt) IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) IF rslt = 0 THEN GOTO ext IF ctmint > 0 THEN arg_msg = '单据已截数,不能操作' rslt = 0 GOTO ext END IF IF status <> 4 THEN rslt = 0 arg_msg = "只有在待终审状态才可以执行撤消二审,请核对" GOTO ext END IF IF ordertype = 4 THEN SELECT ptflag INTO :li_ptflag FROM u_sc_wkp Where wrkGrpid = :wrkGrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = OrderCode+'查询生产车间配置属性失败'+sqlca.SQLErrText GOTO ext END IF IF li_ptflag = 1 THEN UPDATE u_order_ml SET ptflag = 1 WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = OrderCode+"更新指令单配套状态操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF END IF UPDATE u_order_ml SET status = 7, plan_emp = '', plan_auditdate = :null_dt WHERE orderid = :arg_orderid AND scid = :arg_scid And status = 4; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致计划撤消二审操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Return (rslt) end function public function integer p_update_orderdate (long arg_scid, long arg_orderid, datetime arg_orderdate, datetime arg_requiredate, string arg_dscrp, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1 IF uo_option_order_zl_3_day = -1000 THEN rslt = 0 arg_msg = '选项:[316]指令单保存时更新相关采购需求明细日期,读取初始默认值失败,操作取消!' GOTO ext END IF UPDATE u_order_ml SET orderdate = :arg_orderdate, requiredate = :arg_requiredate, dscrp = :arg_dscrp, modemp = :publ_operator, moddate = getdate(), addqty = :arg_addqty WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN arg_msg = "更新指令单信息失败!"+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_option_order_zl_3_day = 1 THEN Int li_ordertype Long ll_porderid,cnt SELECT ordertype,porderid INTO :li_ordertype,:ll_porderid FROM u_order_ml WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询指令信息失败!"+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_ordertype = 4 THEN SELECT count(*) INTO :cnt FROM u_requestbuymxmx WHERE scid = :arg_scid And orderid = :ll_porderid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询指令指相关主生产计划需求是否已开申购单失败!"+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN UPDATE u_OrderRqMtrl SET u_orderrqmtrl.RqDate = dateadd(day, -3, u_Order_ml.orderdate), u_orderrqmtrl.edate = dateadd(day, 0 - u_mtrldef.buydays, dateadd(day, -3, u_Order_ml.orderdate)), u_orderrqmtrl.rqdate_ori = case when u_orderrqmtrl.rqdate_ori is NULL then u_orderrqmtrl.RqDate else u_orderrqmtrl.rqdate_ori END , u_orderrqmtrl.edate_ori = case when u_orderrqmtrl.edate_ori is NULL then u_orderrqmtrl.edate else u_orderrqmtrl.edate_ori END FROM u_Order_ml INNER JOIN u_OrderRqMtrl_scll ON u_Order_ml.OrderID = u_OrderRqMtrl_scll.OrderID AND u_Order_ml.scid = u_OrderRqMtrl_scll.scid INNER JOIN u_Order_ml u_Order_ml_p ON u_Order_ml.porderid = u_Order_ml_p.OrderID AND u_Order_ml.scid = u_Order_ml_p.scid INNER JOIN u_OrderRqMtrl ON u_Order_ml_p.OrderID = u_OrderRqMtrl.OrderID AND u_Order_ml_p.scid = u_OrderRqMtrl.scid AND u_OrderRqMtrl_scll.MtrlID = u_OrderRqMtrl.MtrlID AND u_OrderRqMtrl_scll.wrkGrpid = u_OrderRqMtrl.wrkGrpid INNER JOIN u_mtrldef ON u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid WHERE (u_OrderRqMtrl.plantype = 2) AND (u_OrderRqMtrl_scll.scid = :arg_scid) And (u_OrderRqMtrl_scll.orderid = :arg_orderid) ; // UPDATE u_OrderRqMtrl // SET u_orderrqmtrl.RqDate = case when u_orderrqmtrl.rqdate_ori is NULL then dateadd(day, -3, u_Order_ml.orderdate) else case when dateadd(day, -3, u_Order_ml.orderdate) < u_orderrqmtrl.RqDate then dateadd(day, -3, u_Order_ml.orderdate) else u_orderrqmtrl.RqDate END END, // u_orderrqmtrl.edate = case when u_orderrqmtrl.rqdate_ori is NULL then dateadd(day, 0 - u_mtrldef.buydays, dateadd(day, -3, u_Order_ml.orderdate)) else case when dateadd(day, -3, u_Order_ml.orderdate) < u_orderrqmtrl.RqDate then dateadd(day, - u_mtrldef.buydays, dateadd(day, -3, u_Order_ml.orderdate)) else u_orderrqmtrl.edate END END , // u_orderrqmtrl.rqdate_ori = case when u_orderrqmtrl.rqdate_ori is NULL then u_orderrqmtrl.RqDate else u_orderrqmtrl.rqdate_ori END , // u_orderrqmtrl.edate_ori = case when u_orderrqmtrl.edate_ori is NULL then u_orderrqmtrl.edate else u_orderrqmtrl.edate_ori END // FROM u_Order_ml INNER JOIN // u_OrderRqMtrl_scll ON u_Order_ml.OrderID = u_OrderRqMtrl_scll.OrderID AND // u_Order_ml.scid = u_OrderRqMtrl_scll.scid INNER JOIN // u_Order_ml u_Order_ml_p ON u_Order_ml.porderid = u_Order_ml_p.OrderID AND // u_Order_ml.scid = u_Order_ml_p.scid INNER JOIN // u_OrderRqMtrl ON u_Order_ml_p.OrderID = u_OrderRqMtrl.OrderID AND // u_Order_ml_p.scid = u_OrderRqMtrl.scid AND // u_OrderRqMtrl_scll.MtrlID = u_OrderRqMtrl.MtrlID AND // u_OrderRqMtrl_scll.wrkGrpid = u_OrderRqMtrl.wrkGrpid INNER JOIN // u_mtrldef ON u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid // WHERE (u_OrderRqMtrl.plantype = 2) // AND (u_OrderRqMtrl_scll.scid = :arg_scid) // And (u_OrderRqMtrl_scll.orderid = :arg_orderid) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新需求明细日期操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF 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 uf_createorder_pt (long arg_scid, long arg_orderid, integer arg_pttype, integer arg_bomflag, boolean arg_ifcommit, ref string arg_msg); //检测配套数 Int rslt = 1 Int ls_ptflag Long ls_remtrl_cnt,ls_ware_cnt,ls_mtrlid Long i,j,d,k Decimal ls_wareqty,ld_qty,ld_standqty Long cus_c = 0,fai_c = 0,count String mtrlname,mtrlcode rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) If rslt = 0 Then Goto ext IF status <> 7 THEN rslt = 0 arg_msg = '指令单只有在待二审状态下才能进行配套计算,失败' GOTO ext END IF //IF status = 0 THEN // // IF arg_pttype = 0 THEN arg_bomflag = -1 // // IF f_cmpl_rqmtrl(orderid,arg_bomflag,TRUE,arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF // //END IF // s_mtrlware_noalloc_array ls_mtrl_array s_pfmx ls_pfmx[] s_mtrlware_noalloc_array s_array s_mtrlware_noalloc_array s_mx Decimal ls_sonscale,ls_stopqty Long ls_sonmtrlid DECLARE pf_cur CURSOR FOR SELECT u_orderrqmtrl_scll.mtrlid , u_orderrqmtrl_scll.truerqqty/u_order_ml.orderqty,0 FROM u_OrderRqMtrl_scll INNER JOIN u_Order_ml ON u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID AND u_OrderRqMtrl_scll.scid = u_Order_ml.scid WHERE u_orderrqmtrl_scll.orderid = :arg_orderid AND u_orderrqmtrl_scll.scid = :arg_scid And u_order_ml.orderqty > 0; OPEN pf_cur; count = 1 FETCH pf_cur INTO :ls_sonmtrlid,& :ls_sonscale,:ls_stopqty; DO WHILE sqlca.SQLCode = 0 //循环读取明细数据 ls_sonscale = Truncate(ls_sonscale,5) ls_pfmx[count].sonmtrlid = ls_sonmtrlid ls_pfmx[count].sonscale = ls_sonscale ls_pfmx[count].addqty = ls_stopqty count++ FETCH pf_cur INTO :ls_sonmtrlid,& :ls_sonscale,:ls_stopqty; LOOP count = count - 1 CLOSE pf_cur; // SELECT ptflag INTO :ls_ptflag FROM u_sc_wkp Where wrkGrpid = :wrkGrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产车间配置属性失败'+sqlca.SQLErrText GOTO ext END IF IF ls_ptflag = 0 THEN rslt = 0 arg_msg = '车间没有设置配套属性,不能配套' GOTO ext END IF IF count = 0 THEN rslt = 1 GOTO ext END IF SELECT u_mtrldef.mtrlcode,u_mtrldef.mtrlname INTO :mtrlcode,:mtrlname FROM u_mtrldef INNER JOIN u_Order_ml ON u_mtrldef.mtrlid = u_Order_ml.mtrlid WHERE u_Order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产指令物料名称失败'+sqlca.SQLErrText GOTO ext END IF Decimal ld_freeqty,ld_notdstrqty String ls_mtrlcode,ls_mtrlname Decimal ld_noallocqty,ld_allqty,ld_maxqty,ld_wareqty,ls_TrueRqQty Long ll_storageid_err[] Long ls_storageid,ll_i Boolean bl_free = False ld_maxqty = 1000000 IF arg_pttype = 0 THEN //单指令 FOR ll_i = 1 To count ls_pfmx[ll_i].sonscale = Truncate(ls_pfmx[ll_i].sonscale,5) IF ls_pfmx[ll_i].sonscale = 0 THEN CONTINUE SELECT mtrlcode, mtrlname INTO :ls_mtrlcode, :ls_mtrlname FROM u_mtrldef Where mtrlid = :ls_pfmx[ll_i].sonmtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = arg_msg+'~r~n'+'查询物料编码失败'+String(ls_pfmx[ll_i].sonmtrlid) //bl_free = TRUE CONTINUE END IF IF Pos(ls_mtrlname ,'胶水') > 0 Or Pos(ls_mtrlname ,'安装图') > 0 THEN CONTINUE IF Pos(Upper(mtrlcode),'B2060') > 0 And Pos(ls_mtrlname ,'胶袋') > 0 THEN CONTINUE ld_freeqty = 0 ld_noallocqty = 0 ld_notdstrqty = 0 ld_allqty = 0 //查找可用数量=库存数量-冻结数量 SELECT freeqty,noallocqty,notdstrqty INTO :ld_freeqty,:ld_noallocqty,:ld_notdstrqty FROM uv_Order_ml_RqMtrl_freeqty Where mtrlid = :ls_pfmx[ll_i].sonmtrlid; IF sqlca.SQLCode <> 0 THEN //bl_free = TRUE //CONTINUE END IF IF ld_freeqty < 0 THEN ld_freeqty = 0 END IF ld_allqty = ld_freeqty/ls_pfmx[ll_i].sonscale // f_round_qty(ls_pfmx[ll_i].sonmtrlid, ld_allqty) // f_round_qty(ls_pfmx[ll_i].sonmtrlid, ld_notdstrqty) ld_maxqty = Min(ld_maxqty,ld_allqty) IF IsNull(ld_maxqty) THEN ld_maxqty = 0 IF ld_maxqty = 0 THEN //bl_free = TRUE CONTINUE END IF NEXT ld_qty = Truncate ( ld_maxqty, 0 ) d = 0 FOR i = 1 To count ls_mtrlid = ls_pfmx[i].sonmtrlid IF ls_mtrlid = 0 THEN CONTINUE d++ s_mx.mtrlid[d] = ls_mtrlid s_mx.sonscale[d] = ls_pfmx[i].sonscale s_mx.order_mtrlid[d] = mtrlid s_mx.qty [d] = ld_qty s_mx.mtrlwareid[d] = arg_orderid s_mx.scid[d] = arg_scid NEXT // OpenWithParm(w_createorder_pt2,s_mx) s_array = Message.PowerObjectParm IF UpperBound(s_array.mtrlid) > 0 THEN s_mx = s_array ld_qty = s_array.allocqty[1] d = UpperBound(s_array.mtrlid) ELSE arg_ifcommit = False rslt = 0 arg_msg = '审核取消' GOTO ext END IF ELSE //多指令 FOR ll_i = 1 To count ld_wareqty = 0 ld_freeqty = 0 ld_noallocqty = 0 ld_notdstrqty = 0 ld_allqty = 0 ls_TrueRqQty = 0 ld_standqty = 0 SELECT mtrlcode, mtrlname INTO :ls_mtrlcode, :ls_mtrlname FROM u_mtrldef Where mtrlid = :ls_pfmx[ll_i].sonmtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = arg_msg+'~r~n'+'查询物料编码失败'+String(ls_pfmx[ll_i].sonmtrlid) bl_free = True CONTINUE END IF SELECT wareqty INTO :ld_wareqty FROM u_orderrqmtrl_scll WHERE orderid = :arg_orderid AND mtrlid = :ls_pfmx[ll_i].sonmtrlid And ( scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN //continue END IF SELECT freeqty,noallocqty,notdstrqty INTO :ld_freeqty,:ld_noallocqty,:ld_notdstrqty FROM uv_Order_ml_RqMtrl_freeqty Where mtrlid = :ls_pfmx[ll_i].sonmtrlid; IF sqlca.SQLCode <> 0 THEN //continue END IF ls_pfmx[ll_i].sonscale = Truncate(ls_pfmx[ll_i].sonscale,5) ld_standqty = ls_pfmx[ll_i].sonscale* orderqty - ls_pfmx[ll_i].addqty //配套需求数量 // f_round_qty(ls_pfmx[ll_i].sonmtrlid, ld_standqty ) // f_round_qty(ls_pfmx[ll_i].sonmtrlid, ld_notdstrqty) ld_maxqty = ld_noallocqty - (ld_notdstrqty - ld_wareqty ) //本次指令计划冻结数 IF ld_maxqty <= 0 THEN ld_maxqty = 0 IF ld_maxqty >= ld_standqty THEN ld_wareqty = ld_standqty ELSE ld_wareqty = ld_maxqty END IF s_mx.mtrlid[ll_i] = ls_pfmx[ll_i].sonmtrlid s_mx.qty[ll_i] = ld_wareqty s_mx.u_mtrldef_mtrlname[ll_i] = ls_mtrlname NEXT ld_qty = orderqty d = UpperBound(s_mx.mtrlid) END IF UPDATE u_OrderRqMtrl_scll SET wareqty = 0 WHERE ( u_OrderRqMtrl_scll.orderid = :arg_orderid ) And ( u_orderrqmtrl_scll.scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN arg_msg = '更新生产指令领料配套数量失败' rslt = 0 GOTO ext END IF FOR i = 1 To d IF Pos(s_mx.u_mtrldef_mtrlname[i] ,'胶水') > 0 Or Pos(s_mx.u_mtrldef_mtrlname[i] ,'安装图') > 0 THEN CONTINUE IF Pos(Upper(mtrlcode),'B2060') > 0 And Pos(s_mx.u_mtrldef_mtrlname[i] ,'胶袋') > 0 THEN CONTINUE UPDATE u_OrderRqMtrl_scll SET wareqty = wareqty + :s_mx.qty[i] WHERE ( orderid = :arg_orderid ) AND (mtrlid = :s_mx.mtrlid[i]) And (scid = :arg_scid); IF sqlca.SQLCode <> 0 THEN arg_msg = '更新生产指令领料配套数量失败' rslt = 0 GOTO ext END IF NEXT UPDATE u_order_ml SET ptqty = :ld_qty, ptflag = 1, ptdate = getdate(), ptemp = :publ_operator Where OrderID = :arg_orderid and scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新生产指令领料配套数量失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF arg_ifcommit THEN IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; END IF END IF RETURN rslt end function public function integer stoporder (long arg_scid, long arg_orderid, integer arg_ifchange, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit);Long cnt Int rslt = 1,li_ptflag,ll_rslt Int li_ifpackpro,li_ordertype,li_ifpack,li_status Long ll_porderid,ll_mtrlid_p String ls_status_p,ls_woodcode_p,ls_pcode_p Decimal ld_notinqty_p Long ll_orderid_arr[] Int li_mxbt Long ll_i,ls_i Decimal ld_stopqty_ori,ld_stopqty String ls_mtrlcode li_mxbt = 1 datastore ds_stop_zl ds_stop_zl = Create datastore ds_stop_zl.DataObject = 'ds_order_ml_stop_p_zl' ds_stop_zl.SetTransObject(sqlca) uo_saletask uo_task uo_task = Create uo_saletask uo_task.commit_transaction = sqlca If f_aps_mrp_cklock(arg_scid,arg_msg) = 0 Then rslt = 0 Goto ext End If If uo_option_order_bh_use_yc = -1000 Then rslt = 0 arg_msg = '选项:[074]备货生产计划选销售预测单,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_if_oa_order_ml = -1000 Then rslt = 0 arg_msg = '选项:[230]生产计划使用审批流程,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_order_ml_secaudit = -1000 Then rslt = 0 arg_msg = '选项:[225]生产计划使用二级审核,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_if_oa_order_zl = -1000 Then rslt = 0 arg_msg = '选项:[231]生产指令单使用审批流程,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_order_ml_zl_secaudit = -1000 Then rslt = 0 arg_msg = '选项:[226]生产指令单使用二级审核,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_autostop_porder = -1000 Then rslt = 0 arg_msg = '选项:[383]终止分离排产指令单自动终止相关主生产计划,读取初始默认值失败,操作取消!' Goto ext End If rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) If rslt = 0 Then Goto ext If ordertype <> 4 Then If uo_option_if_oa_order_ml = 1 And uo_option_order_ml_secaudit = 1 And audit_buildtype = 0 Then If f_check_if_oaflow(arg_scid,arg_orderid,36,arg_msg ) = 0 Then rslt = 0 Goto ext End If End If Else If uo_option_if_oa_order_zl = 1 And uo_option_order_ml_zl_secaudit = 1 And audit_buildtype = 0 Then If f_check_if_oaflow(arg_scid,arg_orderid,1138,arg_msg ) = 0 Then rslt = 0 Goto ext End If End If End If If ordertype = 4 And porderid > 0 Then Select u_mtrldef.ifpackpro, u_mtrldef.ordertype, u_order_ml.mtrlid, u_order_ml.status_mode, u_order_ml.woodcode, u_order_ml.pcode, u_order_ml.orderqty - u_order_ml.acmpqty - u_order_ml.stopqty, u_order_ml.status Into :li_ifpackpro, :li_ordertype, :ll_mtrlid_p, :ls_status_p, :ls_woodcode_p, :ls_pcode_p, :ld_notinqty_p, :li_status From u_Order_ml Inner JOIN u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid Where u_Order_ml.scid = :scid And u_order_ml.orderid = :porderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询相关主生产计划产品属性失败,'+sqlca.SQLErrText Goto ext End If End If //如果是包件产品生产计划分离的指令单,终止时不考虑状态(雅舍需求, 2014-06-24) If Not (ordertype = 4 And li_ifpackpro = 1 And & ll_mtrlid_p = mtrlid And & ls_status_p = status_mode And & ls_woodcode_p = woodcode And & ls_pcode_p = pcode) Then If status <> 1 Then rslt = 0 arg_msg = "计划只有在进行状态才可以执行终止,请核对" Goto ext End If End If If getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then rslt = 0 Goto ext End If If Trim(arg_stopreason) = '' Then rslt = 0 arg_msg = '请输入终止原因' Goto ext End If //如果是主计划,下级指令单状态有1,2,4,7,不允许终止主计划 If ordertype <> 4 Then Select count(*) Into :cnt From u_order_ml Where ordertype = 4 And porderid = :arg_orderid And scid = :arg_scid And status In (1,2,4,7); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = OrderCode+'查询下级指令单状态失败'+sqlca.SQLErrText Goto ext End If If cnt > 0 Then rslt = 0 arg_msg = OrderCode+',有下级指令单处于在进行、暂停、待二审或待终审状态,不能终止主计划' Goto ext End If End If If ordertype = 4 Then Select ptflag Into :li_ptflag From u_sc_wkp Where wrkGrpid = :wrkGrpid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = OrderCode+'查询生产车间配置属性失败'+sqlca.SQLErrText Goto ext End If End If // cnt = 0 Select count(*) Into :cnt From u_inwaremx Inner JOIN u_inware ON u_inwaremx.scid = u_inware.scid And u_inwaremx.inwareid = u_inware.inwareid Where (u_inware.billtype = 3) And (u_inware.flag = 0) And (u_inwaremx.scid = :arg_scid) And (u_inwaremx.relid = :arg_orderid); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = OrderCode+' 查询是否有相关未审核生产进仓单失败'+sqlca.SQLErrText Goto ext End If If cnt > 0 Then rslt = 0 arg_msg = OrderCode+' 有相关未审核生产进仓单,不能终止' Goto ext End If If ordertype = 0 And uo_option_order_bh_use_yc = 1 Then For ls_i = 1 To it_mxbt If s_order_mx[ls_i].taskid > 0 Then Select stopqty Into :ld_stopqty_ori From u_saletaskmx Where scid = :s_order_mx[ls_i].taskscid And taskid = :s_order_mx[ls_i].taskid And printid = :s_order_mx[ls_i].taskmxid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询生产计划相关销售预测单信息失败'+sqlca.SQLErrText Goto ext End If ld_stopqty = ld_stopqty_ori + s_order_mx[ls_i].orderqty If uo_task.stopqty(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,s_order_mx[ls_i].taskmxid,'',ld_stopqty,'',arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If Next End If //扣减相关部件生产计划的已分配数量 If pforderid > 0 Then If f_add_conpfqty(arg_scid,pforderid, (pfqty * (acmpqty - orderqty)) / orderqty ,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If //是否终止用料 If arg_ifchange = 1 Then ll_rslt = uof_mtrl_change(arg_scid,arg_orderid,0,0,arg_ifchange,1,arg_msg,False) If ll_rslt = 0 Then rslt = 0 Goto ext ElseIf rslt = 2 Then Update u_order_ml Set stopreason = rtrim(stopreason) + ','+'已开申购单,不能终止物料需求' Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致补充生产计划终止原因失败"+"~n"+sqlca.SQLErrText Goto ext End If End If ElseIf arg_ifchange = 2 Then ll_rslt = uof_mtrl_change(arg_scid,arg_orderid,0,0,arg_ifchange,1,arg_msg,False) If ll_rslt = 0 Then rslt = 0 Goto ext End If End If //yyx2013-11-9 If ordertype = 4 And pzlorderid = 0 And (arg_ifchange = 1 Or arg_ifchange = 2) and status = 1 Then If it_mxbt = 0 Then rslt = 0 arg_msg = '没有计划明细,操作终止,请检查' Goto ext End If For ls_i = 1 To it_mxbt If s_order_mx[ls_i].taskid > 0 Then Int li_plantype Long ll_wrkGrpid_scll Select plantype,wrkGrpid Into :li_plantype,:ll_wrkGrpid_scll From u_OrderRqMtrl Where scid = :scid And orderid = :s_order_mx[ls_i].taskid And mxpkid = :s_order_mx[ls_i].taskmxid; If sqlca.SQLCode <> 0 Then arg_msg = '查询生产自制需求资料失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If f_assign_rqmtrlqty(scid,s_order_mx[ls_i].taskid,ll_wrkGrpid_scll,& mtrlid,ls_mtrlcode,status_mode,& woodcode,pcode,0 - s_order_mx[ls_i].orderqty,0,arg_msg,False) = 0 Then rslt = 0 Goto ext End If End If Next End If //yyx2013-11-9_end If ordertype = 4 And li_ptflag = 1 Then Update u_orderrqmtrl_scll Set u_orderrqmtrl_scll.wareqty = u_orderrqmtrl_scll.dstrqty From u_orderrqmtrl_scll Where u_orderrqmtrl_scll.scid = :arg_scid And u_orderrqmtrl_scll.orderid = :arg_orderid And u_orderrqmtrl_scll.wareqty > u_orderrqmtrl_scll.dstrqty; If sqlca.SQLCode <> 0 Then arg_msg = '更新指令单配套数量失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If End If //如果是通用包件产品,检查相关包件指令是否终止 //如果是分离排产的指令单,要终止相关主生产计划 If ordertype = 4 And porderid > 0 Then Select ifpack Into :li_ifpack From u_mtrldef Where mtrlid = :mtrlid; If sqlca.SQLCode <> 0 Then arg_msg = '查询指令单物料资料包件属性失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If ll_porderid = porderid li_mxbt = 1 If li_ifpackpro = 1 And li_ifpack = 1 Then ds_stop_zl.Retrieve(scid,porderid) If ds_stop_zl.RowCount() > 0 Then If ds_stop_zl.Find('u_orderrqmtrl_truerqqty > stopqty',1,ds_stop_zl.RowCount()) = 0 Then Declare cur_zl_p Cursor For Select orderid From u_order_ml Where scid = :arg_scid And porderid = :ll_porderid And mtrlid = :ll_mtrlid_p And status_mode = :ls_status_p And woodcode = :ls_woodcode_p And pcode = :ls_pcode_p And ordertype = 4; Open cur_zl_p; Fetch cur_zl_p Into :ll_orderid_arr[li_mxbt]; Do While sqlca.SQLCode = 0 li_mxbt++ Fetch cur_zl_p Into :ll_orderid_arr[li_mxbt]; Loop Close cur_zl_p; For ll_i = 1 To li_mxbt - 1 If stoporder(scid,ll_orderid_arr[ll_i],arg_ifchange,'终止包件指令自动终止',arg_msg,False) = 0 Then rslt = 0 arg_msg = '自动终止包件产品主生产计划对应的分离指令单失败,'+arg_msg Goto ext End If Next // If stoporder(scid,porderid,arg_ifchange,'终止包件指令自动终止主计划',arg_msg,False) = 0 Then // rslt = 0 // arg_msg = '自动终止包件产品主生产计划失败,'+arg_msg // Goto ext // End If End If End If End If //如果是分离排产,还要同时终止主生产计划对应的指令单(非包件产品) If uo_option_autostop_porder = 1 Then If li_ordertype = 1 And & ll_mtrlid_p = mtrlid And & ls_status_p = status_mode And & ls_woodcode_p = woodcode And & ls_pcode_p = pcode And & li_ifpackpro = 0 And & li_status <> 3 Then Update u_order_ml Set stopqty = stopqty + (:orderqty - :acmpqty - :stopqty) Where u_order_ml.scid = :scid And u_order_ml.orderid = :porderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新分离排产对应主生产计划终止数量失败,'+arg_msg Goto ext End If If ld_notinqty_p = orderqty - acmpqty - stopqty Then If stoporder(scid,porderid,arg_ifchange,'终止包件指令自动终止',arg_msg,False) = 0 Then rslt = 0 arg_msg = '自动终止分离排产对应主生产计划失败,'+arg_msg Goto ext End If End If End If // DECLARE cur_zl_p CURSOR FOR // SELECT orderid // FROM u_order_ml // WHERE scid = :arg_scid // AND porderid = :ll_porderid // AND mtrlid = :ll_mtrlid_p // AND status_mode = :ls_status_p // AND woodcode = :ls_woodcode_p // And pcode = :ls_pcode_p; // // OPEN cur_zl_p; // // FETCH cur_zl_p Into :ll_orderid_arr[li_mxbt]; // // DO WHILE sqlca.SQLCode = 0 // li_mxbt++ // FETCH cur_zl_p Into :ll_orderid_arr[li_mxbt]; // LOOP // // CLOSE cur_zl_p; // // FOR ll_i = 1 To li_mxbt - 1 // IF stoporder(scid,ll_orderid_arr[ll_i],arg_ifchange,'终止包件指令自动终止',arg_msg,False) = 0 THEN // rslt = 0 // arg_msg = '自动终止包件产品主生产计划对应的分离指令单失败,'+arg_msg // GOTO ext // END IF // NEXT End If End If Update u_order_ml Set status = 3, stopemp = :publ_operator, Accomplishdate = getdate(), stopreason = :arg_stopreason, stopqty = orderqty - acmpqty Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致终止生产计划操作失败"+"~n"+sqlca.SQLErrText Goto ext End If ext: If rslt = 0 Then Rollback; p_reset() ElseIf arg_ifcommit And rslt = 1 Then Commit; End If Destroy uo_task Destroy ds_stop_zl Return (rslt) end function public function integer f_add_flqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt rslt = 1 String ls_ordercode SELECT ordercode INTO :ls_ordercode FROM u_order_ml WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单信息失败,scid:'+String(arg_scid)+',orderid:'+String(arg_orderid)+','+sqlca.SQLErrText GOTO ext END IF UPDATE u_OrderRqMtrl_scll SET flqty = flqty + :arg_addqty WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkgrpid = :arg_wrkgrpid AND mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode And pcode = :arg_pcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '指令单:'+ls_ordercode+'更新物料:'+arg_mtrlcode+',发料通知单数失败>>'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_bom_workprice (long arg_mtrlid, string arg_pfcode, decimal arg_qty, ref string arg_msg);Int rslt = 1 Int li_mtrlorigin Long count = 0,cnt Long ll_i s_pfmx ls_s_pfmx[] Decimal ld_cmpqty Decimal ld_qty,ld_bom_qty Long tem_long String ls_wpcode String ls_pricestr_value Decimal ld_workprice_str deep++ If deep > 1000 Then arg_msg = '递归太深'+String(deep) rslt = 0 Goto ext End If Select cmpqty Into :ld_cmpqty From u_mtrldef Where mtrlid = :arg_mtrlid; If sqlca.SQLCode <> 0 Then arg_msg = '查询物料清单基数失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If Declare pf_cur Cursor For Select u_PrdPF.Sonscale, u_PrdPF.SonLoss, u_PrdPF.SonDECLosS, u_PrdPF.SonMtrlid, u_PrdPF.sonpfcode, u_mtrldef.mtrlcode, u_mtrldef.mrptype, u_mtrldef.mrparg From u_PrdPF Inner JOIN u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid Where (u_mtrldef.ifselforder = 0) And (u_mtrldef.mtrlorigin = 0) And ( u_PrdPF.mtrlid = :arg_mtrlid ) And ( u_PrdPF.pfcode = :arg_pfcode ) Order By u_PrdPF.printid; Open pf_cur; count = 1 Fetch pf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,& :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode,& :ls_s_pfmx[count].mtrlcode,:ls_s_pfmx[count].u_mtrldef_mrptype,& :ls_s_pfmx[count].u_mtrldef_mrparg; Do While sqlca.SQLCode = 0 count++ Fetch pf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,& :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode,& :ls_s_pfmx[count].mtrlcode,:ls_s_pfmx[count].u_mtrldef_mrptype,& :ls_s_pfmx[count].u_mtrldef_mrparg; Loop count = count - 1 Close pf_cur; For ll_i = 1 To count If ls_s_pfmx[ll_i].u_mtrldef_mrptype = 0 Then ld_qty = Round(arg_qty * (ls_s_pfmx[ll_i].Sonscale/(1 - ls_s_pfmx[ll_i].SonLoss)+ls_s_pfmx[ll_i].SonDECLosS)/ld_cmpqty,ls_s_pfmx[ll_i].u_mtrldef_mrparg) ld_bom_qty = Round((ls_s_pfmx[ll_i].Sonscale/(1 - ls_s_pfmx[ll_i].SonLoss)+ls_s_pfmx[ll_i].SonDECLosS)/ld_cmpqty,ls_s_pfmx[ll_i].u_mtrldef_mrparg) Else If ls_s_pfmx[ll_i].u_mtrldef_mrparg = 0 Then ld_qty = Ceiling(Truncate(arg_qty * ls_s_pfmx[ll_i].Sonscale/(1 - ls_s_pfmx[ll_i].SonLoss)+ls_s_pfmx[ll_i].SonDECLosS,10)/ld_cmpqty) ld_bom_qty = Ceiling(Truncate(ls_s_pfmx[ll_i].Sonscale/(1 - ls_s_pfmx[ll_i].SonLoss)+ls_s_pfmx[ll_i].SonDECLosS,10)/ld_cmpqty) Else tem_long = 10^ls_s_pfmx[ll_i].u_mtrldef_mrparg ld_qty = Ceiling((Truncate(arg_qty * ls_s_pfmx[ll_i].Sonscale/(1 - ls_s_pfmx[ll_i].SonLoss)+ls_s_pfmx[ll_i].SonDECLosS,10)/ld_cmpqty) * tem_long)/tem_long ld_qty = Round(ld_qty , ls_s_pfmx[ll_i].u_mtrldef_mrparg) ld_bom_qty = Ceiling((Truncate(ls_s_pfmx[ll_i].Sonscale/(1 - ls_s_pfmx[ll_i].SonLoss)+ls_s_pfmx[ll_i].SonDECLosS,10)/ld_cmpqty) * tem_long)/tem_long ld_bom_qty = Round(ld_bom_qty , ls_s_pfmx[ll_i].u_mtrldef_mrparg) End If End If ls_wpcode = f_get_dft_wp(ls_s_pfmx[ll_i].SonMtrlid) If ls_wpcode = '' Then rslt = 0 arg_msg = '查询部件:'+ls_s_pfmx[count].mtrlcode+' 默认工价表号失败' Goto ext End If cnt = 0 Select COUNT(*) Into :cnt From (Select rpcode, SUM(ifdftpg) AS ifdftpg From u_sc_workprice Where (Mtrlid = :ls_s_pfmx[ll_i].SonMtrlid) And (rpcode <> '') And (u_sc_workprice.wpcode = :ls_wpcode) Group By rpcode Having (SUM(ifdftpg) <> 1)) v_rpcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询部件:'+ls_s_pfmx[count].mtrlcode+' 替代工序默认派工属性是否设置正确失败' Goto ext End If If cnt > 0 Then rslt = 0 arg_msg = '部件:'+ls_s_pfmx[count].mtrlcode+' 替代工序默认派工属性必须设置且必须唯一' Goto ext End If Declare cur_wpmx Cursor For Select u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.workqty * :ld_qty, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, u_sc_workprice.workprice, u_sc_workprice.status, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, u_sc_workprice.workprice, u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.ifgroup, u_sc_workprice.u_workqty * :ld_qty, u_sc_workprice.u_workprice, :ls_s_pfmx[ll_i].mtrlcode, u_sc_workprice.workprice * :ld_bom_qty, u_sc_workprice.pricestr, '['+ltrim(rtrim(u_mtrldef.mtrlcode))+']' + ltrim(rtrim(u_mtrldef.mtrlname)) + '('+ltrim(rtrim(u_mtrldef.mtrlmode))+')', u_sc_workprice.replacestr, u_sc_workprice.mtrlid, u_sc_workprice.rpcode, u_sc_workprice.auditflag_gj From u_sc_workprice Inner JOIN u_mtrldef ON u_sc_workprice.Mtrlid = u_mtrldef.mtrlid Where u_sc_workprice.mtrlid = :ls_s_pfmx[ll_i].SonMtrlid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '') And u_sc_workprice.wpcode = :ls_wpcode; Open cur_wpmx; it_mx_bomwp++ Fetch cur_wpmx Into :ins_s_wp[it_mx_bomwp].procode,& :ins_s_wp[it_mx_bomwp].proname,& :ins_s_wp[it_mx_bomwp].proorder,& :ins_s_wp[it_mx_bomwp].workqty,& :ins_s_wp[it_mx_bomwp].wrkgrpid,& :ins_s_wp[it_mx_bomwp].lsxtype,& :ins_s_wp[it_mx_bomwp].workprice,& :ins_s_wp[it_mx_bomwp].status,& :ins_s_wp[it_mx_bomwp].ifjd,& :ins_s_wp[it_mx_bomwp].lastflag,& :ins_s_wp[it_mx_bomwp].sctype,& :ins_s_wp[it_mx_bomwp].equipmentid,& :ins_s_wp[it_mx_bomwp].partname,& :ins_s_wp[it_mx_bomwp].eqworkhour,& :ins_s_wp[it_mx_bomwp].Workhour,& :ins_s_wp[it_mx_bomwp].beforehour,& :ins_s_wp[it_mx_bomwp].afterhour,& :ins_s_wp[it_mx_bomwp].workprice,& :ins_s_wp[it_mx_bomwp].worktype,& :ins_s_wp[it_mx_bomwp].eq_empnum,& :ins_s_wp[it_mx_bomwp].ifgroup,& :ins_s_wp[it_mx_bomwp].u_workqty,& :ins_s_wp[it_mx_bomwp].u_workprice,& :ins_s_wp[it_mx_bomwp].mtrlcode,& :ins_s_wp[it_mx_bomwp].workprice_bom,& :ins_s_wp[it_mx_bomwp].pricestr,& :ins_s_wp[it_mx_bomwp].pro_dscrp,& :ins_s_wp[it_mx_bomwp].replacestr,& :ins_s_wp[it_mx_bomwp].sonmtrlid,& :ins_s_wp[it_mx_bomwp].rpcode,& :ins_s_wp[it_mx_bomwp].auditflag_gj; Do While sqlca.SQLCode = 0 //套入公式 If ins_s_wp[it_mx_bomwp].pricestr <> '' Then If uof_workprice_parm(ls_s_pfmx[ll_i].SonMtrlid,ls_wpcode,ins_s_wp[it_mx_bomwp].procode,ins_s_wp[it_mx_bomwp].workqty,ins_s_wp[it_mx_bomwp].pricestr,0,ls_pricestr_value,ld_workprice_str) <> 0 Then ins_s_wp[it_mx_bomwp].workprice_bom = ld_workprice_str ins_s_wp[it_mx_bomwp].workprice = ld_workprice_str ins_s_wp[it_mx_bomwp].pricestr_value = ls_pricestr_value End If End If it_mx_bomwp++ Fetch cur_wpmx Into :ins_s_wp[it_mx_bomwp].procode,& :ins_s_wp[it_mx_bomwp].proname,& :ins_s_wp[it_mx_bomwp].proorder,& :ins_s_wp[it_mx_bomwp].workqty,& :ins_s_wp[it_mx_bomwp].wrkgrpid,& :ins_s_wp[it_mx_bomwp].lsxtype,& :ins_s_wp[it_mx_bomwp].workprice,& :ins_s_wp[it_mx_bomwp].status,& :ins_s_wp[it_mx_bomwp].ifjd,& :ins_s_wp[it_mx_bomwp].lastflag,& :ins_s_wp[it_mx_bomwp].sctype,& :ins_s_wp[it_mx_bomwp].equipmentid,& :ins_s_wp[it_mx_bomwp].partname,& :ins_s_wp[it_mx_bomwp].eqworkhour,& :ins_s_wp[it_mx_bomwp].Workhour,& :ins_s_wp[it_mx_bomwp].beforehour,& :ins_s_wp[it_mx_bomwp].afterhour,& :ins_s_wp[it_mx_bomwp].workprice,& :ins_s_wp[it_mx_bomwp].worktype,& :ins_s_wp[it_mx_bomwp].eq_empnum,& :ins_s_wp[it_mx_bomwp].ifgroup,& :ins_s_wp[it_mx_bomwp].u_workqty,& :ins_s_wp[it_mx_bomwp].u_workprice,& :ins_s_wp[it_mx_bomwp].mtrlcode,& :ins_s_wp[it_mx_bomwp].workprice_bom,& :ins_s_wp[it_mx_bomwp].pricestr,& :ins_s_wp[it_mx_bomwp].pro_dscrp,& :ins_s_wp[it_mx_bomwp].replacestr,& :ins_s_wp[it_mx_bomwp].sonmtrlid,& :ins_s_wp[it_mx_bomwp].rpcode,& :ins_s_wp[it_mx_bomwp].auditflag_gj; Loop Close cur_wpmx; it_mx_bomwp = it_mx_bomwp - 1 If uof_bom_workprice(ls_s_pfmx[ll_i].SonMtrlid,ls_s_pfmx[ll_i].sonpfcode,ld_qty,arg_msg) = 0 Then rslt = 0 Goto ext End If Next ext: Return rslt end function public function integer uof_protype_workprice (long arg_mtrlid, string arg_pfcode, string arg_wpcode, decimal arg_qty, ref string arg_msg);Int rslt String ls_pricestr_value Decimal ld_workprice_str rslt = 1 Declare cur_wpmx Cursor For Select u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.workqty * :arg_qty, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, u_sc_workprice.workprice, u_sc_workprice.status, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, u_sc_workprice.workprice, u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.ifgroup, u_sc_workprice.u_workqty * :arg_qty, u_sc_workprice.u_workprice, u_mtrldef.mtrlcode, u_sc_workprice.workprice, u_sc_workprice.pricestr, '['+ltrim(rtrim(u_mtrldef.mtrlcode))+']' + ltrim(rtrim(u_mtrldef.mtrlname)) + '('+ltrim(rtrim(u_mtrldef.mtrlmode))+')', u_sc_workprice.replacestr, u_sc_workprice.mtrlid, u_sc_workprice.rpcode, u_sc_workprice.auditflag_gj From u_sc_workprice Inner JOIN u_mtrldef ON u_sc_workprice.Mtrlid = u_mtrldef.mtrlid Where u_sc_workprice.mtrlid = :arg_mtrlid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '') And u_sc_workprice.wpcode = :arg_wpcode; Open cur_wpmx; it_mx_bomwp++ Fetch cur_wpmx Into :ins_s_wp[it_mx_bomwp].procode,& :ins_s_wp[it_mx_bomwp].proname,& :ins_s_wp[it_mx_bomwp].proorder,& :ins_s_wp[it_mx_bomwp].workqty,& :ins_s_wp[it_mx_bomwp].wrkgrpid,& :ins_s_wp[it_mx_bomwp].lsxtype,& :ins_s_wp[it_mx_bomwp].workprice,& :ins_s_wp[it_mx_bomwp].status,& :ins_s_wp[it_mx_bomwp].ifjd,& :ins_s_wp[it_mx_bomwp].lastflag,& :ins_s_wp[it_mx_bomwp].sctype,& :ins_s_wp[it_mx_bomwp].equipmentid,& :ins_s_wp[it_mx_bomwp].partname,& :ins_s_wp[it_mx_bomwp].eqworkhour,& :ins_s_wp[it_mx_bomwp].Workhour,& :ins_s_wp[it_mx_bomwp].beforehour,& :ins_s_wp[it_mx_bomwp].afterhour,& :ins_s_wp[it_mx_bomwp].workprice,& :ins_s_wp[it_mx_bomwp].worktype,& :ins_s_wp[it_mx_bomwp].eq_empnum,& :ins_s_wp[it_mx_bomwp].ifgroup,& :ins_s_wp[it_mx_bomwp].u_workqty,& :ins_s_wp[it_mx_bomwp].u_workprice,& :ins_s_wp[it_mx_bomwp].mtrlcode,& :ins_s_wp[it_mx_bomwp].workprice_bom,& :ins_s_wp[it_mx_bomwp].pricestr,& :ins_s_wp[it_mx_bomwp].pro_dscrp,& :ins_s_wp[it_mx_bomwp].replacestr,& :ins_s_wp[it_mx_bomwp].sonmtrlid,& :ins_s_wp[it_mx_bomwp].rpcode,& :ins_s_wp[it_mx_bomwp].auditflag_gj; Do While sqlca.SQLCode = 0 //套入公式 If ins_s_wp[it_mx_bomwp].pricestr <> '' Then If uof_workprice_parm(arg_mtrlid,arg_wpcode,ins_s_wp[it_mx_bomwp].procode,ins_s_wp[it_mx_bomwp].workqty,ins_s_wp[it_mx_bomwp].pricestr,0,ls_pricestr_value,ld_workprice_str) <> 0 Then ins_s_wp[it_mx_bomwp].workprice_bom = ld_workprice_str ins_s_wp[it_mx_bomwp].workprice = ld_workprice_str ins_s_wp[it_mx_bomwp].pricestr_value = ls_pricestr_value End If End If it_mx_bomwp++ Fetch cur_wpmx Into :ins_s_wp[it_mx_bomwp].procode,& :ins_s_wp[it_mx_bomwp].proname,& :ins_s_wp[it_mx_bomwp].proorder,& :ins_s_wp[it_mx_bomwp].workqty,& :ins_s_wp[it_mx_bomwp].wrkgrpid,& :ins_s_wp[it_mx_bomwp].lsxtype,& :ins_s_wp[it_mx_bomwp].workprice,& :ins_s_wp[it_mx_bomwp].status,& :ins_s_wp[it_mx_bomwp].ifjd,& :ins_s_wp[it_mx_bomwp].lastflag,& :ins_s_wp[it_mx_bomwp].sctype,& :ins_s_wp[it_mx_bomwp].equipmentid,& :ins_s_wp[it_mx_bomwp].partname,& :ins_s_wp[it_mx_bomwp].eqworkhour,& :ins_s_wp[it_mx_bomwp].Workhour,& :ins_s_wp[it_mx_bomwp].beforehour,& :ins_s_wp[it_mx_bomwp].afterhour,& :ins_s_wp[it_mx_bomwp].workprice,& :ins_s_wp[it_mx_bomwp].worktype,& :ins_s_wp[it_mx_bomwp].eq_empnum,& :ins_s_wp[it_mx_bomwp].ifgroup,& :ins_s_wp[it_mx_bomwp].u_workqty,& :ins_s_wp[it_mx_bomwp].u_workprice,& :ins_s_wp[it_mx_bomwp].mtrlcode,& :ins_s_wp[it_mx_bomwp].workprice_bom,& :ins_s_wp[it_mx_bomwp].pricestr,& :ins_s_wp[it_mx_bomwp].pro_dscrp,& :ins_s_wp[it_mx_bomwp].replacestr,& :ins_s_wp[it_mx_bomwp].sonmtrlid,& :ins_s_wp[it_mx_bomwp].rpcode,& :ins_s_wp[it_mx_bomwp].auditflag_gj; Loop Close cur_wpmx; it_mx_bomwp = it_mx_bomwp - 1 If uof_bom_workprice(arg_mtrlid,arg_pfcode,arg_qty,arg_msg) = 0 Then rslt = 0 Goto ext End If ext: Return rslt end function public function integer add_gydscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg); Int rslt = 1 IF arg_newdescppart = '' THEN rslt = 0 arG_MSG = "要添加内容为空,操作取消" GOTO ext END IF rslt = p_getinfo(arg_scid,arg_orderid, arG_MSG) IF rslt = 0 THEN GOTO ext IF status = 0 THEN rslt = 0 arG_MSG = "待审核状态下不可用" GOTO ext END IF UPDATE u_order_ml SET gydscrp = :arg_newdescppart WHERE u_order_ml.orderid = :arg_orderid AND u_order_ml.scid = :arg_scid; IF SQLCA.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致修改工艺说明操作失败"+"~n"+SQLCA.SQLErrText ROLLBACK; GOTO ext END IF gydscrp = arg_newdescppart ext: IF rslt = 1 THEN COMMIT; END IF p_reset() RETURN (rslt) end function public function integer uof_stop_tree (long arg_scid, long arg_orderid, decimal arg_stopqty, integer arg_type, integer arg_ifaddhis, ref string arg_msg, boolean arg_ifcommit);Int rslt rslt = 1 Long ll_i,ll_j,ll_k Long ll_porderid,ll_printid Decimal ld_stopqty,ld_standardrqqty,ld_rate Long ll_mtrlid,ll_wrkgrpid,ll_produce_wrkgrpid,ll_wrkgrpid_zl Int li_plantype String ls_status,ls_woodcode,ls_pcode Decimal ld_rqqty_tree Long ll_lp,ll_mtrlid_zl,ll_printid_tree String ls_status_zl,ls_woodcode_zl,ls_pcode_zl Decimal ld_stopqty_sum,ld_stopqty_tmp Int li_ifwfjgup,li_ordertype_zl ld_stopqty_sum = arg_stopqty datastore ds_tree ds_tree = Create datastore ds_tree.DataObject = 'ds_orderrqmtrl_tree_stop' ds_tree.SetTransObject(sqlca) datastore ds_stop_his ds_stop_his = Create datastore ds_stop_his.DataObject = 'ds_order_ml_stop_mtrl_his' ds_stop_his.SetTransObject(sqlca) If arg_type = 0 Then //终止 Select mtrlid,status_mode,woodcode,pcode,porderid,wrkgrpid,ordertype Into :ll_mtrlid_zl,:ls_status_zl,:ls_woodcode_zl,:ls_pcode_zl,:ll_porderid,:ll_wrkgrpid_zl,:li_ordertype_zl From u_order_ml Where scid = :arg_scid And orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询指令单信息失败'+"~n"+sqlca.SQLErrText Goto ext End If //yyx2014-8-14主计划也是指令单 if li_ordertype_zl <> 4 then ll_porderid = arg_orderid end if //end_yyx2014-8-14主计划也是指令单 Delete From u_order_ml_stop_mtrl_his Where scid = :arg_scid And orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除旧终止记录操作失败"+"~n"+sqlca.SQLErrText Goto ext End If ds_tree.Retrieve(arg_scid,ll_porderid) If ds_tree.RowCount() <= 0 Then rslt = 1 Goto ext End If For ll_i = 1 To ds_tree.RowCount() If ld_stopqty_sum <= 0 Then Exit ll_mtrlid = ds_tree.Object.mtrlid[ll_i] ls_status = ds_tree.Object.status[ll_i] ls_woodcode = ds_tree.Object.woodcode[ll_i] ls_pcode = ds_tree.Object.pcode[ll_i] //1.定位指令单在运算树中的位置 If ll_mtrlid = ll_mtrlid_zl And ls_status = ls_status_zl And ls_woodcode = ls_woodcode_zl And ls_pcode = ls_pcode_zl Then ll_lp = ds_tree.Object.lp[ll_i] ll_printid_tree = ds_tree.Object.printid[ll_i] ld_standardrqqty = ds_tree.Object.standardrqqty[ll_i] If ld_standardrqqty = 0 Then ld_standardrqqty = ds_tree.Object.rqqty[ll_i] End If If ld_stopqty_sum > ld_standardrqqty Then ld_stopqty_tmp = ld_standardrqqty ld_stopqty_sum = ld_stopqty_sum - ld_stopqty_tmp Else ld_stopqty_tmp = ld_stopqty_sum ld_stopqty_sum = 0 End If If ld_standardrqqty = 0 Then ld_rate = 1 Else ld_rate = ld_stopqty_tmp / ld_standardrqqty End If //1.1 终止指令单在运算树中的数量 // UPDATE u_orderrqmtrl_tree // SET rqqty = rqqty - :ld_stopqty_tmp, // truerqqty = truerqqty- :ld_stopqty_tmp, // scllqty = scllqty - :ld_stopqty_tmp // WHERE scid = :arg_scid // AND orderid = :ll_porderid // And printid = :ll_printid_tree; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '因网络或其它原因导致更新生产计划运算数据失败'+"~n"+sqlca.SQLErrText // GOTO ext // END IF //yyx2013-10-31 Update u_orderrqmtrl_tree Set truerqqty = truerqqty - :ld_stopqty_tmp Where scid = :arg_scid And orderid = :ll_porderid And printid = :ll_printid_tree; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '因网络或其它原因导致更新生产计划运算数据失败'+"~n"+sqlca.SQLErrText Goto ext End If Update u_orderrqmtrl Set truerqqty = truerqqty - :ld_stopqty_tmp Where scid = :arg_scid And orderid = :ll_porderid And mtrlid = :ll_mtrlid_zl And produce_wrkGrpid = :ll_wrkgrpid_zl And status = :ls_status_zl And woodcode = :ls_woodcode_zl And pcode = :ls_pcode_zl And plantype = 0; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '因网络或其它原因导致更新生产计划用料需求失败'+"~n"+sqlca.SQLErrText Goto ext End If // If arg_ifaddhis = 1 Then Update u_order_ml_stop_mtrl_his Set stopqty = stopqty + :ld_stopqty_tmp Where scid = :arg_scid And orderid = :arg_orderid And porderid = :ll_porderid And printid = :ll_printid_tree; If sqlca.SQLCode = 0 Then If sqlca.SQLNRows = 0 Then Insert Into u_order_ml_stop_mtrl_his (scid, orderid, porderid, printid, stopqty) Values (:arg_scid, :arg_orderid, :ll_porderid, :ll_printid_tree, :ld_stopqty_tmp); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '因网络或其它原因导致插入终止历史失败'+"~n"+sqlca.SQLErrText Goto ext End If End If Else rslt = 0 arg_msg = '因网络或其它原因导致更新终止历史失败'+"~n"+sqlca.SQLErrText Goto ext End If End If // //1.1 end //2.如果直接上级是外协,终止相应数量 For ll_j = ll_i - 1 To 1 Step -1 If ds_tree.Object.lp[ll_j] <= ll_lp - 2 Then Exit If ds_tree.Object.lp[ll_j] = ll_lp - 1 Then If ds_tree.Object.plantype[ll_j] <> 3 Then Exit ll_mtrlid = ds_tree.Object.mtrlid[ll_j] ll_wrkgrpid = ds_tree.Object.wrkgrpid[ll_j] ll_produce_wrkgrpid = ds_tree.Object.produce_wrkGrpid[ll_j] li_plantype = ds_tree.Object.plantype[ll_j] ls_status = ds_tree.Object.status[ll_j] ls_woodcode = ds_tree.Object.woodcode[ll_j] ls_pcode = ds_tree.Object.pcode[ll_j] ld_rqqty_tree = ds_tree.Object.u_orderrqmtrl_tree_truerqqty[ll_j] ll_printid = ds_tree.Object.printid[ll_j] //上级是外协,只终止净需求数(上层的自制仍需领料) Update u_orderrqmtrl Set truerqqty = truerqqty - :ld_rqqty_tree * :ld_rate Where scid = :arg_scid And orderid = :ll_porderid And mtrlid = :ll_mtrlid And wrkgrpid = :ll_wrkgrpid And status = :ls_status And woodcode = :ls_woodcode And pcode = :ls_pcode And plantype = :li_plantype; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '因网络或其它原因导致更新生产计划用料需求失败'+"~n"+sqlca.SQLErrText Goto ext End If Update u_orderrqmtrl_tree Set truerqqty = truerqqty- :ld_rqqty_tree * :ld_rate Where scid = :arg_scid And orderid = :ll_porderid And printid = :ll_printid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '因网络或其它原因导致更新生产计划运算数据失败'+"~n"+sqlca.SQLErrText Goto ext End If If arg_ifaddhis = 1 Then Update u_order_ml_stop_mtrl_his Set stopqty = stopqty + :ld_rqqty_tree * :ld_rate Where scid = :arg_scid And orderid = :arg_orderid And porderid = :ll_porderid And printid = :ll_printid; If sqlca.SQLCode = 0 Then If sqlca.SQLNRows = 0 Then Insert Into u_order_ml_stop_mtrl_his (scid, orderid, porderid, printid, stopqty, ifwfjgup) Values (:arg_scid, :arg_orderid, :ll_porderid, :ll_printid, :ld_rqqty_tree * :ld_rate, 1); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '因网络或其它原因导致插入终止历史失败'+"~n"+sqlca.SQLErrText Goto ext End If End If Else rslt = 0 arg_msg = '因网络或其它原因导致更新终止历史失败'+"~n"+sqlca.SQLErrText Goto ext End If End If Exit End If Next //3.下级外协件的采购数量按相应数量终止 For ll_j = ll_i + 1 To ds_tree.RowCount() If ds_tree.Object.lp[ll_j] <= ll_lp Then Exit If ds_tree.Object.lp[ll_j] = ll_lp + 1 And ds_tree.Object.plantype[ll_j] = 3 Then For ll_k = ll_j + 1 To ds_tree.RowCount() If ds_tree.Object.lp[ll_k] <= ll_lp + 1 Then Exit If ds_tree.Object.lp[ll_k] = ll_lp + 2 And ds_tree.Object.plantype[ll_k] = 2 Then ll_mtrlid = ds_tree.Object.mtrlid[ll_k] ll_wrkgrpid = ds_tree.Object.wrkgrpid[ll_k] ll_produce_wrkgrpid = ds_tree.Object.produce_wrkGrpid[ll_k] li_plantype = ds_tree.Object.plantype[ll_k] ls_status = ds_tree.Object.status[ll_k] ls_woodcode = ds_tree.Object.woodcode[ll_k] ls_pcode = ds_tree.Object.pcode[ll_k] ld_rqqty_tree = ds_tree.Object.rqqty[ll_k] ll_printid = ds_tree.Object.printid[ll_k] Update u_orderrqmtrl Set RqQty = RqQty - :ld_rqqty_tree * :ld_rate, truerqqty = truerqqty- :ld_rqqty_tree * :ld_rate, scllqty = scllqty - :ld_rqqty_tree * :ld_rate Where scid = :arg_scid And orderid = :ll_porderid And mtrlid = :ll_mtrlid And wrkgrpid = :ll_wrkgrpid And status = :ls_status And woodcode = :ls_woodcode And pcode = :ls_pcode And plantype = :li_plantype; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '因网络或其它原因导致更新生产计划用料需求失败'+"~n"+sqlca.SQLErrText Goto ext End If Update u_orderrqmtrl_tree Set rqqty = rqqty - :ld_rqqty_tree * :ld_rate, truerqqty = truerqqty - :ld_rqqty_tree * :ld_rate, scllqty = scllqty - :ld_rqqty_tree * :ld_rate Where scid = :arg_scid And orderid = :ll_porderid And printid = :ll_printid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '因网络或其它原因导致更新生产计划运算数据失败'+"~n"+sqlca.SQLErrText Goto ext End If If arg_ifaddhis = 1 Then Update u_order_ml_stop_mtrl_his Set stopqty = stopqty + :ld_rqqty_tree * :ld_rate Where scid = :arg_scid And orderid = :arg_orderid And porderid = :ll_porderid And printid = :ll_printid; If sqlca.SQLCode = 0 Then If sqlca.SQLNRows = 0 Then Insert Into u_order_ml_stop_mtrl_his (scid, orderid, porderid, printid, stopqty, ifwfjgup) Values (:arg_scid, :arg_orderid, :ll_porderid, :ll_printid, :ld_rqqty_tree * :ld_rate, 2); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '因网络或其它原因导致插入终止历史失败'+"~n"+sqlca.SQLErrText Goto ext End If End If Else rslt = 0 arg_msg = '因网络或其它原因导致更新终止历史失败'+"~n"+sqlca.SQLErrText Goto ext End If End If End If Next ll_j = ll_k - 1 End If Next End If Next Else //取消终止 ds_stop_his.Retrieve(arg_scid,arg_orderid) For ll_i = 1 To ds_stop_his.RowCount() ll_porderid = ds_stop_his.Object.porderid[ll_i] ll_printid = ds_stop_his.Object.printid[ll_i] ld_stopqty = ds_stop_his.Object.stopqty[ll_i] ll_mtrlid = ds_stop_his.Object.u_orderrqmtrl_tree_mtrlid[ll_i] ll_wrkgrpid = ds_stop_his.Object.u_orderrqmtrl_tree_wrkgrpid[ll_i] ll_produce_wrkgrpid = ds_stop_his.Object.u_orderrqmtrl_tree_produce_wrkgrpid[ll_i] li_plantype = ds_stop_his.Object.u_orderrqmtrl_tree_plantype[ll_i] ls_status = ds_stop_his.Object.u_orderrqmtrl_tree_status[ll_i] ls_woodcode = ds_stop_his.Object.u_orderrqmtrl_tree_woodcode[ll_i] ls_pcode = ds_stop_his.Object.u_orderrqmtrl_tree_pcode[ll_i] li_ifwfjgup = ds_stop_his.Object.u_order_ml_stop_mtrl_his_ifwfjgup[ll_i] Update u_orderrqmtrl Set truerqqty = truerqqty + :ld_stopqty, RqQty = RqQty + case :li_ifwfjgup when 2 then :ld_stopqty else 0 End , scllqty = scllqty + case :li_ifwfjgup when 2 then :ld_stopqty else 0 End Where scid = :arg_scid And orderid = :ll_porderid And mtrlid = :ll_mtrlid And wrkgrpid = :ll_wrkgrpid And status = :ls_status And woodcode = :ls_woodcode And pcode = :ls_pcode And plantype = :li_plantype; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '因网络或其它原因导致更新生产计划用料需求失败'+"~n"+sqlca.SQLErrText Goto ext End If Update u_orderrqmtrl_tree Set truerqqty = truerqqty + :ld_stopqty, rqqty = rqqty + case :li_ifwfjgup when 2 then :ld_stopqty else 0 End, scllqty = scllqty + case :li_ifwfjgup when 2 then :ld_stopqty else 0 End Where scid = :arg_scid And orderid = :ll_porderid And printid = :ll_printid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '因网络或其它原因导致更新生产计划运算数据失败'+"~n"+sqlca.SQLErrText Goto ext End If Delete From u_order_ml_stop_mtrl_his Where scid = :arg_scid And orderid = :arg_orderid And porderid = :ll_porderid And printid = :ll_printid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除终止记录操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Next End If ext: Destroy ds_tree Destroy ds_stop_his If rslt = 0 Then Rollback; ElseIf rslt = 1 And arg_ifcommit Then Commit; End If Return rslt end function public function integer uof_mtrl_change (long arg_scid, long arg_orderid, decimal arg_rate, integer arg_type, integer arg_ifchange, integer arg_ifaddhis, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_i,cnt,ll_Ordertype,ll_porderid Long ll_scid,ll_orderid,ll_mtrlid,ll_wrkgrpid String ls_status,ls_woodcode,ls_pcode Decimal ld_sqty,ld_dqty,ld_orderqty String ls_mtrlcode uo_order_ml_mtrl_change uo_mtrl_ch uo_mtrl_ch = Create uo_order_ml_mtrl_change s_order_ml_mtrl_change arg_s_mtrl_ch s_order_ml_mtrl_change_mx arg_s_mx[],arg_s_empty_mx[] SELECT ordertype,porderid,orderqty INTO :ll_Ordertype,:ll_porderid,:ld_orderqty FROM u_order_ml WHERE u_order_ml.scid = :arg_scid And u_order_ml.orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询指令单类型失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //yyx2014-8-14注释,主计划为指令单 //IF ll_Ordertype <> 4 THEN // rslt = 1 // GOTO ext //END IF IF arg_ifchange = 1 THEN IF ll_Ordertype = 4 THEN SELECT count(*) INTO :cnt FROM u_requestbuymxmx WHERE u_requestbuymxmx.scid = :arg_scid And u_requestbuymxmx.orderid = :ll_porderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询指令单相关主计划是否已开申购单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN rslt = 2 GOTO ext END IF ELSE SELECT count(*) INTO :cnt FROM u_requestbuymxmx WHERE u_requestbuymxmx.scid = :arg_scid And u_requestbuymxmx.orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询指令单相关主计划是否已开申购单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN rslt = 2 GOTO ext END IF END IF END IF datastore ds_scll ds_scll = Create datastore ds_scll.DataObject = 'ds_order_stop_mtrl_change' ds_scll.SetTransObject(sqlca) ds_scll.Retrieve(arg_scid,arg_orderid,arg_type) FOR ll_i = 1 To ds_scll.RowCount() ll_scid = ds_scll.Object.u_orderrqmtrl_scll_scid[ll_i] ll_orderid = ds_scll.Object.u_orderrqmtrl_scll_orderid[ll_i] ll_mtrlid = ds_scll.Object.u_orderrqmtrl_scll_mtrlid[ll_i] ll_wrkgrpid = ds_scll.Object.u_orderrqmtrl_scll_wrkgrpid[ll_i] ls_status = ds_scll.Object.u_orderrqmtrl_scll_status[ll_i] ls_woodcode = ds_scll.Object.u_orderrqmtrl_scll_woodcode[ll_i] ls_pcode = ds_scll.Object.u_orderrqmtrl_scll_pcode[ll_i] IF arg_type = 0 THEN ld_sqty = ds_scll.Object.u_orderrqmtrl_scll_truerqqty[ll_i] IF arg_rate * ds_scll.Object.u_orderrqmtrl_scll_truerqqty[ll_i] > ds_scll.Object.dstrqty[ll_i] THEN ld_dqty = arg_rate * ds_scll.Object.u_orderrqmtrl_scll_truerqqty[ll_i] ELSE ld_dqty = ds_scll.Object.dstrqty[ll_i] END IF ELSE ld_sqty = ds_scll.Object.u_orderrqmtrl_scll_truerqqty[ll_i] ld_dqty = ds_scll.Object.u_orderrqmtrl_scll_truerqqty_ori[ll_i] END IF ls_mtrlcode = ds_scll.Object.u_mtrldef_mtrlcode[ll_i] arg_s_mtrl_ch.scid = ll_scid arg_s_mtrl_ch.billid = 0 arg_s_mtrl_ch.billdate = DateTime(Today(),Time(0)) arg_s_mtrl_ch.billemp = publ_operator arg_s_mtrl_ch.relcode = '' arg_s_mtrl_ch.dscrp = '指令单终止自动生成' //注意修改时这里时要修改uo_order_ml_mtrl_change.audit arg_s_mtrl_ch.orderid = ll_orderid arg_s_mtrl_ch.smtrlid = ll_mtrlid arg_s_mtrl_ch.wrkgrpid = ll_wrkgrpid arg_s_mtrl_ch.status = ls_status arg_s_mtrl_ch.woodcode = ls_woodcode arg_s_mtrl_ch.pcode = ls_pcode arg_s_mtrl_ch.dmtrlid = ll_mtrlid arg_s_mtrl_ch.sqty = ld_sqty arg_s_mtrl_ch.dqty = ld_dqty arg_s_mtrl_ch.billtype = 1 arg_s_mtrl_ch.ifchange = 1 //加明细 arg_s_mx = arg_s_empty_mx IF f_addmx_mtrl_change(ll_scid,ll_orderid,ll_mtrlid,ll_wrkgrpid,ls_status,ls_woodcode,ls_pcode,ld_sqty,ld_dqty,arg_s_mx,arg_msg) = 0 THEN rslt = 0 arg_msg = '需求明细第'+String(ll_i)+'行,物料:'+ls_mtrlcode+',生成生产指令单换料单失败,原因:计算单据明细失败.'+arg_msg GOTO ext END IF arg_s_mtrl_ch.arg_s_mx = arg_s_mx IF uo_mtrl_ch.Save(arg_s_mtrl_ch,publ_operator,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '需求明细第'+String(ll_i)+'行,物料:'+ls_mtrlcode+',生成生产指令单换料单失败,'+arg_msg GOTO ext END IF IF uo_mtrl_ch.audit(uo_mtrl_ch.uo_billid,publ_operator,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '需求明细第'+String(ll_i)+'行,物料:'+ls_mtrlcode+',审核相关生产指令单换料单失败,'+arg_msg GOTO ext END IF NEXT IF uof_stop_tree (arg_scid,arg_orderid,ld_orderqty * (1 - arg_rate),arg_type,arg_ifaddhis,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '终止相关外协上下级需求失败,'+arg_msg GOTO ext END IF ext: Destroy uo_mtrl_ch Destroy ds_scll IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_c_stopjj (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 datetime null_dt setnull(null_dt) rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) IF rslt = 0 THEN GOTO ext IF stopjj = 0 THEN rslt = 0 arg_msg = '没有执行过终止计件操作,不能取消终止' GOTO ext END IF UPDATE u_order_ml SET stopjj = 0, stopjjemp = '', stopjjdate = :null_dt, stopjjreason = '' WHERE orderid = :arg_orderid AND scid = :arg_scid and stopjj = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致取消终止计件操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF Return (rslt) end function public function integer uof_workprice_parm (long arg_mtrlid, string arg_wpcode, string arg_procode, decimal arg_proqty, string arg_parmstr, integer arg_kind, ref string arg_value_str, ref decimal arg_value_dec);//arg_kind 0-单价, 1 -数量 //如果外部调用,必须先执行 p_getinfo 获取指令单信息 Int rslt = 1 Decimal ld_splitrate String ls_mtrlsectype,ls_zxmtrlmode,ls_usermtrlmode,ls_mtrlmode Decimal arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9 Decimal ld_eqworkhour,ld_Workhour,ld_beforehour,ld_afterhour,ld_eq_empnum String ls_parmname Decimal ld_parmvalue,ld_hourpay_cmp,ld_workprice,ld_workqty_ori,ld_hourpay,ld_workprice_def Long ll_j String s_rtn String ls_ban_gydscrp,ls_ban_pfklmode string ls_mtrltype datastore ds_pricestr ds_pricestr = Create datastore ds_pricestr.DataObject = 'ds_pricestr_cmpl' ds_pricestr.SetTransObject(sqlca) datastore ds_parm ds_parm = Create datastore ds_parm.DataObject = 'ds_workprice_parm_def' ds_parm.SetTransObject(sqlca) ds_parm.Retrieve() Select splitrate, mtrlsectype, zxmtrlmode, usermtrlmode, mtrlmode, mtrltype Into :ld_splitrate, :ls_mtrlsectype, :ls_zxmtrlmode, :ls_usermtrlmode, :ls_mtrlmode, :ls_mtrltype From u_mtrldef Where mtrlid = :arg_mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 Goto ext End If Select gydscrp,pfklmode Into :ls_ban_gydscrp,:ls_ban_pfklmode From u_mtrldef_ban Where mtrlid = :arg_mtrlid; If sqlca.SQLCode <> 0 Then ls_ban_gydscrp = '' ls_ban_pfklmode = '' End If Select workprice Into :ld_workprice_def From u_sc_workprocedure Where code = :arg_procode; If sqlca.SQLCode <> 0 Then rslt = 0 Goto ext End If Select u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, u_sc_workprice.eq_empnum, u_sc_workprice.arg1, u_sc_workprice.arg2, u_sc_workprice.arg3, u_sc_workprice.arg4, u_sc_workprice.arg5, u_sc_workprice.arg6, u_sc_workprice.arg7, u_sc_workprice.arg8, u_sc_workprice.arg9, u_sc_workprice.workprice, u_sc_workprice.workqty, isnull(u_worktype.hourpay,0) as hourpay Into :ld_eqworkhour, :ld_Workhour, :ld_beforehour, :ld_afterhour, :ld_eq_empnum, :arg1, :arg2, :arg3, :arg4, :arg5, :arg6, :arg7, :arg8, :arg9, :ld_workprice, :ld_workqty_ori, :ld_hourpay From u_sc_workprice LEFT Outer JOIN u_worktype ON u_sc_workprice.worktype = u_worktype.worktype Where u_sc_workprice.mtrlid = :arg_mtrlid And u_sc_workprice.procode = :arg_procode And u_sc_workprice.wpcode = :arg_wpcode; If sqlca.SQLCode <> 0 Then rslt = 0 Goto ext End If //替换自定义参数 For ll_j = 1 To ds_parm.RowCount() ls_parmname = ds_parm.Object.parmname[ll_j] ld_parmvalue = ds_parm.Object.parmvalue[ll_j] ld_parmvalue = Dec(String(ld_parmvalue,'#,##0.##########')) ls_parmname = '['+ls_parmname+']' Select Top 1 Replace( :arg_parmstr,:ls_parmname,:ld_parmvalue) Into :arg_parmstr From u_user; Next Select Top 1 Replace( :arg_parmstr,'不包含',' not like ') Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'不等于','<>') Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'包含',' like ') Into :arg_parmstr From u_user; orderqty = Dec(String(orderqty,'#,##0.##########')) Select Top 1 Replace( :arg_parmstr,'指令单数量',:orderqty) Into :arg_parmstr From u_user; arg_proqty = Dec(String(arg_proqty,'#,##0.##########')) Select Top 1 Replace( :arg_parmstr,'数量',:arg_proqty) Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'等于',' = ') Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'大于',' > ') Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'小于',' < ') Into :arg_parmstr From u_user; If arg_proqty > ld_splitrate And ld_splitrate <> 0 Then ld_hourpay_cmp = (ld_splitrate * (ld_Workhour + ld_eqworkhour * ld_eq_empnum) + ld_beforehour + ld_afterhour) / ld_splitrate * ld_hourpay Else ld_hourpay_cmp = (arg_proqty * (ld_Workhour + ld_eqworkhour * ld_eq_empnum) + ld_beforehour + ld_afterhour) / arg_proqty * ld_hourpay End If ld_hourpay_cmp = Dec(String(ld_hourpay_cmp,'#,##0.##########')) Select Top 1 Replace( :arg_parmstr,'按时薪计算',:ld_hourpay_cmp) Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'物料类别',"'"+:ls_mtrltype+"'") Into :arg_parmstr From u_user; If Pos(arg_parmstr,'配置2') > 0 Then Select Top 1 Replace( :arg_parmstr,'配置2',"'"+:pcode+"'") Into :arg_parmstr From u_user; End If If Pos(arg_parmstr,'配置1') > 0 Then Select Top 1 Replace( :arg_parmstr,'配置1',"'"+:woodcode+"'") Into :arg_parmstr From u_user; End If If Pos(arg_parmstr,'配置') > 0 Then Select Top 1 Replace( :arg_parmstr,'配置',"'"+:status_mode+"'") Into :arg_parmstr From u_user; End If Select Top 1 Replace( :arg_parmstr,'物料开料规格',"'"+:ls_ban_pfklmode+"'") Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'指令单开料规格',"'"+:pfklmode+"'") Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'工艺说明',"'"+:gydscrp+"'") Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'物料工艺备注',"'"+:ls_ban_gydscrp+"'") Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'自定义1',"'"+:ls_mtrlsectype+"'") Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'自定义2',"'"+:ls_zxmtrlmode+"'") Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'自定义3',"'"+:ls_usermtrlmode+"'") Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'物料规格',"'"+:ls_mtrlmode+"'") Into :arg_parmstr From u_user; ld_workprice = Dec(String(ld_workprice,'#,##0.##########')) Select Top 1 Replace( :arg_parmstr,'工价表工价',:ld_workprice) Into :arg_parmstr From u_user; ld_workprice_def = Dec(String(ld_workprice_def,'#,##0.##########')) Select Top 1 Replace( :arg_parmstr,'工序工价',:ld_workprice_def) Into :arg_parmstr From u_user; Select Top 1 Replace( :arg_parmstr,'生产批号',"'"+:taskrelcode+"'") Into :arg_parmstr From u_user; arg1 = Dec(String(arg1,'#,##0.##########')) Select Top 1 Replace( :arg_parmstr,'参数1',:arg1) Into :arg_parmstr From u_user; arg2 = Dec(String(arg2,'#,##0.##########')) Select Top 1 Replace( :arg_parmstr,'参数2',:arg2) Into :arg_parmstr From u_user; arg3 = Dec(String(arg3,'#,##0.##########')) Select Top 1 Replace( :arg_parmstr,'参数3',:arg3) Into :arg_parmstr From u_user; arg4 = Dec(String(arg4,'#,##0.##########')) Select Top 1 Replace( :arg_parmstr,'参数4',:arg4) Into :arg_parmstr From u_user; arg5 = Dec(String(arg5,'#,##0.##########')) Select Top 1 Replace( :arg_parmstr,'参数5',:arg5) Into :arg_parmstr From u_user; arg6 = Dec(String(arg6,'#,##0.##########')) Select Top 1 Replace( :arg_parmstr,'参数6',:arg6) Into :arg_parmstr From u_user; arg7 = Dec(String(arg7,'#,##0.##########')) Select Top 1 Replace( :arg_parmstr,'参数7',:arg7) Into :arg_parmstr From u_user; arg8 = Dec(String(arg8,'#,##0.##########')) Select Top 1 Replace( :arg_parmstr,'参数8',:arg8) Into :arg_parmstr From u_user; arg9 = Dec(String(arg9,'#,##0.##########')) Select Top 1 Replace( :arg_parmstr,'参数9',:arg9) Into :arg_parmstr From u_user; arg_value_str = arg_parmstr ds_pricestr.DataObject = 'ds_pricestr_cmpl' ds_pricestr.SetTransObject(sqlca) ds_pricestr.Retrieve() ds_pricestr.Modify('cmpl.expression= "'+arg_parmstr+'"') s_rtn = String(ds_pricestr.Object.cmpl[1]) If arg_kind = 0 Then If s_rtn = 'false' Then arg_value_dec = 0 Else arg_value_dec = Round(Dec(s_rtn),5) End If ElseIf arg_kind = 1 Then If s_rtn = 'false' Then arg_value_dec = arg_proqty Else arg_value_dec = Round(Dec(s_rtn),5) * (arg_proqty / ld_workqty_ori) End If End If ext: Destroy ds_pricestr Destroy ds_parm Return rslt end function public function integer uof_tryfinish_packorder_buy (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt rslt = 1 rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) IF rslt = 0 THEN GOTO ext Decimal ld_qty Int li_ifpackpro,li_ifpack,li_pordermtrl_ordertype Long ll_porder_mtrlid DateTime null_dt SetNull(null_dt) Long ll_cnt_zl,ll_cnt_zl_finish Int ll_pack1_finish SELECT u_mtrldef.ifpackpro,u_mtrldef.ordertype,u_mtrldef.mtrlid INTO :li_ifpackpro,:li_pordermtrl_ordertype,:ll_porder_mtrlid FROM u_mtrldef,u_order_ml WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid AND u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关主计划产品是否全包件产品失败,'+sqlca.SQLErrText GOTO ext END IF IF li_ifpackpro = 0 THEN //不是全包件产品,退出函数,否则检查主计划相关指令单是否全部完成 rslt = 1 GOTO ext END IF Long ll_cnt,cnt ll_cnt = 0 IF li_ifpackpro = 1 THEN SELECT count(*) INTO :ll_cnt FROM u_orderrqmtrl,u_mtrldef WHERE u_orderrqmtrl.mtrlid = u_mtrldef.mtrlid AND u_orderrqmtrl.orderid = :arg_orderid AND u_orderrqmtrl.scid = :arg_scid AND ( u_mtrldef.ifpack = 1 ) And (u_orderrqmtrl.plantype = 0 Or u_orderrqmtrl.plantype = 2) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询包件产品主生产计划相关生产需求失败'+sqlca.SQLErrText GOTO ext END IF //1.先检查主生产计划自制需求,需求数是否等于用料数,不等即说明有分配库存,跳过判断完成比例 //2.查询相应部件的完成情况,按需求量对比后得出主计划物料的完成数量 IF ll_cnt > 0 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_orderrqmtrl,u_mtrldef WHERE u_orderrqmtrl.mtrlid = u_mtrldef.mtrlid AND ( u_mtrldef.ifpack = 1 ) AND u_orderrqmtrl.orderid = :arg_orderid AND u_orderrqmtrl.scid = :arg_scid AND u_orderrqmtrl.inqty < u_orderrqmtrl.truerqqty And (u_orderrqmtrl.plantype = 0 Or u_orderrqmtrl.plantype = 2) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询包件产品主生产计划相关指令单是否全部完成失败'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN //相关自制需求全部完成,更新主生产计划已完成数及状态 UPDATE u_order_ml SET status = 5, accomplishdate = getdate(), accomplishemp = :publ_operator, acmpqty = orderqty WHERE ( u_order_ml.orderid = :arg_orderid ) And (u_order_ml.scid = :arg_scid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其他原因导致生产计划完成状态设置操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //更新分离排产包件产品指令完成数 IF li_pordermtrl_ordertype = 1 THEN UPDATE u_order_ml SET status = 5, accomplishdate = getdate(), accomplishemp = :publ_operator, acmpqty = orderqty FROM u_order_ml WHERE (u_order_ml.scid = :arg_scid) AND (u_order_ml.porderid = :arg_orderid) And (u_order_ml.mtrlid = :ll_porder_mtrlid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新包件产品主生产计划对应【指令单分离】相关对应产品指令单状态操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF ELSE //如果没有全部完成,则取自制需求的最小完成率去计算主生产计划的完成数 Decimal ld_minrate SELECT min(inqty / truerqqty) INTO :ld_minrate FROM u_orderrqmtrl,u_mtrldef WHERE u_orderrqmtrl.mtrlid = u_mtrldef.mtrlid AND u_orderrqmtrl.orderid = :arg_orderid AND u_orderrqmtrl.scid = :arg_scid AND ( u_mtrldef.ifpack = 1 ) AND (u_orderrqmtrl.plantype = 0 OR u_orderrqmtrl.plantype = 2) And u_orderrqmtrl.truerqqty > 0 ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关包件产品主生产计划自制需求完成率失败'+"~n"+sqlca.SQLErrText GOTO ext END IF UPDATE u_order_ml SET status = 1, accomplishdate = :null_dt, accomplishemp = '', acmpqty = orderqty * :ld_minrate WHERE ( u_order_ml.orderid = :arg_orderid ) And (u_order_ml.scid = :arg_scid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新包件产品主生产计划状态操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //更新分离排产包件产品指令完成数 IF li_pordermtrl_ordertype = 1 THEN UPDATE u_order_ml SET status = 1, accomplishdate = :null_dt, accomplishemp = '', acmpqty = orderqty * :ld_minrate WHERE (u_order_ml.scid = :arg_scid) AND (u_order_ml.porderid = :arg_orderid) And (u_order_ml.mtrlid = :ll_porder_mtrlid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新包件产品主生产计划对应【指令单分离】相关对应产品指令单状态操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF 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 uof_reccl_cf (long arg_scid, long arg_orderid, s_order_ml_rqmtrl_scll arg_s_mtrl_scll, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_i DELETE FROM u_OrderRqMtrl_scll WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '删除原领料明细失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF FOR ll_i = 1 To UpperBound(arg_s_mtrl_scll.mtrlid) INSERT INTO u_OrderRqMtrl_scll (scid, orderid, mtrlid, status, woodcode, pcode, truerqqty, wrkGrpid, ifchanged, truerqqty_ori, stopemp, stopdate, ifchmtrlbillstop, stopreason, sclldate) VALUES (:arg_scid, :arg_orderid, :arg_s_mtrl_scll.mtrlid[ll_i], :arg_s_mtrl_scll.status[ll_i], :arg_s_mtrl_scll.woodcode[ll_i], :arg_s_mtrl_scll.pcode[ll_i], :arg_s_mtrl_scll.truerqqty[ll_i], :arg_s_mtrl_scll.wrkGrpid[ll_i], :arg_s_mtrl_scll.ifchanged[ll_i], :arg_s_mtrl_scll.truerqqty_ori[ll_i], :arg_s_mtrl_scll.stopemp[ll_i], :arg_s_mtrl_scll.stopdate[ll_i], :arg_s_mtrl_scll.ifchmtrlbillstop[ll_i], :arg_s_mtrl_scll.stopreason[ll_i], :arg_s_mtrl_scll.sclldate[ll_i]); IF sqlca.SQLCode <> 0 THEN arg_msg = '建立生产计划物料领料明细失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF Return(rslt) end function public function integer uof_order_add_tree_barcode (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_row,ll_i,ll_j,ll_m,ll_n Long cnt DateTime server_dt Long ll_pid Long ll_fail = 0,ll_suc = 0 Long ll_cnt_lp = 0 String arg_msg_tmp = '',ls_ordercode Long ll_swkpid,ll_owkpid,ll_printid,ll_workgroupid Decimal ld_orderqty,ld_qty String ls_barcode String ls_relname,ls_partname Int li_if_inherit String ls_partname_inherit String ls_str Long ll_cnt Long ll_k Long ll_orderid_f[],ll_scid_f[],ll_f_cnt = 0,ll_l String ls_ordercode_f[] Long ll_workgroupid_arr[],ll_empty_id[] Decimal ld_minqty_arr[],ld_maxqty_arr[],ll_empty_qty[] Decimal ld_qty_total Long ll_workgroupid_update,ll_mxbt_wgid Decimal ld_baseqty datastore ds_tree ds_tree = Create datastore ds_tree.DataObject = 'ds_OrderMtrl_workgroup_tree' ds_tree.SetTransObject(sqlca) datastore ds_workgroupid ds_workgroupid = Create datastore ds_workgroupid.DataObject = 'ds_find_ordermtrl_workgroupid' ds_workgroupid.SetTransObject(sqlca) datastore ds_inherit ds_inherit = Create datastore ds_inherit.DataObject = 'ds_find_inherit_barcode' ds_inherit.SetTransObject(sqlca) Select Top 1 getdate() Into :server_dt From u_user ; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "查询操作失败,日期 " Goto ext End If Select count(*) Into :cnt From u_OrderMtrl_workgroup_tree Where scid = :arg_scid And orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询生产指令单是否已生成条码工组进度失败,'+sqlca.SQLErrText Goto ext End If If cnt = 0 Then If uof_order_add_wkp_tree(arg_scid,arg_orderid,arg_msg,True) = 0 Then rslt = 0 Goto ext End If End If Select count(*) Into :cnt From u_OrderMtrl_workgroup_tree Where scid = :arg_scid And orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询生产指令单是否已生成条码工组进度失败,'+sqlca.SQLErrText Goto ext End If If cnt = 0 Then rslt = 0 arg_msg = '生产指令单没有生成条码工组进度,不能执行生成条码操作' Goto ext End If Select count(*) Into :cnt From u_ordermtrl_workgroup_barcode Where scid = :arg_scid And orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询生产指令单是否已生成条码失败,'+sqlca.SQLErrText Goto ext End If If cnt > 0 Then rslt = 0 arg_msg = '生产指令单已生成过条码,不能重复生成' Goto ext End If ds_tree.Retrieve(arg_scid,arg_orderid) //Open(w_sys_wait_2jdt) //初始化进度条 //w_sys_wait_2jdt.Show() //w_sys_wait_2jdt.wf_accepttol(ds_tree.RowCount()) For ll_i = 1 To ds_tree.RowCount() // w_sys_wait_2jdt.wf_inc(ll_i) If ds_tree.Object.if_barcode[ll_i] <> 1 Then Continue ll_swkpid = ds_tree.Object.swkpid[ll_i] ll_owkpid = ds_tree.Object.owkpid[ll_i] ld_orderqty = ds_tree.Object.orderqty[ll_i] ll_printid = ds_tree.Object.printid[ll_i] ls_relname = ds_tree.Object.relname[ll_i] ls_partname = ds_tree.Object.partname[ll_i] li_if_inherit = ds_tree.Object.if_inherit[ll_i] ls_partname_inherit = ds_tree.Object.partname_inherit[ll_i] ll_workgroupid = ds_tree.Object.workgroupid[ll_i] ld_baseqty = ds_tree.Object.baseqty[ll_i] If ld_baseqty = 0 Then ld_baseqty = 1 If Trim(ls_relname) = Trim(ls_partname) Then ls_str = Trim(ls_partname) Else ls_str = Trim(ls_relname) +'-'+ Trim(ls_partname) End If // w_sys_wait_2jdt.st_msg.Text = "正在生成条码:"+ls_str //进度信息 // w_sys_wait_2jdt.wf_accepttol2(Ceiling(ld_orderqty)) ds_workgroupid.Retrieve(arg_scid,arg_orderid,ll_swkpid,ll_owkpid) ll_workgroupid_arr = ll_empty_id ld_minqty_arr = ll_empty_qty ld_maxqty_arr = ll_empty_qty ll_mxbt_wgid = 0 For ll_m = 1 To ds_workgroupid.RowCount() ll_mxbt_wgid++ ll_workgroupid_arr[ll_mxbt_wgid] = ds_workgroupid.Object.workgroupid[ll_m] If ll_m = 1 Then ld_minqty_arr[ll_mxbt_wgid] = 1 ld_maxqty_arr[ll_mxbt_wgid] = ds_workgroupid.Object.orderqty[ll_m] Else ld_minqty_arr[ll_mxbt_wgid] = ds_workgroupid.Object.orderqty[ll_m - 1] + 1 ld_maxqty_arr[ll_mxbt_wgid] = ds_workgroupid.Object.orderqty[ll_m] + ds_workgroupid.Object.orderqty[ll_m - 1] End If Next ld_qty_total = 0 If li_if_inherit = 1 Then If ls_relname <> '成品' Then ds_inherit.Retrieve(arg_scid,arg_orderid,ls_relname,ls_partname_inherit) Else ds_inherit.Retrieve(arg_scid,arg_orderid,ls_partname_inherit,ls_partname_inherit) End If If ds_inherit.RowCount() <> Ceiling(Round(ld_orderqty/ld_baseqty,10)) Then // Close(w_sys_wait_2jdt) Rollback; Destroy ds_tree Destroy ds_workgroupid Destroy ds_inherit ll_f_cnt++ ll_scid_f[ll_f_cnt] = arg_scid ll_orderid_f[ll_f_cnt] = arg_orderid ls_ordercode_f[ll_f_cnt] = ls_ordercode rslt = 0 arg_msg = '生成条码失败,继承条码数量与被继承条码数量不一致 '+ls_partname_inherit + '~r~n' Goto _del_tmp End If End If For ll_j = 1 To Ceiling(Round(ld_orderqty/ld_baseqty,10)) If ll_j = Ceiling(Round(ld_orderqty/ld_baseqty,10)) Then ld_qty = ld_orderqty - (ll_j - 1)* ld_baseqty Else ld_qty = ld_baseqty End If ld_qty_total = ld_qty_total + ld_qty ll_workgroupid_update = 0 If ll_mxbt_wgid = 0 Then ll_workgroupid_update = ll_workgroupid Else For ll_n = 1 To ll_mxbt_wgid If ld_qty_total >= ld_minqty_arr[ll_n] And ld_qty_total <= ld_maxqty_arr[ll_n] Then ll_workgroupid_update = ll_workgroupid_arr[ll_n] Exit End If Next End If If ll_workgroupid_update = 0 Then ll_workgroupid_update = ll_workgroupid End If If li_if_inherit = 1 Then ls_barcode = ds_inherit.Object.barcode[ll_j] Else ls_barcode = getid(0,"BARCODE1",Date(server_dt),True,sqlca) End If ll_pid++ Insert Into u_ordermtrl_workgroup_barcode (scid, orderid, printid, pid, barcode, qty, swkpid, owkpid, relname, partname, if_inherit, partname_inherit, workgroupid) Values (:arg_scid, :arg_orderid, :ll_printid, :ll_pid, :ls_barcode, :ld_qty, :ll_swkpid, :ll_owkpid, :ls_relname, :ls_partname, :li_if_inherit, :ls_partname_inherit, :ll_workgroupid_update); If sqlca.SQLCode <> 0 Then // Close(w_sys_wait_2jdt) Rollback; Destroy ds_tree ll_f_cnt++ ll_scid_f[ll_f_cnt] = arg_scid ll_orderid_f[ll_f_cnt] = arg_orderid ls_ordercode_f[ll_f_cnt] = ls_ordercode rslt = 0 arg_msg = '生成条码失败_2,'+sqlca.SQLErrText + '~r~n' Goto _del_tmp End If If arg_ifcommit Then Commit; End If // w_sys_wait_2jdt.wf_inc2(ll_j) Next // w_sys_wait_2jdt.wf_inc(ll_i) Next //Close(w_sys_wait_2jdt) _del_tmp: For ll_l = 1 To ll_f_cnt Delete From u_ordermtrl_workgroup_barcode Where scid = :ll_scid_f[ll_l] And orderid = :ll_orderid_f[ll_l]; If sqlca.SQLCode <> 0 Then Rollback; rslt = 0 arg_msg = arg_msg + ls_ordercode_f[ll_l]+ ' ' +'删除临时生成条码失败,'+sqlca.SQLErrText Continue End If If arg_ifcommit Then Commit; End If Next ext: Return rslt end function public function integer acceptmx (string arg_relcode, datetime arg_orderdate, long arg_taskid, string arg_taskcode, long arg_cusid, long arg_mtrlid, string arg_status_mode, string arg_woodcode, string arg_pcode, decimal arg_orderqty, string arg_dscrp, string arg_assign_emp, datetime arg_requiredate, integer arg_ordertype, string arg_taskrelcode, string arg_pfcode, long arg_taskmxid, long arg_porderid, long arg_utid, long arg_wrkgrpid, string arg_gydscrp, string arg_pfklmode, long arg_pforderid, string arg_pfordercode, decimal arg_pfqty, string arg_secdscrp, string arg_thdscrp, long arg_taskscid, datetime arg_perfinishdate, long arg_storageid, long arg_tmpid, integer arg_level, string arg_typename, string arg_outtypestr, long arg_pzlorderid, integer arg_iffg, integer arg_ifauto, integer arg_if_inherit, decimal arg_addqty, string arg_wpcode, integer arg_pctype, ref string arg_msg);Integer rslt = 1,cnt = 0 String ls_mtrlcode,ls_pordercode,ls_mtrlname Long ls_i Long ll_statustype,li_mtrlorigin_mtrl Int li_bantype_mtrl Int li_ifpban_save,li_ifupban_save Decimal ld_capacity,ld_capacity_zj s_mtrlcfg_expr s_pz[] String ls_status_zj Long ll_i String ls_cusname,ls_p_taskrelcode,ls_saletaskcode,ls_saletaskrelcode Long ll_p_cusid,ll_p_taskid,ll_p_taskmxid,ll_p_ordertype Int li_ordertype,li_ifpackpro,li_ifpack,li_ifselforder,li_iffp Int li_p_ordertype_mtrldef,li_p_ifpackpro,li_p_ifpack Int li_ifmrppackpf //检查下级有无非包件【是否包件清单分离】 Long ll_pf_cnt_pack0,ll_pf_cnt_packin Int li_inwareflag,li_outscllflag Decimal ld_SaleQty,ld_AssignQty,ld_ordermx_qty Long ll_p_mtrlid,ll_upmtrlid String ls_p_status,ls_p_woodcode,ls_p_pcode,ls_p_pfcode Long ll_typeid Int li_ifbj Long ll_lp,ll_printid,ll_lp_tmp Int li_fpkind Boolean lb_cd = True Int li_ifwforder Decimal ld_notmrpqty = 0 Long ll_p_taskscid datastore ds_find_pmtrlid ds_find_pmtrlid = Create datastore ds_find_pmtrlid.DataObject = 'ds_orderrqmtrl_tree_find_pmtrlid' ds_find_pmtrlid.SetTransObject(sqlca) IF uo_option_def_bom = -1000 THEN rslt = 0 arg_msg = '选项:[013]生产计划审核时需要检查是否已定义物料清单,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_order_ml_use_zl = -1000 THEN rslt = 0 arg_msg = '选项:[073]系统使用指令单排产,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_order_mtrlware = -1000 THEN rslt = 0 arg_msg = '选项:[143]生产计划审核增加0库存,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_inware_mtrlcuscode = -1000 THEN rslt = 0 arg_msg = '选项:[138]生产进仓单产品批号策略按指令单号,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_order_capacity = -1000 THEN rslt = 0 arg_msg = '选项:[304]指令单保存按车间产能总量限制,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_order_ml_zl_checkdate = -1000 THEN rslt = 0 arg_msg = '选项:[313]指令单保存不检查交货日期,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_bujian_notmrpqty = -1000 THEN rslt = 0 arg_msg = '选项:[388]补件类型主计划下属的半成品不参与其他计划的可用数,读取初始默认值失败,操作取消!' GOTO ext END IF IF IsNull(arg_relcode) THEN arg_relcode = '' IF IsNull(arg_taskid) THEN arg_taskid = 0 IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_cusid) THEN arg_cusid = 0 IF IsNull(arg_status_mode) THEN arg_status_mode = '' IF IsNull(arg_woodcode) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_orderqty) THEN arg_orderqty = 0 IF IsNull(arg_Assign_emp) THEN arg_Assign_emp = '' IF IsNull(arg_taskcode) THEN arg_taskcode = '' IF IsNull(arg_taskrelcode) THEN arg_taskrelcode = '' IF IsNull(arg_pfcode) THEN arg_pfcode = '' IF IsNull(arg_ordertype) THEN arg_ordertype = 0 IF IsNull(arg_taskmxid) THEN arg_taskmxid = 0 IF IsNull(arg_porderid) THEN arg_porderid = 0 IF IsNull(arg_utid) THEN arg_utid = 0 IF IsNull(arg_wrkgrpid) THEN arg_wrkgrpid = 0 IF IsNull(arg_taskscid) THEN arg_taskscid = 0 IF IsNull(arg_outtypestr) THEN arg_outtypestr = '' IF IsNull(arg_gydscrp) THEN arg_gydscrp = '' IF IsNull(arg_pfklmode) THEN arg_pfklmode = '' IF IsNull(arg_pforderid) THEN arg_pforderid = 0 IF IsNull(arg_pfordercode) THEN arg_pfordercode = '' IF IsNull(arg_pfqty) THEN arg_pfqty = 0 IF IsNull(arg_secdscrp) THEN arg_secdscrp = '' IF IsNull(arg_thdscrp) THEN arg_thdscrp = '' IF IsNull(arg_dscrp) THEN arg_dscrp = '' IF Len(arg_dscrp) > 0 THEN arg_dscrp = ' ' + arg_dscrp IF IsNull(arg_storageid) THEN arg_storageid = 0 IF IsNull(arg_tmpid) THEN arg_tmpid = 0 IF IsNull(arg_level) THEN arg_level = 2 IF IsNull(arg_typename) THEN arg_typename = '' IF IsNull(arg_iffg) THEN arg_iffg = 0 IF IsNull(arg_ifauto) THEN arg_ifauto = 0 IF IsNull(arg_addqty) THEN arg_addqty = 0 IF IsNull(arg_wpcode) THEN arg_wpcode = '' IF arg_orderqty <= 0 THEN rslt = 1 GOTO ext END IF IF arg_Assign_emp = '' THEN arg_msg = '请输入计划负责人' rslt = 0 GOTO ext END IF IF IsNull(arg_orderdate) Or Year(Date(arg_orderdate)) < 2001 THEN rslt = 0 arg_msg = "请输入合理计划日期" GOTO ext END IF IF uo_option_order_ml_zl_checkdate = 1 THEN lb_cd = False END IF IF lb_cd THEN IF Date(arg_orderdate) > Date(arg_requiredate) THEN rslt = 0 arg_msg = "计划日期大于要求完成日期" GOTO ext END IF END IF SELECT mtrlcode, mtrlname, statusflag, capacity * capaparm, ifpack, ifpackpro, ordertype, ifselforder, iffp, mtrlorigin, bantype INTO :ls_mtrlcode, :ls_mtrlname, :ll_statustype, :ld_capacity, :li_ifpack, :li_ifpackpro, :li_ordertype, :li_ifselforder, :li_iffp, :li_mtrlorigin_mtrl, :li_bantype_mtrl FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料编号失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_ordertype <> 4 THEN //主生产计划 IF li_ifpackpro = 2 Or li_ifpackpro = 4 THEN IF uo_option_order_mtrlware = 0 THEN rslt = 0 arg_msg = '产品是个性包件产品或组合配置整排散进包件产品,选项:[143]生产计划审核增加0库存必须开启,请检查' GOTO ext END IF IF uo_option_inware_mtrlcuscode = 0 THEN rslt = 0 arg_msg = '产品是个性包件产品或组合配置整排散进包件产品,选项:[138]生产进仓单产品批号策略按指令单号必须开启,请检查' GOTO ext END IF IF arg_storageid = 0 THEN rslt = 0 arg_msg = '产品是个性包件产品或组合配置整排散进包件产品,仓库未选择,请检查' GOTO ext END IF END IF END IF IF uo_option_def_bom = 1 And ll_statustype <> 2 THEN IF arg_pfcode = '' THEN arg_msg = '物料:'+ls_mtrlcode+'请选择物料清单' rslt = 0 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_mtrl_pf WHERE mtrlid = :arg_mtrlid And pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+ls_mtrlcode+'对应物料清单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt <> 1 THEN arg_msg = '物料:'+ls_mtrlcode+'不存在或重复物料清单:'+arg_pfcode rslt = 0 GOTO ext END IF END IF IF ll_statustype = 2 THEN ld_capacity = 0 f_checkpz(arg_status_mode,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; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询子件 "+ls_status_zj+" 折算套数参数操作失败" GOTO ext END IF ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_i].qty) NEXT END IF IF arg_ordertype = 0 And uo_option_order_bh_use_yc = 1 THEN SELECT taskcode,relcode INTO :ls_saletaskcode,:ls_saletaskrelcode FROM u_saletask WHERE scid = :arg_taskscid And taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+ls_mtrlcode+'预测订单编号失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_saletaskmx WHERE scid = :arg_taskscid AND taskid = :arg_taskid And printid = :arg_taskmxid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+ls_mtrlcode+'预测订单明细资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '不存在订单明细:'+ls_mtrlcode rslt = 0 GOTO ext END IF ELSEIF arg_ordertype = 1 THEN SELECT name INTO :ls_cusname FROM u_cust Where cusid = :arg_cusid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询客户资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT taskcode,relcode,typeid INTO :ls_saletaskcode,:ls_saletaskrelcode,:ll_typeid FROM u_saletask WHERE scid = :arg_taskscid And taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+ls_mtrlcode+'订单编号失败,'+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; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+ls_mtrlcode+'相关订单的订单分类是否补件信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_ifbj = 1 THEN arg_wrkgrpid = ins_produce_wrkgrpid_bj IF uo_option_bujian_notmrpqty = 1 THEN ld_notmrpqty = arg_orderqty ELSE ld_notmrpqty = 0 END IF END IF END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_saletaskmx WHERE scid = :arg_taskscid AND taskid = :arg_taskid And printid = :arg_taskmxid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料:'+ls_mtrlcode+'订单明细资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '不存在订单明细:'+ls_mtrlcode rslt = 0 GOTO ext END IF ll_p_cusid = arg_cusid ELSEIF arg_ordertype = 4 THEN IF arg_porderid = 0 THEN arg_msg = '指令单没有上级计划' rslt = 0 GOTO ext END IF SELECT u_Order_ml.ordercode, u_Order_ml.taskrelcode, u_Order_ml.cusname, u_Order_ml.cusid, u_Order_ml.saletaskcode, u_Order_ml.saletaskrelcode, u_Order_ml.taskid, u_Order_ml.taskscid, u_Order_ml.taskmxid, u_Order_ml.ordertype, u_mtrldef.ordertype, u_mtrldef.ifpackpro, u_mtrldef.ifpack, u_Order_ml.mtrlid, u_Order_ml.status_mode, u_Order_ml.woodcode, u_Order_ml.pcode, u_Order_ml.pfcode INTO :ls_pordercode, :ls_p_taskrelcode, :ls_cusname, :ll_p_cusid, :ls_saletaskcode, :ls_saletaskrelcode, :ll_p_taskid, :ll_p_taskscid, :ll_p_taskmxid, :ll_p_ordertype, :li_p_ordertype_mtrldef, :li_p_ifpackpro, :li_p_ifpack, :ll_p_mtrlid, :ls_p_status, :ls_p_woodcode, :ls_p_pcode, :ls_p_pfcode FROM u_Order_ml INNER JOIN u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid WHERE u_Order_ml.orderid = :arg_porderid And u_Order_ml.scid = :scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询上级计划编号失败,请检查,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT u_saletype.ifbj INTO :li_ifbj FROM u_SaleTask INNER JOIN u_saletype ON u_SaleTask.typeid = u_saletype.typeid WHERE u_SaleTask.scid = :ll_p_taskscid And u_saletask.taskid = :ll_p_taskid; IF sqlca.SQLCode <> 0 THEN li_ifbj = 0 IF li_ifbj = 1 And uo_option_bujian_notmrpqty = 1 THEN ld_notmrpqty = arg_orderqty ELSE ld_notmrpqty = 0 END IF IF arg_pzlorderid = 0 THEN IF arg_taskmxid = 0 THEN arg_msg = '错误的计划:'+ls_pordercode+',自制需求明细' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_OrderRqMtrl WHERE scid = :scid AND orderid = :arg_porderid And mxpkid = :arg_taskmxid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询计划:'+ls_pordercode+',自制需求明细失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF SELECT top 1 lp,printid INTO :ll_lp,:ll_printid FROM u_orderrqmtrl_tree WHERE u_orderrqmtrl_tree.scid = :scid AND u_orderrqmtrl_tree.orderid = :arg_porderid AND u_orderrqmtrl_tree.mtrlid = :arg_mtrlid Order By u_orderrqmtrl_tree.printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询指令单所属上级自制物料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ll_upmtrlid = 0 ds_find_pmtrlid.Retrieve(scid,arg_porderid,ll_lp,ll_printid) FOR ll_i = ds_find_pmtrlid.RowCount() To 1 Step -1 IF ll_i <> ds_find_pmtrlid.RowCount() THEN IF ds_find_pmtrlid.Object.u_orderrqmtrl_tree_lp[ll_i] >= ll_lp_tmp THEN CONTINUE END IF IF ds_find_pmtrlid.Object.u_mtrldef_mtrlorigin[ll_i] = 0 THEN ll_upmtrlid = ds_find_pmtrlid.Object.u_orderrqmtrl_tree_mtrlid[ll_i] EXIT ELSE ll_lp_tmp = ds_find_pmtrlid.Object.u_orderrqmtrl_tree_lp[ll_i] END IF NEXT END IF IF arg_ordertype <> 4 And uo_option_order_ml_use_zl = 1 Or & arg_ordertype = 4 THEN IF arg_wrkgrpid = 0 THEN arg_msg = '计划或指令单没有生产车间' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_sc_wkp Where wrkGrpid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询车间资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF arg_ordertype <> 4 THEN //主生产计划 IF li_ifbj = 1 And li_mtrlorigin_mtrl = 2 THEN li_inwareflag = 1 li_outscllflag = 1 ELSE IF li_ifpackpro = 1 Or li_ifpackpro = 2 Or li_ifpackpro = 5 THEN //yyx20120820加强检查进仓包件指令 // SELECT count(*) // INTO :cnt // FROM u_PrdPF INNER JOIN // u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid // WHERE u_PrdPF.mtrlid = :arg_mtrlid // AND u_PrdPF.pfcode = :arg_pfcode // and u_mtrldef.ifpack = 0; // IF cnt > 0 THEN // li_ifmrppackpf = 1 // ELSE // li_ifmrppackpf = 0 // END IF SELECT count(*), sum(case when u_mtrldef.ifpack = 0 then 1 else 0 END), sum(case when u_mtrldef.ifpack > 0 AND (u_mtrldef.mtrlorigin = 2 OR u_mtrldef.mtrlorigin = 3) then 1 when u_mtrldef.ifpack > 0 AND u_mtrldef.mtrlorigin = 0 AND u_mtrldef.ifselforder = 3 then 1 else 0 END) INTO :cnt,:ll_pf_cnt_pack0,:ll_pf_cnt_packin FROM u_PrdPF INNER JOIN u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid WHERE u_PrdPF.mtrlid = :arg_mtrlid And u_PrdPF.pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料清单是否存在非包件失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_pf_cnt_pack0 > 0 THEN li_ifmrppackpf = 1 ELSE IF cnt = ll_pf_cnt_packin THEN li_ifmrppackpf = 1 ELSE li_ifmrppackpf = 0 END IF END IF // ELSE li_ifmrppackpf = 0 END IF IF li_ifpackpro = 0 And li_ordertype = 0 THEN li_inwareflag = 1 li_outscllflag = 1 ELSEIF li_ifpackpro = 0 And li_ordertype = 1 THEN li_inwareflag = 0 li_outscllflag = 0 ElseIf (li_ifpackpro = 1 Or li_ifpackpro = 5) And li_ordertype = 0 And li_ifmrppackpf = 0 THEN li_inwareflag = 0 li_outscllflag = 0 ElseIf (li_ifpackpro = 1 Or li_ifpackpro = 5) And li_ordertype = 0 And li_ifmrppackpf = 1 THEN li_inwareflag = 0 li_outscllflag = 1 ElseIf (li_ifpackpro = 1 Or li_ifpackpro = 5) And li_ordertype = 1 And li_ifmrppackpf = 0 THEN li_inwareflag = 0 li_outscllflag = 0 ElseIf (li_ifpackpro = 1 Or li_ifpackpro = 5) And li_ordertype = 1 And li_ifmrppackpf = 1 THEN li_inwareflag = 0 li_outscllflag = 0 ELSEIF li_ifpackpro = 2 And li_ordertype = 1 THEN li_inwareflag = 0 li_outscllflag = 0 ELSEIF li_ifpackpro = 3 And li_ordertype = 0 THEN li_inwareflag = 0 li_outscllflag = 0 ELSEIF li_ifpackpro = 4 And li_ordertype = 0 THEN li_inwareflag = 0 li_outscllflag = 1 ELSEIF li_ifpackpro = 4 And li_ordertype = 1 THEN li_inwareflag = 0 li_outscllflag = 0 END IF END IF ELSE // //合并在上面代码yyx20120815 // SELECT u_mtrldef.ordertype, // u_mtrldef.ifpackpro, // u_Order_ml.mtrlid, // u_Order_ml.status_mode, // u_Order_ml.woodcode, // u_Order_ml.pcode // INTO :li_p_ordertype_mtrldef, // :li_p_ifpackpro, // :ll_p_mtrlid, // :ls_p_status, // :ls_p_woodcode, // :ls_p_pcode // FROM u_Order_ml INNER JOIN // u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid // WHERE u_Order_ml.orderid = :arg_porderid // And u_order_ml.scid = :scid; // IF sqlca.SQLCode <> 0 THEN // arg_msg = '查询上级主计划产品相关信息失败,'+sqlca.SQLErrText // rslt = 0 // GOTO ext // END IF IF li_p_ifpackpro = 1 Or li_p_ifpackpro = 2 Or li_p_ifpackpro = 5 THEN //yyx20120820加强检查进仓包件指令 // SELECT count(*) // INTO :cnt // FROM u_PrdPF INNER JOIN // u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid // WHERE u_PrdPF.mtrlid = :ll_p_mtrlid // AND u_PrdPF.pfcode = :arg_pfcode // And u_mtrldef.ifpack = 0 ; // IF sqlca.SQLCode <> 0 THEN // arg_msg = '查询物料清单是否存在非包件失败,'+sqlca.SQLErrText // rslt = 0 // GOTO ext // END IF // // IF cnt > 0 THEN // li_ifmrppackpf = 1 // ELSE // li_ifmrppackpf = 0 // END IF SELECT count(*), sum(case when u_mtrldef.ifpack = 0 then 1 else 0 END), sum(case when u_mtrldef.ifpack > 0 AND (u_mtrldef.mtrlorigin = 2 OR u_mtrldef.mtrlorigin = 3) then 1 when u_mtrldef.ifpack > 0 AND u_mtrldef.mtrlorigin = 0 AND u_mtrldef.ifselforder = 3 then 1 else 0 END) INTO :cnt,:ll_pf_cnt_pack0,:ll_pf_cnt_packin FROM u_PrdPF INNER JOIN u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid WHERE u_PrdPF.mtrlid = :ll_p_mtrlid And u_PrdPF.pfcode = :arg_pfcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料清单是否存在非包件失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_pf_cnt_pack0 > 0 THEN li_ifmrppackpf = 1 ELSE IF cnt = ll_pf_cnt_packin THEN li_ifmrppackpf = 1 ELSE li_ifmrppackpf = 0 END IF END IF ELSE li_ifmrppackpf = 0 END IF IF arg_pzlorderid > 0 THEN li_inwareflag = 1 li_outscllflag = 0 ELSE IF li_p_ifpackpro = 0 THEN li_inwareflag = 1 li_outscllflag = 1 ElseIf (li_p_ifpackpro = 1 Or li_p_ifpackpro = 5) And li_p_ordertype_mtrldef = 0 THEN IF li_ifmrppackpf = 0 THEN li_inwareflag = 1 li_outscllflag = 1 ELSE IF li_ifpack = 1 THEN li_inwareflag = 1 li_outscllflag = 0 ELSE li_inwareflag = 1 li_outscllflag = 1 END IF END IF ElseIf (li_p_ifpackpro = 1 Or li_p_ifpackpro = 5) And li_p_ordertype_mtrldef = 1 THEN IF li_ifpackpro = 1 THEN IF li_ifmrppackpf = 0 THEN li_inwareflag = 0 li_outscllflag = 0 ELSE li_inwareflag = 0 li_outscllflag = 1 END IF ELSEIF li_ifpack = 1 THEN IF li_ifmrppackpf = 0 THEN li_inwareflag = 1 li_outscllflag = 1 ELSE li_inwareflag = 1 li_outscllflag = 0 END IF ELSE li_inwareflag = 1 li_outscllflag = 1 END IF ELSEIF li_p_ifpackpro = 2 And li_p_ordertype_mtrldef = 1 THEN IF li_ifpackpro = 2 THEN li_inwareflag = 0 li_outscllflag = 1 ELSE IF li_ifpack = 2 THEN li_inwareflag = 1 li_outscllflag = 0 ELSEIF li_ifpack = 1 THEN IF li_ifselforder = 3 THEN li_inwareflag = 1 li_outscllflag = 0 ELSE li_inwareflag = 1 li_outscllflag = 1 END IF ELSE li_inwareflag = 1 li_outscllflag = 1 END IF END IF ELSEIF li_p_ifpackpro = 3 And li_p_ordertype_mtrldef = 0 THEN li_inwareflag = 1 li_outscllflag = 1 ELSEIF li_p_ifpackpro = 4 And li_p_ordertype_mtrldef = 0 THEN IF ll_p_mtrlid = arg_mtrlid THEN li_inwareflag = 1 li_outscllflag = 0 ELSE li_inwareflag = 1 li_outscllflag = 1 END IF ELSEIF li_p_ifpackpro = 4 And li_p_ordertype_mtrldef = 1 THEN IF ll_p_mtrlid = arg_mtrlid And ls_p_status = arg_status_mode And ls_p_woodcode = arg_woodcode And ls_p_pcode = arg_pcode THEN li_inwareflag = 0 li_outscllflag = 1 ELSE IF ll_p_mtrlid = arg_mtrlid THEN li_inwareflag = 1 li_outscllflag = 0 ELSE li_inwareflag = 1 li_outscllflag = 1 END IF END IF END IF END IF //检查指令是否分离排产计划 IF li_inwareflag = 1 THEN IF ll_p_ordertype = 1 THEN CHOOSE CASE li_p_ifpackpro CASE 0,3,4 IF li_p_ordertype_mtrldef = 1 And ll_p_mtrlid = arg_mtrlid THEN li_fpkind = 1 END IF CASE 1,2 IF li_ifpack > 0 THEN li_fpkind = 1 END IF END CHOOSE ELSE IF li_p_ordertype_mtrldef = 1 And ll_p_mtrlid = arg_mtrlid THEN li_fpkind = -1 //不分配 END IF END IF END IF END IF IF Not (li_mtrlorigin_mtrl = 3 Or ordertype = 3 Or li_mtrlorigin_mtrl = 2 ) THEN IF li_outscllflag = 1 THEN IF arg_wpcode = '' THEN arg_msg = '请选择工价表号,产品编码:'+ls_mtrlcode+',产品名称:'+ls_mtrlname+',可能没有指定默认工价表' rslt = 0 GOTO ext END IF END IF END IF IF uo_option_order_capacity = 1 And orderid = 0 THEN //And li_outscllflag = 1 Then DateTime server_dt,ldt_sdate,ldt_edate Decimal ld_capatotal,ld_capatotal_ot,ld_capacity_sum String ls_wrkgrpname SELECT Top 1 getdate() Into :server_dt From u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF ldt_sdate = DateTime(Date(server_dt),Time(0)) ldt_edate = DateTime(Date(server_dt),Time('23:59:59')) SELECT capatotal,capatotal_ot,wrkgrpname INTO :ld_capatotal,:ld_capatotal_ot,:ls_wrkgrpname FROM u_sc_wkp Where wrkGrpid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间设定产能总量失败,车间ID:'+String(arg_wrkgrpid) GOTO ext END IF SELECT sum(capacity) INTO :ld_capacity_sum FROM u_order_ml WHERE orderdate >= :ldt_sdate AND orderdate <= :ldt_edate And wrkGrpid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间当天已排产能失败,车间:'+ls_wrkgrpname GOTO ext END IF IF IsNull(ld_capacity_sum) THEN ld_capacity_sum = 0 IF ld_capacity_sum + ld_capacity * arg_orderqty > ld_capatotal + ld_capatotal_ot THEN rslt = 0 arg_msg = '车间:'+ls_wrkgrpname+'当天已排产能:'+String(ld_capacity_sum,'#,##0.##########')+',车间设定产能总量:'+String(ld_capatotal + ld_capatotal_ot,'#,##0.##########')+',不能再排产能:'+String(ld_capacity * arg_orderqty,'#,##0.##########') GOTO ext END IF END IF IF arg_ordertype = 3 THEN li_inwareflag = 0 it_mxbt++ s_order_mx[it_mxbt].relcode = arg_relcode s_order_mx[it_mxbt].orderdate = arg_orderdate s_order_mx[it_mxbt].taskid = arg_taskid s_order_mx[it_mxbt].mtrlid = arg_mtrlid s_order_mx[it_mxbt].status_mode = arg_status_mode s_order_mx[it_mxbt].woodcode = arg_woodcode s_order_mx[it_mxbt].pcode = arg_pcode s_order_mx[it_mxbt].orderqty = arg_orderqty s_order_mx[it_mxbt].dscrp = arg_dscrp s_order_mx[it_mxbt].assign_emp = arg_Assign_emp s_order_mx[it_mxbt].requiredate = arg_requiredate s_order_mx[it_mxbt].ordertype = arg_ordertype IF arg_ordertype = 4 THEN s_order_mx[it_mxbt].taskcode = ls_pordercode ELSE s_order_mx[it_mxbt].taskcode = arg_taskcode END IF s_order_mx[it_mxbt].taskrelcode = arg_taskrelcode s_order_mx[it_mxbt].taskmxid = arg_taskmxid s_order_mx[it_mxbt].pfcode = arg_pfcode s_order_mx[it_mxbt].cusid = arg_cusid s_order_mx[it_mxbt].porderid = arg_porderid s_order_mx[it_mxbt].pordercode = ls_pordercode s_order_mx[it_mxbt].utid = arg_utid s_order_mx[it_mxbt].wrkGrpid = arg_wrkgrpid s_order_mx[it_mxbt].gydscrp = arg_gydscrp s_order_mx[it_mxbt].pfklmode = arg_pfklmode s_order_mx[it_mxbt].pforderid = arg_pforderid s_order_mx[it_mxbt].pfordercode = arg_pfordercode s_order_mx[it_mxbt].pfqty = arg_pfqty s_order_mx[it_mxbt].secdscrp = arg_secdscrp s_order_mx[it_mxbt].thdscrp = arg_thdscrp s_order_mx[it_mxbt].taskscid = arg_taskscid s_order_mx[it_mxbt].perfinishdate = arg_perfinishdate s_order_mx[it_mxbt].storageid = arg_storageid s_order_mx[it_mxbt].capacity = ld_capacity * arg_orderqty s_order_mx[it_mxbt].typename = arg_typename s_order_mx[it_mxbt].tmpid = arg_tmpid s_order_mx[it_mxbt].Level = arg_level s_order_mx[it_mxbt].p_taskrelcode = ls_p_taskrelcode s_order_mx[it_mxbt].saletaskcode = ls_saletaskcode s_order_mx[it_mxbt].saletaskrelcode = ls_saletaskrelcode s_order_mx[it_mxbt].cusname = ls_cusname s_order_mx[it_mxbt].p_ordertype = li_p_ordertype_mtrldef s_order_mx[it_mxbt].p_cusid = ll_p_cusid s_order_mx[it_mxbt].p_mtrlid = ll_p_mtrlid s_order_mx[it_mxbt].outtypestr = arg_outtypestr s_order_mx[it_mxbt].pzlorderid = arg_pzlorderid s_order_mx[it_mxbt].inwareflag = li_inwareflag s_order_mx[it_mxbt].outscllflag = li_outscllflag s_order_mx[it_mxbt].iffg = arg_iffg s_order_mx[it_mxbt].ifauto = arg_ifauto s_order_mx[it_mxbt].upmtrlid = ll_upmtrlid s_order_mx[it_mxbt].iffp = li_iffp s_order_mx[it_mxbt].fpkind = li_fpkind s_order_mx[it_mxbt].if_inherit = arg_if_inherit s_order_mx[it_mxbt].addqty = arg_addqty IF li_mtrlorigin_mtrl = 3 THEN s_order_mx[it_mxbt].ifwforder = 1 ELSE s_order_mx[it_mxbt].ifwforder = 0 END IF s_order_mx[it_mxbt].wpcode = arg_wpcode s_order_mx[it_mxbt].pctype = arg_pctype s_order_mx[it_mxbt].notmrpqty = ld_notmrpqty //yyx2014-7-22 IF li_inwareflag = 0 THEN li_ifpban_save = 0 li_ifupban_save = 0 ELSE IF arg_ordertype = 4 THEN IF li_p_ifpack = 1 THEN //主计划为包件 IF li_bantype_mtrl = 0 THEN li_ifpban_save = 0 li_ifupban_save = 0 ELSEIF li_bantype_mtrl = 1 THEN li_ifpban_save = 1 cnt = 0 SELECT count(*) INTO :cnt FROM u_prdpf WHERE u_prdpf.mtrlid = :ll_p_mtrlid AND u_prdpf.pfcode = :ls_p_pfcode And u_PrdPF.SonMtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN cnt = 0 END IF IF cnt = 0 THEN li_ifupban_save = 0 ELSE li_ifupban_save = 1 END IF ELSEIF li_bantype_mtrl = 2 THEN li_ifpban_save = 0 li_ifupban_save = 1 END IF END IF IF li_p_ifpackpro = 1 THEN //主计划为包件产品 IF li_bantype_mtrl = 0 THEN li_ifpban_save = 0 li_ifupban_save = 0 ELSEIF li_bantype_mtrl = 1 THEN li_ifpban_save = 1 cnt = 0 SELECT count(*) INTO :cnt FROM u_prdpf,u_prdpf u_prdpf_p,u_mtrldef WHERE u_prdpf_p.mtrlid = :ll_p_mtrlid AND u_prdpf_p.pfcode = :ls_p_pfcode and u_prdpf_p.sonmtrlid = u_mtrldef.mtrlid and u_mtrldef.ifpack = 1 and u_prdpf_p.sonmtrlid = u_prdpf.mtrlid and u_prdpf_p.sonpfcode = u_prdpf.pfcode And u_prdpf.SonMtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN cnt = 0 END IF IF cnt = 0 THEN li_ifupban_save = 0 ELSE li_ifupban_save = 1 END IF ELSEIF li_bantype_mtrl = 2 THEN li_ifpban_save = 0 li_ifupban_save = 1 END IF END IF IF li_p_ifpack = 0 And li_p_ifpackpro <> 1 THEN //主计划非包件产品非包件 IF li_bantype_mtrl = 0 THEN li_ifpban_save = 0 li_ifupban_save = 0 ELSEIF li_bantype_mtrl = 1 THEN li_ifpban_save = 1 cnt = 0 SELECT count(*) INTO :cnt FROM u_prdpf WHERE u_prdpf.mtrlid = :ll_p_mtrlid AND u_prdpf.pfcode = :ls_p_pfcode And u_PrdPF.SonMtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN cnt = 0 END IF IF cnt = 0 THEN li_ifupban_save = 0 ELSE li_ifupban_save = 1 END IF ELSEIF li_bantype_mtrl = 2 THEN li_ifpban_save = 0 li_ifupban_save = 1 END IF END IF ELSE IF li_bantype_mtrl = 0 THEN li_ifpban_save = 0 li_ifupban_save = 0 ELSEIF li_bantype_mtrl = 1 THEN li_ifpban_save = 1 li_ifupban_save = 1 ELSEIF li_bantype_mtrl = 2 THEN li_ifpban_save = 0 li_ifupban_save = 1 END IF END IF END IF s_order_mx[it_mxbt].ifpban = li_ifpban_save s_order_mx[it_mxbt].ifupban = li_ifupban_save ext: Destroy ds_find_pmtrlid Return(rslt) end function public function integer tmp_order_add_pro (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);//YS危险功能,勿删 2014-03-19 Int rslt = 1 Long cnt String ls_partname Long li_ordertype_mtrldef Long ll_statusflag,li_ifpackpro Decimal lde_price s_mtrlcfg_expr s_pz[],s_empty[] Long ll_i,ll_j String ls_status_zj Decimal ld_qty_zj String ls_utcode[] Long cnt_ut = 0 Decimal ld_workprice,ld_workqty,ld_workprice_sum String ls_procode,ls_proname Long ll_proorder,ll_wrkgrpid,ll_lsxtype,ll_ifjd,ll_lastflag Int li_sctype Long ll_equipmentid Decimal ld_eqworkhour,ld_Workhour,ld_beforehour,ld_afterhour,ld_eq_empnum String ls_worktype Int li_if_hourpay Decimal ld_eoq,ld_splitrate Decimal ld_hourpay String ls_mtrlsectype,ls_usermtrlmode,ls_zxmtrlmode,ls_mtrlmode Int li_ifgroup Decimal ld_u_workqty,ld_u_workprice,ld_u_workprice_sum Int li_protype Long ll_mtrlid String ls_pricestr,s_rtn Decimal ld_workprice_str,ld_workqty_str,ld_workqty_ori Decimal ld_proqty,ld_hourpay_cmp String ls_pricestr_ori,ls_pricestr_value String ls_parmname Decimal ld_parmvalue String ls_workqtystr_ori,ls_workqtystr_value,ls_workqtystr Decimal ld_u_workqty_str,ld_u_workprice_str String ls_u_workqtystr,ls_u_workqtystr_value,ls_u_pricestr,ls_u_pricestr_value String ls_u_workqtystr_ori,ls_u_pricestr_ori datastore ds_orderrqwp ds_orderrqwp = Create datastore ds_orderrqwp.DataObject = 'ds_orderrqwp_workprice' ds_orderrqwp.SetTransObject(sqlca) datastore ds_pricestr ds_pricestr = Create datastore ds_pricestr.DataObject = 'ds_pricestr_cmpl' ds_pricestr.SetTransObject(sqlca) datastore ds_parm ds_parm = Create datastore ds_parm.DataObject = 'ds_workprice_parm_def' ds_parm.SetTransObject(sqlca) ds_parm.Retrieve() If uo_option_def_workprice = -1000 Then rslt = 0 arg_msg = '选项:[012]生产计划审核时需要检查是否已定义工价表,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_orderrqwp_union = -1000 Then rslt = 0 arg_msg = '选项:[148]生产计划工序明细按工价表配置及组号合并,读取初始默认值失败,操作取消!' Goto ext End If If arg_orderid = 0 Then rslt = 0 arg_msg = "没有审核对象" Goto ext End If If p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then rslt = 0 Goto ext End If If ordertype = 3 Or ifwforder = 1 Then rslt = 1 Goto ext End If Select ordertype, statusflag, ifpackpro, if_hourpay, eoq, splitrate, mtrlsectype, zxmtrlmode, usermtrlmode, mtrlmode, protype Into :li_ordertype_mtrldef, :ll_statusflag, :li_ifpackpro, :li_if_hourpay, :ld_eoq, :ld_splitrate, :ls_mtrlsectype, :ls_zxmtrlmode, :ls_usermtrlmode, :ls_mtrlmode, :li_protype From u_mtrldef Where mtrlid = :mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询物料计划属性失败,'+sqlca.SQLErrText Goto ext End If If (ordertype <> 4 And li_ordertype_mtrldef = 1) Then rslt = 1 Goto ext End If If status <> 1 And status <> 4 And status <> 7 And status <> 5 And status <> 6 Then rslt = 0 arg_msg = "计划只有在(已审核,完成)状态才可以执行重新生成工序,请核对" Goto ext End If //IF uo_option_def_workprice = 0 THEN // rslt = 1 // GOTO ext //END IF If li_protype = 0 Then If li_ifpackpro = 0 Then If ll_statusflag <> 2 Then If uo_option_def_workprice = 1 Or uo_option_def_workprice = 2 Then cnt = 0 Select count(*) Into :cnt From u_sc_workprice Where u_sc_workprice.mtrlid = :mtrlid And u_sc_workprice.wpcode = :wpcode And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0; If sqlca.SQLCode <> 0 Then arg_msg = '查询产品工价表失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt = 0 Then arg_msg = '产品对应车间的工价表未建立,请先建立工价表' rslt = 0 Goto ext End If End If If uo_option_def_workprice = 2 Then cnt = 0 Select count(*) Into :cnt From u_sc_workprice Where u_sc_workprice.mtrlid = :mtrlid And u_sc_workprice.wpcode = :wpcode And u_sc_workprice.auditflag = 0 And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0; If sqlca.SQLCode <> 0 Then arg_msg = '查询产品工价表是否有未审核失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then arg_msg = '产品对应车间的工价表存在未审核工价,请检查' rslt = 0 Goto ext End If End If Else // f_checkpz(status_mode,s_pz[]) f_checkpz_general(mtrlid,status_mode,s_pz[]) For ll_i = 1 To UpperBound(s_pz) ls_status_zj = s_pz[ll_i].cfgname If uo_option_def_workprice = 1 Or uo_option_def_workprice = 2 Then cnt = 0 Select count(*) Into :cnt From u_sc_workprice Where u_sc_workprice.mtrlid = :mtrlid And u_sc_workprice.wpcode = :wpcode And (u_sc_workprice.status = :ls_status_zj Or u_sc_workprice.status = '') And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0; If sqlca.SQLCode <> 0 Then arg_msg = '查询产品子件:'+ls_status_zj+'工价表失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt = 0 Then arg_msg = '产品对应车间的子件:'+ls_status_zj+'工价表未建立,请先建立工价表' rslt = 0 Goto ext End If End If If uo_option_def_workprice = 2 Then cnt = 0 Select count(*) Into :cnt From u_sc_workprice Where u_sc_workprice.mtrlid = :mtrlid And u_sc_workprice.wpcode = :wpcode And (u_sc_workprice.status = :ls_status_zj Or u_sc_workprice.status = '') And u_sc_workprice.auditflag = 0 And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0; If sqlca.SQLCode <> 0 Then arg_msg = '查询产品工价表子件:'+ls_status_zj+'是否有未审核失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then arg_msg = '产品对应车间的工价表子件:'+ls_status_zj+'存在未审核工价,请检查' rslt = 0 Goto ext End If End If Next End If End If // cnt = 0 // Select count(*) Into :cnt // From u_orderrqwp // Where (finishqty > 0 Or taskqty > 0 ) // And orderid = :arg_orderid // And scid = :arg_scid; // If sqlca.SQLCode <> 0 Then // arg_msg = '查询计划工序明细是否有完成数量失败,'+sqlca.SQLErrText // rslt = 0 // Goto ext // End If // // If cnt > 0 Then // arg_msg = '计划工序明细已有完成数量或已派工数,不能生成计划工序明细' // rslt = 0 // Goto ext // End If Select count(*) Into :cnt From v_order_procode Where scid = :arg_scid And orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then arg_msg = '查询计划工序明细是否已开计件单失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then arg_msg = '计划工序明细已开计件单,不能生成计划工序明细' rslt = 0 Goto ext End If // Select count(*) Into :cnt // From u_sc_task // Where scid = :arg_scid // And orderid = :arg_orderid; // If sqlca.SQLCode <> 0 Then // arg_msg = '查询计划工序明细是否已开工序派工单失败,'+sqlca.SQLErrText // rslt = 0 // Goto ext // End If // // If cnt > 0 Then // arg_msg = '计划工序明细开工序派工单,不能生成计划工序明细' // rslt = 0 // Goto ext // End If Delete From u_orderrqwp Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除计划的工序明细表相应记录操作失败"+"~n"+sqlca.SQLErrText Goto ext End If s_pz = s_empty If ll_statusflag <> 2 Then //非组合配置产品 cnt = 0 Select count(*) Into :cnt From u_sc_workprice Where mtrlid = :mtrlid And ltrim(rtrim(utcode)) <> '' And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询产品价格表是否有组号失败'+sqlca.SQLErrText Goto ext End If If uo_option_orderrqwp_union = 0 Or uo_option_orderrqwp_union = 1 Or cnt = 0 Then Insert Into u_orderrqwp(scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, ifgroup, u_workqty, u_workprice) Select u_order_ml.scid, u_order_ml.orderid, u_order_ml.mtrlid, u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.workqty * u_order_ml.orderqty, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, u_sc_workprice.workprice, u_sc_workprice.status, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, u_sc_workprice.workprice, u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.ifgroup, u_sc_workprice.u_workqty * u_order_ml.orderqty, u_sc_workprice.u_workprice From u_sc_workprice,u_order_ml Where u_sc_workprice.mtrlid = u_order_ml.mtrlid And u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And u_sc_workprice.wpcode = :wpcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If Else cnt_ut = 1 Declare cur_ut2 Cursor For Select distinct utcode From u_sc_workprice Where mtrlid = :mtrlid And lTrim(rtrim(utcode)) <> '' And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And u_sc_workprice.wpcode = :wpcode; Open cur_ut2; Fetch cur_ut2 Into :ls_utcode[cnt_ut]; Do While sqlca.SQLCode = 0 cnt_ut++ Fetch cur_ut2 Into :ls_utcode[cnt_ut]; Loop Close cur_ut2; cnt_ut = cnt_ut - 1 For ll_i = 1 To cnt_ut ld_workprice = 0 ld_workqty = 0 Select sum(workprice),sum(workqty),sum(u_workprice),sum(u_workqty) Into :ld_workprice,:ld_workqty,:ld_u_workprice,:ld_u_workqty From u_sc_workprice Where lTrim(rtrim(utcode)) = :ls_utcode[ll_i] And mtrlid = :mtrlid And u_sc_workprice.wpcode = :wpcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询组号:'+ls_utcode[ll_i]+' 合计工价,数量失败,'+sqlca.SQLErrText Goto ext End If Select top 1 u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.ifgroup Into :ls_procode, :ls_proname, :ll_proorder, :ll_wrkgrpid, :ll_lsxtype, :ll_ifjd, :ll_lastflag, :li_sctype, :ll_equipmentid, :ls_partname, :ld_eqworkhour, :ld_Workhour, :ld_beforehour, :ld_afterhour, :ls_worktype, :ld_eq_empnum, :li_ifgroup From u_sc_workprice Where mtrlid = :mtrlid And utcode = :ls_utcode[ll_i] And u_sc_workprice.wpcode = :wpcode Order By lastflag Desc,u_sc_workprice.proorder Desc; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询工价表组号:'+ls_utcode[ll_i]+'末工序相关信息失败'+sqlca.SQLErrText Goto ext End If ls_proname = '工序:(组:'+Trim(ls_utcode[ll_i])+')' Insert Into u_orderrqwp (scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, ifgroup, u_workprice, u_workqty) Values (:arg_scid, :arg_orderid, :mtrlid, :ls_procode, :ls_proname, :ll_proorder, :orderqty, :ll_wrkgrpid, :ll_lsxtype, :ld_workprice, :status_mode, :ll_ifjd, :ll_lastflag, :li_sctype, :ll_equipmentid, :ls_partname, :ld_eqworkhour, :ld_Workhour, :ld_beforehour, :ld_afterhour, :ld_workprice_sum, :ls_worktype, :ld_eq_empnum, :li_ifgroup, :ld_u_workprice, :ld_u_workqty); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If Next //加空组号工序 Insert Into u_orderrqwp(scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, ifgroup, u_workprice, u_workqty) Select u_order_ml.scid, u_order_ml.orderid, u_order_ml.mtrlid, u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.workqty * u_order_ml.orderqty, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, u_sc_workprice.workprice, u_sc_workprice.status, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, u_sc_workprice.workprice, u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.ifgroup, u_sc_workprice.u_workprice, u_sc_workprice.u_workqty * u_order_ml.orderqty From u_sc_workprice,u_order_ml Where u_sc_workprice.mtrlid = u_order_ml.mtrlid And u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And u_sc_workprice.utcode = '' And u_sc_workprice.wpcode = :wpcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If End If Else cnt = 0 Select count(*) Into :cnt From u_sc_workprice Where mtrlid = :mtrlid And ltrim(rtrim(utcode)) <> '' And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询产品价格表是否有组号失败'+sqlca.SQLErrText Goto ext End If If uo_option_orderrqwp_union = 0 Or cnt = 0 Then // f_checkpz(status_mode,s_pz[]) f_checkpz_general(mtrlid,status_mode,s_pz[]) For ll_i = 1 To UpperBound(s_pz) ls_status_zj = s_pz[ll_i].cfgname ld_qty_zj = Dec(s_pz[ll_i].qty) Insert Into u_orderrqwp(scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, ifgroup, u_workprice, u_workqty) Select u_order_ml.scid, u_order_ml.orderid, u_order_ml.mtrlid, u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.workqty * u_order_ml.orderqty * :ld_qty_zj, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, u_sc_workprice.workprice, u_sc_workprice.status, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, u_sc_workprice.workprice, u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.ifgroup, u_sc_workprice.u_workprice, u_sc_workprice.u_workqty * u_order_ml.orderqty * :ld_qty_zj From u_sc_workprice,u_order_ml Where u_sc_workprice.mtrlid = u_order_ml.mtrlid And u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And (u_sc_workprice.status = :ls_status_zj) And u_sc_workprice.wpcode = :wpcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If Next //加空子件工序(公共) Insert Into u_orderrqwp(scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, ifgroup, u_workprice, u_workqty) Select u_order_ml.scid, u_order_ml.orderid, u_order_ml.mtrlid, u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.workqty * u_order_ml.orderqty * :ld_qty_zj, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, u_sc_workprice.workprice, u_sc_workprice.status, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, u_sc_workprice.workprice, u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.ifgroup, u_sc_workprice.u_workprice, u_sc_workprice.u_workqty * u_order_ml.orderqty * :ld_qty_zj From u_sc_workprice,u_order_ml Where u_sc_workprice.mtrlid = u_order_ml.mtrlid And u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And (u_sc_workprice.status = '') And u_sc_workprice.wpcode = :wpcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序[空子件]失败,原因:'+sqlca.SQLErrText Goto ext End If Else // f_checkpz(status_mode,s_pz[]) cnt_ut = 1 f_checkpz_general(mtrlid,status_mode,s_pz[]) Declare cur_ut Cursor For Select distinct utcode From u_sc_workprice Where mtrlid = :mtrlid And lTrim(rtrim(utcode)) <> '' And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And u_sc_workprice.wpcode = :wpcode; Open cur_ut; Fetch cur_ut Into :ls_utcode[cnt_ut]; Do While sqlca.SQLCode = 0 cnt_ut++ Fetch cur_ut Into :ls_utcode[cnt_ut]; Loop Close cur_ut; cnt_ut = cnt_ut - 1 For ll_i = 1 To cnt_ut ld_workprice_sum = 0 For ll_j = 1 To UpperBound(s_pz) ls_status_zj = s_pz[ll_j].cfgname ld_qty_zj = Dec(s_pz[ll_j].qty) ld_workprice = 0 ld_workqty = 0 ld_u_workprice = 0 ld_u_workqty = 0 Select workprice, workqty, u_workprice, u_workqty,pricestr, workqtystr, u_pricestr, u_workqtystr, procode Into :ld_workprice, :ld_workqty, :ld_u_workprice, :ld_u_workqty, :ls_pricestr, :ls_workqtystr, :ls_u_pricestr, :ls_u_workqtystr, :ls_procode From u_sc_workprice Where lTrim(rtrim(utcode)) = :ls_utcode[ll_i] And lTrim(rtrim(status)) = :ls_status_zj And mtrlid = :mtrlid And u_sc_workprice.wpcode = :wpcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询组号:'+ls_utcode[ll_i]+' 配置:'+ls_status_zj+' 工价失败,'+sqlca.SQLErrText Goto ext End If If Trim(ls_workqtystr) <> '' Then If uof_workprice_parm(mtrlid,wpcode,ls_procode,ld_workqty * ld_qty_zj,ls_workqtystr,1,ls_workqtystr_value,ld_workqty_str) = 1 Then ld_workqty = ld_workqty_str End If End If If Trim(ls_pricestr) <> '' Then If uof_workprice_parm(mtrlid,wpcode,ls_procode,ld_workqty * ld_qty_zj,ls_pricestr,0,ls_pricestr_value,ld_workprice_str) = 1 Then ld_workprice = ld_workprice_str End If End If If Trim(ls_u_workqtystr) <> '' Then If uof_workprice_parm(mtrlid,wpcode,ls_procode,ld_workqty * ld_qty_zj,ls_u_workqtystr,1,ls_u_workqtystr_value,ld_u_workqty_str) = 1 Then ld_u_workqty = ld_u_workqty_str End If End If If Trim(ls_u_pricestr) <> '' Then If uof_workprice_parm(mtrlid,wpcode,ls_procode,ld_workqty * ld_qty_zj,ls_u_pricestr,0,ls_u_pricestr_value,ld_u_workprice_str) = 1 Then ld_u_workprice = ld_u_workprice_str End If End If ld_workprice_sum = ld_workprice_sum + ld_workprice * ld_workqty * ld_qty_zj ld_u_workprice_sum = ld_u_workprice_sum + ld_u_workprice * ld_u_workqty * ld_qty_zj Next Select top 1 u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.ifgroup Into :ls_procode, :ls_proname, :ll_proorder, :ll_wrkgrpid, :ll_lsxtype, :ll_ifjd, :ll_lastflag, :li_sctype, :ll_equipmentid, :ls_partname, :ld_eqworkhour, :ld_Workhour, :ld_beforehour, :ld_afterhour, :ls_worktype, :ld_eq_empnum, :li_ifgroup From u_sc_workprice Where mtrlid = :mtrlid And utcode = :ls_utcode[ll_i] And u_sc_workprice.wpcode = :wpcode Order By lastflag Desc; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询工价表组号:'+ls_utcode[ll_i]+'相关信息失败'+sqlca.SQLErrText Goto ext End If Insert Into u_orderrqwp (scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, ifgroup, u_workprice, u_workqty) Values (:arg_scid, :arg_orderid, :mtrlid, :ls_procode, :ls_proname, :ll_proorder, :orderqty, :ll_wrkgrpid, :ll_lsxtype, :ld_workprice_sum, :status_mode, :ll_ifjd, :ll_lastflag, :li_sctype, :ll_equipmentid, :ls_partname, :ld_eqworkhour, :ld_Workhour, :ld_beforehour, :ld_afterhour, :ld_workprice_sum, :ls_worktype, :ld_eq_empnum, :li_ifgroup, :ld_u_workprice_sum, :orderqty); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If Next //加空组号工序 For ll_i = 1 To UpperBound(s_pz) ls_status_zj = s_pz[ll_i].cfgname ld_qty_zj = Dec(s_pz[ll_i].qty) Insert Into u_orderrqwp(scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, u_workprice, u_workqty) Select u_order_ml.scid, u_order_ml.orderid, u_order_ml.mtrlid, u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.workqty * u_order_ml.orderqty * :ld_qty_zj, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, u_sc_workprice.workprice, u_sc_workprice.status, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, u_sc_workprice.workprice, u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.u_workprice, u_sc_workprice.u_workqty * u_order_ml.orderqty * :ld_qty_zj From u_sc_workprice,u_order_ml Where u_sc_workprice.mtrlid = u_order_ml.mtrlid And u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And (u_sc_workprice.status = :ls_status_zj) And u_sc_workprice.utcode = '' And u_sc_workprice.wpcode = :wpcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If Next //加空子件工序 Insert Into u_orderrqwp(scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, u_workprice, u_workqty) Select u_order_ml.scid, u_order_ml.orderid, u_order_ml.mtrlid, u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.workqty * u_order_ml.orderqty * :ld_qty_zj, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, u_sc_workprice.workprice, u_sc_workprice.status, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, u_sc_workprice.workprice, u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.u_workprice, u_sc_workprice.u_workqty * u_order_ml.orderqty * :ld_qty_zj From u_sc_workprice,u_order_ml Where u_sc_workprice.mtrlid = u_order_ml.mtrlid And u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And (u_sc_workprice.status = '') And u_sc_workprice.utcode = '' And u_sc_workprice.wpcode = :wpcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序[空子件]失败,原因:'+sqlca.SQLErrText Goto ext End If Update U_OrderRqwp Set U_OrderRqwp.workPrice = u_sc_workprice.workPrice, U_OrderRqwp.ori_workPrice = u_sc_workprice.workPrice From U_OrderRqwp Inner JOIN u_Order_ml ON U_OrderRqwp.scid = u_Order_ml.scid And U_OrderRqwp.orderid = u_Order_ml.OrderID Inner JOIN u_sc_workprice ON u_Order_ml.mtrlid = u_sc_workprice.Mtrlid And u_Order_ml.status_mode = u_sc_workprice.status And U_OrderRqwp.Proname = u_sc_workprice.Proname And u_Order_ml.wpcode = u_sc_workprice.wpcode Where U_OrderRqwp.scid = :arg_scid And u_orderrqwp.orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If End If End If //如果按组号合并,则不再执行公式 If uo_option_orderrqwp_union = 0 Or uo_option_orderrqwp_union = 1 And cnt_ut = 0 Then ds_orderrqwp.Retrieve(arg_scid,arg_orderid,wpcode) For ll_i = 1 To ds_orderrqwp.RowCount() ls_pricestr = ds_orderrqwp.Object.u_sc_workprice_pricestr[ll_i] ll_mtrlid = ds_orderrqwp.Object.u_orderrqwp_mtrlid[ll_i] ls_procode = ds_orderrqwp.Object.u_orderrqwp_procode[ll_i] ls_worktype = ds_orderrqwp.Object.u_orderrqwp_worktype[ll_i] ld_hourpay = ds_orderrqwp.Object.hourpay[ll_i] ld_proqty = ds_orderrqwp.Object.u_orderrqwp_proqty[ll_i] ld_Workhour = ds_orderrqwp.Object.u_orderrqwp_workhour[ll_i] ld_beforehour = ds_orderrqwp.Object.u_orderrqwp_beforehour[ll_i] ld_afterhour = ds_orderrqwp.Object.u_orderrqwp_afterhour[ll_i] ld_eq_empnum = ds_orderrqwp.Object.u_orderrqwp_eq_empnum[ll_i] ld_eqworkhour = ds_orderrqwp.Object.u_orderrqwp_eqworkhour[ll_i] ls_workqtystr = ds_orderrqwp.Object.u_sc_workprice_workqtystr[ll_i] ld_workqty_ori = ds_orderrqwp.Object.u_sc_workprice_workqty[ll_i] ld_workprice_str = ds_orderrqwp.Object.u_orderrqwp_workprice[ll_i] ld_u_workqty_str = ds_orderrqwp.Object.u_orderrqwp_u_workqty[ll_i] ld_u_workprice_str = ds_orderrqwp.Object.u_orderrqwp_u_workprice[ll_i] ls_u_workqtystr = ds_orderrqwp.Object.u_sc_workprice_u_workqtystr[ll_i] ls_u_pricestr = ds_orderrqwp.Object.u_sc_workprice_u_pricestr[ll_i] ld_workqty_str = ld_proqty If ld_workqty_ori = 0 Then ld_workqty_ori = 1 ls_pricestr_ori = '' ls_pricestr_value = '' ls_workqtystr_ori = '' ls_workqtystr_value = '' //1.数量公式 If Trim(ls_workqtystr) <> '' Then ls_workqtystr_ori = ls_workqtystr uof_workprice_parm(ll_mtrlid,wpcode,ls_procode,ld_proqty,ls_workqtystr,1,ls_workqtystr_value,ld_workqty_str) ld_proqty = ld_workqty_str End If //2.单价公式 If Trim(ls_pricestr) <> '' Then ls_pricestr_ori = ls_pricestr uof_workprice_parm(ll_mtrlid,wpcode,ls_procode,ld_proqty,ls_pricestr,0,ls_pricestr_value,ld_workprice_str) Else If li_if_hourpay = 2 Then If ld_proqty > ld_splitrate And ld_splitrate <> 0 Then ld_workprice_str = (ld_splitrate * (ld_Workhour + ld_eqworkhour * ld_eq_empnum) + ld_beforehour + ld_afterhour) / ld_splitrate * ld_hourpay Else ld_workprice_str = (ld_proqty * (ld_Workhour + ld_eqworkhour * ld_eq_empnum) + ld_beforehour + ld_afterhour) / ld_proqty * ld_hourpay End If Else Goto _u_workqty End If End If //3.折算数量 _u_workqty: If Trim(ls_u_workqtystr) <> '' Then ls_u_workqtystr_ori = ls_u_workqtystr uof_workprice_parm(ll_mtrlid,wpcode,ls_procode,ld_proqty,ls_u_workqtystr,1,ls_u_workqtystr_value,ld_u_workqty_str) End If //4.折算单价 If Trim(ls_u_pricestr) <> '' Then ls_u_pricestr_ori = ls_u_pricestr uof_workprice_parm(ll_mtrlid,wpcode,ls_procode,ld_proqty,ls_u_pricestr,0,ls_u_pricestr_value,ld_u_workprice_str) End If Update u_orderrqwp Set workprice = :ld_workprice_str, ori_workprice = :ld_workprice_str, pricestr = :ls_pricestr_ori, pricestr_value = :ls_pricestr_value, proqty = :ld_workqty_str, workqtystr = :ls_workqtystr_ori, workqtystr_value = :ls_workqtystr_value, u_workqty = :ld_u_workqty_str, u_workqtystr = :ls_u_workqtystr_ori, u_workqtystr_value = :ls_u_workqtystr_value, u_workprice = :ld_u_workprice_str, u_pricestr = :ls_u_pricestr_ori, u_pricestr_value = :ls_u_pricestr_value Where scid = :arg_scid And orderid = :arg_orderid And mtrlid = :ll_mtrlid And procode = :ls_procode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '按单价公式更新工序单价失败,'+sqlca.SQLErrText Goto ext End If Next End If Else it_mx_bomwp = 0 deep = 0 If uof_protype_workprice(mtrlid,pfcode,wpcode,orderqty,arg_msg) = 0 Then rslt = 0 arg_msg = '计算下级虚拟部件工价表失败,'+arg_msg Goto ext End If Delete From u_orderrqwp Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除计划的工序明细表相应记录操作失败"+"~n"+sqlca.SQLErrText Goto ext End If If li_protype = 1 Then For ll_i = 1 To it_mx_bomwp Update u_orderrqwp Set proqty = proqty + :ins_s_wp[ll_i].workqty, u_workqty = u_workqty + :ins_s_wp[ll_i].u_workqty, pro_dscrp = case when len(pro_dscrp + ',' + :ins_s_wp[ll_i].pro_dscrp) < 255 then pro_dscrp + ',' + :ins_s_wp[ll_i].pro_dscrp else pro_dscrp End Where scid = :arg_scid And orderid = :arg_orderid And mtrlid = :mtrlid And procode = :ins_s_wp[ll_i].mtrlcode + '_' + :ins_s_wp[ll_i].procode; If sqlca.SQLCode = 0 Then If sqlca.SQLNRows = 0 Then Insert Into u_orderrqwp(scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, ifgroup, u_workqty, u_workprice, pricestr, pricestr_value, procode_ori, pro_dscrp, sonmtrlid) Values (:arg_scid, :arg_orderid, :mtrlid, :ins_s_wp[ll_i].mtrlcode + '_' + :ins_s_wp[ll_i].procode, :ins_s_wp[ll_i].proname, :ins_s_wp[ll_i].proorder, :ins_s_wp[ll_i].workqty, :ins_s_wp[ll_i].wrkgrpid, :ins_s_wp[ll_i].lsxtype, :ins_s_wp[ll_i].workprice, :ins_s_wp[ll_i].status, :ins_s_wp[ll_i].ifjd, :ins_s_wp[ll_i].lastflag, :ins_s_wp[ll_i].sctype, :ins_s_wp[ll_i].equipmentid, :ins_s_wp[ll_i].partname, :ins_s_wp[ll_i].eqworkhour, :ins_s_wp[ll_i].Workhour, :ins_s_wp[ll_i].beforehour, :ins_s_wp[ll_i].afterhour, :ins_s_wp[ll_i].workprice, :ins_s_wp[ll_i].worktype, :ins_s_wp[ll_i].eq_empnum, :ins_s_wp[ll_i].ifgroup, :ins_s_wp[ll_i].u_workqty, :ins_s_wp[ll_i].u_workprice, :ins_s_wp[ll_i].pricestr, :ins_s_wp[ll_i].pricestr_value, :ins_s_wp[ll_i].procode, :ins_s_wp[ll_i].pro_dscrp, :ins_s_wp[ll_i].sonmtrlid); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If End If Else If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If End If Next // ElseIf li_protype = 2 Then // // s_workpricetable s_wp_union[] // Long ll_wp_union // // For ll_i = 1 To it_mx_bomwp // For ll_j = 1 To ll_wp_union // If ins_s_wp[ll_i].procode = s_wp_union[ll_j].procode Then // s_wp_union[ll_j].workprice_bom = s_wp_union[ll_j].workprice_bom + ins_s_wp[ll_i].workprice_bom // // If lena(s_wp_union[ll_j].pro_dscrp + ',' + ins_s_wp[ll_i].pro_dscrp) > 255 Then // s_wp_union[ll_j].pro_dscrp = leftA(s_wp_union[ll_j].pro_dscrp + ',' + ins_s_wp[ll_i].pro_dscrp,255) // Else // s_wp_union[ll_j].pro_dscrp = s_wp_union[ll_j].pro_dscrp + ',' + ins_s_wp[ll_i].pro_dscrp // End If // Goto _next_wp // End If // Next // // ll_wp_union++ // // s_wp_union[ll_wp_union].procode = ins_s_wp[ll_i].procode // s_wp_union[ll_wp_union].proname = ins_s_wp[ll_i].proname // s_wp_union[ll_wp_union].proorder = ins_s_wp[ll_i].proorder // s_wp_union[ll_wp_union].workqty = ins_s_wp[ll_i].workqty // s_wp_union[ll_wp_union].wrkgrpid = ins_s_wp[ll_i].wrkgrpid // s_wp_union[ll_wp_union].lsxtype = ins_s_wp[ll_i].lsxtype // s_wp_union[ll_wp_union].workprice = ins_s_wp[ll_i].workprice // s_wp_union[ll_wp_union].status = ins_s_wp[ll_i].status // s_wp_union[ll_wp_union].ifjd = ins_s_wp[ll_i].ifjd // s_wp_union[ll_wp_union].lastflag = ins_s_wp[ll_i].lastflag // s_wp_union[ll_wp_union].sctype = ins_s_wp[ll_i].sctype // s_wp_union[ll_wp_union].equipmentid = ins_s_wp[ll_i].equipmentid // s_wp_union[ll_wp_union].partname = ins_s_wp[ll_i].partname // s_wp_union[ll_wp_union].eqworkhour = ins_s_wp[ll_i].eqworkhour // s_wp_union[ll_wp_union].Workhour = ins_s_wp[ll_i].Workhour // s_wp_union[ll_wp_union].beforehour = ins_s_wp[ll_i].beforehour // s_wp_union[ll_wp_union].afterhour = ins_s_wp[ll_i].afterhour // s_wp_union[ll_wp_union].workprice = ins_s_wp[ll_i].workprice // s_wp_union[ll_wp_union].worktype = ins_s_wp[ll_i].worktype // s_wp_union[ll_wp_union].eq_empnum = ins_s_wp[ll_i].eq_empnum // s_wp_union[ll_wp_union].ifgroup = ins_s_wp[ll_i].ifgroup // s_wp_union[ll_wp_union].u_workqty = ins_s_wp[ll_i].u_workqty // s_wp_union[ll_wp_union].u_workprice = ins_s_wp[ll_i].u_workprice // s_wp_union[ll_wp_union].workprice_bom = ins_s_wp[ll_i].workprice_bom // s_wp_union[ll_wp_union].pricestr = '' // s_wp_union[ll_wp_union].pricestr_value = '' // s_wp_union[ll_wp_union].pro_dscrp = ins_s_wp[ll_i].pro_dscrp // // // _next_wp: // Next // // For ll_i = 1 To ll_wp_union // // Insert Into u_orderrqwp(scid, // orderid, // mtrlid, // procode, // proname, // proorder, // proqty, // wrkgrpid, // lsxtype, // workprice, // status, // ifjd, // lastflag, // sctype, // equipmentid, // partname, // eqworkhour, // Workhour, // beforehour, // afterhour, // ori_workprice, // worktype, // eq_empnum, // ifgroup, // u_workqty, // u_workprice, // pricestr, // pricestr_value, // procode_ori, // pro_dscrp) // Values ( :arg_scid, // :arg_orderid, // :mtrlid, // :s_wp_union[ll_i].procode, // :s_wp_union[ll_i].proname, // :s_wp_union[ll_i].proorder, // :orderqty, // :s_wp_union[ll_i].wrkgrpid, // :s_wp_union[ll_i].lsxtype, // :s_wp_union[ll_i].workprice_bom, // :s_wp_union[ll_i].status, // :s_wp_union[ll_i].ifjd, // :s_wp_union[ll_i].lastflag, // :s_wp_union[ll_i].sctype, // :s_wp_union[ll_i].equipmentid, // :s_wp_union[ll_i].partname, // :s_wp_union[ll_i].eqworkhour, // :s_wp_union[ll_i].Workhour, // :s_wp_union[ll_i].beforehour, // :s_wp_union[ll_i].afterhour, // :s_wp_union[ll_i].workprice_bom, // :s_wp_union[ll_i].worktype, // :s_wp_union[ll_i].eq_empnum, // :s_wp_union[ll_i].ifgroup, // :orderqty, // :s_wp_union[ll_i].workprice_bom, // :s_wp_union[ll_i].pricestr, // :s_wp_union[ll_i].pricestr_value, // :s_wp_union[ll_i].procode, // :s_wp_union[ll_i].pro_dscrp); // If sqlca.SQLCode <> 0 Then // rslt = 0 // arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText // Goto ext // End If // Next End If End If Update u_order_ml Set u_Order_ml.sctaskflag = isnull(uv_sc_task_qty_flag.sctaskflag, '') From u_Order_ml LEFT Outer JOIN uv_sc_task_qty_flag ON u_Order_ml.scid = uv_sc_task_qty_flag.scid And u_Order_ml.OrderID = uv_sc_task_qty_flag.OrderID Where u_Order_ml.scid = :arg_scid And u_order_ml.orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新派工状态失败,原因:'+sqlca.SQLErrText Goto ext End If ext: If rslt = 0 Then Rollback; p_reset() ElseIf arg_ifcommit And rslt = 1 Then Commit; End If Destroy ds_pricestr Destroy ds_orderrqwp Destroy ds_parm Return rslt end function public function integer uof_order_add_pro (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit, boolean arg_ifall, boolean arg_ifupdateprice, integer arg_ifproaudit);Int rslt = 1 Long cnt String ls_partname,ls_mtrlcode Long li_ordertype_mtrldef Long ll_statusflag,li_ifpackpro Decimal lde_price s_mtrlcfg_expr s_pz[],s_empty[] Long ll_i,ll_j String ls_status_zj Decimal ld_qty_zj String ls_utcode[] Long cnt_ut = 0 Decimal ld_workprice,ld_workqty,ld_workprice_sum String ls_rpcode String ls_procode,ls_proname Long ll_proorder,ll_wrkgrpid,ll_lsxtype,ll_ifjd,ll_lastflag Int li_sctype Long ll_equipmentid Decimal ld_eqworkhour,ld_Workhour,ld_beforehour,ld_afterhour,ld_eq_empnum String ls_worktype Int li_if_hourpay Decimal ld_eoq,ld_splitrate Decimal ld_hourpay String ls_mtrlsectype,ls_usermtrlmode,ls_zxmtrlmode,ls_mtrlmode Int li_ifgroup Decimal ld_u_workqty,ld_u_workprice,ld_u_workprice_sum Int li_protype String ls_replacestr Long ll_mtrlid String ls_pricestr,s_rtn Decimal ld_workprice_str,ld_workqty_str,ld_workqty_ori Decimal ld_proqty,ld_hourpay_cmp String ls_pricestr_ori,ls_pricestr_value String ls_parmname Decimal ld_parmvalue String ls_workqtystr_ori,ls_workqtystr_value,ls_workqtystr Decimal ld_u_workqty_str,ld_u_workprice_str String ls_u_workqtystr,ls_u_workqtystr_value,ls_u_pricestr,ls_u_pricestr_value String ls_u_workqtystr_ori,ls_u_pricestr_ori datastore ds_orderrqwp ds_orderrqwp = Create datastore ds_orderrqwp.DataObject = 'ds_orderrqwp_workprice' ds_orderrqwp.SetTransObject(sqlca) datastore ds_pricestr ds_pricestr = Create datastore ds_pricestr.DataObject = 'ds_pricestr_cmpl' ds_pricestr.SetTransObject(sqlca) datastore ds_replacestr ds_replacestr = Create datastore ds_replacestr.DataObject = 'ds_orderrqwp_replacestr' ds_replacestr.SetTransObject(sqlca) datastore ds_parm ds_parm = Create datastore ds_parm.DataObject = 'ds_workprice_parm_def' ds_parm.SetTransObject(sqlca) ds_parm.Retrieve() If uo_option_def_workprice = -1000 Then rslt = 0 arg_msg = '选项:[012]生产计划审核时需要检查是否已定义工价表,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_orderrqwp_union = -1000 Then rslt = 0 arg_msg = '选项:[148]生产计划工序明细按工价表配置及组号合并,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_orderrqwp_auditgj = -1000 Then rslt = 0 arg_msg = '选项:[398]工价表如果未进行工价审,指令单工序明细生成时对应工序工价为0,读取初始默认值失败,操作取消!' Goto ext End If If arg_orderid = 0 Then rslt = 0 arg_msg = "没有审核对象" Goto ext End If If p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then rslt = 0 Goto ext End If If ordertype = 3 Or ifwforder = 1 Then rslt = 1 Goto ext End If Select ordertype, statusflag, ifpackpro, if_hourpay, eoq, splitrate, mtrlsectype, zxmtrlmode, usermtrlmode, mtrlmode, protype, mtrlcode Into :li_ordertype_mtrldef, :ll_statusflag, :li_ifpackpro, :li_if_hourpay, :ld_eoq, :ld_splitrate, :ls_mtrlsectype, :ls_zxmtrlmode, :ls_usermtrlmode, :ls_mtrlmode, :li_protype, :ls_mtrlcode From u_mtrldef Where mtrlid = :mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询物料计划属性失败,'+sqlca.SQLErrText Goto ext End If If (ordertype <> 4 And li_ordertype_mtrldef = 1) Then rslt = 1 Goto ext End If If status <> 1 And status <> 4 And status <> 7 And status <> 5 And status <> 6 Then rslt = 0 arg_msg = "计划只有在(已审核,完成)状态才可以执行重新生成工序,请核对" Goto ext End If //IF uo_option_def_workprice = 0 THEN // rslt = 1 // GOTO ext //END IF //==================================================================== // 处理前检查 //==================================================================== cnt = 0 Select COUNT(*) Into :cnt From (Select rpcode, SUM(ifdftpg) AS ifdftpg From u_sc_workprice Where (Mtrlid = :mtrlid) And (rpcode <> '') And (u_sc_workprice.wpcode = :wpcode) Group By rpcode Having (SUM(ifdftpg) <> 1)) v_rpcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询产品:'+ls_mtrlcode+' 替代工序默认派工属性是否设置正确失败' Goto ext End If If cnt > 0 Then rslt = 0 arg_msg = '产品:'+ls_mtrlcode+' 替代工序默认派工属性必须设置且必须唯一' Goto ext End If If li_protype = 0 Then If li_ifpackpro = 0 Then If ll_statusflag <> 2 Then If uo_option_def_workprice = 1 Or uo_option_def_workprice = 2 Then cnt = 0 Select count(*) Into :cnt From u_sc_workprice Where u_sc_workprice.mtrlid = :mtrlid And u_sc_workprice.wpcode = :wpcode And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0; If sqlca.SQLCode <> 0 Then arg_msg = '查询产品工价表失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt = 0 Then arg_msg = '产品对应车间的工价表未建立,请先建立工价表' rslt = 0 Goto ext End If End If If uo_option_def_workprice = 2 Then cnt = 0 Select count(*) Into :cnt From u_sc_workprice Where u_sc_workprice.mtrlid = :mtrlid And u_sc_workprice.wpcode = :wpcode And u_sc_workprice.auditflag = 0 And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0; If sqlca.SQLCode <> 0 Then arg_msg = '查询产品工价表是否有未审核失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then arg_msg = '产品对应车间的工价表存在未审核工价,请检查' rslt = 0 Goto ext End If End If Else // f_checkpz(status_mode,s_pz[]) f_checkpz_general(mtrlid,status_mode,s_pz[]) For ll_i = 1 To UpperBound(s_pz) ls_status_zj = s_pz[ll_i].cfgname If uo_option_def_workprice = 1 Or uo_option_def_workprice = 2 Then cnt = 0 Select count(*) Into :cnt From u_sc_workprice Where u_sc_workprice.mtrlid = :mtrlid And u_sc_workprice.wpcode = :wpcode And (u_sc_workprice.status = :ls_status_zj Or u_sc_workprice.status = '') And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0; If sqlca.SQLCode <> 0 Then arg_msg = '查询产品子件:'+ls_status_zj+'工价表失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt = 0 Then arg_msg = '产品对应车间的子件:'+ls_status_zj+'工价表未建立,请先建立工价表' rslt = 0 Goto ext End If End If If uo_option_def_workprice = 2 Then cnt = 0 Select count(*) Into :cnt From u_sc_workprice Where u_sc_workprice.mtrlid = :mtrlid And u_sc_workprice.wpcode = :wpcode And (u_sc_workprice.status = :ls_status_zj Or u_sc_workprice.status = '') And u_sc_workprice.auditflag = 0 And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0; If sqlca.SQLCode <> 0 Then arg_msg = '查询产品工价表子件:'+ls_status_zj+'是否有未审核失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then arg_msg = '产品对应车间的工价表子件:'+ls_status_zj+'存在未审核工价,请检查' rslt = 0 Goto ext End If End If Next End If End If End If //==================================================================== // 删除旧工序 //==================================================================== If arg_ifall Then // 全部重新生成 cnt = 0 Select count(*) Into :cnt From u_orderrqwp Where (finishqty > 0 Or taskqty > 0 ) And orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then arg_msg = '查询计划工序明细是否有完成数量失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then arg_msg = '计划工序明细已有完成数量或已派工数,不能生成计划工序明细' rslt = 0 Goto ext End If Select count(*) Into :cnt From v_order_procode Where scid = :arg_scid And orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then arg_msg = '查询计划工序明细是否已开计件单失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then arg_msg = '计划工序明细已开计件单,不能生成计划工序明细' rslt = 0 Goto ext End If Select count(*) Into :cnt From u_sc_task Where scid = :arg_scid And orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then arg_msg = '查询计划工序明细是否已开工序派工单失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then arg_msg = '计划工序明细开工序派工单,不能生成计划工序明细' rslt = 0 Goto ext End If Delete From u_orderrqwp Where orderid = :arg_orderid And scid = :arg_scid And finishqty = 0 And taskqty = 0; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除计划的工序明细表相应记录操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Else // 部分重新生成 If arg_ifupdateprice Then Select count(0) Into :cnt From v_order_procode Where scid = :arg_scid And orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then arg_msg = '查询计划工序明细是否已开计件单失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then arg_msg = '计划工序明细已开计件单,不能更新工价' rslt = 0 Goto ext End If End If Delete From u_sc_task From U_OrderRqwp Inner JOIN u_sc_task ON U_OrderRqwp.scid = u_sc_task.scid And U_OrderRqwp.orderid = u_sc_task.orderid And U_OrderRqwp.Procode = u_sc_task.procode And U_OrderRqwp.Mtrlid = u_sc_task.mtrlid Where (U_OrderRqwp.finishqty = 0) And (U_OrderRqwp.taskqty = 0) And (u_sc_task.scid = :arg_scid) And (u_sc_task.orderid = :arg_orderid) And (u_sc_task.flag = 0); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '删除未审工序派工单失败,' + sqlca.SQLErrText Goto ext End If Delete From u_orderrqwp Where orderid = :arg_orderid And scid = :arg_scid And finishqty = 0 And taskqty = 0 And Not Exists (Select 1 From u_sc_task Where flag = 1 And scid = u_orderrqwp.scid And orderid = u_orderrqwp.orderid And mtrlid = u_orderrqwp.mtrlid And Procode = u_orderrqwp.Procode); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除未派工工序进度失败"+"~n"+sqlca.SQLErrText Goto ext End If End If If li_protype = 0 Then s_pz = s_empty If ll_statusflag <> 2 Then //非组合配置产品 cnt = 0 Select count(*) Into :cnt From u_sc_workprice Where mtrlid = :mtrlid And ltrim(rtrim(utcode)) <> '' And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询产品价格表是否有组号失败'+sqlca.SQLErrText Goto ext End If If uo_option_orderrqwp_union = 0 Or uo_option_orderrqwp_union = 1 Or cnt = 0 Then If Not arg_ifall And arg_ifupdateprice Then Update U_OrderRqwp Set workPrice = u_sc_workprice.workPrice, ori_workprice = u_sc_workprice.workPrice From u_sc_workprice Inner JOIN U_OrderRqwp ON u_sc_workprice.Mtrlid = U_OrderRqwp.Mtrlid And u_sc_workprice.procode = U_OrderRqwp.Procode Where (u_sc_workprice.ifownpro = 0) And (u_sc_workprice.lsxtype <> 0) And (u_sc_workprice.wpcode = :wpcode) And (U_OrderRqwp.scid = :arg_scid) And (u_orderrqwp.orderid = :arg_orderid); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新工价失败,' + sqlca.SQLErrText Goto ext End If End If Insert Into u_orderrqwp(scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, ifgroup, u_workqty, u_workprice, replacestr, procode_ori, rpcode, auditflag_gj) Select u_order_ml.scid, u_order_ml.orderid, u_order_ml.mtrlid, u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.workqty * u_order_ml.orderqty, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, case :uo_option_orderrqwp_auditgj when 0 then u_sc_workprice.workprice else (case u_sc_workprice.auditflag_gj when 0 then 0 else u_sc_workprice.workprice end ) end , u_sc_workprice.status, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, case :uo_option_orderrqwp_auditgj when 0 then u_sc_workprice.workprice else (case u_sc_workprice.auditflag_gj when 0 then 0 else u_sc_workprice.workprice end ) end , u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.ifgroup, u_sc_workprice.u_workqty * u_order_ml.orderqty, u_sc_workprice.u_workprice, u_sc_workprice.replacestr, u_sc_workprice.procode, u_sc_workprice.rpcode, u_sc_workprice.auditflag_gj From u_sc_workprice Inner JOIN u_Order_ml ON u_sc_workprice.Mtrlid = u_Order_ml.mtrlid LEFT Outer JOIN U_OrderRqwp AS U_OrderPro ON u_Order_ml.scid = U_OrderPro.scid And u_Order_ml.OrderID = U_OrderPro.orderid And u_Order_ml.mtrlid = U_OrderPro.Mtrlid And u_sc_workprice.procode = U_OrderPro.Procode Where u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And u_sc_workprice.wpcode = :wpcode And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '') And U_OrderPro.scid Is Null; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If Else cnt_ut = 1 Declare cur_ut2 Cursor For Select distinct utcode From u_sc_workprice Where mtrlid = :mtrlid And lTrim(rtrim(utcode)) <> '' And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And u_sc_workprice.wpcode = :wpcode; Open cur_ut2; Fetch cur_ut2 Into :ls_utcode[cnt_ut]; Do While sqlca.SQLCode = 0 cnt_ut++ Fetch cur_ut2 Into :ls_utcode[cnt_ut]; Loop Close cur_ut2; cnt_ut = cnt_ut - 1 For ll_i = 1 To cnt_ut ld_workprice = 0 ld_workqty = 0 Select sum(workprice),sum(workqty),sum(u_workprice),sum(u_workqty) Into :ld_workprice,:ld_workqty,:ld_u_workprice,:ld_u_workqty From u_sc_workprice Where lTrim(rtrim(utcode)) = :ls_utcode[ll_i] And mtrlid = :mtrlid And u_sc_workprice.wpcode = :wpcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询组号:'+ls_utcode[ll_i]+' 合计工价,数量失败,'+sqlca.SQLErrText Goto ext End If Select top 1 u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.ifgroup, u_sc_workprice.replacestr, u_sc_workprice.rpcode Into :ls_procode, :ls_proname, :ll_proorder, :ll_wrkgrpid, :ll_lsxtype, :ll_ifjd, :ll_lastflag, :li_sctype, :ll_equipmentid, :ls_partname, :ld_eqworkhour, :ld_Workhour, :ld_beforehour, :ld_afterhour, :ls_worktype, :ld_eq_empnum, :li_ifgroup, :ls_replacestr, :ls_rpcode From u_sc_workprice Where mtrlid = :mtrlid And utcode = :ls_utcode[ll_i] And u_sc_workprice.wpcode = :wpcode And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '') Order By lastflag Desc,u_sc_workprice.proorder Desc; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询工价表组号:'+ls_utcode[ll_i]+'末工序相关信息失败'+sqlca.SQLErrText Goto ext End If ls_proname = '工序:(组:'+Trim(ls_utcode[ll_i])+')' cnt = 0 Select COUNT(0) Into :cnt From u_orderrqwp Where scid = :arg_scid And orderid = :arg_orderid And mtrlid = :mtrlid And Procode = :ls_procode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询现有工序进度失败,' + sqlca.SQLErrText Goto ext End If If cnt = 0 Then Insert Into u_orderrqwp (scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, ifgroup, u_workprice, u_workqty, replacestr, procode_ori, rpcode) Values (:arg_scid, :arg_orderid, :mtrlid, :ls_procode, :ls_proname, :ll_proorder, :orderqty, :ll_wrkgrpid, :ll_lsxtype, :ld_workprice, :status_mode, :ll_ifjd, :ll_lastflag, :li_sctype, :ll_equipmentid, :ls_partname, :ld_eqworkhour, :ld_Workhour, :ld_beforehour, :ld_afterhour, :ld_workprice_sum, :ls_worktype, :ld_eq_empnum, :li_ifgroup, :ld_u_workprice, :ld_u_workqty, :ls_replacestr, :ls_procode, :ls_rpcode); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If Else If arg_ifupdateprice Then Update u_OrderRqwp Set workprice = :ld_workprice, ori_workprice = :ld_workprice_sum Where scid = :arg_scid And orderid = :arg_orderid And mtrlid = :mtrlid And Procode = :ls_procode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新工序进度工价失败,' + sqlca.SQLErrText Goto ext End If End If End If Next //加空组号工序 If Not arg_ifall And arg_ifupdateprice Then Update U_OrderRqwp Set workPrice = u_sc_workprice.workPrice, ori_workprice = u_sc_workprice.workPrice From u_sc_workprice Inner JOIN U_OrderRqwp ON u_sc_workprice.Mtrlid = U_OrderRqwp.Mtrlid And u_sc_workprice.procode = U_OrderRqwp.Procode Where U_OrderRqwp.orderid = :arg_orderid And U_OrderRqwp.scid = :arg_scid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And u_sc_workprice.utcode = '' And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '') And u_sc_workprice.wpcode = :wpcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新工价失败,' + sqlca.SQLErrText Goto ext End If End If Insert Into u_orderrqwp(scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, ifgroup, u_workprice, u_workqty, replacestr, procode_ori, rpcode) Select u_order_ml.scid, u_order_ml.orderid, u_order_ml.mtrlid, u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.workqty * u_order_ml.orderqty, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, u_sc_workprice.workprice, u_sc_workprice.status, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, u_sc_workprice.workprice, u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.ifgroup, u_sc_workprice.u_workprice, u_sc_workprice.u_workqty * u_order_ml.orderqty, u_sc_workprice.replacestr, u_sc_workprice.procode, u_sc_workprice.rpcode From u_sc_workprice Inner JOIN u_Order_ml ON u_sc_workprice.Mtrlid = u_Order_ml.mtrlid LEFT Outer JOIN U_OrderRqwp AS U_OrderPro ON u_Order_ml.scid = U_OrderPro.scid And u_Order_ml.OrderID = U_OrderPro.orderid And u_Order_ml.mtrlid = U_OrderPro.Mtrlid And u_sc_workprice.procode = U_OrderPro.Procode Where u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And u_sc_workprice.utcode = '' And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '') And u_sc_workprice.wpcode = :wpcode And U_OrderPro.scid Is Null; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If End If Else //组合配置产品 cnt = 0 Select count(*) Into :cnt From u_sc_workprice Where mtrlid = :mtrlid And ltrim(rtrim(utcode)) <> '' And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询产品价格表是否有组号失败'+sqlca.SQLErrText Goto ext End If If uo_option_orderrqwp_union = 0 Or cnt = 0 Then // f_checkpz(status_mode,s_pz[]) f_checkpz_general(mtrlid,status_mode,s_pz[]) For ll_i = 1 To UpperBound(s_pz) ls_status_zj = s_pz[ll_i].cfgname ld_qty_zj = Dec(s_pz[ll_i].qty) If Not arg_ifall And arg_ifupdateprice Then Update U_OrderRqwp Set workPrice = u_sc_workprice.workPrice, ori_workprice = u_sc_workprice.workPrice From u_sc_workprice Inner JOIN U_OrderRqwp ON u_sc_workprice.Mtrlid = U_OrderRqwp.Mtrlid And u_sc_workprice.procode = U_OrderRqwp.Procode Where U_OrderRqwp.orderid = :arg_orderid And U_OrderRqwp.scid = :arg_scid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '') And (u_sc_workprice.status = :ls_status_zj) And u_sc_workprice.wpcode = :wpcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新工价失败,' + sqlca.SQLErrText Goto ext End If End If Insert Into u_orderrqwp(scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, ifgroup, u_workprice, u_workqty, replacestr, procode_ori, rpcode, auditflag_gj) Select u_order_ml.scid, u_order_ml.orderid, u_order_ml.mtrlid, u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.workqty * u_order_ml.orderqty * :ld_qty_zj, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, case :uo_option_orderrqwp_auditgj when 0 then u_sc_workprice.workprice else (case u_sc_workprice.auditflag_gj when 0 then 0 else u_sc_workprice.workprice end ) end , u_sc_workprice.status, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, case :uo_option_orderrqwp_auditgj when 0 then u_sc_workprice.workprice else (case u_sc_workprice.auditflag_gj when 0 then 0 else u_sc_workprice.workprice end ) end , u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.ifgroup, u_sc_workprice.u_workprice, u_sc_workprice.u_workqty * u_order_ml.orderqty * :ld_qty_zj, u_sc_workprice.replacestr, u_sc_workprice.procode, u_sc_workprice.rpcode, u_sc_workprice.auditflag_gj From u_sc_workprice Inner JOIN u_Order_ml ON u_sc_workprice.Mtrlid = u_Order_ml.mtrlid LEFT Outer JOIN U_OrderRqwp AS U_OrderPro ON u_Order_ml.scid = U_OrderPro.scid And u_Order_ml.OrderID = U_OrderPro.orderid And u_Order_ml.mtrlid = U_OrderPro.Mtrlid And u_sc_workprice.procode = U_OrderPro.Procode Where u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '') And (u_sc_workprice.status = :ls_status_zj) And u_sc_workprice.wpcode = :wpcode And U_OrderPro.scid Is Null; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If Next //加空子件工序(公共) If Not arg_ifall And arg_ifupdateprice Then Update U_OrderRqwp Set workPrice = u_sc_workprice.workPrice, ori_workprice = u_sc_workprice.workPrice From u_sc_workprice Inner JOIN U_OrderRqwp ON u_sc_workprice.Mtrlid = U_OrderRqwp.Mtrlid And u_sc_workprice.procode = U_OrderRqwp.Procode Where U_OrderRqwp.orderid = :arg_orderid And U_OrderRqwp.scid = :arg_scid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '') And (u_sc_workprice.status = '') And u_sc_workprice.wpcode = :wpcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新工价失败,' + sqlca.SQLErrText Goto ext End If End If Insert Into u_orderrqwp(scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, ifgroup, u_workprice, u_workqty, replacestr, procode_ori, rpcode, auditflag_gj) Select u_order_ml.scid, u_order_ml.orderid, u_order_ml.mtrlid, u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.workqty * u_order_ml.orderqty * :ld_qty_zj, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, case :uo_option_orderrqwp_auditgj when 0 then u_sc_workprice.workprice else (case u_sc_workprice.auditflag_gj when 0 then 0 else u_sc_workprice.workprice end ) end , u_sc_workprice.status, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, case :uo_option_orderrqwp_auditgj when 0 then u_sc_workprice.workprice else (case u_sc_workprice.auditflag_gj when 0 then 0 else u_sc_workprice.workprice end ) end , u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.ifgroup, u_sc_workprice.u_workprice, u_sc_workprice.u_workqty * u_order_ml.orderqty * :ld_qty_zj, u_sc_workprice.replacestr, u_sc_workprice.procode, u_sc_workprice.rpcode, u_sc_workprice.auditflag_gj From u_sc_workprice Inner JOIN u_Order_ml ON u_sc_workprice.Mtrlid = u_Order_ml.mtrlid LEFT Outer JOIN U_OrderRqwp AS U_OrderPro ON u_Order_ml.scid = U_OrderPro.scid And u_Order_ml.OrderID = U_OrderPro.orderid And u_Order_ml.mtrlid = U_OrderPro.Mtrlid And u_sc_workprice.procode = U_OrderPro.Procode Where u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '') And (u_sc_workprice.status = '') And u_sc_workprice.wpcode = :wpcode And U_OrderPro.scid Is Null; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序[空子件]失败,原因:'+sqlca.SQLErrText Goto ext End If Else // f_checkpz(status_mode,s_pz[]) cnt_ut = 1 f_checkpz_general(mtrlid,status_mode,s_pz[]) Declare cur_ut Cursor For Select distinct utcode From u_sc_workprice Where mtrlid = :mtrlid And lTrim(rtrim(utcode)) <> '' And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And u_sc_workprice.wpcode = :wpcode; Open cur_ut; Fetch cur_ut Into :ls_utcode[cnt_ut]; Do While sqlca.SQLCode = 0 cnt_ut++ Fetch cur_ut Into :ls_utcode[cnt_ut]; Loop Close cur_ut; cnt_ut = cnt_ut - 1 For ll_i = 1 To cnt_ut ld_workprice_sum = 0 For ll_j = 1 To UpperBound(s_pz) ls_status_zj = s_pz[ll_j].cfgname ld_qty_zj = Dec(s_pz[ll_j].qty) ld_workprice = 0 ld_workqty = 0 ld_u_workprice = 0 ld_u_workqty = 0 Select workprice, workqty, u_workprice, u_workqty,pricestr, workqtystr, u_pricestr, u_workqtystr, procode Into :ld_workprice, :ld_workqty, :ld_u_workprice, :ld_u_workqty, :ls_pricestr, :ls_workqtystr, :ls_u_pricestr, :ls_u_workqtystr, :ls_procode From u_sc_workprice Where lTrim(rtrim(utcode)) = :ls_utcode[ll_i] And lTrim(rtrim(status)) = :ls_status_zj And mtrlid = :mtrlid And u_sc_workprice.wpcode = :wpcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询组号:'+ls_utcode[ll_i]+' 配置:'+ls_status_zj+' 工价失败,'+sqlca.SQLErrText Goto ext End If If Trim(ls_workqtystr) <> '' Then If uof_workprice_parm(mtrlid,wpcode,ls_procode,ld_workqty * ld_qty_zj,ls_workqtystr,1,ls_workqtystr_value,ld_workqty_str) = 1 Then ld_workqty = ld_workqty_str End If End If If Trim(ls_pricestr) <> '' Then If uof_workprice_parm(mtrlid,wpcode,ls_procode,ld_workqty * ld_qty_zj,ls_pricestr,0,ls_pricestr_value,ld_workprice_str) = 1 Then ld_workprice = ld_workprice_str End If End If If Trim(ls_u_workqtystr) <> '' Then If uof_workprice_parm(mtrlid,wpcode,ls_procode,ld_workqty * ld_qty_zj,ls_u_workqtystr,1,ls_u_workqtystr_value,ld_u_workqty_str) = 1 Then ld_u_workqty = ld_u_workqty_str End If End If If Trim(ls_u_pricestr) <> '' Then If uof_workprice_parm(mtrlid,wpcode,ls_procode,ld_workqty * ld_qty_zj,ls_u_pricestr,0,ls_u_pricestr_value,ld_u_workprice_str) = 1 Then ld_u_workprice = ld_u_workprice_str End If End If ld_workprice_sum = ld_workprice_sum + ld_workprice * ld_workqty * ld_qty_zj ld_u_workprice_sum = ld_u_workprice_sum + ld_u_workprice * ld_u_workqty * ld_qty_zj Next Select top 1 u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.ifgroup, u_sc_workprice.replacestr, u_sc_workprice.rpcode Into :ls_procode, :ls_proname, :ll_proorder, :ll_wrkgrpid, :ll_lsxtype, :ll_ifjd, :ll_lastflag, :li_sctype, :ll_equipmentid, :ls_partname, :ld_eqworkhour, :ld_Workhour, :ld_beforehour, :ld_afterhour, :ls_worktype, :ld_eq_empnum, :li_ifgroup, :ls_replacestr, :ls_rpcode From u_sc_workprice Where mtrlid = :mtrlid And utcode = :ls_utcode[ll_i] And u_sc_workprice.wpcode = :wpcode Order By lastflag Desc; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询工价表组号:'+ls_utcode[ll_i]+'相关信息失败'+sqlca.SQLErrText Goto ext End If cnt = 0 Select count(0) Into :cnt From u_orderrqwp Where scid = :arg_scid And orderid = :arg_orderid And mtrlid = :mtrlid And Procode = :ls_procode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询旧工序进度失败,' + sqlca.SQLErrText Goto ext End If If cnt = 0 Then Insert Into u_orderrqwp (scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, ifgroup, u_workprice, u_workqty, replacestr, procode_ori, rpcode) Values (:arg_scid, :arg_orderid, :mtrlid, :ls_procode, :ls_proname, :ll_proorder, :orderqty, :ll_wrkgrpid, :ll_lsxtype, :ld_workprice_sum, :status_mode, :ll_ifjd, :ll_lastflag, :li_sctype, :ll_equipmentid, :ls_partname, :ld_eqworkhour, :ld_Workhour, :ld_beforehour, :ld_afterhour, :ld_workprice_sum, :ls_worktype, :ld_eq_empnum, :li_ifgroup, :ld_u_workprice_sum, :orderqty, :ls_replacestr, :ls_procode, :ls_rpcode); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If Else If Not arg_ifall And arg_ifupdateprice Then Update u_orderrqwp Set workprice = :ld_workprice_sum, ori_workprice = :ld_workprice_sum Where scid = :arg_scid And orderid = :arg_orderid And mtrlid = :mtrlid And Procode = :ls_procode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新旧工序进度工价失败,' + sqlca.SQLErrText Goto ext End If End If End If Next //加空组号工序 For ll_i = 1 To UpperBound(s_pz) ls_status_zj = s_pz[ll_i].cfgname ld_qty_zj = Dec(s_pz[ll_i].qty) If Not arg_ifall And arg_ifupdateprice Then Update U_OrderRqwp Set workPrice = u_sc_workprice.workPrice, ori_workprice = u_sc_workprice.workPrice From u_sc_workprice Inner JOIN U_OrderRqwp ON u_sc_workprice.Mtrlid = U_OrderRqwp.Mtrlid And u_sc_workprice.procode = U_OrderRqwp.Procode Where U_OrderRqwp.orderid = :arg_orderid And U_OrderRqwp.scid = :arg_scid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And (u_sc_workprice.status = :ls_status_zj) And u_sc_workprice.utcode = '' And u_sc_workprice.wpcode = :wpcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新工价失败,' + sqlca.SQLErrText Goto ext End If End If Insert Into u_orderrqwp(scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, u_workprice, u_workqty, replacestr, procode_ori, rpcode) Select u_order_ml.scid, u_order_ml.orderid, u_order_ml.mtrlid, u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.workqty * u_order_ml.orderqty * :ld_qty_zj, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, u_sc_workprice.workprice, u_sc_workprice.status, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, u_sc_workprice.workprice, u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.u_workprice, u_sc_workprice.u_workqty * u_order_ml.orderqty * :ld_qty_zj, u_sc_workprice.replacestr, u_sc_workprice.procode, u_sc_workprice.rpcode From u_sc_workprice Inner JOIN u_Order_ml ON u_sc_workprice.Mtrlid = u_Order_ml.mtrlid LEFT Outer JOIN U_OrderRqwp AS U_OrderPro ON u_Order_ml.scid = U_OrderPro.scid And u_Order_ml.OrderID = U_OrderPro.orderid And u_Order_ml.mtrlid = U_OrderPro.Mtrlid And u_sc_workprice.procode = U_OrderPro.Procode Where u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And (u_sc_workprice.status = :ls_status_zj) And u_sc_workprice.utcode = '' And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '') And u_sc_workprice.wpcode = :wpcode And U_OrderPro.scid Is Null; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If Next //加空子件工序 If Not arg_ifall And arg_ifupdateprice Then Update U_OrderRqwp Set workPrice = u_sc_workprice.workPrice, ori_workprice = u_sc_workprice.workPrice From u_sc_workprice Inner JOIN U_OrderRqwp ON u_sc_workprice.Mtrlid = U_OrderRqwp.Mtrlid And u_sc_workprice.procode = U_OrderRqwp.Procode Where U_OrderRqwp.orderid = :arg_orderid And U_OrderRqwp.scid = :arg_scid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And (u_sc_workprice.status = '') And u_sc_workprice.utcode = '' And u_sc_workprice.wpcode = :wpcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新工价失败,' + sqlca.SQLErrText Goto ext End If End If Insert Into u_orderrqwp(scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, u_workprice, u_workqty, replacestr, procode_ori, rpcode) Select u_order_ml.scid, u_order_ml.orderid, u_order_ml.mtrlid, u_sc_workprice.procode, u_sc_workprice.proname, u_sc_workprice.proorder, u_sc_workprice.workqty * u_order_ml.orderqty * :ld_qty_zj, u_sc_workprice.wrkgrpid, u_sc_workprice.lsxtype, u_sc_workprice.workprice, u_sc_workprice.status, u_sc_workprice.ifjd, u_sc_workprice.lastflag, u_sc_workprice.sctype, u_sc_workprice.equipmentid, u_sc_workprice.partname, u_sc_workprice.eqworkhour, u_sc_workprice.Workhour, u_sc_workprice.beforehour, u_sc_workprice.afterhour, u_sc_workprice.workprice, u_sc_workprice.worktype, u_sc_workprice.eq_empnum, u_sc_workprice.u_workprice, u_sc_workprice.u_workqty * u_order_ml.orderqty * :ld_qty_zj, u_sc_workprice.replacestr, u_sc_workprice.procode, u_sc_workprice.rpcode From u_sc_workprice Inner JOIN u_Order_ml ON u_sc_workprice.Mtrlid = u_Order_ml.mtrlid LEFT Outer JOIN U_OrderRqwp AS U_OrderPro ON u_Order_ml.scid = U_OrderPro.scid And u_Order_ml.OrderID = U_OrderPro.orderid And u_Order_ml.mtrlid = U_OrderPro.Mtrlid And u_sc_workprice.procode = U_OrderPro.Procode Where u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid And u_sc_workprice.ifownpro = 0 And u_sc_workprice.lsxtype <> 0 And (u_sc_workprice.status = '') And u_sc_workprice.utcode = '' And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '') And u_sc_workprice.wpcode = :wpcode And U_OrderPro.scid Is Null; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序[空子件]失败,原因:'+sqlca.SQLErrText Goto ext End If Update U_OrderRqwp Set U_OrderRqwp.workPrice = u_sc_workprice.workPrice, U_OrderRqwp.ori_workPrice = u_sc_workprice.workPrice From U_OrderRqwp Inner JOIN u_Order_ml ON U_OrderRqwp.scid = u_Order_ml.scid And U_OrderRqwp.orderid = u_Order_ml.OrderID Inner JOIN u_sc_workprice ON u_Order_ml.mtrlid = u_sc_workprice.Mtrlid And u_Order_ml.status_mode = u_sc_workprice.status And U_OrderRqwp.Proname = u_sc_workprice.Proname And u_Order_ml.wpcode = u_sc_workprice.wpcode Where U_OrderRqwp.scid = :arg_scid And u_orderrqwp.orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If End If End If //如果按组号合并,则不再执行公式 If uo_option_orderrqwp_union = 0 Or uo_option_orderrqwp_union = 1 And cnt_ut = 0 Then ds_orderrqwp.Retrieve(arg_scid,arg_orderid,wpcode) For ll_i = 1 To ds_orderrqwp.RowCount() ls_pricestr = ds_orderrqwp.Object.u_sc_workprice_pricestr[ll_i] ll_mtrlid = ds_orderrqwp.Object.u_orderrqwp_mtrlid[ll_i] ls_procode = ds_orderrqwp.Object.u_orderrqwp_procode[ll_i] ls_worktype = ds_orderrqwp.Object.u_orderrqwp_worktype[ll_i] ld_hourpay = ds_orderrqwp.Object.hourpay[ll_i] ld_proqty = ds_orderrqwp.Object.u_orderrqwp_proqty[ll_i] ld_Workhour = ds_orderrqwp.Object.u_orderrqwp_workhour[ll_i] ld_beforehour = ds_orderrqwp.Object.u_orderrqwp_beforehour[ll_i] ld_afterhour = ds_orderrqwp.Object.u_orderrqwp_afterhour[ll_i] ld_eq_empnum = ds_orderrqwp.Object.u_orderrqwp_eq_empnum[ll_i] ld_eqworkhour = ds_orderrqwp.Object.u_orderrqwp_eqworkhour[ll_i] ls_workqtystr = ds_orderrqwp.Object.u_sc_workprice_workqtystr[ll_i] ld_workqty_ori = ds_orderrqwp.Object.u_sc_workprice_workqty[ll_i] ld_workprice_str = ds_orderrqwp.Object.u_orderrqwp_workprice[ll_i] ld_u_workqty_str = ds_orderrqwp.Object.u_orderrqwp_u_workqty[ll_i] ld_u_workprice_str = ds_orderrqwp.Object.u_orderrqwp_u_workprice[ll_i] ls_u_workqtystr = ds_orderrqwp.Object.u_sc_workprice_u_workqtystr[ll_i] ls_u_pricestr = ds_orderrqwp.Object.u_sc_workprice_u_pricestr[ll_i] ld_workqty_str = ld_proqty If ld_workqty_ori = 0 Then ld_workqty_ori = 1 ls_pricestr_ori = '' ls_pricestr_value = '' ls_workqtystr_ori = '' ls_workqtystr_value = '' //1.数量公式 If Trim(ls_workqtystr) <> '' Then ls_workqtystr_ori = ls_workqtystr uof_workprice_parm(ll_mtrlid,wpcode,ls_procode,ld_proqty,ls_workqtystr,1,ls_workqtystr_value,ld_workqty_str) ld_proqty = ld_workqty_str End If //2.单价公式 If Trim(ls_pricestr) <> '' Then ls_pricestr_ori = ls_pricestr uof_workprice_parm(ll_mtrlid,wpcode,ls_procode,ld_proqty,ls_pricestr,0,ls_pricestr_value,ld_workprice_str) Else If li_if_hourpay = 2 Then If ld_proqty > ld_splitrate And ld_splitrate <> 0 Then ld_workprice_str = (ld_splitrate * (ld_Workhour + ld_eqworkhour * ld_eq_empnum) + ld_beforehour + ld_afterhour) / ld_splitrate * ld_hourpay Else ld_workprice_str = (ld_proqty * (ld_Workhour + ld_eqworkhour * ld_eq_empnum) + ld_beforehour + ld_afterhour) / ld_proqty * ld_hourpay End If Else Goto _u_workqty End If End If //3.折算数量 _u_workqty: If Trim(ls_u_workqtystr) <> '' Then ls_u_workqtystr_ori = ls_u_workqtystr uof_workprice_parm(ll_mtrlid,wpcode,ls_procode,ld_proqty,ls_u_workqtystr,1,ls_u_workqtystr_value,ld_u_workqty_str) End If //4.折算单价 If Trim(ls_u_pricestr) <> '' Then ls_u_pricestr_ori = ls_u_pricestr uof_workprice_parm(ll_mtrlid,wpcode,ls_procode,ld_proqty,ls_u_pricestr,0,ls_u_pricestr_value,ld_u_workprice_str) End If Update u_orderrqwp Set workprice = :ld_workprice_str, ori_workprice = :ld_workprice_str, pricestr = :ls_pricestr_ori, pricestr_value = :ls_pricestr_value, proqty = :ld_workqty_str, workqtystr = :ls_workqtystr_ori, workqtystr_value = :ls_workqtystr_value, u_workqty = :ld_u_workqty_str, u_workqtystr = :ls_u_workqtystr_ori, u_workqtystr_value = :ls_u_workqtystr_value, u_workprice = :ld_u_workprice_str, u_pricestr = :ls_u_pricestr_ori, u_pricestr_value = :ls_u_pricestr_value Where scid = :arg_scid And orderid = :arg_orderid And mtrlid = :ll_mtrlid And Procode = :ls_procode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '按单价公式更新工序单价失败,'+sqlca.SQLErrText Goto ext End If Next End If Else it_mx_bomwp = 0 deep = 0 If uof_protype_workprice(mtrlid,pfcode,wpcode,orderqty,arg_msg) = 0 Then rslt = 0 arg_msg = '计算下级虚拟部件工价表失败,'+arg_msg Goto ext End If // DELETE FROM u_orderrqwp // WHERE orderid = :arg_orderid // And scid = :arg_scid; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "删除计划的工序明细表相应记录操作失败"+"~n"+sqlca.SQLErrText // GOTO ext // END IF // If li_protype = 1 Then // 清空原工序的工序合并说明、原工序号 Update u_orderrqwp Set pro_dscrp = '', procode_ori = '' Where scid = :arg_scid And orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '清空原工序的工序合并说明、原工序号失败,' + sqlca.SQLErrText Goto ext End If For ll_i = 1 To it_mx_bomwp // 更新原工序的工序合并说明、原工序号 Update u_orderrqwp Set pro_dscrp = case when len(pro_dscrp + ',' + :ins_s_wp[ll_i].pro_dscrp) < 255 then pro_dscrp + ',' + :ins_s_wp[ll_i].pro_dscrp else pro_dscrp End, procode_ori = :ins_s_wp[ll_i].procode Where scid = :arg_scid And orderid = :arg_orderid And mtrlid = :mtrlid And Procode = :ins_s_wp[ll_i].mtrlcode + '_' + :ins_s_wp[ll_i].Procode And (finishqty > 0 Or taskqty > 0); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新原工序的工序合并说明、原工序号失败,' + sqlca.SQLErrText Goto ext End If If sqlca.SQLNRows = 0 Then Update u_orderrqwp Set proqty = proqty + :ins_s_wp[ll_i].workqty, u_workqty = u_workqty + :ins_s_wp[ll_i].u_workqty, pro_dscrp = case when len(pro_dscrp + ',' + :ins_s_wp[ll_i].pro_dscrp) < 255 then pro_dscrp + ',' + :ins_s_wp[ll_i].pro_dscrp else pro_dscrp End Where scid = :arg_scid And orderid = :arg_orderid And mtrlid = :mtrlid And Procode = :ins_s_wp[ll_i].mtrlcode + '_' + :ins_s_wp[ll_i].Procode; If sqlca.SQLCode = 0 Then If sqlca.SQLNRows = 0 Then Insert Into u_orderrqwp(scid, orderid, mtrlid, procode, proname, proorder, proqty, wrkgrpid, lsxtype, workprice, status, ifjd, lastflag, sctype, equipmentid, partname, eqworkhour, Workhour, beforehour, afterhour, ori_workprice, worktype, eq_empnum, ifgroup, u_workqty, u_workprice, pricestr, pricestr_value, procode_ori, pro_dscrp, replacestr, sonmtrlid, rpcode, auditflag_gj) Values (:arg_scid, :arg_orderid, :mtrlid, :ins_s_wp[ll_i].mtrlcode + '_' + :ins_s_wp[ll_i].procode, :ins_s_wp[ll_i].proname, :ins_s_wp[ll_i].proorder, :ins_s_wp[ll_i].workqty, :ins_s_wp[ll_i].wrkgrpid, :ins_s_wp[ll_i].lsxtype, case :uo_option_orderrqwp_auditgj when 0 then :ins_s_wp[ll_i].workprice else (case :ins_s_wp[ll_i].auditflag_gj when 0 then 0 else :ins_s_wp[ll_i].workprice end ) end , :ins_s_wp[ll_i].status, :ins_s_wp[ll_i].ifjd, :ins_s_wp[ll_i].lastflag, :ins_s_wp[ll_i].sctype, :ins_s_wp[ll_i].equipmentid, :ins_s_wp[ll_i].partname, :ins_s_wp[ll_i].eqworkhour, :ins_s_wp[ll_i].Workhour, :ins_s_wp[ll_i].beforehour, :ins_s_wp[ll_i].afterhour, case :uo_option_orderrqwp_auditgj when 0 then :ins_s_wp[ll_i].workprice else (case :ins_s_wp[ll_i].auditflag_gj when 0 then 0 else :ins_s_wp[ll_i].workprice end ) end , :ins_s_wp[ll_i].worktype, :ins_s_wp[ll_i].eq_empnum, :ins_s_wp[ll_i].ifgroup, :ins_s_wp[ll_i].u_workqty, :ins_s_wp[ll_i].u_workprice, :ins_s_wp[ll_i].pricestr, :ins_s_wp[ll_i].pricestr_value, :ins_s_wp[ll_i].procode, :ins_s_wp[ll_i].pro_dscrp, :ins_s_wp[ll_i].replacestr, :ins_s_wp[ll_i].sonmtrlid, :ins_s_wp[ll_i].rpcode, :ins_s_wp[ll_i].auditflag_gj); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If End If Else If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新生产计划工序失败,原因:'+sqlca.SQLErrText Goto ext End If End If Else If Not arg_ifall And arg_ifupdateprice Then Update u_orderrqwp Set workprice = :ins_s_wp[ll_i].workprice, ori_workprice = :ins_s_wp[ll_i].workprice, auditflag_gj = :ins_s_wp[ll_i].auditflag_gj Where scid = :arg_scid And orderid = :arg_orderid And mtrlid = :mtrlid And Procode = :ins_s_wp[ll_i].mtrlcode + '_' + :ins_s_wp[ll_i].Procode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新旧工序进度工价失败,' + sqlca.SQLErrText Goto ext End If End If End If Next ElseIf li_protype = 2 Then // s_workpricetable s_wp_union[] // Long ll_wp_union // // FOR ll_i = 1 To it_mx_bomwp // FOR ll_j = 1 To ll_wp_union // IF ins_s_wp[ll_i].Procode = s_wp_union[ll_j].Procode THEN // s_wp_union[ll_j].workprice_bom = s_wp_union[ll_j].workprice_bom + ins_s_wp[ll_i].workprice_bom // IF lena(s_wp_union[ll_j].pro_dscrp + ',' + ins_s_wp[ll_i].pro_dscrp) > 255 THEN // s_wp_union[ll_j].pro_dscrp = leftA(s_wp_union[ll_j].pro_dscrp + ',' + ins_s_wp[ll_i].pro_dscrp,255) // ELSE // s_wp_union[ll_j].pro_dscrp = s_wp_union[ll_j].pro_dscrp + ',' + ins_s_wp[ll_i].pro_dscrp // END IF // GOTO _next_wp // END IF // NEXT // // ll_wp_union++ // // s_wp_union[ll_wp_union].Procode = ins_s_wp[ll_i].Procode // s_wp_union[ll_wp_union].proname = ins_s_wp[ll_i].proname // s_wp_union[ll_wp_union].proorder = ins_s_wp[ll_i].proorder // s_wp_union[ll_wp_union].workqty = ins_s_wp[ll_i].workqty // s_wp_union[ll_wp_union].wrkgrpid = ins_s_wp[ll_i].wrkgrpid // s_wp_union[ll_wp_union].lsxtype = ins_s_wp[ll_i].lsxtype // s_wp_union[ll_wp_union].workPrice = ins_s_wp[ll_i].workPrice // s_wp_union[ll_wp_union].status = ins_s_wp[ll_i].status // s_wp_union[ll_wp_union].ifjd = ins_s_wp[ll_i].ifjd // s_wp_union[ll_wp_union].lastflag = ins_s_wp[ll_i].lastflag // s_wp_union[ll_wp_union].sctype = ins_s_wp[ll_i].sctype // s_wp_union[ll_wp_union].equipmentid = ins_s_wp[ll_i].equipmentid // s_wp_union[ll_wp_union].partname = ins_s_wp[ll_i].partname // s_wp_union[ll_wp_union].eqworkhour = ins_s_wp[ll_i].eqworkhour // s_wp_union[ll_wp_union].Workhour = ins_s_wp[ll_i].Workhour // s_wp_union[ll_wp_union].beforehour = ins_s_wp[ll_i].beforehour // s_wp_union[ll_wp_union].afterhour = ins_s_wp[ll_i].afterhour // s_wp_union[ll_wp_union].workPrice = ins_s_wp[ll_i].workPrice // s_wp_union[ll_wp_union].worktype = ins_s_wp[ll_i].worktype // s_wp_union[ll_wp_union].eq_empnum = ins_s_wp[ll_i].eq_empnum // s_wp_union[ll_wp_union].ifgroup = ins_s_wp[ll_i].ifgroup // s_wp_union[ll_wp_union].u_workqty = ins_s_wp[ll_i].u_workqty // s_wp_union[ll_wp_union].u_workprice = ins_s_wp[ll_i].u_workprice // s_wp_union[ll_wp_union].workprice_bom = ins_s_wp[ll_i].workprice_bom // s_wp_union[ll_wp_union].pricestr = '' // s_wp_union[ll_wp_union].pricestr_value = '' // s_wp_union[ll_wp_union].pro_dscrp = ins_s_wp[ll_i].pro_dscrp // s_wp_union[ll_wp_union].replacestr = ins_s_wp[ll_i].replacestr // // _next_wp: // NEXT // // FOR ll_i = 1 To ll_wp_union // // UPDATE u_orderrqwp // SET procode_ori = :s_wp_union[ll_i].procode, // pro_dscrp = :s_wp_union[ll_i].pro_dscrp // WHERE scid = :arg_scid // AND orderid = :arg_orderid // AND mtrlid = :mtrlid // And Procode = :s_wp_union[ll_i].Procode; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '更新原工序进度工序合并说明、原工序号失败' + sqlca.SQLErrText // GOTO ext // END IF // IF sqlca.SQLNRows = 0 THEN // INSERT INTO u_orderrqwp(scid, // orderid, // mtrlid, // procode, // proname, // proorder, // proqty, // wrkgrpid, // lsxtype, // workprice, // status, // ifjd, // lastflag, // sctype, // equipmentid, // partname, // eqworkhour, // Workhour, // beforehour, // afterhour, // ori_workprice, // worktype, // eq_empnum, // ifgroup, // u_workqty, // u_workprice, // pricestr, // pricestr_value, // procode_ori, // pro_dscrp, // replacestr) // VALUES ( :arg_scid, // :arg_orderid, // :mtrlid, // :s_wp_union[ll_i].procode, // :s_wp_union[ll_i].proname, // :s_wp_union[ll_i].proorder, // :orderqty, // :s_wp_union[ll_i].wrkgrpid, // :s_wp_union[ll_i].lsxtype, // :s_wp_union[ll_i].workprice_bom, // :s_wp_union[ll_i].status, // :s_wp_union[ll_i].ifjd, // :s_wp_union[ll_i].lastflag, // :s_wp_union[ll_i].sctype, // :s_wp_union[ll_i].equipmentid, // :s_wp_union[ll_i].partname, // :s_wp_union[ll_i].eqworkhour, // :s_wp_union[ll_i].Workhour, // :s_wp_union[ll_i].beforehour, // :s_wp_union[ll_i].afterhour, // :s_wp_union[ll_i].workprice_bom, // :s_wp_union[ll_i].worktype, // :s_wp_union[ll_i].eq_empnum, // :s_wp_union[ll_i].ifgroup, // :orderqty, // :s_wp_union[ll_i].workprice_bom, // :s_wp_union[ll_i].pricestr, // :s_wp_union[ll_i].pricestr_value, // :s_wp_union[ll_i].procode, // :s_wp_union[ll_i].pro_dscrp, // :s_wp_union[ll_i].replacestr); // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText // GOTO ext // END IF // ELSE // IF Not arg_ifall And arg_ifupdateprice THEN // UPDATE u_orderrqwp // SET workprice = :s_wp_union[ll_i].workprice_bom, // ori_workprice = :s_wp_union[ll_i].workprice_bom // WHERE scid = :arg_scid // AND orderid = :arg_orderid // AND mtrlid = :mtrlid // And Procode = :s_wp_union[ll_i].Procode; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '更新原工序进度工价失败' + sqlca.SQLErrText // GOTO ext // END IF // END IF // END IF // NEXT End If End If //更新默认替代工序 String arg_replacestr,ls_str_dft,ls_price Decimal ld_price ds_replacestr.Retrieve(arg_scid,arg_orderid) For ll_i = 1 To ds_replacestr.RowCount() ll_mtrlid = ds_replacestr.Object.u_orderrqwp_mtrlid[ll_i] ls_procode = ds_replacestr.Object.u_orderrqwp_procode[ll_i] arg_replacestr = ds_replacestr.Object.u_orderrqwp_replacestr[ll_i] ls_str_dft = Mid(arg_replacestr,Pos(arg_replacestr,'(默认)') + Len('(默认)'), Pos(arg_replacestr,':',Pos(arg_replacestr,'(默认)')) - (Pos(arg_replacestr,'(默认)') + Len('(默认)') )) ls_price = Mid(arg_replacestr,Pos(arg_replacestr,ls_str_dft)+Len(ls_str_dft) + 1, Pos(arg_replacestr,';',Pos(arg_replacestr,ls_str_dft)) - Pos(arg_replacestr,':',Pos(arg_replacestr,ls_str_dft)) - 1) If Trim(ls_str_dft) = '' Then Continue If IsNumber(ls_price) = False Then Continue ld_price = Dec(ls_price) Update u_orderrqwp Set replace_proname = :ls_str_dft, workprice = :ld_price Where scid = :arg_scid And orderid = :arg_orderid And mtrlid = :ll_mtrlid And Procode = :ls_procode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新派工状态失败,原因:'+sqlca.SQLErrText Goto ext End If Next Update u_order_ml Set u_Order_ml.sctaskflag = isnull(uv_sc_task_qty_flag.sctaskflag, '') From u_Order_ml LEFT Outer JOIN uv_sc_task_qty_flag ON u_Order_ml.scid = uv_sc_task_qty_flag.scid And u_Order_ml.OrderID = uv_sc_task_qty_flag.OrderID Where u_Order_ml.scid = :arg_scid And u_order_ml.orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新派工状态失败,原因:'+sqlca.SQLErrText Goto ext End If // If arg_ifproaudit = 1 Then Update u_order_ml Set proauditflag = 1, proauditemp = :publ_operator, proauditdate = getdate() Where scid = :arg_scid And orderid = :arg_orderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '工序进度确认标志失败,' + sqlca.SQLErrText Goto ext End If End If ext: If rslt = 0 Then Rollback; p_reset() ElseIf arg_ifcommit And rslt = 1 Then Commit; End If Destroy ds_pricestr Destroy ds_orderrqwp Destroy ds_parm Return rslt end function public function integer uof_order_add_wkp (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit, integer arg_if_olddate);Int rslt = 1 Decimal ld_finishqty Long ll_dftwrkgrpid,ll_ordertype DateTime ldt_tmp Long ll_wrkgrpid[],ll_owrkgrpid[] String ls_wkpname[] Long ll_ifjd[],ll_workgroupid[] DateTime ld_requiredate[],ld_begindate[] String ls_dscrp[] Decimal ll_lastdays[],ld_lasthour[] Decimal ld_orderqty[],ld_uprate[] Long ll_rel_planid[],ll_rel_planprintid[] DateTime ld_minbdate[] Long i,cnt Long ll_i,ll_j s_mtrlcfg_expr s_pz[] String ls_status_zj Decimal ld_qty_zj Long ll_statusflag Long ll_swkpid,ll_owkpid String ls_wkpname_s Decimal ld_workhour,ld_beforehour,ld_afterhour uo_order_wkp_jd uo_jd uo_jd = Create uo_order_wkp_jd datastore ds_mx ds_mx = Create datastore ds_mx.DataObject = 'ds_mtrl_wkp_mx' ds_mx.SetTransObject(sqlca) If uo_option_order_ml_add_use_wkp = -1000 Then rslt = 0 arg_msg = '选项:[186]生产计划新建时显示工作量,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_auto_wrkdate = -1000 Then rslt = 0 arg_msg = '选项:[126]生产计划,生产指令自动计算工组开始日期,结束日期,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_use_sc_date = -1000 Then rslt = 0 arg_msg = '选项:[180]工组进度按小时统计,读取初始默认值失败,操作取消!' Goto ext End If If arg_orderid = 0 Then rslt = 0 arg_msg = "没有审核对象" Goto ext End If If p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then rslt = 0 Goto ext End If Select ordertype, dftwrkgrpid, statusflag Into :ll_ordertype, :ll_dftwrkgrpid, :ll_statusflag From u_mtrldef Where mtrlid = :mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询物料信息失败,'+sqlca.SQLErrText Goto ext End If If (ordertype <> 4 And ll_ordertype = 1) Then rslt = 1 Goto ext End If //yyx20120912 If outscllflag = 0 Then rslt = 1 Goto ext End If // If uo_option_order_ml_add_use_wkp = 0 Then If status <> 1 And status <> 4 And status <> 7 Then rslt = 0 arg_msg = "计划只有在在进行状态才可以执行重新生成工组进度,请核对" Goto ext End If End If If wrkGrpid <> ll_dftwrkgrpid Then rslt = 1 arg_msg = '生产指令单或生产计划的车间与计划物料默认的生产车间不一致,不能生成工组进度' Goto ext End If Select sum(finishqty) Into :ld_finishqty From u_OrderMtrl_workgroup Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "查询计划是否已交接操作失败"+"~n"+sqlca.SQLErrText Goto ext End If If IsNull(ld_finishqty) Then ld_finishqty = 0 If ld_finishqty > 0 Then arg_msg = '计划已有交接数,不能重新生成工组进度' rslt = 0 Goto ext End If Select count(*) Into :cnt From u_order_planmx Where scid = :arg_scid And orderid = :arg_orderid; 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 i = 1 //arg_if_olddate 是否保留原开始结束日期及周期参数 0-保留 1-清空,重新生成 If arg_if_olddate = 1 Then Declare cur_wrkmx Cursor For Select wrkgrpid, owrkgrpid, wkpname, ifjd, lastdays, lasthour, requiredate, dscrp, begindate, workgroupid, rel_planid, rel_planprintid, uprate, minbdate From u_OrderMtrl_workgroup Where orderid = :arg_orderid And scid = :arg_scid; Open cur_wrkmx; Fetch cur_wrkmx Into :ll_wrkgrpid[i],:ll_owrkgrpid[i], :ls_wkpname[i],:ll_ifjd[i],:ll_lastdays[i],:ld_lasthour[i],:ld_requiredate[i], :ls_dscrp[i],:ld_begindate[i],:ll_workgroupid[i], :ll_rel_planid[i],:ll_rel_planprintid[i],:ld_uprate[i],:ld_minbdate[i]; Do While sqlca.SQLCode = 0 i++ Fetch cur_wrkmx Into :ll_wrkgrpid[i],:ll_owrkgrpid[i], :ls_wkpname[i],:ll_ifjd[i],:ll_lastdays[i],:ld_lasthour[i],:ld_requiredate[i], :ls_dscrp[i],:ld_begindate[i],:ll_workgroupid[i], :ll_rel_planid[i],:ll_rel_planprintid[i],:ld_uprate[i],:ld_minbdate[i]; Loop Close cur_wrkmx; cnt = i - 1 End If Delete From u_OrderMtrl_workgroup Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除计划的交接明细表相应记录操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Insert Into u_ordermtrl_workgroup (scid, orderid, mtrlid, wrkgrpid, owrkgrpid, orderqty, lastdays, ifjd, wkpname, printid, iflast, groupstr, lp, printlp, lasthour, workgroupid, beforehour, afterhour, workhour, gydscrp, uprate, ifgroup) Select u_order_ml.scid, u_order_ml.orderid, u_order_ml.mtrlid, u_mtrl_wkp.swkpid, u_mtrl_wkp.owkpid, u_order_ml.orderqty, case when :Level = 0 then u_mtrl_wkp.minlasthour / 8 else u_mtrl_wkp.lastdays End , 1, u_mtrl_wkp.wkpname, u_mtrl_wkp.printid, u_mtrl_wkp.iflast, u_mtrl_wkp.groupstr, u_mtrl_wkp.lp, u_mtrl_wkp.printlp, case when :Level = 0 then u_mtrl_wkp.minlasthour else u_mtrl_wkp.lasthour End , u_mtrl_wkp.workgroupid, u_mtrl_wkp.beforehour, u_mtrl_wkp.afterhour, u_mtrl_wkp.workhour, u_mtrl_wkp.gydscrp, u_mtrl_wkp.uprate, u_mtrl_wkp.ifgroup From u_mtrl_wkp,u_order_ml Where u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid And u_mtrl_wkp.mtrlid = u_order_ml.mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '从物料生产流程加入生产计划车间失败,原因:'+sqlca.SQLErrText Goto ext End If If ordertype <> 4 Then Insert Into u_ordermtrl_workgroup (scid, orderid, mtrlid, wrkgrpid, owrkgrpid, orderqty, lastdays, ifjd, printid, groupstr, lp, printlp, uprate, ifgroup) Select u_order_ml.scid, u_order_ml.orderid, u_order_ml.mtrlid, u_sc_workgroup.wrkgrpid, 0, u_order_ml.orderqty, 0,0,1000,'',0,0,0,0 From u_sc_workgroup,u_order_ml Where u_order_ml.orderid = :arg_orderid And u_order_ml.scid = :arg_scid And u_sc_workgroup.ifprint = 1 And u_sc_workgroup.ifjj = 1 And u_sc_workgroup.wrkGrpid Not In (Select u_mtrl_wkp.swkpid From u_mtrl_wkp Where u_mtrl_wkp.mtrlid = :mtrlid) ; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '从车间资料加入工生产计划车间失败,原因:'+sqlca.SQLErrText Goto ext End If End If If ll_statusflag = 2 Then f_checkpz(status_mode,s_pz[]) For ll_i = 1 To UpperBound(s_pz) ls_status_zj = s_pz[ll_i].cfgname ld_qty_zj = Dec(s_pz[ll_i].qty) ds_mx.Retrieve(mtrlid,ls_status_zj) For ll_j = 1 To ds_mx.RowCount() ll_owkpid = ds_mx.Object.u_mtrl_wkp_mx_owkpid[ll_j] ll_swkpid = ds_mx.Object.u_mtrl_wkp_mx_swkpid[ll_j] ls_wkpname_s = ds_mx.Object.u_mtrl_wkp_mx_wkpname[ll_j] ld_workhour = ds_mx.Object.u_mtrl_wkp_mx_workhour[ll_j] ld_beforehour = ds_mx.Object.u_mtrl_wkp_mx_beforehour[ll_j] ld_afterhour = ds_mx.Object.u_mtrl_wkp_mx_afterhour[ll_j] Update u_OrderMtrl_workgroup Set workhour = workhour + :ld_workhour * :ld_qty_zj, beforehour = beforehour + :ld_beforehour * :ld_qty_zj, afterhour = afterhour + :ld_afterhour * :ld_qty_zj Where orderid = :arg_orderid And scid = :arg_scid And wrkgrpid = :ll_swkpid And owrkgrpid = :ll_owkpid And wkpname = :ls_wkpname_s; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '从工艺流程配置明细更新生产计划工艺进度失败,原因:'+sqlca.SQLErrText Goto ext End If Next Next End If If uof_update_minbdate(arg_scid,arg_orderid,arg_msg,False) = 0 Then rslt = 0 Goto ext End If Long l_wrkgrpid[],l_owrkgrpid[],l_ifjd[],l_printid[] Decimal l_lastdays[],l_lasthour[] String l_wkpname[],l_groupstr[] Long j,cnt_2,ll_count DateTime ld_sdate,ld_edate,ld_update_edate DateTime ld_sdate_max Decimal ld_resthour,ld_resthour_e Int li_timehour Int li_rdate Decimal ld_resthour_tmp DateTime ld_workdate_tmp Long l_printid_gr[] String l_groupstr_gr[] Long cnt_gr DateTime ld_sdate_gr[] Long k Boolean lb_if_find = False String ls_arg_date If uo_option_auto_wrkdate = 1 Then Select orderdate Into :ld_sdate_max From u_order_ml Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询生产计划或指令单计划开始日期失败'+sqlca.SQLErrText Goto ext End If ld_sdate_max = DateTime(Date(ld_sdate_max),Time('8:00:00')) If uof_order_cmp_wrk_date(arg_scid,arg_orderid,ld_sdate_max,arg_msg,False) = 0 Then arg_msg = '计算工组日期失败,'+arg_msg rslt = 0 Goto ext End If End If //更新要求完成日期 If arg_if_olddate = 1 Then For ll_i = 1 To cnt Update u_ordermtrl_workgroup Set ifjd = :ll_ifjd[ll_i], requiredate = :ld_requiredate[ll_i], begindate = :ld_begindate[ll_i], OriBegindate = :ld_begindate[ll_i], OriRequiredate = :ld_requiredate[ll_i], lastdays = :ll_lastdays[ll_i], lasthour = :ld_lasthour[ll_i], dscrp = :ls_dscrp[ll_i], rel_planid = :ll_rel_planid[ll_i], rel_planprintid = :ll_rel_planprintid[ll_i] Where orderid = :arg_orderid And scid = :arg_scid And wrkgrpid = :ll_wrkgrpid[ll_i] And owrkgrpid = :ll_owrkgrpid[ll_i] And wkpname = :ls_wkpname[ll_i]; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新要求完成时间失败,原因:'+sqlca.SQLErrText Goto ext End If Next End If If uo_cmp_datediff_wrk(arg_scid,arg_orderid,arg_msg,False) = 0 Then rslt = 0 Goto ext End If //按日期加入进度表 Delete From u_ordermtrl_wrk_jd Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除工组工作量明细表相应记录操作失败"+"~n"+sqlca.SQLErrText Goto ext End If j = 1 Declare cur_wrkmx_jd Cursor For Select wrkgrpid, owrkgrpid, wkpname, requiredate, begindate, orderqty, workgroupid From u_OrderMtrl_workgroup Where orderid = :arg_orderid And scid = :arg_scid; Open cur_wrkmx_jd; Fetch cur_wrkmx_jd Into :ll_wrkgrpid[j],:ll_owrkgrpid[j], :ls_wkpname[j],:ld_requiredate[j],:ld_begindate[j],:ld_orderqty[j], :ll_workgroupid[j]; Do While sqlca.SQLCode = 0 j++ Fetch cur_wrkmx_jd Into :ll_wrkgrpid[j],:ll_owrkgrpid[j], :ls_wkpname[j],:ld_requiredate[j],:ld_begindate[j],:ld_orderqty[j], :ll_workgroupid[j]; Loop Close cur_wrkmx_jd; cnt = j - 1 Long ll_DaysAfter DateTime ldt_wrkdate Decimal ld_order_wrk For ll_i = 1 To cnt ll_DaysAfter = DaysAfter(Date(ld_begindate[ll_i]), Date(ld_requiredate[ll_i])) If ll_DaysAfter + 1 <> 0 Then ld_order_wrk = ld_orderqty[ll_i] / (ll_DaysAfter + 1) For ll_j = 1 To ll_DaysAfter + 1 ldt_wrkdate = DateTime(RelativeDate(Date(ld_begindate[ll_i]),ll_j - 1 ),Time(0)) Insert Into u_ordermtrl_wrk_jd (scid, orderid, wrkgrpid, owrkgrpid, wkpname, wrkdate, orderqty, workgroupid) Values (:arg_scid, :arg_orderid, :ll_wrkgrpid[ll_i], :ll_owrkgrpid[ll_i], :ls_wkpname[ll_i], :ldt_wrkdate, :ld_order_wrk, :ll_workgroupid[ll_i]); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "插入工组工作量明细表失败"+"~n"+sqlca.SQLErrText Goto ext End If Next End If Next //if uof_auto_order_plan(arg_scid,arg_orderid,arg_msg,false) = 0 then // rslt = 0 // goto ext //end if If uo_jd.uof_order_add_wrk_jd(arg_scid,arg_orderid,arg_msg,False) = 0 Then rslt = 0 Goto ext End If ext: If rslt = 0 Then Rollback; p_reset() ElseIf arg_ifcommit And rslt = 1 Then Commit; End If Destroy uo_jd Destroy ds_mx Return rslt end function public function integer addmxcmpl_rqacmpqty (long arg_scid, long arg_orderid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 Dec ld_orderqty,ld_rqacmpqty String ls_mtrlname rslt = p_getinfo(arg_scid,arg_orderid, arg_msg) IF rslt = 0 THEN GOTO ext IF arg_addqty = 0 THEN arg_msg = '没有完成数量' rslt = 0 GOTO ext END IF IF status <> 1 THEN rslt = 0 arg_msg = "计划["+ordercode+"]只有在进行状态下才可以执行操作" GOTO ext END IF SELECT mtrlname INTO :ls_mtrlname FROM u_mtrldef,u_order_ml WHERE u_order_ml.orderid = :arg_orderid AND u_order_ml.scid = :arg_scid And u_mtrldef.mtrlid = u_order_ml.mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询产品操作失败" GOTO ext END IF //检查是否完成 SELECT orderqty,rqacmpqty INTO :ld_orderqty,:ld_rqacmpqty FROM u_order_ml WHERE ( orderid = :arg_orderid ) And ( scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询计划数和已申购数量操作失败" GOTO ext END IF IF status = 1 THEN IF ld_orderqty < arg_addqty + ld_rqacmpqty THEN rslt = 0 arg_msg = '该计划明细产品:'+ls_mtrlname+',未申购数'+String(ld_orderqty - ld_rqacmpqty,'#,##0.00##' )+'小于本次申购数' GOTO ext END IF END IF UPDATE u_order_ml SET rqacmpqty = rqacmpqty + :arg_addqty WHERE ( orderid = :arg_orderid ) And ( scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新生产计划完成数量操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF p_reset() Return (rslt) end function public function integer addmx_sptcheckqty (long arg_scid, long arg_orderid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 //IF uo_option_ifovertask = -1000 THEN // rslt = 0 // arg_msg = '选项:[010]超采购,外协订单收货,读取初始默认值失败,操作取消!' // GOTO ext //END IF IF arg_orderid <= 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_orderid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF status <> 1 And status <> 5 THEN rslt = 0 IF status <> 1 THEN arg_msg = "指令单只有在进行状态下才可以执行质检" ELSEIF status <> 5 THEN arg_msg = "指令单只有在完成状态下才可以撤销质检" END IF GOTO ext END IF Decimal ld_qty,ld_sptcheckqty Long ll_mtrlid String ls_mtrlcode Decimal ld_uprate,ld_upqty,ld_stopqty SELECT u_mtrldef.mtrlcode, u_order_ml.orderqty, u_order_ml.sptcheckqty, u_order_ml.stopqty, u_order_ml.mtrlid INTO :ls_mtrlcode, :ld_qty, :ld_sptcheckqty, :ld_stopqty, :ll_mtrlid FROM u_mtrldef,u_order_ml WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid AND u_order_ml.scid = :arg_scid AND u_order_ml.orderid = :arg_orderid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询明细物料编码失败,'+sqlca.SQLErrText GOTO ext END IF //IF uo_option_ifovertask = 1 THEN //不允许超收 IF ld_qty < ld_sptcheckqty + arg_addqty + ld_stopqty THEN rslt = 0 arg_msg = "物料:"+ls_mtrlcode+"未质检数量只有"+String(ld_qty - ld_sptcheckqty - ld_stopqty,'#,##0.0#########')+",不能质检"+String(arg_addqty,'#,##0.0#########') GOTO ext END IF //ELSEIF uo_option_ifovertask = 3 THEN //允许超收但按比例限制 // SELECT uprate , upqty // INTO :ld_uprate,:ld_upqty // FROM u_mtrldef // Where mtrlid = :ll_mtrlid; // IF sqlca.SQLCode <> 0 THEN // arg_msg = '查询物料:'+Trim(ls_mtrlcode)+'超收货比例失败,'+sqlca.SQLErrText // rslt = 0 // GOTO ext // END IF // // IF ld_qty * (1 + ld_uprate) + ld_upqty < ld_sptcheckqty + arg_addqty + ld_stopqty THEN // rslt = 0 // arg_msg = "物料:"+ls_mtrlcode+"未完成数量只有"+String(ld_qty - ld_sptcheckqty - ld_stopqty, '#,##0.0#########')+"允许超收上限:"+String(ld_qty * (1 + ld_uprate) + ld_upqty - ld_sptcheckqty - ld_stopqty,'#,##0.0#########')+",不能入库"+String(arg_addqty,'#,##0.0#########') // GOTO ext // END IF // //END IF IF arg_addqty < 0 And arg_addqty + ld_sptcheckqty < 0 THEN rslt = 0 arg_msg = "物料:"+ls_mtrlcode+"已质检数量只有"+String(ld_sptcheckqty, '#,##0.0###')+",不能撤审质检数量"+String(arg_addqty,'#,##0.0#########') GOTO ext END IF UPDATE u_order_ml SET sptcheckqty = sptcheckqty + :arg_addqty WHERE ( u_order_ml.orderid = :arg_orderid ) AND ( u_order_ml.scid = :arg_scid) Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或错误产品唯一码导致指令单完成数量操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK Using sqlca; ELSEIF arg_ifcommit THEN COMMIT Using sqlca; END IF p_reset() Return (rslt) end function on uo_order_ml.create call super::create TriggerEvent( this, "constructor" ) end on on uo_order_ml.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;arg_msg_str = '' String str_optionvalue,arg_msg f_get_sys_option_value('230',str_optionvalue,arg_msg) uo_option_if_oa_order_ml = Long(str_optionvalue) f_get_sys_option_value('225',str_optionvalue,arg_msg) uo_option_order_ml_secaudit = Long(str_optionvalue) f_get_sys_option_value('231',str_optionvalue,arg_msg) uo_option_if_oa_order_zl = Long(str_optionvalue) f_get_sys_option_value('226',str_optionvalue,arg_msg) uo_option_order_ml_zl_secaudit = Long(str_optionvalue) f_get_sys_option_value('074',str_optionvalue,arg_msg) uo_option_order_bh_use_yc = Long(str_optionvalue) f_get_sys_option_value('013',str_optionvalue,arg_msg) uo_option_def_bom = Long(str_optionvalue) f_get_sys_option_value('143',str_optionvalue,arg_msg) uo_option_order_mtrlware = Long(str_optionvalue) f_get_sys_option_value('138',str_optionvalue,arg_msg) uo_option_inware_mtrlcuscode = Long(str_optionvalue) f_get_sys_option_value('222',str_optionvalue,arg_msg) uo_option_order_ml_save_reccl = Long(str_optionvalue) f_get_sys_option_value('186',str_optionvalue,arg_msg) uo_option_order_ml_add_use_wkp = Long(str_optionvalue) f_get_sys_option_value('112',str_optionvalue,arg_msg) uo_option_ifovertask_cp = Long(str_optionvalue) f_get_sys_option_value('202',str_optionvalue,arg_msg) uo_option_if_taskwork_acmpqty = Long(str_optionvalue) f_get_sys_option_value('047',str_optionvalue,arg_msg) uo_option_ml_wkp = Long(str_optionvalue) f_get_sys_option_value('126',str_optionvalue,arg_msg) uo_option_auto_wrkdate = Long(str_optionvalue) f_get_sys_option_value('180',str_optionvalue,arg_msg) uo_option_use_sc_date = Long(str_optionvalue) f_get_sys_option_value('061',str_optionvalue,arg_msg) uo_option_unite_order_ml = Long(str_optionvalue) f_get_sys_option_value('071',str_optionvalue,arg_msg) uo_option_unite_order_ml_zl = Long(str_optionvalue) f_get_sys_option_value('065',str_optionvalue,arg_msg) uo_option_order_ml_scll_secaudit = Long(str_optionvalue) f_get_sys_option_value('054',str_optionvalue,arg_msg) uo_option_autocreate_buy = Long(str_optionvalue) f_get_sys_option_value('068',str_optionvalue,arg_msg) uo_option_autocreate_wfjg = Long(str_optionvalue) f_get_sys_option_value('012',str_optionvalue,arg_msg) uo_option_def_workprice = Long(str_optionvalue) f_get_sys_option_value('148',str_optionvalue,arg_msg) uo_option_orderrqwp_union = Long(str_optionvalue) f_get_sys_option_value('111',str_optionvalue,arg_msg) uo_option_requestbuy_hz = Long(str_optionvalue) //f_get_sys_option_value('080',str_optionvalue,arg_msg) //uo_option_scll_rate = Long(str_optionvalue) // f_get_sys_option_value('160',str_optionvalue,arg_msg) uo_option_skl_overscll = Long(str_optionvalue) f_get_sys_option_value('197',str_optionvalue,arg_msg) uo_option_skl_overscll_rate = Long(str_optionvalue) f_get_sys_option_value('159',str_optionvalue,arg_msg) uo_option_use_suliao = Long(str_optionvalue) f_get_sys_option_value('161',str_optionvalue,arg_msg) uo_option_management_cost = Long(str_optionvalue) f_get_sys_option_value('162',str_optionvalue,arg_msg) uo_option_ect_price = Long(str_optionvalue) f_get_sys_option_value('073',str_optionvalue,arg_msg) uo_option_order_ml_use_zl = Long(str_optionvalue) f_get_sys_option_value('233',str_optionvalue,arg_msg) uo_option_use_workgroup_tree = Long(str_optionvalue) f_get_sys_option_value('234',str_optionvalue,arg_msg) uo_option_scllaudit_autobuild = Long(str_optionvalue) f_get_sys_option_value('239',str_optionvalue,arg_msg) uo_option_def_mtrlwkp = Long(str_optionvalue) f_get_sys_option_value('245',str_optionvalue,arg_msg) uo_option_scllaudit_autobuild_tech = Long(str_optionvalue) f_get_sys_option_value('255',str_optionvalue,arg_msg) uo_option_auto_finish_zl = Long(str_optionvalue) f_get_sys_option_value('270',str_optionvalue,arg_msg) uo_option_update_lockdateflag = Long(str_optionvalue) f_get_sys_option_value('289',str_optionvalue,arg_msg) uo_option_packpro2_not_use_pack1 = Long(str_optionvalue) f_get_sys_option_value('304',str_optionvalue,arg_msg) uo_option_order_capacity = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('313',str_optionvalue,arg_msg) uo_option_order_ml_zl_checkdate = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('316',str_optionvalue,arg_msg) uo_option_order_zl_3_day = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('121',str_optionvalue,arg_msg) uo_option_requestwfjg_hz = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('333',str_optionvalue,arg_msg) uo_option_zlmtrlchange_wx_update_rqwfjg = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('340',str_optionvalue,arg_msg) uo_option_ifpackpro2_if_no_pack2 = Long(str_optionvalue) SELECT wrkgrpid INTO :ins_produce_wrkgrpid_bj FROM u_sc_wkp Where ifbj = 1; IF sqlca.SQLCode <> 0 THEN ins_produce_wrkgrpid_bj = 0 END IF str_optionvalue = '' f_get_sys_option_value('379',str_optionvalue,arg_msg) uo_option_scll_back_check = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('383',str_optionvalue,arg_msg) uo_option_autostop_porder = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('388',str_optionvalue,arg_msg) uo_option_bujian_notmrpqty = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('398',str_optionvalue,arg_msg) uo_option_orderrqwp_auditgj = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('403',str_optionvalue,arg_msg) uo_option_order_zl_auto_getbar = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('417',str_optionvalue,arg_msg) uo_option_canpack_ifzanyong = Long(str_optionvalue) end event