Aller au contenu

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*
*&---------------------------------------------------------------------**
*&*
*&---------------------------------------------------------------------**
REPORTzpi_generation_percentage_leg.
*&---------------------------------------------------------------------**
*& Variables*
*&---------------------------------------------------------------------**

TYPES:BEGIN OFt_sx_int_var_value,
            vnam         TYPE rszvnam,
            data_prov TYPE string,
            range     TYPE STANDARD TABLE OFrrrangeWITHDEFAULTKEY,
      END OFt_sx_int_var_value.

TYPES:t_tx_int_var_valueTYPE STANDARD TABLE OFt_sx_int_var_valueWITHDEFAULTKEY.

TYPES:BEGIN OFty_zpi_cz_f,
            /bic/zpi_cz_f  TYPE/bic/oizpi_cz_f,
            /bic/zpi_famgpTYPE/bic/oizpi_famgp,
      END OFty_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 OFty_zpi_cz_f WITHNON-UNIQUEDEFAULTKEY.
DATA ls_zpi_cz_f        LIKE LINE OFlt_zpi_cz_f.

*&---------------------------------------------------------------------**
*& Ecran de sélection*
*&---------------------------------------------------------------------**

PARAMETERSp_seqnm      LIKE rspls_sequence-seqnmOBLIGATORY.
PARAMETERSp_var        TYPE rsparamnm OBLIGATORY.
PARAMETERSp_fiscyr     TYPE/bi0/oifiscyear OBLIGATORY.
PARAMETERSp_vtype      TYPE/bi0/oivtype OBLIGATORY.
SELECT-OPTIONSs_zpi_cz FORv_zpi_cz.
SELECT-OPTIONSs_famgp  FORv_famgp.

*&---------------------------------------------------------------------**
*& Programme principal*
*&---------------------------------------------------------------------**
*Aller chercher les valeurs de la table qui contient les ZPI_CZ
*et les groupes de famille

REFRESHlt_zpi_cz_f.

SELECT/bic/zpi_cz_f/bic/zpi_famgp
  FROM/bic/pzpi_cz_fINTOCORRESPONDING FIELDS OFTABLElt_zpi_cz_f
 WHERE/bic/zpi_cz_f  INs_zpi_cz
   AND/bic/zpi_famgpINs_famgp
   ANDobjvers='A'.

SORTlt_zpi_cz_f.

DELETE ADJACENT DUPLICATES FROMlt_zpi_cz_f.

*&---------------------------------------------------------------------**
* Traitement pour chaque couple ZPI_CZ / Family Group trouvé*
*&---------------------------------------------------------------------**

LOOP AT lt_zpi_cz_fINTOls_zpi_cz_f.

*&---------------------------------------------------------------------**
* 1. Aller chercher la variante et modifier les valeurs de la variante*
*&---------------------------------------------------------------------**

SELECTSINGLE*
        FROMrsrparametrizaINTOl_s_rsrparametriza
       WHEREparamnm=p_var
         ANDobjvers=rs_c_objvers-active.

IFsy-subrc=0.

*Stocker le contenu de la variable dans e_content*
CLEARe_content.
e_content=l_s_rsrparametriza-content.

*Mettre les valeurs sous forme de table interne*
CALL TRANSFORMATIONid
SOURCE XMLe_content
RESULT page=l_tx_var_value.
*Mise à jour des valeurs de la variable.*
LOOP AT l_tx_var_valueINTOl_sx_var_value.

    CASEl_sx_var_value-vnam.

*   Fiscal Year
    WHEN'Z0FISCYEAR_MI_IV_MN'.

    LOOP AT l_sx_var_value-rangeINTOl_s_rrange.
        l_s_rrange-sign='I'.
        l_s_rrange-opt  ='EQ'.
        l_s_rrange-low  =p_fiscyr.
        l_s_rrange-high=''.
        MODIFYl_sx_var_value-rangeFROMl_s_rrange.
        MODIFYl_tx_var_valueFROMl_sx_var_value.
    ENDLOOP.

*   Vtype
    WHEN'Z0VTYPE_MI_IV_MN'.

    LOOP AT l_sx_var_value-rangeINTOl_s_rrange.
        l_s_rrange-sign='I'.
        l_s_rrange-opt  ='EQ'.
        l_s_rrange-low  =p_vtype.
        l_s_rrange-high=''.
        MODIFYl_sx_var_value-rangeFROMl_s_rrange.
        MODIFYl_tx_var_valueFROMl_sx_var_value.
    ENDLOOP.

*  ZPI_CZ
    WHEN'ZPI_CZ_MI_IV_MN'.

    LOOP AT l_sx_var_value-rangeINTOl_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=''.
        MODIFYl_sx_var_value-rangeFROMl_s_rrange.
        MODIFYl_tx_var_valueFROMl_sx_var_value.
    ENDLOOP.

*  Family Group*
    WHEN'ZPI_FAMGP_MI_IV_MN'.

    LOOP AT l_sx_var_value-rangeINTOl_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=''.
        MODIFYl_sx_var_value-rangeFROMl_s_rrange.
        MODIFYl_tx_var_valueFROMl_sx_var_value.
    ENDLOOP.

    ENDCASE.

ENDLOOP.

*Sauvegarder les nouvelles valeurs de la variante*
CALL TRANSFORMATION  id
  SOURCE page=l_tx_var_value
  RESULT XMLe_content2.

l_s_rsrparametriza-content=e_content2.
UPDATErsrparametrizaFROMl_s_rsrparametriza.
COMMITWORK.

ENDIF.

*&---------------------------------------------------------------------**
* 2. Lancer la planning sequence avec la variante modifiée*
*&---------------------------------------------------------------------**
*Execute the planning sequence*

SUBMITrspls_plseq_execute
    WITHseqnm=p_seqnm
    WITHvariant=p_var
    WITHsave='X'AND RETURN.

*On passe au couple ZPI_CZ/Family Group suivant*
ENDLOOP.