‎2007 Oct 29 1:46 PM
Hi,
i use the FM: F4IF_INT_TABLE_VALUE_REQUEST for an own F4-Help.
My problem in this code is, that field MATNR in the ALV-Output
shows 15 char of matnr and 3 char of mtart in the alv-field matnr
and mtart has ####.
I don't know why. Before calling the FM, the itab value_t has the right values.
Has anyone an idea which mistake i do.
TABLES: MARA, MAKT.
*
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 01(33) T_MATNR.
PARAMETERS: P_MATNR LIKE MARA-MATNR.
SELECTION-SCREEN: END OF LINE.
*
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 01(33) T_MTART.
PARAMETERS: P_MTART LIKE MARA-MTART.
SELECTION-SCREEN: END OF LINE.
*
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 01(33) T_MAKTX.
PARAMETERS: P_MAKTX LIKE MAKT-MAKTX.
SELECTION-SCREEN: END OF LINE.
*
***********************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_MATNR.
*
Felder für F4 -> kurzfassung
DATA: BEGIN OF VALUE_T OCCURS 0,
MATNR TYPE MARA-MATNR,
MTART TYPE MARA-MTART,
MAKTX TYPE MAKT-MAKTX,
END OF VALUE_T.
*
DATA : DYNPFLD_T TYPE TABLE OF DSELC WITH HEADER LINE.
DATA : FIELD_T TYPE TABLE OF DFIES WITH HEADER LINE.
*
SELECT * FROM MARA UP TO 15 ROWS.
SELECT SINGLE * FROM MAKT WHERE MATNR = MARA-MATNR
AND SPRAS = SY-LANGU.
VALUE_T-MATNR = MARA-MATNR.
VALUE_T-MTART = MARA-MTART.
VALUE_T-MAKTX = MAKT-MAKTX.
APPEND VALUE_T.
ENDSELECT.
*
REFRESH FIELD_T.
FIELD_T-TABNAME = 'MARA'.
FIELD_T-FIELDNAME = 'MATNR'.
APPEND FIELD_T.
FIELD_T-TABNAME = 'MARA'.
FIELD_T-FIELDNAME = 'MTART'.
APPEND FIELD_T.
FIELD_T-TABNAME = 'MAKT'.
FIELD_T-FIELDNAME = 'MAKTX'.
APPEND FIELD_T.
*
REFRESH DYNPFLD_T.
DYNPFLD_T-FLDNAME = 'MATNR'.
DYNPFLD_T-DYFLDNAME = 'P_MATNR'.
APPEND DYNPFLD_T.
DYNPFLD_T-FLDNAME = 'MTART'.
DYNPFLD_T-DYFLDNAME = 'P_MTART'.
APPEND DYNPFLD_T.
DYNPFLD_T-FLDNAME = 'MAKTX'.
DYNPFLD_T-DYFLDNAME = 'P_MAKTX'.
APPEND DYNPFLD_T.
*
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'P_MATNR'
WINDOW_TITLE = 'Statusselektion'
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'P_MATNR'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = VALUE_T
FIELD_TAB = FIELD_T
DYNPFLD_MAPPING = DYNPFLD_T
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
*
***********************************************************************
INITIALIZATION.
*
T_MATNR = 'Materialnummer:'.
T_MTART = 'Materialart'.
T_MAKTX = 'Kurztext'.
*
Thanks for help.
Regards, Dieter
‎2007 Oct 29 2:03 PM
Also check this extract from the documentation of the FM
In this case it is better to fill table FIELD_TAB using module DDIF_FIELDINFO_GET. The relative position of the fields in VALUE_TAB should then be corrected in FIELD_TAB-OFFSET. You can use for example the ABAP command DESCRIBE DISTANCE here.DDIF_FIELDINFO_GET. The relative position of the fields in VALUE_TAB should then be corrected in FIELD_TAB-OFFSET. You can use for example the ABAP command DESCRIBE DISTANCE here.
‎2007 Oct 29 2:01 PM
Check this code
TABLES: MARA, MAKT.
*
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 01(33) T_MATNR.
PARAMETERS: P_MATNR LIKE MARA-MATNR.
SELECTION-SCREEN: END OF LINE.
*
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 01(33) T_MTART.
PARAMETERS: P_MTART LIKE MARA-MTART.
SELECTION-SCREEN: END OF LINE.
*
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 01(33) T_MAKTX.
PARAMETERS: P_MAKTX LIKE MAKT-MAKTX.
SELECTION-SCREEN: END OF LINE.
*
***********************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_MATNR.
*
Felder für F4 -> kurzfassung
DATA: BEGIN OF VALUE_T OCCURS 0,
MATNR LIKE MARA-MATNR,
MTART LIKE MARA-MTART,
MAKTX LIKE MAKT-MAKTX,
END OF VALUE_T.
*
DATA : DYNPFLD_T TYPE TABLE OF DSELC WITH HEADER LINE.
DATA : FIELD_T TYPE TABLE OF DFIES WITH HEADER LINE.
*
SELECT * FROM MARA UP TO 15 ROWS.
SELECT SINGLE * FROM MAKT WHERE MATNR = MARA-MATNR
AND SPRAS = SY-LANGU.
VALUE_T-MATNR = MARA-MATNR.
VALUE_T-MTART = MARA-MTART.
VALUE_T-MAKTX = MAKT-MAKTX.
APPEND VALUE_T.
ENDSELECT.
*
*REFRESH FIELD_T.
*FIELD_T-TABNAME = 'MARA'.
*FIELD_T-FIELDNAME = 'MATNR'.
*APPEND FIELD_T.
*
*FIELD_T-TABNAME = 'MARA'.
*FIELD_T-FIELDNAME = 'MTART'.
*APPEND FIELD_T.
*
*FIELD_T-TABNAME = 'MAKT'.
*FIELD_T-FIELDNAME = 'MAKTX'.
*APPEND FIELD_T.
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = 'VALUE_T'
FIELDNAME = ' '
LANGU = SY-LANGU
LFIELDNAME = ' '
ALL_TYPES = ' '
GROUP_NAMES = ' '
UCLEN =
IMPORTING
X030L_WA =
DDOBJTYPE =
DFIES_WA =
LINES_DESCR =
TABLES
DFIES_TAB = FIELD_T
FIXED_VALUES =
EXCEPTIONS
NOT_FOUND = 1
INTERNAL_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.
REFRESH DYNPFLD_T.
DYNPFLD_T-FLDNAME = 'MATNR'.
DYNPFLD_T-DYFLDNAME = 'P_MATNR'.
APPEND DYNPFLD_T.
DYNPFLD_T-FLDNAME = 'MTART'.
DYNPFLD_T-DYFLDNAME = 'P_MTART'.
APPEND DYNPFLD_T.
DYNPFLD_T-FLDNAME = 'MAKTX'.
DYNPFLD_T-DYFLDNAME = 'P_MAKTX'.
APPEND DYNPFLD_T.
*
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'MATNR'
WINDOW_TITLE = 'Statusselektion'
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'P_MATNR'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = VALUE_T
FIELD_TAB = FIELD_T[]
DYNPFLD_MAPPING = DYNPFLD_T
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
*
***********************************************************************
INITIALIZATION.
*
T_MATNR = 'Materialnummer:'.
T_MTART = 'Materialart'.
T_MAKTX = 'Kurztext'.
‎2007 Oct 29 2:03 PM
Also check this extract from the documentation of the FM
In this case it is better to fill table FIELD_TAB using module DDIF_FIELDINFO_GET. The relative position of the fields in VALUE_TAB should then be corrected in FIELD_TAB-OFFSET. You can use for example the ABAP command DESCRIBE DISTANCE here.DDIF_FIELDINFO_GET. The relative position of the fields in VALUE_TAB should then be corrected in FIELD_TAB-OFFSET. You can use for example the ABAP command DESCRIBE DISTANCE here.
‎2007 Oct 29 2:36 PM
Hi,
thanks for your answers, i solve it in this
way:
TABLES: MARA, MAKT.
*
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 01(33) T_MATNR.
PARAMETERS: P_MATNR LIKE MARA-MATNR.
SELECTION-SCREEN: END OF LINE.
*
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 01(33) T_MTART.
PARAMETERS: P_MTART LIKE MARA-MTART.
SELECTION-SCREEN: END OF LINE.
*
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 01(33) T_MAKTX.
PARAMETERS: P_MAKTX LIKE MAKT-MAKTX.
SELECTION-SCREEN: END OF LINE.
*
***********************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_MATNR.
*
Felder für F4 -> kurzfassung
DATA: BEGIN OF VALUE_T OCCURS 0,
MATNR TYPE MARA-MATNR,
MTART TYPE MARA-MTART,
MAKTX TYPE MAKT-MAKTX,
END OF VALUE_T.
*
DATA: DYNPFLD_T TYPE TABLE OF DSELC WITH HEADER LINE.
DATA: RETURN_T TYPE TABLE OF DDSHRETVAL.
*
SELECT * FROM MARA UP TO 15 ROWS.
SELECT SINGLE * FROM MAKT WHERE MATNR = MARA-MATNR
AND SPRAS = SY-LANGU.
VALUE_T-MATNR = MARA-MATNR.
VALUE_T-MTART = MARA-MTART.
VALUE_T-MAKTX = MAKT-MAKTX.
APPEND VALUE_T.
ENDSELECT.
*
REFRESH DYNPFLD_T.
DYNPFLD_T-FLDNAME = 'F0001'.
DYNPFLD_T-DYFLDNAME = 'P_MATNR'.
APPEND DYNPFLD_T.
DYNPFLD_T-FLDNAME = 'F0002'.
DYNPFLD_T-DYFLDNAME = 'P_MTART'.
APPEND DYNPFLD_T.
DYNPFLD_T-FLDNAME = 'F0003'.
DYNPFLD_T-DYFLDNAME = 'P_MAKTX'.
APPEND DYNPFLD_T.
*
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'MATNR'
WINDOW_TITLE = 'Statusselektion'
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'P_MATNR'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = VALUE_T
RETURN_TAB = RETURN_T
DYNPFLD_MAPPING = DYNPFLD_T
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
*
***********************************************************************
INITIALIZATION.
*
T_MATNR = 'Materialnummer:'.
T_MTART = 'Materialart'.
T_MAKTX = 'Kurztext'.
*
Regards, Dieter