AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Wie eindeutige Rechnungsnummer in DB erstellen und speichern?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie eindeutige Rechnungsnummer in DB erstellen und speichern?

Ein Thema von DCoderHH · begonnen am 5. Dez 2016 · letzter Beitrag vom 8. Dez 2016
 
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#12

AW: Wie eindeutige Rechnungsnummer in DB erstellen und speichern?

  Alt 6. Dez 2016, 08:05
Ich habe hier mal einen Versuch gemacht mit einer autarken SP ohne separates Reset des Generators. Da ich wenig Praxis mit FB habe, bitte gut testen. Vielleicht schaut ja auch einer der FB Kenner hier mal drüber.

SQL-Code:
-- create daily cyclic sequence number / expression

-- table storing last used date
-- drop table rndatebuffer;
create table rndatebuffer (
  isRestricted char(1) Default 'Xunique, --force one record only
  lastDate date not null ,
  constraint forceOneRow check (restricted='X')); --force one record only
  
-- insert into rndatebuffer (lastdate) values(CURRENT_DATE-1);
-- select * from rndatebuffer;

-- sequence
CREATE GENERATOR gen_rn;
SET GENERATOR gen_rn TO 0;


--drop procedure getrn;
--procedure to fetch new "number"
SET TERM ^ ;
CREATE Procedure GetRN RETURNS (prn varchar(20)) as
  declare aDif integer;
BEGIN

  select CURRENT_DATE-lastdate from rndatebuffer into :aDif; -- detect date border
  if (aDif is null) then -- init
  begin
    insert into rndatebuffer (lastdate) values(CURRENT_DATE);
    execute statement 'set generator gen_rn to 0';
  end

  If (aDif <> 0) then -- date border reached
  begin
    update rndatebuffer set lastdate=CURRENT_DATE; -- reset date buffer
    execute statement 'set generator gen_rn to 0'; -- reset generator
  end

  for
    select -- build Rechnungsnummer
      CAST(Extract(year FROM cast('NOWas date))*10000 +
      Extract(month FROM cast('NOWas date))*100 +
      Extract(day FROM cast('NOWas date)) AS VARCHAR(8))||
      LPAD (gen_id(gen_rn,1), 6, '0')
    from RDB$DATABASE into :prn
  do begin
    suspend;
  end
END
^

SET TERM ; ^

P.S.: der Aufruf wäre dann einfach
Code:
select * from GetRN;
Gruß, Jo

Geändert von mkinzler ( 6. Dez 2016 um 08:33 Uhr) Grund: Code-Tag präzisiert
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz