Konditionen ändern

Konditionen können mit dem BAPI_SALESORDER_CHANGE geändert werden. Die Möglichkeiten sind jedoch sehr beschränkt. Bei jeder Änderung wird eine neue Kondition eingefügt und die vorhandene auf “inaktiv” gesetzt. Änderungen von Zu- und Abschlägen sind überhaupt nicht möglich. Mit dem folgenden Coding können die Konditionen angepasst werden.

Das Programm verwendet Standardfunktionsbausteine, die aber normalerweise nur intern genutzt werden.

Sollten Sie das folgende Coding also verwenden wollen, sollten Sie auf jeden Fall ausgiebig testen!

Denken Sie daran, dass es inaktive Konditionen geben kann oder eine Kondition als prozentualer Auf- oder Abschlag definiert als auch wertmäßig eingestellt sein kann…!

Das hier vorgestellte Coding ändert den Wert einer Kopfkondition. Diese wird auch ordnungsgemäß auf die Positionen heruntergebrochen.

*** DATA
DATA gs_xkomv               TYPE komv.
DATA gt_xkomv               TYPE STANDARD TABLE OF komv.
DATA gs_komk                TYPE komk.
DATA gs_komp                TYPE komp.

*** FIELD SYMBOLS
FIELD-SYMBOLS <komv>        TYPE komv.
FIELD-SYMBOLS <dataloss>    TYPE c.
FIELD-SYMBOLS <konvchanged> TYPE c.

*** SELECTION SCREEN
PARAMETERS p_vbeln TYPE vbeln DEFAULT ‘12345’.

START-OF-SELECTION.

*** READ DOCUMENT
  CALL FUNCTION ‘SD_SALES_DOCUMENT_READ’
    EXPORTING
      document_number = p_vbeln.

*** GET PRICING INFORMATION
  CALL FUNCTION ‘SD_SALES_PRICING_INFORMATION’
    IMPORTING
      e_komk = gs_komk
      e_komp = gs_komp
    TABLES
      ftkomv = gt_xkomv.

*** CHANGE ONE HEADER CONDITION
  READ TABLE gt_xkomv ASSIGNING <komv>
        WITH KEY kschl = ‘ZZZZ’
                 kposn = 0.
  IF sy-subrc = 0.
*** CHANGE CONDITIONS VALUE
    SUBTRACT 3 FROM <komv>-kbetr.
*** CHECK IF CHANGES ARE OK:
    CALL FUNCTION ‘PRICING_CHECK’
      EXPORTING
        comm_head_i = gs_komk
        comm_item_i = gs_komp
        komv_i      = <komv>
        preliminary = ‘X’
      EXCEPTIONS
        condition   = 1
        OTHERS      = 2.
    IF sy-subrc > 0.
      “Do something to stop updating the wrong condition
    ENDIF.
  ENDIF.

*** ASSIGN DATA-LOSS-FLAG TO FORCE SAVING
  ASSIGN (‘(SAPMV45A)R185D-DATALOSS’) TO <dataloss>.
  <dataloss> = ‘X’.

*** ASSIGN CONDITIONS-CHANGED-FLAG TO FORCE SAVING CONDITIONS
  ASSIGN (‘(SAPMV45A)KONV_GEAENDERT’) TO <konvchanged>.
  <konvchanged> = ‘X’.

*** DO NOT UPDATE IF THERE ARE NO CONDITIONS
  CHECK gt_xkomv IS NOT INITIAL.

*** SET NEW PRICING
  CALL FUNCTION ‘SD_SALES_PRICING_PUT’
    TABLES
      fxkomv = gt_xkomv.

*** SAVE DOCUMENT
  CALL FUNCTION ‘SD_SALES_DOCUMENT_SAVE’
    EXPORTING
      synchron = ‘X’. 

Enno Wulff