retrodoc-abap-ia/documentation/documentation_zfgpayments.fugr.zfi_out_payment_post_clear.md

12 KiB

The user wants me to document the ABAP function module ZFI_OUT_PAYMENT_POST_CLEAR in markdown format with specific sections.

Documentation — ZFI_OUT_PAYMENT_POST_CLEAR

Groupe de fonctions : ZFGPAYMENTS Fichier : zfgpayments.fugr.zfi_out_payment_post_clear.abap


Algorithmie

Cette fonction module réalise le paiement et le lettrage simultané d'un poste ouvert fournisseur dans SAP FI (Financial Accounting). Elle suit une logique en quatre temps :

  1. Sélection de postes ouverts : elle interroge les postes ouverts fournisseurs (type de compte K) pour un numéro de pièce précis (IM_BELNR), dans la société et la devise données.
  2. Contrôle du type de pièce : le traitement ne se poursuit que si la pièce trouvée est de type KR (facture fournisseur) ou RE (facture entrée marchandises). Cela garantit qu'on ne paie que des factures fournisseurs légitimes.
  3. Construction de la pièce comptable de paiement : un poste G/L bancaire est construit (en-tête + ligne + devise) avec la clé de comptabilisation 50 (crédit), le compte général de banque (IM_HKONT), et la date de valeur (IM_VALUT).
  4. Comptabilisation et lettrage : la pièce de paiement est générée et simultanément lettrée avec le poste ouvert via FI_DOCUMENT_GENERATE_AND_CLEAR, puis la transaction est commitée.

Objets

Paramètres d'entrée (IMPORTING)

Paramètre Type SAP Description
IM_BUKRS BUKRS Code société
IM_GJAHR GJAHR Exercice comptable
IM_BELNR BELNR_D Numéro de la pièce à lettrer
IM_KONKO KONKO Compte fournisseur (compte collectif)
IM_WAERS WAERS Devise de la transaction
IM_CLR_TR AUGLV Type de transaction de lettrage (défaut : AUSGZAHL = paiement sortant)
IM_HKONT HKONT Compte G/L bancaire (contrepartie)
IM_KURSF KURSF Taux de change (optionnel)
IM_WRBTR WRBTR Montant à payer en devise
IM_VALUT VALUT Date de valeur bancaire
IM_HBKID HBKID Identifiant banque maison (optionnel)
IM_HKTID HKTID Identifiant compte bancaire maison (optionnel)

Paramètres de sortie (EXPORTING)

Paramètre Type SAP Description
EX_BELNR BELNR_D Numéro de la pièce de paiement générée
EX_BUKRS BUKRS Société de la pièce générée
EX_GJAHR GJAHR Exercice de la pièce générée

Variables locales

Variable Type Rôle
lt_selection_tab / ls_selection_tab selection_tab_t / selection_tab Critères de sélection des postes ouverts (filtre sur BELNR)
lv_date DATUM Date système (date du jour)
lt_open_item_tab / ls_open_item_tab postab_tab / rfops Table des postes ouverts retournés
ls_acchd / lt_acchd acchd / acchd_t En-tête de la pièce comptable
ls_accit / lt_accit accit / accit_tab Ligne(s) de la pièce comptable
ls_acccr / lt_acccr acccr / acccr_tab Données devise de la pièce comptable

Constantes

Constante Valeur Signification
lv_koart 'K' Type de compte : Fournisseurs
lv_bschl '50' Clé de comptabilisation : Crédit G/L
lv_blart 'KZ' Type de pièce : Paiement fournisseur

Dépendances

Fonctions modules SAP standard appelées

Fonction Rôle
FI_OPEN_ITEMS_SELECT Sélectionne les postes ouverts fournisseurs selon les critères fournis. Filtre par société, compte collectif, devise, type de pièce et table de sélection (numéro de pièce).
FI_POSTING_KEY_DATA Résout, à partir de la clé de comptabilisation (50), le type de compte (KOART) et l'indicateur débit/crédit (SHKZG). Permet de déterminer dynamiquement le signe du montant.
FI_LINE_ITEM_CHECK Contrôle et enrichit les structures de la ligne comptable (en-tête, poste, devise) avant génération de la pièce.
FI_DOCUMENT_GENERATE_AND_CLEAR Génère la pièce de paiement FI et lettrage simultané des postes ouverts sélectionnés. C'est le coeur fonctionnel de la comptabilisation.
BAPI_TRANSACTION_COMMIT Valide définitivement la transaction en base de données. Appelé avec WAIT = ABAP_TRUE pour s'assurer que le commit est synchrone.

Appartenance

  • Groupe de fonctions : ZFGPAYMENTS (développement custom Z, domaine paiements sortants)

Flux de traitement

┌─────────────────────────────────────────────────────────┐
│ 1. INITIALISATION                                       │
│    - Date courante = sy-datum                           │
│    - Construction du critère de sélection sur BELNR     │
└────────────────────────┬────────────────────────────────┘
                         │
                         ▼
┌─────────────────────────────────────────────────────────┐
│ 2. SÉLECTION DES POSTES OUVERTS                         │
│    FI_OPEN_ITEMS_SELECT                                 │
│    - Filtre : société, compte K, devise, type KZ        │
│    - Filtre additionnel : numéro de pièce = IM_BELNR    │
└────────────────────────┬────────────────────────────────┘
                         │
              ┌──────────▼──────────┐
              │ Table vide ?        │
              │  → Fin sans action  │
              └──────────┬──────────┘
                         │ Non vide
                         ▼
┌─────────────────────────────────────────────────────────┐
│ 3. CONTRÔLE DU TYPE DE PIÈCE                            │
│    - Lecture du 1er enregistrement                      │
│    - BLART = 'KR' (facture fournisseur)                 │
│      ou    = 'RE' (facture entrée marchandises) ?       │
└────────────────────────┬────────────────────────────────┘
                         │ Oui
                         ▼
┌─────────────────────────────────────────────────────────┐
│ 4. CONSTRUCTION DE LA PIÈCE DE PAIEMENT                 │
│    a) En-tête (ACCHD) : type BKPFF, procédure RFBU      │
│    b) Ligne (ACCIT)   : position 1, type KZ, date valeur│
│                         compte G/L banque, clé 50       │
│                         banque maison si renseignée     │
│    c) FI_POSTING_KEY_DATA → koart + shkzg               │
│    d) Devise (ACCCR)  : montant, devise, taux change    │
│                         inversion signe si crédit (H)   │
└────────────────────────┬────────────────────────────────┘
                         │
                         ▼
┌─────────────────────────────────────────────────────────┐
│ 5. CONTRÔLE DES LIGNES                                  │
│    FI_LINE_ITEM_CHECK                                   │
│    - Enrichissement et validation des structures        │
└────────────────────────┬────────────────────────────────┘
                         │
                         ▼
┌─────────────────────────────────────────────────────────┐
│ 6. COMPTABILISATION ET LETTRAGE                         │
│    FI_DOCUMENT_GENERATE_AND_CLEAR                       │
│    - Génère la pièce KZ                                 │
│    - Lettrage avec les postes ouverts                   │
│    - Retourne EX_BELNR / EX_BUKRS / EX_GJAHR           │
└────────────────────────┬────────────────────────────────┘
                         │ EX_BELNR non vide
                         ▼
┌─────────────────────────────────────────────────────────┐
│ 7. COMMIT                                               │
│    BAPI_TRANSACTION_COMMIT (WAIT = X)                   │
│    - Validation synchrone en base                       │
└─────────────────────────────────────────────────────────┘

Points d'attention

Risques techniques

  • Absence de gestion d'erreurs sur FI_OPEN_ITEMS_SELECT : les exceptions (company_code_missing, account_missing, etc.) sont déclarées mais aucun traitement n'est prévu en cas de déclenchement. En cas d'erreur, la fonction se termine silencieusement sans retourner d'information à l'appelant.

  • Exception ERROR_MESSAGE non levée : la signature déclare une exception ERROR_MESSAGE, mais elle n'est jamais déclenchée dans le corps de la fonction. L'appelant ne peut donc pas être notifié d'une anomalie via le mécanisme standard.

  • Absence de vérification de SY-SUBRC : après FI_OPEN_ITEMS_SELECT et FI_DOCUMENT_GENERATE_AND_CLEAR, la valeur de retour SY-SUBRC n'est pas vérifiée. Un échec silencieux est possible.

  • Hardcoding de lv_bschl = '50' et lv_blart = 'KZ' : ces valeurs sont figées en constantes. Tout besoin de paiement avec un type de pièce ou une clé comptable différente nécessiterait une modification du code.

  • MOVE-CORRESPONDING entre structures de types différents (acchd vers accit) : peut transférer des champs non désirés ou masquer des oublis d'alimentation explicite.

  • Commit dans la fonction : l'appel à BAPI_TRANSACTION_COMMIT à l'intérieur d'une fonction module couple fortement la logique transactionnelle à cette fonction. Si elle est appelée dans une boucle ou un traitement plus large, chaque appel commitera indépendamment, rendant un rollback global impossible.

Risques métiers

  • Filtrage post-sélection sur BELNR : le DELETE lt_open_item_tab WHERE belnr NE im_belnr suggère que FI_OPEN_ITEMS_SELECT peut ramener des pièces autres que celle demandée. Ce filtre est une sécurité, mais si la table est vide après purge, aucun message n'est émis.

  • Traitement limité aux types KR et RE : tout autre type de pièce fournisseur (ex. : DR, avoir) sera ignoré sans notification. Cela peut donner l'impression d'un traitement réussi alors qu'aucune action n'a eu lieu.

  • Sensibilité à la date de valeur (IM_VALUT) : les dates de comptabilisation (BLDAT, BUDAT) sont toutes deux alimentées par IM_VALUT (date de valeur bancaire), et non par la date système. Une date incorrecte en entrée affectera directement la comptabilisation en période comptable.

  • Pas de contrôle du montant (IM_WRBTR) : aucune validation n'est effectuée pour s'assurer que le montant correspond au montant du poste ouvert. Un écart générera une différence de lettrage.

  • Unicité supposée du poste ouvert : le commentaire "Only one record will be in Int tab" indique une hypothèse forte. Si plusieurs postes ouverts existent pour la même pièce (cas de paiements partiels), seul le premier sera lu mais tous seront envoyés à FI_DOCUMENT_GENERATE_AND_CLEAR.