Teilen

Um die Bewertung zu einem Objekt zu lesen, gibt es mehrere Funktionsbausteine... Hier sehen Sie aber auch, wie die Merkmalsbewertungen über die Tabellen gezielt gelesen werden können.

Verwenden Sie einen der folgenden Bausteine zum Lesen der Klassifizierungsdaten:

  • BAPI_OBJCL_GETDETAIL
  • BAPI_OBJCL_GETCLASSES
  • CACL_OBJECT_READ_VALIDATION

BAPI_OBJCL_GETDETAIL

Beispielaufruf für das Material MAT1234, Charge CH12345. Die Klasse heisst ZM_ZUSATZ.

OBJECTKEY                       MAT1234           CH12345 
OBJECTTABLE                     MCH1 
CLASSNUM                        ZM_ZUSATZ 
CLASSTYPE                       023 
KEYDATE                         08.12.2003 
UNVALUATED_CHARS 
LANGUAGE                        DE

In den Tabellen ALLOCVALUESNUM erhalten Sie die numerischen Werte zurück; in der Tabelle ALLOCVALUESCHAR die Zeichenartigen Merkmale und in der Tabelle ALLOCVALUESCURR die Währungsmerkmale.

Informationen stehen in der Tabelle RETURN.

Wenn Sie nicht sicher sind, welche Klassennummer verwendet wurde -- z.B. weil dem Material verschiedene Klassen zugeordnet werden können --, dann verwenden Sie bitte den Baustein BAPI_OBJCL_GETCLASSES!

Zusammengesetzter Objektschlüssel

Bei Klassifizierungen für Tabellen mit mehreren Schlüsselfeldern muss der Objektschlüssel aus diesen zusammengesetzt werden. Eine einfache Methode bietet der Baustein BAPI_OBJCL_CONCATENATEKEY. Im Falle des oben genannten Beispiels müssen dem Baustein die Namen und Werte der Schlüsselfelder in einer Tabelle übergeben werden (Wie bei CACL_OBJECT_VALIDATION_READ). Übergeben wird dann der korrekt zusammengesetzte Schlüssel.

Vorhandene Bewertungen ermitteln

Falls ein Material, eine Charge etc. mehreren Klassen zugeordnet werden kann, so muss zuvor geprüft werden, zu welcher Klasse überhaupt Bewertungen vorhanden sind.

Diese Arbeit übernimmt der Baustein BAPI_OBJCL_GETCLASSES. Er ist genau so "zu füttern", wie BAPI_OBJCL_GETDETAIL.

Bei Bedarf (Parameter READ_VALUATIONS) werden auch gleich die zugehörigen Bewertungen gelesen.

CACL_OBJECT_READ_VALIDATION

Beispiel zum Lesen einer Klassifizierung zum Kunden:

OBJECT_TYPE               KNA1          
CLASS_TYPE                011 
CLASS                     Z_DEB_CLASS          
WITH_UNASSIGNED_CHARACTS  
WITH_INHERITED_CHARACTS   
DATE                                
LANGUAGE                  DE

Die Tabelle OBJECT_IDENTIFICATION muss mit dem oder den Feldnamen gefüllt werden und dem entsprechenden Wert des Objekts:

FIELD                     VALUE                     
KUNNR                     784653
CLAF_CLASSIFICATION_OF_OBJECTS
CLASS                     Z_DEB_CLASS
CLASSTEXT                 X
CLASSTYPE                 011
FEATURES                  X
LANGUAGE                  DE
OBJECT                    0000012345  "Kundennummer
OBJECTTABLE               KNA1
KEY_DATE                  11.04.2014
INITIAL_CHARACT           X
NO_VALUE_DESCRIPT   
CHANGE_SERVICE_CLF        X

Bewertung über Tabellen lesen

Das folgende Programm liest gezielt einzelne Merkmalsbewertungen zu einem Objekt -- in diesem Fall eine Charge.

REPORT z_merkmale_lesen.
DATA:
  l_atwrt TYPE atwrt,
  l_atflv TYPE atflv,
  l_anzst TYPE anzst,
  l_anzdz TYPE anzdz,
  l_wert(30),
  l_objek TYPE cuobn,
  l_atfor TYPE atfor,   "Format
  l_klart TYPE klassenart VALUE '023',
  l_obtab TYPE tabelle    VALUE 'MCH1'.

PARAMETERS: p_matnr TYPE matnr DEFAULT 'MAT123',
            p_charg TYPE charg_d.

START-OF-SELECTION.
  PERFORM lies_merkmal USING 'ZM_LAENGE'. "Länge
  PERFORM lies_merkmal USING 'ZM_ANZAHL'. "Anzahl je Einheit

*---------------------------------------------------------------------*
*       FORM lies_merkmal                                             *
*---------------------------------------------------------------------*
FORM lies_merkmal USING value(f_merkmal).
*-- Objektnummer aus Materialnummer und Charge bauen
  l_objek        = p_matnr.
  l_objek+18(10) = p_charg.
  WRITE: / f_merkmal COLOR COL_POSITIVE.
  POSITION 20.

  CLEAR: l_atwrt, l_atflv, l_atfor, l_anzst, l_anzdz.

*-- Merkmalswert über Inner Join ermitteln
  SELECT SINGLE ausp~atwrt
                ausp~atflv
                cabn~atfor
                cabn~anzdz
    FROM ausp
   INNER JOIN inob ON inob~cuobj = ausp~objek
   INNER JOIN cabn ON ausp~atinn = cabn~atinn
    INTO (l_atwrt, l_atflv, l_atfor, l_anzdz)
   WHERE inob~klart = l_klart
     AND inob~obtab = l_obtab
     AND inob~objek = l_objek
     AND cabn~atnam = f_merkmal.
  IF sy-subrc > 0.
    WRITE: 'nicht bewertet.'.
  ELSE.

*-- Je nach Merkmalsformat unterschiedliche Zuweisung
    CASE l_atfor.
      WHEN 'CHAR'.
*-- Zeichenformat
        WRITE: l_atwrt.  
      WHEN 'NUM' OR 'DATE' OR 'TIME'.
*-- Numerisches Format
        WRITE l_atflv TO l_wert EXPONENT 0 NO-GROUPING NO-ZERO
                                         LEFT-JUSTIFIED DECIMALS l_anzdz.
        WRITE: l_wert.
    ENDCASE.
  ENDIF.

ENDFORM.
image_pdfimage_print