01-27-2015 7:04 PM
Hi Every One,
I am new to abap and need help with this.
I am trying to a do a dynamic search help with select options in a selection screen. My requirement is = displaying vbap-posnr ('item no') based on the first field vbak-vbeln (sales order).
if i input sales-order-low without sales-order-high, I should get item values belonging to only sales-order-low and viceversa.
Similarly, if I give a range in select-options, all the items belonging to that sales order should be displayed.
Below is the code that I have given, but it does not give any values. Need help with this code to achive my requirementt.
tables: vbak, vbap.
TYPES: BEGIN OF ty_vbap,
vbeln type vbak-vbeln,
posnr type vbap-posnr
END OF ty_vbap.
*--------------------------------------------------------------*
*Data Declaration
*--------------------------------------------------------------*
DATA: gwa_posnr TYPE ty_vbap,
gt_posnr TYPE TABLE OF ty_vbap.
DATA: gt_return TYPE TABLE OF ddshretval,
gwa_return TYPE ddshretval.
DATA: gwa_dynpfields TYPE dynpread,
gt_dynpfields TYPE TABLE OF dynpread.
DATA: gv_vbeln TYPE vbak-vbeln.
*--------------------------------------------------------------*
*Selection-Screen
*--------------------------------------------------------------*
SELECT-OPTIONS: SLS_OR TYPE VBAK-VBELN.
PARAMETERS: ITEM_NO TYPE VBAP-POSNR.
*--------------------------------------------------------------*
*Selection-Screen on Value-Request
*--------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FORITEM_NO.
REFRESH gt_dynpfields.
gwa_dynpfields-fieldname = 'SLS_OR-LOW'.
APPEND gwa_dynpfields TO gt_dynpfields.
*Get plant value on the selection screen
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
TABLES
dynpfields = gt_dynpfields
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
READ TABLE gt_dynpfields INTO gwa_dynpfields
WITH KEY fieldname = 'SLS_OR-LOW'.
IF sy-subrc = 0.
gv_VBELN = gwa_dynpfields-fieldvalue.
ENDIF.
*Get values from the database based on plant
SELECT a~VBELN
b~POSNR
INTO TABLE gt_POSNR
FROM VBAK AS a
INNER JOIN VBAP AS b
ON a~VBELN = b~VBELN
WHERE B~POSNR = GV_VBELN.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'POSNR'
value_org = 'S'
DYNPROFIELD = 'SLS_OR-LOW'
TABLES
value_tab = gt_POSNR
return_tab = gt_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
READ TABLE gt_return INTO gwa_return INDEX 1.
IF sy-subrc = 0.
ITEM_NO = gwa_return-fieldval.
ENDIF.
01-27-2015 8:25 PM
hi mack,
there were many mistakes your code.
Now it seems to be working. have a look.
tables: vbak, vbap.
TYPES: BEGIN OF ty_vbap,
vbeln type vbak-vbeln,
posnr type vbap-posnr,
END OF ty_vbap.
*--------------------------------------------------------------*
*Data Declaration
*--------------------------------------------------------------*
DATA: gwa_posnr TYPE ty_vbap,
gt_posnr TYPE TABLE OF ty_vbap.
DATA: gt_return TYPE TABLE OF ddshretval,
gwa_return TYPE ddshretval.
DATA: gwa_dynpfields TYPE dynpread,
gt_dynpfields TYPE TABLE OF dynpread.
DATA: gv_vbeln TYPE vbak-vbeln.
*--------------------------------------------------------------*
*Selection-Screen
*--------------------------------------------------------------*
SELECT-OPTIONS: SLS_OR FOR VBAK-VBELN.
PARAMETERS: ITEM_NO TYPE VBAP-POSNR.
*--------------------------------------------------------------*
*Selection-Screen on Value-Request
*--------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR ITEM_NO.
REFRESH gt_dynpfields.
gwa_dynpfields-fieldname = 'SLS_OR-LOW'.
APPEND gwa_dynpfields TO gt_dynpfields.
*Get plant value on the selection screen
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
TABLES
dynpfields = gt_dynpfields
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
READ TABLE gt_dynpfields INTO gwa_dynpfields
WITH KEY fieldname = 'SLS_OR-LOW'.
IF sy-subrc = 0.
gv_VBELN = gwa_dynpfields-fieldvalue.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = gv_VBELN
IMPORTING
OUTPUT = gv_VBELN
.
*Get values from the database based on plant
SELECT a~VBELN
b~POSNR
INTO TABLE gt_POSNR
FROM VBAK AS a
INNER JOIN VBAP AS b
ON a~VBELN = b~VBELN
WHERE B~VBELN = GV_VBELN.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'POSNR'
value_org = 'S'
DYNPROFIELD = 'ITEM_NO'
TABLES
value_tab = gt_POSNR
return_tab = gt_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
READ TABLE gt_return INTO gwa_return INDEX 1.
IF sy-subrc = 0.
ITEM_NO = gwa_return-fieldval.
ENDIF.
01-27-2015 8:25 PM
hi mack,
there were many mistakes your code.
Now it seems to be working. have a look.
tables: vbak, vbap.
TYPES: BEGIN OF ty_vbap,
vbeln type vbak-vbeln,
posnr type vbap-posnr,
END OF ty_vbap.
*--------------------------------------------------------------*
*Data Declaration
*--------------------------------------------------------------*
DATA: gwa_posnr TYPE ty_vbap,
gt_posnr TYPE TABLE OF ty_vbap.
DATA: gt_return TYPE TABLE OF ddshretval,
gwa_return TYPE ddshretval.
DATA: gwa_dynpfields TYPE dynpread,
gt_dynpfields TYPE TABLE OF dynpread.
DATA: gv_vbeln TYPE vbak-vbeln.
*--------------------------------------------------------------*
*Selection-Screen
*--------------------------------------------------------------*
SELECT-OPTIONS: SLS_OR FOR VBAK-VBELN.
PARAMETERS: ITEM_NO TYPE VBAP-POSNR.
*--------------------------------------------------------------*
*Selection-Screen on Value-Request
*--------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR ITEM_NO.
REFRESH gt_dynpfields.
gwa_dynpfields-fieldname = 'SLS_OR-LOW'.
APPEND gwa_dynpfields TO gt_dynpfields.
*Get plant value on the selection screen
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
TABLES
dynpfields = gt_dynpfields
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
READ TABLE gt_dynpfields INTO gwa_dynpfields
WITH KEY fieldname = 'SLS_OR-LOW'.
IF sy-subrc = 0.
gv_VBELN = gwa_dynpfields-fieldvalue.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = gv_VBELN
IMPORTING
OUTPUT = gv_VBELN
.
*Get values from the database based on plant
SELECT a~VBELN
b~POSNR
INTO TABLE gt_POSNR
FROM VBAK AS a
INNER JOIN VBAP AS b
ON a~VBELN = b~VBELN
WHERE B~VBELN = GV_VBELN.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'POSNR'
value_org = 'S'
DYNPROFIELD = 'ITEM_NO'
TABLES
value_tab = gt_POSNR
return_tab = gt_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
READ TABLE gt_return INTO gwa_return INDEX 1.
IF sy-subrc = 0.
ITEM_NO = gwa_return-fieldval.
ENDIF.
01-29-2015 5:23 PM
01-27-2015 8:25 PM
For starters, the WHERE clause is incorrect. It should be:
WHERE b~vbeln = gv_vbeln.
Rob
01-27-2015 8:35 PM
Additionally, before the SELECT, you will have to add:
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gv_vbeln
IMPORTING
output = gv_vbeln.
Rob
01-28-2015 4:37 AM
HI
I have done same thing in my report..
check below logic for your ref..
REPORT zreport.
*Structure declaration
TYPES: BEGIN OF ty_posnr,
vbeln TYPE vbeln,
posnr TYPE vbap-posnr,
END OF ty_posnr.
*internal table creatioin
DATA:t_posnr TYPE STANDARD TABLE OF ty_posnr INITIAL SIZE 0.
DATA: t_dyn TYPE TABLE OF dynpread,
w_dyn TYPE dynpread.
DATA: g_vbeln TYPE likp-vbeln,
g_posnr LIKE vbap-posnr.
*Selection screen
SELECTION-SCREEN BEGIN OF BLOCK b1.
SELECT-OPTIONS: s_vbeln FOR g_vbeln NO INTERVALS NO-EXTENSION ,
s_posnr FOR g_posnr NO INTERVALS NO-EXTENSION .
SELECTION-SCREEN END OF BLOCK b1.
*At selection screen on event
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_posnr-low.
PERFORM f4_help.
*&---------------------------------------------------------------------*
*& Form f4_help
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f4_help .
w_dyn-fieldname = 'S_VBELN-LOW'.
APPEND w_dyn TO t_dyn.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = '1000'
* translate_to_upper = 'X'
* REQUEST = ' '
* PERFORM_CONVERSION_EXITS = 'X'
* PERFORM_INPUT_CONVERSION = 'X'
* DETERMINE_LOOP_INDEX = ' '
* START_SEARCH_IN_CURRENT_SCREEN = ' '
* START_SEARCH_IN_MAIN_SCREEN = ' '
* START_SEARCH_IN_STACKED_SCREEN = ' '
* START_SEARCH_ON_SCR_STACKPOS = ' '
* SEARCH_OWN_SUBSCREENS_FIRST = ' '
* SEARCHPATH_OF_SUBSCREEN_AREAS = ' '
TABLES
dynpfields = t_dyn
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CLEAR w_dyn.
READ TABLE t_dyn INTO w_dyn WITH KEY fieldname = 'S_VBELN-LOW' .
IF sy-subrc = 0.
SELECT vbeln
posnr
FROM vbap
INTO TABLE t_posnr
WHERE vbeln = w_dyn-fieldvalue.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'POSNR'
* pvalkey = ''
dynpprog = sy-repid
dynpnr = '1000'
dynprofield = 'S_POSNR-LOW'
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
value_org = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
value_tab = t_posnr
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
* EXCEPTIONS
* PARAMETER_ERROR = 1
* NO_VALUES_FOUND = 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.
ENDFORM. " f4_help
regards
laxman