$PBExportHeader$uo_inware_cp.sru forward global type uo_inware_cp from uo_inware end type end forward global type uo_inware_cp from uo_inware end type global uo_inware_cp uo_inware_cp type variables long it_mxbt_pf //生产进仓按清单反扣数组 end variables forward prototypes public function integer uf_get_pfmtrlmx (long arg_mtrlid, decimal arg_qty, ref s_inware_cp_fkmx arg_s_fkmx, ref string arg_msg) public function integer uf_get_mtrlware (long arg_storageid, long arg_mtrlid, decimal arg_qty, string arg_mtrlcode, string arg_storagename, ref s_mtrlware_fk s_fk, ref string arg_msg) public function integer uf_cmpl_rqmtrl (long arg_mtrlid, decimal arg_qty, long arg_lp, long arg_flag, string arg_mtrlcode, ref s_inware_cp_fkmx arg_s_fkmx, ref string arg_msg) public function integer uf_update_inprice (long arg_scid, long arg_inwareid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer uf_destroy_scll (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit) public function integer auditing_end (ref string arg_msg) public function integer c_auditing_end (ref string arg_msg) public function integer uf_create_scll (long arg_scid, long arg_billid, string arg_billcode, ref string arg_msg) public function integer auditing_chk (ref string arg_msg) public function integer uf_update_inware_cost (ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx (s_inwaremx s_mx, ref string arg_msg) public function integer save (boolean arg_ifcommit, ref string arg_msg) end prototypes public function integer uf_get_pfmtrlmx (long arg_mtrlid, decimal arg_qty, ref s_inware_cp_fkmx arg_s_fkmx, ref string arg_msg);Long rslt = 1 Long ll_ifautoscll,ll_fklevel,ll_sauditflag String ls_mtrlcode SELECT ifautoscll,fklevel,mtrlcode,sauditflag INTO :ll_ifautoscll,:ll_fklevel,:ls_mtrlcode,:ll_sauditflag FROM u_mtrldef Where mtrlid = :arg_mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询产品资料失败,产品唯一码错误' GOTO ext END IF IF ll_ifautoscll = 0 THEN rslt = 1 GOTO ext END IF IF ll_sauditflag = 0 THEN rslt = 0 arg_msg = '产品['+ls_mtrlcode+']清单还没审核,请先审核' GOTO ext END IF Dec lde_Sonscale,lde_sonloss,lde_sondecloss Long ll_SonMtrlid,ll_storageid,k,ll_dft,cnt,ll_wrkgrpid String ls_mtrlcode_pf IF ll_fklevel = 0 THEN // //清单反扣直接下级物料 datastore ds_pfmx ds_pfmx = Create datastore ds_pfmx.DataObject = 'ds_mtrl_pfmx' ds_pfmx.SetTransObject(commit_transaction) ds_pfmx.Retrieve(arg_mtrlid) IF ds_pfmx.RowCount() = 0 THEN rslt = 1 GOTO ext END IF FOR k = 1 To ds_pfmx.RowCount() IF ll_SonMtrlid <> ds_pfmx.Object.u_prdpf_sonmtrlid[k] THEN ll_SonMtrlid = ds_pfmx.Object.u_prdpf_sonmtrlid[k] ll_storageid = ds_pfmx.Object.u_mtrl_storage_storageid[k] lde_Sonscale = ds_pfmx.Object.u_prdpf_sonscale[k] lde_sonloss = ds_pfmx.Object.u_prdpf_sonloss[k] lde_sondecloss = ds_pfmx.Object.u_prdpf_sondecloss[k] ls_mtrlcode_pf = ds_pfmx.Object.u_mtrldef_mtrlcode[k] ll_wrkgrpid = ds_pfmx.Object.u_prdpf_wrkgrpid[k] IF ll_wrkgrpid <= 0 THEN rslt = 0 arg_msg = '产品['+ls_mtrlcode+']清单中物料['+ls_mtrlcode_pf+']还没设定领料组,请先设定' GOTO ext END IF IF ds_pfmx.Object.u_mtrl_storage_dft[k] <> 1 THEN rslt = 0 arg_msg = '物料['+ls_mtrlcode_pf+']还没设定默认反扣仓库,请先设定' GOTO ext END IF cnt++ arg_s_fkmx.storageid[cnt] = ll_storageid arg_s_fkmx.mtrlid[cnt] = ll_SonMtrlid arg_s_fkmx.wrkgrpid[cnt] = ll_wrkgrpid arg_s_fkmx.qty[cnt] = arg_qty * lde_Sonscale / (1 - lde_sonloss) + lde_sondecloss END IF NEXT ELSEIF ll_fklevel = 1 THEN // //清单反扣最底层物料 IF uf_cmpl_rqmtrl(arg_mtrlid,arg_qty,0,ll_sauditflag,ls_mtrlcode,arg_s_fkmx,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF ext: RETURN rslt end function public function integer uf_get_mtrlware (long arg_storageid, long arg_mtrlid, decimal arg_qty, string arg_mtrlcode, string arg_storagename, ref s_mtrlware_fk s_fk, ref string arg_msg);//uf_get_mtrlware(arg_storageid,arg_mtrlid,arg_qty,arg_mtrlcode,arg_storagename,s_fk,arg_msg) Long rslt = 1 Dec ll_sumqty Long plancnt SELECT isnull(sum(noallocqty),0) INTO :ll_sumqty FROM u_mtrlware WHERE ( mtrlid = :arg_mtrlid) AND (storageid = :arg_storageid) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料['+arg_mtrlcode+']库存失败' GOTO ext END IF IF ll_sumqty < arg_qty THEN rslt = 0 arg_msg = '物料['+arg_mtrlcode+']在仓库['+arg_storagename+']库存为:'+String(ll_sumqty,'#,##0.#####')+',少于需领数:'+String(arg_qty,'#,##0.#####') GOTO ext END IF SELECT count(*) INTO :plancnt FROM u_mtrlware WHERE ( u_mtrlware.mtrlid = :arg_mtrlid ) AND ( u_mtrlware.storageid = :arg_storageid ) AND ( u_mtrlware.noallocqty > 0 ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料['+arg_mtrlcode+']库存资料失败' GOTO ext END IF Long ins_mtrlwareid Dec ins_qty,ins_addqty,ins_cost Long count,i Dec sumqty,noallocqty,allocqty,i_qty noallocqty = arg_qty DECLARE pf_cur CURSOR FOR SELECT u_mtrlware.mtrlwareid, u_mtrlware.noallocqty, u_mtrlware.noallocaddqty, u_mtrlware.cost FROM u_mtrlware WHERE ( u_mtrlware.mtrlid = :arg_mtrlid ) AND ( u_mtrlware.storageid = :arg_storageid ) AND ( u_mtrlware.noallocqty > 0 ) Order By u_mtrlware.noallocqty Asc USING commit_transaction; OPEN pf_cur; count = 1 FETCH pf_cur INTO :ins_mtrlwareid, & :ins_qty,:ins_addqty,:ins_cost ; DO WHILE sqlca.SQLCode = 0 AND sumqty < arg_qty count++ sumqty = sumqty+ins_qty IF ins_qty > noallocqty THEN i_qty = noallocqty allocqty = allocqty+i_qty noallocqty = 0 ins_addqty = Int(ins_addqty * noallocqty / ins_qty) ELSEIF ins_qty = noallocqty THEN i_qty = noallocqty allocqty = allocqty+i_qty noallocqty = 0 //noallocqty - ins_qty ELSE IF plancnt > 1 THEN i_qty = sumqty - allocqty allocqty = allocqty+i_qty noallocqty = arg_qty - allocqty ELSE i_qty = arg_qty noallocqty = 0 END IF END IF i++ s_fk.mtrlwareid[i] = ins_mtrlwareid s_fk.addqty[i] = ins_addqty s_fk.qty[i] = i_qty s_fk.cost[i] = ins_cost FETCH pf_cur INTO :ins_mtrlwareid,& :ins_qty,:ins_addqty,:ins_cost ; LOOP count = count - 1 CLOSE pf_cur; ext: RETURN rslt end function public function integer uf_cmpl_rqmtrl (long arg_mtrlid, decimal arg_qty, long arg_lp, long arg_flag, string arg_mtrlcode, ref s_inware_cp_fkmx arg_s_fkmx, ref string arg_msg);Long rslt = 1 Long ll_cnt,ll_lp,ll_rft,k,i Dec lde_Sonscale,lde_sonloss,lde_sondecloss,lde_qty Long ll_SonMtrlid,ll_storageid,ll_dft,ll_flag,ll_wrkgrpid String ls_mtrlcode_pf,ls_mtrlcode Long ll_SonMtrlid_arr[],ll_storageid_arr[],ll_flag_arr[],ll_wrkgrpid_arr[] Dec ll_qty_arr[] String ls_mtrlcode_arr[] SELECT count(*) INTO :ll_cnt FROM u_PrdPF Where u_PrdPF.mtrlid = :arg_mtrlid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询产品['+arg_mtrlcode+']清单失败' GOTO ext END IF IF arg_lp = 0 THEN IF ll_cnt = 0 THEN rslt = 0 arg_msg = '产品['+arg_mtrlcode+']还没设定清单,请先设定' GOTO ext END IF IF arg_flag = 0 THEN rslt = 0 arg_msg = '产品['+arg_mtrlcode+']清单还没审核,请先审核' GOTO ext END IF ELSE IF ll_cnt = 0 THEN rslt = 2 GOTO ext ELSEIF ll_cnt > 0 AND arg_flag = 0 THEN rslt = 0 arg_msg = '物料['+arg_mtrlcode+']清单还没审核,请先审核' GOTO ext END IF END IF ll_cnt = 0 DECLARE cur_pf CURSOR FOR SELECT u_PrdPF.Sonscale, u_PrdPF.sonloss, u_PrdPF.sondecloss, u_PrdPF.SonMtrlid, u_mtrldef.mtrlcode, u_mtrldef.sauditflag, u_PrdPF.wrkgrpid FROM u_PrdPF INNER JOIN u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid Where ( u_PrdPF.mtrlid = :arg_mtrlid ) USING commit_transaction; OPEN cur_pf; FETCH cur_pf INTO :lde_Sonscale,:lde_sonloss,:lde_sondecloss,:ll_SonMtrlid,:ls_mtrlcode_pf,:ll_flag,:ll_wrkgrpid; DO WHILE commit_transaction.SQLCode = 0 lde_qty = arg_qty * lde_Sonscale / (1 - lde_sonloss) + lde_sondecloss k++ ll_SonMtrlid_arr[k] = ll_SonMtrlid ll_qty_arr[k] = lde_qty ll_flag_arr[k] = ll_flag ls_mtrlcode_arr[k] = ls_mtrlcode_pf ll_wrkgrpid_arr[k] = ll_wrkgrpid FETCH cur_pf INTO :lde_Sonscale,:lde_sonloss,:lde_sondecloss,:ll_SonMtrlid,:ls_mtrlcode_pf,:ll_flag,:ll_wrkgrpid; LOOP CLOSE cur_pf; FOR i = 1 TO UpperBound(ll_SonMtrlid_arr) ll_lp = arg_lp + 1 IF ll_wrkgrpid_arr[i] <= 0 THEN rslt = 0 arg_msg = '产品['+arg_mtrlcode+']清单中物料['+ls_mtrlcode_arr[i]+']领料组还没设定,请先设定' GOTO ext END IF ll_rft = uf_cmpl_rqmtrl(ll_SonMtrlid_arr[i],ll_qty_arr[i],ll_lp,ll_flag_arr[i],ls_mtrlcode_arr[i],arg_s_fkmx,arg_msg) IF ll_rft = 0 THEN rslt = 0 GOTO ext ELSEIF ll_rft = 1 THEN CONTINUE END IF IF ll_SonMtrlid_arr[i] > 0 THEN SELECT count(*) INTO :ll_cnt FROM u_mtrldef LEFT OUTER JOIN u_mtrl_storage ON u_mtrldef.mtrlid = u_mtrl_storage.mtrlid WHERE u_mtrldef.mtrlid = :ll_SonMtrlid_arr[i] AND IsNull(u_mtrl_storage.dft,0) = 1 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料['+ls_mtrlcode_arr[i]+']默认反扣仓库失败' GOTO ext END IF IF ll_cnt = 0 THEN rslt = 0 arg_msg = '物料['+ls_mtrlcode_arr[i]+']还没设定默认反扣仓库,请先设定' GOTO ext ELSEIF ll_cnt > 1 THEN rslt = 0 arg_msg = '物料['+ls_mtrlcode_arr[i]+']设定了多个默认反扣仓库,只能设置一个' GOTO ext END IF SELECT u_mtrl_storage.storageid INTO :ll_storageid FROM u_mtrldef LEFT OUTER JOIN u_mtrl_storage ON u_mtrldef.mtrlid = u_mtrl_storage.mtrlid WHERE u_mtrldef.mtrlid = :ll_SonMtrlid_arr[i] AND IsNull(u_mtrl_storage.dft,0) = 1 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料['+ls_mtrlcode_arr[i]+']默认反扣仓库失败' GOTO ext END IF END IF it_mxbt_pf++ arg_s_fkmx.storageid[it_mxbt_pf] = ll_storageid arg_s_fkmx.mtrlid[it_mxbt_pf] = ll_SonMtrlid_arr[i] arg_s_fkmx.wrkgrpid[it_mxbt_pf] = ll_wrkgrpid_arr[i] arg_s_fkmx.qty[it_mxbt_pf] = ll_qty_arr[i] NEXT ext: RETURN rslt end function public function integer uf_update_inprice (long arg_scid, long arg_inwareid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_mtrlid, ll_relid, ll_relprintid Decimal ld_qty String ls_status, ls_woodcode, ls_pcode Long ll_inprice_mode Decimal ld_planprice Decimal wfjgprice, jgprice,outcost Decimal ld_outamt Decimal ld_inamt Decimal ld_cost_price Decimal ld_fprice SELECT mtrlid, relid, relprintid, qty, status, woodcode, pcode INTO :ll_mtrlid, :ll_relid, :ll_relprintid, :ld_qty, :ls_status, :ls_woodcode, :ls_pcode FROM u_inwaremx WHERE scid = :arg_scid AND inwareid = :arg_inwareid And printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产进仓单明细信息失败,' + sqlca.SQLErrText GOTO ext END IF SELECT inprice_mode, planprice INTO :ll_inprice_mode, :ld_planprice FROM u_mtrldef Where mtrlid = :ll_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料生产进仓取价模式失败,' + sqlca.SQLErrText GOTO ext END IF IF ll_inprice_mode = 0 or ll_relid > 0 THEN // UPDATE u_inwaremx SET fprice = :ld_planprice // WHERE scid = :arg_scid // AND inwareid = :arg_inwareid // And printid = :arg_printid; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '更新生产进仓明细单价为计划价失败,' + sqlca.SQLErrText // GOTO ext // END IF ELSE SELECT TOP 1 u_mtrlprice_sum.wfjgprice, u_mtrlprice_sum.jgprice, u_mtrlprice_sum.outcost INTO :wfjgprice,:jgprice,:outcost FROM u_mtrldef INNER JOIN u_mtrlprice_sum ON u_mtrldef.mtrlid = u_mtrlprice_sum.mtrlid INNER JOIN (SELECT MAX(sumdate) AS sumdate, mtrlid, pfcode, status, woodcode, pcode FROM u_mtrlprice_sum AS u_mtrlprice_sum_1 GROUP BY mtrlid, pfcode, status, woodcode, pcode) AS v_mtrlid_sumdate ON u_mtrlprice_sum.pcode = v_mtrlid_sumdate.pcode AND u_mtrlprice_sum.woodcode = v_mtrlid_sumdate.woodcode AND u_mtrlprice_sum.status = v_mtrlid_sumdate.status AND u_mtrlprice_sum.mtrlid = v_mtrlid_sumdate.mtrlid AND u_mtrlprice_sum.pfcode = v_mtrlid_sumdate.pfcode AND u_mtrlprice_sum.sumdate = v_mtrlid_sumdate.sumdate WHERE (u_mtrlprice_sum.mtrlid = :ll_mtrlid) AND (u_mtrlprice_sum.status = :ls_status) AND (u_mtrlprice_sum.woodcode = :ls_woodcode) And (u_mtrlprice_sum.pcode = :ls_pcode); IF sqlca.SQLCode < 0 THEN rslt = 0 arg_msg = '查询物料标准外协成+标准人工+标准费用分摊失败,' + sqlca.SQLErrText GOTO ext END IF IF sqlca.SQLCode = 100 THEN wfjgprice = 0 jgprice = 0 outcost = 0 END IF IF ll_inprice_mode = 1 THEN SELECT ISNULL(SUM(u_outwaremx.qty * v_maxprice_sptprice.price),0) INTO :ld_outamt FROM u_outwaremx INNER JOIN u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid INNER JOIN v_maxprice_sptprice ON u_outwaremx.mtrlid = v_maxprice_sptprice.mtrlid AND u_outwaremx.status = v_maxprice_sptprice.status AND u_outwaremx.woodcode = v_maxprice_sptprice.woodcode AND u_outwaremx.pcode = v_maxprice_sptprice.pcode WHERE (u_outware.billtype = 3) AND (u_outwaremx.scid = :arg_scid) AND (u_outwaremx.relid = :ll_relid) AND (u_outwaremx.relprintid = :ll_relprintid) And (u_outware.flag = 1); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产进仓明细的订单明细的出仓总金额失败,' + sqlca.SQLErrText GOTO ext END IF SELECT ISNULL(SUM(u_inwaremx.cost_price * u_inwaremx.qty),0) INTO :ld_inamt FROM u_inwaremx INNER JOIN u_inware ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid WHERE (u_inware.billtype = 3) AND (u_inwaremx.scid = :arg_scid) AND (u_inwaremx.relid = :ll_relid) AND (u_inwaremx.relprintid = :ll_relprintid) AND (u_inwaremx.inwareid <> :arg_inwareid OR u_inwaremx.printid <> :arg_printid) And (u_inware.flag = 1); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产进仓明细的订单明细的其它明细进仓总金额失败,' + sqlca.SQLErrText GOTO ext END IF ld_cost_price = (ld_outamt - ld_inamt) / ld_qty ld_fprice = ld_cost_price + wfjgprice + jgprice + outcost UPDATE u_inwaremx SET cost_price = :ld_cost_price, fprice = :ld_fprice WHERE scid = :arg_scid AND inwareid = :arg_inwareid And printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '按材料领用成本更新生产进仓明细单价失败,' + sqlca.SQLErrText GOTO ext END IF ELSEIF ll_inprice_mode = 2 THEN SELECT ISNULL(SUM(u_outwaremx.qty * u_outwaremx.fprice),0) INTO :ld_outamt FROM u_outwaremx INNER JOIN u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid WHERE (u_outware.billtype = 3) AND (u_outwaremx.scid = :arg_scid) AND (u_outwaremx.relid = :ll_relid) AND (u_outwaremx.relprintid = :ll_relprintid) And (u_outware.flag = 1); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产进仓明细的订单明细的出仓总金额失败,' + sqlca.SQLErrText GOTO ext END IF SELECT ISNULL(SUM(u_inwaremx.cost_price * u_inwaremx.qty),0) INTO :ld_inamt FROM u_inwaremx INNER JOIN u_inware ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid WHERE (u_inware.billtype = 3) AND (u_inwaremx.scid = :arg_scid) AND (u_inwaremx.relid = :ll_relid) AND (u_inwaremx.relprintid = :ll_relprintid) AND (u_inwaremx.inwareid <> :arg_inwareid OR u_inwaremx.printid <> :arg_printid) And (u_inware.flag = 1); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产进仓明细的订单明细的其它明细进仓总金额失败,' + sqlca.SQLErrText GOTO ext END IF ld_cost_price = (ld_outamt - ld_inamt) / ld_qty ld_fprice = ld_cost_price + wfjgprice + jgprice + outcost UPDATE u_inwaremx SET cost_price = :ld_cost_price, fprice = :ld_fprice WHERE scid = :arg_scid AND inwareid = :arg_inwareid And printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '按材料领用成本更新生产进仓明细单价失败,' + sqlca.SQLErrText GOTO ext END IF END IF END IF ext: IF arg_ifcommit THEN IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; END IF END IF RETURN rslt end function public function integer uf_destroy_scll (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 Long i,ch Long ll_outwareid_arr[],ll_outwareid Int li_flag_arr[], li_flag String ls_outwarecode_arr[], ls_outwarecode uo_outware_scll uo_ware uo_ware = Create uo_outware_scll uo_ware.commit_transaction = commit_transaction uo_ware.if_getid_ture = False //读取单据 DECLARE getoutware CURSOR FOR SELECT outwareid , flag, outwarecode FROM u_outware WHERE billtype = 3 AND relint_1 = :arg_inwareid AND dscrp = '生产进仓单自动生成领料' Using commit_transaction; OPEN getoutware; DO WHILE commit_transaction.SQLCode = 0 FETCH getoutware Into :ll_outwareid, :li_flag, :ls_outwarecode; IF commit_transaction.SQLCode <> 0 THEN EXIT ch++ ll_outwareid_arr[ch] = ll_outwareid li_flag_arr[ch] = li_flag ls_outwarecode_arr[ch] = ls_outwarecode LOOP CLOSE getoutware; //检查审核 IF sys_option_inware_cp_autocreatescll = 0 THEN FOR i = 1 To ch IF li_flag_arr[i] = 1 THEN rslt = 0 arg_msg = "系统选项[082]限制,相关领料单["+ls_outwarecode_arr[i]+"]已审核,请手动撤审后再处理生产进仓单" GOTO ext END IF NEXT END IF //删除单据 String ls_msg FOR i = 1 To ch IF sys_option_inware_cp_autocreatescll = 1 THEN //自动撤审 IF uo_ware.getinfo(arg_scid,ll_outwareid_arr[i],arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware.c_auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF IF uo_ware.del(arg_scid,ll_outwareid_arr[i],arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF sys_option_inware_cp_autocreatescll = 1 THEN ls_msg = "生产进仓单撤审自动撤审、删除相关领料单" ELSE ls_msg = "生产进仓单撤审自动删除相关领料单" END IF if f_setsysoplog('领料单',ls_msg+',id:'+String(ll_outwareid_arr[i])+',code:'+ls_outwarecode_arr[i],arg_msg,False) = 0 then rslt = 0 goto ext end if NEXT ext: Destroy uo_ware IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSE COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer auditing_end (ref string arg_msg);Long rslt = 1,cnt = 0 Long i,j,k,l //Dec new_noallocqty = 0 //Long ls_newid Long ll_storageid_arr[],ll_mtrlid_arr[],ll_storageid_bill[] Long ll_wrkgrpid_arr[],ll_wrkgrpid_bill[] Long ll_rqmtrlid_arr[], ll_rqmtrlid Dec lde_qty_arr[] uo_saletask uo_task uo_task = Create uo_saletask uo_task.commit_transaction = sqlca //Long ll_mtrlwareid FOR i = 1 To it_mxbt //更新已进仓数 IF inwaremx[i].relid > 0 THEN IF inwaremx[i].ifrel = 1 THEN //引入订单运算的ifrel=0,不需要更新销售订单完成数。 IF uo_task.addmxcmpl_assign(scid, inwaremx[i].relid, inwaremx[i].relprintid, & inwaremx[i].mtrlid, 0, inwaremx[i].qty, False, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF // 更新运算单的进仓数 UPDATE u_orderrqmtrl SET inqty = inqty + :inwaremx[i].qty WHERE ( scid = :scid ) AND ( mtrlid = :inwaremx[i].mtrlid ) AND ( printid = :inwaremx[i].relprintid) AND (taskid = :inwaremx[i].relid) Using commit_transaction ; END IF //自动插计划价 IF sys_option_planprice_configure = 1 THEN //计划价按配置 cnt = 0 SELECT count(*) INTO :cnt FROM u_mtrl_planprice WHERE mtrlid = :inwaremx[i].mtrlid AND status = :inwaremx[i].status AND woodcode = :inwaremx[i].woodcode AND pcode = :inwaremx[i].pcode Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '行:'+String(i)+',查询是否有计划价失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN INSERT INTO u_mtrl_planprice (mtrlid, status, woodcode, pcode, planprice) VALUES (:inwaremx[i].mtrlid, :inwaremx[i].status, :inwaremx[i].woodcode, :inwaremx[i].pcode, :inwaremx[i].cost) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '行:'+String(i)+',插入计划价失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF END IF NEXT ext: it_mxbt_pf = 0 Destroy uo_task RETURN rslt end function public function integer c_auditing_end (ref string arg_msg);//==================================================================== // Function: c_auditing(arg_ifcommit,arg_msg) //-------------------------------------------------------------------- // Description: 撤审 //-------------------------------------------------------------------- // Arguments: // value boolean arg_ifcommit // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.19 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Long rslt = 1,cnt = 0,i uo_saletask uo_task uo_task = Create uo_saletask uo_task.commit_transaction = sqlca FOR i = 1 To it_mxbt //更新已进仓数 IF inwaremx[i].relid > 0 THEN IF inwaremx[i].ifrel = 1 THEN //引入订单运算的ifrel=0,不需要更新销售订单完成数。 IF uo_task.addmxcmpl_assign(scid, inwaremx[i].relid, inwaremx[i].relprintid, & inwaremx[i].mtrlid, 0, 0 - inwaremx[i].qty, False, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF // IF uo_task.updateassignqty(scid,inwaremx[i].relid,inwaremx[i].relprintid,0 - inwaremx[i].qty,arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext // END IF // 更新运算单的进仓数 UPDATE u_orderrqmtrl SET inqty = inqty - :inwaremx[i].qty WHERE ( scid = :scid ) AND ( mtrlid = :inwaremx[i].mtrlid ) AND ( printid = :inwaremx[i].relprintid) AND (taskid = :inwaremx[i].relid) Using commit_transaction ; END IF NEXT /// //删除自动生成领料单 IF uf_destroy_scll(scid, inwareid, arg_msg, False) = 0 THEN rslt = 0 GOTO ext END IF ext: Destroy uo_task RETURN rslt end function public function integer uf_create_scll (long arg_scid, long arg_billid, string arg_billcode, ref string arg_msg);//uf_create_scll(arg_scid,arg_billid,arg_billcode,arg_storageid,arg_storageid_arr,arg_mtrlid_arr,arg_qty_arr,arg_msg) Long rslt = 1 Long i, j,k,l,pid, ll_cnt, ll_cnt_2 String ls_mtrlcode,ls_storagename,ls_unit Long ll_rqmtrlid Long ll_taskid, ll_printid, ll_ifrel Long ll_outwareid Long ll_storageid_arr[], ll_wrkgrpid_arr[], ll_mtrlid_arr[],ll_rqmtrlid_arr[],ll_storageid_bill[], ll_wrkgrpid_bill[] Decimal lde_qty_arr[], lde_add_DstrQty, lde_trueRqqty, lde_DstrQty uo_outware_scll uo_ware uo_ware = Create uo_outware_scll uo_ware.commit_transaction = commit_transaction s_mtrlware_fk s_fk, s_fk_null s_inware_cp_fkmx s_fpmx,s_null FOR i = 1 To it_mxbt //// //获取产品反扣物料资料 s_fpmx = s_null IF uf_get_pfmtrlmx(inwaremx[i].mtrlid,inwaremx[i].qty,s_fpmx,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //汇总需领料的物料 FOR j = 1 To UpperBound(s_fpmx.storageid) ll_rqmtrlid = 0 IF inwaremx[i].relid > 0 THEN SELECT rqmtrlid INTO :ll_rqmtrlid FROM u_saleRqMtrl_scll WHERE taskID = :inwaremx[i].relid AND printid = :inwaremx[i].relprintid And mtrlid = :s_fpmx.mtrlid[j]; IF sqlca.SQLCode <> 0 THEN ll_rqmtrlid = 0 END IF END IF //统计物料 FOR k = 1 To UpperBound(ll_storageid_arr) IF ll_storageid_arr[k] = s_fpmx.storageid[j] And & ll_mtrlid_arr[k] = s_fpmx.mtrlid[j] And & ll_wrkgrpid_arr[k] = s_fpmx.wrkgrpid[j] And & ll_rqmtrlid_arr[k] = ll_rqmtrlid THEN lde_qty_arr[k] = lde_qty_arr[k] + s_fpmx.qty[j] GOTO nxt END IF NEXT ll_cnt++ ll_storageid_arr[ll_cnt] = s_fpmx.storageid[j] ll_wrkgrpid_arr[ll_cnt] = s_fpmx.wrkgrpid[j] ll_mtrlid_arr[ll_cnt] = s_fpmx.mtrlid[j] ll_rqmtrlid_arr[ll_cnt] = ll_rqmtrlid lde_qty_arr[ll_cnt] = s_fpmx.qty[j] nxt: //统计仓库 FOR k = 1 To UpperBound(ll_storageid_bill) IF ll_storageid_bill[k] = s_fpmx.storageid[j] And ll_wrkgrpid_bill[k] = s_fpmx.wrkgrpid[j] THEN GOTO nxt2 END IF NEXT ll_cnt_2++ ll_storageid_bill[ll_cnt_2] = s_fpmx.storageid[j] ll_wrkgrpid_bill[ll_cnt_2] = s_fpmx.wrkgrpid[j] nxt2: NEXT NEXT //按仓库, 工作中心 生成领料单 FOR i = 1 To UpperBound(ll_storageid_bill) pid = 0 IF uo_ware.newbegin(arg_scid,3,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_ware.outdate = DateTime(Today(),Now()) uo_ware.outrep = publ_operator uo_ware.dscrp = '生产进仓单自动生成领料' uo_ware.storageid = ll_storageid_bill[i] uo_ware.relid = ll_wrkgrpid_bill[i] /// //领料组、工作中心ID uo_ware.relint_1 = arg_billid uo_ware.part = arg_billcode SELECT storagename INTO :ls_storagename FROM u_storage WHERE storageid = :ll_storageid_bill[i] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询仓库资料失败' GOTO ext END IF FOR j = 1 To UpperBound(ll_storageid_arr) IF ll_storageid_arr[j] = ll_storageid_bill[i] And ll_wrkgrpid_arr[j] = ll_wrkgrpid_bill[i] THEN s_fk = s_fk_null ll_rqmtrlid = 0 ll_taskid = 0 ll_printid = 0 ll_ifrel = 0 IF ll_rqmtrlid_arr[j] > 0 THEN SELECT taskID, printid,trueRqqty , DstrQty INTO :ll_taskid, :ll_printid, :lde_trueRqqty, :lde_DstrQty FROM u_saleRqMtrl_scll Where rqmtrlid = :ll_rqmtrlid_arr[j] Using commit_transaction; IF commit_transaction.SQLCode = 0 THEN ll_rqmtrlid = ll_rqmtrlid_arr[j] ll_ifrel = 1 END IF END IF SELECT mtrlcode,unit INTO :ls_mtrlcode,:ls_unit FROM u_mtrldef Where mtrlid = :ll_mtrlid_arr[j] Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料资料失败' GOTO ext END IF lde_add_DstrQty = lde_qty_arr[j] IF ll_ifrel = 1 THEN IF lde_add_DstrQty > lde_trueRqqty - lde_DstrQty THEN lde_add_DstrQty = lde_trueRqqty - lde_DstrQty END IF END IF IF lde_add_DstrQty > 0 THEN IF uf_get_mtrlware( ll_storageid_bill[i],ll_mtrlid_arr[j],lde_add_DstrQty,ls_mtrlcode,ls_storagename,s_fk,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF FOR k = 1 To UpperBound(s_fk.mtrlwareid) pid++ IF uo_ware.acceptmx(s_fk.mtrlwareid[k],& s_fk.qty[k], s_fk.addqty[k], s_fk.cost[k],1,& '',pid,arg_msg,ll_ifrel,ll_taskid,ll_printid,ll_rqmtrlid,& 0,0,0,& ls_unit,1,'','') = 0 THEN rslt = 0 GOTO ext END IF NEXT END IF END IF NEXT IF uo_ware.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF sys_option_inware_cp_autocreatescll = 1 THEN ll_outwareid = uo_ware.outwareid IF uo_ware.getinfo(arg_scid,ll_outwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware.auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT ////// //建立自动反扣领料单 //IF UpperBound(ll_storageid_bill) > 0 THEN // FOR i = 1 To UpperBound(ll_storageid_bill) // IF uf_create_scll(scid,inwareid,inwarecode,ll_storageid_bill[i],ll_wrkgrpid_bill[i],ll_storageid_arr,ll_wrkgrpid_arr,ll_mtrlid_arr,lde_qty_arr,arg_msg,ll_rqmtrlid_arr) = 0 THEN // rslt = 0 // GOTO ext // END IF // NEXT //END IF // //FOR i = 1 To it_mxbt // IF uf_update_inprice (scid, inwareid, inwaremx[i].printid, arg_msg, False) <> 1 THEN // rslt = 0 // GOTO ext // END IF //NEXT //IF uo_ware.newbegin(arg_scid,3,arg_msg) = 0 THEN // rslt = 0 // GOTO ext //END IF // //uo_ware.outdate = DateTime(Today(),Now()) //uo_ware.outrep = publ_operator //uo_ware.dscrp = '生产进仓单自动生成领料' //uo_ware.storageid = arg_storageid //uo_ware.relid = arg_wrkgrpid /// //领料组、工作中心ID //uo_ware.relint_1 = arg_billid //uo_ware.part = arg_billcode // //FOR i = 1 To UpperBound(arg_storageid_arr) // IF arg_storageid_arr[i] = arg_storageid And arg_wrkgrpid_arr[i] = arg_wrkgrpid THEN // ll_rqmtrlid = 0 // ll_taskid = 0 // ll_printid = 0 // ll_ifrel = 0 // // IF arg_rqmtrlid_arr[i] > 0 THEN // SELECT taskID, printid // INTO :ll_taskid, :ll_printid // FROM u_saleRqMtrl_scll // Where rqmtrlid = :arg_rqmtrlid_arr[i]; // IF sqlca.SQLCode = 0 THEN // ll_rqmtrlid = arg_rqmtrlid_arr[i] // ll_ifrel = 1 // END IF // // END IF // // SELECT mtrlcode,unit // INTO :arg_mtrlcode,:arg_unit // FROM u_mtrldef // Where mtrlid = :arg_mtrlid_arr[i] Using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询物料资料失败' // GOTO ext // END IF // // SELECT storagename // INTO :arg_storagename // FROM u_storage // Where storageid = :arg_storageid; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询仓库资料失败' // GOTO ext // END IF // // IF uf_get_mtrlware(arg_storageid,arg_mtrlid_arr[i],arg_qty_arr[i],arg_mtrlcode,arg_storagename,s_fk,arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF // // IF UpperBound(s_fk.mtrlwareid) > 0 THEN // FOR k = 1 To UpperBound(s_fk.mtrlwareid) // pid++ // IF uo_ware.acceptmx(s_fk.mtrlwareid[k],& // s_fk.qty[k], s_fk.addqty[k], s_fk.cost[k],1,& // '',pid,arg_msg,ll_ifrel,ll_taskid,ll_printid,ll_rqmtrlid,0,0,0,& // arg_unit,1,'','') = 0 THEN // rslt = 0 // GOTO ext // END IF // NEXT // END IF // // END IF //NEXT // //IF uo_ware.Save(False,arg_msg) = 0 THEN // rslt = 0 // GOTO ext //END IF // // // //IF sys_option_inware_cp_autocreatescll = 1 THEN // ll_outwareid = uo_ware.outwareid // // IF uo_ware.getinfo(arg_scid,ll_outwareid,arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF // // IF uo_ware.auditing(False,arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF //END IF ext: Destroy uo_ware RETURN rslt end function public function integer auditing_chk (ref string arg_msg);Long rslt = 1 Long i IF sys_option_hide_ware = 0 THEN IF billtype <> 9 THEN IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ELSE IF Not sysautobuild THEN IF dscrp = '盘点表审核自动生成盘盈单' THEN arg_msg = '系统自动生成的单据不能手动审核' rslt = 0 GOTO ext END IF END IF END IF END IF //// //建立自动反扣领料单 IF uf_create_scll(scid,inwareid,inwarecode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uf_update_inware_cost ( arg_msg, False) <> 1 THEN rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer uf_update_inware_cost (ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 long i Long ll_inprice_mode Decimal ld_planprice Decimal wfjgprice, jgprice,outcost Decimal ld_outamt Decimal ld_inamt Decimal ld_cost_price Decimal ld_fprice FOR i = 1 To it_mxbt SELECT inprice_mode, planprice INTO :ll_inprice_mode, :ld_planprice FROM u_mtrldef Where mtrlid = :inwaremx[i].mtrlid using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料生产进仓取价模式失败,' + commit_transaction.SQLErrText GOTO ext END IF // ll_inprice_mode 进仓成本模式; 0-取计划价; 1-按领用材料最新采购价; 2-按领用材料出仓成本价 //MEI: //1/ 当取计划价时都跳过 //2/选项为0时,都更新 //3/选项为1时只有不选订单才更新 IF ll_inprice_mode = 0 THEN //取计划价 CONTINUE END IF IF sys_option_inwarecp_saleprice = 1 AND inwaremx[i].ifrel = 1 THEN //选项选比率,且有订单,不更新 CONTINUE END IF SELECT TOP 1 u_mtrlprice_sum.wfjgprice, u_mtrlprice_sum.jgprice, u_mtrlprice_sum.outcost INTO :wfjgprice,:jgprice,:outcost FROM u_mtrldef INNER JOIN u_mtrlprice_sum ON u_mtrldef.mtrlid = u_mtrlprice_sum.mtrlid INNER JOIN (SELECT MAX(sumdate) AS sumdate, mtrlid, pfcode, status, woodcode, pcode FROM u_mtrlprice_sum AS u_mtrlprice_sum_1 GROUP BY mtrlid, pfcode, status, woodcode, pcode) AS v_mtrlid_sumdate ON u_mtrlprice_sum.status = v_mtrlid_sumdate.status AND u_mtrlprice_sum.woodcode = v_mtrlid_sumdate.woodcode AND u_mtrlprice_sum.pcode = v_mtrlid_sumdate.pcode AND u_mtrlprice_sum.mtrlid = v_mtrlid_sumdate.mtrlid AND u_mtrlprice_sum.pfcode = v_mtrlid_sumdate.pfcode AND u_mtrlprice_sum.sumdate = v_mtrlid_sumdate.sumdate WHERE (u_mtrlprice_sum.mtrlid = :inwaremx[i].mtrlid) AND (u_mtrlprice_sum.status = :inwaremx[i].status) AND (u_mtrlprice_sum.woodcode = :inwaremx[i].woodcode) And (u_mtrlprice_sum.pcode = :inwaremx[i].pcode) using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN //统计成本 wfjgprice = 0 jgprice = 0 outcost = 0 END IF IF IsNull(wfjgprice) THEN wfjgprice = 0 IF IsNull(jgprice) THEN jgprice = 0 IF IsNull(outcost) THEN outcost = 0 IF ll_inprice_mode = 1 THEN //按领用材料最新采购价 SELECT ISNULL(SUM(u_outwaremx.qty * v_maxprice_sptprice.price),0) INTO :ld_outamt FROM u_outwaremx INNER JOIN u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid INNER JOIN v_maxprice_sptprice ON u_outwaremx.mtrlid = v_maxprice_sptprice.mtrlid AND u_outwaremx.status = v_maxprice_sptprice.status AND u_outwaremx.woodcode = v_maxprice_sptprice.woodcode AND u_outwaremx.pcode = v_maxprice_sptprice.pcode WHERE (u_outware.billtype = 3) AND (u_outwaremx.scid = :scid) AND (u_outwaremx.relid = :inwaremx[i].relid) AND (u_outwaremx.relprintid = :inwaremx[i].relprintid) using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产进仓明细的订单明细的出仓总金额失败,' + commit_transaction.SQLErrText GOTO ext END IF SELECT ISNULL(SUM(u_inwaremx.cost_price * u_inwaremx.qty),0) INTO :ld_inamt FROM u_inwaremx INNER JOIN u_inware ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid WHERE (u_inware.billtype = 3) AND (u_inwaremx.scid = :scid) AND (u_inwaremx.relid = :inwaremx[i].relid) AND (u_inwaremx.relprintid = :inwaremx[i].relprintid) AND (u_inwaremx.inwareid <> :inwareid OR u_inwaremx.printid <> :inwaremx[i].printid) And (u_inware.flag = 1) using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产进仓明细的订单明细的其它明细进仓总金额失败,' + commit_transaction.SQLErrText GOTO ext END IF ld_cost_price = (ld_outamt - ld_inamt) / inwaremx[i].qty ld_fprice = ld_cost_price + wfjgprice + jgprice + outcost ELSEIF ll_inprice_mode = 2 THEN //按领用材料出仓成本价 SELECT ISNULL(SUM(u_outwaremx.qty * u_outwaremx.fprice),0) INTO :ld_outamt FROM u_outwaremx INNER JOIN u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid WHERE (u_outware.billtype = 3) AND (u_outwaremx.scid = :scid) AND (u_outwaremx.relid = :inwaremx[i].relid) AND (u_outwaremx.relprintid = :inwaremx[i].relprintid) using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产进仓明细的订单明细的出仓总金额失败,' + commit_transaction.SQLErrText GOTO ext END IF SELECT ISNULL(SUM(u_inwaremx.cost_price * u_inwaremx.qty),0) INTO :ld_inamt FROM u_inwaremx INNER JOIN u_inware ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid WHERE (u_inware.billtype = 3) AND (u_inwaremx.scid = :scid) AND (u_inwaremx.relid = :inwaremx[i].relid) AND (u_inwaremx.relprintid = :inwaremx[i].relprintid) AND (u_inwaremx.inwareid <> :inwareid OR u_inwaremx.printid <> :inwaremx[i].printid) And (u_inware.flag = 1) using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产进仓明细的订单明细的其它明细进仓总金额失败,' + commit_transaction.SQLErrText GOTO ext END IF ld_cost_price = (ld_outamt - ld_inamt) / inwaremx[i].qty ld_fprice = ld_cost_price + wfjgprice + jgprice + outcost END IF inwaremx[i].fprice = ld_fprice inwaremx[i].cost = ld_fprice inwaremx[i].costamt = round(inwaremx[i].qty * ld_fprice, 2) UPDATE u_inwaremx SET cost_price = :ld_cost_price, fprice = :ld_fprice, cost = :ld_fprice, costamt = round(qty * :ld_fprice,2) WHERE scid = :scid AND inwareid = :inwareid And printid = :inwaremx[i].printid using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 IF ll_inprice_mode = 1 THEN arg_msg = '行:'+String(i)+',按领用材料最新采购价更新生产进仓明细单价失败,' + commit_transaction.SQLErrText ELSEIF ll_inprice_mode = 2 THEN arg_msg = '行:'+String(i)+',按领用材料出仓成本价更新生产进仓明细单价失败,' + commit_transaction.SQLErrText ELSE arg_msg = '行:'+String(i)+',更新生产进仓明细单价失败,' + commit_transaction.SQLErrText END IF GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer acceptmx (s_inwaremx s_mx, ref string arg_msg);Long rslt = 1,cnt = 0,ls_i Decimal ld_planprice,ld_cost,ld_dftsptprice Decimal ld_noauditqty,ld_bootqty String ls_relcode,ls_unit,ls_saletaskcode Int li_iflimitprice Long i Dec ld_round = 100 uo_spt_price uo_sptprice uo_sptprice = Create uo_spt_price IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF //清除空值 IF IsNull(s_mx.printid) THEN s_mx.printid = 0 IF IsNull(s_mx.mtrlid) THEN s_mx.mtrlid = 0 IF IsNull(s_mx.mtrlcode) THEN s_mx.mtrlcode = '' IF IsNull(s_mx.plancode) THEN s_mx.plancode = '' IF IsNull(s_mx.status) THEN s_mx.status = '' IF IsNull(s_mx.uqty) THEN s_mx.uqty = 0 IF IsNull(s_mx.addqty) THEN s_mx.addqty = 0 IF IsNull(s_mx.packqty) THEN s_mx.packqty = 0 IF IsNull(s_mx.uprice) THEN s_mx.uprice = 0 IF IsNull(s_mx.rebate) THEN s_mx.rebate = 0 IF IsNull(s_mx.mxdscrp) THEN s_mx.mxdscrp = '' IF IsNull(s_mx.mxdscrp2) THEN s_mx.mxdscrp2 = '' IF IsNull(s_mx.mxdscrp3) THEN s_mx.mxdscrp3 = '' IF IsNull(s_mx.mxdscrp4) THEN s_mx.mxdscrp4 = '' IF IsNull(s_mx.jgprice) THEN s_mx.jgprice = 0 IF IsNull(s_mx.ifrel) THEN s_mx.ifrel = 0 IF IsNull(s_mx.relid) THEN s_mx.relid = 0 IF IsNull(s_mx.relprintid) THEN s_mx.relprintid = 0 IF IsNull(s_mx.mxdscrp) THEN s_mx.woodcode = '' IF IsNull(s_mx.pcode) THEN s_mx.pcode = '' IF IsNull(s_mx.sptid) THEN s_mx.sptid = 0 IF IsNull(s_mx.mtrlcuscode) THEN s_mx.mtrlcuscode = '' IF IsNull(s_mx.unit) THEN s_mx.unit = '' IF IsNull(s_mx.rate) THEN s_mx.rate = 1 IF s_mx.rate = 0 THEN s_mx.rate = 1 IF IsNull(s_mx.formula) THEN s_mx.formula = '' IF IsNull(s_mx.waredscrp) THEN s_mx.waredscrp = '' IF mrate = 0 THEN mrate = 1 IF IsNull(s_mx.tax) THEN s_mx.tax = 0 IF IsNull(s_mx.buyqty) THEN s_mx.buyqty = 0 IF IsNull(s_mx.uprice_notax) THEN s_mx.uprice_notax = 0 IF s_mx.uprice_notax = 0 THEN s_mx.uprice_notax = s_mx.uprice / (1 + s_mx.tax) END IF s_mx.uqty = Round(s_mx.uqty,5) s_mx.addqty = Round(s_mx.addqty,5) IF sys_option_outware_if_buyqty = 1 And billtype = 1 THEN //采购 , 采购数与进仓数分离 ELSE //不分离 s_mx.buyqty = s_mx.uqty END IF IF s_mx.mtrlid = 0 Or (s_mx.buyqty = 0 And s_mx.uqty = 0 And s_mx.addqty = 0) THEN rslt = 1 GOTO ext END IF IF acceptmx_chk(s_mx, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //检查物料id SELECT unit,planprice,iflimitprice INTO :ls_unit,:ld_planprice,:li_iflimitprice FROM u_mtrldef Where u_mtrldef.mtrlid = :s_mx.mtrlid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "第" + String(s_mx.printid) + "行,查询物料资料信息失败,编码:"+s_mx.mtrlcode GOTO ext END IF //确实有=1的情况 //IF ls_unit <> s_mx.unit And s_mx.rate = 1 THEN // arg_msg = "第" + String(s_mx.printid) + "行,库存单位与采购单位不同,但转换率为1,请检查!" // rslt = 0 // GOTO ext //END IF IF ls_unit = s_mx.unit And s_mx.rate <> 1 THEN arg_msg = "第" + String(s_mx.printid) + "行,库存单位与采购单位相同,但转换率不为1,请检查!" rslt = 0 GOTO ext END IF //查询采购限价并检查进仓价 IF billtype = 1 Or billtype = 4 THEN IF li_iflimitprice = 1 THEN IF uo_sptprice.uf_check_price_save(thflag,sptid,s_mx.mtrlid,s_mx.mtrlcode,s_mx.unit,s_mx.status,s_mx.woodcode,s_mx.pcode,s_mx.uprice * s_mx.rebate,arg_msg) = 0 THEN arg_msg = "第" + String(s_mx.printid) + "行," + arg_msg rslt = 0 GOTO ext END IF END IF END IF Int li_if_cus_mtrlware, li_if_plancode, li_inwaretype IF sys_option_hide_ware = 0 THEN SELECT balctype , if_plancode, inwaretype INTO :li_if_cus_mtrlware, :li_if_plancode, :li_inwaretype FROM u_storage Where storageid = :storageid; IF sqlca.SQLCode <> 0 THEN arg_msg = "第" + String(s_mx.printid) + "行,查询仓库是否使用客户库存失败" rslt = 0 GOTO ext END IF END IF //关于客户库存处理,sptid Long ll_cusid Int li_bhflag IF dxflag = 0 THEN IF li_if_cus_mtrlware = 1 THEN IF billtype = 3 THEN //特殊情况 20140104 //生产进仓单,按订单进仓的产品,如果订单的客户为 备货客户, 进仓时不按客户库存; IF s_mx.ifrel > 0 THEN IF s_mx.relid = 0 THEN arg_msg = "第" + String(s_mx.printid) + '行,请先择相应的销售订单' rslt = 0 GOTO ext END IF SELECT top 1 cusid INTO :ll_cusid FROM u_saletaskmx,u_saletask WHERE u_saletaskmx.scid = u_saletask.scid AND u_saletaskmx.taskid = u_saletask.taskid AND u_saletaskmx.scid = :scid AND u_saletaskmx.taskid = :s_mx.relid AND u_saletaskmx.printid = :s_mx.relprintid AND u_saletaskmx.mtrlid = :s_mx.mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "第" + String(s_mx.printid) + '行,查询销售订单客户资料失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF // s_mx.mtrlid 以后有可能是 下级的生产物料!!!! IF IsNull(ll_cusid) THEN ll_cusid = 0 IF ll_cusid > 0 THEN SELECT bhflag INTO :li_bhflag FROM u_cust WHERE cusid = :ll_cusid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "第" + String(s_mx.printid) + '行,查询销售订单客户资料失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ELSE li_bhflag = 0 END IF IF IsNull(li_bhflag) THEN li_bhflag = 0 IF li_bhflag = 1 THEN s_mx.sptid = 0 ELSE s_mx.sptid = s_mx.sptid END IF END IF ELSE s_mx.sptid = s_mx.sptid END IF ELSE s_mx.sptid = 0 END IF ELSE IF li_if_cus_mtrlware <> 1 THEN arg_msg = "仓库没有使用客户库存,不能建立代销单据" rslt = 0 GOTO ext END IF s_mx.sptid = sptid END IF CHOOSE CASE billtype CASE 1 //采购 IF s_mx.ifrel > 0 THEN IF s_mx.relid = 0 THEN arg_msg = "第" + String(s_mx.printid) + "行,请先择相应的订单!" rslt = 0 GOTO ext END IF SELECT taskcode ,uqty - consignedqty, CASE when u_buytask.billtype = 1 THEN u_buytaskmx.relcode ELSE '' END INTO :ls_relcode,:ld_bootqty,:ls_saletaskcode FROM u_buytaskmx,u_buytask WHERE u_buytaskmx.taskid = u_buytask.taskid AND u_buytaskmx.scid = u_buytask.scid AND u_buytaskmx.scid = :scid AND u_buytaskmx.taskid = :s_mx.relid AND u_buytaskmx.printid = :s_mx.relprintid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "第" + String(s_mx.printid) + "行,查询采购订单是否有订购:"+s_mx.mtrlcode+'失败!'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF //查相关销售订单已开单数 ld_noauditqty = 0 SELECT sum(uqty) INTO :ld_noauditqty FROM u_inwaremx WHERE scid = :scid AND relid = :s_mx.relid AND relprintid = :s_mx.relprintid And inwareid <> :inwareid; IF sqlca.SQLCode <> 0 THEN arg_msg = "第" + String(s_mx.printid) + "行,查询"+s_mx.mtrlcode+'相关订单单据已开单数失败!' rslt = 0 GOTO ext END IF IF IsNull(ld_noauditqty) THEN ld_noauditqty = 0 ELSE s_mx.relid = 0 s_mx.relprintid = 0 END IF CASE 3 //生产 IF s_mx.ifrel > 0 THEN IF s_mx.relid = 0 THEN arg_msg = "第" + String(s_mx.printid) + '行,请先择相应的销售订单' rslt = 0 GOTO ext END IF SELECT top 1 taskcode INTO :ls_relcode FROM u_saletaskmx,u_saletask WHERE u_saletaskmx.scid = u_saletask.scid AND u_saletaskmx.taskid = u_saletask.taskid AND u_saletaskmx.scid = :scid AND u_saletaskmx.taskid = :s_mx.relid AND u_saletaskmx.printid = :s_mx.relprintid AND u_saletaskmx.mtrlid = :s_mx.mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "第" + String(s_mx.printid) + '行,查询销售订单是否有排产:'+s_mx.mtrlcode+'失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ELSE // s_mx.relid = 0 // s_mx.relprintid = 0 END IF IF s_mx.ifrel = 0 and s_mx.relid > 0 THEN Decimal ld_noqty,ld_readyqty SELECT u_orderrqmtrl.truerqqty - u_orderrqmtrl.inqty - ISNULL(notmp.noauditqty, 0) AS noqty INTO :ld_noqty FROM u_OrderRqMtrl LEFT JOIN u_OrderRqMtrl_tree ON u_OrderRqMtrl.scid = u_OrderRqMtrl_tree.scid AND u_OrderRqMtrl.taskid = u_OrderRqMtrl_tree.taskid AND u_OrderRqMtrl.printid = u_OrderRqMtrl_tree.printid AND u_OrderRqMtrl.mtrlid = u_OrderRqMtrl_tree.mtrlid LEFT JOIN ( SELECT u_inwaremx.mtrlid ,u_inwaremx.scid ,u_inwaremx.relid ,u_inwaremx.relprintid ,SUM(u_inwaremx.qty) AS noauditqty FROM u_inware INNER JOIN u_inwaremx ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid WHERE (u_inware.billtype = 3) AND (u_inware.flag = 0) AND (u_inware.scid = :scid) AND (u_inware.inwareid <> :inwareid) GROUP BY u_inwaremx.mtrlid ,u_inwaremx.scid ,u_inwaremx.relid ,u_inwaremx.relprintid ) AS notmp ON u_OrderRqMtrl.scid = notmp.scid AND u_OrderRqMtrl.taskid = notmp.relid AND u_OrderRqMtrl.printid = notmp.relprintid AND u_OrderRqMtrl.mtrlid = notmp.mtrlid WHERE u_orderrqmtrl_tree.lp <> 0 AND (u_OrderRqMtrl_tree.plantype = 4 OR u_OrderRqMtrl_tree.plantype = 0) AND u_OrderRqMtrl.scid = :scid AND u_OrderRqMtrl.taskid = :s_mx.relid AND u_OrderRqMtrl.printid = :s_mx.relprintid AND u_OrderRqMtrl.mtrlid = :s_mx.mtrlid Using commit_transaction; IF SQLCA.SQLCODE <> 0 THEN arg_msg = "第" + String(s_mx.printid) + '行,查询需求明细失败:'+s_mx.mtrlcode+'失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ld_readyqty = s_mx.uqty for i = 1 to it_mxbt IF inwaremx[i].ifrel = 0 THEN IF inwaremx[i].relid = s_mx.relid and inwaremx[i].relprintid = s_mx.relprintid and inwaremx[i].mtrlid = s_mx.mtrlid THEN ld_readyqty +=inwaremx[i].uqty END IF END IF next IF ld_readyqty > ld_noqty THEN arg_msg = "第" + String(s_mx.printid) + '行,本次开单数'+String(ld_readyqty,"#,##0.00##")+'不能大于未开单数'+String(ld_noqty,"#,##0.00##") rslt = 0 GOTO ext END IF END IF ///判断是否超数量 CASE 4 //外协 IF s_mx.ifrel > 0 THEN IF s_mx.relid = 0 THEN arg_msg = "第" + String(s_mx.printid) + '行,请先择相应的外协订单' rslt = 0 GOTO ext END IF SELECT u_order_wfjg.taskcode, CASE when u_order_wfjg.billtype = 1 THEN u_order_wfjgmx.relcode ELSE '' END INTO :ls_relcode,:ls_saletaskcode FROM u_order_wfjgmx,u_order_wfjg WHERE u_order_wfjgmx.scid = u_order_wfjg.scid AND u_order_wfjgmx.wfjgid = u_order_wfjg.wfjgid AND u_order_wfjgmx.wfjgid = :s_mx.relid AND u_order_wfjgmx.printid = :s_mx.relprintid AND u_order_wfjgmx.mtrlid = :s_mx.mtrlid AND u_order_wfjgmx.status = :s_mx.status AND u_order_wfjgmx.woodcode = :s_mx.woodcode AND u_order_wfjgmx.pcode = :s_mx.pcode Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "第" + String(s_mx.printid) + '行,查询外协订单是否有加工:'+s_mx.mtrlcode+'失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF END CHOOSE //处理plancode storage_plancode_flag = 0 IF li_if_plancode = 0 THEN //不使用 s_mx.plancode = '' ELSE IF thflag <> 1 THEN //退货不处理 IF li_inwaretype = 1 THEN //无(不变) //inwaremx[it_mxbt].plancode = s_mx.plancode ELSEIF li_inwaretype = 2 THEN //价格 s_mx.plancode = String(Round(s_mx.uprice * s_mx.rebate,5)) ELSEIF li_inwaretype = 3 THEN //订单 IF ls_relcode <> '' And billtype = 3 THEN s_mx.plancode = ls_relcode ELSEIF ls_saletaskcode <> '' And (billtype = 1 Or billtype = 4 ) THEN s_mx.plancode = ls_saletaskcode ELSE s_mx.plancode = s_mx.plancode //(不变) END IF ELSEIF li_inwaretype = 5 THEN //进仓单号 storage_plancode_flag = 1 //仓库中是否设置了使用 “进仓单号” 作为批号 ELSEIF li_inwaretype = 6 THEN //数值 s_mx.plancode = String(s_mx.uqty,'#,##0.####') ELSEIF li_inwaretype = 7 THEN //日期时间顺序 IF s_mx.plancode = '' THEN s_mx.plancode = String(Today(), 'yymmddhhmm') + '-' + String(s_mx.printid) END IF END IF END IF //退货不处理 END IF //处理 sptmtrlname String ls_sptmtrlname IF billtype = 1 THEN IF uo_sptprice.uf_getmtrlname(sptid,s_mx.mtrlid,ls_sptmtrlname,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ELSE ls_sptmtrlname = "" END IF //处理价格=============================== //取默认报价 IF billtype = 1 THEN f_get_defsptprice(sptid,s_mx.mtrlid,s_mx.unit,s_mx.status,s_mx.pcode,s_mx.woodcode,ld_dftsptprice) ELSE ld_dftsptprice = 0 END IF //不是自动的单价 IF sysautobuild = False THEN IF s_mx.uprice * s_mx.rebate < 0 THEN //检查进仓价 rslt = 0 arg_msg = "第" + String(s_mx.printid) + '行,' + String(s_mx.mtrlcode)+" 单价错误" GOTO ext END IF END IF IF s_mx.tax < 0 THEN rslt = 0 arg_msg = "税率不能为负数" GOTO ext END IF //检查成本价调整单 Long ll_mtrlwareid IF sys_option_hide_ware = 0 THEN SELECT mtrlwareid INTO :ll_mtrlwareid FROM u_mtrlware WHERE ( mtrlid = :s_mx.mtrlid ) AND ( plancode = :s_mx.plancode ) AND ( storageid = :storageid ) AND ( scid = :scid ) AND ( status = :s_mx.status ) AND ( sptid = :s_mx.sptid) AND ( dxflag = :dxflag) AND ( woodcode = :s_mx.woodcode) AND ( pcode = :s_mx.pcode) Using commit_transaction; IF commit_transaction.SQLCode = -1 THEN arg_msg = "第" + String(s_mx.printid) + "行,查询库存信息失败!" rslt = 0 GOTO ext END IF IF IsNull(ll_mtrlwareid) THEN ll_mtrlwareid = 0 IF ll_mtrlwareid > 0 THEN IF Not (billtype = 8 And sptname = '成本价调整单审核自动生成') THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_updatecost,u_updatecostmx WHERE u_updatecost.wareid = u_updatecostmx.wareid AND u_updatecost.flag = 0 AND u_updatecostmx.mtrlwareid = :ll_mtrlwareid AND u_updatecost.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "第" + String(s_mx.printid) + "行,查询成本价调整单操作失败" GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = "第" + String(s_mx.printid) + "行," + s_mx.mtrlcode + "已开成本价调整单,请先审核" GOTO ext END IF END IF //出仓的, 查询成本价 ELSE END IF END IF //s_mx.price = Round(s_mx.enprice * mrate * s_mx.rebate,10) //进仓实价, 本位币,库存单位 s_mx.qty = Round(s_mx.uqty * s_mx.rate, sys_option_unit_dec) //库存单位,进仓数量 //写入内容 it_mxbt++ inwaremx[it_mxbt].mtrlwareid = ll_mtrlwareid inwaremx[it_mxbt].printid = s_mx.printid inwaremx[it_mxbt].mtrlid = s_mx.mtrlid inwaremx[it_mxbt].mtrlcode = s_mx.mtrlcode inwaremx[it_mxbt].unit = s_mx.unit inwaremx[it_mxbt].rate = s_mx.rate inwaremx[it_mxbt].noauditqty = ld_noauditqty inwaremx[it_mxbt].bootqty = ld_bootqty inwaremx[it_mxbt].addqty = s_mx.addqty inwaremx[it_mxbt].uqty = s_mx.uqty inwaremx[it_mxbt].qty = s_mx.qty inwaremx[it_mxbt].buyqty = s_mx.buyqty inwaremx[it_mxbt].packqty = s_mx.packqty inwaremx[it_mxbt].uprice = s_mx.uprice //进仓价, 原币, 进仓单位 IF s_mx.buyqty <> 0 THEN inwaremx[it_mxbt].fprice = Round((s_mx.uprice * s_mx.buyqty) /(Round(s_mx.buyqty * s_mx.rate,sys_option_unit_dec)) * mrate ,10) //进仓价, 本位币, 库存单位 ELSE inwaremx[it_mxbt].fprice = Round(s_mx.uprice * s_mx.rate * mrate,10) END IF inwaremx[it_mxbt].price = Round(inwaremx[it_mxbt].fprice * s_mx.rebate,10) //进仓实价, 本位币,库存单位 inwaremx[it_mxbt].rebate = s_mx.rebate inwaremx[it_mxbt].tax = s_mx.tax IF billtype = 1 THEN ld_round = 10.0 ^ (2 - sys_option_inware_buy_amt_round) IF sys_option_inware_buy_amt_round = 5 THEN ld_round = 1000 END IF inwaremx[it_mxbt].uamt = Round(s_mx.buyqty * s_mx.uprice * s_mx.rebate * ld_round, 0) / ld_round //原币,实价含税金额 inwaremx[it_mxbt].uamt_tax = Round((s_mx.buyqty * s_mx.uprice * s_mx.rebate) * s_mx.tax / (1 + s_mx.tax) * ld_round, 0) / ld_round //原币, 税金 inwaremx[it_mxbt].bsamt = Round(s_mx.buyqty * s_mx.uprice * s_mx.rebate * mrate * ld_round, 0) / ld_round //本位币, 实价含税金额 inwaremx[it_mxbt].bsamt_tax = Round((s_mx.buyqty * s_mx.uprice * s_mx.rebate * mrate) * s_mx.tax / (1 + s_mx.tax) * ld_round, 0) / ld_round //本位币, 税金 inwaremx[it_mxbt].planprice = ld_planprice inwaremx[it_mxbt].jgprice = s_mx.jgprice inwaremx[it_mxbt].mxdscrp = s_mx.mxdscrp inwaremx[it_mxbt].mxdscrp2 = s_mx.mxdscrp2 inwaremx[it_mxbt].mxdscrp3 = s_mx.mxdscrp3 inwaremx[it_mxbt].mxdscrp4 = s_mx.mxdscrp4 inwaremx[it_mxbt].dxflag = dxflag inwaremx[it_mxbt].relid = s_mx.relid inwaremx[it_mxbt].relprintid = s_mx.relprintid inwaremx[it_mxbt].ifrel = s_mx.ifrel inwaremx[it_mxbt].status = s_mx.status inwaremx[it_mxbt].woodcode = s_mx.woodcode inwaremx[it_mxbt].pcode = s_mx.pcode inwaremx[it_mxbt].relcode = ls_relcode inwaremx[it_mxbt].mtrlcuscode = s_mx.mtrlcuscode inwaremx[it_mxbt].dftsptprice = ld_dftsptprice inwaremx[it_mxbt].formula = s_mx.formula inwaremx[it_mxbt].waredscrp = s_mx.waredscrp inwaremx[it_mxbt].inworkdate = s_mx.inworkdate inwaremx[it_mxbt].plancode = s_mx.plancode inwaremx[it_mxbt].sptid = s_mx.sptid inwaremx[it_mxbt].sptmtrlname = ls_sptmtrlname //供应商别名 inwaremx[it_mxbt].uprice_notax = s_mx.uprice_notax //不含税单价 //IF sys_option_buyth_wareamt = 0 THEN // If (billtype = 1 And thflag = 1 And sys_option_buyth_wareamt = 0 ) & Or (s_mx.uqty < 0 And billtype <> 3 And billtype <> 1) THEN //采购退货单 或者 非采购/生产进仓 SELECT cost INTO :ld_cost FROM u_mtrlware WHERE scid = :scid AND mtrlid = :s_mx.mtrlid AND storageid = :storageid AND status = :s_mx.status AND plancode = :s_mx.plancode AND woodcode = :s_mx.woodcode AND pcode = :s_mx.pcode AND dxflag = :dxflag And sptid = :s_mx.sptid; IF sqlca.SQLCode <> 0 Or IsNull(ld_cost) THEN ld_cost = 0 inwaremx[it_mxbt].cost = ld_cost ELSE inwaremx[it_mxbt].cost = inwaremx[it_mxbt].fprice * s_mx.rebate END IF inwaremx[it_mxbt].costamt = Round(inwaremx[it_mxbt].cost * inwaremx[it_mxbt].qty, 2) //成本金额,库存单位 ext: Destroy uo_sptprice IF rslt = 0 THEN p_clearmx() arg_msg = billname + ',' + arg_msg END IF Return(rslt) end function public function integer save (boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1,cnt = 0,i DateTime server_dt Long ls_newid String ls_sccode IF IsNull(relid) THEN relid = 0 IF IsNull(storageid) THEN storageid = 0 IF IsNull(inrep) THEN inrep = '' IF IsNull(dscrp) THEN dscrp = '' IF IsNull(part) THEN part = '' IF IsNull(sptid) THEN sptid = 0 IF IsNull(sptname) THEN sptname = '' IF IsNull(dxflag) THEN dxflag = 0 IF IsNull(thflag) THEN thflag = 0 IF IsNull(relint_1) THEN relint_1 = 0 IF IsNull(relint_2) THEN relint_2 = 0 IF IsNull(relint_3) THEN relint_3 = 0 IF IsNull(relint_4) THEN relint_4 = 0 IF IsNull(relint_5) THEN relint_5 = 0 IF IsNull(relstr_1) THEN relstr_1 = '' IF IsNull(relstr_2) THEN relstr_2 = '' IF IsNull(relstr_3) THEN relstr_3 = '' IF IsNull(mrate) THEN mrate = 0 IF mrate = 0 THEN mrate = 1 IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以提交" GOTO ext END IF SELECT Top 1 getdate() Into :server_dt From u_user Using commit_transaction ; //取得系统时间,借用操作员表 IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF save_chk(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ////////////////////////////////////////////// //开始区分:新建/更新 处理 IF inwareid = 0 THEN //新建 ls_newid = f_sys_scidentity(scid,"u_inware","inwareid",arg_msg,if_getid_ture,commit_transaction) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF //取分部代号 IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //取得新单据编号 CHOOSE CASE billtype CASE 1,2 IF thflag = 0 THEN inwarecode = getid(scid,ls_sccode + 'CG',Date(server_dt),if_getid_ture,commit_transaction) ELSE inwarecode = getid(scid,ls_sccode + 'CT',Date(server_dt),if_getid_ture,commit_transaction) END IF CASE 3 inwarecode = getid(scid,ls_sccode + 'CP',Date(server_dt),if_getid_ture,commit_transaction) CASE 4 IF thflag = 0 THEN inwarecode = getid(scid,ls_sccode + 'WN',Date(server_dt),if_getid_ture,commit_transaction) ELSE inwarecode = getid(scid,ls_sccode + 'WH',Date(server_dt),if_getid_ture,commit_transaction) END IF CASE 8 inwarecode = getid(scid,ls_sccode + 'JC',Date(server_dt),if_getid_ture,commit_transaction) CASE 9 inwarecode = getid(scid,ls_sccode + 'PY',Date(server_dt),if_getid_ture,commit_transaction) CASE 12 inwarecode = getid(scid,ls_sccode + 'IC',Date(server_dt),if_getid_ture,commit_transaction) CASE 15 inwarecode = getid(scid,ls_sccode + 'DC',Date(server_dt),if_getid_ture,commit_transaction) CASE 20 IF thflag = 0 THEN inwarecode = getid(scid,ls_sccode + 'RI',Date(server_dt),if_getid_ture,commit_transaction) ELSE inwarecode = getid(scid,ls_sccode + 'RT',Date(server_dt),if_getid_ture,commit_transaction) END IF CASE 22 inwarecode = getid(scid,ls_sccode + 'TI',Date(server_dt),if_getid_ture,commit_transaction) END CHOOSE IF inwarecode = "err" THEN inwarecode = '' rslt = 0 arg_msg = "无法获取进仓单编号"+"~n" GOTO ext END IF INSERT INTO u_inware ( scid, inwareid, inwarecode, billtype, relid, storageid, indate, inrep, part, dscrp, sptid, sptname, thflag, dxflag, otheramt, opdate, opemp, relint_1, relint_2, relint_3, relstr_1, relstr_2, relstr_3, mrate, relint_4, relint_5) VALUES ( :scid, :ls_newid, :inwarecode, :billtype, :relid, :storageid, :indate, :inrep, :part, :dscrp, :sptid, :sptname, :thflag, :dxflag, :otheramt, :server_dt, :publ_operator, :relint_1, :relint_2, :relint_3, :relstr_1, :relstr_2, :relstr_3, :mrate, :relint_4, :relint_5) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_inware') > 0 THEN arg_msg = '插入单据资料失败,关键字ID重复' ELSEIF Pos(Lower(commit_transaction.SQLErrText),'IX_u_inware') > 0 THEN arg_msg = '插入单据资料失败,单据编号重复' ELSE arg_msg = '插入单据资料失败,'+commit_transaction.SQLErrText END IF //arg_msg = "插入操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //读取新inwareid inwareid = ls_newid ELSE //////////////////////////////////////////////// //更新 UPDATE u_inware SET billtype = :billtype, relid = :relid, storageid = :storageid, indate = :indate, inrep = :inrep, part = :part, dscrp = :dscrp, sptid = :sptid, sptname = :sptname, thflag = :thflag, dxflag = :dxflag, otheramt = :otheramt, moddate = :server_dt, modemp = :publ_operator, relint_1 = :relint_1, relint_2 = :relint_2, relint_3 = :relint_3, relstr_1 = :relstr_1, relstr_2 = :relstr_2, relstr_3 = :relstr_3, mrate = :mrate, relint_4 = :relint_4, relint_5 = :relint_5 WHERE u_inware.inwareid = :inwareid AND u_inware.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 Or commit_transaction.SQLNRows <= 0 THEN rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_inware') > 0 THEN arg_msg = '更新单据资料失败,关键字ID重复' ELSEIF Pos(Lower(commit_transaction.SQLErrText),'IX_u_inware') > 0 THEN arg_msg = '更新单据资料失败,单据编号重复' ELSE arg_msg = '更新单据资料失败,'+commit_transaction.SQLErrText END IF arg_msg = "更新单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF IF billtype > 1 Or billtype = 1 And flag = 0 THEN //删除原有明细 DELETE FROM u_inwaremx WHERE u_inwaremx.inwareid = :inwareid And u_inwaremx.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有单据明细操作失败"+"~n" GOTO ext END IF ELSE END IF END IF IF billtype > 1 Or billtype = 1 And flag = 0 THEN FOR i = 1 To it_mxbt IF storage_plancode_flag = 1 THEN //仓库中是否设置了使用 “进仓单号” 作为批号 inwaremx[i].plancode = inwarecode END IF INSERT INTO u_inwaremx (scid, inwareid, printid, mtrlid, plancode, status, qty, addqty, packqty, fprice, rebate, price, planprice, mxdscrp, mxdscrp2, mxdscrp3, mxdscrp4, jgprice, relid, relprintid, ifrel, woodcode, relcode, pcode, sptid_cusid, cost, sptmtrlname, unit, rate, uprice, uqty, bootqty, noauditqty, mtrlcuscode, dftsptprice, formula, waredscrp, inworkdate, tax, buyqty, uamt, uamt_tax, bsamt, bsamt_tax, costamt, uprice_notax) VALUES ( :scid, :inwareid, :inwaremx[i].printid, :inwaremx[i].mtrlid, :inwaremx[i].plancode, :inwaremx[i].status, :inwaremx[i].qty, :inwaremx[i].addqty, :inwaremx[i].packqty, :inwaremx[i].fprice, :inwaremx[i].rebate, :inwaremx[i].price, :inwaremx[i].planprice, :inwaremx[i].mxdscrp, :inwaremx[i].mxdscrp2, :inwaremx[i].mxdscrp3, :inwaremx[i].mxdscrp4, :inwaremx[i].jgprice, :inwaremx[i].relid, :inwaremx[i].relprintid, :inwaremx[i].ifrel, :inwaremx[i].woodcode, :inwaremx[i].relcode, :inwaremx[i].pcode, :inwaremx[i].sptid, :inwaremx[i].cost, :inwaremx[i].sptmtrlname, :inwaremx[i].unit, :inwaremx[i].rate, :inwaremx[i].uprice, :inwaremx[i].uqty, :inwaremx[i].bootqty, :inwaremx[i].noauditqty, :inwaremx[i].mtrlcuscode, :inwaremx[i].dftsptprice, :inwaremx[i].formula, :inwaremx[i].waredscrp, :inwaremx[i].inworkdate, :inwaremx[i].tax, :inwaremx[i].buyqty, :inwaremx[i].uamt, :inwaremx[i].uamt_tax, :inwaremx[i].bsamt, :inwaremx[i].bsamt_tax, :inwaremx[i].costamt, :inwaremx[i].uprice_notax) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN IF it_newbegin THEN inwareid = 0 rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_inwaremx') > 0 THEN arg_msg = '插入单据明细内容失败,关键字ID重复' ELSEIF Pos(Lower(commit_transaction.SQLErrText),'IX_u_inwaremx') > 0 THEN arg_msg = '插入单据明细内容失败,三个属性字段重复' ELSE arg_msg = '插入单据明细内容失败,'+commit_transaction.SQLErrText END IF GOTO ext END IF NEXT ELSE FOR i = 1 To it_mxbt UPDATE u_inWAREmx SET uprice = :inWAREmx[i].uprice, mxdscrp = :inwaremx[I].mxdscrp, mxdscrp2 = :inwaremx[I].mxdscrp2, mxdscrp3 = :inwaremx[I].mxdscrp3, mxdscrp4 = :inwaremx[I].mxdscrp4, fprice = :inwaremx[I].fprice, rebate = :inwaremx[I].rebate, price = :inwaremx[I].price, tax = :inwaremx[i].tax, uamt = :inwaremx[i].uamt, uamt_tax = :inwaremx[i].uamt_tax, bsamt = :inwaremx[i].bsamt, bsamt_tax = :inwaremx[i].bsamt_tax, uprice_notax =:inwaremx[i].uprice_notax WHERE ( scid = :scid AND inWAREid = :inwareid AND printid = :inwaremx[i].printid); IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新明细价格、备注操作失败"+"~n" GOTO ext END IF NEXT END IF IF save_end(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; p_clearmx() arg_msg = billname + ',' + arg_msg ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function on uo_inware_cp.create call super::create end on on uo_inware_cp.destroy call super::destroy end on