SAP CRM: Join tablas BUT000 y CRMD_PARTNER

Como es sabido por los desarrolladores del módulo de CRM, es imposible realizar una selección realizando join de las tablas BUT000 y CRMD_PARTNER en CRM debido a la diferencia de tipos entre el atributo PARTNER_NO de la tabla CRMD_PARTNER y del atributo PARTNER_GUID de la tabla BUT000.

Para poder realizar la selección, deberemos realizar un paso intermedio entre la selección a la tabla CRMD_PARTNER y la tabla BUT000. Este paso intermedio consistirá en la creación de un rango.

Os ponemos un ejemplo cómo realizar join de las tablas BUT000 y CRMD_PARTNER en CRM:

TYPES: BEGIN OF ty_bp_guid,
partner_guid LIKE but000-partner_guid,
END OF ty_bp_guid.

DATA: lt_bp_guid_aux TYPE TABLE OF ty_bp_guid,
lr_partner_guid TYPE RANGE OF but000-partner_guid,
ls_partner_guid LIKE LINE OF lr_partner_guid.

CLEAR lt_bp_guid_aux.
lt_bp_guid_aux[] = pt_bp_guid[].

LOOP AT lt_bp_guid_aux ASSIGNING FIELD-SYMBOL().
CLEAR ls_partner_guid.
ls_partner_guid-sign = ‘EQ’.
ls_partner_guid-option = ‘I’.
ls_partner_guid-low = -partner_guid.
APPEND ls_partner_guid TO lr_partner_guid.
ENDLOOP.

SELECT a~partner_guid, a~partner_no
FROM crmd_partner AS a INNER JOIN crmd_link AS b ON a~guid EQ b~guid_set
INNER JOIN crmd_orderadm_h AS c ON b~guid_hi EQ c~guid
INTO TABLE @DATA(lt_serv_oficinas)
WHERE a~partner_no IN @lr_partner_guid
AND a~partner_fct EQ ‘ZXXXXXXXX’
AND c~process_type EQ ‘ZPROC’.
IF sy-subrc EQ 0.

ENDIF.

Esperemos que os sea de ayuda a los que comenzáis a desarrollar en este módulo puesto que al principio suele ser un poco confuso.

Tienes más post sobre el módulo CRM en el siguiente enlace.