121 lines
6.8 KiB
Markdown
121 lines
6.8 KiB
Markdown
The user wants me to document an SAP ABAP screen flow file for a function group related to payment rules. Let me analyze the code and produce the documentation.
|
|
|
|
# Documentation : `zfgpaymentrules.fugr.screen_0001.abap`
|
|
|
|
---
|
|
|
|
## Algorithmie
|
|
|
|
Ce fichier définit la **logique de flux d'un écran dynpro (screen 0001)** appartenant au groupe de fonctions `ZFGPAYMENTRULES`. Il s'agit d'un écran de type **liste View/Maintenance** (View Maintenance, généré via SM30/SE54), gérant l'affichage et la saisie des règles de paiement fournisseurs (`ZPAYMENTRULES`).
|
|
|
|
Le programme est structuré en deux blocs fondamentaux du cycle de vie d'un dynpro SAP :
|
|
|
|
- **`PROCESS BEFORE OUTPUT (PBO)`** : prépare et affiche la liste à l'écran.
|
|
- **`PROCESS AFTER INPUT (PAI)`** : traite les actions utilisateur (commandes, modifications de champs, sélections).
|
|
|
|
Le schéma général suit le pattern standard de la **View Maintenance** SAP, où les modules appelés (`LISTE_*`) sont générés automatiquement par le framework et pilotent la table interne `EXTRACT` comme tampon de données d'écran.
|
|
|
|
---
|
|
|
|
## Objets
|
|
|
|
| Objet | Type | Rôle |
|
|
|---|---|---|
|
|
| `EXTRACT` | Table interne (générée VIM) | Tampon de données entre la base de données et l'écran. Contient les lignes de la vue de maintenance. |
|
|
| `TCTRL_ZPAYMENTRULES` | Table Control | Contrôle graphique de type liste scrollable, lié à la table interne `EXTRACT`. Gère la navigation ligne par ligne (`CURSOR NEXTLINE`). |
|
|
| `ZPAYMENTRULES` | Structure de travail (work area) | Représente une ligne de la table/vue `ZPAYMENTRULES` avec ses champs : `LIFNR`, `VENDORNAME`, `DAYSLATE`, `COMMENTS`. |
|
|
| `VIM_MARKED` | Champ booléen (VIM) | Case à cocher de sélection de ligne, standard du framework View Maintenance. Permet de marquer une ou plusieurs lignes pour traitement en lot. |
|
|
| `NEXTLINE` | Variable de curseur | Pointeur de ligne utilisé par le Table Control pour le défilement de la liste. |
|
|
|
|
### Champs de la structure `ZPAYMENTRULES`
|
|
|
|
| Champ | Rôle métier |
|
|
|---|---|
|
|
| `LIFNR` | Numéro de fournisseur (clé primaire) |
|
|
| `VENDORNAME` | Nom du fournisseur |
|
|
| `DAYSLATE` | Nombre de jours de retard tolérés pour le paiement |
|
|
| `COMMENTS` | Commentaire libre sur la règle de paiement |
|
|
|
|
---
|
|
|
|
## Dépendances
|
|
|
|
- **Groupe de fonctions `ZFGPAYMENTRULES`** : ce fichier est un composant de ce groupe. Les modules appelés (`LISTE_INITIALISIEREN`, `LISTE_SHOW_LISTE`, etc.) sont définis dans les includes ABAP du même groupe de fonctions.
|
|
|
|
- **Framework View Maintenance (VIM)** : l'ensemble des modules `LISTE_*` et `SET_UPDATE_FLAG` sont des modules standard générés par le framework SM30. Ce programme ne peut fonctionner qu'en contexte de maintenance de vue SAP.
|
|
|
|
- **Table/Vue de base `ZPAYMENTRULES`** : la table de personnalisation client qui stocke les règles de paiement. Toute modification du dictionnaire de données (ajout/suppression de champs) nécessite une régénération de l'écran et de ses modules.
|
|
|
|
- **Table Control `TCTRL_ZPAYMENTRULES`** : définie dans le Screen Painter (SE51), doit rester cohérente avec les champs déclarés dans la `CHAIN` du PAI.
|
|
|
|
- **Variable globale `VIM_MARKED`** : variable standard du pool VIM, partagée avec les autres includes du groupe de fonctions.
|
|
|
|
---
|
|
|
|
## Flux de traitement
|
|
|
|
### Phase PBO (affichage)
|
|
|
|
```
|
|
1. MODULE LISTE_INITIALISIEREN
|
|
└─ Initialise les variables de contrôle, prépare le contexte d'affichage
|
|
(statuts, titres, autorisation en lecture/écriture).
|
|
|
|
2. LOOP AT EXTRACT WITH CONTROL TCTRL_ZPAYMENTRULES CURSOR NEXTLINE
|
|
└─ Pour chaque ligne visible dans le Table Control :
|
|
MODULE LISTE_SHOW_LISTE
|
|
└─ Copie les données de EXTRACT vers les champs d'écran ZPAYMENTRULES-*.
|
|
```
|
|
|
|
### Phase PAI (traitement des entrées utilisateur)
|
|
|
|
```
|
|
1. MODULE LISTE_EXIT_COMMAND AT EXIT-COMMAND
|
|
└─ Intercepte les commandes de sortie (F3, F12, annulation).
|
|
Traité EN PREMIER pour permettre une sortie propre sans validation.
|
|
|
|
2. MODULE LISTE_BEFORE_LOOP
|
|
└─ Initialise l'état avant le traitement des lignes (flags globaux, etc.).
|
|
|
|
3. LOOP AT EXTRACT (pour chaque ligne de l'écran)
|
|
│
|
|
├─ MODULE LISTE_INIT_WORKAREA
|
|
│ └─ Prépare la zone de travail pour la ligne courante.
|
|
│
|
|
├─ CHAIN (LIFNR + VENDORNAME + DAYSLATE + COMMENTS)
|
|
│ MODULE SET_UPDATE_FLAG ON CHAIN-REQUEST
|
|
│ └─ Si au moins un champ de la chaîne a été modifié,
|
|
│ positionne le flag de mise à jour (insertion/modification).
|
|
│
|
|
├─ FIELD VIM_MARKED → MODULE LISTE_MARK_CHECKBOX
|
|
│ └─ Traite la case à cocher de sélection de ligne.
|
|
│
|
|
└─ CHAIN (LIFNR)
|
|
MODULE LISTE_UPDATE_LISTE
|
|
└─ Répercute les modifications dans la table interne EXTRACT.
|
|
|
|
4. MODULE LISTE_AFTER_LOOP
|
|
└─ Finalise le traitement : sauvegarde, gestion des erreurs, mise à jour BDD.
|
|
```
|
|
|
|
---
|
|
|
|
## Points d'attention
|
|
|
|
### Risques techniques
|
|
|
|
- **Cohérence écran / dictionnaire** : si des champs sont ajoutés à la table `ZPAYMENTRULES`, il faut impérativement régénérer la vue de maintenance (SM30) ET l'écran (SE51). Une désynchronisation provoque des dumps ou des données silencieusement ignorées.
|
|
|
|
- **Ordre des modules PAI** : `LISTE_EXIT_COMMAND` doit rester **en première position** dans le PAI avec la clause `AT EXIT-COMMAND`. Le déplacer entraîne une impossibilité de quitter l'écran proprement sans déclencher les validations de champs.
|
|
|
|
- **`CHAIN` sur `LIFNR` en double** : le champ `LIFNR` apparaît dans deux `CHAIN` distinctes. Cela est intentionnel dans le pattern VIM (première chaîne pour la détection de modification, seconde pour la mise à jour de liste), mais toute modification manuelle doit préserver cette logique.
|
|
|
|
- **Table Control et pagination** : le `CURSOR NEXTLINE` doit être synchronisé avec la taille du Table Control définie dans SE51. Un décalage peut provoquer des problèmes d'affichage ou des boucles infinies.
|
|
|
|
### Risques métiers
|
|
|
|
- **Absence de validation métier visible** : ce fichier ne contient pas de logique de validation des valeurs saisies (ex. : vérification que `LIFNR` existe dans LFA1, que `DAYSLATE` est positif). Ces contrôles doivent exister dans les modules inclus ou sont absents, ce qui constitue un risque de saisie de données incorrectes.
|
|
|
|
- **`VIM_MARKED` et traitements en lot** : la case à cocher permet de sélectionner plusieurs lignes. Si des traitements groupés (suppression, modification) sont disponibles via les touches de fonction, il faut s'assurer que les autorisations (`S_TABU_DIS`, objet d'autorisation personnalisé) sont correctement vérifiées dans `LISTE_EXIT_COMMAND` ou `LISTE_AFTER_LOOP`.
|
|
|
|
- **Pas de gestion du mode affichage seul** : si l'utilisateur n'a que les droits de lecture (`03`), le framework VIM doit griser les champs. Vérifier que `LISTE_INITIALISIEREN` gère correctement ce cas. |