> Menünün altındaki her dal bu dosyada bir bölümdür (`module-doc:section`); dosya ve bölümler ilk deploy'da otomatik açılır. `module-doc:todo` işaretli alt bölümleri modülü üreten kişi ya da AI doldurur (`lowcode.instructions.md` §0.13); MCP ile üretimde talep bu bölümler doldurulmadan Testing'e alınamaz. "Ek — Ekran envanteri" bölümü wizard dosyalarından üretilir, elle düzenlenmez.
Satınalma belgelerinde kullanılacak ödeme koşulu, ödeme yöntemi, teslimat koşulu (Incoterm) ve teslim yöntemi tanımları. Kullanıcılar satınalma ve muhasebe personelidir. Satınalma talebi, teklif, sipariş ve fatura belgeleri bu modülün kapsamında değildir; bu ekranlar onların lookup kaynağıdır.
Tedarikçi kartı (eski `App.Prc.Supplier`) satış ve satınalmanın ortak kartı olarak **Kontaklar** adıyla Yönetim › Tanımlamalar'a taşındı; ayrıntı [Administration › Tanımlamalar](<App.Administration.md>). Kontak kartının Satış ve Satınalma sekmeleri bu modülün tanımlarını lookup olarak kullanır.
- Kart, etiket, ilgili kişi ve banka hesabı ekranları Satış tarafı da kullanacağı için `Adm` modülüne (`Adm_T_Contact*`, `App.Definitions.Contact*`) taşındı; bu modülde yalnızca satınalma koşulu tanımları kaldı.
Yetki ağacı: `App.Prc`›`App.Prc.Definitions`› her ekran (+ Create/Update/Delete/Export/Import/Note). Tüm ekranlar kiracı kapsamlıdır, şube filtresi yoktur. Widget'lar: her ekranda Toplam · Aktif · Pasif.
Yok. Tanımlar Yönetim › Tanımlamalar › Kontaklar'ın Satış ve Satınalma sekmelerinde (`App.Definitions.ContactSales`, `App.Definitions.ContactPurchasing`) seçilir.
- Geri alma: Kontak sekmeleri bu tanımlara bağlı olduğu için önce kontak tarafındaki seçimler temizlenir; ekranlar `delete_wizard` ile silinir, tablolar yalnızca açık onayla `dropTables: true` ile düşürülür.
Departmanların iç ve dış ihtiyaç duydukları malzemeleri satınalmaya iletmesi. Talep eden personel talebi ve satırlarını girer, onaya gönderir; talep önce talep edenin departman onaycısına, sonra satınalmaya düşer. Onaylanan talep Tüm Talepler listesinde satınalma ekibinin işine düşer; teklif toplama süreci buradan başlar. Teklif, sipariş, transfer ve stok miktarı bu dalın kapsamında değildir.
- Wizard List ekranları + menüsüz satır alt formu + Grid Workflow. Taleplerim ve iki onay listesi aynı tabloyu (`Prc_T_MaterialRequest`) filtreyle gösterir; Tüm Talepler başlık × kalem görünümünden (`Prc_V_MaterialRequestLine`) okur, her kalem bir satırdır.
- Departman onaycısı: `Adm_T_Approver`'da Onay Yeri = Satınalma (`Purchase`) ve talebin departmanı. Satınalma onaycısı Onaycılar'da tanımlanmaz: Satınalma Onayı Bekleyenler ekranında karar verebilen, yani `App.Prc.MaterialRequestPurchaseApproval.Update` yetkisi doğrudan ya da rolüyle verilmiş aktif kullanıcılardır (satınalma ekibinin rolüne bu yetki verilir). Herhangi bir onaycının onayı yeterli.
- Taslak aşaması: kayıt Taslak açılır; akış platformun Onaya Gönder işlemiyle başlar (`WorkflowDto.ApprovalIsManualStart: true` — yoksa yeni kayıt akışı kendiliğinden başlatır ve satır girilemez).
- İş akışı kolonları tablo tasarımcısının Workflow şablonundaki dörtlüdür: `ApprovalUserName` nvarchar(256) (onaycı kullanıcı adları), `ApprovalStatus` nvarchar(50) (bulunulan düğümün başlığı), `ApprovalDate` datetime, `ApprovalDescription` nvarchar(200); dört ekranın `WorkflowDto`'su bunlara bağlıdır. Departman ve satınalma kararları ayrı kolonda tutulmaz; her karar (karar veren, açıklama, red nedeni) iş akışı notlarına yazılır.
- Onay ve red bilgileri popup düzenleme formunda yer almaz (iş akışı yazar); listede kolon olarak görünür.
- Red nedeni ayrı kolonda tutulmaz: onay düğümleri red sırasında Red Nedenleri listesinden (`Prc_T_RejectReason`, zorunlu) seçim ister; seçilen neden ve not `ApprovalDescription`'a ve iş akışı notuna yazılır.
- Satır tablosu `Prc_T_MaterialRequestItem` adıyla açıldı (birim kolonu `Adm_T_Uom.Id` ile aynı tipte, nvarchar). İlk açılan `Prc_T_MaterialRequestLine` scripti (UomId uniqueidentifier) kullanılmıyor.
- Talebin durumu iş akışından gelir: `ApprovalStatus` boş (taslak) › Departman Onayı› Satınalma Onayı› Onaylandı ya da Reddedildi. Onaylanan talep satınalmada aynı alanda ilerler: kalemi taslak teklif talebindeyse Teklif Talebi, gönderilmiş (ya da siparişe dönüşmüş) teklif talebindeyse Teklif Talebi Gönderildi, iptal olmayan bir siparişteyse Satınalma Siparişi; kalemler belgelerden çıkarılır ya da belgeler iptal edilirse Onaylandı'ya döner. Kalemler farklı aşamadaysa en ileri aşama yazılır (`Prc_P_MaterialRequestSyncStatus`). Ayrı`Status` kolonu yoktur; karşılama satır durumundan (Bekliyor / Tamamlandı / İptal) izlenir.
Talep Satırları (`App.Prc.MaterialRequestLine`) menüsüz alt formdur; Taleplerim ve iki onay listesinde sekmedir (Tüm Talepler kalemleri kolon olarak gösterir). Red Nedenleri (`App.Prc.RejectReason`) Satınalma › Tanımlamalar altındadır (bkz. Tanımlamalar).
- Prosedürler `Prc_P_MaterialRequestAfterSave(@Id)`, `Prc_P_MaterialRequestSyncStatus(@DocId)` (teklif/sipariş Recalc'i, durum işlemi ve belge silme sonrasında; `@DocId` boşsa onaylanmış bütün talepler).
-`Prc_P_MaterialRequestAfterSave` talep kaydı/güncellemesi sonrasında çalışır ve onaycı kullanıcı listelerini (`DeptApproverUserNames`, `PurchaseApproverUserNames`) Onaycılar'dan yeniden yazar. Onaycılar sonradan değişirse talep yeniden kaydedilene kadar liste eski kalır. İki liste formda ve listede gizlidir; iş akışı onaycıyı bu alanlardan okur (`@DeptApproverUserNames`, `@PurchaseApproverUserNames`).
- Onaya gönderilmiş talebe satır eklenemez ve satır silinemez (alt form Insert/Delete Before komutu). Onay sürecindeki ya da onaylanmış talep silinemez; reddedilen talep silinebilir.
- Ürün listesi yalnız aktif ve satın alınabilir ürünleri gösterir; birim ürünün satınalma biriminden (yoksa biriminden) kopyalanır, salt okunurdur.
- Şube ayrı alandır ve iki zinciri süzer: Şube › Departman, Şube › Depo › Konum; şube değişince departman, depo ve konum, depo değişince konum temizlenir. Talep eden değişince şubesi ve departmanı kullanıcının departmanından gelir; yeni kayıtta şube ve departman oturumdaki kullanıcınınkidir. Açıklama HTML editörüdür, formda tam satırdır.
- Tüm Talepler'de düzenleme `UpdateCommand` ile yalnız `Prc_T_MaterialRequestItem`'ın `PurchaseResponsibleUserId` ve `LineStatus` kolonlarını yazar; başlık alanları salt okunurdur. Kartlar kalemi değil talebi sayar (tablodan okur).
- Onaycı listesi boşsa akış o adımda hata verir: Onaycılar'a ilgili departman için Satınalma satırı tanımlanmalı ve en az bir kullanıcıya (ya da rolüne) Satınalma Onayı Bekleyenler güncelleme yetkisi verilmelidir.
Yetki ağacı: `App.Prc`›`App.Prc.MaterialRequests`› her liste (+ Create/Update/Delete/Export/Import/Note); alt form `App.Prc.MaterialRequestLine` listenin altında. Talep edenlere Taleplerim (+Create, +Update), onaycılara ilgili onay listesi (+Update), satınalma ekibine Tüm Talepler verilir; satır alt formunun yetkisi de role verilmelidir. Onay listeleri yalnız kullanıcının onayına düşen kayıtları gösterir. Kiracı kapsamlı, şube filtresi yok.
2. BT'den Ali Taleplerim'de yeni talep açar (MT-2026-00001), depo/konum seçer, Talep Satırları'na 10 adet ürün, termin ve neden girer; Onaya Gönder der.
3. Ayşe Departman Onayı Bekleyenler'de talebi onaylar; talep Satınalma Onayı Bekleyenler'e geçer.
- **Talebim onay listesinde görünmüyor?** Onaycılar'da talebin departmanı için aktif Satınalma satırı olmalı; satınalma adımı için en az bir aktif kullanıcının (doğrudan ya da rolüyle) Satınalma Onayı Bekleyenler güncelleme yetkisi olmalıdır. Onaycılar ya da yetkiler talep açıldıktan sonra değiştiyse talebi bir kez kaydedin.
- **Red nedeni nereden seçilir?** Reddet düğmesinin açtığı karar penceresinde, Satınalma › Tanımlamalar › Red Nedenleri listesinden; neden ve not Onay Açıklaması kolonunda görünür.
Satınalma ekibinin onaylanmış malzeme taleplerinden tedarikçilere teklif talebi (RFQ) açması, aynı ihtiyacı birden fazla tedarikçiye sorarak ihale gibi fiyat toplaması, gelen fiyat ve terminleri kıyaslayıp en uygun teklifi kalem bazında satınalma siparişine dönüştürmesi; gerekirse teklif toplamadan doğrudan sipariş yazması ve tedarikçiyle çerçeve sözleşme yönetmesi. Kullanıcılar satınalma personeli ve alıcılardır. Tedarikçinin linkten kendi fiyatını girdiği portal, mal kabul (alınan/kalan miktar), tedarikçi faturası (faturalanan, Fatura Yükle) ve analitik dağılım kapsam dışıdır.
- Teklif talebi ve satınalma siparişi **ayrı belgelerdir** (`Prc_T_PurchaseRfq`, `Prc_T_PurchaseOrder`), ayrı numaratörle: `PurchaseRfq` (RFQ00001) ve `PurchaseOrder1` (P00001). Sözleşme `PurchaseAgreement1` (BO00001).
- **Tedarikçi başına bir teklif belgesi.** Aynı ihtiyaç için açılan belgeler bir ihaledir: `TenderGroupId` ihalenin kök (ilk) belgesinin Id'sidir. Alternatif tedarikçiler **Alternatif Oluştur** modalında (`App.Prc.PurchaseRfqAlternativeSupplier`: ihalede belgesi olmayan aktif kontaklar) ListForm'un çoklu seçimiyle seçilir, **Seçilenler İçin Oluştur** butonu seçili her kontak için o anki kalemleriyle birlikte kopya belge açılır (fiyat tedarikçinin fiyat listesinden, para birimi ve koşullar kontak kartından). Bir tedarikçi ihalede bir kez bulunur.
- Bir teklif birden fazla malzeme talebinden oluşabilir: belgenin **Talep Kalemleri** sekmesi aktarılabilir bütün talep kalemlerini talebe göre gruplu listeler; satırlar ListForm'un çoklu seçimiyle (`Selection.Mode = multiple`, satır başı kutusu) seçilir ve sekmenin araç çubuğundaki **Seçilenleri Aktar** butonu (Commands, `OnClick`) seçili her satır için `list-form-data/update` çağırır; ekranın `UpdateCommand`'ı (`Prc_P_PurchaseImportItem @Id`) kalemi kopyalar. Ekran bir modalda açıksa (Talepten Aktar, Alternatif Oluştur) buton işi bitince modalı kapatır ve ana liste yenilenir; sekmede açıksa yalnız listeyi yeniler. Hata olursa modal açık kalır. Ayrı bir işaret kolonu yoktur. Aynı sekme teklifsiz yazılan taslak siparişte de vardır. Talep ilişkisi kalem düzeyindedir (`MaterialRequestItemId`).
- Popup (Yeni/Düzenle) formu yalnız belgenin kendi alanlarını taşır; talep aktarımı, alternatif, fiyat girişi ve durum işlemleri liste araç çubuğundaki butonlardadır (sekmelerden de yapılabilir). Vergi hariç / KDV / toplam kalemlerden hesaplandığı için formda değil listede görünür.
- Hızlı fiyat girişi: **Fiyat Karşılaştırması** sekmesi toplu düzenleme modundadır; ihalenin bütün tedarikçilerinin birim fiyat, teslim tarihi ve Seçili değerleri tek tabloda satır içinde yazılıp birlikte kaydedilir. Aynı ekran liste araç çubuğundaki ayrı**Fiyat Girişi** butonuyla modalda da açılır. Satır kaydı`Prc_P_PurchaseRfqComparisonSave`'dir: batch kaydı satırları eşzamanlı istekle gönderdiği için yordam önce ihalenin kök teklifini kilitler (`UPDLOCK`/`FOR UPDATE`, `TenderGroupId`), sonra satırı günceller ve teklifi yeniden hesaplar; grid ihaledeki bütün tedarikçi tekliflerinin satırlarını taşıdığı için kilit ihale düzeyindedir ve satırlar sırayla işlenir. `IX_Prc_T_PurchaseRfqLine_PurchaseRfqId` yeniden hesabın tablo taraması yapıp başka tekliflerin satırlarını kilitlemesini önler.
- Fiyat Girişi'nde birim fiyatı 0'dan büyük kaydedilen teklif, yanıtı`Waiting` ise kendiliğinden `Quoted` olur; boşsa Teklif Tarihi kayıt anı, Teklif Geçerliliği sipariş son tarihi (`OrderDeadline`) yazılır (`Prc_P_PurchaseRfqComparisonSave`). Elle girilmiş tarih ve `NotQuoted` yanıtı değişmez.
- Araç çubuğu butonları ListForm'un Commands (özel buton) kaydıyla, `OnClick` modunda yazılır; çekirdek değişmez. Talepten Aktar, Alternatif Oluştur ve Fiyat Girişi seçili satırla aynı`PurchaseDocGrid` diyaloğunu (`ui/src/views/purchasing/PurchaseDocGridDialog.tsx`) açar; buton `listFormCode`, başlık (`title`) ve açıklama (`info`) dil anahtarını verir. Diyalog belgeye (`BaseId`) süzülmüş tek ekranı (`App.Prc.*ImportItem`, `App.Prc.PurchaseRfqAlternativeSupplier`, `App.Prc.PurchaseRfqComparison`) platformun Grid bileşeniyle gösterir; ayrı bir uç yoktur.
- Teklif durumları: Taslak (Teklif Talebi) › Teklif Talebi Gönderildi (tedarikçiye e-posta kuyruğa alındı) › Satınalma Siparişi (dönüştürüldü) / İptal Edildi. Sipariş durumları: Taslak › Onaylandı / İptal; tekliften dönüşen sipariş onaylı açılır.
- **Kıyas (Fiyat Karşılaştırması):** fiyat `Sas_H_Currency.Rate` ile TL'ye çevrilir (kur = 1 birimin TL karşılığı). Puan = Fiyat ağırlığı× (en düşük TL fiyat / TL fiyat) + Termin ağırlığı× (en kısa termin günü / termin günü); termin günü = teslim tarihi − ihalenin açılış günü (en az 1). Ağırlıklar ihale genelinde tektir, varsayılan %70 fiyat / %30 termin, toplamı 100 olmalıdır. En yüksek puan **Önerilen**'dir. Fiyatı 0, terminsiz, "Teklif Verilmedi" ya da iptal edilmiş belgenin satırı puanlanmaz. Kalemin teslim tarihi boşsa belgenin Beklenen Geliş'i kullanılır.
- **Siparişe Dönüştür kalem bazındadır** (ihale genelinde, ihaledeki herhangi bir belgeden): kalemin **Seçili** satırı varsa o, yoksa Önerilen satır kazanır. Kazanan her teklif belgesi için ayrı satınalma siparişi açılır ve sipariş teklifin şubesini, operasyon türünü ve deposunu taşır; en az bir kalem kazanan teklif Satınalma Siparişi, hiç kazanamayan teklif İptal Edildi olur.
- **Kaynak** kolonu: teklifte kalemlerin talep numaraları; tekliften dönüşen siparişte teklif talep no; doğrudan yazılan siparişte talep numaraları.
- Durum butonları (Gönder, İhaleyi Gönder, Siparişe Dönüştür, Siparişi Onayla, İptal, Taslak olarak ayarla) onay sorar, işlemi gizli `PendingAction` alanına yazıp ekranın kendi güncelleme ucuyla (`list-form-data/update`) kaydeder; kayıt sonrası yordam işlemi `Prc_P_*SetStatus` ile çalıştırır ve alanı temizler. Alan formda görünmez.
- E-posta, bildirim kuyruğundan (`Adm_T_Notification`, kanal Mail) tedarikçinin kontak e-postasına gider; teklif e-postası fiyat içermez (ürün, miktar, istenen termin, teklif son tarihi), sipariş e-postası fiyatlı. Kuyruk mesajı 2048 karakterle sınırlıdır; çok kalemli belgede tablo kısalır.
- SQL tarafında açılan belgelerin (alternatif teklif, dönüşen sipariş) numarası numaratörden `Adm_P_SequenceNext` ile alınır; biçim `Sequence.GetNextSequence` ile aynıdır.
- Kullanıcı kararıyla kapsam dışı: tedarikçi portalı (fiyatı satınalma girer), Alınan/Kalan/Faturalanan ve Fatura Yükle. Firma kolonu açılmadı (kiracı kapsamı). Demo veri girilmedi.
Menüsüz alt formlar: teklif tarafında `App.Prc.PurchaseRfqLine`, `App.Prc.PurchaseRfqImportItem`, `App.Prc.PurchaseRfqQuote`, `App.Prc.PurchaseRfqOther`, `App.Prc.PurchaseRfqAlternative`, `App.Prc.PurchaseRfqAlternativeSupplier` (yalnız Alternatif Oluştur modalında), `App.Prc.PurchaseRfqComparison`; sipariş tarafında `App.Prc.PurchaseOrderLine`, `App.Prc.PurchaseOrderImportItem`, `App.Prc.PurchaseOrderOther`, `App.Prc.PurchaseOrderAlternative`; sözleşmede `App.Prc.PurchaseAgreementLine`.
- Görünümler: `Prc_V_MaterialRequestAvailableItem` (aktarılabilir talep kalemleri), `Prc_V_PurchaseImportItem` (Talep Kalemleri sekmesi: kalem alabilen açık belge × aynı şubedeki aktarılabilir kalem, `Id` = belge|kalem), `Prc_V_PurchaseRfqComparison` (kıyas ve puan), `Prc_V_PurchaseRfqAlternative` (ihalenin belgeleri; teklif ve sipariş için `BaseId`), `Prc_V_PurchaseRfqAlternativeSupplier` (açık teklif × ihalede belgesi olmayan aktif kontak, `Id` = teklif|kontak), `Prc_V_PurchaseAgreementLine` (sözleşmenin sipariş edilen miktarı).
- Yordamlar: `Prc_P_PurchaseRfq{AfterSave,Recalc,ComparisonSave,CreateAlternative,FromAgreement,Send,SetStatus,Award}`, `Prc_P_PurchaseOrder{AfterSave,Recalc,Send,SetStatus}`, `Prc_P_PurchaseImportItem` (teklif ve sipariş için ortak, kalem bazlı aktarım), `Adm_P_SequenceNext`.
- Teklif kaydı ve Tedarikçi Teklifi / Diğer Bilgiler sekmesindeki kayıt sonrası`Prc_P_PurchaseRfqAfterSave`: ağırlık toplamı 100 kontrolü; boş ödeme/teslimat koşulu ve Incoterm konumu tedarikçinin Satınalma sekmesinden (alıcı yalnız ilk kayıtta); yanıt Bekleniyor dışına alınınca boş teklif tarihi; ağırlıkların ihalenin diğer belgelerine yazılması; sözleşme kalemleri (yalnız kalemsiz belgede); tutarlar; buton işlemi (`PendingAction`).
- Aktarım (`Prc_P_PurchaseImportItem`, seçilen her satır için): belge teklif aşamasında (teklif) ya da taslak (sipariş); talep Onaylandı; kalem Karşılama = Satınalma, Durum = Bekliyor; iptal olmayan bir teklifte ya da siparişte yer almıyor. Fiyat: sözleşme kalemi › tedarikçi fiyatı (`Inv_T_ProductSupplier`) › 0. Kalem bu arada başka belgeye geçmişse hata.
- Alternatif (`Prc_P_PurchaseRfqCreateAlternative @Key, @UserId`, `@Key` = teklif|kontak, seçilen her satır için): belge teklif aşamasında olmalı; tedarikçinin ihalede iptal olmayan belgesi varsa hata.
- Kalem Tutarı KDV dahildir: Tutar = yuvarla(yuvarla(Miktar × Birim Fiyat) × (1 + Oran/100)); Vergi Hariç = Σ yuvarla(Miktar × Birim Fiyat); KDV = Σ(Tutar − kalemin vergi hariç tutarı); Toplam = Vergi Hariç + KDV = Σ Tutar. Formdaki script ve `Prc_P_Purchase{Rfq,Order}Recalc` aynı formülü kullanır; kalem her eklenip/değişip/silindiğinde yeniden hesaplanır.
- Teklif işlemleri: E-posta ile Gönder (taslak ya da gönderilmiş; kalem ve tedarikçi e-postası şart; Taslak → Gönderildi) · İhaleyi Gönder (ihalenin bütün taslak belgeleri) · Siparişe Dönüştür (taslak ya da gönderilmiş; ihale daha önce dönüştürülmemiş olmalı) · İptal (siparişe dönüşmüş teklif iptal edilemez) · Taslak olarak ayarla (yalnız iptalden; ihale siparişe dönüşmüşse olmaz).
- Siparişe dönüşmüş ya da iptal edilmiş teklif ve kalemleri değiştirilemez; iptal edilmiş siparişin kalemi değiştirilemez. Gönderilmiş ya da dönüşmüş teklif silinemez; yalnız teklifsiz yazılmış taslak sipariş silinebilir.
- Fiyat Karşılaştırması sekmesinde birim fiyat, teslim tarihi ve Seçili düzenlenir (ilgili teklifin toplamı yeniden hesaplanır). Siparişe dönüşte kazanan satırlar Seçili olarak işaretlenir.
- Sözleşmede bitiş tarihi başlangıçtan önce olamaz; sözleşme seçilen boş teklif kalan (siparişe dönüşmemiş) miktarlarla dolar.
Yetki ağacı: `App.Prc`›`App.Prc.Orders`› teklif ve sipariş listeleri, `App.Prc`›`App.Prc.PurchaseAgreement` (+ Create/Update/Delete/Export/Import/Note). Her alt formun yetkisi kendi listesinin altındadır: teklif sekmeleri `App.Prc.PurchaseRfq`, sipariş sekmeleri `App.Prc.PurchaseOrder` altında; sekmeler ekranlar arasında paylaşılmaz. Teklif kullanıcısına Fiyat Karşılaştırması'nın Update yetkisi de verilmelidir (fiyat ve seçim buradan girilir). Yetkiler hiçbir role otomatik atanmaz. Kiracı kapsamlı, şube filtresi yok.
1. Ali'nin MT-2026-00015 ve Ayşe'nin MT-2026-00016 talepleri onaylanır.
2. Satınalma Teklif Talepleri'nde yeni kayıt açar (tedarikçi "3K Kutu"), kaydeder; detayda Talep Kalemleri sekmesinde iki talebin kalemlerini işaretleyip Kaydet der. Teklifler sekmesinde Ekle ile "5 Mutlu Gıda" ve "Kartela"yı ekler. RFQ00001 (3K) kalemleriyle, RFQ00002 ve RFQ00003 kopya olarak aynı ihalede açılır; Kaynak = MT-2026-00015, MT-2026-00016.
3. Araç çubuğunda İhaleyi Gönder: üç tedarikçiye fiyatsız teklif e-postası kuyruğa alınır, belgeler Gönderildi olur.
4. Tedarikçilerin dönüşleri Fiyat Karşılaştırması sekmesinde tek tabloda birim fiyat ve teslim tarihi olarak yazılıp bir kez kaydedilir; her ürün için en yüksek puanlı satır Önerilen işaretlenir. Kullanıcı bir üründe daha pahalı ama güvendiği tedarikçiyi Seçili yapar.
5. Siparişe Dönüştür butonu: kazanan iki tedarikçiye P00007 ve P00008 açılır (Kaynak RFQ00001 / RFQ00003), RFQ00002 İptal Edildi olur.
6. Satınalma Siparişleri'nde E-posta ile Gönder butonuyla siparişler tedarikçiye gider; mal gelince Varış girilir.
- **Butonlar nerede?** Listede bir belge seçilir; işlemler araç çubuğundadır (detay sayfasının araç çubuğunda da görünür). Buton yetkisi: durum işlemleri ekranın Update, Talepten Aktar ilgili Talep Kalemleri ekranının Update, Alternatif Oluştur Teklifler ekranının Create yetkisi.
- **Talep Kalemleri sekmesi boş?** Talep onaylanmış olmalı ve aktarılabilir (Satınalma, Bekliyor, başka açık teklifte ya da siparişte olmayan) kalemi bulunmalı; belge Teklif Talebi / Gönderildi (sipariş için Taslak) durumunda olmalı; belge yalnız kendi şubesindeki taleplerin kalemlerini görür.
- **Talepten Aktar / Alternatif Oluştur / Fiyat Girişi modalı nasıl kullanılır?** Talepten Aktar'da aktarılacak satırlar satır başındaki kutuyla seçilir (başlıktaki kutu sayfadakilerin tümünü seçer) ve araç çubuğundaki Seçilenleri Aktar'a basılır. Alternatif Oluştur'da ihaleye eklenecek tedarikçiler satır başındaki kutuyla seçilip Seçilenler İçin Oluştur'a basılır (iki modal da iş bitince kendiliğinden kapanır). Fiyat Girişi ayrı butondur: bütün tedarikçilerin fiyat ve terminleri yazılıp tablonun Kaydet'ine basılır, modal Kapat ile kapanır.
- **Alternatif ekledim, kalemleri eksik?** Alternatif, açıldığı andaki kalemleri kopyalar; sonradan eklenen kalem yalnız eklendiği belgededir.
- **Önerilen neden boş?** Satırın fiyatı ve teslim tarihi (ya da belgenin Beklenen Geliş'i) girilmiş olmalı; Teklif Verilmedi yanıtlı ya da iptal edilmiş belge kıyasa girmez.
- **E-posta gitmedi?** Tedarikçinin kontak e-postasını, Bildirim Kuralları'nda ilgili tipin Mail kuralını ve Bildirimler ekranındaki satırı (IsSent) kontrol edin; NotificationWorker aktif olmalı.
- **Farklı para birimindeki teklif nasıl kıyaslanıyor?** Para Birimleri ekranındaki kurla TL'ye çevrilerek; kur güncel değilse kıyas yanıltır.
- Geri alma: önce ana ekranlar (`Prc_PurchaseRfq`, `Prc_PurchaseOrder`, `Prc_PurchaseAgreement`), sonra alt formlar `delete_wizard` ile silinir; tablolar yalnız açık onayla düşürülür.
| Açıklama | Teklif Talepleri — her tedarikçi için ayrı satınalma belgesi; aynı ihtiyaç için açılan belgeler bir ihale oluşturur ve siparişten önce kıyaslanır. |
| Alt formlar | `App.Prc.PurchaseRfqLine` (Id → PurchaseRfqId), `App.Prc.PurchaseRfqImportItem` (Id → BaseId), `App.Prc.PurchaseRfqQuote` (Id → Id), `App.Prc.PurchaseRfqOther` (Id → Id), `App.Prc.PurchaseRfqAlternative` (Id → BaseId), `App.Prc.PurchaseRfqComparison` (Id → BaseId) |
| Açıklama | Satınalma Siparişleri — tedarikçilere verilen siparişler; teklif talebi ihalesinden dönüştürülür ya da teklif toplamadan doğrudan yazılır. |
| Alt formlar | `App.Prc.PurchaseOrderLine` (Id → PurchaseOrderId), `App.Prc.PurchaseOrderImportItem` (Id → BaseId), `App.Prc.PurchaseOrderOther` (Id → Id), `App.Prc.PurchaseOrderAlternative` (Id → BaseId) |
| Açıklama | Sipariş Talep Kalemleri — onaylı malzeme taleplerinin henüz hiçbir teklifte ya da siparişte olmayan kalemleri, teklifsiz yazılan taslak sipariş için listelenir. |