Archivo

Posts Tagged ‘EKKO’

Select dinámico con Field-Symbols

Caso: se desea realizar un Select utilizando variables en las condiciones

Solución: usamos un select dinámico. Ver que para filtrar campos caracteres se agregan doble comillas simples.

REPORT  zselect_dinamico.
 
DATA:   lt_ekko       TYPE TABLE OF ekko,
        lc_tabname    TYPE tabname,
        lc_tabint     TYPE tabname,
        lc_where      TYPE string.
 
FIELD-SYMBOLS:  <fs_tab> TYPE STANDARD TABLE,
                <fs_it> TYPE STANDARD TABLE.
 
lc_tabname = 'EKKO'.
lc_tabint  = 'LT_EKKO'.
lc_where   = 'BUKRS EQ 1000 AND BSART EQ ''NB'''.
 
ASSIGN (lc_tabint) TO <fs_it>.
REFRESH <fs_it>.
SELECT *
  INTO TABLE <fs_it>
  FROM (lc_tabname)
  WHERE (lc_where).
Anuncios

Ocultar botón RETENER (HOLD) en ME21n

Caso: se busca ocultar el botón RETENER (HOLD) que aparece en la cabecera del pedido en la ME21n y ME22n.

Solución: para ello hay una BADI en la SPRO, en la siguiente ruta:

SPRO-> Gestión de materiales -> Compras -> Add Ins empresariales para compras -> BAdI: Desactivar la función Retener para el pedido Enjoy

Hacemos click en el botón de ejecutar y nos abre la siguiente pantalla, en donde le ponemos un nombre a la implementación:

Nos abre la siguiente pantalla en donde indicamos el texto breve para la implementación y activamos todo. Nos va a pedir orden de transporte para ello.

Hacemos doble click en la clase ZCL_IMM_MM_ME_HOLD_PO para agregar el código necesario. La idea para ocultarlo es que el parámetro CH_ALLOWED esté en vacío. En mi caso sólo era para el tipo de documento ZSSM.

Grabamos, activamos y listo.

Al ingresar a la ME21n, con cualquier tipo de pedido (en el caso NB) aparece el botón…

Ingresando con el tipo de pedido ZSSM, ahora no aparece:

Les dejo algunas notas al respecto:

Note 390117 – ME21N: Prevent holding of purchase orders

Note 1627441 – ME2L Held PO’s are always shows in EHP4

Categorías:ABAP/4 Etiquetas: , , , , , ,

EXTENSIONIN en BAPI_PO_CREATE

Caso: completo un post anterior, en el cual no había podido utilizar el extensionin para la BAPI_PO_CREATE .

El problema que no me daba cuenta era que había que usar ‘BAPI_TE_PO_HEADER’ y ‘BAPI_TE_PO_HEADERX’ en la estructura. Notar que son distintas a cuando usé la BAPI_PO_CREATE1.

Sólo pego la parte importante, lo demás está por todos lados si lo buscan en Internet.

DATA: gs_mepoheader TYPE bapi_te_mepoheader,
gs_mepoheaderx TYPE bapi_te_mepoheaderx,
gs_extension_in TYPE bapiparex.

gs_mepoheader-zzcod_prop = ’77’. " Valor de mi campo Z

CLEAR gs_extension_in.
gs_extension_in-structure = ‘BAPI_TE_PO_HEADER’.
gs_extension_in-valuepart1 = gs_mepoheader.
APPEND gs_extension_in TO f1_extensionin.

gs_mepoheaderx-zzcod_prop = ‘X’.

CLEAR gs_extension_in.
gs_extension_in-structure = ‘BAPI_TE_PO_HEADERX’.
gs_extension_in-valuepart1 = gs_mepoheaderx.
APPEND gs_extension_in TO f1_extensionin.

CLEAR f1_return[].

CALL FUNCTION ‘BAPI_PO_CREATE’
EXPORTING
po_header = f1_po_header
skip_items_with_error = space
IMPORTING
purchaseorder = f1_purchaseorder
TABLES
po_items = f1_po_items
po_item_schedules = f1_po_item_schedules
po_item_account_assignment = f1_po_item_account_assignment
return = f1_return
po_services = f1_po_services
po_srv_accass_values = f1_po_srv_accass_values
extensionin = f1_extensionin.

Categorías:ABAP/4, BAPIs Etiquetas: , , ,

Liberar pedido de Compras con BAPI_PO_RELEASE

Liberar pedido de Compras con BAPI_PO_RELEASE

Caso: se busca liberar un pedido de compras recién creado, con la BAPI_PO_RELEASE.

Nota: abajo les paso algunos links, ya que no me puse a averiguar mucho del tema porque al final para el caso que buscaba no se va a usar estrategia (digamos que trabajé de más, pero por ello dejo la entrada en el BLOG). Así que sólo espero que de algo les sirva, ya que está bastante incompleto el post (me hubiera gustado probar más sobre el tema).

Algunos tips:

– Hay que tener cuidado es con la estrategia de liberación. En mi caso hay una sola estrategia (código/nivel) de liberación, pero puede darse el caso de que haya más niveles y ahí hay que ver como tratarlo.

– El objeto de autorización necesario para ejecutar la BAPI es: M_EINK_FRG

AUTHORITY-CHECK OBJECT ‘M_EINK_FRG’

ID ‘FRGGR’ FIELD ekko-frggr

ID ‘FRGCO’ FIELD po_rel_code.

– La BAPI_PO_RELEASE parece que no necesitaría un COMMIT, ya que posee un parámetro en su llamada

– También puede serles útil saber que existe una BAPI para restaurar la liberación del pedido, llamada BAPI_PO_RESET_RELEASE.

FORM liberar_pedido USING p_ebeln TYPE ebeln.

DATA: l_grupo TYPE frggr,
l_est TYPE frgsx,
wa_t16fs TYPE t16fs,
lt_return TYPE bapireturn OCCURS 0,
l_rel_status_new TYPE bapimmpara-rel_status,
l_rel_indicator_new TYPE bapimmpara-po_rel_ind,
l_ret_code TYPE sy-subrc.

* Busco el grupo de liberación para la orden de compra.
SELECT SINGLE frggr frgsx
FROM ekko
INTO (l_grupo, l_est)
WHERE ebeln EQ p_ebeln.

* En base al grupo de la orden de compra traigo todos los códigos de liberación.
SELECT SINGLE *
FROM t16fs
INTO wa_t16fs
WHERE frggr EQ l_grupo
AND frgsx EQ l_est.

CALL FUNCTION ‘BAPI_PO_RELEASE’
EXPORTING
purchaseorder = p_ebeln
po_rel_code = wa_t16fs-frgc1
* USE_EXCEPTIONS = ‘X’
* NO_COMMIT = ‘ ‘
IMPORTING
rel_status_new = l_rel_status_new
rel_indicator_new = l_rel_indicator_new
ret_code = l_ret_code
TABLES
return = lt_return
EXCEPTIONS
authority_check_fail = 1
document_not_found = 2
enqueue_fail = 3
prerequisite_fail = 4
release_already_posted = 5
responsibility_fail = 6
OTHERS = 7.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.

* Espera hasta la actualización del documento (hasta que cambie el

* indicador de liberada)
DO 20 TIMES.
SELECT SINGLE mandt
FROM ekko
INTO ekko-mandt
WHERE ebeln = p_ebeln
AND frgke = ‘L’
AND frgzu = ‘X’.

IF sy-subrc = 0.
EXIT.
ELSE.
WAIT UP TO 3 SECONDS.
ENDIF.
ENDDO.

ENDIF.

ENDFORM. “liberar_pedido

Algunos links:

http://www.mundosap.com/foro/showthread.php?t=16140

http://www.se80.co.uk/sapfms/b/bapi/bapi_po_release.htm

http://scn.sap.com/message/7896454#7896454