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
*& 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
EBOOK: le mie guide sono visualizzabili cliccando sui link:
1. SAP EWM (Extended Warehouse Management)
3. SAP VIM (Vendor Invoice Management)
1. SAP EWM (Extended Warehouse Management)
3. SAP VIM (Vendor Invoice Management)
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 <<<
Ebook: SAP CDS: https://www.amazon.it/dp/B0B9BD1RN3#customerReviews
Ebook: SAP MM: https://www.amazon.it/dp/B0C3MKD9BR#customerReviews
Ebook: SAP MII: https://www.amazon.it/dp/B0C4392MY9#customerReviews
Ebook: SAP VIM: https://www.amazon.it/dp/B0C6FBK8QN#customerReviews
Ebook: SAP MM: https://www.amazon.it/dp/B0C3MKD9BR#customerReviews
Ebook: SAP MII: https://www.amazon.it/dp/B0C4392MY9#customerReviews
Ebook: SAP VIM: https://www.amazon.it/dp/B0C6FBK8QN#customerReviews
Ebook: SAP EWM: https://www.amazon.it/dp/B0CL6TXP1V#customerReviews
Nessun commento:
Posta un commento