Hi Nur,
Según mi opinión, debes mantener la tabla de órdenes de producción como tabla base y vincular el problema de producción y la recepción de datos de producción a ella.
Por favor, prueba el siguiente script como ejemplo, y puedes hacer cambios según tus requerimientos. Este script no maneja la descomposición de órdenes de producción ya que su lógica es completamente diferente.
Saludos cordiales
Unnikrishnan
Declarar @FDate DateTime, @TDate DateTime
Seleccionar @FDate = Min(A.DocDate), @TDate = Max(A.DocDate) from OIGN A where A.DocDate >=[%0] and A.DocDate<=[%1]
Establecer @FDate =[%0]
Establecer @TDate = [%1]
--Seleccionar @FDate, @TDate
Seleccionar PrdnHd.DocNum [Número de Orden de Producción],PrdnHd.PostDate [Fecha de Publicación de la Orden de Producción], PrdnHd.CreateDate [Fecha de Creación de la Orden de Producción]
,Caso PrdnHd.Status when 'P' Then 'Planificado'
Cuando 'R' entonces 'Liberado'
Cuando 'L' entonces 'Cerrado' end as [Estado de la Orden de Producción]
,PrdnHd.ItemCode[Código de Producto Terminado]
,PrdnHd.PlannedQty [Cantidad Planificada de Producto Terminado]
,PdnIss.IssDate [Fecha de Publicación de Emisión de Materia Prima]
, PdnIss.IssQty [Cantidad de Emisión de Materia Prima], PdnIss.IssVal [Valor de Emisión de Materia Prima]
,PdnRec.RecDate [Fecha de Publicación de Recepción de Producto Terminado]
, PdnRec.RecQty [Cantidad de Recepción de Producto Terminado], PdnRec.RecVal+isnull(PdnClosure.AdjVal,0) [Valor de Recepción de Producto Terminado]
,isnull(PdnClosure.AdjVal,0)[Valor de Ajuste de Cierre]
, isnull(PdnRec.RecQty,0)-isnull(PdnIss.IssQty,0) [Cantidad de Variación]
, (isnull(PdnRec.RecVal,0)+isnull(PdnClosure.AdjVal,0))-(isnull(PdnIss.IssVal,0)) [Valor de Variación]
from
OWOR PrdnHd
Izquierda Unir ( Seleccionar A.AppObjAbs [Entrada de Producción]
,Max(A.DocDate) [IssDate]
,Sum(A.OutQty-A.InQty)[IssQty] , -Sum(A.TransValue)[IssVal]
from OINM A
Unirse a OITM B en A.ItemCode = B.ItemCode
donde ((A.TransType =60 y A.ApplObj=202) o (A.TransType =59 y A.ApplObj=202 y A.AppObjType='C'))
Agrupar Por A.AppObjAbs
)
PdnIss en PrdnHd.DocEntry = PdnIss.PdnEntry
Izquierda Unir ( Seleccionar A.AppObjAbs [Entrada de Producción]
,Max(A.DocDate) [RecDate]
,Sum(A.InQty-A.OutQty)[RecQty] , Sum(A.TransValue)[RecVal]
from OINM A
donde A.TransType =59 y A.ApplObj=202 y A.AppObjType='P'
Agrupar Por A.AppObjAbs
)
PdnRec en PrdnHd.DocEntry = PdnRec.PdnEntry
Izquierda Unir ( SELECCIONAR T0.CreatedBy[Entrada de Producción], Sum(T0.TransValue)[AdjVal]
DESDE OINM T0
DONDE T0.TransType = '202'
Agrupar Por T0.CreatedBy
Teniendo Sum(T0.TransValue)<>0
)
PdnClosure en PrdnHd.DocEntry = PdnClosure.PdnEntry
Donde PrdnHd.PostDate >= @FDate y PrdnHd.PostDate <= @TDate
y PrdnHd.U_pType no en ('L','C')
Ordenar Por PrdnHd.PostDate ,PrdnHd.DocEntry