A9152210 = A9152211 Gibi Fatura No Artırımı.

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

A9152210 = A9152211 Gibi Fatura No Artırımı.

Mesaj gönderen husonet »

Uzun Zamandır yazayım diyordum. Bugüne kısmet oldu. Hayırlı olsun!!!

Kod: Tümünü seç


//Husonet 
Function TersCevir(no:String):String;
var
    Cevrilen:String;
    i:Integer;
Begin
    i:= 0;
    Cevrilen := '';
    For i := length(no) DownTo 1 Do
    Begin
        Cevrilen := Cevrilen + no[i];
    End;
    Result := Cevrilen;
End;

Function Numarator(no:String):String;
var
    Nmr, Temp, Temp1:String;
    Temp2:Char;
    i, Tmp:Integer;
Begin
    nmr := TersCevir(no);
    i:= 0;
    while i < length(no) Do
    Begin
        i := i + 1;
        if nmr[i] = '9' Then
        begin
            nmr[i] := '0';
            continue;
        End
        Else
        if (nmr[i] < '9') and (nmr[i] >= '0') Then
        Begin
            Temp := inttostr(StrToInt(nmr[i]) + 1);
            Tmp := i;
            Break;
        end;
        if nmr[i] = 'Z' Then
        begin
            nmr[i] := 'A';
            continue;
        End
        Else
        if (nmr[i] < 'Z') or (nmr[i] >= 'A') Then
        Begin
            Temp := inttostr(ord(nmr[i]));
            Temp := intToStr(StrToInt(Temp) + 1);
            Temp := Chr(StrToInt(Temp));
            Tmp := i;
            Break;
        end;
    End;
    i:= 0;
    while i < length(no) do
    Begin
        i := i + 1;
        if tmp = i Then
            if (temp[1] <= '9') and (temp[1] >= '0')  Then
                nmr[i] := temp[1]
            Else
            Begin
                nmr[i] := Temp[1];
            End;
        nmr[i] := nmr[i];
    End;

    result := TersCevir(nmr);
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
    ShowMessage(Numarator('DZ9999'));
end;
Kodun Amacı String olarak verilen veriyi 1 arttırmak. AZ99999Z, B99999
, B21222 vb....


Arkadaşlar açıklamasını yapmıyorum. Seminerlerde Örnek olarak açıklayacağım.

Kodu Testedip çalıştıran arkadaşlarımız olursa Fikirlerini yazarlarsa sevinirim.



İyi Çalışmalar.
Hüseyin ÖZDEMİR.
En son husonet tarafından 15 Nis 2006 02:39 tarihinde düzenlendi, toplamda 1 kere düzenlendi.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

kolay gelsin,bende türkçe karakterli fatura no isteyenler için küçük bi değişiklik yaptım 8) , müşteri ister valla, hazırlıklı olmak lazım,müşteri her zaman haklıdır :lol: :lol:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
Const Dizi:array[0..39] of string =
 ('0','1','2','3','4','5','6','7','8','9','A','B','C',
 'Ç','D','E','F','G','Ğ','H','I','İ','J','K','L',
 'M','N','O','Ö','P','R','S','Ş','T','U','Ü','V','Y','Z','0');

  Function TersCevir(no:String):String;
  var
    Cevrilen:String;
    i:Integer;
  Begin
    Cevrilen := '';
    For i := length(no) DownTo 1 Do
    Begin
        Cevrilen := Cevrilen + no[i];
    End;
    Result := Cevrilen;
  End;

  Function FindChar(c:String):integer;
  var
    i:Integer;
  Begin
    Result:=-1;
    For i := 0 To 38 Do
        if Dizi[i] = c then begin
           Result:= i;
           Exit;
           end;

  End;

VAR iLoop1:integer;
    sInputText,sResult:string;
    elde:boolean;
begin
 elde:=false;
 sInputText:= TersCevir(UpperCase(edit1.Text));
 sResult:='';

 for iLoop1:= 1 to Length(sInputText) do
 begin
  if iLoop1 = 1 then Elde:= TRUE;

  if Elde then
   begin
    sResult:= Dizi[FindChar(sInputText[iLoop1])+1] +sResult;
    Elde:= (FindChar(sInputText[iLoop1])+1 > 38);
   end
   else
    sResult:= sInputText[iLoop1]+sResult;

 end;
if Elde then sResult:= '1'+sResult;


showmessage(Edit1.Text +' + 1 --> '+sResult);
end;
DotCom
Kıdemli Üye
Mesajlar: 1696
Kayıt: 11 Tem 2003 10:30
Konum: İzmir
İletişim:

Mesaj gönderen DotCom »

Hüseyin abi kod için teşekkürler , ileride çok gerekli olacagına emin oldugum bir şey. hatta geçenlerde başka bir programda beni baya oyalamıştı. çok teşekkürler..
DotCom
Kıdemli Üye
Mesajlar: 1696
Kayıt: 11 Tem 2003 10:30
Konum: İzmir
İletişim:

Mesaj gönderen DotCom »

to approve !!!

Kod çalışır durumda , herhangi bir problemi yok. function a gönderilen değer doğru olarak +1 durumunda geri dönüyor...

Kolay Gelsin.

@Husonet Teşekkürler...
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Rica Ederim. Çok gerek duyuyordum yazmak içinde fırsatım hiç olmuyordu Dün Öylen fırsat bulunca yazmak nasip oldu.

Mege Arkadaşım Düzenlemeleriniz için teşekkür ederim. Yalnız kodun Fonksiyonel olmasına önem veriniz. Çünkü Projenin bir çok yerinde kullanmak gereği duyabilirsiniz.

İyi Geceler.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
must_sargin
Üye
Mesajlar: 216
Kayıt: 14 Şub 2004 03:13
Konum: Gebze
İletişim:

Mesaj gönderen must_sargin »

iyi çalışmalar,
husonet'e yazdığı kod için teşekkürler,
benim bir sorum olacak, acaba yazdığınız kodu tablonun afterinsert olayına yazdığımda bir sonraki katıda nasıl işletebilirim?
yardımcı olursanız sevinirim.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Tablodaki en yüksek numarayı bulup fonksiyona işletmen yeterli olacaktır. fonksiyondan dönen değeri tabloya yazman yeterli olur. Forum da bunun la ilgili arama yaparak örnek kodlar bulabilirsin. :wink:

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
must_sargin
Üye
Mesajlar: 216
Kayıt: 14 Şub 2004 03:13
Konum: Gebze
İletişim:

Mesaj gönderen must_sargin »

iyi çalışmalar,
husonet hocam sql'de max komutuyla en yüksek değeri çekiyorum ancak bir sonraki kayıda bu değeri nasıl yazdırabilirim acaba?
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Çektiğin değeri fonksiyona parametre olarak geç fonksiyondan dönen değeri Filed'a ata.

NOT: Bu soruları Programlama kısmına sorunuz.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
akuyumcu63
Üye
Mesajlar: 386
Kayıt: 02 Tem 2007 09:43

Re: A9152210 = A9152211 Gibi Fatura No Artırımı.

Mesaj gönderen akuyumcu63 »

selam;

bu konunun üzerinden baya zaman geçmiş ama, yine de konu ile ilgili sorunumu iletmek istedim.

sayın mege ' nin yazmış olduğu kodu kendi programlarımda kullanıyorum. kayıtlar 0001 den 0009 kadar normal yazılıyor. bir soraki kodu verdiğimiz zaman kod 000A oluyor 0010 olması gerekmezmi, tabi elle 0010 kodunu veriyoruz 0019 dan soraki komut yine 0020 olmuyor.

bence bu sorunda çözülürse çok güzel bir kod, emeği geçenlere teşekkür ederim.
İsteyen, yapabildiğinden daha fazlasını yapar.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Re: A9152210 = A9152211 Gibi Fatura No Artırımı.

Mesaj gönderen husonet »

Benim yazdığım fonksiyonu denedinizmi?

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
akuyumcu63
Üye
Mesajlar: 386
Kayıt: 02 Tem 2007 09:43

Re: A9152210 = A9152211 Gibi Fatura No Artırımı.

Mesaj gönderen akuyumcu63 »

sayın husonet;

sizin fonksiyonu da denedim. sizinkinde de EA0000 kodunu fonksiyon tekrarlıyor. bir artım olmuyor. elle 0001 gibi bir kod verdiğimiz zamanda aynı kodu tekrarlıyor. kod aşağıdaki şekillerde çağrılmıştır,

CxTextEdit1.Text:=(Numarator('DZ9999')); yada CxTextEdit1.Text:=(Numarator('0001'));

implementation
uses uDm;
{$R *.dfm}

fonksiyonlarınızı bu kısmın altına yapıştırıp yukarıda yazmış olduğum kodlarla çağırıyorum.

ilginiz için teşekkür ederim.
İsteyen, yapabildiğinden daha fazlasını yapar.
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: A9152210 = A9152211 Gibi Fatura No Artırımı.

Mesaj gönderen m_ekici »

Direk SQL Tablo adını ve kolon ismini gönder +1 inin geri döndersin ;

FARURANO :=FISSONNO('FATURA','FISNO');

Kod: Tümünü seç

function 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;
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: A9152210 = A9152211 Gibi Fatura No Artırımı.

Mesaj gönderen sabanakman »

Başka bir forum sitesinde paylaştığım kodu buraya da ekleyeyim. Kirlilik olmaz umarım :mrgreen:
Delphituk Kod Bank yazdı:{String bir değerde bulunan rakamsal değerleri kullanarak bir sonraki değeri bulur.
Mesela..:
A91773212 i-> A91773213
A009 u -> A010
ve
XYZ999'u -> XYZ1000 yapar
Daha çok çoklu dosya kaydı yaparken dosya adlarını bulmada ve fatura irsaliye
gibi evrak numaralarının bir sonrakini elde etmede kullanılır}

Kod: Tümünü seç

function DegerArt(const S:String):String;
var i:Integer; Ch:Char; Normal:Boolean;
begin
  Result:=S;
  i:=Length(Result);
  Normal:=False;
  while (i>0) and not Normal do begin
    Ch:=Result[i];
    if Ch in ['0'..'9'] then begin
      if Ch='9' then Ch:='0' else begin
        Inc(Ch);
        Normal:=True;
      end;
      Result[i]:=Ch;
    end else Break;
    dec(i);
  end;
  if not Normal then Insert('1',Result,i+1);
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
akuyumcu63
Üye
Mesajlar: 386
Kayıt: 02 Tem 2007 09:43

Re: A9152210 = A9152211 Gibi Fatura No Artırımı.

Mesaj gönderen akuyumcu63 »

sayın sabanakman;

fonksiyonun değerini edit kutusuna nasıl çağırabilirim. soru biraz basit oldu ama kusuruma bakmayın.
İsteyen, yapabildiğinden daha fazlasını yapar.
Cevapla