$PBExportHeader$uo_sptcheck.sru forward global type uo_sptcheck from nonvisualobject end type type s_saleplanmx from structure within uo_sptcheck end type end forward type s_saleplanmx from structure long mtrlid string mtrlcode long printid decimal { 10 } planqty string mxdscrp end type global type uo_sptcheck from nonvisualobject end type global uo_sptcheck uo_sptcheck type variables Long uo_billid Int uo_option_if_oa_sptcheck Int uo_option_sptcheck_secaudit Int uo_option_if_oa_sptcheck_wfjg Int uo_option_sptcheck_wfjg_secaudit Int uo_option_sptcheck_inware Int uo_option_sptcheck_wfjg_inware int uo_option_wfjg_price_cmp Long audit_buildtype end variables forward prototypes public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer updatebegin (long arg_billid, ref string arg_msg) public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg) public function integer p_getinfo (long arg_billid, ref s_sptcheck arg_s_check, ref string arg_msg) public function integer save (s_sptcheck arg_s_sptcheck, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_billid, ref s_sptcheck arg_ref_s_ch, ref string arg_msg) public function integer uof_add_inqty (long arg_billid, long arg_printid, decimal arg_inqty, ref string arg_msg, boolean arg_ifcommit) public function integer first_audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer first_caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_billemp (long arg_billid, string arg_billemp, ref string arg_msg) public function integer uof_create_inware_buy (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_del_inware_buy (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_create_inware_wfjg (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_del_inware_wfjg (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_create_inware_cp (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_del_inware_cp (long arg_billid, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 s_sptcheck arg_s_check IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF p_getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_check.flag = 1 THEN rslt = 0 ARG_MSG = '单据已经审核,不可以删除' GOTO ext END IF DELETE FROM u_sptcheck Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_sptcheck_mx Where billid = :arg_billid ; 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 s_sptcheck arg_s_check IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF p_getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_check.flag <> 0 THEN rslt = 0 ARG_MSG = '单据已经审核,不可以修改,要修改请先撤销审核' GOTO ext END IF ext: RETURN rslt end function public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt,i DateTime null_dt SetNull(null_dt) IF uo_option_sptcheck_inware = -1000 THEN rslt = 0 arg_msg = '选项:[271]采购质检单审核自动生成采购收货单,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_sptcheck_wfjg_inware = -1000 THEN rslt = 0 arg_msg = '选项:[272]外协质检单审核自动生成外协收货单,读取初始默认值失败,操作取消!' GOTO ext END IF s_sptcheck arg_s_check uo_checkback uo_checkb uo_checkb = Create uo_checkback uo_buytask uo_task uo_task = Create uo_buytask uo_task.commit_transaction = sqlca uo_order_wfjg uo_wfjg uo_wfjg = Create uo_order_wfjg uo_wfjg.commit_transaction = sqlca uo_order_ml uo_zl uo_zl = Create uo_order_ml //uo_zl.commit_transaction = sqlca IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF getinfo(arg_billid,arg_s_check,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_check.flag <> 1 THEN rslt = 0 arg_msg = '单据未审核,不可以撤审' GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_sptcheck_mx WHERE billid = :arg_billid And inqty > 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 FOR i = 1 To UpperBound(arg_s_check.arg_s_mx) - 1 IF arg_s_check.arg_s_mx[i].reltaskid > 0 THEN IF arg_s_check.billtype = 0 THEN IF uo_task.addmx_sptcheckqty(arg_s_check.scid,arg_s_check.arg_s_mx[i].reltaskid,arg_s_check.arg_s_mx[i].reltaskprintid, 0 - arg_s_check.arg_s_mx[i].goodqty * arg_s_check.arg_s_mx[i].rate,arg_msg ,False) = 0 THEN rslt = 0 arg_msg = '第'+String(i)+'行,'+arg_msg GOTO ext END IF ELSEIF arg_s_check.billtype = 1 THEN IF uo_wfjg.addmx_sptcheckqty(arg_s_check.scid,arg_s_check.arg_s_mx[i].reltaskid,arg_s_check.arg_s_mx[i].reltaskprintid, 0 - arg_s_check.arg_s_mx[i].goodqty * arg_s_check.arg_s_mx[i].rate,arg_msg ,False) = 0 THEN rslt = 0 arg_msg = '第'+String(i)+'行,'+arg_msg GOTO ext END IF ELSEIF arg_s_check.billtype = 2 THEN IF uo_zl.addmx_sptcheckqty(arg_s_check.scid,arg_s_check.arg_s_mx[i].reltaskid, 0 - arg_s_check.arg_s_mx[i].goodqty * arg_s_check.arg_s_mx[i].rate,arg_msg ,False) = 0 THEN rslt = 0 arg_msg = '第'+String(i)+'行,'+arg_msg GOTO ext END IF END IF END IF NEXT IF arg_s_check.billtype = 0 THEN IF uo_option_sptcheck_inware = 0 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_inwaremx,u_inware WHERE u_inwaremx.inwareid = u_inware.inwareid AND u_inwaremx.scid = u_inware.scid AND u_inwaremx.relbillid = :arg_billid And u_inware.billtype = 1 ; 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 IF uo_option_sptcheck_wfjg_inware = 0 THEN cnt = 0 SELECT count(*) INTO :cnt FROM ow_wfjgmx_in_aft Where ow_wfjgmx_in_aft.relbillid = :arg_billid; 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 END IF UPDATE u_sptcheck SET flag = 4, auditemp = '', auditdate = :null_dt WHERE billid = :arg_billid And flag = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致单据撤消审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //删除验退单 IF arg_s_check.relcheckbackid > 0 THEN IF uo_checkb.del( arg_s_check.relcheckbackid,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF IF uo_option_sptcheck_inware = 1 And arg_s_check.billtype = 0 THEN IF uof_del_inware_buy(arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ELSEIF uo_option_sptcheck_wfjg_inware = 1 And arg_s_check.billtype = 1 THEN IF uof_del_inware_wfjg(arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ELSEIF sys_option_sptcheck_cp_inware = 1 And arg_s_check.billtype = 2 THEN IF uof_del_inware_cp(arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_checkb Destroy uo_task Destroy uo_wfjg Destroy uo_zl RETURN rslt end function public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long i,j,ll_relcheckbackid,ll_backcnt,count IF uo_option_if_oa_sptcheck = -1000 THEN rslt = 0 arg_msg = '选项:[265]供应商采购质检单使用OA审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_sptcheck_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[267]供应商采购质检单使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_if_oa_sptcheck_wfjg = -1000 THEN rslt = 0 arg_msg = '选项:[266]供应商外协质检单使用OA审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_sptcheck_wfjg_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[268]供应商外协质检单使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_sptcheck_inware = -1000 THEN rslt = 0 arg_msg = '选项:[271]采购质检单审核自动生成采购收货单,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_sptcheck_wfjg_inware = -1000 THEN rslt = 0 arg_msg = '选项:[272]外协质检单审核自动生成外协收货单,读取初始默认值失败,操作取消!' GOTO ext END IF s_sptcheck arg_s_check s_CheckBack arg_s_CheckBack uo_checkback uo_checkb uo_checkb = Create uo_checkback uo_buytask uo_task uo_task = Create uo_buytask uo_task.commit_transaction = sqlca uo_order_wfjg uo_wfjg uo_wfjg = Create uo_order_wfjg uo_wfjg.commit_transaction = sqlca uo_order_ml uo_zl uo_zl = Create uo_order_ml IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF getinfo(arg_billid,arg_s_check,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_check.billtype = 0 THEN IF uo_option_if_oa_sptcheck = 1 And uo_option_sptcheck_secaudit = 1 And audit_buildtype = 0 THEN IF f_check_if_oaflow(arg_s_check.scid,arg_billid,1684,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSEIF arg_s_check.billtype = 1 THEN IF uo_option_if_oa_sptcheck_wfjg = 1 And uo_option_sptcheck_wfjg_secaudit = 1 And audit_buildtype = 0 THEN IF f_check_if_oaflow(arg_s_check.scid,arg_billid,2234,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF IF arg_s_check.flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以再审' GOTO ext END IF //质检单 初审可以不填质检员,初审后终审前填质检员(2张质检单)lhd 20120419 IF arg_s_check.billemp = '' THEN rslt = 0 arg_msg = "请输入质检员" GOTO ext END IF FOR i = 1 To UpperBound(arg_s_check.arg_s_mx) - 1 IF arg_s_check.arg_s_mx[i].reltaskid > 0 THEN IF arg_s_check.billtype = 0 THEN IF uo_task.addmx_sptcheckqty(arg_s_check.scid,arg_s_check.arg_s_mx[i].reltaskid,arg_s_check.arg_s_mx[i].reltaskprintid, arg_s_check.arg_s_mx[i].goodqty * arg_s_check.arg_s_mx[i].rate,arg_msg ,False) = 0 THEN rslt = 0 arg_msg = '第'+String(i)+'行,'+arg_msg GOTO ext END IF ELSEIF arg_s_check.billtype = 1 THEN IF uo_wfjg.addmx_sptcheckqty(arg_s_check.scid,arg_s_check.arg_s_mx[i].reltaskid,arg_s_check.arg_s_mx[i].reltaskprintid, arg_s_check.arg_s_mx[i].goodqty * arg_s_check.arg_s_mx[i].rate,arg_msg ,False) = 0 THEN rslt = 0 arg_msg = '第'+String(i)+'行,'+arg_msg GOTO ext END IF ELSEIF arg_s_check.billtype = 2 THEN IF uo_zl.addmx_sptcheckqty(arg_s_check.scid,arg_s_check.arg_s_mx[i].reltaskid, arg_s_check.arg_s_mx[i].goodqty * arg_s_check.arg_s_mx[i].rate,arg_msg ,False) = 0 THEN rslt = 0 arg_msg = '第'+String(i)+'行,'+arg_msg GOTO ext END IF END IF END IF NEXT //更新审核标记 UPDATE u_sptcheck SET auditemp = :arg_opemp, auditdate = getdate(), flag = 1 WHERE billid = :arg_billid And flag = 4; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 To UpperBound(arg_s_check.arg_s_mx) - 1 IF arg_s_check.arg_s_mx[i].backqty > 0 THEN ll_backcnt++ NEXT IF ll_backcnt = 0 THEN ll_relcheckbackid = 0 ELSE arg_s_CheckBack.scid = arg_s_check.scid arg_s_CheckBack.billid = 0 arg_s_CheckBack.billemp = publ_operator arg_s_CheckBack.relcode = arg_s_check.billcode arg_s_CheckBack.dscrp = "质检单审核自动生成" arg_s_CheckBack.sptid = arg_s_check.sptid arg_s_CheckBack.billdate = arg_s_check.billdate arg_s_CheckBack.billtype = arg_s_check.billtype arg_s_CheckBack.auto = 1 arg_s_CheckBack.relid = arg_s_check.billid FOR i = 1 To UpperBound(arg_s_check.arg_s_mx) - 1 IF arg_s_check.arg_s_mx[i].backqty > 0 THEN count++ arg_s_CheckBack.arg_s_mx[count].printid = count arg_s_CheckBack.arg_s_mx[count].mtrlid = arg_s_check.arg_s_mx[i].mtrlid arg_s_CheckBack.arg_s_mx[count].checkqty = arg_s_check.arg_s_mx[i].checkqty arg_s_CheckBack.arg_s_mx[count].lackqty = arg_s_check.arg_s_mx[i].backqty arg_s_CheckBack.arg_s_mx[count].status = arg_s_check.arg_s_mx[i].status arg_s_CheckBack.arg_s_mx[count].woodcode = arg_s_check.arg_s_mx[i].woodcode arg_s_CheckBack.arg_s_mx[count].pcode = arg_s_check.arg_s_mx[i].pcode arg_s_CheckBack.arg_s_mx[count].relbillid = arg_s_check.arg_s_mx[i].reltaskid arg_s_CheckBack.arg_s_mx[count].ifrel = arg_s_check.arg_s_mx[i].iftask arg_s_CheckBack.arg_s_mx[count].relprintid = arg_s_check.arg_s_mx[i].reltaskprintid arg_s_CheckBack.arg_s_mx[count].unit = arg_s_check.arg_s_mx[i].unit arg_s_CheckBack.arg_s_mx[count].rate = arg_s_check.arg_s_mx[i].rate END IF NEXT IF uo_checkb.Save(arg_s_CheckBack,publ_operator,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ll_relcheckbackid = uo_checkb.uo_billid IF ll_relcheckbackid <= 0 THEN arg_msg = '错误的验退单id,请检查' rslt = 0 GOTO ext END IF END IF IF ll_relcheckbackid > 0 THEN UPDATE u_sptcheck SET relcheckbackid = :ll_relcheckbackid Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新相关验退单id失败,"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF IF uo_option_sptcheck_inware = 1 And arg_s_check.billtype = 0 THEN IF uof_create_inware_buy(arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ELSEIF uo_option_sptcheck_wfjg_inware = 1 And arg_s_check.billtype = 1 THEN IF uof_create_inware_wfjg(arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ELSEIF sys_option_sptcheck_cp_inware = 1 And arg_s_check.billtype = 2 THEN IF uof_create_inware_cp(arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_checkb Destroy uo_task Destroy uo_wfjg Destroy uo_zl RETURN rslt end function public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg);Int rslt = 1 s_sptcheck arg_s_check IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF arg_newdescppart = '' THEN rslt = 0 arg_msg = "要添加内容为空,操作取消" GOTO ext END IF IF p_getinfo(arg_billid,arg_s_check,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_check.flag = 0 THEN rslt = 0 arg_msg = '单据未审核,不可以增加备注' GOTO ext END IF UPDATE u_sptcheck SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_sptcheck.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 = 1 THEN COMMIT; ELSE ROLLBACK; END IF Return (rslt) end function public function integer p_getinfo (long arg_billid, ref s_sptcheck arg_s_check, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF SELECT u_sptcheck.billcode, u_sptcheck.billemp, u_sptcheck.relcode, u_sptcheck.dscrp, u_sptcheck.flag, u_sptcheck.sptid, u_sptcheck.billdate, u_sptcheck.relcheckbackid, u_sptcheck.billtype, u_sptcheck.scid INTO :arg_s_check.billcode, :arg_s_check.billemp, :arg_s_check.relcode, :arg_s_check.dscrp, :arg_s_check.flag, :arg_s_check.sptid, :arg_s_check.billdate, :arg_s_check.relcheckbackid, :arg_s_check.billtype, :arg_s_check.scid FROM u_sptcheck Where u_sptcheck.billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询质检单内容失败(错误单据唯一码)' GOTO ext END IF ext: RETURN rslt end function public function integer save (s_sptcheck arg_s_sptcheck, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1 Long cnt = 0 DateTime server_dt Long ll_billid,it_mxbt,ll_i,i String ls_unit String ls_sccode,ls_billcode,ls_reltaskcode Int li_mustloca,li_iflocation integer li_ifcheck IF uo_option_sptcheck_inware = -1000 THEN rslt = 0 arg_msg = '选项:[271]采购质检单审核自动生成采购收货单,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_sptcheck_wfjg_inware = -1000 THEN rslt = 0 arg_msg = '选项:[272]外协质检单审核自动生成外协收货单,读取初始默认值失败,操作取消!' GOTO ext END IF IF IsNull(arg_s_sptcheck.scid) THEN arg_s_sptcheck.scid = 0 IF IsNull(arg_s_sptcheck.billid) THEN arg_s_sptcheck.billid = 0 IF IsNull(arg_s_sptcheck.billemp) THEN arg_s_sptcheck.billemp = '' IF IsNull(arg_s_sptcheck.relcode) THEN arg_s_sptcheck.relcode = '' IF IsNull(arg_s_sptcheck.dscrp) THEN arg_s_sptcheck.dscrp = '' IF IsNull(arg_s_sptcheck.sptid) THEN arg_s_sptcheck.sptid = 0 IF IsNull(arg_s_sptcheck.billtype) THEN arg_s_sptcheck.billtype = 0 cnt = 0 SELECT count(*) INTO :cnt FROM u_spt Where sptid = :arg_s_sptcheck.sptid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,供应商资料" GOTO ext END IF IF cnt = 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 it_mxbt = UpperBound(arg_s_sptcheck.arg_s_mx) IF it_mxbt <= 0 THEN rslt = 0 arg_msg = "没有正确明细内容" GOTO ext END IF FOR ll_i = 1 To it_mxbt ls_unit = '' SELECT unit, ifcheck INTO :ls_unit, :li_ifcheck FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_s_sptcheck.arg_s_mx[ll_i].mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',物料资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF if li_ifcheck = 1 then arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',物料已设置不质检进仓,不能建立质检单' rslt = 0 GOTO ext end if IF ls_unit = arg_s_sptcheck.arg_s_mx[ll_i].unit And arg_s_sptcheck.arg_s_mx[ll_i].rate <> 1 THEN arg_msg = '验退单,行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',物料资料采购单位与库存单位相同,但转换率不为1,请检查!' rslt = 0 GOTO ext END IF IF ls_unit <> arg_s_sptcheck.arg_s_mx[ll_i].unit And arg_s_sptcheck.arg_s_mx[ll_i].rate = 1 THEN arg_msg = '验退单,行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',物料资料采购单位与库存单位不相同,但转换率为1,请检查!' rslt = 0 GOTO ext END IF IF arg_s_sptcheck.arg_s_mx[ll_i].goodqty <> 0 Or arg_s_sptcheck.arg_s_mx[ll_i].backqty <> 0 Or arg_s_sptcheck.arg_s_mx[ll_i].notqty <> 0 THEN IF arg_s_sptcheck.arg_s_mx[ll_i].checkqty <> arg_s_sptcheck.arg_s_mx[ll_i].goodqty + arg_s_sptcheck.arg_s_mx[ll_i].backqty + arg_s_sptcheck.arg_s_mx[ll_i].notqty THEN arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',入库数与退回数、不足数的和必须等于来单质检数,请检查!' rslt = 0 GOTO ext END IF END IF IF arg_s_sptcheck.arg_s_mx[ll_i].goodqty <> 0 And arg_s_sptcheck.arg_s_mx[ll_i].storageid = 0 And (arg_s_sptcheck.billtype = 0 And uo_option_sptcheck_inware = 1 Or arg_s_sptcheck.billtype = 1 And uo_option_sptcheck_wfjg_inware = 1) THEN arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',请选择仓库!' rslt = 0 GOTO ext END IF IF arg_s_sptcheck.arg_s_mx[ll_i].iftask = 0 THEN ls_reltaskcode = '' ELSE IF arg_s_sptcheck.arg_s_mx[ll_i].reltaskid = 0 THEN arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',请选择订单!' rslt = 0 GOTO ext END IF IF arg_s_sptcheck.billtype = 0 THEN SELECT taskcode INTO :ls_reltaskcode FROM u_buytask WHERE scid = :arg_s_sptcheck.scid AND taskid = :arg_s_sptcheck.arg_s_mx[ll_i].reltaskid; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',查询订单失败,请检查!' rslt = 0 GOTO ext END IF ELSEIF arg_s_sptcheck.billtype = 1 THEN SELECT taskcode INTO :ls_reltaskcode FROM u_order_wfjg WHERE scid = :arg_s_sptcheck.scid AND wfjgid = :arg_s_sptcheck.arg_s_mx[ll_i].reltaskid; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',查询订单失败,请检查!' rslt = 0 GOTO ext END IF ELSEIF arg_s_sptcheck.billtype = 2 THEN SELECT ordercode INTO :ls_reltaskcode FROM u_order_ml WHERE scid = :arg_s_sptcheck.scid AND orderid = :arg_s_sptcheck.arg_s_mx[ll_i].reltaskid; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',查询指令单失败,请检查!' rslt = 0 GOTO ext END IF END IF END IF arg_s_sptcheck.arg_s_mx[ll_i].reltaskcode = ls_reltaskcode //检查仓库仓位 IF uo_option_sptcheck_inware = 1 THEN IF arg_s_sptcheck.arg_s_mx[ll_i].storageid = 0 THEN arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',未设置仓库,请检查!' rslt = 0 GOTO ext END IF SELECT mustloca,iflocation Into :li_mustloca,:li_iflocation From u_storage Where storageid = :arg_s_sptcheck.arg_s_mx[ll_i].storageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',查询仓库仓位属性,请检查!' rslt = 0 GOTO ext END IF IF li_iflocation = 0 THEN arg_s_sptcheck.arg_s_mx[ll_i].Location = '' ELSE IF li_mustloca = 1 And arg_s_sptcheck.arg_s_mx[ll_i].Location = '' THEN arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',仓库仓位必须填写,请检查!' rslt = 0 GOTO ext END IF END IF END IF NEXT IF arg_s_sptcheck.billid = 0 THEN ll_billid = f_sys_scidentity(0,"u_sptcheck","billid",arg_msg,True,id_sqlca) IF ll_billid <= 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(arg_s_sptcheck.scid,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_sptcheck.billtype = 0 THEN ls_billcode = getid(arg_s_sptcheck.scid,ls_sccode + 'GJ',Date(server_dt),False,sqlca) ELSE ls_billcode = getid(arg_s_sptcheck.scid,ls_sccode + 'AC',Date(server_dt),False,sqlca) END IF IF ls_billcode = "err" THEN rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_sptcheck ( scid, billid, billcode, sptid, indate, billdate, billemp, relcode, dscrp, billtype, opdate, opemp) VALUES ( :arg_s_sptcheck.scid, :ll_billid, :ls_billcode, :arg_s_sptcheck.sptid, :arg_s_sptcheck.indate, :arg_s_sptcheck.billdate, :arg_s_sptcheck.billemp, :arg_s_sptcheck.relcode, :arg_s_sptcheck.dscrp, :arg_s_sptcheck.billtype, getdate(), :arg_opemp) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF uo_billid = ll_billid ELSE UPDATE u_sptcheck SET billemp = :arg_s_sptcheck.billemp, indate = :arg_s_sptcheck.indate, billdate = :arg_s_sptcheck.billdate, sptid = :arg_s_sptcheck.sptid, moddate = getdate(), modemp = :arg_opemp, relcode = :arg_s_sptcheck.relcode, dscrp = :arg_s_sptcheck.dscrp, billtype = :arg_s_sptcheck.billtype WHERE billid = :arg_s_sptcheck.billid And flag = 0; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_sptcheck_mx Where billid = :arg_s_sptcheck.billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF // FOR i = 1 To it_mxbt // INSERT INTO u_sptcheck_mx // ( billid, // printid, // mtrlid, // checktype, // checkqty, // badqty, // goodqty, // reason, // mxdscrp, // iftask, // reltaskid, // reltaskprintid, // reltaskcode, // backqty, // notqty, // status, // woodcode, // pcode, // unit, // rate, // badinqty, // storageid, // location) // VALUES (:arg_s_sptcheck.billid, // :arg_s_sptcheck.arg_s_mx[i].printid, // :arg_s_sptcheck.arg_s_mx[i].mtrlid, // :arg_s_sptcheck.arg_s_mx[i].checktype, // :arg_s_sptcheck.arg_s_mx[i].checkqty, // :arg_s_sptcheck.arg_s_mx[i].badqty, // :arg_s_sptcheck.arg_s_mx[i].goodqty, // :arg_s_sptcheck.arg_s_mx[i].reason, // :arg_s_sptcheck.arg_s_mx[i].mxdscrp, // :arg_s_sptcheck.arg_s_mx[i].iftask, // :arg_s_sptcheck.arg_s_mx[i].reltaskid, // :arg_s_sptcheck.arg_s_mx[i].reltaskprintid, // :arg_s_sptcheck.arg_s_mx[i].reltaskcode, // :arg_s_sptcheck.arg_s_mx[i].backqty, // :arg_s_sptcheck.arg_s_mx[i].notqty, // :arg_s_sptcheck.arg_s_mx[i].status, // :arg_s_sptcheck.arg_s_mx[i].woodcode, // :arg_s_sptcheck.arg_s_mx[i].pcode, // :arg_s_sptcheck.arg_s_mx[i].unit, // :arg_s_sptcheck.arg_s_mx[i].rate, // :arg_s_sptcheck.arg_s_mx[i].badinqty, // :arg_s_sptcheck.arg_s_mx[i].storageid, // :arg_s_sptcheck.arg_s_mx[i].Location); // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText // GOTO ext // END IF // NEXT uo_billid = arg_s_sptcheck.billid END IF FOR i = 1 To it_mxbt INSERT INTO u_sptcheck_mx ( billid, printid, mtrlid, checktype, checkqty, badqty, goodqty, reason, mxdscrp, iftask, reltaskid, reltaskprintid, reltaskcode, backqty, notqty, status, woodcode, pcode, unit, rate, badinqty, storageid, location) VALUES (:uo_billid, :arg_s_sptcheck.arg_s_mx[i].printid, :arg_s_sptcheck.arg_s_mx[i].mtrlid, :arg_s_sptcheck.arg_s_mx[i].checktype, :arg_s_sptcheck.arg_s_mx[i].checkqty, :arg_s_sptcheck.arg_s_mx[i].badqty, :arg_s_sptcheck.arg_s_mx[i].goodqty, :arg_s_sptcheck.arg_s_mx[i].reason, :arg_s_sptcheck.arg_s_mx[i].mxdscrp, :arg_s_sptcheck.arg_s_mx[i].iftask, :arg_s_sptcheck.arg_s_mx[i].reltaskid, :arg_s_sptcheck.arg_s_mx[i].reltaskprintid, :arg_s_sptcheck.arg_s_mx[i].reltaskcode, :arg_s_sptcheck.arg_s_mx[i].backqty, :arg_s_sptcheck.arg_s_mx[i].notqty, :arg_s_sptcheck.arg_s_mx[i].status, :arg_s_sptcheck.arg_s_mx[i].woodcode, :arg_s_sptcheck.arg_s_mx[i].pcode, :arg_s_sptcheck.arg_s_mx[i].unit, :arg_s_sptcheck.arg_s_mx[i].rate, :arg_s_sptcheck.arg_s_mx[i].badinqty, :arg_s_sptcheck.arg_s_mx[i].storageid, :arg_s_sptcheck.arg_s_mx[i].Location); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+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 getinfo (long arg_billid, ref s_sptcheck arg_ref_s_ch, 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_ref_s_ch,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //用游标读取明细 DECLARE cur_mx CURSOR FOR SELECT u_sptcheck_mx.printid,u_sptcheck_mx.mtrlid,u_sptcheck_mx.checktype, u_sptcheck_mx.checkqty,u_sptcheck_mx.badqty,u_sptcheck_mx.goodqty, u_sptcheck_mx.reason,u_sptcheck_mx.mxdscrp,u_sptcheck_mx.iftask, u_sptcheck_mx.reltaskid,u_sptcheck_mx.reltaskprintid,u_sptcheck_mx.reltaskcode, u_sptcheck_mx.backqty,u_sptcheck_mx.notqty,u_sptcheck_mx.status, u_sptcheck_mx.woodcode,u_sptcheck_mx.pcode,u_sptcheck_mx.unit, u_sptcheck_mx.rate,u_sptcheck_mx.badinqty,u_sptcheck_mx.storageid, u_mtrldef.mtrlcode,u_sptcheck_mx.location FROM u_sptcheck_mx LEFT OUTER JOIN u_mtrldef ON u_sptcheck_mx.mtrlid = u_mtrldef.mtrlid WHERE u_sptcheck_mx.billid = :arg_billid Order By u_sptcheck_mx.printid; OPEN cur_mx; FETCH cur_mx INTO :arg_ref_s_ch.arg_s_mx[i].printid, :arg_ref_s_ch.arg_s_mx[i].mtrlid, :arg_ref_s_ch.arg_s_mx[i].checktype, :arg_ref_s_ch.arg_s_mx[i].checkqty, :arg_ref_s_ch.arg_s_mx[i].badqty, :arg_ref_s_ch.arg_s_mx[i].goodqty, :arg_ref_s_ch.arg_s_mx[i].reason, :arg_ref_s_ch.arg_s_mx[i].mxdscrp, :arg_ref_s_ch.arg_s_mx[i].iftask, :arg_ref_s_ch.arg_s_mx[i].reltaskid, :arg_ref_s_ch.arg_s_mx[i].reltaskprintid, :arg_ref_s_ch.arg_s_mx[i].reltaskcode, :arg_ref_s_ch.arg_s_mx[i].backqty, :arg_ref_s_ch.arg_s_mx[i].notqty, :arg_ref_s_ch.arg_s_mx[i].status, :arg_ref_s_ch.arg_s_mx[i].woodcode, :arg_ref_s_ch.arg_s_mx[i].pcode, :arg_ref_s_ch.arg_s_mx[i].unit, :arg_ref_s_ch.arg_s_mx[i].rate, :arg_ref_s_ch.arg_s_mx[i].badinqty, :arg_ref_s_ch.arg_s_mx[i].storageid, :arg_ref_s_ch.arg_s_mx[i].mtrlcode, :arg_ref_s_ch.arg_s_mx[i].location; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx INTO :arg_ref_s_ch.arg_s_mx[i].printid, :arg_ref_s_ch.arg_s_mx[i].mtrlid, :arg_ref_s_ch.arg_s_mx[i].checktype, :arg_ref_s_ch.arg_s_mx[i].checkqty, :arg_ref_s_ch.arg_s_mx[i].badqty, :arg_ref_s_ch.arg_s_mx[i].goodqty, :arg_ref_s_ch.arg_s_mx[i].reason, :arg_ref_s_ch.arg_s_mx[i].mxdscrp, :arg_ref_s_ch.arg_s_mx[i].iftask, :arg_ref_s_ch.arg_s_mx[i].reltaskid, :arg_ref_s_ch.arg_s_mx[i].reltaskprintid, :arg_ref_s_ch.arg_s_mx[i].reltaskcode, :arg_ref_s_ch.arg_s_mx[i].backqty, :arg_ref_s_ch.arg_s_mx[i].notqty, :arg_ref_s_ch.arg_s_mx[i].status, :arg_ref_s_ch.arg_s_mx[i].woodcode, :arg_ref_s_ch.arg_s_mx[i].pcode, :arg_ref_s_ch.arg_s_mx[i].unit, :arg_ref_s_ch.arg_s_mx[i].rate, :arg_ref_s_ch.arg_s_mx[i].badinqty, :arg_ref_s_ch.arg_s_mx[i].storageid, :arg_ref_s_ch.arg_s_mx[i].mtrlcode, :arg_ref_s_ch.arg_s_mx[i].location; LOOP CLOSE cur_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_sptcheck_mx 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 ext: RETURN rslt end function public function integer uof_add_inqty (long arg_billid, long arg_printid, decimal arg_inqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 s_sptcheck arg_s_check IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误送检单唯一码' GOTO ext END IF IF arg_inqty = 0 THEN rslt = 1 GOTO ext END IF IF p_getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_check.flag <> 1 THEN rslt = 0 ARG_MSG = '送检单只有在审核状态下才能操作' GOTO ext END IF Decimal ld_goodqty,ld_inqty SELECT u_sptcheck_mx.goodqty, u_sptcheck_mx.inqty INTO :ld_goodqty, :ld_inqty FROM u_sptcheck_mx WHERE ( u_sptcheck_mx.billid = :arg_billid ) AND ( u_sptcheck_mx.printid = :arg_printid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "送检单,查询行"+string(arg_printid)+",资料失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF ld_goodqty < ld_inqty + arg_inqty THEN rslt = 0 arg_msg = '送检单,行:'+string(arg_printid)+",物料未完成数量只有,"+String(ld_goodqty - ld_inqty,'#,##0.0###')+",不能入仓"+String(arg_inqty,'#,##0.0#') GOTO ext END IF UPDATE u_sptcheck_mx SET inqty = inqty + :arg_inqty WHERE ( u_sptcheck_mx.billid = :arg_billid ) AND ( u_sptcheck_mx.printid = :arg_printid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '送检单,行'+string(arg_printid)+",更新入仓数操作失败"+"~n 原因,"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer first_audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long i,ll_relcheckbackid,ll_backcnt,count IF uo_option_if_oa_sptcheck = -1000 THEN rslt = 0 arg_msg = '选项:[265]供应商采购质检单使用OA审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_sptcheck_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[267]供应商采购质检单使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_if_oa_sptcheck_wfjg = -1000 THEN rslt = 0 arg_msg = '选项:[266]供应商外协质检单使用OA审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_sptcheck_wfjg_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[268]供应商外协质检单使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF s_sptcheck arg_s_check IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_check.flag <> 0 THEN rslt = 0 ARG_MSG = '单据已经审核,不可以再审' GOTO ext END IF //质检单 初审可以不填质检员,初审后终审前填质检员(2张质检单)lhd 20120419 //IF arg_s_check.billemp = '' THEN // rslt = 0 // ARG_MSG = "请输入质检员" // GOTO ext //END IF //更新审核标记 UPDATE u_sptcheck SET first_auditemp = :arg_opemp, first_auditdate = getdate(), flag = 4 WHERE billid = :arg_billid And flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF arg_s_check.billtype = 0 THEN IF sys_option_if_oa_sptcheck = 1 And sys_option_sptcheck_secaudit = 1 THEN IF f_oa(sqlca,False,ARG_MSG,1684,arg_s_check.scid,arg_billid,arg_s_check.billcode,arg_s_check.relcode,arg_s_check.dscrp) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSEIF arg_s_check.billtype = 1 THEN IF sys_option_if_oa_sptcheck_wfjg = 1 And sys_option_sptcheck_wfjg_secaudit = 1 THEN IF f_oa(sqlca,False,ARG_MSG,2234,arg_s_check.scid,arg_billid,arg_s_check.billcode,arg_s_check.relcode,arg_s_check.dscrp) = 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 first_caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long i,ll_relcheckbackid,ll_backcnt,count DateTime null_dt SetNull(null_dt) IF uo_option_if_oa_sptcheck = -1000 THEN rslt = 0 arg_msg = '选项:[265]供应商采购质检单使用OA审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_sptcheck_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[267]供应商采购质检单使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_if_oa_sptcheck_wfjg = -1000 THEN rslt = 0 arg_msg = '选项:[266]供应商外协质检单使用OA审批流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_sptcheck_wfjg_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[268]供应商外协质检单使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF s_sptcheck arg_s_check IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_check.flag <> 4 THEN rslt = 0 ARG_MSG = '单据未审核,不可以撤审' GOTO ext END IF IF arg_s_check.billtype = 0 THEN IF uo_option_if_oa_sptcheck = 1 And uo_option_sptcheck_secaudit = 1 And audit_buildtype = 0 THEN IF f_check_if_oaflow_caudit(arg_s_check.scid,arg_billid,1684,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSEIF arg_s_check.billtype = 1 THEN IF uo_option_if_oa_sptcheck_wfjg = 1 And uo_option_sptcheck_wfjg_secaudit = 1 And audit_buildtype = 0 THEN IF f_check_if_oaflow_caudit(arg_s_check.scid,arg_billid,2234,arg_msg ) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF //更新审核标记 UPDATE u_sptcheck SET first_auditemp = '', first_auditdate = :null_dt, flag = 0 WHERE billid = :arg_billid AND flag = 4; 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_add_billemp (long arg_billid, string arg_billemp, ref string arg_msg);Int rslt = 1 s_sptcheck arg_s_check IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF arg_billemp = '' THEN rslt = 0 arg_msg = "质检员内容为空,操作取消" GOTO ext END IF IF p_getinfo(arg_billid,arg_s_check,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_check.flag <> 4 THEN rslt = 0 arg_msg = '单据非待初审状态,不可以修改质检员' GOTO ext END IF UPDATE u_sptcheck SET billemp = :arg_billemp WHERE u_sptcheck.billid = :arg_billid AND flag = 4; IF SQLCA.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致修改质检员操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF ext: IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; END IF Return (rslt) end function public function integer uof_create_inware_buy (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_storageid_arr[] Long ll_mxbt,cnt Long i,j Long ll_moneyid,ll_moneyid_native,ll_banktypeid,ll_banktypeid_mxbuytask Long ll_mx_buytaskmoneyid,ll_mx_buytaskmoneyid_cnt Long ll_moneyid_check Decimal ld_mrate,ld_mrate_native,ld_mrate_mxbuytask Decimal ld_enprice,ld_rebate Long ll_sptid DateTime server_dt decimal ld_tax string ls_plancode SELECT Top 1 getdate() Into :server_dt From u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF s_sptcheck arg_s_check uo_inware_buy uo_ware uo_ware = Create uo_inware_buy uo_ware.commit_transaction = sqlca IF getinfo(arg_billid,arg_s_check,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF SELECT moneyid,rate INTO :ll_moneyid_native,:ld_mrate_native FROM cw_currency Where native = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询本位币资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF FOR i = 1 To UpperBound(arg_s_check.arg_s_mx) - 1 IF arg_s_check.arg_s_mx[i].goodqty <> 0 And arg_s_check.arg_s_mx[i].storageid > 0 THEN IF arg_s_check.arg_s_mx[i].reltaskid > 0 THEN SELECT moneyid,mrate,banktypeid INTO :ll_mx_buytaskmoneyid,:ld_mrate_mxbuytask,:ll_banktypeid_mxbuytask FROM u_buytask WHERE scid = :arg_s_check.scid And taskid = :arg_s_check.arg_s_mx[i].reltaskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询明细行:'+String(i)+',对应采购订单币种失败,'+sqlca.SQLErrText GOTO ext END IF ELSE ll_mx_buytaskmoneyid = ll_moneyid_native ld_mrate_mxbuytask = ld_mrate_native END IF IF ll_moneyid_check <> ll_mx_buytaskmoneyid THEN ll_mx_buytaskmoneyid_cnt++ ll_moneyid_check = ll_mx_buytaskmoneyid END IF FOR j = 1 To ll_mxbt IF arg_s_check.arg_s_mx[i].storageid = ll_storageid_arr[j] THEN GOTO _next END IF NEXT ll_mxbt++ ll_storageid_arr[ll_mxbt] = arg_s_check.arg_s_mx[i].storageid END IF _next: NEXT IF ll_mx_buytaskmoneyid_cnt > 1 THEN arg_msg = '质检单明细对应订单币种多于1个,不能自动生成采购收货单' rslt = 0 GOTO ext END IF SELECT banktypeid INTO :ll_banktypeid FROM u_spt Where sptid = :arg_s_check.sptid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询供应商默认结算方式失败,'+sqlca.SQLErrText GOTO ext END IF //每个仓库建立一张收货单 FOR i = 1 To ll_mxbt IF uo_ware.newbegin(arg_s_check.scid,1,arg_msg) = 0 THEN rslt = 0 arg_msg = '第'+String(i)+'行,'+arg_msg GOTO ext END IF uo_ware.indate = server_dt uo_ware.inrep = publ_operator uo_ware.part = arg_s_check.billcode uo_ware.dscrp = arg_s_check.dscrp //'质检单:'+arg_s_check.billcode+'审核自动生成' uo_ware.storageid = ll_storageid_arr[i] uo_ware.sptid = arg_s_check.sptid uo_ware.otheramt = 0 IF ll_banktypeid_mxbuytask > 0 THEN uo_ware.relint_1 = ll_banktypeid_mxbuytask ELSE uo_ware.relint_1 = ll_banktypeid END IF uo_ware.relid = 0 uo_ware.thflag = 0 uo_ware.moneyid = ll_mx_buytaskmoneyid uo_ware.mrate = ld_mrate_mxbuytask cnt = 0 FOR j = 1 To UpperBound(arg_s_check.arg_s_mx) - 1 IF arg_s_check.arg_s_mx[j].goodqty <> 0 And arg_s_check.arg_s_mx[j].storageid = ll_storageid_arr[i] THEN cnt++ SELECT u_buyTaskMx.enprice, u_buyTaskMx.rebate, u_SaleTask.CusID, u_buyTaskMx.tax, u_buyTaskMx.plancode INTO :ld_enprice,:ld_rebate,:ll_sptid,:ld_tax, :ls_plancode FROM u_SaleTaskMx INNER JOIN u_SaleTask ON u_SaleTaskMx.scid = u_SaleTask.scid AND u_SaleTaskMx.TaskID = u_SaleTask.TaskID RIGHT OUTER JOIN u_buyTaskMx ON u_SaleTaskMx.printid = u_buyTaskMx.taskmxprintid AND u_SaleTaskMx.TaskID = u_buyTaskMx.orderid AND u_SaleTaskMx.scid = u_buyTaskMx.scid RIGHT OUTER JOIN u_sptcheck_mx INNER JOIN u_sptcheck ON u_sptcheck_mx.billid = u_sptcheck.billid ON u_buyTaskMx.scid = u_sptcheck.scid AND u_buyTaskMx.TaskID = u_sptcheck_mx.reltaskid AND u_buyTaskMx.printid = u_sptcheck_mx.reltaskprintid WHERE u_sptcheck_mx.billid = :arg_billid And u_sptcheck_mx.printid = :arg_s_check.arg_s_mx[j].printid; IF sqlca.SQLCode <> 0 THEN ld_enprice = 0 ld_rebate = 1 ll_sptid = 0 ls_plancode = '' END IF IF IsNull(ld_enprice) THEN ld_enprice = 0 IF IsNull(ld_rebate) THEN ld_rebate = 1 IF IsNull(ll_sptid) THEN ll_sptid = 0 if isnull(ld_tax) then ld_tax = 0 if isnull(ls_plancode) then ls_plancode = '' IF uo_ware.acceptmx(cnt,& arg_s_check.arg_s_mx[j].mtrlid,& arg_s_check.arg_s_mx[j].mtrlcode,& ls_plancode,& arg_s_check.arg_s_mx[j].status,& arg_s_check.arg_s_mx[j].goodqty,& ld_enprice,& ld_rebate,& arg_s_check.arg_s_mx[j].mxdscrp,& arg_msg,0,& arg_s_check.arg_s_mx[j].reltaskid,& arg_s_check.arg_s_mx[j].iftask,& arg_s_check.arg_s_mx[j].woodcode,& arg_s_check.arg_s_mx[j].pcode,& ll_sptid,& arg_s_check.arg_s_mx[j].unit,& arg_s_check.arg_s_mx[j].rate,& arg_s_check.arg_s_mx[j].goodqty * arg_s_check.arg_s_mx[j].rate ,& arg_s_check.arg_s_mx[j].reltaskprintid,& arg_s_check.arg_s_mx[j].goodqty,& '','',& arg_billid,& arg_s_check.arg_s_mx[j].printid,& '',& arg_s_check.arg_s_mx[j].location,& arg_s_check.arg_s_mx[j].goodqty,& ld_tax) = 0 THEN rslt = 0 arg_msg = '第'+String(i)+'行,'+arg_msg GOTO ext END IF END IF NEXT IF cnt > 0 THEN IF uo_ware.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_ware RETURN rslt end function public function integer uof_del_inware_buy (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_scid,ll_cnt Long ll_i Long ll_inwareid_arr[] String ls_inwarecode_arr[] uo_inware_buy uo_ware uo_ware = Create uo_inware_buy uo_ware.commit_transaction = sqlca SELECT scid INTO :ll_scid FROM u_sptcheck Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询质检单分部失败,'+sqlca.SQLErrText GOTO ext END IF ll_cnt = 1 DECLARE cur_inware CURSOR FOR SELECT distinct u_inware.inwareid, u_inware.inwarecode FROM u_inwaremx INNER JOIN u_inware ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid WHERE u_inwaremx.relbillid = :arg_billid And u_inwaremx.scid = :ll_scid and u_inware.billtype = 1; OPEN cur_inware; FETCH cur_inware Into :ll_inwareid_arr[ll_cnt],:ls_inwarecode_arr[ll_cnt]; DO WHILE sqlca.SQLCode = 0 ll_cnt++ FETCH cur_inware Into :ll_inwareid_arr[ll_cnt],:ls_inwarecode_arr[ll_cnt]; LOOP CLOSE cur_inware; FOR ll_i = 1 To ll_cnt - 1 IF uo_ware.del(ll_scid,ll_inwareid_arr[ll_i],arg_msg,False) = 0 THEN rslt = 0 arg_msg = '删除相关采购收货单:'+ls_inwarecode_arr[ll_i]+'失败,'+arg_msg GOTO ext END IF //删除日志 if f_setsysoplog('采购收货单','送检单撤审自动删除,id:'+string(ll_inwareid_arr[ll_i])+',code:'+ls_inwarecode_arr[ll_i],arg_msg,false) = 0 then rslt = 0 arg_msg = '删除相关采购收货单:'+ls_inwarecode_arr[ll_i]+',记录操作日志失败,'+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_ware RETURN rslt end function public function integer uof_create_inware_wfjg (long arg_billid, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 IF uo_option_wfjg_price_cmp = -1000 THEN rslt = 0 arg_msg = '选项:[284]外协收货单外协件成本价计算方法,读取初始默认值失败,操作取消!' GOTO ext END IF s_mtrlprice_mx arg_s_mx[] Long ll_storageid_arr[] Long ll_mxbt,cnt,cnt_m,cnt_out Long i,j,k,ll_i, ll_j Long ll_moneyid,ll_banktypeid Decimal ld_mrate,ld_enprice,ld_rebate,ld_jgprice String ls_jgdscrp Long ll_sptid DateTime server_dt String ls_pfcode Int li_wfjgdec Decimal ld_price,ld_mprice,ld_outcost,ld_wagecost,ld_eqprice Decimal mtrlwaresum_qty,r_qty,i_qty,ins_planprice,ins_price,ld_qty_tmp //,ins_mtrlwareid Decimal ld_qty_out,ld_taxrate Decimal ld_cost_this,ld_cost_tmp Long ll_mxbt_cost Long ll_tmp Long ll_mtrlwareid[] Decimal lde_noallocqty[] Decimal lde_cost[] Decimal lde_restqty string ls_plancode SELECT Top 1 getdate() Into :server_dt From u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF s_sptcheck arg_s_check s_mtrldef_wfjg_array s_wfjg,s_empty uo_inware_wfjg uo_ware uo_ware = Create uo_inware_wfjg uo_ware.commit_transaction = sqlca uo_cmplcost uo_cmpl uo_cmpl = Create uo_cmplcost IF getinfo(arg_billid,arg_s_check,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF SELECT banktypeid INTO :ll_banktypeid FROM u_spt Where sptid = :arg_s_check.sptid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询供应商默认结算方式失败,'+sqlca.SQLErrText GOTO ext END IF IF uo_ware.newbegin(arg_s_check.scid,4,arg_msg) = 0 THEN rslt = 0 arg_msg = '第'+String(i)+'行,'+arg_msg GOTO ext END IF uo_ware.indate = server_dt uo_ware.inrep = publ_operator uo_ware.part = arg_s_check.billcode uo_ware.dscrp = arg_s_check.dscrp // '质检单:'+arg_s_check.billcode+'审核自动生成' uo_ware.sptid = arg_s_check.sptid uo_ware.relint_1 = ll_banktypeid uo_ware.thflag = 0 cnt = 0 FOR j = 1 To UpperBound(arg_s_check.arg_s_mx) - 1 IF arg_s_check.arg_s_mx[j].goodqty <> 0 And arg_s_check.arg_s_mx[j].storageid > 0 THEN cnt++ SELECT u_order_wfjgMx.price, u_order_wfjgMx.jgdscrp, u_order_wfjgMx.orderid, u_order_wfjgMx.taxrate, u_order_wfjgMx.plancode INTO :ld_jgprice, :ls_jgdscrp, :ll_sptid, :ld_taxrate, :ls_plancode FROM u_order_wfjgMx RIGHT OUTER JOIN u_sptcheck_mx ON u_order_wfjgMx.wfjgID = u_sptcheck_mx.reltaskid AND u_order_wfjgMx.printid = u_sptcheck_mx.reltaskprintid WHERE u_sptcheck_mx.billid = :arg_billid And u_sptcheck_mx.printid = :arg_s_check.arg_s_mx[j].printid; IF sqlca.SQLCode <> 0 THEN ld_jgprice = 0 ll_sptid = 0 ls_jgdscrp = '' ls_plancode = '' END IF IF IsNull(ld_jgprice) THEN ld_jgprice = 0 IF IsNull(ll_sptid) THEN ll_sptid = 0 IF IsNull(ls_jgdscrp) THEN ls_jgdscrp = '' IF IsNull(ls_plancode) THEN ls_plancode = '' s_wfjg = s_empty ls_pfcode = f_get_dft_pf(arg_s_check.arg_s_mx[j].mtrlid) k = 1 IF arg_s_check.arg_s_mx[j].iftask = 0 THEN DECLARE cur_inmx CURSOR FOR SELECT u_PrdPF.SonMtrlid, u_mtrldef.unit, u_mtrldef.wfjgdec, :arg_s_check.arg_s_mx[j].goodqty * :arg_s_check.arg_s_mx[j].rate * u_prdpf.Sonscale / (1 - u_PrdPF.sonloss) + u_PrdPF.SonDECLoss, u_prdpf.Sonscale / (1 - u_PrdPF.sonloss) + u_PrdPF.SonDECLoss FROM u_PrdPF INNER JOIN u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid WHERE ( u_PrdPF.mtrlid = :arg_s_check.arg_s_mx[j].mtrlid ) And ( u_PrdPF.pfcode = :ls_pfcode ) ; OPEN cur_inmx; FETCH cur_inmx INTO :s_wfjg.mtrlid[k],:s_wfjg.unit[k], :li_wfjgdec,:s_wfjg.qty[k],:s_wfjg.Sonscale[k]; s_wfjg.qty[k] = Round(s_wfjg.qty[k],li_wfjgdec) s_wfjg.Sonscale[k] = Round(s_wfjg.Sonscale[k],li_wfjgdec) DO WHILE sqlca.SQLCode = 0 k++ FETCH cur_inmx INTO :s_wfjg.mtrlid[k],:s_wfjg.unit[k], :li_wfjgdec,:s_wfjg.qty[k],:s_wfjg.Sonscale[k]; s_wfjg.qty[k] = Round(s_wfjg.qty[k],li_wfjgdec) s_wfjg.Sonscale[k] = Round(s_wfjg.Sonscale[k],li_wfjgdec) LOOP CLOSE cur_inmx; ELSE DECLARE cur_outmx CURSOR FOR SELECT u_order_wfjgmx_out_mx.mtrlid, u_mtrldef.unit, u_mtrldef.wfjgdec, :arg_s_check.arg_s_mx[j].goodqty * :arg_s_check.arg_s_mx[j].rate * (u_order_wfjgmx_out_mx.qty / u_order_wfjgMx.Qty ), (u_order_wfjgmx_out_mx.qty / u_order_wfjgMx.Qty ) FROM u_order_wfjgmx_out_mx INNER JOIN u_mtrldef ON u_order_wfjgmx_out_mx.mtrlid = u_mtrldef.mtrlid INNER JOIN u_order_wfjgMx ON u_order_wfjgmx_out_mx.scid = u_order_wfjgMx.scid AND u_order_wfjgmx_out_mx.wfjgid = u_order_wfjgMx.wfjgID AND u_order_wfjgmx_out_mx.relprintid = u_order_wfjgMx.printid WHERE u_order_wfjgmx_out_mx.scid = :arg_s_check.scid AND u_order_wfjgmx_out_mx.wfjgid = :arg_s_check.arg_s_mx[j].reltaskid AND u_order_wfjgmx_out_mx.relprintid = :arg_s_check.arg_s_mx[j].reltaskprintid And u_order_wfjgMx.qty > 0 ; OPEN cur_outmx; FETCH cur_outmx INTO :s_wfjg.mtrlid[k],:s_wfjg.unit[k], :li_wfjgdec,:s_wfjg.qty[k],:s_wfjg.Sonscale[k]; s_wfjg.qty[k] = Round(s_wfjg.qty[k],li_wfjgdec) s_wfjg.Sonscale[k] = Round(s_wfjg.Sonscale[k],li_wfjgdec) DO WHILE sqlca.SQLCode = 0 k++ FETCH cur_outmx INTO :s_wfjg.mtrlid[k],:s_wfjg.unit[k], :li_wfjgdec,:s_wfjg.qty[k],:s_wfjg.Sonscale[k]; s_wfjg.qty[k] = Round(s_wfjg.qty[k],li_wfjgdec) s_wfjg.Sonscale[k] = Round(s_wfjg.Sonscale[k],li_wfjgdec) LOOP CLOSE cur_outmx; END IF ld_cost_this = 0 //计算发出明细 FOR ll_i = 1 To k - 1 lde_restqty = s_wfjg.qty[ll_i] ll_mxbt_cost = 0 ll_tmp = 1 DECLARE pf_cur CURSOR FOR SELECT ow_wfjgware.mtrlwareid, ow_wfjgware.noallocqty, ow_wfjgware.cost FROM ow_wfjgware WHERE ow_wfjgware.mtrlid = :s_wfjg.mtrlid[ll_i] AND ow_wfjgware.sptid = :arg_s_check.sptid Order By ow_wfjgware.noallocqty; OPEN pf_cur; FETCH pf_cur Into :ll_mtrlwareid[ll_tmp],:lde_noallocqty[ll_tmp],:lde_cost[ll_tmp]; DO WHILE sqlca.SQLCode = 0 ll_tmp++ FETCH pf_cur Into :ll_mtrlwareid[ll_tmp],:lde_noallocqty[ll_tmp],:lde_cost[ll_tmp]; LOOP CLOSE pf_cur; ll_tmp -= 1 IF ll_tmp = 0 THEN ll_tmp = 1 IF f_insert_0_sptware(arg_s_check.scid, ll_mtrlwareid[ll_tmp], s_wfjg.mtrlid[ll_i], '', arg_s_check.sptid, '', '', '', '', 0, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF lde_noallocqty[ll_tmp] = 0 lde_cost[ll_tmp] = 0 END IF FOR ll_j = 1 To ll_tmp IF ll_j = ll_tmp THEN ld_qty_out = lde_restqty lde_restqty = 0 ELSE IF lde_noallocqty[ll_j] > 0 THEN IF lde_restqty > lde_noallocqty[ll_j] THEN ld_qty_out = lde_noallocqty[ll_j] ELSE ld_qty_out = lde_restqty END IF lde_restqty -= ld_qty_out ELSE ld_qty_out = 0 //lde_restqty = lde_restqty END IF END IF IF ld_qty_out > 0 THEN ll_mxbt_cost++ IF ll_mxbt_cost = 1 THEN ld_cost_this = ld_cost_this + lde_cost[ll_j] * s_wfjg.Sonscale[ll_i] END IF cnt_out++ IF uo_ware.acceptmx_bef( ll_mtrlwareid[ll_j],& ld_qty_out,& '',& cnt_out,& s_wfjg.unit[ll_i],& ld_qty_out,& 1,& cnt,& arg_msg) = 0 THEN rslt = 0 arg_msg = '第'+String(j)+'行,'+arg_msg GOTO ext END IF END IF NEXT NEXT //计算收货明细 ls_pfcode = f_get_dft_pf(arg_s_check.arg_s_mx[j].mtrlid) IF uo_option_wfjg_price_cmp = 0 THEN IF uo_cmpl.uof_get_cost(0,arg_s_check.scid,arg_s_check.arg_s_mx[j].mtrlid,arg_s_check.arg_s_mx[j].mtrlcode,ls_pfcode,1,1,ld_price,ld_mprice,ld_outcost,ld_wagecost,ld_eqprice,0,arg_msg,arg_s_mx,1) = 0 THEN ld_enprice = 0 ELSE ld_enprice = Round(ld_price,2) + Round(ld_mprice,2) + Round(ld_outcost,2) + Round(ld_wagecost,2) + Round(ld_eqprice,2) END IF ELSE ld_enprice = ld_cost_this END IF IF IsNull(ld_enprice) THEN ld_enprice = 0 IF uo_ware.acceptmx(cnt,& arg_s_check.arg_s_mx[j].mtrlid,& arg_s_check.arg_s_mx[j].mtrlcode,& ls_plancode,& arg_s_check.arg_s_mx[j].status,& arg_s_check.arg_s_mx[j].goodqty,& ld_enprice,& 1,& arg_s_check.arg_s_mx[j].mxdscrp,& arg_msg,& ld_jgprice,& arg_s_check.arg_s_mx[j].reltaskid,& arg_s_check.arg_s_mx[j].iftask,& arg_s_check.arg_s_mx[j].woodcode,& arg_s_check.arg_s_mx[j].pcode,& ll_sptid,& arg_s_check.arg_s_mx[j].unit,& arg_s_check.arg_s_mx[j].rate,& arg_s_check.arg_s_mx[j].goodqty * arg_s_check.arg_s_mx[j].rate ,& arg_s_check.arg_s_mx[j].storageid,& ls_jgdscrp,& arg_s_check.arg_s_mx[j].reltaskprintid,& 0,& arg_s_check.arg_s_mx[j].goodqty,& '',& arg_billid,& arg_s_check.arg_s_mx[j].printid,& '',& arg_s_check.arg_s_mx[j].Location,& ld_taxrate) = 0 THEN rslt = 0 arg_msg = '第'+String(j)+'行,'+arg_msg GOTO ext END IF END IF NEXT IF cnt > 0 THEN IF uo_ware.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_ware Destroy uo_cmpl RETURN rslt end function public function integer uof_del_inware_wfjg (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_scid,ll_cnt Long ll_i Long ll_inwareid_arr[] String ls_inwarecode_arr[] uo_inware_wfjg uo_ware uo_ware = Create uo_inware_wfjg uo_ware.commit_transaction = sqlca SELECT scid INTO :ll_scid FROM u_sptcheck Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询质检单分部失败,'+sqlca.SQLErrText GOTO ext END IF ll_cnt = 1 DECLARE cur_inware CURSOR FOR SELECT distinct ow_wfjg_in.inwareid, ow_wfjg_in.inwarecode FROM ow_wfjgmx_in_aft INNER JOIN ow_wfjg_in ON ow_wfjgmx_in_aft.scid = ow_wfjg_in.scid AND ow_wfjgmx_in_aft.inwareid = ow_wfjg_in.inwareid WHERE ow_wfjgmx_in_aft.relbillid = :arg_billid AND ow_wfjgmx_in_aft.scid = :ll_scid And ow_wfjg_in.billtype = 4; OPEN cur_inware; FETCH cur_inware Into :ll_inwareid_arr[ll_cnt],:ls_inwarecode_arr[ll_cnt]; DO WHILE sqlca.SQLCode = 0 ll_cnt++ FETCH cur_inware Into :ll_inwareid_arr[ll_cnt],:ls_inwarecode_arr[ll_cnt]; LOOP CLOSE cur_inware; FOR ll_i = 1 To ll_cnt - 1 IF uo_ware.del(ll_scid,ll_inwareid_arr[ll_i],arg_msg,False) = 0 THEN rslt = 0 arg_msg = '删除相关外协收货单:'+ls_inwarecode_arr[ll_i]+'失败,'+arg_msg GOTO ext END IF //删除日志 if f_setsysoplog('外协收货单','送检单撤审自动删除,id:'+string(ll_inwareid_arr[ll_i])+',code:'+ls_inwarecode_arr[ll_i],arg_msg,false) = 0 then rslt = 0 arg_msg = '删除相关外协收货单:'+ls_inwarecode_arr[ll_i]+',记录操作日志失败,'+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_ware RETURN rslt end function public function integer uof_create_inware_cp (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_storageid_arr[] Long ll_mxbt,cnt Long i,j Decimal ld_planprice DateTime server_dt String ls_plancode SELECT Top 1 getdate() Into :server_dt From u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF s_sptcheck arg_s_check uo_inware_cp uo_ware uo_ware = Create uo_inware_cp uo_ware.commit_transaction = sqlca IF getinfo(arg_billid,arg_s_check,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF FOR i = 1 To UpperBound(arg_s_check.arg_s_mx) - 1 IF arg_s_check.arg_s_mx[i].goodqty <> 0 And arg_s_check.arg_s_mx[i].storageid > 0 THEN FOR j = 1 To ll_mxbt IF arg_s_check.arg_s_mx[i].storageid = ll_storageid_arr[j] THEN GOTO _next END IF NEXT ll_mxbt++ ll_storageid_arr[ll_mxbt] = arg_s_check.arg_s_mx[i].storageid END IF _next: NEXT //每个仓库建立一张生产进仓 FOR i = 1 To ll_mxbt IF uo_ware.newbegin(arg_s_check.scid,3,arg_msg) = 0 THEN rslt = 0 arg_msg = '第'+String(i)+'行,'+arg_msg GOTO ext END IF uo_ware.indate = server_dt uo_ware.inrep = publ_operator uo_ware.part = arg_s_check.billcode uo_ware.dscrp = arg_s_check.dscrp //'质检单:'+arg_s_check.billcode+'审核自动生成' uo_ware.storageid = ll_storageid_arr[i] uo_ware.sptname = '' uo_ware.relid = arg_s_check.sptid //车间 uo_ware.relint_2 = 0 cnt = 0 FOR j = 1 To UpperBound(arg_s_check.arg_s_mx) - 1 IF arg_s_check.arg_s_mx[j].goodqty <> 0 And arg_s_check.arg_s_mx[j].storageid = ll_storageid_arr[i] THEN cnt++ IF sys_option_taskplancode = 1 THEN SELECT u_order_ml.taskrelcode INTO :ls_plancode FROM u_order_ml Where u_order_ml.orderid = :arg_s_check.arg_s_mx[j].reltaskid; IF sqlca.SQLCode <> 0 THEN ls_plancode = '' END IF ELSE ls_plancode = '' END IF IF IsNull(ls_plancode) THEN ls_plancode = '' f_get_planprice_mtrl(arg_s_check.arg_s_mx[j].mtrlid,& arg_s_check.arg_s_mx[j].status,& arg_s_check.arg_s_mx[j].woodcode,& arg_s_check.arg_s_mx[j].pcode,ld_planprice) IF IsNull(ld_planprice) THEN ld_planprice = 0 IF uo_ware.acceptmx(cnt,& arg_s_check.arg_s_mx[j].mtrlid,& arg_s_check.arg_s_mx[j].mtrlcode,& ls_plancode,& arg_s_check.arg_s_mx[j].status,& arg_s_check.arg_s_mx[j].goodqty,& ld_planprice,& 1,& arg_s_check.arg_s_mx[j].mxdscrp,& arg_msg,0,& arg_s_check.arg_s_mx[j].reltaskid,& arg_s_check.arg_s_mx[j].iftask,& arg_s_check.arg_s_mx[j].woodcode,& arg_s_check.arg_s_mx[j].pcode,& 0,& arg_s_check.arg_s_mx[j].unit,& arg_s_check.arg_s_mx[j].rate,& arg_s_check.arg_s_mx[j].goodqty * arg_s_check.arg_s_mx[j].rate ,& arg_s_check.arg_s_mx[j].reltaskprintid,& arg_s_check.arg_s_mx[j].goodqty,& '','',& arg_billid,& arg_s_check.arg_s_mx[j].printid,& '',& arg_s_check.arg_s_mx[j].Location,& arg_s_check.arg_s_mx[j].goodqty,& 0) = 0 THEN rslt = 0 arg_msg = '第'+String(i)+'行,'+arg_msg GOTO ext END IF END IF NEXT IF cnt > 0 THEN IF uo_ware.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_ware RETURN rslt end function public function integer uof_del_inware_cp (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_scid,ll_cnt Long ll_i Long ll_inwareid_arr[] String ls_inwarecode_arr[] uo_inware_cp uo_ware uo_ware = Create uo_inware_cp uo_ware.commit_transaction = sqlca SELECT scid INTO :ll_scid FROM u_sptcheck Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询质检单分部失败,'+sqlca.SQLErrText GOTO ext END IF ll_cnt = 1 DECLARE cur_inware CURSOR FOR SELECT distinct u_inware.inwareid, u_inware.inwarecode FROM u_inwaremx INNER JOIN u_inware ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid WHERE u_inwaremx.relbillid = :arg_billid And u_inwaremx.scid = :ll_scid and u_inware.billtype = 3; OPEN cur_inware; FETCH cur_inware Into :ll_inwareid_arr[ll_cnt],:ls_inwarecode_arr[ll_cnt]; DO WHILE sqlca.SQLCode = 0 ll_cnt++ FETCH cur_inware Into :ll_inwareid_arr[ll_cnt],:ls_inwarecode_arr[ll_cnt]; LOOP CLOSE cur_inware; FOR ll_i = 1 To ll_cnt - 1 IF uo_ware.del(ll_scid,ll_inwareid_arr[ll_i],arg_msg,False) = 0 THEN rslt = 0 arg_msg = '删除相关生产进仓单:'+ls_inwarecode_arr[ll_i]+'失败,'+arg_msg GOTO ext END IF //删除日志 if f_setsysoplog('生产进仓单','送检单撤审自动删除,id:'+string(ll_inwareid_arr[ll_i])+',code:'+ls_inwarecode_arr[ll_i],arg_msg,false) = 0 then rslt = 0 arg_msg = '删除相关生产进仓单:'+ls_inwarecode_arr[ll_i]+',记录操作日志失败,'+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_ware RETURN rslt end function on uo_sptcheck.create call super::create TriggerEvent( this, "constructor" ) end on on uo_sptcheck.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String str_optionvalue,arg_msg f_get_sys_option_value('265',str_optionvalue,arg_msg) uo_option_if_oa_sptcheck = long(str_optionvalue) f_get_sys_option_value('267',str_optionvalue,arg_msg) uo_option_sptcheck_secaudit = long(str_optionvalue) f_get_sys_option_value('266',str_optionvalue,arg_msg) uo_option_if_oa_sptcheck_wfjg = long(str_optionvalue) f_get_sys_option_value('268',str_optionvalue,arg_msg) uo_option_sptcheck_wfjg_secaudit = long(str_optionvalue) f_get_sys_option_value('271',str_optionvalue,arg_msg) uo_option_sptcheck_inware = long(str_optionvalue) f_get_sys_option_value('272',str_optionvalue,arg_msg) uo_option_sptcheck_wfjg_inware = long(str_optionvalue) f_get_sys_option_value('284',str_optionvalue,arg_msg) uo_option_wfjg_price_cmp = long(str_optionvalue) end event global type uo_incase from nonvisualobject end type