现在的位置: 首页 > 综合 > 正文

又是Number Ranger惹的祸(运行MRP时,ABAP Error,附解决代码)

2013年12月03日 ⁄ 综合 ⁄ 共 1289字 ⁄ 字号 评论关闭

问题产生:

     用生产系统覆测试系统后,运行MRP出现ABAP,查看错误信息,发现是主键冲突。

 

原因分析:

     这里涉及到的主键是预留号,可以预留号的Number Range 是Client相关的,故在测试系统里记录的还是原来的值,而生产系统中的值己大于测试系统中的啦,对应的业务数据是非Client相关的,这就会导致在测试系统中运行MRP时,会产生已经存在的预留号。

     原因找到了,下面着手解决。

 

问题解决:

    1. 最初想的比较简单,直接改了这个Number Range的当前值不就完了。于是打开表NRIV, 查得该Number Range所在行(RESB-01),改其值,保存。测试失败,查看错误信息,发现取得的RSNUM还是未改前的,即手工修改表没有生效。

    2. 于是狂查资料,也查不到这个Number Range还存在哪里,用SNRO查看,其当前状态已经是修改过的值了,但却不生效,SAP还真是复杂的呀,于是继续思过。

    3. 突然想起,虽然没生效,但是错误信息中的RSNUM还是大了的,从理论上讲,运行一次MRP,该数即可大一次,但是几千个号的差距,手工运行肯定累死了,好在咱是ABAPer,写个程序运行个几千次不就完了?!说干就干,于是写了个小程序,运行后,测试MRP运行OK,代码如下:

 

DATA: v_number LIKE mdsb-rsnum,
      v_quantity LIKE inri-quantity,
      v_returncode LIKE  inri-returncode.

WHILE v_number <'0000065000'.  " 要调整到的值  
  CALL FUNCTION 'NUMBER_GET_NEXT'
    EXPORTING
      nr_range_nr             = '01'
      object                  = 'RESB'
    IMPORTING
      number                  = v_number
      quantity                = v_quantity
      returncode              = v_returncode
    EXCEPTIONS
      interval_not_found      = 1
      number_range_not_intern = 2
      object_not_found        = 3
      quantity_is_0           = 4
      quantity_is_not_1       = 5
      interval_overflow       = 6
      buffer_overflow         = 7
      OTHERS                  = 8.

ENDWHILE.

 

附:计划订单Number Range Object Name: PLAF, 可用SNRO查看

抱歉!评论已关闭.