bir sonraki cari kodunu oluşturma?

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

bir sonraki cari kodunu oluşturma?

Mesaj gönderen unicorn64 »

merhaba arkadaşlar.

bir stok takip programı üzerine çalışıyorum. sisteme yeni cari tanımı yaparken cari kodu normalde manuel giriş yapılıyordu ama otomatik olarak elde etmek istiyorum.
belirli bir ön değer ve bunu takiben sayı şeklinde cari kodu oluşturmak istiyorum.

yani öndeğer='CA' ise cari kodları 'CA1', 'CA2' ... şeklinde devam edecek.

şimdi bu şekilde CA15 e kadar manuel tanım yapılmış olsun ve bu noktadan sonra cari kodunu otomatik oluşturmak isteyelim.

manuel tanımlama da sıranın gözetilmediğini (carikodunun ardışık olmadığını, yani en son tanımlanan kodun sayısal kısmının en yüksek değer olmadığını) göz önüne alırsak yeni kayıt için cari kodu değerini nasıl alabilirim.

belirtilen ön değerle tanımlı en son (sayısal kısmı en yüksek) kaydı alıp sayısal kısmını 1 arttırıp kullanmam gerek.

Kod: Tümünü seç

 SELECT ISNULL(MAX(CARI_KOD),'CA0') CARI_KOD  FROM TABLO WHERE CARI_KOD LIKE 'CA%'
bu sorguyla almaya çalıştım ancak alan string olduğu için sistemde CA15 tanımlıyken ve ben yeni cari kodu için CA16 değerini elde etmek isterken alfabetik sıralamadan dolayı max dan CA9 kaydı çıkıyor ve sistemde kaydı olmasına rağmen yenicari kodu için CA10 olmalı demiş oluyorum...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: bir sonraki cari kodunu oluşturma?

Mesaj gönderen Battosai »

Cari kod tanımlamasında sabit bir öndeğer luzumsuz geliyor bana... ayırt etmede zorluk çıkaran ve kodlamada da böle iş çıkaran bir yapı oluyor.Cari kodun mantığı cari hesabı tanımlamak olduğundan firmaya veya kişiye göre özgün adlar ile tanımlanması daha mantıklı öteki türlü niye önüne CA yazasın otomatik artan alan yaparsın daha kolay sonuçta değişen bişey olmaz...acizene fikrim budur...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: bir sonraki cari kodunu oluşturma?

Mesaj gönderen aslangeri »

s.a.
:ara ma yaparak sorunuza daha hızlı cevap bulabilirsiniz.

viewtopic.php?f=19&t=22117&p=126396
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: bir sonraki cari kodunu oluşturma?

Mesaj gönderen unicorn64 »

@aslangeri hocam teşekkürler...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: bir sonraki cari kodunu oluşturma?

Mesaj gönderen Hakan Can »

Şu şekilde de çözebilirsin (direk çözüm olarak):

Kod: Tümünü seç

SELECT
  COALESCE(MAX(CAST(SUBSTRING(CARI_KOD, 3, 10) AS INTEGER)), 0) + 1 AS CARI_KOD
FROM TABLO
WHERE CARI_KOD LIKE 'CA%'
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: bir sonraki cari kodunu oluşturma?

Mesaj gönderen conari »

Bu şekiledeki kodlamada @Battosai'nin dediği gibi problem yaşarsınız.
Ayrıca sıralamada da problem olur.
CA1 den sonra CA10 delecektir. Alan uzunluğunu mecbur kılarsanız bu şekilde ki bir mantıkta daha iyi. Ama firmadan firmaya bu olay farklılık gösterir bunun için bence kodlamayı kullanıcıya bırakıp raporlamak için yardımcı rapor alanları tanımlamaları yapsanız daha iyi olur.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: bir sonraki cari kodunu oluşturma?

Mesaj gönderen m_ekici »

Her yerde lazım olduğu için şöyle bir kod kullanıyorum. TABLO ve Field ı gönderiyorum o son numarayı veriyor. (Sadece Harf ve sayılar için yapıyor)

CARI_.FieldValues['KODU']:=DBF.FISSONNO('CARI','KODU');

Kod: Tümünü seç

function TDBF.FISSONNO(TABLO:String;KOLON:String):String;
var
SN,SF : string;
S1 : Char;
I,I1 : Integer;
begin
try
SBUL_.Close; SBUL_.SQL.Clear;
SBUL_.SQL.Add('SELECT MAX('+KOLON+') AS SKNO,MAX(CONVERT(DECIMAL, '+KOLON+')) AS SFNO FROM '+TABLO);
SBUL_.Open;
if SBUL_.RecordCount<=0 then begin Result:='0'; exit; end;
SN:= SBUL_.FieldValues['SKNO'];
SF:= SBUL_.FieldValues['SFNO'];
except
Result:='0'; exit;
end;
try
if Length(SN)<=0 then begin Result:='0'; exit; end;
if length(SN)<=length(SF) then SN:=SF;
I1:=Length(SN);
while I1>=0 do
 begin
 S1:=SN[I1];
  case S1 of
  '0'..'8','A'..'Y','a'..'y':
      begin
      SN[I1]:= Chr(Ord(S1)+1);
      I1:=0;
      end;
  '9' : begin SN[I1]:= #48; if I1=1 then SN:='1'+SN; end;
  'Z' : begin SN[I1]:= #65; if I1=1 then SN:='A'+SN; end;
  'z' : begin SN[I1]:= #97; if I1=1 then SN:='a'+SN; end;
  end;
 inc(I1,-1);
 end;
Result:=SN;
except
Result:='0';
end;
end;

Cevapla