@AbapCatalog.sqlViewName: 'PMPEOAIAMAT'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@ClientHandling.algorithm: #SESSION_VARIABLE
@ObjectModel.usageType: {serviceQuality: #C, sizeCategory: #XL, dataClass: #TRANSACTIONAL}
@VDM.viewType: #COMPOSITE
@VDM.private: true
define view P_OpActyInstanceAssembledComp
-- Directly assembled components
as select from I_MfgOrderComponentAssembly as MfgOrderComponentAssembly
left outer to one join I_OpActyComponentAssignment as OpActyComponentAssignment on MfgOrderComponentAssembly.OpActyNtwkInstance = OpActyComponentAssignment.OpActyNtwkInstance
and MfgOrderComponentAssembly.OpActyNtwkElement = OpActyComponentAssignment.OpActyNtwkElement
and MfgOrderComponentAssembly.Reservation = OpActyComponentAssignment.Reservation
and MfgOrderComponentAssembly.ReservationItem = OpActyComponentAssignment.ReservationItem
and MfgOrderComponentAssembly.RecordType = OpActyComponentAssignment.RecordType
left outer to one join I_ReservationItem as ReservationItem on ReservationItem.Reservation = OpActyComponentAssignment.Reservation
and ReservationItem.ReservationItem = OpActyComponentAssignment.ReservationItem
and ReservationItem.RecordType = OpActyComponentAssignment.RecordType
{
key MfgOrderComponentAssembly.OpActyNtwkInstance,
key MfgOrderComponentAssembly.OpActyNtwkElement,
key MfgOrderComponentAssembly.Reservation,
key MfgOrderComponentAssembly.ReservationItem,
key MfgOrderComponentAssembly.RecordType,
key MfgOrderComponentAssembly.Material,
key MfgOrderComponentAssembly.Plant,
cast(max(ReservationItem.StorageLocation) as lgort_d preserving type ) as StorageLocation,
cast(max(OpActyComponentAssignment.BOOOpBOMItemInternalID) as cim_zuord preserving type ) as BOOOpBOMItemInternalID,
@Semantics.quantity.unitOfMeasure: 'BaseUnit'
cast(max(OpActyComponentAssignment.MfgOrderComponentUsageNetQty) as esmng preserving type ) as MfgOrderComponentUsageNetQty,
@Semantics.quantity.unitOfMeasure: 'BaseUnit'
cast(sum(MfgOrderComponentAssembly.MaterialComponentQuantity) as kmpmg preserving type ) as MaterialComponentQuantity,
@Semantics.unitOfMeasure: true
cast(max(MfgOrderComponentAssembly.MaterialBaseUnit) as meins preserving type ) as BaseUnit,
@Semantics.quantity.unitOfMeasure: 'EntryUnit'
cast(sum(MfgOrderComponentAssembly.QuantityInEntryUnit) as erfmgv preserving type ) as QuantityInEntryUnit,
@Semantics.unitOfMeasure: true
cast(max(MfgOrderComponentAssembly.EntryUnit) as erfme preserving type ) as EntryUnit,
cast('' as mpe_comp_is_for_backflush preserving type) as MatlCompIsMarkedForBackflush,
cast(coalesce(ReservationItem.GoodsMovementIsAllowed, 'X') as xwaok preserving type ) as GoodsMovementIsAllowed,
cast(max(OpActyComponentAssignment.MatlCompInstceAssyIsRequired) as mpe_instce_assembly_rqd preserving type) as MatlCompInstceAssyIsRequired,
OpActyComponentAssignment.MfgRefStrucBOMLeafAssgmtUUID,
OpActyComponentAssignment.MfgRefStructureItemDetailUUID,
OpActyComponentAssignment.MfgRefStrucItmDetIsContextual,
MfgOrderComponentAssembly._OperationActivityInstance
}
group by
MfgOrderComponentAssembly.OpActyNtwkInstance,
MfgOrderComponentAssembly.OpActyNtwkElement,
MfgOrderComponentAssembly.Reservation,
MfgOrderComponentAssembly.ReservationItem,
MfgOrderComponentAssembly.RecordType,
MfgOrderComponentAssembly.Material,
MfgOrderComponentAssembly.Plant,
ReservationItem.GoodsMovementIsAllowed,
OpActyComponentAssignment.MfgRefStrucBOMLeafAssgmtUUID,
OpActyComponentAssignment.MfgRefStructureItemDetailUUID,
OpActyComponentAssignment.MfgRefStrucItmDetIsContextual
union all
-- Backflushed components
select from I_OpActyInstanceStatusBasic as OpActyInstanceStatus
inner join I_OpActyComponentAssignment as OpActyComponentAssignment on OpActyComponentAssignment.OpActyNtwkInstance = OpActyInstanceStatus.OpActyNtwkInstance
and OpActyComponentAssignment.OpActyNtwkElement = OpActyInstanceStatus.OpActyNtwkElement
inner join I_OrderComponent as OrderComponent on OrderComponent.Reservation = OpActyComponentAssignment.Reservation
and OrderComponent.ReservationItem = OpActyComponentAssignment.ReservationItem
and OrderComponent.RecordType = OpActyComponentAssignment.RecordType
inner join I_LogisticsOrderBasic as LogisticsOrderBasic on LogisticsOrderBasic.OrderID = OrderComponent.OrderID
{
key OpActyInstanceStatus.OpActyNtwkInstance,
key OpActyInstanceStatus.OpActyNtwkElement,
key OrderComponent.Reservation,
key OrderComponent.ReservationItem,
key OrderComponent.RecordType,
key OrderComponent.Material,
key OrderComponent.Plant,
OrderComponent.StorageLocation,
OpActyComponentAssignment.BOOOpBOMItemInternalID,
@Semantics.quantity.unitOfMeasure: 'BaseUnit'
OpActyComponentAssignment.MfgOrderComponentUsageNetQty,
@Semantics.quantity.unitOfMeasure: 'BaseUnit'
case OrderComponent.MaterialCompIsVariableSized
when 'X' then cast(round(fltp_to_dec(OpActyComponentAssignment.MfgOrderComponentUsageNetQty as abap.dec(13,4)), 3) as esmng )
* cast(OrderComponent.VariableSizeComponentQuantity as esmng ) * cast( LogisticsOrderBasic.OrderPlannedTotalQty as esmng )
else cast(round(fltp_to_dec(OpActyComponentAssignment.MfgOrderComponentUsageNetQty as abap.dec(13,4)), 3) as esmng )
* cast( LogisticsOrderBasic.OrderPlannedTotalQty as esmng )
end as MaterialComponentQuantity,
@Semantics.unitOfMeasure: true
OrderComponent.BaseUnit,
@Semantics.quantity.unitOfMeasure: 'EntryUnit'
cast( LogisticsOrderBasic.OrderPlannedTotalQty as esmng ) * OpActyComponentAssignment.MfgOrderComponentUsageNetQty as QuantityInEntryUnit,
@Semantics.unitOfMeasure: true
cast(case OrderComponent.MaterialCompIsVariableSized
when 'X' then OrderComponent.VariableSizeComponentUnit
else OrderComponent.BaseUnit
end as erfme preserving type) as EntryUnit,
cast(OrderComponent.MatlCompIsMarkedForBackflush as mpe_comp_is_for_backflush preserving type) as MatlCompIsMarkedForBackflush,
OrderComponent.GoodsMovementIsAllowed,
OpActyComponentAssignment.MatlCompInstceAssyIsRequired,
OpActyComponentAssignment.MfgRefStrucBOMLeafAssgmtUUID,
OpActyComponentAssignment.MfgRefStructureItemDetailUUID,
OpActyComponentAssignment.MfgRefStrucItmDetIsContextual,
OpActyInstanceStatus._OperationActivityInstance
}
where
OpActyInstanceStatus._SASStatus.SASStatusCategory = 3 --Completed
and OrderComponent.MatlCompIsMarkedForBackflush = 'X'
/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_LOGISTICSORDERBASIC",
"I_MFGORDERCOMPONENTASSEMBLY",
"I_OPACTYCOMPONENTASSIGNMENT",
"I_OPACTYINSTANCESTATUSBASIC",
"I_ORDERCOMPONENT",
"I_RESERVATIONITEM",
"I_SASSTATUS"
],
"ASSOCIATED":
[
"I_OPERATIONACTIVITYINSTANCE"
],
"BASE":
[
"I_MFGORDERCOMPONENTASSEMBLY"
],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/