P_CAPACITYDEFINITION
Work Center Capacity Definition
P_CAPACITYDEFINITION is a CDS View in S/4HANA. Work Center Capacity Definition. It contains 26 fields. 4 CDS views read from this table.
CDS Views using this table (4)
| View | Type | Join | VDM | Description |
|---|---|---|---|---|
| P_CapacityWithNightShift | view_entity | from | COMPOSITE | Work Center Capacity With Night Shift |
| P_WorkCenterAvailableCapacity | view | inner | COMPOSITE | Total Available Capacity of Work Center |
| P_WrkCtrMntrSchedShift | view_entity | from | CONSUMPTION | Work Center Shifts |
| P_WrkCtrMntrSchedValidShift | view_entity | inner | CONSUMPTION | Work Center Valid Shifts |
Fields (26)
| Key | Field | CDS Fields | Used in Views |
|---|---|---|---|
| KEY | AvailableCapacityShift | AvailableCapacityShift | 4 |
| KEY | CapacityActiveVersion | CapacityActiveVersion | 4 |
| KEY | CapacityInternalID | CapacityInternalID | 2 |
| KEY | ValidityEndDate | ValidityEndDate | 3 |
| KEY | WeekDay | WeekDay | 1 |
| AvailableCapacityIntervalDurn | AvailableCapacityIntervalDurn | 1 | |
| Capacity | Capacity | 1 | |
| CapacityBreakDuration | CapacityBreakDuration | 1 | |
| CapacityCategoryCode | CapacityCategoryCode | 2 | |
| CapacityCategoryName | CapacityCategoryName | 1 | |
| CapacityEndTime | CapacityEndTime | 1 | |
| CapacityNumberOfCapacities | CapacityNumberOfCapacities | 2 | |
| CapacityPlanUtilizationPercent | CapacityPlanUtilizationPercent | 2 | |
| CapacityResponsiblePlanner | CapacityResponsiblePlanner | 1 | |
| CapacityStartTime | CapacityStartTime | 1 | |
| FactoryCalendar | FactoryCalendar | 3 | |
| Plant | Plant,WorkCenterPlant | 2 | |
| ShiftDefinition | ShiftDefinition | 1 | |
| ShiftEndDate | ShiftEndDate | 1 | |
| ShiftEndTime | ShiftEndTime | 3 | |
| ShiftGrouping | ShiftGrouping | 1 | |
| ShiftName | ShiftName | 1 | |
| ShiftStartDate | ShiftStartDate | 1 | |
| ShiftStartTime | ShiftStartTime | 3 | |
| ValidityBeginDate | ValidityBeginDate | 2 | |
| WorkDayRule | WorkDayRule | 3 |
@AbapCatalog.sqlViewName: 'PCAPACITYDEF'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@VDM: {
private:true,
viewType: #COMPOSITE
}
@ClientHandling.algorithm: #SESSION_VARIABLE
@AbapCatalog.preserveKey:true
//@EndUserText.label: 'Work Center Capacity Definition'
define view P_CapacityDefinition
as select from P_CapacityHeader as Header
// interval exists
left outer to many join P_CapacityInterval as interval on Header.CapacityInternalID = interval.CapacityInternalID
and Header.CapacityActiveVersion = interval.AvailableCapacityType
// and Header.WorkCenterInternalID = interval.WorkCenterInternalID //condition added for pooled capacity scenario
// shift exists
left outer to many join I_AvailableCapacityShift as shift on shift.CapacityInternalID = interval.CapacityInternalID
and shift.ValidityEndDate = interval.ValidityEndDate
and shift.AvailableCapacityType = interval.AvailableCapacityType
and interval.StdAvailableCapacityIsValid = ''
// shift definition exists
left outer to many join P_WorkCenterShiftDefinition as shift_def on shift.ShiftDefinition = shift_def.ShiftDefinition
and Header.ShiftGroup = shift_def.ShiftGrouping
and interval.ValidityEndDate >= shift_def.ShiftStartDate // interval and shift definition must overlap
and interval.ValidityBeginDate <= shift_def.ShiftEndDate
{
// key Header.WorkCenterInternalID as WorkCenterInternalID,
// key Header.WorkCenterTypeCode as WorkCenterTypeCode,
// key Header.CapacityCategoryAllocation as CapacityCategoryAllocation,
key Header.CapacityInternalID as CapacityInternalID,
key Header.CapacityActiveVersion as CapacityActiveVersion,
// key case when (shift_def.ShiftDefinition is not null)
// then case when shift_def.ShiftEndDate < interval.ValidityEndDate
// then shift_def.ShiftEndDate
// else interval.ValidityEndDate
// end
// else coalesce( interval.ValidityEndDate, Header.ValidityEndDate )
// end as ValidityEndDate,
key case when (shift_def.ShiftDefinition is not null and shift_def.ShiftEndDate < interval.ValidityEndDate)
then shift_def.ShiftEndDate
when interval.ValidityEndDate is not null
then interval.ValidityEndDate
when Header.ValidityEndDate is not null
then Header.ValidityEndDate
end as ValidityEndDate,
// when (shift_def.ShiftDefinition is not null and shift_def.ShiftEndDate > interval.ValidityEndDate)
// then interval.ValidityEndDate
// when (shift_def.ShiftDefinition is null and interval.ValidityEndDate is not null)
// then interval.ValidityEndDate
// when (shift_def.ShiftDefinition is null and interval.ValidityEndDate is null)
// then Header.ValidityEndDate
// end as ValidityEndDate,
// key coalesce( shift.WeekDay, '1' ) as WeekDay,
key case when shift.WeekDay is not null
then shift.WeekDay
else '1'
end as WeekDay,
// key coalesce( shift.AvailableCapacityShift, '' ) as AvailableCapacityShift,
key case when shift.AvailableCapacityShift is not null
then shift.AvailableCapacityShift
else ''
end as AvailableCapacityShift,
// Header.WorkCenter as WorkCenter,
Header.Plant as Plant,
Header.FactoryCalendar as FactoryCalendar,
// adjust validity dates if shift definition exists
// case when (shift_def.ShiftDefinition is not null)
// then case when shift_def.ShiftStartDate > interval.ValidityBeginDate
// then shift_def.ShiftStartDate
// else interval.ValidityBeginDate
// end
// else coalesce( interval.ValidityBeginDate, Header.ValidityBeginDate )
// end as ValidityBeginDate,
case when (shift_def.ShiftDefinition is not null and shift_def.ShiftStartDate > interval.ValidityBeginDate)
then shift_def.ShiftStartDate
when interval.ValidityBeginDate is not null
then interval.ValidityBeginDate
when Header.ValidityBeginDate is not null
then Header.ValidityBeginDate
end as ValidityBeginDate,
//coalesce(shift_def.ShiftDefinition,'') as ShiftName,
case when shift_def.ShiftDefinition is not null
then shift_def.ShiftDefinition
else ''
end as ShiftName,
shift_def.ShiftDefinition,
Header.ShiftGroup as ShiftGrouping,
// case when (shift_def.ShiftDefinition is not null)
// then shift_def.ShiftStartDate
// else coalesce( interval.ValidityBeginDate, Header.ValidityBeginDate )
// end as ShiftStartDate,
case when (shift_def.ShiftDefinition is not null)
then shift_def.ShiftStartDate
when interval.ValidityBeginDate is not null
then interval.ValidityBeginDate
when Header.ValidityBeginDate is not null
then Header.ValidityBeginDate
end as ShiftStartDate,
// case when (shift_def.ShiftDefinition is not null)
// then shift_def.ShiftStartTime
// else
// cast ( substring( cast (
// tstmp_add_seconds(
// cast ('10010102000000' as abap.dec(15,0)),
// cast( coalesce( shift.CapacityStartTimeID, Header.CapacityStartTime) as abap.dec(15,0) ),
// 'FAIL') as abap.sstring(50)),
// 9,6) as abap.tims)
// end as ShiftStartTime,
case when (shift_def.ShiftDefinition is not null)
then shift_def.ShiftStartTime
when (shift_def.ShiftDefinition is null)
then
cast ( substring( cast (
tstmp_add_seconds(
cast ('10010102000000' as abap.dec(15,0)),
cast( case when shift.CapacityStartTimeID is not null
then shift.CapacityStartTimeID
when shift.CapacityStartTimeID is null
then Header.CapacityStartTime
end as abap.dec(15,0) ),
'FAIL') as abap.sstring(50)),
9,6) as abap.tims)
end as ShiftStartTime,
// case when (shift_def.ShiftDefinition is not null)
// then shift_def.ShiftEndDate
// else coalesce( interval.ValidityEndDate, Header.ValidityEndDate )
// end as ShiftEndDate,
case when (shift_def.ShiftDefinition is not null)
then shift_def.ShiftEndDate
when (interval.ValidityEndDate is not null)
then interval.ValidityEndDate
when (Header.ValidityEndDate is not null)
then Header.ValidityEndDate
end as ShiftEndDate,
// case when (shift_def.ShiftDefinition is not null)
// then shift_def.ShiftEndTime
// when shift.CapacityEndTimeID = 86400
// or (Header.CapacityEndTime = 86400 and shift.CapacityEndTimeID is null)
// then cast( '240000' as abap.tims )
// else
// cast ( substring( cast (
// tstmp_add_seconds(
// cast ('10010102000000' as abap.dec(15,0)),
// cast( coalesce( shift.CapacityEndTimeID, Header.CapacityEndTime) as abap.dec(15,0) ),
// 'FAIL') as abap.sstring(50)),
// 9,6) as abap.tims)
// end as ShiftEndTime,
case when (shift_def.ShiftDefinition is not null)
then shift_def.ShiftEndTime
when shift.CapacityEndTimeID = 86400
or (Header.CapacityEndTime = 86400 and shift.CapacityEndTimeID is null)
then cast( '240000' as abap.tims )
else
cast ( substring( cast (
tstmp_add_seconds(
cast ('10010102000000' as abap.dec(15,0)),
cast( case when shift.CapacityEndTimeID is not null
then shift.CapacityEndTimeID
when Header.CapacityEndTime is not null
then Header.CapacityEndTime
end as abap.dec(15,0) ),
'FAIL') as abap.sstring(50)),
9,6) as abap.tims)
end as ShiftEndTime,
// case when (shift_def.ShiftDefinition is not null)
// then shift_def.ShiftEndTime
// when shift.CapacityEndTimeID = 86400 or (Header.CapacityEndTime = 86400 and shift.CapacityEndTimeID is null)
// then cast( '240000' as abap.tims )
// when (shift_def.ShiftDefinition is null ) or
// (shift.CapacityEndTimeID <> 86400 or (Header.CapacityEndTime <> 86400 and shift.CapacityEndTimeID is not null))
// then cast ( substring( cast (
// tstmp_add_seconds(
// cast ('10010102000000' as abap.dec(15,0)),
// cast (case when shift.CapacityEndTimeID is not null
// then shift.CapacityEndTimeID
// when shift.CapacityEndTimeID is null
// then Header.CapacityEndTime
// end as abap.dec(15,0)), 'FAIL') as abap.sstring(50)), 9,6) as abap.tims)
// end as ShiftEndTime,
// Header.WorkCenterResponsible as WorkCenterResponsible,
// Header.WorkCenterDesc as WorkCenterDesc,
// Header.WorkCenterCategoryCode as WorkCenterCategoryCode,
Header.CapacityCategoryCode as CapacityCategoryCode,
Header.CapacityCategoryName as CapacityCategoryName,
Header.Capacity as Capacity,
// Header.CapacityText as CapacityText,
Header.CapacityResponsiblePlanner as CapacityResponsiblePlanner,
// coalesce( coalesce( shift_def.CapacityStartTimeID,
// shift.CapacityStartTimeID ),
// Header.CapacityStartTime ) as CapacityStartTime,
case when shift_def.CapacityStartTimeID is not null
then shift_def.CapacityStartTimeID
when shift.CapacityStartTimeID is not null // shift_def.CapacityStartTimeID is null
then shift.CapacityStartTimeID
when Header.CapacityStartTime is not null //shift.CapacityStartTimeID is null
then Header.CapacityStartTime
end as CapacityStartTime,
// coalesce( coalesce( shift_def.CapacityEndTimeID,
// shift.CapacityEndTimeID ),
// Header.CapacityEndTime) as CapacityEndTime,
case when shift_def.CapacityEndTimeID is not null
then shift_def.CapacityEndTimeID
when shift.CapacityEndTimeID is not null
then shift.CapacityEndTimeID
when Header.CapacityEndTime is not null
then Header.CapacityEndTime
end as CapacityEndTime,
// coalesce( interval.AvailableCapacityIntervalDurn, '01' ) as AvailableCapacityIntervalDurn,
case when interval.AvailableCapacityIntervalDurn is not null
then interval.AvailableCapacityIntervalDurn
else '01'
end as AvailableCapacityIntervalDurn,
// WorkDay rule ('WorkDay' indicator) will always come from the interval definitions
//coalesce( interval.WorkDayRule, '' ) as WorkDayRule,
case when interval.WorkDayRule is not null
then interval.WorkDayRule
else ''
end as WorkDayRule,
//calculate total duration if there is a shift definition
// case when (shift_def.ShiftDefinition is not null)
// then cast(shift_def.OperatingDurationInSeconds as abap.fltp) *
// cast(shift.CapacityNumberOfCapacities as abap.fltp) *
// cast(shift.CapacityPlanUtilizationPercent as abap.fltp) / cast(100 as abap.fltp)
// else coalesce( shift.TotOperatingDurationInSeconds, Header.OverallCapacity )
// end as TotOperatingDurationInSeconds,
case when (shift_def.ShiftDefinition is not null)
then cast(shift_def.OperatingDurationInSeconds as abap.fltp) *
cast(shift.CapacityNumberOfCapacities as abap.fltp) *
cast(shift.CapacityPlanUtilizationPercent as abap.fltp) / cast(100 as abap.fltp)
when (shift.TotOperatingDurationInSeconds is not null)
then shift.TotOperatingDurationInSeconds
when (Header.OverallCapacity is not null)
then Header.OverallCapacity
end as TotOperatingDurationInSeconds,
// case when (shift_def.ShiftDefinition is not null)
// then cast(shift_def.OperatingDurationInSeconds as abap.fltp) *
// cast(shift.CapacityNumberOfCapacities as abap.fltp) *
// cast(shift.CapacityPlanUtilizationPercent as abap.fltp) / cast(100 as abap.fltp) /
// cast (3600 as abap.fltp)
// else coalesce( shift.TotOperatingDurationInSeconds, Header.OverallCapacity ) / cast (3600 as abap.fltp)
// end as TotOperatingDurationInHours,
case when (shift_def.ShiftDefinition is not null)
then cast(shift_def.OperatingDurationInSeconds as abap.fltp) *
cast(shift.CapacityNumberOfCapacities as abap.fltp) *
cast(shift.CapacityPlanUtilizationPercent as abap.fltp) / cast(100 as abap.fltp) /
cast (3600 as abap.fltp)
when (shift.TotOperatingDurationInSeconds is not null)
then cast(shift.TotOperatingDurationInSeconds as abap.fltp) / cast (3600 as abap.fltp)
when (Header.OverallCapacity is not null)
then Header.OverallCapacity / cast (3600 as abap.fltp)
end as TotOperatingDurationInHours,
// coalesce( coalesce( cast (shift_def.OperatingDurationInSeconds as abap.fltp),
// (cast(shift.OperatingDurationInSeconds as abap.fltp) * cast(100 as abap.fltp) / cast(shift.CapacityPlanUtilizationPercent as abap.fltp) ) ),
// cast(Header.SingleCapacity as abap.fltp) )
// as OperatingDurationInSeconds,
// case when (shift_def.ShiftDefinition is not null)
// then cast(shift_def.OperatingDurationInSeconds as abap.fltp)
// when shift.CapacityPlanUtilizationPercent is not null
// then case when shift.CapacityPlanUtilizationPercent > '000'
// then (cast(shift.OperatingDurationInSeconds as abap.fltp) * cast(100 as abap.fltp) / cast(shift.CapacityPlanUtilizationPercent as abap.fltp) )
// else 0
// end
// else cast(Header.SingleCapacity as abap.fltp)
// end as OperatingDurationInSeconds,
case when (shift_def.ShiftDefinition is not null)
then cast(shift_def.OperatingDurationInSeconds as abap.fltp)
when (shift.CapacityPlanUtilizationPercent is not null and shift.CapacityPlanUtilizationPercent > '000')
then (cast(shift.OperatingDurationInSeconds as abap.fltp) * cast(100 as abap.fltp) / cast(shift.CapacityPlanUtilizationPercent as abap.fltp) )
when (shift.CapacityPlanUtilizationPercent is not null and (shift.CapacityPlanUtilizationPercent = '000'))
then 0
when (Header.SingleCapacity is not null)
then cast(Header.SingleCapacity as abap.fltp)
end as OperatingDurationInSeconds,
// only consider shift definition break, if it is inside shift
// case when shift_def.ShiftDefinition is not null
// then case when ( shift_def.CapacityEndTimeID > shift_def.CapacityStartTimeID ) or ( shift_def.CapacityEndTimeID = 0 and shift_def.CapacityStartTimeID = 0 )
// then (shift_def.CapacityEndTimeID - shift_def.CapacityStartTimeID) - shift_def.OperatingDurationInSeconds
// when shift_def.CapacityStartTimeID = shift_def.CapacityEndTimeID
// then 86400 - shift_def.OperatingDurationInSeconds
// when shift_def.CapacityStartTimeID > shift_def.CapacityEndTimeID
// then (86400 - (shift_def.CapacityStartTimeID - shift_def.CapacityEndTimeID)) - shift_def.OperatingDurationInSeconds
// end
// else coalesce( shift.BreakDurationInSeconds, Header.CapacityBreakDuration )
// end as CapacityBreakDuration,
case when (shift_def.ShiftDefinition is not null and (( shift_def.CapacityEndTimeID > shift_def.CapacityStartTimeID ) or ( shift_def.CapacityEndTimeID = 0 and shift_def.CapacityStartTimeID = 0 )))
then (shift_def.CapacityEndTimeID - shift_def.CapacityStartTimeID) - shift_def.OperatingDurationInSeconds
when (shift_def.ShiftDefinition is not null and shift_def.CapacityStartTimeID = shift_def.CapacityEndTimeID)
then 86400 - shift_def.OperatingDurationInSeconds
when (shift_def.ShiftDefinition is not null and shift_def.CapacityStartTimeID > shift_def.CapacityEndTimeID)
then (86400 - (shift_def.CapacityStartTimeID - shift_def.CapacityEndTimeID)) - shift_def.OperatingDurationInSeconds
when (shift.BreakDurationInSeconds is not null)
then shift.BreakDurationInSeconds
when (Header.CapacityBreakDuration is not null)
then Header.CapacityBreakDuration
end as CapacityBreakDuration,
//Operating Capacity
// case when (shift_def.ShiftDefinition is not null)
// then cast(shift_def.OperatingDurationInSeconds as abap.fltp) *
// // cast(shift.CapacityNumberOfCapacities as abap.fltp) *
// cast(shift.CapacityPlanUtilizationPercent as abap.fltp) / cast(100 as abap.fltp)
// else
// (case when (shift.OperatingDurationInSeconds is not null )
// then
// shift.OperatingDurationInSeconds
// else
// Header.CapacityOperatingDuration
// end )
// end as CapacityOperatingDuration,
case when (shift_def.ShiftDefinition is not null)
then cast(shift_def.OperatingDurationInSeconds as abap.fltp) * cast(shift.CapacityPlanUtilizationPercent as abap.fltp) / cast(100 as abap.fltp)
when (shift.OperatingDurationInSeconds is not null)
then shift.OperatingDurationInSeconds
when (Header.CapacityOperatingDuration is not null)
then Header.CapacityOperatingDuration
end as CapacityOperatingDuration,
// coalesce( shift.CapacityNumberOfCapacities, Header.CapacityNumberOfCapacities) as CapacityNumberOfCapacities,
case when shift.CapacityNumberOfCapacities is not null
then shift.CapacityNumberOfCapacities
else Header.CapacityNumberOfCapacities
end as CapacityNumberOfCapacities,
// coalesce( shift.CapacityPlanUtilizationPercent, Header.CapacityPlanUtilizationPercent) as CapacityPlanUtilizationPercent
case when shift.CapacityPlanUtilizationPercent is not null
then shift.CapacityPlanUtilizationPercent
else Header.CapacityPlanUtilizationPercent
end as CapacityPlanUtilizationPercent
}