2017-06-22 1 views
0

Salut utilisateurs ABAP je voudrais demander si quel processus je peux faire pour recueillir les données sur le même champ? tout ce que je veux faire est de résumer ou de recueillir les données dmbtr qui appartiennent à la même date, (date champ Monat) (Werks à planter codes)Comment puis-je résumer ou collecter les données sur le même champ?

it_zfi_vbrp_bseg_1-num3 = it_zfi_vbrp_bseg_1-werks. 

it_zfi_vbrp_bseg_1-num2 = it_zfi_vbrp_bseg_1-dmbtr. 

COLLECT it_zfi_vbrp_bseg_1. 

DELETE ADJACENT DUPLICATES FROM it_zfi_vbrp_bseg_1 COMPARING ALL FIELDS. 

Sort it_zfi_vbrp_bseg_1 by werks. 

LOOP AT it_zfi_vbrp_bseg_1 into wa_zfi_vbrp_bseg_1 WHERE monat = '01'. 

    IF wa_zfi_vbrp_bseg_1-werks EQ '4030'. 

     WRITE:/, AT pos wa_zfi_vbrp_bseg_1-dmbtr. 

    ENDIF. 

ENDLOOP. 

Toute configuration dans mes gars codes?

+0

Vous souhaitez résumer les données d'un mois concret ou de chaque mois (= les regrouper)? – Suncatcher

+0

oui monsieur comment puis-je faire cela? – user7806296

+0

Oui quoi? Laquelle des deux options? – Suncatcher

Répondre

-1

Tout cela se résume à la façon dont vous définissez votre table interne it_zfi_vbrp_bseg_1

Pour COLLECT au travail, vous devez définir avec les touches de type de caractères suivis des types de terrain Emballé:

données: Début de it_zfi_vbrp_bseg_1 se produit 0, werks type werks, mois (2) type c, dmbtr type dmbtr, fin de it_zfi_vbrp_bseg_1.

Cela fonctionnera.

Ce ne sera pas:

données: Début de it_zfi_vbrp_bseg_1 se produit 0. comprennent la structure VBRP. données: monat type monat, dmbtr type dmbtr, fin de it_zfi_vbrp_bseg. Lisez l'aide sur COLLECT et définissez votre tableau récapitulatif en conséquence.

+0

Monsieur désolé à ce sujet que voulez-vous dire en mois (2) tapez c? Quelle est l'utilité de cela? – user7806296

+1

Pas vrai. L'instruction 'COLLECT' fonctionnera parfaitement avec le type' monat' qui a le type 'n'. – Suncatcher

1

Supposons, vous table standard bseg déjà étendu avec monat champ, alors vous devriez faire comme ceci:

TYPES: BEGIN OF ty_zfi_vbrp_bseg_1, 
     werks TYPE bseg-werks, 
     monat TYPE monat, 
     dmbtr TYPE bseg-dmbtr, 
     END OF ty_zfi_vbrp_bseg_1. 

DATA: it_zfi_vbrp_bseg_1 TYPE TABLE OF ty_zfi_vbrp_bseg_1, 
     is_zfi_vbrp_bseg_1 TYPE ty_zfi_vbrp_bseg_1. 

SELECT werks, monat, dmbtr 
INTO TABLE @DATA(lt_bseg) 
FROM bseg 
WHERE werks = '4030'. 

* summation of months 
LOOP AT lt_bseg ASSIGNING FIELD-SYMBOL(<fs_line>). 
    CLEAR: is_zfi_vbrp_bseg_1. 
    MOVE-CORRESPONDING <fs_line> TO is_zfi_vbrp_bseg_1. 
    COLLECT is_zfi_vbrp_bseg_1 INTO it_zfi_vbrp_bseg_1. 
ENDLOOP. 

* output the results 
LOOP AT it_zfi_vbrp_bseg_1 ASSIGNING FIELD-SYMBOL(<zfi_line>). 
    IF <zfi_line>-werks EQ '4030'. 
     WRITE:/<zfi_line>-werks, <zfi_line>-monat, <zfi_line>-dmbtr. 
    ENDIF. 
ENDLOOP. 

Couple de notes à votre code incorrect:

  1. COLLECT ne fonctionne pas comme déclaration unique et devrait être exécuté en boucle. Pour compléter avec l'instruction COLLECT, vous devez déclarer la zone de travail afin que tous les champs non clés soient numériques. Les champs clés (même s'il s'agit d'une clé implicite) peuvent être de n'importe quel type, contrairement à ce que Ray a dit. N type est également OK.
  2. DELETE ADJACENT DUPLICATES est redondant ici, car après COLLECT (ce qui fait l'addition par clé primaire) vous n'aurez pas de dups.