cancel
Showing results for 
Search instead for 
Did you mean: 

Relatório de entrega de mercadorias com a data da devolução, quando houver.

Former Member
0 Kudos

Bom dia.

Preciso gerar um relatório que contenha uma lista com os registros da tabela de entrega de mercadorias (ODLN). Nesse mesmo relatório, eu preciso que apareça a data da devolução da mercadoria localizada na tabela ORDN. Nem sempre a mercadoria já foi devolvida, ou seja, só preciso trazer um registro da ORDN quando ele existir, por isso a utilização do LEFT JOIN.

O relacionamento entre as tabelas, foi feito através de um campo de observações, não consegui achar um campo numérico que relacionasse as duas.

O meu problema é o seguinte, construi o SQL abaixo para trazer os registros, no formato que preciso para o relatório:

SELECT
A.DocDate as Data,
A.Serial as Num,
A.CardName as Destinatario,

(SELECT TOP 1 B.DocDate FROM ODLN A LEFT JOIN ORDN B ON B.Comments LIKE '%mercadoria '+CONVERT(VARCHAR,A.DocNum)+'.%' ORDER BY B.DocDate DESC) as Devolucao,

DATEADD(day,20,A.DocDate) as Vinte,
DATEADD(day,30,A.DocDate) as Trinta,
DATEADD(day,45,A.DocDate) as QuarentaeCinco,
DATEADD(day,60,A.DocDate) as Sessenta
FROM dbo.ODLN A
ORDER BY Data DESC

A parte destacada é onde eu faço o relacionamento das duas tabelas. Quando uso esse relacionamento em uma consulta isolada, consigo trazer as datas da forma correta. Quando uso como no exemplo acima, todas as datas vêm como 10-07-2013, inclusive os registros que não têm devolução vem com problema.

Alguém sabe onde está o erro?

Obrigado.

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Bom dia!

O caminho que a Mayara passou é o correto, só acrescentando eu verificaria item a item da nota pois, não sei se é o seu caso, em uma nota com diversos itens, esses podem voltar em datas diferentes.

select

    dln1.ItemCode as Item, dln1.Dscription as Descricao, odln.DocDate as [Data Envio], ODLN.Serial as [NF entrega],

    odln.CardName as Destinatario, ordn.DocDate as [Data Dev.], ordn.Serial as [NF Dev.]

from

    DLN1

    join ODLN on dln1.DocEntry = odln.DocEntry

    left outer join RDN1 on DLN1.TrgetEntry = rdn1.DocEntry

    left outer join ORDN on rdn1.DocEntry = ordn.DocEntry

order by

    odln.Serial desc

Espero ter ajudado

Eric

Former Member
0 Kudos

A consulta acima estava trazendo os cancelamentos também, abaixo estou restringindo o a visualização dos registros que são cancelamentos e eliminando alguns itens que estavam duplicados

select distinct

    dln1.ItemCode as Item, dln1.Dscription as Descricao, odln.DocDate as [Data Envio], ODLN.Serial as [NF entrega],

    odln.CardName as Destinatario, ordn.DocDate as [Data Dev.], ordn.Serial as [NF Dev.]

from

    DLN1

    join ODLN on dln1.DocEntry = odln.DocEntry

    left outer join RDN1 on DLN1.TrgetEntry = rdn1.DocEntry

    left outer join ORDN on rdn1.DocEntry = ordn.DocEntry

where

    -- na linha abaixo tiro os cancelamentos

    (CASE when (dln1.TrgetEntry is not null and ordn.SeqCode = 1) then 'Y' else 'N' end) = 'N'

order by

    odln.Serial desc

Att.

Eric

Former Member
0 Kudos

Olá Bunno,

Realmente não há uma ligação direta entre as tabelas ODLN e a ORDN, mas na tabela filha da ORDN (RDN) existe!! 

Veja como ficou a consulta utilizando esta tabela:

SELECT

A.DocDate as Data,

A.Serial as Num,

A.CardName as Destinatario,

(select top 1 docdate from rdn1 where BaseRef = A.docNum) as Devolucao,

DATEADD(day,20,A.DocDate) as Vinte,

DATEADD(day,30,A.DocDate) as Trinta,

DATEADD(day,45,A.DocDate) as QuarentaeCinco,

DATEADD(day,60,A.DocDate) as Sessenta

FROM dbo.ODLN A

ORDER BY Data DESC