P_PhysInvtryProposal
Proposals for new PI documents
P_PhysInvtryProposal is a Consumption CDS View that provides data about "Proposals for new PI documents" in SAP S/4HANA. It reads from 2 data sources (I_Plant, P_EnhPhysInvtryActvStkSepVal) and exposes 65 fields with key fields Plant, StorageLocation, Material, Batch, ValuationType. It has 21 associations to related views. Part of development package MBND_PHYSICAL_DOCUMENTS.
Data Sources (2)
| Source | Alias | Join Type |
|---|---|---|
| I_Plant | I_Plant | inner |
| P_EnhPhysInvtryActvStkSepVal | sep | from |
Associations (21)
| Cardinality | Target | Alias | Condition |
|---|---|---|---|
| [0..1] | I_PhysInvtryIndBatchStorLoc | _BatchStorageLocation | $projection.Plant = _BatchStorageLocation.Plant and $projection.StorageLocation = _BatchStorageLocation.StorageLocation and $projection.Material = _BatchStorageLocation.Material and $projection.Batch = _BatchStorageLocation.Batch |
| [1..1] | I_ProductPlant | _ProductPlant | $projection.Material = _ProductPlant.Product and $projection.Plant = _ProductPlant.Plant |
| [0..1] | I_Plant | _Plant | $projection.Plant = _Plant.Plant |
| [0..1] | I_StorageLocation | _StorageLocation | $projection.Plant = _StorageLocation.Plant and $projection.StorageLocation = _StorageLocation.StorageLocation |
| [0..1] | I_Material | _Material | $projection.Material = _Material.Material |
| [0..1] | I_Product | _Product | $projection.Material = _Product.Product |
| [0..1] | I_Producttype | _ProductType | $projection.ProductType = _ProductType.ProductType |
| [0..1] | I_ProductGroup | _ProductGroup | $projection.ProductGroup = _ProductGroup.MaterialGroup |
| [0..1] | I_ProductStorageLocation | _ProductStorageLocation | $projection.Material = _ProductStorageLocation.Product and $projection.Plant = _ProductStorageLocation.Plant and $projection.StorageLocation = _ProductStorageLocation.StorageLocation |
| [0..1] | I_Supplier | _Supplier | $projection.Supplier = _Supplier.Supplier |
| [1..1] | I_SupplierCompanyByPlant | _SupplierCompanyByPlant | $projection.Supplier = _SupplierCompanyByPlant.Supplier and $projection.Plant = _SupplierCompanyByPlant.Plant |
| [0..1] | I_Customer | _Customer | $projection.Customer = _Customer.Customer |
| [1..1] | I_CustomerCompanyByPlant | _CustomerCompanyByPlant | $projection.Customer = _CustomerCompanyByPlant.Customer and $projection.Plant = _CustomerCompanyByPlant.Plant |
| [0..1] | I_InventoryStockType | _InventoryStockType | $projection.InventoryStockType = _InventoryStockType.InventoryStockType |
| [0..1] | I_InventorySpecialStockType | _InventorySpecialStockType | $projection.InventorySpecialStockType = _InventorySpecialStockType.InventorySpecialStockType |
| [0..1] | I_SalesOrder | _SalesOrder | $projection.SalesOrder = _SalesOrder.SalesOrder |
| [0..1] | I_UnitOfMeasure | _MaterialBaseUnit | $projection.MaterialBaseUnit = _MaterialBaseUnit.UnitOfMeasure |
| [0..1] | I_Currency | _Currency | $projection.CompanyCodeCurrency = _Currency.Currency |
| [0..1] | I_WBSElementByInternalKey | _WBSElement | $projection.WBSElementInternalID = _WBSElement.WBSElementInternalID |
| [0..1] | I_MaterialValuationPrices | _Price | _Price.Material = $projection.Material and I_Plant.ValuationArea = _Price.ValuationArea and sep.InventoryValuationType = _Price.InventoryValuationType and sep.InventorySpecialStockTypeVal = _Price.InvtryValnSpecialStockType and sep.SalesOrderVal = _Price.SalesOrder and sep.SalesOrderItemVal = _Price.SalesOrderItem and sep.WBSElementInternalIDVal = _Price.WBSElementInternalID and sep.Supplier = '' and _Price.CurrencyRole = '10' and _Price.FiscalPeriodType = 'LF' and ( sep.InventorySpecialStockType = '' or sep.InventorySpecialStockType = 'V' or sep.InventorySpecialStockType = 'W' or sep.InventorySpecialStockType = 'O' or sep.InventorySpecialStockValnType <> '' ) |
| [0..1] | I_CycleCountingSettings | _CycleCounting | _CycleCounting.CycleCountType = $projection.CycleCountType and _CycleCounting.Plant = $projection.Plant |
Annotations (4)
| Name | Value | Level | Field |
|---|---|---|---|
| AccessControl.authorizationCheck | #CHECK | view | |
| VDM.private | true | view | |
| VDM.viewType | #CONSUMPTION | view | |
| EndUserText.label | Proposals for new PI documents | view |
Fields (65)
| Key | Field | Source Table | Source Field | Description |
|---|---|---|---|---|
| KEY | Plant | P_EnhPhysInvtryActvStkSepVal | Plant | |
| KEY | StorageLocation | P_EnhPhysInvtryActvStkSepVal | StorageLocation | |
| KEY | Material | P_EnhPhysInvtryActvStkSepVal | Material | |
| KEY | Batch | P_EnhPhysInvtryActvStkSepVal | RealProductBatch | |
| KEY | ValuationType | |||
| KEY | Supplier | P_EnhPhysInvtryActvStkSepVal | Supplier | |
| KEY | SalesOrder | P_EnhPhysInvtryActvStkSepVal | SalesOrder | |
| KEY | SalesOrderItem | P_EnhPhysInvtryActvStkSepVal | SalesOrderItem | |
| KEY | WBSElement | P_EnhPhysInvtryActvStkSepVal | WBSElement | |
| KEY | Customer | P_EnhPhysInvtryActvStkSepVal | Customer | |
| KEY | StockOwner | P_EnhPhysInvtryActvStkSepVal | StockOwner | |
| KEY | InventoryStockType | P_EnhPhysInvtryActvStkSepVal | InventoryStockType | |
| KEY | InventorySpecialStockType | P_EnhPhysInvtryActvStkSepVal | InventorySpecialStockType | |
| KEY | MaterialIsPostedToStock | P_EnhPhysInvtryActvStkSepVal | MaterialIsPostedToStock | |
| KEY | MaterialBaseUnit | P_EnhPhysInvtryActvStkSepVal | MaterialBaseUnit | |
| CycleCountType | P_EnhPhysInvtryActvStkSepVal | CycleCountType | ||
| NmbrOfPhysInvtryPerFiscalYear | P_EnhPhysInvtryActvStkSepVal | NmbrOfPhysInvtryPerFiscalYear | ||
| PhysInvtryIntvlForCycCounting | P_EnhPhysInvtryActvStkSepVal | PhysInvtryIntvlForCycCounting | ||
| PhysInvtryFloatTimeCycCounting | P_EnhPhysInvtryActvStkSepVal | PhysInvtryFloatTimeCycCounting | ||
| WBSElementInternalID | P_EnhPhysInvtryActvStkSepVal | WBSElementInternalID | ||
| IsBatchManagementRequired | _ProductPlant | IsBatchManagementRequired | ||
| FactoryCalendar | _Plant | FactoryCalendar | ||
| CreationDateMaterial | _ProductStorageLocation | CreationDate | ||
| CreationDateBatch | _BatchStorageLocation | CreationDate | ||
| MaterialName | ||||
| ProductType | P_EnhPhysInvtryActvStkSepVal | ProductType | ||
| ProductGroup | P_EnhPhysInvtryActvStkSepVal | ProductGroup | ||
| SerialIdentifierAssgmtProfile | _Product | SerialIdentifierAssgmtProfile | ||
| WarehouseStorageBin | _ProductStorageLocation | WarehouseStorageBin | ||
| IsMarkedForDeletionProduct | _Product | IsMarkedForDeletion | ||
| IsMarkedForDeletion | _ProductPlant | IsMarkedForDeletion | ||
| MatlWrhsStkQtyInMatlBaseUnit | ||||
| InventoryPrice | ||||
| MaterialPriceUnitQty | _Price | MaterialPriceUnitQty | ||
| CompanyCodeCurrency | P_EnhPhysInvtryActvStkSepVal | CompanyCodeCurrency | ||
| NumberOfPhysInventoryCounts | P_EnhPhysInvtryActvStkSepVal | NumberOfPhysInventoryCounts | ||
| NumberOfPInvAdjustmentsPerYear | P_EnhPhysInvtryActvStkSepVal | NumberOfPInvAdjustmentsPerYear | ||
| PInvDiffQtyPerYearInBaseUnit | P_EnhPhysInvtryActvStkSepVal | PInvDiffQtyPerYearInBaseUnit | ||
| PhysicalInventoryLastCountDate | P_EnhPhysInvtryActvStkSepVal | PhysicalInventoryLastCountDate | ||
| NmbrOfDaysSinceLastPInvCount | P_EnhPhysInvtryActvStkSepVal | NmbrOfDaysSinceLastPInvCount | ||
| PhysicalInventoryItemIsCounted | P_EnhPhysInvtryActvStkSepVal | PhysicalInventoryItemIsCounted | ||
| NrOfGdsRcptSinceLastPInvCount | P_EnhPhysInvtryActvStkSepVal | NrOfGdsRcptSinceLastPInvCount | ||
| GdsRcptQtySinceLastCtInBsUnt | P_EnhPhysInvtryActvStkSepVal | GdsRcptQtySinceLastCtInBsUnt | ||
| AvgStkQtySinceLastCountInBsUnt | ||||
| NrOfGoodsIssSinceLastPInvCount | P_EnhPhysInvtryActvStkSepVal | NrOfGoodsIssSinceLastPInvCount | ||
| GdsIssQtySinceLastCountInBsUnt | P_EnhPhysInvtryActvStkSepVal | GdsIssQtySinceLastCountInBsUnt | ||
| UnitOfMeasure | ||||
| _Plant | _Plant | |||
| _StorageLocation | _StorageLocation | |||
| _Supplier | _Supplier | |||
| _Material | _Material | |||
| _SupplierCompanyByPlant | _SupplierCompanyByPlant | |||
| _Customer | _Customer | |||
| _CustomerCompanyByPlant | _CustomerCompanyByPlant | |||
| _InventorySpecialStockType | _InventorySpecialStockType | |||
| _SalesOrder | _SalesOrder | |||
| _MaterialBaseUnit | _MaterialBaseUnit | |||
| _Currency | _Currency | |||
| _WBSElement | _WBSElement | |||
| _Product | _Product | |||
| _ProductType | _ProductType | |||
| _ProductGroup | _ProductGroup | |||
| _InventoryStockType | _InventoryStockType | |||
| _CycleCounting | _CycleCounting | |||
| _ProductPlant | _ProductPlant |
@AccessControl.authorizationCheck: #CHECK
@VDM.private: true
@VDM.viewType: #CONSUMPTION
@EndUserText.label: 'Proposals for new PI documents'
define view entity P_PhysInvtryProposal
as select from P_EnhPhysInvtryActvStkSepVal as sep
inner join I_Plant on sep.Plant = I_Plant.Plant
association [0..1] to I_PhysInvtryIndBatchStorLoc as _BatchStorageLocation on $projection.Plant = _BatchStorageLocation.Plant
and $projection.StorageLocation = _BatchStorageLocation.StorageLocation
and $projection.Material = _BatchStorageLocation.Material
and $projection.Batch = _BatchStorageLocation.Batch
association [1..1] to I_ProductPlant as _ProductPlant on $projection.Material = _ProductPlant.Product
and $projection.Plant = _ProductPlant.Plant
association [0..1] to I_Plant as _Plant on $projection.Plant = _Plant.Plant
association [0..1] to I_StorageLocation as _StorageLocation on $projection.Plant = _StorageLocation.Plant
and $projection.StorageLocation = _StorageLocation.StorageLocation
association [0..1] to I_Material as _Material on $projection.Material = _Material.Material
association [0..1] to I_Product as _Product on $projection.Material = _Product.Product
association [0..1] to I_Producttype as _ProductType on $projection.ProductType = _ProductType.ProductType
association [0..1] to I_ProductGroup as _ProductGroup on $projection.ProductGroup = _ProductGroup.MaterialGroup
association [0..1] to I_ProductStorageLocation as _ProductStorageLocation on $projection.Material = _ProductStorageLocation.Product
and $projection.Plant = _ProductStorageLocation.Plant
and $projection.StorageLocation = _ProductStorageLocation.StorageLocation
association [0..1] to I_Supplier as _Supplier on $projection.Supplier = _Supplier.Supplier
association [1..1] to I_SupplierCompanyByPlant as _SupplierCompanyByPlant on $projection.Supplier = _SupplierCompanyByPlant.Supplier
and $projection.Plant = _SupplierCompanyByPlant.Plant
association [0..1] to I_Customer as _Customer on $projection.Customer = _Customer.Customer
association [1..1] to I_CustomerCompanyByPlant as _CustomerCompanyByPlant on $projection.Customer = _CustomerCompanyByPlant.Customer
and $projection.Plant = _CustomerCompanyByPlant.Plant
association [0..1] to I_InventoryStockType as _InventoryStockType on $projection.InventoryStockType = _InventoryStockType.InventoryStockType
association [0..1] to I_InventorySpecialStockType as _InventorySpecialStockType on $projection.InventorySpecialStockType = _InventorySpecialStockType.InventorySpecialStockType
association [0..1] to I_SalesOrder as _SalesOrder on $projection.SalesOrder = _SalesOrder.SalesOrder
association [0..1] to I_UnitOfMeasure as _MaterialBaseUnit on $projection.MaterialBaseUnit = _MaterialBaseUnit.UnitOfMeasure
association [0..1] to I_Currency as _Currency on $projection.CompanyCodeCurrency = _Currency.Currency
association [0..1] to I_WBSElementByInternalKey as _WBSElement on $projection.WBSElementInternalID = _WBSElement.WBSElementInternalID
association [0..1] to I_MaterialValuationPrices as _Price on _Price.Material = $projection.Material
and I_Plant.ValuationArea = _Price.ValuationArea
and sep.InventoryValuationType = _Price.InventoryValuationType
and sep.InventorySpecialStockTypeVal = _Price.InvtryValnSpecialStockType
and sep.SalesOrderVal = _Price.SalesOrder
and sep.SalesOrderItemVal = _Price.SalesOrderItem
and sep.WBSElementInternalIDVal = _Price.WBSElementInternalID
and sep.Supplier = ''
and //if consider xobew, sep.SupplierVal = _Price.Supplier
_Price.CurrencyRole = '10'
and //Company Code Currency
_Price.FiscalPeriodType = 'LF'
and //Current Period
(
sep.InventorySpecialStockType = ''
or sep.InventorySpecialStockType = 'V'
or sep.InventorySpecialStockType = 'W'
or sep.InventorySpecialStockType = 'O'
or //if consider xobew, sep.InventorySpecialStockTypeVal = 'O'
sep.InventorySpecialStockValnType <> ''
)
association [0..1] to I_CycleCountingSettings as _CycleCounting on _CycleCounting.CycleCountType = $projection.CycleCountType
and _CycleCounting.Plant = $projection.Plant
{
key sep.Plant,
key sep.StorageLocation,
key sep.Material,
key sep.RealProductBatch as Batch,
key cast(sep.InventoryValuationType as bwtar_d) as ValuationType,
key sep.Supplier,
key sep.SalesOrder,
key sep.SalesOrderItem,
key sep.WBSElement,
key sep.Customer,
key sep.StockOwner,
key sep.InventoryStockType,
key sep.InventorySpecialStockType,
@Environment.sql.passValue: true
@Semantics.booleanIndicator: true
key sep.MaterialIsPostedToStock,
key sep.MaterialBaseUnit,
sep.CycleCountType,
sep.NmbrOfPhysInvtryPerFiscalYear,
sep.PhysInvtryIntvlForCycCounting,
sep.PhysInvtryFloatTimeCycCounting,
sep.WBSElementInternalID,
//===============================================================================================
// Material/Batch already inventoried
//===============================================================================================
case when sep.InventoryStockType = '01' then _ProductStorageLocation.InvtryCurrentYearStockInd
else case when sep.InventoryStockType = '02' then _ProductStorageLocation.InvtryQualInspCurrentYrStkInd
else case when sep.InventoryStockType = '07' then _ProductStorageLocation.InventoryBlockStockInd
else '' end end end as MaterialPhysInvtryInd,
case when sep.InventoryStockType = '01' then _ProductStorageLocation.InventoryStockPrevPeriod
else case when sep.InventoryStockType = '02' then _ProductStorageLocation.InvtryStockQltyInspPrevPeriod
else case when sep.InventoryStockType = '07' then _ProductStorageLocation.HasInvtryBlockStockPrevPeriod
else '' end end end as MaterialPhysInvtryIndPrev,
case when sep.InventoryStockType = '01' then _BatchStorageLocation.InvtryCurrentYearStockInd
else case when sep.InventoryStockType = '02' then _BatchStorageLocation.InvtryQualInspCurrentYrStkInd
else case when sep.InventoryStockType = '07' then _BatchStorageLocation.InventoryBlockStockInd
else '' end end end as BatchPhysInvtryInd,
case when sep.InventoryStockType = '01' then _BatchStorageLocation.InventoryStockPrevPeriod
else case when sep.InventoryStockType = '02' then _BatchStorageLocation.InvtryStockQltyInspPrevPeriod
else case when sep.InventoryStockType = '07' then _BatchStorageLocation.HasInvtryBlockStockPrevPeriod
else '' end end end as BatchPhysInvtryIndPrev,
//// 'is inventoried' part of the status fields
// case when InventoryStockType = '01' then right(_ProductStorageLocation.InvtryCurrentYearStockInd, 1)
// else case when InventoryStockType = '02' then right(_ProductStorageLocation.InvtryQualInspCurrentYrStkInd, 1)
// else case when InventoryStockType = '07' then right(_ProductStorageLocation.InventoryBlockStockInd, 1)
// else '' end end end as MaterialPhysInvtryIndInved,
//
// case when InventoryStockType = '01' then right(_ProductStorageLocation.InventoryStockPrevPeriod, 1)
// else case when InventoryStockType = '02' then right(_ProductStorageLocation.InvtryStockQltyInspPrevPeriod, 1)
// else case when InventoryStockType = '07' then right(_ProductStorageLocation.HasInvtryBlockStockPrevPeriod, 1)
// else '' end end end as MaterialPhysInvtryIndPrevInved,
//
// case when InventoryStockType = '01' then right(_BatchStorageLocation.InvtryCurrentYearStockInd, 1)
// else case when InventoryStockType = '02' then right(_BatchStorageLocation.InvtryQualInspCurrentYrStkInd, 1)
// else case when InventoryStockType = '07' then right(_BatchStorageLocation.InventoryBlockStockInd, 1)
// else '' end end end as BatchPhysInvtryIndInved,
//
// case when InventoryStockType = '01' then right(_BatchStorageLocation.InventoryStockPrevPeriod, 1)
// else case when InventoryStockType = '02' then right(_BatchStorageLocation.InvtryStockQltyInspPrevPeriod, 1)
// else case when InventoryStockType = '07' then right(_BatchStorageLocation.HasInvtryBlockStockPrevPeriod, 1)
// else '' end end end as BatchPhysInvtryIndPrevInved,
_ProductPlant.IsBatchManagementRequired,
_Plant.FactoryCalendar,
_ProductStorageLocation.CreationDate as CreationDateMaterial,
_BatchStorageLocation.CreationDate as CreationDateBatch,
_Material._Text[1: Language=$session.system_language].MaterialName as MaterialName,
//===============================================================================================
// Fields from product master data
//===============================================================================================
sep.ProductType,
sep.ProductGroup,
_Product.SerialIdentifierAssgmtProfile,
_ProductStorageLocation.WarehouseStorageBin,
//Physical inventory needs deletion flag on batch, storage location, plant and client level
_Product.IsMarkedForDeletion as IsMarkedForDeletionProduct,
_ProductPlant.IsMarkedForDeletion,
case when _ProductStorageLocation.IsMarkedForDeletion is null then ' '
else _ProductStorageLocation.IsMarkedForDeletion end
as IsMarkedForDeletionStorLoc,
case when _BatchStorageLocation.IsMarkedForDeletion is null then ' '
else _BatchStorageLocation.IsMarkedForDeletion end
as IsMarkedForDeletionBatch,
//===============================================================================================
// Quantities
//===============================================================================================
@Semantics.quantity.unitOfMeasure: 'MaterialBaseUnit'
cast(sep.MatlWrhsStkQtyInMatlBaseUnit as pi_current_quantity) as MatlWrhsStkQtyInMatlBaseUnit,
//===============================================================================================
// Prices
//===============================================================================================
@Semantics.amount.currencyCode: 'CompanyCodeCurrency'
cast(cast(_Price.InventoryPrice as abap.curr( 11, 2 )) as pi_inventory_price preserving type) as InventoryPrice, //down cast first and then cast on data element
@Semantics.quantity.unitOfMeasure: 'MaterialBaseUnit'
_Price.MaterialPriceUnitQty,
//===============================================================================================
// Fields from plant/company master data
//===============================================================================================
sep.CompanyCodeCurrency,
//===============================================================================================
// Key Figures from PI (only looking at current fiscal year)
//===============================================================================================
sep.NumberOfPhysInventoryCounts,
sep.NumberOfPInvAdjustmentsPerYear,
@Semantics.quantity.unitOfMeasure: 'MaterialBaseUnit'
sep.PInvDiffQtyPerYearInBaseUnit,
//===============================================================================================
// Key Figures from PI (looking at complete history, not only at current fiscal year)
//===============================================================================================
sep.PhysicalInventoryLastCountDate,
sep.NmbrOfDaysSinceLastPInvCount,
sep.PhysicalInventoryItemIsCounted,
sep.NrOfGdsRcptSinceLastPInvCount,
@Semantics.quantity.unitOfMeasure: 'MaterialBaseUnit'
sep.GdsRcptQtySinceLastCtInBsUnt as GdsRcptQtySinceLastCtInBsUnt,
@Semantics.quantity.unitOfMeasure: 'MaterialBaseUnit'
cast(round( cast( sep.MatlWrhsStkQtyInMatlBaseUnit as abap.dec(31,14) ) - sep.AvgStkQtySinceLastCountCorrect, 3) as pi_average_book_quantity) as AvgStkQtySinceLastCountInBsUnt,
cast(
case
when sep.PhysicalInventoryLastCountDate is null then 0
when sep.GdsIssQtySinceLastCountInBsUnt = 0 or sep.GdsIssQtySinceLastCountInBsUnt is null then 0
when sep.MatlWrhsStkQtyInMatlBaseUnit < sep.AvgStkQtySinceLastCountCorrect then 0
when sep.MatlWrhsStkQtyInMatlBaseUnit = sep.AvgStkQtySinceLastCountCorrect then dats_days_between(sep.PhysicalInventoryLastCountDate,sep.CurrentDate)
else division( cast( sep.GdsIssQtySinceLastCountInBsUnt as abap.dec(13,3) ),
cast( sep.MatlWrhsStkQtyInMatlBaseUnit as abap.dec(31,14) ) - sep.AvgStkQtySinceLastCountCorrect ,1)
end as pi_turnover_since_last_cnt) as InvtryTurnoverSinceLastCnt,
sep.NrOfGoodsIssSinceLastPInvCount,
@Semantics.quantity.unitOfMeasure: 'MaterialBaseUnit'
sep.GdsIssQtySinceLastCountInBsUnt as GdsIssQtySinceLastCountInBsUnt,
cast( cast( '10' as char3) as msehi) as UnitOfMeasure, //Days
@Consumption.filter.hidden: true
_Plant,
@Consumption.filter.hidden: true
_StorageLocation,
@Consumption.filter.hidden: true
_Supplier,
@Consumption.filter.hidden: true
_Material,
@Consumption.filter.hidden: true
_SupplierCompanyByPlant,
@Consumption.filter.hidden: true
_Customer,
@Consumption.filter.hidden: true
_CustomerCompanyByPlant,
@Consumption.filter.hidden: true
_InventorySpecialStockType,
@Consumption.filter.hidden: true
_SalesOrder,
@Consumption.filter.hidden: true
_MaterialBaseUnit,
@Consumption.filter.hidden: true
_Currency,
@Consumption.filter.hidden: true
_WBSElement,
@Consumption.filter.hidden: true
_Product,
@Consumption.filter.hidden: true
_ProductType,
@Consumption.filter.hidden: true
_ProductGroup,
@Consumption.filter.hidden: true
_InventoryStockType,
@Consumption.filter.hidden: true
_CycleCounting,
@Consumption.filter.hidden: true
_ProductPlant
}
Learn More
- What Is a CDS View in SAP S/4HANA?
- Types of CDS Views: Basic, Composite, Consumption, and Transactional
- SAP Tables vs CDS Views — Key Differences
- Understanding Data Lineage in SAP S/4HANA
- VDM (Virtual Data Model) in SAP S/4HANA Explained
- CDS View Annotations — A Complete Guide
- CDS View Field Mapping and Associations
- Understanding the SAP S/4HANA Data Model
- CDS View Extensions and Custom Fields in SAP S/4HANA
- Released APIs and Stability Contracts in SAP S/4HANA