@ClientHandling.algorithm: #SESSION_VARIABLE
@ObjectModel.usageType.dataClass: #MIXED
@ObjectModel.usageType.serviceQuality: #D
@ObjectModel.usageType.sizeCategory: #S
@VDM.private: true
@VDM.viewType: #COMPOSITE
@AccessControl.authorizationCheck:#NOT_REQUIRED
@AbapCatalog.sqlViewName: 'PSOFISSUESU021'
--AT26.6.2020: major rework for OP2020, CE2011 (downport to older OP releases by AIS)
--Description: now based on released model and special status like "technically Completed" in addition to the regular processing of an PO. See comments in coding.
--AT19.6.2019: A major rework on 19.6.2019 for CE1911 (not CE1908), OP1909 and downport to OP1809.
--Description: issue occurs when Manufacturing Order is not finished AND there is some criteria to say it is overdue. There is no "is potential issue" semantic.
-- Some new insights: - ActualStartDate can miss, despite Manufacturing Order is delivered, so do not consider it for issue detection logic.
-- - Sometimes instead of ActualDeliveryDate ItemActualDeliveryDate is used, so if one of both is there, the Manufacturing Order is delivered.
-- - there are several new models (also released ones). E.g. O_MfgOrderWithStatus exposes also explicit states. However, those are read from user/object state and thus not usable for mass purposes.
define view P_SalesOrderInSupplyMfgIssue1
as select from P_SalesOrderInSupplyMfgIssue2 as MfgO_Head
inner join I_SalesDocumentBasic as SO_Head
on MfgO_Head.SalesOrder = SO_Head.SalesDocument
and --AT29.06.2020 enforce underlying/preceding Sales Document is C,I,L
( SO_Head.SDDocumentCategory = 'C' or
SO_Head.SDDocumentCategory = 'I' or
SO_Head.SDDocumentCategory = 'L'
)
//left outer to one join P_SalesDocumentBusinessData as VBKD on SO_Head.SalesDocument = VBKD.SlsDocBusinessData
// and VBKD.SlsDocBusinessDataItem = '000000'
{
// Key Manufacturing Order
key MfgO_Head.ManufacturingOrder,
// Category Manufacturing Order
MfgO_Head.ManufacturingOrderCategory,
// Dates Manufacturing Order
MfgO_Head.MfgOrderReleasedDateOverdue,
MfgO_Head.MfgOrderStartDateOverdue,
MfgO_Head.MfgOrderEndDateOverdue,
// Sales Order
SO_Head.SalesDocument,
// Organization Sales Order
SO_Head.SalesOrganization,
SO_Head.DistributionChannel,
SO_Head.OrganizationDivision,
SO_Head.SalesDocumentType,
//Misc
SO_Head.RequestedDeliveryDate,
SO_Head.OverallSDProcessStatus,
SO_Head.SalesDocumentDate,
SO_Head.SalesGroup,
SO_Head.SalesOffice,
SO_Head.SoldToParty,
// VBKD.PurchaseOrderByCustomer,
// DueDate
case when MfgO_Head.MfgOrderReleasedDateOverdue = 'X'
then MfgO_Head.MfgOrderScheduledReleaseDate
else
case when MfgO_Head.MfgOrderStartDateOverdue = 'X'
then MfgO_Head.MfgOrderScheduledStartDate
else MfgO_Head.MfgOrderScheduledEndDate
end
end as DueDate
}
where
//ProdO satisfies a SalesDocument
MfgO_Head.SalesOrderItem <> '000000'
//ProdO is still open / Not finalized
and ( --MfgOrderActualEndDate = '00000000' --and MfgOrderItemActualDeliveryDate = '00000000'--regular processed PO is not yet finalized (Delivery Date not needed because of IsCompletelyDelivered-Flag) Update 7.7.21: no need for *ActualEndDate, because isCompletelyDelivered & *ConfirmedEndDate shall be sufficient !
MfgO_Head.MfgOrderActualCompletionDate = '00000000' --means is Not OrderIsTechnicallyCompleted, OrderIsClosed
and MfgO_Head.IsMarkedForDeletion = ' '
and MfgO_Head.IsCompletelyDelivered = ' ' --means is Not OrderIsDeleted, OrderIsMarkedForDeletion, OrderIsDelivered
and MfgO_Head.MfgOrderConfirmedEndDate = '00000000' --means is Not OrderIsConfirmed
)
//ProdO is overdue
and ( MfgO_Head.MfgOrderReleasedDateOverdue = 'X' or MfgO_Head.MfgOrderEndDateOverdue = 'X' ) --overdue (last condition on EndDate should be sufficient...)
--************************************
--BuildingBlock "MfgOrder still open": should be used everywhere: here, in P_SlsOrdFlfmtSupProcSqnc and in P_SlsDocFlfllmntAnalyzer1
--************************************
// ( --MfgOrderActualEndDate = '00000000' --and MfgOrderItemActualDeliveryDate = '00000000'--regular processed PO is not yet finalized (Delivery Date not needed because of IsCompletelyDelivered-Flag) Update 7.7.21: no need for *ActualEndDate, because isCompletelyDelivered & *ConfirmedEndDate shall be sufficient !
// MfgOrderActualCompletionDate = '00000000' --means is Not OrderIsTechnicallyCompleted, OrderIsClosed
// and IsMarkedForDeletion = ' '
// and IsCompletelyDelivered = ' ' --means is Not OrderIsDeleted, OrderIsMarkedForDeletion, OrderIsDelivered
// and MfgOrderConfirmedEndDate = '00000000' --means is Not OrderIsConfirmed
// )
-----Old version OP2020, CE2011 has new version
////with parameters
//// P_ReferenceDate : sydate
//
//as select from P_SalesOrderInSupplyMfgIssue2 as MfgO_Head --(P_ReferenceDate: $parameters.P_ReferenceDate) as MfgO_Head
//
//inner join I_SalesDocumentBasic as SO_Head -- I_SalesDocument
// on MfgO_Head.SalesOrder = SO_Head.SalesDocument
//left outer to one join P_SalesDocumentBusinessData as VBKD on SO_Head.SalesDocument = VBKD.SlsDocBusinessData
// and VBKD.SlsDocBusinessDataItem = '000000'
//
//{
//// Key Manufacturing Order
// key MfgO_Head.ManufacturingOrder,
//
//// Category Manufacturing Order
// MfgO_Head.ManufacturingOrderCategory,
//
//// Dates Manufacturing Order
// MfgO_Head.MfgOrderReleasedDateOverdue,
// MfgO_Head.MfgOrderStartDateOverdue,
// MfgO_Head.MfgOrderEndDateOverdue,
//
//// Sales Order
// SO_Head.SalesDocument,
//
//// Organization Sales Order
// SO_Head.SalesOrganization,
// SO_Head.DistributionChannel,
// SO_Head.OrganizationDivision,
// SO_Head.SalesDocumentType,
//
// //Misc
// SO_Head.RequestedDeliveryDate,
// SO_Head.OverallSDProcessStatus,
// SO_Head.SalesDocumentDate,
// SO_Head.SalesGroup,
// SO_Head.SalesOffice,
// SO_Head.SoldToParty,
// VBKD.PurchaseOrderByCustomer,
//
//
//
//// DueDate
// case when MfgO_Head.MfgOrderReleasedDateOverdue = 'X'
// then MfgO_Head.MfgOrderScheduledReleaseDate
// else
// case when MfgO_Head.MfgOrderStartDateOverdue = 'X'
// then MfgO_Head.MfgOrderScheduledStartDate
// else MfgO_Head.MfgOrderScheduledEndDate
// end
// end as DueDate
//
// }
//
// --where ( MfgO_Head.MfgOrderReleasedDateOverdue = 'X' or MfgO_Head.MfgOrderStartDateOverdue = 'X' or MfgO_Head.MfgOrderEndDateOverdue = 'X' ) --AT19.6.2019: ActualStartDate often not used, so not usable here
// where ( MfgO_Head.MfgOrderReleasedDateOverdue = 'X' or MfgO_Head.MfgOrderEndDateOverdue = 'X' ) --overdue Situation (hinreichende/sufficient condition)
// --and ( MfgOrderActualReleaseDate = '00000000' or MfgOrderActualStartDate = '00000000' or ( MfgOrderActualEndDate = '00000000' and MfgOrderActualEndDate = '00000000' ) ) --AT19.6.2019: focus on necessary condition ActualEndDate and ItemActualDeliveryDate & use ltrmi (MfgOrderItemActualDeliveryDate)in parallel to ActualEndDate
// and ( MfgOrderActualEndDate = '00000000' and MfgOrderItemActualDeliveryDate = '00000000' ) --necessary condition for issue (sometimes in ok situations only one is populated)
// and MfgO_Head.SalesOrderItem <> '000000'
//
/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_SALESDOCUMENTBASIC",
"P_SALESORDERINSUPPLYMFGISSUE2"
],
"ASSOCIATED":
[],
"BASE":
[],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/