$PBExportHeader$uo_inware.sru forward global type uo_inware from nonvisualobject end type end forward global type uo_inware from nonvisualobject end type global uo_inware uo_inware type variables PUBLIC PROTECTEDWRITE Long scid = 0 //分部id PUBLIC PROTECTEDWRITE Long inwareid //进仓单表自动增量id PUBLIC PROTECTEDWRITE String inwarecode //单据的唯一编号 PUBLIC PROTECTEDWRITE Int billtype = 0 //业务类型 //业务类型 //1-采购进仓[记帐模式] //2-采购进仓[不记帐模式] //3-成品进仓 //8-其他进仓 //9-盘盈进仓 //12-调拨入仓 PUBLIC PROTECTEDWRITE DateTime opdate //建立时间,自动 PUBLIC PROTECTEDWRITE String opemp //建立操作员 PUBLIC PROTECTEDWRITE DateTime moddate //修改时间,自动 PUBLIC PROTECTEDWRITE String modemp //修改操作员 PUBLIC PROTECTEDWRITE Int flag = 0 //仓库审核标志 PUBLIC PROTECTEDWRITE Int balcflag = 0 //仓库结存标志 PUBLIC PROTECTEDWRITE DateTime auditingdate //审核时间 PUBLIC PROTECTEDWRITE String auditingrep //审核操作员 PUBLIC PROTECTEDWRITE Decimal sum_amt = 0 //单据总金额 PUBLIC PROTECTEDWRITE Decimal sum_amt_en = 0 //单据总金额 PUBLIC PROTECTEDWRITE Decimal sum_uamt = 0 //单据总金额(原币) PUBLIC PROTECTEDWRITE Decimal sum_uamt_tax = 0 //税金(原币) PUBLIC PROTECTEDWRITE Decimal sum_bsamt = 0 //单据总金额(本位币) PUBLIC PROTECTEDWRITE Decimal sum_bsamt_tax = 0 //税金(本位币) PUBLIC PROTECTEDWRITE Decimal jgsum_amt = 0 //单据加工总金额 PUBLIC PROTECTEDWRITE Int secflag = 0 //财务审核标志 PUBLIC PROTECTEDWRITE DateTime secauditingdate //二审核时间 PUBLIC PROTECTEDWRITE String secauditingrep //二审核操作员 Long staticid Long relid = 0 //关联id Long storageid = 0 //进仓仓库 DateTime indate //进仓发生时间 String inrep = '' //经手人 String part = '' //相关号码 String dscrp = '' //备注 Long sptid = 0 //供应商id String sptname = '' //供应商名称(不记帐模式使用) Int dxflag = 0 //代销标记 Int thflag = 0 //退货标记 Decimal otheramt = 0 //单据费用 Long relint_1 = 0 Long relint_2 = 0 Long relint_3 = 0 Long relint_4 = 0 Long relint_5 = 0 String relstr_1 = '' String relstr_2 = '' String relstr_3 = '' Boolean sysautobuild = FALSE //自动操作标记 Decimal mrate = 0 Long priceflag datetime pricedate string priceemp Boolean if_getid_ture = TRUE Transaction commit_transaction //数据commit事务 long storage_plancode_flag=0 //仓库中是否设置了使用 “进仓单号” 作为批号 Int cwauditingflag = 0 //总账审核标记 DateTime cwauditingdate //总账审核时间 String cwauditingrep //总账审核操作员 DateTime viewdate s_inwaremx inwaremx[] //明细结构数组 Long it_mxbt = 0 //明细结构数组末指针 Boolean it_newbegin = FALSE //新建标志 Boolean it_updatebegin = FALSE //修改标志 String billname end variables forward prototypes public function integer newbegin (long arg_scid, integer arg_billtype, ref string arg_msg) public function integer save (boolean arg_ifcommit, ref string arg_msg) public function integer getinfo (long arg_scid, long arg_inwareid, ref string arg_msg) public function integer updatebegin (long arg_scid, long arg_inwareid, integer arg_billtype, ref string arg_msg) public function integer auditing (boolean arg_ifcommit, ref string arg_msg) public function integer del (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_scid, long arg_inwareid, string arg_newdescppart, ref string arg_msg) public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg) public function integer p_clearmx () public function integer p_getinfo (long arg_scid, long arg_inwareid, ref string arg_msg) public function integer p_reset () public function integer p_update_cost (long arg_scid, long arg_mtrlid, long arg_sptid_cusid, long arg_storageid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, long arg_dxflag, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx (s_inwaremx s_mx, ref string arg_msg) public function integer uof_check_warepdb_audit (long arg_storageid, 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_chk (ref string arg_msg) public function integer c_auditing_end (ref string arg_msg) public function integer save_chk (ref string arg_msg) public function integer save_end (ref string arg_msg) public function integer uf_chk_updatecost (ref string arg_msg) public function integer acceptmx_chk (s_inwaremx s_mx, ref string arg_msg) public function integer mod_price (long arg_scid, long arg_inwareid, long arg_printid, decimal arg_uprice, decimal arg_jgprice, decimal arg_rebate, decimal arg_tax, ref string arg_msg, boolean arg_ifcommit) public function integer mod_buyqty (long arg_scid, long arg_inwareid, long arg_printid, decimal arg_buyqty, ref string arg_msg, boolean arg_ifcommit) public subroutine uf_get_billname (integer arg_billtype) public function decimal uof_get_mtrlware_cost (long arg_scid, long arg_storageid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, long arg_sptid, long arg_dxflag) public function integer uf_w_cmp_fifo_cb_bill (long ll_scid, long ll_mtrlwareid, boolean arg_ifcommit, ref string arg_msg) public function integer audit_subject (long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg) public function integer c_audit_subject (long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg) public function integer p_update_mtrlware (ref long arg_mtrlwareid, long arg_mtrlid, string arg_mtrlcode, long arg_storageid, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_addqty, decimal arg_price, decimal arg_planprice, long arg_sptid, integer arg_dxflag, string arg_woodcode, string arg_pcode, ref string arg_msg, string arg_waredscrp, datetime arg_inworkdate, decimal arg_cost_notax) public function decimal uof_get_mtrlware_cost_notax (long arg_scid, long arg_storageid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, long arg_sptid, long arg_dxflag) public function integer p_update_th_cost (long arg_printid, string arg_mtrlcode, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, long arg_dxflag, long arg_sptid, ref decimal arg_ref_cost, decimal arg_ref_cost_notax, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx (long arg_printid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, decimal arg_uqty, decimal arg_addqty, decimal arg_uprice, decimal arg_rebate, string arg_mxdscrp, ref string arg_msg, decimal arg_jgprice, long arg_relid, long arg_relprintid, integer arg_ifrel, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, long arg_cusid_sptid, string arg_unit, decimal arg_rate, string arg_formula, string arg_waredscrp, datetime arg_inworkdate, decimal arg_cost_notax) public function integer mod_part (long arg_scid, long arg_inwareid, string arg_newpart, ref string arg_msg) end prototypes public function integer newbegin (long arg_scid, integer arg_billtype, ref string arg_msg);//==================================================================== // Function: newbegin(long arg_scid,int arg_billtype,ref string arg_msg) //-------------------------------------------------------------------- // Description: 从置对象,设定业务类型,准备建立新进仓单 //-------------------------------------------------------------------- // Arguments: // value long arg_scid // value integer arg_billtype // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.12 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Int rslt = 1 IF arg_scid < 0 THEN arg_msg = '请选择分部' rslt = 0 GOTO ext END IF IF Not (arg_billtype = 1 OR arg_billtype = 2 OR arg_billtype = 3 OR arg_billtype = 4 & OR arg_billtype = 8 OR arg_billtype = 9 OR arg_billtype = 12 OR arg_billtype = 15 & OR arg_billtype = 20 OR arg_billtype = 22) THEN rslt = 0 arg_msg = '此单据类型必须为:' arg_msg = arg_msg+'1-采购进仓[记帐模式],' arg_msg = arg_msg+'2-采购进仓[不记帐模式],' arg_msg = arg_msg+'3-成品进仓,' arg_msg = arg_msg+'4-外协进仓,' arg_msg = arg_msg+'8-其他进仓,' arg_msg = arg_msg+'9-盘盈进仓,' arg_msg = arg_msg+'12-调拨进仓' arg_msg = arg_msg+'15-拆装进仓' arg_msg = arg_msg+'20-来料加工收料进仓' arg_msg = arg_msg+'22-库存配置调整' GOTO ext END IF uf_get_billname(arg_billtype) //CHOOSE CASE arg_billtype // CASE 1 // billname = '采购进仓单' // CASE 2 // billname = '采购进仓单' // CASE 3 // billname = '生产进仓单' // CASE 4 // billname = '外协进仓单' // CASE 8 // billname = '其他进仓单' // CASE 9 // billname = '盘盈进仓单' // CASE 12 // billname = '调拨进仓单' // CASE 15 // billname = '拆装进仓单' // CASE 20 // billname = '来料加工收料进仓单' // CASE 22 // billname = '库存配置调整单' //END CHOOSE p_reset() billtype = arg_billtype scid = arg_scid it_newbegin = TRUE it_updatebegin = FALSE ext: IF rslt = 0 THEN p_reset() 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 isnull(staticid) then staticid = 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, staticid) 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, :staticid) 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, staticid = :staticid 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, 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, cost_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].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, :inwaremx[i].cost_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, 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 public function integer getinfo (long arg_scid, long arg_inwareid, ref string arg_msg);//getinfo(arg_scid,arg_inwareid,arg_msg) //0 失败 1成功 Int rslt = 1,i = 1,no_mxcheck = 0 jgsum_amt = 0 sum_amt = 0 sum_amt_en = 0 sum_uamt = 0 sum_uamt_tax = 0 sum_bsamt = 0 sum_bsamt_tax = 0 IF arg_inwareid <= 0 THEN rslt = 0 arg_msg = "非法进仓单唯一码" GOTO ext END IF rslt = p_getinfo(arg_scid,arg_inwareid,arg_msg) IF rslt = 0 THEN GOTO ext //用游标读取明细 DECLARE cur_inwaermx CURSOR FOR SELECT u_inwaremx.printid, u_inwaremx.mtrlid, u_inwaremx.plancode, u_inwaremx.status, u_inwaremx.qty, u_inwaremx.addqty, u_inwaremx.fprice, u_inwaremx.rebate, u_inwaremx.price, u_inwaremx.planprice, u_inwaremx.mxdscrp, u_mtrldef.mtrlcode, u_inwaremx.jgprice, u_inwaremx.relid, u_inwaremx.relprintid, u_inwaremx.ifrel, u_inwaremx.woodcode, u_inwaremx.pcode, u_inwaremx.plancode, u_inwaremx.sptid_cusid, u_inwaremx.cost, u_inwaremx.sptmtrlname, u_inwaremx.unit, u_inwaremx.uqty, u_inwaremx.uprice, u_inwaremx.rate, u_inwaremx.bootqty, u_inwaremx.noauditqty, u_inwaremx.mtrlcuscode, u_inwaremx.dftsptprice, u_inwaremx.waredscrp, u_inwaremx.inworkdate, u_inwaremx.tax, u_inwaremx.uamt, u_inwaremx.uamt_tax, u_inwaremx.bsamt, u_inwaremx.bsamt_tax, u_inwaremx.buyqty, u_mtrldef.iflimitprice, u_inwaremx.cost_notax FROM u_inwaremx,u_mtrldef,u_inware WHERE u_inware.inwareid = :arg_inwareid AND u_inwaremx.mtrlid = u_mtrldef.mtrlid AND u_inware.scid = :arg_scid AND u_inware.inwareid = u_inwaremx.inwareid AND u_inware.scid = u_inwaremx.scid USING commit_transaction; OPEN cur_inwaermx; FETCH cur_inwaermx INTO :inwaremx[i].printid,:inwaremx[i].mtrlid,:inwaremx[i].plancode, :inwaremx[i].status,:inwaremx[i].qty,:inwaremx[i].addqty,:inwaremx[i].fprice, :inwaremx[i].rebate,:inwaremx[i].price,:inwaremx[i].planprice, :inwaremx[i].mxdscrp,:inwaremx[i].mtrlcode,:inwaremx[i].jgprice, :inwaremx[i].relid,:inwaremx[i].relprintid,:inwaremx[i].ifrel,:inwaremx[i].woodcode, :inwaremx[i].pcode,:inwaremx[i].plancode,:inwaremx[i].sptid, :inwaremx[i].cost,:inwaremx[i].sptmtrlname,:inwaremx[i].unit, :inwaremx[i].uqty,:inwaremx[i].uprice,:inwaremx[i].rate, :inwaremx[i].bootqty,:inwaremx[i].noauditqty,:inwaremx[i].mtrlcuscode, :inwaremx[i].dftsptprice, :inwaremx[i].waredscrp, :inwaremx[i].inworkdate, :inwaremx[i].tax,:inwaremx[i].uamt,:inwaremx[i].uamt_tax,:inwaremx[i].bsamt,:inwaremx[i].bsamt_tax, :inwaremx[i].buyqty, :inwaremx[i].iflimitprice, :inwaremx[i].cost_notax; inwaremx[i].dxflag = dxflag IF dxflag = 1 THEN inwaremx[i].sptid = sptid DO WHILE commit_transaction.SQLCode = 0 jgsum_amt = jgsum_amt+round(inwaremx[i].uqty * inwaremx[i].jgprice,2) //计算单据加工费总金额 // //淘汰 // sum_amt = sum_amt+round(inwaremx[i].uqty * inwaremx[i].uprice * inwaremx[i].rebate * mrate ,2) //计算单据总本位币金额 // sum_amt_en = sum_amt_en+round(inwaremx[i].uqty * inwaremx[i].uprice * inwaremx[i].rebate,2) //计算单据外币总金额 //新增的,以此为标准 sum_uamt += inwaremx[i].uamt//计算单据原币总金额 sum_uamt_tax += inwaremx[i].uamt_tax//计算单据原币总税金 sum_bsamt += inwaremx[i].bsamt//计算单据本位币总金额 sum_bsamt_tax += inwaremx[i].bsamt_tax//计算单据本位币总税金 i++ FETCH cur_inwaermx INTO :inwaremx[i].printid,:inwaremx[i].mtrlid,:inwaremx[i].plancode, :inwaremx[i].status,:inwaremx[i].qty,:inwaremx[i].addqty,:inwaremx[i].fprice, :inwaremx[i].rebate,:inwaremx[i].price,:inwaremx[i].planprice, :inwaremx[i].mxdscrp,:inwaremx[i].mtrlcode,:inwaremx[i].jgprice, :inwaremx[i].relid,:inwaremx[i].relprintid,:inwaremx[i].ifrel,:inwaremx[i].woodcode, :inwaremx[i].pcode,:inwaremx[i].plancode,:inwaremx[i].sptid, :inwaremx[i].cost,:inwaremx[i].sptmtrlname,:inwaremx[i].unit, :inwaremx[i].uqty,:inwaremx[i].uprice,:inwaremx[i].rate, :inwaremx[i].bootqty,:inwaremx[i].noauditqty,:inwaremx[i].mtrlcuscode, :inwaremx[i].dftsptprice, :inwaremx[i].waredscrp, :inwaremx[i].inworkdate, :inwaremx[i].tax,:inwaremx[i].uamt,:inwaremx[i].uamt_tax,:inwaremx[i].bsamt,:inwaremx[i].bsamt_tax, :inwaremx[i].buyqty, :inwaremx[i].iflimitprice, :inwaremx[i].cost_notax; inwaremx[i].dxflag = dxflag IF dxflag = 1 THEN inwaremx[i].sptid = sptid LOOP CLOSE cur_inwaermx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_inwaremx WHERE u_inwaremx.inwareid = :arg_inwareid AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,进仓单明细数量" GOTO ext END IF IF i <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,进仓单明细" GOTO ext END IF inwareid = arg_inwareid scid = arg_scid it_mxbt = i - 1 it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN arg_msg = billname + ',' + arg_msg p_reset() END IF RETURN rslt end function public function integer updatebegin (long arg_scid, long arg_inwareid, integer arg_billtype, ref string arg_msg);//==================================================================== // Function: updatebegin(arg_scid,arg_inwareid,arg_billtype,arg_msg) //-------------------------------------------------------------------- // Description: 从置对象,设定业务类型与关联ID,准备更新进仓单 //-------------------------------------------------------------------- // Arguments: // value long arg_scid // value long arg_inwareid // value integer arg_billtype // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.12 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Long rslt = 1 IF arg_scid < 0 THEN arg_msg = '请选择分部' rslt = 0 GOTO ext END IF IF arg_inwareid <= 0 THEN rslt = 0 GOTO ext END IF IF Not(arg_billtype = 1 Or arg_billtype = 2 Or arg_billtype = 3 Or arg_billtype = 4 Or arg_billtype = 8 & Or arg_billtype = 9 Or arg_billtype = 12 Or arg_billtype = 20 Or arg_billtype = 22 ) THEN rslt = 0 arg_msg = '此单据类型必须为:' arg_msg = arg_msg+'1-采购进仓[记帐模式],' arg_msg = arg_msg+'2-采购进仓[不记帐模式],' arg_msg = arg_msg+'3-成品进仓,' arg_msg = arg_msg+'4-外发加工进仓,' arg_msg = arg_msg+'8-其他进仓,' arg_msg = arg_msg+'9-盘盈进仓,' arg_msg = arg_msg+'12-调拨进仓' arg_msg = arg_msg+'20-来料加工收料进仓' arg_msg = arg_msg+'22-库存配置调整' GOTO ext END IF uf_get_billname(arg_billtype) IF arg_billtype = 12 THEN rslt = 0 arg_msg = '单据类型:12-调拨进仓>>不能修改' GOTO ext END IF rslt = p_getinfo(arg_scid,arg_inwareid,arg_msg) IF rslt = 0 THEN GOTO ext //if arg_billtype = 1 then // if flag=1 and secflag = 1 then // rslt=0 // arg_msg='单据已经经过仓库和财务审核,不可以修改' // goto ext // end if //else IF flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改' GOTO ext END IF //end if inwareid = arg_inwareid billtype = arg_billtype scid = arg_scid it_newbegin = False it_updatebegin = True p_clearmx() //清除明细 ext: IF rslt = 0 THEN p_reset() RETURN rslt 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 uo_spt_price uo_sptprice uo_sptprice = Create uo_spt_price IF inwareid = 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_inware SET auditingrep = :publ_operator, auditingdate = getdate(), flag = 1 WHERE u_inware.inwareid = :inwareid 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 = "单据正在审核,请稍后查询。" 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 //Long ll_mxsptid = 0 Long ll_mtrlwareid IF sys_option_hide_ware = 0 THEN FOR i = 1 To it_mxbt // ll_mxsptid = inwaremx[i].sptid IF f_power_ind(1665) And Not sys_power_issuper THEN IF inwaremx[i].uprice = 0 THEN rslt = 0 arg_msg = '特殊权限限制:限制进仓单审核时单价必须不为0~r~n行:'+String(i)+',物料编码:'+inwaremx[i].mtrlcode+',单价为0,请检查' GOTO ext END IF END IF //查询采购限价并检查进仓价 IF billtype = 1 Or billtype = 4 THEN IF inwaremx[i].iflimitprice = 1 THEN IF uo_sptprice.uf_check_price_audit(thflag,sptid,inwaremx[i].mtrlid,inwaremx[i].mtrlcode,inwaremx[i].unit,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].uprice * inwaremx[i].rebate,arg_msg) = 0 THEN arg_msg = '行:'+String(i)+',' + arg_msg rslt = 0 GOTO ext END IF END IF END IF IF billtype = 1 THEN IF thflag = 1 THEN IF p_update_th_cost(inwaremx[i].printid,& inwaremx[i].mtrlcode,& inwaremx[i].mtrlid,& inwaremx[i].status,& inwaremx[i].woodcode,& inwaremx[i].pcode,& inwaremx[i].plancode,& inwaremx[i].dxflag,& inwaremx[i].sptid,& inwaremx[i].cost,inwaremx[i].cost_notax,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '行:'+String(i)+','+arg_msg GOTO ext END IF ELSE // ld_cost = inwaremx[i].cost END IF END IF ll_mtrlwareid = 0 // Decimal dec_fifo_cost, dec_fifo_cost_notax//如果进仓单价为0 取库存成本价作为进仓成本价 dec_fifo_cost = uof_get_mtrlware_cost(scid,storageid,inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].plancode,inwaremx[i].sptid,inwaremx[i].dxflag) dec_fifo_cost_notax = uof_get_mtrlware_cost_notax(scid,storageid,inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].plancode,inwaremx[i].sptid,inwaremx[i].dxflag) IF sys_option_outware_if_buyqty = 1 and billtype = 1 and li_if_fifo = 0 THEN decimal ld_cost,ld_cost_notax IF inwaremx[i].uqty = 0 THEN ld_cost = 0 ld_cost_notax = 0 ELSE ld_cost = round(inwaremx[i].buyqty * inwaremx[i].cost / inwaremx[i].uqty ,2) ld_cost_notax = round(ld_cost / (1 + inwaremx[it_mxbt].tax),2) END IF IF p_update_mtrlware(ll_mtrlwareid, inwaremx[i].mtrlid,inwaremx[i].mtrlcode,& storageid,inwaremx[i].plancode,inwaremx[i].status,& inwaremx[i].uqty,inwaremx[i].addqty,ld_cost,inwaremx[i].planprice,& inwaremx[i].sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,& inwaremx[i].pcode,arg_msg,inwaremx[i].waredscrp,inwaremx[i].inworkdate,ld_cost_notax) = 0 THEN arg_msg = "第" + String(i) + "行," + arg_msg rslt = 0 GOTO ext END IF ELSE IF p_update_mtrlware(ll_mtrlwareid, inwaremx[i].mtrlid,inwaremx[i].mtrlcode,& storageid,inwaremx[i].plancode,inwaremx[i].status,& inwaremx[i].qty,inwaremx[i].addqty,inwaremx[i].cost,inwaremx[i].planprice,& inwaremx[i].sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,& inwaremx[i].pcode,arg_msg,inwaremx[i].waredscrp,inwaremx[i].inworkdate,inwaremx[i].cost_notax) = 0 THEN arg_msg = "第" + String(i) + "行," + arg_msg rslt = 0 GOTO ext END IF END IF Decimal aa,bb select cost,cost_notax into :aa,:bb from u_mtrlware where mtrlwareid = :ll_mtrlwareid; AA = AA BB =BB IF ll_mtrlwareid > 0 THEN UPDATE u_inwaremx SET mtrlwareid = :ll_mtrlwareid WHERE scid = :scid AND inwareid = :inwareid AND printid = :inwaremx[i].printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新单据明细库存ID操作失败"+"~n" +commit_transaction.SQLErrText GOTO ext END IF END IF //先进先出法 ,加入进仓批 u_mtrlware_inmx star Long li_mtrlwaremxid = 0 Decimal dec_fifo_inprice,dec_fifo_inprice_notax // IF inwaremx[i].fprice * inwaremx[i].rebate <> 0 THEN // dec_fifo_inprice = inwaremx[i].fprice * inwaremx[i].rebate // ELSE // dec_fifo_inprice = dec_fifo_cost //如果进仓单价为0 取库存成本价作为进仓成本价 // END IF // // IF inwaremx[i].uprice / (1 + inwaremx[i].tax) * inwaremx[i].rebate <> 0 THEN // dec_fifo_inprice_notax = inwaremx[i].uprice / (1 + inwaremx[i].tax) * inwaremx[i].rebate // ELSE // dec_fifo_inprice_notax = dec_fifo_cost_notax //如果进仓单价为0 取库存成本价作为进仓成本价 // END IF dec_fifo_inprice = inwaremx[i].fprice * inwaremx[i].rebate dec_fifo_inprice_notax = inwaremx[i].uprice / (1 + inwaremx[i].tax) * inwaremx[i].rebate IF li_if_fifo = 1 And ll_mtrlwareid > 0 And inwaremx[i].qty > 0 THEN // 正数 使用先进先出 IF f_add_mtrlware_inmx(scid,ll_mtrlwareid,inwareid,inwaremx[i].printid,inwarecode,indate,inwaremx[i].qty,dec_fifo_inprice,dec_fifo_inprice_notax,0,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF f_trigger_fifo_procedure(scid,ll_mtrlwareid,indate,1,inwareid,li_mtrlwaremxid,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //重算结存表 IF f_cmp_fifo_warebalc(scid,ll_mtrlwareid,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF IF li_if_fifo = 1 And ll_mtrlwareid > 0 And inwaremx[i].qty < 0 THEN // 负数 等于出仓 li_mtrlwaremxid = 0 IF f_trigger_fifo_procedure(scid,ll_mtrlwareid,indate,2,inwareid,li_mtrlwaremxid,False,commit_transaction,arg_msg) = 0 THEN //等于出仓 rslt = 0 GOTO ext END IF //重算结存表 IF f_cmp_fifo_warebalc(scid,ll_mtrlwareid,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF //检查是否正确生成进仓批 IF li_if_fifo = 1 THEN inwaremx[i].mtrlwareid_xjxc = ll_mtrlwareid 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,ll_mtrlwareid,commit_transaction,arg_msg) = 0 THEN IF uf_w_cmp_fifo_cb_bill(scid,ll_mtrlwareid,False,arg_msg) = 0 THEN //尝试修复 rslt = 0 arg_msg = '第' + String(i) + '行 ' + arg_msg GOTO ext ELSE IF f_check_mtrlware_inmx(scid,ll_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: Destroy uo_sptprice 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 del (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit);//del(arg_scid,arg_inwareid,arg_msg) //如果单据还没有审核删除单据极其明细 //0 fail, 1 success Int rslt = 1 IF arg_inwareid = 0 THEN rslt = 0 arg_msg = "没有删除对象,操作取消" GOTO ext END IF rslt = p_getinfo(arg_scid,arg_inwareid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核,不可以删除" GOTO ext END IF DELETE FROM u_inwaremx WHERE u_inwaremx.inwareid = :arg_inwareid AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除进仓单明细操作失败"+"~n" GOTO ext END IF DELETE FROM u_inware WHERE u_inware.inwareid = :arg_inwareid AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除进仓单操作失败"+"~n" GOTO ext END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; arg_msg = billname + ',' + arg_msg ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF p_reset() RETURN rslt end function public function integer add_dscrp (long arg_scid, long arg_inwareid, string arg_newdescppart, ref string arg_msg);//add_dscrp(string arg_newdescppart) //0 fail 1 success Int rslt = 1 arg_newdescppart = Trim(arg_newdescppart) IF it_updatebegin Or it_newbegin THEN rslt = 0 arg_msg = "编辑状态下不可用" GOTO ext END IF IF arg_newdescppart = '' THEN rslt = 0 arg_msg = "要添加内容为空,操作取消" GOTO ext END IF rslt = p_getinfo(arg_scid,arg_inwareid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 0 THEN rslt = 0 arg_msg = "非审核状态下不可用" GOTO ext END IF UPDATE u_inware SET dscrp = dscrp+' '+:arg_newdescppart WHERE u_inware.inwareid = :inwareid AND scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "添加单据备注操作失败"+"~n" GOTO ext END IF dscrp = dscrp+' '+arg_newdescppart ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSE COMMIT Using commit_transaction; END IF Return (rslt) end function public function integer c_auditing (boolean arg_ifcommit, 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 Dec new_noallocqty = 0 Long ls_newid DateTime null_dt SetNull(null_dt) IF inwareid = 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 flag = 0 THEN rslt = 0 arg_msg = "单据还未审核" GOTO ext END IF IF balcflag = 1 THEN rslt = 0 arg_msg = "单据已经结存,不能撤审" GOTO ext END IF IF c_auditing_chk(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_inware SET auditingrep = '', auditingdate = :null_dt, flag = 0 WHERE u_inware.inwareid = :inwareid AND flag = 1 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 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 Long ll_mtrlwareid IF sys_option_hide_ware = 0 THEN FOR i = 1 To it_mxbt IF sys_option_outware_if_buyqty = 1 and billtype = 1 and li_if_fifo = 0 THEN decimal ld_cost,ld_cost_notax IF inwaremx[i].uqty = 0 THEN ld_cost = 0 ld_cost_notax = 0 ELSE ld_cost = round(inwaremx[i].buyqty * inwaremx[i].cost / inwaremx[i].uqty ,2) ld_cost_notax = round(ld_cost / (1 + inwaremx[it_mxbt].tax),2) END IF IF p_update_mtrlware(ll_mtrlwareid, inwaremx[i].mtrlid,inwaremx[i].mtrlcode,& storageid,inwaremx[i].plancode,inwaremx[i].status,& 0 - inwaremx[i].uqty,0 - inwaremx[i].addqty,ld_cost,inwaremx[i].planprice,& inwaremx[i].sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,& inwaremx[i].pcode,arg_msg,inwaremx[i].waredscrp,inwaremx[i].inworkdate,ld_cost_notax) = 0 THEN arg_msg = "第" + String(i) + "行," + arg_msg rslt = 0 GOTO ext END IF ELSE IF p_update_mtrlware(ll_mtrlwareid, inwaremx[i].mtrlid,inwaremx[i].mtrlcode,& storageid,inwaremx[i].plancode,inwaremx[i].status,& 0 - inwaremx[i].qty,0 - inwaremx[i].addqty,inwaremx[i].cost,inwaremx[i].planprice,& inwaremx[i].sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,& inwaremx[i].pcode,arg_msg,inwaremx[i].waredscrp,inwaremx[i].inworkdate,inwaremx[i].cost_notax) = 0 THEN arg_msg = "第" + String(i) + "行," + arg_msg rslt = 0 GOTO ext END IF END IF //先进先出法 ,删除进仓批 u_mtrlware_inmx star Long li_mtrlwaremxid IF li_if_fifo = 1 And inwaremx[i].qty > 0 THEN //正数 使用先进先出 li_mtrlwaremxid = 0 SELECT top 1 mtrlwaremxid INTO :li_mtrlwaremxid FROM u_mtrlware_inmx WHERE scid = :scid AND inwareid = :inwareid AND printid = :inwaremx[i].printid AND if_outware = 0 Using commit_transaction; IF f_del_mtrlware_inmx(li_mtrlwaremxid,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF f_trigger_fifo_procedure(scid,ll_mtrlwareid,indate,1,inwareid,li_mtrlwaremxid,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //重算结存表 IF f_cmp_fifo_warebalc(scid,ll_mtrlwareid,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF IF li_if_fifo = 1 And ll_mtrlwareid > 0 And inwaremx[i].qty < 0 THEN // 负数 等于出仓 IF f_trigger_fifo_procedure(scid,ll_mtrlwareid,indate,2,inwareid,li_mtrlwaremxid,False,commit_transaction,arg_msg) = 0 THEN //等于出仓 rslt = 0 GOTO ext END IF //重算结存表 IF f_cmp_fifo_warebalc(scid,ll_mtrlwareid,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF //检查是否正确生成进仓批 IF li_if_fifo = 1 THEN inwaremx[i].mtrlwareid_xjxc = ll_mtrlwareid 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,inwaremx[i].mtrlwareid_xjxc,commit_transaction,arg_msg) = 0 THEN IF uf_w_cmp_fifo_cb_bill(scid,inwaremx[i].mtrlwareid_xjxc,False,arg_msg) = 0 THEN //尝试修复 rslt = 0 arg_msg = '第' + String(i) + '行 ' + arg_msg GOTO ext ELSE IF f_check_mtrlware_inmx(scid,inwaremx[i].mtrlwareid_xjxc,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 c_auditing_end(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF flag = 0 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 p_clearmx ();//int p_clearmx() //清除明细 it_mxbt=0 return 1 end function public function integer p_getinfo (long arg_scid, long arg_inwareid, ref string arg_msg);//p_getinfo(arg_scid,arg_inwareid,arg_msg) //0 失败 1成功 Int rslt = 1 IF arg_inwareid <= 0 THEN rslt = 0 arG_MSG = "非法进仓单唯一码" GOTO ext END IF SELECT u_inware.inwarecode, u_inware.billtype, u_inware.relid, u_inware.storageid, u_inware.indate, u_inware.inrep, u_inware.part, u_inware.sptid, u_inware.sptname, u_inware.dscrp, u_inware.thflag, u_inware.secflag, u_inware.dxflag, u_inware.flag, u_inware.balcflag, u_inware.otheramt, u_inware.relint_1, u_inware.relint_2, u_inware.relint_3, u_inware.relstr_1, u_inware.relstr_2, u_inware.relstr_3, u_inware.mrate, u_inware.relint_4, u_inware.relint_5, u_inware.cwauditingflag, u_inware.cwauditingrep, u_inware.cwauditingdate, u_inware.priceflag, u_inware.pricedate, u_inware.priceemp, u_inware.viewdate INTO :inwarecode, :billtype, :relid, :storageid, :indate, :inrep, :part, :sptid, :sptname, :dscrp, :thflag, :secflag, :dxflag, :flag, :balcflag, :otheramt, :relint_1, :relint_2, :relint_3, :relstr_1, :relstr_2, :relstr_3, :mrate, :relint_4, :relint_5, :cwauditingflag, :cwauditingrep, :cwauditingdate, :priceflag, :pricedate, :priceemp, :viewdate FROM u_inware WHERE u_inware.inwareid = :arg_inwareid AND scid = :arg_scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询操作失败(错误进仓单唯一码),进仓单"+commit_transaction.SQLErrText GOTO ext END IF inwareid = arg_inwareid scid = arg_scid uf_get_billname(billtype) ext: IF rslt = 0 THEN p_reset() arg_msg = billname + ',' + arg_msg END IF RETURN rslt end function public function integer p_reset ();//int p_reset() //清除对象及其明细 scid=0 inwareid=0 inwarecode='' billtype=0 opemp='' modemp='' auditingrep='' secauditingrep = '' secflag = 0 flag=0 relid=0 storageid=0 inrep='' part='' dscrp='' sptid=0 sptname='' Dxflag=0 thflag=0 otheramt=0 relint_1=0 relint_2=0 relint_3=0 relstr_1='' relstr_2='' relstr_3='' sum_amt = 0 jgsum_amt = 0 sum_uamt = 0 sum_uamt_tax = 0 sum_bsamt = 0 sum_bsamt_tax = 0 it_newbegin=false it_updatebegin=false storage_plancode_flag=0 //仓库中是否设置了使用 “进仓单号” 作为批号 //清除明细 p_clearmx() return 1 end function public function integer p_update_cost (long arg_scid, long arg_mtrlid, long arg_sptid_cusid, long arg_storageid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, long arg_dxflag, ref string arg_msg, boolean arg_ifcommit);//貌似没有用的 //p_update_cost(arg_scid,arg_mtrlid,arg_sptid_cusid,arg_storageid,arg_status,arg_woodcode,arg_pcode,arg_msg,arg_ifcommit) Int rslt = 1 Dec ld_newcost SELECT incamt/incqty INTO :ld_newcost FROM u_warebalc WHERE scid = :Arg_scid AND balcdateint = 0 AND sptid_cusid = :arg_sptid_cusid AND mtrlid = :arg_mtrlid AND Storageid = :arg_storageid AND status = :arg_status AND woodcode = :arg_woodcode And pcode = :arg_pcode Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_msg = '查询均价失败!~r~n'+commit_transaction.SQLErrText GOTO ext END IF ld_newcost = Round(ld_newcost,10) UPDATE u_outwaremx SET cost = :ld_newcost, costamt = round(qty*:ld_newcost,2) FROM u_outware INNER JOIN u_outwaremx ON u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid WHERE u_outware.scid = :Arg_scid AND u_outware.balcflag = 0 AND u_outwaremx.sptid = :arg_sptid_cusid AND u_outwaremx.mtrlid = :arg_mtrlid AND u_outware.Storageid = :arg_storageid AND u_outwaremx.status = :arg_status AND u_outwaremx.woodcode = :arg_woodcode And u_outwaremx.pcode = :arg_pcode And u_outwaremx.plancode = :Arg_plancode Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_msg = '更新均价失败!' GOTO ext END IF UPDATE u_mtrlware SET wareamt = round(noallocqty*:ld_newcost,2), waredate = getdate(), cost = :ld_newcost WHERE ( mtrlid = :arg_mtrlid ) AND ( plancode = :arg_plancode ) AND ( storageid = :arg_storageid ) AND ( scid = :scid ) AND ( status = :arg_status ) AND ( sptid = :arg_sptid_cusid) AND ( dxflag = :arg_dxflag) AND ( woodcode = :arg_woodcode) AND ( pcode = :arg_pcode) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_msg = '更新库存均价失败!' GOTO ext END IF UPDATE u_warebalc SET balcamt = balcqty*:ld_newcost, desamt = desqty*:ld_newcost, saleoutamt = saleoutqty*:ld_newcost, cpoutamt = cpoutqty*:ld_newcost, jgoutamt = jgoutqty*:ld_newcost, mvoutamt = mvoutqty*:ld_newcost, dioutamt = dioutqty*:ld_newcost, otoutamt = otoutqty*:ld_newcost, pkoutamt = pkoutqty*:ld_newcost, saleoutamt_th = saleoutqty_th*:ld_newcost WHERE ( mtrlid = :arg_mtrlid ) AND ( storageid = :arg_storageid ) AND ( balcdateint = 0) AND ( status = :arg_status ) AND (woodcode = :arg_woodcode) AND (pcode = :arg_pcode) AND (sptid_cusid = :arg_sptid_cusid) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_msg = '更新库存结存均价失败!' GOTO ext END IF 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 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 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.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 IsNull(s_mx.uamt_tax) Then s_mx.uamt_tax = 0 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.cost_notax) Then s_mx.cost_notax = 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 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].fprice_notax = inwaremx[it_mxbt].fprice / (1 + s_mx.tax) //不含税价 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 //原币,实价含税金额 If s_mx.uamt_tax = 0 Then 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 //原币, 税金 Else inwaremx[it_mxbt].uamt_tax = s_mx.uamt_tax End If 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].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 // Decimal ld_cost_notax 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,cost_notax Into :ld_cost,:ld_cost_notax 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 If sqlca.SQLCode <> 0 Or IsNull(ld_cost_notax) Then ld_cost_notax = 0 inwaremx[it_mxbt].cost = ld_cost inwaremx[it_mxbt].cost_notax = ld_cost_notax Else inwaremx[it_mxbt].cost = inwaremx[it_mxbt].fprice * s_mx.rebate If s_mx.cost_notax = 0 Then inwaremx[it_mxbt].cost_notax = inwaremx[it_mxbt].fprice_notax * s_mx.rebate Else inwaremx[it_mxbt].cost_notax = s_mx.cost_notax End If 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 uof_check_warepdb_audit (long arg_storageid, ref string arg_msg);//如果有盘点表未审核 , 则不能审核通过 Int rslt = 1 Long cnt SELECT count(*) INTO :cnt FROM u_warepdb WHERE storageid = :arg_storageid And flag = 0 Using commit_transaction; 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 = '仓库有盘点表未审核,不能仓审或仓撤单据,请检查' GOTO ext END IF ext: RETURN rslt end function public function integer auditing_chk (ref string arg_msg);//uo_inware_buy 重写 //uo_inware_cp 重写 Long rslt = 1 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 auditing_end (ref string arg_msg);long rslt = 1 return rslt end function public function integer c_auditing_chk (ref string arg_msg);//uo_inware_buy 重写 Long rslt = 1 IF sys_option_hide_ware = 0 THEN IF Not sysautobuild THEN IF billtype = 8 And relid > 0 THEN rslt = 0 arg_msg = "该进仓单是系统生成(如成本调整单),不能手动撤审!" GOTO ext END IF IF billtype = 9 And dscrp = '盘点表审核自动生成盘盈单' THEN arg_msg = '系统自动生成的单据不能手动撤审' rslt = 0 GOTO ext END IF END IF 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 // // END IF END IF END IF ext: RETURN rslt end function public function integer c_auditing_end (ref string arg_msg);long rslt = 1 return rslt end function public function integer save_chk (ref string arg_msg); long rslt = 1 long cnt //未注册限制 IF sys_if_register = 0 THEN Long ll_bill_count SELECT count(*) INTO :ll_bill_count From u_inware Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,单据数量 " GOTO ext END IF IF ll_bill_count > 100 THEN //我 rslt = 0 arg_msg = "未注册版本,进仓单只能保存100张!" GOTO ext END IF 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 it_mxbt = 0 THEN //如果输入物料资料错则已经清空 rslt = 0 arg_msg = "没有正确进仓内容" GOTO ext END IF IF sys_option_hide_ware = 0 THEN cnt = 0 //检查仓库 SELECT count(*) INTO :cnt FROM u_storage Where u_storage.storageid = :storageid 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 = "错误的仓库编号: "+String(storageid) GOTO ext END IF end if //IF Year(Date(indate)) < 2000 Or IsNull(indate) THEN // rslt = 0 // arg_msg = "缺少进仓发生时间或不合理" // GOTO ext //END IF //==================================================================== // Script - save ( boolean arg_ifcommit, ref string arg_msg ) // Reason: //-------------------------------------------------------------------- // Modified By: yyx Date: 2004.01.02 //-------------------------------------------------------------------- //IF DaysAfter(Date(String(server_dt,'yyyy-mm-dd')),Date(String(indate,'yyyy-mm-dd'))) > sys_option_input_days THEN // rslt = 0 // arg_msg = '进仓日期错误,日期不能超前系统日期' // GOTO ext //END IF // //IF DaysAfter(Date(String(indate,'yyyy-mm-dd')),Date(String(server_dt,'yyyy-mm-dd'))) > sys_option_input_days THEN // rslt = 0 // arg_msg = '进仓日期错误,日期不能落后系统日期' // GOTO ext //END IF IF f_check_inoutdate(storageid,indate,True,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //==================================================================== IF billtype = 1 Or billtype = 4 THEN SELECT name INTO :sptname FROM u_spt Where sptid = :sptid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,供应商资料" GOTO ext END IF IF relint_1 = 0 THEN arg_msg = '请选择结算方式' rslt = 0 GOTO ext END IF ELSEIF billtype = 8 THEN IF Trim(sptname) = '' Or IsNull(sptname) THEN rslt = 0 arg_msg = "请输入进仓原因!" GOTO ext END IF ELSEIF billtype = 9 THEN IF Trim(sptname) = '' Or IsNull(sptname) THEN sptname = "盘盈" END IF END IF if lena(sptname) > 30 then sptname = lefta(sptname, 30) ext: return rslt end function public function integer save_end (ref string arg_msg);long rslt = 1 return rslt end function public function integer uf_chk_updatecost (ref string arg_msg);//撤审限制,迟于本出仓单审核时间的成本价调整单审核后本出仓单不能撤审 //否则单价会出现错误; int rslt = 1 Long i, ll_count FOR i = 1 TO it_mxbt // ll_count = 0 // SELECT count(*) // INTO :ll_count // FROM u_updatecostmx, // u_updatecost // WHERE ( u_updatecostmx.scid = u_updatecost.scid ) AND // ( u_updatecost.wareid = u_updatecostmx.wareid) AND // ( u_updatecost.flag = 1 ) AND // ( u_updatecostmx.mtrlwareid = :outwaremx[i].mtrlwareid) AND // ( u_updatecostmx.scid = :scid) and // ( u_updatecost.Auditingdate > :Auditingdate ) USING commit_transaction; // IF sqlca.SQLCode = 0 THEN // IF ll_count > 0 THEN // rslt = 0 // arg_msg = '第'+ string(i) +'行,' + outwaremx[i].mtrlcode + "已调整成本价,不能撤审,涉及成本价调整单数量:" + string(ll_count) // GOTO ext // END IF // ELSE // rslt = 0 // arg_msg = '第'+ string(i) +'行,' + outwaremx[i].mtrlcode + "查询成本价调整单失败" // GOTO ext // END IF NEXT //ext: return rslt end function public function integer acceptmx_chk (s_inwaremx s_mx, ref string arg_msg);int rslt = 1 //检查物料id Int li_statusflag,li_woodcodeflag,li_pcodeflag Int li_status_check,li_woodcode_check,li_pcode_check Decimal ld_capacity,ld_capacity_zj s_mtrlcfg_expr s_pz[] String ls_status_zj Long ll_i //检查物料id SELECT statusflag, woodcodeflag, pcodeflag, status_check, woodcode_check, pcode_check INTO :li_statusflag, :li_woodcodeflag, :li_pcodeflag, :li_status_check, :li_woodcode_check, :li_pcode_check 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 IF li_statusflag = 2 THEN IF s_mx.status = '' THEN arg_msg = '行:'+String(s_mx.printid)+',物料'+sys_option_change_status + '字段使用组合配置,请输入' rslt = 0 GOTO ext END IF ELSEIF li_statusflag = 4 And li_status_check = 1 THEN IF s_mx.status = '' THEN arg_msg = '行:'+String(s_mx.printid)+',物料'+sys_option_change_woodcode + '字段使用部件选配,请输入' rslt = 0 GOTO ext END IF ELSEIF li_statusflag = 1 Or li_statusflag = 0 THEN IF f_check_status(1,s_mx.status) = 0 THEN rslt = 0 arg_msg = '行:'+String(s_mx.printid)+",查询操作失败,可能"+sys_option_change_status+"未定义,物料:"+s_mx.mtrlcode+",内容:"+s_mx.status GOTO ext END IF END IF IF li_woodcodeflag = 4 And li_woodcode_check = 1 THEN IF s_mx.woodcode = '' THEN arg_msg = '行:'+String(s_mx.printid)+',物料'+sys_option_change_woodcode + '字段使用部件选配,请输入' rslt = 0 GOTO ext END IF ELSEIF li_woodcodeflag = 1 Or li_woodcodeflag = 0 THEN IF f_check_status(2,s_mx.woodcode) = 0 THEN rslt = 0 arg_msg = '行:'+String(s_mx.printid)+",查询操作失败,可能"+sys_option_change_woodcode+"未定义,物料:"+s_mx.mtrlcode+",内容:"+s_mx.woodcode GOTO ext END IF END IF IF li_pcodeflag = 4 And li_pcode_check = 1 THEN IF s_mx.pcode = '' THEN arg_msg = '行:'+String(s_mx.printid)+',物料'+sys_option_change_pcode + '字段使用部件选配,请输入' rslt = 0 GOTO ext END IF ELSEIF li_pcodeflag = 1 Or li_pcodeflag = 0 THEN IF f_check_status(3,s_mx.pcode) = 0 THEN rslt = 0 arg_msg = '行:'+String(s_mx.printid)+",查询操作失败,可能"+sys_option_change_pcode+"未定义,物料:"+s_mx.mtrlcode+",内容:"+s_mx.pcode GOTO ext END IF END IF //IF li_statusflag = 2 THEN // ld_capacity = 0 // f_checkpz(s_mx.status,s_pz[]) // FOR ll_i = 1 To UpperBound(s_pz) // ls_status_zj = s_pz[ll_i].cfgname // SELECT capacity // INTO :ld_capacity_zj // FROM u_mtrl_configure // WHERE mtrlid = :s_mx.mtrlid // And Name = :ls_status_zj; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "第"+String(s_mx.printid)+"行,查询子件 "+ls_status_zj+" 产能参数操作失败" // GOTO ext // END IF // // ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_i].qty) // NEXT //END IF ext: return rslt end function public function integer mod_price (long arg_scid, long arg_inwareid, long arg_printid, decimal arg_uprice, decimal arg_jgprice, decimal arg_rebate, decimal arg_tax, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 uo_spt_price uo_sptprice uo_sptprice = Create uo_spt_price //MessageBox('','sss') IF p_getinfo(arg_scid,arg_inwareid,arg_msg) = 0 THEN rslt = 0 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 Decimal ld_uprice,ld_uqty,lde_buyqty,ld_rate,ld_qty,ld_rebate,ld_cost,lde_tax,lde_mrate Long ll_mtrlid,ll_sptid String ls_status,ls_woodcode,ls_pcode,ld_plancode Decimal ld_fprice_new,ld_price_new,ld_cost_new Decimal lde_uamt, lde_uamt_tax, lde_bsamt, lde_bsamt_tax Long ll_storageid decimal ld_uprice_notax_new SELECT mrate,storageid INTO :lde_mrate,:ll_storageid FROM u_inware WHERE scid = :arg_scid AND inwareid = :arg_inwareid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询进仓单内容失败' GOTO ext END IF Long li_if_fifo = 0 SELECT if_fifo INTO :li_if_fifo FROM u_storage Where storageid = :ll_storageid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "查询仓库存货核算方法错误!" rslt = 0 GOTO ext END IF IF li_if_fifo = 1 THEN arg_msg = "仓库存货核算使用先进先出法,不能使用该功能!" rslt = 0 GOTO ext END IF SELECT uprice, buyqty, uqty, rate, qty, rebate, mtrlid, status, woodcode, pcode, cost, plancode, sptid_cusid, tax INTO :ld_uprice, :lde_buyqty, :ld_uqty, :ld_rate, :ld_qty, :ld_rebate, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ld_cost, :ld_plancode, :ll_sptid, :lde_tax FROM u_inwaremx WHERE scid = :arg_scid AND inwareid = :arg_inwareid AND printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询进仓单明细内容失败' GOTO ext END IF IF arg_tax = -1 THEN arg_tax = lde_tax IF arg_rebate = -1 THEN arg_rebate = ld_rebate IF arg_uprice = ld_uprice And arg_tax = lde_tax And arg_rebate = ld_rebate THEN rslt = 0 arg_msg = '单价、折扣、税率没有任何修改,不能保存' GOTO ext END IF //库存单位单价 本位币 IF Round(lde_buyqty * ld_rate,sys_option_unit_dec) <> 0 THEN ld_fprice_new = Round((arg_uprice * lde_buyqty ) / (Round(lde_buyqty * ld_rate,sys_option_unit_dec)) * lde_mrate,10) ELSE ld_fprice_new = Round(arg_uprice * ld_rate * mrate,10) END IF ld_price_new = ld_fprice_new * arg_rebate //库存单位实价 本位币 ld_cost_new = ld_fprice_new * arg_rebate //进仓成本价 lde_uamt = Round(lde_buyqty * arg_uprice * arg_rebate, 2) //原币,实价含税金额 lde_uamt_tax = Round(lde_buyqty * arg_uprice * arg_rebate * arg_tax / ( 1 + arg_tax), 2) //原币, 税金 lde_bsamt = Round(lde_buyqty * arg_uprice * arg_rebate * lde_mrate, 2) //本位币, 实价含税金额 lde_bsamt_tax = Round(lde_buyqty * arg_uprice * arg_rebate * lde_mrate * arg_tax / ( 1 + arg_tax), 2) //本位币, 税金 ld_uprice_notax_new = arg_uprice / ( 1 + arg_tax ) //不含税单价=单价/(1+税率) //更新单据 UPDATE u_inwaremx SET uprice = :arg_uprice, fprice = :ld_fprice_new, price = :ld_price_new, cost = :ld_cost_new, costamt = round(:ld_cost_new * qty, 2), jgprice = :arg_jgprice, rebate = :arg_rebate, tax = :arg_tax, uamt = :lde_uamt, uamt_tax = :lde_uamt_tax, bsamt = :lde_bsamt, bsamt_tax = :lde_bsamt_tax, uprice_notax = :ld_uprice_notax_new WHERE scid = :arg_scid AND inwareid = :arg_inwareid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新单据明细的单价失败' GOTO ext END IF Decimal ld_bgamt,ld_incamt,ld_bgqty,ld_incqty Decimal ld_newcost SELECT bgamt, incamt, bgqty, incqty INTO :ld_bgamt, :ld_incamt, :ld_bgqty, :ld_incqty FROM u_warebalc WHERE mtrlid = :ll_mtrlid AND balcdateint = 0 AND storageid = :storageid AND status = :ls_status AND woodcode = :ls_woodcode AND pcode = :ls_pcode AND sptid_cusid = :ll_sptid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关结存信息失败' GOTO ext END IF IF ld_bgqty + ld_incqty <> 0 THEN ld_newcost = Round((ld_bgamt + ld_incamt - ld_cost * ld_qty + ld_cost_new * ld_qty) / (ld_bgqty + ld_incqty),10) ELSE ld_newcost = 0 END IF IF ld_newcost < 0 THEN ld_newcost = 0 //更新结存 UPDATE u_warebalc SET incamt = incamt + round((:ld_cost_new - :ld_cost) * :ld_qty,2), desamt = round(desqty * :ld_newcost,2), balcamt = round(balcqty * :ld_newcost,2) WHERE mtrlid = :ll_mtrlid AND balcdateint = 0 AND Storageid = :storageid AND status = :ls_status AND woodcode = :ls_woodcode AND pcode = :ls_pcode Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新结存表失败' GOTO ext END IF Long cnt //100823 SELECT count(*) INTO :cnt FROM u_mtrlware WHERE mtrlid = :ll_mtrlid AND Storageid = :storageid AND status = :ls_status AND woodcode = :ls_woodcode AND pcode = :ls_pcode AND plancode = :ld_plancode AND Sptid = :ll_sptid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询库存表信息失败' GOTO ext END IF IF cnt > 1 THEN rslt = 0 arg_msg = '物料库存多批号,不能更新单价' GOTO ext END IF Long ll_mtrlwareid Decimal ld_cost_mtrlware,ld_wareamt_mtrlware,ld_noallocqty_mtrlware SELECT mtrlwareid, cost, wareamt, noallocqty INTO :ll_mtrlwareid, :ld_cost_mtrlware, :ld_wareamt_mtrlware , :ld_noallocqty_mtrlware FROM u_mtrlware WHERE mtrlid = :ll_mtrlid AND Storageid = :storageid AND status = :ls_status AND woodcode = :ls_woodcode AND pcode = :ls_pcode AND plancode = :ld_plancode AND Sptid = :ll_sptid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询库存表信息失败' GOTO ext END IF //原来是 SET cost = :ld_newcost, //原来是 wareamt = round(noallocqty * :ld_newcost,2) //因为结存表不含plancode字 所以 结存表计算出来的 ld_newcost 不是正确的单价 应该重新算ld_newcost Decimal ld_newcost_mtrlware IF ld_noallocqty_mtrlware <> 0 THEN ld_newcost_mtrlware = Round((ld_wareamt_mtrlware - ld_cost_mtrlware * ld_qty + ld_cost_new * ld_qty) / (ld_noallocqty_mtrlware),10) ELSE ld_newcost_mtrlware = 0 END IF // Decimal dec_sum_amt Decimal dec_sum_uqty SELECT sum(u_inwaremx.uqty * u_inwaremx.rebate * u_inwaremx.uprice) AS uamt ,sum(u_inwaremx.uqty) AS uqty INTO :dec_sum_amt ,:dec_sum_uqty FROM u_inwaremx INNER JOIN u_inware ON u_inware.scid = u_inwaremx.scid AND u_inware.inwareid = u_inwaremx.inwareid WHERE flag = 1 AND u_inwaremx.mtrlid = :ll_mtrlid AND u_inware.storageid = :storageid AND u_inwaremx.STATUS = :ls_status AND u_inwaremx.woodcode = :ls_woodcode AND u_inwaremx.pcode = :ls_pcode AND u_inwaremx.sptid_cusid = :ll_sptid AND u_inwaremx.plancode = :ld_plancode Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询库存表1信息失败' GOTO ext END IF IF IsNull(dec_sum_amt) THEN dec_sum_amt = 0 IF IsNull(dec_sum_uqty) THEN dec_sum_uqty = 0 IF dec_sum_uqty <> 0 THEN ld_newcost_mtrlware = Round((dec_sum_amt ) / (dec_sum_uqty),10) ELSE ld_newcost_mtrlware = 0 END IF //判断系统有没有用批号 如果没有用回原来的模式 20171218 Long llk_cnt llk_cnt = 0 SELECT count(*) Into :llk_cnt From u_mtrlware Where Len(plancode) > 0 Using commit_transaction; IF IsNull(llk_cnt) THEN llk_cnt = 0 IF llk_cnt = 0 THEN ld_newcost_mtrlware = ld_newcost END IF //更新库存 UPDATE u_mtrlware SET cost = :ld_newcost_mtrlware, wareamt = round(noallocqty * :ld_newcost_mtrlware,2) WHERE mtrlid = :ll_mtrlid AND Storageid = :storageid AND status = :ls_status AND woodcode = :ls_woodcode AND pcode = :ls_pcode AND plancode = :ld_plancode AND Sptid = :ll_sptid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新库存表成本价、金额失败' GOTO ext END IF //原来是 SET u_outwaremx.costamt = round(u_outwaremx.qty * :ld_newcost,2) //更新出仓 UPDATE u_outwaremx SET u_outwaremx.costamt = round(u_outwaremx.qty * :ld_newcost_mtrlware,2) FROM u_outwaremx INNER JOIN u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid WHERE u_outwaremx.mtrlid = :ll_mtrlid AND u_outware.storageid = :storageid AND u_outwaremx.status = :ls_status AND u_outwaremx.woodcode = :ls_woodcode AND u_outwaremx.pcode = :ls_pcode AND u_outware.balcflag = 0 AND u_outwaremx.plancode = :ld_plancode Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新未结存的出仓单金额失败' GOTO ext END IF //更新供应商价格历史 Dec lde_newprice Long ll_inwareid IF billtype = 4 THEN //外协 lde_newprice = arg_jgprice ll_inwareid = relid ELSE lde_newprice = arg_uprice ll_inwareid = arg_inwareid END IF IF uo_sptprice.uf_update_sptprice_mx(thflag,ll_inwareid,arg_printid,0,lde_newprice,ld_rebate,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; arg_msg = billname + ',' + arg_msg ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy uo_sptprice RETURN rslt end function public function integer mod_buyqty (long arg_scid, long arg_inwareid, long arg_printid, decimal arg_buyqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 uo_spt_price uo_sptprice uo_sptprice = CREATE uo_spt_price IF p_getinfo(arg_scid,arg_inwareid,arg_msg) = 0 THEN rslt = 0 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 Decimal ld_uprice,ld_uqty,lde_buyqty,ld_rate,ld_qty,ld_rebate,ld_cost,lde_tax,lde_mrate Long ll_mtrlid,ll_sptid String ls_status,ls_woodcode,ls_pcode,ld_plancode Decimal ld_fprice_new,ld_price_new,ld_cost_new decimal lde_uamt, lde_uamt_tax, lde_bsamt, lde_bsamt_tax long ll_storageid select mrate,storageid into :lde_mrate,:ll_storageid FROM u_inware WHERE scid = :arg_scid AND inwareid = :arg_inwareid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询进仓单内容失败' GOTO ext END IF Long li_if_fifo = 0 SELECT if_fifo INTO :li_if_fifo FROM u_storage Where storageid = :ll_storageid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "查询仓库存货核算方法错误!" rslt = 0 GOTO ext END IF IF li_if_fifo = 1 THEN arg_msg = "仓库存货核算使用先进先出法,不能使用该功能!" rslt = 0 GOTO ext END IF SELECT uprice, buyqty, uqty, rate, qty, rebate, mtrlid, status, woodcode, pcode, cost, plancode, sptid_cusid, tax INTO :ld_uprice, :lde_buyqty, :ld_uqty, :ld_rate, :ld_qty, :ld_rebate, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ld_cost, :ld_plancode, :ll_sptid, :lde_tax FROM u_inwaremx WHERE scid = :arg_scid AND inwareid = :arg_inwareid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询进仓单明细内容失败' GOTO ext END IF IF arg_buyqty = lde_buyqty THEN rslt = 0 arg_msg = '收货数量没有任何修改,不能保存' GOTO ext END IF ////库存单位收货数量 本位币 //IF Round(lde_buyqty * ld_rate,sys_option_unit_dec) <> 0 THEN // ld_fprice_new = Round((arg_uprice * lde_buyqty ) / (Round(lde_buyqty * ld_rate,sys_option_unit_dec)) * lde_mrate,10) //ELSE // ld_fprice_new = Round(arg_uprice * ld_rate * mrate,10) //END IF // //ld_price_new = ld_fprice_new * arg_rebate//库存单位实价 本位币 // //ld_cost_new = ld_fprice_new * arg_rebate //进仓成本价 lde_uamt = round(arg_buyqty * ld_uprice * ld_rebate, 2) //原币,实价含税金额 lde_uamt_tax = round(arg_buyqty * ld_uprice * ld_rebate * lde_tax / ( 1 + lde_tax), 2) //原币, 税金 lde_bsamt = round(arg_buyqty * ld_uprice * ld_rebate * lde_mrate, 2) //本位币, 实价含税金额 lde_bsamt_tax = round(arg_buyqty * ld_uprice * ld_rebate * lde_mrate * lde_tax / ( 1 + lde_tax), 2) //本位币, 税金 //更新单据 UPDATE u_inwaremx SET buyqty = :arg_buyqty, uamt = :lde_uamt, uamt_tax = :lde_uamt_tax, bsamt = :lde_bsamt, bsamt_tax = :lde_bsamt_tax WHERE scid = :arg_scid AND inwareid = :arg_inwareid AND printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新单据明细的收货数量失败' GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; arg_msg = billname + ',' + arg_msg ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF DESTROY uo_sptprice RETURN rslt end function public subroutine uf_get_billname (integer arg_billtype);CHOOSE CASE arg_billtype CASE 1 billname = '采购进仓单' CASE 2 billname = '采购进仓单' CASE 3 billname = '生产进仓单' CASE 4 billname = '外协进仓单' CASE 8 billname = '其他进仓单' CASE 9 billname = '盘盈进仓单' CASE 12 billname = '调拨进仓单' CASE 15 billname = '拆装进仓单' CASE 20 billname = '来料加工收料进仓单' CASE 22 billname = '库存配置调整单' END CHOOSE end subroutine public function decimal uof_get_mtrlware_cost (long arg_scid, long arg_storageid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, long arg_sptid, long arg_dxflag);Decimal dec_fifo_cost // ////如果进仓单价为0自动取库存成本价作为进仓成本 dec_fifo_cost = 0 SELECT cost INTO :dec_fifo_cost FROM u_mtrlware WHERE ( scid = :arg_scid ) AND ( storageid = :arg_storageid ) AND ( mtrlid = :arg_mtrlid ) AND ( status = :arg_status ) AND ( woodcode = :arg_woodcode) AND ( pcode = :arg_pcode) AND ( plancode = :arg_plancode ) AND ( sptid = :arg_sptid) AND ( dxflag = :arg_dxflag) Using commit_transaction ; IF dec_fifo_cost > 0 THEN RETURN dec_fifo_cost ELSE RETURN 0 END IF end function public function integer uf_w_cmp_fifo_cb_bill (long ll_scid, long ll_mtrlwareid, boolean arg_ifcommit, ref string arg_msg);// Long rslt = 1 Long contractcnt,i datastore ds //ll_row = dw_1.GetRow() //IF ll_row <= 0 THEN RETURN // // // //ll_scid = dw_1.Object.u_mtrlware_scid[ll_row] //ll_mtrlwareid = dw_1.Object.u_mtrlware_mtrlwareid[ll_row] // //IF ll_mtrlwareid <= 0 THEN RETURN ds = Create datastore ds.DataObject = "ddds_cs_cmp_xjxc" ds.SetTransObject(commit_transaction) contractcnt = ds.Retrieve(ll_scid,ll_mtrlwareid) //MessageBox('',String(contractcnt)) DELETE u_mtrlware_inmx Where scid = :ll_scid And mtrlwareid = :ll_mtrlwareid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除库存进仓批失败" GOTO ext END IF Long ll_inwareid,ll_printid DateTime dt_indate String ls_inwarecode Decimal dec_inqty Decimal dec_inprice,dec_inprice_notax FOR i = 1 To contractcnt ll_inwareid = 0 ll_printid = 0 ls_inwarecode = '' dec_inqty = 0 dec_inprice = 0 ll_inwareid = ds.Object.inwareid[i] ll_printid = ds.Object.printid[i] dt_indate = ds.Object.inwaredate[i] ls_inwarecode = ds.Object.inwarecode[i] dec_inqty = ds.Object.inqty[i] dec_inprice = ds.Object.inprice[i] dec_inprice_notax = ds.Object.inprice_notax[i] IF f_add_mtrlware_inmx(ll_scid,ll_mtrlwareid,ll_inwareid,ll_printid,ls_inwarecode,dt_indate,dec_inqty,dec_inprice,dec_inprice_notax,0,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF f_cmp_fifo_cb_mtrlware(ll_scid,ll_mtrlwareid,False,commit_transaction,arg_msg) = 0 THEN rslt = 0 END IF 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 audit_subject (long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg); Int rslt = 1,cnt = 0 IF arg_billid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF p_getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF billtype = 1 THEN IF secflag = 0 THEN rslt = 0 arg_msg = "单据没有财审" GOTO ext END IF ELSE IF flag = 0 THEN rslt = 0 arg_msg = "单据没有仓审" GOTO ext END IF END IF IF cwauditingflag = 1 THEN rslt = 0 arg_msg = "单据已经总账审核" GOTO ext END IF UPDATE u_inware SET cwauditingflag = 1, cwauditingdate = getdate(), cwauditingrep = :publ_operator WHERE ( u_inware.inwareid = :arg_billid ) AND ( u_inware.scid = :arg_scid) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致总账审核操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK Using commit_transaction; GOTO ext END IF ext: IF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF Return (rslt) end function public function integer c_audit_subject (long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg); Int rslt = 1,cnt = 0 IF arg_billid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF p_getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF cwauditingflag = 0 THEN rslt = 0 arg_msg = "单据没有总账审核" GOTO ext END IF UPDATE u_inware SET cwauditingflag = 0, cwauditingdate =null, cwauditingrep = '' WHERE ( u_inware.inwareid = :arg_billid ) AND ( u_inware.scid = :arg_scid) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致总账撤审操作失败"+"~n"+commit_transaction.SQLErrText ROLLBACK Using commit_transaction; GOTO ext END IF ext: IF arg_ifcommit And rslt = 1 THEN COMMIT Using commit_transaction; END IF Return (rslt) end function public function integer p_update_mtrlware (ref long arg_mtrlwareid, long arg_mtrlid, string arg_mtrlcode, long arg_storageid, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_addqty, decimal arg_price, decimal arg_planprice, long arg_sptid, integer arg_dxflag, string arg_woodcode, string arg_pcode, ref string arg_msg, string arg_waredscrp, datetime arg_inworkdate, decimal arg_cost_notax);Int rslt = 1 //Long ls_newid String or_err_part Decimal ld_cost Long ll_Mtrlwareid String ls_msg Int li_if_cus_mtrlware, li_if_plancode, li_inwaretype Int li_incheck Decimal i_auditingqty,ld_noallocqty,ld_allocqty,ld_cost_notax String ls_storagename //sys_option_noallocaddqty 仓审进出仓辅数 0-考虑辅数 1-不考虑辅数 20190107 IF sys_option_noallocaddqty <>0 then arg_addqty = 0 END IF SELECT balctype , if_plancode, inwaretype,incheck,storagename INTO :li_if_cus_mtrlware, :li_if_plancode, :li_inwaretype,:li_incheck,:ls_storagename FROM u_storage Where storageid = :arg_storageid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询仓库资料失败' rslt = 0 GOTO ext END IF IF li_if_cus_mtrlware = 1 THEN //使用客户库存 ELSE IF arg_sptid <> 0 THEN arg_sptid = 0 ls_msg = '仓库不使用客户库存~r~n' END IF END IF IF li_if_plancode = 1 THEN //使用批号 ELSE IF arg_plancode <> '' THEN arg_plancode = '' ls_msg = '仓库不使用批号库存~r~n' END IF END IF //检查库存 If (arg_qty < 0 And li_incheck = 1) And Not (billtype = 8 And Pos(sptname,'调整成本价') > 0 ) THEN SELECT u_mtrlware.noallocqty - isnull(uv_mtrlware_noauditingqty.noauditingqty,0), u_mtrlware.noallocqty,u_mtrlware.allocqty INTO :i_auditingqty,:ld_noallocqty,:ld_allocqty 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) WHERE ( u_mtrlware.mtrlid = :arg_mtrlid ) AND ( u_mtrlware.plancode = :arg_plancode ) AND ( u_mtrlware.storageid = :arg_storageid ) AND ( u_mtrlware.scid = :scid ) AND ( u_mtrlware.status = :arg_status ) AND ( u_mtrlware.sptid = :arg_sptid) AND ( u_mtrlware.dxflag = :arg_dxflag) AND ( u_mtrlware.woodcode = :arg_woodcode) AND ( u_mtrlware.pcode = :arg_pcode) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN IF commit_transaction.SQLCode = 100 THEN i_auditingqty = 0 ELSE rslt = 0 arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致查询物料["+arg_mtrlcode+"]库存未开单数操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF IF IsNull(i_auditingqty) THEN i_auditingqty = 0 IF IsNull(ld_noallocqty) THEN ld_noallocqty = 0 IF IsNull(ld_allocqty) THEN ld_allocqty = 0 IF arg_qty < 0 And li_incheck = 1 And Not (billtype = 8 And Pos(sptname,'调整成本价') > 0 ) THEN IF arg_qty + i_auditingqty < 0 THEN rslt = 0 arg_msg = '仓库:'+ls_storagename+",物料["+arg_mtrlcode+"]未开单库存数只有"+String(i_auditingqty,'#####,0.00#######')+',不能扣减数量:'+String(0 - arg_qty,'#####,0.00#######') GOTO ext END IF END IF END IF //-------------------------------------------更新库存 //仓库调拨单,拆装单生成的进出仓单不更新库存表的最近进出时间 090925 //newprice 只有当arg_price > 0 时才更新 lhd20120115 IF billtype = 12 Or billtype = 15 THEN UPDATE u_mtrlware SET noallocqty = noallocqty + :arg_qty , noallocaddqty = noallocaddqty + :arg_addqty, wareamt = wareamt + round(:arg_qty * :arg_price,2), wareamt_notax = wareamt_notax + round(:arg_qty * :arg_cost_notax,2), newprice = case when :arg_price > 0 then :arg_price else newprice END, cost = case noallocqty + :arg_qty when 0 then case when cost < 0 then 0 else cost END else round((wareamt + round(:arg_qty * :arg_price,10)) / ( noallocqty + :arg_qty ),:sys_option_cost_dec) END, cost_notax = case noallocqty + :arg_qty when 0 then case when cost_notax < 0 then 0 else cost_notax END else round((wareamt_notax + round(:arg_qty * :arg_cost_notax,10)) / ( noallocqty + :arg_qty ),:sys_option_cost_dec) END WHERE ( scid = :scid ) AND ( storageid = :arg_storageid ) AND ( mtrlid = :arg_mtrlid ) AND ( status = :arg_status ) AND ( woodcode = :arg_woodcode) AND ( pcode = :arg_pcode) AND ( plancode = :arg_plancode ) AND ( sptid = :arg_sptid) AND ( dxflag = :arg_dxflag) Using commit_transaction ; ELSE UPDATE u_mtrlware SET noallocqty = noallocqty + :arg_qty , noallocaddqty = noallocaddqty + :arg_addqty, wareamt = wareamt + Round(:arg_qty * :arg_price,2), wareamt_notax = wareamt_notax + round(:arg_qty * :arg_cost_notax,2), waredate = getdate(), newprice = case when :arg_price > 0 then :arg_price else newprice END, cost = CASE noallocqty + :arg_qty when 0 THEN case when cost < 0 then 0 else cost END ELSE Round((wareamt + Round(:arg_qty * :arg_price,10)) / ( noallocqty + :arg_qty ),:sys_option_cost_dec) END, cost_notax = case noallocqty + :arg_qty when 0 then case when cost_notax < 0 then 0 else cost_notax END else round((wareamt_notax + round(:arg_qty * :arg_cost_notax,10)) / ( noallocqty + :arg_qty ),:sys_option_cost_dec) END, waredscrp = case when :arg_waredscrp = '' then waredscrp else :arg_waredscrp END, inworkdate = :arg_inworkdate WHERE ( scid = :scid ) AND ( storageid = :arg_storageid ) AND ( mtrlid = :arg_mtrlid ) AND ( status = :arg_status ) AND ( woodcode = :arg_woodcode) AND ( pcode = :arg_pcode) AND ( plancode = :arg_plancode ) AND ( sptid = :arg_sptid) AND ( dxflag = :arg_dxflag) Using commit_transaction ; END IF IF commit_transaction.SQLCode = 0 THEN IF commit_transaction.SQLNRows = 0 THEN ///////////////////////// // ll_Mtrlwareid = f_sys_scidentity(scid,"u_mtrlware","mtrlwareid",arg_msg,False,commit_transaction) IF ll_Mtrlwareid <= 0 THEN rslt = 0 GOTO ext END IF ///////////////////////// // ld_cost = Round(arg_price,sys_option_cost_dec) ld_cost_notax = Round(arg_cost_notax,sys_option_cost_dec) INSERT INTO u_mtrlware ( scid, mtrlwareid, mtrlid, storageid, plancode, status, noallocqty, noallocaddqty, allocqty, wareamt, planprice, sptid, dxflag, woodcode, pcode, cost, newprice, waredscrp , inworkdate, cost_notax, wareamt_notax) VALUES ( :scid, :ll_mtrlwareid, :arg_mtrlid, :arg_storageid, :arg_plancode, :arg_status, :arg_qty, :arg_addqty, 0, round(:arg_price * :arg_qty,2), :arg_planprice, :arg_sptid, :arg_dxflag, :arg_woodcode, :arg_pcode, :ld_cost, :arg_price, :arg_waredscrp, :arg_inworkdate, :arg_cost_notax, round(:arg_qty * :arg_cost_notax,2)) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "编码["+arg_mtrlcode+"]库存建立操作失败~n" IF Pos(Lower(commit_transaction.SQLErrText),"noallocqty") > 0 THEN arg_msg += "库存负数" ELSEIF Pos(Lower(commit_transaction.SQLErrText),"noallocaddqty") > 0 THEN arg_msg += "库存辅数负数" ELSEIF Pos(Lower(commit_transaction.SQLErrText),"cost") > 0 THEN arg_msg += "库存金额负数" ELSE arg_msg += commit_transaction.SQLErrText END IF GOTO ext END IF ELSE //检查成本价调整单 END IF ELSE //or_err_part = 'create rule' //String ls_str rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),"noallocqty") > 0 THEN arg_msg = "编码["+arg_mtrlcode+"]同仓库内同批号没有足够的库存支持冲减" ELSEIF Pos(Lower(commit_transaction.SQLErrText),"noallocaddqty") > 0 THEN arg_msg = "编码["+arg_mtrlcode+"]同仓库内同批号没有足够的库存辅数支持冲减" ELSEIF Pos(Lower(commit_transaction.SQLErrText),"cost") > 0 THEN arg_msg = "编码["+arg_mtrlcode+"]库存金额不足够支持冲减" ELSE arg_msg = "编码["+arg_mtrlcode+"]库存更新操作失败"+"~n"+commit_transaction.SQLErrText END IF GOTO ext END IF //更新进仓明细mtrlwareid 过度的 IF ll_Mtrlwareid = 0 THEN SELECT mtrlwareid INTO :ll_mtrlwareid FROM u_mtrlware WHERE ( scid = :scid ) AND ( storageid = :arg_storageid ) AND ( mtrlid = :arg_mtrlid ) AND ( status = :arg_status ) AND ( woodcode = :arg_woodcode) AND ( pcode = :arg_pcode) AND ( sptid = :arg_sptid) AND ( plancode = :arg_plancode ) AND ( dxflag = :arg_dxflag) Using commit_transaction ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "编码["+arg_mtrlcode+"]查询库存信息失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF IF IsNull(ll_Mtrlwareid) THEN ll_Mtrlwareid = 0 arg_mtrlwareid = ll_Mtrlwareid //Int sys_option_check_mtrware_amt= 0 // 282 限制仓库库存表的库存金额不能为负数 //IF sys_option_check_mtrware_amt = 1 THEN // Decimal dec_wareamt // dec_wareamt = 0 // SELECT wareamt // INTO :dec_wareamt // FROM u_mtrlware // WHERE ( scid = :scid ) AND // ( storageid = :arg_storageid ) AND // ( mtrlid = :arg_mtrlid ) AND // ( status = :arg_status ) AND // ( woodcode = :arg_woodcode) AND // ( pcode = :arg_pcode) AND // ( sptid = :arg_sptid) AND // ( plancode = :arg_plancode ) AND // ( dxflag = :arg_dxflag) Using commit_transaction ; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "编码["+arg_mtrlcode+"]查询库存信息失败"+"~n"+commit_transaction.SQLErrText // GOTO ext // END IF // // IF IsNull(dec_wareamt) THEN dec_wareamt = 0 // // IF dec_wareamt < 0 THEN // rslt = 0 // arg_msg = "编码["+arg_mtrlcode+"] 系统选项282限制库存金额不能为负数!"+"~n"+commit_transaction.SQLErrText // GOTO ext // END IF // //END IF //-----------------------------------更新结存 Decimal ld_pypkqty,ld_pypkaddqty Decimal ld_buyinqty,ld_buyinamt,ld_buyinaddqty Decimal ld_cpinqty,ld_cpinamt,ld_cpinaddqty Decimal ld_jginqty,ld_jginamt,ld_jginaddqty Decimal ld_diinqty,ld_diinamt,ld_diinaddqty Decimal ld_mvinqty,ld_mvinamt,ld_mvinaddqty Decimal ld_otinqty,ld_otinamt,ld_otinaddqty Decimal ld_pyinqty,ld_pyinamt,ld_pyinaddqty Decimal ld_recinqty,ld_recinamt,ld_recinaddqty Decimal ld_recinqty_th,ld_recinamt_th,ld_recinaddqty_th Decimal ld_buyinamt_notax,ld_cpinamt_notax,ld_jginamt_notax,ld_otinamt_notax Decimal ld_pyinamt_notax,ld_mvinamt_notax,ld_diinamt_notax Decimal ld_recinamt_notax,ld_recinamt_th_notax CHOOSE CASE billtype CASE 1 ld_buyinqty = arg_qty ld_buyinaddqty = arg_addqty ld_buyinamt = Round(arg_qty * arg_price,2) ld_buyinamt_notax = Round(arg_qty * arg_cost_notax,2) CASE 3 ld_cpinqty = arg_qty ld_cpinaddqty = arg_addqty ld_cpinamt = Round(arg_qty * arg_price,2) ld_cpinamt_notax = Round(arg_qty * arg_cost_notax,2) CASE 4 ld_jginqty = arg_qty ld_jginaddqty = arg_addqty ld_jginamt = Round(arg_qty * arg_price,2) ld_jginamt_notax = Round(arg_qty * arg_cost_notax,2) CASE 8 ld_otinqty = arg_qty ld_otinaddqty = arg_addqty ld_otinamt = Round(arg_qty * arg_price,2) ld_otinamt_notax = Round(arg_qty * arg_cost_notax,2) CASE 9 ld_pyinqty = arg_qty ld_pyinaddqty = arg_addqty ld_pyinamt = Round(arg_qty * arg_price,2) ld_pyinamt_notax = Round(arg_qty * arg_cost_notax,2) ld_pypkqty = arg_qty ld_pypkaddqty = arg_addqty CASE 12 ld_mvinqty = arg_qty ld_mvinaddqty = arg_addqty ld_mvinamt = Round(arg_qty * arg_price,2) ld_mvinamt_notax = Round(arg_qty * arg_cost_notax,2) CASE 15 ld_diinqty = arg_qty ld_diinaddqty = arg_addqty ld_diinamt = Round(arg_qty * arg_price,2) ld_diinamt_notax = Round(arg_qty * arg_cost_notax,2) CASE 20 IF thflag = 1 THEN ld_recinqty_th = Abs(arg_qty) ld_recinamt_th = Abs(Round(arg_qty * arg_price,2)) ld_recinamt_th_notax = Round(arg_qty * arg_cost_notax,2) ld_recinaddqty_th = Abs(arg_addqty) ld_recinqty = 0 ld_recinamt = 0 ld_recinaddqty = 0 ELSE ld_recinqty = arg_qty ld_recinaddqty = arg_addqty ld_recinamt = Round(arg_qty * arg_price,2) ld_recinamt_notax = Round(arg_qty * arg_cost_notax,2) ld_recinqty_th = 0 ld_recinamt_th = 0 ld_recinaddqty_th = 0 END IF END CHOOSE UPDATE u_warebalc SET incqty = incqty + :arg_qty , incaddqty = incaddqty + :arg_addqty , incamt = incamt + round(:arg_qty * :arg_price,2), incamt_notax = incamt_notax + round(:arg_qty * :arg_cost_notax,2), balcqty = balcqty + :arg_qty, balcaddqty = balcaddqty + :arg_addqty, balcamt = balcamt + round(:arg_qty * :arg_price,2), balcamt_notax = balcamt_notax + round(:arg_qty * :arg_cost_notax,2), pypk = pypk + :ld_pypkqty, pypkaddqty = pypkaddqty + :ld_pypkaddqty, buyinqty = buyinqty + :ld_buyinqty, buyinaddqty = buyinaddqty + :ld_buyinaddqty, buyinamt = buyinamt + :ld_buyinamt, buyinamt_notax = buyinamt_notax + :ld_buyinamt_notax, cpinqty = cpinqty + :ld_cpinqty, cpinaddqty = cpinaddqty + :ld_cpinaddqty, cpinamt = cpinamt + :ld_cpinamt, cpinamt_notax = cpinamt_notax + :ld_cpinamt_notax, jginqty = jginqty + :ld_jginqty, jginaddqty = jginaddqty + :ld_jginaddqty, jginamt = jginamt + :ld_jginamt, jginamt_notax = jginamt_notax + :ld_jginamt_notax, otinqty = otinqty + :ld_otinqty, otinaddqty = otinaddqty + :ld_otinaddqty, otinamt = otinamt + :ld_otinamt, otinamt_notax = otinamt_notax + :ld_otinamt_notax, mvinqty = mvinqty + :ld_mvinqty, mvinaddqty = mvinaddqty + :ld_mvinaddqty, mvinamt = mvinamt + :ld_mvinamt, mvinamt_notax = mvinamt_notax + :ld_mvinamt_notax, diinqty = diinqty + :ld_diinqty, diinaddqty = diinaddqty + :ld_diinaddqty, diinamt = diinamt + :ld_diinamt, diinamt_notax = diinamt_notax + :ld_diinamt_notax, pyinqty = pyinqty + :ld_pyinqty, pyinaddqty = pyinaddqty + :ld_pyinaddqty, pyinamt = pyinamt + :ld_pyinamt, pyinamt_notax = pyinamt_notax + :ld_pyinamt_notax, recinqty = recinqty+:ld_recinqty, recinaddqty = recinaddqty+:ld_recinaddqty, recinamt = recinamt+:ld_recinamt, recinamt_notax = recinamt_notax + :ld_recinamt_notax, recinqty_th = recinqty_th+:ld_recinqty_th, recinaddqty_th = recinaddqty_th+:ld_recinaddqty_th, recinamt_th = recinamt_th+:ld_recinamt_th, recinamt_th_notax = recinamt_th_notax + :ld_recinamt_th_notax WHERE ( mtrlid = :arg_mtrlid ) AND ( storageid = :arg_storageid ) AND ( balcdateint = 0) AND ( status = :arg_status ) AND (woodcode = :arg_woodcode) AND (pcode = :arg_pcode) AND (sptid_cusid = :arg_sptid) Using commit_transaction ; IF commit_transaction.SQLCode = 0 THEN IF commit_transaction.SQLNRows = 0 THEN INSERT INTO u_warebalc ( balcdateint, sptid_cusid, mtrlid, storageid, bgqty, bgamt, incqty, incaddqty, incamt, desqty, desaddqty, desamt, balcqty, balcaddqty, balcamt, pypk, pypkaddqty, status, woodcode, pcode, scid, buyinqty, buyinaddqty, buyinamt, cpinqty, cpinaddqty, cpinamt, jginqty, jginaddqty, jginamt, diinqty, diinaddqty, diinamt, mvinqty, mvinaddqty, mvinamt, otinqty, otinaddqty, otinamt, pyinqty, pyinaddqty, pyinamt, recinqty, recinaddqty, recinamt, recinqty_th, recinaddqty_th, recinamt_th, incamt_notax, balcamt_notax, buyinamt_notax, cpinamt_notax, jginamt_notax, otinamt_notax, mvinamt_notax, diinamt_notax, pyinamt_notax, recinamt_notax, recinamt_th_notax) VALUES ( 0, :arg_sptid, :arg_mtrlid, :arg_storageid, 0, 0, :arg_qty, :arg_addqty, round(:arg_qty * :arg_price,2), 0, 0, 0, :arg_qty, :arg_addqty, round(:arg_qty * :arg_price,2), :ld_pypkqty, :ld_pypkaddqty, :arg_status, :arg_woodcode, :arg_pcode, :scid, :ld_buyinqty, :ld_buyinaddqty, :ld_buyinamt, :ld_cpinqty, :ld_cpinaddqty, :ld_cpinamt, :ld_jginqty, :ld_jginaddqty, :ld_jginamt, :ld_diinqty, :ld_diinaddqty, :ld_diinamt, :ld_mvinqty, :ld_mvinaddqty, :ld_mvinamt, :ld_otinqty, :ld_otinaddqty, :ld_otinamt, :ld_pyinqty, :ld_pyinaddqty, :ld_pyinamt, :ld_recinqty, :ld_recinaddqty, :ld_recinamt, :ld_recinqty_th, :ld_recinaddqty_th, :ld_recinamt_th, round(:arg_qty * :arg_cost_notax,2), round(:arg_qty * :arg_cost_notax,2), :ld_buyinamt_notax, :ld_cpinamt_notax, :ld_jginamt_notax, :ld_otinamt_notax, :ld_mvinamt_notax, :ld_diinamt_notax, :ld_pyinamt_notax, :ld_recinamt_notax, :ld_recinamt_th_notax) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "编码["+arg_mtrlcode+"]结存建立操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF END IF ELSE rslt = 0 or_err_part = 'create rule' IF commit_transaction.SQLCode = 513 Or Pos(Lower(commit_transaction.SQLErrText),or_err_part) > 0 THEN arg_msg = "编码["+arg_mtrlcode+"]同仓库内同批号没有足够的结存支持冲减" ELSE arg_msg = "编码["+arg_mtrlcode+"]结存更新操作失败"+"~n"+commit_transaction.SQLErrText END IF GOTO ext END IF ext: IF rslt = 0 THEN arg_msg = ls_msg + arg_msg ROLLBACK; END IF RETURN rslt end function public function decimal uof_get_mtrlware_cost_notax (long arg_scid, long arg_storageid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, long arg_sptid, long arg_dxflag);Decimal dec_fifo_cost_notax // ////如果进仓单价为0自动取库存成本价作为进仓成本 dec_fifo_cost_notax = 0 SELECT cost_notax INTO :dec_fifo_cost_notax FROM u_mtrlware WHERE ( scid = :arg_scid ) AND ( storageid = :arg_storageid ) AND ( mtrlid = :arg_mtrlid ) AND ( status = :arg_status ) AND ( woodcode = :arg_woodcode) AND ( pcode = :arg_pcode) AND ( plancode = :arg_plancode ) AND ( sptid = :arg_sptid) AND ( dxflag = :arg_dxflag) Using commit_transaction ; IF dec_fifo_cost_notax > 0 THEN RETURN dec_fifo_cost_notax ELSE RETURN 0 END IF end function public function integer p_update_th_cost (long arg_printid, string arg_mtrlcode, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, long arg_dxflag, long arg_sptid, ref decimal arg_ref_cost, decimal arg_ref_cost_notax, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Decimal ld_cost,ld_cost_notax IF sys_option_buyth_wareamt = 0 THEN SELECT cost,cost_notax INTO :ld_cost,:ld_cost_notax FROM u_mtrlware WHERE storageid = :storageid AND mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND plancode = :arg_plancode AND dxflag = :arg_dxflag AND sptid = :arg_sptid And scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询'+arg_mtrlcode+'库存成本价失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ELSE SELECT price,u_inwaremx.uprice_notax * u_inwaremx.rebate INTO :ld_cost,:ld_cost_notax FROM u_inwaremx WHERE scid = :scid AND inwareid = :inwareid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询'+arg_mtrlcode+'退货单价价失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF UPDATE u_inwaremx SET cost = :ld_cost, cost_notax = :ld_cost_notax, costamt = round(qty * :ld_cost, 2) WHERE scid = :scid AND inwareid = :inwareid And printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新'+arg_mtrlcode+'退货成本价失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF arg_ref_cost = ld_cost arg_ref_cost_notax = ld_cost_notax 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 acceptmx (long arg_printid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, decimal arg_uqty, decimal arg_addqty, decimal arg_uprice, decimal arg_rebate, string arg_mxdscrp, ref string arg_msg, decimal arg_jgprice, long arg_relid, long arg_relprintid, integer arg_ifrel, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, long arg_cusid_sptid, string arg_unit, decimal arg_rate, string arg_formula, string arg_waredscrp, datetime arg_inworkdate, decimal arg_cost_notax); s_inwaremx s_mx s_mx.printid = arg_printid s_mx.mtrlid = arg_mtrlid s_mx.mtrlcode = arg_mtrlcode s_mx.plancode = arg_plancode s_mx.status = arg_status s_mx.uqty = arg_uqty s_mx.addqty = arg_addqty s_mx.uprice = arg_uprice s_mx.rebate = arg_rebate s_mx.mxdscrp = arg_mxdscrp s_mx.jgprice = arg_jgprice s_mx.relid = arg_relid s_mx.relprintid = arg_relprintid s_mx.ifrel = arg_ifrel s_mx.woodcode = arg_woodcode s_mx.pcode = arg_pcode s_mx.mtrlcuscode = arg_mtrlcuscode s_mx.sptid = arg_cusid_sptid s_mx.unit = arg_unit s_mx.rate = arg_rate s_mx.formula = arg_formula s_mx.waredscrp = arg_waredscrp s_mx.inworkdate = arg_inworkdate s_mx.cost_notax = arg_cost_notax return acceptmx(s_mx, 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 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(arg_printid) THEN arg_printid = 0 IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = '' IF IsNull(arg_plancode) THEN arg_plancode = '' IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_uqty) THEN arg_uqty = 0 IF IsNull(arg_addqty) THEN arg_addqty = 0 IF IsNull(arg_uprice) THEN arg_uprice = 0 IF IsNull(arg_rebate) THEN arg_rebate = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF IsNull(arg_jgprice) THEN arg_jgprice = 0 IF IsNull(arg_ifrel) THEN arg_ifrel = 0 IF IsNull(arg_relid) THEN arg_relid = 0 IF IsNull(arg_relprintid) THEN arg_relprintid = 0 IF IsNull(arg_mxdscrp) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_cusid_sptid) THEN arg_cusid_sptid = 0 IF IsNull(arg_mtrlcuscode) THEN arg_mtrlcuscode = '' IF IsNull(arg_unit) THEN arg_unit = '' IF IsNull(arg_rate) THEN arg_rate = 1 IF arg_rate = 0 THEN arg_rate = 1 IF IsNull(arg_formula) THEN arg_formula = '' IF IsNull(arg_waredscrp) THEN arg_waredscrp = '' IF mrate = 0 THEN mrate = 1 arg_uqty = Round(arg_uqty,5) arg_addqty = Round(arg_addqty,5) IF arg_mtrlid = 0 Or (arg_uqty = 0 AND arg_addqty = 0) THEN rslt = 1 GOTO ext END IF IF f_check_status(arg_status) = 0 THEN rslt = 0 arg_msg = "第" + String(arg_printid) + "行,查询操作失败,可能" + sys_option_change_status + "未定义,编码:"+arg_mtrlcode+"," + sys_option_change_status +":"+arg_status GOTO ext END IF //检查物料id SELECT unit,planprice INTO :ls_unit,:ld_planprice FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_mtrlid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "第" + String(arg_printid) + "行,查询操作失败,编码:"+arg_mtrlcode GOTO ext END IF IF ls_unit <> arg_unit AND arg_rate = 1 THEN arg_msg = "第" + String(arg_printid) + "行,库存单位与采购单位不同,但转换率为1,请检查!" rslt = 0 GOTO ext END IF IF ls_unit = arg_unit AND arg_rate <> 1 THEN arg_msg = "第" + String(arg_printid) + "行,库存单位与采购单位相同,但转换率不为1,请检查!" rslt = 0 GOTO ext END IF //检查物料限价属性 SELECT iflimitprice INTO :li_iflimitprice FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_mtrlid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "第" + String(arg_printid) + "行,查询限价属性失败:"+arg_mtrlcode GOTO ext END IF //查询采购限价并检查进仓价 IF billtype = 1 OR billtype = 4 THEN IF li_iflimitprice = 1 THEN IF uo_sptprice.uf_check_price(thflag,sptid,arg_mtrlid,arg_mtrlcode,arg_unit,arg_status,arg_woodcode,arg_pcode,arg_uprice * arg_rebate,arg_msg) = 0 THEN arg_msg = "第" + String(arg_printid) + "行," + arg_msg rslt = 0 GOTO ext END IF END IF END IF Int li_if_cus_mtrlware, li_if_plancode, li_inwaretype 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(arg_printid) + "行,查询仓库是否使用客户库存失败" rslt = 0 GOTO ext END IF CHOOSE CASE billtype CASE 1 IF arg_ifrel > 0 THEN IF arg_relid = 0 THEN arg_msg = "第" + String(arg_printid) + "行,请先择相应的订单!" rslt = 0 GOTO ext END IF SELECT taskcode ,uqty - consignedqty,a = 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 = :arg_relid AND u_buytaskmx.printid = :arg_relprintid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "第" + String(arg_printid) + "行,查询采购订单是否有订购:"+arg_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 = :arg_relid AND relprintid = :arg_relprintid AND inwareid <> :inwareid; IF sqlca.SQLCode <> 0 THEN arg_msg = "第" + String(arg_printid) + "行,查询"+arg_mtrlcode+'相关订单单据已开单数失败!' rslt = 0 GOTO ext END IF IF IsNull(ld_noauditqty) THEN ld_noauditqty = 0 END IF CASE 3 IF li_if_cus_mtrlware = 1 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_cust Where cusid = :arg_cusid_sptid; IF sqlca.SQLCode <> 0 THEN arg_msg = "第" + String(arg_printid) + '行,查询客户资料失败' rslt = 0 GOTO ext END IF END IF IF arg_ifrel > 0 THEN IF arg_relid = 0 THEN arg_msg = "第" + String(arg_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 = :arg_relid AND u_saletaskmx.printid = :arg_relprintid AND u_saletaskmx.mtrlid = :arg_mtrlid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "第" + String(arg_printid) + '行,查询销售订单是否有订购:'+arg_mtrlcode+'失败,'+commit_transaction.sqlerrtext rslt = 0 GOTO ext END IF END IF CASE 4 IF arg_ifrel > 0 THEN IF arg_relid = 0 THEN arg_msg = "第" + String(arg_printid) + '行,请先择相应的外协订单' rslt = 0 GOTO ext END IF SELECT u_order_wfjg.taskcode,a = 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 = :arg_relid AND u_order_wfjgmx.printid = :arg_relprintid AND u_order_wfjgmx.mtrlid = :arg_mtrlid AND u_order_wfjgmx.status = :arg_status AND u_order_wfjgmx.woodcode = :arg_woodcode AND u_order_wfjgmx.pcode = :arg_pcode USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "第" + String(arg_printid) + '行,查询外协订单是否有加工:'+arg_mtrlcode+'失败' rslt = 0 GOTO ext END IF END IF END CHOOSE //取默认报价 IF billtype = 1 THEN f_get_defsptprice(sptid,arg_mtrlid,arg_unit,arg_status,arg_pcode,arg_woodcode,ld_dftsptprice) ELSE ld_dftsptprice = 0 END IF IF sysautobuild = FALSE THEN IF arg_uprice * arg_rebate < 0 THEN //检查进仓价 rslt = 0 arg_msg = "第" + String(arg_printid) + '行,' + String(arg_mtrlcode)+" 单价错误" GOTO ext END IF END IF //检查成本价调整单 Long mtrlwareid SELECT mtrlwareid INTO :mtrlwareid FROM u_mtrlware WHERE ( mtrlid = :arg_mtrlid ) AND ( plancode = :arg_plancode ) AND ( storageid = :storageid ) AND ( scid = :scid ) AND ( status = :arg_status ) AND ( sptid = :arg_cusid_sptid) AND ( dxflag = :dxflag) AND ( woodcode = :arg_woodcode) AND ( pcode = :arg_pcode) USING commit_transaction; IF commit_transaction.SQLCode = -1 THEN arg_msg = "第" + String(arg_printid) + "行,查询库存信息失败!" rslt = 0 GOTO ext ELSEIF mtrlwareid > 0 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 = :mtrlwareid AND u_updatecost.scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "第" + String(arg_printid) + "行,查询成本价调整单操作失败" GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = "第" + String(arg_printid) + "行," + arg_mtrlcode + "已开成本价调整单,请先审核" GOTO ext END IF END IF //写入内容 it_mxbt++ inwaremx[it_mxbt].printid = arg_printid inwaremx[it_mxbt].mtrlid = arg_mtrlid inwaremx[it_mxbt].mtrlcode = arg_mtrlcode inwaremx[it_mxbt].unit = arg_unit inwaremx[it_mxbt].rate = arg_rate inwaremx[it_mxbt].noauditqty = ld_noauditqty inwaremx[it_mxbt].bootqty = ld_bootqty //IF sys_option_buyprice_type = 1 THEN // inwaremx[it_mxbt].plancode = arg_plancode //ELSE // inwaremx[it_mxbt].plancode = String(Round(arg_uprice * arg_rebate,5)) //END IF //Long ll_if_plancode,ll_inwaretype //IF storageid > 0 THEN // SELECT if_plancode,inwaretype // INTO :ll_if_plancode,:ll_inwaretype // FROM u_storage // Where storageid = :storageid; // IF sqlca.SQLCode <> 0 THEN // arg_msg = '查询仓库资料失败' // rslt = 0 // GOTO ext // END IF IF li_if_plancode = 0 THEN inwaremx[it_mxbt].plancode = '' ELSE IF li_inwaretype = 1 THEN //无 inwaremx[it_mxbt].plancode = arg_plancode ELSEIF li_inwaretype = 2 THEN //价格 inwaremx[it_mxbt].plancode = String(Round(arg_uprice * arg_rebate,5)) ELSEIF li_inwaretype = 3 THEN //订单 IF ls_relcode <> '' AND billtype = 3 THEN inwaremx[it_mxbt].plancode = ls_relcode ELSEIF ls_saletaskcode <> '' AND (billtype = 1 or billtype = 4 ) THEN inwaremx[it_mxbt].plancode = ls_saletaskcode ELSE inwaremx[it_mxbt].plancode = arg_plancode END IF END IF END IF //END IF inwaremx[it_mxbt].uprice = arg_uprice inwaremx[it_mxbt].rebate = arg_rebate inwaremx[it_mxbt].addqty = arg_addqty inwaremx[it_mxbt].uqty = arg_uqty inwaremx[it_mxbt].qty = Round(arg_uqty * arg_rate,sys_option_unit_dec) IF arg_uqty <> 0 THEN inwaremx[it_mxbt].fprice = Round((arg_uprice * arg_uqty)/(Round(arg_uqty * arg_rate,sys_option_unit_dec)) * mrate ,10) ELSE inwaremx[it_mxbt].fprice = Round(arg_uprice * arg_rate * mrate,10) END IF inwaremx[it_mxbt].price = Round(inwaremx[it_mxbt].fprice * arg_rebate,10) inwaremx[it_mxbt].planprice = ld_planprice inwaremx[it_mxbt].mxdscrp = arg_mxdscrp inwaremx[it_mxbt].dxflag = dxflag inwaremx[it_mxbt].jgprice = arg_jgprice inwaremx[it_mxbt].relid = arg_relid inwaremx[it_mxbt].relprintid = arg_relprintid inwaremx[it_mxbt].ifrel = arg_ifrel inwaremx[it_mxbt].status = arg_status inwaremx[it_mxbt].woodcode = arg_woodcode inwaremx[it_mxbt].pcode = arg_pcode inwaremx[it_mxbt].relcode = ls_relcode inwaremx[it_mxbt].mtrlcuscode = arg_mtrlcuscode inwaremx[it_mxbt].dftsptprice = ld_dftsptprice inwaremx[it_mxbt].formula = arg_formula inwaremx[it_mxbt].waredscrp = arg_waredscrp inwaremx[it_mxbt].inworkdate = arg_inworkdate IF dxflag = 0 THEN inwaremx[it_mxbt].sptid = arg_cusid_sptid ELSE inwaremx[it_mxbt].sptid = sptid END IF IF billtype = 1 THEN String ls_sptmtrlname uo_spt_price uo_price uo_price = CREATE uo_spt_price IF uo_price.uf_getmtrlname(sptid,arg_mtrlid,ls_sptmtrlname,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF DESTROY uo_price inwaremx[it_mxbt].sptmtrlname = ls_sptmtrlname END IF IF thflag = 1 Or (arg_uqty < 0 AND billtype <> 3) THEN SELECT cost INTO :ld_cost FROM u_mtrlware WHERE scid = :scid AND mtrlid = :arg_mtrlid AND storageid = :storageid AND status = :arg_status AND plancode = :arg_plancode AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND dxflag = :dxflag AND sptid = :arg_cusid_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 * arg_rebate END IF ext: DESTROY uo_sptprice IF rslt = 0 THEN p_clearmx() arg_msg = billname + ',' + arg_msg END IF Return(rslt) */ end function public function integer mod_part (long arg_scid, long arg_inwareid, string arg_newpart, ref string arg_msg);Int rslt = 1 arg_newpart = Trim(arg_newpart) IF it_updatebegin Or it_newbegin THEN rslt = 0 arg_msg = "编辑状态下不可用" GOTO ext END IF rslt = p_getinfo(arg_scid,arg_inwareid,arg_msg) IF rslt = 0 THEN GOTO ext UPDATE u_inware SET part = :arg_newpart WHERE u_inware.inwareid = :inwareid AND scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "修改单据相关号操作失败"+"~n" GOTO ext END IF part = arg_newpart ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSE COMMIT Using commit_transaction; END IF Return (rslt) end function on uo_inware.create call super::create TriggerEvent( this, "constructor" ) end on on uo_inware.destroy TriggerEvent( this, "destructor" ) call super::destroy end on