Otomatik maliyet hesaplama


Şimdi planımızın ikinci aşamasına geçelim.

Şimdiye kadar, sarf malzemelerinin maliyetini Services belgesini oluştururken manuel olarak giriyorduk.

Şimdi bir ürün gamının ortalama maliyetini belirleyeceğiz: her bir ürün gamı için toplam maliyetini elimizdeki öğe miktarına bölelim ve böylece o ürün gamının birim başına ortalama maliyetini elde edelim.

Bu hesaplamayı yapabilmek için, şu anda sahip olmadığımız ek verilere ihtiyacımız olacaktır.

Her bir tablo ürün gamı için şunlara ihtiyacımız olacak;

  • CostOfMaterials kaydında depolanan maliyeti;
  • BalanceOfMaterials kaydında depolanan tüm depolardaki toplam miktar.

Bu nedenle, sorgumuzu bu verileri de veritabanından alacak şekilde geliştirmemiz gerekecektir.

Bu nedenle, sorgunun belgedeki her bir ürün gamı için aşağıdaki alanları iade etmesini istiyoruz (Şekil 14.9).

Şekil 14.9. Sorgu alanlarının ayrıntıları

İlk dört alan belgenin tablodan elde edilebilir (ve zaten edilmektedir), ancak son ikisinin veritabanındaki diğer tablolardan elde edilmesi gerekecektir:

  • maliyet CostOfMaterials kaydından,
  • tüm depo bakiyeleri BalanceOfMaterials kaydından (Şekil 14.10).

Şekil 14.10. Sorgu alan ve tablolarının ayrıntıları

Bu, sorgumuzun belge tablosunun diğer tablolarla iki sol bağlantısını içermesi gerektiği anlamına gelir: biri AccumulationRegister.CostOfMaterials.Balance tablosuyla, diğeri AccumulationRegister.BalanceOfMaterials.Balance tablosuyla.

Görünüşe göre her şey bir sorgu oluşturmak için hazır.

Ancak lütfen önemli bir ayrıntıya dikkat edelim; önerilen şemada, sanal tablolar kesinlikle tüm ürün gamları için maliyet ve ürün gamı bakiyelerini geri yükleyecektir. Ve biz sadece belgemizde listelenen ürün gamı ile ilgileniyoruz.

Küçük bir tabanda, bu özellik neredeyse görünmez olabilir - katalogdaki farklı ürün gamı öğelerinin sayısı, belgedeki farklı ürün gamı öğelerinin sayısıyla karşılaştırılabilir.

Ancak gerçek veritabanını farz edin. Örneğin, MaterialsAndServices kataloğunda 15.000 öğe bulunmaktadır. Belgede ise sadece 5 öğe bulunuyor. Bu durumda sanal tablo ilk önce 15.000 öğenin tamamının maliyetini (veya bakiyelerini) hesaplamak için çok çalışacaktır, ancak bunu belge tablosuna bağladığımızda, bu 15.000 maliyet (veya bakiye) satırından belgede listelenen öğeler için yalnızca 5 satır alacağız. Kalan 14.995 satır basitçe atılacaktır; sistem bunları boşuna hesaplamış olacaktır.

Doğal olarak, bu tür bir savurganlık gerçek anlamda kabul edilemez ve böyle bir sorgu çok uygun değildir. Bu nedenle kullanacağımız tüm sanal tablolarda sadece belgemizin tablosunda yer alan ürün gamı için bir filtre koşulu eklememiz gerekmektedir. Bu durumda, maliyet ve dengeler genel olarak ürün gamının tamamı için değil, sadece ihtiyacımız olan ürün gamı için hesaplanacaktır.

Sonuç olarak ortaya çıkan sorgu şemamız aşağıdaki gibi görünecektir (Şekil 14.11).

Şekil 14.11. Sorgu şeması

Her iki sanal tablonun da belgenin tablosundaki ürün gamı listesini kullandığını unutmayalım (hesaplanan veriler bununla sınırlıdır).

Ayrıca, verilerin tamamı belge tablolarından alınmıyor, yalnızca belirli belgelerimizden biriyle ilgili veriler alınıyor. Bu listeyi üç kez almaktan kaçınmak için (belge için ve her sanal tabloda tekrar), önceden oluşturabilir ve daha sonra istediğimiz sorgu koşullarında kullanabiliriz.

Zaman çizelgeleri bu görevi yerine getirmemize yardımcı olacaktır.

Geçici tablolar, bir geliştiricinin oluşturabileceği ve verilerle doldurabileceği yazılım nesneleridir ve sorgular geçici tablolardaki verileri kendi ihtiyaçları için kullanabilir. Örneğin, bizim durumumuzda olduğu gibi bazı karmaşık koşulları uygulamak için.

Böylece, sorgu akış şemamız aşağıdaki şekli alır (Şekil 14.12).

Şekil 14.12. Sorgu şeması

Evet, başlayalım.

Icon/Social/001 Icon/Social/006 Icon/Social/005 Icon/Social/004 Icon/Social/002