Difference between revisions of "SAP MM BAPI OC"
From SapWiki
| (One intermediate revision by the same user not shown) | |||
| 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)=== | ||
| − | *----------------------------------------------------------------------* | + | <nowiki>*----------------------------------------------------------------------* |
| − | + | * 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. | + | 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. | ENDIF. | ||
| − | + | ENDFORM. | |
| − | + | ||
| − | + | FORM NAST_UPDATE . | |
| − | + | UPDATE NAST. | |
| − | + | IF SY-SUBRC NE 0. | |
| − | + | INSERT NAST. | |
| − | + | IF SY-SUBRC NE 0. | |
| − | + | ENDIF. | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
ENDIF. | ENDIF. | ||
| − | + | ENDFORM. " NAST_UPDATE</nowiki> | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
Latest revision as of 22:06, 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