2013 Aug 22 1:27 PM
Hello,
I have a problem with a dynpro:
I fill in a value into field "zmepo_badi_9000-ateil" with the help of:
PROCESS ON VALUE-REQUEST.
FIELD zmepo_badi_9000-ateil
MODULE suchhilfe_ateil. (the complete dynpro implementation see below: "Module SUCHHILFE_ATEIL INPUT")
I get a value into the field zmepo_badi_9000-ateil (F4 help with FB 'F4IF_INT_TABLE_VALUE_REQUEST') immediatly!! That works.
But in "MODULE suchhilfe_ateil" I also want to fill in a value into field zmepo_badi_9000-z_zielpreis (bold text below).
That works only after pushing ENTER (I think that`s PAI). But I would like that the value of zmepo_badi_9000-z_zielpreis appears immediatly (similar to zmepo_badi_9000-ateil). Is that possible? I hope anybody can help me. Thank you.
*----------------------------------------------------------------------*
***INCLUDE LZMEPOBADIEXI02 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module SUCHHILFE_ATEIL INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE suchhilfe_ateil INPUT.
DATA: ls_ekko TYPE ekko,
lv_netwr_eur(16) TYPE p DECIMALS 2.
CLEAR ls_ekko.
TYPES: BEGIN OF t_ateil,
ateil TYPE zco_pc4a-ateil,
pspnr TYPE zco_pc4a-pspnr,
kstar TYPE zco_pc4a-kstar,
menge TYPE zco_pc4a-menge,
wertz TYPE zco_pc4a-wertz,
ktext TYPE zco_pc4a_text-ktext,
ltext TYPE zco_pc4a_text-ltext,
waers TYPE zco_pc4a-waers,
END OF t_ateil.
DATA: ateil TYPE zco_pc4a-ateil.
CLEAR ateil.
DATA: it_return TYPE ddshretval OCCURS 10.
DATA: it_return2 TYPE ddshretval OCCURS 10.
DATA: ls_return TYPE ddshretval.
DATA: ls_ateil TYPE t_ateil,
it_ateil TYPE STANDARD TABLE OF t_ateil.
DATA: BEGIN OF dynpfields OCCURS 0. "Hilfsstruktur zum auslesen des akt.
INCLUDE STRUCTURE dynpread. "Feldwertes vom Dynpro bei >F4<
DATA: END OF dynpfields.
REFRESH it_ateil. REFRESH it_return. CLEAR ls_return.
******************************************************
* --> Selektion der A-Teile anhand des PSP-Elements
******************************************************
SELECT * FROM zco_pc4a INTO CORRESPONDING FIELDS OF ls_ateil
WHERE pspnr = zmepo_badi_9000-z_pspnr.
APPEND ls_ateil TO it_ateil.
ENDSELECT.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'ATEIL'
* PVALKEY = ' '
* dynpprog = sy-repid
* dynpnr = sy-dynnr
* DYNPROFIELD = ' '
* window_title = text-001
* VALUE = ' '
value_org = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* CALLBACK_METHOD =
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
value_tab = it_ateil
return_tab = it_return
* DYNPFLD_MAPPING =
* EXCEPTIONS
* PARAMETER_ERROR = 1
* NO_VALUES_FOUND = 2
* OTHERS = 3
.
LOOP AT it_return INTO ls_return.
zmepo_badi_9000-ateil = ls_return-fieldval.
zmepo_badi_9000-z_kstar = ls_ateil-kstar.
zmepo_badi_9000-z_wertz = ls_ateil-wertz.
IF ls_ateil-wertz IS NOT INITIAL.
IF zmepo_badi_9000-z_zielpreis IS INITIAL.
IF ls_ateil-waers NE 'EUR' AND ls_ateil-waers IS NOT INITIAL .
SELECT SINGLE * FROM ekko INTO ls_ekko WHERE ebeln = zmepo_badi_9000-z_ebeln.
* WAE umrechnen in EUR
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
date = ls_ekko-bedat
foreign_amount = '23' "ls_ekko-wertz
foreign_currency = ls_ekko-waers
local_currency = 'EUR'
rate = ls_ekko-wkurs
IMPORTING
local_amount = lv_netwr_eur
EXCEPTIONS
no_rate_found = 1
overflow = 2
no_factors_found = 3
no_spread_found = 4
derived_2_times = 5
OTHERS = 6.
if sy-subrc = 0.
zmepo_badi_9000-z_wertz = lv_netwr_eur.
zmepo_badi_9000-z_zielpreis = zmepo_badi_9000-z_wertz.
modify SCREEN.
endif.
ENDIF.
ENDIF.
ENDIF.
EXIT.
ENDLOOP.
ENDMODULE. " SUCHHILFE_ATEIL INPUT
PROCESS BEFORE OUTPUT.
MODULE event_pbo.
MODULE screen_9000.
PROCESS AFTER INPUT.
FIELD zmepo_badi_9000-z_zielpreis
MODULE daten_pruefen_9000_zp ON REQUEST.
FIELD zmepo_badi_9000-z_bestang
MODULE daten_pruefen_9000_ba ON REQUEST.
FIELD zmepo_badi_9000-z_altpreis
MODULE daten_pruefen_9000_ap ON REQUEST.
* MODULE zielpreis.
MODULE event_pai.
PROCESS ON VALUE-REQUEST.
FIELD zmepo_badi_9000-ateil
MODULE suchhilfe_ateil.
2013 Aug 23 8:32 AM
Hello, thank you it works with
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
EXPORTING
functioncode = '/00'
EXCEPTIONS
function_not_supported = 1.
But I have another problem:
I select data with:
SELECT * FROM zco_pc4a INTO CORRESPONDING FIELDS OF ls_ateil
WHERE pspnr = zmepo_badi_9000-z_pspnr.
APPEND ls_ateil TO it_ateil.
ENDSELECT.
With F4IF_INT_TABLE_VALUE_REQUEST I get the value of ATEIL back (selection of an internal table).
That works. But I want to have to get back more than one field of F4IF_INT_TABLE_VALUE_REQUEST.
At the moment I get the value of ATEIL, but I also want to get the value of KSTAR.
Can you please tell me how to get the value of KSTAR.
Thank you very much.
Hello, thank you it works with
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
EXPORTING
functioncode = '/00'
EXCEPTIONS
function_not_supported = 1.
But I have another problem:
I select data with:
SELECT * FROM zco_pc4a INTO CORRESPONDING FIELDS OF ls_ateil
WHERE pspnr = zmepo_badi_9000-z_pspnr.
APPEND ls_ateil TO it_ateil.
ENDSELECT.
With F4IF_INT_TABLE_VALUE_REQUEST I get the value of ATEIL back (selection of an internal table).
That works. But I want to have to get back more than one field of F4IF_INT_TABLE_VALUE_REQUEST.
At the moment I get the value of ATEIL, but I also want to get the value of KSTAR.
Can you please tell me how to get the value of KSTAR.
Thank you very much.
2013 Aug 23 3:53 AM
2013 Aug 23 4:17 AM
Hi Kevin,
Please try the function module 'DYNP_VALUES_UPDATE'. See the sample code below.
TYPES:
BEGIN OF l_x_names,
uname TYPE uname,
END OF l_x_names.
DATA:
l_i_names TYPE STANDARD TABLE OF l_x_names INITIAL SIZE 0,
l_wa_names TYPE l_x_names,
l_i_field_tab TYPE STANDARD TABLE OF dfies INITIAL SIZE 0,
l_i_return_tab TYPE STANDARD TABLE OF ddshretval INITIAL SIZE 0,
l_wa_return_tab TYPE ddshretval,
l_i_dynpfld_mapping TYPE STANDARD TABLE OF dselc INITIAL SIZE 0.
l_wa_names-uname = 'TEST1'.
APPEND l_wa_names TO l_i_names.
l_wa_names-uname = 'TEST2'.
APPEND l_wa_names TO l_i_names.
l_wa_names-uname = 'TEST3'.
APPEND l_wa_names TO l_i_names.
l_wa_names-uname = 'TEST4'.
APPEND l_wa_names TO l_i_names.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'UNAME'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = p_retfield
value_org = 'S'
TABLES
value_tab = l_i_names
field_tab = l_i_field_tab
return_tab = l_i_return_tab
dynpfld_mapping = l_i_dynpfld_mapping
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
READ TABLE l_i_return_tab INTO l_wa_return_tab INDEX 1.
p_name = l_wa_return_tab-fieldval.
ELSE.
MESSAGE e001(00) WITH 'Error while displaying F4 help'.
ENDIF.
DATA: l_i_dynpfields TYPE STANDARD TABLE OF dynpread INITIAL SIZE 0,
l_wa_dynpfields TYPE dynpread.
IF p_name = 'TEST1'.
l_wa_dynpfields-fieldname = 'P_CTRY'.
l_wa_dynpfields-fieldvalue = 'IN'.
APPEND l_wa_dynpfields TO l_i_dynpfields.
ELSE.
l_wa_dynpfields-fieldname = 'P_CTRY'.
CLEAR l_wa_dynpfields-fieldvalue.
APPEND l_wa_dynpfields TO l_i_dynpfields.
ENDIF.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
TABLES
dynpfields = l_i_dynpfields
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
undefind_error = 7
OTHERS = 8.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Thanks and Regards,
Abyson Joseph
Applexus Technologies.
2013 Aug 23 4:24 AM
Hi Kevin,
Another shortcut way is to simulate the 'Enter'. Without reading or updating screen values, you can simulate and enter pressed to trigger the PAI automatically...easy money
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
EXPORTING
functioncode = '/00'
EXCEPTIONS
function_not_supported = 1.
Thanks and Regards,
Abyson Joseph
2013 Aug 23 5:04 AM
HI,
Use DYNP_VALUES_READ function module for Particular field.
This will resolve your issue.
check this sample program.
parameters: p_vbeln type vbak-vbeln,
p_posnr type vbap-posnr.
at selection-screen on value-request for p_posnr.
data: begin of help_item occurs 0,
posnr type vbap-posnr,
matnr type vbap-matnr,
arktx type vbap-arktx,
end of help_item.
data: dynfields type table of dynpread with header line.
dynfields-fieldname = 'P_VBELN'.
append dynfields.
call function 'DYNP_VALUES_READ'
exporting
dyname = sy-cprog
dynumb = sy-dynnr
translate_to_upper = 'X'
tables
dynpfields = dynfields
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 dynfields with key fieldname = 'P_VBELN'.
p_vbeln = dynfields-fieldvalue.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = p_vbeln
importing
output = p_vbeln.
select posnr matnr arktx into table help_item
from vbap
where vbeln = p_vbeln.
call function 'F4IF_INT_TABLE_VALUE_REQUEST'
exporting
retfield = 'POSNR'
dynprofield = 'P_POSNR'
dynpprog = sy-cprog
dynpnr = sy-dynnr
value_org = 'S'
tables
value_tab = help_item.
Regards,
Ravi Pratap Singh
Message was edited by: Ravi Singh
2013 Aug 23 6:19 AM
Hi Kevin,
The return table in the FM "F4IF_INT_TABLE_VALUE_REQUEST" will solve your problem.
Thank You.
2013 Aug 23 8:32 AM
Hello, thank you it works with
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
EXPORTING
functioncode = '/00'
EXCEPTIONS
function_not_supported = 1.
But I have another problem:
I select data with:
SELECT * FROM zco_pc4a INTO CORRESPONDING FIELDS OF ls_ateil
WHERE pspnr = zmepo_badi_9000-z_pspnr.
APPEND ls_ateil TO it_ateil.
ENDSELECT.
With F4IF_INT_TABLE_VALUE_REQUEST I get the value of ATEIL back (selection of an internal table).
That works. But I want to have to get back more than one field of F4IF_INT_TABLE_VALUE_REQUEST.
At the moment I get the value of ATEIL, but I also want to get the value of KSTAR.
Can you please tell me how to get the value of KSTAR.
Thank you very much.
2013 Sep 04 7:24 AM
I found the solution:
In FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
I have to use
callback_form = 'F4CALLBACK'.
I have implemented the Form:
FORM f4callback
TABLES record_tab STRUCTURE seahlpres
CHANGING shlp TYPE shlp_descr
callcontrol LIKE ddshf4ctrl.
DATA: interface LIKE LINE OF shlp-interface.
CLEAR interface.
* INTERFACE-VALTABNAME = 'ZMEPO_BADI_9000'.
* INTERFACE-VALFIELD = 'Z_KSTAR'.
interface-shlpfield = 'F0003'.
interface-valtabname = space.
interface-valfield = '~'.
* MODIFY shlp-interface FROM interface
* TRANSPORTING valtabname valfield
* WHERE shlpfield = 'F0003'.
APPEND interface TO shlp-interface.
ENDFORM. "F4CALLBACK
2013 Sep 06 2:10 PM
Using search tool you could have found my similar answer in How can I restrict the entries found in a selection screen?
Regards,
Raymond
| User | Count |
|---|---|
| 5 | |
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |