Abap pour lancer en boucle une Planning Sequence
L'intérêt de ce programme est de modifier les valeurs d'une variante par un programme ABAP
Lalgorithme est donc :
- Boucler sur les valeurs à lancer
- Pour chaque valeurs on modifie la variante avec ces valeurs
- On exécute la planning sequence toujours avec cette variante
- On passe au jeu de données suivant
Source
https://archive.sap.com/discussions/thread/1206776
| *&---------------------------------------------------------------------**
*& Report ZPI_GENERATION_PERCENTAGE_LEG*
*&---------------------------------------------------------------------**
*&*
*&---------------------------------------------------------------------**
REPORT zpi_generation_percentage_leg.
*&---------------------------------------------------------------------**
*& Variables*
*&---------------------------------------------------------------------**
TYPES: BEGIN OF t_sx_int_var_value,
vnam TYPE rszvnam,
data_prov TYPE string,
range TYPE STANDARD TABLE OF rrrange WITH DEFAULT KEY,
END OF t_sx_int_var_value.
TYPES: t_tx_int_var_value TYPE STANDARD TABLE OF t_sx_int_var_value WITH DEFAULT KEY.
TYPES: BEGIN OF ty_zpi_cz_f,
/bic/zpi_cz_f TYPE /bic/oizpi_cz_f,
/bic/zpi_famgp TYPE /bic/oizpi_famgp,
END OF ty_zpi_cz_f.
DATA l_sx_var_value TYPE t_sx_int_var_value.
DATA l_tx_var_value TYPE t_tx_int_var_value.
DATA i_sequence TYPE rspls_seqnm.
DATA i_variant TYPE rsparamnm.
DATA l_s_rsrparametriza TYPE rsrparametriza.
DATA part(10) TYPE n.
DATA e_content LIKE l_s_rsrparametriza-content.
DATA e_content2 LIKE l_s_rsrparametriza-content.
DATA l_s_rrange TYPE rrrange.
DATA wa_line TYPE rrrange.
DATA v_zpi_cz TYPE /bic/oizpi_cz.
DATA v_famgp TYPE /bic/oizpi_famgp.
DATA lt_zpi_cz_f TYPE STANDARD TABLE OF ty_zpi_cz_f WITH NON-UNIQUE DEFAULT KEY.
DATA ls_zpi_cz_f LIKE LINE OF lt_zpi_cz_f.
*&---------------------------------------------------------------------**
*& Ecran de sélection*
*&---------------------------------------------------------------------**
PARAMETERS p_seqnm LIKE rspls_sequence-seqnm OBLIGATORY.
PARAMETERS p_var TYPE rsparamnm OBLIGATORY.
PARAMETERS p_fiscyr TYPE /bi0/oifiscyear OBLIGATORY.
PARAMETERS p_vtype TYPE /bi0/oivtype OBLIGATORY.
SELECT-OPTIONS s_zpi_cz FOR v_zpi_cz.
SELECT-OPTIONS s_famgp FOR v_famgp.
*&---------------------------------------------------------------------**
*& Programme principal*
*&---------------------------------------------------------------------**
*Aller chercher les valeurs de la table qui contient les ZPI_CZ
*et les groupes de famille
REFRESH lt_zpi_cz_f.
SELECT /bic/zpi_cz_f /bic/zpi_famgp
FROM /bic/pzpi_cz_f INTO CORRESPONDING FIELDS OF TABLE lt_zpi_cz_f
WHERE /bic/zpi_cz_f IN s_zpi_cz
AND /bic/zpi_famgp IN s_famgp
AND objvers = 'A'.
SORT lt_zpi_cz_f.
DELETE ADJACENT DUPLICATES FROM lt_zpi_cz_f.
*&---------------------------------------------------------------------**
* Traitement pour chaque couple ZPI_CZ / Family Group trouvé*
*&---------------------------------------------------------------------**
LOOP AT lt_zpi_cz_f INTO ls_zpi_cz_f.
*&---------------------------------------------------------------------**
* 1. Aller chercher la variante et modifier les valeurs de la variante*
*&---------------------------------------------------------------------**
SELECT SINGLE *
FROM rsrparametriza INTO l_s_rsrparametriza
WHERE paramnm = p_var
AND objvers = rs_c_objvers-active.
IF sy-subrc = 0.
*Stocker le contenu de la variable dans e_content*
CLEAR e_content.
e_content = l_s_rsrparametriza-content.
*Mettre les valeurs sous forme de table interne*
CALL TRANSFORMATION id
SOURCE XML e_content
RESULT page = l_tx_var_value.
*Mise à jour des valeurs de la variable.*
LOOP AT l_tx_var_value INTO l_sx_var_value.
CASE l_sx_var_value-vnam.
* Fiscal Year
WHEN 'Z0FISCYEAR_MI_IV_MN'.
LOOP AT l_sx_var_value-range INTO l_s_rrange.
l_s_rrange-sign = 'I'.
l_s_rrange-opt = 'EQ'.
l_s_rrange-low = p_fiscyr.
l_s_rrange-high = ''.
MODIFY l_sx_var_value-range FROM l_s_rrange.
MODIFY l_tx_var_value FROM l_sx_var_value.
ENDLOOP.
* Vtype
WHEN 'Z0VTYPE_MI_IV_MN'.
LOOP AT l_sx_var_value-range INTO l_s_rrange.
l_s_rrange-sign = 'I'.
l_s_rrange-opt = 'EQ'.
l_s_rrange-low = p_vtype.
l_s_rrange-high = ''.
MODIFY l_sx_var_value-range FROM l_s_rrange.
MODIFY l_tx_var_value FROM l_sx_var_value.
ENDLOOP.
* ZPI_CZ
WHEN 'ZPI_CZ_MI_IV_MN'.
LOOP AT l_sx_var_value-range INTO l_s_rrange.
l_s_rrange-sign = 'I'.
l_s_rrange-opt = 'EQ'.
l_s_rrange-low = ls_zpi_cz_f-/bic/zpi_cz_f.
l_s_rrange-high = ''.
MODIFY l_sx_var_value-range FROM l_s_rrange.
MODIFY l_tx_var_value FROM l_sx_var_value.
ENDLOOP.
* Family Group*
WHEN 'ZPI_FAMGP_MI_IV_MN'.
LOOP AT l_sx_var_value-range INTO l_s_rrange.
l_s_rrange-sign = 'I'.
l_s_rrange-opt = 'EQ'.
l_s_rrange-low = ls_zpi_cz_f-/bic/zpi_famgp.
l_s_rrange-high = ''.
MODIFY l_sx_var_value-range FROM l_s_rrange.
MODIFY l_tx_var_value FROM l_sx_var_value.
ENDLOOP.
ENDCASE.
ENDLOOP.
*Sauvegarder les nouvelles valeurs de la variante*
CALL TRANSFORMATION id
SOURCE page = l_tx_var_value
RESULT XML e_content2.
l_s_rsrparametriza-content = e_content2.
UPDATE rsrparametriza FROM l_s_rsrparametriza.
COMMIT WORK.
ENDIF.
*&---------------------------------------------------------------------**
* 2. Lancer la planning sequence avec la variante modifiée*
*&---------------------------------------------------------------------**
*Execute the planning sequence*
SUBMIT rspls_plseq_execute
WITH seqnm = p_seqnm
WITH variant = p_var
WITH save = 'X' AND RETURN.
*On passe au couple ZPI_CZ/Family Group suivant*
ENDLOOP.
|