Aller au contenu

BIIP - 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.