$PBExportHeader$uo_workgroup_num.sru forward global type uo_workgroup_num from nonvisualobject end type end forward global type uo_workgroup_num from nonvisualobject end type global uo_workgroup_num uo_workgroup_num type variables Public ProtectedWrite Long billid Public ProtectedWrite String billcode //单据的唯一编号 Public ProtectedWrite DateTime opdate //建立时间,自动 Public ProtectedWrite String opemp //建立操作员 Public ProtectedWrite Int flag = 0 //审核标志 Public ProtectedWrite DateTime auditdate //审核时间 Public ProtectedWrite String auditrep //审核操作员 Public ProtectedWrite Int secflag = 0 //审核标志 Public ProtectedWrite DateTime secauditdate //审核时间 Public ProtectedWrite String secauditemp //审核操作员 Long sworkgroupid = 0 Long dworkgroupid = 0 Long relcpscid = 0 Long relcpid = 0 String relcpcode = '' String dscrp = '' String relcode = '' String relrep = '' DateTime billdate Int billtype Long scid = 0 Long rellossscid Long rellossid Boolean if_getid_ture = True Transaction commit_transaction //数据commit事务 s_orderworkgroup_nummx wkpmx[] //明细结构数组 Long it_mxbt = 0 //明细结构数组末指针 Boolean it_newbegin = False //新建标志 Boolean it_updatebegin = False //修改标志 Int uo_option_orderworkgroup_time Int uo_option_orderworkgroup_num_cp Int uo_option_ml_wkp Int uo_option_taskplancode int uo_option_workgroup_num_check end variables forward prototypes public function integer save (boolean arg_ifcommit, ref string arg_msg) public function integer auditing (boolean arg_ifcommit, ref string arg_msg) public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg) public function integer p_reset () public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg) public function integer p_getinfo (long arg_billid, ref string arg_msg) public function integer updatebegin (long arg_billid, ref string arg_msg) public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer p_clearmx () public function integer getinfo (long arg_billid, ref string arg_msg) public function integer secauditing (boolean arg_ifcommit, ref string arg_msg) public function integer c_secauditing (boolean arg_ifcommit, ref string arg_msg) public function integer newbegin (ref string arg_msg) public function integer uof_finish_wkp (long arg_scid, long arg_orderid, string arg_wkpname, long arg_wrkgrpid, long arg_owrkgrpid, integer arg_type, ref string arg_msg, boolean arg_ifcommit) public function integer add_mxdscrp (long arg_billid, long arg_printid, string arg_newdescppart, ref string arg_msg) public function integer acceptmx (long arg_printid, long arg_orderscid, long arg_orderid, string arg_ordercode, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, string arg_mxdscrp, string arg_wkpname, string arg_mtrlcuscode, string arg_location, string arg_waredscrp, long arg_planscid, long arg_planid, long arg_planprintid, decimal arg_uqty, string arg_unit, decimal arg_rate, decimal arg_lossqty, ref string arg_msg) end prototypes public function integer save (boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1,cnt = 0,i DateTime server_dt Long ls_newid String ls_sccode Long ll_printid IF uo_option_orderworkgroup_time = -1000 THEN arg_msg = '选项:[118]工组交接时间精确到小时,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_orderworkgroup_num_cp = -1000 THEN arg_msg = '选项:[210]工组完工单使用仓库审,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_workgroup_num_check = -1000 THEN arg_msg = '选项:[371]工组交接单严格按工组顺序交接,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF IsNull(sworkgroupid) THEN sworkgroupid = 0 IF IsNull(dworkgroupid) THEN dworkgroupid = 0 IF IsNull(dscrp) THEN dscrp = '' IF IsNull(relcode) THEN relcode = '' IF IsNull(relrep) THEN relrep = '' IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以提交" GOTO ext END IF SELECT Top 1 getdate() Into :server_dt From u_user Using commit_transaction ; //取得系统时间,借用操作员表 IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF relrep = '' THEN rslt = 0 arg_msg = "请输入经手人" GOTO ext END IF IF it_mxbt <= 0 THEN rslt = 0 arg_msg = "没有正确明细内容" GOTO ext END IF IF uo_option_orderworkgroup_time = 0 THEN billdate = DateTime(Date(billdate),Time(0)) END IF IF billtype = 0 THEN IF sworkgroupid = 0 THEN rslt = 0 arg_msg = '请选择调出工组' GOTO ext END IF IF dworkgroupid = 0 THEN rslt = 0 arg_msg = '请选择调入工组' GOTO ext END IF IF sworkgroupid = dworkgroupid THEN rslt = 0 arg_msg = '调出工组与调入工组不能相同' GOTO ext END IF ELSEIF billtype = 2 THEN IF sworkgroupid = 0 THEN rslt = 0 arg_msg = '请选择完工工组' GOTO ext END IF IF uo_option_orderworkgroup_num_cp = 1 THEN IF dworkgroupid = 0 THEN rslt = 0 arg_msg = '请选择调入仓库' GOTO ext END IF END IF END IF //检查调出工组,工组进度解决方案 110527 ////////////////////////////////////////////////// Int li_jdtype SELECT jdtype INTO :li_jdtype FROM u_sc_workgroup Where wrkGrpid = :sworkgroupid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询调出工组工组进度解决方案操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF li_jdtype <> 0 THEN rslt = 0 IF billtype = 0 THEN arg_msg = "调出工组工组进度解决方案设置不是[按工组交接数统计],不能使用工组交接单" ELSE arg_msg = "完成工组工组进度解决方案设置不是[按工组交接数统计],不能使用工组完工单" END IF GOTO ext END IF //////////////////////////////////////////////// // IF f_check_inoutdate(0,billdate,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_workgroup_num_check = 1 And billtype = 0 THEN FOR i = 1 To it_mxbt SELECT printid INTO :ll_printid FROM u_OrderMtrl_workgroup WHERE orderid = :wkpmx[i].orderid AND scid = :wkpmx[i].orderscid AND wrkGrpid = :sworkgroupid AND ( owrkGrpid = :dworkgroupid AND iflast = 0 ) AND wkpname = :wkpmx[i].wkpname Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+',查询物料:'+wkpmx[i].mtrlcode+'源工组信息失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF ll_printid = 0 THEN CONTINUE cnt = 0 SELECT count(*) INTO :cnt FROM u_OrderMtrl_workgroup WHERE orderid = :wkpmx[i].orderid AND scid = :wkpmx[i].orderscid AND ( owrkGrpid = :sworkgroupid AND iflast = 0 ) AND printid < :ll_printid AND finishqty = 0 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+',查询物料:'+wkpmx[i].mtrlcode+'前工组信息失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+',查询物料:'+wkpmx[i].mtrlcode+'调出工组未接收,不能交接' rslt = 0 GOTO ext END IF NEXT END IF ////////////////////////////////////////////// //开始区分:新建/更新 处理 IF billid = 0 THEN //新建 ls_newid = f_sys_scidentity(scid,"u_orderworkgroup_num","billid",arg_msg,True,id_sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF //取分部代号 IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //取得新单据编号 IF billtype = 0 THEN billcode = getid(scid,ls_sccode + 'BS',Date(server_dt),if_getid_ture,commit_transaction) ELSEIF billtype = 2 THEN billcode = getid(scid,ls_sccode + 'WG',Date(server_dt),if_getid_ture,commit_transaction) END IF IF billcode = "err" THEN billcode = '' rslt = 0 arg_msg = "无法获取单编号"+"~n"+commit_transaction.SQLErrText GOTO ext END IF INSERT INTO u_orderworkgroup_num ( billid, billcode, billdate, relcode, sworkgroupid, dworkgroupid, dscrp, opdate, opemp, relrep, billtype, scid) VALUES ( :ls_newid, :billcode, :billdate, :relcode, :sworkgroupid, :dworkgroupid, :dscrp, :server_dt, :publ_operator, :relrep, :billtype, :scid) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF billid = ls_newid FOR i = 1 To it_mxbt INSERT INTO u_orderworkgroup_nummx (billid, printid, mtrlid, orderscid, orderid, status, woodcode, pcode, qty, mxdscrp, wkpname, mtrlcuscode, location, waredscrp, planscid, planid, planprintid, oplancode, uqty, unit, rate, lossqty) VALUES ( :ls_newid, :wkpmx[i].printid, :wkpmx[i].mtrlid, :wkpmx[i].orderscid, :wkpmx[i].orderid, :wkpmx[i].status, :wkpmx[i].woodcode, :wkpmx[i].pcode, :wkpmx[i].qty, :wkpmx[i].mxdscrp, :wkpmx[i].wkpname, :wkpmx[i].mtrlcuscode, :wkpmx[i].location, :wkpmx[i].waredscrp, :wkpmx[i].planscid, :wkpmx[i].planid, :wkpmx[i].planprintid, :wkpmx[i].oplancode, :wkpmx[i].uqty, :wkpmx[i].unit, :wkpmx[i].rate, :wkpmx[i].lossqty) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN billid = 0 //billid rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT ELSE //////////////////////////////////////////////// //更新 UPDATE u_orderworkgroup_num SET billdate = :billdate, relcode = :relcode, sworkgroupid = :sworkgroupid, dworkgroupid = :dworkgroupid, dscrp = :dscrp, relrep = :relrep WHERE u_orderworkgroup_num.billid = :billid And flag = 0 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM u_orderworkgroup_nummx Where u_orderworkgroup_nummx.billid = :billid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF FOR i = 1 To it_mxbt INSERT INTO u_orderworkgroup_nummx (billid, printid, mtrlid, orderscid, orderid, status, woodcode, pcode, qty, mxdscrp, wkpname, mtrlcuscode, location, waredscrp, planscid, planid, planprintid, oplancode, uqty, unit, rate, lossqty) VALUES ( :billid, :wkpmx[i].printid, :wkpmx[i].mtrlid, :wkpmx[i].orderscid, :wkpmx[i].orderid, :wkpmx[i].status, :wkpmx[i].woodcode, :wkpmx[i].pcode, :wkpmx[i].qty, :wkpmx[i].mxdscrp, :wkpmx[i].wkpname, :wkpmx[i].mtrlcuscode, :wkpmx[i].location, :wkpmx[i].waredscrp, :wkpmx[i].planscid, :wkpmx[i].planid, :wkpmx[i].planprintid, :wkpmx[i].oplancode, :wkpmx[i].uqty, :wkpmx[i].unit, :wkpmx[i].rate, :wkpmx[i].lossqty) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT END IF it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; p_clearmx() ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer auditing (boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 Long cnt = 0,i Int li_ifloss IF uo_option_ml_wkp = -1000 THEN arg_msg = '选项:[047]生产计划直接确认车间或工序完成,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF uo_order_plan uo_oplan uo_oplan = Create uo_order_plan uo_order_wkp_jd uo_jd uo_jd = Create uo_order_wkp_jd uo_inware_other uo_loss_in uo_loss_in = Create uo_inware_other uo_loss_in.commit_transaction = commit_transaction uo_loss_in.if_getid_ture = FALSE datastore ds_update_acceptqty ds_update_acceptqty = Create datastore ds_update_acceptqty.DataObject = 'ds_order_ml_update_acceptqty' ds_update_acceptqty.SetTransObject(commit_transaction) IF uo_option_ml_wkp = 1 THEN arg_msg = '系统已设置为生产计划直接确认车间完成' rslt = 0 GOTO ext END IF IF billid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF it_newbegin Or it_updatebegin THEN rslt = 0 arg_msg = "编辑状态下不可以执行审核" GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核" GOTO ext END IF //检查调出工组,工组进度解决方案 110527 ////////////////////////////////////////////////// Int li_jdtype SELECT jdtype INTO :li_jdtype FROM u_sc_workgroup Where wrkGrpid = :sworkgroupid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致查询调出工组工组进度解决方案操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF li_jdtype <> 0 THEN rslt = 0 IF billtype = 0 THEN arg_msg = "调出工组工组进度解决方案设置不是[按工组交接数统计],不能使用工组交接单" ELSE arg_msg = "完成工组工组进度解决方案设置不是[按工组交接数统计],不能使用工组完工单" END IF GOTO ext END IF //////////////////////////////////////////////// // UPDATE u_orderworkgroup_num SET auditrep = :publ_operator, auditdate = getdate(), flag = 1 WHERE u_orderworkgroup_num.billid = :billid And flag = 0 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //更新工组完成数 Decimal not_finishqty Long ll_printid,ll_printid_next,ll_owrkGrpid_next,ll_workgroupid_next String ls_wkpname_next Int li_iflast Long ll_j FOR i = 1 To it_mxbt not_finishqty = 0 SELECT (orderqty - finishqty - stopqty) * (1 + uprate),printid,iflast INTO :not_finishqty,:ll_printid,:li_iflast FROM u_OrderMtrl_workgroup WHERE orderid = :wkpmx[i].orderid AND scid = :wkpmx[i].orderscid AND wrkGrpid = :sworkgroupid AND ( owrkGrpid = :dworkgroupid AND iflast = 0 AND :billtype = 0 OR iflast = 1 AND :billtype = 2 ) AND wkpname = :wkpmx[i].wkpname Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+',查询物料:'+wkpmx[i].mtrlcode+'源工组未完成数量失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF wkpmx[i].qty > not_finishqty THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+',物料:'+wkpmx[i].mtrlcode+'当前数量'+String(wkpmx[i].qty,'#,##0.0###')+' > 工组未完成数量'+String(not_finishqty,'#,##0.0###')+',不能审核' rslt = 0 GOTO ext END IF UPDATE u_OrderMtrl_workgroup SET finishqty = finishqty + :wkpmx[i].qty WHERE orderid = :wkpmx[i].orderid AND scid = :wkpmx[i].orderscid AND wrkGrpid = :sworkgroupid AND ( owrkGrpid = :dworkgroupid AND iflast = 0 AND :billtype = 0 OR iflast = 1 AND :billtype = 2 ) AND wkpname = :wkpmx[i].wkpname Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+',更新物料:'+wkpmx[i].mtrlcode+'源工组未完成数量失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_OrderMtrl_workgroup SET finishflag = 1, finishdate = :billdate WHERE orderid = :wkpmx[i].orderid AND scid = :wkpmx[i].orderscid AND mtrlid = :wkpmx[i].mtrlid AND wrkGrpid = :sworkgroupid AND ( owrkGrpid = :dworkgroupid AND iflast = 0 AND :billtype = 0 OR iflast = 1 AND :billtype = 2 ) AND wkpname = :wkpmx[i].wkpname AND orderqty <= finishqty + stopqty Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+',更新物料:'+wkpmx[i].mtrlcode+'工组完成标记失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF //更新下一调拨接收数 IF li_iflast = 0 THEN SELECT min(printid) INTO :ll_printid_next FROM u_OrderMtrl_workgroup WHERE orderid = :wkpmx[i].orderid AND scid = :wkpmx[i].orderscid AND printid > :ll_printid AND wrkgrpid = :dworkgroupid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+',查询物料:'+wkpmx[i].mtrlcode+'调入工组调拨资料失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ds_update_acceptqty.Retrieve(wkpmx[i].orderscid,wkpmx[i].orderid,ll_printid_next,dworkgroupid) FOR ll_j = 1 To ds_update_acceptqty.RowCount() ll_owrkGrpid_next = ds_update_acceptqty.Object.owrkGrpid[ll_j] ls_wkpname_next = ds_update_acceptqty.Object.wkpname[ll_j] ll_workgroupid_next = ds_update_acceptqty.Object.workgroupid[ll_j] UPDATE u_OrderMtrl_workgroup SET acceptqty = acceptqty + :wkpmx[i].qty WHERE orderid = :wkpmx[i].orderid AND scid = :wkpmx[i].orderscid AND wrkGrpid = :dworkgroupid AND owrkGrpid = :ll_owrkGrpid_next AND wkpname = :ls_wkpname_next AND workgroupid = :ll_workgroupid_next Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+',更新物料:'+wkpmx[i].mtrlcode+'下工组调入数量失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF NEXT END IF If (billtype = 0 Or billtype = 2 ) And wkpmx[i].planid > 0 THEN IF uo_oplan.addmxcmpl(wkpmx[i].planscid,wkpmx[i].planid,wkpmx[i].planprintid,wkpmx[i].qty,arg_msg,False) = 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+','+arg_msg rslt = 0 GOTO ext END IF IF uo_oplan.tryfinish(wkpmx[i].planscid,wkpmx[i].planid,arg_msg,False) = 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+','+arg_msg rslt = 0 GOTO ext END IF END IF IF uo_jd.uof_order_add_wrk_jd(scid,wkpmx[i].orderid,arg_msg,False) = 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+','+arg_msg rslt = 0 GOTO ext END IF IF wkpmx[i].lossqty > 0 And li_ifloss = 0 THEN li_ifloss = 1 END IF NEXT //建损耗进仓单 IF li_ifloss = 1 THEN Long ll_rellossid,ll_scid,ll_storageid String ls_rellosscode SELECT u_storage.storageid, u_storage.scid INTO :ll_storageid,:ll_scid FROM u_storage,u_sc_workgroup,u_sc_wkp WHERE u_sc_workgroup.storageid = u_sc_wkp.wrkgrpid AND u_sc_wkp.storageid2 = u_storage.storageid AND u_sc_workgroup.wrkgrpid = :sworkgroupid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询调出工组对应车间所属对应损耗仓库资料失败,"+commit_transaction.SQLErrText GOTO ext END IF IF uo_loss_in.newbegin(ll_scid,8,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_loss_in.indate = billdate uo_loss_in.inrep = relrep uo_loss_in.part = billcode uo_loss_in.storageid = ll_storageid uo_loss_in.sptname = '工组调拨单|工组完工单(损耗进仓)' FOR i = 1 To it_mxbt IF wkpmx[i].mtrlid > 0 And wkpmx[i].lossqty > 0 THEN String ls_mtrlcode,ls_unit String ls_plancode Decimal ls_planprice Long ll_cusid SELECT u_mtrldef.mtrlcode, u_mtrldef.unit INTO :ls_mtrlcode, :ls_unit FROM u_mtrldef WHERE u_mtrldef.mtrlid = :wkpmx[i].mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '明细行:'+String(i)+",查询资料失败,"+commit_transaction.SQLErrText GOTO ext END IF ls_plancode = '' ll_cusid = 0 f_get_planprice_mtrl(wkpmx[i].mtrlid,wkpmx[i].status,wkpmx[i].woodcode,wkpmx[i].pcode,ls_planprice) IF uo_loss_in.acceptmx(wkpmx[i].printid,& wkpmx[i].mtrlid,& ls_mtrlcode,& ls_plancode,& wkpmx[i].status,& wkpmx[i].lossqty,& ls_planprice,& 1,& '',& arg_msg,& 0,& wkpmx[i].orderid,& 1,& wkpmx[i].woodcode,& wkpmx[i].pcode,& ll_cusid,& ls_unit,& 1,wkpmx[i].lossqty,0,0,'',wkpmx[i].waredscrp,0,0,& wkpmx[i].mtrlcuscode,& wkpmx[i].Location,& wkpmx[i].qty,0) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT IF uo_loss_in.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_loss_in.getinfo(uo_loss_in.scid,uo_loss_in.inwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_loss_in.auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ll_rellossid = uo_loss_in.inwareid ls_rellosscode = uo_loss_in.inwarecode UPDATE u_orderworkgroup_num SET rellossid = :ll_rellossid, relcpscid = :ll_scid, rellosscode = :ls_rellosscode WHERE u_orderworkgroup_num.billid = :billid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据相关损耗进仓单资料操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF flag = 1 ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy uo_oplan Destroy uo_jd Destroy uo_loss_in Destroy ds_update_acceptqty RETURN rslt end function public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 Long cnt = 0,i DateTime null_dt SetNull(null_dt) IF uo_option_ml_wkp = -1000 THEN arg_msg = '选项:[047]生产计划直接确认车间或工序完成,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF uo_order_plan uo_oplan uo_oplan = Create uo_order_plan uo_order_wkp_jd uo_jd uo_jd = Create uo_order_wkp_jd uo_inware_other uo_loss_in uo_loss_in = Create uo_inware_other uo_loss_in.commit_transaction = commit_transaction datastore ds_update_acceptqty ds_update_acceptqty = Create datastore ds_update_acceptqty.DataObject = 'ds_order_ml_update_acceptqty' ds_update_acceptqty.SetTransObject(commit_transaction) IF uo_option_ml_wkp = 1 THEN arg_msg = '系统已设置为生产计划直接确认车间完成' rslt = 0 GOTO ext END IF IF billid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF it_newbegin Or it_updatebegin THEN rslt = 0 arg_msg = "编辑状态下不可以执行审核" GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = "单据还未审核" GOTO ext END IF IF secflag = 1 THEN rslt = 0 arg_msg = "单据已仓库审核" GOTO ext END IF UPDATE u_orderworkgroup_num SET auditrep = '', auditdate = :null_dt, flag = 0, rellossscid = 0, rellossid = 0 WHERE u_orderworkgroup_num.billid = :billid AND flag = 1 And secflag = 0 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在撤消审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //更新工组完成数 Decimal ld_finishqty Long ll_printid,ll_printid_next,ll_owrkGrpid_next,ll_workgroupid_next String ls_wkpname_next Int li_iflast Long ll_j FOR i = 1 To it_mxbt ld_finishqty = 0 SELECT finishqty,printid,iflast INTO :ld_finishqty,:ll_printid,:li_iflast FROM u_OrderMtrl_workgroup WHERE orderid = :wkpmx[i].orderid AND scid = :wkpmx[i].orderscid AND wrkGrpid = :sworkgroupid AND ( owrkGrpid = :dworkgroupid AND iflast = 0 AND :billtype = 0 OR iflast = 1 AND :billtype = 2 ) AND wkpname = :wkpmx[i].wkpname Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+',查询物料:'+wkpmx[i].mtrlcode+'源工组已完成数量失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF wkpmx[i].qty > ld_finishqty THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+',物料:'+wkpmx[i].mtrlcode+'当前数量'+String(wkpmx[i].qty,'#,##0.0###')+' > 工组已完成数量'+String(ld_finishqty,'#,##0.0###')+',不能撤审' rslt = 0 GOTO ext END IF UPDATE u_ordermtrl_workgroup SET finishqty = finishqty - :wkpmx[i].qty WHERE orderid = :wkpmx[i].orderid AND mtrlid = :wkpmx[i].mtrlid AND wrkGrpid = :sworkgroupid AND ( owrkGrpid = :dworkgroupid AND iflast = 0 AND :billtype = 0 OR iflast = 1 AND :billtype = 2 ) AND wkpname = :wkpmx[i].wkpname Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+',更新源工组未完成数量失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_ordermtrl_workgroup SET finishflag = 0, finishdate = :null_dt WHERE orderid = :wkpmx[i].orderid AND mtrlid = :wkpmx[i].mtrlid AND wrkGrpid = :sworkgroupid AND ( owrkGrpid = :dworkgroupid AND iflast = 0 AND :billtype = 0 OR iflast = 1 AND :billtype = 2 ) AND wkpname = :wkpmx[i].wkpname AND orderqty <> finishqty + stopqty Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+',更新源工组完成标记失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF //更新下一调拨接收数 IF li_iflast = 0 THEN SELECT min(printid) INTO :ll_printid_next FROM u_OrderMtrl_workgroup WHERE orderid = :wkpmx[i].orderid AND scid = :wkpmx[i].orderscid AND printid > :ll_printid AND wrkgrpid = :dworkgroupid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+',查询物料:'+wkpmx[i].mtrlcode+'调入工组调拨资料失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ds_update_acceptqty.Retrieve(wkpmx[i].orderscid,wkpmx[i].orderid,ll_printid_next,dworkgroupid) FOR ll_j = 1 To ds_update_acceptqty.RowCount() ll_owrkGrpid_next = ds_update_acceptqty.Object.owrkGrpid[ll_j] ls_wkpname_next = ds_update_acceptqty.Object.wkpname[ll_j] ll_workgroupid_next = ds_update_acceptqty.Object.workgroupid[ll_j] UPDATE u_OrderMtrl_workgroup SET acceptqty = acceptqty - :wkpmx[i].qty WHERE orderid = :wkpmx[i].orderid AND scid = :wkpmx[i].orderscid AND wrkGrpid = :dworkgroupid AND owrkGrpid = :ll_owrkGrpid_next AND wkpname = :ls_wkpname_next AND workgroupid = :ll_workgroupid_next Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+',更新物料:'+wkpmx[i].mtrlcode+'下工组调入数量失败,原因:'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF NEXT END IF If (billtype = 0 Or billtype = 2 ) And wkpmx[i].planid > 0 THEN IF uo_oplan.addmxcmpl(wkpmx[i].planscid,wkpmx[i].planid,wkpmx[i].planprintid,0 - wkpmx[i].qty,arg_msg,False) = 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+','+arg_msg rslt = 0 GOTO ext END IF IF uo_oplan.tryfinish(wkpmx[i].planscid,wkpmx[i].planid,arg_msg,False) = 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+','+arg_msg rslt = 0 GOTO ext END IF END IF IF uo_jd.uof_order_add_wrk_jd(scid,wkpmx[i].orderid,arg_msg,False) = 0 THEN arg_msg = '明细行:'+String(wkpmx[i].printid)+','+arg_msg rslt = 0 GOTO ext END IF NEXT //撤审删除损耗进仓单 IF rellossid > 0 THEN IF uo_loss_in.getinfo(rellossscid,rellossid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_loss_in.c_auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_loss_in.del(rellossscid,rellossid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF flag = 0 ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy uo_oplan Destroy uo_jd Destroy uo_loss_in Destroy ds_update_acceptqty RETURN rslt end function public function integer p_reset ();//int p_reset() //清除对象及其明细 billid=0 billcode='' opemp='' auditrep='' flag=0 scid = 0 relcode='' sworkgroupid = 0 dworkgroupid = 0 dscrp = '' relcpscid = 0 relcpid = 0 rellossscid = 0 rellossid = 0 it_newbegin=false it_updatebegin=false //清除明细 p_clearmx() return 1 end function public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg);//add_dscrp(string arg_newdescppart) //0 fail 1 success int rslt=1 arg_newdescppart=trim(arg_newdescppart) if it_updatebegin or it_newbegin then rslt=0 arg_msg="编辑状态下不可用" goto ext end if if arg_newdescppart='' then rslt=0 arg_msg="要添加内容为空,操作取消" goto ext end if rslt=p_getinfo(arg_billid,arg_msg) if rslt=0 then goto ext if flag=0 then rslt=0 arg_msg="非审核状态下不可用" goto ext end if update u_orderworkgroup_num set dscrp = dscrp+' '+:arg_newdescppart where u_orderworkgroup_num.billid = :arg_billid using commit_transaction; if commit_transaction.sqlcode<>0 then rollback using commit_transaction; rslt=0 arg_msg="因网络或其它原因导致添加单据备注操作失败"+"~n"+commit_transaction.sqlerrtext goto ext end if commit using commit_transaction; dscrp = dscrp+' '+arg_newdescppart ext: return (rslt) end function public function integer p_getinfo (long arg_billid, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arG_MSG = "非法单据唯一码" GOTO ext END IF SELECT billcode, relcode, sworkgroupid, dworkgroupid, flag, secflag, dscrp, billdate, relcpscid, relcpid, relcpcode, relrep, billtype, scid, rellossscid, rellossid INTO :billcode, :relcode, :sworkgroupid, :dworkgroupid, :flag, :secflag, :dscrp, :billdate, :relcpscid, :relcpid, :relcpcode, :relrep, :billtype, :scid, :rellossscid, :rellossid FROM u_orderworkgroup_num WHERE u_orderworkgroup_num.billid = :arg_billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询操作失败(错误单据唯一码)"+commit_transaction.SQLErrText GOTO ext END IF billid = arg_billid ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer updatebegin (long arg_billid, ref string arg_msg);Long rslt = 1 IF uo_option_ml_wkp = -1000 THEN arg_msg = '选项:[047]生产计划直接确认车间或工序完成,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_ml_wkp = 1 THEN arg_msg = '系统已设置为生产计划直接确认车间完成' rslt = 0 GOTO ext END IF IF arg_billid <= 0 THEN rslt = 0 GOTO ext END IF rslt = p_getinfo(arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改' GOTO ext END IF billid = arg_billid it_newbegin = False it_updatebegin = True p_clearmx() //清除明细 ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF uo_option_ml_wkp = -1000 THEN arg_msg = '选项:[047]生产计划直接确认车间或工序完成,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_ml_wkp = 1 THEN arg_msg = '系统已设置为生产计划直接确认车间完成' rslt = 0 GOTO ext END IF IF arg_billid <= 0 THEN rslt = 0 arg_msg = "没有删除对象,操作取消" GOTO ext END IF rslt = p_getinfo(arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核,不可以删除" GOTO ext END IF DELETE FROM u_orderworkgroup_num Where u_orderworkgroup_num.billid = :arg_billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF DELETE FROM u_orderworkgroup_nummx Where u_orderworkgroup_nummx.billid = :arg_billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF p_reset() RETURN rslt end function public function integer p_clearmx ();//int p_clearmx() //清除明细 it_mxbt=0 return 1 end function public function integer getinfo (long arg_billid, ref string arg_msg);Int rslt = 1 Long i = 1,no_mxcheck = 0 IF arg_billid <= 0 THEN rslt = 0 arg_msg = "非法单据唯一码" GOTO ext END IF rslt = p_getinfo(arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext //用游标读取明细 DECLARE cur_wkpmx CURSOR FOR SELECT u_orderworkgroup_nummx.printid, u_orderworkgroup_nummx.mtrlid, u_mtrldef.mtrlcode, u_orderworkgroup_nummx.status, u_orderworkgroup_nummx.qty, u_orderworkgroup_nummx.orderid, u_order_ml.ordercode, u_orderworkgroup_nummx.mxdscrp, u_orderworkgroup_nummx.wkpname, u_orderworkgroup_nummx.orderscid, u_orderworkgroup_nummx.woodcode, u_orderworkgroup_nummx.pcode, u_orderworkgroup_nummx.mtrlcuscode, u_orderworkgroup_nummx.location, u_orderworkgroup_nummx.waredscrp, u_orderworkgroup_nummx.planscid, u_orderworkgroup_nummx.planid, u_orderworkgroup_nummx.planprintid, u_orderworkgroup_nummx.uqty, u_orderworkgroup_nummx.unit, u_orderworkgroup_nummx.rate, u_orderworkgroup_nummx.lossqty FROM u_orderworkgroup_nummx INNER JOIN u_mtrldef ON u_orderworkgroup_nummx.mtrlid = u_mtrldef.mtrlid INNER JOIN u_Order_ml ON u_orderworkgroup_nummx.orderid = u_Order_ml.OrderID AND u_orderworkgroup_nummx.orderscid = u_Order_ml.scid WHERE u_orderworkgroup_nummx.billid = :arg_billid USING commit_transaction; OPEN cur_wkpmx; FETCH cur_wkpmx INTO :wkpmx[i].printid,:wkpmx[i].mtrlid, :wkpmx[i].mtrlcode,:wkpmx[i].status,:wkpmx[i].qty, :wkpmx[i].orderid,:wkpmx[i].ordercode,:wkpmx[i].mxdscrp, :wkpmx[i].wkpname,:wkpmx[i].orderscid, :wkpmx[i].woodcode,:wkpmx[i].pcode, :wkpmx[i].mtrlcuscode,:wkpmx[i].location, :wkpmx[i].waredscrp,:wkpmx[i].planscid, :wkpmx[i].planid,:wkpmx[i].planprintid, :wkpmx[i].uqty,:wkpmx[i].unit,:wkpmx[i].rate,:wkpmx[i].lossqty; DO WHILE commit_transaction.SQLCode = 0 i++ FETCH cur_wkpmx INTO :wkpmx[i].printid,:wkpmx[i].mtrlid, :wkpmx[i].mtrlcode,:wkpmx[i].status,:wkpmx[i].qty, :wkpmx[i].orderid,:wkpmx[i].ordercode,:wkpmx[i].mxdscrp, :wkpmx[i].wkpname,:wkpmx[i].orderscid, :wkpmx[i].woodcode,:wkpmx[i].pcode, :wkpmx[i].mtrlcuscode,:wkpmx[i].location, :wkpmx[i].waredscrp,:wkpmx[i].planscid, :wkpmx[i].planid,:wkpmx[i].planprintid, :wkpmx[i].uqty,:wkpmx[i].unit,:wkpmx[i].rate,:wkpmx[i].lossqty; LOOP CLOSE cur_wkpmx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_orderworkgroup_nummx WHERE u_orderworkgroup_nummx.billid = :arg_billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,单据明细数量" GOTO ext END IF IF i <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,单据明细" GOTO ext END IF billid = arg_billid it_mxbt = i - 1 it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer secauditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i Long ll_wrkGrpid uo_inware_cp uo_cp uo_cp = CREATE uo_inware_cp uo_cp.commit_transaction = commit_transaction uo_cp.if_getid_ture = FALSE IF uo_option_ml_wkp = -1000 THEN arg_msg = '选项:[047]生产计划直接确认车间或工序完成,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_orderworkgroup_num_cp = -1000 THEN arg_msg = '选项:[210]工组完工单使用仓库审,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_taskplancode = -1000 THEN arg_msg = '选项:[048]销售订单生产批号类型,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_ml_wkp = 1 THEN arg_msg = '系统已设置为生产计划直接确认车间完成' rslt = 0 GOTO ext END IF if uo_option_orderworkgroup_num_cp = 0 then arg_msg = '系统已设置为工组完工单不使用仓库审' rslt = 0 GOTO ext END IF IF billid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF it_newbegin OR it_updatebegin THEN rslt = 0 arg_msg = "编辑状态下不可以执行审核" GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = "单据还未审核" GOTO ext END IF IF secflag = 1 THEN rslt = 0 arg_msg = "单据已仓库审核" GOTO ext END IF UPDATE u_orderworkgroup_num SET secauditemp = :publ_operator, secauditdate = getdate(), secflag = 1 WHERE u_orderworkgroup_num.billid = :billid AND flag = 1 AND secflag = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致仓库审核单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在仓库审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //查调出工组所属车间 SELECT u_sc_workgroup.storageid INTO :ll_wrkGrpid FROM u_sc_workgroup WHERE u_sc_workgroup.wrkGrpid = :sworkgroupid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询调出工组所属车间资料失败,"+commit_transaction.SQLErrText GOTO ext END IF IF ll_wrkGrpid = 0 THEN rslt = 0 arg_msg = "调出工组未设所属车间资料,请检查" GOTO ext END IF //建成品进仓单 Long ll_relcpid,ll_scid,ll_storageid String ls_relcpcode SELECT u_storage.storageid, u_storage.scid INTO :ll_storageid,:ll_scid FROM u_storage WHERE u_storage.storageid = :dworkgroupid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询调入仓库资料失败,"+commit_transaction.SQLErrText GOTO ext END IF IF uo_cp.newbegin(ll_scid,3,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_cp.indate = billdate uo_cp.inrep = relrep uo_cp.part = billcode uo_cp.storageid = ll_storageid uo_cp.relid = ll_wrkGrpid FOR i = 1 TO it_mxbt IF wkpmx[i].mtrlid > 0 THEN String ls_mtrlcode,ls_unit String ls_taskrelcode,ls_plancode Decimal ls_planprice Long ll_cusid SELECT u_mtrldef.mtrlcode, u_mtrldef.unit, u_order_ml.taskrelcode INTO :ls_mtrlcode, :ls_unit, :ls_taskrelcode FROM u_mtrldef,u_order_ml WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid AND u_order_ml.scid = :wkpmx[i].orderscid AND u_order_ml.orderid = :wkpmx[i].orderid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询计划资料失败,"+commit_transaction.SQLErrText GOTO ext END IF IF uo_option_taskplancode = 1 THEN ls_plancode = ls_taskrelcode ELSE ls_plancode = '' END IF f_get_planprice_mtrl(wkpmx[i].mtrlid,wkpmx[i].status,wkpmx[i].woodcode,wkpmx[i].pcode,ls_planprice) SELECT u_order_ml.cusid INTO :ll_cusid FROM u_order_ml WHERE u_order_ml.scid = :wkpmx[i].orderscid AND u_order_ml.orderid = :wkpmx[i].orderid USING commit_transaction; IF commit_transaction.SQLCode = -1 THEN rslt = 0 arg_msg = "查询计划资料(客户)失败" GOTO ext ELSEIF commit_transaction.SQLCode = 100 THEN ll_cusid = 0 END IF IF IsNull(ll_cusid) THEN ll_cusid = 0 IF uo_cp.acceptmx(wkpmx[i].printid,& wkpmx[i].mtrlid,& ls_mtrlcode,& ls_plancode,& wkpmx[i].status,& wkpmx[i].uqty,& ls_planprice,& 1,& '',& arg_msg,& 0,& wkpmx[i].orderid,& 1,& wkpmx[i].woodcode,& wkpmx[i].pcode,& ll_cusid,& wkpmx[i].unit,& wkpmx[i].rate,wkpmx[i].qty,0,0,'',wkpmx[i].waredscrp,0,0,& wkpmx[i].mtrlcuscode,& wkpmx[i].Location,& wkpmx[i].qty,0) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT IF uo_cp.Save(FALSE,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_cp.getinfo(uo_cp.scid,uo_cp.inwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_cp.auditing(FALSE,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ll_relcpid = uo_cp.inwareid ls_relcpcode = uo_cp.inwarecode UPDATE u_orderworkgroup_num SET relcpid = :ll_relcpid, relcpscid = :ll_scid, relcpcode = :ls_relcpcode WHERE u_orderworkgroup_num.billid = :billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据相关成品进仓单资料操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF secflag = 1 ext: DESTROY uo_cp IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer c_secauditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0 DateTime null_dt SetNull(null_dt) uo_inware_cp uo_cp uo_cp = Create uo_inware_cp uo_cp.commit_transaction = commit_transaction IF uo_option_ml_wkp = -1000 THEN arg_msg = '选项:[047]生产计划直接确认车间或工序完成,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_ml_wkp = 1 THEN arg_msg = '系统已设置为生产计划直接确认车间完成' rslt = 0 GOTO ext END IF IF billid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF it_newbegin Or it_updatebegin THEN rslt = 0 arg_msg = "编辑状态下不可以执行审核" GOTO ext END IF IF secflag = 0 THEN rslt = 0 arg_msg = "单据还未仓审" GOTO ext END IF UPDATE u_orderworkgroup_num SET secauditemp = '', secauditdate = :null_dt, secflag = 0 WHERE u_orderworkgroup_num.billid = :billid And flag = 1 And secflag = 1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致仓审撤审单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在仓审撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //撤审删除成品进仓单 cnt = 0 SELECT count(*) INTO :cnt FROM u_inware WHERE scid = :relcpscid And inwareid = :relcpid; 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 IF cnt = 1 THEN IF uo_cp.getinfo(relcpscid,relcpid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_cp.c_auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_cp.del(relcpscid,relcpid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF UPDATE u_orderworkgroup_num SET relcpid = 0, relcpscid = 0, relcpcode = '' WHERE u_orderworkgroup_num.billid = :billid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据相关成品进仓单资料操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF secflag = 0 ext: Destroy uo_cp IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer newbegin (ref string arg_msg);Int rslt = 1 IF uo_option_ml_wkp = -1000 THEN arg_msg = '选项:[047]生产计划直接确认车间或工序完成,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_ml_wkp = 1 THEN arg_msg = '系统已设置为生产计划直接确认车间完成' rslt = 0 GOTO ext END IF p_reset() it_newbegin = TRUE it_updatebegin = FALSE ext: RETURN rslt end function public function integer uof_finish_wkp (long arg_scid, long arg_orderid, string arg_wkpname, long arg_wrkgrpid, long arg_owrkgrpid, 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 arg_msg = '选项:[047]生产计划直接确认车间或工序完成,读取初始默认值失败,操作取消!' rslt = 0 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_OrderMtrl_workgroup WHERE scid = :arg_scid AND orderid = :arg_orderid AND wkpname = :arg_wkpname AND wrkGrpid = :arg_wrkGrpid AND owrkGrpid = :arg_owrkGrpid; 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_OrderMtrl_workgroup SET finishflag = 1, finishdate = getdate(), finishqty = orderqty WHERE scid = :arg_scid AND orderid = :arg_orderid AND wkpname = :arg_wkpname AND wrkGrpid = :arg_wrkGrpid AND owrkGrpid = :arg_owrkGrpid 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_OrderMtrl_workgroup SET finishflag = 0, finishdate = :null_dt, finishqty = 0 WHERE scid = :arg_scid AND orderid = :arg_orderid AND wkpname = :arg_wkpname AND wrkGrpid = :arg_wrkGrpid AND owrkGrpid = :arg_owrkGrpid 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 add_mxdscrp (long arg_billid, long arg_printid, string arg_newdescppart, ref string arg_msg);//add_dscrp(string arg_newdescppart) //0 fail 1 success Int rslt = 1 arg_newdescppart = Trim(arg_newdescppart) IF it_updatebegin OR it_newbegin THEN rslt = 0 arg_msg = "编辑状态下不可用" GOTO ext END IF IF arg_newdescppart = '' THEN rslt = 0 arg_msg = "要添加内容为空,操作取消" GOTO ext END IF rslt = p_getinfo(arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 0 THEN rslt = 0 arg_msg = "非审核状态下不可用" GOTO ext END IF UPDATE u_orderworkgroup_nummx SET mxdscrp = ltrim(rtrim(mxdscrp))+' '+:arg_newdescppart WHERE u_orderworkgroup_nummx.billid = :arg_billid AND u_orderworkgroup_nummx.printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ROLLBACK USING commit_transaction; rslt = 0 arg_msg = "因网络或其它原因导致添加明细备注操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF COMMIT USING commit_transaction; ext: Return (rslt) end function public function integer acceptmx (long arg_printid, long arg_orderscid, long arg_orderid, string arg_ordercode, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, string arg_mxdscrp, string arg_wkpname, string arg_mtrlcuscode, string arg_location, string arg_waredscrp, long arg_planscid, long arg_planid, long arg_planprintid, decimal arg_uqty, string arg_unit, decimal arg_rate, decimal arg_lossqty, ref string arg_msg);Int rslt = 1 Long cnt = 0,ls_i String ls_swkpname,ls_owkpname,ls_oplancode Decimal ld_Qty_oplan_notfinish,ld_Qty_oplan_notaudit Decimal ld_qty_owkp_notfinish,ld_Qty_owkp_notaudit Decimal ld_uprate IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF //清除空值 IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_orderscid) THEN arg_orderscid = 0 IF IsNull(arg_orderid) THEN arg_orderid = 0 IF IsNull(arg_ordercode) THEN arg_ordercode = '' IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = '' IF IsNull(arg_wkpname) THEN arg_wkpname = '' IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_woodcode) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_mtrlcuscode) THEN arg_mtrlcuscode = '' IF IsNull(arg_location) THEN arg_location = '' IF IsNull(arg_qty) THEN arg_qty = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF IsNull(arg_waredscrp) THEN arg_waredscrp = '' IF IsNull(arg_planid) THEN arg_planid = 0 IF IsNull(arg_planprintid) THEN arg_planprintid = 0 IF IsNull(arg_planscid) THEN arg_planscid = 0 IF IsNull(arg_uqty) THEN arg_uqty = 0 IF IsNull(arg_unit) THEN arg_unit = '' IF IsNull(arg_rate) THEN arg_rate = 1 IF arg_rate = 0 THEN arg_rate = 1 // 如果数量为 0则不作任何处理 IF arg_qty = 0 THEN rslt = 1 GOTO ext END IF //检查物料id SELECT count(*) INTO :cnt FROM u_order_ml WHERE mtrlid = :arg_mtrlid AND orderid = :arg_orderid And scid = :sys_scid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '明细行:'+String(arg_printid)+",查询生产计划操作失败,编号:"+arg_mtrlcode GOTO ext END IF //检查工组 SELECT wrkGrpName INTO :ls_swkpname FROM u_sc_workgroup Where wrkGrpid = :sworkgroupid; IF sqlca.SQLCode <> 0 THEN arg_msg = '明细行:'+String(arg_printid)+',查询调出工组名称失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF billtype = 0 THEN SELECT wrkGrpName INTO :ls_owkpname FROM u_sc_workgroup Where wrkGrpid = :dworkgroupid; IF sqlca.SQLCode <> 0 THEN arg_msg = '明细行:'+String(arg_printid)+',查询调入工组名称失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF billtype = 0 Or billtype = 2 THEN IF arg_planid > 0 THEN SELECT oplancode INTO :ls_oplancode FROM u_order_plan WHERE scid = :arg_planscid And oplanid = :arg_planid; IF sqlca.SQLCode <> 0 THEN arg_msg = '明细行:'+String(arg_printid)+',查询派工单号失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //检查已开单数 SELECT u_order_planmx.qty - u_order_planmx.fqty, u_order_planmx.uprate INTO :ld_Qty_oplan_notfinish,:ld_uprate FROM u_order_planmx WHERE u_order_planmx.scid = :arg_orderscid AND u_order_planmx.oplanid = :arg_planid AND u_order_planmx.printid = :arg_planprintid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '明细行:'+String(arg_printid)+',工组派工单:'+ls_oplancode+',查询未完数失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF SELECT isnull(sum(u_orderworkgroup_nummx.qty),0) INTO :ld_Qty_oplan_notaudit FROM u_orderworkgroup_num,u_orderworkgroup_nummx WHERE u_orderworkgroup_num.billid = u_orderworkgroup_nummx.billid AND u_orderworkgroup_nummx.orderscid = :arg_orderscid AND u_orderworkgroup_nummx.planid = :arg_planid AND u_orderworkgroup_nummx.planprintid = :arg_planprintid AND u_orderworkgroup_num.flag = 0 AND u_orderworkgroup_num.billid <> :billid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '明细行:'+String(arg_printid)+',工组派工单:'+ls_oplancode+',查询工组交接单已开单未审数失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF (ld_Qty_oplan_notfinish - ld_Qty_oplan_notaudit) * (1+ld_uprate) < arg_qty THEN arg_msg = '明细行:'+String(arg_printid)+',工组派工单:'+ls_oplancode+',未完成数:'+String(ld_Qty_oplan_notfinish,'#,#0.##########')+',已开单未审数:'+String(ld_Qty_oplan_notaudit,'#,#0.##########')+',不能再开单:'+String(arg_qty,'#,#0.##########')+',允许超比例:'+String(ld_uprate,'#,#0.##########') rslt = 0 GOTO ext END IF ELSE arg_planscid = 0 arg_planprintid = 0 ls_oplancode = '' END IF END IF IF billtype = 0 THEN SELECT u_OrderMtrl_workgroup.orderqty - u_OrderMtrl_workgroup.finishqty - u_OrderMtrl_workgroup.stopqty, u_OrderMtrl_workgroup.uprate INTO :ld_qty_owkp_notfinish,:ld_uprate FROM u_OrderMtrl_workgroup WHERE u_OrderMtrl_workgroup.wrkGrpid = :sworkgroupid AND u_OrderMtrl_workgroup.owrkGrpid = :dworkgroupid AND u_OrderMtrl_workgroup.orderid = :arg_orderid AND u_OrderMtrl_workgroup.scid = :arg_orderscid AND u_OrderMtrl_workgroup.wkpname = :arg_wkpname Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询工组进度未完成数失败,工组调拨,计划:"+arg_ordercode+",物料:"+arg_mtrlcode+','+commit_transaction.sqlerrtext GOTO ext END IF SELECT isnull(sum(u_orderworkgroup_nummx.qty),0) INTO :ld_Qty_owkp_notaudit FROM u_orderworkgroup_num,u_orderworkgroup_nummx WHERE u_orderworkgroup_num.billid = u_orderworkgroup_nummx.billid AND u_orderworkgroup_nummx.orderscid = :arg_orderscid AND u_orderworkgroup_nummx.orderid = :arg_orderid AND u_orderworkgroup_nummx.wkpname = :arg_wkpname AND u_orderworkgroup_num.sworkgroupid = :sworkgroupid AND u_orderworkgroup_num.dworkgroupid = :dworkgroupid AND u_orderworkgroup_num.flag = 0 AND u_orderworkgroup_num.billtype = 0 AND u_orderworkgroup_num.billid <> :billid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '明细行:'+String(arg_printid)+',查询工组交接单已开单未审数失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF (ld_qty_owkp_notfinish - ld_Qty_owkp_notaudit) * (1 + ld_uprate) < arg_qty THEN arg_msg = '明细行:'+String(arg_printid)+',工组进度:'+ls_oplancode+',未完成数:'+String(ld_qty_owkp_notfinish,'#,#0.##########')+',已开单未审数:'+String(ld_Qty_owkp_notaudit,'#,#0.##########')+',不能再开单:'+String(arg_qty,'#,#0.##########')+',允许超比例:'+String(ld_uprate,'#,#0.##########') rslt = 0 GOTO ext END IF ELSE SELECT u_OrderMtrl_workgroup.orderqty - u_OrderMtrl_workgroup.finishqty - u_OrderMtrl_workgroup.stopqty, u_OrderMtrl_workgroup.uprate INTO :ld_qty_owkp_notfinish,:ld_uprate FROM u_OrderMtrl_workgroup WHERE u_OrderMtrl_workgroup.wrkGrpid = :sworkgroupid AND u_OrderMtrl_workgroup.iflast = 1 AND u_OrderMtrl_workgroup.orderid = :arg_orderid AND u_OrderMtrl_workgroup.scid = :arg_orderscid AND u_OrderMtrl_workgroup.wkpname = :arg_wkpname Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询工组进度未完成数失败,工组调拨,计划:"+arg_ordercode+",物料:"+arg_mtrlcode+','+commit_transaction.sqlerrtext GOTO ext END IF SELECT isnull(sum(u_orderworkgroup_nummx.qty),0) INTO :ld_Qty_owkp_notaudit FROM u_orderworkgroup_num,u_orderworkgroup_nummx WHERE u_orderworkgroup_num.billid = u_orderworkgroup_nummx.billid AND u_orderworkgroup_nummx.orderscid = :arg_orderscid AND u_orderworkgroup_nummx.orderid = :arg_orderid AND u_orderworkgroup_nummx.wkpname = :arg_wkpname AND u_orderworkgroup_num.sworkgroupid = :sworkgroupid AND u_orderworkgroup_num.flag = 0 AND u_orderworkgroup_num.billtype = 2 AND u_orderworkgroup_num.billid <> :billid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '明细行:'+String(arg_printid)+',查询工组完工单已开单未审数失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF (ld_qty_owkp_notfinish - ld_Qty_owkp_notaudit) * (1 + ld_uprate) < arg_qty THEN arg_msg = '明细行:'+String(arg_printid)+',工组进度:'+ls_oplancode+',未完成数:'+String(ld_qty_owkp_notfinish,'#,#0.##########')+',已开单未审数:'+String(ld_Qty_owkp_notaudit,'#,#0.##########')+',不能再开单:'+String(arg_qty,'#,#0.##########')+',允许超比例:'+String(ld_uprate,'#,#0.##########') rslt = 0 GOTO ext END IF END IF //写入内容 it_mxbt++ wkpmx[it_mxbt].printid = arg_printid wkpmx[it_mxbt].orderid = arg_orderid wkpmx[it_mxbt].orderscid = arg_orderscid wkpmx[it_mxbt].ordercode = arg_ordercode wkpmx[it_mxbt].mtrlid = arg_mtrlid wkpmx[it_mxbt].mtrlcode = arg_mtrlcode wkpmx[it_mxbt].status = arg_status wkpmx[it_mxbt].woodcode = arg_woodcode wkpmx[it_mxbt].pcode = arg_pcode wkpmx[it_mxbt].wkpname = arg_wkpname wkpmx[it_mxbt].mtrlcuscode = arg_mtrlcuscode wkpmx[it_mxbt].Location = arg_location wkpmx[it_mxbt].qty = arg_qty wkpmx[it_mxbt].mxdscrp = arg_mxdscrp wkpmx[it_mxbt].waredscrp = arg_waredscrp wkpmx[it_mxbt].planscid = arg_planscid wkpmx[it_mxbt].planprintid = arg_planprintid wkpmx[it_mxbt].planid = arg_planid wkpmx[it_mxbt].oplancode = ls_oplancode wkpmx[it_mxbt].uqty = arg_uqty wkpmx[it_mxbt].lossqty = arg_lossqty wkpmx[it_mxbt].rate = arg_rate wkpmx[it_mxbt].unit = arg_unit ext: IF rslt = 0 THEN p_clearmx() Return(rslt) end function on uo_workgroup_num.create call super::create TriggerEvent( this, "constructor" ) end on on uo_workgroup_num.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String arg_msg String str_optionvalue str_optionvalue = '' f_get_sys_option_value('118',str_optionvalue,arg_msg) uo_option_orderworkgroup_time = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('210',str_optionvalue,arg_msg) uo_option_orderworkgroup_num_cp = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('047',str_optionvalue,arg_msg) uo_option_ml_wkp = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('038',str_optionvalue,arg_msg) uo_option_taskplancode = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('371',str_optionvalue,arg_msg) uo_option_workgroup_num_check = Long(str_optionvalue) end event