Archivo

Posts Tagged ‘T16FS’

Fieldsymbols – Uso simple en T16FS

Caso: se desea acceder a cada campo donde se encuentran los códigos de liberación de la tabla T16FS (Estrategias de liberación).

Solución: usamos fieldsymbols para dinámicamente acceder a cada campo numerado del 1 al 8.

FIELD-SYMBOLS: <fs>.
 
DATA: lw_t16fs       type t16fs,
      lc_cant        TYPE c,
      lc_variable    TYPE string.
 
SELECT SINGLE * INTO lw_t16fs FROM t16fs
  WHERE frggr = lw_ekko-frggr   " Grupo de liberación
    AND frgsx = lw_ekko-frgsx.  " Estrategia liberación
 
DO 8 TIMES.
  WRITE sy-index TO lc_cant.
  CONCATENATE 'LW_T16FS-FRGC' lc_cant INTO lc_variable.
  ASSIGN (lc_variable) TO <fs>.
 
  WRITE /: 'Código de liberación:', lc_cant, '-', lc_variable, '. Valor:', <fs>.
 
ENDDO.
Anuncio publicitario
Categorías: ABAP/4 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