Avalados por :

Conectando documentos em relatórios Crystal do SAP B1: Tabelas base e objetivo.

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

Alguém poderia esboçar uma tabela genérica que vincule um documento base e um documento alvo para um relatório Crystal baseado no SAP B1?

Por exemplo, como conectar uma ordem de venda (ORDR, RDR1) com uma fatura (OINV, INV1)? Entendo o conceito de um documento baseado em outro documento, mas os campos do banco de dados nessas tabelas não parecem ser simples de forma alguma.

Aqui está minha abordagem:

A ordem de venda é o documento base e a fatura é o documento alvo.

As tabelas de cabeçalho são vinculadas às tabelas de linha através dos campos DocEntry e ObjType. DocEntry é numérico, ObjType é uma cadeia de texto. As tabelas de cabeçalho (OINV, ORDR) não possuem campos específicos de base ou alvo, então é necessário vincular os documentos base aos documentos alvo através das tabelas de linha (INV1, RDR1). As tabelas de linha possuem estes campos:

ActBaseEnt (número)

ActBaseLn (número)

ActBaseNum (número)

BaseDocNum (número)

BaseEntry (número)

BaseLine (número)

BaseRef (número armazenado como cadeia de texto)

BaseType (número)

TargetType (número)

TrgetEntry (número)

Suponhamos que a ordem de venda não tem um documento base e a fatura não tem um documento alvo. Portanto, em RDR1, todos os campos acima, exceto os dois últimos, estariam em branco/nulos. RDR1.TargetType seria = 13 (número) e RDR1.TrgetEntry seria o DocEntry em OINV ou INV1. Por outro lado, em INV1, apenas TargetType e TrgetEntry estariam em branco/nulos. Todos os outros campos acima estariam relacionados ao documento base da ordem de venda.

Em RDR1, TargetType = 13 (número) e em INV1, BaseType = 17 (número). Nenhum destes campos pode ser vinculado diretamente ao campo ObjType em qualquer tabela, pois ObjType é uma cadeia de texto. Como conectar estes dois documentos sem ter que escrever um Comando de relatório que converta números em cadeias de texto ou vice-versa?

BaseDocNum em uma tabela de linha só pode se conectar a uma tabela de cabeçalho, já que DocNum não existe nas tabelas de linha. O que acontece se BaseDocNum estiver em branco? BaseRef é tipicamente o DocNum armazenado como texto. Qual é o propósito? É relevante para esta discussão?

Então, o que precisa se conectar com o quê para vincular estes dois documentos em um relatório Crystal?

Estas conectam cada cabeçalho com cada tabela de linha:

ORDR.DocEntry >> RDR1.DocEntry

ORDR.ObjType >> RDR1.ObjType

OINV.DocEntry >> INV1.DocEntry

OINV.ObjType >> INV1.ObjType

Estas são as conexões corretas?:

INV1.BaseDocNum >> ORDR.DocNum

INV1.BaseEntry >> ORDR.DocEntry          ou     INV1.BaseEntry >> RDR1.DocEntry

INV1.BaseLine >> RDR1.LineNum

Há mais alguma?

Obrigado por toda a assistência. E, por favor, não inclua código SQL como explicação.

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

4 Respuestas

0
Cargando...

°Obrigado, Gordon!

Na verdade, usei um comando do Crystal para criar um campo de dados adicional convertendo o tipo de dados do campo ObjType na tabela de linhas do documento base para poder vinculá-lo com a tabela de linhas do documento alvo. Especificamente,

SELECT CONVERT(INT, ObjType) AS ObjTypeInt, *

FROM LineTable


Isso me permitiu trazer o documento base, o número da linha e o tipo de objeto apropriados e vinculá-los ao documento alvo.

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

Olá,

Experimente isso se quiser obter todos os Pedidos de Venda. Caso contrário, altere todos os left join para 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

Obrigado

Gordon

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

Nagarajan, obrigado. Vou testar sua sugestão. Parece bastante simples e entendo as conexões.

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

Olá,

Experimente este link:

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

Obrigado e cumprimentos,

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?