You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SAP SDK保存授权库存转储草稿时遇批次/仓位错误求助

库存转储草稿转正式文档报错(批次+仓位管理场景)

我正尝试将已授权的库存转储(Stock Transfer)草稿保存为正式文档,所在组织启用了批次(lots)和仓位管理。我知道需调用SaveDocumentToDocument()方法完成操作,但执行时报错:

1470000839 - 仅指定序列号或批次号无效,还必须为文档第1行指定发料仓位

Error SDK

附上执行代码:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 03:46:02