{ "ListFormCode": "App.DevRequests", "KeyFieldName": "Id", "GeneratedAt": "2026-10-06T21:01:53.4632621Z", "Order": 0, "Rows": [ { "Id": "5d11851e-5f00-4a0b-b5a3-b8211e56c8b5", "TenantId": null, "UserName": "system@sozsoft.com", "RequestDate": null, "Status": "Backlog", "Title": "Inventory -> Tanımlamalar", "Description": "
Ürünler : Ürün listesi ve detayı aşağıdaki örneklendirilmiştir. Ürünler Satış, Masraflar, Satınalma olarak 3 seçeneği var. Satış seçerse sadece Satış siparişlerinde görünür. Satınalma seçerse Satınalınabilir anlamına gelir. Ürün Türü Mal veya Hizmet olabilir. Envanter Takibi yapılıp yapılmayacağı seçilebilir. Eğer takip edilecekse Seri No, Lot Numarası veya Miktara göre seklinden seçilecek.
Nitelikler ve Varyantlar seçeneğinde yazılabilecek değerler Nitelik olarak tanımlanmalı. İçerisindeki değerleri de tanımlanabilir. Nitelik seçilip değerleri birden fazla şekilde yapılabilir. Eğer nitelikli bir ürün tanımlanırsa o varyantlı ürün listeler de seçilecektir.
Satınalma kısmında o ürünü hangi tedarikçiden hangi bedele aldığımızı belirtiyoruz. Ürün ve reçetede kullanılan Birim sütunun Adm_T_Uom tablosu ile ilişkili olmalı. Adm_T_Uom tablosundaki Id bilgisi nvarchar(64)
Ürün listesinde ürün adı, resmi, Satış, Masraflar ve Satınalma sütunlarından oluşmalı. Ayrıca yukarıdaki Ürün lisesindeki sütunlar olabilir. Diğer bilgiler Ürün listesindeki Detay ksımında Tablar şeklinde resimdeki gibi görüntülenmeli. App.Definitions.Contact gibi olabilir.
Nitelikler kısmı Nitelik kısmında seçilmeli ve Değerler birden fazla seçebilecek bir sütundan oluşmalı.
Reçeteler : Ürünlerin hammadde ve yarı mamülerin ve tüketim miktarlarının belirlendiği kısımdır. Ayrıca tanımlanan operasyonların tanımlandığı listedir. Hangi bileşenlerin hangi operasyon ile tüketildiği belirlenecektir. Ürün bazında da reçete yazılabilir. Her bir ürünün Varyantı bazında da reçete yazılabilri. Bom türü eklenmeyecek
İş Merkezi tanımlamaları : Inventory -> Tanımlamalar menüsünde yer alacaktır.İş Merkezi lsitesinde iş merkezi adı, etiketler, çalışma saatleri (Weekly working time limit (h) ile setting kısmından alınabilir.)İş Merkezi lsitesinde iş merkezi adı, etiketler, çalışma saatleri (Weekly working time limit (h) ile setting kısmından alınabilir.) İş merkezi lsitesinin detayında Genel Bİlgi, Ürün kapasitesi bilgilerini tab olarak göstermeli
Operasyonlar : Inventory -> Tanımlamalar menüsünde yer alacaktır.Operasyon Listesinde Operasyon Adı, İş Merkezi Adı, Varsayılan Süre sütunlarından oluşmalı. Detay butonu ile Açıklamalar listesinde yer almalı
Eğer nitelikli bir ürün tanımlanırsa o zaman Varyantlı liste oluşur ve tüm sistem varyantlı seçeneker çalışır. Eğer nitelik tanımlamazsa ana ürün seçilecektir.
Ürün reçetesine genel bakış raporu bu ERP ssitemlerdeki BOM ile aynı. Reçetelerin malzemelerinde recursive şekilde iç içe kullanılan diğer malzemeler ve miktarların hesaplanması gerekiyor. Bu ksıım Tree Layout olarak sunulmalı.
Envanter ve üretimin ana verisini kurmak: ürün kartı (satış/masraf/satınalma bayrakları, mal/hizmet, envanter takibi), nitelik–değer–varyant yapısı, tedarikçi fiyatları, iş merkezleri, operasyonlar, ürün ve varyant bazında reçeteler (BOM) ve iç içe açılan reçete genel bakışı (ağaç). Kullanıcılar stok, satınalma ve üretim planlama personelidir; sonraki satış/satınalma/üretim belgeleri bu ekranları lookup kaynağı olarak kullanır.
\n\nWizard List ekranları + alt formlar. Kontaklar deseni: ana liste yalnız istenen kolonları taşır, diğer alanlar aynı tabloyu okuyan TabType: Form alt formlarda (ilişki Id → Id, yalnız düzenleme). Varyant üretimi Custom Endpoint Inventory.GenerateVariants (mevcut kayıt korunur); tetikleyici Ürün › Genel Bilgi sekmesinin açılış EditorScript'i (api()). İş merkezi çalışma saati için GET Custom Endpoint Inventory.WeeklyWorkingHours (ayar istemciye açık değil). Reçete genel bakışı Wizard List, Query kaynağı, Tree görünümü (RowId / ParentRowId); Query türetilmiş tabloya sarıldığından recursive CTE kullanılamaz, açılım CROSS APPLY ile sabit 4 seviye. Custom component gerekmez.
Envanter › Tanımlamalar › {ekran}
\n| Seviye | Kod | Ad (TR / EN) | İkon | Durum |
|---|---|---|---|---|
| Kök | App.Inventory | Envanter / Inventory | FcPackage | Yeni |
| Ara | App.Inventory.Definitions | Tanımlamalar / Definitions | FcSettings | Yeni |
| Ekran | App.Inventory.ProductCategory | Ürün Kategorileri / Product Categories | FcFolderTree | Yeni |
| Ekran | App.Inventory.Attribute | Nitelikler / Attributes | FcList | Yeni |
| Ekran | App.Inventory.WorkCenter | İş Merkezleri / Work Centers | FcFactory | Yeni |
| Ekran | App.Inventory.Operation | Operasyonlar / Operations | FcProcess | Yeni |
| Ekran | App.Inventory.Bom | Ürün Reçeteleri / Bills of Materials | FcDataSheet | Yeni |
| Ekran | App.Inventory.ProductVariant | Ürün Varyantları / Product Variants | FcGrid | Yeni |
| Ekran | App.Inventory.Product | Ürünler / Products | FcPackage | Yeni |
| Ekran | App.Inventory.BomOverview | Reçete Genel Bakış / BoM Overview | FcTreeStructure | Yeni |
ModuleId: Inv · İzin grubu: App.Inventory · Route: /admin/list/{ListFormCode}. Menü sırası deploy sırasını (bağımlılık sırası) izler.
\nYetki: App.Inventory › App.Inventory.Definitions › {ListFormCode}; menüsüz alt formlar taşıyıcı listenin altında.
14 tablonun hepsi yeni (create_table; Id PK, TenantId, tam audit + soft delete otomatik; decimal = 18,4). UomId nvarchar(64) = Adm_T_Uom.Id, lookup host + kiracı birimleri, DbSourceType 16.
| Tablo | Tanım tablosu | Kolonlar (* NOT NULL, = varsayılan) | Lookup |
|---|---|---|---|
| Inv_T_ProductCategory | Evet | Name* (128), ParentId, IsActive* =1 | ParentId → kendisi |
| Inv_T_Attribute | Evet | Name* (128), DisplayType* (16) ='Radio', VariantCreation* (16) ='Always', IsActive* =1 | static |
| Inv_T_AttributeValue | Hayır | AttributeId*, Name* (128), IsCustom* =0, DefaultExtraPrice* =0, ColorCode (16), Image MAX, SortOrder* int =0 | Attribute |
| Inv_T_Product | Evet | Name* (256), Image MAX, IsFavorite* =0, CanBeSold* =1, CanBeExpensed* =0, CanBePurchased* =1, ProductType* (16) ='Goods', IsInventoryTracked* =0, TrackingType (16), SalesPrice* =0, SalesVatRate* =20, Cost* =0, PurchaseVatRate* =20, CategoryId, UomId* (64) ='Adet', InternalReference (64), Barcode (64), GtipCode (32), InternalNote MAX, PurchaseControlPolicy* (16) ='Received', PurchaseDescription MAX, ResponsibleUserId, Weight, Volume, OriginCountry (128), LotValuation* =0, CustomLotSerialFormat (64), ReceiptNote/DeliveryNote/InternalTransferNote MAX, IncomeAccount (32), ExpenseAccount (32), HasVariants* =0, IsActive* =1 | ProductCategory, Adm_T_Uom, AbpUsers, Sas_H_Country |
| Inv_T_ProductAttributeLine | Hayır | ProductId*, AttributeId*, ValueIds* MAX (çoklu seçim) | Attribute, AttributeValue (cascade) |
| Inv_T_ProductVariant | Evet | ProductId*, CombinationKey* (900), ValueText (512), InternalReference (64), Barcode (64), ExtraPrice* =0, Cost* =0, IsActive* =1 | Product |
| Inv_T_ProductSupplier | Hayır | ProductId*, ProductVariantId, ContactId*, MinQuantity* =1, UomId* (64) ='Adet', UnitPrice* =0, Currency* (16) ='TRY', LeadTimeDays* int =0 | Adm_T_Contact, ProductVariant, Adm_T_Uom, Sas_H_Currency |
| Inv_T_WorkCenter | Evet | Name* (128), Code (32), Tags (256), AlternativeWorkCenterIds MAX, WeeklyWorkingHours decimal, TimeEfficiency* =100, OeeTarget* =90, SetupTimeMin* =0, CleanupTimeMin* =0, CostPerHour* =0, CostPerEmployeeHour* =0, ExpenseAccount (32), AllowedUserIds MAX, Description MAX, IsActive* =1 | WorkCenter, AbpUsers |
| Inv_T_WorkCenterCapacity | Hayır | WorkCenterId*, ProductId*, Capacity* =1, SetupTimeMin, CleanupTimeMin | Product |
| Inv_T_Operation | Evet | Name* (128), WorkCenterId*, ApplyOnVariantValueIds MAX, CostBasis* (16) ='Actual', DurationMode* (16) ='Fixed', DefaultDurationMin* =60, IsActive* =1 | WorkCenter, AttributeValue |
| Inv_T_OperationInstruction | Hayır | OperationId*, Title* (256), Type* (16) ='Text', Reference MAX, SortOrder* int =0 | static |
| Inv_T_Bom | Evet | ProductId*, ProductVariantId, Quantity* =1, UomId* (64) ='Adet', Reference (64), ReadinessPolicy* (16) ='AllComponents', FlexibleConsumption* (16) ='Warning', OperationType (64), ManufacturingLeadDays* int =0, PreparationDays* int =0, UseBatchSize* =0, BatchSize, IsActive* =1 — BomType yok | Product, ProductVariant, Adm_T_Uom |
| Inv_T_BomOperation | Hayır | BomId*, OperationId*, WorkCenterId*, DurationMin* =0, SortOrder* int =0 | Operation, WorkCenter |
| Inv_T_BomLine | Hayır | BomId*, ComponentProductId*, ComponentVariantId, Quantity* =1, UomId* (64) ='Adet', BomOperationId, ApplyOnVariantValueIds MAX | Product, ProductVariant, Adm_T_Uom, BomOperation |
Static kümeler (TR/EN): DisplayType Radio/Pills/Select/Color/Multi/Image · VariantCreation Always/Dynamic/Never · ProductType Goods/Service/Combo · TrackingType Serial/Lot/Quantity · PurchaseControlPolicy Ordered/Received · ReadinessPolicy AllComponents/FirstOperation · FlexibleConsumption Allowed/Warning/Blocked · CostBasis Actual/Theoretical · DurationMode Fixed/Computed · Instruction Type Text/Pdf/Image/Link.
\nBomOverview Query: TableName \"Q\", KeyFieldName RowId (DbSourceType 16), ParentRowId ağaç ebeveyni; Inv_T_Bom'un TenantId ve IsDeleted'ı seçilir. Kök satır (Level 0, ParentRowId NULL) = reçete; bileşen ve operasyon satırları ebeveynlerinin altında; bileşenin aktif reçetesi (varyantı eşleşen, yoksa varyantsız, en yeni) varsa satırları o bileşenin altında açılır, 4 seviyeye kadar. Miktar = Π(üst satır miktarı ÷ alt reçete miktarı) × satır miktarı; bileşen maliyeti = miktar × (varyant maliyeti, yoksa ürün maliyeti); operasyon maliyeti = süre/60 × CostPerHour; kök ve üst bileşen ürünleri yeniden açılmaz. Kolonlar: RowId, ParentRowId, BomId, RootProduct, Level, RowType, ItemName, Quantity, Uom, UnitCost, TotalCost.
\n\n| Taşıyıcı › Sekme | Hedef | TabType | Menü | İlişki | Ekle/Düzenle/Sil |
|---|---|---|---|---|---|
| Nitelik › Nitelik Değerleri | App.Inventory.AttributeValue | List | Menüsüz | Id → AttributeId | ✓/✓/✓ |
| Ürün › Genel Bilgi | App.Inventory.ProductGeneral | Form | Menüsüz | Id → Id | –/✓/– |
| Ürün › Nitelik & Varyantlar | App.Inventory.ProductAttributeLine | List | Menüsüz | Id → ProductId | ✓/✓/✓ |
| Ürün › Varyantlar | App.Inventory.ProductVariant | List | Menülü | Id → ProductId | –/✓/– |
| Ürün › Satınalma | App.Inventory.ProductPurchasing | Form | Menüsüz | Id → Id | –/✓/– |
| Ürün › Tedarikçiler | App.Inventory.ProductSupplier | List | Menüsüz | Id → ProductId | ✓/✓/✓ |
| Ürün › Stok | App.Inventory.ProductStock | Form | Menüsüz | Id → Id | –/✓/– |
| Ürün › Muhasebe | App.Inventory.ProductAccounting | Form | Menüsüz | Id → Id | –/✓/– |
| Ürün › Ürün Reçeteleri | App.Inventory.Bom | List | Menülü | Id → ProductId | ✓/✓/✓ |
| Varyant › Varyant Reçeteleri | App.Inventory.Bom | List | Menülü | Id → ProductVariantId, ProductId → ProductId | ✓/✓/✓ |
| İş Merkezi › Genel Bilgi | App.Inventory.WorkCenterGeneral | Form | Menüsüz | Id → Id | –/✓/– |
| İş Merkezi › Ürün Kapasitesi | App.Inventory.WorkCenterCapacity | List | Menüsüz | Id → WorkCenterId | ✓/✓/✓ |
| Operasyon › Açıklamalar | App.Inventory.OperationInstruction | List | Menüsüz | Id → OperationId | ✓/✓/✓ |
| Operasyon › Ayarlar | App.Inventory.OperationSettings | Form | Menüsüz | Id → Id | –/✓/– |
| Reçete › Bileşenler | App.Inventory.BomLine | List | Menüsüz | Id → BomId | ✓/✓/✓ |
| Reçete › Operasyonlar | App.Inventory.BomOperation | List | Menüsüz | Id → BomId | ✓/✓/✓ |
Inventory.GenerateVariants (POST) — kayıt zaten var, değişmez. Yeni Custom Endpoint Inventory.WeeklyWorkingHours (GET /inventory/weekly-working-hours/): kiracı ayarı, yoksa global, yoksa tanım varsayılanı (45).App.DeveloperKit.CustomEndpoints.Post ve .Get yetkisi gerekir.Inventory.WeeklyWorkingHours'tan doldurur (değiştirilebilir). Formda ayrıca Kod, Alternatif İş Merkezleri, Aktif. Detay: Genel Bilgi (verimlilik, OEE, kurulum/temizlik, saatlik maliyetler, gider hesabı, izin verilen çalışanlar, açıklama) ve Ürün Kapasitesi.Evet
" } ] }