0

错误:(-4014) 无法在未完整选择批次/序列号的情况下添加行。

DI API 的默认功能SaveDraftToDocument()在 MS SQL 数据库上运行良好,但在 SAP HANA 上运行良好。

我正在发布带有序列号的交货文件。

SAPbobsCOM.Documents oDrafts;
oDrafts = (SAPbobsCOM.Documents)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oDrafts);
oDrafts.GetByKey(Convert.ToInt32(EditText27.Value));
var count = oDrafts.Lines.Count;
var linenum = oDrafts.Lines.LineNum;
//Validation
#region
var RsRecordCount = (SAPbobsCOM.Recordset)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset);
var sQryRecordCount = String.Format("Select * from \"SANTEXDBADDON\".\"@TEMPITEMDETAILS\" where \"U_DraftNo\" = '{0}'", EditText27.Value);
RsRecordCount.DoQuery(sQryRecordCount);
#endregion

if (count == RsRecordCount.RecordCount)
{
    //LINES
    string ItemCode = "", WhsCode = ""; double Quantity = 0; int index = 0;
    for (int i = 0; i < oDrafts.Lines.Count; i++)
    {
        oDrafts.Lines.SetCurrentLine(index);
        ItemCode = oDrafts.Lines.ItemCode;
        //SERIAL NUMBERS
        var RsSerial = (SAPbobsCOM.Recordset)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset);
        string table = "\"@TEMPSERIALS\"";
        var sQrySerial = String.Format(
            "Select \"U_ItemCode\" , \"U_DistNumber\" from \"SANTEXDBADDON\".\"@TEMPSERIALS\" where " +
            "\"U_DraftNo\" = '{0}' and \"U_ItemCode\" = '{1}'", EditText27.Value, ItemCode);
            RsSerial.DoQuery(sQrySerial);
        int serialindex = 1, lineindex = 0;
        #region
        if (RsSerial.RecordCount > 0)
        {
            while (!RsSerial.EoF)
            {
                //OSRN SERIALS
                var RsSerialOSRN = (SAPbobsCOM.Recordset)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset);
                var sQrySerialOSRN = String.Format(
                    "Select * from OSRN where \"DistNumber\" = '{0}' and \"ItemCode\" = '{1}'"
                    , RsSerial.Fields.Item("U_DistNumber").Value.ToString(), ItemCode);
                RsSerialOSRN.DoQuery(sQrySerialOSRN);

                oDrafts.Lines.SerialNumbers.SetCurrentLine(0);

                oDrafts.Lines.SerialNumbers.BaseLineNumber = oDrafts.Lines.LineNum;

                oDrafts.Lines.SerialNumbers.SystemSerialNumber =
                    Convert.ToInt32(RsSerialOSRN.Fields.Item("SysNumber").Value.ToString());

                oDrafts.Lines.SerialNumbers.ManufacturerSerialNumber =
                    RsSerialOSRN.Fields.Item("DistNumber").Value.ToString();

                oDrafts.Lines.SerialNumbers.InternalSerialNumber =
                    RsSerialOSRN.Fields.Item("DistNumber").Value.ToString();

                oDrafts.Lines.SerialNumbers.Quantity = 1;
                
                if (RsSerial.RecordCount != serialindex)
                {
                    Application.SBO_Application.StatusBar.SetText("INTERNAL NO  " + oDrafts.Lines.SerialNumbers.InternalSerialNumber, SAPbouiCOM.BoMessageTime.bmt_Long, SAPbouiCOM.BoStatusBarMessageType.smt_Success);
                    oDrafts.Lines.SerialNumbers.Add();
                    serialindex++;
                    lineindex++;
                }
                RsSerial.MoveNext();
            }
        }
        #endregion
        index++;
    }
    var status = oDrafts.SaveDraftToDocument();

    if (status == 0)
    {
        oDrafts.Remove();
        Application.SBO_Application.StatusBar.SetText("Delivery Posted Successfully !", SAPbouiCOM.BoMessageTime.bmt_Long, SAPbouiCOM.BoStatusBarMessageType.smt_Success);
    }
    else
    {
        int code = 0; string message = "";
        oCompany.GetLastError(out code, out message);
        Application.SBO_Application.SetStatusBarMessage(message, SAPbouiCOM.BoMessageTime.bmt_Medium, true);
    }
}`
4

1 回答 1

0

您发布的错误解释了问题。您正在尝试交付产品,但未包含所有序列号/批号。

我认为没有足够的信息来确定这个问题发生在哪里,但这里有一些提示:

您正在从自定义表中读取序列号。您正在阅读的值是否有效?例如,其他用户是否可以将它们添加到不同的订单中?这些值是否适用于不同的产品?

您是否指定了正确数量的序列号?行上的项目数量是否可能多于您添加的序列号数量?

相信错误信息,直到你能证明它是错误的。这似乎不是 HANA 问题(我们广泛使用 HANA),这是您提供的数据的逻辑问题。

如果您无法轻松确定问题所在,您可能希望捕获更多调试信息以帮助您。

于 2020-07-13T16:06:28.813 回答