以上是表象。 业务觉得奇怪,客户名称对不上,
S_ALR_87012172对报表进行跟踪
发现 Fi_compandycode_getdetail 取的是地址里面的名称 不是 表t001里面的名称
FUNCTION FI_COMPANYCODE_GETDETAIL .
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(BUKRS_INT) LIKE T001R_BF-BUKRS
*" VALUE(AUTHORITY_CHECK) TYPE XFLAG DEFAULT 'X'
*" EXPORTING
*" VALUE(T001_INT) LIKE T001_BF STRUCTURE T001_BF
*" TABLES
*" T001Z_INT STRUCTURE T001Z_BF
*" EXCEPTIONS
*" BUKRS_NOT_FOUND
*" NO_AUTHORITY_DISPLAY_BUKRS
*"----------------------------------------------------------------------
TABLES: T001Z,
T001J.
DATA: ls_adrs_sel TYPE addr1_sel. "n3206415
DATA: ls_adrs_data TYPE addr1_val. "n3206415
DATA: lv_nation TYPE ad_nation. "n3206415
DATA: lv_application TYPE ad_dtel VALUE 'FI_AP'. "n3206415
CLEAR T001_INT.
* Bearbeitung der angeforderten Daten
IF AUTHORITY_CHECK = 'X'.
PERFORM CHECK_AUTHORITY_T001.
ENDIF.
* company code
CALL FUNCTION 'FI_COMPANY_CODE_DATA'
EXPORTING
I_BUKRS = BUKRS_INT
IMPORTING
E_T001 = T001
EXCEPTIONS
ERROR_MESSAGE = 1
OTHERS = 2.
IF SY-SUBRC NE 0.
** Buchungskreis existiert nicht.
MESSAGE E020(FN) WITH BUKRS_INT RAISING BUKRS_NOT_FOUND.
ENDIF.
* Zuweisung des Inhalts in die Struktur T001Z_INT
MOVE-CORRESPONDING T001 TO T001_INT.
"Begin "n3206415
ls_adrs_sel-addrnumber = t001-adrnr.
cl_iav_mapping_util=>get_nation_key_for_lang(
EXPORTING iv_langu = sy-langu
iv_application_component = lv_application
IMPORTING ev_nation = lv_nation ).
ls_adrs_sel-nation = lv_nation.
IF ls_adrs_sel-addrnumber IS NOT INITIAL.
CALL FUNCTION 'ADDR_GET'
EXPORTING
address_selection = ls_adrs_sel
IMPORTING
address_value = ls_adrs_data
EXCEPTIONS
address_not_exist = 1
version_not_exist = 2.
IF sy-subrc = 0.
" check length of adrc fields and shorten them if necessary
" (adrs_data-name1 and adrs_data-city1 are C(40) fields while t001_int-butxt andt001_int-ort01 are just C(25)
IF strlen( ls_adrs_data-name1 ) > 25.
ls_adrs_data-name1 = ls_adrs_data-name1+0(24).
ls_adrs_data-name1 = ls_adrs_data-name1 && '.'.
ENDIF.
t001_int-butxt = ls_adrs_data-name1.
IF strlen( ls_adrs_data-city1 ) > 25.
ls_adrs_data-city1 = ls_adrs_data-city1+0(24).
ls_adrs_data-city1 = ls_adrs_data-city1 && '.'.
ENDIF.
t001_int-ort01 = ls_adrs_data-city1.
ENDIF.
ENDIF.
"End "n3206415
* Bearbeitung der Tabelle T001Z_INT
LOOP AT T001Z_INT.
* Parameterwert lesen
CLEAR T001Z.
SELECT SINGLE * FROM T001Z
WHERE BUKRS = BUKRS_INT
AND PARTY = T001Z_INT-PARTY.
T001Z_INT-PAVAL = T001Z-PAVAL.
T001Z_INT-SUBRC = SY-SUBRC.
* Parameterbeschreibung lesen
IF T001Z_INT-SPRAS IS INITIAL.
T001Z_INT-SPRAS = SY-LANGU.
ENDIF.
CLEAR T001J.
SELECT SINGLE * FROM T001J
WHERE SPRAS = T001Z_INT-SPRAS
AND PARTY = T001Z_INT-PARTY.
T001Z_INT-TXT30 = T001J-TXT30.
MODIFY T001Z_INT.
ENDLOOP.
ENDFUNCTION.
FORM CHECK_AUTHORITY_T001.
TABLES: TDDAT.
DATA: ACTIVITY(2) TYPE C VALUE '03'.
SELECT SINGLE * FROM TDDAT WHERE TABNAME = 'V_T001'.
IF SY-SUBRC NE 0 OR TDDAT-CCLASS EQ SPACE.
TDDAT-CCLASS = '&NC&'. " 'non classified table'
ENDIF.
AUTHORITY-CHECK OBJECT 'S_TABU_DIS' "check by class
ID 'ACTVT' FIELD ACTIVITY
ID 'DICBERCLS' FIELD TDDAT-CCLASS.
IF SY-SUBRC NE 0. "no authority
** Keine Berechtigung, Buchungskreise anzuzeigen
MESSAGE E000(FN) RAISING NO_AUTHORITY_DISPLAY_BUKRS.
ENDIF.
ENDFORM. " CHECK_AUTHORITY_T001
更正方案 修改 公司地址里面的名称
spro->企业接口->定义-> 财务会计->编辑,复制,删除,检查公司代码->编辑公司代码数据
转到->地址