# Formlar

> Sahada doldurulan formları tasarlayın. Alanları forma sürükleyin, ne zaman görüneceklerini belirleyin, formu deneyin ve Uygulamalar sayfasına yayınlayın.

Kaynak: https://proxus.io/tr/docs/organize/forms

**Formlar**, insanların doldurduğu formların tasarlandığı ekrandır: duruş nedenleri, kalite kontrolleri, vardiya
devirleri ya da tesisinizde bugün kâğıtta tutulan herhangi bir kayıt. Ekran **Varlık yapısı > Formlar**
menüsündedir. Yayınladığınız form, rolleri için [İzleme > Uygulamalar](https://proxus.io/tr/docs/monitor/apps) ekranında görünür.

*Ekran görüntüsü: Dört formun durumu, alan sayısı ve son değişikliğiyle listelendiği Formlar ekranı ve Yeni form düğmesi*

1. **Yeni form**, boş ya da bir örnek formdan başlayan bir form oluşturur.
2. Süzgeçler tüm formları, **Yayınlanmamış değişiklik** olanları, **Kullanımda** olanları ve arşivlenmiş olanları
   gösterir.
3. **Düzenle**, formu tasarımcıda açar. Yanındaki arşiv düğmesi form için yeni kayıtları durdurur.

**Formlar** sekmesinin yanındaki **Seçim listeleri**, [birçok formun paylaştığı listeleri](#secim-listeleri) tutar.

## Kim tasarlar, kim yayınlar

| Yapmak istediğiniz | Rolünüzde olması gereken |
| --- | --- |
| Form oluşturmak ve düzenlemek | Hazır Mühendis rolündeki gibi **Formlar** alanında tam erişim |
| Formu yayınlamak, önceki bir sürüme dönmek ya da formu arşivlemek | Ayrıca **Form yayınla** yeteneği |
| Makineye yazan bir formu yayınlamak | Ayrıca **Cihaza yaz** yeteneği |

Tasarımcı, form düzenleyebilen rollerin menüsünde görünür. Diğer roller formları Uygulamalar sayfasında doldurur.

## Form oluşturma

1. **Varlık yapısı > Formlar** ekranını açın ve **Yeni form** seçin.
2. Adı yazın. Formun kayıtlarının saklanacağı anahtar altında görünür; bu anahtar hiç değişmez.
3. **Boş form** seçin ya da kopyasından başlamak için örnek formlardan birini seçin.
4. **Oluştur ve aç** seçin. Tasarımcı yeni formla açılır.

## Tasarımcı

Tasarımcı tüm pencereyi kaplar. Sol üstteki ok formlar listesine döner.

*Ekran görüntüsü: Solda bileşen paleti, ortada Kalıp sıcaklığı alanı seçili form ve sağda alanın ayarlarıyla form tasarımcısı*

1. **Ekle** bileşenleri ne için kullanıldıklarına göre gruplar. **Yapı** formu bir ağaç olarak gösterir.
2. Form, insanların göreceği hâliyle birebir çizilir. Seçili öğenin çerçevesi, tipi ve onu yukarı ya da aşağı
   taşıyan, çoğaltan ve kaldıran düğmeleri vardır.
3. Seçili öğenin ayarları üç sekmededir: **Alan**, **Düzen** ve **Mantık**. Hiçbir şey seçili değilken panel formun
   kendi ayarlarını gösterir.
4. Formu telefon, tablet ya da masaüstü genişliğinde önizleyin; **Tasarım** ile **Dene** arasında geçiş yapın.
5. **Yayınla**, taslağı insanların doldurduğu sürüm yapar.

### Öğe ekleme ve yerleştirme

- **Ekle** bölümündeki bir bileşeni forma sürükleyin. Mavi çizgi nereye gideceğini gösterir. Bir bileşene tıklamak
  onu seçili öğenin yanına ya da seçili bölümün içine ekler.
- Formdaki bir öğeyi ya da yapı ağacındaki bir satırı sürükleyerek taşıyın; başka bir bölüme, gruba ya da sekmeye de
  taşıyabilirsiniz.
- Bir etiketi, bölüm başlığını, formun başlığını ya da açıklamasını yerinde değiştirmek için çift tıklayın.
- Sekme, sekmelerin yanındaki **+** düğmesiyle ya da sekmelerin ayarlarından eklenir.

| Kısayol | Ne yapar |
| --- | --- |
| Ctrl+Z / ⌘Z | Geri al |
| Ctrl+Shift+Z / ⌘⇧Z, Ctrl+Y | Yinele |
| Ctrl+D / ⌘D | Seçili öğeyi çoğalt |
| Ctrl+C, Ctrl+V / ⌘C, ⌘V | Seçili öğeyi kopyala ve seçili öğenin arkasına yapıştır |
| Delete ya da Backspace | Seçili öğeyi kaldır |
| Alt+↑ / Alt+↓ | Seçili öğeyi yukarı ya da aşağı taşı |
| ↑ / ↓ | Önceki ya da sonraki öğeyi seç |
| Esc | Seçili öğeyi içeren bölümü, grubu ya da sekmeyi seç |
| Ctrl+S / ⌘S | Taslağı hemen kaydet |

### İki dilde metinler

Okunan her metin (etiketler, yardım metinleri, seçenekler, formun başlığı) İngilizce ve Türkçe saklanır. İlk kutu
sizin dilinizdir. Diğer dil, biri çevirene kadar aynı metni alır; çeviri işareti henüz çevrilmemiş metinleri gösterir.

### Genişlik

**Düzen** sekmesinde bir öğenin telefonda, tablette ve masaüstünde satırın ne kadarını kaplayacağını seçin: çeyrek,
üçte bir, yarım, üçte iki, dörtte üç ya da tüm satır. Çerçeveyle gösterilen genişlik, küçük ekrandan gelir.

### Koşula bağlı gösterme, zorunlu kılma, kilitleme

**Mantık** sekmesinde bir öğe yalnızca diğer cevaplar uygun olduğunda görünebilir, zorunlu olabilir ya da
değiştirilemez olabilir. **Şu durumda…** seçin ve koşulu *Değişim nedeni eşittir Kalıp aşınması* ya da
*Kontrol edilen parça büyüktür 10* gibi satırlardan kurun; satırlar **ve** ya da **veya** ile bağlanır.
**Formül olarak düzenle**, koşulu formun alanları üzerine bir ifade olarak yazar; örneğin `fields.reason == 'other'`.
Yalnızca bir koşulda görünen öğe, tasarım sırasında formda soluk görünür.

### Formüller

Formül olarak yazılan koşul ve **Başlangıç değeri** **Formül** olan alan aynı düzenleyiciyi kullanır:

- Bir alanın etiketinin ya da adının bir kısmını yazın: alanlar etiketleriyle önerilir, seçtiğiniz alan
  `fields.<ad>` olarak yazılır. `context.`, `user.`, `live.` ya da `Math.` yazınca içerdikleri önerilir.
  **Ctrl+Boşluk** her şeyi listeler; listede ↑ ↓ ile gezinilir, öneri **Enter** ya da **Tab** ile alınır.
- Alanlar renklidir; formda olmayan bir ad kırmızı altı çizili görünür.
- Formülün altında sorun sade dille yazar, okuduğu alanlar ve **Dene** modunda yazılan cevaplarla sonucu (**Şu an:**)
  görünür. **Nasıl yazılır**, işlemleri ve kısa örnekleri gösterir.

| Formül | Verdiği |
| --- | --- |
| `fields.good + fields.scrap` | İki sayı alanının toplamı |
| `Math.round(fields.temperature * 10) / 10` | Bir ondalığa yuvarlanmış sayı |
| `fields.reason == 'other'` | *Diğer* seçildiğinde evet |
| `fields.pieces > 10 && fields.result == 'fail'` | İkisi de tuttuğunda evet |
| `context.deviceName` | Formun açıldığı cihazın adı |
| `live.Speed` | Veri noktasının şu anki değeri (formdaki bir makine öğesinin okuduğu) |

### Cevap kontrolleri

Sayı, metin, uzun metin ve barkod alanları bir sınırın dışındaki cevabı reddedebilir: **En az**, **En çok**, karakter sayısı ya
da bir kalıp. Bunları **Mantık** sekmesindeki **Cevap kontrolleri** altında ekleyin; her birine her dilde isteğe bağlı
bir mesaj yazılabilir. Kontrol tutmazsa mesaj alanın yanında görünür; mesaj yoksa alan kaçırılan sınırı söyler,
örneğin *En çok 500 pcs olmalı.* Kayıt gönderilirken sunucu aynı sınırları denetler.

### Makine değerleri ve yazma

Canlı değer, sayaç, trend ve makine durumu öğeleri bir veri noktasını gösterir; ayar değeri ve yazma düğmesi öğeleri
bir veri noktasına yazar. Öğeyi seçip **Veri noktası seç**'e basın:

- **Formun cihazı**: form veri noktasını açıldığı cihazdan okur. Tüm cihaz profillerinin veri noktaları adlarıyla
  listelenir; değerler **Değerler** altında seçtiğiniz cihazdan gösterilir. Henüz bir profilde olmayan bir veri
  noktası yazılıp olduğu gibi kullanılabilir. Böyle bir veri noktası cihaz için açılan bir form gerektirir; ayarlar
  formu buna çevirmeyi önerir.
- **Tesisteki bir yer**: form, hangi cihaz için açılırsa açılsın tek bir cihazın veri noktasını okur. Görebildiğiniz
  cihazlar UNS ağacında (işletme, tesis, alan vb.) gösterilir; bir cihazı açınca veri noktaları görünür. Arama yerler,
  cihazlar ve veri noktaları arasında birlikte arar.

Her veri noktası birimini, yazılabilir olup olmadığını ve şu anki değerini gösterir; değer iyiyse yeşil nokta
vardır. Ayar değeri ve yazma düğmesi yalnızca yazılabilir bir veri noktası alabilir. Seçilen veri noktası ayarlarda
yeri ve değeriyle görünür; üzerine basınca seçici yeniden açılır. Veri noktası seçmek, birimi boş olan öğenin birimini
doldurur. Yazma onay isteyebilir ve aynı yazma yeniden gönderilmeden önce belirli bir süre bekleyebilir.

### Formun ayarları

Hiçbir şey seçili değilken (ya da formun başlığı seçildiğinde) ayarlar şunlardır:

| Ayar | Anlamı |
| --- | --- |
| **Başlık**, **Açıklama** | Uygulamalar sayfasında ve formda görünen metin. |
| **Ne için açılır** | Hiçbir şey, bir cihaz ya da tesisteki bir yer. Cihaz için açılan form, açılırken cihazı sorar. |
| **Görünüm** | **Standart** ya da eldiven ve tablet için büyük kontrollü **Dokunmatik**. |
| **Kayıtları görebilir**, **Doldurabilir** | Formu kullanan roller. |
| **Kayıtlar onay gerektirir** | Bir kayıt, **Onaylayabilir** rollerinden biri onayladığında geçerli olur. |

Altlarında formun anahtarı, SQL görünümü (`proxus_forms.v_<anahtar>`) ve saklanan alan sayısı görünür.

## Formu deneme

**Dene**, tuvali insanların doldurduğu forma çevirir: yazın, seçin, işaretleyin. Sağdaki panel, kaydın saklayacağı
değerleri alan adlarına göre gösterir. **Gönder**, cevapları Uygulamalar sayfasındaki gibi denetler ve eksikleri
gösterir; hiçbir şey kaydedilmez.

## Kontroller

**Yayınla** düğmesinin solundaki düğme **Hazır** ya da düzeltilecek şeylerin sayısını gösterir. Hatalar
yayınlamayı durdurur; boş bir bölüm gibi uyarılar durdurmaz. Liste sorunları öğe öğe gösterir: hatası olanlar önce,
formun kendi ayarları en üstte; öğeye gitmek için birini seçin. Sorunlu öğeler formda ve yapı ağacında da
işaretlenir.

## Kurallar

Kurallar formun kendiliğinden bir şey yapmasını sağlar. Her kural **ne zaman** çalışacağını, **yalnızca** hangi durumda
çalışacağını ve ne **yapacağını** söyler. Tasarımcının üst çubuğundaki **Kurallar** düğmesini seçin (sayı, formdaki kural
sayısıdır). Bir öğenin **Mantık** sekmesi o öğeyi izleyen ya da dolduran kuralları listeler ve onun için kural eklemeye
bağlantı verir.

*Ekran görüntüsü: Duruş nedeni formunun Kurallar çekmecesi: 1. kural Yeniden çalışıyor Evet olunca süreyi hesaplar, 2. kural kayıt gönderildiğinde bir kanala bildirir*

1. **Ne zaman**: kuralı başlatan olay.
2. **Yalnızca**: cevaplar üzerinde, öğe koşulları gibi satırlarla kurulan bir koşul ya da **Her zaman**.
3. **Yap**: sırayla çalışan eylemler.
4. Bildirimde bir değeri seçerek mesaja ekleyin.

| Ne zaman | Kuralın yapabildikleri |
| --- | --- |
| **Form açıldığında** (yalnızca yeni kayıtta) | Değer ata |
| **Bir alan değiştiğinde** (değeri bir kural verdiğinde de) | Değer ata, makineye yaz |
| **Bir makine değeri değiştiğinde** (canlı değer gösteren bir öğe) | Değer ata |
| **Belirli aralıklarla** (form açıkken 5 ile 3600 saniyede bir) | Değer ata |
| **Kayıt gönderildiğinde** | Değer ata, makineye yaz, bildir, başka form aç |
| **Kayıt onaylandığında** ya da **reddedildiğinde** | Bildir |

- **Değer ata** bir alanı sabit bir değerle ya da formülle doldurur; örneğin başlangıçtan bu yana geçen dakika için
  `Math.round((Date.parse(now()) - Date.parse(fields.startedAt)) / 60000)`.
- **Makineye yaz** formdaki bir ayar değeri ya da yazma düğmesi üzerinden, o öğenin sınırları ve en kısa yazma aralığıyla
  yazar; yazma, kaydın geçmişine eklenir. Eylem bir formül vermedikçe ayar değeri kutusundaki değeri yazar.
  Zamanlayıcı ve makine değeri hiçbir zaman yazmaz.
- **Bildir** kayıt saklandıktan sonra bir bildirim kanalı üzerinden mesaj gönderir. Kaydedildiği hâliyle bir cevap için
  `{alan}`, insanların okuduğu hâli için `{alan_text}`, kayıt için `{formTitle}`, `{user}`, `{deviceName}`,
  `{decidedBy}` ve `{reason}` yazın. Değer olmayan bir ad yazıldığı gibi kalır.
- **Başka form aç** kayıt gönderildikten sonra o formu aynı cihaz için açar. Kiosk modunda tablet, o form da
  gönderildikten sonra kendi formuna döner.

Kurallar yukarıdan aşağıya çalışır. Bir alanı dolduran kural, o alanın değişim kurallarını başlatır; art arda beş turdan
sonra form durur, böylece kendini besleyen bir kural döngüye girmez. **Dene** kuralları insanların göreceği gibi
çalıştırır; makineye yazmanın ya da başka formun ne yapacağını yalnızca söyler. **Duruş nedeni** örnek formu, makine
yeniden çalıştığında süreyi hesaplayan bir kuralla gelir.

Bir kayıttan işlem akışı başlatmak için [İşlem akışları](https://proxus.io/tr/docs/automate/pipelines) sayfasındaki
"Bir formdan işlem akışı başlatın" bölümüne bakın.

## Yayınlama ve sürümler

Taslak her değişiklikten bir an sonra kaydedilir; tasarımcıyı kapatmak hiçbir çalışmayı kaybettirmez. **Yayınla**,
yayınlamanın neyi değiştireceğini yayınlamadan önce gösterir:

- Yeni sürümün kaç öğe eklediği, değiştirdiği ve kaldırdığı; her biri neyinin değiştiğiyle (etiket, zorunluluk,
  sınırlar ve kontroller, veri noktası, genişlik, taşındı…). Öğeye gitmek için birini seçin.
- Artık başka türde değer saklayan alan (örneğin aynı adla sayı alanına dönüşen bir metin alanı) işaretlenir: yapılmış
  kayıtlar sakladıklarını korur, SQL görünümü sütunu yeni türde okur.
- **Kimler kullanır**: formun ne için açıldığı, kimlerin doldurabildiği, kayıtları görebildiği, onaylayabildiği ve
  dışa aktarabildiği; bu sürümün değiştirdiği ayarlar işaretlenir.
- **Kayıtlar**: SQL görünümü (`proxus_forms.v_<anahtar>`), saklanan alan sayısı, önceki sürümlerle kaç kayıt
  gönderildiği (kendi sürümlerini korurlar) ve kaç taslağın doldurulmakta olduğu (yeni sürümle devam ederler;
  kaldırılan alanların cevapları alınmaz).
- Sürüm geçmişi için kısa bir not.

Yeni kayıtlar en yeni sürümü kullanır. Hata varsa pencere bunun yerine hataları listeler; her biri öğesine götürür.

**Sürümler** (saat düğmesi) yayınlanmış sürümleri en yeniden başlayarak listeler: her birinin ne zaman ve kim
tarafından yayınlandığı, notu, bir önceki sürüme göre neyi eklediği, değiştirdiği ve kaldırdığı (**Neler değişti**)
ve onunla kaç kayıt yapıldığı. **Görüntüle**, sürümü insanların gördüğü gibi gösterir. **Taslakla karşılaştır**,
taslağın o sürüme göre değiştirdiklerini listeler. **Bu sürüme dön**, önceki bir sürümü en yeni sürüm olarak yeniden
yayınlar ve onu taslak yapar.

Formlar listesinden arşivlenen form yeni kayıt almaz. Kayıtları ve SQL görünümü okunabilir kalır.

## Kayıtlar ve dışa aktarma

**Kayıtlar** (**Tasarım** ve **Dene** düğmelerinin yanında) formun görebildiğiniz kayıtlarını listeler.

*Ekran görüntüsü: Durum süzgeçleri, tarih aralığı, Excel ve CSV düğmeleri ve iki kayıtla tasarımcının Kayıtlar görünümü*

1. **Kayıtlar**, tasarımcıyı formun kayıtlarına geçirir.
2. Tüm kayıtları ya da yalnızca gönderilmiş, onaylanmış, reddedilmiş veya taslak olanları gösterin.
3. **Başlangıç** ve **Bitiş**, kayıtları gönderildikleri (ya da son kaydedildikleri) günlerle sınırlar.
4. **Excel** ve **CSV**, süzgeçlerin seçtiği kayıtları en fazla 10.000 kayıt olarak indirir: kaydın kendi sütunları
   (durum, cihaz, dolduran, zaman, karar veren) ve her alan için bir sütun. Excel sayıları, tarihleri ve evet/hayır
   yanıtlarını tipli tutar; CSV diğer sistemler okuyabilsin diye sayıları noktayla, zamanları ISO 8601 olarak yazar.

Bir kaydı açmak, onaylamak, reddetmek ya da PDF olarak indirmek için seçin;
[Uygulamalar sayfasındaki](https://proxus.io/tr/docs/monitor/apps#kayitlarim-ve-onaylar) gibi çalışır. Her dışa aktarma ve yazdırma
kaydın geçmişine yazılır. Liste dışa aktarmak **Dışa aktar** yeteneğini ve formun kayıtlarını gören roller arasında
olmayı gerektirir.

## Seçim listeleri

Seçim listesi bir kez tutulur, birçok form kullanır: duruş nedenleri, hata kodları, vardiya ekipleri. Tek yerde
değiştirin, listeyi kullanan her form uyar. Listeler **Varlık yapısı > Formlar** ekranının **Seçim listeleri**
sekmesindedir. Maddeler *Plansız › Arıza › Elektrik* gibi en fazla dört seviyeli olabilir.

**Yeni liste** bir ad sorar; boş ya da örnek **Duruş nedenleri** listesinden (planlı ve plansız duruşlar, üç seviye,
İngilizce ve Türkçe) başlar.

*Ekran görüntüsü: Liste düzenleyicide açık Duruş nedenleri seçim listesi; Plansız › Arıza ve maddeleri, her birinin Türkçe ve İngilizce metni ve kayıt değeri*

1. Listenin adı. Adın altındaki anahtar, formların listeye başvurduğu addır ve değişmez.
2. **Madde ekle** sona bir madde ekler. **Satır yapıştır** bir tablodaki listeyi alır: her satıra bir madde; bir
   satırı üsttekinin altına koymak için iki boşluk ya da bir sekme daha girintileyin.
3. Maddenin her dildeki metni. Formun kendi metinlerinde olduğu gibi, siz çevirene kadar diğer dil ilkini izler.
4. Kayıt değeri, kayıtların sakladığı değerdir. Madde yeniyken metinden oluşturulur ve bütün listede tek olmalıdır.
5. Bu maddenin altına madde ekleyin, maddeyi yukarı ya da aşağı taşıyın, bir üst seviyeye ya da üstteki maddenin
   altına alın, kapatın ya da silin.

**Kaydet** önce listeyi kontrol eder: boş ya da tekrarlanan bir değer, eksik bir metin ya da beşinci bir seviye
kaydetmeyi durdurur ve ilgili madde işaretlenir. Liste bu arada başka biri tarafından kaydedildiyse **Vazgeç** onun
sürümünü yükler. Formlar kaydedilen listeyi bir sonraki açılışta okur; kaydedilmiş kayıtlar değerlerini korur.

Artık kullanılmayan bir maddeyi silmek yerine kapatın: artık sunulmaz, onu seçmiş kayıtlar ise metnini göstermeye
devam eder. Bir formun kullandığı liste silinemez.

### Listeyi bir formda kullanma

- **Ağaçtan seçim**, listeyi seviye seviye büyük düğmelerle gösterir; üstte geri dönüş yolu, uzun listelerde de tüm
  seviyelerde arama vardır ve tek bir madde saklar. Varsayılan olarak kişi altı olmayan bir maddeye kadar iner;
  *Arıza* gibi bir grupta durabilmesi için **Yalnızca en alt seviye** ayarını kapatın.
- **Tek seçim** ve **Çoklu seçim**, seçeneklerini forma yazılmış seçenekler yerine **Ortak liste**'den alabilir.
  Listenin en alttaki maddelerini yollarıyla birlikte sunarlar.

Kayıtlar, Excel ve CSV dışa aktarımları ve PDF, bir seçimi *Plansız › Malzeme › Kapak gelmedi* gibi yoluyla ve
okuyanın dilinde gösterir.

## Bu sürümdeki sınırlar

- Kurallar formu dolduran kişiye mesaj gösteremez, API çağıramaz ve betik çalıştıramaz. Bildirmekten fazlası için
  kayıttan bir işlem akışı başlatın: [İşlem akışları](https://proxus.io/tr/docs/automate/pipelines) sayfasındaki "Bir formdan işlem
  akışı başlatın" bölümüne bakın.
