Saltar mensaje "Falta autorización para transacción"

Caso: Se desea evitar el mensaje "Falta autorización para transacción"

Solución: Si tenemos acceso a la SE37, podemos ejecutar la función RS_HDSYS_CALL_TC_VARIANT.

Allí, en el parámetro TCODE ponemos la transacción a la cual deseamos ingresar y quitamos la X al parámetro AUTHORITY-CHECK.

Debe usarse con cuidado porque queda en el LOG de accesos y en la transacción (ejemplo en la SU01) puede que no tengas otros accesos

Descargar SAP GUI o parches – Sitio de ayuda

Caso: deseamos descargar el SAP GUI del SAP MarketPlace pero no encontramos donde descargarlo.

Solución: hay un sitio WEB llamado Easy Service Marketplace, donde están los links necesarios para descargar el SAP GUI, los parches y otras yerbas.

El link al sitio es:

http://www.easymarketplace.de

Específicamente el SAPGUI se encuentra en:

http://www.easymarketplace.de/SAPgui-Patches.php

Smartforms: No existe el mensaje 042 del área de trabajo SSFCOMPOSER

Caso: Se previsualiza un formulario smartforms y genera error C!002 “No existe el mensaje 042 del área de trabajo SSFCOMPOSER”.

Solución: El error puede surgir por:

1. El contenido no se ajusta a la ventana: un objeto es más largo que lo esperado en la ventana, o sea un texto, un logo es más grande que la ventana que la contiene

2. Tabla inconsistente: Hay columnas o filas que faltan en alguna tabla o éstas generan un texto muy largo o con caracteres especiales.

3. Hay una imagen que no existe en el mandante donde se está ejecutando el formulario (en la SE78) o se configuró mal dicha imagen.

Se debe revisar los puntos anteriores. Asimismo se puede crear el mensaje SSFCOMPOSER 042 por la SE91 para aclarar mejor el error.

En mi caso se generaba dinámicamente un logo de una firma, pero cuando se generaba un logo123.jpg y esta imagen no estaba subida en el sistema por la SE78, se generaba este error.

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:

DD_DOMVALUES_GET – Obtener los valores de un dominio

Caso: se desea obtener la lista de valores de un dominio.

Solución:

TYPES: tty_dd07v   TYPE STANDARD TABLE OF dd07v.
DATA: lt_tipo_ingreso    TYPE tty_dd07v,
      lw_tipo_ingreso    TYPE LINE OF tty_dd07v.
 
REFRESH: lt_tipo_ingreso[].
 
* Leer los valores de un Dominio
CALL FUNCTION 'DD_DOMVALUES_GET'
  EXPORTING
    domname        = 'ZDMM_SC_TIPO_ING'
    text           = 'X'
    langu          = sy-langu
  TABLES
    dd07v_tab      = lt_tipo_ingreso
  EXCEPTIONS
    wrong_textflag = 1
    OTHERS         = 2.
 
LOOP AT lt_tipo_ingreso INTO lw_tipo_ingreso.
  WRITE: /  lw_tipo_ingreso-ddtext.
ENDLOOP.

USR01 – USR21 – ADRP – ADR6 – Obtener datos del usuario

Caso: se desea obtener el nombre completo y mail del usuario logueado.

Solución: hay varias funciones a utilizar, pero la forma fácil es la siguiente:

DATA: lv_bname          TYPE xubname,
      lv_nombre_usuario TYPE ad_namtext,
      lv_mail           TYPE ad_smtpadr,
      lw_datos_usuario  type adrp.
 
lv_bname = sy-uname.
 
* NOMBRE DEL USUARIO EDITADO: Obtengo el nombre editado del usuario
SELECT SINGLE name_text INTO lv_nombre_usuario
  FROM user_addrp
  WHERE bname = lv_bname.
 
* Nota: también se puede usar:
CALL FUNCTION 'USER_NAME_GET'
  IMPORTING
    user_name      = lv_bname
    mandt          = sy-mandt
    sylangu        = sy-langu
    full_user_name = lv_nombre_usuario.
 
 
* E-MAIL:
SELECT SINGLE smtp_addr INTO lv_mail
  FROM usr21
  INNER JOIN adr6
  ON usr21~addrnumber  = adr6~addrnumber
  AND usr21~persnumber = adr6~persnumber
  WHERE usr21~bname = lv_bname.
 
* DATOS DEL USUARIO (SU3)
SELECT SINGLE * INTO CORRESPONDING FIELDS OF lw_datos_usuario
  FROM usr21
  INNER JOIN adrp
  ON usr21~persnumber = adrp~persnumber
  WHERE usr21~bname = lv_bname.
 
WRITE : 'Usuario:', lv_bname.
SKIP.
WRITE : 'Nombre.:', lv_nombre_usuario.
SKIP.
WRITE : 'E-Mail.:', lv_mail.
skip.
WRITE : 'Otros datos:', lw_datos_usuario.
Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 26 seguidores