如何解决会计凭证跳号的一点思考。NUMBER RANGE青铜钻石和王者的区分。

在SAP的FICO模块中,经常会遇到会计凭证跳号问题。

当我还是一个新手的时候,还是很害怕发生这样的恐怖事件。束手无策。

跳号问题分为三种级别:青铜、钻石、王者。

 

青铜:

这种跳号就是一个普通ST22的DUMP,通过跟踪函数NUMBER_GET_NEXT,设置好断点后调试,

查看到OBJECT 参数名字,然后到SNRO中和对应的表里如BKPF,BSEG找到对应的最大值,修改成MAX+1即可。

 

钻石:

有的时候是SCC1系统拷贝产生的大规模大批量的跳号。

挨个挨个打断点已经无法解决大集团下几百个公司的跳号囧境。这个时候就可以用到神器程序:

RFVBER00 查找出跳号的会计凭证

RFVBER00 查找出跳号的会计凭证
神器1:RFVBER00 查找出跳号的会计凭证

RFBNUM00N 看是否有间隙。

神器2:RFBNUM00N 看是否有间隙。
神器2:RFBNUM00N 看是否有间隙。

有了1和2,凭证的跳号号码段都会被系统认真分析出来。免去了人工匹配各种VLOOK UP和EXCEL透视图的痛苦。

 

王者:

在曾经的S4/HANA升级之战中,F-02发生过奇怪的事情

出现了DUMP DBSQL_DUPLICATE_KEY_ERROR CX_SY_OPEN_SQL_DB SAPLKAUP CO-OM

出错表为COBK.

之所以是王者跳号dump是因为这个凭证的可怕之处是进行了“数值”到“字母”的转换。

调用方法:CL_FINS_ACDOC_AUXILIARY_DOCNO=》GET_AUXILIARY_DOCNO

TRANSFORM_NUM12_TO_CHAR08

表COBK的凭证是A开头的。但是NUMBER RANGE里面是配置编号。

找到了这个规则之后,我们调用SNRO,查看对象ACDOCA_AUX。

修改成合理的凭证编号之后,万事大吉~成功生成了相关的凭证~

附NUMBER RANGE报错处详细代码:

METHOD get_auxiliary_docno.

DATA:
lv_number           TYPE num12,
lv_quantity         TYPE inri-quantity,
lv_returncode       TYPE inri-returncode,
ls_prima_nota       TYPE gs_ty_prima_nota,
ls_buffer_aux_docno TYPE gs_ty_aux_docno.

*   Pre-Condition: At least AWREF in Prima Nota must be filled
ASSERT iv_awref IS NOT INITIAL.

*   Read Buffer
ls_prima_nota-awtyp = iv_awtyp.
ls_prima_nota-awsys = iv_awsys.
ls_prima_nota-aworg = iv_aworg.
ls_prima_nota-awref = iv_awref.

READ TABLE gt_aux_docno INTO ls_buffer_aux_docno
WITH TABLE KEY prima_nota = ls_prima_nota.
IF sy-subrc = 0.
rv_aux_docno = ls_buffer_aux_docno-aux_docno.
EXIT.
ENDIF.

*   Get next auxiliary via number object: 12 digits
CALL FUNCTION ‘NUMBER_GET_NEXT’
EXPORTING
nr_range_nr        = ’01’
object             = gc_aux_number_object
IMPORTING
number             = lv_number
quantity           = lv_quantity
returncode         = lv_returncode
EXCEPTIONS
interval_not_found = 1
OTHERS             = 2.

*   It may happen that number range does not exist at the 1st time
*   Create the default number range and try it again
IF sy-subrc = 1.
create_number_range( ).
CALL FUNCTION ‘NUMBER_GET_NEXT’
EXPORTING
nr_range_nr = ’01’
object      = gc_aux_number_object
IMPORTING
number      = lv_number
quantity    = lv_quantity
returncode  = lv_returncode
EXCEPTIONS
OTHERS      = 2.
ENDIF.

*   Error handling
IF sy-subrc = 2.
cm_fins_post=>raise_symsg( ib_is_resumable = abap_false ).
ENDIF.

*   Now the number range must work, and we must have received a valid number
*   Otherwise ==> Dump
ASSERT sy-subrc = 0.
ASSERT lv_returncode = 0.
ASSERT lv_quantity = 1.

*   Transformation: 12 digits into 8 character
rv_aux_docno = transform_num12_to_char08( lv_number ).

*   Fill the last 2 character with ’00’
rv_aux_docno+8(2) = ’00’.

*   Put number into buffer
ls_buffer_aux_docno-prima_nota = ls_prima_nota.
ls_buffer_aux_docno-aux_docno = rv_aux_docno.
INSERT ls_buffer_aux_docno INTO TABLE gt_aux_docno.
ASSERT sy-subrc = 0.
ENDMETHOD.

本文链接 http://www.hot583.com/2022/05/31/document-number-range/

本文为作者原创,如果这篇文章对您有用,欢迎转载,

转载请务必注明来源《今日热点在看》http://www.hot583.com/

我的微信公众号【 hot583 】 或者在这个链接联系我

微信原文《全文完》

今日热点在看SAP HOT583