$PBExportHeader$f_ref_saletask_notfpqty.srf global type f_ref_saletask_notfpqty from function_object end type forward prototypes global function integer f_ref_saletask_notfpqty (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_status, ref decimal arg_ref_notfpqty, ref string arg_msg) end prototypes global function integer f_ref_saletask_notfpqty (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_status, ref decimal arg_ref_notfpqty, ref string arg_msg);Int rslt = 1 Int li_ifpackpro String ls_status_saletask,ls_woodcode_saletask,ls_pcode_saletask Long ll_saletaskmx_pf_ch Decimal ld_Sonscale,ld_Sonscale_fm Decimal ld_saleqty,ld_fpqty,ld_not_fpqty SELECT u_saletaskmx.saleqty - u_saletaskmx.stopqty, u_mtrldef.ifpackpro, u_saletaskmx.status, u_saletaskmx.woodcode, u_saletaskmx.pcode INTO :ld_saleqty, :li_ifpackpro, :ls_status_saletask, :ls_woodcode_saletask, :ls_pcode_saletask FROM u_saletaskmx,u_mtrldef WHERE u_saletaskmx.scid = :arg_scid AND u_saletaskmx.taskid = :arg_taskid AND u_saletaskmx.printid = :arg_printid And u_saletaskmx.mtrlid = u_mtrldef.mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询销售订单明细订货数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_ifpackpro = 0 Or li_ifpackpro = 1 Or li_ifpackpro = 2 THEN IF li_ifpackpro = 0 THEN ld_Sonscale = 1 ld_Sonscale_fm = 1 ELSE ll_saletaskmx_pf_ch = 0 IF li_ifpackpro = 1 THEN ll_saletaskmx_pf_ch = 0 ELSE SELECT count(*) INTO :ll_saletaskmx_pf_ch FROM u_SaleTaskMx_pf WHERE u_SaleTaskMx_pf.scid = :arg_scid AND u_SaleTaskMx_pf.taskid = :arg_taskid And u_SaleTaskMx_pf.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '订单明细物料查询是否有换包件失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF ll_saletaskmx_pf_ch > 0 THEN SELECT u_SaleTaskMx_pf.Sonscale, u_SaleTaskMx_pf.Sonscale_fm INTO :ld_Sonscale,:ld_Sonscale_fm FROM u_SaleTaskMx_pf WHERE u_SaleTaskMx_pf.scid = :arg_scid AND u_SaleTaskMx_pf.taskid = :arg_taskid AND u_SaleTaskMx_pf.printid = :arg_printid And u_SaleTaskMx_pf.sonmtrlid = :arg_mtrlid; IF sqlca.SQLCode = -1 THEN arg_msg = '订单明细包件物料查询当前库存分配的订单包件产品物料清单是否包含有对应分配的库存包件失败,请检查清单资料,'+sqlca.SQLErrText rslt = 0 GOTO ext ELSEIF sqlca.SQLCode = 100 THEN arg_msg = '订单明细包件物料当前库存分配的订单包件产品物料清单不包含有对应分配的库存包件,请检查清单资料' rslt = 0 GOTO ext END IF ELSE SELECT u_prdpf.Sonscale,1 INTO :ld_Sonscale,:ld_Sonscale_fm FROM u_saletaskmx,u_mtrl_pf,u_prdpf,u_mtrldef WHERE u_saletaskmx.mtrlid = u_mtrl_pf.mtrlid AND u_saletaskmx.scid = :arg_scid AND u_saletaskmx.taskid = :arg_taskid AND u_saletaskmx.printid = :arg_printid AND u_mtrl_pf.mtrlid = u_prdpf.mtrlid AND u_mtrl_pf.pfcode = u_prdpf.pfcode AND ( u_mtrl_pf.ifdi = 0 AND u_mtrl_pf.ifdft = 1 ) AND u_PrdPF.SonMtrlid = :arg_mtrlid AND u_prdpf.sonmtrlid = u_mtrldef.mtrlid And u_mtrldef.ifpack > 0; IF sqlca.SQLCode = -1 THEN arg_msg = '订单明细包件物料查询当前库存分配的订单包件产品物料清单是否包含有对应分配的库存包件失败,请检查清单资料,'+sqlca.SQLErrText rslt = 0 GOTO ext ELSEIF sqlca.SQLCode = 100 THEN arg_msg = '订单明细包件物料当前库存分配的订单包件产品物料清单不包含有对应分配的库存包件,请检查清单资料' rslt = 0 GOTO ext END IF END IF END IF IF ld_Sonscale = 0 THEN arg_msg = '错误的包件组成数,操作取消' rslt = 0 GOTO ext END IF ld_saleqty = ld_saleqty * ld_Sonscale/ld_Sonscale_fm SELECT isnull(sum(assignqty),0) INTO :ld_fpqty FROM u_mtrlware_assign WHERE u_mtrlware_assign.scid = :arg_scid AND u_mtrlware_assign.relbillid = :arg_taskid AND u_mtrlware_assign.relprintid = :arg_printid AND u_mtrlware_assign.mtrlid = :arg_mtrlid And u_mtrlware_assign.assigntype = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询销售订单明细已分配数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ld_not_fpqty = ld_saleqty - ld_fpqty ELSEIF li_ifpackpro = 3 Or li_ifpackpro = 4 THEN s_mtrlcfg_expr s_pz[] Long ll_array,ll_l Decimal ld_pf_Sonscale[] String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[] f_checkpz(ls_status_saletask,s_pz[]) ll_array = UpperBound(s_pz) IF ll_array = 0 THEN arg_msg = '订单拆分子件错误,请检查组合配置' rslt = 0 GOTO ext END IF FOR ll_l = 1 To ll_array IF s_pz[ll_l].cfgname = arg_status THEN ld_Sonscale = Dec(s_pz[ll_l].qty) EXIT END IF NEXT IF ld_Sonscale = 0 THEN arg_msg = '错误的子件组成数,操作取消' rslt = 0 GOTO ext END IF ld_saleqty = ld_saleqty * ld_Sonscale SELECT isnull(sum(assignqty),0) INTO :ld_fpqty FROM u_mtrlware_assign,u_mtrlware WHERE u_mtrlware_assign.scid = u_mtrlware.scid AND u_mtrlware_assign.mtrlwareid = u_mtrlware.mtrlwareid AND u_mtrlware_assign.scid = :arg_scid AND u_mtrlware_assign.relbillid = :arg_taskid AND u_mtrlware_assign.relprintid = :arg_printid AND u_mtrlware_assign.mtrlid = :arg_mtrlid AND u_mtrlware.status = :arg_status AND u_mtrlware.woodcode = :ls_woodcode_saletask AND u_mtrlware.pcode = :ls_pcode_saletask And u_mtrlware_assign.assigntype = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询销售订单明细已分配数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ld_not_fpqty = ld_saleqty - ld_fpqty END IF arg_ref_notfpqty = ld_not_fpqty ext: RETURN rslt end function