P_SalesOrderInSupplyMfgIssue1

DDL: P_SALESORDERINSUPPLYMFGISSUE1 SQL: PSOFISSUESU021 Type: view COMPOSITE

P_SalesOrderInSupplyMfgIssue1 is a Composite CDS View in SAP S/4HANA. It reads from 2 data sources (P_SalesOrderInSupplyMfgIssue2, I_SalesDocumentBasic) and exposes 17 fields with key field ManufacturingOrder.

Data Sources (2)

SourceAliasJoin Type
P_SalesOrderInSupplyMfgIssue2 MfgO_Head from
I_SalesDocumentBasic SO_Head inner

Annotations (8)

NameValueLevelField
ClientHandling.algorithm #SESSION_VARIABLE view
ObjectModel.usageType.dataClass #MIXED view
ObjectModel.usageType.serviceQuality #D view
ObjectModel.usageType.sizeCategory #S view
VDM.private true view
VDM.viewType #COMPOSITE view
AccessControl.authorizationCheck #NOT_REQUIRED view
AbapCatalog.sqlViewName PSOFISSUESU021 view

Fields (17)

KeyFieldSource TableSource FieldDescription
KEY ManufacturingOrder P_SalesOrderInSupplyMfgIssue2 ManufacturingOrder
ManufacturingOrderCategory P_SalesOrderInSupplyMfgIssue2 ManufacturingOrderCategory
MfgOrderReleasedDateOverdue P_SalesOrderInSupplyMfgIssue2 MfgOrderReleasedDateOverdue
MfgOrderStartDateOverdue P_SalesOrderInSupplyMfgIssue2 MfgOrderStartDateOverdue
MfgOrderEndDateOverdue P_SalesOrderInSupplyMfgIssue2 MfgOrderEndDateOverdue
SalesDocument I_SalesDocumentBasic SalesDocument
SalesOrganization I_SalesDocumentBasic SalesOrganization
DistributionChannel I_SalesDocumentBasic DistributionChannel
OrganizationDivision I_SalesDocumentBasic OrganizationDivision
SalesDocumentType I_SalesDocumentBasic SalesDocumentType
RequestedDeliveryDate I_SalesDocumentBasic RequestedDeliveryDate
OverallSDProcessStatus I_SalesDocumentBasic OverallSDProcessStatus
SalesDocumentDate I_SalesDocumentBasic SalesDocumentDate
SalesGroup I_SalesDocumentBasic SalesGroup
SalesOffice I_SalesDocumentBasic SalesOffice
SoldToParty I_SalesDocumentBasic SoldToParty
MfgOrderScheduledEndDateendendasDueDate
@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":""
}
}*/