SAP Jobsuche bei DV-Treff
Moritz
  • Moritz
  • SAP Forum - User Thema Starter
vor 9 Jahre
Hallo Community,

ich bin ein ABAP-Greenhorn und komme bei diesem Thema einfach nicht weiter.

Ich habe ein Material X (=Objekt), eine Klassenart 001, die Klasse part_class und dazu 4 untereinander stehende Merkmalsbezeichnungen mit jeweiligen Werten.

Ziel:

Es sollen 2 Merkmalsbezeichnungen in jeweils 2 Spalten eines ALVs ausgegeben werden und kein FUBA/BAPI verwendet werden.

Einen Merkmalswert kann ich auslesen (Produktbereich), aber wie lese ich das zweite Merkmal hinzu? (die zweite Spalte im ALV ist angelegt, mir fehlt noch die Idee, wie ich den zweiten Merkmalwert da hinein bekomme)

Bsp.: 1. Merkmalsbezeichnung: Produktbereich /Wert: Presse

2. Merkmalsbezeichnung: Warenbereich / Wert: 1234

Ausschnitt Bisheriger Code:

FORM get_ausp TABLES lt_ausp STRUCTURE gs_ausp

lt_mara STRUCTURE gs_mara.

DATA lt_objek TYPE TABLE OF gty_ausp.

DATA ls_objek TYPE gty_ausp.

DATA ls_mara TYPE gty_mara.

DATA lt_cabn TYPE TABLE OF gty_cabn.

DATA ls_cabn TYPE gty_cabn.

DATA ls_ausp TYPE gty_ausp.

CLEAR lt_ausp[].

CLEAR lt_objek[].

CLEAR ls_cabn.

" Auslesen des Merkmals Produktbereich

SELECT SINGLE *

FROM cabn

INTO CORRESPONDING FIELDS OF ls_cabn

WHERE atnam = 'PRODUKTBEREICH'.

CLEAR ls_mara.

LOOP AT lt_mara INTO ls_mara.

ls_objek-objek = ls_mara-matnr.

APPEND ls_objek TO lt_objek.

ENDLOOP.

SELECT *

FROM ausp

INTO CORRESPONDING FIELDS OF TABLE lt_ausp

FOR ALL ENTRIES IN lt_objek " Einlesen in interne Zwischentabelle

WHERE objek = lt_objek-objek

AND atinn = ls_cabn-atinn

AND atzhl = '1'

AND mafid = 'O'

AND klart = '001'.


Was bereits funktioniert:

FORM get_prodbereich TABLES lt_prodbereich STRUCTURE gs_prodbereich

lt_ausp STRUCTURE gs_ausp

lt_cawnt STRUCTURE gs_cawnt

lt_cawn STRUCTURE gs_cawn.

DATA ls_ausp TYPE gty_ausp.

DATA ls_cawnt TYPE gty_cawnt.

DATA ls_cawn TYPE gty_cawn.

DATA ls_prodbereich TYPE gty_prodbereich.

" Auslesen der Materialnummer aus der AUSP

LOOP AT lt_ausp INTO ls_ausp.

CLEAR ls_cawn.

READ TABLE lt_cawn INTO ls_cawn

WITH KEY atwrt = ls_ausp-atwrt.

CLEAR ls_cawnt.

READ TABLE lt_cawnt INTO ls_cawnt

WITH KEY atinn = ls_ausp-atinn

atzhl = ls_cawn-atzhl.

ls_prodbereich-matnr = ls_ausp-objek(18).

ls_prodbereich-atwtb = ls_cawnt-atwtb.

APPEND ls_prodbereich TO lt_prodbereich.

ENDLOOP.

ENDFORM. "get_prodbereich

Was muss ich nun tun, um das zweite Merkmal "Warenbereich" auszulesen? Ein zweiter SELECT SINGLE...???

Ich hoffe, ihr könnt mit diesen Schnipseln etwas anfangen.

Danke schonmal!

M&Mler
vor 9 Jahre
Hi

ihr der Baustein um (Lieferanten) Klassifizierung auszulesen. Viel einfacher als alles per SELECT selbst zu ziehen.

Ist teilweise "etwas" verbastelt, musst nur die ZMM_EORD Struktur rauswerfen und anpassen.

Grüße,

M&mler

"Klassifizierung auslesen und in CALV Container ausgeben

DATA: gref_salv TYPE REF TO cl_salv_table.

DATA: lt_class010_out TYPE TABLE OF zmm_eord_class.

DATA: lt_class010 TYPE TABLE OF clobjdat.

DATA: ls_class010 TYPE clobjdat.

DATA: ls_class010_out TYPE zmm_eord_class.

DATA: go_container_class TYPE REF TO cl_gui_custom_container.

DATA: lf_obj TYPE objnum.

DATA: lt_tclass TYPE TABLE OF sclass.

lf_obj = gs_alv-lifnr.

CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'

EXPORTING

class = ' '

classtext = 'X'

classtype = '010'

clint = 0

features = 'X'

language = sy-langu

object = lf_obj

objecttable = ' '

key_date = sy-datum

initial_charact = 'X'

no_value_descript = ' '

change_service_clf = 'X'

inherited_char = ' '

change_number = ' '

TABLES

t_class = lt_tclass

t_objectdata = lt_class010

* I_SEL_CHARACTERISTIC =

* T_NO_AUTH_CHARACT =

EXCEPTIONS

no_classification = 1

no_classtypes = 2

invalid_class_type = 3

OTHERS = 4.

IF sy-subrc <> 0.

ls_class010-smbez = 'FEHLER:'.

CASE sy-subrc.

WHEN 1.

ls_class010-ausp1 = 'Keine Klassifizierung gepfl.'.

WHEN 2.

ls_class010-ausp1 = 'Kein Class-Type gefunden'.

WHEN 3.

ls_class010-ausp1 = 'Falscher Class-Type.'.

WHEN OTHERS.

ls_class010-ausp1 = 'Sonstiger Fehler?!'.

ENDCASE.

APPEND ls_class010 TO lt_class010.

ENDIF.

"itab aus FuBa in Ausgabe itab schieben

LOOP AT lt_class010 INTO ls_class010.

ls_class010_out-smbez = ls_class010-smbez.

ls_class010_out-ausp1 = ls_class010-ausp1.

APPEND ls_class010_out TO lt_class010_out.

ENDLOOP.

IF NOT go_container_class IS BOUND.

CREATE OBJECT go_container_class

EXPORTING

container_name = 'CCLASS'

EXCEPTIONS

cntl_error = 1

cntl_system_error = 2

create_error = 3

lifetime_error = 4

lifetime_dynpro_dynpro_link = 5

OTHERS = 6.

ENDIF.

TRY.

CALL METHOD cl_salv_table=>factory

EXPORTING

r_container = go_container_class

container_name = 'CCLASS'

IMPORTING

r_salv_table = gref_salv

CHANGING

t_table = lt_class010_out.

CATCH cx_salv_msg .

ENDTRY.

"gref_salv->SET_SCREEN_POPUP( START_COLUMN = 5 START_line = 5 END_COLUMN = 20 END_LINE = 20 ).

gref_salv->display( ).

Moritz
  • Moritz
  • SAP Forum - User Thema Starter
vor 9 Jahre
Hallo M&mler,

besten Dank! Ich versuche es mal damit.

Ich hatte zunächst den Baustein 'BAPI_OBJCL_GETDETAIL', aber darunter hat die Performance gelitten --> daher der Aufbau mit den SELECTs.