1

i'm trying to insert Inventory Transfer using SBO DI API (v9), but every time its executed always failed and return error code

-1116 Internal error (-5002) occurred

If we change

oDoc = company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oStockTransfer);

into

oDoc = company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oStockTransferDraft);

the document was saved but as an Inventory Transfer DRAFT, so we need to open SAP GUI to open the draft then add it manually to post as Inventory Transfer Document, this is not what I want to do. I think there are some mandatory fields that I'm missing or DI API not supported to post Inventory Transfer document?, the problem is I don't know how to trace them, the error message is not helpful at all. FYI, I have created some API like PickList, Inventory Transfer Request but there is no problem at all.

here's my code for your reference:

        SAPConnection connection = new SAPConnection();
        SAPbobsCOM.Company company = connection.OpenConnection();

        if (company != null) {
            SAPbobsCOM.IStockTransfer oDoc;
            oDoc = company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oStockTransfer);
            
            //HEADER DEFINITION
            oDoc.Series = 347;  //SERIES NUMBER
            oDoc.FromWarehouse = d["h"]["FROM"].ToString();
            oDoc.ToWarehouse = d["h"]["TO"].ToString();
            oDoc.Comments = "Generated Automatically From WMS [" + d["h"]["NUMBER"].ToString() + "]";
            oDoc.JournalMemo = "Inventory Transfer - WMS";
            oDoc.DocDate = DateTime.Today;
            oDoc.DueDate = DateTime.Today;
            oDoc.DocObjectCode = SAPbobsCOM.BoObjectTypes.oStockTransfer;

            //DETAIL DEFINITION
            Int16 lines = (short)d["d"].Count();
            
            for(int i = 0; i<lines; i++) {
                if (i > 0)
                {
                    oDoc.Lines.Add();
                }

                oDoc.Lines.BaseType = SAPbobsCOM.InvBaseDocTypeEnum.InventoryTransferRequest;
                oDoc.Lines.BaseEntry = Convert.ToInt32(d["h"]["ID"].ToString());   //ID ITR
                oDoc.Lines.BaseLine = i;
                
                oDoc.Lines.ItemCode = d["d"][i]["item_no"].ToString();
                oDoc.Lines.ItemDescription = d["d"][i]["item_description"].ToString();
                oDoc.Lines.WarehouseCode = d["h"]["TO"].ToString();
                oDoc.Lines.FromWarehouseCode = d["h"]["FROM"].ToString();
                oDoc.Lines.Quantity = Convert.ToDouble(d["d"][i]["qty"].ToString());

                oDoc.Lines.BatchNumbers.BatchNumber = d["d"][i]["batch"].ToString();
                oDoc.Lines.BatchNumbers.Quantity = Convert.ToDouble(d["d"][i]["qty"].ToString());
            }

            int status = oDoc.Add();

            if (status == 0)
            {
                callResponse.Code = "OK";
                callResponse.Description = "Success #" + company.GetNewObjectKey();
            }
            else
            {
                callResponse.Code = "ERROR";
                callResponse.Description = company.GetLastErrorCode().ToString() + " " + company.GetLastErrorDescription().ToString();
            };


            return Ok(callResponse);
        }

        callResponse.Code = "ERROR";
        callResponse.Description = "Failed to connect server ! ";
        return Ok(callResponse);
Sandra Rossi
  • 11,934
  • 5
  • 22
  • 48
Hendra
  • 13
  • 3

1 Answers1

0

Try

oDocumento = null;
oDocumento = Documents)SAPB1.myCompany.GetBusinessObject(BoObjectTypes.oDrafts);
oDocumento.DocObjectCode = BoObjectTypes.oStockTransfer;
buddemat
  • 4,552
  • 14
  • 29
  • 49
  • Hi, thanks for your help, but this code will make the document as "Draft", I want to create inventory transfer document with "Release" status. – Hendra Aug 01 '22 at 04:49