使用默认编号插入项目

2020-09-24 13:28发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我正在将SAP 9.2与UI和D...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在将SAP 9.2与UI和DI API和C#一起使用。 我需要一个一个地插入项目,但会自动在后台插入,而无需显示该项目的任何UI表单。 我了解我需要使用SDK进行此操作。 像这样。

公共项InsertItem(InsertItemParameters p)
 {
     SAPbobsCOM.Items newItem = oCompany.GetBusinessObject(BoObjectTypes.oItems);

     var itemCode ="在这里获得自动增量?";
     newItem.ItemCode = itemCode;
    
     newItem.ItemType = p.ItemType;
     newItem.ItemsGroupCode = p.ItmsGroupCod;
     如果(p.ItemName!= null)
         newItem.ItemName = p.ItemName;
     如果(p.SWW!= null)
         newItem.SWW = p.SWW;
     如果(p.SuppCatNum!= null)
         newItem.SupplierCatalogNo = p.SuppCatNum;
     如果(p.BuyUnitMsr!= null)
         newItem.PurchaseUnit = p.BuyUnitMsr;
     如果(p.PurPackMsr!= null)
         newItem.PurchasePackagingUnit = p.PurPackMsr;
     如果(p.SalUnitMsr!= null)
         newItem.SalesUnit = p.SalUnitMsr;
    
     int res = newItem.Add();
     如果(res!= 0)
     {
         int errorCode = 0;
         字符串errorDesc ="";
         oCompany.GetLastError(out errorCode,out errorDesc);
         如果(errorCode == -10 && errorDesc.Contains("已经存在"))
         {
             抛出新的InsertFailedException($" ItemCode自动递增失败。ItemCode:{itemCode}");
         }

         抛出新的InsertFailedException("插入项目失败(" + errorCode +"," + errorDesc +")。基于" + newItem.ToString());
     }

    //检查newItem.ItemCode是否有效->插入并返回?
     返回null;
 } 

我的问题是ItemCode,如何使用SDK进行设置,以便保留默认编号?

我试图找到一种解决方案,但我发现的只是这个。: https://stackoverflow.com/a/8798397/840315

理论上,我应该只使用sdk运行查询,但是我查看了ONNM表,对于对象类型4(项主数据),存储的值(自动键)为28779,而最新的键用于 当前的项目为38767。同样,令我困扰的是,即使数字匹配,我也应该对ONNM表运行此查询,并将Item插入事务中。

是否可以从SDK请求新的ItemCode? 像这样:

 oCompany.GetNewNumber(int objectCode); 

编辑。

好的,我发现NNM1表保存了正确的下一个号码。 我是自己运行更新还是有任何SDK方法?

Edit2。:

我以某种方式想出了如何获取当前号码,现在我只需要以某种方式对其进行递增。.在事务内部:(

 SeriesService seriesService = oCompany.GetCompanyService()。GetBusinessService(ServiceTypes.SeriesService);
             DocumentTypeParams typeParams = seriesService.GetDataInterface(SeriesServiceDataInterfaces.ssdiDocumentTypeParams);
             typeParams.Document =" 4";
             系列series = seriesService.GetDefaultSeries(typeParams);

             var itemCode ="" + series.NextNumber;
             newItem.ItemCode = itemCode;