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.




jueves, 24 de julio de 2014

Función para obtener las Ordenes de Transporte asociadas a un Objeto (SAP-ABAP-Funciones)

Primero, debemos crear la siguiente estructura (si cambian el nombre de la estructura, deberán cambiarlo en el código también):



Esto es solo para agregar la descripción de la OT.

Ahora creamos un grupo de funciones y un módulo de funciones:




En el "Import" del módulo:





En "Tablas" del módulo:




Y finalmente agregamos este código en "Cód.fte.":

  FIELD-SYMBOLS:
  <fs_head> TYPE zcfcl_es_e070,
  <fs_e070> TYPE e070.
  DATA:
  lt_e070      TYPE TABLE OF e070,
  lt_e071      TYPE TABLE OF e071,
  lt_e07t       TYPE STANDARD TABLE OF e07t,
  ls_e07t      TYPE e07t,
  ls_head     TYPE zcfcl_es_e070.

  CHECK iv_obj_name IS NOT INITIAL.
  REFRESHlt_e071[]et_detail[]lt_e070et_head[].
  SELECT FROM e071 INTO TABLE lt_e071
  WHERE obj_name EQ iv_obj_name.
  IF sy-subrc EQ 0.
    SELECT FROM e071 INTO TABLE et_detail
    FOR ALL ENTRIES IN lt_e071
    WHERE trkorr EQ lt_e071-trkorr.
    IF sy-subrc EQ 0.
      SELECT FROM e070 INTO TABLE lt_e070
      FOR ALL ENTRIES IN lt_e071
      WHERE trkorr EQ lt_e071-trkorr.
      IF sy-subrc EQ 0.
        SELECT FROM e070 INTO CORRESPONDING FIELDS OF TABLE et_head
        FOR ALL ENTRIES IN lt_e070
        WHERE trkorr EQ lt_e070-strkorr.
        IF sy-subrc NE 0.
          UNASSIGN<fs_e070>.
          CLEARls_head.
          LOOP AT lt_e070 ASSIGNING <fs_e070>.
            MOVE-CORRESPONDING <fs_e070> TO ls_head.
            APPEND ls_head TO et_head.
            CLEARls_head.
          ENDLOOP.
        ENDIF.

        SELECT FROM e07t INTO TABLE lt_e07t
        FOR ALL ENTRIES IN et_head
        WHERE trkorr EQ et_head-trkorr
          AND langu  EQ sy-langu.
        IF sy-subrc EQ 0.
          UNASSIGN <fs_head>.
          LOOP AT et_head ASSIGNING <fs_head>.
            CLEARls_e07t.
            READ TABLE lt_e07t INTO ls_e07t WITH KEY trkorr <fs_head>-trkorr.
            IF sy-subrc EQ 0.
              <fs_head>-as4text ls_e07t-as4text.
            ENDIF.
          ENDLOOP.
        ENDIF.

      ENDIF.
    ENDIF.
  ENDIF.



martes, 17 de junio de 2014

Form para separar prefijo y folio del campo XBLNR (SAP - ABAP - Funciones)

Para algunos países se utilizan los folio pre-impresos o pre-numerados, a continuación una form que nos hace el split del prefijo y el folio sobre el campo XBLNR:

DATA: lv_xblnr TYPE xblnr_v1.


lv_xblnr <fs_vbrk>-xblnr.

PERFORM f_split_xblnr USING    lv_bukrs  " Sociedad
                      CHANGING lv_xblnr. " Nro. Docto. Ref.


*&--------------------------------------------------------------*
*&      Form  F_SPLIT_XBLNR
*&--------------------------------------------------------------*
 FORM f_split_xblnr USING    p_v_bukrs TYPE t001-bukrs
                    CHANGING p_v_folio.
 

 DATA: lv_rgtno TYPE idcn_loma-rgtno,
       lv_invno TYPE idcn_loma-invfr,
       lv_xblnr TYPE bkpf-xblnr,
       lv_invtp TYPE idcn_loma-invtp.
 CHECK p_v_folio IS NOT INITIAL. 

  lv_xblnr p_v_folio.

  CALL FUNCTION 'XBLNR_BUILD_AND_SPLIT_PECL'  " PECL = Perú y Chile
    EXPORTING
      i_bukrs            p_v_bukrs
*     I_BUILD            =
*     I_RGTNO            =
*     I_INVNO            =
      i_xblnr            lv_xblnr
*     I_INVTP            =
    IMPORTING
      e_rgtno            lv_rgtno   " Nos retorna el prefijo 
      e_invno            lv_invno   " Nos retorna el folio 
*     e_xblnr            =
      e_invtp            lv_invtp
    EXCEPTIONS
*     PARAMETER_WRONG    = 1
      not_found          2
      xblnr_format_wrong 3
      OTHERS             4.
  IF sy-subrc <> OR lv_invno IS INITIAL" Note 356790
    RAISE lot_not_found.
  ELSE.
    p_v_folio lv_invno.
  ENDIF.

ENDFORM.                    " F_SPLIT_XBLNR


También existe una función que no es específica para algún país:

XBLNR_BUILD_AND_SPLIT


martes, 1 de abril de 2014

Reemplazar caracteres en una cadena con TRANSLATE (SAP-ABAP)

Ejemplo:
DATA:
lv_ean(10)    VALUE 'A1D1B1C1A1',
lv_change(54) VALUE 'A B C D '.



La sentencia TRANSLATE, para este caso, reemplaza cada caracter contenido en la variable LV_CHANGE, por el caracter que le sigue (espacio para todas las letras):

TRANSLATE lv_ean USING lv_change.


El resultado inicial sería: lv_ean = ' 1 1 1 1 1'

CONDENSE lv_ean NO-GAPS.


El resultado final sería: lv_ean = '11111'