diff --git a/src/api/asnDetail.js b/src/api/asnDetail.js index e837cc6..4987ecf 100644 --- a/src/api/asnDetail.js +++ b/src/api/asnDetail.js @@ -76,9 +76,9 @@ export function doCheckAsn(ids) { }) } -export function invVerify(ids) { +export function putawayAsn(ids) { return request({ - url: 'api/asnDetail/invVerify', + url: 'api/asnDetail/putawayAsn', method: 'post', data:ids }) diff --git a/src/api/pickTicket.js b/src/api/pickTicket.js index 7a952de..ac8d3fe 100644 --- a/src/api/pickTicket.js +++ b/src/api/pickTicket.js @@ -35,6 +35,15 @@ export function xdckAllocate(data) { }) } +export function qtckAllocate(data) { + return request({ + url: 'api/pickTicket/qtckAllocate', + method: 'post', + data + }) +} + + export function xdckCancelAllocate(data) { return request({ url: 'api/pickTicket/xdckCancelAllocate', @@ -223,4 +232,4 @@ export function xdckPick(data) { }) } -export default { add, edit, del ,xdckPickOut,xdckAllocate,xdckCancelAllocate,pickingOperations,queryDetails,shipmentRegistration,xppPickGoods,xbjsVerify,pickWhole,pickBatch,pickSingle,pickForXpp,xdckPick} +export default { add, edit, del ,xdckPickOut,xdckAllocate,qtckAllocate,xdckCancelAllocate,pickingOperations,queryDetails,shipmentRegistration,xppPickGoods,xbjsVerify,pickWhole,pickBatch,pickSingle,pickForXpp,xdckPick} diff --git a/src/api/xppRecord.js b/src/api/xppRecord.js index 4fb7d4e..9501c1c 100644 --- a/src/api/xppRecord.js +++ b/src/api/xppRecord.js @@ -56,6 +56,14 @@ export function xppBd(data) { data }) } + +export function xppSplit(data) { + return request({ + url: 'api/xppRecord/xppSplit', + method: 'post', + data + }) +} export function add(data) { return request({ url: 'api/xppRecord', @@ -104,4 +112,4 @@ export function cancelReceipt(data) { }) } -export default { add, edit, del, collectFromPass, addAsnDetail,xppLyOut,xppHyIn,changeFz,cancelReceiv,xppBd ,createReceipt,cancelReceipt,adjustOut} +export default { add, edit, del, collectFromPass, addAsnDetail,xppLyOut,xppHyIn,changeFz,cancelReceiv,xppBd ,xppSplit,createReceipt,cancelReceipt,adjustOut} diff --git a/src/views/base-data/bomAccount/index.vue b/src/views/base-data/bomAccount/index.vue index 646f07f..c4978b6 100644 --- a/src/views/base-data/bomAccount/index.vue +++ b/src/views/base-data/bomAccount/index.vue @@ -31,14 +31,8 @@ :value="baseStatus.value" /> --> - - - + + - + - + + - - - + + - - - - + - + - + + + + + + - 库位号 - - 库区 - + + + + style="width: 150px" + v-for="item in this.dict.point_type" + :key="item.id" + :label="item.label" + :value="item.value" + > + - - @@ -96,7 +100,7 @@ - + @@ -126,8 +130,8 @@ - - + + @@ -148,7 +152,7 @@ - + {{ dict.label.point_type[scope.row.type] }} @@ -163,7 +167,7 @@ /> - + @@ -203,6 +207,7 @@ import crudStock from '@/api/stock' import pointUrl from '@/api/point' import {mapGetters} from "vuex"; import {queryBomPrintListX} from "@/api/bomAccount"; +import AreaCodeSelect from "@/views/generic-component/AreaCodeSelect.vue"; const defaultForm = { id: null, @@ -217,12 +222,12 @@ const defaultForm = { } export default { name: 'Point', - components: { Treeselect, pagination, crudOperation, udOperation, rrOperation, viewFullStockIn, viewFullStockOut }, + components: {AreaCodeSelect, Treeselect, pagination, crudOperation, udOperation, rrOperation, viewFullStockIn, viewFullStockOut }, mixins: [presenter(), header(), form(defaultForm), crud()], dicts: ['base_staus', 'use_status', 'point_type', 'agv_on_off'], cruds() { return CRUD({ - title: '点位', + title: '库位', url: 'api/point', idField: 'id', sort: 'id,desc', diff --git a/src/views/base-data/productionPlan/index.vue b/src/views/base-data/productionPlan/index.vue index 4690089..1faf952 100644 --- a/src/views/base-data/productionPlan/index.vue +++ b/src/views/base-data/productionPlan/index.vue @@ -1,8 +1,8 @@ - - + + { if (!valid) { + this.loading_add=false; return } - console.log(this.productionPlanVo) haoYong(this.productionPlanVo).then(res =>{ - console.log(res) if(res.status==200){ this.crud.notify('批量耗用成功!', CRUD.NOTIFICATION_TYPE.SUCCESS); this.haoYongOnOff = false this.crud.refresh() + this.loading_add=false; } - }); + },e=>{ + this.loading_add=false; + }) }); }, diff --git a/src/views/business-asn/asn/index.vue b/src/views/business-asn/asn/index.vue index fd1b541..9fc4fd3 100644 --- a/src/views/business-asn/asn/index.vue +++ b/src/views/business-asn/asn/index.vue @@ -11,7 +11,7 @@ @keyup.enter.native="crud.toQuery"/> - + @@ -98,7 +98,7 @@ - + @@ -251,7 +251,7 @@ - { - // if (res != null){ - // this.$message.error(res) - // }else { - this.$message.success(res) - this.crud.toQuery() - // } - }).catch(e => { - this.$message.error(e) - }) - }, invVerifySTFM(selection, row) { if (selection.length > 0) { this.invVerifySTF = false; @@ -591,10 +573,10 @@ export default { this.mutilPutawayVisible = false }) }, - getChangeVule(dben) { + getChangeValue(dben) { this.plsjForm.pointId = dben.id; }, - getChangeAreaVule(dben) { + getChangeAreaValue(dben) { this.query.areaCode = dben.code; }, diff --git a/src/views/business-asn/asn/viewAsnDetail.vue b/src/views/business-asn/asn/viewAsnDetail.vue index e8322d6..4809b6c 100644 --- a/src/views/business-asn/asn/viewAsnDetail.vue +++ b/src/views/business-asn/asn/viewAsnDetail.vue @@ -8,7 +8,7 @@ - + @@ -144,7 +144,7 @@ style="height: 200px" > - + diff --git a/src/views/business-asn/asn/viewXbDetail.vue b/src/views/business-asn/asn/viewXbDetail.vue index 6639374..fad6987 100644 --- a/src/views/business-asn/asn/viewXbDetail.vue +++ b/src/views/business-asn/asn/viewXbDetail.vue @@ -8,7 +8,7 @@ - + @@ -51,7 +51,7 @@ - 取消上架 - - + 导入 - --> + - + @@ -124,11 +124,9 @@ - - diff --git a/src/views/business-asn/asn/xbrk.vue b/src/views/business-asn/asn/xbrk.vue index 46bef57..69d5ddf 100644 --- a/src/views/business-asn/asn/xbrk.vue +++ b/src/views/business-asn/asn/xbrk.vue @@ -7,18 +7,7 @@ - - - - - + 整单入库 - - - 导入 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -198,96 +79,6 @@ - - - - - - - 模板说明: - 适用于标准导入,包含INVOICE NO.、BOI、PO&LN NO.、PART - NO.、DESCRIPTION、Q'TY(PCS) 、C/NO. - 下载模板 - - - - 将文件拖到此处,或点击上传 - 注意:更新文件后请重新上传(支持.xlsx, .xls, - .csv 格式文件) - - - - - - - - - 模板说明: - 适用于大物导入,包含INVOICE NO.、BOI、PO&LN NO.、PART - NO.、DESCRIPTION、Q'TY(PCS) 、C/NO. - - - - 将文件拖到此处,或点击上传 - 注意:更新文件后请重新上传(支持.xlsx, .xls, - .csv 格式文件) - - - - - - - - - 模板说明: - 适用于空运发票箱单导入,包含INV.NO.、A-PROS CASE NO、KMT NO. PO&LN NO.、PART NO.、 - DESCRIPTION、Q'TY 、C/NO. - - - - 将文件拖到此处,或点击上传 - 注意:更新文件后请重新上传(支持.xlsx, .xls, - .csv 格式文件) - - - - - - - - - { - this.itemListData = res - }).catch(e => { - this.$message({ - showClose: true, - message: '物料加载失败', - type: 'error' - }) - }) - }, - getPointData() { - queryPointList().then(res => { - this.pointList = res - }) - }, + //queryAsnAll getAsnData() { queryAsnAll().then(res => { @@ -600,7 +373,7 @@ export default { for (const idsKey of data) { ids.push(idsKey.id); } - invVerify(ids).then(res => { + putawayAsn(ids).then(res => { // if (res != null){ // this.$message.error(res) // }else { @@ -779,6 +552,9 @@ export default { this.fileList3 = []; } }, + getChangeAreaVule(dben) { + this.query.areaCode = dben.code; + }, } } diff --git a/src/views/business-asn/xppRecord/index.vue b/src/views/business-asn/xppRecord/index.vue index 706d14a..fcbc4e8 100644 --- a/src/views/business-asn/xppRecord/index.vue +++ b/src/views/business-asn/xppRecord/index.vue @@ -222,6 +222,18 @@ 现品票补打 + + 现品票拆分 + + + + + + + + + + + + + + + + + + + + + + + + + + + { + this.xppSplitOnOff=false; + this.crud.toQuery() + this.$message.success(res) + this.resetForm() + this.xppSplitForm.cfs=0 + }) + }, showReportShd(data){ this.$router.push({path:'/business-asn/xpp_shd_report',query:{tableID:'收货单打印',parm: "code="+data.receipt_code+"&username="+this.user.username}}) }, @@ -668,6 +727,12 @@ export default { this.xppBdOnOff=true; }, + //弹出现品票补打 + showXppSplit(data){ + this.xppSplitForm.xppRecord=data; + this.xppSplitOnOff=true; + }, + } } diff --git a/src/views/business-inv/inventory/invZz.vue b/src/views/business-inv/inventory/invZz.vue index 331f5b4..251ea3d 100644 --- a/src/views/business-inv/inventory/invZz.vue +++ b/src/views/business-inv/inventory/invZz.vue @@ -50,7 +50,7 @@ placeholder="选择日期" > - + - - - - + + + + + + + + @@ -84,22 +96,25 @@ - - + + {{ dict.label.pick_status[scope.row.status] }} - - - + + + + + + @@ -187,6 +202,9 @@ import { formatDate } from '@/utils/commonUtils' import ItemSelect from "@/views/generic-component/ItemSelect.vue"; import BomAccountPointSelect from "@/views/generic-component/BomAccountPointSelect.vue"; import {queryPickDetailXd} from "@/api/inventory"; +import AreaCodeSelect from "@/views/generic-component/AreaCodeSelect.vue"; +import AreaSelect from "@/views/generic-component/AreaSelect.vue"; +import PointCodeSelect from "@/views/generic-component/PointCodeSelect.vue"; const defaultForm = { id: null, @@ -195,6 +213,9 @@ const defaultForm = { export default { name: 'PickDetail', components: { + PointCodeSelect, + AreaSelect, + AreaCodeSelect, XdTask, BomAccountPointSelect, ItemSelect, DateRangePicker, PickTask,pagination, crudOperation, rrOperation, udOperation}, @@ -290,7 +311,7 @@ export default { if (this.isAllEqual(status) && status[0] == "ALLOCATE") { this.show_jh = true; - this.show_fp = true; + this.show_fp = false; this.show_cancelfp = false; } //拣货 diff --git a/src/views/business-pick/pickDetailPlan/viewPickDetailPlan.vue b/src/views/business-pick/pickDetailPlan/viewPickDetailPlan.vue index 17b4b39..e839d4c 100644 --- a/src/views/business-pick/pickDetailPlan/viewPickDetailPlan.vue +++ b/src/views/business-pick/pickDetailPlan/viewPickDetailPlan.vue @@ -5,44 +5,13 @@ - - - - - - - - - - + + - + - - - - - - - - - - - + + - - - - + + - - + + - - + + + + + + + - - - - - - + @@ -153,16 +118,8 @@ - - - {{ scope.row.item == null ? '' : scope.row.item.code }} - - - - - {{ scope.row.item == null ? '' : scope.row.item.name }} - - + + diff --git a/src/views/business-pick/pickTicket/OutParticulars.vue b/src/views/business-pick/pickTicket/OutParticulars.vue index 2ccffd8..7c37428 100644 --- a/src/views/business-pick/pickTicket/OutParticulars.vue +++ b/src/views/business-pick/pickTicket/OutParticulars.vue @@ -6,7 +6,7 @@ > - + - - - - + + - + - + - + - + {{ scope.row.orderQty - scope.row.allocatedQty }} - + - + - + - - + + - + - + - - - {{ scope.row.item.code }} - - - - - {{ scope.row.item.name }} - - - - + + + + - + @@ -148,7 +138,7 @@ - + - - + + - + diff --git a/src/views/business-pick/pickTicket/index.vue b/src/views/business-pick/pickTicket/index.vue index e40e8ef..e2fcc21 100644 --- a/src/views/business-pick/pickTicket/index.vue +++ b/src/views/business-pick/pickTicket/index.vue @@ -6,16 +6,7 @@ - - - - + @@ -75,7 +66,19 @@ > 拣货确认 + + 查看详情 + + @@ -258,11 +251,12 @@ class="filter-item" type="primary" size="mini" - @click="bulkPicking(crud.selections[0])" + :disabled="!(crud.selections.length >0)" + @click="bulkPicking(crud.selections)" > 批量拣货 - 现品票拣货 - + --> {{ scope.row.pickDetail.po }}--> - - - {{ scope.row.item.code }} - - - - - {{ scope.row.item.name }} - - - - + + + + + - @@ -430,11 +416,7 @@ @selection-change="selectionChangeHandlerTwo" :height="crud.tableHeight" border > - - - {{ scope.row.area.name }} - - + @@ -502,7 +484,7 @@ import crudPickTicket, { getCodeNo, pickBatch, pickForXpp, pickingCancel, pickingOperations, pickSingle, pickWhole, - queryTaskLogDataS, + queryTaskLogDataS, qtckAllocate, shipmentRegistration } from '@/api/pickTicket' import CRUD, { presenter, header, form, crud } from '@crud/crud' @@ -519,6 +501,7 @@ import OutParticulars from '@/views/business-pick/pickTicket/OutParticulars.vue' import {pickOutConfirm} from "@/api/pickOut"; import {xppHyIn} from "@/api/xppRecord"; import {mapGetters} from "vuex"; +import AreaSelect from "@/views/generic-component/AreaSelect.vue"; const defaultForm = { id: null, @@ -564,7 +547,7 @@ const defaultForm = { } export default { name: 'PickTicket', - components: { OutParticulars, pagination, crudOperation, rrOperation, udOperation }, + components: {AreaSelect, OutParticulars, pagination, crudOperation, rrOperation, udOperation }, mixins: [presenter(), header(), form(defaultForm), crud()], dicts: ['pick_status', 'inv_log_type', 'inc_dec'], cruds() { @@ -666,6 +649,9 @@ export default { //拣货确认 弹窗开关 pickConfirmTF: false, taskData: [], + selectIds: { + ids: [] + }, pickTicketButton: { //拣货确认按钮号 1整单拣货 2单一拣货 3批量拣货 4取消拣货 pickConfirmNo: 0, @@ -814,6 +800,9 @@ export default { } if (this.isAllEqual(status) && status[0] == 'ALLOCATE') { + this.show_fp = false + } + if (this.isAllEqual(status) && status[0] == 'PICK_ALL') { this.show_fp = true } }, @@ -827,26 +816,15 @@ export default { } }, allocate(datas) { - this.$confirm(`选中${datas.length}条数据确认是否分配?`, '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning' - }).then(() => { - const ids = [] - for (let i = 0; i < datas.length; i++) { - ids.push(datas[i].id) - } - crudPickDetail.allocatePick(ids).then(res => { - this.crud.notify('分配成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) - this.crud.toQuery() - }).catch(() => { - this.crud.notify('分配失败!', CRUD.NOTIFICATION_TYPE.ERROR) - this.crud.toQuery() - }) - + console.log(datas) + let list = [] + for (const datum of datas) { + list.push(datum.id) + } + qtckAllocate(list).then(res => { + this.$message.success(res) + this.crud.toQuery() }).catch(() => { - this.$refs.table.clearSelection() - this.crud.notify('取消成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) }) }, //queryPickTask @@ -921,9 +899,8 @@ export default { singlePick(data) { if (data.status === 'ALLOCATE'||data.status ==='PICKUP') { let data_ = this.pickTicketButton - data_.pickConfirmNo = 1 data_.pickTicketId = data.id - pickWhole(data.id).then(res => { + pickWhole(data_).then(res => { this.pickConfirmTF = false this.$message.success(res) this.crud.toQuery() @@ -934,19 +911,17 @@ export default { }, //批量拣货 bulkPicking(data) { - if (this.tsakSelectData.length > 0) { - let list = [] - for (const datum of data) { - list.push(datum.id) - } - pickBatch(list).then(res => { + console.log(data) + let data_ = this.selectIds; + for (const dataKey of this.taskData) { + data_.ids.push(dataKey.id) + } + console.log(data_.ids) + pickBatch(data_.ids ).then(res => { this.pickConfirmTF = false this.$message.success(res) this.gbOnOff(); }) - } else { - this.$message.error('你未选着数据') - } }, //单一拣货确认 solePickGoods(data) { @@ -1072,6 +1047,9 @@ export default { this.key=this.key+1; }, + getChangeAreaValue(dben) { + this.query.rAreaCode = dben.code; + }, } } diff --git a/src/views/business-pick/pickTicket/viewPickDetail.vue b/src/views/business-pick/pickTicket/viewPickDetail.vue index d7e1f28..19a53a1 100644 --- a/src/views/business-pick/pickTicket/viewPickDetail.vue +++ b/src/views/business-pick/pickTicket/viewPickDetail.vue @@ -5,19 +5,8 @@ - - - - - {{ item.code }} - {{ item.name }} - - - - - + + - - + + - - - - + + - - + + - - - - + + + + + + + + 提交 - - - - - - - - @@ -128,7 +109,22 @@ - + + + + + + @@ -154,41 +150,17 @@ @selection-change="crud.selectionChangeHandler" :height="crud.tableHeight" border > - - - {{ scope.row.item == null ? '' : scope.row.item.code }} - - - - - {{ scope.row.item == null ? '' : scope.row.item.name }} - - - - - {{ scope.row.item == null ? '' : scope.row.item.unit }} - - - - - {{ scope.row == null ? '' : scope.row.orderQty }} - - + + + + + - - - - {{ scope.row.point == null ? '' : scope.row.point.code }} - - - - - {{ scope.row.remark }} - - + + @@ -301,6 +273,7 @@ export default { 'baseApi' ]) }, + dicts: ['bonded_type'], data() { return { headers: { 'Authorization': getToken() }, @@ -328,6 +301,9 @@ export default { ], orderQty: [ { required: true, message: '订单数量不能为空', trigger: 'blur' } + ], + propC2: [ + { required: true, message: '税别不能为空', trigger: 'blur' } ] // point: [ // { required: true, message: '库位不能为空', trigger: 'blur' } diff --git a/src/views/business-pick/spareParts/index.vue b/src/views/business-pick/spareParts/index.vue index c8f2355..84b3718 100644 --- a/src/views/business-pick/spareParts/index.vue +++ b/src/views/business-pick/spareParts/index.vue @@ -14,7 +14,7 @@ :value="baseStatus.value" /> --> - + diff --git a/src/views/generic-component/AreaCodeSelect.vue b/src/views/generic-component/AreaCodeSelect.vue new file mode 100644 index 0000000..b1a3d20 --- /dev/null +++ b/src/views/generic-component/AreaCodeSelect.vue @@ -0,0 +1,127 @@ + + + + {{ item.code }} + {{ item.name }} + + + + + + diff --git a/src/views/generic-component/AreaSelect.vue b/src/views/generic-component/AreaSelect.vue index 6dfdde1..af06937 100644 --- a/src/views/generic-component/AreaSelect.vue +++ b/src/views/generic-component/AreaSelect.vue @@ -1,12 +1,16 @@ - {{ item.code }} + + {{ item.code }} {{ item.name }} @@ -22,25 +27,50 @@ + diff --git a/src/views/generic-component/BigItemSelect.vue b/src/views/generic-component/BigItemSelect.vue index b20bb98..6aa99f2 100644 --- a/src/views/generic-component/BigItemSelect.vue +++ b/src/views/generic-component/BigItemSelect.vue @@ -47,6 +47,10 @@ export default { styles: { type: String, default: 'width: 200px;' + }, + immediate: { + type: Boolean, + default: false } }, data() { @@ -65,6 +69,12 @@ export default { this.$emit('change', val) } }, + created() { + // 如果设置了immediate属性或已有值,则立即加载数据 + if (this.immediate || (this.value && this.value[this.valueKey])) { + this.fetchItems(); + } + }, methods: { fetchItems() { if (this.items.length === 0) { diff --git a/src/views/generic-component/BillTypeSelect.vue b/src/views/generic-component/BillTypeSelect.vue index 1da841f..c6a4eca 100644 --- a/src/views/generic-component/BillTypeSelect.vue +++ b/src/views/generic-component/BillTypeSelect.vue @@ -51,6 +51,10 @@ export default { styles: { type: String, default: 'width: 200px;' + }, + immediate: { + type: Boolean, + default: false } }, data() { @@ -72,6 +76,12 @@ export default { this.$emit('change', val); } }, + created() { + // 如果设置了immediate属性或已有值,则立即加载数据 + if (this.immediate || (this.value && this.value[this.valueKey])) { + this.fetchItems(); + } + }, methods: { fetchItems() { if (this.items.length === 0) { diff --git a/src/views/generic-component/BomAccountPointSelect.vue b/src/views/generic-component/BomAccountPointSelect.vue index 59f64eb..8dfe29b 100644 --- a/src/views/generic-component/BomAccountPointSelect.vue +++ b/src/views/generic-component/BomAccountPointSelect.vue @@ -50,6 +50,10 @@ export default { styles: { type: String, default: 'width: 200px;' + }, + immediate: { + type: Boolean, + default: false } }, data() { @@ -68,6 +72,12 @@ export default { this.$emit('change', val) }*/ }, + created() { + // 如果设置了immediate属性或已有值,则立即加载数据 + if (this.immediate || (this.value && this.value[this.valueKey])) { + this.fetchItems(); + } + }, methods: { fetchItems() { if (this.items.length === 0) { diff --git a/src/views/generic-component/ItemSelect.vue b/src/views/generic-component/ItemSelect.vue index 6d011ab..645cdb5 100644 --- a/src/views/generic-component/ItemSelect.vue +++ b/src/views/generic-component/ItemSelect.vue @@ -47,6 +47,10 @@ export default { styles: { type: String, default: 'width: 200px;' + }, + immediate: { + type: Boolean, + default: false } }, data() { @@ -65,6 +69,12 @@ export default { this.$emit('change', val) } }, + created() { + // 如果设置了immediate属性或已有值,则立即加载数据 + if (this.immediate || (this.value && this.value[this.valueKey])) { + this.fetchItems(); + } + }, methods: { fetchItems() { if (this.items.length === 0) { diff --git a/src/views/generic-component/PointCodeSelect.vue b/src/views/generic-component/PointCodeSelect.vue new file mode 100644 index 0000000..d1146e3 --- /dev/null +++ b/src/views/generic-component/PointCodeSelect.vue @@ -0,0 +1,102 @@ + + + + {{ item.code }} + {{ item.area.name }} + {{ item.itemCode }} + + + + + + + diff --git a/src/views/generic-component/PointSelect.vue b/src/views/generic-component/PointSelect.vue index a4b3638..a584f0e 100644 --- a/src/views/generic-component/PointSelect.vue +++ b/src/views/generic-component/PointSelect.vue @@ -7,6 +7,7 @@ :value-key="valueKey" :style="selectStyle" @change="onChange" + :multiple="multiple" >
适用于标准导入,包含INVOICE NO.、BOI、PO&LN NO.、PART - NO.、DESCRIPTION、Q'TY(PCS) 、C/NO.
适用于大物导入,包含INVOICE NO.、BOI、PO&LN NO.、PART - NO.、DESCRIPTION、Q'TY(PCS) 、C/NO.
适用于空运发票箱单导入,包含INV.NO.、A-PROS CASE NO、KMT NO. PO&LN NO.、PART NO.、 - DESCRIPTION、Q'TY 、C/NO.