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.