Gestion des limites de crédit client

  1. Interrogation de l'utilisation du crédit client

Fonction : UKM_COMMTS_READ


FUNCTION zfm_credit_consultation_client.
*"----------------------------------------------------------------------
*"*"Interface locale :
*"  EXPORTING
*"     VALUE(EV_TYPE) TYPE  BAPI_MTYP
*"     VALUE(EV_MSG) TYPE  BAPI_MSG
*"  TABLES
*"      IT_IN STRUCTURE  ZSSD0047
*"      ET_DATA STRUCTURE  ZSSD0048
*"----------------------------------------------------------------------
  DATA: lt_totaux_credit TYPE TABLE OF ukm_totals,
        ls_totaux_credit LIKE LINE OF lt_totaux_credit,
        lt_mnemoniques   TYPE SORTED TABLE OF but000-partner WITH UNIQUE KEY table_line,
        lt_noms_clients  TYPE SORTED TABLE OF kna1-kunnr WITH UNIQUE KEY table_line,
        lt_montants_attente TYPE SORTED TABLE OF ztsd0027-partner WITH UNIQUE KEY table_line.

  IF it_in[] IS INITIAL.
    ev_type = 'E'.
    ev_msg = 'Le segment de crédit et le client sont obligatoires'.
    RETURN.
  ENDIF.

  " Récupération des codes mnémoniques
  SELECT partner, bu_sort1 FROM but000
    FOR ALL ENTRIES IN @it_in
    WHERE partner = @it_in-kunnr
    INTO TABLE @DATA(lt_ref_mnemoniques).
  SORT lt_ref_mnemoniques BY partner.

  " Récupération des noms de clients
  SELECT kunnr, name1, name2 FROM kna1
    FOR ALL ENTRIES IN @it_in
    WHERE kunnr = @it_in-kunnr
    INTO TABLE @DATA(lt_ref_noms).
  SORT lt_ref_noms BY kunnr.

  " Récupération des montants en attente d'approbation
  SELECT credit_sgmnt, partner, zysdamount FROM ztsd0027
    FOR ALL ENTRIES IN @it_in
    WHERE credit_sgmnt = @it_in-credit_sgmnt AND partner = @it_in-kunnr
    INTO TABLE @DATA(lt_ref_attentes).
  SORT lt_ref_attentes BY credit_sgmnt partner.

  LOOP AT it_in ASSIGNING FIELD-SYMBOL(<fs_entree>).
    et_data-kunnr = <fs_entree>-kunnr.
    et_data-credit_sgmnt = <fs_entree>-credit_sgmnt.

    " Code mnémonique
    READ TABLE lt_ref_mnemoniques INTO DATA(ls_mnemonique)
      WITH KEY partner = <fs_entree>-kunnr BINARY SEARCH.
    IF sy-subrc = 0.
      et_data-sort1 = ls_mnemonique-bu_sort1.
    ENDIF.

    " Nom du client
    READ TABLE lt_ref_noms INTO DATA(ls_nom)
      WITH KEY kunnr = <fs_entree>-kunnr BINARY SEARCH.
    IF sy-subrc = 0.
      et_data-name1 = ls_nom-name1 && ls_nom-name2.
    ENDIF.

    CALL FUNCTION 'UKM_COMMTS_READ'
      EXPORTING
        i_partner     = <fs_entree>-kunnr
        i_segment     = <fs_entree>-credit_sgmnt
      TABLES
        et_ukm_totals = lt_totaux_credit.

    LOOP AT lt_totaux_credit INTO ls_totaux_credit
      WHERE partner = <fs_entree>-kunnr AND credit_sgmnt = <fs_entree>-credit_sgmnt.

      " Catégorie de risque de crédit
      et_data-comm_typ = ls_totaux_credit-comm_typ.

      " Description de la catégorie
      SELECT SINGLE comm_typ_txt FROM ukmcomm_typest
        INTO et_data-comm_typ_txt
        WHERE comm_typ = et_data-comm_typ AND langu = sy-langu.

      " Montant de l'exposition au crédit
      IF et_data-comm_typ = '500'.
        READ TABLE lt_ref_attentes INTO DATA(ls_attente)
          WITH KEY credit_sgmnt = <fs_entree>-credit_sgmnt partner = <fs_entree>-kunnr BINARY SEARCH.
        IF sy-subrc = 0.
          et_data-amount = ls_totaux_credit-amount - ls_attente-zysdamount.
        ELSE.
          et_data-amount = ls_totaux_credit-amount.
        ENDIF.
      ELSE.
        et_data-amount = ls_totaux_credit-amount.
      ENDIF.

      APPEND et_data TO et_data[].
      CLEAR ls_totaux_credit.
    ENDLOOP.

    IF sy-subrc NE 0.
      APPEND et_data TO et_data[].
    ENDIF.

    CLEAR: lt_totaux_credit, ls_mnemonique, ls_nom, et_data.
  ENDLOOP.
ENDFUNCTION.
</fs_entree></fs_entree></fs_entree></fs_entree></fs_entree></fs_entree></fs_entree></fs_entree></fs_entree></fs_entree></fs_entree>
  1. Déduction des montants non approuvés lors de la vérification du crédit

Prérequis : La règle de crédit dans la gestion des partenaires (BP) est définie comme B2B-EXIST (formule sans limite de calcul).

Simulation de la vérification de crédit via BP :

1. Dans la classe CL_UKM_CREDIT_CHECK_SIMU, méthode CHECK_CREDIT_WORTHINESS, passez le client et le segment de crédit en mémoire avant d'appeler la méthode de vérification.

2. Dans la classe CL_IM_UKM_CHECK_010, méthode IF_EX_UKM_CHECK_STEP~CHECK_STEP, ajustez la limite de crédit en la déduisant ou en l'augmentant.

Renforcement pour les commandes clients ou bons de livraison :

1. Dans la classe CL_UKM_XI_FACADE_R3_50, méthode IF_UKM_CREDIT_QUERY_R3~CHECK_CREDIT, passez le client et le segment de crédit en mémoire avant l'appel de vérification.

L'étape 2 est identique à celle de la simulation BP, et les résultats peuvent être testés de manière autonome.

  1. Ajout de catégories de crédit dans le calcul

1. Ajout d'une catégorie d'exposition au crédit :

2. Ajout d'une catégorie de passif :

3. Création d'une implémentation BAdI pour ajouter des données de catégorie de crédit


  METHOD if_ex_ukm_fill~fill_fields.
    DATA: ls_entree LIKE LINE OF it_notification.
    READ TABLE it_notification INTO DATA(ls_donnee) INDEX 1.
    " Éviter un dump dans la transaction UKM_CASE
    IF sy-tcode NE 'UKM_CASE' AND sy-tcode NE 'UKM_MY_DCDS'.
      CLEAR ls_entree.
      SELECT * FROM ytest_credit INTO TABLE @DATA(lt_donnees_credit).
      LOOP AT lt_donnees_credit INTO DATA(ls_credit).
        ls_entree-partner = ls_credit-partner.
        ls_entree-credit_sgmnt = ls_credit-credit_sgmnt.
        ls_entree-comm_typ = 'Z01'.
        ls_entree-amount = ls_credit-amount.
        ls_entree-currency = ls_credit-currency.
        APPEND ls_entree TO it_notification.
      ENDLOOP.
    ENDIF.
    " Exporter les données en mémoire pour UKM_CASE
    EXPORT ukm_item = it_notification TO MEMORY ID 'UKM_ITEM'.
  ENDMETHOD.

Étiquettes: SAP-ABAP UKM credit-management BADI SAP-FI-AR

Publié le 19 juin à 18h04