如何在SAP B1中生成唯一ID /序列号?

时间:2011-04-13 17:05:22

标签: sap

我想知道是否有人知道SAP B1(SAP Business One)如何生成它在各种表中使用的唯一主键。我所谈论的例子包括 OCRD.DocEntry OCPR.CntctCode 。这些是“自动”递增的整数列。

这样做的典型方法包括标识列(例如,SQL Server),序列(例如,Oracle),或者保存以编程方式递增的Nextval的手动序列表。据我所知,B1并未对这些列使用任何这些技术。那怎么处理它们呢?

我正在查看的特定实例是使用SQL Server数据库。

是的,我很清楚我不需要知道有关内部工作的知识,不应该在数据库中捣乱等等。我只是在困扰我我知道他们是怎么做到的!如果有人能解释,我将不胜感激。

2 个答案:

答案 0 :(得分:3)

SAPB1使用ONNM表生成新的唯一编号。添加文档时会发生以下情况。

  • SQL事务处理开始
  • 使用更新锁
  • 从ONNM表中查询下一个号码
  • 使用新号码(+1)更新ONNM表。
  • 添加了文档
  • 已提交SQL事务。

使用更新锁运行SQL SELECT语句将返回当前行,同时锁定该行直到事务结束。您可以保证在您选择它和交易结束时,没有其他用户可以更改该行。

您可以使用SQL事件探查器来监视在SAP B1中执行操作时执行的语句。这是获取报价中使用的下一个数字的行。报价是ObjectType 23。

SELECT T0。* FROM [dbo]。[ONNM] T0 WITH(UPDLOCK)WHERE T0。[ObjectCode] ='23'

答案 1 :(得分:2)

SAP B1使用ONNM生成序列号。

它为在其中注册的每个对象维护一个自动键。并且将基于自动键序列号生成。 对于每个添加事件,此自动键将增加+1