问题:BAPI_OUTB_DELIVERY_CONFIRM_DEC 无法做PGI,
返回的subrc = 0 RETURN 是空的
但是前台VL02 PGI 是可以的
ST22查看系统dump 发现报错如下
经查 可通过note :2840883 - MIGO Dump related to inconsistent DB Table DAC_D_MATDOC
解决方式就是写一个Z的程序将下面程序布上去,执行后即可。
*&---------------------------------------------------------------------*
*& Report S4_XPRA_DAC_D_MATDOC
*&---------------------------------------------------------------------*
*& Template for XPRA programs based on guidelines from 2016
*& Data conversion guidelines are available at
*& https://wiki.wdf.sap.corp/wiki/x/OnNKbg
*&---------------------------------------------------------------------*
REPORT s4_xpra_dac_d_matdoc.
* This XPRA drops the index DAC_D_MATDOC~0 on the client field of table DAC_D_MATDOC.
* This drop is used to reduce memory consumption in the HANA DB which in general generates a concatenated key field for all keys
* Because DDIC requires the definition of keys and just one key field has been defined for this table duplicate record dumps would occur if data gets inserted.
* Therefore, this drop is required.
"--> coding deactivated as of 1902 because xpra is no longer required
"--> coding activated as of 1905 again since we need xpra when customer upgrade from FPS0, FPS1 1809OP
CONSTANTS: gc_logid TYPE upgba_logid VALUE sy-repid.
DATA: lv_subrc TYPE sy-subrc.
cl_upgba_logger=>create( EXPORTING iv_logid = gc_logid iv_logtype = cl_upgba_logger=>gc_logtype_tr ).
cl_upgba_logger=>log->cleanup( ).
* Ensure only privileged user are allowed to manually start the XPRA
* 1. check for SUM privilege
AUTHORITY-CHECK OBJECT 'S_ADMI_FCD' ID 'S_ADMI_FCD' FIELD 'SUM'.
IF sy-subrc NE 0.
* 2. check for application-specific (or developer privilege)
"authority-check object '<appl_auth_obj>' id '<appl_auth_id>' field '<auth_fld>'.
AUTHORITY-CHECK OBJECT 'S_DEVELOP'
ID 'DEVCLASS' FIELD '*'
ID 'OBJTYPE' FIELD 'PROG'
ID 'OBJNAME' FIELD sy-repid
ID 'P_GROUP' DUMMY "not required in this context
ID 'ACTVT' FIELD '02'.
IF sy-subrc NE 0.
MESSAGE e900(upgba) INTO cl_upgba_logger=>mv_logmsg.
cl_upgba_logger=>log->trace_single( ).
cl_upgba_logger=>log->close( ).
EXIT.
ENDIF.
ENDIF.
MESSAGE i034(upgba) WITH 'Starting to drop index DAC_D_MATDOC~0' sy-datum sy-uzeit INTO cl_upgba_logger=>mv_logmsg ##NO_TEXT.
cl_upgba_logger=>log->trace_single( ).
CALL FUNCTION 'DB_EXISTS_INDEX'
EXPORTING
tabname = 'DAC_D_MATDOC'
indexname = '0'
IMPORTING
subrc = lv_subrc
EXCEPTIONS
parameter_error = 1
OTHERS = 2.
IF lv_subrc = 0. "index exists --> drop
CLEAR lv_subrc.
CALL FUNCTION 'DB_DROP_INDEX'
EXPORTING
dbindex = 'DAC_D_MATDOC~0'
tabname = 'DAC_D_MATDOC'
IMPORTING
subrc = lv_subrc
EXCEPTIONS
index_not_dropped = 1
program_not_generated = 2
program_not_written = 3
OTHERS = 4.
IF sy-subrc <> 0 OR lv_subrc <> 0.
MESSAGE w601(pu) WITH 'Index not dropped' '(due to internal error)' sy-datum sy-uzeit INTO cl_upgba_logger=>mv_logmsg ##NO_TEXT.
cl_upgba_logger=>log->trace_single( iv_plevel = cl_upgba_logger=>gc_plevel_two iv_severity = cl_upgba_logger=>gc_post_process_rc ).
ELSE.
MESSAGE i034(upgba) WITH 'Index DAC_D_MATDOC~0 dropped' sy-datum sy-uzeit INTO cl_upgba_logger=>mv_logmsg ##NO_TEXT.
cl_upgba_logger=>log->trace_single( iv_plevel = cl_upgba_logger=>gc_plevel_two ).
ENDIF.
ELSE. "index not available, no drop
MESSAGE i601(pu) WITH 'Index does not exist.' 'Drop not necessary' sy-datum sy-uzeit INTO cl_upgba_logger=>mv_logmsg ##NO_TEXT.
cl_upgba_logger=>log->trace_single( iv_plevel = cl_upgba_logger=>gc_plevel_two ).
ENDIF.
cl_upgba_logger=>log->close( ).