Consultance SAP
  
 English (United States) Français (France)
Register  
 
Wednesday, February 22, 2012
Publicité
Publicité
Articles
16

Suite à la demande d'un utilisateur, je présente ici la création d'un table control avec sélection de lignes et traitement de celles-ci.

Je vais jouer ici avec la suppression des lignes sélectionnées, mais vous pourrez faire ce que vous voulez avec quelques modifications (Ajout, Edition, etc...) 

Présentation des écrans de la création d'un table control via l'assistant :

Etape 1 : Création et Nommage du table control

 

 

Etape 2 : Sélection de la table interne et sa structure

 

Etape 3 : Sélection des champs à afficher

Attention à ne pas sélectionner le champ "SEL".

 

Etape 4 : Insertion du champ de sélection (SEL)

Vous pouvez sélectionner "Multiple" si vous souhaitez sélectionner plusieurs ligne en même temps.

 

Etape 5 : Sélection des Includes où envoyer les modules et déclarations générés automatiquement

 

 

Présentation du code du programme (ZAGE_TEST_09) :

Avant la création du table control il suffit juste de créer les INCLUDE et de créer la table interne (t_soc) et sa sctructure (s_soc).

REPORT  zage_test_09.


* Déclarations :
INCLUDE zage_test_09_top.

* Procédures
INCLUDE zage_test_09_form.

* Modules Ecran
INCLUDE zage_test_09_pbo.
INCLUDE zage_test_09_pai.

 

Détails par INCLUDE :

*&---------------------------------------------------------------------*
*&  Include           ZAGE_TEST_09_TOP                                 *
*&---------------------------------------------------------------------*

*Déclaration des Types de structure :
TYPES : BEGIN OF ts_soc,
          bukrs  TYPE t001-bukrs,
          land1  TYPE t001-land1,
          sel    TYPE c,
        END OF ts_soc.

* Déclaration des structures et des tables internes :
DATA  : s_soc    TYPE ts_soc,
        t_soc    TYPE STANDARD TABLE OF ts_soc.


* Déclaration générée par l'assistant.
* Déclaration du tablecontrol 'TAB_CONTROL1'
CONTROLS: tab_control1 TYPE TABLEVIEW USING SCREEN 1000.

* Ligne du tablecontrol 'TAB_CONTROL'
DATA: g_soc_lines  LIKE sy-loopc.

 

Dans le cas présent il n'y rien dans l'include FORM, mais libre à vous d'y insérer ce que vous souhaitez.

*&---------------------------------------------------------------------*
*&  Include           ZAGE_TEST_09_PBO                                 *
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Module  STATUS_1000  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_1000 OUTPUT.
  SET PF-STATUS 'STATUT_1000'.
  SET TITLEBAR 'TITRE_1000'.

  IF t_soc[] IS INITIAL.
    LOOP AT SCREEN.
      IF screen-group1 = '100'. "seul le bouton "Supprimer" est concerné dans mon exemple
        screen-invisible = '1'.
      ENDIF.
      MODIFY SCREEN.
    ENDLOOP.
*   Récupération des donneés
    SELECT bukrs land1 INTO TABLE t_soc
                       FROM t001.
    IF sy-subrc IS INITIAL.
*     Tri de la table par pays
      SORT t_soc BY land1.
*     Une ligne par pays
      DELETE ADJACENT DUPLICATES FROM t_soc COMPARING land1.
    ENDIF.
  ELSE.
    LOOP AT SCREEN.
      IF screen-group1 = '100'.
        screen-invisible = '0'.
      ENDIF.
      MODIFY SCREEN.
    ENDLOOP.
  ENDIF.
ENDMODULE.                 " STATUS_1000  OUTPUT

*&spwizard: output module for tc 'TAB_CONTROL1'. do not change this line
*&spwizard: update lines for equivalent scrollbar
MODULE tab_control1_change_tc_attr OUTPUT.
  DESCRIBE TABLE t_soc LINES tab_control1-lines.
ENDMODULE.                    "TAB_CONTROL1_change_tc_attr OUTPUT

*----------------------------------------------------------------------*
*  MODULE tab_get_lines OUTPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE tab_get_lines OUTPUT.
  g_soc_lines = sy-loopc.
ENDMODULE.                    "tab_get_lines OUTPUT

__________________________________________________________________________________

*&---------------------------------------------------------------------*
*&  Include           ZAGE_TEST_09_PAI                                 *
*&---------------------------------------------------------------------*


*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_1000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_1000 INPUT.

  CASE sy-ucomm.
    WHEN 'EXIT' OR 'BACK'.
      REFRESH t_soc.
      CLEAR : s_soc, sy-ucomm.
      LEAVE TO SCREEN 0.

    WHEN 'DELETE'.

     CLEAR : sy-ucomm.
      DELETE t_soc WHERE sel = 'X'.
    WHEN OTHERS.
  ENDCASE.

ENDMODULE.                 " USER_COMMAND_1000  INPUT

*&spwizard: input modul for tc 'TAB_CONTROL1'. do not change this line!
*&spwizard: mark table
MODULE tab_control1_mark INPUT.
  DATA: g_tab_control1_wa2 LIKE LINE OF t_soc.

  IF tab_control1-line_sel_mode = 1 AND s_soc-sel = 'X'.
    LOOP AT t_soc INTO g_tab_control1_wa2 WHERE sel = 'X'.
      g_tab_control1_wa2-sel = ''.
      MODIFY t_soc FROM g_tab_control1_wa2 TRANSPORTING sel.
    ENDLOOP.
  ENDIF.
  MODIFY t_soc FROM s_soc INDEX tab_control1-current_line
                          TRANSPORTING sel.
ENDMODULE.                    "TAB_CONTROL1_mark INPUT

 

Dans mon exemple, tous les contenu des modules PBO et PAI ont été alimentés par l'assistant du table control.

 

Enfin voici la présentation du dynpro :

Logic d'exécution :

PROCESS BEFORE OUTPUT.

  MODULE tab_control1_change_tc_attr.

  LOOP AT   t_soc INTO s_soc
                  WITH CONTROL tab_control1
                  CURSOR tab_control1-current_line.
    MODULE tab_get_lines.
  ENDLOOP.

  MODULE status_1000.


PROCESS AFTER INPUT.

  LOOP AT t_soc.
    CHAIN.
      FIELD s_soc-bukrs.
      FIELD s_soc-land1.
    ENDCHAIN.
    FIELD s_soc-sel
      MODULE tab_control1_mark ON REQUEST.
  ENDLOOP.

  MODULE user_command_1000.

 

Voici le dynpro au final :

 

Suivant les commentaires apportés, j'ajouterai des explications si nécessaire.

 

 

 

Actions: E-mail | RSS comment feed |

Comments

# jfo
Monday, October 20, 2008 4:53 PM
trés intéressante première contribution. Chouette sur la prochaine newsletter je ne serais pas le seul auteur...
# Maverick
Tuesday, October 21, 2008 9:48 AM
Merci pour le tuto y marche très bien ;)
# jfo
Tuesday, October 21, 2008 10:02 AM
Comment accède t-on à cet écran ? depuis quelle transaction ?
# Maverick
Tuesday, October 21, 2008 1:03 PM
c'est vrai que moi j'ai rajouter un call screen pour que ca fonctionne en fait :)
# Sh@m@n
Wednesday, October 22, 2008 9:46 AM
tu as raison Jfo, j'ai oublié de mentionner la transaction et comment accéder à cet écran. Mais je n'ai pas le moyen de modifier l'article comme ça... :(

Sinon, pr info, on accède via la SE51 ou la SE80 : mise en forme en forme du dynpro.
# Maverick
Wednesday, October 22, 2008 10:08 AM
Tu peux le lancer également avec le SE38 en rajoutant en début de prog CALL SCREEN (n° Dynpro)
# ecir
Thursday, October 23, 2008 6:18 PM
Merci pour la démonstration.
Un seul "petit" complément: la zone SEL permet la sélection des lignes, de manière multiple ou individuelle. Elle doit donc être de type char, de longueur 1.
Dis au départ, cela permet de mieux comprendre.
# Sh@m@n
Friday, October 24, 2008 9:20 AM
Mais elle est dans la déclaration du type de structure "SEL TYPE c" ^^
# Draconagi
Friday, October 24, 2008 12:14 PM
Excuses moi.

Mais quelle est la transaction pour accéder à l'assistant de création de table controle.
# Maverick
Friday, October 24, 2008 1:34 PM
Il faut le faire a partir du screen painter, tu as une icone qui s'appelle : table control (via assistant) si je me trompe pas
# draconagi
Friday, October 24, 2008 2:06 PM
Désolé mais je ne vois pas cet icône. Peux tu me dire à quoi il ressemble ou bien si je peux l'atteindre via le menu supérieur.
Merci
# Sh@m@n
Friday, October 24, 2008 3:34 PM
Ne pouvant post l'image ici, regarde ce lien :
=> http://www.sapintegration.net/Default.aspx?tabid=405&forumid=192&tpage=3&view=topic&postid=51176&language=fr-FR#51756

ShAmY
# Maverick
Friday, October 24, 2008 3:35 PM
Pour résumer tu peux utiliser la transaction SE51, tu rentres le nom de ton prog , le nom de la dynpro (tu fais creer si tu n'as pas de dynpro déjà c crée), après au dessus tu as un bouton "mise en page" tu cliques dessus tu arrives sur le screen painter , ensuite en bas a gauche tu as une icone Table control(via assistant) qui ressemble a un petit tableau avec une baguette magique , voila.
J'espere que c'est comme ca chez tout le monde que je ne t'induise pas en erreur.
Bon je sais ca serais plus simple avec des images :)
# draconagi
Friday, October 24, 2008 3:46 PM
Merci. j'ai trouvé et ça marche.

Seul souci c'est la gestion de la modification par plusieurs utilisateurs. donc je me penche dessus.

Merci encore
# Sh@m@n
Monday, October 27, 2008 9:27 AM
Et bien, si par exemple tu travailles sur des clients, tu contrôles si un utilisateur travaille déjà dessus ou non.
Si c'est le cas, alors tu le bloque ^^
C'est tout!!!

Post Comment

Only registered users may post comments.
  
 Print   


Les maques SAP, ABAP, BSP, Microsoft, .net, sont des marques déposées par leurs ayant-droiits.

Le site www.sap-integration.net est un site indépendant de SAP et de Microsoft et de tout autre éditeurs de logiciels ou fabricants de matériels.