Hallo @all,
ich wollte für meine Rechnungen einen Nummernkreis definieren, der wie folgt aussehen soll:
EEI-@YY-@MM-@0000
Es klappt soweit, aber wenn ich nun eine Rechnung anlege, dann hat diese die Nummer:
I-05-11-0001 anstatt EEI-....
Ich habe das EEI mal durch III ersetzt und es funktioniert einwandfrei. Was passiert also mit meinen "E"s ??! Warum mag er die nicht? Und vor allem: Wie bekomme ich die da rein?!?!
Habe es auch schon mit #EEI versucht, komme aber zum selben Ergebnis.
Ausserdem hätte ich es gerne, daß er bei der fortlaufenden Nummer bei 9221 anfängt. Wie bekomme ich das hin? Habe zwar mal gelesen, daß es reicht einen Auftrag mit der Nummer anzulegen, damit er dann weiterzählt, aber irgendwie klappt das bei mir nicht?!
Danke schonmal!
Nummernkreise: "EEI" wird zu "I" ?
Moderator: SYNERPY
-
admin
- Site Admin
- Beiträge: 2673
- Registriert: Di Feb 10, 2004 5:48 am
- Wohnort: Bayreuth
Wurde am 4. August behoben.
Die richtige Eingabe wäre auch #EEI#-@YY#-@MM#-@0000
Bitte Skript einspielen:
Die richtige Eingabe wäre auch #EEI#-@YY#-@MM#-@0000
Bitte Skript einspielen:
Code: Alles auswählen
SET TERM ^ ;
ALTER PROCEDURE P_MASKENKEY_INDIVIDUAL(
MYTABELLE VARCHAR(40),
BMAND_ID INTEGER)
RETURNS (
MYDEFAULT VARCHAR(40))
AS
DECLARE VARIABLE BNUM_FORMEL VARCHAR(100);
DECLARE VARIABLE nPos SMALLINT;
DECLARE VARIABLE nPos2 SMALLINT;
DECLARE VARIABLE sTEMP VARCHAR(40);
DECLARE VARIABLE AKTDATUM DATE;
DECLARE VARIABLE MYSTART VARCHAR(40);
DECLARE VARIABLE NDATENLAENGE INTEGER;
DECLARE VARIABLE nNullPos SMALLINT;
BEGIN
/* Letzter Stand 17.06.2005 09:14:22 GK
@000 Bestimmung verbessert
BLLCREK u. BLLCWF hinzugefügt */
/* Neuen Inhalt MASKENKEY-Feld individuell nach Schablone
@GJ = Geschäftsjahr aus Firmenstamm
@MA = Mandantennummer
@GE = Generation (falls vorhanden)
@KW = aktuelle Kalenderwoche
@YYYY = aktuelles Jahr 4-stellig
@@YY = aktuelles Jahr 2-stellig
@MM = aktueller Monat 2-stellig
@@TT = aktueller Tag 2-stellig
@000 = Laufende Nr. -> Anz. 0 bestimmt Stellenanzahl -> ACHTUNG: Nur am Ende zugelassen, wegen MAX-Funktion
#beliebige Zeichen außer @ = Konstante Zeichenkette wird so ohne Raute(#) beibehalten */
/* Protokollieren, dass Aktion hier durchgelaufen ist */
IF (GEN_ID(GEN_ENTWICKLUNG,0) = 0) THEN
INSERT INTO A_WASMACHTIB (PROGRAMMTEIL) VALUES ('P_MASKENKEY_INDIVIDUAL');
MYDEFAULT = NULL;
BNUM_FORMEL = NULL;
SELECT F_LRTRIM(FORMEL)
FROM BNUM
WHERE MASKENKEY = :MYTABELLE
INTO :BNUM_FORMEL;
/* TEST
BNUM_FORMEL = '#AA-#BB-@GJ#-@KW#-@YYYY#-@YY#-@MM#-@TT#-@0000';
AA-BB-04-49-2004-04-12-01-0001 */
IF ((BNUM_FORMEL IS NULL) OR (BNUM_FORMEL = '')) THEN
BEGIN
SUSPEND;
EXIT;
END
AKTDATUM = CURRENT_DATE;
/* Geschäftsjahr einsetzen ( Kennung: @GJ ) */
WHILE (F_SUBSTR('@GJ', BNUM_FORMEL) >= 0) DO
BEGIN
nPos = F_SUBSTR('@GJ', BNUM_FORMEL);
IF (nPOS >= 0) THEN
BEGIN
STEMP = NULL;
IF (BMAND_ID IS NULL) THEN
SELECT GJAHR
FROM BFIRMA
WHERE ID = 1
INTO :STEMP;
ELSE
SELECT GJAHR
FROM BMAND
WHERE ID = :BMAND_ID
INTO :STEMP;
IF (STEMP IS NULL) THEN STEMP = '';
nPos2 = nPos + 3; /* Position plus Stringlänge von @GJ */
BNUM_FORMEL = F_LEFT(BNUM_FORMEL,nPOS) || F_LRTRIM(STEMP) ||
F_RIGHT(BNUM_FORMEL,F_STRINGLENGTH(BNUM_FORMEL) - nPos2);
END
END
/* Mandant einsetzen ( Kennung: @MA ) */
WHILE (F_SUBSTR('@MA', BNUM_FORMEL) >= 0) DO
BEGIN
nPos = F_SUBSTR('@MA', BNUM_FORMEL);
IF (nPOS >= 0) THEN
BEGIN
STEMP = NULL;
SELECT MASKENKEY
FROM BMAND
WHERE ID = :BMAND_ID
INTO :STEMP;
IF (STEMP IS NULL) THEN STEMP = '';
nPos2 = nPos + 3; /* Position plus Stringlänge von @GJ */
BNUM_FORMEL = F_LEFT(BNUM_FORMEL,nPOS) || F_LRTRIM(STEMP) ||
F_RIGHT(BNUM_FORMEL,F_STRINGLENGTH(BNUM_FORMEL) - nPos2);
END
END
/* Kalenderwoche einsetzen ( Kennung: @KW ) */
WHILE (F_SUBSTR('@KW', BNUM_FORMEL) >= 0) DO
BEGIN
nPos = F_SUBSTR('@KW', BNUM_FORMEL);
IF (nPOS >= 0) THEN
BEGIN
STEMP = NULL;
STEMP = CAST(F_WEEKOFYEAR(AKTDATUM) AS VARCHAR(2));
IF (F_STRINGLENGTH(STEMP)=1) THEN STEMP = '0' || STEMP;
nPos2 = nPos + 3; /* Position plus Stringlänge von @KW */
BNUM_FORMEL = F_LEFT(BNUM_FORMEL,nPOS) || F_LRTRIM(STEMP) ||
F_RIGHT(BNUM_FORMEL,F_STRINGLENGTH(BNUM_FORMEL) - nPos2);
END
END
/* Jahr 4-stellig einsetzen ( Kennung: @YYYY ) */
WHILE (F_SUBSTR('@YYYY', BNUM_FORMEL) >= 0) DO
BEGIN
nPos = F_SUBSTR('@YYYY', BNUM_FORMEL);
IF (nPOS >= 0) THEN
BEGIN
STEMP = NULL;
STEMP = CAST(EXTRACT(YEAR FROM AKTDATUM) AS VARCHAR(4));
nPos2 = nPos + 5; /* Position plus Stringlänge von @YYYY */
BNUM_FORMEL = F_LEFT(BNUM_FORMEL,nPOS) || F_LRTRIM(STEMP) ||
F_RIGHT(BNUM_FORMEL,F_STRINGLENGTH(BNUM_FORMEL) - nPos2);
END
END
/* Jahr 2-stellig einsetzen ( Kennung: @YY ) */
WHILE (F_SUBSTR('@YY', BNUM_FORMEL) >= 0) DO
BEGIN
nPos = F_SUBSTR('@YY', BNUM_FORMEL);
IF (nPOS >= 0) THEN
BEGIN
STEMP = '';
STEMP = F_RIGHT(CAST(EXTRACT(YEAR FROM AKTDATUM) AS VARCHAR(4)),2);
nPos2 = nPos + 3; /* Position plus Stringlänge von @YY */
BNUM_FORMEL = F_LEFT(BNUM_FORMEL,nPOS) || F_LRTRIM(STEMP) ||
F_RIGHT(BNUM_FORMEL,F_STRINGLENGTH(BNUM_FORMEL) - nPos2);
END
END
/* Monat 2-stellig einsetzen ( Kennung: @MM ) */
WHILE (F_SUBSTR('@MM', BNUM_FORMEL) >= 0) DO
BEGIN
nPos = F_SUBSTR('@MM', BNUM_FORMEL);
IF (nPOS >= 0) THEN
BEGIN
STEMP = NULL;
STEMP = CAST(EXTRACT(MONTH FROM AKTDATUM) AS VARCHAR(2));
IF (F_STRINGLENGTH(STEMP)=1) THEN STEMP = '0' || STEMP;
nPos2 = nPos + 3; /* Position plus Stringlänge von @MM */
BNUM_FORMEL = F_LEFT(BNUM_FORMEL,nPOS) || F_LRTRIM(STEMP) ||
F_RIGHT(BNUM_FORMEL,F_STRINGLENGTH(BNUM_FORMEL) - nPos2);
END
END
/* Tag 2-stellig einsetzen ( Kennung: @TT ) */
WHILE (F_SUBSTR('@TT', BNUM_FORMEL) >= 0) DO
BEGIN
nPos = F_SUBSTR('@TT', BNUM_FORMEL);
IF (nPOS >= 0) THEN
BEGIN
STEMP = NULL;
STEMP = CAST(EXTRACT(DAY FROM AKTDATUM) AS VARCHAR(2));
IF (F_STRINGLENGTH(STEMP)=1) THEN STEMP = '0' || STEMP;
nPos2 = nPos + 3; /* Position plus Stringlänge von @TT */
BNUM_FORMEL = F_LEFT(BNUM_FORMEL,nPOS) || F_LRTRIM(STEMP) ||
F_RIGHT(BNUM_FORMEL,F_STRINGLENGTH(BNUM_FORMEL) - nPos2);
END
END
/* Alle Rauten entfernen, da diese Strings Konstanten sind */
BNUM_FORMEL = F_REPLACESTRING(BNUM_FORMEL,'#','',1,0);
/* Laufende Nummer falls vorgegeben mit @00000 - Anzahl Stellen durch Nullen bestimmt */
nPos = F_SUBSTR('@0', BNUM_FORMEL);
IF (nPOS >= 0) THEN
BEGIN
MYDEFAULT = NULL;
MYSTART = F_LEFT(BNUM_FORMEL,nPos);
nNullPos = nPos +1 ;
NDATENLAENGE = 0;
WHILE (F_MID(BNUM_FORMEL,nNullPos,1) = '0') DO
BEGIN
NDATENLAENGE = NDATENLAENGE +1;
nNullPos = nNullPos + 1;
END
IF (MYTABELLE = 'BFA') THEN
SELECT MAX(MASKENKEY) FROM BFA WHERE BMAND_ID = :BMAND_ID AND MASKENKEY STARTING :MYSTART INTO :MYDEFAULT;
ELSE IF (MYTABELLE = 'BBES') THEN
SELECT MAX(MASKENKEY) FROM BBES WHERE BMAND_ID = :BMAND_ID AND MASKENKEY STARTING :MYSTART INTO :MYDEFAULT;
ELSE IF (MYTABELLE = 'BAUF') THEN
SELECT MAX(MASKENKEY) FROM BAUF WHERE BMAND_ID = :BMAND_ID AND MASKENKEY STARTING :MYSTART INTO :MYDEFAULT;
ELSE IF (MYTABELLE = 'BRLS') THEN
SELECT MAX(MASKENKEY) FROM BRLS WHERE BMAND_ID = :BMAND_ID AND MASKENKEY STARTING :MYSTART INTO :MYDEFAULT;
ELSE IF (MYTABELLE = 'BRRC') THEN
SELECT MAX(MASKENKEY) FROM BRRC WHERE BMAND_ID = :BMAND_ID AND MASKENKEY STARTING :MYSTART INTO :MYDEFAULT;
ELSE IF (MYTABELLE = 'BLRC') THEN
SELECT MAX(MASKENKEY) FROM BLRC WHERE BMAND_ID = :BMAND_ID AND MASKENKEY STARTING :MYSTART INTO :MYDEFAULT;
ELSE IF (MYTABELLE = 'BLLC') THEN
SELECT MAX(MASKENKEY) FROM BLLC WHERE BMAND_ID = :BMAND_ID AND MASKENKEY STARTING :MYSTART INTO :MYDEFAULT;
ELSE IF (MYTABELLE = 'BZAHL') THEN
SELECT MAX(MASKENKEY) FROM BZAHL WHERE BMAND_ID = :BMAND_ID AND MASKENKEY STARTING :MYSTART INTO :MYDEFAULT;
ELSE IF (MYTABELLE = 'BMAHN') THEN
SELECT MAX(MASKENKEY) FROM BMAHN WHERE BMAND_ID = :BMAND_ID AND MASKENKEY STARTING :MYSTART INTO :MYDEFAULT;
ELSE IF (MYTABELLE = 'BANF') THEN
SELECT MAX(MASKENKEY) FROM BANF WHERE BMAND_ID = :BMAND_ID AND MASKENKEY STARTING :MYSTART INTO :MYDEFAULT;
ELSE IF (MYTABELLE = 'BPROJ') THEN
SELECT MAX(MASKENKEY) FROM BPROJ WHERE BMAND_ID = :BMAND_ID AND MASKENKEY STARTING :MYSTART INTO :MYDEFAULT;
ELSE IF (MYTABELLE = 'BPROJV') THEN
SELECT MAX(MASKENKEY) FROM BPROJV WHERE MASKENKEY STARTING :MYSTART INTO :MYDEFAULT;
ELSE IF (MYTABELLE = 'BWRKST') THEN
SELECT MAX(MASKENKEY) FROM BWRKST WHERE BMAND_ID = :BMAND_ID AND MASKENKEY STARTING :MYSTART INTO :MYDEFAULT;
ELSE IF (MYTABELLE = 'BKUANF') THEN
SELECT MAX(MASKENKEY) FROM BKUANF WHERE MASKENKEY STARTING :MYSTART INTO :MYDEFAULT;
ELSE IF (MYTABELLE = 'BLLCREK') THEN
SELECT MAX(MASKENKEY) FROM BLLCREK WHERE MASKENKEY STARTING :MYSTART INTO :MYDEFAULT;
ELSE IF (MYTABELLE = 'BLLCWF') THEN
SELECT MAX(MASKENKEY) FROM BLLCWF WHERE MASKENKEY STARTING :MYSTART INTO :MYDEFAULT;
IF (MYDEFAULT IS NULL) THEN
MYDEFAULT = F_PADLEFT('1','0',NDATENLAENGE);
ELSE
BEGIN
/* deaktiviert am 17.06.2005, da durch @GE in Formel nicht richtig bestimmt
MYDEFAULT = F_LEFT(F_RIGHT(MYDEFAULT,(F_STRINGLENGTH(BNUM_FORMEL) - (nPos + 1))), nDATENLAENGE); */
MYDEFAULT = F_MID(MYDEFAULT, nPOS, nDATENLAENGE);
MYDEFAULT = CAST((CAST(F_RIGHT(MYDEFAULT,NDATENLAENGE) AS INTEGER) + 1) AS VARCHAR(40));
MYDEFAULT = F_PADLEFT(MYDEFAULT,'0',NDATENLAENGE);
END
BNUM_FORMEL = F_LEFT(BNUM_FORMEL,nPOS) || MYDEFAULT || F_RIGHT(BNUM_FORMEL,F_STRINGLENGTH(BNUM_FORMEL) - nNullPos);
MYDEFAULT = NULL;
END
/* Generation entfernen */
BNUM_FORMEL = F_REPLACESTRING(BNUM_FORMEL,'@GE','',1,0);
MYDEFAULT = BNUM_FORMEL;
SUSPEND;
END
^