Advertisement
CDLG_TGR

Itab into Itab into Itab

Apr 19th, 2017
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 5.27 KB | None | 0 0
  1. " pour la selection
  2. TYPES : BEGIN OF ts_tblflddup,
  3.           tabname   TYPE tabname,
  4.           domname   TYPE domname,
  5.           fieldname TYPE fieldname,
  6.           oldvalue  TYPE string,
  7.           newvalue  TYPE string,
  8.         END OF ts_tblflddup,
  9.         tt_tblflddup TYPE STANDARD TABLE OF ts_tblflddup.
  10.  
  11. " pour le merging avant selection dans tables
  12. TYPES : BEGIN OF ts_clval,
  13.           clause_value TYPE string,
  14.         END OF ts_clval,
  15.         tt_clval TYPE SORTED TABLE OF ts_clval WITH
  16.         UNIQUE KEY clause_value.
  17.  
  18. TYPES : BEGIN OF ts_fldmrg,
  19.           fieldname TYPE fieldname,
  20.           t_clval   TYPE tt_clval,
  21.         END OF ts_fldmrg,
  22.         tt_fldmrg TYPE SORTED TABLE OF ts_fldmrg WITH UNIQUE KEY
  23.         fieldname.
  24.  
  25. TYPES : BEGIN OF ts_tblmrgdup,
  26.           tabname TYPE tabname,
  27.           t_key   TYPE tt_fldmrg,
  28.           t_fld   TYPE tt_fldmrg,
  29.         END OF ts_tblmrgdup,
  30.         tt_tblmrgdup TYPE SORTED TABLE OF ts_tblmrgdup WITH
  31.         UNIQUE KEY tabname.
  32.  
  33.  
  34.  
  35. FORM merge_tblflddup
  36.   USING
  37.         it_tblkey TYPE tt_tblflddup
  38.         it_tblfld TYPE tt_tblflddup
  39.   CHANGING
  40.         et_tblmrg TYPE tt_tblmrgdup
  41.         ct_protocole TYPE tt_protocole.
  42.  
  43.   DATA : ls_tblkey TYPE ts_tblflddup,
  44.          ls_tblfld TYPE ts_tblflddup.
  45.   DATA : ls_tblmrg TYPE ts_tblmrgdup.
  46.   DATA : ls_key TYPE ts_fldmrg,
  47.          ls_fld TYPE ts_fldmrg.
  48.   DATA : ls_clval TYPE ts_clval.
  49.   DATA : lv_index  TYPE i,
  50.          lv_index2 TYPE i,
  51.          lv_index3 TYPE i.
  52.  
  53.   LOOP AT it_tblkey INTO ls_tblkey.
  54.     READ TABLE et_tblmrg WITH TABLE KEY tabname = ls_tblkey-tabname
  55.     INTO ls_tblmrg.
  56.     lv_index = sy-tabix.
  57.  
  58.     IF sy-subrc EQ 0. "l'entrée existe on ajoute le domaine
  59.       " sauf si il est déjà présent
  60.       " dans ce cas on ajoute la valeurs sauf si elle est déjà
  61.       " présente
  62.       READ TABLE ls_tblmrg-t_key WITH TABLE KEY
  63.       fieldname = ls_tblkey-fieldname INTO ls_key.
  64.       lv_index2 = sy-tabix.
  65.       IF sy-subrc EQ 0. " l'entrée existe on regarde si la valeur existe
  66.         READ TABLE ls_key-t_clval WITH TABLE KEY
  67.         clause_value = ls_tblkey-oldvalue TRANSPORTING NO FIELDS.
  68.         lv_index3 = sy-tabix.
  69.         " notre selection se fera sur  l'ancienne valeur !
  70.         IF sy-subrc NE 0. " si pasd'entrée on insére
  71.           CLEAR ls_clval.
  72.  
  73.           ls_clval-clause_value = ls_tblkey-oldvalue.
  74.  
  75.           INSERT ls_clval INTO ls_key-t_clval INDEX lv_index3.
  76.           MODIFY ls_tblmrg-t_key FROM ls_key INDEX lv_index2.
  77.           MODIFY et_tblmrg FROM ls_tblmrg INDEX lv_index.
  78.         ENDIF.
  79.       ELSE.
  80.         CLEAR ls_key.
  81.         CLEAR ls_clval.
  82.         " on insére // aucun entrée val
  83.         ls_key-fieldname = ls_tblkey-fieldname.
  84.         ls_clval-clause_value = ls_tblkey-oldvalue.
  85.  
  86.         INSERT ls_clval INTO ls_key-t_clval INDEX 1.
  87.         INSERT ls_key INTO ls_tblmrg-t_key INDEX lv_index2.
  88.         MODIFY et_tblmrg FROM ls_tblmrg INDEX lv_index.
  89.       ENDIF.
  90.     ELSE.
  91.       CLEAR ls_tblmrg.
  92.       CLEAR ls_key.
  93.       CLEAR ls_clval.
  94.  
  95.       ls_clval-clause_value = ls_tblkey-oldvalue.
  96.       ls_key-fieldname = ls_tblkey-fieldname.
  97.       ls_tblmrg-tabname = ls_tblkey-tabname.
  98.       INSERT ls_clval INTO ls_key-t_clval INDEX 1.
  99.       INSERT ls_key INTO ls_tblmrg-t_key INDEX 1.
  100.       INSERT ls_tblmrg INTO et_tblmrg INDEX lv_index.
  101.     ENDIF.
  102.   ENDLOOP.
  103.  
  104. * IDEM pour les FLD
  105.  
  106.   LOOP AT it_tblfld INTO ls_tblfld.
  107.     READ TABLE et_tblmrg WITH TABLE KEY tabname = ls_tblfld-tabname
  108.     INTO ls_tblmrg.
  109.     lv_index = sy-tabix.
  110.     " TODO L'entrée est obligé d'existé sinon protocole
  111.     IF sy-subrc EQ 0.
  112.       READ TABLE ls_tblmrg-t_fld WITH TABLE KEY
  113.       fieldname = ls_tblfld-fieldname INTO ls_fld.
  114.       lv_index2 = sy-tabix.
  115.       IF sy-subrc EQ 0. " l'entrée existe on regarde si la valeur existe
  116.         READ TABLE ls_fld-t_clval WITH TABLE KEY
  117.         clause_value = ls_tblfld-oldvalue TRANSPORTING NO FIELDS.
  118.         lv_index3 = sy-tabix.
  119.         " notre selection se fera sur  l'ancienne valeur !
  120.         IF sy-subrc NE 0. " si pasd'entrée on insére
  121.           CLEAR ls_clval.
  122.  
  123.           ls_clval-clause_value = ls_tblfld-oldvalue.
  124.  
  125.           INSERT ls_clval INTO ls_fld-t_clval INDEX lv_index3.
  126.           MODIFY ls_tblmrg-t_fld FROM ls_fld INDEX lv_index2.
  127.           MODIFY et_tblmrg FROM ls_tblmrg INDEX lv_index.
  128.         ENDIF.
  129.       ELSE.
  130.         CLEAR ls_fld.
  131.         CLEAR ls_clval.
  132.         " on insére // aucun entrée val
  133.         ls_fld-fieldname = ls_tblfld-fieldname.
  134.         ls_clval-clause_value = ls_tblfld-oldvalue.
  135.  
  136.         INSERT ls_clval INTO ls_fld-t_clval INDEX 1.
  137.         INSERT ls_fld INTO ls_tblmrg-t_fld INDEX lv_index2.
  138.         MODIFY et_tblmrg FROM ls_tblmrg INDEX lv_index.
  139.       ENDIF.
  140.     ELSE.
  141.       CLEAR ls_tblmrg.
  142.       CLEAR ls_fld.
  143.       CLEAR ls_clval.
  144.  
  145.       ls_clval-clause_value = ls_tblfld-oldvalue.
  146.       ls_fld-fieldname = ls_tblfld-fieldname.
  147.       ls_tblmrg-tabname = ls_tblfld-tabname.
  148.       INSERT ls_clval INTO ls_fld-t_clval INDEX 1.
  149.       INSERT ls_fld INTO ls_tblmrg-t_fld INDEX 1.
  150.       INSERT ls_tblmrg INTO et_tblmrg INDEX lv_index.
  151.     ENDIF.
  152.   ENDLOOP.
  153. ***
  154. **********
  155. *  TABLE * FLD * KEY *
  156. *        * FIELDNAME VAL
  157. *                      X
  158. *                      Y
  159. *        *
  160. *********
  161. ENDFORM.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement