在SAP的FICO模块中,经常会遇到会计凭证跳号问题。
当我还是一个新手的时候,还是很害怕发生这样的恐怖事件。束手无策。
跳号问题分为三种级别:青铜、钻石、王者。
青铜:
这种跳号就是一个普通ST22的DUMP,通过跟踪函数NUMBER_GET_NEXT,设置好断点后调试,
查看到OBJECT 参数名字,然后到SNRO中和对应的表里如BKPF,BSEG找到对应的最大值,修改成MAX+1即可。
钻石:
有的时候是SCC1系统拷贝产生的大规模大批量的跳号。
挨个挨个打断点已经无法解决大集团下几百个公司的跳号囧境。这个时候就可以用到神器程序:
RFVBER00 查找出跳号的会计凭证
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 】 或者在这个链接联系我
微信原文《全文完》