使用SAP SDK保存授权库存转储草稿时遇批次/仓位错误求助
库存转储草稿转正式文档报错(批次+仓位管理场景)
我正尝试将已授权的库存转储(Stock Transfer)草稿保存为正式文档,所在组织启用了批次(lots)和仓位管理。我知道需调用SaveDocumentToDocument()方法完成操作,但执行时报错:
1470000839 - 仅指定序列号或批次号无效,还必须为文档第1行指定发料仓位

附上执行代码:
Private Sub SolicitudTrasladoStock(draftDocEntry As Integer) 'Obtener el borrador existente Dim draft As SAPbobsCOM.StockTransfer draft = CType(oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oStockTransferDraft), SAPbobsCOM.StockTransfer) If draft.GetByKey(draftDocEntry) Then Try If draft.SaveDraftToDocument() <> 0 Then Dim errorCode As Integer Dim errorMsg As String = "" oCompany.GetLastError(errorCode, errorMsg) MessageBox.Show("Error al crear la transferencia de stock: " & errorMsg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) Else MessageBox.Show("Transferencia de stock creada con éxito.", "Éxito", MessageBoxButtons.OK, MessageBoxIcon.Information) End If Catch ex As Exception MessageBox.Show("Excepción al agregar la transferencia: " & ex.Message, "Excepción", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try Else MessageBox.Show("No se encontró el borrador con DocEntry: " & draftDocEntry, "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) End If End Sub
解决方案
这个错误的核心原因是:启用仓位管理后,库存转储的每一行项目必须明确指定发料仓位(From Warehouse Bin),仅填批次信息不满足系统校验要求。需要在调用SaveDraftToDocument()前,为所有行项目补充发料仓位数据。
修改后的代码示例:
Private Sub SolicitudTrasladoStock(draftDocEntry As Integer) Dim draft As SAPbobsCOM.StockTransfer draft = CType(oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oStockTransferDraft), SAPbobsCOM.StockTransfer) If draft.GetByKey(draftDocEntry) Then Try ' 遍历所有行项目,补充发料仓位 draft.Lines.SetCurrentLine(0) ' 从第1行开始(索引0) Do Until draft.Lines.IsLastLine ' 可从草稿行项目读取已有仓位,或指定系统存在的仓位代码 draft.Lines.BinCode = "你的发料仓位代码" draft.Lines.Update() draft.Lines.Next() Loop ' 处理最后一行 draft.Lines.BinCode = "你的发料仓位代码" draft.Lines.Update() If draft.SaveDraftToDocument() <> 0 Then Dim errorCode As Integer Dim errorMsg As String = "" oCompany.GetLastError(errorCode, errorMsg) MessageBox.Show("创建库存转储失败: " & errorMsg, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error) Else MessageBox.Show("库存转储创建成功。", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information) End If Catch ex As Exception MessageBox.Show("创建库存转储时发生异常: " & ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try Else MessageBox.Show("未找到DocEntry为 " & draftDocEntry & " 的草稿。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning) End If End Sub
关键说明:
- 如果草稿行项目本身已包含仓位信息,可直接读取
draft.Lines.BinCode复用,无需硬编码 - 确保指定的
BinCode是目标仓库下已存在的有效仓位代码 - 所有行项目都必须设置仓位,不能遗漏任何一行
内容的提问来源于stack exchange,提问作者Josué Vantes
相关产品推荐
相关产品推荐

