E-Fatura Seri Bulmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

E-Fatura Seri Bulmak

Mesaj gönderen ozcank »

Arkadaşlar Merhaba; Programda E-Arşiv , E-Fatura ve E-Irsaliye serilerini nasıl bulabilirim?

EFATURA
EARSIV
EIRSALIYE Tablolarım var ve bu tablolarda üç karakteri MEF , MAF VE MIF olarak devam ediyor,
MEF000000000020
MAF000000000050
MIF000000000441

en son max değerini nasıl bulabilirim?
3 seri de aynı anda göstermem gerekiyor. Yardımcı olabilir misiniz?
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: E-Fatura Seri Bulmak

Mesaj gönderen freeman35 »

Kayıt sırasında seri ve sıra diye iki field olsaydı, daha kolay olurdu. Bunları select içinde computed field ile birleştirebilirdin.
where ile misal no like 'MEF%' vs gibi (like kullanmadığım için ezberimde kod yok, yazılım hatası olabilir) gelen sonucuda order ile sıralarsın, order a göere de (asc yada desc) ilk yada son kaydı alıp parse edersin, sayı kısmıda integer olarak cast edip bir eklersen bu sana istediğini verir.
Ama string alanlarda sayı sıralamak sıkıntılıdır her zaman, saylarda, soldaki 0 adedi önemsizdir, ama bu string olursa sıralama değişebilir. "09" ve "009" gibi
kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
erdem55
Üye
Mesajlar: 32
Kayıt: 18 Mar 2014 06:54

Re: E-Fatura Seri Bulmak

Mesaj gönderen erdem55 »

Doğru mu anladım emin değilim fakat belki şöyle bir önerim olabilir. Seri No alanının string ve 15 karakterle sınırlı olduğunu varsayıyorum.
sıfırlar ile beraber tüm seri noları karakter sayısı olarak eşit ise aşağıdaki şekilde halledilebilir diye düşünüyorum.
Sonuçta her seri no 3 harf 12 sayıdan oluşuyor.

Kod: Tümünü seç

SELECT Arsiv, Fatura, Irsaliye
FROM "Arsiv.db" Arsiv, "Fatura.DB" Fatura, "Irsaliye.db" Irsaliye
GROUP BY Arsiv, Fatura, Irsaliye
HAVING   (MAX( Fatura ) = Fatura)  
   AND  (MAX( Arsiv ) = Arsiv)  
   AND  (MAX( Irsaliye ) = Irsaliye)   
İnşallah işini görür. Kolay gelsin.
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: E-Fatura Seri Bulmak

Mesaj gönderen ozcank »

Merhaba Yardımlarınız için teşekkür ederim. Ben şu şekilde revize ettim,

Kod: Tümünü seç

SELECT ARSIV.FATIRS_NO , FATURA.FATIRS_NO
FROM TBLEARSIV Arsiv, TBLEFATURA Fatura
GROUP BY Arsiv.FATIRS_NO, Fatura.FATIRS_NO
HAVING (MAX( Fatura.FATIRS_NO) = Fatura.FATIRS_NO)  AND  (MAX( Arsiv.FATIRS_NO) = Arsiv.FATIRS_NO)
Fakat Serileri tek olarak göstermiyor.
Ekran görüntüsü.jpg
Ekran görüntüsü.jpg (4.71 KiB) 836 kere görüntülendi
erdem55
Üye
Mesajlar: 32
Kayıt: 18 Mar 2014 06:54

Re: E-Fatura Seri Bulmak

Mesaj gönderen erdem55 »

ozcank yazdı: 01 Şub 2023 11:55 Merhaba Yardımlarınız için teşekkür ederim. Ben şu şekilde revize ettim,

Kod: Tümünü seç

SELECT ARSIV.FATIRS_NO , FATURA.FATIRS_NO
FROM TBLEARSIV Arsiv, TBLEFATURA Fatura
GROUP BY Arsiv.FATIRS_NO, Fatura.FATIRS_NO
HAVING (MAX( Fatura.FATIRS_NO) = Fatura.FATIRS_NO)  AND  (MAX( Arsiv.FATIRS_NO) = Arsiv.FATIRS_NO)
Fakat Serileri tek olarak göstermiyor.
Ekran görüntüsü.jpg
Bu arada sormayı unuttum. Tablolarınız da ID alanları var mı?
Tam olarak ne istediğinizi yada sorunun ne olduğunu anlayamadım. Maalesef görüntüyü göremiyorum. Görüntüyü göremeyen birtek ben miyim?
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: E-Fatura Seri Bulmak

Mesaj gönderen ozcank »

Merhaba, Yapmak istediğim

MEF000000000020
MAF000000000050
MIF000000000441

bu şekilde MEF, MAF,MIF serilerinin sonuncusunu tek satır da bulup bir artırmak.
erdem55
Üye
Mesajlar: 32
Kayıt: 18 Mar 2014 06:54

Re: E-Fatura Seri Bulmak

Mesaj gönderen erdem55 »

ozcank yazdı: 01 Şub 2023 09:03 Merhaba, Yapmak istediğim

MEF000000000020
MAF000000000050
MIF000000000441

bu şekilde MEF, MAF,MIF serilerinin sonuncusunu tek satır da bulup bir artırmak.
Tablolarınız da ayrıca ID alanı var mı?
Yeniden 3 ayrı tablo oluşturup test ettim. Oluşturduğum tablolar ID ve Arsiv - ID ve Fatura - ID ve Irsaliye alanlarından oluşuyor.
Umarım eklentiyi görebilirsiniz. Ben kendi eklentimi de indiremiyorum.
Dosya ekleri
test.png
test.png (3.5 KiB) 801 kere görüntülendi
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: E-Fatura Seri Bulmak

Mesaj gönderen ertank »

ozcank yazdı: 26 Oca 2023 07:22 Arkadaşlar Merhaba; Programda E-Arşiv , E-Fatura ve E-Irsaliye serilerini nasıl bulabilirim?

EFATURA
EARSIV
EIRSALIYE Tablolarım var ve bu tablolarda üç karakteri MEF , MAF VE MIF olarak devam ediyor,
MEF000000000020
MAF000000000050
MIF000000000441

en son max değerini nasıl bulabilirim?
3 seri de aynı anda göstermem gerekiyor. Yardımcı olabilir misiniz?
Merhaba,

1- Bu tür soruları sorarken kullandığınız veritabanı ve sürüm bilgisini de paylaşmanızda fayda var. Sürüm her zaman elzem gözükmeyebilir. Ancak bazı veritabanları belli sürümlerinde ek kolaylıklar/özellikler eklerler. Bu tür şeylerin problem çözümüne katkısı olabilir.
2- Eğer belli değerler içinden elde etmek istediğiniz sonuç var ise örnek tablo ve verileri oluşturacak SQL paylaşmanızda büyük fayda var.
3- Son olarak elde etmek istediğiniz sonucu da yazmanız gerekir ki yardımcı olacak kişiler tarifinizi daha kolay anlayabilirler.

FirebirdSQL kullandığınızı ve aşağıdaki şekilde bir tablo yapısına ve değerlere sahip olduğunuzu varsayıyorum

Kod: Tümünü seç

create table efatura(id varchar(15));
create table earsiv(id varchar(15));
create table eirsaliye(id varchar(15));

commit;

insert into efatura values('MEF000000000018');
insert into efatura values('MEF000000000019');
insert into efatura values('MEF000000000020');

insert into earsiv values('MAF000000000048');
insert into earsiv values('MAF000000000049');
insert into earsiv values('MAF000000000050');

insert into eirsaliye values('MIF000000000439');
insert into eirsaliye values('MIF000000000440');
insert into eirsaliye values('MIF000000000441');
Sorunuzdan bu tablolardan en büyük değerleri tek bir sorgu içinde görmek istediğinizi anladım. Bunun için aşağıdaki gibi bir sorgu kullanabilirsiniz

Kod: Tümünü seç

select id from (select first 1 id, cast(substring(id from 4) as bigint) counter from efatura order by 2 desc)
union all
select id from (select first 1 id, cast(substring(id from 4) as bigint) counter from earsiv order by 2 desc)
union all
select id from (select first 1 id, cast(substring(id from 4) as bigint) counter from eirsaliye order by 2 desc)
Eğer amacınız bu ise "Neden fatura seri numaralarına ve yıllarına ait sayaç değerlerini farklı bir tabloda tutmuyorsunuz?" sorusu aklıma geliyor. Aynı zamanda bu sorgunun ilgili tablolarda kayıt sayısı arttıkça performansı oldukça düşeceğini belirtmek isterim. Yapısı gereği tüm tablolardaki tüm satırları okuması gerekir. FirebirdSQL satır kaydını sıkıştırarak saklar. Dolayısıyla bir kolon bilgisi için dahi tüm satır bilgisini genişletip içinden ilgili kolon verisini okuması gerekir.

En azından mevcut tabloya iki kolon ekleyerek (Seri ve sıra) bu kolonlar üzerinde indeks oluşturarak performans kaybını azaltmaya çalışabilirsiniz.

Teşekkürler.

İyi çalışmalar,
Ertan
Cevapla