I PURCHASEREQUISITIONTP

Aus SAP Wiki ツ
Version vom 4. Juni 2025, 10:36 Uhr von M1ch3lde (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Bestellanforderung mit Positionen anlegen

    DATA lt_rap_pr_header      TYPE TABLE FOR CREATE I_PurchaseRequisitionTP.
    DATA lt_rap_pr_items_cba   TYPE TABLE FOR CREATE i_purchaserequisitiontp\_purchaserequisitionitem.
    DATA lt_rap_pr_acct_cba    TYPE TABLE FOR CREATE i_purchasereqnitemtp\_purchasereqnacctassgmt.
    DATA lt_rap_pr_addr_cba    TYPE TABLE FOR CREATE i_purchasereqnitemtp\_purchasereqndelivaddress.

    DATA ls_pr_line_rap        TYPE R_PurchaseRequisitionItemTP.
    DATA ls_pr_line_rap_create TYPE STRUCTURE FOR CREATE R_PurchaseRequisitionItemTP.
    DATA ls_rap_pr_item_cba    TYPE STRUCTURE FOR CREATE i_purchaserequisitiontp\_purchaserequisitionitem.
    DATA ls_target_item_cba    LIKE LINE OF ls_rap_pr_item_cba-%target.
    DATA ls_pr_acct_rap_rview  TYPE R_PurchaseReqnAcctAssgmtTP.
    DATA ls_rap_pr_acct_cba    TYPE STRUCTURE FOR CREATE i_purchasereqnitemtp\_purchasereqnacctassgmt.
    DATA ls_pr_acct_rap_create TYPE STRUCTURE FOR CREATE R_PurchaseReqnAcctAssgmtTP.
    DATA ls_rap_pr_addr_cba    TYPE STRUCTURE FOR CREATE i_purchasereqnitemtp\_purchasereqndelivaddress.
    DATA ls_pr_addr_rap        TYPE I_PurchaseReqnDelivAddrTP.
    DATA ls_target_acc_cba     LIKE LINE OF ls_rap_pr_acct_cba-%target.

    DATA lt_pr_data            TYPE TABLE FOR READ RESULT yc_prmonitor\\prmonitor.
    DATA ls_pr_failed          TYPE RESPONSE FOR FAILED EARLY yc_prmonitor.
    DATA ls_pr_reported        TYPE RESPONSE FOR REPORTED EARLY yc_prmonitor.

    DATA lv_cid_item_numbering TYPE abp_behv_cid.

    read( EXPORTING keys     = CORRESPONDING #( keys )
          CHANGING  result   = lt_pr_data
                    failed   = ls_pr_failed
                    reported = ls_pr_reported ).

    IF lt_pr_data IS INITIAL OR ls_pr_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-prmonitor.
      RETURN.
    ENDIF.

    LOOP AT keys ASSIGNING FIELD-SYMBOL(<ls_keys>).

      DATA(lv_pr) = <ls_keys>-%key-PurchaseRequisition.
      DATA(lv_pr_item) = <ls_keys>-%key-PurchaseRequisitionItem.
      DATA(lv_pr_type) = lt_pr_data[
                             %key-PurchaseRequisition = <ls_keys>-%key-PurchaseRequisition ]-PurchaseRequisitionType.

      IF <ls_keys>-%cid IS NOT INITIAL AND lines( keys ) = 1.
        DATA(lv_cid) = <ls_keys>-%cid.
      ELSE.
        lv_cid = 'My%CID_1'.
      ENDIF.

      lt_rap_pr_header = VALUE #( ( %cid                          = lv_cid "'My%CID_1'
                                    %data-PurchaseRequisitionType = lv_pr_type " lt_pr_data[ 1 ]-%data-PurchaseRequisitionType
                                    "%control-PurchaseRequisitionType = if_abap_behv=>mk-on
                                    %data-PurReqnDescription      = <ls_keys>-%param-PurchaseRequisitionDesc ) ).

      LOOP AT lt_pr_data INTO DATA(ls_pr_data) WHERE     %key-PurchaseRequisition     = lv_pr
                                                     AND %key-PurchaseRequisitionItem = lv_pr_item.
        CLEAR : ls_pr_line_rap_create,
                ls_rap_pr_acct_cba,
                ls_rap_pr_addr_cba,
                ls_target_acc_cba,
                ls_target_item_cba,
                ls_rap_pr_item_cba-%target.

        lv_cid_item_numbering += 1.

        ls_pr_line_rap = CORRESPONDING #( ls_pr_data ).
        ls_pr_line_rap_create = CORRESPONDING #( ls_pr_line_rap CHANGING CONTROL " %Control fields are also filled if non-initial
          EXCEPT PurReqnReleaseStatus CreatedByUser ItemDeliveryAddressID
           LastChangeDateTime PurchaseReqnItemUniqueID ). " Display only fields removed

        ls_target_item_cba = CORRESPONDING #( ls_pr_line_rap_create ).
        ls_target_item_cba-%cid = |My%ItemCID_{ lv_cid_item_numbering }|. "'My%ItemCID_1'. " ls_target_item_cba-purchaserequisitionitem.
        ls_target_item_cba-%data-RequestedQuantity    = <ls_keys>-%param-RequestedQuantity.
        ls_target_item_cba-%data-OrderedQuantity      = 0.
        ls_target_item_cba-%data-IsDeleted      = abap_false.
        ls_target_item_cba-%data-ProcessingStatus     = 'N'.
        ls_target_item_cba-%data-PurReqnReleaseStatus = '02'.

        CLEAR: ls_target_item_cba-%data-PurchasingDocument,
               ls_target_item_cba-%data-PurchasingDocumentItem.

        ls_rap_pr_item_cba-%cid_ref = lv_cid. "'My%CID_1'. " Give same CID of PR header
        APPEND ls_target_item_cba TO ls_rap_pr_item_cba-%target.

        " Fill in Accounting
        SELECT FROM I_PurchaseReqnAcctAssgmtTP
          FIELDS *
          WHERE PurchaseRequisition     = @lv_pr
            AND PurchaseRequisitionItem = @lv_pr_item
          INTO TABLE @DATA(lt_pr_item_acctassgmt).
        LOOP AT lt_pr_item_acctassgmt INTO DATA(ls_pr_accounting).
          ls_pr_acct_rap_rview = CORRESPONDING #( ls_pr_accounting ).
          ls_pr_acct_rap_create = CORRESPONDING #( ls_pr_acct_rap_rview CHANGING CONTROL ).
          ls_pr_acct_rap_create-%control-PurchaseReqnAcctAssgmtNumber = if_abap_behv=>mk-off.
          ls_target_acc_cba = CORRESPONDING #( ls_pr_acct_rap_create ).
          CONCATENATE 'Accnt' 'My%ItemCID_' lv_cid_item_numbering ls_pr_acct_rap_create-PurchaseReqnAcctAssgmtNumber
                      INTO ls_target_acc_cba-%cid.
          APPEND ls_target_acc_cba TO ls_rap_pr_acct_cba-%target.
          ls_rap_pr_acct_cba-%cid_ref = |My%ItemCID_{ lv_cid_item_numbering }|. "'My%ItemCID_1'.
        ENDLOOP.
        IF ls_rap_pr_acct_cba IS NOT INITIAL.
          APPEND ls_rap_pr_acct_cba TO lt_rap_pr_acct_cba.
        ENDIF.

        " Fill in Address
        SELECT SINGLE FROM I_PurchaseReqnDelivAddrTP
          FIELDS *
          WHERE PurchaseRequisition     = @lv_pr
            AND PurchaseRequisitionItem = @lv_pr_item
          INTO @DATA(ls_pr_item_addr).
        IF ls_pr_item_addr IS NOT INITIAL.
          " ls_rap_pr_addr_cba-%cid_ref = 'My%ItemCID_1'.
          ls_rap_pr_addr_cba-%cid_ref = |My%ItemCID_{ lv_cid_item_numbering }|. "'My%ItemCID_1'. " ls_pr_line_rap_create-%cid.
          APPEND INITIAL LINE TO ls_rap_pr_addr_cba-%target ASSIGNING FIELD-SYMBOL(<fs_rap_pr_addr_cba>).
          ls_pr_addr_rap-AddressID            = ls_pr_item_addr-AddressID.
          ls_pr_addr_rap-BusinessPartnerName1 = ls_pr_item_addr-BusinessPartnerName1.
          ls_pr_addr_rap-BusinessPartnerName2 = ls_pr_item_addr-BusinessPartnerName2.
          ls_pr_addr_rap-Country              = ls_pr_item_addr-Country.
          <fs_rap_pr_addr_cba> = CORRESPONDING #( ls_pr_addr_rap CHANGING CONTROL
           EXCEPT AddressID PurchasingDeliveryAddressType ManualDeliveryAddressID FullName LastChangeDateTime ).
          CONCATENATE 'Deliv' 'My%ItemCID_' lv_cid_item_numbering INTO <fs_rap_pr_addr_cba>-%cid.
          APPEND ls_rap_pr_addr_cba TO lt_rap_pr_addr_cba.
        ENDIF.
      ENDLOOP.
      IF ls_rap_pr_item_cba IS NOT INITIAL.
        APPEND ls_rap_pr_item_cba TO lt_rap_pr_items_cba.
      ENDIF.

    ENDLOOP.

    MODIFY ENTITIES OF i_purchaserequisitiontp
           ENTITY purchaserequisition CREATE FROM lt_rap_pr_header
           CREATE BY \_purchaserequisitionitem FROM lt_rap_pr_items_cba
           ENTITY purchaserequisitionitem
           CREATE BY \_purchasereqnacctassgmt FROM lt_rap_pr_acct_cba
           ENTITY purchaserequisitionitem
           CREATE BY \_purchasereqndelivaddress FROM lt_rap_pr_addr_cba
           MAPPED DATA(ls_mapped) REPORTED DATA(ls_reported) FAILED DATA(ls_failed).

    IF ls_failed IS INITIAL.
      APPEND VALUE #( %msg = new_message( id       = ycl_p2p_prmonitor_constants=>cv_message_class
                                          number   = '040'
                                          severity = if_abap_behv_message=>severity-success
                                          v1       = '' ) )
             TO reported-prmonitor.
    ELSE.

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

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

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

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

      APPEND VALUE #( PurchaseRequisition     = keys[ 1 ]-PurchaseRequisition
                      PurchaseRequisitionItem = keys[ 1 ]-PurchaseRequisitionItem )
             TO failed-prmonitor.

    ENDIF.

Bestellanforderung mit Positionen lesen

READ ENTITIES OF i_purchaserequisitiontp
           ENTITY purchaserequisitionitem
           FROM VALUE #( ( PurchaseRequisition     = ls_opr-banfn
                           PurchaseRequisitionItem = ls_opr-bnfpo ) )
           RESULT DATA(lt_pr_items).

Bestellanforderungsposition ändern

 DATA lt_read_result   TYPE TABLE FOR READ RESULT yc_prmonitor\\prmonitor.
    DATA ls_read_failed   TYPE RESPONSE FOR FAILED EARLY yc_prmonitor.
    DATA ls_read_reported TYPE RESPONSE FOR REPORTED EARLY yc_prmonitor.

    read( EXPORTING keys     = CORRESPONDING #( keys )
          CHANGING  result   = lt_read_result
                    failed   = ls_read_failed
                    reported = ls_read_reported ).

    IF ls_read_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-prmonitor.
      RETURN.
    ENDIF.

    MODIFY ENTITIES OF i_purchaserequisitiontp
           ENTITY purchaserequisitionitem UPDATE FROM VALUE #(
               ( PurchaseRequisition             = keys[ 1 ]-PurchaseRequisition
                 PurchaseRequisitionItem         = keys[ 1 ]-PurchaseRequisitionItem
                 %data-RequestedQuantity         = keys[ 1 ]-%param-RequestedQuantity
                 %data-DeliveryDate              = keys[ 1 ]-%param-DeliveryDate
                 %data-Plant    = keys[ 1 ]-%param-PLant
                 %data-StorageLocation           = keys[ 1 ]-%param-StorageLocation
                 %data-PurchasingOrganization    = keys[ 1 ]-%param-PurchasingOrganization
                 %data-PurchasingGroup           = keys[ 1 ]-%param-PurchasingGroup
                 %control-RequestedQuantity      = COND #( WHEN keys[ 1 ]-%param-RequestedQuantity <> lt_read_result[ 1 ]-RequestedQuantity
                                                           THEN if_abap_behv=>mk-on )
                 %control-DeliveryDate           = COND #( WHEN keys[ 1 ]-%param-DeliveryDate <> lt_read_result[ 1 ]-DeliveryDate
                                                           THEN if_abap_behv=>mk-on )
                 %control-Plant           = COND #( WHEN keys[ 1 ]-%param-Plant <> lt_read_result[ 1 ]-Plant
                                                           THEN if_abap_behv=>mk-on )
                 %control-StorageLocation = COND #( WHEN keys[ 1 ]-%param-StorageLocation <> lt_read_result[ 1 ]-StorageLocation
                                                           THEN if_abap_behv=>mk-on )
                 %control-PurchasingOrganization = COND #( WHEN keys[ 1 ]-%param-PurchasingOrganization <> lt_read_result[ 1 ]-PurchasingOrganization
                                                           THEN if_abap_behv=>mk-on )
                 %control-PurchasingGroup        = COND #( WHEN keys[ 1 ]-%param-PurchasingGroup <> lt_read_result[ 1 ]-PurchasingGroup
                                                           THEN if_abap_behv=>mk-on ) ) )
           REPORTED DATA(ls_update_reported)
           FAILED   DATA(ls_update_failed)
           " TODO: variable is assigned but never used (ABAP cleaner)
           MAPPED   DATA(ls_update_mappend).

    IF ls_update_failed IS INITIAL.
      APPEND VALUE #( %msg = new_message( id       = ycl_p2p_prmonitor_constants=>cv_message_class
                                          number   = '046'
                                          severity = if_abap_behv_message=>severity-success ) )
             TO reported-prmonitor.

      APPEND VALUE #( %cid                    = keys[ 1 ]-%cid
                      PurchaseRequisition     = keys[ 1 ]-PurchaseRequisition
                      PurchaseRequisitionItem = keys[ 1 ]-PurchaseRequisitionItem ) TO mapped-prmonitor.

      RETURN.
    ELSE.

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

      APPEND VALUE #( PurchaseRequisition     = keys[ 1 ]-PurchaseRequisition
                      PurchaseRequisitionItem = keys[ 1 ]-PurchaseRequisitionItem )
             TO failed-prmonitor.

    ENDIF.

Bestellanforderungsposition als gelöscht markieren

DATA lt_delete TYPE TABLE FOR UPDATE I_PurchaseRequisitionTP\\PurchaseRequisitionItem.

    lt_delete = CORRESPONDING #( keys ).

    LOOP AT lt_delete ASSIGNING FIELD-SYMBOL(<ls_delete>).
      <ls_delete>-IsDeleted = abap_true.
      <ls_delete>-%data-IsDeleted = abap_true.
      <ls_delete>-%control-IsDeleted = if_abap_behv=>mk-on.
    ENDLOOP.

    MODIFY ENTITIES OF i_purchaserequisitiontp
           ENTITY PurchaseRequisitionItem UPDATE FROM lt_delete
           MAPPED DATA(ls_mapped) REPORTED DATA(ls_reported) FAILED DATA(ls_failed).

    IF ls_failed IS INITIAL.
           APPEND VALUE #( %msg = new_message( id       = ycl_p2p_prmonitor_constants=>cv_message_class
                                               number   = '049'
                                               severity = if_abap_behv_message=>severity-success ) )
             TO reported-prmonitor.
    ELSE.
      IF ls_reported-PurchaseRequisitionItem IS NOT INITIAL.
        APPEND VALUE #( %msg = new_message_with_text(
                                   severity = ls_reported-PurchaseRequisition[ 1 ]-%msg->m_severity
                                   text     = ls_reported-PurchaseRequisition[ 1 ]-%msg->if_message~get_text( ) ) )
               TO reported-prmonitor.
      ENDIF.

      IF ls_reported-PurchaseRequisitionItem IS NOT INITIAL.
        LOOP AT ls_reported-PurchaseRequisitionItem ASSIGNING FIELD-SYMBOL(<ls_rep_po_item>).
          APPEND VALUE #(
              %msg = new_message_with_text(
                         severity = ls_reported-PurchaseRequisitionItem[ sy-tabix ]-%msg->m_severity
                         text     = ls_reported-PurchaseRequisitionItem[ sy-tabix ]-%msg->if_message~get_text( ) ) )
                 TO reported-prmonitor.
        ENDLOOP.
      ENDIF.

      APPEND VALUE #( PurchaseRequisition     = keys[ 1 ]-PurchaseRequisition
                      PurchaseRequisitionItem = keys[ 1 ]-PurchaseRequisitionItem )
             TO failed-prmonitor.
    ENDIF.

    LOOP AT keys ASSIGNING FIELD-SYMBOL(<ls_keys>).
        APPEND VALUE #( "%cid                    = <ls_keys>-%cid
                        PurchaseRequisition     = <ls_keys>-PurchaseRequisition
                        PurchaseRequisitionItem = <ls_keys>-PurchaseRequisitionItem ) TO mapped-prmonitor.
    ENDLOOP.

Bestellanforderungsposition Löschkennzeichen zurücknehmen

    DATA lt_undo TYPE TABLE FOR UPDATE I_PurchaseRequisitionTP\\PurchaseRequisitionItem.

    lt_undo = CORRESPONDING #( keys ).

    LOOP AT lt_undo ASSIGNING FIELD-SYMBOL(<ls_undo>).
      <ls_undo>-IsDeleted = abap_false.
      <ls_undo>-%data-IsDeleted = abap_false.
      <ls_undo>-%control-IsDeleted = if_abap_behv=>mk-on.
    ENDLOOP.

    MODIFY ENTITIES OF i_purchaserequisitiontp
           ENTITY PurchaseRequisitionItem UPDATE FROM lt_undo
           MAPPED DATA(ls_mapped) REPORTED DATA(ls_reported) FAILED DATA(ls_failed).
    IF ls_failed IS INITIAL.
      APPEND VALUE #( %msg = new_message( id       = ycl_p2p_prmonitor_constants=>cv_message_class
                                          number   = '044'
                                          severity = if_abap_behv_message=>severity-success ) )
             TO reported-prmonitor.
    ELSE.
      IF ls_reported-PurchaseRequisitionItem IS NOT INITIAL.
        APPEND VALUE #( %msg = new_message_with_text(
                                   severity = ls_reported-PurchaseRequisition[ 1 ]-%msg->m_severity
                                   text     = ls_reported-PurchaseRequisition[ 1 ]-%msg->if_message~get_text( ) ) )
               TO reported-prmonitor.
      ENDIF.

      IF ls_reported-PurchaseRequisitionItem IS NOT INITIAL.
        " TODO: variable is assigned but never used (ABAP cleaner)
        LOOP AT ls_reported-PurchaseRequisitionItem ASSIGNING FIELD-SYMBOL(<ls_rep_po_item>).
          APPEND VALUE #(
              %msg = new_message_with_text(
                         severity = ls_reported-PurchaseRequisitionItem[ sy-tabix ]-%msg->m_severity
                         text     = ls_reported-PurchaseRequisitionItem[ sy-tabix ]-%msg->if_message~get_text( ) ) )
                 TO reported-prmonitor.
        ENDLOOP.
      ENDIF.

      APPEND VALUE #( PurchaseRequisition     = keys[ 1 ]-PurchaseRequisition
                      PurchaseRequisitionItem = keys[ 1 ]-PurchaseRequisitionItem )
             TO failed-prmonitor.
    ENDIF.

    LOOP AT keys ASSIGNING FIELD-SYMBOL(<ls_keys>).
        APPEND VALUE #( %cid                    = <ls_keys>-%cid
                        PurchaseRequisition     = <ls_keys>-PurchaseRequisition
                        PurchaseRequisitionItem = <ls_keys>-PurchaseRequisitionItem ) TO mapped-prmonitor.
    ENDLOOP.

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