$PBExportHeader$uo_order_ml_pack.sru forward global type uo_order_ml_pack from nonvisualobject end type end forward global type uo_order_ml_pack from nonvisualobject end type global uo_order_ml_pack uo_order_ml_pack type variables Long uo_billid String uo_billcode Long scid Long orderid Decimal orderqty Long taskid,taskprintid String billemp Int flag Long uo_option_inout_type end variables forward prototypes public function integer save (s_order_ml_pack arg_s_pack, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer p_getinfo (long arg_billid, ref string arg_msg) public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_billid, ref s_order_ml_packmx arg_s_mx[], ref long arg_arr_cnt, ref string arg_msg) public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer updatebegin (long arg_billid, ref string arg_msg) public function integer getinfo_mx (long arg_billid, long arg_printid, ref s_order_ml_packmx arg_s_mx, ref string arg_msg) public function integer audit_mx (long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer caudit_mx (long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer stopmx (long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer cstopmx (long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_packmx (s_order_ml_packmx arg_s_packmx, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer save (s_order_ml_pack arg_s_pack, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime server_dt Long ll_billid String ls_billcode String ls_sccode Long it_mxbt,ll_i,ll_j Long cnt Int li_ifpack Long ll_outtype,ll_outtype_storage Boolean lb_find = False If IsNull(arg_s_pack.billid) Then arg_s_pack.billid = 0 If IsNull(arg_s_pack.scid) Then arg_s_pack.scid = 0 If IsNull(arg_s_pack.orderid) Then arg_s_pack.orderid = 0 If IsNull(arg_s_pack.orderqty) Then arg_s_pack.orderqty = 0 If IsNull(arg_s_pack.taskid) Then arg_s_pack.taskid = 0 If IsNull(arg_s_pack.taskprintid) Then arg_s_pack.taskprintid = 0 If IsNull(arg_s_pack.billemp) Then arg_s_pack.billemp = '' If arg_s_pack.orderid = 0 Then rslt = 0 arg_msg = '请选择指令单' Goto ext End If If arg_s_pack.billemp = '' Then arg_msg = '请输入经手人' rslt = 0 Goto ext End If //检查指令单是否已开过生产计划包件变更单,如果有,检查之前开的单是否全部终止包件明细 Select count(*) Into :cnt From u_order_ml_pack Inner JOIN u_order_ml_packmx ON u_order_ml_pack.billid = u_order_ml_packmx.billid Where u_order_ml_pack.scid = :arg_s_pack.scid And u_order_ml_pack.orderid = :arg_s_pack.orderid And u_order_ml_pack.billid <> :arg_s_pack.billid And u_order_ml_packmx.stopflag = 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 it_mxbt = UpperBound(arg_s_pack.arg_s_mx) If it_mxbt <= 0 Then rslt = 0 arg_msg = "没有正确明细内容" 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 For ll_i = 1 To it_mxbt If arg_s_pack.arg_s_mx[ll_i].Kind = 1 Then Continue If arg_s_pack.arg_s_mx[ll_i].storageid = 0 Then rslt = 0 arg_msg = '第'+String(ll_i)+'行,请选择仓库' Goto ext End If //限制必须是个性包件 Select ifpack,outtype Into :li_ifpack,:ll_outtype From u_mtrldef Where mtrlid = :arg_s_pack.arg_s_mx[ll_i].mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '第'+String(ll_i)+'行明细,查询是否属于个性包件失败,'+sqlca.SQLErrText Goto ext End If If li_ifpack <> 2 Then rslt = 0 arg_msg = '第'+String(ll_i)+'行明细不是个性包件,不能保存,请检查' Goto ext End If // If ll_outtype = 2 Then Select outtype Into :ll_outtype_storage From u_storage Where storageid = :arg_s_pack.arg_s_mx[ll_i].storageid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '第'+String(ll_i)+'行,查询仓库进出仓策略失败' Goto ext End If If ll_outtype_storage <> 2 Then rslt = 0 arg_msg = '第'+String(ll_i)+'行,包件使用条码出仓,应该选择使用条码出仓的仓库' Goto ext End If End If If arg_s_pack.arg_s_mx[ll_i].qty <= 0 Then rslt = 0 arg_msg = '第'+String(ll_i)+'行明细,不合理的包件数量' Goto ext End If If arg_s_pack.arg_s_mx[ll_i].packqty <= 0 Then rslt = 0 arg_msg = '第'+String(ll_i)+'行明细,不合理的包装基数' Goto ext End If If arg_s_pack.arg_s_mx[ll_i].orderdate > arg_s_pack.arg_s_mx[ll_i].requiredate Then rslt = 0 arg_msg = '第'+String(ll_i)+'行明细,不合理的指令单开始结束日期' Goto ext End If //检查终止类型中是否有相同包件明细,有则不作下面检查 lb_find = False For ll_j = 1 To it_mxbt If arg_s_pack.arg_s_mx[ll_j].Kind = 0 Then Continue If arg_s_pack.arg_s_mx[ll_i].mtrlid = arg_s_pack.arg_s_mx[ll_j].mtrlid And & arg_s_pack.arg_s_mx[ll_i].status = arg_s_pack.arg_s_mx[ll_j].status And & arg_s_pack.arg_s_mx[ll_i].woodcode = arg_s_pack.arg_s_mx[ll_j].woodcode And & arg_s_pack.arg_s_mx[ll_i].pcode = arg_s_pack.arg_s_mx[ll_j].pcode Then lb_find = True Exit End If Next If lb_find = False Then Select count(*) Into :cnt From u_order_ml Where ordertype = 4 And scid = :arg_s_pack.scid And pzlorderid = :arg_s_pack.orderid And mtrlid = :arg_s_pack.arg_s_mx[ll_i].mtrlid And status_mode = :arg_s_pack.arg_s_mx[ll_i].status And woodcode = :arg_s_pack.arg_s_mx[ll_i].woodcode And pcode = :arg_s_pack.arg_s_mx[ll_i].pcode And status = 1; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '第'+String(ll_i)+'行明细,查询包件指令是否已有相同信息失败,'+sqlca.SQLErrText Goto ext End If If cnt > 0 Then rslt = 0 arg_msg = '第'+String(ll_i)+'行明细,包件指令已存在相同信息,不能重复添加' Goto ext End If End If Next If arg_s_pack.billid = 0 Then ll_billid = f_sys_scidentity(0,"u_order_ml_pack","billid",arg_msg,True,id_sqlca) If ll_billid <= 0 Then rslt = 0 Goto ext End If If f_get_sccode(arg_s_pack.scid,sqlca,ls_sccode,arg_msg) = 0 Then rslt = 0 Goto ext End If ls_billcode = getid(arg_s_pack.scid,ls_sccode + 'TO',Date(server_dt),False,sqlca) If ls_billcode = "err" Then rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText Goto ext End If Insert Into u_order_ml_pack (billid, billcode, scid, orderid, orderqty, taskid, taskprintid, billemp, opdate, opemp) Values (:ll_billid, :ls_billcode, :arg_s_pack.scid, :arg_s_pack.orderid, :arg_s_pack.orderqty, :arg_s_pack.taskid, :arg_s_pack.taskprintid, :arg_s_pack.billemp, :server_dt, :arg_opemp); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '因网络或其它原因导致建立单据失败,'+sqlca.SQLErrText Goto ext End If For ll_i = 1 To it_mxbt Insert Into u_order_ml_packmx (billid, printid, scid, mtrlid, status, woodcode, pcode, qty, packqty, orderdate, requiredate, storageid, kind, orderid, ordercode, getbarid, getbarcode) Values (:ll_billid, :arg_s_pack.arg_s_mx[ll_i].printid, :arg_s_pack.scid, :arg_s_pack.arg_s_mx[ll_i].mtrlid, :arg_s_pack.arg_s_mx[ll_i].status, :arg_s_pack.arg_s_mx[ll_i].woodcode, :arg_s_pack.arg_s_mx[ll_i].pcode, :arg_s_pack.arg_s_mx[ll_i].qty, :arg_s_pack.arg_s_mx[ll_i].packqty, :arg_s_pack.arg_s_mx[ll_i].orderdate, :arg_s_pack.arg_s_mx[ll_i].requiredate, :arg_s_pack.arg_s_mx[ll_i].storageid, :arg_s_pack.arg_s_mx[ll_i].kind, :arg_s_pack.arg_s_mx[ll_i].orderid, :arg_s_pack.arg_s_mx[ll_i].ordercode, :arg_s_pack.arg_s_mx[ll_i].getbarid, :arg_s_pack.arg_s_mx[ll_i].getbarcode); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '插入单据明细操作失败,'+sqlca.SQLErrText Goto ext End If Next uo_billid = ll_billid uo_billcode = ls_billcode Else Update u_order_ml_pack Set orderid = :arg_s_pack.orderid, orderqty = :arg_s_pack.orderqty, taskid = :arg_s_pack.taskid, taskprintid = :arg_s_pack.taskprintid, billemp = :arg_s_pack.billemp, moddate = :server_dt, modemp = :arg_opemp Where billid = :arg_s_pack.billid And flag = 0; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新单据失败,'+sqlca.SQLErrText Goto ext End If Delete From u_order_ml_packmx Where billid = :arg_s_pack.billid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If For ll_i = 1 To it_mxbt Insert Into u_order_ml_packmx (billid, printid, scid, mtrlid, status, woodcode, pcode, qty, packqty, orderdate, requiredate, storageid, kind, orderid, ordercode, getbarid, getbarcode) Values (:arg_s_pack.billid, :arg_s_pack.arg_s_mx[ll_i].printid, :arg_s_pack.scid, :arg_s_pack.arg_s_mx[ll_i].mtrlid, :arg_s_pack.arg_s_mx[ll_i].status, :arg_s_pack.arg_s_mx[ll_i].woodcode, :arg_s_pack.arg_s_mx[ll_i].pcode, :arg_s_pack.arg_s_mx[ll_i].qty, :arg_s_pack.arg_s_mx[ll_i].packqty, :arg_s_pack.arg_s_mx[ll_i].orderdate, :arg_s_pack.arg_s_mx[ll_i].requiredate, :arg_s_pack.arg_s_mx[ll_i].storageid, :arg_s_pack.arg_s_mx[ll_i].kind, :arg_s_pack.arg_s_mx[ll_i].orderid, :arg_s_pack.arg_s_mx[ll_i].ordercode, :arg_s_pack.arg_s_mx[ll_i].getbarid, :arg_s_pack.arg_s_mx[ll_i].getbarcode); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '插入单据明细操作失败,'+sqlca.SQLErrText Goto ext End If Next 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 del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag,li_ifauto,li_billtype IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag <> 0 THEN rslt = 0 arg_msg = '单据不是在待审核状态,不可以删除' GOTO ext END IF DELETE FROM u_order_ml_packmx WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_order_ml_pack WHERE billid = :arg_billid AND flag = 0; 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 p_getinfo (long arg_billid, ref string arg_msg);Int rslt = 1 SELECT billid, billcode, flag, scid, orderid, orderqty, taskid, taskprintid, billemp INTO :uo_billid, :uo_billcode, :flag, :scid, :orderid, :orderqty, :taskid, :taskprintid, :billemp FROM u_order_ml_pack Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询单据信息失败,'+sqlca.SQLErrText GOTO ext END IF ext: RETURN rslt end function public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误的单据唯一码' GOTO ext END IF IF p_getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag <> 0 THEN rslt = 0 arg_msg = '单据只有在待审核状态下才能执行审核操作' GOTO ext END IF UPDATE u_order_ml_pack SET auditemp = :arg_opemp, auditdate = getdate(), flag = 1 WHERE billid = :arg_billid And flag = 0; 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 getinfo (long arg_billid, ref s_order_ml_packmx arg_s_mx[], ref long arg_arr_cnt, 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 IF p_getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF DECLARE cur_pack_mx CURSOR FOR SELECT billid, printid, scid, mtrlid, status, woodcode, pcode, qty, packqty, orderdate, requiredate, orderid, ordercode, flag, getbarid, getbarcode, stopflag, storageid FROM u_order_ml_packmx Where billid = :arg_billid order by printid; OPEN cur_pack_mx; FETCH cur_pack_mx INTO :arg_s_mx[i].billid, :arg_s_mx[i].printid, :arg_s_mx[i].scid, :arg_s_mx[i].mtrlid, :arg_s_mx[i].status, :arg_s_mx[i].woodcode, :arg_s_mx[i].pcode, :arg_s_mx[i].qty, :arg_s_mx[i].packqty, :arg_s_mx[i].orderdate, :arg_s_mx[i].requiredate, :arg_s_mx[i].orderid, :arg_s_mx[i].ordercode, :arg_s_mx[i].flag, :arg_s_mx[i].getbarid, :arg_s_mx[i].getbarcode, :arg_s_mx[i].stopflag, :arg_s_mx[i].storageid; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_pack_mx INTO :arg_s_mx[i].billid, :arg_s_mx[i].printid, :arg_s_mx[i].scid, :arg_s_mx[i].mtrlid, :arg_s_mx[i].status, :arg_s_mx[i].woodcode, :arg_s_mx[i].pcode, :arg_s_mx[i].qty, :arg_s_mx[i].packqty, :arg_s_mx[i].orderdate, :arg_s_mx[i].requiredate, :arg_s_mx[i].orderid, :arg_s_mx[i].ordercode, :arg_s_mx[i].flag, :arg_s_mx[i].getbarid, :arg_s_mx[i].getbarcode, :arg_s_mx[i].stopflag, :arg_s_mx[i].storageid; LOOP CLOSE cur_pack_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_order_ml_packmx Where billid = :arg_billid; 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 arg_arr_cnt = i - 1 ext: RETURN rslt end function public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_cnt_mx,ll_i DateTime null_dt s_order_ml_packmx arg_s_mx[] SetNull(null_dt) IF getinfo(arg_billid,arg_s_mx,ll_cnt_mx,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag <> 1 THEN rslt = 0 arg_msg = '单据只有在已审核状态下才能执行撤审' GOTO ext END IF FOR ll_i = 1 To ll_cnt_mx IF arg_s_mx[ll_i].flag = 1 THEN rslt = 0 arg_msg = '明细第'+String(arg_s_mx[ll_i].printid)+'行已经审核,不以撤审单据,请检查' GOTO ext END IF NEXT //更新审核标记 UPDATE u_order_ml_pack SET auditemp = '', auditdate = :null_dt, flag = 0 WHERE billid = :arg_billid And flag = 1; 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 updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1 IF p_getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag <> 0 THEN rslt = 0 arg_msg = '单据只有待审核状态下才能修改' GOTO ext END IF ext: RETURN rslt end function public function integer getinfo_mx (long arg_billid, long arg_printid, ref s_order_ml_packmx arg_s_mx, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误的单据唯一码' GOTO ext END IF IF arg_printid <= 0 THEN rslt = 0 arg_msg = '错误的明细序号' GOTO ext END IF Long ll_billid,ll_printid,ll_scid,ll_mtrlid String ls_status,ls_woodcode,ls_pcode Decimal ld_qty,ld_packqty DateTime ld_orderdate,ld_requiredate Long ll_orderid,ll_flag,ll_getbarid,ll_stopflag,ll_storageid,ll_printid_tree String ls_ordercode,ls_getbarcode int li_kind SELECT billid, printid, scid, mtrlid, status, woodcode, pcode, qty, packqty, orderdate, requiredate, orderid, ordercode, flag, getbarid, getbarcode, stopflag, storageid, printid_tree, kind INTO :ll_billid, :ll_printid, :ll_scid, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ld_qty, :ld_packqty, :ld_orderdate, :ld_requiredate, :ll_orderid, :ls_ordercode, :ll_flag, :ll_getbarid, :ls_getbarcode, :ll_stopflag, :ll_storageid, :ll_printid_tree, :li_kind FROM u_order_ml_packmx WHERE billid = :arg_billid And printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询明细信息失败,'+sqlca.SQLErrText GOTO ext END IF arg_s_mx.billid = ll_billid arg_s_mx.printid = ll_printid arg_s_mx.scid = ll_scid arg_s_mx.mtrlid = ll_mtrlid arg_s_mx.status = ls_status arg_s_mx.woodcode = ls_woodcode arg_s_mx.pcode = ls_pcode arg_s_mx.qty = ld_qty arg_s_mx.packqty = ld_packqty arg_s_mx.orderdate = ld_orderdate arg_s_mx.requiredate = ld_requiredate arg_s_mx.orderid = ll_orderid arg_s_mx.ordercode = ls_ordercode arg_s_mx.flag = ll_flag arg_s_mx.getbarid = ll_getbarid arg_s_mx.getbarcode = ls_getbarcode arg_s_mx.stopflag = ll_stopflag arg_s_mx.storageid = ll_storageid arg_s_mx.printid_tree = ll_printid_tree arg_s_mx.kind = li_kind ext: RETURN rslt end function public function integer audit_mx (long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_i,cnt uo_order_ml uo_zl uo_zl = Create uo_order_ml uo_getbar uo_get uo_get = Create uo_getbar s_order_ml_packmx arg_s_mx s_getbar arg_s_gb,arg_s_gb_null datastore ds_gb_mx ds_gb_mx = Create datastore ds_gb_mx.DataObject = 'dw_getbarmx_edit' ds_gb_mx.SetTransObject(sqlca) IF p_getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF getinfo_mx(arg_billid,arg_printid,arg_s_mx,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag <> 1 THEN rslt = 0 arg_msg = '必须先审核单据才能审核明细,请检查' GOTO ext END IF IF arg_s_mx.flag = 1 THEN rslt = 0 arg_msg = '明细已审核,不能再审' GOTO ext END IF String ls_relcode,ls_taskrelcode Long ll_taskmxid String ls_gydscrp,ls_pfklmode DateTime ld_perfinishdate Long ll_level String ls_typename,ls_outtypestr Long ll_porderid Decimal ld_orderqty String ls_ordercode String ls_pfcode Long ll_produce_wrkgrpid Long ll_orderid_update,ll_getbarid_update String ls_ordercode_update,ls_getbarcode_update Long ll_outtype Long ll_balctype,ll_cusid Decimal ld_packqty,ld_qty Long ll_cnt,j,i,child_row String ls_barcode DateTime server_dt Long ll_mtrlid_order Long ll_dftscllwkpid,ll_printid_tree String ls_wpcode SELECT Top 1 getdate() Into :server_dt From u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询操作失败,日期' GOTO ext END IF IF arg_s_mx.Kind = 0 THEN //0-新增 cnt = 0 SELECT count(*) INTO :cnt FROM u_order_ml_packmx WHERE billid = :arg_billid AND kind = 1 And flag = 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 SELECT relcode, taskrelcode, taskmxid, gydscrp, pfklmode, perfinishdate, level, typename, outtypestr, porderid, ordercode, cusid, mtrlid, orderqty INTO :ls_relcode, :ls_taskrelcode, :ll_taskmxid, :ls_gydscrp, :ls_pfklmode, :ld_perfinishdate, :ll_level, :ls_typename, :ls_outtypestr, :ll_porderid, :ls_ordercode, :ll_cusid, :ll_mtrlid_order, :ld_orderqty FROM u_order_ml WHERE scid = :scid And orderid = :orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单相关信息失败,'+sqlca.SQLErrText GOTO ext END IF SELECT dftwrkGrpid,outtype,dftscllwkpid INTO :ll_produce_wrkgrpid,:ll_outtype,:ll_dftscllwkpid FROM u_mtrldef Where mtrlid = :arg_s_mx.mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询明细包件默认制造车间失败,'+sqlca.SQLErrText GOTO ext END IF ls_pfcode = f_get_dft_pf(arg_s_mx.mtrlid) ls_wpcode = f_get_dft_wp(arg_s_mx.mtrlid) //插入主计划运算表 SELECT max(printid) INTO :ll_printid_tree FROM u_OrderRqMtrl_tree WHERE scid = :scid And orderid = :ll_porderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询主生产计划运算表信息失败,'+sqlca.SQLErrText GOTO ext END IF IF IsNull(ll_printid_tree) THEN ll_printid_tree = 0 ll_printid_tree++ INSERT INTO u_OrderRqMtrl_tree (scid, OrderID, MtrlID, wrkGrpid, RqQty, truerqqty, edate, RqDate, status, woodcode, pcode, lp, printid, pfcode, produce_scid, scllqty, produce_wrkGrpid) VALUES (:scid, :ll_porderid, :arg_s_mx.mtrlid, :ll_dftscllwkpid, :arg_s_mx.qty, :arg_s_mx.qty, :arg_s_mx.orderdate, :arg_s_mx.requiredate, :arg_s_mx.status, :arg_s_mx.woodcode, :arg_s_mx.pcode, 1, :ll_printid_tree, :ls_pfcode, :scid, :arg_s_mx.qty, :ll_produce_wrkgrpid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入主生产计划运算表失败,'+sqlca.SQLErrText GOTO ext END IF //生成相关生产指令单 IF uo_zl.acceptmx(ls_relcode,& arg_s_mx.orderdate,& 0,& '',& 0,& arg_s_mx.mtrlid,& arg_s_mx.status,& arg_s_mx.woodcode,& arg_s_mx.pcode,& arg_s_mx.qty,& '',& publ_operator,& arg_s_mx.requiredate,& 4,& ls_taskrelcode,& ls_pfcode,& ll_taskmxid,& ll_porderid,& 1,& ll_produce_wrkgrpid,& ls_gydscrp,& ls_pfklmode,& 0,'',0,& '',& '',& scid,& ld_perfinishdate,& 0,& 0,& ll_level,& ls_typename,& ls_outtypestr,& orderid,& 0,& 0,0,0,& ls_wpcode,0,& arg_msg) = 0 THEN arg_msg = '建立相关生产指令单失败,'+arg_msg rslt = 0 GOTO ext END IF uo_zl.pzlordercode_tmp = ls_ordercode 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_zl.audit(scid,uo_zl.orderid_arr[1],arg_msg,False) = 0 THEN rslt = 0 arg_msg = '审核相关生产指令单失败(初审),'+arg_msg GOTO ext END IF IF uo_zl.plan_audit(scid,uo_zl.orderid_arr[1],arg_msg,False) = 0 THEN rslt = 0 arg_msg = '审核相关生产指令单失败(初审),'+arg_msg GOTO ext END IF IF uo_zl.sec_audit(scid,uo_zl.orderid_arr[1],arg_msg,False) = 0 THEN rslt = 0 arg_msg = '审核相关生产指令单失败(二审),'+arg_msg GOTO ext END IF ll_orderid_update = uo_zl.orderid ls_ordercode_update = uo_zl.ordercode //生成相关条码生成单 IF ll_outtype = 2 And uo_option_inout_type = 2 THEN SELECT balctype INTO :ll_balctype FROM u_storage Where storageid = :arg_s_mx.storageid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询仓库是否使用客户库存失败,'+sqlca.SQLErrText GOTO ext END IF arg_s_gb = arg_s_gb_null arg_s_gb.scid = scid arg_s_gb.getbarid = 0 arg_s_gb.getbardate = DateTime(Date(Today()),Time(0)) arg_s_gb.ifrel = 1 arg_s_gb.orderid = ll_orderid_update arg_s_gb.storageid = arg_s_mx.storageid arg_s_gb.mtrlid = arg_s_mx.mtrlid IF ll_balctype = 1 THEN arg_s_gb.cusid = ll_cusid ELSE arg_s_gb.cusid = 0 END IF IF sys_option_taskplancode = 1 THEN arg_s_gb.plancode = ls_taskrelcode ELSE arg_s_gb.plancode = '' END IF arg_s_gb.status = arg_s_mx.status arg_s_gb.woodcode = arg_s_mx.woodcode arg_s_gb.pcode = arg_s_mx.pcode arg_s_gb.Location = '' arg_s_gb.packqty = arg_s_mx.packqty arg_s_gb.qty = arg_s_mx.qty arg_s_gb.dscrp = '' arg_s_gb.reason = '' arg_s_gb.buytaskprintid = 0 arg_s_gb.mtrlcuscode = ls_ordercode arg_s_gb.relbillid = arg_billid arg_s_gb.relbillprintid = arg_printid //生成条码 ds_gb_mx.Reset() ld_packqty = arg_s_mx.packqty ld_qty = arg_s_mx.qty IF ld_packqty >= 1 THEN ll_cnt = Ceiling(Truncate(ld_qty/ld_packqty,10)) ELSE ll_cnt = Ceiling(ld_qty*ld_packqty) ld_packqty = Long(1/ld_packqty) 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 = '无法获取条码' GOTO ext END IF child_row = ds_gb_mx.InsertRow(0) ds_gb_mx.Object.barcode[child_row] = ls_barcode IF Mod(ld_qty,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] = ld_qty - 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].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 ll_getbarid_update = uo_get.uo_getbarid ls_getbarcode_update = uo_get.uo_getbarcode END IF //yyx2013-10-18 Decimal ld_mxqty_audit_notstop Decimal ld_Sonscale_saletaskmx_pf Decimal ld_Sonscale_fm_saletaskmx_pf SELECT sum(u_order_ml_packmx.qty) INTO :ld_mxqty_audit_notstop FROM u_order_ml_packmx WHERE u_order_ml_packmx.billid = :arg_billid AND u_order_ml_packmx.printid <> :arg_printid AND u_order_ml_packmx.flag = 1 AND u_order_ml_packmx.stopflag = 0 AND u_order_ml_packmx.kind = 0 AND u_order_ml_packmx.mtrlid = :arg_s_mx.mtrlid AND u_order_ml_packmx.status = :arg_s_mx.status AND u_order_ml_packmx.woodcode = :arg_s_mx.woodcode And u_order_ml_packmx.pcode = :arg_s_mx.pcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据明细其它行相同包件已审数量失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF IsNull(ld_mxqty_audit_notstop) THEN ld_mxqty_audit_notstop = 0 ld_Sonscale_saletaskmx_pf = (arg_s_mx.qty + ld_mxqty_audit_notstop) ld_Sonscale_fm_saletaskmx_pf = ld_orderqty // UPDATE u_SaleTaskMx_pf SET Sonscale = :ld_Sonscale_saletaskmx_pf, Sonscale_fm = :ld_Sonscale_fm_saletaskmx_pf WHERE scid = :scid AND taskid = :taskid AND printid = :taskprintid AND sonmtrlid = :arg_s_mx.mtrlid AND status = :arg_s_mx.status AND woodcode = :arg_s_mx.woodcode And pcode = :arg_s_mx.pcode; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO u_SaleTaskMx_pf (scid, taskid, printid, mtrlid, sonmtrlid, status, woodcode, pcode, Sonscale, Sonscale_fm) VALUES (:scid, :taskid, :taskprintid, :ll_mtrlid_order, :arg_s_mx.mtrlid, :arg_s_mx.status, :arg_s_mx.woodcode, :arg_s_mx.pcode, :ld_Sonscale_saletaskmx_pf, :ld_Sonscale_fm_saletaskmx_pf); 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 UPDATE u_order_ml_packmx SET orderid = :ll_orderid_update, ordercode = :ls_ordercode_update, flag = 1, auditdate = :server_dt, auditemp = :publ_operator, getbarid = :ll_getbarid_update, getbarcode = :ls_getbarcode_update, printid_tree = :ll_printid_tree WHERE billid = :arg_billid And printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新单据明细状态失败,'+sqlca.SQLErrText GOTO ext END IF ELSEIF arg_s_mx.Kind = 1 THEN //1-终止 IF uo_zl.stoporder(scid,arg_s_mx.orderid,0,'包件变更单自动终止',arg_msg,False) = 0 THEN rslt = 0 arg_msg = '终止相关生产指令单失败,'+arg_msg GOTO ext END IF //作废相关条码生成单(如果存在) IF arg_s_mx.getbarid > 0 THEN ds_gb_mx.Retrieve(arg_s_mx.getbarid) FOR ll_i = 1 To ds_gb_mx.RowCount() ls_barcode = ds_gb_mx.Object.barcode[ll_i] IF uo_get.uof_barcode_inuse(ls_barcode,0,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT END IF Delete From u_SaleTaskMx_pf Where scid = :scid And taskid = :taskid And printid = :taskprintid And sonmtrlid = :arg_s_mx.mtrlid And status = :arg_s_mx.status And woodcode = :arg_s_mx.woodcode And pcode = :arg_s_mx.pcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '删除销售订单包件明细失败,'+sqlca.SQLErrText Goto ext End If UPDATE u_order_ml_packmx SET flag = 1, auditdate = :server_dt, auditemp = :publ_operator WHERE billid = :arg_billid And printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新单据明细状态失败,'+sqlca.SQLErrText GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_zl Destroy uo_get Destroy ds_gb_mx RETURN rslt end function public function integer caudit_mx (long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime null_dt SetNull(null_dt) Int li_status,li_flag Long ll_i String ls_barcode Decimal ld_orderqty Long ll_mtrlid_order uo_order_ml uo_zl uo_zl = Create uo_order_ml uo_getbar uo_get uo_get = Create uo_getbar datastore ds_gb_mx ds_gb_mx = Create datastore ds_gb_mx.DataObject = 'dw_getbarmx_edit' ds_gb_mx.SetTransObject(sqlca) s_order_ml_packmx arg_s_mx s_getbar arg_s_gb,arg_s_gb_null IF p_getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF getinfo_mx(arg_billid,arg_printid,arg_s_mx,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag <> 1 THEN rslt = 0 arg_msg = '必须先审核单据才能审核明细,请检查' GOTO ext END IF IF arg_s_mx.flag = 0 THEN rslt = 0 arg_msg = '明细未审核,不能撤审' GOTO ext END IF IF arg_s_mx.stopflag = 1 THEN rslt = 0 arg_msg = '明细已终止,不能撤审' GOTO ext END IF IF arg_s_mx.Kind = 0 THEN SELECT orderqty INTO :ld_orderqty FROM u_order_ml WHERE scid = :scid And orderid = :orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单相关信息失败,'+sqlca.SQLErrText GOTO ext END IF //删除相关条码生成单(如果存在) IF arg_s_mx.getbarid > 0 THEN SELECT flag INTO :li_flag FROM u_getbar Where getbarid = :arg_s_mx.getbarid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关条码生成单状态失败,'+sqlca.SQLErrText GOTO ext END IF IF li_flag = 1 THEN IF uo_get.c_auditing(arg_s_mx.getbarid,True,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '撤审相关条码生成单,'+arg_msg GOTO ext END IF END IF IF uo_get.del(arg_s_mx.getbarid,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 = :scid And orderid = :arg_s_mx.orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关指令单状态失败,'+arg_msg GOTO ext END IF IF li_status = 1 THEN IF uo_zl.c_sec_audit(scid,arg_s_mx.orderid,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 = :scid And orderid = :arg_s_mx.orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关指令单状态失败,'+arg_msg GOTO ext END IF IF li_status = 4 THEN IF uo_zl.c_plan_audit(scid,arg_s_mx.orderid,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 = :scid And orderid = :arg_s_mx.orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关指令单状态失败,'+arg_msg GOTO ext END IF IF li_status = 7 THEN IF uo_zl.c_audit(scid,arg_s_mx.orderid,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '撤审相关生产指令单失败,'+arg_msg GOTO ext END IF END IF IF uo_zl.del(scid,arg_s_mx.orderid,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '删除相关生产指令单失败,'+arg_msg GOTO ext END IF //删除主生产计划运算表相应行 Long ll_porderid SELECT porderid INTO :ll_porderid FROM u_order_ml WHERE scid = :scid And orderid = :orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单相关信息失败,'+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_OrderRqMtrl_tree WHERE scid = :scid AND orderid = :ll_porderid And printid = :arg_s_mx.printid_tree; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除主生产计划运算表对应信息失败,'+sqlca.SQLErrText GOTO ext END IF //yyx2013-10-18 Decimal ld_mxqty_audit_notstop Decimal ld_Sonscale_saletaskmx_pf,ld_Sonscale_fm_saletaskmx_pf SELECT sum(u_order_ml_packmx.qty) INTO :ld_mxqty_audit_notstop FROM u_order_ml_packmx WHERE u_order_ml_packmx.billid = :arg_billid AND u_order_ml_packmx.printid <> :arg_printid AND u_order_ml_packmx.flag = 1 AND u_order_ml_packmx.stopflag = 0 AND u_order_ml_packmx.kind = 0 AND u_order_ml_packmx.mtrlid = :arg_s_mx.mtrlid AND u_order_ml_packmx.status = :arg_s_mx.status AND u_order_ml_packmx.woodcode = :arg_s_mx.woodcode And u_order_ml_packmx.pcode = :arg_s_mx.pcode; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据明细其它行相同包件已审数量失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF IsNull(ld_mxqty_audit_notstop) THEN ld_mxqty_audit_notstop = 0 ld_Sonscale_saletaskmx_pf = ld_mxqty_audit_notstop ld_Sonscale_fm_saletaskmx_pf = ld_orderqty // IF ld_mxqty_audit_notstop = 0 THEN DELETE FROM u_SaleTaskMx_pf WHERE scid = :scid AND taskid = :taskid AND printid = :taskprintid AND sonmtrlid = :arg_s_mx.mtrlid AND status = :arg_s_mx.status AND woodcode = :arg_s_mx.woodcode And pcode = :arg_s_mx.pcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除销售订单包件明细失败,'+sqlca.SQLErrText GOTO ext END IF ELSE UPDATE u_SaleTaskMx_pf SET Sonscale = :ld_Sonscale_saletaskmx_pf, Sonscale_fm = :ld_Sonscale_fm_saletaskmx_pf WHERE scid = :scid AND taskid = :taskid AND printid = :taskprintid AND sonmtrlid = :arg_s_mx.mtrlid AND status = :arg_s_mx.status AND woodcode = :arg_s_mx.woodcode And pcode = :arg_s_mx.pcode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新相关销售订单包件明细失败,'+sqlca.SQLErrText GOTO ext END IF END IF UPDATE u_order_ml_packmx SET orderid = 0, ordercode = '', flag = 0, auditdate = :null_dt, auditemp = '', getbarid = 0, getbarcode = '', printid_tree = 0 WHERE billid = :arg_billid And printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新单据明细状态失败,'+sqlca.SQLErrText GOTO ext END IF ELSEIF arg_s_mx.Kind = 1 THEN IF uo_zl.stoporder_cancel(scid,arg_s_mx.orderid,0,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '终止相关生产指令单失败,'+arg_msg GOTO ext END IF //作废相关条码生成单(如果存在) IF arg_s_mx.getbarid > 0 THEN ds_gb_mx.Retrieve(arg_s_mx.getbarid) FOR ll_i = 1 To ds_gb_mx.RowCount() ls_barcode = ds_gb_mx.Object.barcode[ll_i] IF uo_get.uof_barcode_inuse(ls_barcode,0,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT END IF Select mtrlid,orderqty Into :ll_mtrlid_order,:ld_orderqty From u_order_ml Where scid = :scid And orderid = :orderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询指令单相关信息失败,'+sqlca.SQLErrText Goto ext End If UPDATE u_SaleTaskMx_pf SET Sonscale = :arg_s_mx.qty WHERE scid = :scid AND taskid = :taskid AND printid = :taskprintid AND sonmtrlid = :arg_s_mx.mtrlid AND status = :arg_s_mx.status AND woodcode = :arg_s_mx.woodcode And pcode = :arg_s_mx.pcode; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO u_SaleTaskMx_pf (scid, taskid, printid, mtrlid, sonmtrlid, status, woodcode, pcode, Sonscale, Sonscale_fm) VALUES (:scid, :taskid, :taskprintid, :ll_mtrlid_order, :arg_s_mx.mtrlid, :arg_s_mx.status, :arg_s_mx.woodcode, :arg_s_mx.pcode, :arg_s_mx.qty, :ld_orderqty); 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 UPDATE u_order_ml_packmx SET flag = 0, auditdate = :null_dt, auditemp = '' WHERE billid = :arg_billid And printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新单据明细状态失败,'+sqlca.SQLErrText GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_zl Destroy uo_get Destroy ds_gb_mx RETURN rslt end function public function integer stopmx (long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime null_dt Long ll_i String ls_barcode SetNull(null_dt) uo_order_ml uo_zl uo_zl = Create uo_order_ml uo_getbar uo_get uo_get = Create uo_getbar datastore ds_gb_mx ds_gb_mx = Create datastore ds_gb_mx.DataObject = 'dw_getbarmx_edit' ds_gb_mx.SetTransObject(sqlca) s_order_ml_packmx arg_s_mx s_getbar arg_s_gb,arg_s_gb_null If p_getinfo(arg_billid,arg_msg) = 0 Then rslt = 0 Goto ext End If If getinfo_mx(arg_billid,arg_printid,arg_s_mx,arg_msg) = 0 Then rslt = 0 Goto ext End If If flag <> 1 Then rslt = 0 arg_msg = '必须先审核单据才能终止明细,请检查' Goto ext End If If arg_s_mx.flag = 0 Then rslt = 0 arg_msg = '明细未审核,不能终止' Goto ext End If If arg_s_mx.stopflag = 1 Then rslt = 0 arg_msg = '明细已终止,不能再执行终止操作' Goto ext End If if arg_s_mx.Kind = 1 Then rslt = 0 arg_msg = '明细为终止类型明细,不能执行终止操作' Goto ext End If If arg_s_mx.Kind = 0 Then If uo_zl.stoporder(scid,arg_s_mx.orderid,0,'包件变更单自动终止',arg_msg,False) = 0 Then rslt = 0 arg_msg = '终止相关生产指令单失败,'+arg_msg Goto ext End If //作废相关条码生成单(如果存在) If arg_s_mx.getbarid > 0 Then ds_gb_mx.Retrieve(arg_s_mx.getbarid) For ll_i = 1 To ds_gb_mx.RowCount() ls_barcode = ds_gb_mx.Object.barcode[ll_i] If uo_get.uof_barcode_inuse(ls_barcode,0,False,arg_msg) = 0 Then rslt = 0 Goto ext End If Next End If Delete From u_SaleTaskMx_pf Where scid = :scid And taskid = :taskid And printid = :taskprintid And sonmtrlid = :arg_s_mx.mtrlid And status = :arg_s_mx.status And woodcode = :arg_s_mx.woodcode And pcode = :arg_s_mx.pcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '删除销售订单包件明细失败,'+sqlca.SQLErrText Goto ext End If End If Update u_order_ml_packmx Set stopflag = 1, stopdate = getdate(), stopemp = :publ_operator Where billid = :arg_billid And printid = :arg_printid; 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 uo_zl Destroy uo_get Destroy ds_gb_mx Return rslt end function public function integer cstopmx (long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime null_dt Long ll_i String ls_barcode Long ll_mtrlid_order decimal ld_orderqty SetNull(null_dt) uo_order_ml uo_zl uo_zl = Create uo_order_ml uo_getbar uo_get uo_get = Create uo_getbar datastore ds_gb_mx ds_gb_mx = Create datastore ds_gb_mx.DataObject = 'dw_getbarmx_edit' ds_gb_mx.SetTransObject(sqlca) s_order_ml_packmx arg_s_mx s_getbar arg_s_gb,arg_s_gb_null If p_getinfo(arg_billid,arg_msg) = 0 Then rslt = 0 Goto ext End If If getinfo_mx(arg_billid,arg_printid,arg_s_mx,arg_msg) = 0 Then rslt = 0 Goto ext End If If flag <> 1 Then rslt = 0 arg_msg = '必须先审核单据才能审核明细,请检查' Goto ext End If If arg_s_mx.flag = 0 Then rslt = 0 arg_msg = '明细未审核,不能终止' Goto ext End If If arg_s_mx.stopflag = 0 Then rslt = 0 arg_msg = '明细未终止,不能执行取消终止操作' Goto ext End If If arg_s_mx.Kind = 0 Then If uo_zl.stoporder_cancel(scid,arg_s_mx.orderid,0,arg_msg,False) = 0 Then rslt = 0 arg_msg = '取消终止相关生产指令单失败,'+arg_msg Goto ext End If //取消作废相关条码生成单(如果存在) If arg_s_mx.getbarid > 0 Then ds_gb_mx.Retrieve(arg_s_mx.getbarid) For ll_i = 1 To ds_gb_mx.RowCount() ls_barcode = ds_gb_mx.Object.barcode[ll_i] If uo_get.uof_barcode_inuse(ls_barcode,1,False,arg_msg) = 0 Then rslt = 0 Goto ext End If Next End If Select mtrlid,orderqty Into :ll_mtrlid_order,:ld_orderqty From u_order_ml Where scid = :scid And orderid = :orderid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询指令单相关信息失败,'+sqlca.SQLErrText Goto ext End If Update u_SaleTaskMx_pf Set Sonscale = :arg_s_mx.qty Where scid = :scid And taskid = :taskid And printid = :taskprintid And sonmtrlid = :arg_s_mx.mtrlid And status = :arg_s_mx.status And woodcode = :arg_s_mx.woodcode And pcode = :arg_s_mx.pcode; If sqlca.SQLCode = 0 Then If sqlca.SQLNRows = 0 Then Insert Into u_SaleTaskMx_pf (scid, taskid, printid, mtrlid, sonmtrlid, status, woodcode, pcode, Sonscale, Sonscale_fm) Values (:scid, :taskid, :taskprintid, :ll_mtrlid_order, :arg_s_mx.mtrlid, :arg_s_mx.status, :arg_s_mx.woodcode, :arg_s_mx.pcode, :arg_s_mx.qty, :ld_orderqty); 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 End If Update u_order_ml_packmx Set stopflag = 0, stopdate = :null_dt, stopemp = '' Where billid = :arg_billid And printid = :arg_printid; 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 uo_zl Destroy uo_get Destroy ds_gb_mx Return rslt end function public function integer uof_packmx (s_order_ml_packmx arg_s_packmx, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_ifpack Long ll_cnt_mx,ll_max_printid s_order_ml_packmx arg_s_mx[] IF arg_s_packmx.billid = 0 THEN arg_msg = '错误的单据唯一码' rslt = 0 GOTO ext END IF IF getinfo(arg_s_packmx.billid,arg_s_mx,ll_cnt_mx,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag <> 1 THEN rslt = 0 arg_msg = '单据未审核,操作取消' GOTO ext END IF SELECT ifpack INTO :li_ifpack FROM u_mtrldef Where mtrlid = :arg_s_packmx.mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_ifpack <> 2 THEN arg_msg = '物料不是个性包件,操作取消' rslt = 0 GOTO ext END IF IF arg_s_packmx.printid = -1 THEN IF arg_s_packmx.qty <= 0 THEN arg_msg = '请录入正确的数量' rslt = 0 GOTO ext END IF IF arg_s_packmx.packqty <= 0 THEN arg_msg = '请录入正确的包装基数' rslt = 0 GOTO ext END IF IF arg_s_packmx.storageid = 0 THEN arg_msg = '请录入仓库' rslt = 0 GOTO ext END IF SELECT max(printid) INTO :ll_max_printid FROM u_order_ml_packmx Where billid = :arg_s_packmx.billid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据最新明细序号printid失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF INSERT INTO u_order_ml_packmx (billid, printid, mtrlid, status, woodcode, pcode, qty, packqty, orderdate, requiredate, storageid, kind) VALUES (:arg_s_packmx.billid, :ll_max_printid + 1, :arg_s_packmx.mtrlid, :arg_s_packmx.status, :arg_s_packmx.woodcode, :arg_s_packmx.pcode, :arg_s_packmx.qty, :arg_s_packmx.packqty, :arg_s_packmx.orderdate, :arg_s_packmx.requiredate, :arg_s_packmx.storageid, :arg_s_packmx.kind); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '增加包件操作失败,'+sqlca.SQLErrText GOTO ext END IF ELSE UPDATE u_order_ml_packmx SET mtrlid = :arg_s_packmx.mtrlid, status = :arg_s_packmx.status, woodcode = :arg_s_packmx.woodcode, pcode = :arg_s_packmx.pcode, qty = :arg_s_packmx.qty, packqty = :arg_s_packmx.packqty, storageid = :arg_s_packmx.storageid, orderdate = :arg_s_packmx.orderdate, requiredate = :arg_s_packmx.requiredate WHERE u_order_ml_packmx.billid = :arg_s_packmx.billid And u_order_ml_packmx.printid = :arg_s_packmx.printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '修改包件操作失败,'+sqlca.SQLErrText GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function on uo_order_ml_pack.create call super::create TriggerEvent( this, "constructor" ) end on on uo_order_ml_pack.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String arg_msg String str_optionvalue str_optionvalue = '' f_get_sys_option_value('142',str_optionvalue,arg_msg) uo_option_inout_type = Long(str_optionvalue) end event