我需要使用我的自定义报告更新表中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.
当我调试时,我可以看到正在获取更新的条目是当前内存中存在的旧条目。
如果我在将值传递给表时做错了什么,请告诉我。