Gestion des périodes d'extraction d'un JOB SM36

Gestion des périodes d'extraction d'un JOB SM36

Messagede olivier » 10 Juillet 2018, 16:20

Bonjour,
J’ai créé un job pour qu’il lance mensuellement une transaction d’extraction de données et cela une fois par mois le 5 de chaque mois.
Les données à récupérer sont du début de l’année jusqu’au mois précédent.
J’ai créé une variable que j’ai associée à cette transaction dans le JOB (SM36). Par contre, je n’arrive pas à paramétrer dans la variable cette tranche de date fixe pour le début et modulable pour la fin.

Il existe bien un nom de variable dans la variable « Mois précédent » que l’on associe au type de variable sélectionné « D »

Comment paramétrer cette variable pour qu’elle permette d’aller chercher la date du début de l’année jusqu’aux derniers jours du mois précédent ?

Merci d'avance pour votre aide
Olivier
olivier
Posteur expert
Posteur expert
 
Messages: 191
Inscription: 16 Septembre 2010, 17:17

Re: Gestion des périodes d'extraction d'un JOB SM36

Messagede thoul » 11 Juillet 2018, 14:55

Bonjour Olivier,

Il n'est pas possible à ma connaissance de pouvoir affecter une plage de valeur à partir du type de variable D. Il met à jour systématiquement la première zone de l'intervalle et pas la suivante.
De plus, comme vous l'indiquiez, l'option "premier jour de l'année" n'existe pas. Cela serait de toute façon problématique dans le cas d'un lancement en janvier car SAP chercherait le premier jour de l'année en cours ET le dernier jour du mois précédent qui se trouverait être sur l'année précédente. Cela conduirait à un intervalle de date incohérent.
La solution "simple" est donc écartée.

Toutefois, on peut évoquer la solution impliquant la table TVARVC (Table des variables variantes) qui permet elle de saisir des vrais intervalles 'de ... à ....'
Cette table (accessible en modification via SM30) permet de saisir des paramètres ou des intervalles de valeurs pouvant être appelés par des variantes d'exécution.
Pour cela, après avoir créé la variable de variante dans TVARVC, il suffit de l'appeler lors de votre création de variante d'exécution en choisissant le mode 'T' plutôt que le 'D'.

Vous avez alors 2 solutions:
-Faire vivre cette variable de variante manuellement (via SM30) en pensant à modifier le dernier jour du mois précédent à chaque nouveau mois
-Faire vivre cette variable via un petit programme qui mettrait à jour la variable automatiquement à partir de la date du jour. Il pourrait par exemple être inclus en tant que première étape de votre job mensuel.
Evidemment, il faut faire du Dveloppement. Si jamais, vous avez les droits suffisant pour créer un programme en SE38, voici à quoi il pourrait ressembler (il s'agit d'un exemple, loin d'être complet/parfait).
Code: Tout sélectionner
REPORT zzzzz.

START-OF-SELECTION.
  PERFORM calculate_and_update_tvarvc.

*&---------------------------------------------------------------------*
*&      Form  CALCULATE_AND_UPDATE_TVARVC
*&---------------------------------------------------------------------*
FORM calculate_and_update_tvarvc.
  DATA lw_day TYPE t5a4a-dlydy.     "nbre de jour pour RP_CALC_DATE_IN_INTERVAL
  DATA lw_year TYPE t5a4a-dlyyr.    "nbre annéee pour RP_CALC_DATE_IN_INTERVAL
  DATA lw_first_day_of_year TYPE sy-datum.       "premier jour de l'année
  DATA lw_last_day_previous_month TYPE sy-datum. "dernier jour du mois précédent
  DATA ls_tvarvc TYPE tvarvc.
  CONSTANTS lc_name TYPE rvari_vnam VALUE 'INTERVALLE_DATE'. "Nom de l'intervalle de selection dans TVARVC

*_dernier jour du mois en cours.
*_1-calcul du mois précédent (attention en cas de fin de debut d'année
*___on peut se retourver sur l'exercice précédent
  CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
    EXPORTING
      date      = sy-datum
      days      = lw_day
      months    = 1
      signum    = '-'
      years     = lw_year
    IMPORTING
      calc_date = lw_last_day_previous_month.
*_2-determination du dernier jour du mois précédent
  CALL FUNCTION 'LAST_DAY_OF_MONTHS'
    EXPORTING
      day_in            = lw_last_day_previous_month
    IMPORTING
      last_day_of_month = lw_last_day_previous_month
    EXCEPTIONS
      day_in_no_date    = 1
      OTHERS            = 2.
  IF sy-subrc <> 0.
    RETURN.
  ENDIF.

*_determination du premier jour de l'année (relatif au mois calculé précédemment
*_pour pouvoir gérer correctement le calcul lors du premier mois d'une nouvelle année)
  IF NOT lw_last_day_previous_month IS INITIAL.
    CONCATENATE lw_last_day_previous_month+0(4) "année
                '0101'                          "mois et jour
                INTO lw_first_day_of_year.
  ENDIF.
  IF lw_last_day_previous_month IS NOT INITIAL AND
     lw_first_day_of_year IS NOT INITIAL.
    ls_tvarvc-name = lc_name.                    "nom de la variante dans TVARVC
    ls_tvarvc-type = 'S'.                        "plage de valeur ('S'elect-option)
    ls_tvarvc-sign = 'I'.                        "intervalle d'inclusion ('I'nclu)
    ls_tvarvc-opti = 'BT'.                       "option de comparaison ('B'e'T'ween)
    ls_tvarvc-low = lw_first_day_of_year.        "intervalle entre premier jour de l'année
    ls_tvarvc-high = lw_last_day_previous_month. "et dernier jour du mois en cours
    MODIFY tvarvc FROM ls_tvarvc.
  ENDIF.
ENDFORM.
thomas
'si il n'y a pas de solution, c'est qu'il n'y a pas de problème'
Avatar de l’utilisateur
thoul
Posteur confirmé
Posteur confirmé
 
Messages: 60
Inscription: 26 Juillet 2010, 10:56

Re: Gestion des périodes d'extraction d'un JOB SM36

Messagede olivier » 11 Juillet 2018, 15:39

Merci thoul de ta réponse
Olivier
olivier
Posteur expert
Posteur expert
 
Messages: 191
Inscription: 16 Septembre 2010, 17:17


Retourner vers Multi modules

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités