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.

SU01/SU3 – Parámetros de Usuario

Caso: se desea buscar que parámetros se pueden configurar en el usuario, en la SU01 o SU3

Solución: se encuentra una lista de parámetros a utilizar:

Parámetros de Usuario

ID Parámetro VALOR Descripción
AQB PEDIDOS Cuando el usuario entre en la transacción SQ01 ya lo hará directamente sobre el grupo de usuarios de PEDIDOS
BUK 1000 Código de la sociedad a la que pertenece el usuario
CAC 1000 Sociedad CO a la que pertenece el usuario
EKG 010 Grupo de compras
EKO 0100 Organización de compras
EVO Z1 Valores por defecto para la gestión de compras para los encargados de compras según transacción OMFI
FBA X1 02X Permite buscar los documentos en FI si no se encuentran en la base de datos
FBZ SAP Variante de layout para la contabilización de documentos FI
FIT_ALV_FAGL_GL /VARIANTE Variante ALV para Gen. Ledger Accounting
FZ1 SAP01 Layout para la entrada de facturas FI
FZ2 SAP01 Variante de layout para entrada rápida de pos. de cta.mayor
FZ5 SAP01 Variante de layout para entrada rápida de factura preliminar
LAG 0100 Almacén
SCL Empleo de mayúsculas o minúsculas en código fuente
SD_VARIANT_MAINTAIN X Permite modificar las variantes de pantalla de listados de venta
SPA 0100 Sector de ventas
SU53_STYLE TREE Layout en que se mostrará el resultado de la transacción SU53
VKO 10 Organización de ventas
VTW 10 Canal de distribución de ventas
WLC X   X  XX   X 00000 Parámetros de workflow específicos de usuario
WRK 1100 Centro
SP01_FROM 0000000001 Primera página a presentar en el spool de impresión (SP01)
SP01_END 0000000010 Última página a presentar en el spool de impresión (SP01)
SP01_ENDING Presentar las últimas XX páginas en el spool de impresión (SP01)
FIT_ALVC X Muestra las transacciones FBL1N y FBL5N en formato ALV
FO2 X           X       X X Opciones de contabilidad
FOP             XX Opciones de contabilidad
GRWE X X XXX  XE Valores de Report Writer
LE_VL10_UPG_NOMSG X No muestra mensaje de aviso en transacción VL04
LND ES Clave de país
ME_USE_GRID X ALV GRID en reports de compras ME1*
SD_SWU_ACTIVE X Activar Workflow en VA02 y VA03
SOST XXXX    XXX4XXX      X Parámetros de transacción SOST

 

Link: http://www.blogdesap.com/2012/06/parametros-de-usuario.html

alvgrid->get_filtered_entries

Caso: se hizo un botón de seleccionar todos/deseleccionar todos, para marcar los checks de una tabla interna. Se desea que, cuando el usuario filtra ciertos registros, sólo se seleccionen los registros visibles y no toda la tabla interna.

Screenshot_1

Solución: Usamos alvgrid->get_filtered_entries para obtener la lista de registros que fueron filtrados (no visibles)

  METHOD handle_user_command.
 
    DATA: lv_cont            TYPE i,
          lv_tabix           TYPE sy-tabix.
 
	DATA: lt_filtered        TYPE lvc_t_fidx.
 
    CASE e_ucomm.
      WHEN 'ALL'.
        CALL METHOD gr_alvgrid->get_filtered_entries
          IMPORTING
            et_filtered_entries = lt_filtered.
 
        LOOP AT it_tabla INTO wa_tabla.
          lv_tabix = sy-tabix.
          READ TABLE lt_filtered WITH KEY table_line = lv_tabix TRANSPORTING NO FIELDS.
          IF sy-subrc NE 0.
            MOVE g_true TO wa_tabla-marc.
            MODIFY it_tabla FROM wa_tabla INDEX lv_tabix.
          ENDIF.
        ENDLOOP.
 
      WHEN 'NONE'.
        CALL METHOD gr_alvgrid->get_filtered_entries
          IMPORTING
            et_filtered_entries = lt_filtered.
 
        LOOP AT it_tabla INTO wa_tabla.
          lv_tabix = sy-tabix.
          READ TABLE lt_filtered WITH KEY table_line = lv_tabix TRANSPORTING NO FIELDS.
          IF sy-subrc NE 0.
            CLEAR  wa_tabla-marc.
            MODIFY it_tabla FROM wa_tabla INDEX lv_tabix.
          ENDIF.
        ENDLOOP.
 
    ENDCASE.
 
	CALL METHOD gr_alvgrid->refresh_table_display.
  ENDMETHOD.                           "handle_user_command

Solución:

Seguir

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

Únete a otros 25 seguidores