Difference between revisions of "SAP MM BAPI OC"
From SapWiki
| Line 1: | Line 1: | ||
==BAPI_PO_CREATE1== | ==BAPI_PO_CREATE1== | ||
===Ejemplo 1=== | ===Ejemplo 1=== | ||
| − | <nowiki> form crear_pedido CHANGING p_oc. | + | <nowiki>form crear_pedido CHANGING p_oc. |
| − | + | * Rutina que crea los pedidos de traslado (ME21N) | |
| − | + | ||
| − | + | DATA: ls_header TYPE bapimepoheader, | |
| − | + | ls_headerx TYPE bapimepoheaderx, | |
| − | + | lt_items TYPE STANDARD TABLE OF bapimepoitem, | |
| − | + | ls_items TYPE bapimepoitem, | |
| − | + | lt_itemsx TYPE STANDARD TABLE OF bapimepoitemx, | |
| − | + | ls_itemsx TYPE bapimepoitemx, | |
| − | + | lt_schedules TYPE STANDARD TABLE OF bapimeposchedule, | |
| − | + | ls_schedules TYPE bapimeposchedule, | |
| − | + | lt_schedulesx TYPE STANDARD TABLE OF bapimeposchedulx, | |
| − | + | ls_schedulesx TYPE bapimeposchedulx, | |
| − | + | lt_return TYPE TABLE OF bapiret2, | |
| − | + | ls_return TYPE bapiret2, | |
| − | + | l_item_idx TYPE I, | |
| − | + | l_numped TYPE bapiekkoc-po_number. | |
| − | + | ||
| − | + | CLEAR: ls_header, | |
| − | + | ls_headerx. | |
| − | + | ||
| − | + | ls_header-doc_type = 'ZXXX'. | |
| − | + | ||
| − | + | SELECT SINGLE EKORG EKGRP BUKRS lifnr INTO | |
| − | + | (ls_header-purch_org,ls_header-pur_group,ls_header-comp_code,ls_header-VENDOR) | |
| − | + | FROM ekko WHERE ebeln = wa_data-zzcontrato. | |
| − | + | ||
| − | + | ls_header-suppl_plnt = wa_data-werks_ori. | |
| − | + | ls_header-doc_date = sy-datum. | |
| − | + | ls_header-REF_1 = wa_data-vbeln. | |
| − | + | ||
| − | + | ls_headerx-doc_type = 'X'. | |
| − | + | ls_headerx-purch_org = 'X'. | |
| − | + | ls_headerx-pur_group = 'X'. | |
| − | + | ls_headerx-comp_code = 'X'. | |
| − | + | ls_headerx-suppl_plnt = 'X'. | |
| − | + | ls_headerx-doc_date = 'X'. | |
| − | + | ls_headerX-REF_1 = 'X'. | |
| − | + | ls_headerX-VENDOR = 'X'. | |
| − | + | ||
| − | + | *Grabamos las tablas correspondientes a los materiales y repartos | |
| − | + | l_item_idx = wa_data-posnr. | |
| − | + | ls_items-po_item = l_item_idx. | |
| − | + | ls_items-material = wa_data-matnr. | |
| − | + | ls_items-plant = wa_data-werks_sumi. | |
| − | + | ls_items-stge_loc = wa_data-lgort_sumi. | |
| − | + | *ls_items-item_cat = '7'. | |
| − | + | ls_items-po_unit = wa_data-VRKME. | |
| − | + | ls_items-TRACKINGNO = wa_data-posnr. "wa_data-vbeln. "N° necesidad | |
| − | + | ls_items-QUANTITY = wa_data-KWMENG. | |
| − | + | ||
| − | + | ls_items-agreement = wa_data-zzcontrato. | |
| − | + | select SINGLE * into @data(ls_ekpo) from ekpo | |
| − | + | where ebeln = @wa_data-zzcontrato | |
| − | + | and LOEKZ <> 'X'. | |
| − | + | ls_items-agmt_item = ls_ekpo-ebelp. | |
| − | + | ||
| − | + | select SINGLE NETWR INTO ls_items-net_price from vbap | |
| − | + | where vbeln = wa_data-vbeln and | |
| − | + | posnr = wa_data-posnr. | |
| − | + | *ls_items-no_rounding = 'X'. | |
| − | + | APPEND ls_items TO lt_items. | |
| − | + | ||
| − | + | ls_itemsx-po_item = l_item_idx. | |
| − | + | ls_itemsx-po_itemx = 'X'. | |
| − | + | ls_itemsx-material = 'X'. | |
| − | + | ls_itemsx-plant = 'X'. | |
| − | + | ls_itemsx-stge_loc = 'X'. | |
| − | + | *ls_itemsx-item_cat = 'X'. | |
| − | + | ls_itemsx-po_unit = 'X'. | |
| − | + | *ls_itemsx-no_rounding = 'X'. | |
| − | + | ls_itemsx-TRACKINGNO = 'X'. | |
| − | + | ls_itemsX-QUANTITY = 'X'. | |
| − | + | ls_itemsX-agreement = 'X'. | |
| − | + | ls_itemsX-agmt_item = 'X'. | |
| − | + | ls_itemsX-net_price = 'X'. | |
| − | + | APPEND ls_itemsx TO lt_itemsx. | |
| − | + | ||
| − | + | ls_schedules-po_item = l_item_idx. | |
| − | + | ls_schedules-quantity = wa_data-KWMENG. | |
| − | + | ls_schedules-delivery_date = wa_data-edatu. | |
| − | + | APPEND ls_schedules TO lt_schedules. | |
| − | + | ||
| − | + | ls_schedulesx-po_item = l_item_idx. | |
| − | + | ls_schedulesx-po_itemx = 'X'. | |
| − | + | ls_schedulesx-quantity = 'X'. | |
| − | + | ls_schedulesx-delivery_date = 'X'. | |
| − | + | APPEND ls_schedulesx TO lt_schedulesx. | |
| − | + | ||
| − | + | * Llamamos a la BAPI para crear el pedido de traslados | |
| − | + | CALL FUNCTION 'BAPI_PO_CREATE1' | |
| − | + | EXPORTING | |
| − | + | poheader = ls_header | |
| − | + | poheaderx = ls_headerx | |
| − | + | IMPORTING | |
| − | + | exppurchaseorder = l_numped | |
| − | + | TABLES | |
| − | + | RETURN = lt_return | |
| − | + | poitem = lt_items | |
| − | + | poitemx = lt_itemsx | |
| − | + | poschedule = lt_schedules | |
| − | + | poschedulex = lt_schedulesx | |
| − | + | . | |
| − | + | ||
| − | + | if l_numped is INITIAL. | |
| − | + | * error | |
| − | + | LOOP AT lt_return INTO ls_return | |
| − | + | GROUP BY COND string( WHEN ls_return-type = 'E' THEN |EQ 1| | |
| − | + | WHEN ls_return-type = 'A' THEN |EQ 2| | |
| − | + | WHEN ls_return-type = 'W' THEN |EQ 3| | |
| − | + | WHEN ls_return-type = 'I' THEN |EQ 4| | |
| − | + | ) | |
| − | + | ASCENDING | |
| − | + | ASSIGNING FIELD-SYMBOL(<group>). | |
| − | + | LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<ls_return>). | |
| − | + | ENDLOOP. | |
| − | + | EXIT. | |
| − | + | ENDLOOP. | |
| − | + | IF sy-subrc = 0. | |
| − | + | move <ls_return>-message to g_message. | |
| − | + | PERFORM add_news USING 'Crear Pedido:' icon_red_light. | |
| − | + | wa_data-stat = icon_red_light. | |
| − | + | ENDIF. | |
| − | + | else. | |
| − | + | * éxito | |
| − | + | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' | |
| − | + | EXPORTING | |
| − | + | WAIT = 'X'. | |
| − | + | ||
| − | + | p_oc = l_numped. | |
| − | + | ||
| − | + | * Pedido grabado correctamente, lo informamos en el log | |
| − | + | MESSAGE i000(0K) WITH 'Pedido grabado correctamente' l_numped INTO g_message. | |
| − | + | PERFORM add_news USING 'Crear Pedido:' icon_green_light. | |
| − | + | wa_data-stat = icon_green_light. | |
| − | + | endif. | |
| − | + | ||
| − | + | CLEAR: lt_items, lt_schedules, lt_itemsx, lt_schedulesx. | |
| − | + | REFRESH: lt_items, lt_schedules, lt_itemsx, lt_schedulesx. | |
| − | + | ||
| − | + | ENDFORM.</nowiki> | |
===Ejemplo 2, Crear orden de compra con referencia a una factura(al momento de crear factura)=== | ===Ejemplo 2, Crear orden de compra con referencia a una factura(al momento de crear factura)=== | ||
Revision as of 22:05, 4 April 2020
BAPI_PO_CREATE1
Ejemplo 1
form crear_pedido CHANGING p_oc.
* Rutina que crea los pedidos de traslado (ME21N)
DATA: ls_header TYPE bapimepoheader,
ls_headerx TYPE bapimepoheaderx,
lt_items TYPE STANDARD TABLE OF bapimepoitem,
ls_items TYPE bapimepoitem,
lt_itemsx TYPE STANDARD TABLE OF bapimepoitemx,
ls_itemsx TYPE bapimepoitemx,
lt_schedules TYPE STANDARD TABLE OF bapimeposchedule,
ls_schedules TYPE bapimeposchedule,
lt_schedulesx TYPE STANDARD TABLE OF bapimeposchedulx,
ls_schedulesx TYPE bapimeposchedulx,
lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2,
l_item_idx TYPE I,
l_numped TYPE bapiekkoc-po_number.
CLEAR: ls_header,
ls_headerx.
ls_header-doc_type = 'ZXXX'.
SELECT SINGLE EKORG EKGRP BUKRS lifnr INTO
(ls_header-purch_org,ls_header-pur_group,ls_header-comp_code,ls_header-VENDOR)
FROM ekko WHERE ebeln = wa_data-zzcontrato.
ls_header-suppl_plnt = wa_data-werks_ori.
ls_header-doc_date = sy-datum.
ls_header-REF_1 = wa_data-vbeln.
ls_headerx-doc_type = 'X'.
ls_headerx-purch_org = 'X'.
ls_headerx-pur_group = 'X'.
ls_headerx-comp_code = 'X'.
ls_headerx-suppl_plnt = 'X'.
ls_headerx-doc_date = 'X'.
ls_headerX-REF_1 = 'X'.
ls_headerX-VENDOR = 'X'.
*Grabamos las tablas correspondientes a los materiales y repartos
l_item_idx = wa_data-posnr.
ls_items-po_item = l_item_idx.
ls_items-material = wa_data-matnr.
ls_items-plant = wa_data-werks_sumi.
ls_items-stge_loc = wa_data-lgort_sumi.
*ls_items-item_cat = '7'.
ls_items-po_unit = wa_data-VRKME.
ls_items-TRACKINGNO = wa_data-posnr. "wa_data-vbeln. "N° necesidad
ls_items-QUANTITY = wa_data-KWMENG.
ls_items-agreement = wa_data-zzcontrato.
select SINGLE * into @data(ls_ekpo) from ekpo
where ebeln = @wa_data-zzcontrato
and LOEKZ <> 'X'.
ls_items-agmt_item = ls_ekpo-ebelp.
select SINGLE NETWR INTO ls_items-net_price from vbap
where vbeln = wa_data-vbeln and
posnr = wa_data-posnr.
*ls_items-no_rounding = 'X'.
APPEND ls_items TO lt_items.
ls_itemsx-po_item = l_item_idx.
ls_itemsx-po_itemx = 'X'.
ls_itemsx-material = 'X'.
ls_itemsx-plant = 'X'.
ls_itemsx-stge_loc = 'X'.
*ls_itemsx-item_cat = 'X'.
ls_itemsx-po_unit = 'X'.
*ls_itemsx-no_rounding = 'X'.
ls_itemsx-TRACKINGNO = 'X'.
ls_itemsX-QUANTITY = 'X'.
ls_itemsX-agreement = 'X'.
ls_itemsX-agmt_item = 'X'.
ls_itemsX-net_price = 'X'.
APPEND ls_itemsx TO lt_itemsx.
ls_schedules-po_item = l_item_idx.
ls_schedules-quantity = wa_data-KWMENG.
ls_schedules-delivery_date = wa_data-edatu.
APPEND ls_schedules TO lt_schedules.
ls_schedulesx-po_item = l_item_idx.
ls_schedulesx-po_itemx = 'X'.
ls_schedulesx-quantity = 'X'.
ls_schedulesx-delivery_date = 'X'.
APPEND ls_schedulesx TO lt_schedulesx.
* Llamamos a la BAPI para crear el pedido de traslados
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = ls_header
poheaderx = ls_headerx
IMPORTING
exppurchaseorder = l_numped
TABLES
RETURN = lt_return
poitem = lt_items
poitemx = lt_itemsx
poschedule = lt_schedules
poschedulex = lt_schedulesx
.
if l_numped is INITIAL.
* error
LOOP AT lt_return INTO ls_return
GROUP BY COND string( WHEN ls_return-type = 'E' THEN |EQ 1|
WHEN ls_return-type = 'A' THEN |EQ 2|
WHEN ls_return-type = 'W' THEN |EQ 3|
WHEN ls_return-type = 'I' THEN |EQ 4|
)
ASCENDING
ASSIGNING FIELD-SYMBOL(<group>).
LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<ls_return>).
ENDLOOP.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
move <ls_return>-message to g_message.
PERFORM add_news USING 'Crear Pedido:' icon_red_light.
wa_data-stat = icon_red_light.
ENDIF.
else.
* éxito
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
p_oc = l_numped.
* Pedido grabado correctamente, lo informamos en el log
MESSAGE i000(0K) WITH 'Pedido grabado correctamente' l_numped INTO g_message.
PERFORM add_news USING 'Crear Pedido:' icon_green_light.
wa_data-stat = icon_green_light.
endif.
CLEAR: lt_items, lt_schedules, lt_itemsx, lt_schedulesx.
REFRESH: lt_items, lt_schedules, lt_itemsx, lt_schedulesx.
ENDFORM.
Ejemplo 2, Crear orden de compra con referencia a una factura(al momento de crear factura)
*----------------------------------------------------------------------*
* Print of a invoice by SAPscript SMART FORMS *
*----------------------------------------------------------------------*
REPORT zsd_crear_pcompra.
* declaration of data
INCLUDE rlb_invoice_data_declare.
* definition of forms
INCLUDE rlb_invoice_form01.
INCLUDE rlb_print_forms.
*---------------------------------------------------------------------*
* FORM ENTRY
*---------------------------------------------------------------------*
FORM entry USING return_code us_screen.
DATA: lf_retcode TYPE sy-subrc.
CLEAR retcode.
xscreen = us_screen.
PERFORM processing USING us_screen
CHANGING lf_retcode.
IF lf_retcode NE 0.
return_code = 1.
ELSE.
return_code = 0.
ENDIF.
ENDFORM. "ENTRY
*---------------------------------------------------------------------*
* FORM PROCESSING *
*---------------------------------------------------------------------*
FORM processing USING proc_screen
CHANGING cf_retcode.
DATA: ls_print_data_to_read TYPE lbbil_print_data_to_read.
DATA: ls_bil_invoice TYPE lbbil_invoice.
DATA: lf_fm_name TYPE rs38l_fnam.
DATA: ls_control_param TYPE ssfctrlop.
DATA: ls_composer_param TYPE ssfcompop.
DATA: ls_recipient TYPE swotobjid.
DATA: ls_sender TYPE swotobjid.
DATA: lf_formname TYPE tdsfname.
DATA: ls_addr_key LIKE addr_key.
DATA: ls_dlv-land LIKE vbrk-land1.
DATA: ls_job_info TYPE ssfcrescl.
DATA ld_vbeln LIKE vbrk-vbeln.
* SmartForm from customizing table TNAPR
lf_formname = tnapr-sform.
IF nast-objky+10 NE space.
nast-objky = nast-objky+16(10).
ELSE.
nast-objky = nast-objky.
ENDIF.
ld_vbeln = nast-objky.
* IF cf_retcode = 0.
CALL FUNCTION 'Z_MM_BAPI_PO_CREATE1' in BACKGROUND TASK
* AS SEPARATE UNIT DESTINATION 'NONE'
EXPORTING
I_VBELN = ld_vbeln
i_nast = nast
* IMPORTING
* O_EBELN =
.
* ENDIF.
* get SmartForm protocoll and store it in the NAST protocoll
* PERFORM ADD_SMFRM_PROT.
* get SmartForm protocoll and store it in the NAST protocoll
* PERFORM ADD_SMFRM_PROT.
ENDFORM. "PROCESSING
FUNCTION Z_MM_BAPI_PO_CREATE1.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" VALUE(I_VBELN) TYPE VBRK-VBELN
*" VALUE(I_NAST) TYPE NAST OPTIONAL
*" EXPORTING
*" VALUE(O_EBELN) TYPE EKKO-EBELN
*" EXCEPTIONS
*" DOC_NO_EXISTE
*"----------------------------------------------------------------------
data ls_knmt type knmt.
data ld_AMOUNT_EXTERNAL LIKE BAPICURR-BAPICURR.
nast = i_nast.
select single * into gs_vbrk from vbrk where vbeln = i_vbeln.
if sy-subrc <> 0.
if nast is NOT INITIAL.
CLEAR : syst-msgv1, syst-msgv2, syst-msgv3.
CALL FUNCTION 'NAST_PROTOCOL_INITIALIZE'.
sy-msgid = 'VN'.
sy-msgno = '056'.
sy-msgty = 'I'.
sy-msgv1 = 'ZSD_CREAR_PCOMPRA' .
sy-msgv2 = 'ENTRY'.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = sy-msgid
msg_nr = sy-msgno
msg_ty = sy-msgty
msg_v1 = sy-msgv1
msg_v2 = sy-msgv2
EXCEPTIONS
OTHERS = 0.
CLEAR : syst-msgv1, syst-msgv2, syst-msgv3.
syst-msgid = 'VF'.
syst-msgno = '041'.
syst-msgty = 'E'.
syst-msgv1 = i_vbeln.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = syst-msgid
msg_nr = syst-msgno
msg_ty = syst-msgty
msg_v1 = syst-msgv1
msg_v2 = syst-msgv2
msg_v3 = syst-msgv3
EXCEPTIONS
OTHERS = 1.
NAST-VSTAT = '2'.
PERFORM protocol_store USING nast-kappl
nast-kschl
CHANGING nast-cmfpnr.
PERFORM nast_update.
COMMIT WORK AND WAIT.
endif.
RAISE doc_no_existe.
endif.
if gs_vbrk-FKSTO = 'X'.
if nast is NOT INITIAL.
CLEAR : syst-msgv1, syst-msgv2, syst-msgv3.
CALL FUNCTION 'NAST_PROTOCOL_INITIALIZE'.
sy-msgid = 'VN'.
sy-msgno = '056'.
sy-msgty = 'I'.
sy-msgv1 = 'ZSD_CREAR_PCOMPRA' .
sy-msgv2 = 'ENTRY'.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = sy-msgid
msg_nr = sy-msgno
msg_ty = sy-msgty
msg_v1 = sy-msgv1
msg_v2 = sy-msgv2
EXCEPTIONS
OTHERS = 0.
CLEAR : syst-msgv1, syst-msgv2, syst-msgv3.
syst-msgid = 'VF'.
syst-msgno = '041'.
syst-msgty = 'E'.
syst-msgv1 = 'Factura está anulada'.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = syst-msgid
msg_nr = syst-msgno
msg_ty = syst-msgty
msg_v1 = syst-msgv1
msg_v2 = syst-msgv2
msg_v3 = syst-msgv3
EXCEPTIONS
OTHERS = 1.
NAST-VSTAT = '2'.
PERFORM protocol_store USING nast-kappl
nast-kschl
CHANGING nast-cmfpnr.
PERFORM nast_update.
COMMIT WORK AND WAIT.
endif.
RAISE doc_no_existe.
endif.
select * into table gt_vbrp from vbrp where vbeln = i_vbeln.
read TABLE gt_vbrp into gs_VBRP index 1.
*--------------------------------------------------------------------*
* datos cabecera
*--------------------------------------------------------------------*
CLEAR: gs_poheader,
gs_poheaderx.
*---- Clase Documento
gs_poheader-doc_type = 'ZCAD'.
gs_poheaderx-doc_type = 'X'.
*---- Proveedor
select single EIKTO into gs_poheader-VENDOR from KNVV
where KUNNR = gs_VBRK-KUNRG
and VKORG = gs_VBRK-VKORG
and VTWEG = gs_VBRK-VTWEG
and SPART = gs_VBRK-SPART.
* gs_poheader-VENDOR = gs_vbrk-kunrg.
* gs_poheader-VENDOR = 'COMPANY'.
gs_poheaderx-VENDOR = 'X'.
****FECHA CREACION
gs_poheader-CREAT_DATE = gs_VBRP-PRSDT.
gs_poheaderx-CREAT_DATE = 'X'.
*---- Org. de Compra
gs_poheader-purch_org = 'OCCA'.
gs_poheaderx-purch_org = 'X'.
*---- Grupo de Compra
gs_poheader-PUR_GROUP = 'C15'.
gs_poheaderx-PUR_GROUP = 'X'.
*---- Sociedad
gs_poheader-comp_code = '8000'.
gs_poheaderx-comp_code = 'X'.
****tipo de cambio
gs_poheader-EXCH_RATE = gs_VBRK-KURRF.
gs_poheaderx-EXCH_RATE = 'X'.
****tipo de cambio fijado
gs_poheader-EX_RATE_FX = 'X'. "gs_VBRK-CPKUR.
gs_poheaderx-EX_RATE_FX = 'X'.
****factura
gs_poheader-COLLECT_NO = gs_VBRK-VBELN.
gs_poheaderx-collect_no = 'X'.
****moneda
gs_poheader-CURRENCY = gs_VBRK-waerk.
gs_poheaderx-CURRENCY = 'X'.
****fecha documento
gs_poheader-DOC_DATE = gs_VBRP-PRSDT.
gs_poheaderx-doc_date = 'X'.
*--------------------------------------------------------------------*
* datos posición
*--------------------------------------------------------------------*
CLEAR : gt_poitem[],
gt_poitemx[],
gt_POSCHEDULE[],
gt_POSCHEDULEx[],
gt_POACCOUNT[],
gt_POACCOUNTx[],
gt_return[].
*---- Actualizar posiciones del documento
LOOP AT gt_vbrp INTO gs_vbrp.
clear: gs_poitemx,
gs_poitem,
gs_POSCHEDULE,
gs_POSCHEDULEx,
gs_POACCOUNT,
gs_POACCOUNTx,
ls_knmt.
*---- Posición
gs_poitem-po_item = gs_VBRP-POSNR.
gs_poitemx-po_item = gs_VBRP-POSNR.
gs_poitemx-po_itemx = 'X'.
gs_POSCHEDULE-po_item = gs_VBRP-POSNR.
gs_POSCHEDULEx-po_item = gs_VBRP-POSNR.
gs_POSCHEDULEx-po_itemx = 'X'.
gs_POACCOUNT-po_item = gs_VBRP-POSNR.
gs_POACCOUNTx-po_item = gs_VBRP-POSNR.
gs_POACCOUNTx-po_itemx = 'X'.
*---- Material
SELECT single * into ls_knmt FROM knmt
WHERE vkorg = gs_vbrk-vkorg
AND vtweg = gs_vbrk-vtweg
AND kunnr = gs_vbrk-kunrg
AND matnr = gs_vbrp-matnr.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = ls_knmt-KDMAT
IMPORTING
output = gs_poitem-material
EXCEPTIONS
length_error = 1
OTHERS = 2.
** tipo imputacion
case ls_knmt-VWPOS.
when 'ZK'."Centro de costo
gs_poitem-ACCTASSCAT = 'J'.
data: v_tabla like ausp occurs 0 with header line, "v_tabla TYPE TABLE OF ausp,
v_OBJECT like KSSK-OBJEK.
move gs_poitem-material to v_OBJECT.
CALL FUNCTION 'CLA2_GET_ALL_ALLOCATIONS'
EXPORTING
OBJECT = v_OBJECT
CLASS_TYPE = '001'
ALLOC_ID = 'O'
TABLE = 'MARA'
KEY_DATE = SY-DATUM
TABLES
VALUES = v_tabla
* ALLOCATIONS =
* EXCEPTIONS
* INVALID_CLASS_TYPE = 1
* INVALID_OBJECT = 2
* OTHERS = 3
.
IF SY-SUBRC = 0.
read TABLE v_tabla WITH KEY ATINN = 'ZMAT_CECO_CCNI'.
data V_CECO(10) type N.
move V_TABLA-ATWRT to V_CECO.
gs_POACCOUNT-COSTCENTER = V_CECO.
* move V_TABLA-ATWRT to gs_POACCOUNT-COSTCENTER.
* gs_POACCOUNT-COSTCENTER = '0080100100'.
gs_POACCOUNTx-COSTCENTER = 'X'.
ENDIF.
when 'ZP'."Elemento PEP
gs_poitem-ACCTASSCAT = 'X'.
data V_IHREZ like vbkd-IHREZ.
select single IHREZ into V_IHREZ from vbkd
where VBELN = GS_VBRP-AUBEL
and POSNR = GS_VBRP-AUPOS.
if sy-subrc <> 0.
select single IHREZ into V_IHREZ from vbkd
where VBELN = GS_VBRP-AUBEL.
endif.
data: V_EQUNR(18) type N..
move V_IHREZ to V_EQUNR.
* CONDENSE V_EQUNR.
select single ZZPOSID into gs_POACCOUNT-WBS_ELEMENT from EQUI
where EQUNR = V_EQUNR.
gs_POACCOUNTx-WBS_ELEMENT = 'X'.
endcase.
gs_poitemx-ACCTASSCAT = 'X'.
* gs_poitem-material = ls_knmt-KDMAT.
gs_poitemx-material = 'X'.
*---- Cantidad
gs_poitem-quantity = gs_VBRP-FKIMG.
gs_poitemx-quantity = 'X'.
***fecha entrega
gs_POSCHEDULE-DELIVERY_DATE = gs_VBRP-PRSDT.
gs_POSCHEDULEx-DELIVERY_DATE = gs_VBRP-PRSDT.
* monto neto
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
CURRENCY = gs_vbrk-waerk
AMOUNT_INTERNAL = gs_VBRP-NETWR
IMPORTING
AMOUNT_EXTERNAL = ld_AMOUNT_EXTERNAL.
.
move ld_AMOUNT_EXTERNAL to gs_poitem-NET_PRICE .
* gs_poitem-NET_PRICE = gs_VBRP-NETWR.
gs_poitemx-NET_PRICE = 'X'.
gs_poitem-PO_PRICE = '2'.
gs_poitemx-PO_PRICE = 'X'.
*gs_poaccount-NET_VALUE =
*gs_poaccountx-NET_VALUE =
*---- Centro Destino
gs_poitem-plant = 'CC04'.
gs_poitemx-plant = 'X'.
*---- División
gs_POACCOUNT-BUS_AREA = 'CL01'.
gs_POACCOUNTx-BUS_AREA = 'X'.
***ind impuesto
case gs_vbrk-FKART.
when 'ZFEA'.
gs_poitem-TAX_CODE = 'A0'.
gs_poitemx-TAX_CODE = 'X'.
when 'ZFEN'.
gs_poitem-TAX_CODE = 'E0'.
gs_poitemx-TAX_CODE = 'X'.
endcase.
* nro necesidad
gs_poitem-TRACKINGNO = gs_VBRP-vbelv.
gs_poitemx-TRACKINGNO = 'X'.
* Verif MIGO
gs_poitem-GR_BASEDIV = space.
gs_poitemx-GR_BASEDIV = 'X'.
*---- Grabar Datos
APPEND gs_poitem TO gt_poitem.
APPEND gs_poitemx TO gt_poitemx.
append gs_POSCHEDULE to gt_POSCHEDULE.
append gs_POSCHEDULEx to gt_POSCHEDULEx.
append gs_POACCOUNT to gt_POACCOUNT.
append gs_POACCOUNTx to gt_POACCOUNTx.
ENDLOOP.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = gs_poheader
poheaderx = gs_poheaderx
IMPORTING
exppurchaseorder = gd_ebeln
TABLES
return = gt_return
poitem = gt_poitem
poitemx = gt_poitemx
POSCHEDULE = gt_POSCHEDULE
POSCHEDULEx = gt_POSCHEDULEx
POACCOUNT = gt_POACCOUNT
POACCOUNTx = gt_POACCOUNTx.
*error
LOOP AT gt_return into gs_return WHERE type = 'E'
OR type = 'A'.
ENDLOOP.
IF sy-subrc = 0.
if nast is NOT INITIAL.
CLEAR : syst-msgv1, syst-msgv2, syst-msgv3.
CALL FUNCTION 'NAST_PROTOCOL_INITIALIZE'.
sy-msgid = 'VN'.
sy-msgno = '056'.
sy-msgty = 'I'.
sy-msgv1 = 'ZSD_CREAR_PCOMPRA' .
sy-msgv2 = 'ENTRY'.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = sy-msgid
msg_nr = sy-msgno
msg_ty = sy-msgty
msg_v1 = sy-msgv1
msg_v2 = sy-msgv2
EXCEPTIONS
OTHERS = 0.
CLEAR : syst-msgv1, syst-msgv2, syst-msgv3.
syst-msgid = gs_return-id.
syst-msgno = gs_return-number.
syst-msgty = 'E'.
syst-msgv1 = gs_return-message_v1.
syst-msgv2 = gs_return-message_v2.
syst-msgv3 = gs_return-message_v3.
syst-msgv4 = gs_return-message_v4.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = syst-msgid
msg_nr = syst-msgno
msg_ty = syst-msgty
msg_v1 = syst-msgv1
msg_v2 = syst-msgv2
msg_v3 = syst-msgv3
EXCEPTIONS
OTHERS = 1.
NAST-VSTAT = '2'.
PERFORM protocol_store USING nast-kappl
nast-kschl
CHANGING nast-cmfpnr.
PERFORM nast_update.
COMMIT WORK AND WAIT.
endif.
return. "<------------------------
*---- Grabar Documento
elseIF ( NOT gd_ebeln IS INITIAL ).
if nast is NOT INITIAL.
CLEAR : syst-msgv1, syst-msgv2, syst-msgv3.
CALL FUNCTION 'NAST_PROTOCOL_INITIALIZE'.
sy-msgid = 'VN'.
sy-msgno = '056'.
sy-msgty = 'S'.
sy-msgv1 = 'ZSD_CREAR_PCOMPRA' .
sy-msgv2 = 'ENTRY'.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = sy-msgid
msg_nr = sy-msgno
msg_ty = sy-msgty
msg_v1 = sy-msgv1
msg_v2 = sy-msgv2
EXCEPTIONS
OTHERS = 0.
CLEAR : syst-msgv1, syst-msgv2, syst-msgv3,syst-msgv4.
syst-msgid = '06'.
syst-msgno = '017'.
syst-msgty = 'S'.
syst-msgv1 = 'PED.CCNI'.
syst-msgv2 = gd_ebeln.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = syst-msgid
msg_nr = syst-msgno
msg_ty = syst-msgty
msg_v1 = syst-msgv1
msg_v2 = syst-msgv2
EXCEPTIONS
OTHERS = 1.
NAST-VSTAT = '1'.
PERFORM protocol_store USING nast-kappl
nast-kschl
CHANGING nast-cmfpnr.
PERFORM nast_update.
endif.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
o_ebeln = gd_ebeln.
Endif.
ENDFUNCTION.
FORM PROTOCOL_STORE USING VALUE(PI_KAPPL) LIKE NAST-KAPPL
VALUE(PI_KSCHL) LIKE NAST-KSCHL
CHANGING P_CMFPNR LIKE NAST-CMFPNR.
DATA: L_NAST_CMFPNR LIKE NAST-CMFPNR.
* store protocol entries for this message type?
CALL FUNCTION 'NAST_PROTOCOL_STORE'
IMPORTING
MSG_CMFPNR = L_NAST_CMFPNR
EXCEPTIONS
NO_PROTOCOL_UPDATE = 01.
IF SY-SUBRC EQ 0.
P_CMFPNR = L_NAST_CMFPNR.
ENDIF.
ENDFORM.
FORM NAST_UPDATE .
UPDATE NAST.
IF SY-SUBRC NE 0.
INSERT NAST.
IF SY-SUBRC NE 0.
ENDIF.
ENDIF.
ENDFORM. " NAST_UPDATE