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 :
- 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. - 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) ouRE(facture entrée marchandises). Cela garantit qu'on ne paie que des factures fournisseurs légitimes. - 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). - 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_MESSAGEnon levée : la signature déclare une exceptionERROR_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èsFI_OPEN_ITEMS_SELECTetFI_DOCUMENT_GENERATE_AND_CLEAR, la valeur de retourSY-SUBRCn'est pas vérifiée. Un échec silencieux est possible. -
Hardcoding de
lv_bschl = '50'etlv_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-CORRESPONDINGentre structures de types différents (acchdversaccit) : 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: leDELETE lt_open_item_tab WHERE belnr NE im_belnrsuggère queFI_OPEN_ITEMS_SELECTpeut 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
KRetRE: 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 parIM_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.