$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 long balcdateint = 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_taxamt = 0 //单据税额 Public ProtectedWrite Decimal sum_taxamt_en = 0 //单据税额(其它单价) Public ProtectedWrite Decimal jgsum_amt = 0 //单据加工总金额 Public ProtectedWrite Int secflag = 0 //财务审核标志 Public ProtectedWrite DateTime secauditingdate //二审核时间 Public ProtectedWrite String secauditingrep //二审核操作员 Public ProtectedWrite Long ctmint Public ProtectedWrite Int priceflag = 0 Public ProtectedWrite String pricerep = '' Public ProtectedWrite DateTime pricedate Public ProtectedWrite Int fkflag = 0 Public ProtectedWrite String fkemp = '' Public ProtectedWrite DateTime fkdate Long relid = 0 //关联id Long storageid = 0 //进仓仓库 DateTime indate //进仓发生时间 DateTime plandate //预计付款时间 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 String relstr_1 = '' String relstr_2 = '' String relstr_3 = '' Long moneyid = 0 Decimal mrate = 1 Long deptid = 0 Boolean lb_ifdelauto = False Boolean if_getid_ture = True Transaction commit_transaction //数据commit事务 s_inwaremx inwaremx[] //明细结构数组 s_inwaremx_mx inwaremx_mx[] //明细结构数组 s_inwaremx_barcode s_mx_barcode[] //明码明细结构数组 s_inware_itemmx inware_itemmx[] Long it_mxbt = 0 //明细结构数组末指针 Long it_mxbt_mx = 0 Long it_mxbt_barcode = 0 //条码明细结构数组末指针 long it_mxbt_item = 0 Boolean it_newbegin = False //新建标志 Boolean it_updatebegin = False //修改标志 Boolean if_py_check_barcode = False //仓库不使用条码盘点时,审核单据是否检查明细数量与条码数量 Boolean if_py_update_barcode = False //仓库不使用条码盘点时,审核单据更新条码状态 Int uo_option_inout_type Int uo_option_barcode_inwareother_paudit,uo_option_barcode_inwarebuy_paudit,uo_option_barcode_inwarecp_paudit Int uo_option_mtrlware_dscrp Int uo_option_unit_dec Int uo_option_buy_zero,uo_option_wfjg_zero String uo_option_change_status,uo_option_change_woodcode,uo_option_change_pcode Int uo_option_ifovertask,uo_option_ifovertask_cp Int uo_option_cost_dec,uo_option_mtrlware_autocmp Int uo_option_use_clfp dec uo_option_cp_inware_scll_rate Int uo_option_barcodelocation_use_inwaremx_location int uo_option_cost_notax int uo_option_djqty_check int uo_option_canpack_ifzanyong 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_rst_mtrlwaredscrp (long arg_scid, long arg_relid, string arg_mxdscrp, ref string arg_msg, ref string arg_ref_dscrp) public function integer p_update_mtrlware_ws (long arg_mtrlid, string arg_mtrlcode, long arg_storageid, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_uqty, decimal arg_price, decimal arg_planprice, long arg_sptid, long arg_dxflag, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, string arg_location, string arg_dscrp, ref string arg_msg) public function integer uof_ref_assign_plan (long arg_scid, long arg_mtrlwareid, decimal arg_qty, ref s_inwaremx_assign_plan arg_s_ap, ref string arg_msg) public function integer uof_ref_assign_plan_cancel (string arg_inwarecode, long arg_inprintid, ref s_inwaremx_assign_plan arg_s_ap, ref string arg_msg) public function integer uof_ref_assign_cancel (string arg_inwarecode, long arg_inprintid, ref s_inwaremx_assign arg_s_a, ref string arg_msg) public function integer uof_ref_mtrlwareid (long arg_scid, long arg_storageid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, string arg_location, long arg_sptid, string arg_mtrlcuscode, ref long arg_mtrlwareid, ref string arg_msg) public function integer uof_check_barcodeqty (ref string arg_msg) public function integer uof_inbarcode_add (integer arg_billtype, long arg_scid, long arg_inwareid, long arg_printid, string arg_barcode, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit) public function integer c_priceaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer priceaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_check_qty_to_bqty (ref string arg_msg) public function integer uof_set_qty_equal_bqty (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_secaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_c_secaudit (long arg_scid, long arg_billid, 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_enprice, decimal arg_rebate, string arg_mxdscrp, ref string arg_msg, decimal arg_jgprice, long arg_relid, integer arg_ifrel, string arg_woodcode, string arg_pcode, long arg_cusid_sptid, string arg_unit, decimal arg_rate, decimal arg_qty, long arg_relprintid, decimal arg_checkqty, string arg_result, string arg_waredscrp, long arg_relbillid, long arg_relbillprintid, string arg_mtrlcuscode, string arg_location, decimal arg_deliqty, decimal arg_tax) public function integer uof_update_planprice (long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_fprice, ref string arg_msg, boolean arg_ifcommit) public function integer uof_ref_assign_plan_plankind (long arg_scid, long arg_mtrlwareid, long arg_plankind, long arg_plankind_relbillid, long arg_plankind_reprintlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref s_inwaremx_assign_plan arg_s_ap, ref string arg_msg) public function integer uof_del_barcode (long arg_scid, long arg_inwareid, string arg_barcode, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx_item (long arg_printid, long arg_itemid, decimal arg_amt, string arg_mxdscrp, ref string arg_msg) public function integer uof_check_warepdb_audit (long arg_storageid, ref string arg_msg) public function integer p_update_mtrlwareid_inwaremx (long arg_mtrlwareid, long arg_inwareid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_disuse (long arg_scid, long arg_inwareid, integer arg_disusetype, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx (s_inwaremx s_mx, ref string arg_msg) public function integer uof_check_scll_rate (long arg_scid, long arg_inwareid, long arg_printid, long arg_relid, long arg_mtrlid, decimal arg_qty, integer arg_ck_if_save_audit, ref string arg_msg) public function integer uof_p_barcode (integer arg_audittype, ref string arg_msg, s_inwaremx_barcode_fp arg_mxbarcode_fp) public function integer p_update_mtrlware (long arg_mtrlid, string arg_mtrlcode, long arg_storageid, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_uqty, decimal arg_price, decimal arg_planprice, long arg_sptid, integer arg_dxflag, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, string arg_location, string arg_dscrp, integer arg_ifvqty, ref string arg_msg) public function integer mod_price (long arg_scid, long arg_inwareid, long arg_printid, decimal arg_enprice, decimal arg_jgprice, decimal arg_tax, decimal arg_rebate, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx_mx (long arg_printid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_fprice, decimal arg_rebate, string arg_mxdscrp, ref string arg_msg, string arg_woodcode, string arg_pcode, long arg_cusid_sptid, long arg_mxprintid, string arg_waredscrp, string arg_mtrlcuscode, string arg_location, long arg_ptinwareid, long arg_ptprintid, integer arg_ifnotinout) end prototypes public function integer newbegin (long arg_scid, integer arg_billtype, ref string arg_msg);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 = 5 OR & arg_billtype = 6 OR & arg_billtype = 8 OR & arg_billtype = 9 OR & arg_billtype = 12 OR & arg_billtype = 15 OR & arg_billtype = 16 OR & arg_billtype = 17 or & arg_billtype = 18 or & arg_billtype = 19 or & arg_billtype = 20 or & arg_billtype = 21 or & arg_billtype = 22 or & arg_billtype = 23 or & arg_billtype = 24 or & arg_billtype = 25 or & arg_billtype = 26 or & arg_billtype = 27 or & arg_billtype = 28) 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+'5-来料加工收料进仓单,' arg_msg = arg_msg+'6-车间生产进仓单,' arg_msg = arg_msg+'8-其它进仓单,' arg_msg = arg_msg+'9-盘盈进仓单,' arg_msg = arg_msg+'12-调拨进仓单,' arg_msg = arg_msg+'15-拆装进仓单,' arg_msg = arg_msg+'16-生产领料车间自动进仓(不按计划),' arg_msg = arg_msg+'17-客户调货进仓单' arg_msg = arg_msg+'18-欠货进仓单' arg_msg = arg_msg+'19-自动组装进仓单' arg_msg = arg_msg+'20-生产领料车间自动进仓单(按计划)' arg_msg = arg_msg+'21-车间库存转换自动进仓单' arg_msg = arg_msg+'22-库存配置调整单自动进仓单' arg_msg = arg_msg+'23-销售发货单发货明细自动进仓单' arg_msg = arg_msg+'24-水口料进仓单' arg_msg = arg_msg+'25-采购收货单包件明细自动进仓单' arg_msg = arg_msg+'26-采购收货包件进仓单' arg_msg = arg_msg+'27-采购收货包件结算单' arg_msg = arg_msg+'28-员工物品归还单' GOTO ext END IF 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 Long cnt = 0,i,cnt_ck,j String ls_msg DateTime server_dt Long ls_newid String ls_sccode Int li_ifmrp Long ll_mtrlid_arr[] Decimal ld_qty_arr[] String ls_mtrlcode_arr[] Long ll_mxcnt = 0 Decimal ld_djqty,ld_noallocqty IF uo_option_djqty_check = -1000 THEN rslt = 0 arg_msg = '选项:[378]进出仓检查冻结数不能大于库存数,读取初始默认值失败,操作取消!' GOTO ext END IF 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(relstr_1) THEN relstr_1 = '' IF IsNull(relstr_2) THEN relstr_2 = '' IF IsNull(relstr_3) THEN relstr_3 = '' IF IsNull(moneyid) THEN moneyid = 0 IF IsNull(mrate) THEN mrate = 0 IF IsNull(deptid) THEN deptid = 0 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 it_mxbt = 0 THEN //如果输入物料资料错则已经清空 rslt = 0 arg_msg = "没有正确进仓内容" GOTO ext END IF 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 String ls_storagename Int li_mustloca SELECT storagename,mustloca,ifmrp INTO :ls_storagename,:li_mustloca,:li_ifmrp FROM u_storage Where storageid = :storageid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,仓库" GOTO ext END IF //检查是否有该仓库的建立权限 IF Not (billtype = 16 Or billtype = 20) THEN IF sys_user_storagestr_new <> '0' THEN IF Pos(sys_user_storagestr_new,','+String(storageid)+',') <= 0 THEN rslt = 0 arg_msg = '没有仓库: '+ls_storagename+' 的建立权限,不允许建立该仓库的单据' GOTO ext END IF END IF END IF // String ls_msg_loca Long ll_cnt_loca ll_cnt_loca = 0 IF li_mustloca = 1 And thflag = 0 And billtype <> 23 THEN FOR i = 1 To it_mxbt IF Trim(inwaremx[i].Location) = '' THEN ll_cnt_loca++ IF ll_cnt_loca <= 10 THEN IF Trim(ls_msg_loca) = '' THEN ls_msg_loca = ls_msg_loca + String(i) ELSE ls_msg_loca = ls_msg_loca + ','+String(i) END IF END IF END IF NEXT IF ll_cnt_loca > 0 THEN rslt = 0 IF ll_cnt_loca <= 10 THEN arg_msg = '仓库属性已设为仓位必填'+'~r~n'+'明细中第'+ls_msg_loca+'行没有填仓位,请检查' ELSE arg_msg = '仓库属性已设为仓位必填'+'~r~n'+'其中第'+ls_msg_loca+'等'+String(ll_cnt_loca)+'行明细没有填仓位,请详细检查' END IF GOTO ext END IF END IF IF Year(Date(indate)) < 2000 Or IsNull(indate) THEN rslt = 0 arg_msg = "缺少进仓发生时间或不合理" GOTO ext END IF Boolean lb_chk_balc = True IF sys_option_warebalc_checksale = 0 And billtype = 23 THEN //临时的,详见系统选项152 lb_chk_balc = False END IF IF f_check_inoutdate(storageid,indate,lb_chk_balc,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF billtype = 1 Or billtype = 4 Or billtype = 26 Or billtype = 27 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 billtype = 1 THEN cnt = 0 SELECT count(*) INTO :cnt FROM cw_currency Where moneyid = :moneyid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询币种失败' rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '币种资料不存在' rslt = 0 GOTO ext END IF IF mrate = 0 THEN arg_msg = '币种汇率错误' rslt = 0 GOTO ext END IF END IF IF billtype = 1 Or billtype = 27 THEN // IF relint_1 = 0 THEN // arg_msg = '请选择结算方式' // rslt = 0 // GOTO ext // END IF plandate = f_findspt_paydate(sptid,indate) END IF ELSEIF billtype = 5 THEN //来料加工收料单 SELECT name INTO :sptname FROM u_cust Where cusid = :sptid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,客户资料" GOTO ext END IF ELSEIF billtype = 6 THEN //车间生产进仓单 IF relid = 0 THEN arg_msg = '请选择车间' rslt = 0 GOTO ext END IF Long ll_storageid_ws SELECT storageid INTO :ll_storageid_ws FROM u_sc_wkp Where wrkGrpid = :relid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作车间对应仓库资料失败,"+commit_transaction.SQLErrText GOTO ext END IF IF ll_storageid_ws <> storageid THEN rslt = 0 arg_msg = "车间对应仓库资料与单据仓库资料不相符,请检查" GOTO ext END IF ELSEIF billtype = 8 THEN IF Trim(sptname) = '' Or IsNull(sptname) THEN rslt = 0 arg_msg = "请输入进仓原因!" GOTO ext END IF END IF IF billtype = 3 THEN IF uo_option_cp_inware_scll_rate = 2 THEN FOR i = 1 To it_mxbt IF inwaremx[i].relid > 0 THEN IF uof_check_scll_rate(scid,inwareid,inwaremx[i].printid,inwaremx[i].relid,inwaremx[i].mtrlid,inwaremx[i].qty,0,arg_msg) = 0 THEN cnt_ck++ ls_msg += '行:'+String(i)+',指令单号:'+inwaremx[i].relcode + ','+arg_msg+'~r~n' END IF END IF NEXT IF cnt_ck > 0 THEN arg_msg = ls_msg rslt = 0 GOTO ext END IF END IF END IF //如果是修改,则增加到废弃单 IF billtype = 1 And inwareid > 0 And sys_option_disuse_inware_buy = 1 THEN IF uof_disuse(scid,inwareid,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF //检查冻结数 IF uo_option_djqty_check = 1 And li_ifmrp = 1 THEN FOR i = 1 To it_mxbt FOR j = 1 To ll_mxcnt IF inwaremx[i].mtrlid = ll_mtrlid_arr[j] THEN ld_qty_arr[j] = ld_qty_arr[j] + inwaremx[i].qty GOTO _next_mx END IF NEXT ll_mxcnt++ ll_mtrlid_arr[ll_mxcnt] = inwaremx[i].mtrlid ld_qty_arr[ll_mxcnt] = inwaremx[i].qty ls_mtrlcode_arr[ll_mxcnt] = inwaremx[i].mtrlcode _next_mx: NEXT FOR i = 1 To ll_mxcnt SELECT SUM(u_OrderRqMtrl_scll.wareqty - u_OrderRqMtrl_scll.DstrQty + isnull(uv_outware_scll_back.qty,0) ) INTO :ld_djqty FROM u_OrderRqMtrl_scll INNER JOIN u_Order_ml ON u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID LEFT OUTER JOIN uv_outware_scll_back ON u_OrderRqMtrl_scll.scid = uv_outware_scll_back.scid AND u_OrderRqMtrl_scll.OrderID = uv_outware_scll_back.relid AND u_OrderRqMtrl_scll.MtrlID = uv_outware_scll_back.mtrlid AND u_OrderRqMtrl_scll.status = uv_outware_scll_back.status AND u_OrderRqMtrl_scll.woodcode = uv_outware_scll_back.woodcode AND u_OrderRqMtrl_scll.pcode = uv_outware_scll_back.pcode WHERE (u_OrderRqMtrl_scll.wareqty <> 0) AND (u_Order_ml.Status NOT IN (3,5,6)) AND u_OrderRqMtrl_scll.wareqty - u_OrderRqMtrl_scll.DstrQty + isnull(uv_outware_scll_back.qty,0) > 0 AND u_OrderRqMtrl_scll.MtrlID = :ll_mtrlid_arr[i] And u_OrderRqMtrl_scll.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ld_djqty = 0 END IF IF IsNull(ld_djqty) THEN ld_djqty = 0 SELECT SUM(u_mtrlware.noallocqty) INTO :ld_noallocqty FROM u_mtrlware INNER JOIN u_storage ON u_mtrlware.storageid = u_storage.storageid WHERE (u_storage.inuse = 1) AND u_storage.ifmrp = 1 AND u_mtrlware.mtrlid = :ll_mtrlid_arr[i] And u_mtrlware.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ld_noallocqty = 0 END IF IF IsNull(ld_noallocqty) THEN ld_noallocqty = 0 IF ld_djqty > ld_noallocqty + ld_qty_arr[i] THEN rslt = 0 arg_msg = '物料['+ls_mtrlcode_arr[i]+']冻结数不能大于库存数,冻结数:'+String(ld_djqty,'#,##0.##########')+',库存数:'+String(ld_noallocqty,'#,##0.##########')+',本次进仓数:'+String(ld_qty_arr[i],'#,##0.##########') GOTO ext END IF NEXT END IF ////////////////////////////////////////////// //开始区分:新建/更新 处理 IF inwareid = 0 THEN //新建 ls_newid = f_sys_scidentity(scid,"u_inware","inwareid",arg_msg,True,id_sqlca) 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 IF relint_2 = 0 THEN inwarecode = getid(scid,ls_sccode + 'CP',Date(server_dt),if_getid_ture,commit_transaction) ELSEIF relint_2 = 1 THEN inwarecode = getid(scid,ls_sccode + 'CF',Date(server_dt),if_getid_ture,commit_transaction) END IF 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 5 IF thflag = 0 THEN inwarecode = getid(scid,ls_sccode + 'JI',Date(server_dt),if_getid_ture,commit_transaction) ELSE inwarecode = getid(scid,ls_sccode + 'JT',Date(server_dt),if_getid_ture,commit_transaction) END IF CASE 6 inwarecode = getid(scid,ls_sccode + 'WP',Date(server_dt),if_getid_ture,commit_transaction) 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 16 inwarecode = getid(scid,ls_sccode + 'LI',Date(server_dt),if_getid_ture,commit_transaction) CASE 17 inwarecode = getid(scid,ls_sccode + 'MI',Date(server_dt),if_getid_ture,commit_transaction) CASE 18 inwarecode = getid(scid,ls_sccode + 'OI',Date(server_dt),if_getid_ture,commit_transaction) CASE 19 inwarecode = getid(scid,ls_sccode + 'IA',Date(server_dt),if_getid_ture,commit_transaction) CASE 20 inwarecode = getid(scid,ls_sccode + 'CI',Date(server_dt),if_getid_ture,commit_transaction) CASE 21 inwarecode = getid(scid,ls_sccode + 'IW',Date(server_dt),if_getid_ture,commit_transaction) CASE 22 inwarecode = getid(scid,ls_sccode + 'TI',Date(server_dt),if_getid_ture,commit_transaction) CASE 23 inwarecode = getid(scid,ls_sccode + 'BI',Date(server_dt),if_getid_ture,commit_transaction) CASE 24 inwarecode = getid(scid,ls_sccode + 'KJ',Date(server_dt),if_getid_ture,commit_transaction) CASE 25 inwarecode = getid(scid,ls_sccode + 'HI',Date(server_dt),if_getid_ture,commit_transaction) CASE 26 inwarecode = getid(scid,ls_sccode + 'BP',Date(server_dt),if_getid_ture,commit_transaction) CASE 27 inwarecode = getid(scid,ls_sccode + 'CJ',Date(server_dt),if_getid_ture,commit_transaction) CASE 28 inwarecode = getid(scid,ls_sccode + 'GH',Date(server_dt),if_getid_ture,commit_transaction) END CHOOSE IF inwarecode = "err" Or inwarecode = '' THEN inwarecode = '' rslt = 0 arg_msg = "无法获取进仓单编号"+"~n"+commit_transaction.SQLErrText GOTO ext END IF INSERT INTO u_inware ( scid, inwareid, inwarecode, billtype, relid, storageid, indate, plandate, inrep, part, dscrp, sptid, sptname, thflag, dxflag, otheramt, opdate, opemp, relint_1, relint_2, relint_3, relstr_1, relstr_2, relstr_3, moneyid, mrate, deptid) VALUES ( :scid, :ls_newid, :inwarecode, :billtype, :relid, :storageid, :indate, :plandate, :inrep, :part, :dscrp, :sptid, :sptname, :thflag, :dxflag, :otheramt, :server_dt, :publ_operator, :relint_1, :relint_2, :relint_3, :relstr_1, :relstr_2, :relstr_3, :moneyid, :mrate, :deptid) Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //读取新inwareid inwareid = ls_newid FOR i = 1 To it_mxbt INSERT INTO u_inwaremx (scid, inwareid, printid, mtrlid, plancode, status, qty, fprice, rebate, price, planprice, mxdscrp, jgprice, relid, ifrel, woodcode, relcode, pcode, sptid_cusid, cost, sptmtrlname, unit, rate, uprice, uqty, bootqty, noauditqty, relprintid, checkqty, result, waredscrp, relbillid, relbillprintid, relbillcode, mtrlcuscode, location, enprice, capacity, enprice_tax, enprice_notax, deliqty, tax, deliprice_notax, newprice, Thptype, jgdscrp, ifvqty, ifnotinout) VALUES ( :scid, :ls_newid, :inwaremx[i].printid, :inwaremx[i].mtrlid, :inwaremx[i].plancode, :inwaremx[i].status, :inwaremx[i].qty, :inwaremx[i].fprice, :inwaremx[i].rebate, :inwaremx[i].price, :inwaremx[i].planprice, :inwaremx[i].mxdscrp, :inwaremx[i].jgprice, :inwaremx[i].relid, :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].relprintid, :inwaremx[i].checkqty, :inwaremx[i].result, :inwaremx[i].waredscrp, :inwaremx[i].relbillid, :inwaremx[i].relbillprintid, :inwaremx[i].relbillcode, :inwaremx[i].mtrlcuscode, :inwaremx[i].Location, :inwaremx[i].enprice, :inwaremx[i].capacity, :inwaremx[i].enprice_tax, :inwaremx[i].enprice_notax, :inwaremx[i].deliqty, :inwaremx[i].tax, :inwaremx[i].deliprice_notax, :inwaremx[i].newprice, :inwaremx[i].Thptype, :inwaremx[i].jgdscrp, :inwaremx[i].ifvqty, :inwaremx[i].ifnotinout) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN inwareid = 0 //还原inwareid rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT FOR i = 1 To it_mxbt_mx INSERT INTO u_inwaremx_mx (scid, inwareid, printid, mtrlid, plancode, status, qty, fprice, rebate, price, mxdscrp, woodcode, pcode, sptid_cusid, mxprintid, waredscrp, mtrlcuscode, location, ptinwareid, ptprintid, ptinwarecode, ifnotinout) VALUES ( :scid, :ls_newid, :inwaremx_mx[i].printid, :inwaremx_mx[i].mtrlid, :inwaremx_mx[i].plancode, :inwaremx_mx[i].status, :inwaremx_mx[i].qty, :inwaremx_mx[i].fprice, :inwaremx_mx[i].rebate, :inwaremx_mx[i].price, :inwaremx_mx[i].mxdscrp, :inwaremx_mx[i].woodcode, :inwaremx_mx[i].pcode, :inwaremx_mx[i].sptid, :inwaremx_mx[i].mxprintid, :inwaremx_mx[i].waredscrp, :inwaremx_mx[i].mtrlcuscode, :inwaremx_mx[i].Location, :inwaremx_mx[i].ptinwareid, :inwaremx_mx[i].ptprintid, :inwaremx_mx[i].ptinwarecode, :inwaremx_mx[i].ifnotinout) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN inwareid = 0 //还原inwareid rslt = 0 arg_msg = "因网络或其它原因导致插入包件明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT FOR i = 1 To it_mxbt_item INSERT INTO u_inware_itemmx (scid, inwareid, printid, itemid, amt, mxdscrp) VALUES (:scid, :ls_newid, :inware_itemmx[i].printid, :inware_itemmx[i].itemid, :inware_itemmx[i].amt, :inware_itemmx[i].mxdscrp) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN inwareid = 0 //还原taskid rslt = 0 arg_msg = "因网络或其它原因导致插入费用明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT ELSE //////////////////////////////////////////////// //更新 UPDATE u_inware SET billtype = :billtype, relid = :relid, storageid = :storageid, indate = :indate, plandate = :plandate, 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, moneyid = :moneyid, mrate = :mrate, deptid = :deptid WHERE u_inware.inwareid = :inwareid AND u_inware.scid = :scid And flag = 0 Using commit_transaction; IF commit_transaction.SQLCode <> 0 Or commit_transaction.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //删除原有明细 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"+commit_transaction.SQLErrText GOTO ext END IF FOR i = 1 To it_mxbt INSERT INTO u_inwaremx (scid, inwareid, printid, mtrlid, plancode, status, qty, fprice, rebate, price, planprice, mxdscrp, jgprice, relid, ifrel, woodcode, relcode, pcode, sptid_cusid, cost, sptmtrlname, unit, rate, uprice, uqty, bootqty, noauditqty, relprintid, checkqty, result, waredscrp, relbillid, relbillprintid, relbillcode, mtrlcuscode, location, enprice, capacity, enprice_tax, enprice_notax, deliqty, tax, deliprice_notax, newprice, Thptype, jgdscrp, ifvqty, ifnotinout) VALUES ( :scid, :inwareid, :inwaremx[i].printid, :inwaremx[i].mtrlid, :inwaremx[i].plancode, :inwaremx[i].status, :inwaremx[i].qty, :inwaremx[i].fprice, :inwaremx[i].rebate, :inwaremx[i].price, :inwaremx[i].planprice, :inwaremx[i].mxdscrp, :inwaremx[i].jgprice, :inwaremx[i].relid, :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].relprintid, :inwaremx[i].checkqty, :inwaremx[i].result, :inwaremx[i].waredscrp, :inwaremx[i].relbillid, :inwaremx[i].relbillprintid, :inwaremx[i].relbillcode, :inwaremx[i].mtrlcuscode, :inwaremx[i].Location, :inwaremx[i].enprice, :inwaremx[i].capacity, :inwaremx[i].enprice_tax, :inwaremx[i].enprice_notax, :inwaremx[i].deliqty, :inwaremx[i].tax, :inwaremx[i].deliprice_notax, :inwaremx[i].newprice, :inwaremx[i].Thptype, :inwaremx[i].jgdscrp, :inwaremx[i].ifvqty, :inwaremx[i].ifnotinout) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT //删除原有明细 DELETE FROM u_inwaremx_mx WHERE u_inwaremx_mx.inwareid = :inwareid And u_inwaremx_mx.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有包件明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF FOR i = 1 To it_mxbt_mx INSERT INTO u_inwaremx_mx (scid, inwareid, printid, mtrlid, plancode, status, qty, fprice, rebate, price, mxdscrp, woodcode, pcode, sptid_cusid, mxprintid, waredscrp, mtrlcuscode, location, ptinwareid, ptprintid, ptinwarecode, ifnotinout) VALUES ( :scid, :inwareid, :inwaremx_mx[i].printid, :inwaremx_mx[i].mtrlid, :inwaremx_mx[i].plancode, :inwaremx_mx[i].status, :inwaremx_mx[i].qty, :inwaremx_mx[i].fprice, :inwaremx_mx[i].rebate, :inwaremx_mx[i].price, :inwaremx_mx[i].mxdscrp, :inwaremx_mx[i].woodcode, :inwaremx_mx[i].pcode, :inwaremx_mx[i].sptid, :inwaremx_mx[i].mxprintid, :inwaremx_mx[i].waredscrp, :inwaremx_mx[i].mtrlcuscode, :inwaremx_mx[i].Location, :inwaremx_mx[i].ptinwareid, :inwaremx_mx[i].ptprintid, :inwaremx_mx[i].ptinwarecode, :inwaremx_mx[i].ifnotinout) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入包件明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT DELETE FROM u_inware_itemmx WHERE u_inware_itemmx.inwareid = :inwareid And u_inware_itemmx.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除原有费用明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF FOR i = 1 To it_mxbt_item INSERT INTO u_inware_itemmx (scid, inwareid, printid, itemid, amt, mxdscrp) VALUES (:scid, :inwareid, :inware_itemmx[i].printid, :inware_itemmx[i].itemid, :inware_itemmx[i].amt, :inware_itemmx[i].mxdscrp) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入费用明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF NEXT END IF it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; p_clearmx() 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 Int li_outtype Long i = 1,j = 1,k = 1,l = 1 Long no_mxcheck,no_mxcheck_barcode jgsum_amt = 0 sum_amt = 0 sum_amt_en = 0 sum_taxamt = 0 sum_taxamt_en = 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 SELECT outtype INTO :li_outtype FROM u_storage Where storageid = :storageid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,仓库出仓类型,"+commit_transaction.SQLErrText GOTO ext END IF //用游标读取明细 DECLARE cur_inwaermx CURSOR FOR SELECT u_inwaremx.printid, u_inwaremx.mtrlid, u_inwaremx.plancode, u_inwaremx.status, u_inwaremx.qty, 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.ifrel, u_inwaremx.woodcode, u_inwaremx.pcode, u_inwaremx.plancode, case when :dxflag = 1 then sptid else u_inwaremx.sptid_cusid END, 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.relprintid, u_inwaremx.checkqty, u_inwaremx.result, u_inwaremx.waredscrp, u_inwaremx.relbillid, u_inwaremx.relbillprintid, u_inwaremx.relbillcode, u_inwaremx.mtrlcuscode, u_inwaremx.location, u_mtrldef.ifpackpro, u_mtrldef.ifpack, u_mtrldef.outtype, u_inwaremx.enprice, u_inwaremx.capacity, u_mtrldef.ordertype, u_inwaremx.enprice_tax, u_inwaremx.enprice_notax, u_inwaremx.deliqty, u_inwaremx.tax, u_inwaremx.deliprice_notax, u_mtrldef.iffp, :dxflag, u_inwaremx.Thptype, u_inwaremx.jgdscrp, u_inwaremx.relcode, u_inwaremx.ifvqty, u_inwaremx.ifnotinout, u_inwaremx.mtrlwareid 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 Order By u_inwaremx.printid 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].fprice, :inwaremx[i].rebate,:inwaremx[i].price,:inwaremx[i].planprice, :inwaremx[i].mxdscrp,:inwaremx[i].mtrlcode,:inwaremx[i].jgprice, :inwaremx[i].relid,: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].relprintid, :inwaremx[i].checkqty,:inwaremx[i].result,:inwaremx[i].mtrlwaredscrp, :inwaremx[i].relbillid,:inwaremx[i].relbillprintid,:inwaremx[i].relbillcode, :inwaremx[i].mtrlcuscode,:inwaremx[i].Location,:inwaremx[i].ifpackpro,:inwaremx[i].ifpack, :inwaremx[i].outtype,:inwaremx[i].enprice,:inwaremx[i].capacity,:inwaremx[i].u_mtrldef_ordertype, :inwaremx[i].enprice_tax,:inwaremx[i].enprice_notax,:inwaremx[i].deliqty,:inwaremx[i].tax, :inwaremx[i].deliprice_notax,:inwaremx[i].iffp,:inwaremx[i].dxflag,:inwaremx[i].Thptype, :inwaremx[i].jgdscrp,:inwaremx[i].relcode,:inwaremx[i].ifvqty,:inwaremx[i].ifnotinout,:inwaremx[i].mtrlwareid; DO WHILE commit_transaction.SQLCode = 0 jgsum_amt = jgsum_amt + Round(inwaremx[i].qty * inwaremx[i].jgprice,2) //计算单据总金额 sum_amt = sum_amt + Round((inwaremx[i].deliqty * inwaremx[i].uprice * inwaremx[i].rebate) / (1 + inwaremx[i].tax),2) //计算单据总金额 sum_amt_en = sum_amt_en + Round((inwaremx[i].deliqty * inwaremx[i].enprice * inwaremx[i].rebate) / (1 + inwaremx[i].tax),2) //计算单据总金额 sum_taxamt = sum_taxamt + Round((inwaremx[i].deliqty * inwaremx[i].uprice * inwaremx[i].rebate) / (1 + inwaremx[i].tax) * inwaremx[i].tax,2) sum_taxamt_en = sum_taxamt_en + Round((inwaremx[i].deliqty * inwaremx[i].enprice * inwaremx[i].rebate) / (1 + inwaremx[i].tax) * inwaremx[i].tax,2) i++ FETCH cur_inwaermx INTO :inwaremx[i].printid,:inwaremx[i].mtrlid,:inwaremx[i].plancode, :inwaremx[i].status,:inwaremx[i].qty,: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].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].relprintid, :inwaremx[i].checkqty,:inwaremx[i].result,:inwaremx[i].mtrlwaredscrp, :inwaremx[i].relbillid,:inwaremx[i].relbillprintid,:inwaremx[i].relbillcode, :inwaremx[i].mtrlcuscode,:inwaremx[i].Location,:inwaremx[i].ifpackpro,:inwaremx[i].ifpack, :inwaremx[i].outtype,:inwaremx[i].enprice,:inwaremx[i].capacity,:inwaremx[i].u_mtrldef_ordertype, :inwaremx[i].enprice_tax,:inwaremx[i].enprice_notax,:inwaremx[i].deliqty,:inwaremx[i].tax, :inwaremx[i].deliprice_notax,:inwaremx[i].iffp,:inwaremx[i].dxflag,:inwaremx[i].Thptype, :inwaremx[i].jgdscrp,:inwaremx[i].relcode,:inwaremx[i].ifvqty,:inwaremx[i].ifnotinout,:inwaremx[i].mtrlwareid; 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 //包件 //用游标读取明细 IF li_outtype > 0 Or billtype = 27 THEN DECLARE cur_inwaermx_mx CURSOR FOR SELECT u_inwaremx_mx.printid, u_inwaremx_mx.mtrlid, u_inwaremx_mx.plancode, u_inwaremx_mx.status, u_inwaremx_mx.qty, u_inwaremx_mx.fprice, u_inwaremx_mx.rebate, u_inwaremx_mx.price, u_inwaremx_mx.mxdscrp, u_inwaremx_mx.woodcode, u_inwaremx_mx.pcode, u_inwaremx_mx.plancode, u_inwaremx_mx.sptid_cusid, u_inwaremx_mx.waredscrp, u_inwaremx_mx.mxprintid, u_inwaremx_mx.mtrlcuscode, u_inwaremx_mx.location, u_mtrldef.ifpackpro, u_mtrldef.ifpack, u_mtrldef.outtype, u_mtrldef.unit, u_mtrldef.mtrlcode, u_inwaremx_mx.ptinwareid, u_inwaremx_mx.ptinwarecode, u_inwaremx_mx.ptprintid, u_mtrldef.iffp, u_inwaremx_mx.ifnotinout FROM u_inwaremx_mx,u_mtrldef,u_inware WHERE u_inware.inwareid = :arg_inwareid AND u_inwaremx_mx.mtrlid = u_mtrldef.mtrlid AND u_inware.scid = :arg_scid AND u_inware.inwareid = u_inwaremx_mx.inwareid AND u_inware.scid = u_inwaremx_mx.scid Order By u_inwaremx_mx.mxprintid Using commit_transaction; OPEN cur_inwaermx_mx; FETCH cur_inwaermx_mx INTO :inwaremx_mx[k].printid,:inwaremx_mx[k].mtrlid,:inwaremx_mx[k].plancode, :inwaremx_mx[k].status,:inwaremx_mx[k].qty,:inwaremx_mx[k].fprice, :inwaremx_mx[k].rebate,:inwaremx_mx[k].price, :inwaremx_mx[k].mxdscrp,:inwaremx_mx[k].woodcode, :inwaremx_mx[k].pcode,:inwaremx_mx[k].plancode,:inwaremx_mx[k].sptid, :inwaremx_mx[k].waredscrp,:inwaremx_mx[k].mxprintid, :inwaremx_mx[k].mtrlcuscode,:inwaremx_mx[k].Location,:inwaremx_mx[k].ifpackpro,:inwaremx_mx[k].ifpack, :inwaremx_mx[k].outtype,:inwaremx_mx[k].unit,:inwaremx_mx[k].mtrlcode, :inwaremx_mx[k].ptinwareid,:inwaremx_mx[k].ptinwarecode,:inwaremx_mx[k].ptprintid,:inwaremx_mx[k].iffp, :inwaremx_mx[k].ifnotinout; DO WHILE commit_transaction.SQLCode = 0 k++ FETCH cur_inwaermx_mx INTO :inwaremx_mx[k].printid,:inwaremx_mx[k].mtrlid,:inwaremx_mx[k].plancode, :inwaremx_mx[k].status,:inwaremx_mx[k].qty,:inwaremx_mx[k].fprice, :inwaremx_mx[k].rebate,:inwaremx_mx[k].price, :inwaremx_mx[k].mxdscrp,:inwaremx_mx[k].woodcode, :inwaremx_mx[k].pcode,:inwaremx_mx[k].plancode,:inwaremx_mx[k].sptid, :inwaremx_mx[k].waredscrp,:inwaremx_mx[k].mxprintid, :inwaremx_mx[k].mtrlcuscode,:inwaremx_mx[k].Location,:inwaremx_mx[k].ifpackpro,:inwaremx_mx[k].ifpack, :inwaremx_mx[k].outtype,:inwaremx_mx[k].unit,:inwaremx_mx[k].mtrlcode, :inwaremx_mx[k].ptinwareid,:inwaremx_mx[k].ptinwarecode,:inwaremx_mx[k].ptprintid,:inwaremx_mx[k].iffp, :inwaremx_mx[k].ifnotinout; LOOP CLOSE cur_inwaermx_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_inwaremx_mx WHERE u_inwaremx_mx.inwareid = :arg_inwareid And u_inwaremx_mx.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,进仓单包件明细数量" GOTO ext END IF IF k <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,进仓单包件明细" GOTO ext END IF it_mxbt_mx = k - 1 END IF // //用游标读取条码明细 IF li_outtype = 2 Or li_outtype = 3 THEN DECLARE cur_inwaremx_barcode CURSOR FOR SELECT u_inwaremx_mx_barcode.barcode, u_inwaremx_mx_barcode.qty, u_mtrlware_mx.packqty, u_inwaremx_mx_barcode.qty * u_mtrlware_mx.packqty, u_mtrldef.ifbarcodefp, u_mtrlware_mx.ifrel, u_mtrlware_mx.scid, u_mtrlware_mx.orderid FROM u_inwaremx_mx_barcode,u_mtrlware_mx,u_mtrldef WHERE u_inwaremx_mx_barcode.inwareid = :arg_inwareid AND u_inwaremx_mx_barcode.scid = :arg_scid AND u_inwaremx_mx_barcode.barcode = u_mtrlware_mx.barcode AND u_mtrldef.mtrlid = u_mtrlware_mx.mtrlid Order By u_inwaremx_mx_barcode.printid,u_inwaremx_mx_barcode.barcode Using commit_transaction; OPEN cur_inwaremx_barcode; FETCH cur_inwaremx_barcode INTO :s_mx_barcode[j].barcode, :s_mx_barcode[j].qty,:s_mx_barcode[j].packqty,:s_mx_barcode[j].inqty, :s_mx_barcode[j].u_mtrldef_ifbarcodefp,:s_mx_barcode[j].ifrel, :s_mx_barcode[j].scid,:s_mx_barcode[j].orderid; DO WHILE commit_transaction.SQLCode = 0 j++ FETCH cur_inwaremx_barcode INTO :s_mx_barcode[j].barcode, :s_mx_barcode[j].qty,:s_mx_barcode[j].packqty,:s_mx_barcode[j].inqty, :s_mx_barcode[j].u_mtrldef_ifbarcodefp,:s_mx_barcode[j].ifrel, :s_mx_barcode[j].scid,:s_mx_barcode[j].orderid; LOOP CLOSE cur_inwaremx_barcode; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck_barcode FROM u_inwaremx_mx_barcode WHERE u_inwaremx_mx_barcode.inwareid = :arg_inwareid And u_inwaremx_mx_barcode.scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,进仓单明细数量,"+commit_transaction.SQLErrText GOTO ext END IF IF j <> (no_mxcheck_barcode+1) THEN rslt = 0 arg_msg = "查询操作失败,进仓单条码明细数量不相符" GOTO ext END IF it_mxbt_barcode = j - 1 END IF inwareid = arg_inwareid scid = arg_scid it_mxbt = i - 1 FOR i = 1 To it_mxbt String ls_mtrlware_dscrp IF billtype = 3 THEN IF p_rst_mtrlwaredscrp(arg_scid,inwaremx[i].relid,inwaremx[i].waredscrp,arg_msg,ls_mtrlware_dscrp) = 0 THEN rslt = 0 GOTO ext ELSE inwaremx[i].mtrlwaredscrp = ls_mtrlware_dscrp END IF END IF NEXT //读取来料加工订单费用明细 DECLARE cur_inware_itemmx CURSOR FOR SELECT scid, inwareid, printid, itemid, amt, mxdscrp FROM u_inware_itemmx WHERE inwareid = :arg_inwareid AND scid = :arg_scid Using commit_transaction; OPEN cur_inware_itemmx; FETCH cur_inware_itemmx INTO :inware_itemmx[l].scid,:inware_itemmx[l].inwareid, :inware_itemmx[l].printid,:inware_itemmx[l].itemid, :inware_itemmx[l].amt,:inware_itemmx[l].mxdscrp; DO WHILE commit_transaction.SQLCode = 0 l++ FETCH cur_inware_itemmx INTO :inware_itemmx[l].scid,:inware_itemmx[l].inwareid, :inware_itemmx[l].printid,:inware_itemmx[l].itemid, :inware_itemmx[l].amt,:inware_itemmx[l].mxdscrp; LOOP CLOSE cur_inware_itemmx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_inware_itemmx Where 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 l <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,费用明细" GOTO ext END IF it_mxbt_item = l - 1 it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer updatebegin (long arg_scid, long arg_inwareid, integer arg_billtype, ref string arg_msg);Long rslt = 1 IF uo_option_inout_type = -1000 THEN rslt = 0 arg_msg = '选项:[142]进出仓高级选项,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_barcode_inwareother_paudit = -1000 THEN rslt = 0 arg_msg = '选项:[206]仓库使用条码流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_barcode_inwarebuy_paudit = -1000 THEN rslt = 0 arg_msg = '选项:[208]仓库使用条码流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_barcode_inwarecp_paudit = -1000 THEN rslt = 0 arg_msg = '选项:[207]仓库使用条码流程,读取初始默认值失败,操作取消!' GOTO ext END IF 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 = 5 OR & arg_billtype = 6 OR & arg_billtype = 8 OR & arg_billtype = 9 OR & arg_billtype = 12 OR & arg_billtype = 15 OR & arg_billtype = 16 OR & arg_billtype = 17 OR & arg_billtype = 18 OR & arg_billtype = 19 or & arg_billtype = 20 or & arg_billtype = 21 or & arg_billtype = 22 or & arg_billtype = 23 or & arg_billtype = 24 or & arg_billtype = 25 or & arg_billtype = 26 or & arg_billtype = 27 or & arg_billtype = 28) 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+'5-来料加工收料进仓单,' arg_msg = arg_msg+'6-车间生产进仓单,' arg_msg = arg_msg+'8-其它进仓单,' arg_msg = arg_msg+'9-盘盈进仓单,' arg_msg = arg_msg+'12-调拨进仓单' arg_msg = arg_msg+'15-拆装进仓单' arg_msg = arg_msg+'16-生产领料车间自动进仓单(不按计划),' arg_msg = arg_msg+'17-客户调货进仓单' arg_msg = arg_msg+'18-欠货进仓单' arg_msg = arg_msg+'19-自动组装进仓单' arg_msg = arg_msg+'20-生产领料车间自动进仓单(按计划)' arg_msg = arg_msg+'21-车间库存转换自动进仓单' arg_msg = arg_msg+'22-库存配置调整单自动进仓单' arg_msg = arg_msg+'23-销售发货单包件产品自动进仓单' arg_msg = arg_msg+'24-水口料进仓单' arg_msg = arg_msg+'25-采购收货单包件明细自动进仓单' arg_msg = arg_msg+'26-采购收货包件进仓单' arg_msg = arg_msg+'27-采购收货包件结算单' arg_msg = arg_msg+'28-员工物品归还单' GOTO ext END IF IF arg_billtype = 12 THEN rslt = 0 arg_msg = '单据类型:12-调拨进仓>>不能修改' GOTO ext END IF IF arg_billtype = 17 THEN rslt = 0 arg_msg = '单据类型:17-客户调货进仓>>不能修改' GOTO ext END IF IF arg_billtype = 18 THEN rslt = 0 arg_msg = '单据类型:18-欠货进仓单>>不能修改' GOTO ext END IF IF arg_billtype = 19 THEN rslt = 0 arg_msg = '单据类型:19-自动组装进仓单>>不能修改' GOTO ext END IF IF arg_billtype = 22 THEN rslt = 0 arg_msg = '单据类型:22-库存配置调整单自动进仓>>不能修改' GOTO ext END IF rslt = p_getinfo(arg_scid,arg_inwareid,arg_msg) IF rslt = 0 THEN GOTO ext IF uo_option_inout_type = 2 AND & ( uo_option_barcode_inwareother_paudit = 1 AND billtype = 1 OR & uo_option_barcode_inwarebuy_paudit = 1 AND billtype = 3 OR & uo_option_barcode_inwarecp_paudit = 1 AND billtype = 8 ) THEN IF priceflag = 1 THEN arg_msg = '单据已确认,不能修改' rslt = 0 GOTO ext END IF END IF String ls_storagename SELECT storagename INTO :ls_storagename FROM u_storage Where storageid = :storageid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,仓库" GOTO ext END IF //检查是否有该仓库的建立权限 IF sys_user_storagestr_new <> '0' THEN IF Pos(sys_user_storagestr_new,','+String(storageid)+',') <= 0 THEN rslt = 0 arg_msg = '没有仓库: '+ls_storagename+' 的建立权限,不允许修改该仓库的单据' GOTO ext END IF END IF // IF priceflag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改' GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改' GOTO ext 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);Int rslt = 1 Long cnt = 0,i,j,mx_barcode_cnt Long ll_sptid,ll_mtrlwareid_ref String ls_mtrlcuscode String ls_storagename Int li_outtype,li_storagetype,li_if_pd_usebarcode s_cmplpackpro_ref_mtrlwareid_array s_mtrlwareid_array_rst s_inwaremx_barcode_fp arg_s_mxbarcode_fp uo_sqlpro uo_pro uo_pro = Create uo_sqlpro uo_pro.commit_transaction = commit_transaction uo_cmpl_packpro uo_cmpl_p uo_cmpl_p = Create uo_cmpl_packpro uo_cmpl_p.commit_transaction = commit_transaction IF f_aps_mrp_cklock(scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_option_inout_type = -1000 THEN rslt = 0 arg_msg = '选项:[142]进出仓高级选项,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_barcode_inwareother_paudit = -1000 THEN rslt = 0 arg_msg = '选项:[206]仓库使用条码流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_barcode_inwarebuy_paudit = -1000 THEN rslt = 0 arg_msg = '选项:[208]仓库使用条码流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_barcode_inwarecp_paudit = -1000 THEN rslt = 0 arg_msg = '选项:[207]仓库使用条码流程,读取初始默认值失败,操作取消!' GOTO ext END IF s_inwaremx_assign_plan arg_s_ap,arg_s_ap_null uo_mtrlware_assign uo_ma uo_ma = Create uo_mtrlware_assign uo_ma.commit_transaction = commit_transaction uo_ma.ib_ifinware_audit_do = True IF inwareid = 0 THEN rslt = 0 arg_msg = "没有进仓审核对象" GOTO ext END IF IF storageid = 0 THEN rslt = 0 arg_msg = '没有正确的仓库' GOTO ext END IF IF billtype <> 9 THEN IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF SELECT storagename,outtype,storagetype,if_pd_usebarcode INTO :ls_storagename,:li_outtype,:li_storagetype,:li_if_pd_usebarcode FROM u_storage Where storageid = :storageid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,仓库" GOTO ext END IF //检查是否有该仓库的建立权限 IF Not (billtype = 16 Or billtype = 20) THEN IF sys_user_storagestr_audit <> '0' THEN IF Pos(sys_user_storagestr_audit,','+String(storageid)+',') <= 0 THEN rslt = 0 arg_msg = '没有仓库: '+ls_storagename+' 的审核权限,不允许审核该仓库的单据' GOTO ext END IF END IF end if // IF uo_option_inout_type = 2 And (li_outtype = 2 Or li_outtype = 3) And & ( uo_option_barcode_inwareother_paudit = 1 And billtype = 8 and (sptname <> '更新成本价(正单)' and sptname <> '调整成本价(负单)') Or & uo_option_barcode_inwarebuy_paudit = 1 And billtype = 1 Or & uo_option_barcode_inwarecp_paudit = 1 And billtype = 3 ) And thflag = 0 THEN IF priceflag = 0 THEN arg_msg = '单据未确认,不能审核' rslt = 0 GOTO ext END IF END IF IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核" GOTO ext END IF //检查条码数量是否匹配 If ( li_outtype = 2 Or li_outtype = 3 ) And & ( billtype <> 9 Or billtype = 9 And & ( li_if_pd_usebarcode = 1 Or li_if_pd_usebarcode = 0 And if_py_check_barcode )) THEN IF uof_check_barcodeqty(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF 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"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF FOR i = 1 To it_mxbt IF f_power_ind(2203,sys_msg_pow) And Not sys_power_issuper THEN IF inwaremx[i].uprice = 0 THEN rslt = 0 arg_msg = '行:'+String(i)+',物料编码:'+inwaremx[i].mtrlcode+',没有单价,请检查' GOTO ext END IF END IF //yyx20120206 IF li_storagetype = 1 And inwaremx[i].ifpack <> 2 And inwaremx[i].ifpackpro <> 2 And inwaremx[i].ifpackpro <> 4 THEN IF billtype = 17 Or billtype = 23 THEN //客户调货条码转换单 ll_sptid = inwaremx[i].sptid ls_mtrlcuscode = inwaremx[i].mtrlcuscode ELSE ll_sptid = 0 ls_mtrlcuscode = '' END IF ELSE IF billtype = 4 THEN ll_sptid = 0 ELSE ll_sptid = inwaremx[i].sptid END IF ls_mtrlcuscode = inwaremx[i].mtrlcuscode END IF //yyx20120206_end IF sys_option_inout_procedure = 0 THEN IF billtype <> 20 And billtype <> 21 THEN IF p_update_mtrlware(inwaremx[i].mtrlid,inwaremx[i].mtrlcode,& storageid,inwaremx[i].plancode,inwaremx[i].status,& inwaremx[i].qty,inwaremx[i].uqty,inwaremx[i].cost,inwaremx[i].planprice,& ll_sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,& inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,inwaremx[i].mtrlwaredscrp,inwaremx[i].ifvqty,arg_msg) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF ELSE IF p_update_mtrlware_ws(inwaremx[i].mtrlid,inwaremx[i].mtrlcode,& storageid,inwaremx[i].plancode,inwaremx[i].status,& inwaremx[i].qty,inwaremx[i].uqty,inwaremx[i].cost,inwaremx[i].planprice,& ll_sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,& inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,inwaremx[i].mtrlwaredscrp,arg_msg) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF END IF ELSE IF uo_pro.p_inware_update_mtrlware(scid,inwareid,inwaremx[i].printid,inwaremx[i].mtrlid,& inwaremx[i].mtrlcode,storageid,inwaremx[i].plancode,inwaremx[i].status,inwaremx[i].qty,& inwaremx[i].uqty,inwaremx[i].cost,inwaremx[i].planprice,ll_sptid,inwaremx[i].dxflag,& inwaremx[i].woodcode,inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,inwaremx[i].mtrlwaredscrp,arg_msg) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF END IF //取库存信息yyx2012-09-25 ll_mtrlwareid_ref = 0 IF uof_ref_mtrlwareid(scid,storageid,inwaremx[i].mtrlid,& inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].plancode,& inwaremx[i].Location,ll_sptid,ls_mtrlcuscode,ll_mtrlwareid_ref,arg_msg) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF IF p_update_mtrlwareid_inwaremx(ll_mtrlwareid_ref,inwareid,inwaremx[i].printid,arg_msg,False) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF //yyx20100814 //库存分配 IF li_storagetype = 1 And billtype <> 23 THEN IF inwaremx[i].iffp = 1 THEN //取分配计划 arg_s_ap = arg_s_ap_null IF billtype = 4 THEN //外协收货 IF inwaremx[i].relid > 0 And inwaremx[i].relprintid > 0 THEN IF uof_ref_assign_plan_plankind(scid,ll_mtrlwareid_ref,3,inwaremx[i].relid,inwaremx[i].relprintid,& inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].qty,arg_s_ap,arg_msg) = 0 THEN arg_msg = '外协收货明细行:'+String(inwaremx[i].printid)+',取分配计划失败'+arg_msg rslt = 0 GOTO ext END IF END IF ELSE IF uof_ref_assign_plan(scid,ll_mtrlwareid_ref,inwaremx[i].qty,arg_s_ap,arg_msg) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF END IF FOR j = 1 To UpperBound(arg_s_ap.planid) IF uo_ma.uof_assign_add(arg_s_ap.scid[j],arg_s_ap.mtrlwareid[j],& arg_s_ap.assigntype[j],arg_s_ap.relbillid[j],arg_s_ap.relprintid[j],& arg_s_ap.notassignqty[j],inwaremx[i].cost,ls_mtrlcuscode,inwaremx[i].mtrlwaredscrp,& inwarecode,inwaremx[i].printid,arg_s_ap.fpgrade[i],publ_operator,arg_msg,False) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF IF arg_s_ap.planid[j] > 0 THEN IF uo_ma.uof_plan_addassignqty(arg_s_ap.planid[j],arg_s_ap.notassignqty[j],& inwarecode,inwaremx[i].printid,arg_msg,False) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF END IF NEXT END IF END IF //yyx20100814_end If ( li_outtype = 2 Or li_outtype = 3 ) And inwaremx[i].outtype = 2 THEN mx_barcode_cnt++ //yyx2012-9-29返回计算可装数库存id数组 IF billtype <> 23 & And Not (billtype = 25 And Pos(part,'CT') > 0) & And Not (billtype = 8 And Pos(sptname,'调整成本价') > 0 ) & And ( inwaremx[i].ifpack = 1 Or inwaremx[i].ifpack = 2 Or inwaremx[i].ifpackpro = 3 Or inwaremx[i].ifpackpro = 4 ) And uo_option_mtrlware_autocmp = 1 THEN IF uo_cmpl_p.uof_ref_mtrlwarid_array(inwaremx[i].mtrlid,inwaremx[i].plancode,ls_mtrlcuscode,storageid,s_mtrlwareid_array_rst,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF // NEXT //更新条码 If ( li_outtype = 2 Or li_outtype = 3 ) And & mx_barcode_cnt > 0 And & ( billtype <> 9 Or billtype = 9 And & ( li_if_pd_usebarcode = 1 Or li_if_pd_usebarcode = 0 And if_py_update_barcode )) THEN IF uof_p_barcode(1,arg_msg,arg_s_mxbarcode_fp) = 0 THEN rslt = 0 GOTO ext END IF END IF //yyx2012-9-29返回计算可装数库存id数组计算可装数 IF billtype <> 23 & And Not (billtype = 25 And Pos(part,'CT') > 0) & And Not (billtype = 8 And Pos(sptname,'调整成本价') > 0 ) & And UpperBound(s_mtrlwareid_array_rst.mtrlwareid) > 0 And uo_option_mtrlware_autocmp = 1 THEN IF uo_cmpl_p.uof_cmpl_diqty(s_mtrlwareid_array_rst,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF // flag = 1 ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy uo_ma Destroy uo_pro Destroy uo_cmpl_p 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 If Not lb_ifdelauto And billtype = 3 And relint_1 = 1 Then rslt = 0 arg_msg = "自动建立的生产进仓单,不可以删除" Goto ext End If If billtype = 1 and sys_option_disuse_inware_buy = 1 Then If uof_disuse(arg_scid,arg_inwareid,1,arg_msg,False) = 0 Then rslt = 0 Goto ext End If 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"+commit_transaction.SQLErrText 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"+commit_transaction.SQLErrText Goto ext End If Delete From u_inwaremx_mx_barcode Where u_inwaremx_mx_barcode.inwareid = :arg_inwareid And u_inwaremx_mx_barcode.scid = :arg_scid And u_inwaremx_mx_barcode.billtype = :billtype Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "删除进仓单条码明细操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If Delete From u_inware_itemmx Where u_inware_itemmx.inwareid = :arg_inwareid And u_inware_itemmx.scid = :arg_scid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "删除进仓单费用明细操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If If billtype = 1 Then Update u_inware_barcode_tmp Set u_inware_barcode_tmp.inwareid = 0 Where u_inware_barcode_tmp.scid = :arg_scid And u_inware_barcode_tmp.inwareid = :arg_inwareid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = "清除进仓单已匹配条码操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If End If it_newbegin = False it_updatebegin = False ext: If rslt = 0 Then Rollback Using commit_transaction; 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 ROLLBACK USING commit_transaction; rslt = 0 arg_msg = "因网络或其它原因导致添加单据备注操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF COMMIT USING commit_transaction; dscrp = dscrp+' '+arg_newdescppart ext: Return (rslt) end function public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 Long cnt = 0,i,j,mx_barcode_cnt Long ll_sptid String ls_mtrlcuscode String ls_storagename Int li_outtype,li_storagetype,li_if_pd_usebarcode s_cmplpackpro_ref_mtrlwareid_array s_mtrlwareid_array_rst s_inwaremx_barcode_fp arg_s_mxbarcode_fp IF uo_option_canpack_ifzanyong = -1000 THEN rslt = 0 arg_msg = '选项:[417]通用包件产品可装数选项,读取初始默认值失败,操作取消!' GOTO ext END IF uo_sqlpro uo_pro uo_pro = Create uo_sqlpro uo_pro.commit_transaction = commit_transaction uo_cmpl_packpro uo_cmpl_p uo_cmpl_p = Create uo_cmpl_packpro uo_cmpl_p.commit_transaction = commit_transaction IF f_aps_mrp_cklock(scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF s_inwaremx_assign_plan arg_s_ap,arg_s_ap_null s_inwaremx_assign arg_s_a,arg_s_a_null uo_mtrlware_assign uo_ma uo_ma = Create uo_mtrlware_assign uo_ma.commit_transaction = commit_transaction uo_ma.ib_ifinware_audit_do = True DateTime null_dt SetNull(null_dt) IF storageid = 0 THEN rslt = 0 arg_msg = '没有正确的仓库' GOTO ext END IF IF billtype <> 9 THEN IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF SELECT storagename,outtype,storagetype,if_pd_usebarcode INTO :ls_storagename,:li_outtype,:li_storagetype,:li_if_pd_usebarcode FROM u_storage Where storageid = :storageid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,仓库" GOTO ext END IF //检查是否有该仓库的建立权限 IF Not (billtype = 16 Or billtype = 20) THEN IF sys_user_storagestr_audit <> '0' THEN IF Pos(sys_user_storagestr_audit,','+String(storageid)+',') <= 0 THEN rslt = 0 arg_msg = '没有仓库: '+ls_storagename+' 的审核权限,不允许撤审该仓库的单据' GOTO ext END IF END IF end if // IF inwareid = 0 THEN rslt = 0 arg_msg = "没有出仓撤审对象" GOTO ext END IF IF ctmint > 0 THEN arg_msg = '单据已截数,不能操作' rslt = 0 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 billtype = 26 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_inwaremx_mx,u_inware WHERE u_inware.scid = u_inwaremx_mx.scid AND u_inware.inwareid = u_inwaremx_mx.inwareid AND u_inware.billtype = 27 And u_inwaremx_mx.ptinwareid = :inwareid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询单据是否已开配套结算单失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '单据已开配套结算单,不能撤审' rslt = 0 GOTO ext END IF 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 FOR i = 1 To it_mxbt //yyx20100814 IF li_storagetype = 1 And inwaremx[i].ifpack <> 2 And inwaremx[i].ifpackpro <> 2 And inwaremx[i].ifpackpro <> 4 THEN ll_sptid = 0 ls_mtrlcuscode = '' ELSE IF billtype = 4 THEN ll_sptid = 0 ELSE ll_sptid = inwaremx[i].sptid END IF ls_mtrlcuscode = inwaremx[i].mtrlcuscode END IF //yyx20100814_end //yyx20100814 //库存分配 IF li_storagetype = 1 And billtype <> 23 THEN IF inwaremx[i].iffp = 1 THEN //取消分配 arg_s_a = arg_s_a_null IF uof_ref_assign_cancel(inwarecode,inwaremx[i].printid,arg_s_a,arg_msg) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF FOR j = 1 To UpperBound(arg_s_a.assignid) IF uo_ma.uof_assign_del(arg_s_a.assignid[j],arg_s_a.assignqty[j],& arg_msg,False) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF NEXT //取消分配计划 arg_s_ap = arg_s_ap_null IF uof_ref_assign_plan_cancel(inwarecode,inwaremx[i].printid,arg_s_ap,arg_msg) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF FOR j = 1 To UpperBound(arg_s_ap.planid) IF uo_ma.uof_plan_addassignqty(arg_s_ap.planid[j],0 - arg_s_ap.notassignqty[j],& inwarecode,inwaremx[i].printid,arg_msg,False) = 0 THEN arg_msg = '行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF NEXT END IF END IF //yyx20100814_end //进仓单撤审,如果使用通用包件占用模式,并且单据明细是包件,要扣减相关占用数 if uo_option_canpack_ifzanyong = 1 and inwaremx[i].ifpack = 1 then if uo_cmpl_p.uof_add_fpqty(scid,inwaremx[i].mtrlwareid,inwaremx[i].mtrlid,0,0,0 - inwaremx[i].qty,arg_msg,false) = 0 then rslt = 0 arg_msg = '行:'+string(i)+','+arg_msg goto ext end if end if IF sys_option_inout_procedure = 0 THEN IF billtype <> 20 And billtype <> 21 THEN IF p_update_mtrlware(inwaremx[i].mtrlid,inwaremx[i].mtrlcode,& storageid,inwaremx[i].plancode,inwaremx[i].status,& 0 - inwaremx[i].qty,0 - inwaremx[i].uqty,inwaremx[i].cost,inwaremx[i].planprice,& ll_sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,& inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,inwaremx[i].mtrlwaredscrp,inwaremx[i].ifvqty,arg_msg) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF ELSE IF p_update_mtrlware_ws(inwaremx[i].mtrlid,inwaremx[i].mtrlcode,& storageid,inwaremx[i].plancode,inwaremx[i].status,& 0 - inwaremx[i].qty,0 - inwaremx[i].uqty,inwaremx[i].cost,inwaremx[i].planprice,& ll_sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,& inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,inwaremx[i].mtrlwaredscrp,arg_msg) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF END IF ELSE IF uo_pro.p_inware_update_mtrlware(scid,inwareid,inwaremx[i].printid,inwaremx[i].mtrlid,& inwaremx[i].mtrlcode,storageid,inwaremx[i].plancode,inwaremx[i].status,0 - inwaremx[i].qty,& 0 - inwaremx[i].uqty,inwaremx[i].cost,inwaremx[i].planprice,ll_sptid,inwaremx[i].dxflag,& inwaremx[i].woodcode,inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,inwaremx[i].mtrlwaredscrp,arg_msg) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF END IF If ( li_outtype = 2 Or li_outtype = 3 ) And inwaremx[i].outtype = 2 THEN mx_barcode_cnt++ //yyx2012-9-29返回计算可装数库存id数组 IF billtype <> 23 & And Not (billtype = 25 And Pos(part,'CT') > 0) & And Not (billtype = 8 And Pos(sptname,'调整成本价') > 0 ) & And ( inwaremx[i].ifpack = 1 Or inwaremx[i].ifpack = 2 Or inwaremx[i].ifpackpro = 3 Or inwaremx[i].ifpackpro = 4 ) And uo_option_mtrlware_autocmp = 1 THEN IF uo_cmpl_p.uof_ref_mtrlwarid_array(inwaremx[i].mtrlid,inwaremx[i].plancode,ls_mtrlcuscode,storageid,s_mtrlwareid_array_rst,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF // NEXT //更新条码 If ( li_outtype = 2 Or li_outtype = 3 ) And & mx_barcode_cnt > 0 And & ( billtype <> 9 Or billtype = 9 And & ( li_if_pd_usebarcode = 1 Or li_if_pd_usebarcode = 0 And if_py_update_barcode )) THEN IF uof_p_barcode(0,arg_msg,arg_s_mxbarcode_fp) = 0 THEN rslt = 0 GOTO ext END IF END IF //yyx2012-9-29返回计算可装数库存id数组计算可装数 IF billtype <> 23 & And Not (billtype = 25 And Pos(part,'CT') > 0) & And Not (billtype = 8 And Pos(sptname,'调整成本价') > 0 ) & And UpperBound(s_mtrlwareid_array_rst.mtrlwareid) > 0 And uo_option_mtrlware_autocmp = 1 THEN IF uo_cmpl_p.uof_cmpl_diqty(s_mtrlwareid_array_rst,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF // flag = 0 ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF Destroy uo_ma Destroy uo_pro Destroy uo_cmpl_p RETURN rslt end function public function integer p_clearmx ();//int p_clearmx() //清除明细 it_mxbt = 0 it_mxbt_mx = 0 it_mxbt_barcode = 0 it_mxbt_item = 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.plandate, 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.balcdateint, 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.ctmint, u_inware.priceflag, u_inware.pricerep, u_inware.pricedate, u_inware.moneyid, u_inware.mrate, u_inware.deptid, u_inware.fkflag, u_inware.fkemp, u_inware.fkdate INTO :inwarecode, :billtype, :relid, :storageid, :indate, :plandate, :inrep, :part, :sptid, :sptname, :dscrp, :thflag, :secflag, :dxflag, :flag, :balcflag, :balcdateint, :otheramt, :relint_1, :relint_2, :relint_3, :relstr_1, :relstr_2, :relstr_3, :ctmint, :priceflag, :pricerep, :pricedate, :moneyid, :mrate, :deptid, :fkflag, :fkemp, :fkdate 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 = "查询操作失败(错误进仓单唯一码),进仓单,"+String(commit_transaction.SQLCode)+'~n'+commit_transaction.SQLErrText GOTO ext END IF inwareid = arg_inwareid scid = arg_scid ext: IF rslt = 0 THEN p_reset() 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 = '' moneyid = 0 mrate = 1 deptid = 0 balcflag = 0 balcdateint = 0 sum_amt = 0 sum_amt_en = 0 jgsum_amt = 0 sum_taxamt = 0 sum_taxamt_en = 0 it_newbegin = FALSE it_updatebegin = FALSE //清除明细 p_clearmx() RETURN 1 end function public function integer p_rst_mtrlwaredscrp (long arg_scid, long arg_relid, string arg_mxdscrp, ref string arg_msg, ref string arg_ref_dscrp);Int rslt = 1 String ls_ordercode,ls_billcode,ls_relcode IF uo_option_mtrlware_dscrp = -1000 THEN rslt = 0 arg_msg = '选项:[063]库存表摘要1,读取初始默认值失败,操作取消!' GOTO ext END IF CHOOSE CASE uo_option_mtrlware_dscrp CASE 1 arg_ref_dscrp = '' CASE 2,3,4 IF arg_relid > 0 THEN SELECT ordercode,billcode,relcode INTO :ls_ordercode,:ls_billcode,:ls_relcode FROM u_order_ml WHERE scid = :arg_scid AND orderid = :arg_relid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询生产计划相关号码等失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF uo_option_mtrlware_dscrp = 2 THEN arg_ref_dscrp = ls_ordercode ELSEIF uo_option_mtrlware_dscrp = 3 THEN arg_ref_dscrp = ls_billcode ELSEIF uo_option_mtrlware_dscrp = 4 THEN arg_ref_dscrp = ls_relcode END IF ELSE arg_ref_dscrp = '' END IF CASE 5 arg_ref_dscrp = arg_mxdscrp END CHOOSE ext: RETURN rslt end function public function integer p_update_mtrlware_ws (long arg_mtrlid, string arg_mtrlcode, long arg_storageid, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_uqty, decimal arg_price, decimal arg_planprice, long arg_sptid, long arg_dxflag, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, string arg_location, string arg_dscrp, ref string arg_msg);Int rslt = 1 Long ls_newid String or_err_part Decimal ld_cost Int li_storMtrlprp,li_ifcost Decimal ld_pypkqty Decimal ld_buyinqty,ld_buyinamt Decimal ld_cpinqty,ld_cpinamt Decimal ld_jginqty,ld_jginamt Decimal ld_diinqty,ld_diinamt Decimal ld_mvinqty,ld_mvinamt Decimal ld_otinqty,ld_otinamt Decimal ld_pyinqty,ld_pyinamt Int li_ifunit String ls_str Int li_statusflag Decimal ld_capacity,ld_capacity_zj s_mtrlcfg_expr s_pz[] String ls_status_zj Long ll_i Int li_ifpack Int if_recmp_balc If sys_if_recmp_balc < 0 Then Select if_recmp_balc Into :if_recmp_balc From sys_msg Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then arg_msg = '查询是否执行结存表重算失败,'+commit_transaction.SQLErrText rslt = 0 Goto ext End If If if_recmp_balc = 0 Then rslt = 0 arg_msg = '由于系统升级,结存表结构与原来不同,请先通知管理员执行危险功能中的[按新结构重算现结存表]功能,才能审核和撤审进出仓单据' Goto ext End If Else If sys_if_recmp_balc = 0 Then rslt = 0 arg_msg = '由于系统升级,结存表结构与原来不同,请先通知管理员执行危险功能中的[按新结构重算现结存表]功能,才能审核和撤审进出仓单据' Goto ext End If End If If uo_option_change_status = '-1000' Then rslt = 0 arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_change_woodcode = '-1000' Then rslt = 0 arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_change_pcode = '-1000' Then rslt = 0 arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_cost_dec = -1000 Then rslt = 0 arg_msg = '选项:[022]库存成本价转换小数点,读取初始默认值失败,操作取消!' Goto ext End If Select Mtrlprp,ifcost Into :li_storMtrlprp,:li_ifcost From u_storage Where storageid = :arg_storageid Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then arg_msg = '查询仓库类型失败' rslt = 0 Goto ext End If Select ifunit,ifpack,capacity,statusflag Into :li_ifunit,:li_ifpack,:ld_capacity,:li_statusflag From u_mtrldef Where mtrlid = :arg_mtrlid Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then arg_msg = '查询物料信息失败' rslt = 0 Goto ext End If If li_statusflag = 2 Then ld_capacity = 0 f_checkpz(arg_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 = :arg_mtrlid And Name = :ls_status_zj; If commit_transaction.SQLCode <> 0 Then ld_capacity_zj = 0 End If ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_i].qty) Next End If If li_ifunit = 0 Then arg_uqty = 0 Int li_ifupdate_date If billtype = 1 Or & billtype = 2 Or & billtype = 3 Or & billtype = 4 Or & billtype = 5 Or & billtype = 6 Or & billtype = 8 Then li_ifupdate_date = 1 Else li_ifupdate_date = 0 End If //-------------------------------------------更新库存 If li_ifcost = 1 Then //核算金额 Update u_mtrlware Set noallocqty = noallocqty + :arg_qty , wsallocqty = wsallocqty + :arg_qty, unoallocqty = unoallocqty + :arg_uqty, wareamt = case noallocqty + :arg_qty when 0 then 0 else wareamt + round(:arg_qty * :arg_price,2) End, waredate = case :li_ifupdate_date when 1 then getdate() else waredate End, newprice = :arg_price, dscrp = :arg_dscrp, capacity = capacity + :ld_capacity * :arg_qty, cost = case noallocqty + :arg_qty when 0 then cost else round((wareamt + :arg_qty * :arg_price) / ( noallocqty + :arg_qty ),:uo_option_cost_dec) End Where ( mtrlid = :arg_mtrlid ) And ( plancode = :arg_plancode ) And ( storageid = :arg_storageid ) And ( scid = :scid ) And ( status = :arg_status ) And ( sptid = :arg_sptid) And ( dxflag = :arg_dxflag) And ( woodcode = :arg_woodcode) And ( pcode = :arg_pcode) And ( mtrlcuscode = :arg_mtrlcuscode) And ( Location = :arg_location) Using commit_transaction ; If commit_transaction.SQLCode = 0 Then If commit_transaction.SQLNRows = 0 Then ///////////////////////// // ls_newid = f_sys_scidentity(scid,"u_mtrlware","mtrlwareid",arg_msg,True,id_sqlca) If ls_newid <= 0 Then rslt = 0 Goto ext End If ///////////////////////// // ld_cost = Round(arg_price,uo_option_cost_dec) Insert Into u_mtrlware ( scid, mtrlwareid, mtrlid, storageid, plancode, status, noallocqty, unoallocqty, wareamt, planprice, sptid, dxflag, woodcode, pcode, cost, storMtrlprp, dscrp, mtrlcuscode, location, capacity, wsallocqty) Values ( :scid, :ls_newid, :arg_mtrlid, :arg_storageid, :arg_plancode, :arg_status, :arg_qty, :arg_uqty, round(:arg_price * :arg_qty,2), :arg_planprice, :arg_sptid, :arg_dxflag, :arg_woodcode, :arg_pcode, :ld_cost, :li_storMtrlprp, :arg_dscrp, :arg_mtrlcuscode, :arg_location, :ld_capacity * :arg_qty, :arg_qty) 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 If arg_status <> '' Then ls_str = ' '+uo_option_change_status+':'+arg_status End If If arg_pcode <> '' Then ls_str = ls_str + ' '+uo_option_change_pcode+':'+arg_pcode End If If arg_woodcode <> '' Then ls_str = ls_str + ' '+uo_option_change_woodcode+':'+arg_woodcode End If or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement' If commit_transaction.SQLCode = 513 Or Pos(Lower(commit_transaction.SQLErrText),or_err_part) > 0 Then arg_msg = "物料["+arg_mtrlcode+"]同仓库内同批号没有足够的库存支持冲减" ElseIf Pos(commit_transaction.SQLErrText,'CK_u_mtrlware') > 0 Then arg_msg = "物料:"+arg_mtrlcode+ls_str+" 同仓库内同批号没有足够的库存支持冲减" ElseIf Pos(commit_transaction.SQLErrText,'CREATE RULE') > 0 And Pos(commit_transaction.SQLErrText,'cost') > 0 Then arg_msg = "物料:"+arg_mtrlcode+ls_str+" 同仓库内同批号的库存金额不够冲减" Else arg_msg = "因网络或其它原因导致物料["+arg_mtrlcode+"]库存更新操作失败"+"~n"+commit_transaction.SQLErrText End If Goto ext End If Else // 不核算金额 Update u_mtrlware Set wsallocqty = wsallocqty + :arg_qty , noallocqty = noallocqty + :arg_qty , unoallocqty = unoallocqty + :arg_uqty, wareamt = 0, waredate = case :li_ifupdate_date when 1 then getdate() else waredate End, newprice = 0, dscrp = :arg_dscrp, cost = 0, capacity = capacity + :ld_capacity * :arg_qty Where ( mtrlid = :arg_mtrlid ) And ( plancode = :arg_plancode ) And ( storageid = :arg_storageid ) And ( scid = :scid ) And ( status = :arg_status ) And ( sptid = :arg_sptid) And ( dxflag = :arg_dxflag) And ( woodcode = :arg_woodcode) And ( pcode = :arg_pcode) And ( mtrlcuscode = :arg_mtrlcuscode) And ( Location = :arg_location) Using commit_transaction ; If commit_transaction.SQLCode = 0 Then If commit_transaction.SQLNRows = 0 Then ///////////////////////// // ls_newid = f_sys_scidentity(scid,"u_mtrlware","mtrlwareid",arg_msg,True,id_sqlca) If ls_newid <= 0 Then rslt = 0 Goto ext End If ///////////////////////// // Insert Into u_mtrlware ( scid, mtrlwareid, mtrlid, storageid, plancode, status, noallocqty, unoallocqty, wareamt, planprice, sptid, dxflag, woodcode, pcode, cost, storMtrlprp, dscrp, mtrlcuscode, location, capacity, wsallocqty) Values ( :scid, :ls_newid, :arg_mtrlid, :arg_storageid, :arg_plancode, :arg_status, :arg_qty, :arg_uqty, 0, 0, :arg_sptid, :arg_dxflag, :arg_woodcode, :arg_pcode, 0, :li_storMtrlprp, :arg_dscrp, :arg_mtrlcuscode, :arg_location, :ld_capacity * :arg_qty, :arg_qty) Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then rslt = 0 If Pos(commit_transaction.SQLErrText,'CK_u_mtrlware') > 0 Then If arg_status <> '' Then ls_str = ' '+uo_option_change_status+':'+arg_status End If If arg_pcode <> '' Then ls_str = ls_str + ' '+uo_option_change_pcode+':'+arg_pcode End If If arg_woodcode <> '' Then ls_str = ls_str + ' '+uo_option_change_woodcode+':'+arg_woodcode End If arg_msg = "物料:"+arg_mtrlcode+ls_str+" 同仓库内同批号没有足够的库存支持冲减" Else arg_msg = "因网络或其它原因导致物料["+arg_mtrlcode+"]库存建立操作失败"+"~n"+commit_transaction.SQLErrText End If Goto ext End If End If Else rslt = 0 or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement' If commit_transaction.SQLCode = 513 Or Pos(Lower(commit_transaction.SQLErrText),or_err_part) > 0 Then arg_msg = "物料["+arg_mtrlcode+"]同仓库内同批号没有足够的库存支持冲减" ElseIf Pos(commit_transaction.SQLErrText,'CK_u_mtrlware') > 0 Then If arg_status <> '' Then ls_str = ' '+uo_option_change_status+':'+arg_status End If If arg_pcode <> '' Then ls_str = ls_str + ' '+uo_option_change_pcode+':'+arg_pcode End If If arg_woodcode <> '' Then ls_str = ls_str + ' '+uo_option_change_woodcode+':'+arg_woodcode End If arg_msg = "物料:"+arg_mtrlcode+ls_str+" 同仓库内同批号没有足够的库存支持冲减" Else arg_msg = "因网络或其它原因导致物料["+arg_mtrlcode+"]库存更新操作失败"+"~n"+commit_transaction.SQLErrText End If Goto ext End If End If ext: If rslt = 0 Then Rollback; End If Return rslt end function public function integer uof_ref_assign_plan (long arg_scid, long arg_mtrlwareid, decimal arg_qty, ref s_inwaremx_assign_plan arg_s_ap, ref string arg_msg);Int rslt = 1 Long i,j datastore ds_ap ds_ap = CREATE datastore ds_ap.DataObject = 'ds_inwaremx_assign_plan' ds_ap.SetTransObject(commit_transaction) ds_ap.Retrieve(arg_scid,arg_mtrlwareid) FOR i = 1 TO ds_ap.RowCount() j++ arg_s_ap.planid[j] = ds_ap.Object.planid[i] arg_s_ap.assigntype[j] = ds_ap.Object.assigntype[i] arg_s_ap.scid[j] = ds_ap.Object.scid[i] arg_s_ap.mtrlwareid[j] = ds_ap.Object.mtrlwareid[i] arg_s_ap.relbillid[j] = ds_ap.Object.relbillid[i] arg_s_ap.relprintid[j] = ds_ap.Object.relprintid[i] arg_s_ap.fpgrade[j] = ds_ap.Object.fpgrade[i] IF ds_ap.Object.planassignqty[i] - ds_ap.Object.assignqty[i] >= arg_qty THEN arg_s_ap.notassignqty[j] = arg_qty GOTO ext ELSE arg_s_ap.notassignqty[j] = ds_ap.Object.planassignqty[i] - ds_ap.Object.assignqty[i] arg_qty = arg_qty - (ds_ap.Object.planassignqty[i] - ds_ap.Object.assignqty[i]) END IF NEXT ext: RETURN rslt end function public function integer uof_ref_assign_plan_cancel (string arg_inwarecode, long arg_inprintid, ref s_inwaremx_assign_plan arg_s_ap, ref string arg_msg);Int rslt = 1 Long i,j datastore ds_ap ds_ap = CREATE datastore ds_ap.DataObject = 'ds_inwaremx_assign_plan_cancel' ds_ap.SetTransObject(commit_transaction) ds_ap.Retrieve(arg_inwarecode,arg_inprintid) FOR i = 1 TO ds_ap.RowCount() j++ arg_s_ap.planid[j] = ds_ap.Object.planid[i] arg_s_ap.notassignqty[j] = ds_ap.Object.qty[i] NEXT DESTROY ds_ap RETURN rslt end function public function integer uof_ref_assign_cancel (string arg_inwarecode, long arg_inprintid, ref s_inwaremx_assign arg_s_a, ref string arg_msg);Int rslt = 1 Long i,j datastore ds_a ds_a = CREATE datastore ds_a.DataObject = 'ds_inwaremx_assign_cancel' ds_a.SetTransObject(commit_transaction) ds_a.Retrieve(arg_inwarecode,arg_inprintid) FOR i = 1 TO ds_a.RowCount() j++ arg_s_a.assignid[j] = ds_a.Object.assignid[i] arg_s_a.assignqty[j] = ds_a.Object.assignqty[i] NEXT destroy ds_a RETURN rslt end function public function integer uof_ref_mtrlwareid (long arg_scid, long arg_storageid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, string arg_location, long arg_sptid, string arg_mtrlcuscode, ref long arg_mtrlwareid, ref string arg_msg);Int rslt = 1 Long ll_mtrlwareid_rst SELECT u_mtrlware.mtrlwareid INTO :ll_mtrlwareid_rst FROM u_mtrlware WHERE u_mtrlware.scid = :arg_scid AND u_mtrlware.storageid = :arg_storageid AND u_mtrlware.mtrlid = :arg_mtrlid AND u_mtrlware.status = :arg_status AND u_mtrlware.woodcode = :arg_woodcode AND u_mtrlware.pcode = :arg_pcode AND u_mtrlware.plancode = :arg_plancode AND u_mtrlware.location = :arg_location AND u_mtrlware.sptid = :arg_sptid AND u_mtrlware.mtrlcuscode = :arg_mtrlcuscode Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询库存id失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF IsNull(ll_mtrlwareid_rst) THEN ll_mtrlwareid_rst = 0 IF ll_mtrlwareid_rst = 0 THEN arg_msg = '进仓明细库存id为0' rslt = 0 GOTO ext END IF arg_mtrlwareid = ll_mtrlwareid_rst ext: RETURN rslt end function public function integer uof_check_barcodeqty (ref string arg_msg);Long i Int rslt = 1 Decimal ld_inqty_outtype_2,ld_inqty_barcode IF billtype <> 1 And billtype <> 3 And billtype <> 8 And billtype <> 9 THEN rslt = 1 GOTO ext END IF IF billtype = 8 And (sptname = '更新成本价(正单)' Or sptname = '调整成本价(负单)') THEN rslt = 1 GOTO ext END IF IF billtype = 1 THEN FOR i = 1 To it_mxbt_mx IF thflag = 0 THEN IF inwaremx_mx[i].outtype = 2 THEN ld_inqty_outtype_2 += inwaremx_mx[i].qty ELSE IF inwaremx_mx[i].outtype = 2 THEN ld_inqty_outtype_2 += Abs(inwaremx_mx[i].qty) END IF NEXT ELSE FOR i = 1 To it_mxbt IF inwaremx[i].outtype = 2 THEN ld_inqty_outtype_2 += inwaremx[i].qty NEXT END IF FOR i = 1 To it_mxbt_barcode ld_inqty_barcode += s_mx_barcode[i].qty * s_mx_barcode[i].packqty NEXT IF ld_inqty_outtype_2 <> ld_inqty_barcode THEN rslt = 0 IF billtype = 1 THEN arg_msg = '收货单包件明细按条码进仓数量与条码明细数量不相符,请检查包件明细的物料资料是否设置了使用条码进出仓' ELSE arg_msg = '进仓单明细按条码进仓数量与条码明细数量不相符,,请检查进仓明细的物料资料是否设置了使用条码进出仓' END IF GOTO ext END IF ext: RETURN rslt end function public function integer uof_inbarcode_add (integer arg_billtype, long arg_scid, long arg_inwareid, long arg_printid, string arg_barcode, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 INSERT INTO U_inwaremx_mx_barcode (billtype,scid,inwareid,printid,barcode,qty) VALUES (:arg_billtype, :arg_scid,:arg_inwareid,:arg_printid,:arg_barcode,:arg_qty); IF sqlca.SQLCode <> 0 THEN arg_msg = '进仓明细保存条码失败,行:'+String(arg_printid)+',条码:'+arg_barcode+','+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer c_priceaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,i DateTime null_dt SetNull(null_dt) IF uo_option_inout_type = -1000 THEN rslt = 0 arg_msg = '选项:[142]进出仓高级选项,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_barcode_inwareother_paudit = -1000 THEN rslt = 0 arg_msg = '选项:[206]仓库使用条码流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_barcode_inwarebuy_paudit = -1000 THEN rslt = 0 arg_msg = '选项:[208]仓库使用条码流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_barcode_inwarecp_paudit = -1000 THEN rslt = 0 arg_msg = '选项:[207]仓库使用条码流程,读取初始默认值失败,操作取消!' GOTO ext END IF IF p_getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF priceflag = 0 THEN rslt = 0 arg_msg = "单据还未确认,不能反确认" GOTO ext END IF IF uo_option_inout_type = 2 And & ( billtype = 1 And uo_option_barcode_inwarebuy_paudit = 1 Or & billtype = 3 And uo_option_barcode_inwarecp_paudit = 1 Or & billtype = 8 And uo_option_barcode_inwareother_paudit = 1 ) THEN IF flag = 1 THEN rslt = 0 arg_msg = "单据已仓库审核" GOTO ext END IF END IF IF uo_option_barcode_inwarecp_paudit = 2 THEN IF flag = 1 THEN rslt = 0 arg_msg = "单据已仓库审核" GOTO ext END IF END IF UPDATE u_inware SET priceflag = 0, pricedate = :null_dt, pricerep = '' WHERE inwareid = :arg_billid AND scid = :arg_scid And priceflag = 1; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致反确认单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在反确认,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF priceflag = 0 ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer priceaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,i IF p_getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF priceflag = 1 THEN rslt = 0 arg_msg = "单据已经确认,不能再确认" GOTO ext END IF UPDATE u_inware SET priceflag = 1, pricedate = getdate(), pricerep = :publ_operator WHERE inwareid = :arg_billid AND scid = :arg_scid AND priceflag = 0 ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在确认,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF priceflag = 1 ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer uof_check_qty_to_bqty (ref string arg_msg);Int rslt = 1 //Long ll_j,ll_k //Long ll_f,ll_arr //Long ll_mtrlware_arr[] //Decimal ld_outqty_arr[] //Long ll_mtrlware_arr_bill[] //Decimal ld_outqty_arr_bill[] //Boolean lb_equal = FALSE // ////计算条码出仓数 //FOR ll_j = 1 TO it_mxbt_barcode // ll_f = 0 // ll_arr = UpperBound(ll_mtrlware_arr) // FOR ll_k = 1 TO ll_arr // IF ll_mtrlware_arr[ll_k] = s_mx_barcode[ll_j].mtrlwareid THEN // ll_f = ll_k // EXIT // END IF // NEXT // // IF ll_f > 0 THEN // ld_outqty_arr[ll_f] += s_mx_barcode[ll_j].outqty // ELSE // ll_arr++ // ll_mtrlware_arr[ll_arr] = s_mx_barcode[ll_j].mtrlwareid // ld_outqty_arr[ll_arr] = s_mx_barcode[ll_j].outqty // END IF //NEXT // ////计算出仓明细出仓数 //IF billtype = 1 THEN // FOR ll_j = 1 TO it_mxbt_mx // ll_f = 0 // ll_arr = UpperBound(ll_mtrlware_arr_bill) // FOR ll_k = 1 TO ll_arr // IF ll_mtrlware_arr_bill[ll_k] = outwaremx_mx[ll_j].mtrlwareid THEN // ll_f = ll_k // EXIT // END IF // NEXT // // IF ll_f > 0 THEN // ld_outqty_arr_bill[ll_f] += outwaremx_mx[ll_j].qty // ELSE // ll_arr++ // ll_mtrlware_arr_bill[ll_arr] = outwaremx_mx[ll_j].mtrlwareid // ld_outqty_arr_bill[ll_arr] = outwaremx_mx[ll_j].qty // END IF // NEXT //ELSE // FOR ll_j = 1 TO it_mxbt // ll_f = 0 // ll_arr = UpperBound(ll_mtrlware_arr_bill) // FOR ll_k = 1 TO ll_arr // IF ll_mtrlware_arr_bill[ll_k] = outwaremx[ll_j].mtrlwareid THEN // ll_f = ll_k // EXIT // END IF // NEXT // // IF ll_f > 0 THEN // ld_outqty_arr_bill[ll_f] += outwaremx[ll_j].qty // ELSE // ll_arr++ // ll_mtrlware_arr_bill[ll_arr] = outwaremx[ll_j].mtrlwareid // ld_outqty_arr_bill[ll_arr] = outwaremx[ll_j].qty // END IF // NEXT //END IF // ////检查1 //FOR ll_j = 1 TO UpperBound(ll_mtrlware_arr_bill) // lb_equal = FALSE // IF ld_outqty_arr_bill[ll_j] = 0 THEN CONTINUE // // FOR ll_k = 1 TO UpperBound(ll_mtrlware_arr) // IF ll_mtrlware_arr_bill[ll_j] = ll_mtrlware_arr[ll_k] THEN // IF ld_outqty_arr_bill[ll_j] = ld_outqty_arr[ll_k] THEN // lb_equal = TRUE // END IF // END IF // NEXT // // IF NOT lb_equal THEN // arg_msg = '出仓明细按条码出仓物料的出仓数与条码扫描明细不相等,请检查' // rslt = 0 // GOTO ext // END IF //NEXT // ////检查2 //FOR ll_j = 1 TO UpperBound(ll_mtrlware_arr) // lb_equal = FALSE // IF ld_outqty_arr[ll_j] = 0 THEN CONTINUE // // FOR ll_k = 1 TO UpperBound(ll_mtrlware_arr_bill) // IF ll_mtrlware_arr[ll_j] = ll_mtrlware_arr_bill[ll_k] THEN // IF ld_outqty_arr[ll_j] = ld_outqty_arr_bill[ll_k] THEN // lb_equal = TRUE // END IF // END IF // NEXT // // IF NOT lb_equal THEN // arg_msg = '条码扫描明细与出仓明细按条码出仓物料的出仓数不相等,请检查' // rslt = 0 // GOTO ext // END IF //NEXT // // //ext: RETURN rslt end function public function integer uof_set_qty_equal_bqty (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_ref_outtype Long ll_i,ll_j,ll_k Long ll_f,ll_arr Decimal ld_updateqty Long ll_mtrlid,ll_cusid,ll_orderid String ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,ls_location s_mtrlware_noalloc_array arg_s_inmx,arg_s_inmx_barcode IF arg_inwareid <= 0 THEN arg_msg = '错误的单据id' rslt = 0 GOTO ext END IF IF getinfo(arg_scid,arg_inwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF f_rst_storage_outtype(storageid,li_ref_outtype) = 0 THEN arg_msg = '查询仓库出仓策略失败,请检查仓库资料' rslt = 0 GOTO ext END IF IF li_ref_outtype <> 2 and li_ref_outtype <> 3 THEN arg_msg = '仓库出仓策略不是使用条码出仓,操作取消,请检查仓库资料' rslt = 0 GOTO ext END IF IF priceflag = 0 THEN arg_msg = '单据未确认,操作取消' rslt = 0 GOTO ext END IF IF flag = 1 THEN arg_msg = '单据已仓审,操作取消' rslt = 0 GOTO ext END IF //计算条码出仓数 FOR ll_j = 1 TO it_mxbt_barcode ll_f = 0 SELECT u_getbar.mtrlid, u_getbar.cusid, u_getbar.status, u_getbar.woodcode, u_getbar.pcode, u_getbar.plancode, u_getbar.mtrlcuscode, u_getbar.location, u_getbar.orderid INTO :ll_mtrlid, :ll_cusid, :ls_status, :ls_woodcode, :ls_pcode, :ls_plancode, :ls_mtrlcuscode, :ls_location, :ll_orderid FROM u_getbar,u_mtrlware_mx WHERE u_getbar.getbarid = u_mtrlware_mx.getbarid AND u_mtrlware_mx.barcode = :s_mx_barcode[ll_j].barcode USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '条码:'+s_mx_barcode[ll_j].barcode+',查询条码信息失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ll_arr = UpperBound(arg_s_inmx_barcode.mtrlid) FOR ll_k = 1 TO ll_arr IF arg_s_inmx_barcode.mtrlid[ll_k] = ll_mtrlid AND & arg_s_inmx_barcode.sptid[ll_k] = ll_cusid AND & arg_s_inmx_barcode.status[ll_k] = ls_status AND & arg_s_inmx_barcode.woodcode[ll_k] = ls_woodcode AND & arg_s_inmx_barcode.pcode[ll_k] = ls_pcode AND & arg_s_inmx_barcode.plancode[ll_k] = ls_plancode AND & arg_s_inmx_barcode.mtrlcuscode[ll_k] = ls_mtrlcuscode AND & arg_s_inmx_barcode.Location[ll_k] = ls_location AND & arg_s_inmx_barcode.orderid[ll_k] = ll_orderid THEN ll_f = ll_k EXIT END IF NEXT IF ll_f > 0 THEN arg_s_inmx_barcode.noallocqty[ll_f] += s_mx_barcode[ll_j].inqty ELSE ll_arr++ arg_s_inmx_barcode.mtrlid[ll_arr] = ll_mtrlid arg_s_inmx_barcode.sptid[ll_arr] = ll_cusid arg_s_inmx_barcode.status[ll_arr] = ls_status arg_s_inmx_barcode.woodcode[ll_arr] = ls_woodcode arg_s_inmx_barcode.pcode[ll_arr] = ls_pcode arg_s_inmx_barcode.plancode[ll_arr] = ls_plancode arg_s_inmx_barcode.mtrlcuscode[ll_arr] = ls_mtrlcuscode arg_s_inmx_barcode.Location[ll_arr] = ls_location arg_s_inmx_barcode.orderid[ll_arr] = ll_orderid arg_s_inmx_barcode.noallocqty[ll_arr] = s_mx_barcode[ll_j].inqty END IF NEXT UPDATE u_inwaremx SET u_inwaremx.uqty = 0, u_inwaremx.qty = 0 FROM u_inwaremx,u_mtrldef WHERE u_inwaremx.scid = :arg_scid AND u_inwaremx.inwareid = :arg_inwareid AND u_inwaremx.mtrlid = u_mtrldef.mtrlid AND u_mtrldef.outtype = 2 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '清除进仓明细进仓数失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF FOR ll_i = 1 TO it_mxbt ld_updateqty = 0 IF inwaremx[ll_i].outtype <> 2 THEN CONTINUE FOR ll_k = 1 TO UpperBound(arg_s_inmx_barcode.mtrlid) IF arg_s_inmx_barcode.noallocqty[ll_k] = 0 THEN CONTINUE IF inwaremx[ll_i].mtrlid = arg_s_inmx_barcode.mtrlid[ll_k] AND & inwaremx[ll_i].sptid = arg_s_inmx_barcode.sptid[ll_k] AND & inwaremx[ll_i].status = arg_s_inmx_barcode.status[ll_k] AND & inwaremx[ll_i].woodcode = arg_s_inmx_barcode.woodcode[ll_k] AND & inwaremx[ll_i].pcode = arg_s_inmx_barcode.pcode[ll_k] AND & inwaremx[ll_i].plancode = arg_s_inmx_barcode.plancode[ll_k] AND & inwaremx[ll_i].mtrlcuscode = arg_s_inmx_barcode.mtrlcuscode[ll_k] AND & inwaremx[ll_i].Location = arg_s_inmx_barcode.Location[ll_k] AND & inwaremx[ll_i].relid = arg_s_inmx_barcode.orderid[ll_k] THEN IF inwaremx[ll_i].qty >= arg_s_inmx_barcode.noallocqty[ll_k] THEN ld_updateqty = arg_s_inmx_barcode.noallocqty[ll_k] arg_s_inmx_barcode.noallocqty[ll_k] = 0 ELSE ld_updateqty = inwaremx[ll_i].qty arg_s_inmx_barcode.noallocqty[ll_k] = arg_s_inmx_barcode.noallocqty[ll_k] - inwaremx[ll_i].qty END IF EXIT END IF NEXT IF ld_updateqty > 0 THEN UPDATE u_inwaremx SET u_inwaremx.uqty = :ld_updateqty, u_inwaremx.qty = :ld_updateqty WHERE u_inwaremx.scid = :arg_scid AND u_inwaremx.inwareid = :arg_inwareid AND u_inwaremx.printid = :inwaremx[ll_i].printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '行:'+String(ll_i)+',更新明细条码进仓数到明细进仓数失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF NEXT 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 uof_secaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,i IF p_getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF secflag = 1 THEN rslt = 0 arg_msg = "单据已经财审,不能再财审" GOTO ext END IF UPDATE u_inware SET secflag = 1, secauditingdate = getdate(), secauditingrep = :publ_operator WHERE inwareid = :arg_billid AND scid = :arg_scid And secflag = 0 ; 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 secflag = 1 ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer uof_c_secaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,i DateTime null_dt SetNull(null_dt) Int li_StoreBalcType,li_AmtAuditFlag IF p_getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF secflag = 0 THEN rslt = 0 arg_msg = "单据不在财审状态,不能执行财撤" GOTO ext END IF //检查仓库是否分开结存 IF balcdateint <> 0 THEN SELECT StoreBalcType INTO :li_StoreBalcType FROM u_storage Where storageid = :storageid; IF sqlca.SQLCode <> 0 THEN li_StoreBalcType = 0 END IF //如果分开结存,检查结存表是否已金额结存 IF li_StoreBalcType = 1 THEN SELECT top 1 AmtAuditFlag INTO :li_AmtAuditFlag FROM u_warebalc WHERE storageid = :storageid And balcdateint = :balcdateint; IF sqlca.SQLCode <> 0 THEN li_AmtAuditFlag = 0 END IF IF li_AmtAuditFlag = 1 THEN rslt = 0 arg_msg = '仓库结存日期段已执行过金额结存,不能财撤单据' GOTO ext END IF END IF END IF UPDATE u_inware SET secflag = 0, secauditingdate = :null_dt, secauditingrep = '' WHERE inwareid = :arg_billid AND scid = :arg_scid And secflag = 1 ; 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 secflag = 0 ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer acceptmx (long arg_printid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, decimal arg_uqty, decimal arg_enprice, decimal arg_rebate, string arg_mxdscrp, ref string arg_msg, decimal arg_jgprice, long arg_relid, integer arg_ifrel, string arg_woodcode, string arg_pcode, long arg_cusid_sptid, string arg_unit, decimal arg_rate, decimal arg_qty, long arg_relprintid, decimal arg_checkqty, string arg_result, string arg_waredscrp, long arg_relbillid, long arg_relbillprintid, string arg_mtrlcuscode, string arg_location, decimal arg_deliqty, decimal arg_tax); //long arg_printid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, //decimal arg_uqty, decimal arg_enprice, decimal arg_rebate, string arg_mxdscrp, //decimal arg_jgprice, long arg_relid, integer arg_ifrel, string arg_woodcode, string arg_pcode, //long arg_cusid_sptid, string arg_unit, decimal arg_rate, decimal arg_qty, long arg_relprintid, //decimal arg_checkqty, string arg_result, string arg_waredscrp, long arg_relbillid, long arg_relbillprintid, //string arg_mtrlcuscode, string arg_location, decimal arg_deliqty, decimal arg_tax) 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.enprice = arg_enprice s_mx.rebate = arg_rebate s_mx.mxdscrp = arg_mxdscrp s_mx.jgprice = arg_jgprice s_mx.relid = arg_relid s_mx.ifrel = arg_ifrel s_mx.woodcode = arg_woodcode s_mx.pcode = arg_pcode s_mx.sptid = arg_cusid_sptid s_mx.unit = arg_unit s_mx.rate = arg_rate s_mx.qty = arg_qty s_mx.relprintid = arg_relprintid s_mx.checkqty = arg_checkqty s_mx.result = arg_result s_mx.waredscrp = arg_waredscrp s_mx.relbillid = arg_relbillid s_mx.relbillprintid = arg_relbillprintid s_mx.mtrlcuscode = arg_mtrlcuscode s_mx.location = arg_location s_mx.deliqty = arg_deliqty s_mx.tax = arg_tax return acceptmx(s_mx, arg_msg) /* Long rslt = 1,cnt = 0,ls_i Decimal ld_planprice,ld_cost Decimal ld_noauditqty,ld_bootqty Decimal ld_consignedqty,ld_uqty String ls_relcode,ls_unit Decimal lde_mx_qty Decimal ld_uprate,ld_upqty Int li_ifpack,li_ifpackpro Decimal ld_capacity,ld_capacity_zj s_mtrlcfg_expr s_pz[] String ls_status_zj Long ll_i Decimal lde_newprice IF uo_option_buy_zero = -1000 THEN rslt = 0 arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_wfjg_zero = -1000 THEN rslt = 0 arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_change_status = '-1000' THEN rslt = 0 arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_change_woodcode = '-1000' THEN rslt = 0 arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_change_pcode = '-1000' THEN rslt = 0 arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_unit_dec = -1000 THEN rslt = 0 arg_msg = '选项:[023]辅助单位转换库存单位小数位,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_ifovertask = -1000 THEN rslt = 0 arg_msg = '选项:[010]超采购,外协订单收货,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_ifovertask_cp = -1000 THEN rslt = 0 arg_msg = '选项:[112]超生产指令单数量进仓,读取初始默认值失败,操作取消!' GOTO ext END IF 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_woodcode) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_uqty) THEN arg_uqty = 0 IF IsNull(arg_enprice) THEN arg_enprice = 0 IF IsNull(arg_rebate) THEN arg_rebate = 1 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF IsNull(arg_jgprice) THEN arg_jgprice = 0 IF IsNull(arg_relid) THEN arg_relid = 0 IF IsNull(arg_ifrel) THEN arg_ifrel = 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_relprintid) THEN arg_relprintid = 0 IF IsNull(arg_checkqty) THEN arg_checkqty = 0 IF IsNull(arg_result) THEN arg_result = '' IF IsNull(arg_waredscrp) THEN arg_waredscrp = '' IF IsNull(arg_relbillid) THEN arg_relbillid = 0 IF IsNull(arg_relbillprintid) THEN arg_relbillprintid = 0 IF IsNull(arg_mtrlcuscode) THEN arg_mtrlcuscode = '' IF IsNull(arg_location) THEN arg_location = '' IF IsNull(arg_deliqty) THEN arg_deliqty = 0 IF IsNull(arg_tax) THEN arg_tax = 0 //IF arg_rebate = 0 THEN arg_rebate = 1 IF IsNull(arg_unit) THEN arg_unit = '' IF IsNull(arg_rate) THEN arg_rate = 1 IF arg_rate = 0 THEN arg_rate = 1 IF arg_mtrlid = 0 THEN //OR arg_uqty = 0 OR arg_qty = 0 THEN rslt = 1 GOTO ext END IF arg_status = Trim(arg_status) arg_woodcode = Trim(arg_woodcode) arg_pcode = Trim(arg_pcode) arg_plancode = Trim(arg_plancode) arg_mtrlcuscode = Trim(arg_mtrlcuscode) arg_location = Trim(arg_location) IF billtype <> 1 THEN mrate = 1 END IF //检查物料id Int li_statusflag,li_woodcodeflag,li_pcodeflag Int li_status_check,li_woodcode_check,li_pcode_check Int li_outtype_mtrl,li_ifunit SELECT unit, statusflag, woodcodeflag, pcodeflag, status_check, woodcode_check, pcode_check, capacity * capaparm, outtype, ifpack, ifpackpro, ifunit INTO :ls_unit, :li_statusflag, :li_woodcodeflag, :li_pcodeflag, :li_status_check, :li_woodcode_check, :li_pcode_check, :ld_capacity, :li_outtype_mtrl, :li_ifpack, :li_ifpackpro, :li_ifunit 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 <> 23 and billtype <> 25 And billtype <> 1 And ( li_ifpackpro = 1 Or li_ifpackpro = 2 ) THEN arg_msg = "第"+String(arg_printid)+"行,个性包件产品或通用包件产品不能直接开进仓单,操作取消" rslt = 0 GOTO ext END IF IF billtype <> 9 THEN IF li_ifunit = 1 THEN IF arg_uqty = arg_qty And arg_unit <> ls_unit THEN rslt = 0 arg_msg = "第"+String(arg_printid)+"行,物料使用库存双数量核算,但录入的计量单位数量与库存单位数量相同,操作取消" GOTO ext END IF END IF END IF IF li_ifpack = 2 And arg_mtrlcuscode = '' THEN arg_msg = '行:'+String(arg_printid)+",物料:"+arg_mtrlcode+",为个性包件,但没有产品批号,请检查" rslt = 0 GOTO ext END IF IF li_ifpackpro = 2 And arg_mtrlcuscode = '' THEN arg_msg = '行:'+String(arg_printid)+",物料:"+arg_mtrlcode+",为个性包件产品,但没有产品批号,请检查" rslt = 0 GOTO ext END IF IF li_ifpackpro = 4 And arg_mtrlcuscode = '' THEN arg_msg = '行:'+String(arg_printid)+",物料:"+arg_mtrlcode+",为组合配置整排散进包件产品,但没有产品批号,请检查" rslt = 0 GOTO ext END IF f_get_planprice_mtrl(arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_planprice) IF Not ((uo_option_buy_zero = 1 And billtype = 1) Or & (uo_option_wfjg_zero = 1 And billtype = 4 ) Or & (billtype = 9 And relid > 0 And li_outtype_mtrl = 2)) THEN IF billtype = 9 THEN IF arg_uqty = 0 And arg_qty = 0 THEN rslt = 1 GOTO ext END IF ELSE IF arg_uqty = 0 Or arg_qty = 0 Or arg_deliqty = 0 THEN rslt = 1 GOTO ext END IF END IF IF arg_uqty = 0 THEN arg_rate = 0 ELSE arg_rate = arg_qty / arg_uqty END IF IF billtype <> 9 THEN IF arg_checkqty = 0 THEN arg_checkqty = arg_uqty END IF END IF IF arg_rebate < 0 THEN arg_msg = '行:'+String(arg_printid)+',折扣错误,请检查' rslt = 0 GOTO ext END IF //IF arg_checkqty < arg_uqty THEN // arg_msg = '第'+String(arg_printid)+'行,送货数不能少于实进仓数' // rslt = 0 // GOTO ext //END IF IF li_statusflag = 2 THEN IF arg_status = '' THEN arg_msg = '行:'+String(arg_printid)+',物料'+uo_option_change_status + '字段使用组合配置,请输入' rslt = 0 GOTO ext END IF ELSEIF li_statusflag = 4 And li_status_check = 1 THEN IF arg_status = '' THEN arg_msg = '行:'+String(arg_printid)+',物料'+uo_option_change_woodcode + '字段使用部件选配,请输入' rslt = 0 GOTO ext END IF ELSEIF li_statusflag = 1 Or li_statusflag = 0 THEN IF f_check_status(1,arg_status) = 0 THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+",查询操作失败,可能"+uo_option_change_status+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_status GOTO ext END IF END IF IF li_woodcodeflag = 4 And li_woodcode_check = 1 THEN IF arg_woodcode = '' THEN arg_msg = '行:'+String(arg_printid)+',物料'+uo_option_change_woodcode + '字段使用部件选配,请输入' rslt = 0 GOTO ext END IF ELSEIF li_woodcodeflag = 1 Or li_woodcodeflag = 0 THEN IF f_check_status(2,arg_woodcode) = 0 THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+",查询操作失败,可能"+uo_option_change_woodcode+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_woodcode GOTO ext END IF END IF IF li_pcodeflag = 4 And li_pcode_check = 1 THEN IF arg_pcode = '' THEN arg_msg = '行:'+String(arg_printid)+',物料'+uo_option_change_pcode + '字段使用部件选配,请输入' rslt = 0 GOTO ext END IF ELSEIF li_pcodeflag = 1 Or li_pcodeflag = 0 THEN IF f_check_status(3,arg_pcode) = 0 THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+",查询操作失败,可能"+uo_option_change_pcode+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_pcode GOTO ext END IF END IF IF li_statusflag = 2 THEN ld_capacity = 0 f_checkpz(arg_status,s_pz[]) FOR ll_i = 1 To UpperBound(s_pz) ls_status_zj = s_pz[ll_i].cfgname SELECT capacity * capaparm INTO :ld_capacity_zj FROM u_mtrl_configure WHERE mtrlid = :arg_mtrlid And Name = :ls_status_zj Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "第"+String(arg_printid)+"行,查询子件 "+ls_status_zj+" 折算套数参数操作失败" GOTO ext END IF ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_i].qty) NEXT END IF Int li_iflimitprice SELECT iflimitprice INTO :li_iflimitprice FROM u_mtrldef Where 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 IF billtype <> 9 THEN IF Trim(ls_unit) <> Trim(arg_unit) And arg_rate = 1 THEN arg_msg = '进仓单,行:'+String(arg_printid)+',物料库存单位:'+Trim(ls_unit)+'与采购单位:'+Trim(arg_unit)+'不同,但转换率为1,请检查' rslt = 0 GOTO ext END IF IF Trim(ls_unit) = Trim(arg_unit) And arg_rate <> 1 THEN arg_msg = '进仓单,行:'+String(arg_printid)+',物料库存单位:'+Trim(ls_unit)+'与采购单位:'+Trim(arg_unit)+'相同,但转换率不为1,请检查' rslt = 0 GOTO ext END IF END IF //查询采购限价并检查进仓价 IF billtype = 1 THEN IF uo_sptprice.uof_check_limitprice(thflag,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,arg_unit,arg_enprice * arg_rebate,arg_msg) = 0 THEN arg_msg = '行:'+String(arg_printid)+","+arg_msg rslt = 0 GOTO ext END IF IF li_iflimitprice = 1 THEN IF uo_sptprice.uof_check_price(thflag,sptid,arg_mtrlid,arg_mtrlcode,arg_unit,arg_status,arg_woodcode,arg_pcode,'',moneyid,arg_enprice * arg_rebate,indate,arg_msg) = 0 THEN arg_msg = '行:'+String(arg_printid)+","+arg_msg rslt = 0 GOTO ext END IF END IF END IF //增加新字段 newprice 最新报价 IF billtype = 1 THEN DateTime ldt_effdate Decimal ls_1stnewcost,ls_1stzqrate,ls_1strate String ls_msg String ls_1stunit ls_1stunit = arg_unit ldt_effdate = DateTime(Today(),Time(0)) IF uo_sptprice.uof_getmtrlsptprice(moneyid,sptid,arg_mtrlid,ls_1stunit,arg_status,arg_woodcode,arg_pcode,'',ls_1stnewcost,ls_1stzqrate,ls_1strate,ldt_effdate,ls_msg) <> 1 THEN lde_newprice = 0 ELSE lde_newprice = ls_1stnewcost END IF ELSE lde_newprice = 0 END IF CHOOSE CASE billtype CASE 1,26 IF arg_ifrel > 0 THEN IF arg_relid = 0 THEN arg_msg = '行:'+String(arg_printid)+',请先择相应的订单' rslt = 0 GOTO ext END IF SELECT taskcode,sum(uqty - consignedqty - stopqty),sum(uqty),sum(consignedqty) INTO :ls_relcode,:ld_bootqty,:ld_uqty,:ld_consignedqty FROM u_buytaskmx,u_buytask WHERE u_buytaskmx.taskid = :arg_relid AND u_buytaskmx.scid = :scid AND u_buytaskmx.printid = :arg_relprintid AND u_buytaskmx.taskid = u_buytask.taskid AND u_buytaskmx.scid = u_buytask.scid GROUP BY taskcode 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 IF billtype = 1 THEN lde_mx_qty = 0 FOR ls_i = 1 To it_mxbt IF arg_mtrlid = inwaremx[ls_i].mtrlid And & arg_relid = inwaremx[ls_i].relid And & arg_relprintid = inwaremx[ls_i].relprintid THEN lde_mx_qty = lde_mx_qty + inwaremx[ls_i].uqty END IF NEXT lde_mx_qty = lde_mx_qty + arg_uqty //查已开单数 ld_noauditqty = 0 SELECT sum(uqty) INTO :ld_noauditqty FROM u_inwaremx,u_inware WHERE u_inwaremx.relid = :arg_relid AND u_inwaremx.sptid_cusid = :arg_cusid_sptid AND u_inwaremx.mtrlid = :arg_mtrlid AND u_inwaremx.status = :arg_status AND u_inwaremx.woodcode = :arg_woodcode AND u_inwaremx.pcode = :arg_pcode AND u_inwaremx.unit = :arg_unit AND u_inwaremx.relprintid = :arg_relprintid AND u_inware.inwareid <> :inwareid AND u_inware.flag = 0 AND u_inware.inwareid = u_inwaremx.inwareid AND u_inware.scid = u_inwaremx.scid AND u_inwaremx.scid = :scid And u_inware.billtype = 1 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 IF IsNull(ld_noauditqty) THEN ld_noauditqty = 0 IF uo_option_ifovertask = 1 THEN IF lde_mx_qty + ld_noauditqty > ld_bootqty THEN arg_msg = '行:'+String(arg_printid)+',物料:'+arg_mtrlcode+'未完成数:'+String(ld_bootqty,'#,##0.0###')+'已开单未审核数:'+String(ld_noauditqty,'#,##0.0###')+',不能收货:'+String(lde_mx_qty,'#,##0.0###') rslt = 0 GOTO ext END IF ELSEIF uo_option_ifovertask = 3 THEN SELECT uprate , upqty INTO :ld_uprate,:ld_upqty FROM u_mtrldef Where mtrlid = :arg_mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_printid)+',查询物料:'+Trim(arg_mtrlcode)+'超收货比例失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF ld_uqty * (1 + ld_uprate) + ld_upqty < ld_consignedqty + lde_mx_qty + ld_noauditqty THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+",物料:"+arg_mtrlcode+"未完成数量只有"+String(ld_uqty - ld_consignedqty,'#,##0.0###')+"已开单未审核数:"+String(ld_noauditqty,'#,##0.0###')+",允许超收上限:"+String(ld_uqty * (1 + ld_uprate) + ld_upqty - ld_consignedqty - ld_noauditqty,'#,##0.00##')+",不能入库"+String(lde_mx_qty,'#,##0.0#') GOTO ext END IF END IF END IF END IF CASE 3 IF arg_ifrel > 0 THEN IF arg_relid = 0 THEN arg_msg = '行:'+String(arg_printid)+',请先择相应的计划' rslt = 0 GOTO ext END IF SELECT ordercode INTO :ls_relcode FROM u_order_ml WHERE u_order_ml.orderid = :arg_relid AND u_order_ml.mtrlid = :arg_mtrlid AND u_order_ml.scid = :scid 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(qty) INTO :ld_noauditqty FROM u_inwaremx,u_inware WHERE u_inwaremx.relid = :arg_relid AND u_inware.inwareid <> :inwareid AND u_inware.flag = 0 AND u_inware.inwareid = u_inwaremx.inwareid AND u_inware.scid = u_inwaremx.scid AND u_inwaremx.scid = :scid And u_inware.billtype = 3 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 IF IsNull(ld_noauditqty) THEN ld_noauditqty = 0 lde_mx_qty = 0 FOR ls_i = 1 To it_mxbt IF arg_mtrlid = inwaremx[ls_i].mtrlid And & arg_relid = inwaremx[ls_i].relid And & arg_relprintid = inwaremx[ls_i].relprintid THEN lde_mx_qty = lde_mx_qty + inwaremx[ls_i].qty END IF NEXT lde_mx_qty = lde_mx_qty + arg_uqty SELECT orderqty,acmpqty INTO :ld_uqty,:ld_consignedqty FROM u_order_ml WHERE u_order_ml.orderid = :arg_relid AND u_order_ml.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_printid)+',查询生产计划是否有物料:'+arg_mtrlcode+'失败' rslt = 0 GOTO ext END IF IF uo_option_ifovertask_cp = 1 THEN //不允许超收 IF ld_uqty < lde_mx_qty + ld_consignedqty + ld_noauditqty THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+',该计划明细产品['+arg_mtrlcode+']未完成数量'+String(ld_uqty - ld_consignedqty,'#,##0.00##' )+',已开单未审核数:'+String(ld_noauditqty,'#,##0.0###')+'小于本次完成数量' GOTO ext END IF ELSEIF uo_option_ifovertask_cp = 3 THEN //允许超收但按比例限制 SELECT uprate , upqty INTO :ld_uprate,:ld_upqty FROM u_mtrldef Where mtrlid = :arg_mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_printid)+',查询物料:'+Trim(arg_mtrlcode)+'超收货比例失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF ld_uqty * (1 + ld_uprate) + ld_upqty < ld_consignedqty + lde_mx_qty + ld_noauditqty THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+",物料:"+arg_mtrlcode+"未完成数量只有"+String(ld_uqty - ld_consignedqty,'#,##0.0###')+'已开单未审核数:'+String(ld_noauditqty,'#,##0.0###')+",允许超收上限:"+String(ld_uqty * (1 + ld_uprate) + ld_upqty - ld_consignedqty - ld_noauditqty,'#,##0.00##')+",不能入库"+String(lde_mx_qty,'#,##0.0#') GOTO ext END IF END IF END IF Int li_if_cus_mtrlware SELECT balctype INTO :li_if_cus_mtrlware FROM u_storage Where storageid = :storageid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_printid)+',查询仓库是否使用客户库存失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF billtype = 3 And li_if_cus_mtrlware = 1 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_cust Where cusid = :arg_cusid_sptid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_printid)+',查询客户资料失败,'+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 ,sum(u_order_wfjgmx.qty - u_order_wfjgmx.consignedqty)INTO :ls_relcode,:ld_bootqty FROM u_order_wfjgmx,u_order_wfjg WHERE u_order_wfjgmx.wfjgid = :arg_relid AND u_order_wfjgmx.scid = :scid AND u_order_wfjgmx.printid = :arg_relprintid AND u_order_wfjgmx.wfjgid = u_order_wfjg.wfjgid AND u_order_wfjgmx.scid = u_order_wfjg.scid GROUP BY u_order_wfjg.taskcode 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 5 IF arg_ifrel > 0 THEN IF arg_relid = 0 THEN arg_msg = '行:'+String(arg_printid)+',请先择相应的来料加工订单' rslt = 0 GOTO ext END IF SELECT u_saletask_ll.taskcode ,sum(qty - consignedqty),sum(qty),sum(consignedqty) INTO :ls_relcode,:ld_bootqty,:ld_uqty,:ld_consignedqty FROM u_saletaskmx_in,u_saletask_ll WHERE u_saletaskmx_in.taskid = :arg_relid AND u_saletask_ll.scid = :scid AND u_saletaskmx_in.printid = :arg_relprintid AND u_saletaskmx_in.taskid = u_saletask_ll.taskid GROUP BY u_saletask_ll.taskcode 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 lde_mx_qty = 0 FOR ls_i = 1 To it_mxbt IF arg_mtrlid = inwaremx[ls_i].mtrlid And & arg_relid = inwaremx[ls_i].relid And & arg_relprintid = inwaremx[ls_i].relprintid THEN lde_mx_qty = lde_mx_qty + inwaremx[ls_i].qty END IF NEXT lde_mx_qty = lde_mx_qty + arg_uqty //查已开单数 ld_noauditqty = 0 SELECT sum(qty) INTO :ld_noauditqty FROM u_inwaremx,u_inware WHERE u_inwaremx.relid = :arg_relid AND u_inwaremx.sptid_cusid = :arg_cusid_sptid AND u_inwaremx.mtrlid = :arg_mtrlid AND u_inwaremx.status = :arg_status AND u_inwaremx.woodcode = :arg_woodcode AND u_inwaremx.pcode = :arg_pcode AND u_inwaremx.unit = :arg_unit AND u_inwaremx.relprintid = :arg_relprintid AND u_inware.inwareid <> :inwareid AND u_inware.flag = 0 AND u_inware.inwareid = u_inwaremx.inwareid AND u_inware.scid = u_inwaremx.scid AND u_inwaremx.scid = :scid And u_inware.billtype = 5 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询物料:'+arg_mtrlcode+'相关订单单据已开单数失败' rslt = 0 GOTO ext END IF IF IsNull(ld_noauditqty) THEN ld_noauditqty = 0 IF ld_uqty < lde_mx_qty + ld_consignedqty + ld_noauditqty THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+',该计划明细产品['+arg_mtrlcode+']未完成数量'+String(ld_uqty - ld_consignedqty,'#,##0.00##' )+',已开单未审核数:'+String(ld_noauditqty,'#,##0.0###')+'小于本次完成数量' GOTO ext END IF END IF END CHOOSE IF arg_enprice * arg_rebate < 0 THEN //检查进仓价 rslt = 0 arg_msg = '行:'+String(arg_printid)+",物料或产品:" + String(arg_mtrlcode)+" 单价错误" GOTO ext END IF //查询质检单号 String ls_relbillcode ls_relbillcode = '' IF arg_relbillid > 0 THEN SELECT billcode INTO :ls_relbillcode FROM u_sptcheck Where billid = :arg_relbillid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '行:'+String(arg_printid)+',查询质检单号失败,'+commit_transaction.SQLErrText GOTO ext END IF END IF //写入内容 it_mxbt++ inwaremx[it_mxbt].noauditqty = ld_noauditqty 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].plancode = arg_plancode inwaremx[it_mxbt].bootqty = ld_bootqty inwaremx[it_mxbt].status = arg_status inwaremx[it_mxbt].enprice = arg_enprice inwaremx[it_mxbt].uprice = arg_enprice * mrate inwaremx[it_mxbt].rebate = arg_rebate inwaremx[it_mxbt].uqty = arg_uqty inwaremx[it_mxbt].qty = arg_qty //Round(arg_uqty * arg_rate,uo_option_unit_dec) inwaremx[it_mxbt].deliqty = arg_deliqty inwaremx[it_mxbt].tax = arg_tax inwaremx[it_mxbt].deliprice_notax = arg_enprice / (1 + arg_tax) IF arg_uqty <> 0 THEN inwaremx[it_mxbt].enprice_tax = arg_deliqty * arg_enprice / arg_uqty inwaremx[it_mxbt].enprice_notax = (arg_deliqty * arg_enprice / arg_uqty) / (1 + arg_tax) ELSE inwaremx[it_mxbt].enprice_tax = arg_enprice inwaremx[it_mxbt].enprice_notax = arg_enprice / (1 + arg_tax) END IF inwaremx[it_mxbt].enprice_tax = Abs(inwaremx[it_mxbt].enprice_tax) inwaremx[it_mxbt].enprice_notax = Abs(inwaremx[it_mxbt].enprice_notax) IF Round(arg_uqty * arg_rate,uo_option_unit_dec) <> 0 THEN inwaremx[it_mxbt].fprice = Round((inwaremx[it_mxbt].enprice_tax * mrate * arg_uqty)/(Round(arg_uqty * arg_rate,uo_option_unit_dec)),10) ELSE inwaremx[it_mxbt].fprice = 0 END IF inwaremx[it_mxbt].fprice = Abs(inwaremx[it_mxbt].fprice) inwaremx[it_mxbt].price = inwaremx[it_mxbt].fprice * arg_rebate 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].ifrel = arg_ifrel inwaremx[it_mxbt].woodcode = arg_woodcode inwaremx[it_mxbt].pcode = arg_pcode inwaremx[it_mxbt].relcode = ls_relcode inwaremx[it_mxbt].relprintid = arg_relprintid inwaremx[it_mxbt].checkqty = arg_checkqty inwaremx[it_mxbt].result = arg_result inwaremx[it_mxbt].waredscrp = arg_waredscrp inwaremx[it_mxbt].relbillid = arg_relbillid inwaremx[it_mxbt].relbillprintid = arg_relbillprintid inwaremx[it_mxbt].relbillcode = ls_relbillcode inwaremx[it_mxbt].mtrlcuscode = arg_mtrlcuscode inwaremx[it_mxbt].Location = arg_location inwaremx[it_mxbt].capacity = ld_capacity * arg_qty 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.uof_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 THEN Long ll_sptid,ll_billtype,ll_balctype Int li_thtype //查询相关订单属于材料订单还是成品订单 // IF billtype = 1 AND arg_relid > 0 THEN // SELECT billtype INTO :ll_billtype // FROM u_buytask // WHERE taskid = :arg_relid // AND scid = :scid; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询订单类型失败'+'~n'+commit_transaction.SQLErrText // GOTO ext // END IF // ELSE // ll_billtype = 0 // END IF // // IF billtype = 5 THEN // ll_sptid = arg_cusid_sptid // ELSEIF billtype = 1 AND ll_billtype = 1 THEN // SELECT balctype INTO :ll_balctype // FROM u_storage // Where storageid = :storageid; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询仓库是否使用客户库存失败'+'~n'+commit_transaction.SQLErrText // GOTO ext // END IF // // IF ll_balctype = 1 THEN ll_sptid = arg_cusid_sptid // ELSE // ll_sptid = 0 // END IF // ELSE // ll_sptid = 0 // END IF SELECT thtype INTO :li_thtype FROM u_storage Where storageid = :storageid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_printid)+',查询仓库退货取价模式失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF li_thtype = 0 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 = :ll_sptid AND mtrlcuscode = :arg_mtrlcuscode And Location = :arg_location Using commit_transaction; IF commit_transaction.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 ELSE inwaremx[it_mxbt].cost = inwaremx[it_mxbt].fprice * arg_rebate END IF inwaremx[it_mxbt].newprice = lde_newprice ext: Destroy uo_sptprice IF rslt = 0 THEN p_clearmx() Return(rslt) */ end function public function integer uof_update_planprice (long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_fprice, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 String ls_status,ls_woodcode,ls_pcode Int li_pricepztype String ls_mtrlcode IF arg_fprice <= 0 THEN rslt = 1 GOTO ext END IF SELECT pricepztype,mtrlcode INTO :li_pricepztype,:ls_mtrlcode FROM u_mtrldef Where mtrlid = :arg_mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料计划成本价配置模式失败,'+commit_transaction.SQLErrText GOTO ext END IF CHOOSE CASE li_pricepztype CASE 0 ls_status = '' ls_woodcode = '' ls_pcode = '' CASE 1 ls_status = arg_status ls_woodcode = '' ls_pcode = '' CASE 2 ls_status = '' ls_woodcode = arg_woodcode ls_pcode = '' CASE 3 ls_status = '' ls_woodcode = '' ls_pcode = arg_pcode CASE 4 ls_status = arg_status ls_woodcode = arg_woodcode ls_pcode = '' CASE 5 ls_status = '' ls_woodcode = arg_woodcode ls_pcode = arg_pcode CASE 6 ls_status = arg_status ls_woodcode = '' ls_pcode = arg_pcode CASE 7 ls_status = arg_status ls_woodcode = arg_woodcode ls_pcode = arg_pcode END CHOOSE UPDATE u_mtrldef_planprice SET planprice = :arg_fprice WHERE mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode And pcode = :arg_pcode Using commit_transaction; IF commit_transaction.SQLCode = 0 THEN IF commit_transaction.SQLNRows = 0 THEN INSERT INTO u_mtrldef_planprice (mtrlid, status, woodcode, pcode, planprice) VALUES (:arg_mtrlid, :arg_status, :arg_woodcode, :arg_pcode, :arg_fprice) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入物料'+ls_mtrlcode+'计划成本价资料失败,'+commit_transaction.SQLErrText GOTO ext END IF END IF INSERT INTO u_mtrl_planprice_his (mtrlid, cmpldate, planprice, buildtype, status, woodcode, pcode) VALUES (:arg_mtrlid, getdate(), :arg_fprice, 2, :arg_status, :arg_woodcode, :arg_pcode) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '建立'+ls_mtrlcode+'产品计划成本价历史记录失败 '+commit_transaction.SQLErrText GOTO ext END IF ELSE IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新物料'+ls_mtrlcode+'计划成本价资料失败,'+commit_transaction.SQLErrText GOTO ext END IF 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 uof_ref_assign_plan_plankind (long arg_scid, long arg_mtrlwareid, long arg_plankind, long arg_plankind_relbillid, long arg_plankind_reprintlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref s_inwaremx_assign_plan arg_s_ap, ref string arg_msg);Int rslt = 1 Long i,j datastore ds_ap ds_ap = CREATE datastore ds_ap.DataObject = 'ds_inwaremx_assign_plan_plankind' ds_ap.SetTransObject(commit_transaction) ds_ap.Retrieve(arg_scid,arg_plankind,arg_plankind_relbillid,arg_plankind_reprintlid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode) FOR i = 1 TO ds_ap.RowCount() j++ arg_s_ap.planid[j] = ds_ap.Object.planid[i] arg_s_ap.assigntype[j] = ds_ap.Object.assigntype[i] arg_s_ap.scid[j] = ds_ap.Object.scid[i] arg_s_ap.mtrlwareid[j] = arg_mtrlwareid arg_s_ap.relbillid[j] = ds_ap.Object.relbillid[i] arg_s_ap.relprintid[j] = ds_ap.Object.relprintid[i] arg_s_ap.fpgrade[j] = ds_ap.Object.fpgrade[i] IF ds_ap.Object.planassignqty[i] - ds_ap.Object.assignqty[i] >= arg_qty THEN arg_s_ap.notassignqty[j] = arg_qty GOTO ext ELSE arg_s_ap.notassignqty[j] = ds_ap.Object.planassignqty[i] - ds_ap.Object.assignqty[i] arg_qty = arg_qty - (ds_ap.Object.planassignqty[i] - ds_ap.Object.assignqty[i]) END IF NEXT ext: RETURN rslt end function public function integer uof_del_barcode (long arg_scid, long arg_inwareid, string arg_barcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Decimal ld_packqty_barcode,ld_qty_barcode,ld_qty,ld_inwaremxqty Long ll_cusid,ll_mtrlid,i,ll_printid,ll_orderid String ls_status,ls_woodcode,ls_pcode String ls_plancode,ls_mtrlcuscode,ls_location IF getinfo(arg_scid,arg_inwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = "单据已经仓审,不能操作" GOTO ext END IF IF billtype = 3 And uo_option_barcode_inwarecp_paudit = 1 THEN arg_msg = '系统选项设置了生产进仓单使用先确认后审核条码流程,操作取消,如需操作请用pda调取相关单据把条码删除' rslt = 0 GOTO ext END IF IF billtype = 8 And uo_option_barcode_inwareother_paudit = 1 THEN arg_msg = '系统选项设置了其它进仓单使用先确认后审核条码流程,操作取消,如需操作请用pda调取相关单据把条码删除' rslt = 0 GOTO ext END IF SELECT U_inwaremx_mx_barcode.qty, u_mtrlware_mx.packqty, u_mtrlware_mx.mtrlid, u_mtrlware_mx.status, u_mtrlware_mx.woodcode, u_mtrlware_mx.pcode, u_mtrlware_mx.plancode, u_mtrlware_mx.mtrlcuscode, u_mtrlware_mx.location, u_mtrlware_mx.sptid, u_mtrlware_mx.orderid INTO :ld_qty_barcode, :ld_packqty_barcode, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ls_plancode, :ls_mtrlcuscode, :ls_location, :ll_cusid, :ll_orderid FROM U_inwaremx_mx_barcode,u_mtrlware_mx WHERE U_inwaremx_mx_barcode.barcode = u_mtrlware_mx.barcode AND U_inwaremx_mx_barcode.scid = :arg_scid AND U_inwaremx_mx_barcode.inwareid = :arg_inwareid AND U_inwaremx_mx_barcode.barcode = :arg_barcode AND U_inwaremx_mx_barcode.billtype = :billtype Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询条码信息失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ld_qty = ld_qty_barcode * ld_packqty_barcode FOR i = 1 To it_mxbt IF inwaremx[i].mtrlid = ll_mtrlid And & inwaremx[i].status = ls_status And & inwaremx[i].woodcode = ls_woodcode And & inwaremx[i].pcode = ls_pcode And & inwaremx[i].plancode = ls_plancode And & inwaremx[i].mtrlcuscode = ls_mtrlcuscode And & ( inwaremx[i].Location = ls_location and uo_option_barcodelocation_use_inwaremx_location = 0 or & uo_option_barcodelocation_use_inwaremx_location = 1 ) And & inwaremx[i].sptid = ll_cusid And & inwaremx[i].relid = ll_orderid THEN ll_printid = inwaremx[i].printid ld_inwaremxqty = inwaremx[i].qty END IF NEXT IF ll_printid = 0 THEN arg_msg = '条码找不到对应进仓明细行,请检查条码资料' rslt = 0 GOTO ext END IF IF ld_qty > ld_inwaremxqty THEN arg_msg = '删除条码要扣减数量大于对应进仓明细数量,请检查' rslt = 0 GOTO ext ELSEIF ld_qty = ld_inwaremxqty THEN DELETE FROM u_inwaremx Where scid = :arg_scid And inwareid = :arg_inwareid And printid = :ll_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '删除进仓明细失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ELSEIF ld_qty < ld_inwaremxqty THEN UPDATE u_inwaremx SET uqty = uqty - :ld_qty,qty = qty - :ld_qty Where scid = :arg_scid And inwareid = :arg_inwareid And printid = :ll_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新进仓明细数量失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF DELETE FROM U_inwaremx_mx_barcode WHERE U_inwaremx_mx_barcode.scid = :arg_scid AND U_inwaremx_mx_barcode.inwareid = :arg_inwareid AND U_inwaremx_mx_barcode.barcode = :arg_barcode AND U_inwaremx_mx_barcode.billtype = :billtype Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '删除条码失败,'+commit_transaction.SQLErrText rslt = 0 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_item (long arg_printid, long arg_itemid, decimal arg_amt, string arg_mxdscrp, ref string arg_msg);Int rslt = 1 Long cnt cnt = 0 IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_itemid) THEN arg_itemid = 0 IF IsNull(arg_amt) THEN arg_amt = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF arg_itemid = 0 Or arg_amt = 0 THEN rslt = 1 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_itemdef Where itemid = :arg_itemid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询收支项目是否存在失败,'+commit_transaction.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '第'+String(arg_printid)+'行,收支项目不存在,请检查' GOTO ext END IF it_mxbt_item++ inware_itemmx[it_mxbt_item].printid = arg_printid inware_itemmx[it_mxbt_item].itemid = arg_itemid inware_itemmx[it_mxbt_item].amt = arg_amt inware_itemmx[it_mxbt_item].mxdscrp = arg_mxdscrp ext: IF rslt = 0 THEN p_clearmx() 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 p_update_mtrlwareid_inwaremx (long arg_mtrlwareid, long arg_inwareid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 UPDATE u_inwaremx SET u_inwaremx.mtrlwareid = :arg_mtrlwareid WHERE u_inwaremx.scid = :scid AND u_inwaremx.inwareid = :arg_inwareid AND u_inwaremx.printid = :arg_printid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新进仓明细库存id失败,'+commit_transaction.SQLErrText rslt = 0 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 uof_disuse (long arg_scid, long arg_inwareid, integer arg_disusetype, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_disuseid //arg_disusetype 0 - 修改, 1-删除 Select max(disuseid) Into :ll_disuseid From u_inware_disuse Where scid = :arg_scid And inwareid = :arg_inwareid Using commit_transaction; If commit_transaction.SQLCode = -1 Then rslt = 0 arg_msg = '获取采购收货单废弃单序号失败,'+ commit_transaction.SQLErrText Goto ext ElseIf commit_transaction.SQLCode = 100 Then ll_disuseid = 0 End If if isnull(ll_disuseid) then ll_disuseid = 0 ll_disuseid++ Insert Into u_inware_disuse (scid, inwareid, inwarecode, billtype, relid, storageid, opdate, opemp, Modemp, moddate, flag, auditingdate, auditingrep, indate, inrep, part, dscrp, sptid, sptname, balcflag, balcdate, balcdateint, Dxflag, thflag, printnum, ctmint, otheramt, relint_1, relint_2, relint_3, relstr_1, relstr_2, relstr_3, secflag, secauditingdate, secauditingrep, plandate, priceflag, pricedate, pricerep, checkdate, moneyid, mrate, deptid, moneyname, banktypename, storagename, disuseemp, disusedate, disusetype, disuseid) Select u_inware.scid, u_inware.inwareid, u_inware.inwarecode, u_inware.billtype, u_inware.relid, u_inware.storageid, u_inware.opdate, u_inware.opemp, u_inware.Modemp, u_inware.moddate, u_inware.flag, u_inware.auditingdate, u_inware.auditingrep, u_inware.indate, u_inware.inrep, u_inware.part, u_inware.dscrp, u_inware.sptid, u_inware.sptname, u_inware.balcflag, u_inware.balcdate, u_inware.balcdateint, u_inware.Dxflag, u_inware.thflag, u_inware.printnum, u_inware.ctmint, 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.secflag, u_inware.secauditingdate, u_inware.secauditingrep, u_inware.plandate, u_inware.priceflag, u_inware.pricedate, u_inware.pricerep, u_inware.checkdate, u_inware.moneyid, u_inware.mrate, u_inware.deptid, cw_currency.name, cw_banktype.banktypename, u_storage.storagename, :publ_operator,getdate(),:arg_disusetype,:ll_disuseid From u_inware LEFT Outer JOIN u_storage ON u_inware.storageid = u_storage.storageid LEFT Outer JOIN cw_banktype ON u_inware.relint_1 = cw_banktype.banktypeid LEFT Outer JOIN cw_currency ON u_inware.moneyid = cw_currency.moneyid Where u_inware.scid = :arg_scid And u_inware.inwareid = :arg_inwareid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '插入采购收货单废弃单失败,'+commit_transaction.SQLErrText Goto ext End If Insert Into u_inwaremx_disuse (scid, inwareid, printid, ifrel, relid, mtrlid, plancode, status, qty, fprice, rebate, price, planprice, jgprice, mxdscrp, woodcode, relcode, pcode, sptid_cusid, ctmint, cost, sptmtrlname, uqty, uprice, unit, rate, bootqty, noauditqty, relprintid, checkqty, result, waredscrp, relbillid, relbillprintid, relbillcode, mtrlcuscode, location, badqty, thqty, ptqty, enprice, capacity, enprice_tax, enprice_notax, tax, deliqty, deliprice_notax, mtrlwareid, mtrlwareprintid, newprice, mtrlcode, mtrlname,disuseid) Select u_inwaremx.scid, u_inwaremx.inwareid, u_inwaremx.printid, u_inwaremx.ifrel, u_inwaremx.relid, u_inwaremx.mtrlid, u_inwaremx.plancode, u_inwaremx.status, u_inwaremx.qty, u_inwaremx.fprice, u_inwaremx.rebate, u_inwaremx.price, u_inwaremx.planprice, u_inwaremx.jgprice, u_inwaremx.mxdscrp, u_inwaremx.woodcode, u_inwaremx.relcode, u_inwaremx.pcode, u_inwaremx.sptid_cusid, u_inwaremx.ctmint, u_inwaremx.cost, u_inwaremx.sptmtrlname, u_inwaremx.uqty, u_inwaremx.uprice, u_inwaremx.unit, u_inwaremx.rate, u_inwaremx.bootqty, u_inwaremx.noauditqty, u_inwaremx.relprintid, u_inwaremx.checkqty, u_inwaremx.result, u_inwaremx.waredscrp, u_inwaremx.relbillid, u_inwaremx.relbillprintid, u_inwaremx.relbillcode, u_inwaremx.mtrlcuscode, u_inwaremx.location, u_inwaremx.badqty, u_inwaremx.thqty, u_inwaremx.ptqty, u_inwaremx.enprice, u_inwaremx.capacity, u_inwaremx.enprice_tax, u_inwaremx.enprice_notax, u_inwaremx.tax, u_inwaremx.deliqty, u_inwaremx.deliprice_notax, u_inwaremx.mtrlwareid, u_inwaremx.mtrlwareprintid, u_inwaremx.newprice, u_mtrldef.mtrlcode, u_mtrldef.mtrlname,:ll_disuseid From u_inwaremx LEFT Outer JOIN u_mtrldef ON u_inwaremx.mtrlid = u_mtrldef.mtrlid Where u_inwaremx.scid = :arg_scid And u_inwaremx.inwareid = :arg_inwareid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '插入采购收货单废弃单明细失败,'+commit_transaction.SQLErrText Goto ext End If Insert Into u_inwaremx_mx_disuse (scid, inwareid, mxprintid, mtrlid, plancode, status, qty, fprice, rebate, price, mxdscrp, printid, woodcode, pcode, sptid_cusid, ctmint, cost, waredscrp, mtrlcuscode, location, ptinwareid, ptprintid, ptinwarecode, mtrlcode, mtrlname, disuseid) Select u_inwaremx_mx.scid, u_inwaremx_mx.inwareid, u_inwaremx_mx.mxprintid, u_inwaremx_mx.mtrlid, u_inwaremx_mx.plancode, u_inwaremx_mx.status, u_inwaremx_mx.qty, u_inwaremx_mx.fprice, u_inwaremx_mx.rebate, u_inwaremx_mx.price, u_inwaremx_mx.mxdscrp, u_inwaremx_mx.printid, u_inwaremx_mx.woodcode, u_inwaremx_mx.pcode, u_inwaremx_mx.sptid_cusid, u_inwaremx_mx.ctmint, u_inwaremx_mx.cost, u_inwaremx_mx.waredscrp, u_inwaremx_mx.mtrlcuscode, u_inwaremx_mx.location, u_inwaremx_mx.ptinwareid, u_inwaremx_mx.ptprintid, u_inwaremx_mx.ptinwarecode, u_mtrldef.mtrlcode, u_mtrldef.mtrlname, :ll_disuseid From u_inwaremx_mx LEFT Outer JOIN u_mtrldef ON u_inwaremx_mx.mtrlid = u_mtrldef.mtrlid Where u_inwaremx_mx.scid = :arg_scid And u_inwaremx_mx.inwareid = :arg_inwareid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '插入采购收货单废弃单包件明细失败,'+commit_transaction.SQLErrText Goto ext End If Insert Into U_inwaremx_mx_barcode_disuse (billtype, scid, inwareid, barcode, printid, qty, ctmint, opemp, opdate, disuseid) Select billtype, scid, inwareid, barcode, printid, qty, ctmint, opemp, opdate, :ll_disuseid From U_inwaremx_mx_barcode Where U_inwaremx_mx_barcode.scid = :arg_scid And U_inwaremx_mx_barcode.inwareid = :arg_inwareid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '插入采购收货单废弃单条码明细失败,'+commit_transaction.SQLErrText Goto ext End If Insert Into u_inware_itemmx_disuse (scid, inwareid, printid, itemid, amt, mxdscrp, itemcode, itemname, itemtype, disuseid) Select u_inware_itemmx.scid, u_inware_itemmx.inwareid, u_inware_itemmx.printid, u_inware_itemmx.itemid, u_inware_itemmx.amt, u_inware_itemmx.mxdscrp, u_itemdef.itemcode, u_itemdef.itemname, u_itemdef.itemtype, :ll_disuseid From u_inware_itemmx LEFT Outer JOIN u_itemdef ON u_inware_itemmx.itemid = u_itemdef.itemid Where u_inware_itemmx.scid = :arg_scid And u_inware_itemmx.inwareid = :arg_inwareid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '插入采购收货单废弃单费用明细失败,'+commit_transaction.SQLErrText 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 Decimal ld_noauditqty,ld_bootqty Decimal ld_consignedqty,ld_uqty String ls_relcode,ls_unit Decimal lde_mx_qty Decimal ld_uprate,ld_upqty Int li_ifpack,li_ifpackpro Decimal ld_capacity,ld_capacity_zj s_mtrlcfg_expr s_pz[] String ls_status_zj Long ll_i Decimal lde_newprice Int li_outtype_storage Int li_check_taskqty Decimal ld_fprice_notax IF uo_option_buy_zero = -1000 THEN rslt = 0 arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_wfjg_zero = -1000 THEN rslt = 0 arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_change_status = '-1000' THEN rslt = 0 arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_change_woodcode = '-1000' THEN rslt = 0 arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_change_pcode = '-1000' THEN rslt = 0 arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_unit_dec = -1000 THEN rslt = 0 arg_msg = '选项:[023]辅助单位转换库存单位小数位,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_ifovertask = -1000 THEN rslt = 0 arg_msg = '选项:[010]超采购,外协订单收货,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_ifovertask_cp = -1000 THEN rslt = 0 arg_msg = '选项:[112]超生产指令单数量进仓,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_cost_notax = -1000 THEN rslt = 0 arg_msg = '选项:[362]采购外协使用不含税价进仓,读取初始默认值失败,操作取消!' GOTO ext END IF 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.woodcode) THEN s_mx.woodcode = '' IF IsNull(s_mx.pcode) THEN s_mx.pcode = '' IF IsNull(s_mx.uqty) THEN s_mx.uqty = 0 IF IsNull(s_mx.enprice) THEN s_mx.enprice = 0 IF IsNull(s_mx.rebate) THEN s_mx.rebate = 1 IF IsNull(s_mx.mxdscrp) THEN s_mx.mxdscrp = '' IF IsNull(s_mx.jgprice) THEN s_mx.jgprice = 0 IF IsNull(s_mx.relid) THEN s_mx.relid = 0 IF IsNull(s_mx.ifrel) THEN s_mx.ifrel = 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.relprintid) THEN s_mx.relprintid = 0 IF IsNull(s_mx.checkqty) THEN s_mx.checkqty = 0 IF IsNull(s_mx.result) THEN s_mx.result = '' IF IsNull(s_mx.waredscrp) THEN s_mx.waredscrp = '' IF IsNull(s_mx.relbillid) THEN s_mx.relbillid = 0 IF IsNull(s_mx.relbillprintid) THEN s_mx.relbillprintid = 0 IF IsNull(s_mx.mtrlcuscode) THEN s_mx.mtrlcuscode = '' IF IsNull(s_mx.Location) THEN s_mx.Location = '' IF IsNull(s_mx.deliqty) THEN s_mx.deliqty = 0 IF IsNull(s_mx.tax) THEN s_mx.tax = 0 IF IsNull(s_mx.Thptype) THEN s_mx.Thptype = 0 //退货处理选项: 0-不操作,1-更新原采购订单,2-重新生成采购订单 IF IsNull(s_mx.jgdscrp) THEN s_mx.jgdscrp = '' IF IsNull(s_mx.ifvqty) THEN s_mx.ifvqty = 0 //IF s_mx.rebate = 0 THEN s_mx.rebate = 1 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.ifnotinout) THEN s_mx.ifnotinout = 0 IF s_mx.mtrlid = 0 THEN //OR s_mx.uqty = 0 OR s_mx.qty = 0 THEN rslt = 1 GOTO ext END IF s_mx.status = Trim(s_mx.status) s_mx.woodcode = Trim(s_mx.woodcode) s_mx.pcode = Trim(s_mx.pcode) s_mx.plancode = Trim(s_mx.plancode) s_mx.mtrlcuscode = Trim(s_mx.mtrlcuscode) s_mx.Location = Trim(s_mx.Location) IF billtype <> 1 THEN mrate = 1 END IF //检查物料id Int li_statusflag,li_woodcodeflag,li_pcodeflag Int li_status_check,li_woodcode_check,li_pcode_check Int li_outtype_mtrl,li_ifunit SELECT unit, statusflag, woodcodeflag, pcodeflag, status_check, woodcode_check, pcode_check, capacity * capaparm, outtype, ifpack, ifpackpro, ifunit INTO :ls_unit, :li_statusflag, :li_woodcodeflag, :li_pcodeflag, :li_status_check, :li_woodcode_check, :li_pcode_check, :ld_capacity, :li_outtype_mtrl, :li_ifpack, :li_ifpackpro, :li_ifunit 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+"查询操作失败,物料或产品编号:"+s_mx.mtrlcode GOTO ext END IF SELECT outtype INTO :li_outtype_storage FROM u_storage Where storageid = :storageid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询仓库出仓策略失败,"+commit_transaction.SQLErrText GOTO ext END IF IF li_outtype_storage > 0 THEN IF billtype <> 23 And billtype <> 25 And billtype <> 1 And ( li_ifpackpro = 1 Or li_ifpackpro = 2 ) THEN arg_msg = "第"+String(s_mx.printid)+"行,物料:"+s_mx.mtrlcode+"个性包件产品或通用包件产品不能直接开进仓单,操作取消" rslt = 0 GOTO ext END IF END IF //IF billtype <> 9 THEN // IF li_ifunit = 1 THEN // IF s_mx.uqty = s_mx.qty And s_mx.unit <> ls_unit THEN // rslt = 0 // arg_msg = "第"+String(s_mx.printid)+"行,物料使用库存双数量核算,但录入的计量单位数量与库存单位数量相同,操作取消" // GOTO ext // END IF // END IF //END IF IF li_ifpack = 2 And s_mx.mtrlcuscode = '' THEN arg_msg = '行:'+String(s_mx.printid)+",物料:"+s_mx.mtrlcode+",为个性包件,但没有产品批号,请检查" rslt = 0 GOTO ext END IF IF li_ifpackpro = 2 And s_mx.mtrlcuscode = '' THEN arg_msg = '行:'+String(s_mx.printid)+",物料:"+s_mx.mtrlcode+",为个性包件产品,但没有产品批号,请检查" rslt = 0 GOTO ext END IF IF li_ifpackpro = 4 And s_mx.mtrlcuscode = '' THEN arg_msg = '行:'+String(s_mx.printid)+",物料:"+s_mx.mtrlcode+",为组合配置整排散进包件产品,但没有产品批号,请检查" rslt = 0 GOTO ext END IF f_get_planprice_mtrl(s_mx.mtrlid,s_mx.status,s_mx.woodcode,s_mx.pcode,ld_planprice) IF Not ((uo_option_buy_zero = 1 And billtype = 1) Or & (uo_option_wfjg_zero = 1 And billtype = 4 ) Or & (billtype = 9 And relid > 0 And li_outtype_mtrl = 2)) THEN IF billtype = 9 THEN IF s_mx.uqty = 0 And s_mx.qty = 0 THEN rslt = 1 GOTO ext END IF ELSE IF s_mx.uqty = 0 Or s_mx.qty = 0 Or s_mx.deliqty = 0 THEN rslt = 1 GOTO ext END IF END IF IF s_mx.uqty = 0 THEN s_mx.rate = 0 ELSE s_mx.rate = s_mx.qty / s_mx.uqty END IF IF billtype <> 9 THEN IF s_mx.checkqty = 0 THEN s_mx.checkqty = s_mx.uqty END IF END IF IF s_mx.rebate <= 0 or s_mx.rebate > 1 THEN arg_msg = '行:'+String(s_mx.printid)+',折扣错误,只能取范围(0, 1]' rslt = 0 GOTO ext END IF //IF s_mx.checkqty < s_mx.uqty THEN // arg_msg = '第'+String(s_mx.printid)+'行,送货数不能少于实进仓数' // rslt = 0 // GOTO ext //END IF IF li_statusflag = 2 THEN IF s_mx.status = '' THEN arg_msg = '行:'+String(s_mx.printid)+',物料:'+s_mx.mtrlcode+','+uo_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)+',物料:'+s_mx.mtrlcode+','+uo_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)+",查询操作失败,可能"+uo_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)+',物料:'+s_mx.mtrlcode+','+uo_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)+",查询操作失败,可能"+uo_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)+',物料:'+s_mx.mtrlcode+','+uo_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)+",查询操作失败,可能"+uo_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 * capaparm INTO :ld_capacity_zj FROM u_mtrl_configure WHERE mtrlid = :s_mx.mtrlid And Name = :ls_status_zj Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "第"+String(s_mx.printid)+"行,物料:"+s_mx.mtrlcode+"查询子件 "+ls_status_zj+" 折算套数参数操作失败" GOTO ext END IF ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_i].qty) NEXT END IF Int li_iflimitprice SELECT iflimitprice INTO :li_iflimitprice FROM u_mtrldef Where 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 IF billtype <> 9 THEN // IF Trim(ls_unit) <> Trim(s_mx.unit) And s_mx.rate = 1 THEN // arg_msg = '进仓单,行:'+String(s_mx.printid)+',物料库存单位:'+Trim(ls_unit)+'与采购单位:'+Trim(s_mx.unit)+'不同,但转换率为1,请检查' // rslt = 0 // GOTO ext // END IF IF Trim(ls_unit) = Trim(s_mx.unit) And s_mx.rate <> 1 THEN arg_msg = '进仓单,行:'+String(s_mx.printid)+',物料:'+s_mx.mtrlcode+'物料库存单位:'+Trim(ls_unit)+'与采购单位:'+Trim(s_mx.unit)+'相同,但转换率不为1,请检查' rslt = 0 GOTO ext END IF END IF //查询采购限价并检查进仓价 IF billtype = 1 THEN IF uo_sptprice.uof_check_limitprice(thflag,s_mx.mtrlid,s_mx.status,s_mx.woodcode,s_mx.pcode,s_mx.unit,s_mx.enprice * s_mx.rebate,arg_msg) = 0 THEN arg_msg = '行:'+String(s_mx.printid)+","+arg_msg rslt = 0 GOTO ext END IF IF li_iflimitprice = 1 THEN IF uo_sptprice.uof_check_price(thflag,sptid,s_mx.mtrlid,s_mx.mtrlcode,s_mx.unit,s_mx.status,s_mx.woodcode,s_mx.pcode,'',moneyid,s_mx.enprice * s_mx.rebate,indate,arg_msg) = 0 THEN arg_msg = '行:'+String(s_mx.printid)+","+arg_msg rslt = 0 GOTO ext END IF END IF IF thflag = 1 THEN //退货处理选项 IF s_mx.Thptype = 0 THEN ELSEIF s_mx.Thptype = 1 THEN IF s_mx.ifrel = 0 THEN arg_msg = '行:'+String(s_mx.printid)+',没有选订单的明细退货处理选项不能选择[更新原采购订单]' rslt = 0 GOTO ext END IF ELSEIF s_mx.Thptype = 2 THEN END IF END IF END IF //增加新字段 newprice 最新报价 IF billtype = 1 THEN DateTime ldt_effdate Decimal ls_1stnewcost,ls_1stzqrate,ls_1strate String ls_msg String ls_1stunit ls_1stunit = s_mx.unit ldt_effdate = DateTime(Today(),Time(0)) IF uo_sptprice.uof_getmtrlsptprice(moneyid,sptid,s_mx.mtrlid,ls_1stunit,s_mx.status,s_mx.woodcode,s_mx.pcode,'',ls_1stnewcost,ls_1stzqrate,ls_1strate,ldt_effdate,ls_msg) <> 1 THEN lde_newprice = 0 ELSE lde_newprice = ls_1stnewcost END IF ELSE lde_newprice = 0 END IF CHOOSE CASE billtype CASE 1,26 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,sum(uqty - consignedqty - stopqty),sum(uqty),sum(consignedqty) INTO :ls_relcode,:ld_bootqty,:ld_uqty,:ld_consignedqty FROM u_buytaskmx,u_buytask WHERE u_buytaskmx.taskid = :s_mx.relid AND u_buytaskmx.scid = :scid AND u_buytaskmx.printid = :s_mx.relprintid AND u_buytaskmx.taskid = u_buytask.taskid AND u_buytaskmx.scid = u_buytask.scid GROUP BY taskcode 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 IF billtype = 1 THEN lde_mx_qty = 0 FOR ls_i = 1 To it_mxbt IF s_mx.mtrlid = inwaremx[ls_i].mtrlid And & s_mx.relid = inwaremx[ls_i].relid And & s_mx.relprintid = inwaremx[ls_i].relprintid THEN lde_mx_qty = lde_mx_qty + inwaremx[ls_i].uqty END IF NEXT lde_mx_qty = lde_mx_qty + s_mx.uqty //查已开单数 ld_noauditqty = 0 SELECT sum(uqty) INTO :ld_noauditqty FROM u_inwaremx,u_inware WHERE u_inwaremx.relid = :s_mx.relid AND u_inwaremx.sptid_cusid = :s_mx.sptid AND u_inwaremx.mtrlid = :s_mx.mtrlid AND u_inwaremx.status = :s_mx.status AND u_inwaremx.woodcode = :s_mx.woodcode AND u_inwaremx.pcode = :s_mx.pcode AND u_inwaremx.unit = :s_mx.unit AND u_inwaremx.relprintid = :s_mx.relprintid AND u_inware.inwareid <> :inwareid AND u_inware.flag = 0 AND u_inware.inwareid = u_inwaremx.inwareid AND u_inware.scid = u_inwaremx.scid AND u_inwaremx.scid = :scid And u_inware.billtype = 1 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 IF IsNull(ld_noauditqty) THEN ld_noauditqty = 0 IF uo_option_ifovertask = 1 THEN IF lde_mx_qty + ld_noauditqty > ld_bootqty THEN arg_msg = '行:'+String(s_mx.printid)+',物料:'+s_mx.mtrlcode+'未完成数:'+String(ld_bootqty,'#,##0.0###')+'已开单未审核数:'+String(ld_noauditqty,'#,##0.0###')+',不能收货:'+String(lde_mx_qty,'#,##0.0###') rslt = 0 GOTO ext END IF ELSEIF uo_option_ifovertask = 3 THEN SELECT uprate , upqty INTO :ld_uprate,:ld_upqty FROM u_mtrldef Where mtrlid = :s_mx.mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '行:'+String(s_mx.printid)+',查询物料:'+Trim(s_mx.mtrlcode)+'超收货比例失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF ld_uqty * (1 + ld_uprate) + ld_upqty < ld_consignedqty + lde_mx_qty + ld_noauditqty THEN rslt = 0 arg_msg = '行:'+String(s_mx.printid)+",物料:"+s_mx.mtrlcode+"未完成数量只有"+String(ld_uqty - ld_consignedqty,'#,##0.0###')+"已开单未审核数:"+String(ld_noauditqty,'#,##0.0###')+",允许超收上限:"+String(ld_uqty * (1 + ld_uprate) + ld_upqty - ld_consignedqty - ld_noauditqty,'#,##0.00##')+",不能入库"+String(lde_mx_qty,'#,##0.0#') GOTO ext END IF END IF END IF 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 u_Order_ml.ordercode, isnull(u_sc_wkp.check_taskqty,0) INTO :ls_relcode, :li_check_taskqty FROM u_Order_ml LEFT OUTER JOIN u_sc_wkp ON u_Order_ml.wrkGrpid = u_sc_wkp.wrkGrpid WHERE u_order_ml.orderid = :s_mx.relid AND u_order_ml.mtrlid = :s_mx.mtrlid AND u_order_ml.scid = :scid 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 //检查指令单工序是否已开完派工单 IF li_check_taskqty = 1 THEN SELECT count(*) INTO :cnt FROM U_OrderRqwp WHERE scid = :scid AND orderid = :s_mx.relid AND proqty > taskqty Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '行:'+String(s_mx.printid)+',查询指令单工序是否已完成派工失败'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '行:'+String(s_mx.printid)+',指令单工序没有完成派工,不允许进仓' rslt = 0 GOTO ext END IF END IF //查已开单数 ld_noauditqty = 0 SELECT sum(qty) INTO :ld_noauditqty FROM u_inwaremx,u_inware WHERE u_inwaremx.relid = :s_mx.relid AND u_inware.inwareid <> :inwareid AND u_inware.flag = 0 AND u_inware.inwareid = u_inwaremx.inwareid AND u_inware.scid = u_inwaremx.scid AND u_inwaremx.scid = :scid And u_inware.billtype = 3 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 IF IsNull(ld_noauditqty) THEN ld_noauditqty = 0 lde_mx_qty = 0 FOR ls_i = 1 To it_mxbt IF s_mx.mtrlid = inwaremx[ls_i].mtrlid And & s_mx.relid = inwaremx[ls_i].relid And & s_mx.relprintid = inwaremx[ls_i].relprintid THEN lde_mx_qty = lde_mx_qty + inwaremx[ls_i].qty END IF NEXT lde_mx_qty = lde_mx_qty + s_mx.qty SELECT orderqty - stopqty,acmpqty INTO :ld_uqty,:ld_consignedqty FROM u_order_ml WHERE u_order_ml.orderid = :s_mx.relid AND u_order_ml.scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '行:'+String(s_mx.printid)+',查询生产计划是否有物料:'+s_mx.mtrlcode+'失败' rslt = 0 GOTO ext END IF IF uo_option_ifovertask_cp = 1 Or uo_option_ifovertask_cp = 4 THEN //不允许超收 IF ld_uqty < lde_mx_qty + ld_consignedqty + ld_noauditqty THEN rslt = 0 arg_msg = '行:'+String(s_mx.printid)+',该计划明细产品['+s_mx.mtrlcode+']未完成数量'+String(ld_uqty - ld_consignedqty,'#,##0.00##' )+',已开单未审核数:'+String(ld_noauditqty,'#,##0.0###')+'小于本次完成数量' GOTO ext END IF ELSEIF uo_option_ifovertask_cp = 3 THEN //允许超收但按比例限制 SELECT uprate , upqty INTO :ld_uprate,:ld_upqty FROM u_mtrldef Where mtrlid = :s_mx.mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '行:'+String(s_mx.printid)+',查询物料:'+Trim(s_mx.mtrlcode)+'超收货比例失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF ld_uqty * (1 + ld_uprate) + ld_upqty < ld_consignedqty + lde_mx_qty + ld_noauditqty THEN rslt = 0 arg_msg = '行:'+String(s_mx.printid)+",物料:"+s_mx.mtrlcode+"未完成数量只有"+String(ld_uqty - ld_consignedqty,'#,##0.0###')+'已开单未审核数:'+String(ld_noauditqty,'#,##0.0###')+",允许超收上限:"+String(ld_uqty * (1 + ld_uprate) + ld_upqty - ld_consignedqty - ld_noauditqty,'#,##0.00##')+",不能入库"+String(lde_mx_qty,'#,##0.0#') GOTO ext END IF END IF END IF Int li_if_cus_mtrlware SELECT balctype INTO :li_if_cus_mtrlware FROM u_storage Where storageid = :storageid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '行:'+String(s_mx.printid)+',查询仓库是否使用客户库存失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF billtype = 3 And li_if_cus_mtrlware = 1 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_cust Where cusid = :s_mx.sptid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '行:'+String(s_mx.printid)+',查询客户资料失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF CASE 4 IF s_mx.ifrel > 0 THEN IF s_mx.relid = 0 THEN arg_msg = '行:'+String(s_mx.printid)+',请先择相应的加工计划' rslt = 0 GOTO ext END IF SELECT u_order_wfjg.taskcode ,sum(u_order_wfjgmx.qty - u_order_wfjgmx.consignedqty)INTO :ls_relcode,:ld_bootqty FROM u_order_wfjgmx,u_order_wfjg WHERE u_order_wfjgmx.wfjgid = :s_mx.relid AND u_order_wfjgmx.scid = :scid AND u_order_wfjgmx.printid = :s_mx.relprintid AND u_order_wfjgmx.wfjgid = u_order_wfjg.wfjgid AND u_order_wfjgmx.scid = u_order_wfjg.scid GROUP BY u_order_wfjg.taskcode 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 CASE 5 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_saletask_ll.taskcode ,sum(qty - consignedqty),sum(qty),sum(consignedqty) INTO :ls_relcode,:ld_bootqty,:ld_uqty,:ld_consignedqty FROM u_saletaskmx_in,u_saletask_ll WHERE u_saletaskmx_in.taskid = :s_mx.relid AND u_saletask_ll.scid = :scid AND u_saletaskmx_in.printid = :s_mx.relprintid AND u_saletaskmx_in.taskid = u_saletask_ll.taskid GROUP BY u_saletask_ll.taskcode 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 lde_mx_qty = 0 FOR ls_i = 1 To it_mxbt IF s_mx.mtrlid = inwaremx[ls_i].mtrlid And & s_mx.relid = inwaremx[ls_i].relid And & s_mx.relprintid = inwaremx[ls_i].relprintid THEN lde_mx_qty = lde_mx_qty + inwaremx[ls_i].qty END IF NEXT lde_mx_qty = lde_mx_qty + s_mx.uqty //查已开单数 ld_noauditqty = 0 SELECT sum(qty) INTO :ld_noauditqty FROM u_inwaremx,u_inware WHERE u_inwaremx.relid = :s_mx.relid AND u_inwaremx.sptid_cusid = :s_mx.sptid AND u_inwaremx.mtrlid = :s_mx.mtrlid AND u_inwaremx.status = :s_mx.status AND u_inwaremx.woodcode = :s_mx.woodcode AND u_inwaremx.pcode = :s_mx.pcode AND u_inwaremx.unit = :s_mx.unit AND u_inwaremx.relprintid = :s_mx.relprintid AND u_inware.inwareid <> :inwareid AND u_inware.flag = 0 AND u_inware.inwareid = u_inwaremx.inwareid AND u_inware.scid = u_inwaremx.scid AND u_inwaremx.scid = :scid And u_inware.billtype = 5 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询物料:'+s_mx.mtrlcode+'相关订单单据已开单数失败' rslt = 0 GOTO ext END IF IF IsNull(ld_noauditqty) THEN ld_noauditqty = 0 IF ld_uqty < lde_mx_qty + ld_consignedqty + ld_noauditqty THEN rslt = 0 arg_msg = '行:'+String(s_mx.printid)+',该计划明细产品['+s_mx.mtrlcode+']未完成数量'+String(ld_uqty - ld_consignedqty,'#,##0.00##' )+',已开单未审核数:'+String(ld_noauditqty,'#,##0.0###')+'小于本次完成数量' GOTO ext END IF END IF END CHOOSE IF s_mx.enprice * s_mx.rebate < 0 THEN //检查进仓价 rslt = 0 arg_msg = '行:'+String(s_mx.printid)+",物料或产品:" + String(s_mx.mtrlcode)+" 单价错误" GOTO ext END IF //查询质检单号 String ls_relbillcode ls_relbillcode = '' IF s_mx.relbillid > 0 THEN SELECT billcode INTO :ls_relbillcode FROM u_sptcheck Where billid = :s_mx.relbillid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '行:'+String(s_mx.printid)+',查询质检单号失败,'+commit_transaction.SQLErrText GOTO ext END IF END IF //写入内容 it_mxbt++ inwaremx[it_mxbt].noauditqty = ld_noauditqty 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].plancode = s_mx.plancode inwaremx[it_mxbt].bootqty = ld_bootqty inwaremx[it_mxbt].status = s_mx.status inwaremx[it_mxbt].enprice = s_mx.enprice inwaremx[it_mxbt].uprice = s_mx.enprice * mrate inwaremx[it_mxbt].rebate = s_mx.rebate inwaremx[it_mxbt].uqty = s_mx.uqty inwaremx[it_mxbt].qty = s_mx.qty //Round(s_mx.uqty * s_mx.rate,uo_option_unit_dec) inwaremx[it_mxbt].deliqty = s_mx.deliqty inwaremx[it_mxbt].tax = s_mx.tax inwaremx[it_mxbt].deliprice_notax = s_mx.enprice / (1 + s_mx.tax) IF s_mx.uqty <> 0 THEN inwaremx[it_mxbt].enprice_tax = s_mx.deliqty * s_mx.enprice / s_mx.uqty inwaremx[it_mxbt].enprice_notax = (s_mx.deliqty * s_mx.enprice / s_mx.uqty) / (1 + s_mx.tax) ELSE inwaremx[it_mxbt].enprice_tax = s_mx.enprice inwaremx[it_mxbt].enprice_notax = s_mx.enprice / (1 + s_mx.tax) END IF inwaremx[it_mxbt].enprice_tax = Abs(inwaremx[it_mxbt].enprice_tax) inwaremx[it_mxbt].enprice_notax = Abs(inwaremx[it_mxbt].enprice_notax) IF Round(s_mx.uqty * s_mx.rate,uo_option_unit_dec) <> 0 THEN inwaremx[it_mxbt].fprice = Round((inwaremx[it_mxbt].enprice_tax * mrate * s_mx.uqty)/(Round(s_mx.uqty * s_mx.rate,uo_option_unit_dec)),10) ld_fprice_notax = Round((inwaremx[it_mxbt].enprice_notax * mrate * s_mx.uqty)/(Round(s_mx.uqty * s_mx.rate,uo_option_unit_dec)),10) ELSE inwaremx[it_mxbt].fprice = 0 ld_fprice_notax = 0 END IF inwaremx[it_mxbt].fprice = Abs(inwaremx[it_mxbt].fprice) ld_fprice_notax = Abs(ld_fprice_notax) inwaremx[it_mxbt].price = inwaremx[it_mxbt].fprice * s_mx.rebate inwaremx[it_mxbt].planprice = ld_planprice inwaremx[it_mxbt].mxdscrp = s_mx.mxdscrp inwaremx[it_mxbt].dxflag = dxflag inwaremx[it_mxbt].jgprice = s_mx.jgprice inwaremx[it_mxbt].relid = s_mx.relid inwaremx[it_mxbt].ifrel = s_mx.ifrel inwaremx[it_mxbt].woodcode = s_mx.woodcode inwaremx[it_mxbt].pcode = s_mx.pcode inwaremx[it_mxbt].relcode = ls_relcode inwaremx[it_mxbt].relprintid = s_mx.relprintid inwaremx[it_mxbt].checkqty = s_mx.checkqty inwaremx[it_mxbt].result = s_mx.result inwaremx[it_mxbt].waredscrp = s_mx.waredscrp inwaremx[it_mxbt].relbillid = s_mx.relbillid inwaremx[it_mxbt].relbillprintid = s_mx.relbillprintid inwaremx[it_mxbt].relbillcode = ls_relbillcode inwaremx[it_mxbt].mtrlcuscode = s_mx.mtrlcuscode inwaremx[it_mxbt].Location = s_mx.Location inwaremx[it_mxbt].capacity = ld_capacity * s_mx.qty inwaremx[it_mxbt].ifvqty = s_mx.ifvqty inwaremx[it_mxbt].ifnotinout = s_mx.ifnotinout IF dxflag = 0 THEN inwaremx[it_mxbt].sptid = s_mx.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.uof_getmtrlname(sptid,s_mx.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 THEN Long ll_sptid,ll_billtype,ll_balctype Int li_thtype //查询相关订单属于材料订单还是成品订单 // IF billtype = 1 AND s_mx.relid > 0 THEN // SELECT billtype INTO :ll_billtype // FROM u_buytask // WHERE taskid = :s_mx.relid // AND scid = :scid; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询订单类型失败'+'~n'+commit_transaction.SQLErrText // GOTO ext // END IF // ELSE // ll_billtype = 0 // END IF // // IF billtype = 5 THEN // ll_sptid = s_mx.sptid // ELSEIF billtype = 1 AND ll_billtype = 1 THEN // SELECT balctype INTO :ll_balctype // FROM u_storage // Where storageid = :storageid; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询仓库是否使用客户库存失败'+'~n'+commit_transaction.SQLErrText // GOTO ext // END IF // // IF ll_balctype = 1 THEN ll_sptid = s_mx.sptid // ELSE // ll_sptid = 0 // END IF // ELSE // ll_sptid = 0 // END IF SELECT thtype INTO :li_thtype FROM u_storage Where storageid = :storageid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '行:'+String(s_mx.printid)+',查询仓库退货取价模式失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF li_thtype = 0 THEN SELECT cost INTO :ld_cost FROM u_mtrlware WHERE scid = :scid AND mtrlid = :s_mx.mtrlid AND storageid = :storageid AND status = :s_mx.status AND plancode = :s_mx.plancode AND woodcode = :s_mx.woodcode AND pcode = :s_mx.pcode AND dxflag = :dxflag AND sptid = :ll_sptid AND mtrlcuscode = :s_mx.mtrlcuscode And Location = :s_mx.Location Using commit_transaction; IF commit_transaction.SQLCode <> 0 Or IsNull(ld_cost) THEN ld_cost = 0 inwaremx[it_mxbt].cost = ld_cost ELSE IF uo_option_cost_notax = 0 THEN inwaremx[it_mxbt].cost = inwaremx[it_mxbt].fprice * s_mx.rebate ELSE inwaremx[it_mxbt].cost = ld_fprice_notax * s_mx.rebate END IF END IF ELSE IF uo_option_cost_notax = 0 THEN inwaremx[it_mxbt].cost = inwaremx[it_mxbt].fprice * s_mx.rebate ELSE inwaremx[it_mxbt].cost = ld_fprice_notax * s_mx.rebate END IF END IF inwaremx[it_mxbt].newprice = lde_newprice inwaremx[it_mxbt].Thptype = s_mx.Thptype inwaremx[it_mxbt].jgdscrp = s_mx.jgdscrp ext: Destroy uo_sptprice IF rslt = 0 THEN p_clearmx() Return(rslt) end function public function integer uof_check_scll_rate (long arg_scid, long arg_inwareid, long arg_printid, long arg_relid, long arg_mtrlid, decimal arg_qty, integer arg_ck_if_save_audit, ref string arg_msg);Int rslt = 1 Long cnt Long ll_relid,ll_mtrlid Decimal ld_qty,ld_minrate,ld_orderqty,ld_acmpqty,ld_uprate,ld_upqty Decimal ld_truerqqty,ld_dstrqty,ld_scllplanqty,ld_backqty,ld_backbuqty String ls_msg Int li_ck_result If uo_option_ifovertask_cp = -1000 Then rslt = 0 arg_msg = '选项:[112]超生产指令单数量进仓,读取初始默认值失败,操作取消!' Goto ext End If If arg_ck_if_save_audit = 0 Then ll_relid = arg_relid ll_mtrlid = arg_mtrlid ld_qty = arg_qty Else If arg_inwareid > 0 Then Select relid,qty,mtrlid Into :ll_relid,:ld_qty,:ll_mtrlid From u_inwaremx Where scid = :arg_scid And inwareid = :arg_inwareid And printid = :arg_printid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then arg_msg = '查询进仓单明细失败,'+commit_transaction.SQLErrText rslt = 0 Goto ext End If End If End If //yyx2014-9-26 采购补件指令单进仓不检查领料 Int li_ifbj_wkp,li_mtrlorigin SELECT mtrlorigin INTO :li_mtrlorigin FROM u_mtrldef Where mtrlid = :ll_mtrlid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询明细物料物料来源失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF SELECT u_sc_wkp.ifbj INTO :li_ifbj_wkp FROM u_order_ml,u_sc_wkp WHERE u_order_ml.wrkgrpid = u_sc_wkp.wrkgrpid AND u_order_ml.scid = :arg_scid And u_order_ml.orderid = :ll_relid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询明细指令单生产车间是否补件车间失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF li_ifbj_wkp = 1 And li_mtrlorigin = 2 THEN rslt = 1 GOTO ext END IF //end_yyx2014-9-26 采购补件指令单进仓不检查领料 Select count(*) Into :cnt From u_OrderRqMtrl_scll Inner JOIN u_mtrldef ON u_OrderRqMtrl_scll.MtrlID = u_mtrldef.mtrlid Where (u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 3) And (u_OrderRqMtrl_scll.trueRqqty > 0) And (u_OrderRqMtrl_scll.OrderID = :ll_relid) And (u_OrderRqMtrl_scll.scid = :arg_scid) Using commit_transaction; If commit_transaction.SQLCode <> 0 Then arg_msg = '查询相关指令单领料明细失败,'+commit_transaction.SQLErrText rslt = 0 Goto ext End If If cnt > 0 Then Select Min(Case when u_OrderRqMtrl_scll.trueRqqty = 0 Then 1 Else Round((u_OrderRqMtrl_scll.DstrQty + IsNull(uv_outware_scll_backbu_noaudit.backqty,0) + IsNull(uv_outware_scll_bu.qty,0)) / u_OrderRqMtrl_scll.trueRqqty,10) End), IsNull(sum(u_OrderRqMtrl_scll.trueRqqty),0), IsNull(sum(u_OrderRqMtrl_scll.DstrQty),0) Into :ld_minrate,:ld_truerqqty,:ld_dstrqty From u_OrderRqMtrl_scll Inner JOIN u_mtrldef On u_OrderRqMtrl_scll.mtrlid = u_mtrldef.mtrlid Left Outer JOIN uv_outware_scll_backbu_noaudit On u_OrderRqMtrl_scll.scid = uv_outware_scll_backbu_noaudit.scid And u_OrderRqMtrl_scll.OrderID = uv_outware_scll_backbu_noaudit.relid And u_OrderRqMtrl_scll.mtrlid = uv_outware_scll_backbu_noaudit.mtrlid And u_OrderRqMtrl_scll.status = uv_outware_scll_backbu_noaudit.status And u_OrderRqMtrl_scll.woodcode = uv_outware_scll_backbu_noaudit.woodcode And u_OrderRqMtrl_scll.pcode = uv_outware_scll_backbu_noaudit.pcode Left Outer JOIN uv_outware_scll_bu On u_OrderRqMtrl_scll.mtrlid = uv_outware_scll_bu.mtrlid And u_OrderRqMtrl_scll.status = uv_outware_scll_bu.status And u_OrderRqMtrl_scll.woodcode = uv_outware_scll_bu.woodcode And u_OrderRqMtrl_scll.pcode = uv_outware_scll_bu.pcode And u_OrderRqMtrl_scll.scid = uv_outware_scll_bu.scid And u_OrderRqMtrl_scll.OrderID = uv_outware_scll_bu.relid Where (u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 3) And (u_OrderRqMtrl_scll.trueRqqty + IsNull(uv_outware_scll_bu.qty,0) > 0) And (u_OrderRqMtrl_scll.OrderID = :ll_relid) And (u_OrderRqMtrl_scll.scid = :arg_scid) Using commit_transaction; If commit_transaction.SQLCode <> 0 Then ld_minrate = 1 End If If IsNull(ld_minrate) Then ld_minrate = 1 Select orderqty - stopqty,acmpqty Into :ld_orderqty,:ld_acmpqty From u_order_ml Where scid = :arg_scid And OrderID = :ll_relid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '查询相关指令单数量失败,'+commit_transaction.SQLErrText Goto ext End If If uo_option_ifovertask_cp = 1 Then If ld_acmpqty + ld_qty > Ceiling(ld_orderqty * ld_minrate) Then rslt = 0 arg_msg = '相关指令单最大领料配套数量为:'+String(Ceiling(ld_orderqty * ld_minrate),'#,##0.##########')+',已进仓数:'+String(ld_acmpqty,'#,##0.##########')+',不能进仓:'+String(ld_qty,'#,##0.##########') Goto ext End If ElseIf uo_option_ifovertask_cp = 4 Then Select IsNull(sum(Case u_mtrldef.scllplan_mode when 0 Then u_OrderRqMtrl_scll.flqty + IsNull(uv_outware_scllplan_noaudit.qty,0) Else IsNull(uv_outware_scllplan_all.p_rqqty,0) End),0) Into :ld_scllplanqty From u_OrderRqMtrl_scll Inner JOIN u_mtrldef On u_OrderRqMtrl_scll.mtrlid = u_mtrldef.mtrlid Left Outer JOIN uv_outware_scllplan_noaudit On u_OrderRqMtrl_scll.scid = uv_outware_scllplan_noaudit.scid And u_OrderRqMtrl_scll.OrderID = uv_outware_scllplan_noaudit.OrderID And u_OrderRqMtrl_scll.mtrlid = uv_outware_scllplan_noaudit.mtrlid And u_OrderRqMtrl_scll.wrkGrpid = uv_outware_scllplan_noaudit.wrkGrpid And u_OrderRqMtrl_scll.status = uv_outware_scllplan_noaudit.status And u_OrderRqMtrl_scll.woodcode = uv_outware_scllplan_noaudit.woodcode And u_OrderRqMtrl_scll.pcode = uv_outware_scllplan_noaudit.pcode Left Outer JOIN uv_outware_scllplan_all On u_OrderRqMtrl_scll.scid = uv_outware_scllplan_all.scid And u_OrderRqMtrl_scll.OrderID = uv_outware_scllplan_all.OrderID And u_OrderRqMtrl_scll.mtrlid = uv_outware_scllplan_all.mtrlid And u_OrderRqMtrl_scll.status = uv_outware_scllplan_all.status And u_OrderRqMtrl_scll.woodcode = uv_outware_scllplan_all.woodcode And u_OrderRqMtrl_scll.pcode = uv_outware_scllplan_all.pcode And u_OrderRqMtrl_scll.wrkGrpid = uv_outware_scllplan_all.wrkGrpid Where (u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 3) And (u_OrderRqMtrl_scll.OrderID = :ll_relid) And (u_OrderRqMtrl_scll.scid = :arg_scid) Using commit_transaction; If commit_transaction.SQLCode <> 0 Then ld_scllplanqty = 0 End If // SELECT IsNull(sum(CASE u_mtrldef.scllplan_mode when 0 THEN IsNull(uv_outware_scllplan_all.conqty,0) ELSE IsNull(uv_outware_scllplan_all.p_rqqty,0) END),0) //Into :ld_scllplanqty //From uv_outware_scllplan_all Inner JOIN //u_mtrldef On uv_outware_scllplan_all.mtrlid = u_mtrldef.mtrlid //Where (u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 3) //And (uv_outware_scllplan_all.OrderID = :ll_relid) //And (uv_outware_scllplan_all.scid = :arg_scid) Using commit_transaction; //IF commit_transaction.SQLCode <> 0 THEN // ld_scllplanqty = 0 //END IF Select IsNull(sum(uv_outware_scll_back.qty),0) Into :ld_backqty From uv_outware_scll_back Inner JOIN u_mtrldef On uv_outware_scll_back.mtrlid = u_mtrldef.mtrlid Where (u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 3) And (uv_outware_scll_back.qty <> 0) And (uv_outware_scll_back.relid = :ll_relid) And (uv_outware_scll_back.scid = :arg_scid) Using commit_transaction; If commit_transaction.SQLCode <> 0 Then arg_msg = '查询指令单退料数量失败,'+commit_transaction.SQLErrText rslt = 0 Goto ext End If Select IsNull(sum(uv_outware_scll_backbu.qty),0) Into :ld_backbuqty From uv_outware_scll_backbu Inner JOIN u_mtrldef On uv_outware_scll_backbu.mtrlid = u_mtrldef.mtrlid Where (u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 3) And (uv_outware_scll_backbu.qty <> 0) And (uv_outware_scll_backbu.relid = :ll_relid) And (uv_outware_scll_backbu.scid = :arg_scid) Using commit_transaction; If commit_transaction.SQLCode <> 0 Then arg_msg = '查询指令单补料数量失败,'+commit_transaction.SQLErrText rslt = 0 Goto ext End If //yyx2013-3-18 If ld_scllplanqty > 0 And ld_minrate <> 1 Then ld_minrate = Round((ld_scllplanqty + ld_backqty + ld_backbuqty)/ld_truerqqty,10) End If // If ld_acmpqty + ld_qty > Ceiling(ld_orderqty * ld_minrate) Then If ld_truerqqty - ld_dstrqty > 0 And ld_truerqqty > ld_scllplanqty Then ls_msg = ',有材料未开完发料通知单' li_ck_result = 0 ElseIf ld_truerqqty - ld_dstrqty > 0 And ld_truerqqty = ld_scllplanqty Then If Abs(ld_backqty) > ld_backbuqty Then ls_msg = ',有材料未补完料' li_ck_result = 0 End If ElseIf ld_truerqqty - ld_dstrqty > 0 And ld_dstrqty < ld_scllplanqty Then If ld_backqty = 0 Then ls_msg = ',有材料有发料单未审核' Else ls_msg = ',有材料有补料单未审核' End If li_ck_result = 1 End If If arg_ck_if_save_audit = 0 Then If li_ck_result = 0 Then rslt = 0 arg_msg = '相关指令单最大领料配套数量为:'+String(Ceiling(ld_orderqty * ld_minrate),'#,##0.##########')+',已进仓数:'+String(ld_acmpqty,'#,##0.##########')+',不能保存进仓:'+String(ld_qty,'#,##0.##########') + ',原因:'+ls_msg Goto ext End If Else rslt = 0 arg_msg = '相关指令单最大领料配套数量为:'+String(Ceiling(ld_orderqty * ld_minrate),'#,##0.##########')+',已进仓数:'+String(ld_acmpqty,'#,##0.##########')+',不能审核进仓:'+String(ld_qty,'#,##0.##########') + ',原因:'+ls_msg Goto ext End If End If ElseIf uo_option_ifovertask_cp = 3 Then Select uprate , upqty Into :ld_uprate,:ld_upqty From u_mtrldef Where mtrlid = :ll_mtrlid; If sqlca.SQLCode <> 0 Then arg_msg = '查询物料超收货比例失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If ld_acmpqty + ld_qty > Ceiling(ld_orderqty * ld_minrate) * (1 + ld_uprate) + ld_upqty Then rslt = 0 arg_msg = '相关指令单最大领料配套数量为:'+String(Ceiling(ld_orderqty * ld_minrate),'#,##0.##########')+',允许超收上限:'+String(Ceiling(ld_orderqty * ld_minrate) * (1 + ld_uprate) + ld_upqty,'#,##0.##########')+',已进仓数:'+String(ld_acmpqty,'#,##0.##########')+',不能进仓:'+String(ld_qty,'#,##0.##########') Goto ext End If End If End If ext: Return rslt end function public function integer uof_p_barcode (integer arg_audittype, ref string arg_msg, s_inwaremx_barcode_fp arg_mxbarcode_fp);Int rslt = 1 Int li_storagetype_storage Long i,j,ll_find Long ll_scid,ll_mtrlwareid String ls_location_top1 String ls_relbillcode Long ll_relbillid,ll_relprintid,ll_Porderid Int li_ordertype_order Decimal ld_qty uo_getbar uo_gb uo_gb = Create uo_getbar IF billtype <> 1 And billtype <> 3 And billtype <> 8 And billtype <> 9 And billtype <> 12 THEN rslt = 1 GOTO ext END IF IF billtype = 8 And (sptname = '更新成本价(正单)' Or sptname = '调整成本价(负单)') THEN rslt = 1 GOTO ext END IF IF it_mxbt_barcode = 0 THEN arg_msg = '没有条码明细,请检查' rslt = 0 GOTO ext END IF IF f_rst_storage_storagetype(storageid,li_storagetype_storage) = 0 THEN arg_msg = '查询仓库库存策略失败,请检查' rslt = 0 GOTO ext END IF FOR i = 1 To it_mxbt_barcode IF thflag = 0 THEN IF arg_audittype = 1 THEN IF uo_option_barcodelocation_use_inwaremx_location = 0 THEN ls_location_top1 = '' ELSE SELECT top 1 u_inwaremx.location INTO :ls_location_top1 FROM u_inwaremx WHERE u_inwaremx.scid = :scid AND u_inwaremx.inwareid = :inwareid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询进仓单明细仓位信息失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF SELECT u_mtrlware.scid,u_mtrlware.mtrlwareid INTO :ll_scid,:ll_mtrlwareid FROM u_mtrlware,u_mtrlware_mx,u_mtrldef WHERE u_mtrlware.storageid = :storageid AND u_mtrlware_mx.barcode = :s_mx_barcode[i].barcode AND u_mtrlware.mtrlid = u_mtrlware_mx.mtrlid AND u_mtrlware.mtrlid = u_mtrldef.mtrlid AND ( u_mtrlware.sptid = u_mtrlware_mx.sptid AND :li_storagetype_storage = 0 OR u_mtrlware.sptid = 0 AND :li_storagetype_storage = 1 ) AND u_mtrlware.status = u_mtrlware_mx.status AND u_mtrlware.woodcode = u_mtrlware_mx.woodcode AND u_mtrlware.pcode = u_mtrlware_mx.pcode AND u_mtrlware.plancode = u_mtrlware_mx.plancode AND ( u_mtrlware.mtrlcuscode = u_mtrlware_mx.mtrlcuscode AND :li_storagetype_storage = 0 OR :li_storagetype_storage = 1 AND u_mtrlware.mtrlcuscode = u_mtrlware_mx.mtrlcuscode AND (u_mtrldef.ifpackpro = 4 OR u_mtrldef.ifpack = 2) OR :li_storagetype_storage = 1 AND u_mtrlware.mtrlcuscode = '' AND u_mtrldef.ifpackpro <> 4 AND u_mtrldef.ifpack <> 2 ) AND (u_mtrlware.Location = u_mtrlware_mx.Location AND :uo_option_barcodelocation_use_inwaremx_location = 0 OR u_mtrlware.Location = :ls_location_top1 And :uo_option_barcodelocation_use_inwaremx_location = 1 ) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '条码:'+s_mx_barcode[i].barcode+',查询库存资料失败,请检查对应条码单与库存资料,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF s_mx_barcode[i].u_mtrldef_ifbarcodefp = 0 THEN ls_relbillcode = '' ll_relbillid = 0 ll_relprintid = 0 ELSE IF billtype = 3 THEN IF s_mx_barcode[i].ifrel <> 1 THEN ls_relbillcode = '' ll_relbillid = 0 ll_relprintid = 0 ELSE SELECT u_order_ml.ordertype, u_order_ml.porderid, u_order_ml.saletaskcode, u_order_ml.taskid, u_order_ml.taskmxid INTO :li_ordertype_order, :ll_porderid, :ls_relbillcode, :ll_relbillid, :ll_relprintid FROM u_order_ml WHERE u_order_ml.scid = :s_mx_barcode[i].scid AND u_order_ml.orderid = :s_mx_barcode[i].orderid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '条码:'+s_mx_barcode[i].barcode+',查询对应车间指令单信息失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF li_ordertype_order = 4 THEN SELECT u_order_ml.saletaskcode, u_order_ml.taskid, u_order_ml.taskmxid INTO :ls_relbillcode, :ll_relbillid, :ll_relprintid FROM u_order_ml WHERE u_order_ml.scid = :s_mx_barcode[i].scid AND u_order_ml.orderid = :ll_porderid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '条码:'+s_mx_barcode[i].barcode+',查询对应车间指令单相关主生产计划信息失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF //yyx2013-5-24 ld_qty = s_mx_barcode[i].packqty * s_mx_barcode[i].qty IF ll_relbillid > 0 THEN ll_find = 0 FOR j = 1 To UpperBound(arg_mxbarcode_fp.mtrlwareid) IF arg_mxbarcode_fp.mtrlwareid[j] = ll_mtrlwareid And & arg_mxbarcode_fp.relbillid[j] = ll_relbillid And & arg_mxbarcode_fp.relprintid[j] = ll_relprintid THEN ll_find = j EXIT END IF NEXT IF ll_find = 0 THEN ls_relbillcode = '' ll_relbillid = 0 ll_relprintid = 0 ELSE IF arg_mxbarcode_fp.assignqty[ll_find] <= arg_mxbarcode_fp.fpqty[ll_find] THEN ls_relbillcode = '' ll_relbillid = 0 ll_relprintid = 0 ELSE arg_mxbarcode_fp.fpqty[ll_find] += ld_qty END IF END IF END IF //yyx2013-5-24_end END IF ELSE ls_relbillcode = '' ll_relbillid = 0 ll_relprintid = 0 END IF END IF ELSE ll_scid = 0 ll_mtrlwareid = 0 ls_relbillcode = '' ll_relbillid = 0 ll_relprintid = 0 END IF ELSE ll_scid = 0 ll_mtrlwareid = 0 END IF IF uo_gb.uof_barcode_in(s_mx_barcode[i].barcode,& ll_scid,ll_mtrlwareid,ls_relbillcode,ll_relbillid,ll_relprintid,& arg_audittype,thflag,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; END IF Destroy uo_getbar RETURN rslt end function public function integer p_update_mtrlware (long arg_mtrlid, string arg_mtrlcode, long arg_storageid, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_uqty, decimal arg_price, decimal arg_planprice, long arg_sptid, integer arg_dxflag, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, string arg_location, string arg_dscrp, integer arg_ifvqty, ref string arg_msg);Int rslt = 1 Long ls_newid String or_err_part Decimal ld_cost Int li_storMtrlprp,li_ifcost Int if_recmp_balc Decimal ld_noallocqty,ld_allocqty Decimal ld_wareamt_check,ld_noallocqty_check If sys_if_recmp_balc < 0 Then Select if_recmp_balc Into :if_recmp_balc From sys_msg Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then arg_msg = '查询是否执行结存表重算失败,'+commit_transaction.SQLErrText rslt = 0 Goto ext End If If if_recmp_balc = 0 Then rslt = 0 arg_msg = '由于系统升级,结存表结构与原来不同,请先通知管理员执行危险功能中的[按新结构重算现结存表]功能,才能审核和撤审进出仓单据' Goto ext End If Else If sys_if_recmp_balc = 0 Then rslt = 0 arg_msg = '由于系统升级,结存表结构与原来不同,请先通知管理员执行危险功能中的[按新结构重算现结存表]功能,才能审核和撤审进出仓单据' Goto ext End If End If If uo_option_change_status = '-1000' Then rslt = 0 arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_change_woodcode = '-1000' Then rslt = 0 arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_change_pcode = '-1000' Then rslt = 0 arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_cost_dec = -1000 Then rslt = 0 arg_msg = '选项:[022]库存成本价转换小数点,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_mtrlware_autocmp = -1000 Then rslt = 0 arg_msg = '选项:[158]自动计算库存包件可装数,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_djqty_check = -1000 Then rslt = 0 arg_msg = '选项:[378]进出仓检查冻结数不能大于库存数,读取初始默认值失败,操作取消!' Goto ext End If uo_cmpl_packpro uo_cmpl_p uo_cmpl_p = Create uo_cmpl_packpro uo_cmpl_p.commit_transaction = commit_transaction Decimal ld_pypkqty,ld_pypkamt Decimal ld_buyinqty,ld_buyinamt Decimal ld_buyinqty_pack,ld_buyinamt_pack Decimal ld_saleinqty_packpro,ld_saleinamt_packpro Decimal ld_cpinqty,ld_cpinamt Decimal ld_jginqty,ld_jginamt Decimal ld_diinqty,ld_diinamt Decimal ld_mvinqty,ld_mvinamt Decimal ld_otinqty,ld_otinamt Decimal ld_pyinqty,ld_pyinamt Int li_ifunit,li_ifpack,li_ifpackpro String ls_str Int li_statusflag Decimal ld_capacity,ld_capacity_zj s_mtrlcfg_expr s_pz[] String ls_status_zj Long ll_i Long ll_mtrlwareid,ll_mtrlwareid_find Int li_incheck,li_storagetype,li_ifmrp String ls_storagename Decimal i_auditingqty Select Mtrlprp,ifcost,incheck,storagetype,storagename,ifmrp Into :li_storMtrlprp,:li_ifcost,:li_incheck,:li_storagetype,:ls_storagename,:li_ifmrp From u_storage Where storageid = :arg_storageid Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then arg_msg = '查询仓库类型失败' rslt = 0 Goto ext End If Select ifunit,ifpack,capacity,statusflag,ifpackpro Into :li_ifunit,:li_ifpack,:ld_capacity,:li_statusflag,:li_ifpackpro From u_mtrldef Where mtrlid = :arg_mtrlid Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then arg_msg = '查询物料信息失败' rslt = 0 Goto ext End If If li_statusflag = 2 Then ld_capacity = 0 f_checkpz(arg_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 = :arg_mtrlid And Name = :ls_status_zj; If commit_transaction.SQLCode <> 0 Then ld_capacity_zj = 0 End If ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_i].qty) Next End If Int li_ifupdate_date If billtype = 1 And thflag = 0 Or & billtype = 2 Or & billtype = 3 Or & billtype = 4 And thflag = 0 Or & billtype = 5 Or & billtype = 6 Or & billtype = 12 Or & billtype = 8 And sptname <> '调整成本价(负单)' And sptname <> '更新成本价(正单)' Or & billtype = 25 Or & billtype = 26 Or & billtype = 28 Then li_ifupdate_date = 1 Else li_ifupdate_date = 0 End If If li_ifunit = 0 Then arg_uqty = 0 //检查库存 If (li_storagetype = 1 Or arg_qty < 0 And li_incheck = 1) And Not (billtype = 8 And Pos(sptname,'调整成本价') > 0 ) Then Select noallocqty - noauditingqty,noallocqty,allocqty Into :i_auditingqty,:ld_noallocqty,:ld_allocqty From u_mtrlware Where ( mtrlid = :arg_mtrlid ) And ( plancode = :arg_plancode ) And ( storageid = :arg_storageid ) And ( scid = :scid ) And ( status = :arg_status ) And ( sptid = :arg_sptid) And ( dxflag = :arg_dxflag) And ( woodcode = :arg_woodcode) And ( pcode = :arg_pcode) And ( mtrlcuscode = :arg_mtrlcuscode) And ( Location = :arg_location) 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 If li_storagetype = 1 And billtype <> 23 Then If ld_noallocqty + arg_qty < ld_allocqty Then arg_msg = '仓库:'+ls_storagename+",物料["+arg_mtrlcode+']库存数小于已分配数,请检查库存' rslt = 0 Goto ext End If End If End If //-------------------------------------------更新库存 If li_ifcost = 1 Then //核算金额 Select Case noallocqty + :arg_qty when 0 Then 0 Else wareamt + Round(:arg_qty * :arg_price,2) End, noallocqty + :arg_qty Into :ld_wareamt_check, :ld_noallocqty_check From u_mtrlware Where ( mtrlid = :arg_mtrlid ) And ( plancode = :arg_plancode ) And ( storageid = :arg_storageid ) And ( scid = :scid ) And ( status = :arg_status ) And ( sptid = :arg_sptid) And ( dxflag = :arg_dxflag) And ( woodcode = :arg_woodcode) And ( pcode = :arg_pcode) And ( mtrlcuscode = :arg_mtrlcuscode) And ( Location = :arg_location) Using commit_transaction ; If commit_transaction.SQLCode = -1 Then rslt = 0 arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]库存信息(检查数量金额合理性)操作失败"+"~n"+commit_transaction.SQLErrText Goto ext ElseIf commit_transaction.SQLCode = 0 Then If ld_wareamt_check <> 0 And ld_noallocqty_check = 0 Then rslt = 0 arg_msg = '仓库:'+ls_storagename+",物料["+arg_mtrlcode+"]库存数量为0但金额不为0,操作取消" Goto ext End If End If Update u_mtrlware Set noallocqty = noallocqty + :arg_qty , unoallocqty = unoallocqty + :arg_uqty, wareamt = case noallocqty + :arg_qty when 0 then 0 else wareamt + round(:arg_qty * :arg_price,2) End, waredate = case :li_ifupdate_date when 1 then getdate() else waredate End, newprice = :arg_price, dscrp = :arg_dscrp, capacity = capacity + :ld_capacity * :arg_qty , cost = case noallocqty + :arg_qty when 0 then cost else round((wareamt + round(:arg_qty * :arg_price, 2)) / ( noallocqty + :arg_qty ),:uo_option_cost_dec) End Where ( mtrlid = :arg_mtrlid ) And ( plancode = :arg_plancode ) And ( storageid = :arg_storageid ) And ( scid = :scid ) And ( status = :arg_status ) And ( sptid = :arg_sptid) And ( dxflag = :arg_dxflag) And ( woodcode = :arg_woodcode) And ( pcode = :arg_pcode) And ( mtrlcuscode = :arg_mtrlcuscode) And ( Location = :arg_location) Using commit_transaction ; If commit_transaction.SQLCode = 0 Then If commit_transaction.SQLNRows = 0 Then ///////////////////////// // ls_newid = f_sys_scidentity(scid,"u_mtrlware","mtrlwareid",arg_msg,True,id_sqlca) If ls_newid <= 0 Then rslt = 0 Goto ext End If ///////////////////////// // ld_cost = Round(arg_price,uo_option_cost_dec) Insert Into u_mtrlware ( scid, mtrlwareid, mtrlid, storageid, plancode, status, noallocqty, unoallocqty, allocqty, wareamt, planprice, sptid, dxflag, woodcode, pcode, cost, storMtrlprp, dscrp, mtrlcuscode, location, capacity) Values ( :scid, :ls_newid, :arg_mtrlid, :arg_storageid, :arg_plancode, :arg_status, :arg_qty, :arg_uqty, 0, round(:arg_price * :arg_qty,2), :arg_planprice, :arg_sptid, :arg_dxflag, :arg_woodcode, :arg_pcode, :ld_cost, :li_storMtrlprp, :arg_dscrp, :arg_mtrlcuscode, :arg_location, :ld_capacity * :arg_qty) Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]库存建立操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If End If Else rslt = 0 If arg_status <> '' Then ls_str = ' '+uo_option_change_status+':'+arg_status End If If arg_pcode <> '' Then ls_str = ls_str + ' '+uo_option_change_pcode+':'+arg_pcode End If If arg_woodcode <> '' Then ls_str = ls_str + ' '+uo_option_change_woodcode+':'+arg_woodcode End If or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement' If commit_transaction.SQLCode = 513 Or Pos(Lower(commit_transaction.SQLErrText),or_err_part) > 0 Then arg_msg = '仓库:'+ls_storagename+",物料["+arg_mtrlcode+"]同仓库内同批号没有足够的库存支持冲减" ElseIf Pos(commit_transaction.SQLErrText,'CK_u_mtrlware') > 0 Then arg_msg = '仓库:'+ls_storagename+",物料:"+arg_mtrlcode+ls_str+" 同仓库内同批号没有足够的库存支持冲减" ElseIf Pos(commit_transaction.SQLErrText,'CREATE RULE') > 0 And Pos(commit_transaction.SQLErrText,'cost') > 0 Then arg_msg = '仓库:'+ls_storagename+",物料:"+arg_mtrlcode+ls_str+" 同仓库内同批号的库存金额不够冲减" Else arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]库存更新操作失败"+"~n"+commit_transaction.SQLErrText End If Goto ext End If //-----------------------------------更新结存 Select mtrlwareid Into :ll_mtrlwareid From u_mtrlware Where ( mtrlid = :arg_mtrlid ) And ( plancode = :arg_plancode ) And ( storageid = :arg_storageid ) And ( scid = :scid ) And ( status = :arg_status ) And ( sptid = :arg_sptid) And ( dxflag = :arg_dxflag) And ( woodcode = :arg_woodcode) And ( pcode = :arg_pcode) And ( mtrlcuscode = :arg_mtrlcuscode) And ( Location = :arg_location) Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]查询库存操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If Choose Case billtype Case 1,2,5,26 ld_buyinqty = arg_qty ld_buyinamt = Round(arg_qty * arg_price,2) Case 3 ld_cpinqty = arg_qty ld_cpinamt = Round(arg_qty * arg_price,2) Case 4 ld_jginqty = arg_qty ld_jginamt = Round(arg_qty * arg_price,2) Case 8 ld_otinqty = arg_qty ld_otinamt = Round(arg_qty * arg_price,2) Case 9 ld_pyinqty = arg_qty ld_pyinamt = Round(arg_qty * arg_price,2) ld_pypkqty = arg_qty ld_pypkamt = Round(arg_qty * arg_price,2) Case 12 ld_mvinqty = arg_qty ld_mvinamt = Round(arg_qty * arg_price,2) Case 15 ld_diinqty = arg_qty ld_diinamt = Round(arg_qty * arg_price,2) Case 23 ld_saleinqty_packpro = arg_qty ld_saleinamt_packpro = Round(arg_qty * arg_price,2) Case 25 ld_buyinqty_pack = arg_qty ld_buyinamt_pack = Round(arg_qty * arg_price,2) Case Else ld_otinqty = arg_qty ld_otinamt = Round(arg_qty * arg_price,2) End Choose Update u_warebalc Set incqty = incqty + :arg_qty , incamt = incamt + round(:arg_qty * :arg_price,2), vincqty = case :arg_ifvqty when 0 then vincqty else vincqty + :arg_qty End, vincamt = case :arg_ifvqty when 0 then vincamt else vincamt + round(:arg_qty * :arg_price,2) End, uvincqty = case :arg_ifvqty when 0 then uvincqty else uvincqty + :arg_uqty End , balcqty = balcqty + :arg_qty, balcamt = case balcqty + :arg_qty when 0 then 0 else balcamt + round(:arg_qty * :arg_price,2) End, pypk = pypk + :ld_pypkqty, pypkamt = pypkamt + :ld_pypkamt, uincqty = uincqty + :arg_uqty, ubalcqty = ubalcqty + :arg_uqty, buyinqty = buyinqty + :ld_buyinqty, buyinamt = buyinamt + :ld_buyinamt, buyinqty_pack = buyinqty_pack + :ld_buyinqty_pack, buyinamt_pack = buyinamt_pack + :ld_buyinamt_pack, saleinqty_packpro = saleinqty_packpro + :ld_saleinqty_packpro, saleinamt_packpro = saleinamt_packpro + :ld_saleinamt_packpro, cpinqty = cpinqty + :ld_cpinqty, cpinamt = cpinamt + :ld_cpinamt, jginqty = jginqty + :ld_jginqty, jginamt = jginamt + :ld_jginamt, otinqty = otinqty + :ld_otinqty, otinamt = otinamt + :ld_otinamt, mvinqty = mvinqty + :ld_mvinqty, mvinamt = mvinamt + :ld_mvinamt, diinqty = diinqty + :ld_diinqty, diinamt = diinamt + :ld_diinamt, pyinqty = pyinqty + :ld_pyinqty, pyinamt = pyinamt + :ld_pyinamt Where ( balcdateint = 0) And ( scid = :scid) And ( mtrlwareid = :ll_mtrlwareid) Using commit_transaction ; If commit_transaction.SQLCode = 0 Then If commit_transaction.SQLNRows = 0 Then Insert Into u_warebalc ( balcdateint, mtrlid, storageid, bgqty, bgamt, incqty, incamt, desqty, desamt, balcqty, balcamt, pypk, pypkamt, status, scid, buyinqty, buyinamt, buyinqty_pack, buyinamt_pack, saleinqty_packpro, saleinamt_packpro, cpinqty, cpinamt, jginqty, jginamt, diinqty, diinamt, mvinqty, mvinamt, otinqty, otinamt, pyinqty, pyinamt, woodcode, pcode, ubgqty, uincqty, udesqty, ubalcqty, plancode, sptid, dxflag, mtrlcuscode, location, mtrlwareid ) Values ( 0, :arg_mtrlid, :arg_storageid, 0, 0, :arg_qty, round(:arg_qty * :arg_price,2), 0, 0, :arg_qty, round(:arg_qty * :arg_price,2), :ld_pypkqty, :ld_pypkamt, :arg_status, :scid, :ld_buyinqty, :ld_buyinamt, :ld_buyinqty_pack, :ld_buyinamt_pack, :ld_saleinqty_packpro, :ld_saleinamt_packpro, :ld_cpinqty, :ld_cpinamt, :ld_jginqty, :ld_jginamt, :ld_diinqty, :ld_diinamt, :ld_mvinqty, :ld_mvinamt, :ld_otinqty, :ld_otinamt, :ld_pyinqty, :ld_pyinamt, :arg_woodcode, :arg_pcode, 0, :arg_uqty, 0, :arg_uqty, :arg_plancode, :arg_sptid, :arg_dxflag, :arg_mtrlcuscode, :arg_location, :ll_mtrlwareid ) Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]结存建立操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If End If Else rslt = 0 or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement' If commit_transaction.SQLCode = 513 Or Pos(Lower(commit_transaction.SQLErrText),or_err_part) > 0 Then arg_msg = '仓库:'+ls_storagename+",物料["+arg_mtrlcode+"]同仓库内同批号没有足够的结存支持冲减" Else arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]结存更新操作失败"+"~n"+commit_transaction.SQLErrText End If Goto ext End If Else // 不核算金额 Update u_mtrlware Set noallocqty = noallocqty + :arg_qty , unoallocqty = unoallocqty + :arg_uqty, wareamt = 0, waredate = case :li_ifupdate_date when 1 then getdate() else waredate End, newprice = 0, dscrp = :arg_dscrp, cost = 0, capacity = capacity + :ld_capacity * :arg_qty Where ( mtrlid = :arg_mtrlid ) And ( plancode = :arg_plancode ) And ( storageid = :arg_storageid ) And ( scid = :scid ) And ( status = :arg_status ) And ( sptid = :arg_sptid) And ( dxflag = :arg_dxflag) And ( woodcode = :arg_woodcode) And ( pcode = :arg_pcode) And ( mtrlcuscode = :arg_mtrlcuscode) And ( Location = :arg_location) Using commit_transaction ; If commit_transaction.SQLCode = 0 Then If commit_transaction.SQLNRows = 0 Then ///////////////////////// // ls_newid = f_sys_scidentity(scid,"u_mtrlware","mtrlwareid",arg_msg,True,id_sqlca) If ls_newid <= 0 Then rslt = 0 Goto ext End If ///////////////////////// // Insert Into u_mtrlware ( scid, mtrlwareid, mtrlid, storageid, plancode, status, noallocqty, unoallocqty, allocqty, wareamt, planprice, sptid, dxflag, woodcode, pcode, cost, storMtrlprp, dscrp, mtrlcuscode, location, capacity) Values ( :scid, :ls_newid, :arg_mtrlid, :arg_storageid, :arg_plancode, :arg_status, :arg_qty, :arg_uqty, 0, 0, 0, :arg_sptid, :arg_dxflag, :arg_woodcode, :arg_pcode, 0, :li_storMtrlprp, :arg_dscrp, :arg_mtrlcuscode, :arg_location, :ld_capacity * :arg_qty) Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then rslt = 0 If Pos(commit_transaction.SQLErrText,'CK_u_mtrlware') > 0 Then If arg_status <> '' Then ls_str = ' '+uo_option_change_status+':'+arg_status End If If arg_pcode <> '' Then ls_str = ls_str + ' '+uo_option_change_pcode+':'+arg_pcode End If If arg_woodcode <> '' Then ls_str = ls_str + ' '+uo_option_change_woodcode+':'+arg_woodcode End If arg_msg = '仓库:'+ls_storagename+",物料:"+arg_mtrlcode+ls_str+" 同仓库内同批号没有足够的库存支持冲减" Else arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]库存建立操作失败"+"~n"+commit_transaction.SQLErrText End If Goto ext End If End If Else rslt = 0 or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement' If commit_transaction.SQLCode = 513 Or Pos(Lower(commit_transaction.SQLErrText),or_err_part) > 0 Then arg_msg = '仓库:'+ls_storagename+",物料["+arg_mtrlcode+"]同仓库内同批号没有足够的库存支持冲减" ElseIf Pos(commit_transaction.SQLErrText,'CK_u_mtrlware') > 0 Then If arg_status <> '' Then ls_str = ' '+uo_option_change_status+':'+arg_status End If If arg_pcode <> '' Then ls_str = ls_str + ' '+uo_option_change_pcode+':'+arg_pcode End If If arg_woodcode <> '' Then ls_str = ls_str + ' '+uo_option_change_woodcode+':'+arg_woodcode End If arg_msg = '仓库:'+ls_storagename+",物料:"+arg_mtrlcode+ls_str+" 同仓库内同批号没有足够的库存支持冲减" Else arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]库存更新操作失败"+"~n"+commit_transaction.SQLErrText End If Goto ext End If //-----------------------------------更新结存 Select mtrlwareid Into :ll_mtrlwareid From u_mtrlware Where ( mtrlid = :arg_mtrlid ) And ( plancode = :arg_plancode ) And ( storageid = :arg_storageid ) And ( scid = :scid ) And ( status = :arg_status ) And ( sptid = :arg_sptid) And ( dxflag = :arg_dxflag) And ( woodcode = :arg_woodcode) And ( pcode = :arg_pcode) And ( mtrlcuscode = :arg_mtrlcuscode) And ( Location = :arg_location) Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]查询库存操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If Choose Case billtype Case 1,2 ld_buyinqty = arg_qty Case 3 ld_cpinqty = arg_qty Case 4 ld_jginqty = arg_qty Case 8 ld_otinqty = arg_qty Case 9 ld_pyinqty = arg_qty ld_pypkqty = arg_qty Case 12 ld_mvinqty = arg_qty Case 15 ld_diinqty = arg_qty Case 23 ld_saleinqty_packpro = arg_qty Case 25 ld_buyinqty_pack = arg_qty Case Else ld_otinqty = arg_qty End Choose Update u_warebalc Set incqty = incqty + :arg_qty , uincqty = uincqty + :arg_uqty, incamt = 0, balcqty = balcqty + :arg_qty, ubalcqty = ubalcqty + :arg_uqty, balcamt = 0, pypk = pypk + :ld_pypkqty, pypkamt = 0, buyinqty = buyinqty + :ld_buyinqty, buyinamt = 0, buyinqty_pack = buyinqty_pack + :ld_buyinqty_pack, buyinamt_pack = 0, saleinqty_packpro = saleinqty_packpro + :ld_saleinqty_packpro, saleinamt_packpro = 0, cpinqty = cpinqty + :ld_cpinqty, cpinamt = 0, jginqty = jginqty + :ld_jginqty, jginamt = 0, otinqty = otinqty + :ld_otinqty, otinamt = 0, mvinqty = mvinqty + :ld_mvinqty, mvinamt = 0, diinqty = diinqty + :ld_diinqty, diinamt = 0, pyinqty = pyinqty + :ld_pyinqty, pyinamt = 0 Where ( balcdateint = 0) And ( scid = :scid) And ( mtrlwareid = :ll_mtrlwareid) Using commit_transaction ; If commit_transaction.SQLCode = 0 Then If commit_transaction.SQLNRows = 0 Then Insert Into u_warebalc ( balcdateint, mtrlid, storageid, bgqty, bgamt, incqty, incamt, desqty, desamt, balcqty, balcamt, pypk, pypkamt, status, scid, buyinqty, buyinamt, buyinqty_pack, buyinamt_pack, saleinqty_packpro, saleinamt_packpro, cpinqty, cpinamt, jginqty, jginamt, diinqty, diinamt, mvinqty, mvinamt, otinqty, otinamt, pyinqty, pyinamt, woodcode, pcode, ubgqty, uincqty, udesqty, ubalcqty, plancode, sptid, dxflag, mtrlcuscode, location, mtrlwareid) Values ( 0, :arg_mtrlid, :arg_storageid, 0, 0, :arg_qty, 0, 0, 0, :arg_qty, 0, :ld_pypkqty, 0, :arg_status, :scid, :ld_buyinqty, 0, :ld_buyinqty_pack, 0, :ld_saleinqty_packpro, 0, :ld_cpinqty, 0, :ld_jginqty, 0, :ld_diinqty, 0, :ld_mvinqty, 0, :ld_otinqty, 0, :ld_pyinqty, 0, :arg_woodcode, :arg_pcode, 0, :arg_uqty, 0, :arg_uqty, :arg_plancode, :arg_sptid, :arg_dxflag, :arg_mtrlcuscode, :arg_location, :ll_mtrlwareid) Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]结存建立操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If End If Else rslt = 0 or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement' If commit_transaction.SQLCode = 513 Or Pos(Lower(commit_transaction.SQLErrText),or_err_part) > 0 Then arg_msg = '仓库:'+ls_storagename+",物料["+arg_mtrlcode+"]同仓库内同批号没有足够的结存支持冲减" Else arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]结存更新操作失败"+"~n"+commit_transaction.SQLErrText End If Goto ext End If End If If arg_qty > 0 Then If li_ifpack = 2 Then Update u_mtrlware Set u_mtrlware.dscrp = :arg_location, u_mtrlware.waredate = case :li_ifupdate_date when 1 then getdate() else u_mtrlware.waredate End From u_mtrlware,u_mtrldef Where u_mtrlware.mtrlid = u_mtrldef.mtrlid And u_mtrldef.ifpackpro = 2 And u_mtrlware.mtrlcuscode = :arg_mtrlcuscode Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]更新个性包件产品库存摘要操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If ElseIf li_ifpackpro = 4 Then Update u_mtrlware Set u_mtrlware.dscrp = :arg_location, u_mtrlware.waredate = case :li_ifupdate_date when 1 then getdate() else u_mtrlware.waredate End From u_mtrlware,u_mtrldef Where u_mtrlware.mtrlid = u_mtrldef.mtrlid And u_mtrldef.ifpackpro = 4 And u_mtrlware.mtrlid = :arg_mtrlid And u_mtrlware.mtrlcuscode = :arg_mtrlcuscode And (PATINDEX('%+%',u_mtrlware.status) > 0 Or PATINDEX('%*%',u_mtrlware.status) > 0) Using commit_transaction ; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]更新组合配置包件产品库存摘要操作失败"+"~n"+commit_transaction.SQLErrText Goto ext End If End If End If //自动计算包件产品可装数yyx20100414 //yyx2012-9-28取消 //If ( li_ifpack = 1 Or li_ifpack = 2 Or li_ifpackpro = 3 Or li_ifpackpro = 4 ) And uo_option_mtrlware_autocmp = 1 THEN // IF uo_cmpl_p.uof_cmpl(arg_mtrlid,arg_plancode,arg_mtrlcuscode,arg_storageid,arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF //END IF If uo_option_djqty_check = 1 and li_ifmrp = 1 Then Decimal ld_djqty Select SUM(u_OrderRqMtrl_scll.wareqty - u_OrderRqMtrl_scll.DstrQty + isnull(uv_outware_scll_back.qty,0) ) Into :ld_djqty From u_OrderRqMtrl_scll Inner JOIN u_Order_ml ON u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID LEFT OUTER JOIN uv_outware_scll_back ON u_OrderRqMtrl_scll.scid = uv_outware_scll_back.scid AND u_OrderRqMtrl_scll.OrderID = uv_outware_scll_back.relid AND u_OrderRqMtrl_scll.MtrlID = uv_outware_scll_back.mtrlid AND u_OrderRqMtrl_scll.status = uv_outware_scll_back.status AND u_OrderRqMtrl_scll.woodcode = uv_outware_scll_back.woodcode AND u_OrderRqMtrl_scll.pcode = uv_outware_scll_back.pcode Where (u_OrderRqMtrl_scll.wareqty <> 0) And (u_Order_ml.Status Not In (3,5,6)) And u_OrderRqMtrl_scll.wareqty - u_OrderRqMtrl_scll.DstrQty + isnull(uv_outware_scll_back.qty,0)> 0 And u_OrderRqMtrl_scll.MtrlID = :arg_mtrlid And u_OrderRqMtrl_scll.scid = :scid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then ld_djqty = 0 End If If IsNull(ld_djqty) Then ld_djqty = 0 Select SUM(u_mtrlware.noallocqty) Into :ld_noallocqty From u_mtrlware Inner JOIN u_storage ON u_mtrlware.storageid = u_storage.storageid Where (u_storage.inuse = 1) And u_storage.ifmrp = 1 And u_mtrlware.mtrlid = :arg_mtrlid And u_mtrlware.scid = :scid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then ld_noallocqty = 0 End If If IsNull(ld_noallocqty) Then ld_noallocqty = 0 If ld_djqty > ld_noallocqty Then rslt = 0 arg_msg = '物料['+arg_mtrlcode+']冻结数不能大于库存数,冻结数:'+String(ld_djqty,'#,##0.##########')+',库存数:'+String(ld_noallocqty,'#,##0.##########') Goto ext End If End If ext: If rslt = 0 Then Rollback Using commit_transaction; End If Destroy uo_cmpl_p Return rslt end function public function integer mod_price (long arg_scid, long arg_inwareid, long arg_printid, decimal arg_enprice, decimal arg_jgprice, decimal arg_tax, decimal arg_rebate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_StoreBalcType Int li_storagetype Long ll_cnt Long ll_option_buy_sptprice_sec String ls_optionvalue String ls_unit Decimal ld_fprice_notax f_get_sys_option_value('168',ls_optionvalue,arg_msg) ll_option_buy_sptprice_sec = Long(ls_optionvalue) IF uo_option_unit_dec = -1000 THEN rslt = 0 arg_msg = '选项:[023]辅助单位转换库存单位小数位,读取初始默认值失败,操作取消!' GOTO ext END IF IF ll_option_buy_sptprice_sec = -1000 THEN rslt = 0 arg_msg = '选项:[168]采购收货单财审更新供应商最新价,读取初始默认值失败,操作取消!' GOTO ext END IF 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 SELECT storagetype, StoreBalcType INTO :li_storagetype, :li_StoreBalcType FROM u_storage Where storageid = :storageid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,仓库属性" GOTO ext END IF IF li_StoreBalcType = 0 THEN IF balcdateint > 0 THEN rslt = 0 arg_msg = "单据已结存,不能修改" GOTO ext END IF ELSE SELECT count(*) INTO :ll_cnt FROM u_warebalc WHERE storageid = :storageid AND balcdateint = :balcdateint AND AmtAuditFlag = 1 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,仓库属性" GOTO ext END IF IF ll_cnt > 0 THEN rslt = 0 arg_msg = "仓库已金额结存,不能修改" GOTO ext END IF END IF Decimal ld_enprice,ld_uprice,ld_uqty,ld_rate,ld_qty,ld_rebate,ld_cost,ld_deliqty,ld_tax, lde_cost Long ll_mtrlid, ll_mtrlwareid String ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,ls_location Long ll_sptid,ll_ifpack,ll_ifpackpro String ls_mxdscrp Long ll_sptid_m String ls_mtrlcuscode_m SELECT u_inwaremx.enprice, u_inwaremx.uprice, u_inwaremx.uqty, u_inwaremx.rate, u_inwaremx.qty, u_inwaremx.rebate, u_inwaremx.mtrlid, u_inwaremx.status, u_inwaremx.woodcode, u_inwaremx.pcode, u_inwaremx.cost, u_inwaremx.plancode, u_inwaremx.sptid_cusid, u_inwaremx.mtrlcuscode, u_inwaremx.location, u_mtrldef.ifpack, u_mtrldef.ifpackpro, u_inwaremx.deliqty, u_inwaremx.tax, u_inwaremx.mtrlwareid, u_inwaremx.cost, u_inwaremx.unit, u_inwaremx.mxdscrp INTO :ld_enprice, :ld_uprice, :ld_uqty, :ld_rate, :ld_qty, :ld_rebate, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ld_cost, :ls_plancode, :ll_sptid, :ls_mtrlcuscode, :ls_location, :ll_ifpack, :ll_ifpackpro, :ld_deliqty, :ld_tax, :ll_mtrlwareid, :lde_cost, :ls_unit, :ls_mxdscrp FROM u_inwaremx INNER JOIN u_mtrldef ON u_inwaremx.mtrlid = u_mtrldef.mtrlid WHERE u_inwaremx.scid = :arg_scid AND u_inwaremx.inwareid = :arg_inwareid AND u_inwaremx.printid = :arg_printid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询进仓单明细内容失败'+commit_transaction.SQLErrText GOTO ext END IF IF ll_mtrlwareid = 0 THEN //马上处理一次,如果不行,再报错误 IF li_storagetype = 1 And ll_ifpack <> 2 And ll_ifpackpro <> 2 And ll_ifpackpro <> 4 THEN IF billtype = 17 THEN //客户调货条码转换单 ll_sptid_m = ll_sptid ls_mtrlcuscode_m = ls_mtrlcuscode ELSE ll_sptid_m = 0 ls_mtrlcuscode_m = '' END IF ELSE IF billtype = 4 THEN ll_sptid_m = 0 ELSE ll_sptid_m = ll_sptid END IF ls_mtrlcuscode_m = ls_mtrlcuscode END IF //取库存信息yyx2012-09-25 Long ll_mtrlwareid_ref ll_mtrlwareid_ref = 0 IF uof_ref_mtrlwareid(scid,storageid,ll_mtrlid,& ls_status,ls_woodcode,ls_pcode,ls_plancode,& ls_location,ll_sptid_m,ls_mtrlcuscode_m,ll_mtrlwareid_ref,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF p_update_mtrlwareid_inwaremx(ll_mtrlwareid_ref,arg_inwareid,arg_printid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ll_mtrlwareid = ll_mtrlwareid_ref IF ll_mtrlwareid = 0 THEN rslt = 0 arg_msg = '明细库存ID为0,不能操作' GOTO ext END IF END IF IF arg_tax = -1 THEN arg_tax = ld_tax IF arg_rebate = -1 THEN arg_rebate = ld_rebate IF arg_enprice = ld_enprice And arg_tax = ld_tax And arg_rebate = ld_rebate THEN rslt = 1 // rslt = 0 // arg_msg = '单价、折扣、税率没有任何修改,不能保存' GOTO ext END IF Decimal ld_uprice_new,ld_fprice_new,ld_price_new,ld_cost_new Decimal ld_enprice_tax,ld_enprice_notax,ld_deliprice_notax ld_uprice_new = Round(arg_enprice * mrate,10) ld_fprice_new = Round((ld_uprice_new * ld_uqty)/(Round(ld_uqty * ld_rate,uo_option_unit_dec)),10) ld_price_new = ld_fprice_new * arg_rebate ld_deliprice_notax = arg_enprice / (1 + arg_tax) IF ld_uqty <> 0 THEN ld_enprice_tax = ld_deliqty * arg_enprice / ld_uqty ld_enprice_notax = (ld_deliqty * arg_enprice / ld_uqty) / (1 + arg_tax) ELSE ld_enprice_tax = arg_enprice ld_enprice_notax = arg_enprice / (1 + arg_tax) END IF ld_enprice_tax = Abs(ld_enprice_tax) ld_enprice_notax = Abs(ld_enprice_notax) IF billtype = 1 THEN //采购 IF thflag = 0 THEN ld_cost_new = ld_fprice_new * arg_rebate ELSE //采购退货单 ld_cost_new = lde_cost END IF ELSEIF billtype = 4 THEN //外协 IF ld_qty > 0 THEN ld_cost_new = ld_fprice_new * arg_rebate ELSE ld_cost_new = lde_cost END IF ELSE ld_cost_new = ld_fprice_new * arg_rebate END IF UPDATE u_inwaremx SET enprice = :arg_enprice, uprice = :ld_uprice_new, fprice = :ld_fprice_new, price = :ld_price_new, cost = :ld_cost_new, jgprice = :arg_jgprice, deliprice_notax = :ld_deliprice_notax, enprice_tax = :ld_enprice_tax, enprice_notax = :ld_enprice_notax, tax = :arg_tax, rebate = :arg_rebate 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 = '更新单据明细失败'+commit_transaction.SQLErrText GOTO ext END IF //重算结存, IF f_warebalc_cmpl_one(storageid, balcdateint, ll_mtrlwareid, arg_msg, False, commit_transaction) = 0 THEN rslt = 0 GOTO ext END IF //如果是采购收货单/退货单, 更新供应商最新收货价 IF ll_option_buy_sptprice_sec = 0 And billtype = 1 THEN ld_fprice_notax = ld_fprice_new / ( 1 + arg_tax) IF uo_sptprice.uof_update_sptprice(thflag,sptid,ll_mtrlid,ls_unit,ls_status,ls_woodcode,ls_pcode,'',inwareid,arg_enprice,ld_rebate,ld_rate,ld_fprice_new,ld_fprice_notax,indate,inwarecode,0,ls_mxdscrp,arg_printid,0,moneyid,indate,DateTime(9999-01-01),False,arg_msg) = 0 THEN arg_msg = '更新最新收货价失败,'+arg_msg rslt = 0 GOTO ext END IF END IF // //更新结存,库存,出仓相应金额 //IF li_storagetype = 1 And ll_ifpack <> 2 And ll_ifpackpro <> 2 And ll_ifpackpro <> 4 THEN // IF billtype = 17 THEN //客户调货条码转换单 // ll_sptid_m = ll_sptid // ls_mtrlcuscode_m = ls_mtrlcuscode // ELSE // ll_sptid_m = 0 // ls_mtrlcuscode_m = '' // END IF //ELSE // IF billtype = 4 THEN // ll_sptid_m = 0 // ELSE // ll_sptid_m = ll_sptid // END IF // ls_mtrlcuscode_m = ls_mtrlcuscode //END IF // //Decimal ld_bgamt,ld_incamt,ld_bgqty,ld_incqty //Decimal ld_newcost // //IF thflag = 0 THEN // 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 plancode = :ls_plancode // AND mtrlcuscode = :ls_mtrlcuscode_m // AND sptid = :ll_sptid_m // AND location = :ls_location // Using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询相关结存信息失败'+commit_transaction.SQLErrText // 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 // AND plancode = :ls_plancode // AND mtrlcuscode = :ls_mtrlcuscode_m // AND sptid = :ll_sptid_m // AND location = :ls_location // Using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '更新结存表失败'+commit_transaction.SQLErrText // GOTO ext // END IF // // UPDATE u_mtrlware // SET cost = :ld_newcost, // wareamt = round(noallocqty * :ld_newcost,2) // WHERE mtrlid = :ll_mtrlid // AND Storageid = :storageid // AND status = :ls_status // AND woodcode = :ls_woodcode // AND pcode = :ls_pcode // AND plancode = :ls_plancode // AND mtrlcuscode = :ls_mtrlcuscode_m // AND sptid = :ll_sptid_m // AND location = :ls_location // Using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '更新库存表失败'+commit_transaction.SQLErrText // GOTO ext // END IF // // UPDATE u_outwaremx // SET u_outwaremx.costamt = round(u_outwaremx.qty * :ld_newcost,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_outwaremx.plancode = :ls_plancode // AND u_outwaremx.mtrlcuscode = :ls_mtrlcuscode_m // AND u_outwaremx.sptid = :ll_sptid_m // AND u_outwaremx.location = :ls_location // AND u_outware.balcflag = 0 // Using commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '更新未结存的出仓单金额失败'+commit_transaction.SQLErrText // GOTO ext // END IF // //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_mx (long arg_printid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_fprice, decimal arg_rebate, string arg_mxdscrp, ref string arg_msg, string arg_woodcode, string arg_pcode, long arg_cusid_sptid, long arg_mxprintid, string arg_waredscrp, string arg_mtrlcuscode, string arg_location, long arg_ptinwareid, long arg_ptprintid, integer arg_ifnotinout);Int rslt = 1 Long cnt = 0,ls_i Decimal ld_cost String ls_ptinwarecode IF uo_option_change_status = '-1000' THEN rslt = 0 arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_change_woodcode = '-1000' THEN rslt = 0 arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_change_pcode = '-1000' THEN rslt = 0 arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!' GOTO ext END IF 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_qty) THEN arg_qty = 0 IF IsNull(arg_fprice) THEN arg_fprice = 0 IF IsNull(arg_rebate) THEN arg_rebate = 1 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' 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_mxprintid) THEN arg_mxprintid = 0 IF IsNull(arg_waredscrp) THEN arg_waredscrp = '' IF IsNull(arg_mtrlcuscode) THEN arg_mtrlcuscode = '' IF IsNull(arg_location) THEN arg_location = '' IF IsNull(arg_ptinwareid) THEN arg_ptinwareid = 0 IF IsNull(arg_ptprintid) THEN arg_ptprintid = 0 IF arg_rebate = 0 THEN arg_rebate = 1 IF arg_mtrlid = 0 OR arg_qty = 0 THEN rslt = 1 GOTO ext END IF IF f_check_status(1,arg_status) = 0 THEN rslt = 0 arg_msg = "包件明细行:"+String(arg_mxprintid)+",查询操作失败,可能"+uo_option_change_status+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_status GOTO ext END IF IF f_check_status(2,arg_woodcode) = 0 THEN rslt = 0 arg_msg = "包件明细行:"+String(arg_mxprintid)+",查询操作失败,可能"+uo_option_change_woodcode+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_woodcode GOTO ext END IF IF f_check_status(3,arg_pcode) = 0 THEN rslt = 0 arg_msg = "包件明细行:"+String(arg_mxprintid)+",查询操作失败,可能"+uo_option_change_pcode+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_pcode GOTO ext END IF IF arg_rebate <= 0 THEN arg_msg = '折扣错误,请检查' rslt = 0 GOTO ext END IF //检查物料id Int li_statusflag SELECT statusflag INTO :li_statusflag FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_mtrlid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,物料或产品编号:"+arg_mtrlcode GOTO ext END IF IF li_statusflag = 2 AND Trim(arg_status) = '' THEN rslt = 0 arg_msg = '第'+String(arg_printid)+'行,产品:'+arg_mtrlcode+' 属于组合配置类型,但没有输入配置,请检查' GOTO ext END IF IF arg_fprice * arg_rebate < 0 THEN //检查进仓价 rslt = 0 arg_msg = "物料或产品:" + String(arg_mtrlcode)+" 单价错误" GOTO ext END IF IF billtype = 27 THEN SELECT inwarecode INTO :ls_ptinwarecode FROM u_inware WHERE scid = :scid AND inwareid = :arg_ptinwareid AND billtype = 26 AND flag = 1 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '配套明细行:'+String(arg_mxprintid)+',查询相关采购收货包件进仓单号失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF //写入内容 it_mxbt_mx++ inwaremx_mx[it_mxbt_mx].printid = arg_printid inwaremx_mx[it_mxbt_mx].mtrlid = arg_mtrlid inwaremx_mx[it_mxbt_mx].mtrlcode = arg_mtrlcode inwaremx_mx[it_mxbt_mx].plancode = arg_plancode inwaremx_mx[it_mxbt_mx].status = arg_status inwaremx_mx[it_mxbt_mx].fprice = arg_fprice inwaremx_mx[it_mxbt_mx].rebate = arg_rebate inwaremx_mx[it_mxbt_mx].qty = arg_qty inwaremx_mx[it_mxbt_mx].price = arg_fprice * arg_rebate inwaremx_mx[it_mxbt_mx].mxdscrp = arg_mxdscrp inwaremx_mx[it_mxbt_mx].mxprintid = arg_mxprintid inwaremx_mx[it_mxbt_mx].woodcode = arg_woodcode inwaremx_mx[it_mxbt_mx].pcode = arg_pcode inwaremx_mx[it_mxbt_mx].waredscrp = arg_waredscrp inwaremx_mx[it_mxbt_mx].mtrlcuscode = arg_mtrlcuscode inwaremx_mx[it_mxbt_mx].Location = arg_location inwaremx_mx[it_mxbt_mx].sptid = arg_cusid_sptid inwaremx_mx[it_mxbt_mx].ptinwareid = arg_ptinwareid inwaremx_mx[it_mxbt_mx].ptprintid = arg_ptprintid inwaremx_mx[it_mxbt_mx].ptinwarecode = ls_ptinwarecode inwaremx_mx[it_mxbt_mx].ifnotinout = arg_ifnotinout ext: IF rslt = 0 THEN p_clearmx() 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 event constructor;String str_optionvalue,arg_msg f_get_sys_option_value('142',str_optionvalue,arg_msg) uo_option_inout_type = Long(str_optionvalue) f_get_sys_option_value('206',str_optionvalue,arg_msg) uo_option_barcode_inwareother_paudit = Long(str_optionvalue) f_get_sys_option_value('208',str_optionvalue,arg_msg) uo_option_barcode_inwarebuy_paudit = Long(str_optionvalue) f_get_sys_option_value('207',str_optionvalue,arg_msg) uo_option_barcode_inwarecp_paudit = Long(str_optionvalue) f_get_sys_option_value('063',str_optionvalue,arg_msg) uo_option_mtrlware_dscrp = Long(str_optionvalue) f_get_sys_option_value('023',str_optionvalue,arg_msg) uo_option_unit_dec = Long(str_optionvalue) f_get_sys_option_value('183',str_optionvalue,arg_msg) uo_option_buy_zero = Long(str_optionvalue) f_get_sys_option_value('184',str_optionvalue,arg_msg) uo_option_wfjg_zero = Long(str_optionvalue) f_get_sys_option_value('029',str_optionvalue,arg_msg) uo_option_change_status = str_optionvalue f_get_sys_option_value('027',str_optionvalue,arg_msg) uo_option_change_woodcode = str_optionvalue f_get_sys_option_value('028',str_optionvalue,arg_msg) uo_option_change_pcode = str_optionvalue f_get_sys_option_value('010',str_optionvalue,arg_msg) uo_option_ifovertask = Long(str_optionvalue) f_get_sys_option_value('112',str_optionvalue,arg_msg) uo_option_ifovertask_cp = Long(str_optionvalue) f_get_sys_option_value('022',str_optionvalue,arg_msg) uo_option_cost_dec = Long(str_optionvalue) f_get_sys_option_value('158',str_optionvalue,arg_msg) uo_option_mtrlware_autocmp = Long(str_optionvalue) f_get_sys_option_value('285',str_optionvalue,arg_msg) uo_option_use_clfp = Long(str_optionvalue) f_get_sys_option_value('287',str_optionvalue,arg_msg) uo_option_barcodelocation_use_inwaremx_location = Long(str_optionvalue) f_get_sys_option_value('249',str_optionvalue,arg_msg) uo_option_cp_inware_scll_rate = long(str_optionvalue) f_get_sys_option_value('362',str_optionvalue,arg_msg) uo_option_cost_notax = long(str_optionvalue) f_get_sys_option_value('378',str_optionvalue,arg_msg) uo_option_djqty_check = long(str_optionvalue) f_get_sys_option_value('417',str_optionvalue,arg_msg) uo_option_canpack_ifzanyong = Long(str_optionvalue) end event