Aloquevamos.com Blog, ocasionalmente…

20Mar/120

Mostrar Errores Estándar en un POPUP

Posted by Canyita

Cada vez que ejecutamos un módulo de funciones estándar es habitual que dicho módulo retorne una tabla de mensajes. Esta tabla de mensajes nos indicará si la ejecución ha ido bien o en caso contrario los errores que se han producido.

En nuestros programas es habitual que tengamos que mostrar un log de errores a los usuarios una vez han ejecutado una funcionalidad. Como no queremos construir una ventana a medida para mostrar los errores, podemos utilizar la siguiente función estándar que hace dicho trabajo por nosotros:

  C14ALD_BAPIRET2_SHOW

Si rellenamos la tabla de tipo BAPIRET2, y ejecutamos el módulo de funciones podremos ver el siguiente resultado:

19Mar/120

Ayuda Z para un campo en una Screen

Posted by Canyita

Si necesitamos añadir una ayuda para búsqueda sobre un campo que facilite la entrada de datos a los usuarios, pero los datos que necesitamos añadir para la selección los queremos fijar nosotros, podemos usar el siguiente código ABAP:

* Declaraciones de Variables
****************************
 
TYPES: BEGIN OF ty_fields.
         INCLUDE STRUCTURE help_value.
TYPES: END OF ty_fields.
 
TYPES: BEGIN OF ty_helptab,
         feld(50),
       END OF ty_helptab.
 
DATA: it_centro       TYPE TABLE OF t001w,
      et_centtro      LIKE LINE OF it_centro,
      it_fields       TYPE TABLE OF ty_fields,
      et_fields       LIKE LINE OF it_fields,
      it_helptab      TYPE TABLE OF ty_helptab,
      et_helptab      LIKE LINE OF it_helptab.
 
* Variables para Tablas de Información (F1) de Ayuda de Usuario.
DATA: gv_tabla_f1 LIKE help_info-tabname,
      gv_campo_f1 LIKE help_info-fieldname.
 
* Asociar Ayuda a un Campo de la Pantalla de Selección
***************************************************************
* Variable de la Pantalla para la Ayuda
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_werks.
 
PERFORM prepara_ayuda_centro_z.
 
PERFORM ayuda USING    'Centros de 0 a 100'
              CHANGING p_centro.
 
* Rutina de Carga de Datos de la Ayuda
***************************************************************
 
FORM prepara_ayuda_centro_z.
 
* Campo que se muestra en el F1
  gv_campo_f1 = 'WERKS'.
  gv_tabla_f1 = 'T001W'.
 
  FREE it_ihelp_fields.
  CLEAR: et_fields, it_fields[].
 
  et_fields-tabname    = 'T001W'.    " Tabla de referencia del campo
  et_fields-fieldname  = 'WERKS'.    " Campo para mostrar en la ayuda
  et_fields-selectflag = 'X'.        " Flag de Retorno del Campo
  APPEND et_fields TO it_fields.
 
* Para mostrar otro campo, en este caso la Descripción
  et_fields-tabname    = 'T001W'.    " Tabla de referencia del campo
  et_fields-fieldname  = 'NAME1'.    " Descripción
  et_fields-selectflag = ''.         " Sin Retorno
  APPEND et_fields TO it_fields.
 
  CLEAR : it_helptab[], it_centro[].
  SELECT werks name1 FROM t001w
    INTO CORRESPONDING FIELDS OF TABLE it_centro
    WHERE werks BETWEEN '0' AND '100'
    ORDER BY werks ASCENDING.
 
* Rellena la Tabla de Valores de uno a uno en orden
  LOOP AT it_centro INTO et_centro.
 
    et_helptab-feld = et_centro-werks.
    APPEND it_helptab.
 
    et_helptab-feld = et_centro-name1.
    APPEND et_helptab TO it_helptab.
 
  ENDLOOP.
 
ENDFORM.
 
* Rutina Lanzador de la Ayuda
***************************************************************
 
FORM ayuda USING    p_titulo
           CHANGING p_return.
 
  CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'
    EXPORTING
      TITEL = p_titulo
      fieldname = gv_campo_f1
      tabname = gv_tabla_f1
    IMPORTING
      SELECT_VALUE = p_return
    TABLES
      FIELDS = it_fields
      VALUETAB = it_helptab
    EXCEPTIONS
      FIELD_NOT_IN_DDIC = 1
      MORE_THEN_ONE_SELECTFIELD = 2
      NO_SELECTFIELD = 3
      OTHERS = 4.
 
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
 
ENDFORM.

19Mar/120

Convertir Importes de Carácter a Decimal

Posted by Canyita

La conversión de importes en ABAP es un poco liosa y se generan dumps a menudo debido a una mala conversión de importes recibidos en formato carácter o String. En ABAP los importes se guardan en un tipo CURRENCY, es decir, un número decimal.

Si queremos convertir de formato carácter a un formato CURRENCY, como por ejemplo el elemento de datos DMBTR de la tabla estándar de posiciones contables FI de SAP podemos usar el siguiente código para convertir las variables:

" Quito el separador
REPLACE ALL OCCURRENCES OF '.' IN string_importe WITH space.
 
" Elimino Posibles Espacios
CONDENSE string_importe NO-GAPS.
 
" Convierto a DMBTR que es una variable ABAP de tipo decimal
" para importes, concretamente de posiciones de documentos FI
PACK string_importe TO dmbtr.