2 votes

Moyen le plus simple de supprimer une ligne

Existe-t-il un moyen plus simple/plus rapide pour le code ci-dessous :

DATA:   lv_knuma_ag  TYPE TABLE DE zta_fg_hdr AVEC LIGNE D'EN-TÊTE.
RANGES: lr_knuma_ag  FOR  zta_fg_hdr-knuma_ag.

"Select `knuma_ag` et l'enregistrer dans la table interne `lv_knuma_ag`
LOOP AT li_promo.
  SELECT dest~knuma_ag
    FROM zta_fg_dest AS dest
    INNER JOIN zta_s_d_xkunnr AS xkunnr ON xkunnr~zcd_dest EQ dest~zcd_dest
    APPENDING CORRESPONDING FIELDS OF TABLE lv_knuma_ag
    WHERE dest~knuma_ag EQ li_promo-knuma_ag
          AND xkunnr~xkunnr EQ gi_vl-vkbur.
ENDLOOP.

"Insérer `lv_knuma_ag` dans la table des gammes `lr_knuma_ag`
LOOP AT lv_knuma_ag.
  lr_knuma_ag-sign   = 'I'.
  lr_knuma_ag-option = 'EQ'.
  lr_knuma_ag-low    = lv_knuma_ag-knuma_ag.
  lr_knuma_ag-high   = space.
  APPEND lr_knuma_ag.
ENDLOOP.

"Supprimer les lignes dans `li_promo` où `knuma_ag` est dans la table des gammes `lr_knuma_ag`
IF NOT lr_knuma_ag IS INITIAL.
  DELETE li_promo WHERE knuma_ag IN lr_knuma_ag.
ENDIF.

Comme vous pouvez le voir dans le code, il contient deux boucles pour remplir seulement la table des gammes. J'aimerais le réduire à une seule, est-ce possible ? Merci.

3voto

vwegert Points 8935

Oui, il devrait être possible d'atteindre cet objectif sans saturer votre SGBD avec potentiellement des milliers de requêtes :

DATA: lt_knuma_ag_hash TYPE HASHED TABLE OF insert_type_of_knuma_ag_here WITH UNIQUE KEY TABLE_table_line.

IF li_promo[] IS NOT INITIAL.
  SELECT DISTINCT knuma_ag
    FROM zta_fg_dest
    INTO TABLE lt_knuma_ag_hash
    FOR ALL ENTRIES IN li_promo
    WHERE knuma_ag = li_promo-knuma_ag.
ENDIF.

LOOP AT li_promo ASSIGNING .
  READ TABLE lt_knuma_ag_hash TRANSPORTING NO FIELDS WITH TABLE KEY table_line = -knuma_ag.
  IF sy-subrc = 0.
    DELETE li_promo.
  ENDIF.
ENDLOOP.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X