¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Vinculando documentos en informes Crystal de SAP B1: Tablas base y objetivo.

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 13 Vistas
0
Cargando...

¿Alguien podría esbozar una tabla genérica que vincule un documento base y un documento objetivo para un informe Crystal basado en SAP B1?

Por ejemplo, ¿cómo se conecta una orden de venta (ORDR, RDR1) con una factura (OINV, INV1)? Entiendo el concepto de un documento basado en otro documento, pero los campos de la base de datos en estas tablas no parecen ser sencillos en absoluto.

Aquí está mi enfoque:

La orden de venta es el documento base y la factura es el documento objetivo.

Las tablas de encabezado se vinculan a las tablas de línea a través de los campos DocEntry y ObjType. DocEntry es numérico, ObjType es una cadena de texto. Las tablas de encabezado (OINV, ORDR) no tienen campos específicos de base o objetivo, por lo que hay que vincular los documentos base a los documentos objetivo a través de las tablas de línea (INV1, RDR1). Las tablas de línea tienen estos campos:

ActBaseEnt (número)

ActBaseLn (número)

ActBaseNum (número)

BaseDocNum (número)

BaseEntry (número)

BaseLine (número)

BaseRef (número almacenado como cadena de texto)

BaseType (número)

TargetType (número)

TrgetEntry (número)

Supongamos que la orden de venta no tiene un documento base y la factura no tiene un documento objetivo. Por lo tanto, en RDR1, todos los campos anteriores excepto los dos últimos estarían en blanco/nulos. RDR1.TargetType sería = 13 (número) y RDR1.TrgetEntry sería el DocEntry en OINV o INV1. Por otro lado, en INV1, solo TargetType y TrgetEntry estarían en blanco/nulos. Todos los otros campos anteriores estarían relacionados con el documento base de la orden de venta.

En RDR1, TargetType = 13 (número) y en INV1, BaseType = 17 (número). Ninguno de estos campos puede vincularse directamente al campo ObjType en ninguna tabla, ya que ObjType es una cadena de texto. ¿Cómo se pueden vincular estos dos documentos sin tener que escribir un Comando de informe que convierta números en cadenas de texto o viceversa?

BaseDocNum en una tabla de línea solo puede conectarse a una tabla de encabezado, ya que DocNum no existe en las tablas de línea. ¿Qué sucede si BaseDocNum está en blanco? BaseRef es típicamente el DocNum almacenado como texto. ¿Qué propósito sirve? ¿Es relevante para esta discusión?

Entonces, ¿qué necesita conectarse con qué para vincular estos dos documentos en un informe Crystal?

Estos conectan cada encabezado con cada tabla de línea:

ORDR.DocEntry >> RDR1.DocEntry

ORDR.ObjType >> RDR1.ObjType

OINV.DocEntry >> INV1.DocEntry

OINV.ObjType >> INV1.ObjType

¿Son estas las conexiones correctas?:

INV1.BaseDocNum >> ORDR.DocNum

INV1.BaseEntry >> ORDR.DocEntry          o     INV1.BaseEntry >> RDR1.DocEntry

INV1.BaseLine >> RDR1.LineNum

¿Hay alguna más?

Gracias por toda la asistencia. Y, por favor, no se incluya código SQL como explicación.

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

¡Gracias, Gordon!

En realidad, utilicé un comando de Crystal para crear un campo de datos adicional convirtiendo el tipo de datos del campo ObjType en la tabla de líneas del documento base para poder vincularlo con la tabla de líneas del documento objetivo. Específicamente,

SELECT CONVERT(INT, ObjType) AS ObjTypeInt, *

FROM LineTable


Esto me permitió traer el documento base, el número de línea y el tipo de objeto apropiados y vincularlos al documento objetivo.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola,

Prueba esto si deseas obtener todas las órdenes de venta. De lo contrario, cambia todos los left join por inner join:

ORDR T0

INNER JOIN RDR1 T1 ON T0.DocEntry = T1.DocEntry

left join INV1 T2 on T2.[BaseEntry] = T0.Docentry and T2.[BaseLine] = T1.[LineNum]

left JOIN OINV T3 ON T2.DocEntry = T3.DocEntry

Gracias

Gordon

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Nagarajan, gracias. Probaré tu sugerencia. Parece bastante simple y entiendo las conexiones.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola,

Prueba este enlace:

ORDR T0 INNER JOIN RDR1 T1 ON T0.DocEntry = T1.DocEntry left join INV1 T2 on T2.[BaseEntry] = T1.Docentry and T2.[BaseLine] = T1.[LineNum] INNER JOIN OINV T3 ON T2.DocEntry = T3.DocEntry

Gracias y saludos,

Nagarajan

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?