ABAP Übung - ORDER

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
9 Beiträge • Seite 1 von 1
9 Beiträge Seite 1 von 1

ABAP Übung - ORDER

Beitrag von table4 (ForumUser / 3 / 4 / 0 ) »
Schreibe einen Report mit folgenden Eingabeparametern:
Parametereingabe Vorgangsart (mit F4 Hilfe)
Parametereingabe von zwei Datum (von / bis) mit F4 Hilfe
Es sollen alle Belege zu der eingegebenen Vorgangsart angezeigt werden, die im eingegebenen Zeitraum erstellt wurden. Nutze den Funktionsbaustein CRM_ORDER_READ um folgende Informationen in deinen Report zu laden: Kopfdaten des Beleges, aktueller Status und zugehörige Partner.
Gib folgende Informationen als Liste auf dem Bildschirm aus:
Vorgangsnummer, Vorgangsbeschreibung, Anlagedatum sowie alle mit dem Beleg verknüpften Partner.

Vielen Dank
Mit fruendlichen Grüßen


--> siehe anderes Kommentar
Zuletzt geändert von table4 am 23.04.2018 16:57, insgesamt 2-mal geändert.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: ABAP Übung - ORDER

Beitrag von DeathAndPain (Top Expert / 1944 / 257 / 413 ) »
Was erwartest Du jetzt, dass wir Dir Deine Hausaufgabe machen? Wir helfen Dir gern, aber Du musst schon auch selber Einsatz bringen. Fang mal an, so weit Du kommst, und dann stell konkrete Fragen an den Stellen, an denen Du nicht weiterkommst. Dann kann man Dir sinnvoll helfen. (Und poste den Code, den Du bis dahin fertig hast, und zwar bitte den ganzen, mit allen Felddeklarationen usw.)

Re: ABAP Übung - ORDER

Beitrag von table4 (ForumUser / 3 / 4 / 0 ) »
Du hast recht, ich sollte ein bisschen Input geben und meine Fragen spezifischer stellen.
Warscheinlich haltet ihr mich dann aber alle für blöd :D

Was ich bis jetzt hab :

Code: Alles auswählen.

REPORT zf4help.


PARAMETERS p_proc TYPE crmd_orderadm_h-process_type MATCHCODE OBJECT zsh_processtype.
SELECT-OPTIONS p_datum FOR sy-datum.

TYPES: BEGIN OF ty_orderadm,
  object_id TYPE crmd_orderadm_h-object_id,
  process_type TYPE crmd_orderadm_h-process_type,
  posting_date TYPE crmd_orderadm_h-posting_date,
  description TYPE crmd_orderadm_h-description,
  END OF ty_orderadm.


DATA lt_orderadm TYPE TABLE OF ty_orderadm.
DATA ls_orderadm LIKE LINE OF lt_orderadm.


SELECT * FROM crmd_orderadm_h INTO CORRESPONDING FIELDS OF TABLE lt_orderadm
  WHERE Process_type EQ p_proc AND posting_date eq p_datum.

LOOP AT lt_orderadm INTO ls_orderadm.
  WRITE: ls_orderadm-object_id,
        ls_orderadm-process_type,
        ls_orderadm-posting_date,
        ls_orderadm-description.
ENDLOOP.


CALL FUNCTION 'CRM_ORDER_READ'
*    EXPORTING
*   it_header_guid                    =
*      IT_ITEM_GUID                      =
*      IV_MODE                           =
*      IV_ONLY_SPEC_ITEMS                =
*      IT_REQUESTED_OBJECTS              =
*      IV_NO_AUTH_CHECK                  =
*      IT_ITEM_USAGE_RANGE               =
*      IV_SUBITEM_DEPTH                  = -1
*      IT_OBJECT_FILTER                  =
*      IV_ONLY_CHANGED_OBJ               = FALSE
*      IV_STATUS_H_CHECK_RELEVANCE       = FALSE
*      IV_TEXT_LOG_SINGLE                = FALSE
*    IMPORTING
*      ET_ORDERADM_H                     =
*      ET_OPPORT_H                       =
*      ET_LEAD_H                         =
*      ET_ACTIVITY_H                     =
*      ET_LAWREF_H                       =
*      ET_ORDERADM_I                     =
*      ET_OPPORT_I                       =
*      ET_ACTIVITY_I                     =
*      ET_PRODUCT_I                      =
*      ET_FINPROD_I                      =
*      ET_BATCH                          =
*      ET_CONFIG                         =
*      ET_STRUCT_I                       =
*      ET_SALES                          =
*      ET_PRICING                        =
*      ET_PRICING_I                      =
*      ET_ORGMAN                         =
*      ET_SHIPPING                       =
*      ET_CUSTOMER_H                     =
*      ET_CUSTOMER_I                     =
*      ET_SERVICE_H                      =
*      ET_SERVICE_I                      =
*      ET_SERVICE_ASSIGN                 =
*      ET_QUALIF                         =
*      ET_PAYPLAN                        =
*      ET_PAYPLAN_D                      =
*      ET_APPOINTMENT                    =
*      ET_TEXT                           =
*      ET_SCHEDLIN                       =
*      ET_PARTNER                        =
*      ET_SERVICE_OS                     =
*      ET_REFOBJ                         =
*      ET_SUBJECT                        =
*      ET_CUMULAT_H                      =
*      ET_STATUS                         =
*      ET_STATUS_H                       =
*      ET_SCHEDLIN_I                     =
*      ET_CANCEL                         =
*      ET_CANCEL_IR                      =
*      ET_CANCEL_CR                      =
*      ET_BILLPLAN                       =
*      ET_BILLING                        =
*      ET_ORDPRP_I                       =
*      ET_ORDPRP_I_D                     =
*      ET_ORDPRP_OBJL_I_D                =
*      ET_CUMULATED_I                    =
*      ET_DOC_FLOW                       =
*      ET_EXCEPTION                      =
*      ET_PRIDOC                         =
*      ET_PRICE_AGREEMENTS_CRM           =
*      ET_PRICE_AGREEMENTS_BBP           =
*      ET_CONFIG_FILTER                  =
*      ET_SERVICEPLAN_I                  =
*      ET_SERVICEPLAN_IE                 =
*      ET_EXTENSION                      =
*      ET_CREDITVALUES                   =
*      ET_SURVEY                         =
*      ET_AC_ASSIGN                      =
*      ET_APO_I                          =
*      ET_EXT_REF                        =
*      ET_UBB_CTR_I                      =
*      ET_UBB_CR_I                       =
*      ET_UBB_VOL_I                      =
*      ET_CHNGPROC_H                     =
*      ET_CHNGPROC_I                     =
*      ET_DOC_FLOW_PNT                   =
*      ET_FUND_H                         =
*      ET_CLA_H                          =
*      ET_SRV_REQ_H                      =
*      ET_APPROVAL                       =
*      ET_EXTENSION2                     =
*      ET_CLA_I                          =
*    CHANGING
*      CV_LOG_HANDLE                     =
*    EXCEPTIONS
*      DOCUMENT_NOT_FOUND                = 1
*      ERROR_OCCURRED                    = 2
*      DOCUMENT_LOCKED                   = 3
*      NO_CHANGE_AUTHORITY               = 4
*      NO_DISPLAY_AUTHORITY              = 5
*      NO_CHANGE_ALLOWED                 = 6
*      OTHERS                            = 7

*ENDIF.
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

Hab mir ty_orderadm erstellt mit den Informationen die ich letztendlich aus crmd_orderadm_h auslesen möchte.
zsh_processtype ist eine eigen erstellte search help in der nur PROCESS_TYPE und DESCRIPTION aus crmd_orderadm_h drin ist (description nur zum anzeigen)

Im Moment wird mir garnichts angezeigt, dass liegt aber glaub ich an meiner search help. Bei Ausführung und Tippen auf die Search help kommen bei mir viele viele Mehrfachvorkommende Werte [0005 - (mit Description) Email ] z.b 10x hintereinander usw. -> Bei auswahl und dann execute passiert nichts und mir wird auch nichts angezeigt.

Außerdem habe Ich leider keine Ahnung wie ich den Funktionsbaustein benutzen soll um "Kopfdaten des Beleges, aktueller Status und zugehörige Partner." in meinen Report zu laden, und wenn wo speicher ich die 3 Sachen ab (neue lokale tabelle? )
Ich bin verwirrt :?

Re: ABAP Übung - ORDER

Beitrag von Legxis (Specialist / 160 / 90 / 28 ) »
table4 hat geschrieben:zsh_processtype ist eine eigen erstellte search help in der nur PROCESS_TYPE und DESCRIPTION aus crmd_orderadm_h drin ist
[...]
Bei Ausführung und Tippen auf die Search help kommen bei mir viele viele Mehrfachvorkommende Werte [0005 - (mit Description) Email ] z.b 10x hintereinander
Das liegt daran, dass DESCRIPTION nichts mit den Vorgangsarten zu tun hat, die haben ihre eigene Tabelle, in der die Beschreibung drinsteht. Bei uns heißt die Tabelle CRMC_PR_TYP_CO_T. Wenn sie bei euch anders heißt, dann geh in SE11, gib "CRMC*" ein und geh in die F4 Hilfe und schau, was ihr da habt. Die Beschreibung müsste so ähnlich wie "Vorgangsarten: Texte" sein. Da kannst du dann mit deinen p_proc suchen und die Beschreibungen finden.
table4 hat geschrieben:Im Moment wird mir garnichts angezeigt
Du LOOPst über deine Tabelle und willst die Daten mit WRITE ausgeben, das tust du aber, bevor du den FuBa benutzt, der dir die Daten gibt. Benutz mal den Debugger, dann wird es klarer. Und hast du überhaupt Daten in deinem System in der Tabelle? Schau mal in der SE11 ob da überhaupt was drin ist, bei uns z.B. nicht.
Wie du den FuBa benutzen musst kann ich dir nicht sagen, wir haben ihn bei uns nicht. Du kannst aber mal googlen, es gibt Beispiele. Du wirst auf jeden Fall auch den GUID einlesen müssen.

Noch ein paar Tips:

Sortier deinen Code, alle Deklarationen gehören nach oben, dein Selection-Screen ist zurzeit mitten in den Deklarationen.

Code: Alles auswählen.

DATA lt_orderadm TYPE TABLE OF ty_orderadm.
DATA ls_orderadm LIKE LINE OF lt_orderadm.
--->

Code: Alles auswählen.

DATA: lt_orderadm TYPE STANDARD TABLE OF ty_orderadm,     " such dir eine passende Tabellenart aus, z.B. Standard, Sorted (mit Key) oder Hashed
      ls_orderadm TYPE lt_orderadm.                       " LIKE ist obsolet, besser Type benutzen

Folgende Benutzer bedankten sich beim Autor Legxis für den Beitrag:
table4

( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )

Re: ABAP Übung - ORDER

Beitrag von black_adept (Top Expert / 4090 / 127 / 940 ) »
Legxis hat geschrieben: LIKE ist obsolet, besser Type benutzen
LIKE ist obsolet wenn man sich auf DDIC-Objekte bezieht, weil dort keine Daten sondern Typen beschrieben werden. In dem genannten Beispiel ist das absolut korrekt - und die Defintion mittels LIKE LINE OF halte ich in diesem Fall für viel besser als irgend eine TYPE-Deklaration

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 2):
table4ralf.wenzel

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: ABAP Übung - ORDER

Beitrag von DeathAndPain (Top Expert / 1944 / 257 / 413 ) »
Also zunächst musst Du Dich darüber informieren, wie man diesen Funktionsbaustein richtig aufruft. Dafür reicht es, seinen Namen einmal bei Google einzugeben, und sofern Du englisch kannst (ohne das Du in einem IT-Beruf sowieso einpacken kannst), findest Du sofort eine nette Beschreibung:

https://blogs.sap.com/2013/02/07/crmord ... ndor-abap/

Soweit ich das lese, musst Du zunächst die GUIDs ermitteln, für die Du die Daten lesen willst. Die SELECTierst Du Dir aus der Tabelle. Mehr brauchst Du aus der Tabelle nicht (allenfalls noch das Anlagedatum). SELECT * ist dabei schlechter Stil, da Du damit sämtliche Felder aus der Datenbank liest, obgleich Du nur zwei brauchst (--> Performance). Zähle besser die benötigten Felder explizit auf.

Dann füllst Du Dir mit den ganzen GUIDs eine Tabelle lt_header_guids wie in o.g. Link beschrieben. Dann füllst Du auch die Tabelle lt_request_objs mit all den Feldern, die Du brauchst. Da fallen mir angesichts Deiner Aufgabenstellung insbesondere die texts und die partner ein. Damit rufst Du den Baustein auf und bekommst die Ergebnistabellen et_text sowie et_partner. Die LOOPst Du dann durch und überträgst zu jeder GUID ihren Inhalt in Deine Ausgabetabelle. An der Stelle stellt sich die Frage, was in der Aufgabe mit "als Liste ausgeben" gemeint ist. Wollen die ein ALV sehen, oder langt ihnen eine mit WRITE ausgegebene Liste?

Versuch das mal so weit umzusetzen, und dann reden wir über weitere Fragen, die Du vielleicht noch hast.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
table4


Re: ABAP Übung - ORDER

Beitrag von table4 (ForumUser / 3 / 4 / 0 ) »
Stark danke Leute, bin jetzt soweit durch, es werden zwar noch doppel/dreifach/vielfach Einträge angezeigt aber das ist denke ich nur ein kleines Problem.
:up: 8)
Hier mal der Code :

Code: Alles auswählen.

REPORT zf4help.

**LIKE -> Referenzierung auf DATENOBJEKTE // TYPE auf DATENTYPEN
PARAMETERS: p_proc TYPE crmt_process_type_db MATCHCODE OBJECT crm_process_type,
p_from LIKE crmd_orderadm_h-posting_date,
p_to LIKE crmd_orderadm_h-posting_date.


DATA : lt_header_guids TYPE crmt_object_guid_tab,
       lt_orderadm_h TYPE crmt_orderadm_h_wrkt,
       lt_status TYPE crmt_status_wrkt,
       lt_partner TYPE crmt_partner_external_wrkt,
       ls_header_guids TYPE crmt_object_guid,
*       ls_header_guids LIKE LINE OF lt_header_guids,
       ls_status LIKE LINE OF lt_status,
       ls_partner LIKE LINE OF lt_partner,
       ls_orderadm_h LIKE LINE OF lt_orderadm_h.



SELECT guid
  FROM crmd_orderadm_h INTO TABLE lt_header_guids
  WHERE process_type = p_proc
  AND posting_date BETWEEN p_from AND p_to.

CALL FUNCTION 'CRM_ORDER_READ'
  EXPORTING
    it_header_guid       = lt_header_guids
  IMPORTING
    et_orderadm_h        = lt_orderadm_h
    et_partner           = lt_partner
    et_status            = lt_status
*   ET_STATUS_H          = lt_
  EXCEPTIONS
    document_not_found   = 1
    error_occurred       = 2
    document_locked      = 3
    no_change_authority  = 4
    no_display_authority = 5
    no_change_allowed    = 6
    OTHERS               = 7.

LOOP at lt_header_guids INTO ls_header_guids.
  LOOP AT lt_orderadm_h INTO ls_orderadm_h WHERE guid = ls_header_guids.
    LOOP AT lt_partner INTO ls_partner WHERE ref_guid = ls_orderadm_h-guid.
      WRITE:/ ls_orderadm_h-object_id, ls_orderadm_h-description, ls_orderadm_h-created_at,
          ls_partner-relation_partner.
    ENDLOOP.
  ENDLOOP.
ENDLOOP.

Re: ABAP Übung - ORDER

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
black_adept hat geschrieben:
Legxis hat geschrieben: LIKE ist obsolet, besser Type benutzen
LIKE ist obsolet wenn man sich auf DDIC-Objekte bezieht, weil dort keine Daten sondern Typen beschrieben werden. In dem genannten Beispiel ist das absolut korrekt - und die Defintion mittels LIKE LINE OF halte ich in diesem Fall für viel besser als irgend eine TYPE-Deklaration
So halte ich es auch, gerade bei LIKE LINE OF, weil man direkt die Verwendung klärt. Ein FS, das man so deklariert, hat direkten Bezug zur Tabelle, die man damit "liest". Sollte sich die Tabelle ändern, ändert man auch nur eine Deklaration und nicht zwei. Das ist die Ausnahme.

Grundsätzlich aber deklariere ich nicht mit LIKE, sondern mit TYPE, sozusagen die sehr abstrakte Form "Pointer zeigen nicht auf Pointer" auf Deklarationen bezogen: Deklariere direkt, nicht über "Brücken".


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: ABAP Übung - ORDER

Beitrag von DeathAndPain (Top Expert / 1944 / 257 / 413 ) »
es werden zwar noch doppel/dreifach/vielfach Einträge angezeigt aber das ist denke ich nur ein kleines Problem.
Du darfst am Ende die LOOPs über die Tabellen lt_orderadm_h und lt_partner nicht ineinander verschachteln, sonst ist klar, dass Du überflüssige EInträge bekommst. Definiere Dir eine zusätzliche Ausgabetabelle mit genau den Feldern, die Du brauchst. Mache erst den LOOP über lt_orderadm_h und übertrage die benötigten Werte in Deine Ausgabetabelle. Mache danach (also hinter ENDLOOP) den LOOP über lt_partner, suche Dir aus Deiner Ausgabetabelle jeweils den Satz mit der entsprechenden GUID heraus und ergänze ihn um die fehlenden Daten.

Am Ende kannst Du dann einen LOOP über Deine Ausgabetabelle machen, und da kommt dann erst der WRITE.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
table4


Seite 1 von 1

Vergleichbare Themen

1
Antw.
1340
Views
CFD - Domestic payment Order
von amjahid » 03.04.2008 10:11 • Verfasst in ABAP® für Anfänger
0
Antw.
1664
Views
CFD - Domestic payment Order
von amjahid » 08.04.2008 11:16 • Verfasst in Financials
1
Antw.
1981
Views
Notification - Sales Order
von Salzi » 04.06.2008 18:49 • Verfasst in Sales and Distribution
2
Antw.
4064
Views
POWL KYKOP-OPS-PP-PLANNED-ORDER
von 82kolu1bma » 19.12.2016 11:15 • Verfasst in Web-Dynpro, BSP + BHTML
13
Antw.
13339
Views

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 18 Stunden von black_adept gelöst 23 / 3837
User Exit EXIT_RQCPRM10_001
vor 18 Stunden von a-dead-trousers 2 / 327
Trennen Strasse und Hausnummer
Gestern von payten 13 / 10697
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1380

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 18 Stunden von black_adept gelöst 23 / 3837
User Exit EXIT_RQCPRM10_001
vor 18 Stunden von a-dead-trousers 2 / 327
Trennen Strasse und Hausnummer
Gestern von payten 13 / 10697
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1380

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2911
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9505