Um erro de cardinalidade pode produzir uma view que ativa normalmente e ainda assim entrega resultados financeiramente errados. Em ABAP CDS, JOINs e associações devem respeitar o relacionamento real entre as fontes. Uma chave declarada na projeção não corrige um resultado duplicado.
1. Por que os totais dobram?
Imagine 100 itens de pedido, cada um valendo R$ 50. O total esperado é R$ 5.000. Se cada item for ligado a uma fonte que possui duas linhas compatíveis e o JOIN não restringir essa relação, o resultado terá 200 linhas. Uma soma ingênua mostrará R$ 10.000, mesmo que cada montante de origem esteja correto.
2. JOIN ou associação?
O JOIN realiza a combinação necessária para aquela seleção. A associação define uma relação reutilizável que pode ser navegada pelo consumidor. Em ambos os casos, a cardinalidade precisa refletir a realidade da fonte. Não use [0..1] apenas por conveniência quando múltiplas correspondências são possíveis.
3. Caso recorrente: tabela de textos
Uma tabela de descrição pode ter uma linha por idioma. Um JOIN somente pelo código encontra textos em português, inglês e outros idiomas e multiplica linhas. Se o contrato pede português, a condição de idioma deve estar no relacionamento ou no filtro, conforme a modelagem e o comportamento necessário para textos ausentes.
Fonte principal: DOC ITEM VALOR
10 1 50
Texto sem filtro: CODIGO IDIOMA
A PT
A EN
JOIN incompleto: DOC ITEM VALOR TEXTO
10 1 50 PT
10 1 50 EN
Total original: R$ 50
Total duplicado: R$ 100
4. Testes que identificam o problema
- Conte as linhas e chaves distintas antes do join.
- Conte novamente após incluir cada fonte.
- Compare somas de valores monetários na mesma moeda.
- Verifique se os campos da condição
ONrealmente cobrem a chave lógica. - Teste textos em vários idiomas, registros sem correspondência e períodos de validade.