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 :

Récupération de données dans une table


Sujet :

SAP

  1. #41
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    D'accord merci pour tes précisions.

    Lorsque j'affiche les données de ma table PERIODES[] en dé-bug avant ce SELECT, j'ai une centaine de résultats par rapport au MATRICULE que j'ai rentré en saisie...

    Alors faut-il modifier le dernier SELECT pour prendre le PERNR récupéré dans la table PPOIX ?

    Pour être clair : je veux que ma dernière requête prenne en compte le PERNR de la table PPOIX pour qu'il soit afficher dans la table ECRITURES, est ce possible ?

    Si tu as une idée lumineuse, ce que je doute pas, je suis preneur

  2. #42
    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 : 39
    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
    Non, ce n'est pas possible, ou alors pas facilement.

    Le mieux à faire, c'est de lire les entrées de PPOIX, via READ TABLE, pendant ton traitement qui alimente ta table ECRITURES. Donc via les liens que tu connais, il faut que tu remontes aux infos de PPOIX à partir des infos que tu as dans I_PPDIT.

  3. #43
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    D'accord il me semblait bien que ce n'était pas si simple...

    J'ai fais ce que tu m'as conseillé de faire, voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        LOOP AT i_ppdit.
          CLEAR ecritures.
          ecritures-rtype  = 'C'.
          ecritures-rste   = i_ppdit-bukrs.
          ecritures-retab  = i_ppdit-gsber+2(2).
          READ TABLE it_ppoix WITH KEY runid = i_ppdit-runid
               BINARY SEARCH.
          IF sy-subrc = 0.
            ecritures-pernr  = it_ppoix-pernr.
          ENDIF.
    Lors du dé-bug mon sy-subrc = 0...

    Mon MATRICULE est bien incrémenté dans ma table ECRITURES.

  4. #44
    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 : 39
    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
    Oui, j'ai un conseil.

    Pour faire un READ TABLE avec BINARY SEARCH (recherche dichotomique), il faut prendre soin au préalable de trier la table par les clés d'accès aux données.

    Pour I_PPDIT, tu lis en fonction de PERNR et RUNID, alors ton SORT doit être fait ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SORT i_ppdit BY pernr runid.
    Corrige et regarde si ça fonctionne mieux.

  5. #45
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    Merci de ton conseil

    Alors j'ai corrigé mon code comme ceci :

    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
        SELECT ppdhd~docnum ppdhd~runid blart doclin budat bldat abper
               ppdhd~bukrs sgtxt zuonr gsber pernr
               kostl ktosl hkont lifnr wrbtr waers
         APPENDING CORRESPONDING FIELDS OF TABLE i_ppdit
          FROM ppdhd INNER JOIN ppdit
            ON ppdit~docnum = ppdhd~docnum
           FOR ALL ENTRIES IN periodes
         WHERE ppdhd~docnum = periodes-docnum
           AND ppdit~gsber LIKE gsber.
    
        SORT i_ppdit BY pernr runid.
    
    *&----------------------------------------------------------------------
    *&  Transfert dans la table ECRITURES
    *&----------------------------------------------------------------------
        LOOP AT i_ppdit.
          CLEAR ecritures.
          ecritures-rtype  = 'C'.
          ecritures-rste   = i_ppdit-bukrs.
          ecritures-retab  = i_ppdit-gsber+2(2).
          READ TABLE it_ppoix WITH KEY  pernr = i_ppdit-pernr
                                        runid = i_ppdit-runid
               BINARY SEARCH.
          IF sy-subrc = 0.
            ecritures-pernr  = it_ppoix-pernr.
          ENDIF.
    Lors du dé-bug le sy-subrc = 4...



    J'ai triée également ma table PPOIX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        SORT it_ppoix by pernr runid.
    Tu vois une autre erreur ?

  6. #46
    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 : 39
    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
    Au temps pour moi... je me suis royalement planté.

    En voulant parler de la table I_PPOIX, j'ai écrit I_PPDIT. Donc c'était bien ta table interne IT_PPOIX qui était à trier.

    Haaa mais non mais non mais non !!!
    Ta lecture n'est pas logique non plus...
    table I_PPDIT => PERNR toujours vide
    table IT_PPOIX => PERNR alimenté

    READ TABLE IT_PPOIX
    WITH KEY PERNR = I_PPDIT-PERNR => D'après toi, ça donne quoi?

    Tu récupères les données de PPDIT et PPOIX via la table PERIODES, donc c'est par cette dernière que tu dois passer pour retrouver ton matricule dans PPOIX.

  7. #47
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    Pas de soucis

    D'après moi ça donne rien non?!

    Alors dans ce cas je tri la table IT_PPOIX :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        SORT it_ppoix BY pernr runid.
    Lecture par la table "PERIODES" ça donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
          READ TABLE it_ppoix WITH KEY pernr = periodes-pernr
                                       runid = periodes-runid
               BINARY SEARCH.
          IF sy-subrc = 0.
            ecritures-pernr  = it_ppoix-pernr.
          ENDIF.
    Mon sy-subrc = 0 !

    Cependant au niveau des résultats... ça coince !

    Peut importe le numéro de MATRICULE que je rentre en paramètre, j'ai toujours le même nombre d'affichage... Ce qui n'est pas logique !

    Il manque encore quelque chose ? As tu une idée ?

    Le sujet est bientôt résolu

    Merci pour ton aide Celdron

    La dernière version de mon code :

    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    FUNCTION Z_HR_ABC.
    *"----------------------------------------------------------------------
    *"*"Interface locale :
    *"  IMPORTING
    *"     VALUE(MPERIO) TYPE  CHAR2
    *"     VALUE(APERIO) TYPE  CHAR4
    *"     VALUE(SOCIETE) TYPE  BUKRS
    *"     VALUE(MATRICULE) TYPE  PERNR_D
    *"     VALUE(ETABLISSEMENT) TYPE  CHAR2 OPTIONAL
    *"     VALUE(RUNID) TYPE  P_EVNUM OPTIONAL
    *"     VALUE(STATUS) TYPE  P_EVSTATUS DEFAULT '50'
    *"     VALUE(SIMU) TYPE  P_EVSIMU DEFAULT ' '
    *"  TABLES
    *"      ECRITURES STRUCTURE  ZHR_ITF_ABC
    *"  EXCEPTIONS
    *"      NO_ENTRY
    *"----------------------------------------------------------------------
    
    *&----------------------------------------------------------------------
    *&  TABLE PERIODES
    *&----------------------------------------------------------------------
      DATA : BEGIN OF periodes OCCURS 0.
              INCLUDE STRUCTURE pevat.
      DATA : abkrs  TYPE abkrs,
             begda  TYPE d,
             endda  TYPE d,
             pabrp  TYPE pabrp,
             pabrj  TYPE pabrj,
             mperio TYPE char2,
             aperio TYPE char4,
             docnum TYPE ppdhd-docnum,
             pernr  LIKE ppoix-pernr,
             END OF periodes.
    
    *&----------------------------------------------------------------------
    *&  TABLE TRANCHES
    *&----------------------------------------------------------------------
      DATA : BEGIN OF tranches OCCURS 0,
               abkrs TYPE abkrs,
               pabrp TYPE pabrp,
               pabrj TYPE pabrj,
               begda TYPE d,
               endda TYPE d,
             END OF tranches.
    
    *&----------------------------------------------------------------------
    *&  PARAMETRES
    *&----------------------------------------------------------------------
      DATA : permo TYPE t549a-permo.
    
    *&----------------------------------------------------------------------
    *&  TABLE DES DONNEES I_PPDIT
    *&----------------------------------------------------------------------
      DATA: BEGIN OF i_ppdit OCCURS 0,
              docnum LIKE ppdhd-docnum ,
              runid  LIKE ppdhd-runid ,
              blart  LIKE ppdhd-blart,
              doclin LIKE ppdit-doclin,
              budat  LIKE ppdhd-budat,
              bldat  LIKE ppdhd-bldat,
              abper  LIKE ppdit-abper,
              bukrs  LIKE ppdhd-bukrs,
              sgtxt  LIKE ppdit-sgtxt,
              zuonr  LIKE ppdit-zuonr,
              gsber  LIKE ppdit-gsber,
              pernr  LIKE ppoix-pernr,
              kostl  LIKE ppdit-kostl,
              ktosl  LIKE ppdit-ktosl,
              hkont  LIKE ppdit-hkont,
              lifnr  LIKE ppdit-lifnr,
              wrbtr  LIKE ppdit-wrbtr,
              waers  LIKE ppdit-waers,
            END OF i_ppdit.
    
    *&----------------------------------------------------------------------
    *&  TABLES INTERNE
    *&----------------------------------------------------------------------
      DATA : it_pevst TYPE TABLE OF pevst WITH HEADER LINE.
      DATA : it_pevat TYPE TABLE OF pevat WITH HEADER LINE.
      DATA : it_ppoix TYPE TABLE OF ppoix WITH HEADER LINE.
    
    *&----------------------------------------------------------------------
    *&  PARAMETRES
    *&----------------------------------------------------------------------
      DATA : gsber TYPE gsber.
    
    *&----------------------------------------------------------------------
    *&  RANGES
    *&----------------------------------------------------------------------
      RANGES : r_runid FOR pevst-runid.
    
    *&----------------------------------------------------------------------
    *&  TRAITEMENT RUNID
    *&----------------------------------------------------------------------
      REFRESH r_runid.
    
      IF runid IS NOT INITIAL.
        CLEAR r_runid.
        r_runid-low = runid.
        r_runid-option = 'EQ'.
        r_runid-sign = 'I'.
        APPEND r_runid.
      ENDIF.
    
    *&----------------------------------------------------------------------
    *&  CONCATENATION
    *&----------------------------------------------------------------------
      CONCATENATE '%' etablissement '%' INTO gsber.
    
    *&----------------------------------------------------------------------
    *&  Sélection des documents à transmettre
    *&----------------------------------------------------------------------
      SELECT a~type a~runid a~attr a~id a~value d~docnum p~pernr
        FROM pevat AS a
      INNER JOIN pevsh AS h
         ON h~type  = a~type
        AND h~runid = a~runid
      INNER JOIN pevst AS t
         ON t~type  = a~type
        AND t~runid = a~runid
      INNER JOIN ppdhd AS d
         ON d~evtyp = a~type
        AND d~runid = a~runid
      INNER JOIN ppoix as p
       ON  p~runid = a~runid
       INTO CORRESPONDING FIELDS OF TABLE periodes
      WHERE a~type   = 'PP'
        AND t~runid  IN r_runid
        AND a~attr   = 'AKPER'
        AND h~actual = 'X'
        AND t~simu   = simu
        AND h~status = status
        AND d~bukrs  = societe
        AND p~pernr = matricule.
    
    *&----------------------------------------------------------------------
    *&  LOOP AT PERIODES
    *&----------------------------------------------------------------------
      LOOP AT periodes.
        periodes-abkrs = periodes-value(2).
        periodes-pabrp = periodes-value+3(2).
        periodes-pabrj = periodes-value+6(4).
    
        READ TABLE tranches WITH KEY abkrs = periodes-abkrs
                                     pabrp = periodes-pabrp
                                     pabrj = periodes-pabrj.
        IF sy-subrc = 0.
          periodes-begda  = tranches-begda.
          periodes-endda  = tranches-endda.
          periodes-mperio = tranches-endda+4(2).
          periodes-aperio = tranches-endda(4).
        ELSE.
          CLEAR permo.
          SELECT SINGLE permo FROM t549a
            INTO permo
           WHERE abkrs = periodes-abkrs.
    
          SELECT SINGLE * FROM t549q
           INTO CORRESPONDING FIELDS OF tranches
           WHERE permo = permo
             AND pabrj = periodes-pabrj
             AND pabrp = periodes-pabrp.
    
          tranches-abkrs = periodes-abkrs.
    
          APPEND tranches.
    
          periodes-begda  = tranches-begda.
          periodes-endda  = tranches-endda.
          periodes-mperio = tranches-endda+4(2).
          periodes-aperio = tranches-endda(4).
        ENDIF.
    
        IF periodes-aperio NE aperio OR periodes-mperio NE mperio.
          DELETE periodes.
        ELSE.
          MODIFY periodes.
        ENDIF.
    
      ENDLOOP.
    *&----------------------------------------------------------------------
    *&  ENDLOOP PERIODES
    *&----------------------------------------------------------------------
    
      IF periodes[] IS INITIAL.
        RAISE no_entry.
      ELSE.
    
    *&----------------------------------------------------------------------
    *&  Sélection des données à transférer
    *&----------------------------------------------------------------------
        REFRESH: it_pevst, it_pevat, it_ppoix.
    
        SELECT mandt type runid name simu FROM pevst
          INTO TABLE it_pevst
           FOR ALL ENTRIES IN periodes
         WHERE type = 'PP'
           AND runid = periodes-runid.
    
        SORT it_pevst.
    
        SELECT mandt type runid attr id value FROM pevat
          INTO TABLE it_pevat
           FOR ALL ENTRIES IN periodes
         WHERE type = 'PP'
           AND runid = periodes-runid
           AND attr = 'AKPER'.
    
        SORT it_pevat.
    
        SELECT * FROM ppoix
          INTO TABLE it_ppoix
          FOR ALL ENTRIES IN periodes
          WHERE runid = periodes-runid
          AND pernr = matricule.
    
        SORT it_ppoix BY pernr runid.
    
        SELECT ppdhd~docnum ppdhd~runid blart doclin budat bldat abper
               ppdhd~bukrs sgtxt zuonr gsber pernr
               kostl ktosl hkont lifnr wrbtr waers
         APPENDING CORRESPONDING FIELDS OF TABLE i_ppdit
          FROM ppdhd INNER JOIN ppdit
            ON ppdit~docnum = ppdhd~docnum
           FOR ALL ENTRIES IN periodes
         WHERE ppdhd~docnum = periodes-docnum
           AND ppdit~gsber LIKE gsber.
    
    *&----------------------------------------------------------------------
    *&  Transfert dans la table ECRITURES
    *&----------------------------------------------------------------------
        LOOP AT i_ppdit.
          CLEAR ecritures.
          ecritures-rtype  = 'C'.
          ecritures-rste   = i_ppdit-bukrs.
          ecritures-retab  = i_ppdit-gsber+2(2).
          READ TABLE it_ppoix WITH KEY pernr = periodes-pernr
                                       runid = periodes-runid
               BINARY SEARCH.
          IF sy-subrc = 0.
            ecritures-pernr  = it_ppoix-pernr.
          ENDIF.
          ecritures-rgen   = i_ppdit-hkont.
          ecritures-ranp   = i_ppdit-budat(4).
          ecritures-rmoisp = i_ppdit-budat+4(2).
          ecritures-rjourp = i_ppdit-budat+6(2).
          ecritures-rce    = '6'.
          ecritures-ddatoa = i_ppdit-bldat(4).
          ecritures-ddatom = i_ppdit-bldat+4(2).
          ecritures-ddatoj = i_ppdit-bldat+6(2).
          ecritures-djal   = '640'.
          ecritures-dpiece = i_ppdit-docnum+2.
          READ TABLE it_pevst WITH KEY type  = 'PP'
                                       runid = i_ppdit-runid
               BINARY SEARCH.
          IF sy-subrc = 0.
            ecritures-dlib = it_pevst-name.
          ENDIF.
          IF i_ppdit-wrbtr LT 0.
            ecritures-dmdev = 0 - ( i_ppdit-wrbtr * 100 ) .
          ELSE.
            ecritures-dmdev = i_ppdit-wrbtr * 100.
          ENDIF.
          ecritures-dfolio = 'PAI'.
          ecritures-dws    = 'SAL'.
          ecritures-dnolig = i_ppdit-doclin.
          ecritures-dcdev  = i_ppdit-waers.
          ecritures-rsect  = i_ppdit-kostl.
          ecritures-rsect5 = i_ppdit-gsber.
          IF i_ppdit-wrbtr LT 0.
            ecritures-dsens = '-'.
          ELSE.
            ecritures-dsens = '+'.
          ENDIF.
          APPEND ecritures.
        ENDLOOP.
      ENDIF.
    ENDFUNCTION.

  8. #48
    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 : 39
    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,

    Encore une fois, c'est tout à fait normal. Tu lis IT_PPOIX en fonction de ta table interne PERIODES, ça c'est ok. Seulement, tu oublies une étape pourtant bien évidente. Avant de lire la table IT_PPOIX, ta table PERIODES… tu dois la lire en fonction de quoi? En fonction des valeurs que t'as dans I_PPDIT, et actuellement, le fais-tu?

    De ce fait, PERIODES-PERNR et PERIODES-RUNID gardent toujours les mêmes valeurs, c'est-à-dire les dernières valeurs traitées lors de ton traitement LOOP AT PERIODES (ligne 139 de ton code).

    Si j'ai bien compris, ta table PERIODES, tu dois la lire au préalable en fonction du DOCNUM que t'as normalement dans le champ I_PPDIT-DOCNUM.

    Apporte cette correction et regarde si c'est mieux.

  9. #49
    Membre éclairé Avatar de beuzy
    Femme Profil pro
    SAP
    Inscrit en
    Novembre 2008
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : SAP
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 614
    Points : 705
    Points
    705
    Par défaut
    Fiou j’espère que vous allez y arriver par contre je me souviens sur un projet avoir du appliquer un nettoyage des binary search car par moment même avec les tris adéquat ça bug par moment, surement par rapport à l'ordre des colonnes ou à la definition m^me du type de table

  10. #50
    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 : 39
    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
    Bah, t'inquiète pas. Par rapport à ce que je fais à mon boulot actuellement, ce genre de problème, ça me détend.

  11. #51
    Membre éclairé Avatar de beuzy
    Femme Profil pro
    SAP
    Inscrit en
    Novembre 2008
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : SAP
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 614
    Points : 705
    Points
    705
    Par défaut
    m'en parle pas je fais de la reprise de données....

  12. #52
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    Salut Celdron,

    J'ai pris en compte tes remarques...

    Pour commencer je fais un tri de la table PERIODES après mon LOOP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      SORT periodes BY docnum.
    Je lis ma table PERIODES en fonction des valeurs que j'ai dans I_PPDIT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        LOOP AT i_ppdit.
          CLEAR ecritures.
          ecritures-rtype  = 'C'.
          ecritures-rste   = i_ppdit-bukrs.
          ecritures-retab  = i_ppdit-gsber+2(2).
          READ TABLE periodes WITH KEY docnum = i_ppdit-docnum
          BINARY SEARCH.
          READ TABLE it_ppoix WITH KEY pernr = periodes-pernr
                                       runid = periodes-runid
               BINARY SEARCH.
          IF sy-subrc = 0.
            ecritures-pernr  = it_ppoix-pernr.
          ENDIF.
    Mon résultat est cohérent car je trouve 0 entrée... je m'explique :

    Le champ PERNR de la table PPOIX est alimenté.
    Le champ PERNR de la table PPDIT n'est pas alimenté.

    Le résultat est logique non ?

    Cependant je souhaite retourner les comptes (rubrique : HKONT) de chaque matricule... Comment puis-je faire la liaison ?

    Des idées ?

    Dernière version du code :
    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    FUNCTION Z_HR_ABC.
    *"----------------------------------------------------------------------
    *"*"Interface locale :
    *"  IMPORTING
    *"     VALUE(MPERIO) TYPE  CHAR2
    *"     VALUE(APERIO) TYPE  CHAR4
    *"     VALUE(SOCIETE) TYPE  BUKRS
    *"     VALUE(MATRICULE) TYPE  PERNR_D OPTIONAL
    *"     VALUE(ETABLISSEMENT) TYPE  CHAR2 OPTIONAL
    *"     VALUE(RUNID) TYPE  P_EVNUM OPTIONAL
    *"     VALUE(STATUS) TYPE  P_EVSTATUS DEFAULT '50'
    *"     VALUE(SIMU) TYPE  P_EVSIMU DEFAULT ' '
    *"  TABLES
    *"      ECRITURES STRUCTURE  ZHR_ITF_ABC
    *"  EXCEPTIONS
    *"      NO_ENTRY
    *"----------------------------------------------------------------------
    
    *&----------------------------------------------------------------------
    *&  TABLE PERIODES
    *&----------------------------------------------------------------------
      DATA : BEGIN OF periodes OCCURS 0.
              INCLUDE STRUCTURE pevat.
      DATA : abkrs  TYPE abkrs,
             begda  TYPE d,
             endda  TYPE d,
             pabrp  TYPE pabrp,
             pabrj  TYPE pabrj,
             mperio TYPE char2,
             aperio TYPE char4,
             docnum TYPE ppdhd-docnum,
             pernr  LIKE ppoix-pernr,
             END OF periodes.
    
    *&----------------------------------------------------------------------
    *&  TABLE TRANCHES
    *&----------------------------------------------------------------------
      DATA : BEGIN OF tranches OCCURS 0,
               abkrs TYPE abkrs,
               pabrp TYPE pabrp,
               pabrj TYPE pabrj,
               begda TYPE d,
               endda TYPE d,
             END OF tranches.
    
    *&----------------------------------------------------------------------
    *&  PARAMETRES
    *&----------------------------------------------------------------------
      DATA : permo TYPE t549a-permo.
    
    *&----------------------------------------------------------------------
    *&  TABLE DES DONNEES I_PPDIT
    *&----------------------------------------------------------------------
      DATA: BEGIN OF i_ppdit OCCURS 0,
              docnum LIKE ppdhd-docnum ,
              runid  LIKE ppdhd-runid ,
              blart  LIKE ppdhd-blart,
              doclin LIKE ppdit-doclin,
              budat  LIKE ppdhd-budat,
              bldat  LIKE ppdhd-bldat,
              abper  LIKE ppdit-abper,
              bukrs  LIKE ppdhd-bukrs,
              sgtxt  LIKE ppdit-sgtxt,
              zuonr  LIKE ppdit-zuonr,
              gsber  LIKE ppdit-gsber,
              pernr  LIKE ppoix-pernr,
              kostl  LIKE ppdit-kostl,
              ktosl  LIKE ppdit-ktosl,
              hkont  LIKE ppdit-hkont,
              lifnr  LIKE ppdit-lifnr,
              wrbtr  LIKE ppdit-wrbtr,
              waers  LIKE ppdit-waers,
            END OF i_ppdit.
    
    *&----------------------------------------------------------------------
    *&  TABLES INTERNE
    *&----------------------------------------------------------------------
      DATA : it_pevst TYPE TABLE OF pevst WITH HEADER LINE.
      DATA : it_pevat TYPE TABLE OF pevat WITH HEADER LINE.
      DATA : it_ppoix TYPE TABLE OF ppoix WITH HEADER LINE.
    
    *&----------------------------------------------------------------------
    *&  PARAMETRES
    *&----------------------------------------------------------------------
      DATA : gsber TYPE gsber.
    
    *&----------------------------------------------------------------------
    *&  RANGES
    *&----------------------------------------------------------------------
      RANGES : r_runid FOR pevst-runid.
    
    *&----------------------------------------------------------------------
    *&  TRAITEMENT RUNID
    *&----------------------------------------------------------------------
      REFRESH r_runid.
    
      IF runid IS NOT INITIAL.
        CLEAR r_runid.
        r_runid-low = runid.
        r_runid-option = 'EQ'.
        r_runid-sign = 'I'.
        APPEND r_runid.
      ENDIF.
    
    *&----------------------------------------------------------------------
    *&  CONCATENATION
    *&----------------------------------------------------------------------
      CONCATENATE '%' etablissement '%' INTO gsber.
    
    *&----------------------------------------------------------------------
    *&  Sélection des documents à transmettre
    *&----------------------------------------------------------------------
      SELECT a~type a~runid a~attr a~id a~value d~docnum p~pernr
        FROM pevat AS a
      INNER JOIN pevsh AS h
         ON h~type  = a~type
        AND h~runid = a~runid
      INNER JOIN pevst AS t
         ON t~type  = a~type
        AND t~runid = a~runid
      INNER JOIN ppdhd AS d
         ON d~evtyp = a~type
        AND d~runid = a~runid
      INNER JOIN ppoix as p
       ON  p~runid = a~runid
       INTO CORRESPONDING FIELDS OF TABLE periodes
      WHERE a~type   = 'PP'
        AND t~runid  IN r_runid
        AND a~attr   = 'AKPER'
        AND h~actual = 'X'
        AND t~simu   = simu
        AND h~status = status
        AND d~bukrs  = societe
        AND p~pernr = matricule.
    
    *&----------------------------------------------------------------------
    *&  LOOP AT PERIODES
    *&----------------------------------------------------------------------
      LOOP AT periodes.
        periodes-abkrs = periodes-value(2).
        periodes-pabrp = periodes-value+3(2).
        periodes-pabrj = periodes-value+6(4).
    
        READ TABLE tranches WITH KEY abkrs = periodes-abkrs
                                     pabrp = periodes-pabrp
                                     pabrj = periodes-pabrj.
        IF sy-subrc = 0.
          periodes-begda  = tranches-begda.
          periodes-endda  = tranches-endda.
          periodes-mperio = tranches-endda+4(2).
          periodes-aperio = tranches-endda(4).
        ELSE.
          CLEAR permo.
          SELECT SINGLE permo FROM t549a
            INTO permo
           WHERE abkrs = periodes-abkrs.
    
          SELECT SINGLE * FROM t549q
           INTO CORRESPONDING FIELDS OF tranches
           WHERE permo = permo
             AND pabrj = periodes-pabrj
             AND pabrp = periodes-pabrp.
    
          tranches-abkrs = periodes-abkrs.
    
          APPEND tranches.
    
          periodes-begda  = tranches-begda.
          periodes-endda  = tranches-endda.
          periodes-mperio = tranches-endda+4(2).
          periodes-aperio = tranches-endda(4).
        ENDIF.
    
        IF periodes-aperio NE aperio OR periodes-mperio NE mperio.
          DELETE periodes.
        ELSE.
          MODIFY periodes.
        ENDIF.
    
      ENDLOOP.
    
      SORT periodes BY docnum.
    *&----------------------------------------------------------------------
    *&  ENDLOOP PERIODES
    *&----------------------------------------------------------------------
    
      IF periodes[] IS INITIAL.
        RAISE no_entry.
      ELSE.
    
    *&----------------------------------------------------------------------
    *&  Sélection des données à transférer
    *&----------------------------------------------------------------------
        REFRESH: it_pevst, it_pevat, it_ppoix.
    
        SELECT mandt type runid name simu FROM pevst
          INTO TABLE it_pevst
           FOR ALL ENTRIES IN periodes
         WHERE type = 'PP'
           AND runid = periodes-runid.
    
        SORT it_pevst.
    
        SELECT mandt type runid attr id value FROM pevat
          INTO TABLE it_pevat
           FOR ALL ENTRIES IN periodes
         WHERE type = 'PP'
           AND runid = periodes-runid
           AND attr = 'AKPER'.
    
        SORT it_pevat.
    
        SELECT * FROM ppoix
          INTO TABLE it_ppoix
          FOR ALL ENTRIES IN periodes
          WHERE runid = periodes-runid
          AND pernr = matricule.
    
        SORT it_ppoix BY pernr runid.
    
        SELECT ppdhd~docnum ppdhd~runid blart doclin budat bldat abper
               ppdhd~bukrs sgtxt zuonr gsber pernr
               kostl ktosl hkont lifnr wrbtr waers
         APPENDING CORRESPONDING FIELDS OF TABLE i_ppdit
          FROM ppdhd INNER JOIN ppdit
            ON ppdit~docnum = ppdhd~docnum
           FOR ALL ENTRIES IN periodes
         WHERE ppdhd~docnum = periodes-docnum
           AND ppdit~pernr = periodes-pernr
           AND ppdit~gsber LIKE gsber.
    
    *&----------------------------------------------------------------------
    *&  Transfert dans la table ECRITURES
    *&----------------------------------------------------------------------
        LOOP AT i_ppdit.
          CLEAR ecritures.
          ecritures-rtype  = 'C'.
          ecritures-rste   = i_ppdit-bukrs.
          ecritures-retab  = i_ppdit-gsber+2(2).
          READ TABLE periodes WITH KEY docnum = i_ppdit-docnum
          BINARY SEARCH.
          READ TABLE it_ppoix WITH KEY pernr = periodes-pernr
                                       runid = periodes-runid
               BINARY SEARCH.
          IF sy-subrc = 0.
            ecritures-pernr  = it_ppoix-pernr.
          ENDIF.
          ecritures-rgen   = i_ppdit-hkont.
          ecritures-ranp   = i_ppdit-budat(4).
          ecritures-rmoisp = i_ppdit-budat+4(2).
          ecritures-rjourp = i_ppdit-budat+6(2).
          ecritures-rce    = '6'.
          ecritures-ddatoa = i_ppdit-bldat(4).
          ecritures-ddatom = i_ppdit-bldat+4(2).
          ecritures-ddatoj = i_ppdit-bldat+6(2).
          ecritures-djal   = '640'.
          ecritures-dpiece = i_ppdit-docnum+2.
          READ TABLE it_pevst WITH KEY type  = 'PP'
                                       runid = i_ppdit-runid
               BINARY SEARCH.
          IF sy-subrc = 0.
            ecritures-dlib = it_pevst-name.
          ENDIF.
          IF i_ppdit-wrbtr LT 0.
            ecritures-dmdev = 0 - ( i_ppdit-wrbtr * 100 ) .
          ELSE.
            ecritures-dmdev = i_ppdit-wrbtr * 100.
          ENDIF.
          ecritures-dfolio = 'PAI'.
          ecritures-dws    = 'SAL'.
          ecritures-dnolig = i_ppdit-doclin.
          ecritures-dcdev  = i_ppdit-waers.
          ecritures-rsect  = i_ppdit-kostl.
          ecritures-rsect5 = i_ppdit-gsber.
          IF i_ppdit-wrbtr LT 0.
            ecritures-dsens = '-'.
          ELSE.
            ecritures-dsens = '+'.
          ENDIF.
          APPEND ecritures.
        ENDLOOP.
      ENDIF.
    ENDFUNCTION.

  13. #53
    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 : 39
    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
    Même problématique que d'habitude...

    En enlevant cette ligne de ta jointure entre PPDHD et PPDIT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND ppdit~pernr = periodes-pernr
    @beuzy : Moi aussi je fais de la reprise de données… mais sans pisser une ligne d'ABAP. Je te laisse imaginer dans quel état je suis. =>

  14. #54
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    J'ai effectivement enlevé cette ligne...

    Une question : comment est faite la liaison pour que le champ PERNR de la table PPOIX correspondent avec le champ HKONT de la table PPDIT ?

    J'aimerais avoir ton analyse une fois de plus

    Merci !

    Bon courage pour la reprise de données @ Celdron et Beuzy

  15. #55
    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 : 39
    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
    Ben te répondre risque d'être difficile, je travaille sur un projet qui n'a pas encore d'environnement de Prod.

    Normalement t'as des fonctionnels qui peuvent sûrement répondre à ce genre de question. Je peux t'aider sur les aspects techniques de ton code, mais en terme de raisonnement fonctionnel, je ne suis pas en mesure de te répondre avec fiabilité.

  16. #56
    Membre éclairé Avatar de beuzy
    Femme Profil pro
    SAP
    Inscrit en
    Novembre 2008
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : SAP
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 614
    Points : 705
    Points
    705
    Par défaut
    Question bête car je n'ai pas eu le temps de tout lire j'ai vu une requete du meme genre mais avec ppdix pour faire le lien : as tu essayer?

    FROM ppdit

    INNER JOIN ppdix ON

    ppdixdocnum EQ ppditdocnum AND

    ppdixdoclin EQ ppditdoclin
    INNER JOIN ppoix ON

    ppoixrunid EQ ppdixrunid AND

    ppoixtslin EQ ppdixlinum

  17. #57
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    D'accord Celdron, en tout cas merci de ton aide

    Je voulais juste savoir si le fonctionnement était cohérent pour toi ?

    @ beuzy : tu veux que je remplace quel requête au juste ? Merci de ton aide.

  18. #58
    Membre éclairé Avatar de beuzy
    Femme Profil pro
    SAP
    Inscrit en
    Novembre 2008
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : SAP
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 614
    Points : 705
    Points
    705
    Par défaut
    Bah j'avoue que tes requetes sont vraiment enormes je pensais que tu cherchais le lien entre ppdit et ppoix mais je ne crains pouvoir t'aider plus

  19. #59
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    Oui en effet je cherchais le lien entre ces deux tables.

    En fait pour résumé :

    Est ce que le traitement me donne bien tous les Comptes (champ HKONT de la table PPDIT) pour un Matricule saisi (champ PERNR de la table PPOIX) ?


  20. #60
    Membre éclairé Avatar de beuzy
    Femme Profil pro
    SAP
    Inscrit en
    Novembre 2008
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : SAP
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 614
    Points : 705
    Points
    705
    Par défaut
    Je vois mais sur mon système j'ai pas HR les tables sont vides donc difficiles de voir

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/10/2014, 12h19
  2. Récupération de données d'une table dans un fichier Word
    Par flieto dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 02/12/2013, 12h48
  3. récupération des données d'une table dans une page jsp
    Par sihamsisim dans le forum Struts 1
    Réponses: 28
    Dernier message: 22/05/2008, 19h01
  4. [MySQL] Récupération des données dans une table
    Par doudom dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 25/07/2007, 19h59
  5. Problème de récupérations de données dans une table mysql
    Par Helpine dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 09/03/2006, 19h07

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