Esta consulta esta dirigida en especial a la comunidad de Abaper’s de este foro.
Buenos les adelanto que ya tengo mi primer Ticket para un nuevo desarrollo como ABAP !!
Bueno en fin les comento de que se trata mas o menos:
El área de Mercadeo de la empresa, trabaja con muchas promociones al año para capturar datos como Email, Teléfonos, Twitter de los clientes afiliados a los distintos servicios que se ofrecen. En este caso están requiriendo un reporte que muestre todo los clientes que hayan actualizado tanto el correo electrónico, como el teléfono en un rango de fecha determinado.
Anteriormente había trabajado en un query para sacar este información pero la verdad me surgió un inconveniente al consultar la tabla CDPOS que contiene la clase de objetos que han sido tanto insertados como modificados. El inconveniente surge es porque a través de la DBACOCKPIT - SQL Command Editor, no puede generar la consulta porque el sistema no lo permite y según he leído es por una restricción que el sistema coloca a esta tabla y la CDHDR (Si alguien puede explicarme el ¿porque? se los agradecería).
En fin y para no aburrirlos, estoy en fase de diseño de la solución y ya tengo las tablas que debo utilizar para sacar toda la información:
Tablas:
BUT000 - Para Nombres y Apellidos de Clientes
ADR6 - Emails
ADR2 - Telefonos
CDPOS - Para validar los registros modificados en el rango de fechas
Lo que estaba pensando era generar una tabla interna de la CDPOS con los campos que realmente me hacen falta que son OBJECTID - TABNAME - VALUENEW Y VALUEOLD, pero adelantándome a los acontecimientos, no se si en algún momento puede generarme el mismo inconveniente al realizar la consulta pero desde ABAP.
Ya estas trabajando como un verdadero ABAP, realizando analisis y pensando en consultas relacionales +10.
En la LFA1 estan todos los clientes, y en esta tabla tienen un campo que dice ADRNR, direccion esa direccion es la que te pide las tablas de direcciones de SAP.
desde que ley ABAPERS jajaj me oriente a modulos de FI, SD, MM, CO. y olvide preguntar de que system hablabas.
no tengo CRM a mano para poder iluminar tu consulta, pero invitare al equipo.
La tabla BUT0000 es el maestro de Clientes tanto en CRM como en SAP IS-U:CCS. Como indicas, en esta tabla esta el nombre de los clientes, pero ten en cuenta que dependiendo del valor en el campo TYPE puede estar en un campo u otro.
Si TYPE = 1 (dejame verificar el valor, no estoy seguro) indica que el BP es Empresa y el nombre esta en campos NAME_ORG1, NAME_ORG2, NAME_ORG3, NAME_ORG4
Si TYPE = 2 (igual, voy a verificar) indica que el BP es Persona y el nombre esta en NAME_LAST, NAME_FIRST, NAME_LST2, NAME_LAST2
Tienes que tener cuidado para leerte la CDPOS, porque te puedes tumbar el perfomance del server debido al tamaño de esta tabla. Entra primero a la CDHDR por sus campos claves OBJECTCLAS=‘BUPA_BUP’ +OBJECTID + UDATE. Y luego con los valores obtenido le entras a la CDHDR por su PK: OBJECTCLAS+OBJECTID+CHANGENR.
Es posible que me haya equivocado en algo, te estoy dando esta informacion de memoria, ahorita no tengo r/3 disponible. De todas formas, mañana verifico los datos y si tal corrijo.
Estamos a la orden, te puedo ayudar bastatnte con este desarrollo.
Hasta ahorita estoy leyendo los mensajes porque he estado algo complicado de tiempo hoy.
Efectivamente ya tome en cuenta lo que me comentas @MarcosJaimes.
Lo que estoy pensando es justamente a partir de los parámetros de entrada (Rango de Fechas) es alimentar un tabla interna a partir de una estructura con los campos estrictamente necesario de la CDHDR, para luego realizar un JOIN con otra tabla interna que almacene los campos de valores en la CDPOS. (Aun no se como hacer esto ultimo en código pero mas o menos es lo que he estado diagramando )
Para manejo de data en memoria y siempre que sea poca data 5 o 10 mil rows, los for all entries resuelven.
Sin embargo para grandes cantidaddes de data up to 10 mil rows los inner joins suelen ser mas rapidos.
jajajja tranquilo @canuto para eso esta el grupo, para aclarar dudas.
Las sentencias no cambian para nada con respecto al ERP, lo que si cambia es el modelo de datos(Tablas, Estructuras, etc).
Ahora en la mañana estaba en un servicio MaxAttencion de SAP por un proyecto que se va a iniciar a principios del año que entra para la migracion a HANA y por lo que observe, hay un perfil que es ABAP for HANA, aquí las sentencias si cambian…
Yo siempre he diferido con mi amigo @smota con relación al uso de los For All Entries.
En el único escenario que recomiendo usarlo (porque no hay otra opción), es cuando se desea realizar un Join de una tabla cluster con otra (por ejemplo la BSEG). De lo contrario siempre que puedas realiza tus joins tomando en consideración los índices de las tablas.
Tal vez es muy tarde pero existe la tx RSSCD100 - Visualizar documentos modificación, que despliega información referente a logs de modificación (programa RSSCD100).
Yo la he utilizado principalmente para ver quién eliminó documento como la entrega.
Algunas clases de objeto que he visto
BANF: modificaciones de solicitudes de pedido.
LIEFERUNG: modificaciones sobre entregas.
VERKBELEG: modificaciones de pedidos de ventas.
FAKTBELEG: Documento de facturación
COND_A: modificaciones de condiciones de precio.
MATERIAL: log de modificaciones sobre el maestro de materiales.
EINKBELEG: log de modificaciones de pedidos de compra.
para los próximos que necesiten realizar un reporte respecto a logs de modificaciones. pueden usar este reporte como base. saludos.
Mira, al parecer el CRM utiliza el mismo core del R/3 porque en este cliente que estoy no tienen el CRM instalado mas sin embargo está la tabla que @johnny282 necesita para su aplicación: