ACDOCA VS BSEG

本文揭示了SAP S/4HANA中统一日记账ACDOCA的核心特性,包括集成多个财务模块、年末结转、数据结构差异和自定义字段管理。强调ACDOCA与BSEG的区别,尤其是在处理实际凭证与noteditems时的存储策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

>转自

安全验证 - 知乎

一种不会更新到ACDOCA中的财务凭证_noted item sap_SAP-nkGavin的博客-CSDN博客

关于统一日记账ACDOCA你必须知道的事

统一日记账(Universal Journal)是S/4HANA在财务领域最大的创新。它把原先分散的SAP财务模块数据,整合到了一个完全集成的后台表中,就是Table ACDOCA。

下图就展示了ACDOCA是如何将总账(General Ledger),利润中心会计(Profit Center Accounting),固定资产会计(Fixed Asset Accounting),物料账(Material Ledger),成本(Controlling),获利分析(Profitability Analysis)等各个财务子模块的数据集成到一起的。

这样一个集成的信息源,就能生成各式各样的报表:固定资产,库存,应收应付,利润,销售成本COGS),资产负债表,损益表等等。它也让以前ECC系统中的很多后台索引表(Index)和汇总表(Total)变得不再需要。

在本文中,我将就一些关键点,跟ECC的数据结构做一个比较。

1. ACDOCA里有的,BSEG里不一定有

以下的一些凭证行项目,都是只在ACDOCA表里面存在,而在BSEG表里不存在的(你可以通过BKPF表的BSTAT字段的凭证状态U来识别):

  • 资产折旧过账
  • 特定账套(Ledger)过账
  • 外币评估过账
  • CO内部凭证

2. 年末结转数字存储在ACDOCA的Period 000中

ACDOCA把上一年度的结转数放在Period 000中,这样便于计算YTD(year-to-date)数字,你不需要回去找上一年度末的数字。

3. ACDOCA的体量比BSEG大很多

ACDOCA表中的行项目数量可能会非常大,因为评分拆分,所有的行项目都被拆分到了最小的维度,再考虑到多个账套的存在,凭证行项目数量还要翻倍。

所以,从长期业务运行的角度,数据库大小和磁盘大小都需要提前考虑好。

4. 已归档的数据会在BKPF/BSEG中被删除,但在ACDOCA中依然存在

当你在财务模块中做数据归档时,对应数据会被从BKPF/BSEG表中删除。

然而,在ACDOCA表中,数据不会立刻被删除,而是添加一条反向的凭证到ACDOCA表里,让汇总余额为0。

要实际上删除ACDOCA中的数据,必须要执行Compression Run。

Compression Run是一个数据压缩的过程,它用汇总数据来替代明细数据。它的数据颗粒度就跟年末余额结转的颗粒度一致,对于余额不产生影响。

5. 对于同样的维度,BSEG和ACDOCA可能有差异

对于同一条记录的同一个字段,你可能会发现在BSEG和ACDOCA中的值可能会不一样。

例如,你可以在Entry View上,通过替代(Substitution)来修改Assignment字段(ZUONR)的值,但是它不一定会被拷贝到ACDOCA表里面。拷贝到ACDOCA是由BAdI BADI_FINS_ACDOC_BSEG_FIELDS控制的,所以当你在系统中做替代时,需要关注一下。

6. Coding Block中的自定义字段 - 集成到ACDOCA

当你在Coding Block中添加自定义字段的时候,自定义字段也会被增加到ACDOCA中。

但是,在各种凭证输入的场景中,这些自定义字段是如何被使用的,将取决于具体的定义。你在Table FINSC_ACDOC_FCT中,能看到这些自定义字段的各种属性。例如,自定义字段在以下各种流程的使用都是可以具体定义的:

  • 在损益类科目的年末结转中
  • 在资产负债类科目的年末结转中
  • 在科目余额中
  • 在科目报表中
  • 在科目余额评估时
  • 在对FI凭证做修改时
  • 在科目分摊时
  • 在汇总层级定义时

7. 很多时候,报表的数据需求会超越ACDOCA所能提供的信息

有时候报表不仅仅是关于财务细节的,它可能会混合其他维度,例如主数据中的字段,供应商名称,成本中心层次等。

所以,在报表设计时,你需要考虑使用SAP预建的一些CDS view,它们已经混合了ACDOCA的数据和其他维度的数据。并且对于新报表来说,应该尽量基于ACDOCA做开发,而不是BSEG。

其它

更精确的理解ACDOCA,应该意识到其是一个存储实际财务凭证(Actuals)的表,对于noted item(例如down payment request预付款请求凭证),并不会更新到ACDOCA中,而是仍然存储在BSEG中。

请见下例 (F-47创建一笔预付款请求)- 

 原因

对于注释项目noted item,其属于标记的项目,并不会产生直接的财务影响。

ACDOCA用于用于最终财务表报的出具,而BSEG仍然会存在并用于相关应收/应付(AP/R)流程凭证的记录,例如清账,付款,催款,预付款请求等操作。

在上例中,预付款请求凭证不会更新到ACDOCA中,但如果对于这个预付款请求发生的真实的付款动作,那么这个真实的付款凭证则会被更新至ACDOCA中。

更简单的理解,可以认为一笔真实的财务凭证,一定是有借有贷的。

小结

统一日记账ACDOCA整合了财务模型,但BSEG仍然会用于相关财务流程中数据的存储,对于Item级别的凭证数据,应当结合ACDOCA和BSEG查看数据。

但在ACDOCA中并没有这个FI凭证的记录 - 

FUNCTION ZZFI_GET_ACDOCA_HDATA. *"---------------------------------------------------------------------- ""本地接口: *" IMPORTING *" VALUE(I_TYPE) TYPE CHAR1 *" EXPORTING *" VALUE(E_RTYPE) TYPE BAPI_MTYPE *" VALUE(E_RTMSG) TYPE MSGTXT *" TABLES *" I_DATA STRUCTURE ZSFIH0022 *" T_DATAS STRUCTURE ZSFIH0023 *" T_LINE STRUCTURE ZSFIH0024 *"---------------------------------------------------------------------- INCLUDE ZFUNC_TOP. "RFC日志管理-定义抬头文件 INCLUDE ZFUNC_BEGIN. "RFC日志管理-记录接收数据 DATA:LS_DATAS TYPE ZSFIH0023, LS_LINE TYPE ZSFIH0024. DATA:N TYPE I. CASE I_TYPE. WHEN '1'. IF I_DATA[] IS NOT INITIAL. SELECT RBUKRS,GJAHR,BELNR,DOCLN,RACCT,RTCUR,HBKID,TSL INTO TABLE @DATA(LT_ACDOCA) FROM ACDOCA FOR ALL ENTRIES IN @I_DATA WHERE RBUKRS = @I_DATA-RBUKRS AND GJAHR = @I_DATA-GJAHR AND POPER = @I_DATA-POPER AND RACCT = @I_DATA-RACCT AND HBKID = @I_DATA-HBKID. LOOP AT LT_ACDOCA INTO DATA(LS_ACDOCA). MOVE-CORRESPONDING LS_ACDOCA TO LS_DATAS. LS_DATAS-JSSUM = LS_ACDOCA-TSL. COLLECT LS_DATAS INTO T_DATAS. ENDLOOP. IF T_DATAS[] IS NOT INITIAL. N = LINES( T_DATAS[] ). E_RTYPE = 'S'. MESSAGE S013(ZSD01) WITH N INTO E_RTMSG . ENDIF. ENDIF. WHEN '2'. IF I_DATA[] IS NOT INITIAL. SELECT RBUKRS,GJAHR,BELNR,DOCLN,RACCT,BUDAT,LIFNR,KUNNR,RTCUR,TSL,SGTXT,ZZYHLSH,ZUONR,PRCTR,PPRCTR,AUGDT INTO TABLE @DATA(LT_ACDOCA1) FROM ACDOCA FOR ALL ENTRIES IN @I_DATA WHERE RBUKRS = @I_DATA-RBUKRS • AND GJAHR = @I_DATA-GJAHR • AND POPER = @I_DATA-POPER AND BUDAT <= @I_DATA-BUDAT AND RACCT = @I_DATA-RACCT AND ( AUGBL = '' OR AUGDT > @I_DATA-BUDAT ). TYPES: BEGIN OF ty_acdoca_bseg, bukrs TYPE acdoca-rbukrs, "公司代码 gjahr TYPE acdoca-gjahr, "会计年度 belnr TYPE acdoca-belnr, "凭证编号 hkont TYPE acdoca-racct, "科目编号 buzei TYPE numc3, "处理后行号(DOCLN后三位) END OF ty_acdoca_bseg. DATA: lt_acdoca_bseg TYPE TABLE OF ty_acdoca_bseg. LOOP AT lt_acdoca1 ASSIGNING FIELD-SYMBOL(<ls_acdoca>). APPEND VALUE #( bukrs = <ls_acdoca>-rbukrs gjahr = <ls_acdoca>-gjahr belnr = <ls_acdoca>-belnr hkont = <ls_acdoca>-racct buzei = CONV numc3( <ls_acdoca>-docln+3(3) ) ) TO lt_acdoca_bseg. ENDLOOP. IF lt_acdoca_bseg IS NOT INITIAL. SELECT bukrs, gjahr, belnr, hkont, buzei, zfbdt INTO TABLE @DATA(lt_bseg) FROM bseg FOR ALL ENTRIES IN @lt_acdoca_bseg WHERE bukrs = @lt_acdoca_bseg-bukrs AND gjahr = @lt_acdoca_bseg-gjahr AND belnr = @lt_acdoca_bseg-belnr AND hkont = @lt_acdoca_bseg-hkont AND buzei = @lt_acdoca_bseg-buzei. ENDIF. IF LT_ACDOCA1 IS NOT INITIAL. SELECT PARTNER,NAME_ORG1 INTO TABLE @DATA(LT_BUT000) FROM BUT000 FOR ALL ENTRIES IN @LT_ACDOCA1 WHERE PARTNER = @LT_ACDOCA1-LIFNR OR PARTNER = @LT_ACDOCA1-KUNNR. ENDIF. LOOP AT LT_ACDOCA1 INTO DATA(LS_ACDOCA1) WHERE BELNR+0(1) <> 'B'. MOVE-CORRESPONDING LS_ACDOCA1 TO LS_DATAS. LS_DATAS-JSSUM = LS_ACDOCA1-TSL. COLLECT LS_DATAS INTO T_DATAS. DATA(lv_buzei) = CONV numc3( LS_ACDOCA1-DOCLN+3(3) ). MOVE-CORRESPONDING LS_ACDOCA1 TO LS_LINE. LS_LINE-DZUONR = LS_ACDOCA1-ZUONR. "D20250417 ADD FOR zuonr,prctr,pprctr字段映射 BY 彭伟鑫 START LS_LINE-PRCTR = LS_ACDOCA1-PRCTR."D20250417 ADD FOR zuonr,prctr,pprctr字段映射 BY 彭伟鑫 START LS_LINE-PPRCTR = LS_ACDOCA1-PPRCTR."D20250417 ADD FOR zuonr,prctr,pprctr字段映射 BY 彭伟鑫 START READ TABLE LT_BSEG INTO DATA(LS_BSEG)"D20250417 ADD FOR 从BSEG获取DZFBDT BY 彭伟鑫 START WITH KEY BUKRS = LS_ACDOCA1-RBUKRS GJAHR = LS_ACDOCA1-GJAHR BELNR = LS_ACDOCA1-BELNR HKONT = LS_ACDOCA1-RACCT buzei = lv_buzei. IF sy-subrc EQ 0. LS_LINE-DZFBDT = LS_BSEG-ZFBDT. ENDIF. "D20250417 ADD FOR 从BSEG获取DZFBDT BY 彭伟鑫 START READ TABLE LT_BUT000 INTO DATA(LS_BUT000) WITH KEY PARTNER = LS_ACDOCA1-LIFNR. IF SY-SUBRC EQ 0. LS_LINE-NAME1 = LS_BUT000-NAME_ORG1. LS_LINE-LIFNR = |{ LS_LINE-LIFNR ALPHA = OUT }|. ELSE. READ TABLE LT_BUT000 INTO LS_BUT000 WITH KEY PARTNER = LS_ACDOCA1-KUNNR. IF SY-SUBRC EQ 0. LS_LINE-NAME1 = LS_BUT000-NAME_ORG1. LS_LINE-KUNNR = |{ LS_LINE-KUNNR ALPHA = OUT }|. ENDIF. ENDIF. APPEND LS_LINE TO T_LINE. ENDLOOP. IF T_LINE[] IS NOT INITIAL. N = LINES( T_LINE[] ). E_RTYPE = 'S'. MESSAGE S013(ZSD01) WITH N INTO E_RTMSG . ENDIF. ENDIF. ENDCASE. IF E_RTYPE NE 'S'. E_RTYPE = 'E'. E_RTMSG = '无数据传输'. ENDIF. PERFORM UPDATE_STATUS IN PROGRAM ZFUNC USING LV_ZZ_LOG_ID E_RTYPE E_RTMSG. "lv_zz_log_id固定,e_code,e_msg按照实际情况返回。 INCLUDE ZFUNC_END. "RFC日志管理-记录返回数据 ENDFUNCTION. 分析这段代码
05-30
FUNCTION ZZFI_GET_ACDOCA_HDATA. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(I_TYPE) TYPE CHAR1 *" EXPORTING *" VALUE(E_RTYPE) TYPE BAPI_MTYPE *" VALUE(E_RTMSG) TYPE MSGTXT *" TABLES *" I_DATA STRUCTURE ZSFIH0022 *" T_DATAS STRUCTURE ZSFIH0023 *" T_LINE STRUCTURE ZSFIH0024 *"---------------------------------------------------------------------- INCLUDE ZFUNC_TOP. "RFC日志管理-定义抬头文件 INCLUDE ZFUNC_BEGIN. "RFC日志管理-记录接收数据 DATA:LS_DATAS TYPE ZSFIH0023, LS_LINE TYPE ZSFIH0024. DATA:N TYPE I. CASE I_TYPE. WHEN '1'. IF I_DATA[] IS NOT INITIAL. SELECT RBUKRS,GJAHR,BELNR,DOCLN,RACCT,RTCUR,HBKID,TSL INTO TABLE @DATA(LT_ACDOCA) FROM ACDOCA FOR ALL ENTRIES IN @I_DATA WHERE RBUKRS = @I_DATA-RBUKRS AND GJAHR = @I_DATA-GJAHR AND POPER = @I_DATA-POPER AND RACCT = @I_DATA-RACCT AND HBKID = @I_DATA-HBKID. LOOP AT LT_ACDOCA INTO DATA(LS_ACDOCA). MOVE-CORRESPONDING LS_ACDOCA TO LS_DATAS. LS_DATAS-JSSUM = LS_ACDOCA-TSL. COLLECT LS_DATAS INTO T_DATAS. ENDLOOP. IF T_DATAS[] IS NOT INITIAL. N = LINES( T_DATAS[] ). E_RTYPE = 'S'. MESSAGE S013(ZSD01) WITH N INTO E_RTMSG . ENDIF. ENDIF. WHEN '2'. IF I_DATA[] IS NOT INITIAL. SELECT RBUKRS,GJAHR,BELNR,DOCLN,RACCT,BUDAT,LIFNR,KUNNR,RTCUR,TSL,SGTXT,ZZYHLSH,ZUONR,PRCTR,PPRCTR,AUGDT,DRCRK INTO TABLE @DATA(LT_ACDOCA1) FROM ACDOCA FOR ALL ENTRIES IN @I_DATA WHERE RBUKRS = @I_DATA-RBUKRS * AND GJAHR = @I_DATA-GJAHR * AND POPER = @I_DATA-POPER AND BUDAT <= @I_DATA-BUDAT AND RACCT = @I_DATA-RACCT AND ( AUGBL = '' OR AUGDT > @I_DATA-BUDAT ). TYPES: BEGIN OF ty_acdoca_bseg, bukrs TYPE acdoca-rbukrs, "公司代码 gjahr TYPE acdoca-gjahr, "会计年度 belnr TYPE acdoca-belnr, "凭证编号 hkont TYPE acdoca-racct, "科目编号 buzei TYPE numc3, "处理后行号(DOCLN后三位) END OF ty_acdoca_bseg. DATA: lt_acdoca_bseg TYPE TABLE OF ty_acdoca_bseg. LOOP AT lt_acdoca1 ASSIGNING FIELD-SYMBOL(<ls_acdoca>). APPEND VALUE #( bukrs = <ls_acdoca>-rbukrs gjahr = <ls_acdoca>-gjahr belnr = <ls_acdoca>-belnr hkont = <ls_acdoca>-racct buzei = CONV numc3( <ls_acdoca>-docln+3(3) ) ) TO lt_acdoca_bseg. ENDLOOP. IF lt_acdoca_bseg IS NOT INITIAL. SELECT bukrs, gjahr, belnr, hkont, buzei, zfbdt INTO TABLE @DATA(lt_bseg) FROM bseg FOR ALL ENTRIES IN @lt_acdoca_bseg WHERE bukrs = @lt_acdoca_bseg-bukrs AND gjahr = @lt_acdoca_bseg-gjahr AND belnr = @lt_acdoca_bseg-belnr AND hkont = @lt_acdoca_bseg-hkont AND buzei = @lt_acdoca_bseg-buzei. ENDIF. IF LT_ACDOCA1 IS NOT INITIAL. SELECT PARTNER,NAME_ORG1 INTO TABLE @DATA(LT_BUT000) FROM BUT000 FOR ALL ENTRIES IN @LT_ACDOCA1 WHERE PARTNER = @LT_ACDOCA1-LIFNR OR PARTNER = @LT_ACDOCA1-KUNNR. ENDIF. LOOP AT LT_ACDOCA1 INTO DATA(LS_ACDOCA1) WHERE BELNR+0(1) <> 'B'. CLEAR ls_datas. MOVE-CORRESPONDING LS_ACDOCA1 TO LS_DATAS. "根据借贷方向调整金额 CASE LS_ACDOCA1-DRCRK. WHEN 'S'. " 借方 LS_DATAS-JSSUM = LS_ACDOCA1-TSL. " 正数 WHEN 'H'. " 贷方 LS_DATAS-JSSUM = -1 * LS_ACDOCA1-TSL. " 负数 WHEN OTHERS. LS_DATAS-JSSUM = LS_ACDOCA1-TSL. " 默认正数 ENDCASE. COLLECT LS_DATAS INTO T_DATAS. " 自动按关键字段汇总净额 ENDLOOP. LOOP AT LT_ACDOCA1 INTO LS_ACDOCA1 WHERE BELNR+0(1) <> 'B'. CLEAR ls_line. MOVE-CORRESPONDING LS_ACDOCA1 TO LS_LINE. DATA(lv_buzei) = CONV numc3( LS_ACDOCA1-DOCLN+3(3) ). READ TABLE LT_BSEG INTO DATA(LS_BSEG)"D20250417 ADD FOR 从BSEG获取DZFBDT BY 彭伟鑫 START WITH KEY BUKRS = LS_ACDOCA1-RBUKRS GJAHR = LS_ACDOCA1-GJAHR BELNR = LS_ACDOCA1-BELNR HKONT = LS_ACDOCA1-RACCT buzei = lv_buzei. IF sy-subrc EQ 0. LS_LINE-DZFBDT = LS_BSEG-ZFBDT. ENDIF. "D20250417 ADD FOR 从BSEG获取DZFBDT BY 彭伟鑫 START READ TABLE LT_BUT000 INTO DATA(LS_BUT000) WITH KEY PARTNER = LS_ACDOCA1-LIFNR. IF SY-SUBRC EQ 0. LS_LINE-NAME1 = LS_BUT000-NAME_ORG1. LS_LINE-LIFNR = |{ LS_LINE-LIFNR ALPHA = OUT }|. ELSE. READ TABLE LT_BUT000 INTO LS_BUT000 WITH KEY PARTNER = LS_ACDOCA1-KUNNR. IF SY-SUBRC EQ 0. LS_LINE-NAME1 = LS_BUT000-NAME_ORG1. LS_LINE-KUNNR = |{ LS_LINE-KUNNR ALPHA = OUT }|. ENDIF. ENDIF. APPEND LS_LINE TO T_LINE. ENDLOOP. IF T_LINE[] IS NOT INITIAL. N = LINES( T_LINE[] ). E_RTYPE = 'S'. MESSAGE S013(ZSD01) WITH N INTO E_RTMSG . ENDIF. ENDIF. ENDCASE. IF E_RTYPE NE 'S'. E_RTYPE = 'E'. E_RTMSG = '无数据传输'. ENDIF. PERFORM UPDATE_STATUS IN PROGRAM ZFUNC USING LV_ZZ_LOG_ID E_RTYPE E_RTMSG. "lv_zz_log_id固定,e_code,e_msg按照实际情况返回。 INCLUDE ZFUNC_END. "RFC日志管理-记录返回数据 ENDFUNCTION.分析这串代码
最新发布
05-31
### 验证 SAP 数据表 BSEG 中字段 ZUONR 和 PRPS-PSPHI 的关系 在 SAP 系统中,`BSEG` 表存储了财务凭证的行项目数据,而 `PRPS` 表则用于存储项目的结构层次信息。要验证 `BSEG-ZUONR` 字段与 `PRPS-PSPHI` 字段之间的关系是否正确,可以从以下几个方面入手: #### 1. **理解字段含义** - `ZUONR`: 在 `BSEG` 表中代表分配号,通常用于关联其他业务对象(如采购订单、合同等)。其具体意义取决于科目配置中的排序码设置[^5]。 - `PSPHI`: 在 `PRPS` 表中表示工作细分结构 (WBS Element),主要用于项目管理模块。 两者的关系通常是通过特定的业务逻辑建立起来的,例如当创建一个与项目相关的财务凭证时,系统会自动将 WBS 元素 (`PSPHI`) 映射到分配号 (`ZUONR`) 上。 #### 2. **验证方法** ##### 方法一:SQL 查询验证 可以通过 SQL 查询的方式直接对比两个字段的数据一致性。以下是示例代码: ```sql SELECT b.zuonr, p.pspid, p.psphi FROM bseg AS b INNER JOIN prps AS p ON b.bukrs = p.kokrs AND b.prctr = p.prctr WHERE b.gjahr = '2023' -- 替换为具体的年度 AND b.bukrs = '1000'; -- 替换为具体的公司代码 ``` 上述查询假设 `BSEG.PRCTR` (利润中心)作为两者的共同键之一,并且 `BSEG.ZUONR` 应该等于 `PRPS.PSPHI` 或者存在某种映射关系。 ##### 方法二:事务代码 SE16N/SE16 利用标准事务代码 `SE16N` 或 `SE16` 手动查看数据的一致性。输入条件如下: - 对于 `BSEG` 表,筛选出目标期间内的记录; - 对应的 `PRPS` 表,则需提供相同的利润中心或其他匹配条件。 比较结果集中 `ZUONR` 是否对应至有效的 `PSPHI` 值。 ##### 方法三:ABAP 报表开发 编写自定义 ABAP 程序实现更复杂的校验逻辑。以下是一个简单的程序框架: ```abap REPORT zvalidate_bseg_prps. DATA: lt_bseg TYPE TABLE OF bseg, ls_bseg LIKE LINE OF lt_bseg, lt_prps TYPE TABLE OF prps, ls_prps LIKE LINE OF lt_prps. START-OF-SELECTION. SELECT bukrs gjahr belnr zeile zuonr INTO CORRESPONDING FIELDS OF TABLE lt_bseg FROM bseg WHERE gjahr = '2023'. LOOP AT lt_bseg INTO ls_bseg. SELECT SINGLE kokrs psphi INTO CORRESPONDING FIELDS OF ls_prps FROM prps WHERE kokrs = ls_bseg-bukrs AND prctr = ls_bseg-prctr. IF sy-subrc NE 0 OR ls_prps-psphi <> ls_bseg-zuonr. WRITE: / 'Mismatch found:', ls_bseg-belnr, ls_bseg-zeile, ls_bseg-zuonr, ls_prps-psphi. ENDIF. ENDLOOP. ``` 此脚本遍历指定时间段内的所有 `BSEG` 记录并尝试找到对应的 `PRPS` 条目。如果发现不一致的情况,则输出错误消息。 #### 3. **注意事项** 尽管可以直接访问 `BSEG` 表,但在 S/4HANA 环境下推荐优先考虑使用透明表 `ACDOCA` 取代传统集群表 `BSEG`,因为后者性能较差且维护成本高[^4]。此外,在设计任何涉及大规模读取的操作前,请务必评估索引策略以及可能存在的锁争用风险[^2]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值