Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
cxgrid seçilen malzemeye göre birim listeleme
#1
merhaba;

delphi rio - firedac - devexpress - firebird kullanıyorum,

malzeme tanımında her malzeme için en az 1, en fazla 3 birim tanımlaması yapılmakta ve malzemeye bağlı birimler tablosuna kaydedilmekte, yapılan birim tanımlamaları giriş yada çıkış fişlerinde cxgrid üzerinden malzeme seçilince malzemeye bağlı kaç birim tanımlaması varsa birim hücresinde lookupcombobox ayarlaması yapılmak suretiyle listelenip malzeme için tanımlı ilgili birimler kullanılıyor. buraya kadar bir sorun yok.

sorun ikincin üçüncü kayıtlar eklenince seçilen malzemelerin farklı farklı birim tanımları var ise daha önceki satırlardaki birimler kayboluyor ve en son eklenen malzemenin birimleri listeleniyor.

yapmaya çalıştığım şey şudur; cxgrid de malzeme sütununda malzemeyi seçince malzemeye bağlı birimler gelsin istediğim birimi seçeyim ikinci satıra geldiğimde tekrar malzemeyi seçince o malzemeye bağlı birimler gelsin mesela birici kayıtta adet düzine olsun ikinci kayıtta gram kilogram olsun, kayıtlar arasında gezinip birimlerde değişiklik yaptığım zaman sadece üzerinde düzenleme yaptığım kayıt etkilensin diğer kayıtların birimlerinde bir bozulma olmasın.

bu konuda nasıl bir yol izlemeliyim. fikir paylaşan herkese şimdiden çok teşekkür ederim.
Cevapla
#2
Merhaba kardeş
Bİraz fazla karışık anlattın veya bana öyle geldi. Daha sade bir dille, kısa cumleler kurarak anlatabılırsen sevınırrım.
Mesela sorunun ıle ılgılı tabloların yapısı nedır.Yapmak istedıgın seyı cok basıt bır ornekle orneklendırebılırmısın.
"Yani kalem,silgi adında bie malzeme ekledim. birimini adet seçtim. lookupcombobox filtre yaptım. alt satıra gectim filttre yapmıyor gibi...."
Yardımcı olmak elbette isteriz
Cevapla
#3
Yapmak istediğini zaten yazmış arkadaş, sorun grid üzerinde bu işlemi yapabilmek. Kullanıcı istediği STOK/ÜRÜN ü seçince gidip ilgi tablodan birimlerini alıp combobox a basıp, istediğini seçip alt satıra geçtiği zaman da kaydedebilmek. Bu sisteme her zaman karşıydım, hala da karşıyım ama ne hikmetse herkes bu şekilde yapıyor, sanırım eskiden beri piyasada olan yazılımlar sürekli bu şekilde yapıldığı için yerleşen bir alışkanlık. İşin kolayı ve en önemlisi kullanıcı için daha basiti varken neden hala GRID üzerinden kayıt girdirmeye uğraşıyorsunuz ki?

Örnek olması için, kendi programımın fatura oluşturma aşamaları aşağıdadır.

fatura_kayit.gif
WWW
Cevapla
#4
merhaba;
elimden geldiğince tekrar anlatmaya çalışayım.

tablolarım; 
tblmalzeme, tblbirimler, tblfisler, tblfirshareket

malzeme tanımlarım ve birimleri;
KALEM (Adet, Düzine, Kutu),
ELEKTRİK KABLOSU (Metre, Paket),
ÇİVİ ( Gram, Kilogram),
DEFTER (Adet)

Çıkış fişi ekranında cxgrid de seçilen malzemeye göre ilgili birimleri Query ile çekiyorum.

birinci kayıtta KALEM i ekliyorum KALEM in birimleri griddeki birim (lookupComboBox olarak ayarlı) sütununda lookupcombobox listesine ekleniyor. KALEM için Düzine birimini seçiyorum.

ikinci kayıtta ÇİVİ ekliyorum ÇİVİ nin birimleri farklı olduğu için birinci kayıttaki Düzine tanımı kayboluyor. birim listesinde Gram ve Kilogram listeleniyor.

her eklenen kayıtta Query güncellendiği için Query nin listelediği kayıtlar son eklenen malzemenin birimlerini listeliyor. 
ikinci kayıtta iken birinci kayıttaki seçilen birim kaydının sabit kalmasını istiyorum. birinci kayıtta iken ikinci kayıttaki seçilen birim kaydının sabit kalmasını istiyorum.

tek birim kullanılınca bir sıkıntı yok çoklu birim kullandığınız zaman durum değişiyor.
Adet 1 tane
düzine 12 tane
kutu 60 tane
gibi, seçilen birime göre stoktan miktar düşüyor.
Cevapla
#5
Merhaba tekrar,
LookupComboBox a ait query her kayıt değiştiğinde sorgulanıp filtreleniyor.
Mesela aktif kaydınızda "Metre, Paket" birimi varsa, o an diğer kayıtlarda "Metre, Paket" den farklı olanlar kaybolacaktır.
Bence bu alanı grid uzerınden düzeltmeyin. Alanı vertabanından birim adi ile ilişkilendirin.
Alanı button edit seklinde tanımlayın.
Buttona bastıgınızda showmodal bı pencereye küçük bir grid koyun ,yada inputquery ile seçilecek birimi almaya çalısın.(Tabi önce inputquery 'i iligili birimler ile doldurun.)
Bu modal pencereki gridden ,yada inputquery'den seçim yapılmışsa, asıl query ' inizi edit yapın. secilen değeri verin post edin, refresh edin.
Belki yardımcı olur sizin için
Cevapla
#6
Merhaba mevcut projenizde ne kadar ilerlediniz ve nasıl bir yapı kurdunuz bilemiyorum ama şu şekilde bir tavsiyede bulunabilirim.
Giriş/çıkış fiş işlemlerini her satır işlemi olduğunda veri tabanına yazmak ve sorgu ile çekmek yerine (anlatımınıza göre sanki bu şekilde yapmış olabilirsiniz diye tahminde bulunuyorum) MemTable veya VirtualTable kullanarak fiş içeriğini hazırlayabilirsiniz. Doldurma işlemi bittikden sonra kaydetme butonu/işlemi ile memtable da tutulan kayıtların veritabanındaki ilgili tabloya/tablolara yazılması şeklinde olacaktır.

Memtable deki alanlarda da cxgridin lookupcombobox yapısını aynı şekilde kullanabilirsiniz. Cxgriddeki işlem yaptığınız alanın (properties = lookupcombobox olanlar) Events kısmında Properties->OnValidate kısmında da seçilene göre yapmak istediğiniz hesaplamaları/düzenlemeleri yapabilirsiniz.
Cevapla
#7
(22-10-2019, Saat: 16:21)frmman Adlı Kullanıcıdan Alıntı: Merhaba mevcut projenizde ne kadar ilerlediniz ve nasıl bir yapı kurdunuz bilemiyorum ama şu şekilde bir tavsiyede bulunabilirim.
Giriş/çıkış fiş işlemlerini her satır işlemi olduğunda veri tabanına yazmak ve sorgu ile çekmek yerine (anlatımınıza göre sanki bu şekilde yapmış olabilirsiniz diye tahminde bulunuyorum) MemTable veya VirtualTable kullanarak fiş içeriğini hazırlayabilirsiniz. Doldurma işlemi bittikden sonra kaydetme butonu/işlemi ile memtable da tutulan kayıtların veritabanındaki ilgili tabloya/tablolara yazılması şeklinde olacaktır.

Memtable deki alanlarda da cxgridin lookupcombobox yapısını aynı şekilde kullanabilirsiniz. Cxgriddeki işlem yaptığınız alanın (properties = lookupcombobox olanlar) Events kısmında Properties->OnValidate kısmında da seçilene göre yapmak istediğiniz hesaplamaları/düzenlemeleri yapabilirsiniz.

Merhaba @frmman bir sorum olacaktı. " memtable da tutulan kayıtların veritabanındaki ilgili tabloya/tablolara yazılması şeklinde olacaktır." dediniz. Acaba ne şekilde kullanıyorsunuz döngü ile mi, yoksa save dataset , update dataset gibi bir methodu varmıdır?
Cevapla
#8
(22-10-2019, Saat: 16:54)serdar Adlı Kullanıcıdan Alıntı:
(22-10-2019, Saat: 16:21)frmman Adlı Kullanıcıdan Alıntı: Merhaba mevcut projenizde ne kadar ilerlediniz ve nasıl bir yapı kurdunuz bilemiyorum ama şu şekilde bir tavsiyede bulunabilirim.
Giriş/çıkış fiş işlemlerini her satır işlemi olduğunda veri tabanına yazmak ve sorgu ile çekmek yerine (anlatımınıza göre sanki bu şekilde yapmış olabilirsiniz diye tahminde bulunuyorum) MemTable veya VirtualTable kullanarak fiş içeriğini hazırlayabilirsiniz. Doldurma işlemi bittikden sonra kaydetme butonu/işlemi ile memtable da tutulan kayıtların veritabanındaki ilgili tabloya/tablolara yazılması şeklinde olacaktır.

Memtable deki alanlarda da cxgridin lookupcombobox yapısını aynı şekilde kullanabilirsiniz. Cxgriddeki işlem yaptığınız alanın (properties = lookupcombobox olanlar) Events kısmında Properties->OnValidate kısmında da seçilene göre yapmak istediğiniz hesaplamaları/düzenlemeleri yapabilirsiniz.

Merhaba @frmman  bir sorum olacaktı. " memtable da tutulan kayıtların veritabanındaki ilgili tabloya/tablolara yazılması şeklinde olacaktır." dediniz. Acaba ne şekilde kullanıyorsunuz döngü ile mi, yoksa save dataset , update dataset gibi bir methodu varmıdır?

Siz bahsettikten sonra kontrol ettim FireDAC bileşen setindeki memtable bileşen setinde sanırım  savedataset özelliği yok veya ben göremedim. Ben Jedi bileşen setinde bulunan memtable (daha doğru ifade ile TJVMemoryData) bileşenini kullanmıştım. Jedi bileşeninde savedataset özelliği var. Fakat veritabanına kayıt işlemini döngü ile yapmayı tercih etmiştim.

Kayıt için aşağıdaki gibi bir yapı kullandım.

  MemoData.First;


 while not MemoData.Eof do
 begin

   QDetay_.Insert;

   QDetay_stok_id.Value := MemoDatastok_id.Value;
   QDetay_miktar.Value := MemoDatamiktar.Value;
   QDetay_birim_fiyat.Value := MemoDatabirim_fiyat.Value;
   //-------


   QDetay_.Post;

   MemoData.Next;
 end;
Cevapla
#9
değerli kardeşlerim;
tavsiyelerinize bağlı olarak denemeler yapıyorum. bir sonuç üretebilirsem dönüş yapacağım.
birim alanında INTEGER bilgi tutuyorum. buttonedit te gördüğüm kadarıyla text veri tutuyor. yaptığım database kurgusunda INTEGER veriyi saklıyor text veriyi gösteriyor. lookupcombobox taki gibi bir düzen yakalamaya çalışıyorum.
fiş hareketleri için FDMemTable kullanıyorum. döngü ile database ye kayıt yapıyorum.
Cevapla
#10
(23-10-2019, Saat: 09:48)akuyumcu63 Adlı Kullanıcıdan Alıntı: değerli kardeşlerim;
tavsiyelerinize bağlı olarak denemeler yapıyorum. bir sonuç üretebilirsem dönüş yapacağım.
birim alanında INTEGER bilgi tutuyorum. buttonedit te gördüğüm kadarıyla text veri tutuyor. yaptığım database kurgusunda INTEGER veriyi saklıyor text veriyi gösteriyor. lookupcombobox taki gibi bir düzen yakalamaya çalışıyorum.
fiş hareketleri için FDMemTable kullanıyorum. döngü ile database ye kayıt yapıyorum.

tekrar merhaba,
Buttonedit'te isimi göstereceksin.buttona bastıgında  ayrı pencereden (inputquery , lookup combobox) kullanıcı seçım yapacak. secılenın id değerini alacaksın.
ana tablonu edit moduna gecırıp, aldıgın id degerini, ana tablonun id degerıne set edip post edeceksin.
isim alanı refresh edilmesi gerekecek. dataseti refresh edeceksin. bunu kastetmıstım kardes.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  cxGrid>FindPanel Arama Yapılacak Kolonları Belirleme hi_selamlar 15 9.792 30-03-2026, Saat: 12:33
Son Yorum: barutali
  CxGrid Türkçe karakter sorunu mur93 1 350 12-11-2025, Saat: 09:22
Son Yorum: cinarbil
  FastReport Dinamik Sayıya Göre Etiket Bastırma [ÇÖZÜLDÜ] bünyamin68 2 749 09-01-2025, Saat: 13:47
Son Yorum: bünyamin68
  cxgrid sorgulama ercanskose 3 870 09-11-2024, Saat: 10:09
Son Yorum: ercanskose
  cxgrid başlık filterrow da yön tuşları ile gezme sadoal351 1 1.389 23-04-2024, Saat: 19:20
Son Yorum: mcuyan



Konuyu Okuyanlar: 1 Ziyaretçi