Rücklastschrift

  • Hallo zusammen,

    wir haben bei uns im System
    Die Komponentenversion meines Systems: EHP 7 für SAP ERP 6.0
    Komponente: SAP_APPL Release: 617 SP-Level: 0002

    das BAdI "FIEB_RETURN_ADDIN" implementiert um Gebühr als separate Buchung zu erzeugen.Unser Problem ist: lt. Kontoauszug sollte insgesamt 2.005 € von unserem Konto belastet werden und zwar davon 5 € als Gebühr.

    Nachdem wir das BAdI aktiviert haben, wurden plötzlich - 2.010 € mit GVC 109 und + 5 € mit GVC 109 in unserem Kontoauszug erschienen. Dem entsprechend wurde unsere Debitor natürlich auch mit 2.010 € belastet, obwohl wir eigentlich unsere Debitor nur mit 2.000 € belasten wollen.

    Wenn wir das BAdI deaktivieren, dann erscheint auf unseren Kontoauszug auch nur 2.005 € mit GVC 109. Natürlich wird hier auch keine separate Buchung für Gebühren erstellt. Denn ohne BAdI wird die Gebühr nicht separate gelesen.

    Hätten Sie hier vielleicht eine ähnliche Erfahrung gemacht.

    ich bin Ihnen für jede Rückmeldung sehr sehr sehr dankbar.

    Viele Grüße

    _Ayleen8

  • amazon
  • METHOD if_ex_fieb_returns_addin~change_return_charges.


    * if a return reason was found by the standard this example coding will
    * only search for ths charges in the references. If it was not found it
    * also looks for a return reason.


    DATA: l_febre TYPE febre,
    l_ref_string TYPE string,
    l_search_pattern TYPE string,
    l_offset TYPE i,
    l_raw_amount TYPE string,
    l_rc TYPE fieb_ret_charges.
    DATA: l_string TYPE string,
    l_kwbtr TYPE kwbtr_eb.


    *-
    IF NOT c_return_charges IS INITIAL.
    * you can decide if you want to change or delete this charges-entry
    * for example: if the standard has found a return reason but not
    * the charges amount
    * search it in the references and fill it then:
    IF c_return_charges-kwbtr IS INITIAL.
    * LOOP AT t_febre INTO l_febre.
    * CONCATENATE l_ref_string l_febre-vwezw INTO l_ref_string.
    * ENDLOOP.
    *
    ** look always like this: 'Bank Charges: 10,00':
    * l_search_pattern = 'ENTGELT FREMD'. "#EC NOTEXT
    * FIND l_search_pattern IN l_ref_string MATCH OFFSET l_offset.
    * IF sy-subrc = 0.
    * l_offset = l_offset + strlen( l_search_pattern ).
    * l_string = l_ref_string+l_offset.
    * SHIFT l_string LEFT DELETING LEADING ' '.
    * SPLIT l_string AT ' '
    * INTO l_raw_amount
    * l_string.
    * REPLACE ',' WITH '.' INTO l_raw_amount.
    * CALL FUNCTION 'CURRENCY_AMOUNT_IDOC_TO_SAP'
    * EXPORTING
    * currency = i_febko-waers
    * idoc_amount = l_raw_amount
    * IMPORTING
    * sap_amount = c_return_charges-kwbtr
    * EXCEPTIONS
    * OTHERS = 0.
    * ENDIF.
    **--
    * l_search_pattern = 'EIGEN'. "#EC NOTEXT
    * FIND l_search_pattern IN l_ref_string MATCH OFFSET l_offset.
    * IF sy-subrc = 0.
    * l_offset = l_offset + strlen( l_search_pattern ).
    * l_string = l_ref_string+l_offset.
    * SHIFT l_string LEFT DELETING LEADING ' '.
    * SPLIT l_string AT ' '
    * INTO l_raw_amount
    * l_string.
    * REPLACE ',' WITH '.' INTO l_raw_amount.
    * CALL FUNCTION 'CURRENCY_AMOUNT_IDOC_TO_SAP'
    * EXPORTING
    * currency = i_febko-waers
    * idoc_amount = l_raw_amount
    * IMPORTING
    * sap_amount = l_kwbtr
    * EXCEPTIONS
    * OTHERS = 0.
    * ADD l_kwbtr TO c_return_charges-kwbtr.
    * ENDIF.
    *
    c_return_charges-kwbtr = i_febep-spesk.
    ENDIF.
    ELSE.
    ** no charges and no return reason was found by the standard.
    ** you can now search for a return reason on your own e.g. in the
    ** references the return reason looks always like 'Return Reason: 815'
    ** and the Charges look always like: 'Bank Charges: 10,00':
    * LOOP AT t_febre INTO l_febre.
    * CONCATENATE l_ref_string l_febre-vwezw INTO l_ref_string.
    * ENDLOOP.
    **-
    * l_search_pattern = 'Return Reason:'. "#EC NOTEXT
    * FIND l_search_pattern IN l_ref_string MATCH OFFSET l_offset.
    * IF sy-subrc = 0.
    * l_offset = l_offset + 15.
    * l_rc-rrext = l_ref_string+l_offset(3).
    * ENDIF.
    **-
    * l_search_pattern = 'ENTGELT FREMD'. "#EC NOTEXT
    * FIND l_search_pattern IN l_ref_string MATCH OFFSET l_offset.
    * IF sy-subrc = 0.
    * l_offset = l_offset + strlen( l_search_pattern ).
    * l_string = l_ref_string+l_offset.
    * SHIFT l_string LEFT DELETING LEADING ' '.
    * SPLIT l_string AT ' '
    * INTO l_raw_amount
    * l_string.
    * REPLACE ',' WITH '.' INTO l_raw_amount.
    * CALL FUNCTION 'CURRENCY_AMOUNT_IDOC_TO_SAP'
    * EXPORTING
    * currency = i_febko-waers
    * idoc_amount = l_raw_amount
    * IMPORTING
    * sap_amount = l_rc-kwbtr
    * EXCEPTIONS
    * OTHERS = 0.
    * ENDIF.
    **--
    * l_search_pattern = 'EIGEN'. "#EC NOTEXT
    * FIND l_search_pattern IN l_ref_string MATCH OFFSET l_offset.
    * IF sy-subrc = 0.
    * l_offset = l_offset + strlen( l_search_pattern ).
    * l_string = l_ref_string+l_offset.
    * SHIFT l_string LEFT DELETING LEADING ' '.
    * SPLIT l_string AT ' '
    * INTO l_raw_amount
    * l_string.
    * REPLACE ',' WITH '.' INTO l_raw_amount.
    * CALL FUNCTION 'CURRENCY_AMOUNT_IDOC_TO_SAP'
    * EXPORTING
    * currency = i_febko-waers
    * idoc_amount = l_raw_amount
    * IMPORTING
    * sap_amount = l_kwbtr
    * EXCEPTIONS
    * OTHERS = 0.
    * ADD l_kwbtr TO l_rc-kwbtr.
    * ENDIF.


    c_return_charges-kwbtr = i_febep-spesk.


    * create a new charges-entry if you have found an amount:
    IF NOT l_rc-kwbtr IS INITIAL.
    c_return_charges-kukey = i_febko-kukey.
    c_return_charges-esnum = i_febep-esnum.
    c_return_charges-kwbtr = l_rc-kwbtr.
    *- i_febel-kkref sollte eigentlich im Beispiel 'AC01' enthalten !!!!!!
    IF l_rc-rrext IS INITIAL.
    c_return_charges-rrext = i_febep-kkref.
    ELSE.
    c_return_charges-rrext = l_rc-rrext.
    ENDIF.
    ENDIF.
    ENDIF.


    IF i_febep-epvoz EQ 'H'
    AND c_return_charges-kwbtr NE 0.
    MULTIPLY c_return_charges-kwbtr BY -1.
    ENDIF.


    BREAK-POINT.


    ENDMETHOD.

  • Hallo Herr Wild,


    eigentlich haben wir das Beispielcoding von SAP verwendet und daran ein wenig angepasst.


    Oben habe ich das Coding gepostet. Könnten Sie uns hierzu ein paar Tipps geben, an welcher Stelle wir noch weiter schreiben sollen.


    vielen... vielen herzlichen DANK

    • Offizieller Beitrag

    Hallo,


    hmm, könnten mehrere Stellen sein:

    • c_return_charges-kwbtr --> wird mehrmals überschrieben
    • MULTIPLY c_return_charges-kwbtr BY -1. --> Das könnte es sein
    • Ist in der Transformation ein "-"?
    • Die Buchung sollte über S/H-Kennzeichen bzw. Buchungsschlüssel abgebildet werden (Coding sollte
      somit überflüssig sein)


    Viele Grüße
    Claus Wild

  • Hallo Zusammen,
    auch die Bsp. Auslieferung der SAP führt zum Fehler, am besten das Vorzeichen einfach umkehren :-)


    replace ',' with '.' into l_raw_amount.
    call function 'CURRENCY_AMOUNT_IDOC_TO_SAP'
    EXPORTING
    currency = i_febko-waers
    idoc_amount = l_raw_amount
    IMPORTING
    sap_amount = c_return_charges-kwbtr
    EXCEPTIONS
    others = 0.
    endif.
    *
    if i_febep-epvoz = 'S'.
    c_return_charges-kwbtr = c_return_charges-kwbtr * -1.
    endif.
    *
    endif.
    else.


    Damit sollte es dann funktionieren.
    Gruß
    A.P.