Index: ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryrecordView.js =================================================================== diff -u -r16972 -r17044 --- ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryrecordView.js (.../inventoryrecordView.js) (revision 16972) +++ ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryrecordView.js (.../inventoryrecordView.js) (revision 17044) @@ -34,30 +34,29 @@ }); } -var itemsStore = new Ext.data.Store({ - proxy : new Ext.data.HttpProxy({ - url : WWWROOT + '/disinfectSystem/inventoryRecordAction!loadInventoryRecordItems.do', - method : 'POST' - }), - reader : new Ext.data.JsonReader({ - root : 'data' - },[ - {name : 'id'}, - {name : 'disposableGoodsBatchId'}, - {name : 'name'}, - {name : 'amount'}, - {name : 'inventoryAmount'}, - {name : 'batchNumber'}, - {name : 'cost'}, - {name : 'specification'}, - {name : 'supplierName'}, - {name : 'externalCode'}, - {name : 'goodsType'}, - {name : 'expensiveGoodsInfo'} - ] - ) -}); +function isChange(v, p, record){ + var inventoryAmount = record.get("inventoryAmount"); + if(inventoryAmount != "" && inventoryAmount != v){ + return "

" + v + "

"; + }else{ + return v; + } +} +var inventoryRecordItem = Ext.data.Record.create([ + {name : 'id'}, + {name : 'disposableGoodsBatchId'}, + {name : 'name'}, + {name : 'amount'}, + {name : 'inventoryAmount'}, + {name : 'batchNumber'}, + {name : 'cost'}, + {name : 'specification'}, + {name : 'supplierName'}, + {name : 'externalCode'}, + {name : 'goodsType'} +]); + function showInventoryExpensiveGoods(inventoryItemId,storeRowIndex,isCanEdit,storageDifference){ var rd = new Ext.data.JsonReader({ root : 'data' @@ -189,13 +188,15 @@ var array = new Array(); var expensiveValidPass = true; var goodsName = ""; + var itemsStore = top.Ext.getCmp('inventoryRecordForm').getStore(); for ( var i = 0; i < itemsStore.getCount(); i++) { var record = itemsStore.getAt(i); var id = record.get("id"); var amount = record.get("inventoryAmount"); var name = record.get("name"); var specification = record.get("specification"); var batchNumber = record.get("batchNumber"); + var price = record.get("cost"); if(amount == "" || amount < 0){ continue; } @@ -224,6 +225,7 @@ name : name, specification:specification, batchNumber:batchNumber, + price:price, expensiveGoodsInfo:expensiveGoodsInfo }; array.push(obj); @@ -259,6 +261,7 @@ var isNullAmount = false; var goodsName = ""; var expensiveValidPass = true; + var itemsStore = top.Ext.getCmp('inventoryRecordForm').getStore(); for ( var i = 0; i < itemsStore.getCount(); i++) { var record = itemsStore.getAt(i); var id = record.get("id"); @@ -289,12 +292,14 @@ var name = record.get("name"); var specification = record.get("specification"); var batchNumber = record.get("batchNumber"); + var price = record.get("cost"); var obj = { itemId : id, amount : inventoryAmount, name : name, specification:specification, batchNumber:batchNumber, + price : price, expensiveGoodsInfo:expensiveGoodsInfo }; array.push(obj); Index: ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManagerImpl.java =================================================================== diff -u -r16984 -r17044 --- ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManagerImpl.java (.../InventoryRecordManagerImpl.java) (revision 16984) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManagerImpl.java (.../InventoryRecordManagerImpl.java) (revision 17044) @@ -435,9 +435,9 @@ List items = new ArrayList(); String inventoryDepartCoding = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig() + ","; - String sql = "select min(m.externalCode),min(m.name),min(m.specification),sum(s.amount),min(m.cost),m.id,min(m.unit) from MaterialDefinition m " - + "left join GoodsStock s on m.id = s.materialDefinitionId where m.inventoryDepartCoding like '%" + inventoryDepartCoding + "%' and " - + "wareHouseId = " + wareHouseId + " group by m.id order by min(m.externalCode) asc"; + String sql = "select min(m.externalCode),min(m.name),min(m.specification),sum(s.amount),s.price,m.id,min(m.unit),min(m.goodsType) from MaterialDefinition m " + + ", GoodsStock s where m.id = s.materialDefinitionId and m.inventoryDepartCoding like '%" + inventoryDepartCoding + "%' and " + + "wareHouseId = " + wareHouseId + " and s.amount > 0 group by m.id,s.price order by min(m.externalCode) asc"; ResultSet rs = objectDao.executeSql(sql); while(rs.next()){ InventoryItem item = new InventoryItem(); @@ -456,6 +456,7 @@ item.setWareHouseId(wareHouseId); item.setWareHouseName(warehouse.getName()); item.setUnit(rs.getString(7)); + item.setGoodsType(rs.getString(8)); items.add(item); } record.setItems(items); @@ -620,7 +621,8 @@ JSONObject obj = array.getJSONObject(i); Long itemId = obj.optLong("itemId"); Integer amount = obj.optInt("amount"); - if(itemId != null && itemId > 0){ + double price = obj.optDouble("price"); + if(DatabaseUtil.isPoIdValid(itemId)){ InventoryItem inventoryItem = map.get(itemId); if(inventoryItem != null){ inventoryItem.setAmount(amount); @@ -651,39 +653,66 @@ } } - }else if(InventoryRecord.TYPE_DISPOSABLEGOOD.equals(record.getType())){ + }else { String goodsName = obj.optString("name"); String specification = obj.optString("specification"); - String batchNumber = obj.optString("batchNumber"); - DisposableGoodsBatchStock goodsBatch = diposableGoodBatchStockManager - .getDisposableGoodsBatchStockByNameAndBatchNumber( - record.getWareHouseId(), goodsName, - specification, batchNumber); - if(goodsBatch != null){ + if(InventoryRecord.TYPE_DISPOSABLEGOOD.equals(record.getType())){ + String batchNumber = obj.optString("batchNumber"); + DisposableGoodsBatchStock goodsBatch = diposableGoodBatchStockManager + .getDisposableGoodsBatchStockByNameAndBatchNumber( + record.getWareHouseId(), goodsName, + specification, batchNumber); + if(goodsBatch != null){ + InventoryItem item = new InventoryItem(); + item.setBatchID(goodsBatch.getDisposableGoodsBatchId()); + item.setBatchNumber(goodsBatch.getBatchNumber()); + item.setDiposableGoodsID(goodsBatch.getDisposableGoodsId()); + item.setDisposableGoodsBatchId(goodsBatch.getDisposableGoodsBatchId()); + item.setDisposableGoodsBatchStockId(goodsBatch.getDisposableGoodsBatchStockId()); + item.setDisposableGoodsId(goodsBatch.getDisposableGoodsId()); + item.setDisposableGoodsStockId(goodsBatch.getDisposableGoodsStockId()); + DisposableGoodsStock diposableGoods = goodsBatch.getDiposableGoods(); + item.setMaterialName(diposableGoods.getName()); + item.setPrice(price); + item.setSpecification(diposableGoods.getSpecification()); + item.setInventoryRecordId(record.getId()); + item.setStorage(0); + item.setAmount(amount); + item.setStorageDifference(amount - item.getStorage()); + item.setSupplierName(goodsBatch.getSupplierName()); + item.setWareHouseId(record.getWareHouseId()); + item.setWareHouseName(record.getWareHouseName()); + item.setExternalCode(diposableGoods.getExternalCode()); + item.setExpDate(goodsBatch.getExpDate()); + items.add(item); + }else{ + throw new RuntimeException(goodsName + "不存在!"); + } + }else{ + MaterialDefinition md = materialDefinitionManager.getMaterialDefinitionByName(goodsName, specification); + if(md == null){ + String showName = goodsName; + if(StringUtils.isNotBlank(specification)){ + showName += "[" + specification + "]"; + } + throw new RuntimeException(showName + ",定义已不存在!"); + } InventoryItem item = new InventoryItem(); - item.setBatchID(goodsBatch.getDisposableGoodsBatchId()); - item.setBatchNumber(goodsBatch.getBatchNumber()); - item.setDiposableGoodsID(goodsBatch.getDisposableGoodsId()); - item.setDisposableGoodsBatchId(goodsBatch.getDisposableGoodsBatchId()); - item.setDisposableGoodsBatchStockId(goodsBatch.getDisposableGoodsBatchStockId()); - item.setDisposableGoodsId(goodsBatch.getDisposableGoodsId()); - item.setDisposableGoodsStockId(goodsBatch.getDisposableGoodsStockId()); - DisposableGoodsStock diposableGoods = goodsBatch.getDiposableGoods(); - item.setMaterialName(diposableGoods.getName()); - item.setPrice(goodsBatch.getCost()); - item.setSpecification(diposableGoods.getSpecification()); + item.setMaterialName(goodsName); + item.setPrice(price); + item.setSpecification(StringUtils.isBlank(specification) ? null : specification); item.setInventoryRecordId(record.getId()); item.setStorage(0); item.setAmount(amount); - item.setStorageDifference(amount - item.getStorage()); - item.setSupplierName(goodsBatch.getSupplierName()); + item.setStorageDifference(amount); + item.setSupplierName(""); + item.setMaterialID(md.getId()); + item.setExternalCode(md.getExternalCode()); item.setWareHouseId(record.getWareHouseId()); item.setWareHouseName(record.getWareHouseName()); - item.setExternalCode(diposableGoods.getExternalCode()); - item.setExpDate(goodsBatch.getExpDate()); + item.setUnit(md.getUnit()); + item.setGoodsType(md.getGoodsType()); items.add(item); - }else{ - throw new RuntimeException(goodsName+"不存在!"); } } } Index: ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryDisposableGoodsForm.js =================================================================== diff -u -r16712 -r17044 --- ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryDisposableGoodsForm.js (.../inventoryDisposableGoodsForm.js) (revision 16712) +++ ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryDisposableGoodsForm.js (.../inventoryDisposableGoodsForm.js) (revision 17044) @@ -1,33 +1,22 @@ -function isExistItem(name,sp,batchNumber){ +function isExistItem(name,sp,batchNumber,price){ var exist = false; + var itemsStore = top.Ext.getCmp('inventoryRecordForm').getStore(); for ( var i = 0; i < itemsStore.getCount(); i++) { var record = itemsStore.getAt(i); var s_name = record.get("name"); var s_sp = record.get("specification"); var s_batchNumber = record.get("batchNumber"); - if(s_name == name && s_sp == sp && s_batchNumber == batchNumber){ + var s_price = record.get("cost"); + if(s_name == name && s_sp == sp && s_batchNumber == batchNumber && s_price == price){ exist = true; break; } } return exist; } -var inventoryRecordItem = Ext.data.Record.create([ - {name : 'id'}, - {name : 'disposableGoodsBatchId'}, - {name : 'name'}, - {name : 'amount'}, - {name : 'inventoryAmount'}, - {name : 'batchNumber'}, - {name : 'cost'}, - {name : 'specification'}, - {name : 'supplierName'}, - {name : 'externalCode'}, - {name : 'goodsType'} -]); - function addItem(batchId,name,specification,amount,batchNumber,cost,supplierName,externalCode,goodsType){ + var itemsStore = top.Ext.getCmp('inventoryRecordForm').getStore(); var inventoryItem = new inventoryRecordItem({ id:'', disposableGoodsBatchId:batchId, @@ -48,6 +37,30 @@ function getDisposablegoodsInventoryRecord(recordId,time,operator,wareHouseName,status){ var selectModel = new top.Ext.grid.CheckboxSelectionModel(); + var itemsStore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/inventoryRecordAction!loadInventoryRecordItems.do', + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + root : 'data' + },[ + {name : 'id'}, + {name : 'disposableGoodsBatchId'}, + {name : 'name'}, + {name : 'amount'}, + {name : 'inventoryAmount'}, + {name : 'batchNumber'}, + {name : 'cost'}, + {name : 'specification'}, + {name : 'supplierName'}, + {name : 'externalCode'}, + {name : 'goodsType'}, + {name : 'expensiveGoodsInfo'} + ] + ) + }); + var disposableGoodsStore = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : WWWROOT + '/disinfectSystem/diposableGoodsAction!getDiposableGoodsData.do?allItems=yes', @@ -152,7 +165,7 @@ bodyStyle : 'border:1px solid #afd7af', frame :false, sm : selectModel, - height : 570, + height : 490, viewConfig: { forceFit:true }, @@ -164,7 +177,7 @@ {header : "名称",dataIndex : 'name',width : 150,menuDisabled : true}, {header : "规格",dataIndex : 'specification',width : 80,menuDisabled : true}, {header : "批次",width : 50,dataIndex : 'batchNumber',menuDisabled : true}, - {header : "账面数量",dataIndex : 'amount',width : 40,menuDisabled : true}, + {header : "账面数量",dataIndex : 'amount',width : 40,menuDisabled : true,renderer : isChange}, {header : "盘点数量",dataIndex : 'inventoryAmount',css: 'background: #F0F0F0;',width : 40,menuDisabled : true, editor : new top.Ext.form.TextField({ regex: /^\d+$/, @@ -269,22 +282,21 @@ top.Ext.getCmp('cost').setValue(record.data.cost); top.Ext.getCmp('supplierName').setValue(record.data.supplierName); top.Ext.getCmp('batchID').setValue(record.data.id); + top.Ext.getCmp('price').setValue(record.data.cost); } }, anchor : '95%' },{ text : '数量:' },{ - xtype : 'textfield', - maxLength : '16', + xtype : 'numberfield', id : 'amount', name : 'amount', allowBlank:true, - width : 80, - regex: /^\d+$/, - regexText:'只能输入数字', - anchor : '95%', - tabIndex : 2, + width : 60, + allowDecimals : false, + allowNegative : false, + minValue : 1, listeners : { render : function(c) { c.getEl().on('keypress',function(e) { @@ -295,6 +307,14 @@ } } },{ + text : '单价:' + },{ + xtype : 'numberfield', + id : 'price', + name : 'price', + allowNegative : false, + width : 60 + },{ text : '添加', iconCls : 'btn_ext_add', id:'addBtn', @@ -368,15 +388,17 @@ top.Ext.getCmp('amount').setValue(""); top.Ext.getCmp('batchID').setValue(""); top.Ext.getCmp('cost').setValue(""); + top.Ext.getCmp('price').setValue(""); top.Ext.getCmp('supplierName').setValue(""); top.Ext.getCmp('externalCode').setValue(""); } + function insertIntoGrid(){ var goodsName = top.Ext.getCmp('name').getRawValue(); var batchNumber = top.Ext.getCmp('batchNumber').getValue(); var amount = top.Ext.getCmp('amount').getValue(); var batchId = top.Ext.getCmp('batchID').getValue(); - var cost = top.Ext.getCmp('cost').getValue(); + var price = top.Ext.getCmp('price').getValue(); var supplierName = top.Ext.getCmp('supplierName').getValue(); var externalCode = top.Ext.getCmp('externalCode').getValue(); var goodsType = top.Ext.getCmp('goodsType').getValue(); @@ -388,15 +410,23 @@ showResult("请选择批次!"); return; } + if(amount == ""){ + showResult("数量必须大于0!"); + return; + } + if(price == ""){ + showResult("单价不能为空!"); + return; + } var specification = ""; var _index = goodsName.lastIndexOf('['); if(_index > 0){ specification = goodsName.substring(_index + 1,goodsName.length-1); goodsName = goodsName.substring(0,_index); } - var isExist = isExistItem(goodsName,specification,batchNumber); + var isExist = isExistItem(goodsName,specification,batchNumber,price); if(!isExist){ - addItem(batchId,goodsName,specification,amount,batchNumber,cost,supplierName,externalCode,goodsType); + addItem(batchId,goodsName,specification,amount,batchNumber,price,supplierName,externalCode,goodsType); cleanSelect(); }else{ showResult(goodsName + ",已存在!"); Index: ssts-web/src/main/webapp/disinfectsystem/materialmanager/materialOutView.js =================================================================== diff -u -r16984 -r17044 --- ssts-web/src/main/webapp/disinfectsystem/materialmanager/materialOutView.js (.../materialOutView.js) (revision 16984) +++ ssts-web/src/main/webapp/disinfectsystem/materialmanager/materialOutView.js (.../materialOutView.js) (revision 17044) @@ -813,7 +813,7 @@ pageSize : 20, defaultSortField : 'id', title : entityName + '列表', - defaultSortDirection : 'ASC', + defaultSortDirection : 'DESC', isCheckboxSelectionModel : false, rememberSelected : false, isShowSearchField : true, Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialdefinition/service/MaterialDefinitionManagerImpl.java =================================================================== diff -u -r16121 -r17044 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialdefinition/service/MaterialDefinitionManagerImpl.java (.../MaterialDefinitionManagerImpl.java) (revision 16121) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/materialdefinition/service/MaterialDefinitionManagerImpl.java (.../MaterialDefinitionManagerImpl.java) (revision 17044) @@ -335,6 +335,8 @@ temp.put("spelling", md.getSpelling()); temp.put("cost", md.getCost()); temp.put("storage", md.getStorage()); + temp.put("externalCode", md.getExternalCode()); + temp.put("unit", md.getUnit()); temp.put("goodsType", md.getGoodsType()); temp.put("isImplant", StringUtils.isBlank(md.getIsImplant()) ? Constants.STR_NO : md.getIsImplant()); mapList.add(temp); @@ -358,6 +360,9 @@ temp.put("spelling", diposableGood.getSpelling()); temp.put("cost", diposableGood.getReferencePrice()); temp.put("storage", diposableGood.getAmount()); + temp.put("externalCode", diposableGood.getExternalCode()); + temp.put("goodsType", diposableGood.getGoodsType()); + temp.put("unit", diposableGood.getUnit()); mapList.add(temp); } Index: ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryMaterialForm.js =================================================================== diff -u -r16712 -r17044 --- ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryMaterialForm.js (.../inventoryMaterialForm.js) (revision 16712) +++ ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryMaterialForm.js (.../inventoryMaterialForm.js) (revision 17044) @@ -1,9 +1,113 @@ +function addMaterialToStore(){ + var goodsName = top.Ext.getCmp('name').getRawValue(); + var amount = top.Ext.getCmp('amount').getValue(); + var price = top.Ext.getCmp('price').getValue(); + if(goodsName == ""){ + showResult("请选择物品名称!"); + return; + } + if(amount == ""){ + showResult("数量必须大于0!"); + return; + } + if(price == ""){ + showResult("物品价格不能为空!"); + return; + } + var specification = ""; + var _index = goodsName.lastIndexOf('['); + var _index2 = goodsName.lastIndexOf(']'); + if(_index > 0 && _index2 > 0){ + specification = goodsName.substring(_index + 1,goodsName.length-1); + goodsName = goodsName.substring(0,_index); + } + var itemsStore = top.Ext.getCmp('inventoryRecordForm').getStore(); + var exist = false; + for ( var i = 0; i < itemsStore.getCount(); i++) { + var record = itemsStore.getAt(i); + var s_name = record.get("name"); + var s_sp = record.get("specification"); + var s_cost = record.get("cost"); + if(s_name == goodsName && s_sp == specification && s_cost == price){ + exist = true; + break; + } + } + if(!exist){ + var inventoryItem = new inventoryRecordItem({ + id:'', + disposableGoodsBatchId:'', + name : goodsName, + specification:specification, + amount : 0, + inventoryAmount : amount, + batchNumber : '', + cost : price, + supplierName : '', + externalCode:'', + goodsType:'' + }); + itemsStore.insert(0 , inventoryItem); + top.Ext.getCmp('name').setValue(""); + top.Ext.getCmp('amount').setValue(""); + top.Ext.getCmp('price').setValue(""); + }else{ + showResult(goodsName + ",已存在!"); + } +} + + //材料品盘点记录 function getMaterialInventoryRecord(recordId,time,operator,wareHouseName,status){ var selectModel = new top.Ext.grid.CheckboxSelectionModel(); + var itemsStore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/inventoryRecordAction!loadInventoryRecordItems.do', + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + root : 'data' + },[ + {name : 'id'}, + {name : 'disposableGoodsBatchId'}, + {name : 'name'}, + {name : 'amount'}, + {name : 'inventoryAmount'}, + {name : 'batchNumber'}, + {name : 'cost'}, + {name : 'specification'}, + {name : 'supplierName'}, + {name : 'externalCode'}, + {name : 'goodsType'}, + {name : 'expensiveGoodsInfo'} + ] + ) + }); + itemsStore.load({params:{id:recordId}}); + var materialStore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/baseData/materialDefinitionAction!getMaterialDefinitionData.do', + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + totalProperty : 'totalCount', + root : 'data' + }, [ + {name : 'id',mapping : 'id'}, + {name : 'spelling',mapping : 'spelling'}, + {name : 'name',mapping : 'name'}, + {name : 'cost',mapping : 'cost'}, + {name : 'referencePrice',mapping : 'referencePrice'}, + {name : 'goodsType',mapping : 'goodsType'}, + {name : 'externalCode',mapping : 'externalCode'}, + {name : 'unit',mapping : 'unit'}, + {name : 'goodsType',mapping : 'goodsType'} + ]) + }); + form = new top.Ext.FormPanel({ id : 'godownEntryForm', frame : true, @@ -72,7 +176,7 @@ bodyStyle : 'border:1px solid #afd7af', frame :false, sm : selectModel, - height : 570, + height : 490, viewConfig: { forceFit:true }, @@ -81,7 +185,7 @@ cm : new top.Ext.grid.ColumnModel([new Ext.grid.RowNumberer({header:'序号',width:40}), selectModel, {header : "名称",dataIndex : 'name',width : 150,menuDisabled : true}, {header : "规格",dataIndex : 'specification',width : 80,menuDisabled : true}, - {header : "账面数量",dataIndex : 'amount',width : 40,menuDisabled : true}, + {header : "账面数量",dataIndex : 'amount',width : 40,menuDisabled : true,renderer : isChange}, {header : "盘点数量",dataIndex : 'inventoryAmount',css: 'background: #F0F0F0;',width : 40,menuDisabled : true, editor : new top.Ext.form.TextField({ regex: /^\d+$/, @@ -97,6 +201,57 @@ singleSelect : false }), tbar : [{ + text : '名称:' + },{ + xtype : 'combo', + id : 'name', + name : 'name', + queryParam : 'spell', + minChars : 0, + valueField : 'id', + displayField : 'name', + store : materialStore, + forceSelection : true, + lazyInit : false, + triggerAction : 'all', + hideTrigger : true, + typeAhead : false, + allowBlank : true, + width : 270, + tabIndex : 1, + selectOnFocus : true, + listeners : { + select : function(combo, record, index) { + + } + } + },{ + text : '数量:' + },{ + xtype : 'numberfield', + maxLength : '16', + id : 'amount', + name : 'amount', + width : 80, + allowDecimals : false, + allowNegative : false, + minValue : 1 + },{ + text : '单价:' + },{ + xtype : 'numberfield', + id : 'price', + name : 'price', + allowNegative : false, + width : 80 + },{ + text : '添加', + iconCls : 'btn_ext_add', + id:'addBtn', + handler : function() { + addMaterialToStore(); + } + } , '-' , { text:'盘点数量初始化', iconCls : 'icon_set', handler : function() {