Olá Nur,
Na minha opinião, você deve manter a tabela de Ordens de Produção como tabela base e vincular o problema de produção e a recepção de dados de produção a ela.
Por favor, teste o seguinte script como exemplo e faça alterações conforme suas necessidades. Este script não lida com a decomposição de Ordens de Produção, pois sua lógica é completamente diferente.
Cumprimentos
Unnikrishnan
Declarar @FDate DateTime, @TDate DateTime
Selecionar @FDate = Min(A.DocDate), @TDate = Max(A.DocDate) from OIGN A where A.DocDate >=[%0] and A.DocDate<=[%1]
Definir @FDate =[%0]
Definir @TDate = [%1]
--Selecionar @FDate, @TDate
Selecionar PrdnHd.DocNum [Número da Ordem de Produção],PrdnHd.PostDate [Data de Publicação da Ordem de Produção], PrdnHd.CreateDate [Data de Criação da Ordem de Produção]
,Caso PrdnHd.Status when 'P' Then 'Planejado'
Quando 'R' então 'Liberado'
Quando 'L' então 'Fechado' end as [Estado da Ordem de Produção]
,PrdnHd.ItemCode[Código do Produto Acabado]
,PrdnHd.PlannedQty [Quantidade Planejada do Produto Acabado]
,PdnIss.IssDate [Data de Emissão de Matéria-Prima]
, PdnIss.IssQty [Quantidade de Emissão de Matéria-Prima], PdnIss.IssVal [Valor de Emissão de Matéria-Prima]
,PdnRec.RecDate [Data de Recebimento do Produto Acabado]
, PdnRec.RecQty [Quantidade de Recebimento do Produto Acabado], PdnRec.RecVal+isnull(PdnClosure.AdjVal,0) [Valor de Recebimento do Produto Acabado]
,isnull(PdnClosure.AdjVal,0)[Valor do Ajuste de Fechamento]
, isnull(PdnRec.RecQty,0)-isnull(PdnIss.IssQty,0) [Quantidade de Variação]
, (isnull(PdnRec.RecVal,0)+isnull(PdnClosure.AdjVal,0))-(isnull(PdnIss.IssVal,0)) [Valor da Variação]
from
OWOR PrdnHd
Esquerda Junte ( Selecionar A.AppObjAbs [Entrada de Produção]
,Max(A.DocDate) [IssDate]
,Sum(A.OutQty-A.InQty)[IssQty] , -Sum(A.TransValue)[IssVal]
from OINM A
Junte-se a OITM B em A.ItemCode = B.ItemCode
onde ((A.TransType =60 e A.ApplObj=202) ou (A.TransType =59 e A.ApplObj=202 e A.AppObjType='C'))
Agrupar Por A.AppObjAbs
)
PdnIss em PrdnHd.DocEntry = PdnIss.PdnEntry
Esquerda Junte ( Selecionar A.AppObjAbs [Entrada de Produção]
,Max(A.DocDate) [RecDate]
,Sum(A.InQty-A.OutQty)[RecQty] , Sum(A.TransValue)[RecVal]
from OINM A
onde A.TransType =59 e A.ApplObj=202 e A.AppObjType='P'
Agrupar Por A.AppObjAbs
)
PdnRec em PrdnHd.DocEntry = PdnRec.PdnEntry
Esquerda Junte ( SELECIONAR T0.CreatedBy[Entrada de Produção], Sum(T0.TransValue)[AdjVal]
DE OINM T0
ONDE T0.TransType = '202'
Agrupar Por T0.CreatedBy
Tendo Sum(T0.TransValue)<>0
)
PdnClosure em PrdnHd.DocEntry = PdnClosure.PdnEntry
Onde PrdnHd.PostDate >= @FDate e PrdnHd.PostDate <= @TDate
e PrdnHd.U_pType não em ('L','C')
Ordenar Por PrdnHd.PostDate ,PrdnHd.DocEntry