Archivo

Posts Tagged ‘ABAP’

Nuevo SAP GUI 7.5

Noticia: SAP liberó el nuevo GUI 7.50

El 04.05.2017 SAP liberó la versión GUI 7.50, disponible para descargar e instalar para todos los clientes.
Algunas de las características de esta nueva versión son:

– Mayor vida útil para SAP GUI, ya que está desarrollado con Visual Studio 2013
– Selección de colores por cliente / sistema con Blue Crystal Theme
– Soporte productivo para las características de SAP Screen Personas 3.0

Las nuevas características se mencionan en las siguientes notas:

2417687 – New features in SAP GUI for Windows 7.50

147519 – Maintenance strategy / deadlines for SAP GUI

Para aquellos que no tienen acceso a SAP Service Marketplace, se adjunta link: http://www.sabitlink.com/index.php/l/jc

Anuncios
Categorías:Otras Etiquetas: , , , ,

3 trucos ABAP para programar menos

Caso: Se enumeran algunos trucos para reducir el tiempo que se tarda programando.

Solución:

Truco 1: Armar estructuras utilizando el botón “MODELO”.

Casi siempre usamos estructuras para nuestros reportes y se pierde mucho tiempo en agregar los campos tipeándolos, veamos este trick usando el “MODELO”, también se pueden ver otras opciones ahí mismo.

Y el resultado final:

2. Copy+Paste de datos en columna

Si nos gusta crear una estructura desde el diccionario y luego completar con el texto TYPE manualmente, aquí un truco:

Seleccionamos los campos para pegarlos en nuestro programa:

He aquí el truco! Usamos ALT+drag and drop del mouse para seleccionar la info y trabajar con ella.

Por ejemplo me traigo los TYPES del punto anterior….o selecciono los tipos de datos y los elimino todos de una vez!

Para eliminar igual, con CTRL+X (cortar) o Suprimir (delete).

3. Uso del TAB para proponer texto personalizado.

Ya sabemos que el TAB nos ayuda a proponernos instrucciones, pero podemos agregar código nuestro? Si, veamos donde: el editor ABAP, en la esquina inferior derecha hay un ícono, lo presionamos.

Ahí en Modelos de códigos podemos ver los actuales y crearnos nuevos, por ejemplo:

Ahora, ya en el código:

Nos aparece el código ingresado

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

IW38 – Campo de cliente en estructura RIHAUFK_LIST no aparece en ALV

Caso: En la IW38, si tenemos en la estructura RIHAUFK_LIST creada una estructura append con campos de cliente y éstos no comienzan con Z, no aparecen en el ALV de resultados.

En la IW38:

Solución: Usamos la BADI BADI_EAM_SINGLELEVEL_LIST, método CHANGE_FIELD_CATALOG, borrando el valor del campo CS_FIELDCATALOG-TECH, tal como indica la nota 1509429 – Customer-defined fields are not displayed in all PM lists after upgrade

1. Por la SE18, presionamos VISUALIZAR:

2. Por la SE19 creamos una copia del QNAO_SFWS_SC_SIGLELEVEL_LIST:

3. Ingresamos a modificar el objeto recién copiado:

4. Modificamos los tildes para activar la ampliación luego y vamos a “Clase que implementa”:

5. Tomamos la clase que implementa y hacemos una copia Z de ella para poder editarla:

Para ello le agregamos una Z adelante y presionamos ENTER:

Ahora con la nueva clase Z, hacemos click en el método CHANGE_FIELD:

Agregamos el código según lo que indica la nota de SAP:

Finalmente volvemos hacia atrás y agregamos el reporte de la IW38 al filtro para visualización:

Finalmente activamos. Si volvemos a la SE18, veremos que ahora aparece implementado:

Finalmente en la IW38 validamos:

Links: 1509429 – Customer-defined fields are not displayed in all PM lists after upgrade

SU53 – Obtener del BUFFER errores de autorización

Caso: se solicita obtener los errores de autorización del usuario, tal cual cuando se ejecuta la SU53.

Solución: No encontré una solución perfecta. De lo que pude investigar fue “simular” la SU53, obteniendo desde el BUFFER del usuario los resultados.

La SU53, al ser ejecutada, graba el último error de autorización en la tabla USR07. Pero sólo guarda el último, por lo cual una opción sería ejecutar un JOB (creándolo desde el mismo usuario) para obtener el buffer y así ir guardando cada X tiempo los errores de autorización leyéndolos desde el BUFFER, sin tener que ejecutar la SU53.

  1. Les paso esta nota que aclara un poco el tema: http://solveissue.com/note?id=1974803
  2. El programa en cuestión es el siguiente:
REPORT  zleer_su53.
 
DATA:   BEGIN OF usr07key,
          objct LIKE usr07-objct,
          fiel0 LIKE usr07-fiel0,
          fiel1 LIKE usr07-fiel0,
          fiel2 LIKE usr07-fiel0,
          fiel3 LIKE usr07-fiel0,
          fiel4 LIKE usr07-fiel0,
          fiel5 LIKE usr07-fiel0,
          fiel6 LIKE usr07-fiel0,
          fiel7 LIKE usr07-fiel0,
          fiel8 LIKE usr07-fiel0,
          fiel9 LIKE usr07-fiel0,
        END OF usr07key.
 
DATA:   BEGIN OF usr07val1,
          val01 LIKE usr07-val01,
          val02 LIKE usr07-val01,
          val03 LIKE usr07-val01,
          val04 LIKE usr07-val01,
          val05 LIKE usr07-val01,
          val06 LIKE usr07-val01,
        END OF usr07val1.
 
DATA:   BEGIN OF usr07val2,
          val07 LIKE usr07-val01,
          val08 LIKE usr07-val01,
          val09 LIKE usr07-val01,
          val10 LIKE usr07-val01,
        END OF usr07val2.
 
DATA:   g_buffer_method(10),
        usr07             TYPE usr07.
 
 
CALL 'C_SAPGPARAM'
     ID 'NAME' FIELD 'auth/new_buffering'
     ID 'VALUE' FIELD g_buffer_method.
 
GET PARAMETER ID 'XU1' FIELD usr07key.                      "#EC EXISTS
GET PARAMETER ID 'XU2' FIELD usr07val1.                     "#EC EXISTS
GET PARAMETER ID 'XU7' FIELD usr07val2.                     "#EC EXISTS
 
CLEAR usr07.
usr07-bname = sy-uname.
MOVE-CORRESPONDING usr07key  TO usr07.
MOVE-CORRESPONDING usr07val1 TO usr07.
MOVE-CORRESPONDING usr07val2 TO usr07.
 
MOVE sy-datum TO usr07-cdate.
MOVE sy-uzeit TO usr07-ctime.
 
WRITE / : usr07-bname.
WRITE / : usr07-objct.
WRITE / : usr07-fiel0.
WRITE / : usr07-fiel1.
WRITE / : usr07-VAL01.

3. También encontré una transacción ZSU53 que puede servirles, lo que hace es generar el error de autorización y muestra qué perfiles necesita el usuario para cumplir con dicha autorización:

http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/202d833a-79ae-2c10-e4a7-d51218a7efb4?QuickLink=index&overridelayout=true&45629732722609

https://code.google.com/p/zsu53/

4. También encontré una BAPI que ejecuta en fondo la SU53 para obtener en un texto el resultado: http://searchsap.techtarget.com/tip/BAPI-to-retrieve-Check-Values-like-SU53-result

Función para validar RUT (Documento de Identidad en Chile)

Caso: se busca crear una función que valide el RUT de una persona/empresa

Solución: se crea la siguiente función:

FUNCTION zvalidar_rut.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  IMPORTING
*"     REFERENCE(KUNNR) TYPE  ICNUM
*"  EXPORTING
*"     REFERENCE(RESP) TYPE  SY-SUBRC
*"     REFERENCE(RUTHIGH) TYPE  ICNUM
*"     REFERENCE(RUTLOW) TYPE  ICNUM
*"     REFERENCE(RINGLOW) TYPE  ICNUM
*"----------------------------------------------------------------------
 
  DATA: rut      TYPE char50, 
		rut_aux  TYPE char50, 
		rut_cort TYPE char50,
		dv(01)   TYPE c, dv_aux TYPE c,
		nmax     TYPE i, nroc TYPE i,
		suma     TYPE i, contador TYPE i,
		long     TYPE i,
		kunnr2   TYPE kna1_bf-stcd1.
 
  rut = kunnr.
  TRANSLATE rut USING '- '.
  CONDENSE rut NO-GAPS.
 
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    EXPORTING
*     input  = kunnr
      input  = rut
    IMPORTING
      output = rut.
 
  long =  STRLEN( rut ).
 
  IF long = 8.
    CONCATENATE rut+0(7) '-' rut+7(8) INTO rut.
  ENDIF.
 
  IF long = 9.
    CONCATENATE rut+0(8) '-' rut+8(9) INTO rut.
  ENDIF.
 
  TRANSLATE rut TO UPPER CASE. CONDENSE rut NO-GAPS.
 
  * Quito caracteres no correspondientes
  long = STRLEN( rut ). contador = 0. resp = 0.
  IF long < 2.
    resp = 4.
  ENDIF.
  CHECK long >= 2.
  DO long TIMES.
    IF rut+contador(01) CO '0123456789Kk'.
      CONCATENATE rut_aux rut+contador(01) INTO rut_aux.
      ringlow = rut_aux.
    ENDIF.
    ADD 1 TO contador.
  ENDDO.
 
  rut = rut_aux. CONDENSE rut NO-GAPS.
 
  IF NOT ( rut IS INITIAL ).
    long = STRLEN( rut ). long = long - 1.
    dv = rut+long(1). nmax = long - 1.
    rut_aux = rut+0(long).
    contador = 2.
    DO long TIMES.
      nroc = rut_aux+nmax(01).
      suma = suma + ( nroc * contador ).
      nmax = nmax - 1. contador = contador + 1.
      IF contador > 7. contador = 2. ENDIF.
    ENDDO.
    suma = 11 - suma MOD 11.
    IF suma = 10.
      dv_aux = 'K'.
    ELSEIF suma > 10.
      dv_aux = '0'.
    ELSE.
      dv_aux = suma.
    ENDIF.
    IF dv NE dv_aux.
      resp = 4.
    ENDIF.
  ELSE.
    resp = 4. "Incorrecto.
  ENDIF.
  CONCATENATE rut_aux '-' dv_aux INTO ruthigh.
  CONCATENATE rut_aux dv_aux INTO rutlow.
 
* Validar Guión XL ( ALT 196 )
* Validar Rut contenga caracteres válidos
 
  kunnr2 = kunnr.
 
  CALL FUNCTION 'TAX_NUMBER_CHECK'
         EXPORTING
           country                  = 'CL'
*          NATURAL_PERSON_FLAG      = 'X'
*          REGION                   = ' '
*          STKZU                    = ' '
          tax_code_1                = kunnr2
*         TAX_CODE_2                = ' '
*         TYPE_OF_TAX_CODE_1        = ' '
*         TAX_CODE_3                = ' '
*         TAX_CODE_4                = ' '
        EXCEPTIONS
          not_valid                 = 1
          different_fprcd           = 2
          OTHERS                    = 3
                 .
  IF sy-subrc <> 0.
    resp = 4.
  ENDIF.
 
* Validar como máximo 10 caracteres
  long =  STRLEN( kunnr ).
 
  IF long > 10.
    resp = 4.
  ENDIF.
 
ENDFUNCTION.

Ayuda de búsqueda en dynpro para Fecha-Hora

Caso: Se desea agregar un matchcode en campos de fecha y hora de una dynpro.

Solución: En el ejemplo, se utilizan las ayudas de búsqueda CACS_CALENDAR y SRM_F4_UZEIT para mostrar el matchcode correspondiente a cada caso.

1. Para la fecha

Quedando al presionar el matchcode:

2. Para la hora

Presionando el matchcode muestra:

RSSCD100 – Ver datos de Tablas CDHDR CDPOS

Caso: Se desea visualizar la fecha y hora de un pedido de compras.

Solución: Utilizamos la transacción RSSCD100, para ver el contenido de las tablas CDHDR y CDPOS

Fuentes:

http://www.sap123.com/a/47/

http://sap.ittoolbox.com/groups/technical-functional/sap-log-mm/how-to-get-data-from-table-cdpos-cdhdr-4526724

Categorías:ABAP/4 Etiquetas: , ,