← Projelerim
BR
TEI BOM & Ambargo Risk Simulator
6 Motor › Genel Bakış
Backend Connected
DU

SAP Fiori (Freestyle) · ABAP OOP · CDS · OData V2

Bir ambargo, tüm motoru nasıl riske atar?

6 gerçek TEI motor ailesinin Malzeme Listesi'ni (BOM) özyinelemeli olarak dolaşıp maliyet, yerlilik oranı ve ambargo riskini hesaplayan; bir tedarikçiyi ambargolu işaretleyip riskin ağaçta nasıl yayıldığını canlı gösteren ve isteğe bağlı olarak gerçek bir SAP kaydına dönüştüren bir simülatör.

6
Gerçek Motor Ailesi
159
BOM Düğümü
13
Tedarikçi
1
Özyinelemeli Rollup Sınıfı
01

Riski parça listesinde değil, ağaçta gör

Modern bir jet motoru on binlerce parçadan oluşur ve her parçanın iki gizli boyutu vardır: parası nereye gidiyor, ve hangi ülkeye bağımlı. Bir hammadde tedarikçisi yaptırım uygulanan bir ülkedeyse, bu risk yerel kalmaz — o parçayı kullanan her alt sistem üzerinden yukarı doğru sessizce yayılır. Bu proje, bu yayılımı 6 gerçek TEI motor ailesi üzerinde canlı olarak hesaplayan ve görselleştiren uçtan uca bir SAP sistemi kuruyor: özyinelemeli bir ABAP rollup sınıfı, tedarikçi bilgisiyle zenginleştirilmiş bir CDS hiyerarşisi ve freestyle bir SAPUI5 TreeTable arayüzü.

Temel Soru

Bu motorun gerçek maliyeti ne, tedarik zinciri ne kadar yerli, ve hangi tek tedarikçi ambargoya girse tüm motoru riske atar?

Genel Bakış dashboard'u — 6 motorun maliyet ve yerlilik kıyaslaması
Genel Bakış — 6 motorun maliyet ve yerlilik oranı kıyaslaması
02

Neler kuruldu

  • Özyinelemeli BOM rollup'ı

    Bir ABAP OOP sınıfı ağacı kökten aşağıdan yukarıya dolaşıp her düğüm için — kök dahil — toplam maliyet, yerlilik oranı ve risk bayrağını hesaplıyor.

  • 6 gerçek motor ailesi

    TEI-TF6000, PD170, TS1400, TF10000, TJ90 ve TP38 tek sistemde — 159 BOM düğümü, 13 tedarikçi, her motorun rakamları gerçek kamuya açık verilerle bağımsız doğrulandı.

  • Bağımsız risk vs. yerlilik metrikleri

    Bir parça yabancı-ama-güvenli (AB/müttefik tedarikçi) veya yerli-ama-riskli (hammaddesi ambargolu yerli dövme bir parça) olabiliyor — veri modeli bu iki boyutu gerçekten ayrı tutuyor.

  • Canlı what-if simülasyonu

    Bir tedarikçinin ambargo anahtarını aç, riskin ağaçta yaprak parçadan köke doğru nasıl yayıldığını (bubble-up) anında izle.

  • What-if için gerçek SAP kaydı

    "SAP'ye Kaydet" sadece simüle etmiyor — SupplierSet üzerinde gerçek OData MERGE çağrısı gönderiyor, CSRF token yönetimiyle birlikte.

  • Tedarikçi risk tooltip'i

    Bir risk ikonunun üzerine gelmek, yaprak parçalar için gerçek tedarikçi/ülke/risk notunu, üst düğümler için ise riskin bir alt parçadan miras alındığını gösteriyor.

  • Excel'e aktarma

    Hem Genel Bakış özeti hem de herhangi bir motorun tam BOM ağacı, doğru ondalık biçimlendirmesiyle filtrelenebilir bir .xlsx dosyasına aktarılabiliyor.

TF6000 motorunun BOM ağacı — KPI satırı ve risk ikonlarıyla
Motor Detayı — TF6000'in tam BOM ağacı, KPI satırıyla birlikte
03

Kökten yaprağa değil, yapraktan köke

Rollup algoritması ZCL_TEI_BOM_ROLLUP'ın kalbi — her düğüm için önce kendi maliyeti/yerliliği/riski hesaplanıyor, sonra tüm alt düğümlerden özyinelemeli olarak gelen sonuçlar toplanıp yukarı taşınıyor.

1

Düğümün kendi maliyeti hesaplanır

own_cost = unit_cost × quantity — ve eğer düğümün kendi tedarikçisi varsa, ülkesi TR mi diye bakılır (yerlilik) ve ambargolu mu diye bakılır (risk) — iki bağımsız kontrol.

2

Her alt düğüm için özyineleme

process_node, PARENT_NODE_ID = iv_node_id olan her çocuk için kendini tekrar çağırıyor ve dönen total_cost/local_cost/is_risky değerlerini kendi toplamına ekliyor.

3

Risk asla aşağı gizlenmez

GÜVENLİ

Hiçbir alt parça ambargolu değilse, düğüm yeşil işaretlenir.

RİSKLİ

Herhangi bir alt parça ambargoluysa, is_risky köke kadar true olarak taşınır.

ZCL_TEI_BOM_ROLLUP sınıfının process_node metodu
ZCL_TEI_BOM_ROLLUP — process_node metodu (Eclipse ADT)
04

Üç tablo, kendine referans veren bir ağaç

BOM_ID içinde bir motoru, kendine referans veren NODE_ID/PARENT_NODE_ID çifti ağacın tamamını, ve her kalemin isteğe bağlı SUPPLIER_ID'si risk verisini taşıyor.

ZTEI_BOM_HEAD
  • BOM_ID (key)
  • PRODUCT_NAME · PRODUCT_TYPE
  • CREATED_BY · CREATED_ON
↑ 1 : N
ZTEI_BOM_ITEM
  • NODE_ID (key) · PARENT_NODE_ID
  • PART_NUMBER · PART_DESC
  • QUANTITY · UNIT_COST · CURRENCY
  • SUPPLIER_ID
N : 1 ↓
ZTEI_SUPPLIER_RI
  • SUPPLIER_ID (key)
  • SUPPLIER_NAME · COUNTRY_CODE
  • IS_EMBARGOED · RISK_LEVEL
  • RISK_NOTE
SE11'de ZTEI_BOM_ITEM tablo yapısı
SE11 — ZTEI_BOM_ITEM alan yapısı (self-referencing ağaç)
05

Simülasyondan gerçek SAP kaydına

What-if anahtarı önce tamamen istemci tarafında çalışıyor — hiçbir şey kaydedilmeden riskin ağaçta nasıl yayıldığını serbestçe deneyebiliyorsun. Değişiklik gerçek olmalıysa, "SAP'ye Kaydet" bunu gerçek bir OData yazma işlemine dönüştürüyor.

What-if anahtarı açık ve tedarikçi risk tooltip'i görünürken
What-if anahtarı + tedarikçi risk tooltip'i bir arada
Değişikliklerin SAP'ye başarıyla kaydedildiğini gösteren mesaj
"SAP'ye Kaydet" — gerçek OData MERGE, canlı backend'de doğrulandı
06

Neyle inşa edildi

Backend
KalemBileşenDetay
B-01SAP Gateway servisiOData V2, klasik SEGW — ZTEI_BOM_SRV_SRV
B-02Rollup motoruÖzyinelemeli ABAP OOP sınıfı, ZCL_TEI_BOM_ROLLUP
B-03Güncellenebilir entitySupplierSetGetEntity + UpdateEntity (MERGE) implementasyonu
B-04Hiyerarşi view'ıCDS View, self-association'lar, ZTEI_I_BOM_HIERARCHY
Frontend
KalemBileşenDetay
F-01UI frameworkFreestyle SAPUI5 — Fiori Elements değil, hiyerarşik TreeTable için
F-02RuntimeSAPUI5 / OpenUI5 1.120.0
F-03Ağaç kontrolüsap.ui.table.TreeTable, client-side ClientTreeBinding
F-04Excel'e aktarmasap.ui.export.Spreadsheet, doğru EdmType/scale ayarı
SEGW'de BomNode entity type property listesi
SEGW — BomNode entity type property listesi
Excel'e aktarılan dolu ve filtrelenmiş BOM verisi
Excel'e Aktar — filtrelenebilir, tam biçimlendirilmiş çıktı
07

CDS View: tedarikçi bilgisiyle zenginleştirilmiş hiyerarşi

ZTEI_I_BOM_HIERARCHY, her BOM kalemini tedarikçisiyle birleştiriyor ve ağacı self-association'lar üzerinden modelliyor — OData katmanı bunu ABAP rollup'ın dolaştığı JSON hiyerarşisini kurmak için kullanıyor.

ZTEI_I_BOM_HIERARCHY.ddls.asddlsCDS
define view ZTEI_I_BOM_HIERARCHY
  as select from ztei_bom_item as item
    left outer join ztei_supplier_ri as supplier on item.supplier_id = supplier.supplier_id

  association [0..1] to ZTEI_I_BOM_HIERARCHY as _Parent   on  $projection.ParentNodeId = _Parent.NodeId
                                                          and $projection.BomId        = _Parent.BomId
  association [0..*] to ZTEI_I_BOM_HIERARCHY as _Children on  _Children.ParentNodeId = $projection.NodeId
                                                          and _Children.BomId        = $projection.BomId
{
  key item.bom_id            as BomId,
  key item.node_id           as NodeId,
      item.parent_node_id    as ParentNodeId,
      …
      supplier.is_embargoed  as IsEmbargoed,
      supplier.risk_note     as RiskNote,

      _Parent,
      _Children
}
Eclipse ADT'de CDS view kaynak kodu
Eclipse ADT — ZTEI_I_BOM_HIERARCHY kaynak kodu
08

Neyin gerçek, neyin kurgusal olduğu

Demo motoru TEI-TF6000 uydurma bir isim olarak başladı ve gerçek bir TEI ürünü olduğu ortaya çıktı: Türkiye'nin yerli geliştirilen ilk askeri turbofan'ı. Risk modeli o andan sonra rastgele sayılar yerine kaynak gösterilmiş gerçek olaylar (VSMPO-AVISMA'nın Rusya titanyum hakimiyeti, ABD GAO'nun Çin sahte elektronik parça raporu, OFAC İran yaptırımları, TEI'nin kendi 20+ yerli süperalaşım Ar-Ge iddiası) etrafında yeniden kuruldu.

TF6000'in gerçek tedarik zinciri kamuya açık değil. Bu proje, TF6000'in gerçek ve kamuya açık mimarisinden ilham alan eğitim amaçlı bir simülasyondur — gerçek (muhtemelen çok daha yerli) tedarik verisinin yeniden üretimi değildir.
Tedarikçi şirket isimleri tamamen kurgusaldır. Risk coğrafyasını somutlaştırmak için var — TEI'nin gerçek tedarikçi listesini temsil etmiyor.
TEI-TP38'in verisi en az kesin olanı. Kamuya açık şaft gücü/ağırlık spesifikasyonu bulunamadığı için BOM sayıları diğer beş motora göre daha gösterimsel.
What-if kaydı yalnızca ambargo durumuyla sınırlı. "SAP'ye Kaydet", SupplierSet.IsEmbargoed'u yazıyor; BOM yapısını değiştirmiyor.

Uygulamalı bir SAP Fiori · ABAP OOP · CDS öğrenme ve portföy projesi olarak geliştirilmiştir.