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)