repeat de dahil karışık bir döngü ama dinamik yapamıyorum

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
delphist
Üye
Mesajlar: 595
Kayıt: 05 Oca 2005 04:34

repeat de dahil karışık bir döngü ama dinamik yapamıyorum

Mesaj gönderen delphist »

S.a. Arkadaşlar...Normalde döngü vs. ilgili bir problemim yok ama şu an yapmak istediğim döngüyü dinamik yapamıyorum...Dinamik derken kastım şu mesela 2 tane döngü içerisinde tüm herşeyi yapmak istiyorum ama her seviye için farklı farklı döngüler yapmak zorunda kalma durumum söz konusu ve bu çok daha karmaşık bir hale bürünüyor. Aşağıda durumu size izah edeceğim. Yardımlarınız için şimdiden Teşekkürler....

Başlangıç olarak 10 tane Tedit sınıfından edit var ve bunların hangilerini sorguya sokacağımı component count ile dolu olanları sırayla döngüye sokup içindeki bilgilerden aramaya başlıyorum...1. durum bu bundan sonra benim yapmak istediğimde yapamadığım döngüye gelelim size şimdi aşağıdaki kayıtları açıklayacağım..

MAMUL_KODU HAMMADDE_KODU
BA40-01000-01-003 BA40-01000
__________________________________
yukarıda gördüğünüz gibi aramayı yapacak olan kişiler 4,5 veya daha fazla edit kutucuğuna hammadde veya mamul kodları yazarak bütün ürün ağacında hangi ürünlerde benzerlik var onları bulmaları gerekmekte. Ama bu işlemi direk mamüle bağlı 1. seviyeden değilde reçetede kayıtlı olan bir taslak çeliğinden de arama yapabilirler ve ayrıca taslak haricinde başka kriterleride ekleyerek hangi ürünlerde kullanıldığını bulmak istiyoruz. yukarıdaki tabloda bulunan BA40-01000-01-003 nolu ürünü hammaddede aradığımızdada karşımızı aşağıdaki sonuçlar çıkmakta.

MAMUL_KODU HAM_KODU
BA40-01000-01 BA40-01000-01-003
BA40-01000-02 BA40-01000-01-003
BA40-01000-03 BA40-01000-01-003
BA40-01000-04 BA40-01000-01-003
BA40-01000-05 BA40-01000-01-003
BA40-01000-06 BA40-01000-01-003
BA40-01000-07 BA40-01000-01-003
BA40-01000-08 BA40-01000-01-003
BA40-01000-09 BA40-01000-01-003
BA40-01000-10 BA40-01000-01-003
BA40-01000-12 BA40-01000-01-003
BA40-01000-14 BA40-01000-01-003
BA40-01000-15 BA40-01000-01-003
BA40-01000-16 BA40-01000-01-003
BA40-01000-17 BA40-01000-01-003
Biraz önce mamül olan BA40-01000-01-003 farklı operasyonlar gördü ve soldaki mamülleri oluşturdu.

Şimdi BA40-01000-01 da hammaddede aradığımızda karşımıza kullanıldığı mamüller gelmekte. ki bu daha alt seviyelerden başlayıp da buraya kadarda ulaşabilir seviye 8 veya 10 bile olabiliyor.
BA40-01000-01 hammadde aradım. aşağıdaki sonuçlar çıktı.

MAMUL_KODU HAM_KODU
AAA58 BA40-01000-01
AAA58-1 BA40-01000-01
BBB58-13 BA40-01000-01
CCC58-14 BA40-01000-01

bu sadece bi tane editin içindeki arama idi. diğerlerindede arama yapıp en son mamüle kadar çıkıp mamül kodlarını bulmak ve kaç tane editte bu işlem yapıldıysa bulunan mamül kodlarının hepsindede bulunanları ortaya çıkarmak.

Yani aramaya katlan ürünlerin tamanının hangi nihai ürünlerde kesiştikleri.

Bunu dinamik olarak arka arkaya arka arkaya döngülerle her seviye için bir döngü oluşturmaktan ziyade dynamic olarak bir yöntem kullanılabilirmi.

Önemli Not:
BA40-01000 örnekte verdiğim ürünü aradıktan sonra gelen BA40-01000-01-003 aramaya dahil ettiğimizde gelen bütün sonuçlar için ayrı ayrı seviye yükseltme yapılıp nihani ürüne kadar gidilmesi gerekiyor. Eğer BA40-01000-01 arama yapıldığında yine bir den fazla kayıt geldiğinde hepsi için tekrar arama yapılması ve nihani ürünü gidilmesi gerekiyor. Biraz karışık oldu ama umarım anlatabilmişimdir.


teşekkürler
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Bir Mamul bir da Hammadde için liste oluşturacaksın. Bu listeler TStringList olabilir.

- Bir procedure/fonksiyon yazacak ve bu listenin büyümesini bununla yaptıracaksın demek oluyor.

Kod: Tümünü seç

Procedure MamulHammaddesiBul( MamulKodu:String; Var MamulListesi, HammaddeListesi:TStringList );
begin
  // SQL Sorgusu yapılır...
  // Sonuçlar sırasıyla MamulListesine ve HammaddeListesi'ne ADD edilir.
end;
- Tüm Edit'lerdekileri girdileri MamulListesi'ne gireceksin. Sonra da bir While dönüsü yapıp arkana yaslanıp bekleyeceksin.

Kod: Tümünü seç

Var
  Sayac : Integer;
  DongudenCik : Boolean;
begin
  For Sayac := 0 to ComponentCount-1 do 
    If Components[Sayac] is TEdit then begin
    // Edit'leri listeye ekleme işlemi.
    end;

  Sayac := 0;
  DongudenCik := ( Sayac > MamulListesi.Count-1 );
  While NOT DongudenCik do begin
    MamulHammaddesiBul( MamulListesi[Sayac], MamulListesi, HammadeListesi );
    Inc(Sayac); 
    DongudenCik := ( Sayac > MamulListesi.Count-1 );
  end;
end;
gibi. Yazdıklarım spontan şeyler ve doğruluk oranı düşük. Sadece metodoloji için yazdım...

- Özetle liste listeyi doğuracak, sonunda bu eklenme olayın bir yerde son bulacağından sayac değer Liste satır sayısına kavuşacak ve döngüden çıkılmış olacak.
Resim
Resim ....Resim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Anladığım kadarı ile hammadde hamdi mamüllerin reçetelerinde var onu bulmaya çalışıyorsunuz.BA40-01000-01-003
hammadde ise bu bir çok mamül veya yarı mamül de kullanılmış olabilir

veya Mamül için hangi hammadde(ler) kullanılmış
BA40-01000-01-003 mamül ise bunun reçetesinde bir veya bir kaç tane bileşen olabilir.

Mamül oluşumunda aşamalar olabilir sizi onu bulmaya çalışıyorsunuz galiba
Yani X hammadedesinden önce Y oluşur Y'den Y1 oluşur Y1'den Y2 oluşur v.s. gider ve en sonunda M oluşur.

bunu yakalamayı mı çalışıyorsunuz?
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Cevapla