Nummernkreise: "EEI" wird zu "I" ?

Allgemeine Diskussionen um die ERP Software AvERP

Moderator: SYNERPY

Antworten
2mad
Beiträge: 79
Registriert: Fr Apr 15, 2005 8:52 am

Nummernkreise: "EEI" wird zu "I" ?

Beitrag von 2mad »

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!
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Wurde am 4. August behoben.

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

^

Antworten