ABAP 获取 状态的两个函数 STATUS_TEXT_EDIT 和 STATUS_READ 的简单介绍

本文详细介绍了在SAP中使用STATUS_READ和STATUS_TEXT_EDIT函数获取订单状态的方法,包括函数实现原理、具体用法及注意事项。重点展示了如何通过这些函数获取订单的当前状态,并通过实例演示了获取订单已关闭状态的过程。

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

在SAP中对于如何获取订单的状态,提供了至少两个函数(我自己知道的),分别是 STATUS_READ 和  STATUS_TEXT_EDIT。下面简单介绍这两个函数
1.STATUS_READ  改函数的实现原理大概是通过订单的对象好(OR+订单号) 到JEST中取出字段STAT INACT.
JEST表中STAT是一串从字面看不出意思的字符,可以根据STAT到表TJ02T中找到具体的描述。
下面是具体用法
DATA:objnr TYPE aufk-objnr.

objnr 'OR000000100014'.
DATA:t_status TYPE TABLE OF jstat WITH HEADER LINE.
"结果存放在STATUS表中
CALL FUNCTION 'STATUS_READ'
  EXPORTING
    client           sy-mandt
    objnr            objnr
  TABLES
    status           t_status
  EXCEPTIONS
    object_not_found 1
    OTHERS           2.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
LOOP AT t_status.
  IF t_status 'I0046'.
    WRITE:'订单已关闭'.
    EXIT.
  ENDIF.
ENDLOOP.

2.STATUS_TEXT_EDIT 改函数读取的结果是将订单状态拼接到一个字符串中,而且这个字符串是在前台订单上看到的状态,比较直接,这样做的结果就可能由于状态较多导致长度过长,在某些情况下取的数据可能不准。
下面是一段代码
DATA:line TYPE bsvx-sttxt.
CALL FUNCTION 'STATUS_TEXT_EDIT'
  EXPORTING
    client sy-mandt
    objnr  objnr
    spras  sy-langu
  IMPORTING
    line   line
  EXCEPTIONS
    object_not_found        1
    OTHERS       "
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

SEARCH line FOR 'CLSD'.
IF sy-subrc 0.
  WRITE:'订单已关闭'.
ENDIF.






DATA  i_jstat LIKE jstat OCCURS 0 WITH HEADER LINE.

     CALL FUNCTION 'STATUS_READ'
     EXPORTING
       client                 = sy-mandt
       objnr                  = i_caufv_resb-objnr   ”对象号
       only_active            = 'X'
*     IMPORTING
*       OBTYP                  =
*       STSMA                  =
*       STONR                  =
     TABLES
       status                 = i_jstat    “目前的所有状态
    EXCEPTIONS
      object_not_found       = 1
      OTHERS                 = 2.

LOOP AT i_jstat WHERE stat = 'I0013'  "DLT  删除标识符.
                     OR    stat = 'I0012'  "DLV  交货
                     OR    stat = 'I0045'  "TECO 技术实现
                     OR    stat = 'I0043'  "LKD  冻结
                     OR    stat = 'I0001'  "CRTD 建立
                     OR    stat = 'I0046'  "CLSD 已结算
                     OR    stat = 'I0076'. "DLID 删除标志
       l_delete = 'X'.
       EXIT.
     ENDLOOP.

 

REPORT zfind_edit_update. TABLES: zmard_copy. DATA: ok_code LIKE sy-ucomm, save_ok LIKE sy-ucomm, g_container TYPE scrfname VALUE ‘ALV_CONTAINER’, g_grid TYPE REF TO cl_gui_alv_grid, g_custom_container TYPE REF TO cl_gui_custom_container, gs_layout TYPE lvc_s_layo, gt_outtab TYPE TABLE OF zmard_copy, gt_original TYPE TABLE OF zmard_copy, " 存储原始数据用于比较 lv_modified TYPE abap_bool. " 标记是否有修改 CALL SCREEN 100 STARTING AT 1 1. MODULE pbo OUTPUT. SET PF-STATUS ‘MAIN100’. SET TITLEBAR ‘MAIN100’. IF g_custom_container IS INITIAL. CREATE OBJECT g_custom_container EXPORTING container_name = g_container. CREATE OBJECT g_grid EXPORTING i_parent = g_custom_container. gs_layout-edit = 'X'. SELECT * FROM zmard_copy INTO TABLE gt_outtab UP TO 1000 ROWS. " 保存原始数据用于后续比较 gt_original = gt_outtab. CALL METHOD g_grid->set_table_for_first_display EXPORTING i_structure_name = 'zmard_copy' is_layout = gs_layout CHANGING it_outtab = gt_outtab. CALL METHOD g_grid->set_ready_for_input EXPORTING i_ready_for_input = 1. ENDIF. ENDMODULE. MODULE pai INPUT. save_ok = ok_code. CLEAR ok_code. CASE save_ok. WHEN ‘EXIT’. PERFORM exit_program. WHEN ‘SWITCH’. PERFORM switch_edit_mode. WHEN ‘SAVE’. " 保存按钮处理 PERFORM save_data. WHEN OTHERS. " 处理其他事件 ENDCASE. ENDMODULE. FORM exit_program. LEAVE PROGRAM. ENDFORM. ---------------------------------------------------------------------- FORM switch_edit_mode. IF g_grid->is_ready_for_input( ) EQ 0. CALL METHOD g_grid->set_ready_for_input EXPORTING i_ready_for_input = 1. ELSE. CALL METHOD g_grid->set_ready_for_input EXPORTING i_ready_for_input = 0. ENDIF. ENDFORM. ---------------------------------------------------------------------- 保存数据的子过程(兼容版本) ---------------------------------------------------------------------- FORM save_data. DATA: gs_outtab TYPE zmard_copy, gs_original TYPE zmard_copy, lv_lines TYPE i. " 从ALV控件获取最新数据到内表 CALL METHOD g_grid->check_changed_data. " 检查是否有数据被修改 lv_modified = abap_false. LOOP AT gt_outtab INTO gs_outtab. READ TABLE gt_original INTO gs_original INDEX sy-tabix. IF gs_outtab <> gs_original. lv_modified = abap_true. EXIT. " 找到第一个修改就退出 ENDIF. ENDLOOP. IF lv_modified = abap_true. " 更新数据库 UPDATE zmard_copy FROM TABLE gt_outtab. IF sy-subrc = 0. COMMIT WORK. " 更新原始数据缓存 gt_original = gt_outtab. MESSAGE ‘数据已成功保存’ TYPE ‘S’. ELSE. ROLLBACK WORK. MESSAGE ‘数据保存失败’ TYPE ‘E’. ENDIF. ELSE. MESSAGE ‘没有数据被修改’ TYPE ‘I’. ENDIF. ENDFORM. 基于以上代码,增加如下要求,默认状态下禁止编辑,编辑状态下只有lgpbe可以编辑,其他字段(mandt,matnr,werks,lgort)均为主键始终为不可编辑状态
最新发布
08-06
<think>我们需要在原有代码基础上进行修改,以满足以下要求: 1. 默认状态下禁止编辑(即初始状态不可编辑) 2. 编辑状态下,只有lgpbe字段可以编辑,其他字段(mandt, matnr, werks, lgort)作为主键不可编辑。 实现思路: 1. 初始状态设置:在PBO模块中,我们创建ALV时,初始状态设置为不可编辑(通过`set_ready_for_input`传入0)。 2. 编辑状态切换:在切换编辑状态的FORM(switch_edit_mode)中,我们不仅要切换编辑状态,还要设置字段的可编辑属性。 3. 设置字段属性:我们需要在显示ALV之前设置字段属性,将主键字段设置为不可编辑(只读),而lgpbe字段在编辑状态下可编辑。 具体步骤: a. 在创建ALV时,定义一个字段目录(field catalog),并设置每个字段的编辑属性。 b. 在切换编辑模式时,根据当前状态重新设置字段的编辑属性(因为非编辑状态下所有字段都应该不可编辑,编辑状态下只有lgpbe可编辑)。 但是注意:我们可以在初始显示时设置好字段目录,然后在切换编辑模式时刷新ALV,以便应用新的字段属性。 然而,在ABAP中,我们可以通过修改字段目录的`edit`属性来控制字段是否可编辑。但是,一旦ALV显示后,修改字段目录需要刷新ALV。 因此,我们可以在切换编辑模式时,重新设置字段目录,然后刷新ALV。 但是,我们也可以这样:在初始显示时,设置字段目录,将主键字段设置为只读(不可编辑),lgpbe字段设置为可编辑(但此时整个ALV不可编辑,所以所有字段都不能编辑)。然后当我们切换到编辑模式时,将整个ALV设置为可编辑,这时lgpbe字段就会变成可编辑,而主键字段由于字段目录设置为只读,所以仍然不可编辑。 所以,我们可以通过以下方式: - 在创建ALV时,设置字段目录,将mandt, matnr, werks, lgort的`edit`属性设置为空(即不可编辑),将lgpbe的`edit`属性设置为'X'(可编辑)。 - 初始状态:ALV不可编辑(set_ready_for_input(0)),所以所有字段都不能编辑。 - 当切换到编辑模式时,我们调用set_ready_for_input(1),这时ALV进入编辑模式,但只有lgpbe字段可编辑(因为字段目录中只有它允许编辑)。 这样,我们就不需要在切换编辑模式时修改字段目录,只需要切换ALV的编辑状态即可。 修改代码: 1. 在创建ALV时,我们需要定义字段目录(field catalog)并设置每个字段的编辑属性。 2. 修改显示ALV的方法,使用字段目录。 注意:原代码中使用了`i_structure_name`,这样ALV会自动根据结构生成字段目录。现在我们需要自定义字段目录,所以不能使用`i_structure_name`,而是使用`it_fieldcatalog`。 因此,我们需要: - 定义一个字段目录内表:`gt_fcat TYPE lvc_t_fcat` - 用函数`LVC_FIELDCATALOG_MERGE`或者手动构建字段目录 由于我们只需要修改部分字段的属性,我们可以先根据结构生成字段目录,然后修改需要调整的字段。 步骤: 1. 声明字段目录内表:`DATA: gt_fcat TYPE lvc_t_fcat.` 2. 使用结构`zmard_copy`来生成字段目录(使用函数`LVC_FIELDCATALOG_MERGE`) 3. 循环字段目录,将主键字段(mandt, matnr, werks, lgort)的`edit`属性设置为空(即不可编辑),将lgpbe的`edit`属性设置为'X'(可编辑)。注意:在非编辑模式下,即使字段属性设置为可编辑,由于整个ALV不可编辑,所以字段还是不可编辑。当ALV可编辑时,只有lgpbe字段可编辑。 4. 在显示ALV时,使用字段目录内表。 另外,初始状态我们设置ALV不可编辑(set_ready_for_input(0)),所以一开始所有字段都不能编辑。 修改`PBO`模块中创建ALV的部分: 但是注意:我们还需要在切换编辑模式时,刷新ALV吗?实际上,我们不需要刷新字段目录,因为字段目录在创建时已经设置好,我们只需要改变ALV的编辑状态(通过set_ready_for_input)即可。 修改后的`PBO`模块: 同时,我们还需要注意:在切换编辑模式时,我们只需要调用`set_ready_for_input`来切换编辑状态,不需要刷新字段目录。 另外,在编辑状态下,用户修改了数据,保存时需要检查数据。我们已经在`save_data`中实现了。 修改代码: 1. 定义字段目录内表:在程序顶部添加`DATA: gt_fcat TYPE lvc_t_fcat.` 2. 在PBO模块中,创建ALV之前,生成字段目录并设置字段属性。 3. 修改`set_table_for_first_display`的调用,使用字段目录。 具体代码修改如下: 在数据声明部分添加: DATA: gt_fcat TYPE lvc_t_fcat. 修改PBO模块中的ALV创建部分: 由于我们使用了自定义字段目录,所以不再使用`i_structure_name`,而是传递`it_fieldcatalog`。 另外,我们还需要在每次刷新时都使用这个字段目录吗?实际上,我们只需要在第一次显示时设置即可。 修改后的PBO模块代码: ```abap MODULE pbo OUTPUT. SET PF-STATUS 'MAIN100'. SET TITLEBAR 'MAIN100'. IF g_custom_container IS INITIAL. CREATE OBJECT g_custom_container EXPORTING container_name = g_container. CREATE OBJECT g_grid EXPORTING i_parent = g_custom_container. " 准备字段目录 PERFORM prepare_fieldcatalog. gs_layout-edit = 'X'. " 允许编辑模式(但具体字段是否可编辑由字段目录控制) SELECT * FROM zmard_copy INTO TABLE gt_outtab UP TO 1000 ROWS. " 保存原始数据用于后续比较 gt_original = gt_outtab. " 显示ALV,使用字段目录 CALL METHOD g_grid->set_table_for_first_display EXPORTING is_layout = gs_layout it_fieldcatalog = gt_fcat " 使用自定义字段目录 CHANGING it_outtab = gt_outtab. " 初始状态设置为不可编辑 CALL METHOD g_grid->set_ready_for_input EXPORTING i_ready_for_input = 0. ENDIF. ENDMODULE. ``` 然后,我们需要编写`prepare_fieldcatalog`表单: ```abap FORM prepare_fieldcatalog. DATA: ls_fcat TYPE lvc_s_fcat. " 使用结构生成字段目录 CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' EXPORTING i_structure_name = 'ZMARD_COPY' CHANGING ct_fieldcat = gt_fcat EXCEPTIONS inconsistent_interface = 1 program_error = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. " 修改字段目录,设置编辑属性 LOOP AT gt_fcat INTO ls_fcat. CASE ls_fcat-fieldname. WHEN 'MANDT' OR 'MATNR' OR 'WERKS' OR 'LGORT'. " 主键字段设置为不可编辑 ls_fcat-edit = ''. " 空表示不可编辑 WHEN 'LGPBE'. " 设置lgpbe字段可编辑 ls_fcat-edit = 'X'. WHEN OTHERS. " 其他字段设置为不可编辑(如果需要) ls_fcat-edit = ''. " 不可编辑 ENDCASE. MODIFY gt_fcat FROM ls_fcat. ENDLOOP. ENDFORM. ``` 注意:这里将除了lgpbe以外的所有字段都设置为不可编辑。同时,主键字段(mandt, matnr, werks, lgort)也设置为不可编辑。 另外,在编辑状态下,当ALV可编辑时,只有lgpbe字段可编辑,因为其他字段的`edit`属性为假(空)。 这样,在切换编辑模式时,我们只需要调用`set_ready_for_input`方法切换即可,不需要修改字段目录。 但是,我们还需要注意:在非编辑模式下,即使字段目录中设置了可编辑,由于整个ALV不可编辑,所以字段还是不可编辑。当切换到编辑模式时,ALV可编辑,同时lgpbe字段可编辑,其他字段不可编辑。 因此,`switch_edit_mode`表单不需要修改,保持原样。 另外,在保存数据时,我们只更新了`gt_outtab`,然后与`gt_original`比较。由于我们只允许修改lgpbe字段,所以比较时只比较lgpbe字段?但是,我们比较的是整个结构,所以如果其他字段被修改(虽然不可能,因为不可编辑),也会被检测到。但是,由于我们设置了字段不可编辑,所以用户不可能修改其他字段,因此比较整个结构是安全的。 但是,注意:在ALV中,如果某个字段不可编辑,那么用户无法修改,所以内表中该字段的值不会改变。因此,我们不需要担心。 另外,在更新数据库时,我们使用了`UPDATE zmard_copy FROM TABLE gt_outtab.`,这要求表zmard_copy有主键,并且内表gt_outtab中的主键字段必须存在且唯一。由于我们不允许修改主键,所以主键不会变,因此更新是安全的。 最后,我们还需要注意:在保存成功后,我们更新了原始数据缓存(gt_original = gt_outtab),这样下一次修改时就可以正确比较。 修改后的完整代码: 由于原代码较长,这里只给出修改的部分,并标注出修改的地方。 修改点: 1. 在数据声明部分添加字段目录内表:`gt_fcat` 2. 在PBO模块中,创建ALV之前调用`PERFORM prepare_fieldcatalog.`,并修改ALV显示方法,使用`it_fieldcatalog = gt_fcat` 3. 在PBO模块中,初始状态设置为不可编辑(0) 4. 添加`prepare_fieldcatalog`表单 其他部分保持不变。 注意:在`prepare_fieldcatalog`中,我们使用循环设置每个字段的编辑属性。 但是,在ALV中,我们还需要考虑其他属性,比如技术字段(如MANDT)可能不需要显示。但题目没有要求,所以我们只设置编辑属性。 另外,我们也可以考虑将主键字段设置为不可输入(但显示),这符合要求。 最后,我们测试一下:初始状态不可编辑,点击编辑按钮(我们假设有一个按钮触发switch_edit_mode)后,ALV进入编辑模式,此时只有lgpbe字段可以编辑,其他字段不可编辑。 因此,修改后的代码应该满足要求。 由于原代码中已经有一个切换编辑模式的按钮('SWITCH'),所以我们可以使用这个按钮来切换。 但是,注意:在切换编辑模式时,我们只是改变了ALV的编辑状态,并没有修改字段目录,所以字段的编辑属性在创建时已经固定。 完整代码修改如下(只显示修改后的部分):</think>基于您提供的代码,我将实现以下要求: 1. 默认状态下禁止编辑 2. 编辑状态下只有LGPBE字段可编辑 3. 主键字段(MANDT, MATNR, WERKS, LGORT)始终不可编辑 以下是修改后的完整代码: ```abap REPORT zfind_edit_update. TABLES: zmard_copy. DATA: ok_code LIKE sy-ucomm, save_ok LIKE sy-ucomm, g_container TYPE scrfname VALUE 'ALV_CONTAINER', g_grid TYPE REF TO cl_gui_alv_grid, g_custom_container TYPE REF TO cl_gui_custom_container, gs_layout TYPE lvc_s_layo, gt_outtab TYPE TABLE OF zmard_copy, gt_original TYPE TABLE OF zmard_copy, " 存储原始数据用于比较 lv_modified TYPE abap_bool, " 标记是否有修改 gt_fcat TYPE lvc_t_fcat. " 字段目录 " 屏幕100的PBO模块 MODULE pbo OUTPUT. SET PF-STATUS 'MAIN100'. SET TITLEBAR 'MAIN100'. IF g_custom_container IS INITIAL. CREATE OBJECT g_custom_container EXPORTING container_name = g_container. CREATE OBJECT g_grid EXPORTING i_parent = g_custom_container. " 准备字段目录 PERFORM prepare_fieldcatalog. gs_layout-edit = 'X'. " 允许编辑模式 gs_layout-sel_mode = 'A'. " 允许行选择 " 从数据库获取数据 SELECT * FROM zmard_copy INTO TABLE gt_outtab UP TO 1000 ROWS. " 保存原始数据用于后续比较 gt_original = gt_outtab. " 显示ALV CALL METHOD g_grid->set_table_for_first_display EXPORTING is_layout = gs_layout it_fieldcatalog = gt_fcat " 使用自定义字段目录 CHANGING it_outtab = gt_outtab. " 初始状态设置为不可编辑 CALL METHOD g_grid->set_ready_for_input EXPORTING i_ready_for_input = 0. ENDIF. ENDMODULE. " 屏幕100的PAI模块 MODULE pai INPUT. save_ok = ok_code. CLEAR ok_code. CASE save_ok. WHEN 'EXIT'. PERFORM exit_program. WHEN 'SWITCH'. PERFORM switch_edit_mode. WHEN 'SAVE'. " 保存按钮处理 PERFORM save_data. WHEN OTHERS. " 处理其他事件 ENDCASE. ENDMODULE. " 退出程序 FORM exit_program. LEAVE PROGRAM. ENDFORM. " 切换编辑模式 FORM switch_edit_mode. IF g_grid->is_ready_for_input( ) EQ 0. " 进入编辑模式 CALL METHOD g_grid->set_ready_for_input EXPORTING i_ready_for_input = 1. ELSE. " 退出编辑模式 CALL METHOD g_grid->set_ready_for_input EXPORTING i_ready_for_input = 0. ENDIF. ENDFORM. " 准备字段目录 FORM prepare_fieldcatalog. DATA: ls_fcat TYPE lvc_s_fcat. " 使用结构生成字段目录 CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' EXPORTING i_structure_name = 'ZMARD_COPY' CHANGING ct_fieldcat = gt_fcat EXCEPTIONS inconsistent_interface = 1 program_error = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. " 修改字段属性:主键字段不可编辑,LGPBE可编辑 LOOP AT gt_fcat INTO ls_fcat. CASE ls_fcat-fieldname. WHEN 'MANDT' OR 'MATNR' OR 'WERKS' OR 'LGORT'. " 主键字段设置为不可编辑 ls_fcat-edit = ''. " 空表示不可编辑 WHEN 'LGPBE'. " LGPBE字段设置为可编辑 ls_fcat-edit = 'X'. WHEN OTHERS. " 其他字段设置为不可编辑 ls_fcat-edit = ''. " 不可编辑 ENDCASE. MODIFY gt_fcat FROM ls_fcat. ENDLOOP. ENDFORM. " 保存数据 FORM save_data. DATA: gs_outtab TYPE zmard_copy, gs_original TYPE zmard_copy, lv_lines TYPE i. " 从ALV控件获取最新数据到内表 CALL METHOD g_grid->check_changed_data. " 检查是否有数据被修改 lv_modified = abap_false. LOOP AT gt_outtab INTO gs_outtab. READ TABLE gt_original INTO gs_original INDEX sy-tabix. IF gs_outtab <> gs_original. lv_modified = abap_true. EXIT. " 找到第一个修改就退出 ENDIF. ENDLOOP. IF lv_modified = abap_true. " 更新数据库 UPDATE zmard_copy FROM TABLE gt_outtab. IF sy-subrc = 0. COMMIT WORK. " 更新原始数据缓存 gt_original = gt_outtab. MESSAGE '数据已成功保存' TYPE 'S'. ELSE. ROLLBACK WORK. MESSAGE '数据保存失败' TYPE 'E'. ENDIF. ELSE. MESSAGE '没有数据被修改' TYPE 'I'. ENDIF. ENDFORM. ``` ### 主要修改说明: 1. **字段目录控制编辑权限**: - 新增`gt_fcat`字段目录内表 - 在`PREPARE_FIELDCATALOG`子程序中: - 主键字段(MANDT, MATNR, WERKS, LGORT)设置`edit = ''`(不可编辑) - LGPBE字段设置`edit = 'X'`(可编辑) - 其他字段均设置为不可编辑 2. **默认禁止编辑**: ```abap " 初始状态设置为不可编辑 CALL METHOD g_grid->set_ready_for_input EXPORTING i_ready_for_input = 0. ``` 3. **编辑模式切换**: - 保留原有的`SWITCH_EDIT_MODE`功能 - 进入编辑模式后,只有LGPBE字段可编辑 4. **ALV显示使用字段目录**: ```abap CALL METHOD g_grid->set_table_for_first_display EXPORTING it_fieldcatalog = gt_fcat " 使用自定义字段目录 ``` ### 工作原理: 1. 程序初始化时创建字段目录,明确指定各字段编辑权限 2. ALV初始状态为不可编辑(`i_ready_for_input = 0`) 3. 用户点击切换按钮时,调用`set_ready_for_input`方法切换编辑状态 4. 在编辑模式下,只有LGPBE字段可编辑(由字段目录控制) 5. 保存时比较修改前后的数据,仅更新有变化的记录 ### 注意事项: 1. 字段目录中必须明确设置每个字段的编辑属性 2. 主键字段必须设为不可编辑,确保数据完整性 3. 使用`check_changed_data`方法确保获取ALV中最新的修改 4. 更新数据库时使用`UPDATE ... FROM TABLE`语法批量更新
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值