本次年结支持过程中,一个客户的年结操作出现问题,问题的解决还颇费周折,稍稍记录一下。客户的SAP 版本是 S/4, 通过 FAA_CMP 事务码切换固定资产年度的时候,提示上一已关闭的会计年度与当前会计年度相同。
这个消息的意思是FI 的会计年度没有切换到新的年度,可以理解为 FAGLGVTR 没有运行或者没有运行成功。但运行 FAGLGVTR 的时候,如果只看科目的结转,看起来还是比较正常,但查看消息日志,SAP 提示部分资产切换年度失败:
可以看出,SAP 提示处理了 365 个固定资产,但哪些资产处理失败,究竟哪些资产存在问题,SAP 没有进一步说明。马上想到 SAP 有些事务码跟年度切换是相关的,比如 AR03,于是查看 AR03 报表,正好也是 365 个资产。将 AR03 报表数据与 SAP 的后台表 ANLH 对比,发现 ANLH 多出一些资产号码。这些资产号码分为两种情况,一种情况是只有资产号没有交易数据,另外是有一笔资产在 2022 年有交易数据,但 2023 年折旧存在问题。
查看该固定资产的几个关键字段,比如资本化日期、首次购置日期、购置年度、折旧开始日期等,果然发现资本化日期、首次购置日期、购置年度存在问题,字段值为空。资产年度切换原因基本找到了,但这几个字段中,除了资本化日期字段,其它字段都是灰色的,不能修改:
一般情况下,我不太喜欢直接修改后台表,所以让业务咨询 SAP 原厂,SAP 很快提供了一支程序,用于修改这三个字段,不知道程序是否是否是临时写的,但也体现了 SAP 的严谨性,有 test mode 和 production run 两种模式。
ANLA-ZUPER
ANLA-ZUGDT
ANLA-ZUJHR
以下是 SAP 提供的修改程序 ZACORR_ACQ_DATES_SET_ALL
*&---------------------------------------------------------------------*
*& Report ZACORR_ACQ_DATES_SET_ALL
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zacorr_acq_dates_set_all.
PARAMETERS: p_bukrs TYPE anla-bukrs OBLIGATORY,
p_anln1 TYPE anla-anln1 OBLIGATORY,
p_anln2 TYPE anla-anln2 OBLIGATORY,
p_zugdt TYPE anla-zugdt OBLIGATORY,
p_test AS CHECKBOX DEFAULT 'X'.
DATA: ls_anla TYPE anla,
ls_t001 TYPE t001,
ld_subrc TYPE sy-subrc.
SELECT SINGLE * FROM anla INTO ls_anla WHERE bukrs = p_bukrs
AND anln1 = p_anln1
AND anln2 = p_anln2.
IF sy-subrc NE 0.
WRITE:/ 'Asset does not exist', p_bukrs, p_anln1, p_anln2.
EXIT.
ENDIF.
SELECT SINGLE * FROM t001 INTO ls_t001 WHERE bukrs = p_bukrs.
IF sy-subrc NE 0.
WRITE:/ 'company code does not exist', p_bukrs.
EXIT.
ENDIF.
CALL FUNCTION 'DATE_TO_PERIOD_CONVERT'
EXPORTING
i_date = p_zugdt
* I_MONMIT = 00
i_periv = ls_t001-periv
IMPORTING
e_buper = ls_anla-zuper
e_gjahr = ls_anla-zujhr
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
WRITE:/'no period may be determined , error occured'.
EXIT.
ENDIF.
ls_anla-zugdt = p_zugdt.
IF p_test IS INITIAL.
WRITE:/ 'Production Run'.
WRITE:/ '=============='.
SKIP.
WRITE:/ 'The following values are changed:'.
SKIP.
ELSE.
WRITE:/ 'Test Run'.
WRITE:/ '========'.
SKIP .
WRITE:/ 'The following values would be changed in a production run'.
SKIP.
ENDIF.
WRITE:/ 'ANLA-ZUGDT:', ls_anla-zugdt.
WRITE:/ 'ANLA-ZUJHR:', ls_anla-zujhr.
WRITE:/ 'ANLA-ZUPER:', ls_anla-zuper.
IF p_test IS INITIAL.
UPDATE anla FROM ls_anla.
ld_subrc = sy-subrc.
COMMIT WORK.
IF ld_subrc EQ 0.
ld_subrc = sy-subrc.
ENDIF.
IF ld_subrc IS INITIAL.
SKIP.
修改之后,固定资产主数据这三个字段正常了:
各个年度的折旧也正常了:
FAGLGVTR 年度切换成功:
FAA_CMP 的年度也变更了: