FSH_DDL_TPO

DDL: FSH_DDL_TPO SQL: V_FSH_TPO Type: view Package: FSH_PP_MD04

TPO Extract

FSH_DDL_TPO is a CDS View that provides data about "TPO Extract" in SAP S/4HANA. It reads from 5 data sources (pph_e_Ekkn, pph_e_Ebkn, fsh_ddl_tpo_4, vbap, vbap) and exposes 80 fields. Part of development package FSH_PP_MD04.

Data Sources (5)

SourceAliasJoin Type
pph_e_Ekkn e inner
pph_e_Ebkn ebkn left_outer
fsh_ddl_tpo_4 m from
vbap vbap left_outer
vbap vbap left_outer

Annotations (7)

NameValueLevelField
EndUserText.label TPO Extract view
AbapCatalog.sqlViewName V_FSH_TPO view
AccessControl.authorizationCheck #NOT_REQUIRED view
ClientHandling.algorithm #AUTOMATED view
ObjectModel.usageType.serviceQuality #X view
ObjectModel.usageType.sizeCategory #XXL view
ObjectModel.usageType.dataClass #TRANSACTIONAL view

Fields (80)

KeyFieldSource TableSource FieldDescription
matnr fsh_ddl_tpo_4 matnr
werks fsh_ddl_tpo_4 werks
berid fsh_ddl_tpo_4 berid
meins mdbs_bstme
dat00 dat01
Deliverydatefixkzasfixkz
EKETdelkz
RequirementDelkzplumi
lgort fsh_ddl_tpo_4 lgort
charg fsh_ddl_tpo_4 charg
delnr delnr
PONumberdelps
POItemdelet
knttp fsh_ddl_tpo_4 knttp
AccountAssignmentCategoryfixkz
kzvbr fsh_ddl_tpo_4 kzvbr
sobkz
kdauf pph_e_Ekkn vbeln
lifnr lifnr
bedat bedat
PODateetmen
ScheduledQtyglmng
kzbws fsh_ddl_tpo_4 kzbws
sgt_scat sgt_scat
sgt_rcat vbap sgt_rcat
mdbs_statu mdbs_statu
mdbs_no_disp mdbs_no_disp
mdbs_wepos mdbs_wepos
GoodsreceiptEKPOWEPOSmdbs_emlif
Suppliermdbs_lblkz
SCSuppliermdbs_menge_db
POQuantitymdbs_wemng_db
Deliveredmdbs_wamng_db
Issuedmdbs_dabmg_db
QtyReducedmdbs_ameng
PreviousQtymdbs_fixmg
fsh_season vbap fsh_season
matnrasmatnr
werks eban werks
berid eban berid
meins eban meins
dat00 eban lfdat
ItemdeliverydateBAasdelkz
plumi
lgort eban lgort
delnr eban banfn
delps
DELET
knttp eban knttp
fixkz fixkz
kzvbr eban kzvbr
sobkz eban sobkz
kdauf
kdpos
pspel
lifnr eban flief
bedat bedat
ETMEN
GLMNG
auftm
kzbws
MDMNG
TPMNG
sgt_scat eban sgt_scat
sgt_rcat vbap sgt_rcat
MDBS_STATU
MDBS_BSTME
MDBS_NO_DISP
MDBS_WEPOS
MDBS_EMLIF
MDBS_LBLKZ
MDBS_MENGE_DB
MDBS_WEMNG_DB
MDBS_WAMNG_DB
MDBS_DABMG_DB
MDBS_AMENG
MDBS_FIXMG
MDBS_AMNG01
fsh_season vbap fsh_season
fsh_theme vbap fsh_theme
@EndUserText.label: 'TPO Extract'
@AbapCatalog.sqlViewName: 'V_FSH_TPO'
@AccessControl.authorizationCheck: #NOT_REQUIRED
@ClientHandling.algorithm: #AUTOMATED
@ObjectModel.usageType: {serviceQuality: #X, sizeCategory: #XXL, dataClass: #TRANSACTIONAL}
define view FSH_DDL_TPO
  as select from    fsh_ddl_tpo_4 as m

    inner join      pph_e_Ekkn    as e    on  m.delnr =  e.ebeln
                                          and m.delps =  e.ebelp
                                          and e.vbeln <> ''
    left outer join vbap          as vbap on  e.vbeln = vbap.vbeln
                                          and e.vbelp = vbap.posnr
{
  m.matnr,
  m.werks,
  m.berid,
  mdbs_bstme                    as meins, //*** ??

  // round(division(psamg * umrez , umren, 4) ,3)

  case when ( umren != 1 or umrez != 1 ) and umren != 0 and umrez != 0
            then
            case when plumi = '+' then round(division(unconvmng * umrez , umren, 4) ,3)
                                       else - round(division(unconvmng * umrez , umren, 4) ,3)
                 end
            else case when plumi = '+' then unconvmng
                                       else - unconvmng
           end
  end                           as mng01,

  dat01                         as dat00, --Delivery date
  --fixkz as fixkz, --Fixing Ind. (EKET)
  delkz, -- Requirement Delkz
  plumi,
  m.lgort,
  m.charg,
  delnr, -- PO Number
  delps, -- PO Item
  delet,
  m.knttp, -- Account Assignment Category
  fixkz,
  m.kzvbr, -- Consumption
  m.sobkz,
  e.vbeln                       as kdauf, -- Third Party Order Number
  coalesce(e.vbelp,'000000')    as kdpos, -- Third Party Order Item
  case when m.sobkz <> '' then e.ps_psp_pnr
       else '00000000'
  end                           as pspel,

  lifnr,
  bedat, -- PO Date
  etmen, -- Scheduled Qty
  glmng, -- Qty Delivered
  case when ( umren != 1 or umrez != 1 ) and umren != 0 and umrez != 0 then
    round(division(auftm * umrez , umren, 4) ,3)
  else
    auftm
  end                           as auftm,
  m.kzbws, -- Valuation
  case when ( umren != 1 or umrez != 1 ) and umren != 0 and umrez != 0 then
    round(division(mdmng_unconv * umrez , umren, 4) ,3)
  else
    mdmng_unconv
  end                           as mdmng,

  case when ( umren != 1 or umrez != 1 ) and umren != 0 and umrez != 0 then
    round(division(unconvmng * umrez , umren, 4) ,3) +
    round(division(mdbs_wemng_db * umrez , umren, 4) ,3)
  else
    unconvmng + mdbs_wemng_db
  end                           as tpmng,
  sgt_scat,
  vbap.sgt_rcat,
  mdbs_statu, -- Should Only  be 'V' for Created via Sales document in EKPO
  mdbs_bstme,
  mdbs_no_disp,
  mdbs_wepos, -- Goods receipt EKPO-WEPOS
  mdbs_emlif, -- Supplier
  mdbs_lblkz, -- SC Supplier
  mdbs_menge_db, -- PO Quantity
  mdbs_wemng_db, -- Delivered
  mdbs_wamng_db, -- Issued
  mdbs_dabmg_db, -- Qty Reduced
  mdbs_ameng,    -- Previous Qty
  mdbs_fixmg,    -- Fixed Date (CheckBox)

  case when ( umren != 1 or umrez != 1 ) and umren != 0 and umrez != 0
            then case when plumi = '+' then round(division(unconv_ameng * umrez , umren, 4) ,3)
                                       else - round(division(unconv_ameng * umrez , umren, 4) ,3)
                 end
            else
                 case when plumi = '+' then unconv_ameng
                                       else - unconv_ameng
            end
  end                           as mdbs_amng01,

  vbap.fsh_season_year          as fsh_season_year,
  vbap.fsh_season               as fsh_season,
  vbap.fsh_collection           as fsh_collection,
  vbap.fsh_theme                as fsh_theme

}

union

-- Extract of TPOs with only PRs and no POs created yet
select from       eban
  left outer join pph_e_Ebkn as ebkn on  eban.banfn = ebkn.banfn
                                     and eban.bnfpo = ebkn.bnfpo
  left outer join vbap       as vbap on  ebkn.vbeln = vbap.vbeln
                                     and ebkn.vbelp = vbap.posnr

{
  eban.matnr                                                 as matnr,
  eban.werks                                                 as werks,
  eban.berid,
  eban.meins,
  case
  when statu = 'B' or statu = 'L' then eban.menge - bsmng
  else eban.menge
  end                                                        as mng01,
  eban.lfdat                                                 as dat00, -- Item delivery date
  'BA'                                                       as delkz,
  '+'                                                        as plumi,
  eban.lgort                                                 as lgort,
  case
      when eban.bwtar = '          ' or
           eban.bwtar = '' or
           eban.bwtar is null then eban.charg
      else eban.bwtar
  end                                                        as charg,
  eban.banfn                                                 as delnr,
  cast(rpad(eban.bnfpo,6,' ') as pph_delps preserving type)  as delps,
  cast('' as abap.numc( 4 ))                                 as DELET,
  eban.knttp                                                 as knttp,
  fixkz,
  eban.kzvbr                                                 as kzvbr,
  eban.sobkz                                                 as sobkz,
  coalesce(ebkn.vbeln,'')                                    as kdauf,
  coalesce(ebkn.vbelp,'000000')                              as kdpos,
  coalesce(ebkn.ps_psp_pnr,'00000000')                       as pspel,
  eban.flief                                                 as lifnr,
  bedat,
  cast (0 as abap.dec(13,3))                                 as ETMEN,
  cast (0 as abap.dec(13,3))                                 as GLMNG,
  cast (0 as abap.dec(13,3))                                 as auftm,
  case when eban.sobkz = '' then '' else eban.kzbws end      as kzbws,
  cast (0 as abap.dec(13,3))                                 as MDMNG,
  cast (0 as abap.dec(13,3))                                 as TPMNG,
  eban.sgt_scat                                              as sgt_scat,
  vbap.sgt_rcat                                              as sgt_rcat,
  ''                                                         as MDBS_STATU,
  cast ('' as abap.unit( 3 ))                                as MDBS_BSTME,
  ''                                                         as MDBS_NO_DISP,
  ''                                                         as MDBS_WEPOS,
  ''                                                         as MDBS_EMLIF,
  ''                                                         as MDBS_LBLKZ,
  cast (0 as abap.dec(13,3))                                 as MDBS_MENGE_DB,
  cast (0 as abap.dec(13,3))                                 as MDBS_WEMNG_DB,
  cast (0 as abap.dec(13,3))                                 as MDBS_WAMNG_DB,
  cast (0 as abap.dec(13,3))                                 as MDBS_DABMG_DB,
  cast (0 as abap.dec(13,3))                                 as MDBS_AMENG,
  ''                                                         as MDBS_FIXMG,
  cast (0 as abap.dec(13,3))                                 as MDBS_AMNG01,
  vbap.fsh_season_year                                       as fsh_season_year,
  vbap.fsh_season                                            as fsh_season,
  vbap.fsh_collection                                        as fsh_collection,
  vbap.fsh_theme                                             as fsh_theme

}

where
            eban.loekz =  ''  -- Filter: Deletion indicator must not be set
  and       eban.ebakz =  ''  -- Filter: Purchase requisition must not be closed
  and       eban.pstyp =  '5' -- Third Party Items
  and       eban.bsakz =  ''  -- Filter: Regular purchase requisitions only
  and(
            memory     =  ''
    or      memorytype <> 'H' -- Filter: No held incomplete PRs
    or      estkz      =  'B' -- Always consider EBANs created by MRP
    or      estkz      =  'D'
  )                           -- Always consider direct procurement EBANs
  -- Filter: Order quantity must be positive
  and(
    (
      (
            statu      =  'B'
        or  statu      =  'L'
      )
      and   eban.menge >  bsmng
    )
    or(
      (
            statu      <> 'B'
        and statu      <> 'L'
      )
      and   eban.menge >  0
    )
  )