$PBExportHeader$uo_outware_sale.sru forward global type uo_outware_sale from uo_outware end type end forward global type uo_outware_sale from uo_outware end type global uo_outware_sale uo_outware_sale type variables //dec totalamt = 0 //dec getamt = 0 //int lsflag = 0 //string transcode //string carcode //string paytype // s_outwaremx_mx mx_mx[] Long it_mxmxbt = 0 s_outware_itemmx outware_itemmx[] Long it_mxbt_item = 0 end variables forward prototypes public function integer secauditing (boolean arg_ifcommit, ref string arg_msg) public function integer c_secauditing (boolean arg_ifcommit, ref string arg_msg) public function integer priceaudit (long arg_scid, long arg_outwareid, boolean arg_ifcommit, ref string arg_msg) public function integer c_priceaudit (long arg_scid, long arg_outwareid, boolean arg_ifcommit, ref string arg_msg) public function integer p_update_outdate (long arg_scid, long arg_outwareid, datetime arg_outdate, boolean arg_ifcommit, ref string arg_msg) public function integer secpriceaudit (long arg_scid, long arg_outwareid, boolean arg_ifcommit, ref string arg_msg) public function integer c_secpriceaudit (long arg_scid, long arg_outwareid, boolean arg_ifcommit, ref string arg_msg) public function integer auditing_chk (ref string arg_msg) public function integer auditing_end (ref string arg_msg) public function integer c_auditing_end (ref string arg_msg) public function integer c_auditing_chk (ref string arg_msg) public function integer acceptmxmx (s_outwaremx_mx arg_mx_mx, ref string arg_msg) public function integer createmxmx (ref string arg_msg) public function integer p_clearmx () public function integer acceptmx_item (s_outware_itemmx arg_item, ref string arg_msg) public function integer save_end (ref string arg_msg) public function integer uof_create_dismantle_install (ref string arg_msg) public function integer uof_destroy_dismantle_install (ref string arg_msg) public function integer add_fy_takerecmx () public function integer c_add_fy_takerecmx () public function integer uf_chk_assemble_qty (long arg_scid, long arg_storageid, long arg_outwareid, ref string arg_msg) public function integer auditing (boolean arg_ifcommit, ref string arg_msg) public function integer auditing_th (boolean arg_ifcommit, ref string arg_msg) public function integer uf_chk_assemble_qty2 (long arg_scid, long arg_storageid, long arg_outwareid, ref string arg_msg) end prototypes public function integer secauditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i uo_cusprice uo_update_cusprice uo_update_cusprice = Create uo_cusprice uo_musttake uo_take uo_take = Create uo_musttake String ls_mtrlname String ls_about Decimal ld_takeamt = 0,ld_msttakeamt = 0, ld_otheramt = 0,ld_taxamt,ld_takeamt_tax Long ll_moneyid IF outwareid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF it_newbegin Or it_updatebegin THEN rslt = 0 arg_msg = "编辑状态下不可以执行财务审核" GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = "单据还没有经过仓库审核" GOTO ext END IF IF secflag = 1 THEN rslt = 0 arg_msg = "单据已经过财务审核" GOTO ext END IF Int li_btype Long ll_accountsid SELECT btype,accountsid INTO :li_btype,:ll_accountsid FROM cw_banktype Where banktypeid = :relint_1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询结算方式类型失败,'+ commit_transaction.SQLErrText GOTO ext END IF SELECT count(*) INTO :cnt FROM u_user Where username = :publ_operator Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,操作员" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "操作员姓名未登记或已取消" GOTO ext END IF UPDATE u_outware SET secauditingrep = :publ_operator, secauditingdate = getdate(), secflag = 1 WHERE u_outware.outwareid = :outwareid AND flag = 1 AND secflag = 0 And scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "财务审核单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在财务审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF FOR i = 1 To it_mxbt IF uo_update_cusprice.uf_update_custprice(thflag,0,cusid,outwaremx[i].mtrlid,outwaremx[i].mtrlcode,outwaremx[i].woodcode,outwaremx[i].status,outwaremx[i].pcode,& outwareid,outwarecode,outdate,outwaremx[i].enprice,outwaremx[i].rebate,outwaremx[i].costamt,0,outwaremx[i].mxdscrp,outwaremx[i].printid,& relint_2,False,arg_msg,outwaremx[i].rate,outwaremx[i].ware_enprice,outwaremx[i].unit) = 0 THEN rslt = 0 GOTO ext END IF NEXT //附加费用 Decimal ld_otheramt_sum FOR i = 1 To it_mxbt ld_otheramt_sum += outwaremx[i].otherprice NEXT IF sum_enamt <> 0 THEN Long ll_dft_itemid_take,ll_dft_itemid_yh, ll_dft_itemid_sj IF thflag = 1 THEN ls_about = outwarecode + "退货款" IF f_get_itemid(4,ll_dft_itemid_take, arg_msg) = 0 THEN // 销售退货项目 rslt = 0 GOTO ext END IF ELSE ls_about = outwarecode + "应收款" IF f_get_itemid(1,ll_dft_itemid_take, arg_msg) = 0 THEN // 销售收款项目 rslt = 0 GOTO ext END IF END IF IF part <> "" THEN ls_about += ",相关号:"+part END IF ls_about += ',联系人:'+rel_rep //摘要增加备注 IF sys_option_sale_dscrp_sec = 1 THEN ls_about += ",备注:" + Trim(dscrp) END IF If lena(ls_about) > 255 Then ls_about = lefta(ls_about,250)+'...' //财务支持多币种 IF sys_option_mst_multimoney = 0 THEN //本位币 SELECT moneyid Into :ll_moneyid From cw_currency Where native = 1; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询本位币失败!'+commit_transaction.SQLErrText GOTO ext END IF sum_bsamt = Round(sum_bsamt , sys_saleamt_round) ld_msttakeamt = sum_bsamt - sum_bsamt_tax + ld_otheramt_sum ld_otheramt = Round(otheramt * mrate, 2) ld_taxamt = sum_bsamt_tax ELSE //原币 ll_moneyid = relint_2 sum_enamt = Round(sum_enamt , sys_saleamt_round) ld_msttakeamt = sum_enamt - sum_enamt_tax + ld_otheramt_sum //含税金额 - 税金 ld_otheramt = otheramt ld_taxamt = sum_enamt_tax END IF IF li_btype = 1 THEN IF sys_option_msttake_takeamt_secaudit = 1 THEN arg_msg = '系统选项使用了[070]客户收款单使用二级审核,只能使用客户收款单增加收款!' rslt = 0 GOTO ext END IF ld_takeamt = ld_msttakeamt - ld_otheramt + ld_taxamt //ld_takeamt_tax = ld_taxamt ELSE ld_takeamt = 0 //ld_takeamt_tax = 0 END IF IF uo_take.add_takerec(scid,cusid,outdate,outrep,ld_msttakeamt,& ld_msttakeamt,ld_takeamt,ls_about,& outwarecode,relint_1,1,publ_operator,outwareid,0,& arg_msg,False,viewdate,ll_accountsid,ll_dft_itemid_take,ll_moneyid,part) = 0 THEN rslt = 0 GOTO ext END IF //游标读费用项目 Long ii = 0,arry_saletaskid[],arry_itemid[] Decimal arry_amt[] String arry_itemname[] DECLARE fyitem CURSOR FOR SELECT u_itemdef.itemname, u_outware_itemmx.itype * u_outware_itemmx.amt, u_outware_itemmx.saletaskid, u_outware_itemmx.itemid FROM u_outware_itemmx LEFT OUTER JOIN u_itemdef ON u_outware_itemmx.itemid = u_itemdef.itemid WHERE u_outware_itemmx.scid = :scid And u_outware_itemmx.outwareid = :outwareid ; OPEN fyitem; ii++ FETCH fyitem Into :arry_itemname[ii],:arry_amt[ii],:arry_saletaskid[ii],:arry_itemid[ii]; DO WHILE sqlca.SQLCode = 0 ii++ FETCH fyitem Into :arry_itemname[ii],:arry_amt[ii],:arry_saletaskid[ii],:arry_itemid[ii]; LOOP CLOSE fyitem; //插入明细费用数据 FOR ii = 1 To UpperBound(arry_itemname) IF arry_itemname[ii] <> '' And Not IsNull(arry_itemname[ii]) and arry_amt[ii]<>0 THEN IF uo_take.add_takerecmx(scid,uo_take.ref_takeid,outwarecode,outdate,relint_1,arry_amt[ii],0,& publ_operator,outwarecode + arry_itemname[ii],outrep,3,0,arry_itemid[ii],cusid, ll_moneyid,arg_msg,False,part) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_saletask_itemmx Set amtyfh = amtyfh + :arry_amt[ii] Where scid = :scid And saletaskid = :arry_saletaskid[ii] And itemid = :arry_itemid[ii]; END IF NEXT //游标读费用项目 IF ld_taxamt <> 0 THEN ls_about = outwarecode + "税金" //撤审有用, 应收明细增加有用 IF f_get_itemid(6,ll_dft_itemid_sj, arg_msg) = 0 THEN // 销售税金项目 rslt = 0 GOTO ext END IF IF uo_take.add_takerecmx(scid,uo_take.ref_takeid,outwarecode,outdate,relint_1,ld_taxamt,ld_takeamt_tax,& publ_operator,ls_about,outrep,3,0,ll_dft_itemid_sj,cusid, ll_moneyid,arg_msg,False,part) = 0 THEN rslt = 0 GOTO ext END IF END IF IF ld_otheramt <> 0 THEN ls_about = outwarecode + sys_option_change_otheramt IF f_get_itemid(3,ll_dft_itemid_yh, arg_msg) = 0 THEN // 销售税金项目 rslt = 0 GOTO ext END IF IF uo_take.add_takerecmx(scid,uo_take.ref_takeid,outwarecode,outdate,relint_1,0 - ld_otheramt,0,& publ_operator,ls_about,outrep,3,0,ll_dft_itemid_yh,cusid, ll_moneyid,arg_msg,False,part) = 0 THEN rslt = 0 GOTO ext END IF END IF // IF ld_takeamt <> 0 THEN // ls_about = outwarecode + "结算已收" // // IF uo_take.add_takerecmx(scid,uo_take.ref_takeid,outwarecode,outdate,relint_1,0,ld_takeamt,& // publ_operator,ls_about,outrep,3,0,ll_dft_itemid_take,cusid, ll_moneyid,arg_msg,FALSE,part) = 0 THEN // rslt = 0 // GOTO ext // END IF // END IF UPDATE u_outware SET relint_3 = :uo_take.ref_takeid WHERE u_outware.outwareid = :outwareid AND scid = :scid AND flag = 1 And secflag = 1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新相关应收帐id失败' rslt = 0 GOTO ext END IF END IF secflag = 1 ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy uo_update_cusprice Destroy uo_take RETURN rslt end function public function integer c_secauditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i uo_cusprice uo_update_cusprice uo_update_cusprice = Create uo_cusprice uo_musttake uo_take uo_take = Create uo_musttake String ls_mtrlname String ls_cusname DateTime null_datetime String ls_tmpcode IF outwareid = 0 THEN rslt = 0 arG_MSG = "没有撤审对象" GOTO ext END IF IF it_newbegin Or it_updatebegin THEN rslt = 0 arG_MSG = "编辑状态下不可以执行撤审" GOTO ext END IF IF cwauditingflag = 1 THEN rslt = 0 arG_MSG = "该单据已经总账审核,不能进行财务撤审" GOTO ext END IF IF secflag = 0 THEN rslt = 0 arG_MSG = "该单据财务未审,不能进行财务撤审" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_user Where username = :publ_operator Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询操作失败,操作员" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arG_MSG = "操作员姓名未登记或已取消" GOTO ext END IF SetNull(null_datetime) UPDATE u_outware SET secAuditingrep = '', secAuditingdate = :null_datetime, secflag = 0, relint_3 = 0 WHERE u_outware.outwareid = :outwareid And scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "财务审核单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arG_MSG = "单据正在财务撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF FOR i = 1 To it_mxbt IF uo_update_cusprice.uf_del_cusprice(thflag,cusid,outwaremx[i].mtrlid,outwaremx[i].unit,outwaremx[i].status,outwaremx[i].woodcode,outwaremx[i].pcode,outwareid,outwaremx[i].printid,relint_2,False,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF NEXT Int li_btype Long ll_accountsid SELECT btype,accountsid INTO :li_btype,:ll_accountsid FROM cw_banktype Where banktypeid = :relint_1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = '查询结算方式类型失败,'+ commit_transaction.SQLErrText GOTO ext END IF IF sum_enamt <> 0 THEN Long ll_takeid, ll_listno String ls_about Boolean lb_del ll_takeid = relint_3 //==================================================================== // 修改:检查是否已开客户收款结算单 //-------------------------------------------------------------------- // 作者: lwl 日期: 2015年06月03日 SELECT count(0) INTO :cnt FROM u_Bmstamtmx INNER JOIN u_Bmstamt ON u_Bmstamtmx.Baid = u_Bmstamt.Baid WHERE (u_Bmstamt.billtype = 0) And (u_Bmstamtmx.takeid = :ll_takeid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = '查询应收帐是否已经开客户收款结算单失败,' + sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN SELECT top 1 u_Bmstamt.BaCode INTO :ls_tmpcode FROM u_Bmstamtmx INNER JOIN u_Bmstamt ON u_Bmstamtmx.Baid = u_Bmstamt.Baid WHERE (u_Bmstamt.billtype = 0) And (u_Bmstamtmx.takeid = :ll_takeid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = '查询已开客户收款结算单失败,' + sqlca.SQLErrText GOTO ext END IF rslt = 0 arG_MSG = '已开客户收款结算单['+ls_tmpcode+'],不能撤审' GOTO ext END IF //==================================================================== // IF li_btype = 1 THEN // ls_about = outwarecode + "结算已收" // // //删已收 // SELECT listno // INTO :ll_listno // FROM u_bmsttakemx // WHERE takeid = :ll_takeid // And dscrp = :ls_about // and buildtype = 3; // // IF sqlca.SQLCode <> 0 THEN // //兼容旧程序 // lb_del = False // ELSE // lb_del = True // END IF // // IF uo_take.del_takerecmx(3, ll_takeid , ll_listno,arG_MSG,False) = 0 THEN // rslt = 0 // GOTO ext // END IF // END IF IF otheramt <> 0 THEN //删优惠 ls_about = outwarecode + sys_option_change_otheramt SELECT listno INTO :ll_listno FROM u_bmsttakemx WHERE takeid = :ll_takeid AND dscrp = :ls_about And buildtype = 3; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询应收帐"+sys_option_change_otheramt+"金额明细失败,"+sqlca.SQLErrText GOTO ext END IF IF uo_take.del_takerecmx(3, ll_takeid , ll_listno,arG_MSG,False) = 0 THEN rslt = 0 GOTO ext END IF END IF IF sum_enamt_tax <> 0 THEN //删税金 ls_about = outwarecode + "税金" //删已收 SELECT listno INTO :ll_listno FROM u_bmsttakemx WHERE takeid = :ll_takeid AND dscrp = :ls_about And buildtype = 3; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询应收帐税金明细失败,"+sqlca.SQLErrText GOTO ext END IF IF uo_take.del_takerecmx(3, ll_takeid , ll_listno,arG_MSG,False) = 0 THEN rslt = 0 GOTO ext END IF END IF //删费用明细 //游标读费用项目 Long ii = 0,arry_saletaskid[],arry_itemid[] Decimal arry_amt[] String arry_itemname[] DECLARE fyitem CURSOR FOR SELECT u_itemdef.itemname, u_outware_itemmx.itype * u_outware_itemmx.amt, u_outware_itemmx.saletaskid, u_outware_itemmx.itemid FROM u_outware_itemmx LEFT OUTER JOIN u_itemdef ON u_outware_itemmx.itemid = u_itemdef.itemid WHERE u_outware_itemmx.scid = :scid And u_outware_itemmx.outwareid = :outwareid ; OPEN fyitem; ii++ FETCH fyitem Into :arry_itemname[ii],:arry_amt[ii],:arry_saletaskid[ii],:arry_itemid[ii]; DO WHILE sqlca.SQLCode = 0 ii++ FETCH fyitem Into :arry_itemname[ii],:arry_amt[ii],:arry_saletaskid[ii],:arry_itemid[ii]; LOOP CLOSE fyitem; //插入明细费用数据 FOR ii = 1 To UpperBound(arry_itemname) IF arry_itemname[ii] <> '' And Not IsNull(arry_itemname[ii]) THEN ll_listno = -1 ls_about = outwarecode + arry_itemname[ii] SELECT listno INTO :ll_listno FROM u_bmsttakemx WHERE takeid = :ll_takeid AND dscrp = :ls_about And buildtype = 3; IF ll_listno <> -1 THEN IF uo_take.del_takerecmx(3, ll_takeid , ll_listno,arG_MSG,False) = 0 THEN rslt = 0 GOTO ext END IF END IF UPDATE u_saletask_itemmx Set amtyfh = amtyfh - (:arry_amt[ii]) Where scid = :scid And saletaskid = :arry_saletaskid[ii] And itemid = :arry_itemid[ii]; END IF NEXT //游标读费用项目 //删费用明细 IF uo_take.del_takerec(scid,1,relint_3,cusid,arG_MSG,False) = 0 THEN rslt = 0 GOTO ext END IF END IF secflag = 0 ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy uo_update_cusprice Destroy uo_take RETURN rslt end function public function integer priceaudit (long arg_scid, long arg_outwareid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,i uo_cusprice uo_price IF arg_scid < 0 THEN rslt = 0 arg_msg = "错误的分部ID" GOTO ext END IF IF arg_outwareid <= 0 THEN rslt = 0 arg_msg = "没有确认对象" GOTO ext END IF if getinfo(arg_scid,arg_outwareid,arg_msg) = 0 then rslt = 0 goto ext end if IF priceflag = 1 THEN rslt = 0 arg_msg = "单据已经确认" GOTO ext END IF uo_price = create uo_cusprice FOR i = 1 TO it_mxbt IF uo_price.uf_check_price ( cusid, outwaremx[i].mtrlid, & outwaremx[i].mtrlcode,outwaremx[i].unit,outwaremx[i].status,outwaremx[i].pcode,& outwaremx[i].woodcode,relint_2,outwaremx[i].price,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT UPDATE u_outware SET priceemp = :publ_operator, pricedate = getdate(), priceflag = 1 WHERE u_outware.outwareid = :arg_outwareid AND priceflag = 0 AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在确认,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF priceflag = 1 ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF destroy uo_price RETURN rslt end function public function integer c_priceaudit (long arg_scid, long arg_outwareid, boolean arg_ifcommit, ref string arg_msg); Long rslt = 1,i DateTime null_dt uo_cusprice uo_price SetNull(null_dt) IF arg_scid < 0 THEN rslt = 0 arg_msg = "错误的分部ID" GOTO ext END IF IF arg_outwareid <= 0 THEN rslt = 0 arg_msg = "没有确认对象" GOTO ext END IF IF getinfo(arg_scid,arg_outwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF priceflag = 0 THEN rslt = 0 arg_msg = "单据还未确认,不能反确认" GOTO ext END IF IF sys_option_confirmaudit_sale = 1 THEN IF flag = 1 THEN rslt = 0 arg_msg = "销售单已仓审,不能反确认" GOTO ext END IF END IF uo_price = CREATE uo_cusprice FOR i = 1 TO it_mxbt IF uo_price.uf_check_price ( cusid, outwaremx[i].mtrlid, & outwaremx[i].mtrlcode,outwaremx[i].unit,outwaremx[i].status,& outwaremx[i].pcode,outwaremx[i].woodcode,relint_2,& outwaremx[i].price,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT UPDATE u_outware SET priceemp = '', pricedate = :null_dt, priceflag = 0 WHERE u_outware.outwareid = :arg_outwareid AND priceflag = 1 AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致反确认单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在反确认,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF priceflag = 0 ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF DESTROY uo_price RETURN rslt end function public function integer p_update_outdate (long arg_scid, long arg_outwareid, datetime arg_outdate, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 IF arg_outwareid <= 0 THEN rslt = 0 arg_msg = "错误的单据唯一码" GOTO ext END IF IF p_getinfo(arg_scid,arg_outwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF priceflag <> 1 THEN rslt = 0 arg_msg = "单据未确认" GOTO ext END IF IF flag <> 0 THEN rslt = 0 arg_msg = "单据已仓审" GOTO ext END IF IF arg_outdate < DateTime(2000-01-01,00:00:00) THEN rslt = 0 arg_msg = "销售时间错误" GOTO ext END IF UPDATE u_outware SET outdate = :arg_outdate WHERE scid = :arg_scid AND outwareid = :arg_outwareid AND priceflag = 1 And flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新单据销售时间失败,"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "更新单据销售时间失败,单据正在仓审...."+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer secpriceaudit (long arg_scid, long arg_outwareid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,i IF arg_scid < 0 THEN rslt = 0 arg_msg = "错误的分部ID" GOTO ext END IF IF arg_outwareid <= 0 THEN rslt = 0 arg_msg = "没有回单对象" GOTO ext END IF IF getinfo(arg_scid,arg_outwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF secpflag = 1 THEN rslt = 0 arg_msg = "单据已经回单" GOTO ext END IF UPDATE u_outware SET secpemp = :publ_operator, secpdate = getdate(), secpflag = 1 WHERE u_outware.outwareid = :arg_outwareid AND secpflag = 0 And scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致回单单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在回单,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF secpflag = 1 ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer c_secpriceaudit (long arg_scid, long arg_outwareid, boolean arg_ifcommit, ref string arg_msg); Long rslt = 1,i DateTime null_dt SetNull(null_dt) IF arg_scid < 0 THEN rslt = 0 arg_msg = "错误的分部ID" GOTO ext END IF IF arg_outwareid <= 0 THEN rslt = 0 arg_msg = "没有回单对象" GOTO ext END IF IF getinfo(arg_scid,arg_outwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF secpflag = 0 THEN rslt = 0 arg_msg = "单据还未回单,不能反回单" GOTO ext END IF UPDATE u_outware SET secpemp = '', secpdate = :null_dt, secpflag = 0 WHERE u_outware.outwareid = :arg_outwareid AND secpflag = 1 AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致反回单单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在反回单,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF secpflag = 0 ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer auditing_chk (ref string arg_msg);Long rslt = 1 Long i IF sys_option_confirmaudit_sale = 1 THEN IF priceflag = 0 THEN rslt = 0 arg_msg = "系统选项[025]限制,销售单要确认后才能审核" GOTO ext END IF END IF //检查定价 Decimal ld_dftsaleprice IF sys_option_outwaresale_dft_lmsaleprice = 1 THEN FOR i = 1 To it_mxbt IF outwaremx[i].dftsaleprice = 0 THEN f_get_defsaleprice(cusid,outwaremx[i].mtrlid,outwaremx[i].unit,outwaremx[i].status,outwaremx[i].pcode,outwaremx[i].woodcode,relint_2,ld_dftsaleprice,outwaremx[i].uqty) IF ld_dftsaleprice = 0 THEN rslt = 0 arg_msg = "系统选项[075]限制,行:"+String(i)+",产品编号: "+String(outwaremx[i].mtrlcode)+", 需先设定客户定价" GOTO ext END IF UPDATE u_outwaremx SET dftsaleprice = :ld_dftsaleprice WHERE scid = :scid AND outwareid = :outwareid AND printid = :outwaremx[i].printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "行:"+String(i)+",更新客户定价失败,"+commit_transaction.SQLErrText GOTO ext END IF outwaremx[i].dftsaleprice = ld_dftsaleprice END IF NEXT END IF IF sys_option_hide_ware = 0 THEN IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //自动生成组装单 IF sys_option_outware_if_di <> 0 THEN IF thflag = 0 THEN IF uof_create_dismantle_install(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF END IF ext: RETURN rslt end function public function integer auditing_end (ref string arg_msg);Long rslt = 1 Long i uo_saletask uo_task uo_task = Create uo_saletask uo_task.commit_transaction = commit_transaction FOR i = 1 To it_mxbt IF billtype = 1 And outwaremx[i].relid > 0 And outwaremx[i].ifrel = 1 THEN IF uo_task.addmxcmpl(scid,outwaremx[i].relid,outwaremx[i].relprintid,outwaremx[i].saleqty,arg_msg,False) <> 1 THEN rslt = 0 GOTO ext END IF IF uo_task.trycmplsaletask(scid,outwaremx[i].relid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT ext: Destroy uo_task RETURN rslt end function public function integer c_auditing_end (ref string arg_msg);Long rslt = 1 Long i IF sys_option_hide_ware = 0 THEN //自动删除组装单 IF sys_option_outware_if_di <> 0 THEN IF uof_destroy_dismantle_install(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF uo_saletask uo_task uo_task = Create uo_saletask uo_task.commit_transaction = commit_transaction FOR i = 1 To it_mxbt IF billtype = 1 And outwaremx[i].relid > 0 And ( outwaremx[i].ifrel = 1 or thflag = 1 ) THEN IF uo_task.addmxcmpl(scid,outwaremx[i].relid,outwaremx[i].relprintid, 0 - outwaremx[i].saleqty,arg_msg,False) <> 1 THEN rslt = 0 GOTO ext END IF IF uo_task.trycmplsaletask(scid,outwaremx[i].relid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT ext: Destroy uo_task RETURN rslt end function public function integer c_auditing_chk (ref string arg_msg);long rslt = 1 long i IF secflag = 1 THEN rslt = 0 arg_msg = "单据已经过财务审核" GOTO ext END IF 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 ext: return rslt end function public function integer acceptmxmx (s_outwaremx_mx arg_mx_mx, ref string arg_msg);Int rslt = 1 IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF IF IsNull(arg_mx_mx.scid) THEN arg_mx_mx.scid = 0 IF IsNull(arg_mx_mx.outwareid) THEN arg_mx_mx.outwareid = 0 IF IsNull(arg_mx_mx.mxprintid) THEN arg_mx_mx.mxprintid = 0 IF IsNull(arg_mx_mx.printid) THEN arg_mx_mx.printid = 0 IF IsNull(arg_mx_mx.packcode) THEN arg_mx_mx.packcode = '' IF IsNull(arg_mx_mx.packname) THEN arg_mx_mx.packname = '' IF IsNull(arg_mx_mx.packnum) THEN arg_mx_mx.packnum = 0 IF IsNull(arg_mx_mx.net_weight) THEN arg_mx_mx.net_weight = 0 IF IsNull(arg_mx_mx.gross_weight) THEN arg_mx_mx.gross_weight = 0 IF IsNull(arg_mx_mx.cubage) THEN arg_mx_mx.cubage = 0 it_mxmxbt++ mx_mx[it_mxmxbt] = arg_mx_mx ext: RETURN rslt end function public function integer createmxmx (ref string arg_msg);Int rslt = 1 s_outwaremx_mx s_mxmx[], s_empty[] Long cnt = 0 Long i, j, k = 0 FOR i = 1 To it_mxbt cnt = 1 s_mxmx = s_empty DECLARE cur1 CURSOR FOR SELECT packcode, packname, packnum, net_weight, gross_weight, cubage FROM u_mtrldef_pack WHERE mtrlid = :outwaremx[i].mtrlid ORDER BY printid Using commit_transaction; OPEN cur1; FETCH cur1 Into :s_mxmx[cnt].packcode, :s_mxmx[cnt].packname, :s_mxmx[cnt].packnum, :s_mxmx[cnt].net_weight, :s_mxmx[cnt].gross_weight, :s_mxmx[cnt].cubage; DO WHILE commit_transaction.SQLCode = 0 cnt++ FETCH cur1 Into :s_mxmx[cnt].packcode, :s_mxmx[cnt].packname, :s_mxmx[cnt].packnum, :s_mxmx[cnt].net_weight, :s_mxmx[cnt].gross_weight, :s_mxmx[cnt].cubage; LOOP cnt -- FOR j = 1 To cnt k++ s_mxmx[j].mxprintid = k s_mxmx[j].printid = outwaremx[i].printid s_mxmx[j].packnum = s_mxmx[j].packnum * outwaremx[i].qty IF acceptmxmx(s_mxmx[j], arg_msg) <> 1 THEN rslt = 0 GOTO ext END IF NEXT NEXT ext: RETURN rslt end function public function integer p_clearmx ();it_mxmxbt = 0 it_mxbt_item = 0 RETURN Super::p_clearmx() end function public function integer acceptmx_item (s_outware_itemmx arg_item, ref string arg_msg);Int rslt = 1 Long cnt cnt = 0 IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF IF IsNull(arg_item.scid) THEN arg_item.scid = 0 IF IsNull(arg_item.outwareid) THEN arg_item.outwareid = 0 IF IsNull(arg_item.printid) THEN arg_item.printid = 0 IF IsNull(arg_item.itemid) THEN arg_item.itemid = 0 IF IsNull(arg_item.amt) THEN arg_item.amt = 0 IF IsNull(arg_item.mxdscrp) THEN arg_item.mxdscrp = '' IF IsNull(arg_item.saletaskid) THEN arg_item.saletaskid = 0 IF IsNull(arg_item.saletaskprintid) THEN arg_item.saletaskprintid = 0 IF IsNull(arg_item.itype) THEN arg_item.itype =1//默认方向类型为增项 IF arg_item.itemid = 0 Or arg_item.amt = 0 THEN rslt = 1 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_itemdef Where itemid = :arg_item.itemid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询收支项目是否存在失败,'+commit_transaction.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '第'+String(arg_item.printid)+'行,收支项目不存在,请检查' GOTO ext END IF it_mxbt_item++ outware_itemmx[it_mxbt_item] = arg_item ext: IF rslt = 0 THEN p_clearmx() RETURN rslt end function public function integer save_end (ref string arg_msg);Long rslt = 1 Long i //sys_option_chk_wkd //销售发货单开单时,使用物料清单计算 未开单库存 IF sys_option_chk_wkd = 1 THEN IF uf_chk_assemble_qty2(scid,storageid,outwareid,arg_msg) = 0 THEN IF it_newbegin THEN outwareid = 0 //还原outwareid rslt = 0 GOTO ext END IF END IF IF it_newbegin THEN FOR i = 1 To it_mxmxbt INSERT INTO u_outwaremx_mx(scid, outwareid, mxprintid, printid, packcode, packname, packnum, net_weight, gross_weight, cubage) VALUES (:scid, :outwareid, :mx_mx[i].mxprintid, :mx_mx[i].printid, :mx_mx[i].packcode, :mx_mx[i].packname, :mx_mx[i].packnum, :mx_mx[i].net_weight, :mx_mx[i].gross_weight, :mx_mx[i].cubage) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN IF it_newbegin THEN outwareid = 0 //还原outwareid rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_outwaremx_mx') > 0 THEN arg_msg = '插入单据包件明细内容失败,关键字ID重复' ELSE arg_msg = '因网络或其它原因导致插入单据包件明细内容失败,'+commit_transaction.SQLErrText END IF GOTO ext END IF NEXT ELSE IF flag = 0 And priceflag = 0 THEN //删除原有包件明细 DELETE FROM u_outwaremx_mx WHERE u_outwaremx_mx.outwareid = :outwareid And u_outwaremx_mx.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有包件明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF FOR i = 1 To it_mxmxbt INSERT INTO u_outwaremx_mx(scid, outwareid, mxprintid, printid, packcode, packname, packnum, net_weight, gross_weight, cubage) VALUES (:scid, :outwareid, :mx_mx[i].mxprintid, :mx_mx[i].printid, :mx_mx[i].packcode, :mx_mx[i].packname, :mx_mx[i].packnum, :mx_mx[i].net_weight, :mx_mx[i].gross_weight, :mx_mx[i].cubage) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_outwaremx_mx') > 0 THEN arg_msg = '插入单据包件明细内容失败,关键字ID重复' ELSE arg_msg = '因网络或其它原因导致插入单据包件明细内容失败,'+commit_transaction.SQLErrText END IF GOTO ext END IF NEXT END IF DELETE FROM u_outware_itemmx WHERE u_outware_itemmx.outwareid = :outwareid And u_outware_itemmx.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有项目明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF FOR i = 1 To it_mxbt_item INSERT INTO u_outware_itemmx (scid, outwareid, printid, itemid, amt, mxdscrp, saletaskid, saletaskprintid, itype ) VALUES (:scid, :outwareid, :outware_itemmx[i].printid, :outware_itemmx[i].itemid, :outware_itemmx[i].amt, :outware_itemmx[i].mxdscrp, :outware_itemmx[i].saletaskid, :outware_itemmx[i].saletaskprintid, :outware_itemmx[i].itype ) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN IF it_newbegin THEN outwareid = 0 //还原outwareid rslt = 0 arg_msg = "因网络或其它原因导致插入费用明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT ext: RETURN rslt end function public function integer uof_create_dismantle_install (ref string arg_msg);Long rslt = 1 Long ll_j,ll_i,it_mxt = 1 String ls_mtrlcode, ls_plancode,ls_status,ls_woodcode,ls_pcode Long ll_mtrlwareid,ll_mtrlid,ll_storageid Dec ld_qty,ld_saleqty,ld_qty_b String ls_reason Long ll_cnt Decimal lde_noallocqty, lde_planprice long ll_Mtrlorigin Decimal ld_rqty,ld_mxqty Long j uo_dismantle_install uo_ware_install uo_ware_install = Create uo_dismantle_install uo_ware_install.if_getid_ture = False DataStore ds_mtrlware_di ds_mtrlware_di = create DataStore ds_mtrlware_di.dataObject = 'ds_mtrlwware_find_di' ds_mtrlware_di.SetTransObject(sqlca) ls_reason = '销售发货单:'+outwarecode+'自动组装' SELECT count(*) INTO :ll_cnt FROM u_dismantle_install WHERE reason = :ls_reason And billtype = 0; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询自动组装相关单据失败!'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_cnt > 0 THEN arg_msg = '单据已经有自动组装单!' rslt = 0 GOTO ext END IF String ls_cusname SELECT name INTO :ls_cusname FROM u_cust Where cusid = :cusid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询客户信息失败!'+sqlca.SQLErrText rslt = 0 GOTO ext END IF FOR ll_j = 1 To it_mxbt ll_mtrlwareid = outwaremx[ll_j].mtrlwareid ld_saleqty = outwaremx[ll_j].qty it_mxt = 1 SELECT u_mtrlware.mtrlid, u_mtrlware.planprice, u_mtrlware.storageid, u_mtrlware.status, u_mtrlware.woodcode, u_mtrlware.pcode, u_mtrlware.plancode, u_mtrldef.mtrlcode, u_mtrlware.noallocqty, u_mtrldef.Mtrlorigin INTO :ll_mtrlid, :lde_planprice, :ll_storageid, :ls_status, :ls_woodcode, :ls_pcode, :ls_plancode, :ls_mtrlcode, :lde_noallocqty, :ll_Mtrlorigin FROM u_mtrldef, u_mtrlware WHERE ( u_mtrldef.mtrlid = u_mtrlware.mtrlid ) And ( u_mtrlware.mtrlwareid = :ll_mtrlwareid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '第'+String(ll_j)+'行,查询物料库存信息失败.'+sqlca.SQLErrText GOTO ext END IF if sys_option_outware_if_di = 2 then if ll_Mtrlorigin = 3 then CONTINUE // 当选项为2时自动组装需要排除外协属性的物料 end if IF lde_noallocqty > 0 THEN //存在一种情况,同一张单有多行相同明细(不同订单),库存数是之前的明细组装的 IF ll_j > 1 THEN ld_qty_b = 0 FOR ll_i = 1 To ll_j - 1 IF ll_mtrlwareid = outwaremx[ll_i].mtrlwareid THEN ld_qty_b += outwaremx[ll_i].qty END IF NEXT END IF IF lde_noallocqty - ld_qty_b >= ld_saleqty THEN //足够库存的, 不需要组装 CONTINUE ELSEIF lde_noallocqty - ld_qty_b > 0 THEN //部分库存,只安装差额 ld_saleqty = outwaremx[ll_j].qty - (lde_noallocqty - ld_qty_b) END IF END IF //计算组装结构 Long ll_SonMtrlid[] String ls_pf_status[] Decimal ld_Sonscale[] int ls_Mtrlorigin[] String ls_mtrlname,ls_status_find Decimal ld_noallocqty,ld_allqty,ld_maxqty DECLARE cur_pf CURSOR FOR SELECT u_PrdPF.SonMtrlid, u_PrdPF.Sonscale, u_PrdPF.status FROM u_PrdPF Where u_PrdPF.mtrlid = :ll_mtrlid; OPEN cur_pf; FETCH cur_pf Into :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ls_pf_status[it_mxt]; DO WHILE sqlca.SQLCode = 0 it_mxt++ FETCH cur_pf Into :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ls_pf_status[it_mxt]; LOOP it_mxt = it_mxt - 1 CLOSE cur_pf; IF it_mxt = 0 THEN IF sys_option_outware_if_di <> 0 THEN //没有bom的,成功跳过 CONTINUE //elseif sys_option_outware_if_di = 2 then //没有bom的,错误提示 // rslt = 0 // arg_msg = '第'+String(ll_j)+'行,该产品没有建立组装结构,不能计算' // GOTO ext END IF END IF ld_maxqty = 1000000 FOR ll_i = 1 To it_mxt SELECT mtrlname,Mtrlorigin INTO :ls_mtrlname,:ll_Mtrlorigin FROM u_mtrldef Where mtrlid = :ll_SonMtrlid[ll_i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '第'+String(ll_j)+'行,查询产品资料失败,'+sqlca.SQLErrText GOTO ext END IF ls_Mtrlorigin[ll_i] = ll_Mtrlorigin if sys_option_outware_if_di = 2 then if ll_Mtrlorigin = 3 then CONTINUE // 当选项为2时自动组装需要排除外协属性的物料 end if IF sys_option_if_color = 1 THEN ls_status_find = ls_status ELSE ls_status_find = ls_pf_status[ll_i] END IF ld_noallocqty = 0 ld_allqty = 0 SELECT sum(noallocqty) INTO :ld_noallocqty FROM u_mtrlware WHERE storageid = :ll_storageid AND mtrlid = :ll_SonMtrlid[ll_i] And status = :ls_status_find; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '第'+String(ll_j)+'行,查询该产品组装材料'+ls_mtrlname+'的库存资料失败' GOTO ext END IF ld_allqty = ld_noallocqty/ld_Sonscale[ll_i] ld_maxqty = Min(ld_maxqty,ld_allqty) IF IsNull(ld_maxqty) THEN ld_maxqty = 0 NEXT ld_qty = Truncate ( ld_maxqty, 0 ) IF ld_saleqty > ld_qty THEN rslt = 0 arg_msg = '第'+String(ll_j)+'行,产品没有足够的组装材料库存~n'+'发货单组装数量:'+String(ld_saleqty,'#,###0.##')+',库存最大可装数:'+String(ld_qty,'#,###0.##') GOTO ext END IF String mx_status,mx_woodcode,mx_plancode,mx_pcode,mx_mtrlcode Dec mx_noallocqty,mx_cost Long mx_mtrlwareid,mx_dxflag,mx_sptid IF uo_ware_install.newbegin(0,arg_msg) = 0 THEN //新建 rslt = 0 GOTO ext END IF uo_ware_install.billdate = outdate //DateTime(Today(),Now()) // 发生时间 uo_ware_install.rep = publ_operator // 经手人 uo_ware_install.dscrp = ls_reason+","+ls_cusname //备注 uo_ware_install.reason = ls_reason //原因 uo_ware_install.storageid = ll_storageid uo_ware_install.mtrlid = ll_mtrlid uo_ware_install.mtrlwareid = ll_mtrlwareid uo_ware_install.status = ls_status uo_ware_install.woodcode = ls_woodcode uo_ware_install.pcode = ls_pcode uo_ware_install.plancode = ls_plancode uo_ware_install.qty = ld_saleqty uo_ware_install.addqty = 0 uo_ware_install.price = lde_planprice uo_ware_install.buildtype = 0 uo_ware_install.mtrlcode = ls_mtrlcode decimal lde_planprice_temp //保存时计算主表的单价的公式改为 等于明细标准数量*明细单价的合计//后改为明细单价合计 不需要*数量 lde_planprice_temp=0 Long num FOR ll_i = 1 To it_mxt if sys_option_outware_if_di = 2 then if ls_Mtrlorigin[ll_i] = 3 then CONTINUE // 当选项为2时自动组装需要排除外协属性的物料 end if IF sys_option_if_color = 1 THEN ls_status_find = ls_status ELSE ls_status_find = ls_pf_status[ll_i] END IF //清单每行全部装载数 ld_rqty = ld_saleqty * ld_Sonscale[ll_i] ds_mtrlware_di.retrieve(ll_SonMtrlid[ll_i],ll_storageid,ls_status_find) FOR j = 1 to ds_mtrlware_di.rowcount() IF ld_rqty = 0 THEN CONTINUE mx_mtrlwareid = ds_mtrlware_di.Object.mtrlwareid[j] mx_status = ds_mtrlware_di.Object.status[j] mx_woodcode = ds_mtrlware_di.Object.woodcode[j] mx_plancode = ds_mtrlware_di.Object.plancode[j] mx_pcode = ds_mtrlware_di.Object.pcode[j] mx_noallocqty = ds_mtrlware_di.Object.noallocqty[j] mx_cost = ds_mtrlware_di.Object.cost[j] mx_dxflag = ds_mtrlware_di.Object.dxflag[j] mx_sptid = ds_mtrlware_di.Object.sptid[j] mx_mtrlcode = ds_mtrlware_di.Object.mtrlcode[j] IF mx_noallocqty >= ld_rqty THEN ld_mxqty = ld_rqty ld_rqty = 0 ELSE ld_mxqty = mx_noallocqty ld_rqty = ld_rqty - mx_noallocqty END IF num++ IF uo_ware_install.acceptmx(num,& ll_storageid,& mx_mtrlwareid,& ll_SonMtrlid[ll_i],& ld_mxqty,& 0,& mx_cost,& mx_status,& mx_plancode,& mx_woodcode,& '',& mx_mtrlcode,& mx_pcode,& mx_dxflag,& mx_sptid,& arg_msg,& ld_Sonscale[ll_i]) = 0 THEN rslt = 0 GOTO ext END IF lde_planprice_temp= lde_planprice_temp + ld_mxqty * mx_cost NEXT NEXT uo_ware_install.price=lde_planprice_temp / ld_saleqty IF uo_ware_install.Save(arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware_install.getinfo(uo_ware_install.billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware_install.auditing(publ_operator,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT ext: Destroy uo_ware_install IF rslt = 0 THEN // ROLLBACK Using commit_transaction; ELSEIF rslt = 1 THEN // COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer uof_destroy_dismantle_install (ref string arg_msg);Long rslt = 1 Long ll_row,ll_ucrow, ll_j,ll_i,it_mxt = 1,i String ls_mtrlcode, ls_plancode,ls_status,ls_woodcode,ls_pcode Long ll_mtrlwareid,ll_mtrlid,ll_storageid Dec ls_noallocqty,ls_planprice,ls_cost,ld_qty,ld_saleqty String ls_reason Long ll_cnt long ll_billid, ll_billid_arr[] string ls_billcode, ls_billcode_arr[] uo_dismantle_install uo_ware_install uo_ware_install = Create uo_dismantle_install uo_ware_install.sysautobuild = true ls_reason = '销售发货单:'+outwarecode+'自动组装' //读取单据 DECLARE cur_getdi CURSOR FOR SELECT billid , billcode FROM u_dismantle_install WHERE billtype = 0 AND reason = :ls_reason Using commit_transaction; OPEN cur_getdi; DO WHILE commit_transaction.SQLCode = 0 FETCH cur_getdi Into :ll_billid, :ls_billcode; IF commit_transaction.SQLCode <> 0 THEN EXIT ll_cnt++ ll_billid_arr[ll_cnt] = ll_billid ls_billcode_arr[ll_cnt] = ls_billcode LOOP CLOSE cur_getdi; FOR ll_j = 1 To ll_cnt IF uo_ware_install.getinfo(ll_billid_arr[ll_j],arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware_install.c_auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware_install.del(ll_billid_arr[ll_j],False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT ext: destroy uo_ware_install IF rslt = 0 THEN // ROLLBACK Using commit_transaction; ELSEIF rslt = 1 THEN // COMMIT Using commit_transaction; END IF return rslt end function public function integer add_fy_takerecmx ();Long i, j, rslt = 1 Long ll_rowcnt = 0,child_row, count, ll_addmxcnt,ll_itemid,ll_saletaskid Decimal amt,sum_amt_1 = 0 datastore dw_itemmx dw_itemmx = Create datastore dw_itemmx.DataObject = 'dw_outware_itemmx_edit' dw_itemmx.SetTransObject(sqlca) dw_itemmx.Retrieve(scid,outwareid) FOR i = 1 To dw_itemmx.RowCount() ll_itemid = dw_itemmx.Object.u_outware_itemmx_itemid[i] ll_saletaskid = dw_itemmx.Object.u_outware_itemmx_saletaskid[i] amt = dw_itemmx.Object.u_outware_itemmx_amt[i] * dw_itemmx.Object.u_outware_itemmx_itype[i] sum_amt_1 = sum_amt_1 + amt UPDATE u_saletask_itemmx Set amtyfh = amtyfh + :amt Where scid = :scid And saletaskid = :ll_saletaskid And itemid = :ll_itemid; NEXT COMMIT; uo_musttake uo_take uo_take = Create uo_musttake String ls_mtrlname String ls_about,arg_msg Decimal ld_takeamt = 0,ld_msttakeamt = 0, ld_otheramt = 0,ld_taxamt,ld_takeamt_tax Long ll_moneyid,ll_accountsid,ll_dft_itemid_take,li_btype SELECT btype,accountsid INTO :li_btype,:ll_accountsid FROM cw_banktype Where banktypeid = :relint_1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询结算方式类型失败,'+ commit_transaction.SQLErrText GOTO ext END IF SELECT itemid INTO :ll_dft_itemid_take FROM u_itemdef Where dfttype = 1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询默认销售收款项目资料失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF //财务支持多币种 IF sys_option_mst_multimoney = 0 THEN //本位币 SELECT moneyid Into :ll_moneyid From cw_currency Where native = 1; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询本位币失败!'+commit_transaction.SQLErrText GOTO ext END IF ELSE //原币 ll_moneyid = relint_2 END IF ld_msttakeamt = sum_amt_1 ld_msttakeamt = sum_amt_1 ls_about = outwarecode + "的费用明细" part = 'fhd_fy' //IF uo_take.add_takerec(scid,cusid,outdate,outrep,ld_msttakeamt,& // ld_msttakeamt,ld_takeamt,ls_about,& // outwarecode,relint_1,1,publ_operator,outwareid,0,& // arg_msg,False,outdate,ll_accountsid,ll_dft_itemid_take,ll_moneyid,part) = 0 THEN // rslt = 0 // GOTO ext //END IF ext: Destroy dw_itemmx IF rslt = 0 THEN MessageBox("错误","生成费用明细失败" + arg_msg) END IF RETURN rslt end function public function integer c_add_fy_takerecmx ();Long i, j, rslt = 1 Long ll_rowcnt = 0,child_row, count, ll_addmxcnt,ll_itemid,ll_saletaskid Decimal amt datastore dw_itemmx dw_itemmx = Create datastore dw_itemmx.DataObject = 'dw_outware_itemmx_edit' dw_itemmx.SetTransObject(sqlca) dw_itemmx.Retrieve(scid,outwareid) FOR i = 1 To dw_itemmx.RowCount() ll_itemid = dw_itemmx.Object.u_outware_itemmx_itemid[i] ll_saletaskid = dw_itemmx.Object.u_outware_itemmx_saletaskid[i] amt = dw_itemmx.Object.u_outware_itemmx_amt[i] * dw_itemmx.Object.u_outware_itemmx_itype[i] UPDATE u_saletask_itemmx Set amtyfh = amtyfh - (:amt) Where scid = :scid And saletaskid = :ll_saletaskid And itemid = :ll_itemid; NEXT COMMIT; long ll_takeid string arg_msg select takeid into :ll_takeid from u_Bmsttake where u_Bmsttake.scid=:scid and u_Bmsttake.outwareid =:outwareid and u_Bmsttake.relcode='fhd_fy'; uo_musttake uo_take uo_take = Create uo_musttake //IF uo_take.del_takerec(scid,1,ll_takeid,cusid,arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext //END IF //ext: Destroy dw_itemmx IF rslt = 0 THEN MessageBox("错误","删除费用明细失败" + arg_msg) END IF RETURN rslt end function public function integer uf_chk_assemble_qty (long arg_scid, long arg_storageid, long arg_outwareid, ref string arg_msg);Int rslt = 1 Long i,j,k,new_it_mxbt Long li_flag //检查物料是否有清单 s_outwaremx temp_outwaremx[],new_outwaremx[] ,new_sonmtrl_outwaremx[],null_outwaremx[] //明细结构数组 temp_outwaremx = outwaremx Long ll_flag1 FOR i = 1 To it_mxbt FOR j = 1 To UpperBound(new_outwaremx) IF temp_outwaremx[i].mtrlwareid = new_outwaremx[j].mtrlwareid THEN new_outwaremx[j].qty = new_outwaremx[j].qty + temp_outwaremx[i].qty GOTO nxt1 END IF NEXT new_it_mxbt++ new_outwaremx[new_it_mxbt].mtrlwareid = temp_outwaremx[i].mtrlwareid new_outwaremx[new_it_mxbt].mtrlid = temp_outwaremx[i].mtrlid new_outwaremx[new_it_mxbt].qty = temp_outwaremx[i].qty new_outwaremx[new_it_mxbt].status = temp_outwaremx[i].status new_outwaremx[new_it_mxbt].woodcode = temp_outwaremx[i].woodcode new_outwaremx[new_it_mxbt].pcode = temp_outwaremx[i].pcode nxt1: NEXT Decimal i_noauditingqty = 0 //已开单未审 Decimal i_noallocqty = 0 //现库存数 Decimal i_nowbjmxqty FOR i = 1 To UpperBound(new_outwaremx) i_noauditingqty = 0 i_noallocqty = 0 //计算库存数 SELECT IsNull(u_mtrlware.noallocqty,0) Into :i_noallocqty From u_mtrlware Left Outer join uv_mtrlware_noauditingqty On ( u_mtrlware.mtrlwareid = uv_mtrlware_noauditingqty.mtrlwareid) And ( u_mtrlware.scid = uv_mtrlware_noauditingqty.scid) Inner join u_mtrldef On ( u_mtrlware.mtrlid = u_mtrldef.mtrlid ) Where ( u_mtrlware.scid = :arg_scid ) And (u_mtrlware.storageid = :arg_storageid) And ( u_mtrlware.mtrlwareid = :new_outwaremx[i].mtrlwareid ) Using commit_transaction; //计算已开单数 SELECT isnull(sum(u_outwaremx.uqty),0) INTO :i_noauditingqty FROM u_outwaremx INNER join u_outware on u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid WHERE u_outwaremx.scid = :arg_scid AND u_outware.flag = 0 AND u_outwaremx.outwareid <> :arg_outwareid AND u_outwaremx.mtrlwareid = :new_outwaremx[i].mtrlwareid Using commit_transaction; //计算上级已开未审总和 SELECT ISNULL(SUM(u_PrdPF.Sonscale * u_outwaremx.qty),0) AS sumqty INTO :i_nowbjmxqty FROM u_PrdPF INNER JOIN u_outwaremx ON u_outwaremx.mtrlid = u_PrdPF.mtrlid INNER JOIN u_outware ON u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid WHERE (u_outware.flag = 0) AND (u_PrdPF.SonMtrlid = :new_outwaremx[i].mtrlid) AND (u_PrdPF.STATUS = :new_outwaremx[i].status) AND (u_PrdPF.woodcode = :new_outwaremx[i].woodcode) AND (u_PrdPF.pcode = :new_outwaremx[i].pcode) AND u_outwaremx.scid = :arg_scid AND u_outwaremx.outwareid <> :arg_outwareid Using commit_transaction; IF SQLCA.SQLCODE <> 0 THEN i_nowbjmxqty = 0 END IF //检查是否有清单 li_flag = 0 SELECT count(*) INTO :li_flag FROM u_PrdPF Where u_PrdPF.mtrlid = :new_outwaremx[i].mtrlid; IF IsNull(li_flag) THEN li_flag = 0 IF li_flag = 0 THEN //没有清单 new_outwaremx[i].qty = new_outwaremx[i].qty + i_noauditingqty + i_nowbjmxqty ELSE new_outwaremx[i].qty = new_outwaremx[i].qty + i_noauditingqty - i_noallocqty + i_nowbjmxqty END IF NEXT //查下级物料清单 Long cur_mxt_pf Long ll_SonMtrlid[],temp_ll[] String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[],temp_str[] Decimal ld_Sonscale[] new_it_mxbt = 0 new_sonmtrl_outwaremx = null_outwaremx //物料清单汇总 FOR i = 1 To UpperBound(new_outwaremx) cur_mxt_pf = 1 ll_SonMtrlid = temp_ll ls_pf_status = temp_str ls_pf_woodcode = temp_str ls_pf_pcode = temp_str li_flag = 0 SELECT count(*) INTO :li_flag FROM u_PrdPF Where u_PrdPF.mtrlid = :new_outwaremx[i].mtrlid; IF IsNull(li_flag) THEN li_flag = 0 IF li_flag = 0 THEN //没有清单 FOR k = 1 To UpperBound(new_sonmtrl_outwaremx) IF new_sonmtrl_outwaremx[k].mtrlid = new_outwaremx[i].mtrlid And new_sonmtrl_outwaremx[k].status = new_outwaremx[i].status And new_sonmtrl_outwaremx[k].woodcode = new_outwaremx[i].woodcode And new_sonmtrl_outwaremx[k].pcode = new_outwaremx[i].pcode THEN new_sonmtrl_outwaremx[k].qty = new_sonmtrl_outwaremx[k].qty + new_outwaremx[i].qty GOTO nxt0 END IF NEXT new_it_mxbt++ new_sonmtrl_outwaremx[new_it_mxbt].mtrlid = new_outwaremx[i].mtrlid new_sonmtrl_outwaremx[new_it_mxbt].qty = new_outwaremx[i].qty new_sonmtrl_outwaremx[new_it_mxbt].status = new_outwaremx[i].status new_sonmtrl_outwaremx[new_it_mxbt].woodcode = new_outwaremx[i].woodcode new_sonmtrl_outwaremx[new_it_mxbt].pcode = new_outwaremx[i].pcode nxt0: END IF //没有清单 IF li_flag <> 0 THEN //有清单 DECLARE cur_pf CURSOR FOR SELECT u_PrdPF.SonMtrlid, u_PrdPF.Sonscale, u_PrdPF.status, u_PrdPF.woodcode, u_PrdPF.pcode FROM u_PrdPF Where u_PrdPF.mtrlid = :new_outwaremx[i].mtrlid; OPEN cur_pf; FETCH cur_pf Into :ll_SonMtrlid[cur_mxt_pf],:ld_Sonscale[cur_mxt_pf],:ls_pf_status[cur_mxt_pf],:ls_pf_woodcode[cur_mxt_pf],:ls_pf_pcode[cur_mxt_pf]; DO WHILE sqlca.SQLCode = 0 cur_mxt_pf++ FETCH cur_pf Into :ll_SonMtrlid[cur_mxt_pf],:ld_Sonscale[cur_mxt_pf],:ls_pf_status[cur_mxt_pf],:ls_pf_woodcode[cur_mxt_pf],:ls_pf_pcode[cur_mxt_pf]; LOOP cur_mxt_pf = cur_mxt_pf - 1 CLOSE cur_pf; //物料清单 放到新数组 FOR j = 1 To cur_mxt_pf FOR k = 1 To UpperBound(new_sonmtrl_outwaremx) IF new_sonmtrl_outwaremx[k].mtrlid = ll_SonMtrlid[j] And new_sonmtrl_outwaremx[k].status = ls_pf_status[j] And new_sonmtrl_outwaremx[k].woodcode = ls_pf_woodcode[j] And new_sonmtrl_outwaremx[k].pcode = ls_pf_pcode[j] THEN new_sonmtrl_outwaremx[k].qty = new_sonmtrl_outwaremx[k].qty + ld_Sonscale[j] * new_outwaremx[i].qty GOTO nxt2 END IF NEXT new_it_mxbt++ new_sonmtrl_outwaremx[new_it_mxbt].mtrlid = ll_SonMtrlid[j] new_sonmtrl_outwaremx[new_it_mxbt].qty = ld_Sonscale[j] * new_outwaremx[i].qty new_sonmtrl_outwaremx[new_it_mxbt].status = ls_pf_status[j] new_sonmtrl_outwaremx[new_it_mxbt].woodcode = ls_pf_woodcode[j] new_sonmtrl_outwaremx[new_it_mxbt].pcode = ls_pf_pcode[j] NEXT END IF //有清单 nxt2: NEXT //检查下级清单够不够库存 String ls_mtrlcode,ls_mtrlname Decimal ld_compareqty FOR i = 1 To UpperBound(new_sonmtrl_outwaremx) i_noallocqty = 0 ls_mtrlcode = '' ls_mtrlname = '' //计算库存数 SELECT u_mtrldef.mtrlcode, u_mtrldef.mtrlname, IsNull(sum(u_mtrlware.noallocqty),0) Into :ls_mtrlcode, :ls_mtrlname, :i_noallocqty From u_mtrlware Left Outer join uv_mtrlware_noauditingqty On ( u_mtrlware.mtrlwareid = uv_mtrlware_noauditingqty.mtrlwareid) And ( u_mtrlware.scid = uv_mtrlware_noauditingqty.scid) Inner join u_mtrldef On ( u_mtrlware.mtrlid = u_mtrldef.mtrlid ) Where ( u_mtrlware.scid = :arg_scid ) And (u_mtrlware.storageid = :arg_storageid) And ( u_mtrlware.mtrlid = :new_sonmtrl_outwaremx[i].mtrlid ) And ( u_mtrlware.status = :new_sonmtrl_outwaremx[i].status ) And ( u_mtrlware.woodcode = :new_sonmtrl_outwaremx[i].woodcode ) And ( u_mtrlware.pcode = :new_sonmtrl_outwaremx[i].pcode ) Group By u_mtrldef.mtrlcode, u_mtrldef.mtrlname Using commit_transaction; //计算下级已开单数 SELECT isnull(sum(u_outwaremx.uqty),0) INTO :i_noauditingqty FROM u_outwaremx INNER join u_outware on u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid WHERE u_outwaremx.scid = :arg_scid AND u_outware.flag = 0 AND u_outwaremx.outwareid <> :arg_outwareid And ( u_outwaremx.scid = :arg_scid ) And ( u_outwaremx.mtrlid = :new_sonmtrl_outwaremx[i].mtrlid ) And ( u_outwaremx.status = :new_sonmtrl_outwaremx[i].status ) And ( u_outwaremx.woodcode = :new_sonmtrl_outwaremx[i].woodcode ) And ( u_outwaremx.pcode = :new_sonmtrl_outwaremx[i].pcode ) Using commit_transaction; //计算上级已开未审总和 SELECT ISNULL(SUM(u_PrdPF.Sonscale * u_outwaremx.qty),0) AS sumqty INTO :i_nowbjmxqty FROM u_PrdPF INNER JOIN u_outwaremx ON u_outwaremx.mtrlid = u_PrdPF.mtrlid INNER JOIN u_outware ON u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid WHERE (u_outware.flag = 0) AND (u_PrdPF.SonMtrlid = :new_sonmtrl_outwaremx[i].mtrlid) AND (u_PrdPF.STATUS = :new_sonmtrl_outwaremx[i].status) AND (u_PrdPF.woodcode = :new_sonmtrl_outwaremx[i].woodcode) AND (u_PrdPF.pcode = :new_sonmtrl_outwaremx[i].pcode) AND u_outwaremx.scid = :arg_scid AND u_outwaremx.outwareid <> :arg_outwareid Using commit_transaction; IF SQLCA.SQLCODE <> 0 THEN i_nowbjmxqty = 0 END IF ld_compareqty = i_noallocqty - i_noauditingqty - i_nowbjmxqty IF new_sonmtrl_outwaremx[i].qty > ld_compareqty THEN IF arg_msg = '' THEN arg_msg = '物料编码:' + String(ls_mtrlcode) + ' 物料名称:' + String(ls_mtrlname) + ' 总需求数(本单+其他已开单):' + String(new_sonmtrl_outwaremx[i].qty,'#,##0.00') + ' 当前库存数(扣减已开单未审):' + String(ld_compareqty,'#,##0.00') + ' 还差:' + String(new_sonmtrl_outwaremx[i].qty - ld_compareqty,'#,##0.00') + '~r~n' ELSE arg_msg = arg_msg + '~r~n' + '物料编码:' + String(ls_mtrlcode) + ' 物料名称:' + String(ls_mtrlname) + ' 总需求数(本单+其他已开单):' + String(new_sonmtrl_outwaremx[i].qty,'#,##0.00') + ' 当前库存数(扣减已开单未审):' + String(ld_compareqty,'#,##0.00') + ' 还差:' + String(new_sonmtrl_outwaremx[i].qty - ld_compareqty,'#,##0.00') + '~r~n' END IF END IF NEXT IF arg_msg <> '' THEN rslt = 0 END IF RETURN rslt // //数量相关的检查 // //*****检查大于未开数不可以开单 // IF billtype <> 9 THEN//盘亏单不检查 // IF flag = 0 THEN // // Decimal ld_mx_qty //本单当前累计数量 // Decimal ol_mtrl_qty = 0 //本单保存前开单数量 // Int ls_noallocflag // // IF s_mx.uqty > 0 THEN // SELECT noallocflag INTO :ls_noallocflag // FROM u_storage // Where storageid = :storageid; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询仓库允许使用未开单库存属性失败'+sqlca.SQLErrText // GOTO ext // END IF // // IF ls_noallocflag = 1 THEN // // IF it_updatebegin THEN //修改 // SELECT sum(u_outwaremx.qty) // INTO :ol_mtrl_qty // FROM u_outwaremx // WHERE u_outwaremx.outwareid = :outwareid // AND u_outwaremx.mtrlwareid = :s_mx.mtrlwareid // And scid = :scid; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '第' + String(s_mx.printid) + '行,查询原开单数量失败' // GOTO ext // END IF // if isnull(ol_mtrl_qty) then ol_mtrl_qty = 0 // END IF //IF it_updatebegin THEN //修改 // // FOR ll_i = 1 To it_mxbt // IF s_mx.mtrlwareid = outwaremx[ll_i].mtrlwareid THEN // ld_mx_qty = ld_mx_qty + outwaremx[ll_i].qty // END IF // NEXT // // ld_mx_qty = ld_mx_qty + Round(s_mx.uqty * s_mx.rate,sys_option_unit_dec_sale) //s_mx.qty // // // IF ld_mx_qty > ( i_allouseqty + ol_mtrl_qty ) THEN // rslt = 0 // arg_msg = '第' + String(s_mx.printid) + '行,' + String(i_mtrlcode)+"库存未开单数不够,不能开单.未开单数{"+String(i_allouseqty - i_notauditqty + ol_mtrl_qty,'#####,0.00##')+"}" // GOTO ext // END IF // END IF //IF ls_noallocflag = 1 THEN // END IF //IF s_mx.uqty > 0 THEN // END IF // END IF //END IF // // //检查物料库存ID //SELECT // u_mtrlware.noallocqty, // INTO // :i_allouseqty // FROM u_mtrlware left OUTER join uv_mtrlware_noauditingqty // on ( u_mtrlware.mtrlwareid = uv_mtrlware_noauditingqty.mtrlwareid) // AND ( u_mtrlware.scid = uv_mtrlware_noauditingqty.scid) INNER JOIN // u_mtrldef ON ( u_mtrlware.mtrlid = u_mtrldef.mtrlid ) // WHERE ( u_mtrlware.scid = :scid ) // AND ( u_mtrlware.mtrlwareid = :s_mx.mtrlwareid ) // Using commit_transaction; //IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "第" + String(s_mx.printid) + "行,查询操作失败,库存信息错误" // GOTO ext //END IF end function public function integer auditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i Dec new_noallocqty = 0 Long ls_newid IF outwareid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF it_newbegin Or it_updatebegin THEN rslt = 0 arg_msg = "编辑状态下不可以执行审核" GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核" GOTO ext END IF IF auditing_chk(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_outware SET Auditingrep = :publ_operator, Auditingdate = getdate(), flag = 1 WHERE u_outware.outwareid = :outwareid AND flag = 0 And scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "审核单据操作失败"+"~n" GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n" GOTO ext END IF Long li_if_fifo = 0 SELECT if_fifo INTO :li_if_fifo FROM u_storage Where storageid = :storageid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "查询仓库存货核算方法错误!" rslt = 0 GOTO ext END IF uo_saletask uo_task uo_task = Create uo_saletask uo_task.commit_transaction = commit_transaction IF sys_option_hide_ware = 0 THEN FOR i = 1 To it_mxbt Decimal ld_ref_costamt,ld_ref_costamt_notax Long li_mtrlwaremxid = 0 // If billtype = 1 And outwaremx[i].relid > 0 Then // If uo_task.addmxcmpl(scid,outwaremx[i].relid,outwaremx[i].relprintid,outwaremx[i].qty,arg_msg,False) <> 1 Then // arg_msg = '退货明细行:'+String(i)+','+arg_msg // rslt = 0 // Goto ext // End If // End If IF li_if_fifo = 0 THEN //移动平均法 IF p_update_cost(outwaremx[i],ld_ref_costamt,ld_ref_costamt_notax,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ELSE IF p_update_cost_fifo(outwaremx[i],ld_ref_costamt,ld_ref_costamt_notax,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF Decimal dec_fifo_inprice,dec_fifo_inprice_notax //dec_fifo_inprice = outwaremx[i].enprice * outwaremx[i].rebate //负数出仓 取库存cost作为入仓成本单价 dec_fifo_inprice = 0 SELECT cost,cost_notax Into :dec_fifo_inprice,:dec_fifo_inprice_notax From u_mtrlware Where scid = :scid And mtrlwareid = :outwaremx[i].mtrlwareid; IF dec_fifo_inprice > 0 THEN ELSE dec_fifo_inprice = 0 END IF IF dec_fifo_inprice_notax > 0 THEN ELSE dec_fifo_inprice_notax = 0 END IF IF p_update_mtrlware ( outwaremx[i].mtrlwareid, outwaremx[i].mtrlid, & outwaremx[i].mtrlcode, storageid, outwaremx[i].plancode,& outwaremx[i].status, outwaremx[i].qty,outwaremx[i].addqty, ld_ref_costamt,& outwaremx[i].planprice, outwaremx[i].sptid, outwaremx[i].dxflag,& outwaremx[i].woodcode, outwaremx[i].pcode,arg_msg,ld_ref_costamt_notax) = 0 THEN arg_msg = "行:"+String(i)+","+arg_msg rslt = 0 GOTO ext END IF //先进先出法 ,加入进仓批 u_mtrlware_inmx star IF li_if_fifo = 1 And outwaremx[i].qty < 0 THEN //负数 使用先进先出 IF f_add_mtrlware_inmx(scid, outwaremx[i].mtrlwareid,outwareid,outwaremx[i].printid,outwarecode,outdate,outwaremx[i].qty,dec_fifo_inprice,dec_fifo_inprice_notax,1,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF f_trigger_fifo_procedure(scid,outwaremx[i].mtrlwareid,outdate,1,outwareid,li_mtrlwaremxid,False,commit_transaction,arg_msg) = 0 THEN //负数等于进仓 rslt = 0 GOTO ext END IF //重算结存表 IF f_cmp_fifo_warebalc(scid,outwaremx[i].mtrlwareid,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF IF li_if_fifo = 1 And outwaremx[i].qty > 0 THEN //正数 IF f_trigger_fifo_procedure(scid,outwaremx[i].mtrlwareid,outdate,2,outwareid,li_mtrlwaremxid,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //重算结存表 IF f_cmp_fifo_warebalc(scid,outwaremx[i].mtrlwareid,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF //先进先出法 ,加入进仓批 u_mtrlware_inmx end NEXT //检查是否正确生成进仓批 IF li_if_fifo = 1 THEN FOR i = 1 To it_mxbt IF f_check_mtrlware_inmx(scid, outwaremx[i].mtrlwareid,commit_transaction,arg_msg) = 0 THEN IF uf_w_cmp_fifo_cb_bill(scid,outwaremx[i].mtrlwareid,False,arg_msg) = 0 THEN //尝试修复 rslt = 0 arg_msg = '第' + String(i) + '行 ' + arg_msg GOTO ext ELSE IF f_check_mtrlware_inmx(scid, outwaremx[i].mtrlwareid,commit_transaction,arg_msg) = 0 THEN //再检查一次 rslt = 0 arg_msg = '第' + String(i) + '行 ' + arg_msg GOTO ext END IF END IF END IF NEXT END IF END IF IF auditing_end(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF flag = 1 ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; IF billname <> "" THEN arg_msg = billname + ',' + arg_msg END IF ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer auditing_th (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i Dec new_noallocqty = 0 Long ls_newid IF outwareid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF it_newbegin Or it_updatebegin THEN rslt = 0 arg_msg = "编辑状态下不可以执行审核" GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核" GOTO ext END IF IF auditing_chk(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_outware SET Auditingrep = :publ_operator, Auditingdate = getdate(), flag = 1 WHERE u_outware.outwareid = :outwareid AND flag = 0 And scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "审核单据操作失败"+"~n" GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n" GOTO ext END IF Long li_if_fifo = 0 SELECT if_fifo INTO :li_if_fifo FROM u_storage Where storageid = :storageid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "查询仓库存货核算方法错误!" rslt = 0 GOTO ext END IF uo_saletask uo_task uo_task = Create uo_saletask uo_task.commit_transaction = commit_transaction IF sys_option_hide_ware = 0 THEN FOR i = 1 To it_mxbt Decimal ld_ref_costamt,ld_ref_costamt_notax Long li_mtrlwaremxid = 0 If billtype = 1 And outwaremx[i].relid > 0 Then If uo_task.addmxcmpl(scid,outwaremx[i].relid,outwaremx[i].relprintid,outwaremx[i].qty,arg_msg,False) <> 1 Then arg_msg = '退货明细行:'+String(i)+','+arg_msg rslt = 0 Goto ext End If End If IF li_if_fifo = 0 THEN //移动平均法 IF p_update_cost(outwaremx[i],ld_ref_costamt,ld_ref_costamt_notax,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ELSE IF p_update_cost_fifo(outwaremx[i],ld_ref_costamt,ld_ref_costamt_notax,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF Decimal dec_fifo_inprice,dec_fifo_inprice_notax //dec_fifo_inprice = outwaremx[i].enprice * outwaremx[i].rebate //负数出仓 取库存cost作为入仓成本单价 dec_fifo_inprice = 0 SELECT cost,cost_notax Into :dec_fifo_inprice,:dec_fifo_inprice_notax From u_mtrlware Where scid = :scid And mtrlwareid = :outwaremx[i].mtrlwareid; IF dec_fifo_inprice > 0 THEN ELSE dec_fifo_inprice = 0 END IF IF dec_fifo_inprice_notax > 0 THEN ELSE dec_fifo_inprice_notax = 0 END IF IF p_update_mtrlware ( outwaremx[i].mtrlwareid, outwaremx[i].mtrlid, & outwaremx[i].mtrlcode, storageid, outwaremx[i].plancode,& outwaremx[i].status, outwaremx[i].qty,outwaremx[i].addqty, ld_ref_costamt,& outwaremx[i].planprice, outwaremx[i].sptid, outwaremx[i].dxflag,& outwaremx[i].woodcode, outwaremx[i].pcode,arg_msg,ld_ref_costamt_notax) = 0 THEN arg_msg = "行:"+String(i)+","+arg_msg rslt = 0 GOTO ext END IF //先进先出法 ,加入进仓批 u_mtrlware_inmx star IF li_if_fifo = 1 And outwaremx[i].qty < 0 THEN //负数 使用先进先出 IF f_add_mtrlware_inmx(scid, outwaremx[i].mtrlwareid,outwareid,outwaremx[i].printid,outwarecode,outdate,outwaremx[i].qty,dec_fifo_inprice,dec_fifo_inprice_notax,1,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF f_trigger_fifo_procedure(scid,outwaremx[i].mtrlwareid,outdate,1,outwareid,li_mtrlwaremxid,False,commit_transaction,arg_msg) = 0 THEN //负数等于进仓 rslt = 0 GOTO ext END IF //重算结存表 IF f_cmp_fifo_warebalc(scid,outwaremx[i].mtrlwareid,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF IF li_if_fifo = 1 And outwaremx[i].qty > 0 THEN //正数 IF f_trigger_fifo_procedure(scid,outwaremx[i].mtrlwareid,outdate,2,outwareid,li_mtrlwaremxid,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //重算结存表 IF f_cmp_fifo_warebalc(scid,outwaremx[i].mtrlwareid,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF //先进先出法 ,加入进仓批 u_mtrlware_inmx end NEXT //检查是否正确生成进仓批 IF li_if_fifo = 1 THEN FOR i = 1 To it_mxbt IF f_check_mtrlware_inmx(scid, outwaremx[i].mtrlwareid,commit_transaction,arg_msg) = 0 THEN IF uf_w_cmp_fifo_cb_bill(scid,outwaremx[i].mtrlwareid,False,arg_msg) = 0 THEN //尝试修复 rslt = 0 arg_msg = '第' + String(i) + '行 ' + arg_msg GOTO ext ELSE IF f_check_mtrlware_inmx(scid, outwaremx[i].mtrlwareid,commit_transaction,arg_msg) = 0 THEN //再检查一次 rslt = 0 arg_msg = '第' + String(i) + '行 ' + arg_msg GOTO ext END IF END IF END IF NEXT END IF END IF IF auditing_end(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF flag = 1 ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; IF billname <> "" THEN arg_msg = billname + ',' + arg_msg END IF ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer uf_chk_assemble_qty2 (long arg_scid, long arg_storageid, long arg_outwareid, ref string arg_msg);Int rslt = 1 Long i,j,k Long new_it_mxbt Long cur_mxt_pf Long ll_SonMtrlid[],temp_ll[] String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[],temp_str[] Decimal ld_Sonscale[] Decimal i_noauditingqty = 0 //已开单未审 Decimal i_noallocqty = 0 //现库存数 Decimal i_nowbjmxqty //上级已开单数 Long cnt String ls_mtrlcode,ls_mtrlname Decimal ld_compareqty,i_nowwaremxqty s_outwaremx temp_outwaremx[],new_outwaremx[] ,new_sonmtrl_outwaremx[],null_outwaremx[] //明细结构数组 temp_outwaremx = outwaremx FOR i = 1 To it_mxbt FOR j = 1 To UpperBound(new_outwaremx) IF temp_outwaremx[i].mtrlwareid = new_outwaremx[j].mtrlwareid THEN new_outwaremx[j].qty = new_outwaremx[j].qty + temp_outwaremx[i].qty GOTO nxt1 END IF NEXT new_it_mxbt++ new_outwaremx[new_it_mxbt].mtrlwareid = temp_outwaremx[i].mtrlwareid new_outwaremx[new_it_mxbt].mtrlid = temp_outwaremx[i].mtrlid new_outwaremx[new_it_mxbt].qty = temp_outwaremx[i].qty new_outwaremx[new_it_mxbt].status = temp_outwaremx[i].status new_outwaremx[new_it_mxbt].woodcode = temp_outwaremx[i].woodcode new_outwaremx[new_it_mxbt].pcode = temp_outwaremx[i].pcode nxt1: NEXT FOR i = 1 To UpperBound(new_outwaremx) SELECT count(*) INTO :cnt FROM u_PrdPF Where u_PrdPF.mtrlid = :new_outwaremx[i].mtrlid; new_sonmtrl_outwaremx = null_outwaremx new_it_mxbt = 0 IF cnt = 0 THEN new_it_mxbt = 1 new_sonmtrl_outwaremx[new_it_mxbt].mtrlwareid = new_outwaremx[i].mtrlwareid new_sonmtrl_outwaremx[new_it_mxbt].mtrlid = new_outwaremx[i].mtrlid new_sonmtrl_outwaremx[new_it_mxbt].qty = new_outwaremx[i].qty new_sonmtrl_outwaremx[new_it_mxbt].status = new_outwaremx[i].status new_sonmtrl_outwaremx[new_it_mxbt].woodcode = new_outwaremx[i].woodcode new_sonmtrl_outwaremx[new_it_mxbt].pcode = new_outwaremx[i].pcode ELSE Decimal ld_kkdqty,ld_topUqty,ld_topOcqty SELECT u_mtrlware.noallocqty INTO :ld_topOcqty FROM u_mtrlware where (u_mtrlware.scid = :arg_scid) AND ( u_mtrlware.mtrlwareid = :new_outwaremx[i].mtrlwareid) Using commit_transaction; IF SQLCA.SQLCODE <> 0 THEN ld_topOcqty = 0 END IF SELECT isnull(sum(u_outwaremx.uqty),0) INTO :ld_topUqty FROM u_outwaremx INNER join u_outware on u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid WHERE u_outwaremx.scid = :arg_scid AND u_outware.flag = 0 AND u_outwaremx.outwareid <> :arg_outwareid And ( u_outwaremx.scid = :arg_scid ) And ( u_outwaremx.mtrlid = :new_outwaremx[i].mtrlid ) And ( u_outwaremx.status = :new_outwaremx[i].status ) And ( u_outwaremx.woodcode = :new_outwaremx[i].woodcode ) And ( u_outwaremx.pcode = :new_outwaremx[i].pcode ) And ( u_outwaremx.mtrlwareid = :new_outwaremx[i].mtrlwareid ) Using commit_transaction; IF SQLCA.SQLCODE <> 0 THEN ld_topUqty = 0 END IF ld_kkdqty = new_outwaremx[i].qty - (ld_topOcqty - ld_topUqty ) IF ld_kkdqty <= 0 THEN CONTINUE cur_mxt_pf = 1 DECLARE cur_pf CURSOR FOR SELECT u_PrdPF.SonMtrlid, u_PrdPF.Sonscale, u_PrdPF.status, u_PrdPF.woodcode, u_PrdPF.pcode FROM u_PrdPF Where u_PrdPF.mtrlid = :new_outwaremx[i].mtrlid; OPEN cur_pf; FETCH cur_pf Into :ll_SonMtrlid[cur_mxt_pf],:ld_Sonscale[cur_mxt_pf],:ls_pf_status[cur_mxt_pf],:ls_pf_woodcode[cur_mxt_pf],:ls_pf_pcode[cur_mxt_pf]; DO WHILE sqlca.SQLCode = 0 cur_mxt_pf++ FETCH cur_pf Into :ll_SonMtrlid[cur_mxt_pf],:ld_Sonscale[cur_mxt_pf],:ls_pf_status[cur_mxt_pf],:ls_pf_woodcode[cur_mxt_pf],:ls_pf_pcode[cur_mxt_pf]; LOOP cur_mxt_pf = cur_mxt_pf - 1 CLOSE cur_pf; FOR j = 1 To cur_mxt_pf new_it_mxbt++ new_sonmtrl_outwaremx[new_it_mxbt].mtrlwareid = 0 new_sonmtrl_outwaremx[new_it_mxbt].mtrlid = ll_SonMtrlid[j] new_sonmtrl_outwaremx[new_it_mxbt].qty = ld_Sonscale[j] * ld_kkdqty new_sonmtrl_outwaremx[new_it_mxbt].status = ls_pf_status[j] new_sonmtrl_outwaremx[new_it_mxbt].woodcode = ls_pf_woodcode[j] new_sonmtrl_outwaremx[new_it_mxbt].pcode = ls_pf_pcode[j] NEXT END IF FOR k = 1 To UpperBound(new_sonmtrl_outwaremx) SELECT mtrlcode,mtrlname INTO :ls_mtrlcode,:ls_mtrlname FROM u_mtrldef WHERE mtrlid = :new_sonmtrl_outwaremx[k].mtrlid Using commit_transaction; //计算库存数 SELECT IsNull(sum(u_mtrlware.noallocqty), 0) INTO :i_noallocqty FROM u_mtrlware LEFT OUTER JOIN uv_mtrlware_noauditingqty ON (u_mtrlware.mtrlwareid = uv_mtrlware_noauditingqty.mtrlwareid) AND (u_mtrlware.scid = uv_mtrlware_noauditingqty.scid) INNER JOIN u_mtrldef ON (u_mtrlware.mtrlid = u_mtrldef.mtrlid) WHERE (u_mtrlware.scid = :arg_scid) AND (u_mtrlware.mtrlid = :new_sonmtrl_outwaremx [k].mtrlid) AND (u_mtrlware.STATUS = :new_sonmtrl_outwaremx [k].STATUS) AND (u_mtrlware.woodcode = :new_sonmtrl_outwaremx [k].woodcode) AND (u_mtrlware.pcode = :new_sonmtrl_outwaremx [k].pcode) AND (u_mtrlware.mtrlwareid = :new_sonmtrl_outwaremx [k].mtrlwareid OR :new_sonmtrl_outwaremx [k].mtrlwareid = 0) Using commit_transaction; //计算已开单未审数 SELECT isnull(sum(u_outwaremx.uqty),0) INTO :i_noauditingqty FROM u_outwaremx INNER join u_outware on u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid WHERE u_outwaremx.scid = :arg_scid AND u_outware.flag = 0 AND u_outwaremx.outwareid <> :arg_outwareid And ( u_outwaremx.scid = :arg_scid ) And ( u_outwaremx.mtrlid = :new_sonmtrl_outwaremx[k].mtrlid ) And ( u_outwaremx.status = :new_sonmtrl_outwaremx[k].status ) And ( u_outwaremx.woodcode = :new_sonmtrl_outwaremx[k].woodcode ) And ( u_outwaremx.pcode = :new_sonmtrl_outwaremx[k].pcode ) And ( u_outwaremx.mtrlwareid = :new_sonmtrl_outwaremx[k].mtrlwareid OR :new_sonmtrl_outwaremx[k].mtrlwareid = 0 ) Using commit_transaction; //计算上级已开未审总和 SELECT ISNULL(SUM(u_PrdPF.Sonscale * u_outwaremx.qty),0) AS sumqty INTO :i_nowbjmxqty FROM u_PrdPF INNER JOIN u_outwaremx ON u_outwaremx.mtrlid = u_PrdPF.mtrlid INNER JOIN u_outware ON u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid WHERE (u_outware.flag = 0) AND (u_PrdPF.SonMtrlid = :new_sonmtrl_outwaremx[k].mtrlid) AND (u_PrdPF.STATUS = :new_sonmtrl_outwaremx[k].status) AND (u_PrdPF.woodcode = :new_sonmtrl_outwaremx[k].woodcode) AND (u_PrdPF.pcode = :new_sonmtrl_outwaremx[k].pcode) AND u_outwaremx.scid = :arg_scid AND u_outwaremx.outwareid <> :arg_outwareid AND u_outwaremx.mtrlwareid <> :new_outwaremx[i].mtrlwareid Using commit_transaction; IF SQLCA.SQLCODE <> 0 THEN i_nowbjmxqty = 0 END IF SELECT sum(TMP.noallocqty * TMP.Sonscale) INTO :i_nowwaremxqty FROM ( SELECT DISTINCT u_mtrlware.scid ,u_mtrlware.mtrlwareid ,u_mtrlware.noallocqty ,u_PrdPF.Sonscale FROM u_PrdPF INNER JOIN u_outwaremx ON u_outwaremx.mtrlid = u_PrdPF.mtrlid INNER JOIN u_outware ON u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid LEFT OUTER JOIN u_mtrlware ON u_mtrlware.scid = u_outwaremx.scid AND u_mtrlware.mtrlwareid = u_outwaremx.mtrlwareid WHERE (u_outware.flag = 0) AND (u_PrdPF.SonMtrlid = :new_sonmtrl_outwaremx [k].mtrlid) AND (u_PrdPF.STATUS = :new_sonmtrl_outwaremx [k].STATUS) AND (u_PrdPF.woodcode = :new_sonmtrl_outwaremx [k].woodcode) AND (u_PrdPF.pcode = :new_sonmtrl_outwaremx [k].pcode) AND u_outwaremx.scid = :arg_scid AND u_outwaremx.outwareid <> :arg_outwareid AND u_outwaremx.mtrlwareid <> :new_outwaremx [i].mtrlwareid ) AS TMP Using commit_transaction; IF SQLCA.SQLCODE <> 0 THEN i_nowwaremxqty = 0 END IF IF ISNULL(i_nowwaremxqty) THEN i_nowwaremxqty = 0 i_nowbjmxqty = i_nowbjmxqty - i_nowwaremxqty IF i_nowbjmxqty <= 0 THEN i_nowbjmxqty = 0 END IF //得出剩余可以开单的数量 ld_compareqty = i_noallocqty - i_noauditingqty - i_nowbjmxqty IF new_sonmtrl_outwaremx[k].qty > ld_compareqty THEN arg_msg += "物料:"+ls_mtrlcode + "【"+ls_mtrlname+"】"+",不够可用数冲减:"+"剩余可用数为(包含库存数-已开单未审核-上级占用):"+String(ld_compareqty,"#,##0.00###")+",本次开单数为:"+String(new_sonmtrl_outwaremx[k].qty,"#,##0.00###")+"~r~n" END IF NEXT NEXT IF arg_msg <> '' THEN rslt = 0 END IF RETURN rslt end function on uo_outware_sale.create call super::create end on on uo_outware_sale.destroy call super::destroy end on