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'

lunes, 24 de marzo de 2014

Visualizar formulario sin cuadro de diálogo (SAP - ABAP - SMARTFORMS)

      La siguiente parametrización permite la visualización previa de un formulario sin cuadro de diálogo:

ls_control_param-no_dialog  abap_on.  " SIN VENTANA DIALOGO
ls_control_param-preview    abap_on.  " CON VISUALIZAC.PREVIA
ls_control_param-device     'PRINTER'.
ls_output_options-tddest    'LCL'.    " DISPOSITIVO DE SALIDA
ls_output_options-tdnoprint abap_off" IMPRIMIR
ls_output_options-tdarmod   '1'.      " SOLO IMPRIMIR 

      
CALL FUNCTION lv_fm_name
        
EXPORTING
*         ARCHIVE_INDEX        =
*         ARCHIVE_INDEX_TAB    =
*         ARCHIVE_PARAMETERS   =

          control_parameters   
ls_control_parameters
*         MAIL_APPL_OBJ        =
*         MAIL_RECIPIENT       =
*         MAIL_SENDER          =

          output_options       
ls_output_options
          user_settings        
= abap_off
          is_xekko             
p_s_xekko
          is_xpekko            
p_s_xpekko
*        IMPORTING
*         DOCUMENT_OUTPUT_INFO =
*          job_output_info      = ls_job_output_info
*         JOB_OUTPUT_OPTIONS   =

        
TABLES
          it_xekpa             
p_t_xekpa[]
          it_xekpo             
p_t_xekpo[]
          it_xpekpo            
p_t_xpekpo[]
          it_xeket             
p_t_xeket[]
          it_xekkn             
p_t_xekkn[]
          it_xekek             
p_t_xekek[]

          it_xekeh             p_t_xekeh[]
          it_xtkomv            
p_t_xtkomv[]
          it_detocn            
p_t_detcon[]
          it_serv              
p_t_detser[]
        
EXCEPTIONS
          formatting_error     
1
          internal_error       
2
          send_error           
3
          user_canceled        
4
          
OTHERS               5.

Imprimir SMARTFORMS solo en SPOOL (SAP - ABAP - SMARTFORMS)

      Esta parametrización permite imprimir un formulario directamente al SPOOL sin opción a previsualización:

ls_composer_param-tdnoprev  abap_on.  " SIN VISUALIZ. PREVIA
ls_composer_param
-tdnoprint abap_off" NO IMPRIMIR
ls_composer_param
-tdnoarch  abap_off" NO ARCHIVAR
ls_composer_param
-tddest    'LOCAL'.  " DISPOSITIVO DE SALIDA
ls_composer_param
-tdimmed   abap_off" SIN SALIDA INMEDIATA
ls_composer_param
-tddelete  abap_off" NO BORRAR TRAS SALIDA
ls_composer_param
-tdnewid   abap_on.  " NUEVA ORDEN SPOOL
ls_composer_param
-tdfinal   abap_on.  " CERRAR ORDEN DE SPOOL
ls_composer_param
-tdarmod   '1'.      " SOLO IMPRIMIR
ls_composer_param
-tdcopies  '001'.    " CANTIDAD DE COPIAS

ls_control_param
-no_dialog  abap_on.  " SIN VENTANA DIALOGO
ls_control_param
-preview    abap_off" SIN VISUALIZ. PREVIA
ls_control_param
-device     'PRINTER'.DISPOSITIVO


      
CALL FUNCTION lv_fname
        
EXPORTING
*         archive_index      = toa_dara
*         archive_parameters = arc_params

          control_parameters 
ls_control_param
          output_options     
ls_composer_param
          user_settings      
abap_off
          p_gjahr            
p_gjahr
        
TABLES
          gt_cabecera        
gt_head[]
          gt_detalle         
gt_detail[]
        
EXCEPTIONS
          formatting_error   
1
          internal_error     
2
          send_error         
3
          user_canceled      
4
          
OTHERS             5.

      
IF sy-subrc <> 0.
        
MESSAGE e006(zcfcl_fi_0003).
      
ENDIF.

lunes, 27 de enero de 2014

Función para obtener los impuestos según país (SAP-ABAP)

Import de la función:



Tabla de retorno de la función:






Creación de estructura en la SE11:





Código fuente de la función:

 DATAlt_data TYPE STANDARD TABLE OF zcfcl_fi_es_tax,
        ls_data TYPE zcfcl_fi_es_tax.

  DATAls_t007a TYPE t007a,
        lt_t007a TYPE STANDARD TABLE OF t007a,
        lt_ftaxp TYPE STANDARD TABLE OF ftaxp,
        ls_ftaxp TYPE ftaxp,
        lv_kalsm TYPE t005-kalsm,
        lv_txjcd TYPE txjcd.

  DATAlv_valor TYPE DECIMALS 2.

  CONSTANTSlc_fix_kappl TYPE kappl VALUE 'TX'.

  CLEAR lv_kalsm.
  REFRESHlt_t007a[]lt_ftaxp[]et_data[].
  SELECT SINGLE kalsm FROM t005 INTO lv_kalsm
  WHERE land1 EQ iv_land1.
  IF sy-subrc EQ 0.
    CLEAR lv_txjcd.
    SELECT SINGLE txjcd FROM ttxj INTO lv_txjcd
    WHERE kalsm EQ lv_kalsm.
    IF sy-subrc NE OR lv_txjcd IS INITIAL.
      MOVE 'X' TO lv_txjcd.
    ENDIF.

    SELECT FROM t007a INTO TABLE lt_t007a
    WHERE kalsm EQ lv_kalsm.
    IF sy-subrc EQ 0.
      CLEAR ls_t007a.
      LOOP AT lt_t007a INTO ls_t007a.

        CALL FUNCTION 'GET_TAX_PERCENTAGE'
          EXPORTING
            aland   iv_land1
            datab   sy-datum
            mwskz   ls_t007a-mwskz
            txjcd   lv_txjcd
          TABLES
            t_ftaxp lt_ftaxp.

        IF lt_ftaxp[] IS NOT INITIAL.
          CLEAR ls_ftaxp.
          READ TABLE lt_ftaxp INTO ls_ftaxp INDEX 1.
          IF sy-subrc EQ 0.
            MOVE-CORRESPONDING ls_ftaxp TO ls_data.
            MOVE ls_t007a-mwskz TO ls_data-mwskz.
            lv_valor ls_ftaxp-kbetr / 10.
            WRITE  lv_valor TO ls_data-tax DECIMALS .
            REPLACE ALL OCCURRENCES OF '.' IN ls_data-tax WITH ','.
            CONDENSE ls_data-tax.
            APPEND ls_data TO lt_data.
          ENDIF.
        ENDIF.

      ENDLOOP.

    ENDIF.

  ENDIF.

  MOVE lt_data[] TO et_data[].

Form para obtener texto (SAP-ABAP... FM READ_TEXT)

*&---------------------------------------------------------------------*
*&      Form  F_GET_TEXT
*&---------------------------------------------------------------------*
FORM f_get_text  USING    p_v_obj      TYPE tdobject
                                               p_v_id        TYPE tdid
                                               p_v_langu   TYPE spras
                                               p_v_name   TYPE tdobname
                    CHANGING      p_v_string   TYPE string.

  DATAlt_lines_tab    TYPE  efg_tab_tline,
              ls_line_es       TYPE  tline,
              lv_texto_line   TYPE  string.

  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      id                          p_v_id
      language                p_v_langu
      name                     p_v_name
      object                   p_v_obj
    TABLES
      lines                      lt_lines_tab
    EXCEPTIONS
      id                      1
      language                2
      name                    3
      not_found               4
      object                  5
      reference_check         6
      wrong_access_to_archive 7
      OTHERS                  8.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ELSE.
    LOOP AT lt_lines_tab INTO ls_line_es.
      IF sy-tabix EQ 1.
        p_v_string ls_line_es-tdline.
      ELSE.
        CONDENSE ls_line_es-tdline.
        CONCATENATE p_v_string ls_line_es-tdline INTO p_v_string SEPARATED BY space.
      ENDIF.
    ENDLOOP.
  ENDIF.

ENDFORM.                    " F_GET_TEXT


LLAMADA A LA FORM: en este caso es un texto de posición.


      DATA:   lv_string         TYPE string,

                     lv_name         TYPE tdobname,       CLEARlv_stringlv_name.
      CONCATENATE <fs_item>-vbeln <fs_item>-vbpos INTO lv_name.


      PERFORM f_get_text    USING 'VBBP'
                                                          '0001'
                                                          syst-langu
                                                          lv_name
                                    CHANGING lv_string.