lunes, 22 de enero de 2018

Obtener banco de proveedor (Get bank from a creditor)

DATA:
 s_lfbk TYPE lfbk,
 s_bnka TYPE bnka.

 CLEARs_lfbk.
  SELECT SINGLE FROM lfbk INTO s_lfbk
  WHERE lifnr EQ lfa1-lifnr.
  IF sy-subrc EQ 0.

  CLEARs_bnka.
    CALL FUNCTION 'READ_BANK_ADDRESS'
      EXPORTING
        bank_country s_lfbk-banks
        bank_number  s_lfbk-bankl
      IMPORTING
        bnka_wa      s_bnka
      EXCEPTIONS
        not_found    1
        OTHERS       2.
    IF sy-subrc EQ 0.
    ENDIF.

  ENDIF.

martes, 13 de junio de 2017

Programa ejemplo manejo FIELD SYMBOLS (ABAP, FIELD SYMBOLS)

He aquí un ejemplo sencillo que puede tener diversas aplicaciones.

REPORT  ztest_field_symbol.

PARAMETERS:
p_bukrs TYPE bseg-bukrs,
p_gjahr TYPE bseg-gjahr,
p_belnr TYPE bseg-belnr.

DATA:
t_bsak TYPE STANDARD TABLE OF bsak,
t_bsik TYPE STANDARD TABLE OF bsik,
BEGIN OF t_data OCCURS 0,
  belnr  TYPE belnr_d,
  augbl  TYPE augbl,
END OF t_data,
s_data LIKE LINE OF t_data.
FIELD-SYMBOLS:
<bs*k_tab> TYPE ANY TABLE,
<bs*k> TYPE any,
<any> TYPE any.

REFRESHt_bsak[]t_bsik[].
SELECT FROM bsak INTO TABLE t_bsak
WHERE augbl EQ p_belnr
AND bukrs EQ p_bukrs
AND belnr NE p_belnr.
IF sy-subrc NE 0.
  SELECT FROM bsik INTO TABLE t_bsik
  WHERE bukrs EQ p_bukrs
  AND belnr EQ p_belnr
  AND gjahr EQ p_gjahr.
  IF sy-subrc EQ 0.
  ENDIF.
ENDIF.

BREAK-POINT.

IF t_bsak[] IS NOT INITIAL.
  ASSIGN TABLE FIELD t_bsak TO <bs*k_tab>.
ELSE.
  ASSIGN TABLE FIELD t_bsik TO <bs*k_tab>.
ENDIF.

REFRESHt_data[]CLEARs_data.
UNASSIGN <bs*k>.
LOOP AT <bs*k_tab> ASSIGNING <bs*k>.

  UNASSIGN<any>.
  ASSIGN COMPONENT 'BELNR' OF STRUCTURE <bs*k> TO <any>.
  IF sy-subrc EQ 0.
    MOVE <any> TO s_data-belnr.
  ENDIF.

  UNASSIGN<any>.
  ASSIGN COMPONENT 'AUGBL' OF STRUCTURE <bs*k> TO <any>.
  IF sy-subrc EQ 0.
    MOVE <any> TO s_data-augbl.
  ENDIF.
  APPEND s_data TO t_data.
  CLEARs_data.

ENDLOOP.

BREAK-POINT.

Llenar RANGO con valores de SET DE DATOS (ABAP, GS01,GS02)

Otra forma de llenar un RANGO con los valores que agregamos a un SET DE DATOS creados mediante la transacción GS01 y GS02.

REPORT  ztest_set.

DATA:
v_setname TYPE setheader-setname VALUE 'Z_DS_EXTZONE',
s_setheader TYPE setheader,
t_setleaf TYPE STANDARD TABLE OF setleaf.
FIELD-SYMBOLS:
<sl> TYPE setleaf.
RANGESr_zexcd FOR t7cl13-zexcd.

CLEARs_setheaderr_zexcdREFRESHt_setleaf[]r_zexcd[].
SELECT SINGLE FROM setheader INTO s_setheader
WHERE setname EQ v_setname.
IF sy-subrc EQ 0.
  SELECT FROM setleaf INTO TABLE t_setleaf
  WHERE setclass EQ s_setheader-setclass
  AND subclass EQ s_setheader-subclass
  AND setname EQ s_setheader-setname.
  IF sy-subrc EQ 0.
    UNASSIGN<sl>.
    LOOP AT t_setleaf ASSIGNING <sl>.
      r_zexcd-sign <sl>-valsign.
      r_zexcd-option <sl>-valoption.
      r_zexcd-low <sl>-valfrom.
      r_zexcd-high <sl>-valto.
      APPEND r_zexcd.
      CLEAR r_zexcd.
    ENDLOOP.
  ENDIF.
ENDIF.

jueves, 7 de abril de 2016

Form para escribir un archivo respetando n espacios en blanco a la izquierda. (SAP-ABAP- TRANSFER ... TO...)

*&---------------------------------------------------------------------*
*&      Form  F_TRANSFER_FILE
*&---------------------------------------------------------------------*
FORM f_transfer_file 
TABLES  pt_outtab LIKE  t_ot           " Tabla con datos a tranferir
USING    pv_target TYPE eps2path  " Ruta concatenada con nombre de archivo
                                                           " (ej. \\10.170.80.101\BANCO\ARCHIVO_BANCO.txt )
CHANGING pv_subrc.

  FIELD-SYMBOLS:
  <ot> LIKE LINE OF pt_outtab.
  DATA:
  lv_len TYPE VALUE 300" Largo de líne a escribir

  OPEN DATASET pv_target FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.

  IF pt_outtab[] IS NOT INITIAL.
    UNASSIGN<ot>.
    LOOP AT pt_outtab ASSIGNING <ot>.
      " Si la línea contiene 200 caracteres, en el archivo generado, lo restante (100) será con       " espacios en blanco
      TRANSFER <ot> TO pv_target LENGTH lv_len.
    ENDLOOP.
  ENDIF.

  CLOSE DATASET pv_target.

  MOVE sy-subrc TO pv_subrc.

ENDFORM.                    " F_TRANSFER_FILE

miércoles, 31 de diciembre de 2014

Función para obtener atributos de un ELEMENTO DE DATOS o campos de una TABLA (SAP-ABAP-Funciones)

Estimados, esta función puede ser útil:

  lv_tabname = 'MARA'. "(o BUKRS por ejemplo)

  CALL FUNCTION 'DDIF_FIELDINFO_GET'
    EXPORTING

      tabname        lv_tabname  " Elemento de datos o tabla
      langu          sy-langu
      all_types      'X'
    IMPORTING
      dfies_wa       ls_dfies_wa " Retorna atributos del obejto
    TABLES
      dfies_tab      lt_dfies_tab[] " Retorna campos de una tabla
    EXCEPTIONS
      not_found      1
      internal_error 2
      OTHERS         3.
  IF sy-subrc NE 0.
*  Implement suitable error handling here
  ENDIF.

lunes, 13 de octubre de 2014

FORM para formatear RUT (ABAP... RUT= identificador fiscal)



Llamada ejemplo:


paval = '112272682'.

PERFORM f_rut  USING  paval  CHANGING rut.

La variable rut será igual a 11.227.268-2.


viernes, 25 de julio de 2014

Trabajando con Ordenes de Trasporte de Copia (SAP-ABAP-Funcionalidad)

A menudo debemos transportar Ordenes de Transporte al ambiente de QAS desde Dasarrollo para hacer pruebas. Para no liberar la Orden que hemos creado, la cual posteriormente pasara también a QAS y luego a Producción, podemos crear una OT de "Copia", la cual tiene la particularidad que termina su ciclo en el sistema de destino elegido al crearla, para ello haremos lo siguiente:

1)  Creamos la OT de Copia (Trx SE09 o SE10):





    Debemos poner el sistema destino con su mandante correspondiente y grabamos....



    

   Por otra parte, tenemos la OT Original o Principal..... de esta
, tomamos la tarea o tareas, la(s) cual(es) incluiremos en nuestra OT de Copia....     



    Se incluye la tarea en la OT de Copia....y aceptar...


     
    Finalmente liberamos la OT de Copia.....(F9)


     

Este procedimiento lo podemos ejecutar cuantas veces sea necesario, así cuando liberemos la OT Original, será solo una OT para el proyecto o mejora que incluirá todos los objetos necesarios.