# Koşullar ve formüller

> Yapılandırılabilir ürünün tek ağacı ve tek rotası — satır koşulu, ifadeli seçim koşulu, miktar formülü, operasyon koşulu ve süre formülü, yapılandırma ön koşulu; dil, değerlendirme sırası, hata iletileri ve 25 doğrulanmış örnek.

URL: https://erpdocs.corexlogic.com/uretim/kosullar

Yapılandırılabilir bir ürünün her seçenek bileşimi için ayrı ürün ağacı ve rota açılmaz. Ürünün **tek** bir
ürün ağacı (süper ağaç) ve **tek** bir rotası (süper rota) olur; satırlara ve operasyonlara kural yazılır.
Satış siparişinde müşterinin seçtiği değerler (yapılandırma) üretim emrine taşınır ve emir yayınlanırken
kurallar bu değerlerle çözülür: hangi malzeme satırı gelecek, kaç birim gelecek, hangi operasyon yapılacak,
kaç dakika sürecek.

Bu sayfa kuralların tamamını anlatır. Her örnek demo şirketinde kuruldu ve sonucu ürün ağacının
**Yapılandırarak Dene** penceresiyle ya da gerçek bir üretim emriyle doğrulandı.

> **Demo kartları**
Örneklerin çoğu demo şirketinde bu sayfa için açılmış kurgusal kartlarla: **DMO-KSL-01** Ölçülü bantlı
konveyör, **DMO-KSL-02** Yapılandırılabilir dağıtım panosu, **DMO-KSL-03** Temizlik ürünü partisi,
**DMO-KSL-04** Ölçüye göre dolap. Seçenek koşullu hazır örnekler: **MAM-0003** Ofis çalışma masası,
**MAM-0006** Paslanmaz depolama tankı, **MAM-0001** Motor kontrol panosu.

## Kuralların haritası

| Kural | Nerede tanımlanır | Ne karar verir | Nasıl yazılır | Sonuç türü |
|---|---|---|---|---|
| Yapılandırma ön koşulu | **Ürün Ana Verileri** › kart › **Yapılandırma** › özelliğin **İşlemler** › **Koşul** | Özellik satışta **sorulur mu** | Değer işaretlenir (aktarım kitabında `KABIN = OZEL_OLCU`) | — |
| Kısıt (**Sınır koy**) | Aynı sekme › **Nesne Bağımlılıkları** › **Kural Ekle** | İzin verilmeyen bileşim kaydedilir mi | İfade | Evet/Hayır |
| Prosedür (**Değer hesapla**) | Aynı yer | Bir özelliğin değeri ne olur | İfade ya da karar tablosu | Özelliğin türü |
| Satır koşulu (seçenek koşulu) | **Ürün Ağaçları** › revizyon › satırın **Kuralı Düzenle** düğmesi › **Satır Kuralı** | Malzeme satırı emre **gelir mi** | Seçenekli özellikte değer işaretlenir | — |
| İfadeli seçim koşulu | **Satır Kuralı** › **İfadeli koşul** › **Koşul** | Malzeme satırı emre gelir mi | İfade | Evet/Hayır |
| Formüllü miktar | **Satır Kuralı** › **Formüllü miktar** (**Özellik × katsayı** ya da **İfade**) | Satırın miktarı | Katsayı ya da ifade | Sayı |
| Operasyon seçim koşulu | **Rotalar** › revizyon › operasyonun **Seçim koşulu ve formüller** düğmesi › **Seçim koşulu** | Operasyon emre gelir mi | İfade | Evet/Hayır |
| Süre formülü | Aynı yer › **Hazırlık formülü (dk)** · **Makine formülü (dk)** · **İşçilik formülü (dk)** | Operasyonun süresi | İfade | Sayı (dakika) |

Ağaç satırı ve operasyon kuralları **yalnız yapılandırılabilir kartın** ağacında ve rotasında yazılabilir.
Yapılandırılabilir olmayan kartın ağacına koşul yazılırsa kayıt şu iletiyle reddedilir:
`Seçim koşulu yalnız yapılandırılabilir kartın ürün ağacında kullanılır.` (miktar formülünde
`Miktar formülü yalnız yapılandırılabilir kartın ürün ağacında kullanılır.`, rotada
`Seçim koşulu ve formüllü süre yalnız yapılandırılabilir kartın rotasında kullanılır.`).

## Ne zaman ve hangi sırayla değerlendirilir {#sira}

1. **Değer girişi** — satış siparişi satırında (ya da **Yapılandırarak Dene** penceresinde) özellik
   değerleri girilir. Ön koşulu sağlanmayan özellik **gösterilmez**; değeri verilemez, zorunluluğu
   uygulanmaz. Zorunlu, sorulan ve boş bırakılan özellik satırı kaydettirmez.
2. **Nesne bağımlılıkları** listedeki sırayla uygulanır: prosedürler hesaplanan değeri yazar, kısıtlar
   bileşimi denetler. Kısıt yalnız sonucu **bilinen** durumda denetlenir.
3. **Üretim emri yayınlanınca** (**Yayınla**) ağaç çözülür. Malzeme ihtiyaçları ve operasyonlar emre bu anda
   yazılır; yayından önce emirde malzeme satırı yoktur. Satırlar satır numarası sırasıyla, her satırda:
   1. **Seçenek koşulu** — her koşul özelliğinde, girilen değer işaretli değerlerden biri olmalı.
   2. **İfadeli seçim koşulu** — sonuç **Evet** olmalı. **Hayır** ya da **bilinmiyor** ise satır gelmez.
   3. **Miktar** — sabit, `Miktar + katsayı × değer` ya da `Miktar + ifadenin sonucu`.
4. Seçilen satırlarda aynı kart iki kez çıkmamalı; hiç satır seçilmemişse emir açılmaz.
5. **Rota çözülür** — her operasyonda seçim koşulu (Evet ise gelir), sonra hazırlık, makine ve işçilik
   formülleri. Formülsüz süre rotadaki sabit değerdir.
6. **Emir miktarına ölçekleme** — `satır miktarı × emir miktarı ÷ ağacın temel miktarı`, varsa montaj ve
   bileşen firesiyle büyütülür. Miktar formülden geldiyse ya da fire varsa sonuç bileşen biriminin
   ondalık hassasiyetine **yukarı** yuvarlanır (ADET 0, KG/M/M2 3 ondalık).

> **Yapılandırarak Dene ile emir arasındaki fark**
**Yapılandırarak Dene** ve emir **aynı** çözücüyü kullanır. Pencere temel miktar başına ve **yuvarlamadan**
gösterir; emirde fire ve birim yuvarlaması eklenir. Örnek: pencerede `60,288 KG` görünen sac satırı %5
bileşen firesiyle emirde `63,303 KG` olur (60,288 × 1,05 = 63,3024 → yukarı 63,303).

## İfade dili {#ifade-dili}

Kısıt, prosedür, ifadeli seçim koşulu, miktar formülü, operasyon koşulu ve süre formülü **aynı dili**
kullanır. Kurallar sunucuda değerlendirilir; ekrandaki **Sına** düğmesi kaydetmeden aynı denetimi yapar.

### Değerler ve yazımı

| Ne | Nasıl yazılır | Örnek |
|---|---|---|
| Sayı | Ondalık ayırıcı **nokta** | `1.05`, `2.5`, `12` |
| Metin, seçenek kodu | **Tek tırnak**; tırnağın içinde tırnak iki kez | `'PVC'`, `'OZEL_OLCU'`, `'Ali''nin'` |
| Evet/Hayır | `EVET` / `HAYIR` (ya da `TRUE` / `FALSE`) | `KORUMA = EVET` |
| Özellik | Özelliğin **kodu**; harf, rakam ve alt çizgi | `BOY`, `CIKIS_SAYISI` |
| Özel karakterli kod | Köşeli ayraç | `[EN-1]`, `[BOY] * 2` |

Kod ve anahtar sözcükler büyük/küçük harf ayırmaz (`bant_genisligi = '800'` de çalışır). Metin
karşılaştırması da büyük/küçük harf ve baştaki/sondaki boşluğu ayırmaz: `BANT_TIPI = 'pvc'` ve
`BANT_TIPI = ' PVC '` Evet verir.

### Özellik türüne göre ifadedeki değer

| Özellik türü | İfadede okunan | Doğru | Yanlış |
|---|---|---|---|
| **Seçim** | Seçeneğin **kodu** (metin) | `BANT_GENISLIGI = '800'` | `BANT_GENISLIGI = 800` (sayı) · `BANT_GENISLIGI = '800 mm'` (seçeneğin adı) |
| **Tam Sayı**, **Ondalık** | Sayı | `CIKIS_SAYISI > 12`, `BOY * 2` | `BOY > '10'` |
| **Evet/Hayır** | Evet/Hayır | `KORUMA = EVET` | `KORUMA = 'EVET'`, `KORUMA = 1` |
| **Tarih** | `'yyyy-MM-dd'` metni | `TESLIM >= '2027-01-01'` | — |
| **Metin** | Metin (boş metin girilmemiş sayılır) | `DOLU(ACIKLAMA)` | `ACIKLAMA <> ''` (boşsa bilinmiyor) |

Seçeneğin **adı** (ekranda görünen, ör. "800 mm") ifadede kullanılmaz; karşılaştırma **kodla** yapılır.
Kartın özellik ve seçenek kodları kural penceresinde **Özellikler** ve **… değerleri** düğmeleriyle
imlecin olduğu yere yazılır.

### İşleçler ve öncelik

Öncelik düşükten yükseğe: `VEYA` → `VE` → `DEĞİL` → karşılaştırma → `+ -` → `* /` → tekli `-`.
Parantez her zaman önce.

| İşleç | Anlamı | Eşdeğer yazım | Örnek → sonuç |
|---|---|---|---|
| `+ - * /` | Hesap | — | `2 + 3 * 4` → 14 · `10 / 4` → 2,5 |
| `+` metinde | Birleştirme | — | `BANT_TIPI + '-' + BANT_GENISLIGI` → PVC-600 |
| `=` `<>` | Eşit · eşit değil | `!=` = `<>` | `BOY != 6` (BOY 6) → Hayır |
| `<` `<=` `>` `>=` | Karşılaştırma | — | `BOY = 6.0` (BOY 6) → Evet |
| `IN ( … )` | Listedekilerden biri | `İÇİNDE` | `BOY IN (6, 12)` (BOY 12) → Evet |
| `VE` | İkisi birden | `AND` | |
| `VEYA` | Biri yeter | `OR` | |
| `DEĞİL` | Tersi | `DEGIL`, `NOT` | `DEĞİL BOY > 10 VE BOY > 5` (BOY 8) → Evet |

- Karşılaştırma zincirlenmez: `BOY > 10 > 2` yazılamaz (`Beklenmeyen '>' (konum 10).`). İki koşulu `VE` ile bağlayın.
- `DEĞİL` yalnız hemen sağındaki karşılaştırmayı tersine çevirir: `DEĞİL A VE B` = `(DEĞİL A) VE B`. Birden çok
  koşulun tersi için parantez: `DEĞİL (A VEYA B)`.
- Karşılaştırmanın iki yanı aynı türde olmalı; Evet/Hayır yalnız `=` ve `<>` ile karşılaştırılır.
- Hesap yalnız sayılarla: `KORUMA + 1` → `'+' yalnız sayılarla kullanılır.`

### Fonksiyonlar

| Fonksiyon | Eşdeğer | Ne yapar | Örnek → sonuç |
|---|---|---|---|
| `EGER(koşul, a, b)` | `EĞER`, `IF` | Koşul Evet ise `a`, Hayır ise `b`; bilinmiyorsa bilinmiyor. **Yalnız seçilen dal** hesaplanır | `EGER(BOY > 10, 2, 1)` (BOY 12) → 2 |
| `YUVARLA(x[, n])` | `ROUND` | n ondalığa yuvarlar (n 0–10, boş = 0); yarım yukarı | `YUVARLA(2.345, 2)` → 2,35 · `YUVARLA(2.5)` → 3 |
| `YUKARIYUVARLA(x, adım)` | `ROUNDUP` | Bir sonraki adımın katına yukarı (adım > 0) | `YUKARIYUVARLA(2.37, 0.5)` → 2,5 |
| `TAVAN(x)` | `CEIL` | Bir üst tam sayı | `TAVAN(2.1)` → 3 · `TAVAN(-2.5)` → -2 |
| `TABAN(x)` | `FLOOR` | Bir alt tam sayı | `TABAN(2.9)` → 2 · `TABAN(-2.5)` → -3 |
| `MIN(a, b, …)` | — | En küçüğü (bir ya da daha çok değer) | `MIN(3, BOY, 8)` (BOY 5) → 3 |
| `MAX(a, b, …)` | — | En büyüğü | `MAX(0.6, CIKIS_SAYISI * 0.05)` (20) → 1 |
| `MUTLAK(x)` | `ABS` | İşareti atar | `MUTLAK(2 - BOY)` (BOY 5) → 3 |
| `DOLU(özellik)` | `SPECIFIED` | Özellik girildiyse Evet, girilmediyse Hayır — **asla bilinmiyor vermez** | `DOLU(KORUMA)` |
| `TABLO('KOD')` | `TABLE` | Değerler varyant tablosunun bir satırına uyuyor mu | Yalnız kısıt ve prosedürde |
| `TABLODEGER('KOD', 'SÜTUN')` | `LOOKUP`, `TABLODEĞER` | Uyan satırın sütun değeri | Yalnız kısıt ve prosedürde |

Ağaç satırının seçim koşulu ve miktar formülü varyant tablosu sorgulamaz:
`Seçim koşulu varyant tablosu sorgulamaz.` · `Miktar formülü varyant tablosu sorgulamaz.`
Tablodan gelen bir değer gerekiyorsa onu bir **prosedürle** hesaplanan özelliğe yazın, satırda o özelliği okuyun
([Örnek 8](#ornek-8)). İfade en çok **1000** karakter olabilir.

### Bilinmeyen değer — üç değerli mantık {#bilinmeyen-deger}

Girilmemiş (ya da ön koşulu sağlanmadığı için sorulmamış) özellik **bilinmiyor**dur. Bilinmeyenle yapılan hesap
ve karşılaştırma da bilinmiyor verir. Sonuç bu nedenle Evet, Hayır ya da **bilinmiyor** olur.

| İfade | Değerler | Sonuç |
|---|---|---|
| `KORUMA = EVET` | KORUMA girilmedi | bilinmiyor → satır **gelmez** |
| `KORUMA <> EVET` | KORUMA girilmedi | bilinmiyor → satır **gelmez** (Hayır değil!) |
| `BOY * 2` | BOY girilmedi | bilinmiyor → miktar formülü **emri açmaz** |
| `BOY > 10 VEYA KORUMA = EVET` | BOY 12, KORUMA girilmedi | Evet (`EVET VEYA ?` = Evet) |
| `BOY > 10 VE KORUMA = EVET` | BOY 8, KORUMA girilmedi | Hayır (`HAYIR VE ?` = Hayır) |
| `DEĞİL DOLU(KORUMA) VEYA KORUMA = HAYIR` | KORUMA girilmedi | Evet |
| `DEĞİL DOLU(KORUMA) VEYA KORUMA = HAYIR` | KORUMA Evet | Hayır |
| `EGER(KORUMA = EVET, BOY * 2.4, 0)` | BOY 10, KORUMA girilmedi | bilinmiyor → emri açmaz |

Bilinmeyenin etkisi kurala göre değişir:

| Kural | Sonuç bilinmiyorsa |
|---|---|
| İfadeli seçim koşulu, operasyon seçim koşulu | Satır / operasyon **gelmez** (Hayır gibi) |
| Miktar formülü | Hata: `N. satırın miktar formülü bilinmiyor — okuduğu değerlerden biri konfigürasyonda yok (…)` |
| Süre formülü | Hata: `N numaralı operasyonun işçilik formülü hesaplanamadı — konfigürasyonda gereken değer yok.` |
| Kısıt | **Denetlenmez** (geçer) |

İsteğe bağlı (zorunlu olmayan) özelliği okuyan kuralı bu yüzden "girilmezse ne olsun" sorusuna göre yazın;
gerekirse `DOLU(…)` kullanın.

### Sözdizimi ve değerlendirme iletileri {#iletiler}

**Sına** düğmesi ve kayıt sözdizimini ve kodları denetler. Değere bağlı hatalar (sıfıra bölme, yanlış türde
sonuç, eksik değer) ancak değerlerle — **Yapılandırarak Dene**'de ya da emir yayınında — ortaya çıkar.

| Yazım | İleti | Ne zaman |
|---|---|---|
| `BOY >= 10 VE` | `İfade eksik bitti.` | Sına / kayıt |
| `(BOY + 2` | `')' bekleniyordu, ifade bitti.` | Sına / kayıt |
| `'PVC` | `Kapanmamış metin (konum 1).` | Sına / kayıt |
| `BANT_GENISLIGI = "800"` | `Beklenmeyen karakter '"' (konum 18).` | Sına / kayıt |
| `BOY * 1,05` | `Beklenmeyen ',' (konum 8).` | Sına / kayıt |
| `BOY % 2` | `Beklenmeyen karakter '%' (konum 5).` | Sına / kayıt |
| `KAREKOK(BOY)` | `Bilinmeyen fonksiyon 'KAREKOK' (konum 1).` | Sına / kayıt |
| `UZUNLUK > 10` (kartta yok) | `Seçim koşulundaki 'UZUNLUK' 'DMO-KSL-01' kartının özelliği değil.` | Sına / kayıt |
| `TABLO('X')` satırda | `Seçim koşulu varyant tablosu sorgulamaz.` | Sına / kayıt |
| `BOY / 0` | `Sıfıra bölme.` | Değerle |
| `EGER(BOY > 10, 2)` | `EGER(koşul, a, b) üç değer alır.` | Değerle — Sına geçerli der |
| `EGER(BOY, 1, 2)` | `EGER'in koşulu Evet/Hayır olmalı.` | Değerle |
| `BANT_GENISLIGI = 800` | `'=' iki yanında aynı türde değer ister.` | Değerle |
| `KORUMA = 'EVET'` | `'=' iki yanında aynı türde değer ister.` | Değerle |
| `YUKARIYUVARLA(BOY, 0)` | `YUKARIYUVARLA'nın adımı sıfırdan büyük olmalı.` | Değerle |
| `YUVARLA(BOY, 11)` | `YUVARLA'nın ondalık sayısı 0–10 arası tam sayı olmalı.` | Değerle |
| `DOLU(BOY * 2)` | `DOLU(özellik) tek özellik kodu alır.` | Değerle |
| `MAX()` | `MAX için değer sayısı yanlış.` | Değerle |
| `BOY * 2` seçim koşulunda | `N. satırın seçim koşulu Evet/Hayır vermeli.` | Değerle — Sına geçerli der |
| Kısıt / prosedür formunda bilinmeyen kod | `ifadedeki 'UZUNLUK' bu kartın özelliği değil.` | Sına / kayıt |

Konum numarası ifadenin kaçıncı karakteri olduğunu söyler (1'den başlar). Değerle çıkan hata emirde satır
numarasıyla gelir: `9. satırın miktar formülü: Sıfıra bölme.`

## Satır koşulu (seçenek koşulu) {#satir-kosulu}

**Satır Kuralı** penceresinin üst bölümünde kartın her **Seçim** özelliği değerleriyle listelenir.

- Bir özellikte hiç değer işaretlenmezse o özellik koşul **değildir**.
- Aynı özellikte işaretli değerlerden **biri** yeter (VEYA): Tank Hacmi **1.000 L** ya da **2.000 L**.
- Farklı özelliklerin koşulları **birlikte** aranır (VE): Renk **Beyaz** ve Masa Genişliği **140 cm**.
- Özellik girilmediyse satır gelmez; Yapılandırarak Dene nedenini yazar:
  `Gelmez — Tank Hacmi girilmedi (koşul: 1.000 L).`
- Bir satır en çok 10 özellikte koşul taşır; bir özellik satırda yalnız bir kez yer alır.

**Aynı kart iki satırda.** Bir kart bir revizyonda normalde tek satırda olur. İstisna: iki satırın seçenek
koşulları **birbirini dışlıyorsa** (ortak bir özellikte işaretli değerler kesişmiyorsa) aynı kart iki satırda
olabilir — MAM-0006'da **HAM-0031** 3 mm sac bir satırda `Tank Hacmi: 2.000 L` ile 290 kg, ötekinde
`Tank Hacmi: 5.000 L` ile 560 kg. İfadeli koşul bu hesaba **girmez**: `BOY <= 10` ve `BOY > 10` koşullu iki
satıra aynı kart konamaz (`Aynı stok kartı bir revizyonda yalnız bir malzeme satırında yer alabilir.`). Böyle
durumda tek satır ve `EGER` ile miktar yazın ([Örnek 4](#ornek-4)).

**Evet/Hayır özellikleri** pencerede **Fark etmez / Evet / Hayır** düğmeleriyle gelir; seçim ifadeli koşula
`UZAKTAN_IZLEME = EVET` biçiminde yazılır.

## İfadeli seçim koşulu {#secim-kosulu}

**Satır Kuralı › İfadeli koşul › Koşul** alanı. Sayısal sınır, birden çok özellik, `VEYA` ve `DEĞİL` gereken
her seçim buradan yazılır.

- Sonuç **Evet** ise satır gelir; **Hayır** ya da **bilinmiyor** ise gelmez.
- İşaretli seçenek koşullarıyla **birlikte** (VE) aranır.
- Boş = ifadeli koşul yok.

## Formüllü miktar {#miktar-formulu}

**Satır Kuralı › Formüllü miktar** üç kipten biri:

| Kip | Miktar | Kural |
|---|---|---|
| **Sabit miktar** | Satırın **Miktar** alanı | Miktar sıfırdan büyük olmalı |
| **Özellik × katsayı** | `Miktar + katsayı × özelliğin değeri` | Özellik sayısal (Tam Sayı/Ondalık); katsayı sıfırdan büyük |
| **İfade** | `Miktar + ifadenin sonucu` | Sonuç sayı olmalı |

> **Miktar alanı formüle EKLENİR**
Formüllü satırda **Miktar** alanı "sabit kısım"dır ve sıfır olabilir. `2 * BOY` formülü ve Miktar `0,6` olan
satırda BOY 6 m için miktar `2 × 6 + 0,6 = 12,6` olur. Miktarı yalnız formül versin istiyorsanız **Miktar**'a
`0` yazın; 1 bırakırsanız her emre fazladan 1 birim gelir.

- Hesaplanan miktar (sabit + formül) sıfırdan büyük olmalı: `N. satırın konfigürasyona göre hesaplanan miktarı sıfırdan büyük değil.`
- Formül alternatif kartlara da uygulanır: alternatif kendi miktarı + aynı formül sonucu.
- Bileşen firesi ve montaj firesi formülün sonucuna uygulanır; emirde birimin ondalığına yukarı yuvarlanır.
- **İfade** kipindeki **Sına** sözdizimini ve kodları denetler; sonucun sayı olduğunu denetlemez.

## Yapılandırma ön koşulu {#on-kosul}

Bir özelliğin yalnız başka bir özellik belli bir değerdeyken **sorulmasını** sağlar: "Kabin **Özel Ölçü**
seçilince **Kabin Eni** ve **Kabin Boyu** sorulsun."

- Koşul özelliği aynı kartın **Seçim** ya da **Evet/Hayır** özelliği olmalı; sayısal özellik koşul olamaz.
- Aynı özellikte işaretli değerlerden biri yeter (VEYA); farklı özellikler birlikte (VE).
- Sorulmayan özellik **boş** kalır, zorunluluğu uygulanmaz; ona değer verilirse satır reddedilir:
  `'Kabin Eni' yalnız Kabin: Özel Ölçü (En x Boy) olduğunda girilir.`
- Sorulan zorunlu özellik boşsa: `'Kabin Eni' özelliğinin değeri girilmemiş.`
- Özellik kendisine koşul olamaz (`Özellik kendisine koşul olamaz.`); döngü kurulamaz
  (`Bu koşul döngü kurar: koşul özelliği dolaylı olarak bu özelliğe bağlı.`).
- Mevcut varyantı geçersiz kılan koşul kaydedilmez: `'…' varyantı bu koşulla geçersiz kalır: …`
- Zincir kurulabilir (A → B → C): koşul özelliği gizliyse ona bağlı özellik de gizlenir.

**Ön koşul ve ağaç kuralı birlikte:** ön koşulu sağlanmayan özellik kurallarda **bilinmiyor**dur. Bu
özelliği okuyan formülü `EGER` ile koruyun ([Örnek 12](#ornek-12)) ya da satırı ön koşulla aynı seçenek
koşuluna bağlayın ([Örnek 9](#ornek-9)).

Aktarım kitabında (Ürün Aktarımı › **Yapılandırma** sayfası) ön koşul **OnKosul** sütununa yazılır:

| Yazım | Anlamı |
|---|---|
| `KABIN = OZEL_OLCU` | Kabin Özel Ölçü ise sorulur |
| `PERON_SAYISI = 3 / 4` | 3 **ya da** 4 ise (aynı özelliğin değerleri `/`) |
| `KABIN = OZEL_OLCU; DIREK = Evet` | Kabin Özel Ölçü **ve** Direk Evet ise (farklı özellikler `;`) |
| boş hücre | Koşul kaldırılır (sütun varsa); sütun yoksa mevcut koşul korunur |

Değerler seçenek **koduyla**, Evet/Hayır özelliği `Evet` / `Hayır` ile yazılır. Okunamayan hücre:
`'…' okunamadı — biçim "ÖZELLİK = DEĞER" olmalı.` · bilinmeyen özellik: `Koşul özelliği '…' bulunamadı.` ·
bilinmeyen değer: `'…' değerlerinde '…' yok.` · sayısal özellik: `'…' koşul olamaz — yalnız seçim ve Evet/Hayır özellikleri koşul olur.`

## Süper rota: operasyon koşulu ve süre formülü {#super-rota}

Rota revizyonunda her operasyonun **Seçim koşulu ve formüller** düğmesi satırın altında dört alan açar:
**Seçim koşulu**, **Hazırlık formülü (dk)**, **Makine formülü (dk)**, **İşçilik formülü (dk)**.

- **Seçim koşulu** Evet ise operasyon emre gelir; Hayır ya da bilinmiyorsa gelmez. Boş = her zaman.
- Formül doluysa süre formülden hesaplanır ve sabit değerin **yerine geçer** (ağaç miktarındaki gibi
  eklenmez). Boş = rotadaki sabit süre.
- Formülün sonucu 0 ile 1.000.000 dakika arasında olmalı; iki ondalığa yuvarlanır.
- Hiç operasyon seçilmezse: `Konfigürasyon rotanın hiçbir operasyonunu seçmiyor — rotanın seçim koşullarını düzeltin.`
- Makine ve işçilik süresi **temel miktar başına**, hazırlık **parti başına**dır.

## Nesne bağımlılıkları: kısıt ve prosedür {#nesne-bagimliliklari}

Kartın **Yapılandırma** sekmesindeki **Nesne Bağımlılıkları** bölümünde **Kural Ekle**:

- **Sınır koy (Kısıt)** — ifade **Evet** vermeli. Hayır ise satış satırı kaydedilmez ve kuralın iletisi
  gösterilir (ileti boşsa `Konfigürasyon kısıtı sağlanmıyor: <ifade>`). "A ise B olmalı" kuralı
  `DEĞİL A VEYA B` biçiminde yazılır: `BANT_TIPI <> 'PU' VEYA BOY <= 20`.
- **Değer hesapla (Prosedür)** — ifadenin (ya da karar tablosunun) sonucu bir özelliğe yazılır. Yazma biçimi
  **Her zaman hesapla** ise kullanıcı başka değer veremez
  (`'Ayak Çifti Sayısı' değeri kuraldan hesaplanır (8); farklı değer verilemez.`); **Girilmezse hesapla** ise yalnız
  özellik boşken yazılır, kullanıcının değeri korunur. Tam sayı özelliğe kesir yazan prosedür reddedilir — `YUVARLA` kullanın.
- **Tablodan seç (Tablo kısıtı)** — değer bileşimi bir varyant tablosunun satırına uymalı.

Hesaplanan özellik ağaç satırında ve rotada **diğer özellikler gibi** okunur. Aynı hesap birden çok satırda
gerekiyorsa bir kez prosedürde yapın, satırlarda sonucu okuyun.

## Aktarım kitabında kural yazımı

Kuralları ekrandan tek tek girmek yerine aktarım kitabıyla da yükleyebilirsiniz:

| Kitap › sayfa | Sütun | İçerik |
|---|---|---|
| **Ürün Aktarımı** kitabı › **Yapılandırma** | `OnKosul` | Ön koşul (`KABIN = OZEL_OLCU`) |
| Veri Aktarımı › **Ürün Ağaçları** kitabı › **Ağaç Satırları** | `SecimKosulu` | İfadeli seçim koşulu (`BOY > 10`) |
| Aynı sayfa | `MiktarFormulu` | İfadeli miktar; miktar = `Miktar` + formülün sonucu |
| Aynı kitap › **Satır Koşulları** | `SatirNo`, `OzellikKodu`, `DegerKodu` | Seçenek koşulu — her değer bir satır |
| Veri Aktarımı › **Rotalar** kitabı › **Operasyonlar** | `SecimKosulu`, `HazirlikFormulu`, `MakineFormulu`, `IscilikFormulu` | Süper rota |

## Örnekler

Her örnekte: ihtiyaç, özellikler, kural, girilen değerler ve sonuç, sık yapılan hata. "Sonuç" sütunu
**Yapılandırarak Dene** penceresinin temel miktar (1 ADET) başına gösterdiğidir.

![Yapılandırarak Dene — satırların sonucu ve miktar hesabı](https://erpdocs.corexlogic.com/img/screens/uretim/kosul-simulasyon.png)
1. Özellik değerleri — satış satırındaki gibi girilir
2. Prosedürle hesaplanan özellik (Ayak Çifti Sayısı)
3. Kaç satır gelir, kaç satır gelmez
4. Formüllü miktarın hesabı
5. Satırın neden gelmediği
6. İfadeli koşul Evet — satır gelir

### Örnek 1 — Boya göre profil (konveyör) {#ornek-1}

**İhtiyaç:** Konveyörün iki yan profili boy kadar, kesim payı %2.
**Özellik:** `BOY` (Ondalık, m, 2–30, 0,5 adım). **Satır:** HAM-0035 Alüminyum konveyör profili, birim M,
**Miktar** `0`. **Formül (İfade):** `2 * BOY * 1.02`

| BOY | Sonuç |
|---|---|
| 6 | 12,24 M |
| 12,5 | 25,5 M |

**Sık hata:** Miktar alanını `1` bırakmak — sonuç 13,24 M olur.

### Örnek 2 — Seçenek koşulu ile formül birlikte (bant) {#ornek-2}

**İhtiyaç:** PVC ya da PU bant; bant boyu `2 × BOY` + 0,6 m ek payı.
**Satırlar:** HAM-0056 PVC bant — seçenek koşulu **Bant Tipi: PVC Endüstriyel**; HAM-0057 PU bant —
**Bant Tipi: PU Gıdaya Uygun**. İkisinde **Miktar** `0,6`, formül `2 * BOY`.

| BOY | Bant Tipi | HAM-0056 | HAM-0057 |
|---|---|---|---|
| 6 | PVC | 12,6 M | Gelmez |
| 12,5 | PU | Gelmez | 25,6 M |

Yapılandırarak Dene miktarın hesabını da yazar: `2 * BOY + 0,6 = 12,6`.

### Örnek 3 — Adımla adet (taşıyıcı makara) {#ornek-3}

**İhtiyaç:** Her 0,5 m'de bir makara, uçta bir fazla.
**Satır:** HAM-0058 Taşıyıcı makara, ADET, **Miktar** `1`, formül `TAVAN(BOY / 0.5)`.

| BOY | Sonuç |
|---|---|
| 6 | 13 ADET |
| 10 | 21 ADET |
| 12,5 | 26 ADET |

**Sık hata:** `BOY / 0.5 + 1` yazmak — boy 0,5'in katı değilse kesirli adet çıkar; emirde ADET yukarı
yuvarlanır ama niyet belirsizleşir. Adet sayımında `TAVAN` / `TABAN`'ı açık yazın.

### Örnek 4 — Sayısal sınırla iki seçenek (motor) {#ornek-4}

**İhtiyaç:** 10 m'ye kadar 0,75 kW, üstünde 1,5 kW motor.
**Satırlar:** HAM-0054 Motor redüktör 0,75 kW — ifadeli koşul `BOY <= 10`; HAM-0055 Motor redüktör 1,5 kW —
`BOY > 10`.

| BOY | HAM-0054 | HAM-0055 |
|---|---|---|
| 10 | 1 ADET (`koşul Evet: BOY <= 10`) | Gelmez (`koşul Hayır: BOY > 10`) |
| 12,5 | Gelmez | 1 ADET |

**Sık hata:** Sınırı iki satırda çakışık ya da boşluklu yazmak (`BOY < 10` ve `BOY > 10` — 10 m'de motor
gelmez). Sınırın bir tarafı `<=`, öteki `>` olsun. Aynı **kart** iki satırda kullanılamaz; kart aynı,
yalnız miktar değişiyorsa tek satırda `EGER(BOY > 10, 2, 1)` yazın.

### Örnek 5 — İsteğe bağlı Evet/Hayır (koruma kapağı) {#ornek-5}

**İhtiyaç:** Koruma kapağı istenirse metre başına 2,4 kg paslanmaz sac.
**Özellik:** `KORUMA` (Evet/Hayır, isteğe bağlı). **Satır:** HAM-0030 Paslanmaz sac, KG, **Miktar** `0`,
ifadeli koşul `KORUMA = EVET`, formül `BOY * 2.4`.

| BOY | KORUMA | Sonuç |
|---|---|---|
| 12,5 | Evet | 30 KG |
| 10 | Hayır | Gelmez — `koşul Hayır: KORUMA = EVET` |
| 6 | girilmedi | Gelmez — `koşulun okuduğu değer girilmedi: KORUMA = EVET` |

**Sık hata 1:** "Kapaksız" durum için `KORUMA <> EVET` yazmak — girilmemişse **bilinmiyor** olur ve satır
gelmez. Doğrusu: `DEĞİL DOLU(KORUMA) VEYA KORUMA = HAYIR`.
**Sık hata 2:** Koşulu formüle gömmek: `EGER(KORUMA = EVET, BOY * 2.4, 0)` — KORUMA girilmezse formül
bilinmiyor olur ve emir açılmaz; ayrıca sonuç 0 olunca `hesaplanan miktarı sıfırdan büyük değil` hatası
gelir. Satırın gelip gelmeyeceğini **koşulla**, miktarı **formülle** yazın.

### Örnek 6 — Seçenek ve sayı birlikte (orta destek) {#ornek-6}

**İhtiyaç:** 800 mm bantta, 12 m'den uzun konveyöre her 3 m'de 0,8 m orta destek profili.
**Satır:** HAM-0032 Profil kutu 40x40, M, **Miktar** `0`, ifadeli koşul `BANT_GENISLIGI = '800' VE BOY > 12`,
formül `TAVAN(BOY / 3) * 0.8`.

| Bant Genişliği | BOY | Sonuç |
|---|---|---|
| 800 mm | 12,5 | 4 M |
| 800 mm | 12 | Gelmez — `koşul Hayır` |
| 600 mm | 12,5 | Gelmez |

**Sık hata:** `BANT_GENISLIGI = 800` (tırnaksız) — seçenek kodu metindir:
`'=' iki yanında aynı türde değer ister.` Bu hata Sına'da değil, değerle çıkar.

### Örnek 7 — Liste ile katsayı (bağlantı cıvatası) {#ornek-7}

**İhtiyaç:** 600 ve 800 mm'de her 1,5 m için 8, 400 mm'de 4 cıvata. Cıvata geri sarfla düşer.
**Satır:** HAM-0064 Cıvata M8x20, ADET, **Miktar** `0`, **Geri sarf** işaretli, formül
`EGER(BANT_GENISLIGI IN ('600', '800'), 8, 4) * TAVAN(BOY / 1.5)`.

| Bant Genişliği | BOY | Sonuç |
|---|---|---|
| 600 mm | 6 | 32 ADET |
| 400 mm | 10 | 28 ADET |
| 800 mm | 12 | 64 ADET |
| 800 mm | 12,5 | 72 ADET |

### Örnek 8 — Hesaplanan özellik (ayak çifti) {#ornek-8}

**İhtiyaç:** Ayak çifti sayısı birden çok yerde (ağaç satırları, rota) kullanılacak; hesap tek yerde dursun.
**Kurulum:** Karta `AYAK_CIFTI` (Tam Sayı, isteğe bağlı) özelliği; **Nesne Bağımlılıkları** › **Kural Ekle** ›
**Değer hesapla**, hedef **Ayak Çifti Sayısı**, **Formül (gelişmiş)**, yazma biçimi **Her zaman hesapla**, ifade `TAVAN(BOY / 1.5) + 1`.
**Satır:** HAM-0049 Ayar ayağı, ADET, **Miktar** `0`, formül `2 * AYAK_CIFTI`.

| BOY | AYAK_CIFTI (hesaplanan) | HAM-0049 |
|---|---|---|
| 10 | 8 | 16 ADET (`2 * AYAK_CIFTI = 16`) |
| 12,5 | 10 | 20 ADET |

Hesaplanan değer emrin yapılandırma metninde de görünür (`Ayak Çifti Sayısı: 10`).
**Sık hata:** Satışta hesaplanan özelliğe elle değer vermek:
`'Ayak Çifti Sayısı' değeri kuraldan hesaplanır (8); farklı değer verilemez.`

### Örnek 9 — Ön koşullu ölçü ve seçenekle seçilen satır (pano kabini) {#ornek-9}

**İhtiyaç:** Standart kabin stoktan gelen yarı mamul; özel ölçüde kabin sacı en × boy × 2 yüz × 15,7 kg/m².
**Özellikler:** `KABIN` (Seçim: **Standart (800x600)** `STD`, **Özel Ölçü (En x Boy)** `OZEL_OLCU`);
`KABIN_EN`, `KABIN_BOY` (Ondalık, m, zorunlu, ön koşul `KABIN = OZEL_OLCU`).
**Satırlar:** YM-0001 Pano kabini — seçenek koşulu **Kabin: Standart (800x600)**; HAM-0029 DKP sac 2 mm, KG,
**Bileşen firesi** %5 — seçenek koşulu **Kabin: Özel Ölçü (En x Boy)**, **Miktar** `0`, formül
`KABIN_EN * KABIN_BOY * 2 * 15.7`.

| Kabin | En × Boy | YM-0001 | HAM-0029 (Dene) | HAM-0029 (emirde) |
|---|---|---|---|---|
| Standart | sorulmaz | 1 ADET | Gelmez | — |
| Özel Ölçü | 1,2 × 1,6 | Gelmez | 60,288 KG | 63,303 KG (fire %5, yukarı) |
| Özel Ölçü | girilmedi | Gelmez | Hata | Satış satırı kaydedilmez |

Son satırda pencere iki uyarı verir: `Satış satırı bu değerlerle kaydedilemez: 'Kabin Eni' özelliğinin değeri girilmemiş.`
ve `2. satırın miktar formülü bilinmiyor — okuduğu değerlerden biri konfigürasyonda yok (KABIN_EN * KABIN_BOY * 2 * 15.7).`

### Örnek 10 — Sabit + özelliğe bağlı adet (klemens) {#ornek-10}

**İhtiyaç:** Her çıkışa 4 klemens, toprak için 2 fazla.
**Özellik:** `CIKIS_SAYISI` (Tam Sayı, 1–24). **Satır:** HAM-0014 Klemens, ADET, **Miktar** `2`, formül
`4 * CIKIS_SAYISI`.

| CIKIS_SAYISI | Sonuç |
|---|---|
| 4 | 18 ADET |
| 6 | 26 ADET |
| 14 | 58 ADET |
| 20 | 82 ADET |

Aynı sonuç **Özellik × katsayı** kipiyle de alınır: özellik **Çıkış Sayısı**, katsayı `4`, Miktar `2`.

### Örnek 11 — Basamaklı miktar (kablo) {#ornek-11}

**İhtiyaç:** İlk 6 çıkışa çıkış başı 3 m, sonrakilere 2 m kablo.
**Satır:** HAM-0024 Kablo NYAF 2,5 mm², M, **Miktar** `0`, formül
`EGER(CIKIS_SAYISI <= 6, 3 * CIKIS_SAYISI, 18 + 2 * (CIKIS_SAYISI - 6))`.

| CIKIS_SAYISI | Sonuç |
|---|---|
| 4 | 12 M |
| 6 | 18 M |
| 14 | 34 M |
| 20 | 46 M |

Üç basamak için `EGER` iç içe yazılır: `EGER(X <= 6, …, EGER(X <= 12, …, …))`.

### Örnek 12 — Sorulmayan özelliği koruyan EGER (DIN ray) {#ornek-12}

**İhtiyaç:** Standart kabinde 1,2 m ray; özel ölçüde en × 2, yarım metreye yukarı.
**Satır:** HAM-0021 DIN ray, M, **Miktar** `0`, formül
`EGER(KABIN = 'STD', 1.2, YUKARIYUVARLA(KABIN_EN * 2, 0.5))`.

| Kabin | KABIN_EN | Sonuç |
|---|---|---|
| Standart | sorulmaz | 1,2 M |
| Özel Ölçü | 1,2 | 2,5 M (2,4 → 2,5) |

`EGER` yalnız seçilen dalı hesaplar: standart kabinde `KABIN_EN` bilinmediği hâlde hata çıkmaz.
**Sık hata:** `YUKARIYUVARLA(KABIN_EN * 2, 0.5)` tek başına — standart kabinde bilinmiyor olur, emir açılmaz.

### Örnek 13 — VEYA ve tümleyeni DEĞİL (PLC ya da röle modülü) {#ornek-13}

**İhtiyaç:** Profesyonel seride ya da 12'den fazla çıkışta PLC modülü, öteki durumlarda röle modülü.
**Satırlar:** YM-0009 PLC modülü — `SALT_SERISI = 'PRO' VEYA CIKIS_SAYISI > 12`; YM-0008 Röle modülü —
`DEĞİL (SALT_SERISI = 'PRO' VEYA CIKIS_SAYISI > 12)`.

| Şalt Serisi | CIKIS_SAYISI | YM-0009 | YM-0008 |
|---|---|---|---|
| Ekonomik | 6 | Gelmez | 1 ADET |
| Ekonomik | 14 | 1 ADET | Gelmez |
| Profesyonel | 4 | 1 ADET | Gelmez |

Tümleyeni `DEĞİL ( … )` ile yazmak iki satırın hiçbir değerde çakışmamasını ve boş kalmamasını garanti eder.
**Sık hata:** Parantezsiz `DEĞİL SALT_SERISI = 'PRO' VEYA CIKIS_SAYISI > 12` — `DEĞİL` yalnız ilk
karşılaştırmaya uygulanır.

### Örnek 14 — VE'nin kısa devresi (pano fanı) {#ornek-14}

**İhtiyaç:** 1,5 m²'den büyük özel kabine fan.
**Satır:** HAM-0019 Pano fanı — `KABIN = 'OZEL_OLCU' VE KABIN_EN * KABIN_BOY > 1.5`.

| Kabin | En × Boy | Sonuç |
|---|---|---|
| Standart | sorulmaz | Gelmez — `koşul Hayır` (ölçü bilinmese de) |
| Özel Ölçü | 1,2 × 1,6 = 1,92 | 1 ADET |

`HAYIR VE ?` Hayır verir; bu yüzden standart kabinde "değer girilmedi" yerine düz "Hayır" görünür.

### Örnek 15 — Özellik × katsayı kipi (sigorta) {#ornek-15}

**İhtiyaç:** Her çıkışa bir sigorta.
**Satır:** HAM-0008 Sigorta otomat C10, ADET, **Miktar** `0`, kip **Özellik × katsayı**: özellik
**Çıkış Sayısı**, katsayı `1`.

| CIKIS_SAYISI | Sonuç (Dene'deki hesap) |
|---|---|
| 6 | 6 ADET (`1 × Çıkış Sayısı (6) = 6`) |
| 14 | 14 ADET |

**İfade** kipinde `1 * CIKIS_SAYISI` aynı sonucu verir. Özellik × katsayı kipinde katsayı sıfırdan büyük
olmalı (`Formül katsayısı sıfırdan büyük olmalıdır.`); kip ve ifade birlikte kullanılamaz
(`Miktar ya özellik × katsayı ya da ifadeli formülle hesaplanır — ikisi birden olmaz.`).

### Örnek 16 — Alt sınırlı miktar (bara) {#ornek-16}

**İhtiyaç:** Profesyonel seride çıkış başı 5 cm bara, en az 0,6 m.
**Satır:** HAM-0020 Bakır bara, M — seçenek koşulu **Şalt Serisi: Profesyonel**, **Miktar** `0`, formül
`MAX(0.6, CIKIS_SAYISI * 0.05)`.

| Şalt Serisi | CIKIS_SAYISI | Sonuç |
|---|---|---|
| Profesyonel | 4 | 0,6 M |
| Profesyonel | 20 | 1 M |
| Ekonomik | 14 | Gelmez |

Üst sınır için `MIN(üst, …)`, ikisi birden için `MIN(üst, MAX(alt, …))`.

### Örnek 17 — Parti miktarına oranlı reçete (kimya) {#ornek-17}

**İhtiyaç:** Bir parti (1 ADET) kaç kg üretilecekse hammadde o orana göre; tuz bir ondalığa yuvarlansın.
**Özellik:** `PARTI_KG` (Ondalık, kg, 100–2000, 50 adım). **Satırlar:** HAM-0070 SLES — `PARTI_KG * 0.12`;
HAM-0071 Tuz — `YUVARLA(PARTI_KG * 0.015, 1)`; HAM-0075 Saf su — `PARTI_KG * 0.865` (hepsinde **Miktar** `0`).

| PARTI_KG | SLES | Tuz | Su |
|---|---|---|---|
| 500 | 60 KG | 7,5 KG | 432,5 KG |
| 1250 | 150 KG | 18,8 KG (18,75 → 18,8) | 1081,25 KG |

> **Oranlı ölçekleme için formül şart değil**
Yalnız orantılı büyüyen reçetede ağacın **Temel Miktar**'ını partiye (ör. 1000 KG) ve emir miktarını üretilecek
kg'a göre girin; her satır emir miktarıyla kendiliğinden ölçeklenir. Formül **orantısız** kısım için
gerekir: yuvarlanan ambalaj adedi, seçeneğe bağlı katkı.

### Örnek 18 — Ambalaj adedi ve koli (paketleme) {#ornek-18}

**İhtiyaç:** 5 L bidon (5,2 kg dolum) ya da 1 L şişe (1,04 kg); bidonlar 4'lü, şişeler 12'li koliye.
**Özellik:** `AMBALAJ` (Seçim: **5 L bidon** `B5L`, **1 L şişe** `S1L`). **Satırlar** (hepsi **Miktar** `0`):

| Satır | Seçenek koşulu | Formül |
|---|---|---|
| AMB-0001 Bidon 5 LT | Ambalaj: 5 L bidon | `TAVAN(PARTI_KG / 5.2)` |
| AMB-0004 Bidon kapağı | Ambalaj: 5 L bidon | `TAVAN(PARTI_KG / 5.2)` |
| AMB-0007 Koli 4'lü | Ambalaj: 5 L bidon | `TAVAN(TAVAN(PARTI_KG / 5.2) / 4)` |
| AMB-0002 Şişe 1 LT | Ambalaj: 1 L şişe | `TAVAN(PARTI_KG / 1.04)` |
| AMB-0008 Koli 12'li | Ambalaj: 1 L şişe | `TAVAN(TAVAN(PARTI_KG / 1.04) / 12)` |

| PARTI_KG | Ambalaj | Bidon | Kapak | Koli 4'lü | Şişe | Koli 12'li |
|---|---|---|---|---|---|---|
| 500 | 5 L bidon | 97 | 97 | 25 | Gelmez | Gelmez |
| 1250 | 1 L şişe | Gelmez | Gelmez | Gelmez | 1202 | 101 |

**Sık hata:** Koli adedini `TAVAN(PARTI_KG / 5.2 / 4)` yazmak — önce bidonu tam sayıya yuvarlamadan koliye
bölmek eksik koli verebilir. İç içe `TAVAN` kullanın.

### Örnek 19 — Seçeneğe bağlı katkı (parfüm) {#ornek-19}

**Satır:** HAM-0072 Parfüm, KG, **Miktar** `0`, ifadeli koşul `PARFUM = EVET`, formül `PARTI_KG * 0.003`.

| PARTI_KG | PARFUM | Sonuç |
|---|---|---|
| 1250 | Evet | 3,75 KG |
| 500 | girilmedi | Gelmez — `koşulun okuduğu değer girilmedi: PARFUM = EVET` |

### Örnek 20 — Ölçüye göre panel alanı ve renk (dolap) {#ornek-20}

**İhtiyaç:** Gövde: iki yan (yükseklik × 60 cm derinlik), üst, alt ve her 40 cm'de bir raf (genişlik × 60 cm);
renk panel kartını seçer. %10 kesim firesi.
**Özellikler:** `GEN_CM`, `YUK_CM` (Tam Sayı, cm), `RENK` (Seçim), `KAPAK` (Seçim).
**Satırlar:** HAM-0038 / HAM-0039 / HAM-0040 Melamin sunta Beyaz / Ceviz / Antrasit, M2, **Bileşen firesi**
%10 — seçenek koşulu **Renk: Beyaz** / **Ceviz** / **Antrasit**, **Miktar** `0`, formül
`(2 * YUK_CM * 60 + (TABAN(YUK_CM / 40) + 1) * GEN_CM * 60) / 10000`.

| Genişlik × Yükseklik | Renk | Gelen satır | Sonuç |
|---|---|---|---|
| 120 × 200 | Ceviz | HAM-0039 | 6,72 M2 |
| 180 × 160 | Beyaz | HAM-0038 | 7,32 M2 |

cm² → m² için `/ 10000`. Arka panel (HAM-0041 MDF) `GEN_CM * YUK_CM / 10000`: 120 × 200 → 2,4 M2.

### Örnek 21 — Kapak sayısı ve yüksekliğe göre menteşe (dolap) {#ornek-21}

**Satırlar:** HAM-0045 Menteşe — seçenek koşulu **Kapak Tipi: Menteşeli**, formül
`EGER(YUK_CM > 180, 4, 3) * TAVAN(GEN_CM / 60)`; HAM-0046 Kulp — koşulsuz, formül
`EGER(KAPAK = 'SURGULU', 2, TAVAN(GEN_CM / 60))`; HAM-0033 Profil (sürgü rayı) — **Kapak Tipi: Sürgülü**,
formül `2 * GEN_CM / 100`; HAM-0049 Ayar ayağı — `EGER(GEN_CM > 120, 6, 4)`.

| Genişlik × Yükseklik | Kapak | Menteşe | Kulp | Ray | Ayak |
|---|---|---|---|---|---|
| 120 × 200 | Menteşeli | 8 | 2 | Gelmez | 4 |
| 180 × 160 | Sürgülü | Gelmez | 2 | 3,6 M | 6 |

### Örnek 22 — Yalnız seçenek koşullu ağaç (ofis masası, MAM-0003) {#ornek-22}

Formül gerekmeyen, her bileşimin miktarı sabit olan ürün: panel kartı **Renk** × **Masa Genişliği**
bileşiminden seçilir (dokuz satır, her biri iki özellikte birer değer), kenar bandı yalnız rengi okur.

| Masa Genişliği | Renk | Kablo Kanalı | Gelen panel | Bant | Kanal |
|---|---|---|---|---|---|
| 140 cm | Beyaz | Var | HAM-0038 1,47 M2 (`Renk Beyaz, Masa Genişliği 140 cm`) | HAM-0042 6 M | HAM-0048 1 ADET |

### Örnek 23 — Aynı kart, birbirini dışlayan iki satır (tank, MAM-0006) {#ornek-23}

HAM-0031 3 mm sac iki satırda: **Tank Hacmi: 2.000 L** → 290 KG, **Tank Hacmi: 5.000 L** → 560 KG. Koşullar
aynı özellikte kesişmediği için izinli. HAM-0034 boru tek satırda **1.000 L / 2.000 L** (VEYA) → 4 M.

| Tank Hacmi | Karıştırıcı | HAM-0031 | HAM-0034 | HAM-0059 / HAM-0060 |
|---|---|---|---|---|
| 2.000 L | Var | 290 KG | 4 M | 1 / 1 ADET |

### Örnek 24 — Süper rota: süre ve operasyon seçimi (konveyör) {#ornek-24}

DMO-KSL-01'in rotası; BOY 12,5, Bant Tipi PVC, Koruma Evet ile açılan **UE-2026-000009** emrindeki süreler:

| Op. | Operasyon | Kural | Emirdeki süre |
|---|---|---|---|
| 10 | Profil kesim | Makine formülü `2 * BOY * 0.8` (hazırlık 10, işçilik 5 sabit) | Makine 20 dk |
| 20 | Şase ve makara montajı | İşçilik formülü `30 + 6 * BOY` | 105 dk |
| 30 | Bant montajı ve gerdirme | İşçilik formülü `EGER(BANT_TIPI = 'PU', 40, 25) + 2 * BOY` | 50 dk |
| 40 | Koruma kapağı montajı | Seçim koşulu `KORUMA = EVET`, işçilik `3 * BOY` | 37,5 dk |
| 50 | Motor bağlantısı | Sabit 30 | 30 dk |
| 60 | Çalışma testi | İşçilik `EGER(BOY > 10, 30, 20)` | 30 dk |

Pano rotasında (DMO-KSL-02) `KABIN = 'OZEL_OLCU'` ile gelen kabin imalatının işçiliği
`60 + 40 * KABIN_EN * KABIN_BOY` → 1,2 × 1,6 m'de 136,8 dk; `20 + 8 * CIKIS_SAYISI` → 14 çıkışta 132 dk;
`SALT_SERISI = 'PRO' VEYA CIKIS_SAYISI > 12` ile PLC programlama operasyonu gelir (UE-2026-000010).

### Örnek 25 — Kısıt (izin verilmeyen bileşim) {#ornek-25}

**İhtiyaç:** PU gıda bandı en çok 20 m üretilir.
**Kural:** **Sınır koy**, ifade `BANT_TIPI <> 'PU' VEYA BOY <= 20`, ileti `PU gıda bandı en çok 20 m boyda üretilir.`

| Bant Tipi | BOY | Sonuç |
|---|---|---|
| PU | 24 | Satış satırı kaydedilmez — `PU gıda bandı en çok 20 m boyda üretilir.` |
| PU | 12,5 | Geçer |
| PVC | 24 | Geçer |

Aralık dışı değer kısıt gerektirmez; özelliğin **En az / En çok / Adım** alanları denetler:
`'Boy' değeri izinli aralıkta değil (2–30 m, 0,5 m adım).` (BOY 31 ya da 6,3).

## Kural yazarken kontrol listesi

1. Satırın **gelip gelmeyeceğini** koşulla, **miktarını** formülle yazın; ikisini `EGER(…, …, 0)` içinde birleştirmeyin.
2. Formüllü satırda **Miktar** alanını bilinçli doldurun (çoğu zaman `0`).
3. Seçenek kodunu tek tırnakla, Evet/Hayır'ı tırnaksız yazın; ondalığı nokta ile.
4. İsteğe bağlı ve ön koşullu özellikleri okuyan kuralı "değer yoksa" durumuna göre kurun (`DOLU`, `EGER`).
5. Sınırları kapsayıcı yazın: bir taraf `<=`, öteki `>`; tümleyen için `DEĞİL ( … )`.
6. Aynı kart iki satırda gerekiyorsa koşulları **seçenekle** birbirini dışlayacak biçimde kurun; ifadeli koşul yetmez.
7. Kaydetmeden önce **Sına**, kaydettikten sonra **Yapılandırarak Dene** ile uç değerleri deneyin (en küçük,
   en büyük, sınırın iki yanı, isteğe bağlı alan boş).

## İlgili

- [Satır kuralı tanımlamak](https://erpdocs.corexlogic.com/uretim/islemler/satir-kurali-tanimlama)
- [Yapılandırarak denemek](https://erpdocs.corexlogic.com/uretim/islemler/yapilandirarak-deneme)
- [Ön koşul tanımlamak](https://erpdocs.corexlogic.com/uretim/islemler/on-kosul-tanimlama)
- [Süper rota kuralı yazmak](https://erpdocs.corexlogic.com/uretim/islemler/super-rota-kurali-yazma)
- [Yapılandırılabilir ürünler](https://erpdocs.corexlogic.com/uretim/ekranlar/yapilandirilabilir-urunler)
- [Siparişten üretime süreci](https://erpdocs.corexlogic.com/surecler/siparisten-uretime)
