@AbapCatalog: {
sqlViewName: 'PSRVORDPRPF',
compiler.compareFilter: true,
preserveKey: true
}
@AccessControl.authorizationCheck: #NOT_REQUIRED
@ClientHandling.algorithm: #SESSION_VARIABLE
@ObjectModel.usageType: {
dataClass: #MIXED,
serviceQuality: #D,
sizeCategory: #XL
}
@VDM: {
viewType: #CONSUMPTION,
private: true
}
@EndUserText.label: 'Solution Order Purchase Requisition Flow'
define view P_SrvcOrdFUPPurOrdProcessFlow as
//PO
select distinct from I_PurchaseOrderItem
association [1..*] to I_PurchaseOrderHistoryBasic as PurDocHistory on PurDocHistory.PurchaseOrder = $projection.PurchaseOrder
and PurDocHistory.PurchaseOrderItem = $projection.PurchaseOrderItem
{
//Keys
key PurchaseOrder as PrecedingDocument,
key cast (PurchaseOrderItem as char10) as PrecedingDocumentItem,
key cast (' ' as vdm_purchaseorder) as SubsequentDocument,
key cast (cast (' ' as vdm_purchaseorderitem) as char10) as SubsequentDocumentItem,
_PurchaseOrder._PurchaseOrderType.PurchasingDocumentCategory as PrecedingDocumentCategory,
cast (' ' as bstyp) as SubsequentDocumentCategory,
PurchaseOrder,
PurchaseOrderItem,
_PurchaseOrder.PurchaseOrderType,
PurDocHistory.PurchasingHistoryDocumentYear as MaterialDocumentYear,
PurDocHistory.PurchasingHistoryDocumentYear as FiscalYear,
CompanyCode,
_PurchaseOrder.PurchasingGroup,
_PurchaseOrder.PurchasingOrganization
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// PR -> PO
union all select distinct from I_PurchaseOrderItem as POItem
inner join I_Purchaserequisitionitem as PR on PR.PurchaseRequisition = POItem.PurchaseRequisition
and PR.PurchaseRequisitionItem = POItem.PurchaseRequisitionItem
association [1..*] to I_PurchaseOrderHistoryBasic as PurDocHistory on PurDocHistory.PurchaseOrder = POItem.PurchaseOrder
and PurDocHistory.PurchaseOrderItem = POItem.PurchaseOrderItem
{
//Keys
key PR.PurchaseRequisition as PrecedingDocument,
key cast (PR.PurchaseRequisitionItem as char10) as PrecedingDocumentItem,
key POItem.PurchaseOrder as SubsequentDocument,
key cast (POItem.PurchaseOrderItem as char10) as SubsequentDocumentItem,
cast ('B' as bstyp) as PrecedingDocumentCategory,
POItem.PurchaseOrderCategory as SubsequentDocumentCategory,
POItem.PurchaseOrder,
POItem.PurchaseOrderItem,
POItem._PurchaseOrder.PurchaseOrderType,
PurDocHistory.PurchasingHistoryDocumentYear as MaterialDocumentYear,
PurDocHistory.PurchasingHistoryDocumentYear as FiscalYear,
cast('' as fis_bukrs) as CompanyCode,
POItem._PurchaseOrder.PurchasingGroup,
POItem._PurchaseOrder.PurchasingOrganization
}
where PR.PurchaseRequisition != ''
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// PO -> SES
union all select distinct from I_PurchaseOrderItem as POItem
inner join I_PurchaseOrderHistoryBasic as PurDocHistory on POItem.PurchaseOrder = PurDocHistory.PurchaseOrder
and POItem.PurchaseOrderItem = PurDocHistory.PurchaseOrderItem
association to I_PurchaseOrder as _PurchaseOrder on POItem.PurchaseOrder = _PurchaseOrder.PurchaseOrder
{
//Keys
key POItem.PurchaseOrder as PrecedingDocument,
key cast (POItem.PurchaseOrderItem as char10) as PrecedingDocumentItem,
key PurDocHistory.PurchasingHistoryDocument as SubsequentDocument,
key cast (PurDocHistory.PurchasingHistoryDocumentItem as char10) as SubsequentDocumentItem,
cast ('F' as bstyp) as PrecedingDocumentCategory,
cast ('S' as bstyp) as SubsequentDocumentCategory,
POItem.PurchaseOrder,
POItem.PurchaseOrderItem,
_PurchaseOrder.PurchaseOrderType,
PurDocHistory.PurchasingHistoryDocumentYear as MaterialDocumentYear,
PurDocHistory.PurchasingHistoryDocumentYear as FiscalYear,
cast('' as fis_bukrs) as CompanyCode,
_PurchaseOrder.PurchasingGroup,
_PurchaseOrder.PurchasingOrganization
}
where ( PurDocHistory.PurchasingHistoryDocumentType = 'S' or PurDocHistory.PurchasingHistoryDocumentType = '9' ) and
// !!! filter BEWTP from table t163b
(PurDocHistory.PurchasingHistoryCategory = '0' or PurDocHistory.PurchasingHistoryCategory = 'V' or PurDocHistory.PurchasingHistoryCategory = 'D' /* ?????????????????? */)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// PO/SES -> GR
union all select distinct from I_PurchaseOrderItem as POItem
inner join I_PurchaseOrderHistoryBasic as PurDocHistory on POItem.PurchaseOrder = PurDocHistory.PurchaseOrder
and POItem.PurchaseOrderItem = PurDocHistory.PurchaseOrderItem
association [1..1] to I_PurchaseOrder as _PurchaseOrder on POItem.PurchaseOrder = _PurchaseOrder.PurchaseOrder
{
//Keys
key case when PurDocHistory.ReferenceDocument != ''
and PurDocHistory.ReferenceDocument != PurDocHistory.PurchasingHistoryDocument
and PurDocHistory.ReferenceDocument not like '5%'
and PurDocHistory.IsCompletelyDelivered = ''
//Case SES-> GR
then PurDocHistory.ReferenceDocument
//Case PO -> GR
else POItem.PurchaseOrder end as PrecedingDocument,
key case when PurDocHistory.ReferenceDocument != ''
and PurDocHistory.ReferenceDocument != PurDocHistory.PurchasingHistoryDocument
and PurDocHistory.ReferenceDocument not like '5%'
and PurDocHistory.IsCompletelyDelivered = ''
then cast (PurDocHistory.ReferenceDocumentItem as char10)
else cast (POItem.PurchaseOrderItem as char10) end as PrecedingDocumentItem,
key PurDocHistory.PurchasingHistoryDocument as SubsequentDocument,
key cast (PurDocHistory.PurchasingHistoryDocumentItem as char10) as SubsequentDocumentItem,
case when PurDocHistory.ReferenceDocument != ''
and PurDocHistory.ReferenceDocument != PurDocHistory.PurchasingHistoryDocument
and PurDocHistory.ReferenceDocument not like '5%'
and PurDocHistory.IsCompletelyDelivered = ''
then cast ('S' as bstyp)
else cast ('F' as bstyp) end as PrecedingDocumentCategory,
cast ('G' as bstyp) as SubsequentDocumentCategory,
POItem.PurchaseOrder,
POItem.PurchaseOrderItem,
_PurchaseOrder.PurchaseOrderType,
PurDocHistory.PurchasingHistoryDocumentYear as MaterialDocumentYear,
PurDocHistory.PurchasingHistoryDocumentYear as FiscalYear,
cast('' as fis_bukrs) as CompanyCode,
_PurchaseOrder.PurchasingGroup,
_PurchaseOrder.PurchasingOrganization
}
where PurDocHistory.PurchasingHistoryDocumentType = '1'
and (PurDocHistory.PurchasingHistoryCategory = '9' or PurDocHistory.PurchasingHistoryCategory = 'E')
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// PO/(SES-GR) -> IV
union all select distinct from I_PurchaseOrderItem as POItem
inner join I_PurchaseOrderHistoryBasic as PurDocHistory on POItem.PurchaseOrder = PurDocHistory.PurchaseOrder
and POItem.PurchaseOrderItem = PurDocHistory.PurchaseOrderItem
association to I_PurchaseOrder as _PurchaseOrder on POItem.PurchaseOrder = _PurchaseOrder.PurchaseOrder
{
//Keys
key case when PurDocHistory.ReferenceDocument != ''
and PurDocHistory.ReferenceDocument like '5%'
and PurDocHistory.ReferenceDocument != PurDocHistory.PurchasingHistoryDocument
then PurDocHistory.ReferenceDocument
//Case SES-GR -> IV
//when PurDocHistory.ReferenceDocument != '' and PurDocHistory.ReferenceDocument not like '5%'
//then PurDocHistory.ReferenceDocument //? ist dasselbe, braucht man die Unterscheidung?
else POItem.PurchaseOrder end as PrecedingDocument,
key case when PurDocHistory.ReferenceDocument != ''
and PurDocHistory.ReferenceDocument like '5%'
and PurDocHistory.ReferenceDocument != PurDocHistory.PurchasingHistoryDocument
then cast (PurDocHistory.ReferenceDocumentItem as char10)
else cast (POItem.PurchaseOrderItem as char10) end as PrecedingDocumentItem,
key PurDocHistory.PurchasingHistoryDocument as SubsequentDocument,
key cast (PurDocHistory.PurchasingHistoryDocumentItem as char10) as SubsequentDocumentItem,
case when PurDocHistory.ReferenceDocument != ''
and PurDocHistory.ReferenceDocument like '5%'
and PurDocHistory.ReferenceDocument != PurDocHistory.PurchasingHistoryDocument
then cast ('G' as bstyp)
//when PurDocHistory.ReferenceDocument != '' and PurDocHistory.ReferenceDocument not like '5%'
//then cast ('S' as bstyp) //? ist dasselbe, braucht man die Unterscheidung?
else cast ('F' as bstyp) end as PrecedingDocumentCategory,
cast ('2' as bstyp) as SubsequentDocumentCategory,
POItem.PurchaseOrder,
POItem.PurchaseOrderItem,
_PurchaseOrder.PurchaseOrderType,
PurDocHistory.PurchasingHistoryDocumentYear as MaterialDocumentYear,
PurDocHistory.PurchasingHistoryDocumentYear as FiscalYear,
cast('' as fis_bukrs) as CompanyCode,
_PurchaseOrder.PurchasingGroup,
_PurchaseOrder.PurchasingOrganization
}
where ( PurDocHistory.PurchasingHistoryDocumentType = '2' or PurDocHistory.PurchasingHistoryDocumentType = 'P' ) and
//filter BEWTP from table t163b
(PurDocHistory.PurchasingHistoryCategory = '4' or PurDocHistory.PurchasingHistoryCategory = '5' or PurDocHistory.PurchasingHistoryCategory = '6'
or PurDocHistory.PurchasingHistoryCategory = 'Q' or PurDocHistory.PurchasingHistoryCategory = 'R' or PurDocHistory.PurchasingHistoryCategory = 'T' )
/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_PURCHASEORDER",
"I_PURCHASEORDERHISTORYBASIC",
"I_PURCHASEORDERITEM",
"I_PURCHASEREQUISITIONITEM",
"I_PURCHASINGDOCUMENTTYPE"
],
"ASSOCIATED":
[
"I_PURCHASEORDERHISTORYBASIC"
],
"BASE":
[],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/