Advertising:

Create and cancel operation for goods receipt purchase order with Behavior Definition/Implementation R MATERIALDOCUMENTTP: Difference between revisions

From SAP Knowledge Base
(Created page with "=== Create goods receipt for purchase order === <syntaxhighlight line copy> DATA material_doc_header TYPE TABLE FOR CREATE r_materialdocumenttp\\materialdocumentheader. DATA material_doc_items TYPE TABLE FOR CREATE r_materialdocumenttp\\materialdocumentheader\_materialdocumentitem. DATA material_doc_serials TYPE TABLE FOR CREATE r_materialdocumenttp\\MaterialDocumentItem\_SerialNumber. CONSTANTS cid_mat_doc_hdr TYPE abp_behv_cid VALUE 'CID_MAT_DOC_HDR'....")
 
No edit summary
 
Line 1: Line 1:
[[Category:Behavior_Definitions_and_Implementations]]
After reading this wiki entry, you should able to do operations Create and Cancel for purchase order goods receipt.<br />
<br />This is done by Entity Manipulation Language (EML)
* https://learning.sap.com/learning-journeys/acquire-core-abap-skills/using-the-entity-manipulation-language_b378f225-0471-45bf-8b7a-f48d00e1bccb
=== Create goods receipt for purchase order ===
=== Create goods receipt for purchase order ===
<syntaxhighlight line copy>
<syntaxhighlight line copy>

Latest revision as of 13:56, 3 June 2025

After reading this wiki entry, you should able to do operations Create and Cancel for purchase order goods receipt.

This is done by Entity Manipulation Language (EML)

Create goods receipt for purchase order

 DATA material_doc_header  TYPE TABLE FOR CREATE r_materialdocumenttp\\materialdocumentheader.
    DATA material_doc_items   TYPE TABLE FOR CREATE r_materialdocumenttp\\materialdocumentheader\_materialdocumentitem.
    DATA material_doc_serials TYPE TABLE FOR CREATE r_materialdocumenttp\\MaterialDocumentItem\_SerialNumber.

    CONSTANTS cid_mat_doc_hdr TYPE abp_behv_cid VALUE 'CID_MAT_DOC_HDR'.
    CONSTANTS cid_mat_doc_itm TYPE abp_behv_cid VALUE 'CID_MAT_DOC_ITM'.
    CONSTANTS cid_mat_doc_ser TYPE abp_behv_cid VALUE 'CID_MAT_DOC_SER'.
    CONSTANTS gmcode_gr       TYPE char2        VALUE '01'.
    CONSTANTS movetype_gr     TYPE bwart        VALUE '101'.
    CONSTANTS moveflag_po     TYPE kzbew        VALUE 'B'.

    READ ENTITIES OF yc_purchaseorderitem IN LOCAL MODE ENTITY POItem
         FIELDS ( purchaseorder purchaseorderitem )
         WITH VALUE #( ( PurchaseOrder     = keys[ 1 ]-PurchaseOrder
                         PurchaseOrderItem = keys[ 1 ]-PurchaseOrderItem ) )
         RESULT FINAL(pitems)
         " TODO: variable is assigned but never used (ABAP cleaner)
         REPORTED DATA(reported)
         FAILED DATA(failed).

    IF pitems IS INITIAL OR failed IS NOT INITIAL.
      APPEND VALUE #( %msg = new_message( id       = ycl_p2p_prmonitor_constants=>cv_message_class
                                          number   = '005'
                                          severity = if_abap_behv_message=>severity-error ) )
             TO reported-poitem.
      RETURN.
    ENDIF.

       " Material document header
       material_doc_header = VALUE #(
           ( %cid                       = cid_mat_doc_hdr
             PostingDate                = sy-datum
             DocumentDate               = sy-datum
             GoodsMovementCode          = gmcode_gr
             TransactionCode            = 'MB01'
             InventoryTransactionType   = 'WE'
             MaterialDocumentHeaderText = |USER { cl_abap_context_info=>get_system_date( ) }| ) ).

    " Material document item
    material_doc_items = VALUE #(
        ( %cid_ref = cid_mat_doc_hdr
          %target  = VALUE #( ( %cid                    = cid_mat_doc_itm
                                Material                = pitems[ 1 ]-Material
                                Plant                   = keys[ 1 ]-%param-Plant
                                StorageLocation         = keys[ 1 ]-%param-StorageLocation
                                GoodsMovementType       = movetype_gr
                                GoodsMovementRefDocType = moveflag_po
                                PurchaseOrder           = pitems[ 1 ]-PurchaseOrder
                                PurchaseOrderItem       = pitems[ 1 ]-PurchaseOrderItem
                                MaterialBaseUnit        = pitems[ 1 ]-PurchaseOrderQuantityUnit "lv_unit_output " keys[ 1 ]-%param-PurchaseOrderQuantityUnit
                                QuantityInBaseUnit      = keys[ 1 ]-%param-OpenQuantityforGR
                                EntryUnit               = pitems[ 1 ]-PurchaseOrderQuantityUnit "lv_unit_output " keys[ 1 ]-%param-PurchaseOrderQuantityUnit
                                QuantityInEntryUnit     = keys[ 1 ]-%param-OpenQuantityforGR ) ) ) ).

    DATA(rnd) = NEW cl_random_number( ).
    rnd->if_random_number~init( ).
    DO keys[ 1 ]-%param-OpenQuantityforGR TIMES.
      APPEND INITIAL LINE TO material_doc_serials ASSIGNING FIELD-SYMBOL(<serial>).
      <serial>-%cid_ref = cid_mat_doc_itm.
      APPEND VALUE #( %cid         = cid_mat_doc_ser &&  rnd->if_random_number~get_random_int( 99999 )
                      SerialNumber = rnd->if_random_number~get_random_int( 99999 ) )
             TO <serial>-%target.
    ENDDO.

    " Create inventory document
    MODIFY ENTITIES OF r_materialdocumenttp

           ENTITY materialdocumentheader
           CREATE FROM material_doc_header

           ENTITY materialdocumentheader
           CREATE BY \_materialdocumentitem FROM material_doc_items

           ENTITY MaterialDocumentItem
           CREATE BY \_SerialNumber FROM material_doc_serials

           " TODO: variable is assigned but never used (ABAP cleaner)
           MAPPED DATA(mapped_early)
           FAILED DATA(failed_early)
           REPORTED DATA(reported_early).

    IF failed_early IS INITIAL.
      APPEND VALUE #( %msg = new_message( id       = ycl_p2p_prmonitor_constants=>cv_message_class
                                          number   = '074'
                                          severity = if_abap_behv_message=>severity-success
                                          v1       = '' ) )
             TO reported-poitem.
    ELSE.
      IF reported_early-materialdocumentheader IS NOT INITIAL.
        APPEND VALUE #(
            %msg = new_message_with_text(
                       severity = reported_early-materialdocumentheader[ 1 ]-%msg->m_severity
                       text     = reported_early-materialdocumentheader[ 1 ]-%msg->if_message~get_text( ) ) )
               TO reported-poitem.
      ENDIF.

      IF reported_early-materialdocumentitem IS NOT INITIAL.
        APPEND VALUE #(
            %msg = new_message_with_text(
                       severity = reported_early-MaterialDocumentItem[ 1 ]-%msg->m_severity
                       text     = reported_early-MaterialDocumentItem[ 1 ]-%msg->if_message~get_text( ) ) )
               TO reported-poitem.
      ENDIF.

      IF reported_early-serialnumber IS NOT INITIAL.
        APPEND VALUE #( %msg = new_message_with_text(
                                   severity = reported_early-serialnumber[ 1 ]-%msg->m_severity
                                   text     = reported_early-serialnumber[ 1 ]-%msg->if_message~get_text( ) ) )
               TO reported-poitem.
      ENDIF.

      APPEND VALUE #( PurchaseOrder     = keys[ 1 ]-PurchaseOrder
                      PurchaseOrderItem = keys[ 1 ]-PurchaseOrderItem )
             TO failed-poitem.
    ENDIF.

    IF mapped_early IS NOT INITIAL.
     APPEND VALUE #( %cid = keys[ 1 ]-%cid
                     purchaseorder = keys[ 1 ]-PurchaseOrder
                     purchaseorderItem = keys[ 1 ]-PurchaseOrderItem ) TO mapped-poitem.
    ENDIF.

Cancel for goods receipt for purchase order


This is a wiki created in the spare time of a private person working in the SAP ERP area. The aim is to collect knowledge for the own use. The wiki is maintained to the best of knowledge and belief.
All products shown, including in form of screenshots, belong to SAP SE. Their trademarks are, among others: SAP®,ABAP®,SAP Fiori®,SAP HANA®,SAP NetWeaver®,SAP® R/3®,SAP S/4HANA®,SAP S/4HANA® Cloud