Ottenere F4 help di un campo in base al valore di un altro campo
Questo programma mostra come accedere o aggiornare il valore di un campo
nel caso in cui si prema F4 help da un altro campo.
In questo programma, che ha 2 campi nella schemrata di selezione, si considerano due SCENARI.
SCENARIO 1: Si inserisce un valore nel campo SOCIETA' e premendo F4 help nel campo Org. Commerciale vengono visualizzati i valori possibili dell'Organizzazione Commerciale associati alla società selezionata precedentemente, e settato il valore nel campo Organizzazione Commerciale mediante il FM : F4IF_INT_TABLE_VALUE_REQUEST
SCENARIO 1:
Se nel campo società è presente un valore, e premendo F4 help nel campo Org. Commerciale che visualizza anche un valore diverso della sosietà, viene settato questo nuovo valore nel campo società mediante il FM DYNP_VALUES_UPDATE.
*&---------------------------------------------------------------------*
*& Report Z_VALUES_F4HELP_CHANGE
*&---------------------------------------------------------------------*
REPORT z_values_f4help_change.
DATA: BEGIN OF gt_vkorg OCCURS 0, "f4 values for user
bukrs LIKE tvko-bukrs,
vkorg LIKE tvko-vkorg,
END OF gt_vkorg.
PARAMETERS: p_bukrs TYPE tvko-bukrs, "Società
p_vkorg TYPE tvko-vkorg. "Org. commerciale
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vkorg.
PERFORM get_sales.
START-OF-SELECTION.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form GET_SALES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_sales.
* DATO CHE IN QUESTO EVENTO, IL CAMPO p_bukrs
* NON E' ACCESSIBILE, QUINDI ANCHE SE VALORIZZATO
* NON SI RIESCE A VEDERE IL SUO VALORE, PER OVVIARE
* A QUESTO PROBLEMA E' NECESSARIO USARE IL FM
* DYNP_VALUES_READ.
DATA: lt_dynpfields TYPE STANDARD TABLE OF dynpread,
ls_dynpfields TYPE dynpread,
lt_return TYPE STANDARD TABLE OF ddshretval,
ls_return TYPE ddshretval,
lt_where_tab(50) TYPE c OCCURS 1 WITH HEADER LINE,
ls_where_clause(50) TYPE c,
gs_vkorg LIKE LINE OF gt_vkorg.
CLEAR: gt_vkorg, lt_dynpfields,
ls_dynpfields, lt_return,
ls_return, lt_where_tab,
ls_where_clause, gs_vkorg.
REFRESH: gt_vkorg, lt_dynpfields,
lt_return, lt_where_tab.
ls_dynpfields-fieldname = 'P_BUKRS'.
APPEND ls_dynpfields TO lt_dynpfields.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
TABLES
dynpfields = lt_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.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
CLEAR: ls_dynpfields.
READ TABLE lt_dynpfields
INTO ls_dynpfields
WITH KEY fieldname = 'P_BUKRS'.
IF sy-subrc = 0.
p_bukrs = ls_dynpfields-fieldvalue.
ENDIF.
* Creo la WHERE DINAMICA
* Se la SOCIETA' E' VALORIZZATA, VISUALIZZO L'ORGANIZZAZIONE
* COMMERCIALE ASSOCIATA, ALTRIMENTI VISUALIZZO TUTTE LE ORGANIZZAZIONI
IF p_bukrs IS NOT INITIAL.
CONCATENATE ' bukrs EQ ' '''' p_bukrs '''' INTO ls_where_clause.
ELSE.
CONCATENATE ' bukrs NE ' '''' '''' INTO ls_where_clause.
ENDIF.
APPEND ls_where_clause TO lt_where_tab.
SELECT bukrs vkorg
FROM tvko
INTO TABLE gt_vkorg
WHERE (lt_where_tab).
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'VKORG'
window_title = 'Codice Org. commerciale'
value_org = 'S'
TABLES
value_tab = gt_vkorg
return_tab = lt_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
CLEAR: ls_return.
READ TABLE lt_return
INTO ls_return INDEX 1.
p_vkorg = ls_return-fieldval.
* SE LA SOCIETA' NON E' VALORIZZATA, E L'ORGANIZZAZIONE E'
* VALORIZZATA, SETTO IL VALORE LETTO ANCHE PER LA SOCIETA'
IF p_bukrs IS INITIAL AND
p_vkorg IS NOT INITIAL.
READ TABLE gt_vkorg INTO gs_vkorg
WITH KEY vkorg = p_vkorg.
IF sy-subrc = 0.
p_bukrs = gs_vkorg-bukrs.
* PER VISUALIZZARE SULLA DYNPRO IL CAMPO BUKRS
* USARE IL FM DYNP_VALUES_UPDATE
CLEAR: ls_dynpfields, lt_dynpfields.
REFRESH: lt_dynpfields.
ls_dynpfields-fieldname = 'P_BUKRS'.
ls_dynpfields-fieldvalue = p_bukrs.
APPEND ls_dynpfields TO lt_dynpfields.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
TABLES
dynpfields = lt_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.
* Implement suitable error handling here
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " GET_SALES
SE MI CONTATTATE IN PRIVATO, PAGATE LA META' DEL PREZZO DI AMAZON, E POTETE SCEGLIERE IL FORMATO WORD o PDF.
>>> RECENSIONI DEI LIBRI su Amazon Kindle <<<