0

我需要使用我的自定义报告更新表中ICMSTAXPAY的此字段。KNA1所以,我尝试使用cmd_ei_api=>maintain_bapi来更新表格。但是,一旦我运行该程序,该特定字段就不会更新,我也不会收到任何错误消息。

我的逻辑:

  • 阅读 KNA1 条目。
  • 将必填字段编辑为我的值。
  • 将强制数据传递给 HEADER 以进行更新。
  • 将我的新 KNA1 条目传递给 CENTRAL_DATA。

从表中读取数据:

CALL METHOD cmd_ei_api_memory=>get_global_kna1
    EXPORTING
        iv_kunnr    = <lfs_final>-kunnr 
    IMPORTING
        es_kna1_old = ls_old.

更改字段的值:

ls_old-icmstaxpay = 9.

MOVE-CORRESPONDING ls_old TO ls_customer-central_data-central-data.

分配标题数据:

ls_customer-header-object_instance-kunnr = <lfs_final>-kunnr.
ls_customer-header-object_task  = 'U'.

将以上所有内容添加到主数据结构中:

APPEND ls_customer TO lt_customers[].        
ls_master_data-customers = lt_customers[].

传递数据并更新到表:

cmd_ei_api=>initialize( ).
    
LOOP AT lt_customers INTO ls_customer.
    cmd_ei_api=>lock( iv_kunnr = ls_customer-header-object_instance-kunnr ).
ENDLOOP.
    
" Update Customer with CMD_EI_API
CALL METHOD cmd_ei_api=>maintain_bapi
    EXPORTING
        iv_test_run    = space
        is_master_data = ls_master_data
    IMPORTING
        es_message_defective     = ls_message_defective.
    
IF ls_message_defective IS INITIAL.
    BREAK-POINT.
    COMMIT WORK.
ELSE.
    BREAK-POINT.
ENDIF.
    
LOOP AT lt_customers INTO ls_customer.
    cmd_ei_api=>unlock( iv_kunnr = ls_customer-header-object_instance-kunnr ) .
ENDLOOP.

当我调试时,我可以看到正在获取更新的条目是当前内存中存在的旧条目。

如果我在将值传递给表时做错了什么,请告诉我。

4

0 回答 0