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.