Materialsubstitution

Die Materialfindung oder Materialsubstitution kann per Customizing anhand Konditionstabellen eingestellt und konfiguriert werden. Das Ermitteln der zu ersetzenden Materialien kann entweder statisch programmiert werden. Das einzig Richtige ist aber natürlich ein Baustein mit dynamischen Zugriff.

Vorwort

Das Ersetzungsschema kann individuell eingestellt werden. Zu einer Auftragsart kann dann ein entsprechendes Schema zugeordnet werden.

Die Materialsubstitution kann in mehreren Stufen erfolgen (Zugriffsfolge). Die einzelnen Materialersetzungen werden mit Transaktion VB12 gepflegt.

Strukturen

Folgende Strukturen und Felder benötigen wir:

  DATA lv_kalsu  TYPE kalsu.
  DATA lt_konddp TYPE STANDARD TABLE OF konddp.
  DATA ls_konddp TYPE konddp.
  DATA ls_komkd  TYPE komkd.
  DATA ls_kompd  TYPE kompd.

Vorbereitungen

Zuerst benötigen wir das zur Auftragsart zugeordnete Schema. Da wir für die Kommunikationsstruktur auch den Vertriebsbelegtyp benötigen, lesen wir den gleich mit:

  DATA lv_kalsu  TYPE kalsu.
*** calc scheme and document type
  SELECT SINGLE kalsu vbtyp
    FROM tvak
    INTO (lv_kalsu, ls_komkd-vbtyp)
   WHERE auart = lv_auart.

Dann müssen noch die Kommunikationsstrukturen gefüllt werden:

  MOVE-CORRESPONDING my_struc TO ls_komkd.
  MOVE-CORRESPONDING my_struc TO ls_kompd.
  ls_kompd-matnr = my_matnr.
  ls_kompd-matwa = my_matnr.

Materialersetzung

Nun können wir den SAP-Standardbaustein aufrufen und die Findung durchführen lassen:

*** substitution
  CALL FUNCTION ‚PRODUCT_SUBSTITUTION‘
    EXPORTING
      application          = ‚V‘
      date                 = sy-datum
      dialog               = ‚X‘
      header_communication = ls_komkd
      item_communication   = ls_kompd
      scheme               = lv_kalsu
    TABLES
      konddp_data          = lt_konddp.

  IF lt_konddp IS NOT INITIAL.
*** Replace material
    READ TABLE lt_konddp INTO ls_konddp INDEX 1.
    IF sy-subrc = 0.
      lv_replaced_matnr = ls_konddp-smatn.
    ENDIF.
  ENDIF.

In lv_Replaced_Matnr steht dann die umgesetzte Materialnummer.

image_pdfimage_print