I_HandlingUnitHeaderCombined

DDL: I_HANDLINGUNITHEADERCOMBINED Type: view COMPOSITE

Handling Units - combined data from LO and EWM storages

I_HandlingUnitHeaderCombined is a Composite CDS View that provides data about "Handling Units - combined data from LO and EWM storages" in SAP S/4HANA. It reads from 4 data sources (P_EWM_HandlingUnitHeader08, I_HandlingUnitHeader, I_HandlingUnitHeader, I_HandlingUnitHeader) and exposes 301 fields with key fields HandlingUnitExternalID, Warehouse, Warehouse, Warehouse, Warehouse. It has 6 associations to related views.

Data Sources (4)

SourceAliasJoin Type
P_EWM_HandlingUnitHeader08 huhdr union_all
I_HandlingUnitHeader vekp from
I_HandlingUnitHeader vekp_decwhs union_all
I_HandlingUnitHeader vekp_ewm union_all

Associations (6)

CardinalityTargetAliasCondition
[0..1] I_UnitOfMeasure _WeightUnit _WeightUnit.UnitOfMeasure = vekp.WeightUnit
[0..1] I_UnitOfMeasure _WeightUnitTare _WeightUnitTare.UnitOfMeasure = vekp.HandlingUnitTareWeightUnit
[0..1] I_UnitOfMeasure _VolumeUnit _VolumeUnit.UnitOfMeasure = vekp.VolumeUnit
[0..1] I_UnitOfMeasure _VolumeUnitTare _VolumeUnitTare.UnitOfMeasure = vekp.HandlingUnitTareVolumeUnit
[0..1] I_UnitOfMeasure _UnitOfMeasureDimension _UnitOfMeasureDimension.UnitOfMeasure = vekp.UnitOfMeasureDimension
[0..1] I_HandlingUnitHeader _HandlingUnitParentHdr _HandlingUnitParentHdr.HandlingUnitInternalID = vekp.HandlingUnitLowerLevelRefer

Annotations (13)

NameValueLevelField
AbapCatalog.sqlViewName IHANDLINGUNITHCO view
AbapCatalog.compiler.compareFilter true view
ClientHandling.algorithm #SESSION_VARIABLE view
Metadata.ignorePropagatedAnnotations true view
AccessControl.authorizationCheck #CHECK view
AccessControl.personalData.blocking #BLOCKED_DATA_EXCLUDED view
ObjectModel.usageType.dataClass #MIXED view
ObjectModel.usageType.serviceQuality #C view
ObjectModel.usageType.sizeCategory #XL view
VDM.viewType #COMPOSITE view
VDM.lifecycle.contract.type #SAP_INTERNAL_API view
EndUserText.label Handling Units - combined data from LO and EWM storages view
AbapCatalog.preserveKey true view

Fields (301)

KeyFieldSource TableSource FieldDescription
KEY HandlingUnitExternalID HandlingUnitExternalID
KEY Warehouse
HandlingUnitCharUUID HandlingUnitCharUUID
HandlingUnitInternalCharUUID HandlingUnitCharUUID
HandlingUnitExternalIdType HandlingUnitExternalIdType
Plant Plant
StorageLocation StorageLocation
ShippingPoint ShippingPoint
HandlingUnitInternalID HandlingUnitInternalID
HandlingUnitLowerLevelRefer HandlingUnitLowerLevelRefer
ParentHandlingUnitNumber _HandlingUnitParentHdr HandlingUnitExternalID
HighestLevelHandlingUnitNumber
PackagingMaterial PackagingMaterial
PackagingMaterialType PackagingMaterialType
PackingInstruction PackingInstruction
GrossWeight GrossWeight
NetWeight NetWeight
HandlingUnitMaxWeight HandlingUnitMaxWeight
WeightUnit WeightUnit
HandlingUnitTareWeight HandlingUnitTareWeight
HandlingUnitTareWeightUnit HandlingUnitTareWeightUnit
GrossVolume GrossVolume
HandlingUnitNetVolume HandlingUnitNetVolume
HandlingUnitMaxVolume HandlingUnitMaxVolume
VolumeUnit VolumeUnit
HandlingUnitTareVolume HandlingUnitTareVolume
HandlingUnitTareVolumeUnit HandlingUnitTareVolumeUnit
HandlingUnitLength HandlingUnitLength
HandlingUnitWidth HandlingUnitWidth
HandlingUnitHeight HandlingUnitHeight
UnitOfMeasureDimension UnitOfMeasureDimension
HandlingUnitPackingObjectType HandlingUnitPackingObjectType
HandlingUnitReferenceDocument HandlingUnitPackingObjectKey
HandlingUnitHasCrossRefDoc
CreatedByUser CreatedByUser
clientNULLasCreationDateTime
clientNULLendasLastChangeDateTime
HandlingUnitInternalStatus HandlingUnitInternalStatus
SourceHandlingUnitUUID SourceHandlingUnitUUID
HandlingUnitSecondExternalId HandlingUnitSecondExternalId
HandlingUnitSlotNumber HandlingUnitSlotNumber
HndlgUnitRlvnceForJIT HndlgUnitRlvnceForJIT
StorageType
StorageSection
StorageBin
EWMResource
EWMConsolidationGroup
HandlingUnitIsClosed
HandlingUnitType
ExternalStorageProcessStep
EWMHUProcessStepIsCompleted
StorageProcess
EWMHandlingUnitIsPlanned
EWMHandlingUnitIsInStock
EWMHandlingUnitIsUnloaded
EWMHandlingUnitIsLoaded
EWMTranspUnitIsAssigned
EWMHUContentChangeIsBlocked
EWMHUMovementChangeIsBlocked
EWMHUAttributeChangeIsBlocked
EWMHUPostingChangeIsBlocked
EWMHUIsBlockedByCustoms
EWMHUIsPackedForShipping
HandlingUnitMaxLength
HandlingUnitMaxWidth
HandlingUnitMaxHeight
HandlingUnitMaxDimensionUnit
HandlingUnitOrigin
EWMSrlNmbrForPackagingMaterial
EWMHUIsJITUpdateRelevant
EWMHUDestinationProdnSupArea
EWMHUDestinationStorageBin
_WeightUnit _WeightUnit
_WeightUnitTare _WeightUnitTare
_VolumeUnit _VolumeUnit
_VolumeUnitTare _VolumeUnitTare
KEY Warehouse
HandlingUnitCharUUID HandlingUnitCharUUID
HandlingUnitInternalCharUUID HandlingUnitCharUUID
HandlingUnitExternalIdType HandlingUnitExternalIdType
Plant Plant
StorageLocation StorageLocation
ShippingPoint ShippingPoint
HandlingUnitInternalID HandlingUnitInternalID
HandlingUnitLowerLevelRefer HandlingUnitLowerLevelRefer
ParentHandlingUnitNumber _HandlingUnitParentHdr HandlingUnitExternalID
HighestLevelHandlingUnitNumber
PackagingMaterial PackagingMaterial
PackagingMaterialType PackagingMaterialType
PackingInstruction PackingInstruction
GrossWeight GrossWeight
NetWeight NetWeight
HandlingUnitMaxWeight HandlingUnitMaxWeight
WeightUnit WeightUnit
HandlingUnitTareWeight HandlingUnitTareWeight
HandlingUnitTareWeightUnit HandlingUnitTareWeightUnit
GrossVolume GrossVolume
HandlingUnitNetVolume HandlingUnitNetVolume
HandlingUnitMaxVolume HandlingUnitMaxVolume
VolumeUnit VolumeUnit
HandlingUnitTareVolume HandlingUnitTareVolume
HandlingUnitTareVolumeUnit HandlingUnitTareVolumeUnit
HandlingUnitLength HandlingUnitLength
HandlingUnitWidth HandlingUnitWidth
HandlingUnitHeight HandlingUnitHeight
UnitOfMeasureDimension UnitOfMeasureDimension
HandlingUnitPackingObjectType HandlingUnitPackingObjectType
HandlingUnitReferenceDocument HandlingUnitPackingObjectKey
HandlingUnitHasCrossRefDoc
CreatedByUser CreatedByUser
clientNULLasCreationDateTime
clientNULLendasLastChangeDateTime
HandlingUnitInternalStatus HandlingUnitInternalStatus
SourceHandlingUnitUUID SourceHandlingUnitUUID
HandlingUnitSecondExternalId HandlingUnitSecondExternalId
HandlingUnitSlotNumber HandlingUnitSlotNumber
HndlgUnitRlvnceForJIT HndlgUnitRlvnceForJIT
StorageType
StorageSection
StorageBin
EWMResource
EWMConsolidationGroup
HandlingUnitIsClosed
HandlingUnitType
ExternalStorageProcessStep
EWMHUProcessStepIsCompleted
StorageProcess
EWMHandlingUnitIsPlanned
EWMHandlingUnitIsInStock
EWMHandlingUnitIsUnloaded
EWMHandlingUnitIsLoaded
EWMTranspUnitIsAssigned
EWMHUContentChangeIsBlocked
EWMHUMovementChangeIsBlocked
EWMHUAttributeChangeIsBlocked
EWMHUPostingChangeIsBlocked
EWMHUIsBlockedByCustoms
EWMHUIsPackedForShipping
HandlingUnitMaxLength
HandlingUnitMaxWidth
HandlingUnitMaxHeight
HandlingUnitMaxDimensionUnit
HandlingUnitOrigin
EWMSrlNmbrForPackagingMaterial
EWMHUIsJITUpdateRelevant
EWMHUDestinationProdnSupArea
EWMHUDestinationStorageBin
_WeightUnit _WeightUnit
_WeightUnitTare _WeightUnitTare
_VolumeUnit _VolumeUnit
_VolumeUnitTare _VolumeUnitTare
KEY Warehouse
HandlingUnitCharUUID HandlingUnitCharUUID
HandlingUnitInternalCharUUID HandlingUnitCharUUID
HandlingUnitExternalIdType HandlingUnitExternalIdType
Plant Plant
StorageLocation StorageLocation
ShippingPoint ShippingPoint
HandlingUnitInternalID HandlingUnitInternalID
HandlingUnitLowerLevelRefer HandlingUnitLowerLevelRefer
ParentHandlingUnitNumber _HandlingUnitParentHdr HandlingUnitExternalID
HighestLevelHandlingUnitNumber
PackagingMaterial PackagingMaterial
PackagingMaterialType PackagingMaterialType
PackingInstruction PackingInstruction
GrossWeight GrossWeight
NetWeight NetWeight
HandlingUnitMaxWeight HandlingUnitMaxWeight
WeightUnit WeightUnit
HandlingUnitTareWeight HandlingUnitTareWeight
HandlingUnitTareWeightUnit HandlingUnitTareWeightUnit
GrossVolume GrossVolume
HandlingUnitNetVolume HandlingUnitNetVolume
HandlingUnitMaxVolume HandlingUnitMaxVolume
VolumeUnit VolumeUnit
HandlingUnitTareVolume HandlingUnitTareVolume
HandlingUnitTareVolumeUnit HandlingUnitTareVolumeUnit
HandlingUnitLength HandlingUnitLength
HandlingUnitWidth HandlingUnitWidth
HandlingUnitHeight HandlingUnitHeight
UnitOfMeasureDimension UnitOfMeasureDimension
HandlingUnitPackingObjectType HandlingUnitPackingObjectType
HandlingUnitReferenceDocument HandlingUnitPackingObjectKey
HandlingUnitHasCrossRefDoc
CreatedByUser CreatedByUser
clientNULLasCreationDateTime
clientNULLendasLastChangeDateTime
HandlingUnitInternalStatus HandlingUnitInternalStatus
SourceHandlingUnitUUID SourceHandlingUnitUUID
HandlingUnitSecondExternalId HandlingUnitSecondExternalId
HandlingUnitSlotNumber HandlingUnitSlotNumber
HndlgUnitRlvnceForJIT HndlgUnitRlvnceForJIT
StorageType
StorageSection
StorageBin
EWMResource
EWMConsolidationGroup
HandlingUnitIsClosed
HandlingUnitType
ExternalStorageProcessStep
EWMHUProcessStepIsCompleted
StorageProcess
EWMHandlingUnitIsPlanned
EWMHandlingUnitIsInStock
EWMHandlingUnitIsUnloaded
EWMHandlingUnitIsLoaded
EWMTranspUnitIsAssigned
EWMHUContentChangeIsBlocked
EWMHUMovementChangeIsBlocked
EWMHUAttributeChangeIsBlocked
EWMHUPostingChangeIsBlocked
EWMHUIsBlockedByCustoms
EWMHUIsPackedForShipping
HandlingUnitMaxLength
HandlingUnitMaxWidth
HandlingUnitMaxHeight
HandlingUnitMaxDimensionUnit
HandlingUnitOrigin
EWMSrlNmbrForPackagingMaterial
EWMHUIsJITUpdateRelevant
EWMHUDestinationProdnSupArea
EWMHUDestinationStorageBin
_WeightUnit _WeightUnit
_WeightUnitTare _WeightUnitTare
_VolumeUnit _VolumeUnit
_VolumeUnitTare _VolumeUnitTare
KEY Warehouse P_EWM_HandlingUnitHeader08 EWMWarehouse
HandlingUnitCharUUID
HandlingUnitInternalCharUUID
HandlingUnitExternalIdType
Plant
StorageLocation
ShippingPoint
HandlingUnitInternalID
HandlingUnitLowerLevelRefer
ParentHandlingUnitNumber P_EWM_HandlingUnitHeader08 ParentHandlingUnitNumber
HighestLevelHandlingUnitNumber P_EWM_HandlingUnitHeader08 EWMHghstLvlHandlingUnitNumber
PackagingMaterial P_EWM_HandlingUnitHeader08 PackagingMaterial
PackagingMaterialType P_EWM_HandlingUnitHeader08 PackagingMaterialType
PackingInstruction
GrossWeight P_EWM_HandlingUnitHeader08 GrossWeight
NetWeight P_EWM_HandlingUnitHeader08 NetWeight
HandlingUnitMaxWeight P_EWM_HandlingUnitHeader08 HandlingUnitMaxWeight
WeightUnit P_EWM_HandlingUnitHeader08 WeightUnit
HandlingUnitTareWeight P_EWM_HandlingUnitHeader08 HandlingUnitTareWeight
HandlingUnitTareWeightUnit P_EWM_HandlingUnitHeader08 HandlingUnitTareWeightUnit
GrossVolume P_EWM_HandlingUnitHeader08 GrossVolume
HandlingUnitNetVolume P_EWM_HandlingUnitHeader08 HandlingUnitNetVolume
HandlingUnitMaxVolume P_EWM_HandlingUnitHeader08 HandlingUnitMaxVolume
VolumeUnit P_EWM_HandlingUnitHeader08 VolumeUnit
HandlingUnitTareVolume P_EWM_HandlingUnitHeader08 HandlingUnitTareVolume
HandlingUnitTareVolumeUnit P_EWM_HandlingUnitHeader08 HandlingUnitTareVolumeUnit
HandlingUnitLength
HandlingUnitWidth
HandlingUnitHeight
UnitOfMeasureDimension P_EWM_HandlingUnitHeader08 EWMDimensionUnit
HandlingUnitReferenceDocument
HandlingUnitHasCrossRefDoc HandlingUnitHasCrossRefDoc
CreatedByUser P_EWM_HandlingUnitHeader08 CreatedByUser
CreationDateTime P_EWM_HandlingUnitHeader08 CreationDateTime
LastChangedByUserendasLastChangedByUser
HandlingUnitInternalStatus
SourceHandlingUnitUUID
HandlingUnitSecondExternalId
HandlingUnitSlotNumber
HndlgUnitRlvnceForJIT
StorageType P_EWM_HandlingUnitHeader08 EWMStorageType
StorageSection P_EWM_HandlingUnitHeader08 EWMStorageBinSection
StorageBin P_EWM_HandlingUnitHeader08 EWMStorageBin
EWMResource P_EWM_HandlingUnitHeader08 EWMResource
EWMConsolidationGroup P_EWM_HandlingUnitHeader08 EWMConsolidationGroup
HandlingUnitIsClosed P_EWM_HandlingUnitHeader08 HandlingUnitIsClosed
HandlingUnitType P_EWM_HandlingUnitHeader08 HandlingUnitType
ExternalStorageProcessStep P_EWM_HandlingUnitHeader08 ExternalStorageProcessStep
EWMHUProcessStepIsCompleted P_EWM_HandlingUnitHeader08 EWMHUProcessStepIsCompleted
StorageProcess P_EWM_HandlingUnitHeader08 StorageProcess
EWMHandlingUnitIsPlanned P_EWM_HandlingUnitHeader08 EWMHandlingUnitIsPlanned
EWMHandlingUnitIsInStock P_EWM_HandlingUnitHeader08 EWMHandlingUnitIsInStock
EWMHandlingUnitIsUnloaded P_EWM_HandlingUnitHeader08 EWMHandlingUnitIsUnloaded
EWMHandlingUnitIsLoaded P_EWM_HandlingUnitHeader08 EWMHandlingUnitIsLoaded
EWMTranspUnitIsAssigned P_EWM_HandlingUnitHeader08 EWMTranspUnitIsAssigned
EWMHUContentChangeIsBlocked P_EWM_HandlingUnitHeader08 EWMHUContentChangeIsBlocked
EWMHUMovementChangeIsBlocked P_EWM_HandlingUnitHeader08 EWMHUMovementChangeIsBlocked
EWMHUAttributeChangeIsBlocked P_EWM_HandlingUnitHeader08 EWMHUAttributeChangeIsBlocked
EWMHUPostingChangeIsBlocked P_EWM_HandlingUnitHeader08 EWMHUPostingChangeIsBlocked
EWMHUIsBlockedByCustoms P_EWM_HandlingUnitHeader08 EWMHUIsBlockedByCustoms
EWMHUIsPackedForShipping P_EWM_HandlingUnitHeader08 EWMHUIsPackedForShipping
HandlingUnitMaxLength P_EWM_HandlingUnitHeader08 HandlingUnitMaxLength
HandlingUnitMaxWidth P_EWM_HandlingUnitHeader08 HandlingUnitMaxWidth
HandlingUnitMaxHeight P_EWM_HandlingUnitHeader08 HandlingUnitMaxHeight
HandlingUnitMaxDimensionUnit P_EWM_HandlingUnitHeader08 HandlingUnitMaxDimensionUnit
HandlingUnitOrigin
EWMSrlNmbrForPackagingMaterial EWMSrlNmbrForPackagingMaterial
EWMHUIsJITUpdateRelevant EWMHUIsJITUpdateRelevant
EWMHUDestinationProdnSupArea EWMHUDestinationProdnSupArea
EWMHUDestinationStorageBin EWMHUDestinationStorageBin
_WeightUnit _WeightUnit
_WeightUnitTare _WeightUnitTare
_VolumeUnit _VolumeUnit
_VolumeUnitTare _VolumeUnitTare
_UnitOfMeasureDimension _UnitOfMeasureDimension
@AbapCatalog: {
    sqlViewName: 'IHANDLINGUNITHCO',
    compiler.compareFilter: true
}

@ClientHandling.algorithm: #SESSION_VARIABLE

@Metadata.ignorePropagatedAnnotations: true

@AccessControl: {
    authorizationCheck:     #CHECK,
    personalData.blocking:  #BLOCKED_DATA_EXCLUDED
}

@ObjectModel: {
    usageType: {
      dataClass:       #MIXED,
      serviceQuality:  #C,
      sizeCategory:    #XL
    }
}
@VDM: {
    viewType: #COMPOSITE,
    lifecycle.contract.type: #SAP_INTERNAL_API
}

@EndUserText.label: 'Handling Units - combined data from LO and EWM storages'
@AbapCatalog.preserveKey: true


// 1). select LO HUs for non-EWM and non-WM storage locations

define view I_HandlingUnitHeaderCombined
  as select from I_HandlingUnitHeader as vekp

  association [0..1] to I_UnitOfMeasure      as _WeightUnit             on _WeightUnit.UnitOfMeasure = vekp.WeightUnit
  association [0..1] to I_UnitOfMeasure      as _WeightUnitTare         on _WeightUnitTare.UnitOfMeasure = vekp.HandlingUnitTareWeightUnit
  association [0..1] to I_UnitOfMeasure      as _VolumeUnit             on _VolumeUnit.UnitOfMeasure = vekp.VolumeUnit
  association [0..1] to I_UnitOfMeasure      as _VolumeUnitTare         on _VolumeUnitTare.UnitOfMeasure = vekp.HandlingUnitTareVolumeUnit
  association [0..1] to I_UnitOfMeasure      as _UnitOfMeasureDimension on _UnitOfMeasureDimension.UnitOfMeasure = vekp.UnitOfMeasureDimension

  association [0..1] to I_HandlingUnitHeader as _HandlingUnitParentHdr  on _HandlingUnitParentHdr.HandlingUnitInternalID = vekp.HandlingUnitLowerLevelRefer

{
  key HandlingUnitExternalID,
  key cast('    ' as /scwm/lgnum preserving type)                                     as Warehouse,
      HandlingUnitCharUUID,
      HandlingUnitCharUUID                                                            as HandlingUnitInternalCharUUID,
      HandlingUnitExternalIdType,

      Plant,
      StorageLocation,
      ShippingPoint,
      HandlingUnitInternalID,
      HandlingUnitLowerLevelRefer,

      _HandlingUnitParentHdr.HandlingUnitExternalID                                   as ParentHandlingUnitNumber,
      cast( '                    ' as exidv preserving type )                         as HighestLevelHandlingUnitNumber,

      PackagingMaterial,
      PackagingMaterialType,
      PackingInstruction,

      @Semantics.quantity.unitOfMeasure: 'WeightUnit'
      GrossWeight,
      @Semantics.quantity.unitOfMeasure: 'WeightUnit'
      NetWeight,
      @Semantics.quantity.unitOfMeasure: 'WeightUnit'
      HandlingUnitMaxWeight,
      @Semantics.unitOfMeasure:true
      WeightUnit,
      @Semantics.quantity.unitOfMeasure: 'HandlingUnitTareWeightUnit'
      HandlingUnitTareWeight,
      @Semantics.unitOfMeasure:true
      HandlingUnitTareWeightUnit,

      @Semantics.quantity.unitOfMeasure: 'VolumeUnit'
      GrossVolume,
      @Semantics.quantity.unitOfMeasure: 'VolumeUnit'
      HandlingUnitNetVolume,
      @Semantics.quantity.unitOfMeasure: 'VolumeUnit'
      HandlingUnitMaxVolume,
      @Semantics.unitOfMeasure:true
      VolumeUnit,
      @Semantics.quantity.unitOfMeasure: 'HandlingUnitTareVolumeUnit'
      HandlingUnitTareVolume,
      @Semantics.unitOfMeasure:true
      HandlingUnitTareVolumeUnit,

      @Semantics.quantity.unitOfMeasure: 'UnitOfMeasureDimension'
      HandlingUnitLength,
      @Semantics.quantity.unitOfMeasure: 'UnitOfMeasureDimension'
      HandlingUnitWidth,
      @Semantics.quantity.unitOfMeasure: 'UnitOfMeasureDimension'
      HandlingUnitHeight,
      @Semantics.unitOfMeasure:true
      UnitOfMeasureDimension,

      HandlingUnitPackingObjectType,
      HandlingUnitPackingObjectKey as HandlingUnitReferenceDocument,
      // EWM specific field for Cross HUs

      cast( '' as abap_boolean preserving type )                                      as HandlingUnitHasCrossRefDoc,

      CreatedByUser,

      @Semantics.systemDateTime.createdAt: true
      dats_tims_to_tstmp( CreationDate,
                         CreationTime,
                         abap_system_timezone( $session.client, 'NULL'),
                         $session.client,
                        'NULL' )                                                      as CreationDateTime,

      // always fill LastChanged timestamp/user, in particular to use single timestamp field as etag value

      case
       when LastChangedByUser is initial then
         CreatedByUser
         else
         LastChangedByUser end                                                        as LastChangedByUser,

      @Semantics.systemDateTime.lastChangedAt: true
      case
       when LastChangeDate is initial then
          dats_tims_to_tstmp( CreationDate,
                             CreationTime,
                             abap_system_timezone( $session.client, 'NULL'),
                             $session.client,
                            'NULL' )
       else
          dats_tims_to_tstmp( LastChangeDate,
                             LastChangeTime,
                             abap_system_timezone( $session.client, 'NULL'),
                             $session.client,
                            'NULL' )
       end                                                                            as LastChangeDateTime,

      HandlingUnitInternalStatus,

      case HandlingUnitInternalStatus
          when '0001' then 'A'       // planned

          when '0010' then 'A'       // implemented - stock not posted as goods receipt

          when '0015' then 'B'       // visually checked

          when '0020' then 'B'       // stock at nonHU SLoc

          when '0030' then 'B'       // stock at HU SLoc

          when '0031' then 'B'       // Physical inventory

          when '0040' then 'T'       // in transit

          when '0050' then 'C'       // Goods issue posted - shipped

          when '0060' then 'D'       // deleted/obsolete HU

          else cast(' ' as hu_status_api preserving type)
        end                                                                           as HandlingUnitProcessStatus,

      SourceHandlingUnitUUID,

      HandlingUnitSecondExternalId,

      HandlingUnitSlotNumber,
      
      HndlgUnitRlvnceForJIT,

      //    EWM specific fields

      cast('    ' as /scwm/lgtyp preserving type)                                     as StorageType,
      cast('    ' as /scwm/lgber preserving type)                                     as StorageSection,
      cast('                  ' as /scwm/lgpla preserving type)                       as StorageBin,
      cast('                  ' as /scwm/de_rsrc preserving type )                    as EWMResource,
      cast('          ' as /scwm/de_dstgrp preserving type)                           as EWMConsolidationGroup,
      cast('' as /scwm/de_closed_pm preserving type )                                 as HandlingUnitIsClosed,
      cast('    ' as /scwm/de_hutyp preserving type)                                  as HandlingUnitType,
      cast('    ' as /scwm/de_procs preserving type )                                 as ExternalStorageProcessStep,
      cast('' as /scwm/de_copst preserving type )                                     as EWMHUProcessStepIsCompleted,
      cast('    ' as /scwm/de_prces preserving type )                                 as StorageProcess,
      cast('' as ewm_de_hu_is_planned preserving type )                               as EWMHandlingUnitIsPlanned,
      cast('' as ewm_de_hu_is_in_stock preserving type )                              as EWMHandlingUnitIsInStock,
      cast('' as ewm_de_hu_is_unloaded preserving type )                              as EWMHandlingUnitIsUnloaded,
      cast('' as ewm_de_hu_is_loaded preserving type )                                as EWMHandlingUnitIsLoaded,
      cast('' as ewm_de_hu_is_assigned_to_tu preserving type )                        as EWMTranspUnitIsAssigned,
      cast('' as ewm_de_hu_is_cntnt_change_blck preserving type )                     as EWMHUContentChangeIsBlocked,
      cast('' as ewm_de_hu_is_movement_blocked preserving type )                      as EWMHUMovementChangeIsBlocked,
      cast('' as ewm_de_hu_is_attrbt_chng_blck preserving type )                      as EWMHUAttributeChangeIsBlocked,
      cast('' as ewm_de_hu_is_posting_chng_blck preserving type )                     as EWMHUPostingChangeIsBlocked,
      cast('' as ewm_de_hu_is_blckd_by_customs preserving type )                      as EWMHUIsBlockedByCustoms,
      cast('' as ewm_de_hu_is_packed_for_ship preserving type )                       as EWMHUIsPackedForShipping,


      @Semantics.quantity.unitOfMeasure: 'HandlingUnitMaxDimensionUnit'
      cast( 0 as /scwm/de_maxl)                                                       as HandlingUnitMaxLength,
      @Semantics.quantity.unitOfMeasure: 'HandlingUnitMaxDimensionUnit'
      cast(0 as /scwm/de_maxb)                                                        as HandlingUnitMaxWidth,
      @Semantics.quantity.unitOfMeasure: 'HandlingUnitMaxDimensionUnit'
      cast(0 as /scwm/de_maxh)                                                        as HandlingUnitMaxHeight,
      @Semantics.unitOfMeasure: true
      cast('   ' as /scwm/de_maxdim_uom)                                              as HandlingUnitMaxDimensionUnit,

      cast('ERP' as lo_hu_hu_origin preserving type)                                  as HandlingUnitOrigin,

      cast( '                              ' as ewm_de_serialnumber preserving type ) as EWMSrlNmbrForPackagingMaterial,

      cast( ' ' as /scwm/de_jit_upd_relevance preserving type )                       as EWMHUIsJITUpdateRelevant,
      cast( '               ' as /scwm/de_hu_dest_psa preserving type )               as EWMHUDestinationProdnSupArea,
      cast( '                  ' as /scwm/de_hu_dest_lgpla preserving type )          as EWMHUDestinationStorageBin,

      _WeightUnit,
      _WeightUnitTare,
      _VolumeUnit,
      _VolumeUnitTare,
      _UnitOfMeasureDimension

}
where
  (
            HandlingUnitPackingObjectType       != '00' //Not assigned to an object.

    and     HandlingUnitPackingObjectType       != '02' //Sales document

    and     HandlingUnitPackingObjectType       != '04' //Shipment

    and     HandlingUnitPackingObjectType       != '05' //Non-Assigned HU

    and     HandlingUnitPackingObjectType       != '06' //Non-Assigned HU

    and     HandlingUnitPackingObjectType       != '21' //Cross-Outbound Delivery

    and     HandlingUnitPackingObjectType       != '23' //Cross-Inbound Delivery

  )
  and(
            Warehouse                           is initial //only for S/4HANA Cloud! needs to be changed for onPrem

    and     HandlingUnitInternalStatus          != '0060' //deleted


    //additional conditions to not show HUs that are managed by EWM

    and(
            //standalone HUs that are managed externally

            (
              HandlingUnitStockMgmtType         != 'A'  //HU in system with IM stock -> HU is managed externally

              and HandlingUnitPackingObjectType =  '12' //Non-Assigned HU -> standalone HU

            )
      or(
            HandlingUnitPackingObjectType       =  '09' // Work Order - Finished Product

        or  HandlingUnitPackingObjectType       =  '07' // Repititive Manufacturing

      )
      or(
            HandlingUnitPackingObjectType       =  '01' // Outbound Delivery

        or  HandlingUnitPackingObjectType       =  '03' // Inbound Delivery

      )
    )
  )


union all

// 2). select LO HUs for ext. WM storage locations - only for outbound deliveries

select from I_HandlingUnitHeader     as vekp_decwhs
  join      I_ERPWarehouseParameters as whs_param on whs_param.Warehouse                   = vekp_decwhs.Warehouse
                                                  and(
                                                    whs_param.HandlingUnitWarehouseType    = 'X'
                                                    or whs_param.HandlingUnitWarehouseType is initial
                                                  )

association [0..1] to I_UnitOfMeasure      as _WeightUnit             on _WeightUnit.UnitOfMeasure = $projection.WeightUnit
association [0..1] to I_UnitOfMeasure      as _WeightUnitTare         on _WeightUnitTare.UnitOfMeasure = $projection.HandlingUnitTareWeightUnit
association [0..1] to I_UnitOfMeasure      as _VolumeUnit             on _VolumeUnit.UnitOfMeasure = $projection.VolumeUnit
association [0..1] to I_UnitOfMeasure      as _VolumeUnitTare         on _VolumeUnitTare.UnitOfMeasure = $projection.HandlingUnitTareVolumeUnit
association [0..1] to I_UnitOfMeasure      as _UnitOfMeasureDimension on _UnitOfMeasureDimension.UnitOfMeasure = $projection.UnitOfMeasureDimension

association [0..1] to I_HandlingUnitHeader as _HandlingUnitParentHdr  on _HandlingUnitParentHdr.HandlingUnitInternalID = vekp_decwhs.HandlingUnitLowerLevelRefer

{
  key HandlingUnitExternalID,
  key cast('    ' as /scwm/lgnum preserving type)                                     as Warehouse,
      HandlingUnitCharUUID,
      HandlingUnitCharUUID                                                            as HandlingUnitInternalCharUUID,
      HandlingUnitExternalIdType,

      Plant,
      StorageLocation,
      ShippingPoint,

      HandlingUnitInternalID,
      HandlingUnitLowerLevelRefer,

      _HandlingUnitParentHdr.HandlingUnitExternalID                                   as ParentHandlingUnitNumber,
      cast( '                    ' as exidv preserving type )                         as HighestLevelHandlingUnitNumber,

      PackagingMaterial,
      PackagingMaterialType,
      PackingInstruction,

      @Semantics.quantity.unitOfMeasure: 'WeightUnit'
      GrossWeight,
      @Semantics.quantity.unitOfMeasure: 'WeightUnit'
      NetWeight,
      @Semantics.quantity.unitOfMeasure: 'WeightUnit'
      HandlingUnitMaxWeight,
      @Semantics.unitOfMeasure:true
      WeightUnit,
      @Semantics.quantity.unitOfMeasure: 'HandlingUnitTareWeightUnit'
      HandlingUnitTareWeight,
      @Semantics.unitOfMeasure:true
      HandlingUnitTareWeightUnit,

      @Semantics.quantity.unitOfMeasure: 'VolumeUnit'
      GrossVolume,
      @Semantics.quantity.unitOfMeasure: 'VolumeUnit'
      HandlingUnitNetVolume,
      @Semantics.quantity.unitOfMeasure: 'VolumeUnit'
      HandlingUnitMaxVolume,
      @Semantics.unitOfMeasure:true
      VolumeUnit,
      @Semantics.quantity.unitOfMeasure: 'HandlingUnitTareVolumeUnit'
      HandlingUnitTareVolume,
      @Semantics.unitOfMeasure:true
      HandlingUnitTareVolumeUnit,

      @Semantics.quantity.unitOfMeasure: 'UnitOfMeasureDimension'
      HandlingUnitLength,
      @Semantics.quantity.unitOfMeasure: 'UnitOfMeasureDimension'
      HandlingUnitWidth,
      @Semantics.quantity.unitOfMeasure: 'UnitOfMeasureDimension'
      HandlingUnitHeight ,
      @Semantics.unitOfMeasure:true
      UnitOfMeasureDimension,

      HandlingUnitPackingObjectType,
      HandlingUnitPackingObjectKey                                                    as HandlingUnitReferenceDocument,
      // EWM specific field for Cross HUs

      cast( '' as abap_boolean preserving type )                                      as HandlingUnitHasCrossRefDoc,

      CreatedByUser,

      @Semantics.systemDateTime.createdAt: true
      dats_tims_to_tstmp( CreationDate,
                         CreationTime,
                         abap_system_timezone( $session.client, 'NULL'),
                         $session.client,
                        'NULL' )                                                      as CreationDateTime,

      // always fill LastChanged timestamp/user, in particular to use single timestamp field as etag value

      case
       when LastChangedByUser is initial then
         CreatedByUser
         else
         LastChangedByUser end                                                        as LastChangedByUser,

      @Semantics.systemDateTime.lastChangedAt: true
      case
       when LastChangeDate is initial then
           dats_tims_to_tstmp( CreationDate,
                             CreationTime,
                             abap_system_timezone( $session.client, 'NULL'),
                             $session.client,
                            'NULL' )
       else
         dats_tims_to_tstmp( LastChangeDate,
                             LastChangeTime,
                             abap_system_timezone( $session.client, 'NULL'),
                             $session.client,
                            'NULL' )
      end                                                                             as LastChangeDateTime,

      HandlingUnitInternalStatus,

      case HandlingUnitInternalStatus
        when '0001' then 'A'         // planned

        when '0010' then 'A'         // implemented - stock not posted as goods receipt

        when '0015' then 'B'         // visually checked

        when '0020' then 'B'         // stock at nonHU SLoc

        when '0030' then 'B'         // stock at HU SLoc

        when '0031' then 'B'         // Physical inventory

        when '0040' then 'T'         // in transit

        when '0050' then 'C'         // Goods issue posted - shipped

        when '0060' then 'D'       // deleted/obsolete HU

        else cast(' ' as hu_status_api preserving type)
      end                                                                             as HandlingUnitProcessStatus,

      SourceHandlingUnitUUID,

      HandlingUnitSecondExternalId,

      HandlingUnitSlotNumber,
      
      HndlgUnitRlvnceForJIT,

      //    EWM specific fields

      cast('    ' as /scwm/lgtyp preserving type)                                     as StorageType,
      cast('    ' as /scwm/lgber preserving type)                                     as StorageSection,
      cast('                  ' as /scwm/lgpla preserving type)                       as StorageBin,
      cast('                  ' as /scwm/de_rsrc preserving type )                    as EWMResource,
      cast('          ' as /scwm/de_dstgrp preserving type)                           as EWMConsolidationGroup,
      cast('' as /scwm/de_closed_pm preserving type )                                 as HandlingUnitIsClosed,
      cast('    ' as /scwm/de_hutyp preserving type)                                  as HandlingUnitType,
      cast('    ' as /scwm/de_procs preserving type )                                 as ExternalStorageProcessStep,
      cast('' as /scwm/de_copst preserving type )                                     as EWMHUProcessStepIsCompleted,
      cast('    ' as /scwm/de_prces preserving type )                                 as StorageProcess,
      cast('' as ewm_de_hu_is_planned preserving type )                               as EWMHandlingUnitIsPlanned,
      cast('' as ewm_de_hu_is_in_stock preserving type )                              as EWMHandlingUnitIsInStock,
      cast('' as ewm_de_hu_is_unloaded preserving type )                              as EWMHandlingUnitIsUnloaded,
      cast('' as ewm_de_hu_is_loaded preserving type )                                as EWMHandlingUnitIsLoaded,
      cast('' as ewm_de_hu_is_assigned_to_tu preserving type )                        as EWMTranspUnitIsAssigned,
      cast('' as ewm_de_hu_is_cntnt_change_blck preserving type )                     as EWMHUContentChangeIsBlocked,
      cast('' as ewm_de_hu_is_movement_blocked preserving type )                      as EWMHUMovementChangeIsBlocked,
      cast('' as ewm_de_hu_is_attrbt_chng_blck preserving type )                      as EWMHUAttributeChangeIsBlocked,
      cast('' as ewm_de_hu_is_posting_chng_blck preserving type )                     as EWMHUPostingChangeIsBlocked,
      cast('' as ewm_de_hu_is_blckd_by_customs preserving type )                      as EWMHUIsBlockedByCustoms,
      cast('' as ewm_de_hu_is_packed_for_ship preserving type )                       as EWMHUIsPackedForShipping,

      @Semantics.quantity.unitOfMeasure: 'HandlingUnitMaxDimensionUnit'
      cast( 0 as /scwm/de_maxl)                                                       as HandlingUnitMaxLength,
      @Semantics.quantity.unitOfMeasure: 'HandlingUnitMaxDimensionUnit'
      cast(0 as /scwm/de_maxb)                                                        as HandlingUnitMaxWidth,
      @Semantics.quantity.unitOfMeasure: 'HandlingUnitMaxDimensionUnit'
      cast(0 as /scwm/de_maxh)                                                        as HandlingUnitMaxHeight,
      @Semantics.unitOfMeasure: true
      cast('   ' as /scwm/de_maxdim_uom)                                              as HandlingUnitMaxDimensionUnit,

      cast('ERP' as lo_hu_hu_origin preserving type)                                  as HandlingUnitOrigin,

      cast( '                              ' as ewm_de_serialnumber preserving type ) as EWMSrlNmbrForPackagingMaterial,

      cast( ' ' as /scwm/de_jit_upd_relevance preserving type )                       as EWMHUIsJITUpdateRelevant,
      cast( '               ' as /scwm/de_hu_dest_psa preserving type )               as EWMHUDestinationProdnSupArea,
      cast( '                  ' as /scwm/de_hu_dest_lgpla preserving type )          as EWMHUDestinationStorageBin,

      _WeightUnit,
      _WeightUnitTare,
      _VolumeUnit,
      _VolumeUnitTare,
      _UnitOfMeasureDimension

}
where
       vekp_decwhs.Warehouse         is not initial
  and(
       HandlingUnitPackingObjectType != '00' //Not assigned to an object.

    or HandlingUnitPackingObjectType != '02' //Sales document

    or HandlingUnitPackingObjectType != '04' //Shipment

    or HandlingUnitPackingObjectType != '05' //Non-Assigned HU

    or HandlingUnitPackingObjectType != '06' //Non-Assigned HU

    or HandlingUnitPackingObjectType != '21' //Cross-Outbound Delivery

    or HandlingUnitPackingObjectType != '23' //Cross-Inbound Delivery

  )
  and  HandlingUnitInternalStatus    <> '0060'
//additional condition to not show HUs that have been moved to a Warehouse

//-> not here as this query is interested in WH HUs




union all

// 3). select LO HUs for EWM storage locations - only for outbound deliveries

// - for inbound and standalone HUs EWM is master system,

// so for last ones we take them always from EWM and ignore LO ones

select from I_HandlingUnitHeader         as vekp_ewm
  join      I_ERPWarehouseParameters     as whs_param on  whs_param.Warehouse                 = vekp_ewm.Warehouse
                                                      and whs_param.HandlingUnitWarehouseType = 'E'
  join      I_ERPWarehouseToEWMWarehouse as ewm_whs   on ewm_whs.WarehouseERP = vekp_ewm.Warehouse

association [0..1] to I_UnitOfMeasure      as _WeightUnit             on _WeightUnit.UnitOfMeasure = vekp_ewm.WeightUnit
association [0..1] to I_UnitOfMeasure      as _WeightUnitTare         on _WeightUnitTare.UnitOfMeasure = vekp_ewm.HandlingUnitTareWeightUnit
association [0..1] to I_UnitOfMeasure      as _VolumeUnit             on _VolumeUnit.UnitOfMeasure = vekp_ewm.VolumeUnit
association [0..1] to I_UnitOfMeasure      as _VolumeUnitTare         on _VolumeUnitTare.UnitOfMeasure = vekp_ewm.HandlingUnitTareVolumeUnit
association [0..1] to I_UnitOfMeasure      as _UnitOfMeasureDimension on _UnitOfMeasureDimension.UnitOfMeasure = vekp_ewm.UnitOfMeasureDimension

association [0..1] to I_HandlingUnitHeader as _HandlingUnitParentHdr  on _HandlingUnitParentHdr.HandlingUnitInternalID = vekp_ewm.HandlingUnitLowerLevelRefer

{
  key HandlingUnitExternalID,
  key cast('    ' as /scwm/lgnum preserving type)                                     as Warehouse,
      HandlingUnitCharUUID,
      HandlingUnitCharUUID                                                            as HandlingUnitInternalCharUUID,
      HandlingUnitExternalIdType,

      Plant,
      StorageLocation,
      ShippingPoint,

      HandlingUnitInternalID,
      HandlingUnitLowerLevelRefer,

      _HandlingUnitParentHdr.HandlingUnitExternalID                                   as ParentHandlingUnitNumber,
      cast( '                    ' as exidv preserving type )                         as HighestLevelHandlingUnitNumber,

      PackagingMaterial,
      PackagingMaterialType,
      PackingInstruction,

      @Semantics.quantity.unitOfMeasure: 'WeightUnit'
      GrossWeight,
      @Semantics.quantity.unitOfMeasure: 'WeightUnit'
      NetWeight,
      @Semantics.quantity.unitOfMeasure: 'WeightUnit'
      HandlingUnitMaxWeight,
      @Semantics.unitOfMeasure:true
      WeightUnit,
      @Semantics.quantity.unitOfMeasure: 'HandlingUnitTareWeightUnit'
      HandlingUnitTareWeight,
      @Semantics.unitOfMeasure:true
      HandlingUnitTareWeightUnit,

      @Semantics.quantity.unitOfMeasure: 'VolumeUnit'
      GrossVolume,
      @Semantics.quantity.unitOfMeasure: 'VolumeUnit'
      HandlingUnitNetVolume,
      @Semantics.quantity.unitOfMeasure: 'VolumeUnit'
      HandlingUnitMaxVolume,
      @Semantics.unitOfMeasure:true
      VolumeUnit,
      @Semantics.quantity.unitOfMeasure: 'HandlingUnitTareVolumeUnit'
      HandlingUnitTareVolume,
      @Semantics.unitOfMeasure:true
      HandlingUnitTareVolumeUnit,

      @Semantics.quantity.unitOfMeasure: 'UnitOfMeasureDimension'
      HandlingUnitLength,
      @Semantics.quantity.unitOfMeasure: 'UnitOfMeasureDimension'
      HandlingUnitWidth,
      @Semantics.quantity.unitOfMeasure: 'UnitOfMeasureDimension'
      HandlingUnitHeight,
      @Semantics.unitOfMeasure:true
      UnitOfMeasureDimension,

      HandlingUnitPackingObjectType,
      HandlingUnitPackingObjectKey                                                    as HandlingUnitReferenceDocument,
      // EWM specific field for Cross HUs

      cast( '' as abap_boolean preserving type )                                      as HandlingUnitHasCrossRefDoc,

      CreatedByUser,

      @Semantics.systemDateTime.createdAt: true
      dats_tims_to_tstmp( CreationDate,
                         CreationTime,
                         abap_system_timezone( $session.client, 'NULL'),
                         $session.client,
                        'NULL' )                                                      as CreationDateTime,

      // always fill LastChanged timestamp/user, in particular to use single timestamp field as etag value

      case
       when LastChangedByUser is initial then
         CreatedByUser
         else
         LastChangedByUser end                                                        as LastChangedByUser,

      @Semantics.systemDateTime.lastChangedAt: true
      case
       when LastChangeDate is initial then
           dats_tims_to_tstmp( CreationDate,
                             CreationTime,
                             abap_system_timezone( $session.client, 'NULL'),
                             $session.client,
                            'NULL' )
       else
         dats_tims_to_tstmp( LastChangeDate,
                             LastChangeTime,
                             abap_system_timezone( $session.client, 'NULL'),
                             $session.client,
                            'NULL' )
      end                                                                             as LastChangeDateTime,

      HandlingUnitInternalStatus,

      case HandlingUnitInternalStatus
       when '0001' then 'A'          // planned

       when '0010' then 'A'          // implemented - stock not posted as goods receipt

       when '0015' then 'B'          // visually checked

       when '0020' then 'B'          // stock at nonHU SLoc

       when '0030' then 'B'          // stock at HU SLoc

       when '0031' then 'B'          // Physical inventory

       when '0040' then 'T'          // in transit

       when '0050' then 'C'          // Goods issue posted - shipped

       when '0060' then 'D'       // deleted/obsolete HU

       else cast(' ' as hu_status_api preserving type)
      end                                                                             as HandlingUnitProcessStatus,

      SourceHandlingUnitUUID,

      HandlingUnitSecondExternalId,

      HandlingUnitSlotNumber,
      
      HndlgUnitRlvnceForJIT,

      //    EWM specific fields

      cast('    ' as /scwm/lgtyp preserving type)                                     as StorageType,
      cast('    ' as /scwm/lgber preserving type)                                     as StorageSection,
      cast('                  ' as /scwm/lgpla preserving type)                       as StorageBin,
      cast('                  ' as /scwm/de_rsrc preserving type )                    as EWMResource,
      cast('          ' as /scwm/de_dstgrp preserving type)                           as EWMConsolidationGroup,
      cast('' as /scwm/de_closed_pm preserving type )                                 as HandlingUnitIsClosed,
      cast('    ' as /scwm/de_hutyp preserving type)                                  as HandlingUnitType,
      cast('    ' as /scwm/de_procs preserving type )                                 as ExternalStorageProcessStep,
      cast('' as /scwm/de_copst preserving type )                                     as EWMHUProcessStepIsCompleted,
      cast('    ' as /scwm/de_prces preserving type )                                 as StorageProcess,
      cast('' as ewm_de_hu_is_planned preserving type )                               as EWMHandlingUnitIsPlanned,
      cast('' as ewm_de_hu_is_in_stock preserving type )                              as EWMHandlingUnitIsInStock,
      cast('' as ewm_de_hu_is_unloaded preserving type )                              as EWMHandlingUnitIsUnloaded,
      cast('' as ewm_de_hu_is_loaded preserving type )                                as EWMHandlingUnitIsLoaded,
      cast('' as ewm_de_hu_is_assigned_to_tu preserving type )                        as EWMTranspUnitIsAssigned,
      cast('' as ewm_de_hu_is_cntnt_change_blck preserving type )                     as EWMHUContentChangeIsBlocked,
      cast('' as ewm_de_hu_is_movement_blocked preserving type )                      as EWMHUMovementChangeIsBlocked,
      cast('' as ewm_de_hu_is_attrbt_chng_blck preserving type )                      as EWMHUAttributeChangeIsBlocked,
      cast('' as ewm_de_hu_is_posting_chng_blck preserving type )                     as EWMHUPostingChangeIsBlocked,
      cast('' as ewm_de_hu_is_blckd_by_customs preserving type )                      as EWMHUIsBlockedByCustoms,
      cast('' as ewm_de_hu_is_packed_for_ship preserving type )                       as EWMHUIsPackedForShipping,

      @Semantics.quantity.unitOfMeasure: 'HandlingUnitMaxDimensionUnit'
      cast( 0 as /scwm/de_maxl)                                                       as HandlingUnitMaxLength,
      @Semantics.quantity.unitOfMeasure: 'HandlingUnitMaxDimensionUnit'
      cast(0 as /scwm/de_maxb)                                                        as HandlingUnitMaxWidth,
      @Semantics.quantity.unitOfMeasure: 'HandlingUnitMaxDimensionUnit'
      cast(0 as /scwm/de_maxh)                                                        as HandlingUnitMaxHeight,
      @Semantics.unitOfMeasure: true
      cast('   ' as /scwm/de_maxdim_uom)                                              as HandlingUnitMaxDimensionUnit,

      cast('ERP' as lo_hu_hu_origin preserving type)                                  as HandlingUnitOrigin,

      cast( '                              ' as ewm_de_serialnumber preserving type ) as EWMSrlNmbrForPackagingMaterial,

      cast( ' ' as /scwm/de_jit_upd_relevance preserving type )                       as EWMHUIsJITUpdateRelevant,
      cast( '               ' as /scwm/de_hu_dest_psa preserving type )               as EWMHUDestinationProdnSupArea,
      cast( '                  ' as /scwm/de_hu_dest_lgpla preserving type )          as EWMHUDestinationStorageBin,

      _WeightUnit,
      _WeightUnitTare,
      _VolumeUnit,
      _VolumeUnitTare,
      _UnitOfMeasureDimension

}
where
      vekp_ewm.Warehouse            is not initial
  and(
      HandlingUnitPackingObjectType =  '01'
    or // Outbound Delivery

      HandlingUnitPackingObjectType =  '21'
  )    // Cross-Outbound Delivery

  and HandlingUnitInternalStatus    <> '0060'


//TO-DO Check if these are also sent to decentral EWM

//    or HandlingUnitPackingObjectType =  '06'

//    or HandlingUnitPackingObjectType =  '07'

//    or HandlingUnitPackingObjectType =  '08'

//    or HandlingUnitPackingObjectType =  '09'


// 4). select EWM HUs

union all

select from P_EWM_HandlingUnitHeader08 as huhdr

association [0..1] to I_UnitOfMeasure as _WeightUnit             on _WeightUnit.UnitOfMeasure = huhdr.WeightUnit
association [0..1] to I_UnitOfMeasure as _WeightUnitTare         on _WeightUnitTare.UnitOfMeasure = huhdr.HandlingUnitTareWeightUnit
association [0..1] to I_UnitOfMeasure as _VolumeUnit             on _VolumeUnit.UnitOfMeasure = huhdr.VolumeUnit
association [0..1] to I_UnitOfMeasure as _VolumeUnitTare         on _VolumeUnitTare.UnitOfMeasure = huhdr.HandlingUnitTareVolumeUnit
association [0..1] to I_UnitOfMeasure as _UnitOfMeasureDimension on _UnitOfMeasureDimension.UnitOfMeasure = huhdr.EWMDimensionUnit

{
  key huhdr.HandlingUnitNumber                                         as HandlingUnitExternalID,
  key huhdr.EWMWarehouse                                               as Warehouse,
      bintohex(huhdr.EWMHandlingUnitExternalUUID)                      as HandlingUnitCharUUID,

      bintohex(huhdr.HandlingUnitUUID)                                 as HandlingUnitInternalCharUUID,

      cast(' ' as exida preserving type)                               as HandlingUnitExternalIdType,

      //   cast('   ' as lgnum preserving type)   as WarehouseERP,


      //  for EWM HUs Plant and Storage locations are not filled (since 1 EWM HU can contain items from different Plants)

      cast('    ' as hum_werks preserving type)                        as Plant,
      cast('    ' as hum_lgort preserving type)                        as StorageLocation,
      cast('    ' as vstel preserving type)                            as ShippingPoint,

      cast('          ' as venum preserving type)                      as HandlingUnitInternalID,
      cast( ParentHandlingUnitNumber as char10 )                       as HandlingUnitLowerLevelRefer,

      huhdr.ParentHandlingUnitNumber,
      huhdr.EWMHghstLvlHandlingUnitNumber                              as HighestLevelHandlingUnitNumber,

      huhdr.PackagingMaterial                                          as PackagingMaterial,
      huhdr.PackagingMaterialType                                      as PackagingMaterialType,
      cast('                      ' as pl_packnr_conv preserving type) as PackingInstruction,

      huhdr.GrossWeight,
      huhdr.NetWeight,
      huhdr.HandlingUnitMaxWeight,
      huhdr.WeightUnit,
      huhdr.HandlingUnitTareWeight,
      huhdr.HandlingUnitTareWeightUnit,
      //  huhdr.HandlingUnitWeightTolerance,


      huhdr.GrossVolume,
      huhdr.HandlingUnitNetVolume,
      huhdr.HandlingUnitMaxVolume,
      huhdr.VolumeUnit,
      huhdr.HandlingUnitTareVolume,
      //  huhdr.HandlingUnitVolumeTolerance,

      huhdr.HandlingUnitTareVolumeUnit,

      cast( huhdr.HandlingUnitLength as laeng )                        as HandlingUnitLength,
      cast( huhdr.HandlingUnitWidth  as breit )                        as HandlingUnitWidth,
      cast( huhdr.HandlingUnitHeight as hoehe )                        as HandlingUnitHeight,
      huhdr.EWMDimensionUnit                                           as UnitOfMeasureDimension,

      case EWMDeliveryDocumentCategory
       when 'PDO' then '01'          // Outbound Delivery

       when 'PDI' then '03'          // Inbound Delivery

       else cast('  ' as vpobj preserving type)
      end                                                              as HandlingUnitPackingObjectType,


      cast( ltrim( ReferenceDocumentNumber, '0' ) as vpobjkey )        as HandlingUnitReferenceDocument,
      HandlingUnitHasCrossRefDoc,

      huhdr.CreatedByUser                                              as CreatedByUser,

      @Semantics.systemDateTime.createdAt: true
      huhdr.CreationDateTime                                           as CreationDateTime,

      case
       when huhdr.LastChangedByUser is initial then
         huhdr.CreatedByUser
         else
         huhdr.LastChangedByUser end                                   as LastChangedByUser,

      @Semantics.systemDateTime.lastChangedAt: true
      case
       when huhdr.LastChangeDateTime is initial then
            huhdr.CreationDateTime
       else
            huhdr.LastChangeDateTime
      end                                                              as LastChangeDateTime,

      cast('    ' as hu_status preserving type)                        as HandlingUnitInternalStatus,

      case huhdr.HandlingUnitStatus
           when 'A' then 'A'       // planned

           when 'B' then 'B'       // active

           when 'C' then 'C'       // completed - shipped

           when 'D' then 'D'       // deleted/obsolete

           else cast(' ' as hu_status_api preserving type)
         end                                                           as HandlingUnitProcessStatus,

      cast('0000000000000000000000' as guid_vekp)                      as SourceHandlingUnitUUID,

      cast('00000000000000000000' as exidv2 )                          as HandlingUnitSecondExternalId,
      cast( '' as lohum_slot_num )                                      as HandlingUnitSlotNumber,
      cast( '' as abap.char( 1 ))                                      as HndlgUnitRlvnceForJIT,       

      huhdr.EWMStorageType                                             as StorageType,
      huhdr.EWMStorageBinSection                                       as StorageSection,
      huhdr.EWMStorageBin                                              as StorageBin,
      huhdr.EWMResource,

      huhdr.EWMConsolidationGroup,
      huhdr.HandlingUnitIsClosed,
      huhdr.HandlingUnitType,
      /* EWM Fields - Process Storage Control */
      huhdr.ExternalStorageProcessStep,
      huhdr.EWMHUProcessStepIsCompleted,
      huhdr.StorageProcess,

      /* EWM Fields - EWM HU Process Status */
      huhdr.EWMHandlingUnitIsPlanned,
      huhdr.EWMHandlingUnitIsInStock,
      huhdr.EWMHandlingUnitIsUnloaded,
      huhdr.EWMHandlingUnitIsLoaded,
      huhdr.EWMTranspUnitIsAssigned,

      /* EWM Fields - EWM HU Blocked Status */
      huhdr.EWMHUContentChangeIsBlocked,
      huhdr.EWMHUMovementChangeIsBlocked,
      huhdr.EWMHUAttributeChangeIsBlocked,
      huhdr.EWMHUPostingChangeIsBlocked,
      huhdr.EWMHUIsBlockedByCustoms,
      huhdr.EWMHUIsPackedForShipping,

      /* Max Dimensions */
      @Semantics.quantity.unitOfMeasure: 'HandlingUnitMaxDimensionUnit'
      huhdr.HandlingUnitMaxLength,
      huhdr.HandlingUnitMaxWidth,
      @Semantics.quantity.unitOfMeasure: 'HandlingUnitMaxDimensionUnit'
      huhdr.HandlingUnitMaxHeight,
      @Semantics.unitOfMeasure: true
      huhdr.HandlingUnitMaxDimensionUnit,

      cast('EWM' as lo_hu_hu_origin preserving type)                   as HandlingUnitOrigin,

      EWMSrlNmbrForPackagingMaterial,

      // Multifitment Point

      EWMHUIsJITUpdateRelevant,
      EWMHUDestinationProdnSupArea,
      EWMHUDestinationStorageBin,

      _WeightUnit,
      _WeightUnitTare,
      _VolumeUnit,
      _VolumeUnitTare,
      _UnitOfMeasureDimension
}
where
  huhdr.HandlingUnitStatus != 'D'