IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAP Discussion :

Description d'une structure


Sujet :

SAP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Description d'une structure
    Bonjour,

    j'ai défini une structure TTF ainsi :

    types: begin of ty_f,
    un like marc-matnr,
    deux like vbap-posnr,
    end of ty_f.
    data TTF type table of ty_f.

    Et j'aimerais maintenant obtenir les infos suivantes :
    nom du champ / TABLE de reférence / Champ de référence

    Soit
    UN/MARC/MATNR
    DEUX/VBAP/POSNR

    Jusqu'alors en utilisant des "cl_abap_typedesc" et autres associés....
    je n'arrive qu'à avoir les clés (UN/DEUX) et les types/longeur : C18 et C10

    Mais c'est l' "origine" qui m'intéresse (donc MARC-MATNR et VBAP-POSNR)

    Ou, au minimum, le type de donnée MATNR_D et POSNR_VA


    Sauriez vous comment obtenir cela ?
    Merci...

  2. #2
    Membre éprouvé Avatar de Celdrøn
    Homme Profil pro
    Consultant SAP
    Inscrit en
    Juillet 2007
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant SAP

    Informations forums :
    Inscription : Juillet 2007
    Messages : 614
    Points : 1 008
    Points
    1 008
    Par défaut
    Bonjour,

    L'instruction DESCRIBE FIELD te renvoie l'information quand on utilise le complément d'instruction HELP-ID.

    DESCRIBE FIELD — ABAP Keyword Documentation

    PS : LIKE est obsolète pour déclarer un champ en référence au DDIC, et est donc à éviter autant que possible. LIKE -obsolete — ABAP Keyword Documentation
    Boaf...signature <= ça suffira ça ??

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    je ne vois pas comment cela répond à ma question ?? Vous l'employez comment ??? Le describe field ne semble pas me dire quel était la table / champ de référence ?

  4. #4
    Membre éprouvé Avatar de Celdrøn
    Homme Profil pro
    Consultant SAP
    Inscrit en
    Juillet 2007
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant SAP

    Informations forums :
    Inscription : Juillet 2007
    Messages : 614
    Points : 1 008
    Points
    1 008
    Par défaut
    En reprenant et adaptant le code donné dans la doc…
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    data: un    type marc-matnr,
          struc type dfies-tabname,
          comp  type dfies-fieldname.
    
    describe field un help-id data(hlp).
    
    split hlp at '-' into struc comp.
    
    write : |{ struc } { comp }|.
    Résultat obtenu après exécution :
    Boaf...signature <= ça suffira ça ??

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    j'avais fini par écrire ce qui suit.

    Cela permet de générer le fieldcatalog pour un ALV à partir d'une table standard.

    Il n'est plus besoin de
    - définir une structure dans le DDIC (avec la colonne TABSTYLE pour les couleurs et les styles.)
    - faire un REUSE_FIELDCATALOG_MERGE,

    Il suffit, avant le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grid->set_table_for_first_display
    De faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gt_fieldcat = grid->generate_fieldcat_from_ddic( t_outtab ).   "  grid  est une surcharge de CL_GUI_ALV_GRID
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    METHOD generate_fieldcat_from_ddic.
      REFRESH fieldcat.
      DATA s_fieldcat LIKE LINE OF fieldcat.
    
      FIELD-SYMBOLS <gt_alv> TYPE ANY TABLE.
      ASSIGN pt_outtab TO <gt_alv>.       " Créer une référence vers la table
    
      FIELD-SYMBOLS <gs_alv> TYPE any.
      DATA gs_alv TYPE REF TO data.
      CREATE DATA gs_alv LIKE LINE OF <gt_alv>.
      ASSIGN gs_alv->* TO <gs_alv>.    "  GS_ALV aura donc la structure d'une ligne de cette table
    
      DATA ls_components TYPE abap_compdescr.
      DATA comp_ref TYPE REF TO cl_abap_typedescr.
      FIELD-SYMBOLS <comp> TYPE any.
    
      TYPES: BEGIN OF ty_f,
               fieldname TYPE abap_compdescr-name,
               rollname  TYPE dd03m-rollname,
             END OF ty_f.
      DATA t_f TYPE TABLE OF ty_f.
      DATA s_f LIKE LINE OF t_f.
    
      DATA descr_ref TYPE REF TO cl_abap_structdescr.     "  Pour pouvoir consulter les composants d'une ligne de cette table
      descr_ref ?= cl_abap_typedescr=>describe_by_data( <gs_alv> ).
    
      LOOP AT descr_ref->components INTO ls_components.
        ASSIGN COMPONENT ls_components-name OF STRUCTURE <gs_alv> TO <comp>.
    
        CLEAR s_f.
    
       "  Version 1 : avec cl_abap_typedesc
        comp_ref = cl_abap_typedescr=>describe_by_data( <comp> ).
        s_f-fieldname = ls_components-name.
        s_f-rollname = comp_ref->absolute_name+6.     "  C'est ici qu'on trouve le type : absolute_name vaut /TYPE=VBELN_VA
    
         " Version 2 : j'aurais pu faire ainsi 
        " describe field un help-id data(hlp).
        " split hlp at '-' into s_f-fieldname s_f-rollname.
    
        APPEND s_f TO t_f.
      ENDLOOP.
    
      CHECK t_f IS NOT INITIAL.    "  t_f contient la liste des colonnes avec le type de donnée de chacune
    
      DATA t_dd03m TYPE TABLE OF dd03m.    " Cette partie permet de créer un fielcat à partir des colonnes qu'on a trouvées
      DATA s_dd03m LIKE LINE OF t_dd03m.
    
      REFRESH t_dd03m.
      SELECT * FROM dd03m
        INTO TABLE t_dd03m
        FOR ALL ENTRIES IN t_f
        WHERE rollname = t_f-rollname
          AND ddlanguage  = sy-langu.
    
      SORT t_dd03m BY rollname.
    
      LOOP AT t_f INTO s_f.
        CLEAR s_dd03m.
        READ TABLE t_dd03m
          INTO s_dd03m
          WITH KEY rollname = s_f-rollname
          BINARY SEARCH.
        CHECK sy-subrc IS INITIAL.
    
        MOVE-CORRESPONDING s_dd03m TO s_fieldcat.
        s_fieldcat-fieldname = s_f-fieldname.
        APPEND s_fieldcat TO fieldcat.
      ENDLOOP.
    
      CLEAR s_fieldcat.    "  Et on ajoute la colonne TABSTYLE pour pouvoir gérer les couleurs
      s_fieldcat-fieldname = 'TABSTYLE'.
      s_fieldcat-ref_table = 'WTY_PNV_DYNPRO_ALV'.
      s_fieldcat-ref_field = 'STYL'.
      s_fieldcat-no_out    = 'X'.
      APPEND s_fieldcat TO fieldcat.
    
    ENDMETHOD.

    On peut toujours parcourir le gt_fieldcat obtenu pour mettre à jour les noms des colonnes, l'ordre, la longueur d'ffichage
    ou bien l'employer directement dans le set_table_for_first_display.

    Qu'en pensez vous ?
    Simon

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    On me souffle dans l'oreillette que TABSTYLE ne sert pas à gérer les couleurs.
    Je proteste.

    Si vous créez la routine suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    form update_style using   x     type lvc_fname
                              y     type int 4
                              update_masque type xstring
                              update_style  type xstring.
    
    
    read table gt_alv into gs_alv index y.
    tabstyle = gs_alv-tabstyle.
    read table tabstyle into s_style with key fieldname = x.
    
    s_style-style  = s_style-style  BIT-AND  update_masque.
    s_style-style  = s_style-style  BIT-OR    update_style.
    
    endform.
    C'est un exemple,
    il manque des check pour vérifier si le fieldname existe déjà ou non dans la colonne gs_alv-tabstyle
    il manque aussi la mise à jour de gs_alv-tabstyle puis gt_alv
    Mais ce n'est pas le plus compliqué.

    Il vous suffit ensuite, pour mettre de la couleur sur une cellule donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    perform update_style USING  x y 'FFFFFFE0' '0000000D'.  "colorier en bleu foncé
    perform update_style USING  x y 'FFFFFFE0' '00000004'.  "colorier en jaune
    perform update_style USING  x y 'FFFFFFE0' '0000000F'.  "colorier en rouge
    
    avec x = 'MATNR' / 'VBELN' ou toute colonne de votre fieldcatalog
    y = 1, 2, 3.... numéro de ligne quoi
    On pourrait aussi mettre en gras certaines cellules puis enlever ce gras :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    perform update_style  USING  x y 'FFFFFF9F' '00000020'.    " mettre 
    perform update_style  USING  x y 'FFFFFF9F' '00000040'.   " enlever
    Virer les bordures verticales : (left puis right)
    (en réalité ce n'est pas la même routine
    car c'est sur s_style-style2 qu'il faudrait faire la mise à jour et non sur s_style-style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    perform update_style   USING   x y 'FFFEFFFF' '00010000'.  
    perform update_style   USING   x y 'FFFDFFFF' '00020000'.
    Souligner / Ne plus souligner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    perform update_style   USING  x y 'FFFFF9FF' '00000200'.  
    perform update_style   USING  x y 'FFFFF9FF' '00000400'.
    etc etc...
    si vous voulez une liste complète de ce qu'on peut faire, dites moi et je vous enverrai cela.
    Vous aurez déjà une idée en consultant cette page

    https://stackoverflow.com/questions/...ating-of-cells

    Simon

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/03/2016, 17h30
  2. sizeof() d'une structure
    Par tut dans le forum MFC
    Réponses: 12
    Dernier message: 29/08/2006, 18h21
  3. Comment mettre en place une structure 3 tiers.
    Par WOLO Laurent dans le forum Débats sur le développement - Le Best Of
    Réponses: 13
    Dernier message: 27/07/2003, 22h01
  4. [toFAQ][socket] Envoi d'une structure
    Par julien20vt dans le forum C++
    Réponses: 15
    Dernier message: 23/04/2003, 15h47
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo