miércoles, noviembre 03, 2010

MF: Primer y ultimo día del mes

Para calcular el primer y última día del mes se utiliza el MF OIL_MONTH_GET_FIRST_LAST

  CALL FUNCTION 'OIL_MONTH_GET_FIRST_LAST'
    EXPORTING
      i_month     = p_month
      i_year      = sy-datum(4)
    IMPORTING
      e_first_day = r_audat-low
      e_last_day  = r_audat-high
    EXCEPTIONS
      wrong_date  = 1
      OTHERS      2.

martes, octubre 26, 2010

Gestión modificaciones de tablas (Z y stándard)


SAP permite visualizar datos sobre las modificaciones de contenido sobre las tablas de SAP (insertar, modificar y borrar registros) tanto de tablas Z como tablas estándar (incluidas customizing).  Para que se guarden las modificaciones de una tabla, dicha tabla debe tener informado el flag “Grabar en log modificaciones de datos) de la pantalla de “Opciones Técnicas” de la tabla. Además se tiene que modificar la variable de sistema "rec/client" con el valor del mandante que queremos gestionar o "ALL" para gestionar todos los mandantes. Con la transacción spfpar se puede visualizar el contenido lo parámetros del servidor.

Para visualizar las modificaciones se accede a la tx. SCU3. Hay dos opciones: visualizar la tablas que están configuradas para actualizar el log “Lista de tablas grabadas en log” o visualizar las modificaciones “Evaluar logs”.
 
Si continuamos por la opción “Evaluar logs”, aparece una pantalla de selección se indica: la tabla que se requiere evaluar, el intervalo de fechas y horas, el tipo de tabla y las opciones de salida. El radiobutton “Visualización cuadrícula” muestra el listado en formato ALV (más intuitivo).               

jueves, septiembre 09, 2010

SQL - Select + LIKE

En las consultas SELECT se puede utilizar comando LIKE para filtrar valores. En el siguiente ejemplo se filtrar los cecos que el tercer y cuarto dígito sea '00'. Con '_' se indica posiciones individuales que no nos importa el valor (en el ejemplo se ponen dos) y con '%' se indicas posiciones multiples que nos nos importa el valor.

CONCATENATE '__' '00' '%' INTO l_kostl_aux.
SELECT kostl ltext FROM cskt
                                INTO CORRESPONDING FIELDS OF TABLE f_it_centros_coste
                           WHERE spras EQ sy-langu
                               AND kokrs EQ g_kokrs
                               AND kostl LIKE l_kostl_aux
                               AND datbi >= sy-datum.

martes, agosto 31, 2010

Eliminar chequeo duplicidad de DNI

En SAP no se puede tener dos clientes con el mismo DNI. Se puede eliminar dicho chequeo mediante custominzing, cambiando el tipo de mensaje.

jueves, agosto 26, 2010

Buscar string en programas

Existe el programa estandard RS_ABAP_SOURCE_SCAN para buscar string en programas.

miércoles, julio 07, 2010

Tablas de textos

Cuando queremos que un variable coja unos valores concreto (por ejemplo color: azul, rojo, verde) podemos hacer dos cosas:

A) Generar un dominio e informar los valores como valores fijos. En este caso cada vez que queremos añadir algún valor deberemos modificar el dominio y transportar las modificaciones.

B) Generar una tabla de valores. Esta tabla se puede informar sin la necesidad de modificar ningún objeto. Esta es la mejor opción si los valores pueden cambiar con el tiempo.

Ejemplo tonto: quiero un tabla que informe ID_COCHE ID_COLOR. El campo ID_COLOR tiene un identificador del color. Los pasos a seguir son:

1) Crear una tabla de textos con los siguientes campos: MANDANTE, ID_COLOR y IDIOMA DESCRIPCIÓN. En esta tabla se informa la descripción de cada color.

2) Crear una tabla para los valores con los siguientes campos: MANDANTE y ID_COLOR.
En esta tabla se informa los colores.

3) Desde la tabla de textos relacionar a la tabla de valores mediante una clave externa de tipo "Campos clave de una tabla de texto".

4) Por último se crea la tabla principal donde se informaría el color de cada coche con los campo MANDATE, ID_COCHE y ID_COLOR.

5) Para que sólo se pudieran informar valores correctos a esta última tabla se añadiría una clave externa que apuntara a la tabla de valores.

viernes, mayo 21, 2010

SD - Añadir Campos Clientes a los Pedidos de Ventas

Para añadir nuevos campos en la transacción VA01/VA02/VA03 en la pestaña "Datos adicionales B" se debe realizar un append (no es necesario registrar la tabla) de una estructura en las tablas:

- VBAK, datos de cabecera.

- VBAP, datos de posición.

Si que es necesario registro el programa SAPMV45A donde se definen los dynpros para mostrar los campos:

- Dynpro 8459, datos de cabecera

- Dynpro 8309, datos de posición.

Estos dynpros trabajan con los includes MV45AOZZ (lógica del PBO) y MV45ATZZ (definición de datos globales).

NOTAS:
- Hace falta controlar manualmente si se está en modo visualización o modificación para habilitar o deshabilitar la modificación de los datos.

jueves, mayo 13, 2010

SAPCRIPT - Buscar formularios

Mediante la transacción SE71 se puede realizar la búsqueda de formularios mediante el matchcode. Esta búsqueda no es del todo eficiente. Hay una búsqueda más exhaustiva: dentro de la pantalla de búsqueda ir "BUSCAR" y después a "Función Búsqueda Técnica".

ALV - recuperar catálogo de campos

Para mostrar un ALV se debe utilizar el módulo de función REUSE_ALV_GRID_DISPLAY. Es necesario informar los campos del catálogo (campo it_fieldcat). Para ello se puede utilizar el módulo de función REUSE_ALV_FIELDCATALOG_MERGE que recupera el catálogo a partir de una tabla interna del programa, una tabla del diccionario o una estructura del diccionario.

martes, abril 06, 2010

SHARED OBJECTS

A partir de la versión ECC6.0 se ha añadido una nueva funcionalidad "SHARED OBJECTS" para compartir datos por memoria. Aún se puede utilizar métodos de siempre sentencias IMPORT/EXPORT y SET/GET PARAMETER.

Pasos a seguir:

1) Crear una área mediante la transacción SHMA. Esta área genera automáticamente una interfase. En el ejemplo se crea el area Z_CL_SHM_AREA_1 y se genera la clase con el mismo nombre.

2) Crear una clase mediante la transacción SE24 que herede de la clase CL_SHM_ROOT_1. En el ejemplo se crea la clase ZCL_SHM_ROOT_1.
Hay que marcar el flag para memória compartida. Se añade el atributo variable a la clase y sus métodos set/get:

METHOD get_variable.
e_variable = variable.
ENDMETHOD.

METHOD set_variable.
variable = i_variable.
ENDMETHOD.

3) Crear programa que guardar información en memoria.

REPORT zshare_objects.

PARAMETERS: p_param(128).

DATA: hdl TYPE REF TO z_cl_shm_area_1.
DATA: root TYPE REF TO zcl_shm_root_1.
DATA: l_variable TYPE string.

START-OF-SELECTION.

hdl = z_cl_shm_area_1=>attach_for_write( )."Indicar que para escritura

CREATE OBJECT root AREA HANDLE hdl.
l_variable = p_param.
CALL METHOD root->set_variable
EXPORTING
i_variable = l_variable.
hdl->set_root( root ).
hdl->detach_commit( ) .


4) Crear programa que lea de memória.

REPORT zshare_objects2.

DATA: hdl TYPE REF TO z_cl_shm_area_1.
DATA: root TYPE REF TO zcl_shm_root_1.
DATA: l_variable TYPE string.

START-OF-SELECTION.

TRY.
hdl = z_cl_shm_area_1=>attach_for_read( )."indicar que es para lectura
CATCH cx_shm_attach_error.
ENDTRY.

CALL METHOD hdl->root->get_variable
IMPORTING
e_variable = l_variable.

WRITE: 'Valor variable', l_variable.

Para más información:
http://help.sap.com/saphelp_nw2004s/helpdata/EN/14/dafc3e9d3b6927e10000000a114084/frameset.htm

http://www.sap-press.de/katalog/buecher/htmlleseproben/gp/htmlprobID-111

miércoles, marzo 10, 2010

TRANSACCIONS - Menús de ámbito MM

Menús de Ámbito de MM:
- Materiales MM00.
- Documentos compras ME00.
- Inventario MI00.
- Stock MB00.

martes, marzo 09, 2010

USER-EXIT buscar ampliación a partir de MF

Utilizar la tx. SMOD. Después utilizar F4 de ampliación, botón de 'Sistema de información', botón 'Selecciones (todas)' y por último informar campo nombre de componente.

ALV - Catálogo

ROW_POS:
Solo se informará este campo en el caso en el que el report de salida sea multilínea. Valores: 0, 1, 2 y 3.

COL_POS:
Solo es relevante en el caso que se quiera que la salida en el listado tenga un orden distinto a su posición en la tabla interna de datos.

TABNAME:
Nombre de la tabla interna que contiene los datos a mostrar en el listado.

REF_FIELDNAME:
Nombre del campo de la tabla del diccionario de datos al cual está referenciado el campo de la tabla interna (en el caso en el que lo esté).

CFIELDNAME:
Nombre del campo de la tabla interna de datos que contiene la moneda para el campo importe.

CTABNAME:
Este dato sólo es relevante informarlo para listados con más de una cabecera.

QFIELDNAME:
Nombre del campo de la tabla interna de datos que contiene la unidad de medida para el campo cantidad.

QTABNAME:
Este dato solo es relevante informarlo para listados con más de una cabecera.

OUTPUTLEN:
Siempre que el campo a mostrar en el listado de salida no esté referenciado a ningún campo de tabla del diccionario, se especificará aquí la longitud de salida del campo.

KEY:
El campo del registro actual se tomará como clave si se marca este campo. No podrá ocultarse en el listado de salida este campo.

KEY_SEL:
El campo será clave, pero podrá no salir en el listado de salida.

NO_OUT:
El campo no será mostrado en el listado de salida.

TECH:
Si se marca este campo, el campo actual no puede nunca salir en el listado de salida.

EMPHASIZE:
Para mostrar el campo de algún color.

HOTSPOT:
El campo aparece como hotspot.

FIX_COLUMN:
Si se marca, este campo aparecería como columna fija.

DO_SUM:
Se calculará la suma de este campo.

NO_SUM:
No se calculará la suma de este campo.

ICON:
El campo será mostrado como un icono.

SYMBOL:
El campo será mostrado como un símbolo.

JUST:
Justificación del campo. R= justificado a la derecha, L= justificado a la izquierda, C= centrado.

LZERO:
Mostrará los campos de tipo NUMC justificados a la derecha y sin ceros a la izquierda.

NO_SIGN:
Mostrará el campo sin signos.

NO_ZERO:
Suprime los 0’s.

EDIT_MASK:
Mostrará el campo con una máscara.

SELTEXT_L:
Se mostrará en la cabecera de la columna el texto largo de la definición del campo en la tabla del diccinario de datos.

SELTEXT_M:
Se mostrará en la cabecera de la columna el texto medio de la definición del campo en la tabla del diccinario de datos.

SELTEXT_S:
Se mostrará en la cabecera de la columna el texto corto de la definición del campo en la tabla del diccinario de datos.

DDICTXT:
Especificará mediante L, M y S el texto largo, medio o corto que se utilizará en los títulos de las cabeceras.

DATATYPE:
Se especificará cuando el campo de la tabla interna de datos no esté referenciado a ningún campo de tabla del diccionario de datos.

DDIC_OUTPUTLEN:
Especifica la longitud de salida. Para campos no referenciados al diccionario de datos.

SP_GROUP:
Si se marca este campo, el campo actual pertenecerá a un grupo que se especificará después en el parámetro IT_SPECIAL_GROUPS.

REPREP:
El campo será tomado como un criterio de selección

martes, enero 12, 2010

SAPSCRIPT - Leer variables del SAPSCRIPT

CALL FUNCTION 'GET_TEXTSYMBOL'
EXPORTING
line = '&PAGE&'
start_offset = 0
IMPORTING
value = hlp_page.