Inicio del área de contenido

Documentación proceso de fondo Soporte de índices para la determinación de números de objeto Localizar documento en árbol de navegación

Al contabilizar un documento dentro de la cuenta de resultados, el sistema busca un número de objeto PA para la combinación de valores de características aportados por este documento. Es muy importante que el sistema sea capaz de realizar esta operación lo más rápidamente posible; en caso contrario, el rendimiento total puede ver reducida sensiblemente su velocidad al transferir datos externos o al contabilizar facturas colectivas (en cuyos casos se contabiliza en una gran cantidad de objetos PA al mismo tiempo).

Esta sección describe desde un punto de vista técnico la manera en que el sistema encuentra el número de segmento y aborda los problemas potenciales. Esta información es válida para todos los releases que empiezan por 2.1A.

Estructura de datos de la tabla de objetos

Los elementos más importantes de la tabla de objetos CE4xxxx son el número de objeto, que se encuentra en la clave de la tabla, y las características de la sociedad PA, que forman la parte de datos. La tabla CE4xxxx está estructurada como se describe a continuación:

Nom. de campo

Tecla

Comentarios

MANDT

X

Mandante

AKTBO

X

actualmente siempre "X"

PAOBJNR

X

Número de objeto PA

PASUBNR

X

actualmente siempre "0001"

KNDNR

 

Número de cliente

ARTNR

 

Número de material

FKART

 

Clase de operación

otras características fijas

características definidas en la sociedad PA en el Customizing

campos técnicos adicionales

Cada número de objeto representa una combinación específica de valores de característica.

Selección desde la tabla de objetos para buscar el número de objeto

Cuando un documento (p. ej. un documento de facturación o un documento de la liquidación de la orden o de datos externos) se contabiliza en la Cuenta de resultados, el sistema necesita determinar el número de objeto adecuado basado en la combinación de valores de característica aportados por el documento. Para hacerlo, el sistema selecciona en la tabla de objeto utilizando todos los valores especificados en la parte de datos. La selección tiene el aspecto siguiente:

 

SELECT * FROM CE4xxxx

WHERE AKTBO = "X"

AND KNDNR = ...

AND ARTNR = ...

AND FKART = ...

AND (el resto de características especificadas)

Una condición de mandante está también especificada implícitamente por el sistema de tiempo de ejecución ABAP.

El índice secundario estándar

La velocidad con la que el sistema busca números de objeto en la tabla de objetos es muy importante para el rendimiento total del sistema en el traslado de facturas colectivas, datos externos o contabilizaciones (liquidación de la orden, contabilizaciones directas de FI) a objetos PA.

El índice principal (ID índice 0) para la clave de la tabla de objeto no es adecuado para la selección anterior. En consecuencia, SAP intenta soportar este acceso especial mediante un índice secundario adecuado (ID índice 1). En el sistema estándar, este índice contiene algunas de las características fijadas que se encuentran en cada sociedad PA:

 

Nota

Uso de índices para consultas de búsqueda

Un índice contiene una copia de sólo unos cuantos campos de una tabla de base de datos. En el índice estos campos se clasifican (en contraposición con los datos de la tabla misma). Esto permite al sistema acceder a los datos del índice más rápidamente. Además, cada entrada de índice "apunta" hacia el registro de datos correspondiente de la tabla.

Cuando existen condiciones especificadas para campos contenidos en un índice durante una orden de búsqueda, el sistema puede procesar parte de esta orden de búsqueda simplemente utilizando los datos contenidos en el índice. En consecuencia, algunas entradas de índice (y los registros de datos correspondientes) pueden descartarse sin que el sistema tenga que leer la tabla directamente.

A continuación, el sistema necesita leer los registros de datos de la tabla correspondientes a las entradas de índice restantes. Sólo entonces puede determinarse si un registro de datos satisface también el resto de la consulta de búsqueda, es decir, si pertenece a la lista de aciertos. El tiempo requerido para leer todos los registros de datos es largo, en comparación con el que se requiere para leer el índice.

Por consiguiente, debería intentarse definir el índice de manera que el número de registros de datos que debe leerse de la tabla no sea muy superior al número de registros que realizan la condición de búsqueda. Este tipo de índice es conocido como índice selectivo, dado que lleva a cabo la mayor parte de la selección para la consulta para búsqueda.

Ejemplo

1: Cuenta de resultados en el nivel de cliente/producto

Si se están utilizando las características "Cliente" y "Producto" en el nivel de objeto, el sistema trasladará automáticamente los documentos de facturación desde SD hasta COPA con ese nivel de detalle. Por lo tanto, cuando el sistema busca el número de objeto PA para una posición de documento de facturación, los valores de las características "Cliente" (KNDNR) y "Producto" (ARTNR), se encuentran en el comando SELECT. Ambas características poseen una gran cantidad de valores en la tabla de objeto (son campos selectivos en la tabla de objeto). En consecuencia, el índice secundario MANDT, AKTBO, KNDNR, ARTNR, BUKRS, WERKS, VTWEG es también selectivo, y es posible determinar el número de objeto PA rápidamente.

Ejemplo

2: Cuenta de resultados en un nivel superior

Examinemos ahora el caso de un sistema en el que las características "Cliente" y "Producto" no son características de nivel de objeto. (Véase también Datos maestros ® Estructuras ® Definir características del objeto PA (utliliz.características) en el Customizing).

En este caso los campos KNDNR y ARTNR están vacíos en todos los registros en el nivel de objeto CE4xxxx. En consecuencia, el índice antes mencionado no es selectivo. En este caso, la selección para buscar el número de objeto PA lee:

SELECT * FROM CE4xxxx

WHERE AKTBO = "X"

AND KNDNR = "          "

AND ARTNR = "                           "

AND FKART = fixed value

AND (el resto de características especificadas)

 

El problema con el que nos encontramos es que los campos selectivos independientes (en este caso puede tratarse del grupo de clientes y el sector), están especificados en la selección pero no se encuentran en el índice secundario utilizado. Por otro lado, los campos menos selectivos comparativamente -- MANDT (normalmente un valor), AKTBO (siempre "X"), KNDNR y ARTNR (siempre en blanco), BUKRS, WERKS y VTWEG (normalmente sólo unos cuantos valores distintos) -- están contenidos en el índice secundario. Cuando el sistema lee este índice (scan rango de índices), tiene que leer también todos los registros de la tabla de objetos que contienen los valores especificados para MANDT, AKTBO, KNDNR, ARTNR, BUKRS, WERKS, y VTWEG. En el peor de los casos, podría tener que leer incluso toda la tabla de objetos. En consecuencia, puede ser que el sistema lea demasiado, y entonces la consulta sea extremadamente lenta. Esto a su vez incide considerablemente en los tiempos de ejecución para los documentos de facturación.

Estos ejemplos producen la regla siguiente:

Regla:

Un índice secundario es útil como apoyo para determinar un número de objeto si éste contiene las características restrictivas, no relacionadas lógicamente, de la tabla de objetos. Los campos MANDT y AKTBO deben ser los primeros campos en el índice secundario. Si no es así, el sistema de base de datos leerá el índice principal.

Ejemplo

3: Un índice secundario adecuado

Si el sistema utiliza las características "Cliente" y "Producto" en el nivel de objeto, se debe utilizar un índice que contenga los campos MANDT, AKTBO, KNDNR y ARTNR. Por otro lado, si no se está utilizando "Cliente" y "Producto", y si el grupo de clientes (KDGRP) y el sector (SPART) son las características independientes, será mucho más lógico utilizar un índice con los campos MANDT, AKTBO, KDGRP y SPART. Por lo tanto, para crear un índice secundario adecuado, se necesita saber la jerarquía lógica de las características de su sociedad PA.

Contabilizaciones en varios niveles jerárquicos

El índice secundario propuesto en la regla anterior permitiría al sistema determinar rápidamente el número de objeto para los documentos de facturación. Sin embargo, surge otro problema cuando se contabilizan datos de otras operaciones en otros niveles jerárquicos.

Ejemplo

3.1: Transferencia externa de datos planificados en un nivel superior

A continuación examinaremos el caso de una sociedad PA que tiene el cliente y el producto en el nivel de objeto, pero en la que la planificación se realiza en el grupo de clientes (KDGRP) y en el nivel (SPART) de sector. También en este caso, el índice secundario indicado anteriormente (MANDT, AKTBO, KNDNR, ARTNR), es adecuado para trasladar documentos de facturación.

Sin embargo, al crear documentos plan en un nivel superior, pueden aparecer problemas de rendimiento cuando el sistema intenta buscar los números de objeto. Para ello, el sistema necesita leer todos los registros de la tabla de objetos en los que los campos KNDNR y ARTNR estén en blanco. Si existe una gran cantidad de registros, el rendimiento empeora considerablemente.

Ejemplo

3.2: Cuenta de resultados contable

Un problema similar surge cuando se trabaja en el nivel cliente/producto de la CO-PA analítica y estas características no son utilizadas en la CO-PA contable.

En consecuencia, es necesario corregir la regla fijada anteriormente. En el índice secundario no deben incluirse únicamente las características no relacionadas lógicamente. Por lo tanto:

Regla:

Un índice "óptimo" para soportar la determinación de número de objeto debe contener -- después de MANDT y AKTBO -- todas las características restrictivas no relacionadas lógicamente, respecto a todas las selecciones de número de objeto (incluyendo las realizadas en niveles superiores).

Notas

Ejemplo

4: Índice secundario óptimo

En el ejemplo anterior (datos reales en el nivel cliente/producto y planificación en el nivel cliente/grupo/sector), un índice secundario consistente en MANDT, AKTBO, KNDNR, ARTNR, KDGRP, SPART sería suficiente. Si se requieren también objetos PA en niveles superiores (p. ej., debido al subreparto del centro de coste), deberá ampliarse de nuevo este índice.

Atención

No es oportuna la creación de índices adicionales (p. ej. un índice 1 con MANDT, AKTBO, KNDNR, ARTNR y un índice 2 con MANDT, AKTBO, KDGRP, SPART) en lugar de ampliar el primer índice. Dado que la condición de selección para buscar el número de objeto PA está siempre especificada completamente, el sistema siempre utiliza el mismo índice.

Nota

SAP recomienda encarecidamente substituir el ejemplo SAP de índice secundario (código de índice 001), por un índice secundario optimizado según sus circunstancias particulares.

Nota

Puede comprobar si el índice secundario que creó está siendo utilizado realmente para buscar números de objeto en la operación ST05 (trace SQL) y con el pulsador Explicar SQL. Véase también Comprobación de índice en uso.

La función Explicar SQL muestra la estrategia de acceso a la base de datos al procesar una instrucción SELECT. Deberá buscar una instrucción OPEN o REOPEN para la tabla CE4xxxx en la representación en forma de lista de trace SQL. Observando el tiempo que allí se indica (que debería ser siempre muy inferior a 100 milisegundos), uno puede hacerse una idea sobre la absoluta eficacia de la vía de acceso marcada.

 

 

 

 

 

 

 

Fin del área de contenido