203 lines
9.2 KiB
Markdown
203 lines
9.2 KiB
Markdown
The user wants me to document the ABAP function module `ZBDC_VENDOR_PAYMENTS_CLOUD` in markdown format with specific sections. Let me analyze the code thoroughly.
|
|
|
|
This is a BDC (Batch Data Communication) function module that automates the SAP transaction F-53 (Post Outgoing Payments) for vendor payments. It uses the Call Transaction method via `perform bdc_transaction`.
|
|
|
|
# Documentation : `ZBDC_VENDOR_PAYMENTS_CLOUD`
|
|
|
|
**Fichier :** `zfgpayments.fugr.zbdc_vendor_payments_cloud.abap`
|
|
**Groupe de fonctions :** `ZFGPAYMENTS`
|
|
**Transaction cible :** `F-53` (Saisie de paiements sortants fournisseurs)
|
|
|
|
---
|
|
|
|
# Algorithmie
|
|
|
|
La fonction `ZBDC_VENDOR_PAYMENTS_CLOUD` est un **module BDC (Batch Data Communication)** généré automatiquement (via l'enregistrement de transaction SAP). Son rôle est de **simuler la saisie manuelle** de la transaction standard SAP **F-53** ("Post Outgoing Payments" - Paiements sortants fournisseurs) en pilotant les dynpros (écrans) de cette transaction via une séquence de champs prédéfinis.
|
|
|
|
Le principe BDC consiste à :
|
|
1. Construire une table de données écran-par-écran (via `bdc_dynpro` et `bdc_field`),
|
|
2. Puis soumettre cette table à la transaction cible via `bdc_transaction`,
|
|
3. La transaction SAP s'exécute alors comme si un utilisateur avait saisi les données manuellement.
|
|
|
|
Le mode d'exécution peut être **interactif** (avec affichage des écrans), **en arrière-plan** (batch silencieux), ou **via session de batch input** (enregistrement dans une file d'attente pour exécution différée).
|
|
|
|
---
|
|
|
|
# Objets
|
|
|
|
## Paramètres d'interface
|
|
|
|
### Paramètres BDC de contrôle (IMPORTING)
|
|
|
|
| Paramètre | Type de référence | Défaut | Rôle |
|
|
|-----------|------------------|--------|------|
|
|
| `CTU` | `APQI-PUTACTIVE` | `'X'` | Activation de la session batch input (`X` = actif) |
|
|
| `MODE` | `APQI-PUTACTIVE` | `'N'` | Mode d'exécution : `N`=no display, `A`=affichage de tous les écrans, `E`=affichage en cas d'erreur |
|
|
| `UPDATE` | `APQI-PUTACTIVE` | `'L'` | Mode de mise à jour : `L`=local (synchrone), `A`=asynchrone, `S`=synchrone |
|
|
| `GROUP` | `APQI-GROUPID` | Optionnel | Nom du groupe de session batch input |
|
|
| `USER` | `APQI-USERID` | Optionnel | Utilisateur propriétaire de la session batch input |
|
|
| `KEEP` | `APQI-QERASE` | Optionnel | Conservation de la session après traitement (`X`=conserver) |
|
|
| `HOLDDATE` | `APQI-STARTDATE` | Optionnel | Date de départ planifiée pour la session |
|
|
| `NODATA` | `APQI-PUTACTIVE` | `'/'` | Caractère représentant un champ vide/non renseigné dans le BDC |
|
|
|
|
### Paramètres de données métier (IMPORTING)
|
|
|
|
| Paramètre | Champ SAP | Défaut | Signification métier |
|
|
|-----------|-----------|--------|----------------------|
|
|
| `BLDAT_001` | `BKPF-BLDAT` | `04/17/2017` | Date de pièce comptable |
|
|
| `BLART_002` | `BKPF-BLART` | `KZ` | Type de pièce (`KZ` = paiement fournisseur) |
|
|
| `BUKRS_003` | `BKPF-BUKRS` | `1710` | Code société |
|
|
| `BUDAT_004` | `BKPF-BUDAT` | `04/21/2017` | Date de comptabilisation |
|
|
| `MONAT_005` | `BKPF-MONAT` | `4` | Période comptable (mois) |
|
|
| `WAERS_006` | `BKPF-WAERS` | `USD` | Devise de la pièce |
|
|
| `KONTO_007` | `RF05A-KONTO` | `11001000` | Compte de contrepartie (compte bancaire) |
|
|
| `WRBTR_008` | `BSEG-WRBTR` | `204182.87` | Montant en devise de la pièce (en-tête) |
|
|
| `VALUT_009` | `BSEG-VALUT` | `04/17/2017` | Date de valeur bancaire |
|
|
| `AGKON_010` | `RF05A-AGKON` | `USSU_V8001` | Compte de compensation (numéro du fournisseur) |
|
|
| `AGKOA_011` | `RF05A-AGKOA` | `K` | Type de compte de compensation (`K` = fournisseur) |
|
|
| `XNOPS_012` | `RF05A-XNOPS` | `X` | Indicateur de non-compensation automatique |
|
|
| `XPOS1_01_013` | `RF05A-XPOS1(01)` | `` (vide) | Sélection poste ouvert ligne 1 (non coché) |
|
|
| `XPOS1_03_014` | `RF05A-XPOS1(03)` | `X` | Sélection poste ouvert ligne 3 (coché) |
|
|
| `SEL01_01_015` | `RF05A-SEL01(01)` | `5100002254` | Numéro de facture fournisseur à solder |
|
|
| `ABPOS_016` | `RF05A-ABPOS` | `1` | Numéro de poste de compensation |
|
|
| `WRBTR_017` | `BSEG-WRBTR` | `204,182.87` | Montant du poste de paiement (avec séparateur de milliers) |
|
|
| `VALUT_018` | `BSEG-VALUT` | `04/17/2017` | Date de valeur du poste |
|
|
| `FMORE_019` | `DKACB-FMORE` | `X` | Indicateur "plus de champs" (affichage des données supplémentaires) |
|
|
| `HBKID_020/022/024` | `BSEG-HBKID` | `USBK1` | Identifiant banque (répété 3 fois sur dynpro 0330) |
|
|
| `HKTID_021/023/025` | `BSEG-HKTID` | `USAC1` | Identifiant compte bancaire (répété 3 fois) |
|
|
|
|
### Paramètres de sortie (EXPORTING / TABLES)
|
|
|
|
| Paramètre | Type | Rôle |
|
|
|-----------|------|------|
|
|
| `SUBRC` | `SYST-SUBRC` | Code retour de la fonction (0 = succès) |
|
|
| `MESSTAB` | `BDCMSGCOLL` | Table des messages retournés par la transaction BDC |
|
|
|
|
---
|
|
|
|
## Structures de données utilisées
|
|
|
|
| Objet | Nature | Description |
|
|
|-------|--------|-------------|
|
|
| `BDCDATA` | Structure | Contient les données BDC : programme, dynpro, champs et valeurs |
|
|
| `BDCMSGCOLL` | Structure | Collection des messages SAP issus de l'exécution BDC |
|
|
| `BKPF` | Table | En-tête des pièces comptables (FI) |
|
|
| `BSEG` | Table | Postes des pièces comptables (FI) |
|
|
| `APQI` | Table | File de traitement batch input |
|
|
|
|
---
|
|
|
|
# Dépendances
|
|
|
|
## Sous-routines appelées (PERFORM ... USING)
|
|
|
|
Ces routines sont définies dans l'include standard `BDCRECXY` (inclus en fin de fonction) :
|
|
|
|
| Routine | Rôle |
|
|
|---------|------|
|
|
| `bdc_nodata` | Définit le caractère "no data" pour les champs BDC vides |
|
|
| `open_group` | Ouvre une session batch input (si mode session) |
|
|
| `bdc_dynpro` | Ajoute une entrée de changement d'écran dans la table BDC interne |
|
|
| `bdc_field` | Ajoute un champ avec sa valeur dans la table BDC interne |
|
|
| `bdc_transaction` | Exécute la transaction SAP (`F-53`) avec la table BDC construite |
|
|
| `close_group` | Ferme et valide la session batch input ouverte |
|
|
|
|
## Include standard
|
|
|
|
```abap
|
|
INCLUDE BDCRECXY.
|
|
```
|
|
|
|
Cet include standard SAP fournit les sous-routines BDC génériques (`bdc_dynpro`, `bdc_field`, `bdc_transaction`, `open_group`, `close_group`, `bdc_nodata`). Il est systématiquement présent dans les fonctions générées par l'enregistrement BDC.
|
|
|
|
## Transaction SAP cible
|
|
|
|
| Transaction | Description |
|
|
|------------|-------------|
|
|
| `F-53` | Post Outgoing Payments - Saisie manuelle de paiements sortants (module FI-AP) |
|
|
|
|
## Dynpros impliqués
|
|
|
|
| Programme | N° Dynpro | Rôle dans F-53 |
|
|
|-----------|-----------|----------------|
|
|
| `SAPMF05A` | `0103` | Écran principal de saisie de l'en-tête du paiement |
|
|
| `SAPMF05A` | `0731` | Écran de sélection des postes ouverts fournisseur |
|
|
| `SAPDF05X` | `3100` | Écran de compensation des postes ouverts |
|
|
| `SAPMF05A` | `0700` | Écran de saisie des postes supplémentaires / validation |
|
|
| `SAPMF05A` | `0300` | Écran de saisie du poste de paiement (crédit banque) |
|
|
| `SAPLKACB` | `0002` | Popup de saisie des objets de coût (CO-PA) |
|
|
| `SAPMF05A` | `0330` | Écran de saisie des informations bancaires |
|
|
|
|
---
|
|
|
|
# Flux de traitement
|
|
|
|
````
|
|
[DÉBUT]
|
|
│
|
|
▼
|
|
1. Initialisation : SUBRC = 0
|
|
│
|
|
▼
|
|
2. bdc_nodata(NODATA)
|
|
└─ Définit le caractère de champ vide ('/')
|
|
│
|
|
▼
|
|
3. open_group(GROUP, USER, KEEP, HOLDDATE, CTU)
|
|
└─ Ouvre la session batch input si CTU = 'X'
|
|
│
|
|
▼
|
|
4. DYNPRO SAPMF05A / 0103 ─── En-tête du paiement
|
|
├─ Cursor sur RF05A-XPOS1(03)
|
|
├─ OKCode = '=PA' (valider / passer à l'écran suivant)
|
|
├─ BKPF-BLDAT → Date de pièce
|
|
├─ BKPF-BLART → Type de pièce (KZ)
|
|
├─ BKPF-BUKRS → Société
|
|
├─ BKPF-BUDAT → Date comptabilisation
|
|
├─ BKPF-MONAT → Période
|
|
├─ BKPF-WAERS → Devise
|
|
├─ RF05A-KONTO → Compte bancaire
|
|
├─ BSEG-WRBTR → Montant
|
|
├─ BSEG-VALUT → Date de valeur
|
|
├─ RF05A-AGKON → Fournisseur (compte à solder)
|
|
├─ RF05A-AGKOA → Type 'K' (fournisseur)
|
|
├─ RF05A-XNOPS → Pas de compensation auto
|
|
├─ RF05A-XPOS1(01) → Ligne 1 (non sélectionnée)
|
|
└─ RF05A-XPOS1(03) → Ligne 3 (sélectionnée)
|
|
│
|
|
▼
|
|
5. DYNPRO SAPMF05A / 0731 ─── Sélection postes ouverts (1ère fois)
|
|
├─ OKCode = '/00' (Enter)
|
|
└─ RF05A-SEL01(01) → Numéro de facture à compenser
|
|
│
|
|
▼
|
|
6. DYNPRO SAPMF05A / 0731 ─── Sélection postes ouverts (2ème fois)
|
|
└─ OKCode = '=PA' (valider la sélection)
|
|
│
|
|
▼
|
|
7. DYNPRO SAPDF05X / 3100 ─── Compensation des postes
|
|
├─ OKCode = '=AB' (affecter/compenser)
|
|
├─ Cursor sur DF05B-PSSKT(01)
|
|
└─ RF05A-ABPOS → Numéro de poste de compensation (1)
|
|
│
|
|
▼
|
|
8. DYNPRO SAPMF05A / 0700 ─── Écran de validation intermédiaire
|
|
├─ Cursor sur RF05A-AZEI1(01)
|
|
└─ OKCode = '=PI' (poste individuel / afficher poste)
|
|
│
|
|
▼
|
|
9. DYNPRO SAPMF05A / 0300 ─── Saisie du poste de paiement
|
|
├─ OKCode = '=ZK' (données de paiement)
|
|
├─ BSEG-WRBTR → Montant avec séparateur milliers
|
|
├─ BSEG-VALUT → Date de valeur
|
|
└─ DKACB-FMORE → Afficher plus de champs
|
|
│
|
|
▼
|
|
10. DYNPRO SAPLKACB / 0002 ─── Popup objets de coût (CO)
|
|
├─ Cursor sur COBL-KOSTL (centre de coût)
|
|
└─ OKCode = '=ENTE' (valider sans saisir de centre de coût)
|
|
│
|
|
▼
|
|
11. DYNPRO SAPMF05A / 0330 ─── Saisie bancaire (passage 1)
|
|
├─ OKCode = '/00' (Enter)
|
|
|