Yapmak istediğim bir View hazırlamak veya delphi den ado ile sql server a bağlantı kurup söle bir sorgulama rapor çekmem lazım...Ama ben bunu yapabilmeyi bırakın mantığını kurabilmiş değilim....
Olay şu.......
-Ürünün adı (A01-22032)
-Ürün bileşeni (A01-221)
-a4343a
-34343
-a343ai
-a454g33
-a55332
ürün ağacının hangi bileşenini ararsam arayım yani alt bileşen veya alt bileşenlerden oluşan yarı mamül vs. bana bir üst kademedeki yarı mamülün adını ve hangi siparişlerde geçtiğini bulmam gerekiyor bunu nasıl yapabilirim....Lütfen Yardım
naile kardesim....olay söle anlatim baya bir aciklayarak yaziyorum.....
database: SQL SERVER 2000
Burada açık olan siparişler olduğunu düşünelim örneğin;
SIRA NO CARI KODU URUN KODU MIKTARI DOVIZ TIPI VS...
1 100021 a01-32212 200 dolar
vesaire buralar ok.....buraların dolu olduğunu düşün urun kodu örneğin 200 kalem yani alt alta 200 satir eder bu........
Bu ürünler ayrıca bu ürünü oluşturan bileşenlerden oluşuyor....Yani sen siparişi verdiğin zaman örneğin scrool optic mouse,,bu neden oluşur, iste kartı olur, topu olur, ana gövdesi olur, parçaları vs. yani örneğin mouse 12 bileşen birleştiği zaman oluşur.
tabi verilen siparişte 100 kalem o üründen 200 kalem şu üründen 20 kalem şu üründen vs.......ve bu üretime hazırlanması gerekilen bir sipariştir.
Buraya kadar doğru açıklamış olduğumu sanıyorum..Bundan sonra üretim kısmına geliyoruz...Üretimle ilgili insana bu sipariş geldi. Bunun için iş emri vermesi lazım yani bu demektir ki bu ürünlere göre bir malzeme ihtiyaç planlaması yapması lazım stoğunda ne kadar bileşen var hangi bileşenlerden bu mal oluşur ve kaç tane falan ürünün bilmemne bileşeninden lazım.....
Umarım buraya kadar da olayı anlatmış oldum şimdi benim yapmak istediğim şu....Ürün ağacını alta yazıyorum örnek olarak
1. ÜRÜNÜN KENDİSİ - A01-0001
2. ÜRÜNÜN BİR ALT KADEMESİ - A0021
3. ÜRÜNÜN BİR ALT KADEMESİ - A0022
4. ÜRÜNÜN BİR ALT KADEMESİ - A0023
SİMDİ SÖLE 2,3,4 DÜN OLUŞMASINDAN 1. ÜRÜN OLUŞMUŞ...YANİ ALTTAKİ 2,3,4 A01-0001 oluşturan parçalar
5. - B00022
6. -B00023
7. -B00024
8. -B00025
yine üsttekinin aynısı yine alttan başlayarak oluşturuluyor ürünlerin bileşenlerinden yari mamüller veya mamüller oluşuyor. yani bir üründe 9 tane 5 tane 6 tane parça kullanılıyor ve ürün ortaya çıkıyor......
Benim yapmak istediğim şu ve bunu ben yapamıyorum......olmuyor olmuyor.........
1,2,3,4,5,6,7,8,9,10,11,12,13 13 tane sipariş ve bunların hepsi farkli nihai yani tamamlanmış ürün, bunların altındada bunları oluşturan ürün ağaçları,,,benim istediğim öyle bir arama yapmalıyım ki bunu nasıl oluşturacam mantık olarak öğrenmek istiyorum A01-0001 kodlu ürünün 7 alt öğesini bileşinin arattığım zaman bana bütün siparişlerde arama yapsın ve bu üründen hangi ürünlerde kaç tane kullanıldığını bulsun bana yani su demek oluyor
A001-000321 bileşeni 1,2,3,4,5,6,7 siparişlerde 45 adet bulunuyor, bunu yapmak istiyorum yardım istiyorum.....lütfen nasıl bir mantık kurulur .....
00000001 nolu fişe göre 100023 nolu cari koduna müteakiben
A01-00021 nolu üründen 200 adet
A02-34343 nolu üründen 500 adet
A03-05533 nolu üründen 400 adet
vs. burda kaç aklem girilirse tek tek her biri tek bir sipariş fiş no ile sipariş ediliyor...bu sipariş daha sonra üretim kısmındaki üretim planlamadaki arkadaşlara geliyor...
Onlarda stoktaki olan ürünler için ve olmayan ürünler için ayrı ayrı ihtiyaç planlaması çıkarmak zorunda.....
Sorun surda stoktaki tanımlanan üstteki a01-00021 veya vb.. ürünler bir çok kademeli bileşenlerden oluşuyor....
Örnek verirsek A01-00021 ürün için üretim modülünde reçete tanımlaması yapılıyor. reçete demekten kastım...a01-00021 üretmek için 6 adet bileşen gerekiyor örneğin.....onuda açalım ayrıca.....
A01-00021:
a01-00021-STD 1 ADET
a01-0aa33-STD 2 ADET
b44-33022-STD 1 adet
e44-30000-ATD 1 adet
603-39499-OPT 2 adet
burdaki yazdığımız 5 adet üründen A01-00021 ürünü oluşuyor. Ayrıca
Ayrıca 603-39499-OPT nin bileşenleri de şöyle
ba22-01025-01 1 adet
mf22-3244-02 2 adet
023-23025 4 adet
022-a0025 1 adet
daha bitmedi
ba22-01025-01 ise :
ba22-01025 1 adet
a11-aeae33 2 adet
henüz bitmedi....
ba22-01025 ise:
a223-43434-01 18 mm
a44-34343-4 1 adet
seklinde ürün ağaçlarından oluşuyor
ben şunu yapmak istiyorum a223-43434-01 bileşeninden hangi carinin hangi siparişi için ne kadarlık ihtiyaç var.....bunun döngüsünü istiyorum.....ama yapamadım mantık olarak çözemedim ve yapmaadım....Yardımlarınızı bekliyorum....hayırlı geceler
Urun recetelerini olusturan tablonun varlıgı problemi anlasılır kılıyor tabiki....
Gerci bu tablonun detayını vermemişsiniz ama mantık olarak bir seyler soylenebilir...
Oncelikle bunun zor bir problem oldugunu soylemeliyim. Aklıma bir takım fikirler geldi ama eminim ustunda dusunulup calisilirsa daha iyi ve hızlı cozumler bulunabilir...
Aklıma gelen teknik su bir stored procedure icinde bir dongu yardımı ile sorgulamak istediginiz urunun hangi diger urunler icinde bir alt parca oldugunu bulup bunu bir gecici tabloya atailirsiniz. Fakat bunu yaparken ornegin X urunu y urunu icinde 3 adet kullanılıyorsa gecici tablonuzda bu 3 adedide belirtin. Hatta aslında bu gecici bir tablo da olmayabilir. Kalıcı sabit bir tablo da olabilir bu tur sorgulamalara temel teskil edecek bir tablo. Aslında veritabanı tasarım teorisine aykırı gibi gorunse de bu tarz bir tablo bahsettiginiz tarzdaki kompkes sorguları alınabilir yapacaktır. Aksi taktirde bu sorguların alınması caok zaman da alıyor olabilir....
Tablonun yapısı su sekilde olabilir...
URUN ICINDE_OLDUGU_URUN MIKTAR BIRIM
-------------- ------------------- ------ -----
a223-43434-01 ba22-01025 18 mm
a223-43434-01 ba22-01025-01 18 mm
a223-43434-01 603-39499-OPT 18 mm
a223-43434-01 A01-00021 36 mm
a44-34343-4 ba22-01025 1 adet
a44-34343-4 ba22-01025-01 1 adet
a44-34343-4 603-39499-OPT 1 adet
a44-34343-4 A01-00021 2 adet
Verilerinizden hareketle yaptıgım bu ornek tabloda goruldugu uzere A01-00021 urunu icinde 36 mm a223-43434-01 oldgu gorunmekte. Eger boyle bir tablo olusturabilirseniz ki bu aslında baslı basına bir probleme benziyor ama nispeten toplam problemimizden daha kucuk bir problem... O zaman siparis tablosundaki urun detayları ile bu tabloyu join yaparsanız ve oradaki urun ile buradaki ICINDE_OLDUGU_URUN alanını esitleyip siparis adedi ile buradaki miktari da carptiniz mi tamamdır... Tabi where kısmına bir de hangi urun icin sorgulama yapmak istiyorsanız onu sart olarak koymalısınız....
Fahrettin bey söyle söyleyim biraz daha olayı açacağım çünkü siz olayı anladınız tam olarak...Ama benim biraz daha değişik bir isteğim var..Söle söyleyim......
Buraya kadar güzel a01-001 ürünü bu bileşenlerden oluşuyor ama Simdi olayın koptuğun nokta....
Bu yazdıklarımın hepsi aynı table da
URUN ADI HAMMADDESI
5. a1-222 v3-3434
6. a1-222 v4-4444
a1-222 yukarıdaki nihai yani ürünün bileşeni idi ama onun bileşeni olmakla beraber v3-3434 de ayrıca v3-3434 ve v4-4444 den oluşuyor...Yani ürünü oluşturan bileşenlerden bazılarıda ayrıca kendi arasında dallanıp onuda oluşturan yarı mamüllerden ve parçalardan oluşuyor.
Şimdi benim yapmak istediğin......
Verilen bir sipariş database var ve bu database fiş no bazlı müşteri özellikleri ve verilen sipariş kalemleri yani nihai ürünlerden oluşuyor.
Birde bu nihai ürünlerin hangi bileşenlerden oluştuğu ve bu bileşenleri de oluşturan bileşenlerden oluşan bir database ve şu an için kayıt sayısı toplam ürün olarak 7000 tane tabi bileşenleri ile felan table daki satır sayısı 50000 vardır.
Yani sonuç olarak..............................
Benim kurduğum mantıkla.....bilmem doğru bilmem yanlış ama onu yazıyorum..............
nihai ürünün herhangi bir bileşeninden ben arama yaptığım zaman Açık olan siparişleri önce bulması gerekiyor ve bu sipariş database adı altında başka bir table atması gerekiyor...Aynen şöyle alttaki gibi...
FIS NO MUSTERI ADI URUN ADI MIKTARI
burası tamam burayı aldığımı varsayalım...............Yani ilk olarak program bu işi yapsın...........
Tabi unutmamak lazım ki Stok database i var birde.......Bu ürünlerin stoklarının bulunduğu.....Ürün var mı yok mu veya kaç tane var buradan bulacaz...Sonuçta oda Sipariş databasindeki URUN ADI ile aynı.........
Sonra yapacağı işlem.....Urun reçete databasinden siparişte geçen ürün nolarını bulmak ve bu ürün noları bulmak ve reçeteleri ile birlikte başka bir database atmak....................
Bundan sonrasında ben takıldım kaldım yapamadım...Bundan sonra mantığım çalışmadı....Bir türlü...yardımcı olursanız sevinirim...
Sizin dusundugunuz yapi olayin matıken işlemesi gereken yon olarak dogru gibi duruyor. Fakat ne yazikki bu yolda sizinde basiniza geldigi gibi tıkanma riski fazla... Yani siparis edilen urunlerden hareketle onları olusturan en alt urunlere kadar gidecek ve epey dallanacak donguler vs... kurmak gerekiyor.... Bu da oyle bir rapor yazabilseniz bile onun gelme suresini oldukca uzatir....
Benim teorim ise su... Bir urunun hangi alt urunlerden ve onlarin da hagi alt urunlerden olustugu belli ve de en son olarak da hangi hammaddelerden olustugu da belli... Yani orneklendirecek olursak misal bir otomobil icin 2 tane dikiz aynasi lazim. Bunlarin her biri icin birer tane motor lazim, birer ayna, her motor da belki 200 metre bakır tel icermekte ve baska baska malzemeler icermektedir.... Simdi her sorgulama anında bir otomobil icin mac metre bakır kablo lazım sorusunun cevabını bulmak amacıyla kac dikiz aynası kac motor ve kac metre kablo diye donguler icinde aramak yerine. Butun bu urun agaci icin bir defa bir dongu kurup calistirarak oyle bir tablo yapalim ki o tabloda bir otomobil icin 400 metre bakır kablo gerektigi 2 adet dikiz aynası aynalarından gerektigini kolayca gorebilelim. Tabi belki bir once yazdigim tablonun mantıgı tamamen bu.
Dolayisiyla eger elimizde boyle bir tablo var ise kanaatimce artik istediginiz bu tarz butun raporlari tek bir select ile alabilirsiniz. Yani halne guncel olan siparizleri select ederken o sipraiste misal 3 adet otomobil var ise bu 3 satirlik bir sonuc demektir.. Bizim planladıgımız tabloda ise bir otomobil icin misal 5000 farkli hammadde kullanılıyorsa bu hammaddelerin her birinin ne miktarda kullanıldıgını gosteren bir tablo vardir ve bunun en az 5000 kaydi vardir... Niye tam 5000 degil de en az 5000 diyorum cunku verdigim ornekte oldugu gibi bu tabloyu olustururken ornegin dikiz aynasının biri icin girilen doguden 200 metre bakır kablo ciktiysa o aynen tabloya eklenip daha sonra diger dikiz aynasından cikan 200 metre kablo da ayrica eklenebilr... Ya da belki tabloda bu otomobil icin bakır kablo girisi daha once yapilmis midiye bakilip varsa miktara ekleme de yapilabilir belki bu daha da iyi olur o zaman tam 5000 kayit donmus olur....
Dolayisiyla siz elinizdeki 3 kayitlik otomobil siparis query sonucu ile bu tabloyu da join yaptiginiz taktirde 15 bin kayitlik bir tablo elde edersiniz ki burada her otomobil icin her maddeden ne kadar gerektigini bulursunuz... Bu samada olaya tersten bakıp peki bu siparisler icin ne kadar bakır kablo gerekli dediginizde de ana urun degil de hammadda satirine gore bir kıstas koyup bakır kablo miktarını topladıgınızda da 3 otomobil icin 1200 metre bakır kablo gerektigini kolayca bulabilirsiniz...
Kolay gelsin....
Butun urunlerin ve recetelerinin ayni tabloda olmas ihic ama hic mesele degil.
benim onerdigim yonte
NETSIS ILE BERABER ÇALIŞACAK OLAN PROGRAMIN ÖZELLİKLERİ VE ŞEMASI
1. STOK DATABASE
Bu database de mamül, yarı mamül, ve her türlü hammadde stok olarak belirtilmektedir.
2. SIPARIS DATABASE
Burada nihai ürünlerin kodları ile sipariş verilmektedir.
3. Ürün reçetelerinin yazıldığı DATABASE
Burada ise ürün, yarı mamül ve tüm hammaddelerin hangi şekillerde oluştuğu kaç tane üründen oluştuğu vs. belirtilmektedir.
Benim yapmak istediğim ürün ağacının neresinden ararsam arayım örneğin bir 8 dal var 7 daldan aradım 7 dalda hangi ürünlerde geçtiğini ve 7 daldaki ürünlerden bir üstünde hangisi oluşuyor...ve bunlardan sipariş miktarlarına göre kaçar adet lazım.......benim istediğim bu...Fahrettin Bey hakkaten yardımınıza ihtiyacım var. Teşekkürler
Merhaba bende benzer bir sorunla karşılaşmıştım. Bende PRESTO programıyla paralel çalışacak bir web sipariş modülü yazmaya çalışıyordum. Prestonun stoklarını web de mysql e çekip table daki kategoriyi webde hiyerarşik olarak sunmam lazımdı. Yanlışım varsa düzeltin, mesajlarınızda bahsettiğiniz ürün tablosunun yapısına "bağlı ağaç" yapısı deniyor. Bu ağaçtaki her dal kendi alt dallarını biliyor ve dalların sonsuz sayıda alt dalı olabiliyor. Sonsuz sayıda olabilmeside biraz NETSİS'e bağlı. Alt dallanma olayını çözebilmek için bir yol buldum kendime : RECURSIVE fonksiyonları kullanıcaktım. RECURSIVE fonksiyon kendi kendini çağırabilen anlamına gelir. Biraz açmak gerekirse, birbiri içine giren alt dallanmayı anca böle çözmeyi uygun gördüm. Ama PHP, RECURSIVE fonksiyon yapısını tam desteklemediği için veya ben beceremediğim için bunu başaramadım. Onun yerine birbirine peşi peşine çağıran on tane fonksiyon yazdım böylelikle alt dallanma 10 u geçmediği sürece alt dallanma listesini alabilecektim.
Sizin sorununuzuda gördüğümde RECURSIVE fonksiyonla çözülebileceğini düşündüm. Hemen sql serverın helpini açıp, RECURSIVE kelimesini arattım. Amacım T-SQL in RECURSIVE fonksiyon yapısını desteklemesini araştırmaktı. Evet destekliyordu ama Helpde sizin sorununuza benzer bir sorunun çözümünün RECURSIVE şekilde yapabileceğini ama daha değişik bir yöntemin örneğinin olduğunu gördüm. Help deki bölümün başlığı "Expanding Hierarchies".
a4tech yazdı:Benim yapmak istediğim ürün ağacının neresinden ararsam arayım örneğin bir 8 dal var 7 daldan aradım 7 dalda hangi ürünlerde geçtiğini ve 7 daldaki ürünlerden bir üstünde hangisi oluşuyor...ve bunlardan sipariş miktarlarına göre kaçar adet lazım.......benim istediğim bu...Fahrettin Bey hakkaten yardımınıza ihtiyacım var. Teşekkürler
Sayin a4tech,
korkarım bu baslik kısır donguye girdi..... Siz de ben de son 2 mesajımızda aynı seyleri tekrarliyoruz.....
Benim onerdigim yontemle ilgili problemin ne oldugunu anlayamadim..... Su asamada yazabilecegim farkli bir sey kalmadi acikcasi....
fahrettin abi...şunun için yazdım...........sorgu bir biri içinde bağlı gitmesi gerekiyor yani....8. alt bileşeni aradığım zaman ne kadar lazım diye diyecek su kadar lazım sonra bir üstüne gidecek su kadar lazım vs. nerden ararsam arayım bileşenin bir üstünüde bulmam gerekiyor onun için yazdım...undefined bu arada teşekkür ederim......sonucu yazacam buraya