R MATERIALDOCUMENTTP

Aus SAP Wiki ツ

Wareneingang zu Bestellung erstellen

 DATA lt_material_doc_header  TYPE TABLE FOR CREATE r_materialdocumenttp\\materialdocumentheader.
    DATA lt_material_doc_items   TYPE TABLE FOR CREATE r_materialdocumenttp\\materialdocumentheader\_materialdocumentitem.
    DATA lt_material_doc_serials TYPE TABLE FOR CREATE r_materialdocumenttp\\MaterialDocumentItem\_SerialNumber.

    CONSTANTS lc_cid_mat_doc_hdr TYPE abp_behv_cid VALUE 'CID_MAT_DOC_HDR'.
    CONSTANTS lc_cid_mat_doc_itm TYPE abp_behv_cid VALUE 'CID_MAT_DOC_ITM'.
    CONSTANTS lc_cid_mat_doc_ser TYPE abp_behv_cid VALUE 'CID_MAT_DOC_SER'.
    CONSTANTS lc_gmcode_gr       TYPE char2        VALUE '01'.
    CONSTANTS lc_movetype_gr     TYPE bwart        VALUE '101'.
    CONSTANTS lc_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(lt_po_items)
         " TODO: variable is assigned but never used (ABAP cleaner)
         REPORTED DATA(ls_reported)
         FAILED DATA(ls_failed).

    IF lt_po_items IS INITIAL OR ls_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
       lt_material_doc_header = VALUE #(
           ( %cid                       = lc_cid_mat_doc_hdr
             PostingDate                = sy-datum
             DocumentDate               = sy-datum
             GoodsMovementCode          = lc_gmcode_gr
             TransactionCode            = 'MB01'
             InventoryTransactionType   = 'WE'
             MaterialDocumentHeaderText = |USER { cl_abap_context_info=>get_system_date( ) }| ) ).

    " Material document item
    lt_material_doc_items = VALUE #(
        ( %cid_ref = lc_cid_mat_doc_hdr
          %target  = VALUE #( ( %cid                    = lc_cid_mat_doc_itm
                                Material                = lt_po_items[ 1 ]-Material
                                Plant                   = keys[ 1 ]-%param-Plant
                                StorageLocation         = keys[ 1 ]-%param-StorageLocation
                                GoodsMovementType       = lc_movetype_gr
                                GoodsMovementRefDocType = lc_moveflag_po
                                PurchaseOrder           = lt_po_items[ 1 ]-PurchaseOrder
                                PurchaseOrderItem       = lt_po_items[ 1 ]-PurchaseOrderItem
                                MaterialBaseUnit        = lt_po_items[ 1 ]-PurchaseOrderQuantityUnit "lv_unit_output " keys[ 1 ]-%param-PurchaseOrderQuantityUnit
                                QuantityInBaseUnit      = keys[ 1 ]-%param-OpenQuantityforGR
                                EntryUnit               = lt_po_items[ 1 ]-PurchaseOrderQuantityUnit "lv_unit_output " keys[ 1 ]-%param-PurchaseOrderQuantityUnit
                                QuantityInEntryUnit     = keys[ 1 ]-%param-OpenQuantityforGR ) ) ) ).

    DATA(o_rnd) = NEW cl_random_number( ).
    o_rnd->if_random_number~init( ).
    DO keys[ 1 ]-%param-OpenQuantityforGR TIMES.
      APPEND INITIAL LINE TO lt_material_doc_serials ASSIGNING FIELD-SYMBOL(<ls_serial>).
      <ls_serial>-%cid_ref = lc_cid_mat_doc_itm.
      APPEND VALUE #( %cid         = lc_cid_mat_doc_ser &&  o_rnd->if_random_number~get_random_int( 99999 )
                      SerialNumber = o_rnd->if_random_number~get_random_int( 99999 ) )
             TO <ls_serial>-%target.
    ENDDO.

    " Create inventory document
    MODIFY ENTITIES OF r_materialdocumenttp

           ENTITY materialdocumentheader
           CREATE FROM lt_material_doc_header

           ENTITY materialdocumentheader
           CREATE BY \_materialdocumentitem FROM lt_material_doc_items

           ENTITY MaterialDocumentItem
           CREATE BY \_SerialNumber FROM lt_material_doc_serials

           " TODO: variable is assigned but never used (ABAP cleaner)
           MAPPED DATA(ls_mapped_early)
           FAILED DATA(ls_failed_early)
           REPORTED DATA(ls_reported_early).

    IF ls_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 ls_reported_early-materialdocumentheader IS NOT INITIAL.
        APPEND VALUE #(
            %msg = new_message_with_text(
                       severity = ls_reported_early-materialdocumentheader[ 1 ]-%msg->m_severity
                       text     = ls_reported_early-materialdocumentheader[ 1 ]-%msg->if_message~get_text( ) ) )
               TO reported-poitem.
      ENDIF.

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

      IF ls_reported_early-serialnumber IS NOT INITIAL.
        APPEND VALUE #( %msg = new_message_with_text(
                                   severity = ls_reported_early-serialnumber[ 1 ]-%msg->m_severity
                                   text     = ls_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 ls_mapped_early IS NOT INITIAL.
     APPEND VALUE #( %cid = keys[ 1 ]-%cid
                     purchaseorder = keys[ 1 ]-PurchaseOrder
                     purchaseorderItem = keys[ 1 ]-PurchaseOrderItem ) TO mapped-poitem.
    ENDIF.

Storno zu Wareneingang zu Bestellung erstellen


Dieses Wiki wird privat in Freizeit nach bestem Wissen und Gewissen gepflegt und dient primär als eigene Wissenssammlung für die tägliche Arbeit im SAP-ERP-Umfeld.
Alle dargestellten Softwareprodukte, auch in Form von Screenshots, sind Eigentum der SAP SE. Ihre Marken, vgl. Link, sind u.a.: SAP®, ABAP®, SAP Fiori®, SAP HANA®, SAP S/4HANA®, SAP S/4HANA® Cloud