Aller au contenu

Abap - ZBI01 - Programme outils

Programme principal

*&---------------------------------------------------------------------*
*& Report Z_PC_ANALYSIS
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_bi_tools.

*&---------------------------------------------------------------------*
*& Variables
*&---------------------------------------------------------------------*
INCLUDE z_bi_tools_dat.

*&---------------------------------------------------------------------*
*& Selection-Screen
*&---------------------------------------------------------------------*
INCLUDE z_bi_tools_scr.

*&---------------------------------------------------------------------*
*& Main Program
*&---------------------------------------------------------------------*
* Recherche de programmes ABAP utiilsés dans une PC
IF rb1 = 'X'.
  PERFORM selectionner_donnees.
  PERFORM afficher_resultat.

* Recherche de process chains utilisés dans une PC
ELSEIF rb2 = 'X'.
  PERFORM chercher_pc.
  PERFORM afficher_pc.

* Affichage des variables pour un ou plusieurs infoobjet(s)
ELSEIF rb3 = 'X'.
  PERFORM chercher_variables.
  PERFORM afficher_variables.

* Affichage du contenu BW d'un ordre de transport
ELSEIF rb4 = 'X'.
  PERFORM chercher_ot.
  PERFORM afficher_ot.

* Affichage des textes locaux dans une query
ELSEIF rb5 = 'X'.
  PERFORM find_local_text.
  PERFORM display_local_text.

* Affichage les transports contenant une query
ELSEIF rb6 = 'X'.
  PERFORM find_query_in_transport.
  PERFORM display_query_in_transport.


ENDIF.
*&---------------------------------------------------------------------*
*& Forms
*&---------------------------------------------------------------------*
INCLUDE z_bi_tools_f01.

Include déclaration des variables Z_BI_TOOLS_DAT

*&---------------------------------------------------------------------*
*&  Include           Z_PC_ANALYSIS_DAT
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
* Type + Variable simple + Table asssociée
*&---------------------------------------------------------------------*
TYPES : BEGIN OF ty_rspcchain,
          chain_id TYPE rspc_chain,
          objvers    TYPE rsobjvers,
          type     TYPE rspc_type,
          variante TYPE rspc_variant,
        END OF ty_rspcchain.

DATA it_rspcchain TYPE TABLE OF ty_rspcchain.
DATA s_rspcchain  LIKE LINE OF it_rspcchain.

*&---------------------------------------------------------------------*
* Type + Variable simple + Table asssociée
*&---------------------------------------------------------------------*
TYPES : BEGIN OF ty_rspcvariant,
          variante TYPE rspcvariant-variante,
          low      TYPE rspcvariant-low,
          var_abap TYPE rspcvariant-low,
        END   OF ty_rspcvariant.

DATA it_rspcvariant TYPE TABLE OF ty_rspcvariant.
DATA s_rspcvariant  LIKE LINE OF  it_rspcvariant.

*&---------------------------------------------------------------------*
* Type + Variable simple + Table asssociée
*&---------------------------------------------------------------------*
TYPES : BEGIN OF ty_result,
          chain_id LIKE rspcchain-chain_id,
          objvers  LIKE rspcchain-objvers,
          type     LIKE rspcchain-type,
          variante LIKE rspcchain-variante,
          abap     LIKE rspcvariant-low,
          var_abap LIKE rspcvariant-low,
        END OF ty_result.

DATA it_result      TYPE TABLE OF ty_result.
DATA s_result       LIKE LINE OF  it_result.

*&---------------------------------------------------------------------*
* Type + Variable simple + Table asssociée
*&---------------------------------------------------------------------*
TYPES : BEGIN OF ty_result_pc,
          chain_id LIKE rspcchain-chain_id,
          objvers  LIKE rspcchain-objvers,
          type     LIKE rspcchain-type,
          variante LIKE rspcchain-variante,
        END OF ty_result_pc.

DATA it_result_pc  TYPE TABLE OF ty_result_pc.
DATA s_result_pc   LIKE LINE OF  it_result_pc.

*&---------------------------------------------------------------------*
* Type + Variable simple + Table asssociée
*&---------------------------------------------------------------------*
TYPES : BEGIN OF ty_variable,
          varuniid LIKE rszglobv-varuniid,
          iobjnm   LIKE rszglobv-iobjnm,
          vnam     LIKE rszglobv-vnam,
          txtlg    LIKE rszelttxt-txtlg,
          vartyp   LIKE rszglobv-vartyp,
          vproctp  LIKE rszglobv-vproctp,
          vparsel  LIKE rszglobv-vparsel,
          varinput LIKE rszglobv-varinput,
          entrytp  LIKE rszglobv-entrytp,
        END OF ty_variable.

DATA it_variables  TYPE TABLE OF ty_variable.
DATA s_variables   LIKE LINE OF  it_variables.

*&---------------------------------------------------------------------*
* Type + Variable simple + Table asssociée
*&---------------------------------------------------------------------*
TYPES : BEGIN OF ty_variable_display,
          iobjnm           LIKE rszglobv-iobjnm,
          vnam             LIKE rszglobv-vnam,
          txtlg            LIKE rszelttxt-txtlg,
          en_prod(1)       TYPE c,
          vartyp_disp(20)  TYPE c,
          vproctp_disp(20) TYPE c,
          vparsel_disp(21) TYPE c,
          varinput_disp(3) TYPE c,
          entrytp_disp(36) TYPE c,
        END OF ty_variable_display.

DATA it_var_disp  TYPE TABLE OF ty_variable_display.
DATA s_var_disp   LIKE LINE OF  it_var_disp.

*&---------------------------------------------------------------------*
* Type + Variable simple + Table asssociée
*&---------------------------------------------------------------------*
TYPES : BEGIN OF ty_ot_variable,
          vnam     LIKE rszglobv-vnam,
          value(1) TYPE c,
        END OF ty_ot_variable.

DATA it_ot_variable TYPE TABLE OF ty_ot_variable.
DATA s_ot_variable  LIKE LINE OF  it_ot_variable.

*&---------------------------------------------------------------------*
* Type + Variable simple + Table asssociée
*&---------------------------------------------------------------------*
TYPES : BEGIN OF ty_disp_loc,
          composite   TYPE rsinfocube,
          query       TYPE rszcompid,
          deftp       LIKE rszeltdir-deftp,
          subdeftp    LIKE rszeltdir-subdeftp,
          defaulthint LIKE rszeltdir-defaulthint,
          txtlg       LIKE rszelttxt-txtlg,
          std_txtlg   LIKE rsiobjt-txtlg,
          check(2)    TYPE c,
          cpt         TYPE i,
        END OF ty_disp_loc.

DATA it_disp_loc TYPE TABLE OF ty_disp_loc.
DATA s_disp_loc  LIKE LINE OF it_disp_loc.

DATA it_rsrrepdir   TYPE STANDARD TABLE OF rsrrepdir.
DATA s_rsrrepdir    LIKE LINE OF  it_rsrrepdir.

*&---------------------------------------------------------------------*
* Tables
*&---------------------------------------------------------------------*
DATA it_ot_in_pw1 TYPE tmsiqreqs.
DATA s_ot_in_pw1  LIKE LINE OF it_ot_in_pw1.
*
DATA it_e071         TYPE TABLE OF e071.
DATA s_e071          LIKE LINE OF it_e071.
*
TYPES : BEGIN OF ty_e070.
          INCLUDE TYPE e070.
          TYPES   ddtext_ot_type   TYPE dd07t-ddtext.
          TYPES   as4text          TYPE e07t-as4text.
          TYPES   ddtext_ot_status TYPE dd07t-ddtext.
TYPES : END OF ty_e070.

DATA it_e070         TYPE TABLE OF ty_e070.
DATA : s_e070        TYPE ty_e070.

TYPES : BEGIN OF ty_ot_disp.
          INCLUDE TYPE e071.
          TYPES : deftp       TYPE rszeltdir-deftp,
          subdeftp    TYPE rszeltdir-subdeftp,
          ddtext      TYPE dd07t-ddtext,
          mapname     TYPE rszeltdir-mapname,
          defaulthint TYPE rszeltdir-defaulthint,
          txtlg       TYPE rszelttxt-txtlg.
TYPES : END OF ty_ot_disp.
DATA it_ot_disp      TYPE TABLE OF ty_ot_disp.
DATA s_ot_disp       LIKE LINE OF it_ot_disp.

*&---------------------------------------------------------------------*
* Variables simples
*&---------------------------------------------------------------------*
DATA v_chain_id   TYPE rspcchain-chain_id.
DATA v_infoobjet  TYPE rsiobjnm.
DATA v_ot         TYPE trkorr.
DATA v_user       TYPE tr_as4user.
DATA v_vnam       TYPE rszvnam.
DATA v_type       TYPE rspc_type.
DATA v_abap       TYPE rspcvariant-low.
DATA v_composite  TYPE rsrrepdir-infocube.
DATA v_query      TYPE rsrrepdir-compid.
DATA w_index      LIKE sy-tabix.

Include Selection Screen Z_BI_TOOLS_SCR

*&---------------------------------------------------------------------*
*&  Include           Z_PC_ANALYSIS_SCR
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK frame1 WITH FRAME TITLE TEXT-001.
*&---------------------------------------------------------------------*
*&  1. Analyse des process chains
*&---------------------------------------------------------------------*
* Titre du bloc
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN COMMENT 1(30) TEXT-b01.
SELECTION-SCREEN ULINE /1(40).
*
** ABAP dans PC
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETERS: rb1 RADIOBUTTON GROUP rb.
SELECTION-SCREEN COMMENT 4(30) TEXT-rb1.
SELECTION-SCREEN END OF LINE.
*
SELECT-OPTIONS s_chain FOR v_chain_id.
SELECT-OPTIONS s_abap  FOR v_abap.
*
* PC dans PC
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETERS: rb2 RADIOBUTTON GROUP rb.
SELECTION-SCREEN COMMENT 4(30) TEXT-rb2.
SELECTION-SCREEN END OF LINE.
*
SELECT-OPTIONS s_chain2 FOR v_chain_id.
**
*
*&---------------------------------------------------------------------*
*&  2. Analyse des queries
*&---------------------------------------------------------------------*
* Titre du bloc
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN COMMENT 1(30) TEXT-b02.
SELECTION-SCREEN ULINE /1(40).
*
** Variables BW
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETERS: rb3 RADIOBUTTON GROUP rb.
SELECTION-SCREEN COMMENT 4(30) TEXT-rb3.
SELECTION-SCREEN END OF LINE.
*
SELECT-OPTIONS s_iobj FOR v_infoobjet.
SELECT-OPTIONS s_vnam FOR v_vnam.
**
**&---------------------------------------------------------------------*
**&  Analyse des textes locaux dans les queries
**----------------------------------------------------------------------*
** Variables BW
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETERS: rb5 RADIOBUTTON GROUP rb.
SELECTION-SCREEN COMMENT 4(30) TEXT-rb5.
SELECTION-SCREEN END OF LINE.
*
SELECT-OPTIONS s_compo  FOR v_composite.
SELECT-OPTIONS s_query  FOR v_query.
*
*&---------------------------------------------------------------------*
*&  Analyse des ordres de transport
*&---------------------------------------------------------------------*
* Titre du bloc
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN COMMENT 1(30) TEXT-b03.
SELECTION-SCREEN ULINE /1(40).
*
** Contenu OT
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETERS: rb4 RADIOBUTTON GROUP rb.
SELECTION-SCREEN COMMENT 4(30) TEXT-rb4.
SELECTION-SCREEN END OF LINE.
*
SELECT-OPTIONS s_ot FOR v_ot.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETERS: rb6 RADIOBUTTON GROUP rb.
SELECTION-SCREEN COMMENT 4(30) TEXT-rb7.
SELECTION-SCREEN END OF LINE.
*
PARAMETERS p_qname LIKE v_query.

SELECTION-SCREEN END OF BLOCK frame1.

Include des forms Z_BI_TOOLS_F01

   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
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 365
 366
 367
 368
 369
 370
 371
 372
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
*&---------------------------------------------------------------------*
*&  Include           Z_PC_ANALYSIS_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  SELECTIONNER_DONNEES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM selectionner_donnees .
  DATA v_index LIKE sy-tabix.

* trouver les variantes qui exécutent les programmes sélectionnés
  REFRESH it_rspcvariant.
  SELECT variante low FROM rspcvariant INTO CORRESPONDING FIELDS OF TABLE it_rspcvariant
    WHERE type = 'ABAP'
      AND objvers = 'A'
      AND fnam = 'PROGRAM'
      AND low IN s_abap.

* Récupérer le nom de la variante du programme ABAP utilisé dans la chaine
  LOOP AT it_rspcvariant INTO s_rspcvariant.
    v_index = sy-tabix.
    SELECT SINGLE low INTO s_rspcvariant-var_abap
      FROM rspcvariant
      WHERE type = 'ABAP'
      AND variante = s_rspcvariant-variante
      AND objvers = 'A'
      AND fnam = 'VARIANT'.
    MODIFY it_rspcvariant FROM s_rspcvariant INDEX v_index.
  ENDLOOP.

*
  REFRESH it_result.
  LOOP AT it_rspcvariant INTO s_rspcvariant.
    SELECT * FROM rspcchain INTO CORRESPONDING FIELDS OF s_rspcchain
      WHERE chain_id IN s_chain
        AND type     = 'ABAP'
        AND objvers = 'A'
        AND variante = s_rspcvariant-variante.
      CLEAR s_result.
      s_result-chain_id = s_rspcchain-chain_id.
      s_result-objvers  = s_rspcchain-objvers.
      s_result-type     = s_rspcchain-type.
      s_result-variante = s_rspcchain-variante.
      s_result-abap     = s_rspcvariant-low.
      s_result-var_abap = s_rspcvariant-var_abap.
      APPEND s_result TO it_result.
    ENDSELECT.
  ENDLOOP.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  AFFICHER_RESULTAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM afficher_resultat.
  DATA: alv           TYPE REF TO cl_salv_table,
        error_message TYPE REF TO cx_salv_msg,
        column        TYPE REF TO cl_salv_column.


* Fill ALV object with data from the internal table
  TRY.
      cl_salv_table=>factory(
        IMPORTING
          r_salv_table = alv
        CHANGING
          t_table      = it_result ).
    CATCH cx_salv_msg INTO error_message.
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER

      " error handling
  ENDTRY.

*Changer nom colonne ABAP
  TRY.
      column = alv->get_columns( )->get_column( 'ABAP' ).
      column->set_short_text( 'Abap' ).
      column->set_medium_text( 'Abap Program' ).
      column->set_long_text( 'Abap Program' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

*Changer nom colonne Variante ABAP
  TRY.
      column = alv->get_columns( )->get_column( 'VAR_ABAP' ).
      column->set_short_text( 'Var Abap' ).
      column->set_medium_text( 'Variante Pgm ABAP' ).
      column->set_long_text( 'Variante Pgm ABAP' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

*Changer nom colonne Variante de la process chain
  TRY.
      column = alv->get_columns( )->get_column( 'VARIANTE' ).
      column->set_short_text( 'Step PC' ).
      column->set_medium_text( 'Step dans la PC' ).
      column->set_long_text( 'Step dans la PC' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.


* Ajouter les boutons
  alv->get_functions( )->set_all( ).

* Use the ALV object's display method to show the ALV on the screen
  alv->display( ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CHERCHER_PC
*&---------------------------------------------------------------------*
FORM chercher_pc .
  REFRESH it_result_pc.
  SELECT * FROM rspcchain INTO CORRESPONDING FIELDS OF s_rspcchain
    WHERE type     = 'CHAIN'
      AND objvers = 'A'
      AND variante IN s_chain2.
    CLEAR s_result_pc.
    s_result_pc-chain_id = s_rspcchain-chain_id.
    s_result_pc-objvers  = s_rspcchain-objvers.
    s_result_pc-type     = s_rspcchain-type.
    s_result_pc-variante = s_rspcchain-variante.
    APPEND s_result_pc TO it_result_pc.
  ENDSELECT.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  AFFICHER_PC
*&---------------------------------------------------------------------*
FORM afficher_pc .
  DATA: alv           TYPE REF TO cl_salv_table,
        error_message TYPE REF TO cx_salv_msg,
        column        TYPE REF TO cl_salv_column.


* Fill ALV object with data from the internal table
  TRY.
      cl_salv_table=>factory(
        IMPORTING
          r_salv_table = alv
        CHANGING
          t_table      = it_result_pc ).
    CATCH cx_salv_msg INTO error_message.
      " error handling
  ENDTRY.

*Changer nom colonne Variante de la process chain
  TRY.
      column = alv->get_columns( )->get_column( 'VARIANTE' ).
      column->set_short_text( 'PC Utilisé' ).
      column->set_medium_text( 'PC utilisé' ).
      column->set_long_text( 'PC utilisé' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

* Ajouter les boutons
  alv->get_functions( )->set_all( ).

* Use the ALV object's display method to show the ALV on the screen
  alv->display( ).


ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CHERCHER_VARIABLES
*&---------------------------------------------------------------------*
FORM chercher_variables.
  TYPE-POOLS  ctslg.
*
  DATA v_obj_name      LIKE e071-obj_name.
  DATA v_found(1)      TYPE c.
  DATA it_e071         TYPE TABLE OF e071.
  DATA s_e071          LIKE LINE OF it_e071.
  DATA v_es_cofile     TYPE ctslg_cofile.
  DATA it_systems      LIKE v_es_cofile-systems.
  DATA s_systems       LIKE LINE OF it_systems.
  DATA it_steps        LIKE s_systems-steps.
  DATA s_steps         LIKE LINE OF it_steps.
  DATA it_actions      LIKE s_steps-actions.
  DATA s_actions       LIKE LINE OF it_actions.
  DATA it_comm_systems TYPE tmscsyslst_typ.
  DATA s_comm_systems  LIKE LINE OF it_comm_systems.
*
  REFRESH it_variables.
*&---------------------------------------------------------------------*
* Chercher les variables et leurs proprtées et leur description
*&---------------------------------------------------------------------*
  SELECT * FROM rszglobv INTO CORRESPONDING FIELDS OF s_variables
    WHERE objvers = 'A'
      AND iobjnm IN s_iobj
      AND vnam   IN s_vnam.
*
    SELECT SINGLE txtlg INTO s_variables-txtlg
      FROM rszelttxt
      WHERE eltuid = s_variables-varuniid
      AND objvers = 'A'
      AND langu = 'E'.
*
    APPEND s_variables TO it_variables.
*
  ENDSELECT.

*&---------------------------------------------------------------------*
* aller chercher les OT qui contiennent les variables.
* parmi ces OT, chercher si au moins un est déjà monté en prod.
* ne prendre que les ot qui sont pas des transports de copies
*&---------------------------------------------------------------------*
*
  REFRESH it_ot_variable.
*
  REFRESH it_comm_systems.
  s_comm_systems-sysnam = 'PW1'.
  APPEND s_comm_systems TO it_comm_systems.

*
  LOOP AT it_variables INTO s_variables.

    v_obj_name = s_variables-varuniid.
    v_found = ''.

    REFRESH it_e071.
    SELECT a~trkorr INTO s_e071-trkorr
      FROM e071 AS a
      JOIN e070 AS b ON a~trkorr = b~trkorr
            WHERE a~obj_name = v_obj_name
              AND b~trfunction = 'K'.
      APPEND s_e071 TO it_e071.
    ENDSELECT.

    LOOP AT it_e071 INTO s_e071.
*   checker que cet ot est bien monté en prod
      CLEAR v_es_cofile.
      CALL FUNCTION 'TR_READ_GLOBAL_INFO_OF_REQUEST'
        EXPORTING
          iv_trkorr       = s_e071-trkorr
          it_comm_systems = it_comm_systems
        IMPORTING
          es_cofile       = v_es_cofile.

*     No log for this order, maybe  very old ?
      IF v_es_cofile-exists = ''.

        v_found = 'X'.
        CLEAR s_ot_variable.
*       if there is a record for transport found we don't create the record
        READ TABLE it_ot_variable
        WITH KEY vnam =  s_variables-vnam
                 value = 'Y' TRANSPORTING NO FIELDS.
        IF sy-subrc NE 0.
          s_ot_variable-vnam  = s_variables-vnam.
          s_ot_variable-value = '?'.
          APPEND s_ot_variable TO it_ot_variable.
        ENDIF.

      ELSE.

*       Arriver à trouver la trace du transport ok en PW1
        REFRESH it_systems.
        it_systems[] = v_es_cofile-systems[].

        LOOP AT it_systems INTO s_systems
          WHERE systemid = 'PW1'
          AND rc <= '4'.

*         if so that means there was a transport done on PW1 with RC <= 4
*         s'il est monté en prod on le met dans la table it_ot_variable.
          v_found = 'X'.

*         if there is a record with '?' in it_ot_variable for this variable
*         we replace it
          READ TABLE it_ot_variable
          WITH KEY vnam =  s_variables-vnam
                   value = '?' TRANSPORTING NO FIELDS.

          IF sy-subrc NE 0.
            DELETE it_ot_variable WHERE vnam = s_variables-vnam AND value = '?'.
            s_ot_variable-vnam  = s_variables-vnam.
            s_ot_variable-value = 'Y'.
            APPEND s_ot_variable TO it_ot_variable.
          ENDIF.

        ENDLOOP.

      ENDIF.
    ENDLOOP.

    IF v_found = ''.
      s_ot_variable-vnam  = s_variables-vnam.
      s_ot_variable-value = 'N'.
      APPEND s_ot_variable TO it_ot_variable.
    ENDIF.

  ENDLOOP.

*&---------------------------------------------------------------------*
* on va remplacer les codes par les descriptions
*&---------------------------------------------------------------------*
  REFRESH it_var_disp.
  LOOP AT it_variables INTO s_variables.
    CLEAR s_var_disp.
    s_var_disp-iobjnm = s_variables-iobjnm.
    s_var_disp-vnam   = s_variables-vnam.
    s_var_disp-txtlg  = s_variables-txtlg.

*   var type
    IF s_variables-vartyp = '1'.
      s_var_disp-vartyp_disp = 'Characteristic value'.
    ELSEIF s_variables-vartyp = '2'.
      s_var_disp-vartyp_disp = 'Hierarchy nodes'.
    ELSEIF s_variables-vartyp = '3'.
      s_var_disp-vartyp_disp = 'Text'.
    ELSEIF s_variables-vartyp = '4'.
      s_var_disp-vartyp_disp = 'Formula'.
    ELSEIF s_variables-vartyp = '5'.
      s_var_disp-vartyp_disp = 'Hierarchy'.
    ENDIF.

*   vproctp_disp  LIKE rszglobv-vproctp,
    IF s_variables-vproctp = '1'.
      s_var_disp-vproctp_disp = 'Replacement path'.
    ELSEIF s_variables-vproctp = '3'.
      s_var_disp-vproctp_disp = 'Customer exit'.
    ELSEIF s_variables-vproctp = '4'.
      s_var_disp-vproctp_disp = 'SAP exit'.
    ELSEIF s_variables-vproctp = '5'.
      s_var_disp-vproctp_disp = 'User entry'.
    ELSEIF s_variables-vproctp = '6'.
      s_var_disp-vproctp_disp = 'Authorization'.
    ELSEIF s_variables-vproctp = '7'.
      s_var_disp-vproctp_disp = 'HANA exit'.
    ENDIF.

*  vparsel_disp  LIKE rszglobv-vparsel,
    IF s_variables-vparsel = 'P'.
      s_var_disp-vparsel_disp = 'Single value'.
    ELSEIF s_variables-vparsel = 'S'.
      s_var_disp-vparsel_disp = 'Selection option'.
    ELSEIF s_variables-vparsel = 'I'.
      s_var_disp-vparsel_disp = 'Interval'.
    ELSEIF s_variables-vparsel = 'M'.
      s_var_disp-vparsel_disp = 'Several Single Values'.
    ENDIF.

*  varinput_disp LIKE rszglobv-varinput,
    IF s_variables-varinput = 'X'.
      s_var_disp-varinput_disp = 'Yes'.
    ELSE.
      s_var_disp-varinput_disp = 'No'.
    ENDIF.

*  entrytp_disp  LIKE rszglobv-entrytp,
    IF s_variables-entrytp = '0'.
      s_var_disp-entrytp_disp = 'Optional Variable Entry'.
    ELSEIF s_variables-entrytp = '1'.
      s_var_disp-entrytp_disp = 'Mandatory Variable Entry'.
    ELSEIF s_variables-entrytp = '2'.
      s_var_disp-entrytp_disp = 'Mandatory, Initial Value not Allowed'.
    ENDIF.

*   Cet variables est-elle montée en prod ?
    READ TABLE it_ot_variable INTO s_ot_variable
    WITH KEY vnam = s_var_disp-vnam.
    IF sy-subrc = 0.
      s_var_disp-en_prod = s_ot_variable-value.
    ENDIF.

*   Créer ligne résultat
    APPEND s_var_disp TO it_var_disp.

  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  AFFICHER_VARIABLES
*&---------------------------------------------------------------------*
FORM afficher_variables.
  DATA: alv           TYPE REF TO cl_salv_table,
        error_message TYPE REF TO cx_salv_msg,
        column        TYPE REF TO cl_salv_column,
        lr_columns    TYPE REF TO cl_salv_columns_table,
        gr_display    TYPE REF TO cl_salv_display_settings,
        lt_column_ref TYPE salv_t_column_ref,
        ls_column_ref TYPE salv_s_column_ref,
        lo_columns    TYPE REF TO cl_salv_columns_table,
        lo_column     TYPE REF TO cl_salv_column_table.

*&---------------------------------------------------------------------*
* trier la table par infoobjet et nom de variable
*&---------------------------------------------------------------------*
  SORT it_var_disp BY iobjnm vnam.

*&---------------------------------------------------------------------*
* Fill ALV object with data from the internal table
*&---------------------------------------------------------------------*
  TRY.
      cl_salv_table=>factory(
        IMPORTING
          r_salv_table = alv
        CHANGING
          t_table      = it_var_disp ).
    CATCH cx_salv_msg INTO error_message.
      " error handling
  ENDTRY.


*&---------------------------------------------------------------------*
* Changer nom des colonnes
*&---------------------------------------------------------------------*
  TRY.
      column = alv->get_columns( )->get_column( 'VARTYP_DISP' ).
      column->set_short_text( 'Type' ).
      column->set_medium_text( 'Type' ).
      column->set_long_text( 'Type' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

  TRY.
      column = alv->get_columns( )->get_column( 'VPROCTP_DISP' ).
      column->set_short_text( 'Proc.' ).
      column->set_medium_text( 'Processing Type' ).
      column->set_long_text( 'Processing Type' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

  TRY.
      column = alv->get_columns( )->get_column( 'VPARSEL_DISP' ).
      column->set_short_text( 'Selection' ).
      column->set_medium_text( 'Selection' ).
      column->set_long_text( 'Selection' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

* Input ready or not ?
  TRY.
      column = alv->get_columns( )->get_column( 'VARINPUT_DISP' ).
      column->set_short_text( 'Input?' ).
      column->set_medium_text( 'Input ready ?' ).
      column->set_long_text( 'Input ready ?' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

* Entry Type :
  TRY.
      column = alv->get_columns( )->get_column( 'ENTRYTP_DISP' ).
      column->set_short_text( 'Entry Req' ).
      column->set_medium_text( 'Entry Required' ).
      column->set_long_text( 'Entry Required' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

* En prod :
  TRY.
      column = alv->get_columns( )->get_column( 'EN_PROD' ).
      column->set_short_text( 'En Prod ?' ).
      column->set_medium_text( 'En Prod ?' ).
      column->set_long_text( 'En Prod ?' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

*&---------------------------------------------------------------------*
* Ajouter les boutons
*&---------------------------------------------------------------------*
  alv->get_functions( )->set_all( ).

*&---------------------------------------------------------------------*
*Optimiser largeur colonnes
*&---------------------------------------------------------------------*
  lr_columns = alv->get_columns( ).
  lr_columns->set_optimize( 'X' ).

*&---------------------------------------------------------------------*
* rendre les colonnes sensibles au maj/min (pour pouvoir filtrer)
*&---------------------------------------------------------------------*
  lo_columns = alv->get_columns( ).
  lt_column_ref = lo_columns->get( ).

  LOOP AT lt_column_ref INTO ls_column_ref.
    lo_column ?= ls_column_ref-r_column.
    CASE ls_column_ref-columnname.
      WHEN 'VARTYP_DISP' OR 'VPROCTP_DISP' OR 'VPARSEL_DISP'
        OR 'VARINPUT_DISP' OR 'ENTRYTP_DISP'.
        lo_column->set_lowercase(   value = if_salv_c_bool_sap=>true ).
    ENDCASE.
  ENDLOOP.

*&---------------------------------------------------------------------*
* Changer le titre
*&---------------------------------------------------------------------*
  gr_display = alv->get_display_settings( ).
  gr_display->set_list_header( 'Variables BW' ).

*&---------------------------------------------------------------------*
* Afficher la grille
*&---------------------------------------------------------------------*
  alv->display( ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CHERCHER_OT
*&---------------------------------------------------------------------*
FORM chercher_ot.
  TYPE-POOLS  ctslg.
*
  DATA v_obj_name      LIKE e071-obj_name.
  DATA v_found(1)      TYPE c.
  DATA v_es_cofile     TYPE ctslg_cofile.
  DATA it_systems      LIKE v_es_cofile-systems.
  DATA s_systems       LIKE LINE OF it_systems.
  DATA it_steps        LIKE s_systems-steps.
  DATA s_steps         LIKE LINE OF it_steps.
  DATA it_actions      LIKE s_steps-actions.
  DATA s_actions       LIKE LINE OF it_actions.
  DATA it_comm_systems TYPE tmscsyslst_typ.
  DATA s_comm_systems  LIKE LINE OF it_comm_systems.
  DATA v_flag_found(1) TYPE c.
  DATA s_rstran        LIKE rstran.
  DATA s_rsbkdtp       LIKE rsbkdtp.
  DATA s_rsldpio       LIKE rsldpio.
  DATA v_query_name    TYPE rszeltdir-mapname.

*
*&---------------------------------------------------------------------*
* aller chercher le contenu des OT
*&---------------------------------------------------------------------*
*
  REFRESH it_ot_variable.
*
* Get objects from Task and transport order itself (OR clause in the where).
  REFRESH it_e071.
  SELECT * INTO CORRESPONDING FIELDS OF TABLE it_e071
    FROM e071 AS e071
    JOIN e070 AS e070
    ON e070~trkorr = e071~trkorr
    WHERE e070~strkorr IN s_ot
       OR e071~trkorr IN s_ot.


  SORT it_e071 BY pgmid object obj_name.
  DELETE ADJACENT DUPLICATES FROM it_e071 COMPARING pgmid object obj_name.

* remove unecessary records from E071 (comments etc)
  DELETE it_e071 WHERE pgmid = 'CORR' AND object = 'RELE'.
  DELETE it_e071 WHERE pgmid = 'CORR' AND object = 'MERG'.

* Add more informations about objects contained in the transport order
  REFRESH it_ot_disp.
  LOOP AT it_e071 INTO s_e071.

    CLEAR s_ot_disp.

*   get details for BW object in RSZELTDIR Table
    MOVE-CORRESPONDING s_e071 TO s_ot_disp.
    SELECT SINGLE deftp subdeftp mapname defaulthint FROM rszeltdir
      INTO (s_ot_disp-deftp,s_ot_disp-subdeftp, s_ot_disp-mapname, s_ot_disp-defaulthint)
      WHERE eltuid = s_e071-obj_name
        AND objvers = 'A'.

*   Get description for BW object type
    SELECT SINGLE ddtext INTO s_ot_disp-ddtext
      FROM dd07t
      WHERE domname  = 'RSZSUBDEFTP'
      AND domvalue_l = s_ot_disp-subdeftp
      AND ddlanguage = 'E'.
    IF sy-subrc NE 0.
      SELECT SINGLE ddtext INTO s_ot_disp-ddtext
        FROM dd07t
        WHERE domname  = 'RSZDEFTP'
        AND domvalue_l = s_ot_disp-deftp
        AND ddlanguage = 'E'.
      IF sy-subrc NE 0.
        SELECT SINGLE ddtext INTO s_ot_disp-ddtext
          FROM dd07t
          WHERE domname  = 'RSTLOGO'
          AND domvalue_l = s_ot_disp-object
          AND ddlanguage = 'E'.
        IF sy-subrc NE 0.
          CASE s_ot_disp-object.
            WHEN 'HOTO'. s_ot_disp-ddtext = 'Calculation View'.
            WHEN 'ADIR'. s_ot_disp-ddtext = 'Object Directory Entry'.
            WHEN 'FUNC'. s_ot_disp-ddtext = 'Function Module'.
            WHEN 'HOTP'. s_ot_disp-ddtext = 'Package Metadata (SAP HANA Transport for ABAP)'.
            WHEN 'METH'. s_ot_disp-ddtext = 'Methode'.
            WHEN 'REPS'. s_ot_disp-ddtext = 'Report Source Code'.
            WHEN 'REPT'. s_ot_disp-ddtext = 'Report Texts'.
            WHEN 'SOTT'. s_ot_disp-ddtext = 'Concept (Online Text Repository) - Short Texts'.
            WHEN 'VARX'. s_ot_disp-ddtext = 'Report Program Application Variant'.
            WHEN 'CDAT'. s_ot_disp-ddtext = 'View Cluster Maintenance: Data'.
            WHEN 'CINS'. s_ot_disp-ddtext = 'Correction Instruction'.
            WHEN 'FUGR'. s_ot_disp-ddtext = 'Function Group'.
            WHEN 'NOTE'. s_ot_disp-ddtext = 'SAP Note'.
            WHEN 'PROG'. s_ot_disp-ddtext = 'Program'.
            WHEN 'TABL'. s_ot_disp-ddtext = 'Table'.
            WHEN 'TABU'. s_ot_disp-ddtext = 'Table Contents'.
            WHEN 'TOBJ'. s_ot_disp-ddtext = 'Definition of a Maintenance and Transport Object'.
            WHEN 'TRAN'. s_ot_disp-ddtext = 'Transaction'.

          ENDCASE.
        ENDIF.
      ENDIF.
    ENDIF.

*   Get description for BW object in RSZELTTXT Table
    SELECT SINGLE txtlg INTO s_ot_disp-txtlg
      FROM rszelttxt
      WHERE eltuid = s_e071-obj_name AND objvers = 'A'.

*   Add information in description field
    CASE s_ot_disp-object.

*     For Transformation
      WHEN 'TRFN'.
        SELECT SINGLE * FROM rstran INTO s_rstran
          WHERE tranid = s_e071-obj_name
          AND objvers = 'A'.
        IF sy-subrc = 0.
*         description = source & target
          CONCATENATE s_rstran-sourcename
                      ' --> '
                      s_rstran-targetname INTO s_ot_disp-txtlg.
        ELSE.
*       If object don't exist : replace description by warning message
          s_ot_disp-txtlg = 'Object does not exist'.
        ENDIF.

*     For DTP
      WHEN 'DTPA'.
        SELECT SINGLE * FROM rsbkdtp INTO s_rsbkdtp
          WHERE dtp = s_e071-obj_name
          AND objvers = 'A'.
        IF sy-subrc = 0.
*         description = source & target
          CONCATENATE s_rsbkdtp-src
                      ' --> '
                      s_rsbkdtp-tgt INTO s_ot_disp-txtlg.
        ELSE.
*       If object don't exist : replace description by warning message
          s_ot_disp-txtlg = 'Object does not exist'.
        ENDIF.

*      For Infopackage
      WHEN 'ISIP'.
        SELECT SINGLE * FROM rsldpio INTO s_rsldpio
          WHERE logdpid = s_e071-obj_name
          AND objvers = 'A'.
        IF sy-subrc = 0.
*         description = source & target
          CONCATENATE '('
                      s_rsldpio-logsys
                      ') '
                      s_rsldpio-oltpsource INTO s_ot_disp-txtlg.
        ELSE.
*       If object don't exist : replace description by warning message
          s_ot_disp-txtlg = 'Object does not exist'.
        ENDIF.

    ENDCASE.

*   Create record in display table
    APPEND s_ot_disp TO it_ot_disp.

  ENDLOOP.

* where used for R3TR/ELEM objects
* it's about incremental logic between RSZELTXREF and RSZELTDIR tables.
*  LOOP AT it_ot_disp INTO s_ot_disp
*    WHERE object = 'ELEM' AND subdeftp <> 'REP'.
*    v_flag_found = ''.
*    v_query_name = ''.
*    PERFORM find_main_usage USING s_ot_disp-obj_name
*                                  s_ot_disp-mapname
*                                  v_flag_found
*                                  v_query_name.
*    IF v_flag_found = 'X'.
*      s_ot_disp-mapname = v_query_name.
*    ENDIF.
*
*  ENDLOOP.


  SORT it_ot_disp BY pgmid object deftp subdeftp.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  AFFICHER_OT
*&---------------------------------------------------------------------*
FORM afficher_ot.
  DATA: alv           TYPE REF TO cl_salv_table,
        error_message TYPE REF TO cx_salv_msg,
        column        TYPE REF TO cl_salv_column,
        lr_columns    TYPE REF TO cl_salv_columns_table,
        gr_display    TYPE REF TO cl_salv_display_settings,
        lt_column_ref TYPE salv_t_column_ref,
        ls_column_ref TYPE salv_s_column_ref,
        lo_columns    TYPE REF TO cl_salv_columns_table,
        lo_column     TYPE REF TO cl_salv_column_table.

*&---------------------------------------------------------------------*
* Fill ALV object with data from the internal table
*&---------------------------------------------------------------------*
  TRY.
      cl_salv_table=>factory(
        IMPORTING
          r_salv_table = alv
        CHANGING
          t_table      = it_ot_disp ).
    CATCH cx_salv_msg INTO error_message.
      " error handling
  ENDTRY.


*&---------------------------------------------------------------------*
* Changer nom des colonnes
*&---------------------------------------------------------------------*
*  TRY.
*      column = alv->get_columns( )->get_column( 'VARTYP_DISP' ).
*      column->set_short_text( 'Type' ).
*      column->set_medium_text( 'Type' ).
*      column->set_long_text( 'Type' ).
*    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
*  ENDTRY.

*&---------------------------------------------------------------------*
* Hide Columns
*&---------------------------------------------------------------------*
  TRY.
      column = alv->get_columns( )->get_column( 'OBJFUNC' ).
      column->set_visible( '' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

  TRY.
      column = alv->get_columns( )->get_column( 'LOCKFLAG' ).
      column->set_visible( '' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

  TRY.
      column = alv->get_columns( )->get_column( 'GENNUM' ).
      column->set_visible( '' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

  TRY.
      column = alv->get_columns( )->get_column( 'LANG' ).
      column->set_visible( '' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

  TRY.
      column = alv->get_columns( )->get_column( 'ACTIVITY' ).
      column->set_visible( '' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.


*&---------------------------------------------------------------------*
* Ajouter les boutons
*&---------------------------------------------------------------------*
  alv->get_functions( )->set_all( ).

*&---------------------------------------------------------------------*
*Optimiser largeur colonnes
*&---------------------------------------------------------------------*
  lr_columns = alv->get_columns( ).
  lr_columns->set_optimize( 'X' ).

*&---------------------------------------------------------------------*
* rendre les colonnes sensibles au maj/min (pour pouvoir filtrer)
*&---------------------------------------------------------------------*
  lo_columns = alv->get_columns( ).
  lt_column_ref = lo_columns->get( ).

  LOOP AT lt_column_ref INTO ls_column_ref.
    lo_column ?= ls_column_ref-r_column.
    CASE ls_column_ref-columnname.
      WHEN 'VARTYP_DISP' OR 'VPROCTP_DISP' OR 'VPARSEL_DISP'
        OR 'VARINPUT_DISP' OR 'ENTRYTP_DISP'.
        lo_column->set_lowercase(   value = if_salv_c_bool_sap=>true ).
    ENDCASE.
  ENDLOOP.

*&---------------------------------------------------------------------*
* Changer le titre
*&---------------------------------------------------------------------*
  gr_display = alv->get_display_settings( ).
  gr_display->set_list_header( 'Transport Content' ).

*&---------------------------------------------------------------------*
* Afficher la grille
*&---------------------------------------------------------------------*
  alv->display( ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FIND_LOCAL_TEXT
*&---------------------------------------------------------------------*
FORM find_local_text.
  DATA it_elttxt    TYPE rzd1_th_elttxt.
  DATA s_elttxt     LIKE LINE OF it_elttxt.

  DATA it_eltxref   TYPE rzd1_th_eltxref.
  DATA s_eltxref    LIKE LINE OF it_eltxref.

  DATA it_eltdir    TYPE rzd1_th_eltdir.
  DATA s_eltdir     LIKE LINE OF it_eltdir.

  DATA v_query_name TYPE rsz_uid.
  DATA v_std_txtlg  LIKE rsdiobjt-txtlg.
  DATA v_check(2)   TYPE c.
  DATA v_chanm      LIKE rsdatrnavt-chanm.
  DATA v_attrinm    LIKE rsdatrnavt-attrinm.

* Get list of queries
* we exclude the generated query '!!*'
  REFRESH it_rsrrepdir.
  SELECT * FROM rsrrepdir INTO TABLE it_rsrrepdir
    WHERE infocube IN s_compo
    AND  compid IN s_query
    AND objvers = 'A'
    AND NOT compid LIKE '!%'.

* Get details of local texts by queries
  LOOP AT it_rsrrepdir INTO s_rsrrepdir.
    REFRESH : it_elttxt, it_eltxref.
    WRITE s_rsrrepdir-compuid TO v_query_name.
    CALL FUNCTION 'RSZ_DB_ELT_GET'
      EXPORTING
        i_template_type = 'REP'
        i_language      = sy-langu
        i_objvers       = 'A'
        i_eltuid        = v_query_name
      IMPORTING
        e_th_eltdir     = it_eltdir
        e_th_elttxt     = it_elttxt
        e_th_eltxref    = it_eltxref
      EXCEPTIONS
        inherited_error = 1
        inconsistency   = 2
        OTHERS          = 3.
*loop on eah field of the query to check if default text is used or not.
    LOOP AT it_eltdir INTO s_eltdir WHERE defaulttext = ''
      AND ( subdeftp <> 'REP'
          AND subdeftp <> 'CKF'
          AND subdeftp <> 'RKF'
          AND subdeftp <> 'VAR').
*     find the default description to compare
      CLEAR v_std_txtlg.
      SELECT SINGLE txtlg FROM rsdiobjt INTO v_std_txtlg
        WHERE langu = sy-langu
          AND objvers = 'A'
          AND iobjnm = s_eltdir-defaulthint.
      IF sy-subrc NE 0.
*
        SPLIT s_eltdir-defaulthint AT '__' INTO v_chanm v_attrinm.

        SELECT SINGLE txtlg FROM rsdatrnavt INTO v_std_txtlg
          WHERE langu = sy-langu
            AND objvers = 'A'
            AND chanm   = v_chanm
            AND attrinm = v_attrinm.
      ENDIF.
*
      READ TABLE it_elttxt INTO s_elttxt WITH KEY eltuid = s_eltdir-eltuid.
      IF sy-subrc = 0.
*       Compare
        IF v_std_txtlg <> s_elttxt-txtlg.
          v_check = 'KO'.
        ELSE.
          v_check = 'OK'.
        ENDIF.

*       Create a record to be displayed
        CLEAR s_disp_loc.
        s_disp_loc-composite   = s_rsrrepdir-infocube.
        s_disp_loc-query       = s_rsrrepdir-compid.
        s_disp_loc-deftp       = s_eltdir-deftp.
        s_disp_loc-subdeftp    = s_eltdir-subdeftp.
        s_disp_loc-defaulthint = s_eltdir-defaulthint.
        s_disp_loc-txtlg       = s_elttxt-txtlg.
        s_disp_loc-std_txtlg   = v_std_txtlg.
        s_disp_loc-check       = v_check.
        s_disp_loc-cpt         = 1.
        APPEND s_disp_loc TO it_disp_loc.

      ENDIF.
    ENDLOOP.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_LOCAL_TEXT
*&---------------------------------------------------------------------*
FORM display_local_text .
  DATA: alv           TYPE REF TO cl_salv_table,
        error_message TYPE REF TO cx_salv_msg,
        column        TYPE REF TO cl_salv_column,
        lr_columns    TYPE REF TO cl_salv_columns_table,
        gr_display    TYPE REF TO cl_salv_display_settings,
        lt_column_ref TYPE salv_t_column_ref,
        ls_column_ref TYPE salv_s_column_ref,
        lo_columns    TYPE REF TO cl_salv_columns_table,
        lo_column     TYPE REF TO cl_salv_column_table.

*&---------------------------------------------------------------------*
* trier la table par infoobjet et nom de variable
*&---------------------------------------------------------------------*
  SORT it_disp_loc BY query deftp subdeftp.

*&---------------------------------------------------------------------*
* Fill ALV object with data from the internal table
*&---------------------------------------------------------------------*
  TRY.
      cl_salv_table=>factory(
        IMPORTING
          r_salv_table = alv
        CHANGING
          t_table      = it_disp_loc ).
    CATCH cx_salv_msg INTO error_message.
      " error handling
  ENDTRY.


*&---------------------------------------------------------------------*
* Changer nom des colonnes
*&---------------------------------------------------------------------*
  TRY.
      column = alv->get_columns( )->get_column( 'QUERY' ).
      column->set_short_text( 'Query' ).
      column->set_medium_text( 'Query' ).
      column->set_long_text( 'Query' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.
*
  TRY.
      column = alv->get_columns( )->get_column( 'DEFTP' ).
      column->set_short_text( 'Type' ).
      column->set_medium_text( 'Type' ).
      column->set_long_text( 'Type' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.
*
  TRY.
      column = alv->get_columns( )->get_column( 'SUBDEFTP' ).
      column->set_short_text( 'Subtype' ).
      column->set_medium_text( 'Subtype' ).
      column->set_long_text( 'Subtype' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.
*
  TRY.
      column = alv->get_columns( )->get_column( 'DEFAULTHINT' ).
      column->set_short_text( 'Field' ).
      column->set_medium_text( 'Field' ).
      column->set_long_text( 'Field' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.
*
  TRY.
      column = alv->get_columns( )->get_column( 'TXTLG' ).
      column->set_short_text( 'Query' ).
      column->set_medium_text( 'In the query' ).
      column->set_long_text( 'In the query' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.
*
  TRY.
      column = alv->get_columns( )->get_column( 'STD_TXTLG' ).
      column->set_short_text( 'Std Name' ).
      column->set_medium_text( 'Std Name' ).
      column->set_long_text( 'Std Name' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.
*
  TRY.
      column = alv->get_columns( )->get_column( 'CHECK' ).
      column->set_short_text( '= ?' ).
      column->set_medium_text( '= ?' ).
      column->set_long_text( '= ?' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.
*
  TRY.
      column = alv->get_columns( )->get_column( 'CPT' ).
      column->set_short_text( 'Counter' ).
      column->set_medium_text( 'Counter' ).
      column->set_long_text( 'Counter' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

*&---------------------------------------------------------------------*
* Ajouter les boutons
*&---------------------------------------------------------------------*
  alv->get_functions( )->set_all( ).

*&---------------------------------------------------------------------*
*Optimiser largeur colonnes
*&---------------------------------------------------------------------*
  lr_columns = alv->get_columns( ).
  lr_columns->set_optimize( 'X' ).

*&---------------------------------------------------------------------*
* rendre les colonnes sensibles au maj/min (pour pouvoir filtrer)
*&---------------------------------------------------------------------*
  lo_columns = alv->get_columns( ).
  lt_column_ref = lo_columns->get( ).

  LOOP AT lt_column_ref INTO ls_column_ref.
    lo_column ?= ls_column_ref-r_column.
    CASE ls_column_ref-columnname.
      WHEN 'TXTLG' OR 'STD_TXTLG'.
        lo_column->set_lowercase(   value = if_salv_c_bool_sap=>true ).
    ENDCASE.
  ENDLOOP.

*&---------------------------------------------------------------------*
* Changer le titre
*&---------------------------------------------------------------------*
  gr_display = alv->get_display_settings( ).
  gr_display->set_list_header( 'Textes locaux queries' ).

*&---------------------------------------------------------------------*
* Afficher la grille
*&---------------------------------------------------------------------*
  alv->display( ).


ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FIND_MAIN_USAGE
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
*      -->P_S_OT_DISP_OBJ_NAME  text
*----------------------------------------------------------------------*
FORM find_main_usage USING i_obj_name
                           i_mapname    TYPE rszcompid
                           e_flag_found TYPE char01
                           e_query_name TYPE rszcompid.

  DATA it_rszeltxref TYPE TABLE OF rszeltxref.
  DATA s_rszeltxref  LIKE LINE OF it_rszeltxref.
  DATA v_flag_found TYPE char01.

  IF e_flag_found = 'X'.
    EXIT.
  ENDIF.
*
  SELECT SINGLE mapname INTO e_query_name FROM rszeltdir
    WHERE eltuid = i_obj_name
    AND objvers = 'A'.
*
  SELECT * FROM rszeltxref INTO TABLE it_rszeltxref
    WHERE teltuid = i_obj_name
  AND objvers = 'A'.
  IF sy-subrc = 0.
    LOOP AT it_rszeltxref INTO s_rszeltxref.

      PERFORM find_main_usage USING s_rszeltxref-seltuid
                                    e_query_name
                                    v_flag_found
                                    e_query_name.
      IF v_flag_found = 'X'.
        EXIT.
      ENDIF.

    ENDLOOP.
  ELSE.
    e_flag_found = 'X'.
    e_query_name = i_mapname.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FIND_QUERY_IN_TRANSPORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM find_query_in_transport.
  DATA v_rsrrepdir TYPE rsrrepdir.

* Get technical id of the query
  SELECT SINGLE * INTO v_rsrrepdir FROM rsrrepdir WHERE compid = p_qname.

  IF sy-subrc = 0.
* Find each Transport order where the query was present
    REFRESH it_e071.
    SELECT * FROM e071 INTO TABLE it_e071
      WHERE pgmid = 'R3TR'
      AND object = 'ELEM'
      AND obj_name = v_rsrrepdir-compuid.
*
    IF sy-subrc = 0.
      REFRESH it_e070.
      LOOP AT it_e071 INTO s_e071.
        w_index = sy-tabix.
        CLEAR s_e070.
        SELECT SINGLE * FROM e070 INTO CORRESPONDING FIELDS OF s_e070
          WHERE trkorr = s_e071-trkorr
*         Strkorr <> '' --> ce N° est une tâche pas un OT donc on le supprime.
          AND strkorr = ''.
        IF sy-subrc  = 0.

*         Texte pour le type de transport
          SELECT SINGLE ddtext INTO s_e070-ddtext_ot_type
            FROM dd07t
            WHERE domname = 'TRFUNCTION'
            AND ddlanguage = 'E'
            AND domvalue_l = s_e070-trfunction.

*         Texte de l'OT
          SELECT SINGLE as4text INTO s_e070-as4text
            FROM e07t
            WHERE trkorr = s_e070-trkorr
            AND langu    = 'E'.

*         Texte pour le type de transport
          SELECT SINGLE ddtext INTO s_e070-ddtext_ot_status
            FROM dd07t
            WHERE domname = 'TRSTATUS'
            AND ddlanguage = 'E'
            AND domvalue_l = s_e070-trstatus.

          APPEND s_e070 TO it_e070.

        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.
*
  SORT it_e070 BY trkorr.
  DELETE ADJACENT DUPLICATES FROM it_e070 COMPARING trkorr.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_QUERY_IN_TRANSPORT
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM display_query_in_transport .
*
  DATA: alv           TYPE REF TO cl_salv_table,
        error_message TYPE REF TO cx_salv_msg,
        column        TYPE REF TO cl_salv_column,
        lr_columns    TYPE REF TO cl_salv_columns_table,
        gr_display    TYPE REF TO cl_salv_display_settings,
        lt_column_ref TYPE salv_t_column_ref,
        ls_column_ref TYPE salv_s_column_ref,
        lo_columns    TYPE REF TO cl_salv_columns_table,
        lo_column     TYPE REF TO cl_salv_column_table.
*
*&---------------------------------------------------------------------*
* trier la table par infoobjet et nom de variable
*&---------------------------------------------------------------------*
  SORT it_e071 BY trkorr.

*&---------------------------------------------------------------------*
* Fill ALV object with data from the internal table
*&---------------------------------------------------------------------*
  TRY.
      cl_salv_table=>factory(
        IMPORTING
          r_salv_table = alv
        CHANGING
          t_table      = it_e070 ).
    CATCH cx_salv_msg INTO error_message.
      " error handling
  ENDTRY.


*&---------------------------------------------------------------------*
* Changer nom des colonnes
*&---------------------------------------------------------------------*
  TRY.
      column = alv->get_columns( )->get_column( 'DDTEXT_OT_TYPE' ).
      column->set_short_text( 'Type' ).
      column->set_medium_text( 'Type' ).
      column->set_long_text( 'Type' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.
*
  TRY.
      column = alv->get_columns( )->get_column( 'DDTEXT_OT_STATUS' ).
      column->set_short_text( 'Statut' ).
      column->set_medium_text( 'Statut' ).
      column->set_long_text( 'Statut' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

*&---------------------------------------------------------------------*
* Hide some coumns
*&---------------------------------------------------------------------*
  TRY.
      column = alv->get_columns( )->get_column( 'TRFUNCTION' ).
      column->set_visible( '' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

  TRY.
      column = alv->get_columns( )->get_column( 'TRSTATUS' ).
      column->set_visible( '' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

  TRY.
      column = alv->get_columns( )->get_column( 'TARSYSTEM' ).
      column->set_visible( '' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

  TRY.
      column = alv->get_columns( )->get_column( 'KORRDEV' ).
      column->set_visible( '' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

  TRY.
      column = alv->get_columns( )->get_column( 'STRKORR' ).
      column->set_visible( '' ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.
*&---------------------------------------------------------------------*
* Ajouter les boutons
*&---------------------------------------------------------------------*
  alv->get_functions( )->set_all( ).

*&---------------------------------------------------------------------*
*Optimiser largeur colonnes
*&---------------------------------------------------------------------*
  lr_columns = alv->get_columns( ).
  lr_columns->set_optimize( 'X' ).

*&---------------------------------------------------------------------*
* rendre les colonnes sensibles au maj/min (pour pouvoir filtrer)
*&---------------------------------------------------------------------*
  lo_columns = alv->get_columns( ).
  lt_column_ref = lo_columns->get( ).

  LOOP AT lt_column_ref INTO ls_column_ref.
    lo_column ?= ls_column_ref-r_column.
    CASE ls_column_ref-columnname.
      WHEN 'TXTLG' OR 'STD_TXTLG'.
        lo_column->set_lowercase(   value = if_salv_c_bool_sap=>true ).
    ENDCASE.
  ENDLOOP.

*&---------------------------------------------------------------------*
* Changer le titre
*&---------------------------------------------------------------------*
  gr_display = alv->get_display_settings( ).
  gr_display->set_list_header( 'OT contenant la query' ).

*&---------------------------------------------------------------------*
* Afficher la grille
*&---------------------------------------------------------------------*
  alv->display( ).
ENDFORM.

Texte du selection screen

Text Symbols

001 Choisir Type d'analyse
002 Programme ABAP dans PC
003 PC utilisé dans une PC
B01 A - Process Chains
B02 B - Queries
B03 C - Transport Request
B04 Local Texts in Queries
B05 D - Display OT quickly
RB1 ABAP Program in PC
RB2 PC used in PC
RB3 BW Variables by infoobjet
RB4 BW Content in a Tran. Req.
RB5 Local texts in queries
RB6 Display OT quickly
RB7 Find Query in OT

Selection-Text

P_QNAME Query name
RB1 ?…
RB2 ?…
RB3 ?…
RB4 ?…
RB5 ?…
RB6 ?…
S_ABAP ABAP Program
S_CHAIN Process Chain
S_CHAIN2 Process Chain to find
S_COMPO Composite
S_IOBJ Infoobjet
S_OT Transport Reques
S_QUERY Query
S_VNAM Variable