Anzahl der Felder für Artieklnummern u.a.

Allgemeine Diskussionen um die ERP Software AvERP

Moderator: SYNERPY

Antworten
Geri12
Beiträge: 589
Registriert: Mi Apr 16, 2008 7:51 am

Beitrag von Geri12 »

NPLADMIN hat geschrieben:can't format message 13:158 -- message file C:\Programme\HK-Software\firebird.msg not found.
Damit der Fehler von IBExpert genauer benannt werden kann, wäre es hier sinnvoll, die Datei "firebird.msg" vom Firebird-Install-Verzeichnis (Bsp.: "C:\Programme\Firebird_1x5") ins IBExpert-Verzeichnis (hier: "C:\Programme\HK-Software") zu kopieren.

Dann kommt (auch bei mir mit AvERP2008-A14) die Fehlermeldung ...

Code: Alles auswählen

Wrong numeric type
.
Dynamic SQL Error.
SQL error code = -842.
Precision must be from 1 to 18.
Der Sache wäre mal auf den Grund zu gehen ...
Gruß
Geri12

Software-Version: V4.2.5.2
FDB-Version: AvERP2008-A.14
NPLADMIN
Beiträge: 163
Registriert: Di Okt 07, 2008 7:54 am
Wohnort: Oxbüll / Wees

Beitrag von NPLADMIN »

Zu der Fehlermeldung hier die Korrektur:

Code: Alles auswählen

CREATE OR ALTER PROCEDURE P_BSA_ARTNR_SUCHE (
    id integer,
    artnr varchar(40))
returns (
    maskenkey varchar(40))
as
declare variable smaxmkey varchar(40);
declare variable stemprechts varchar(40);
declare variable nlang numeric(15,0);
declare variable iwhile1 numeric(15,0);
declare variable iwhile2 numeric(15,0);
declare variable iwhile2kopie numeric(15,0);
declare variable nstrminlenmkey numeric(15,0);
declare variable nstrmaxlenmkey numeric(15,0);
declare variable n1 numeric(15,0);
declare variable s1 varchar(40);
declare variable smaxmkey2 varchar(40);
declare variable temp_id integer;
declare variable bmand_id integer;
declare variable mkey varchar(40);
es mussten nur die Nummeric mit einem Wert > 0 vorbelegt werden.

Damit die Artikelnummer richtig hochgezählt wird müsste die Prozedur wie folgt geändert werden:

Code: Alles auswählen

  BEGIN
    /* USERVORGABE BERÜCKSICHTIGEN */
--    SELECT MAX(F_STRINGLENGTH(MASKENKEY))
-- Änderung 27.01.2009 - KTS
    SELECT MAX(F_STRINGLENGTH(MASKENKEY))
    FROM BSA
    WHERE (MASKENKEY STARTING :ARTNR)
    INTO :NLANG;

    IF (NLANG IS NULL) THEN
    BEGIN
--      MASKENKEY = ARTNR || F_PADLEFT('1','0',5);   /* SO HAT NOCH KEINE NUMMER ANGEFANGEN, ALSO EINFACH 1 ANHÄNGEN */
-- Änderung 27.01.2009 - KTS
    MASKENKEY = ARTNR || F_PADLEFT('1','0',0);   /* SO HAT NOCH KEINE NUMMER ANGEFANGEN, ALSO EINFACH 1 ANHÄNGEN*/
      SUSPEND;
      EXIT;
    END
    ELSE
    BEGIN
      IF (NLANG > F_STRINGLENGTH(ARTNR)) THEN
      BEGIN
        /* wenn schon existiert und zahlen hintendran, dann einfach hochzählen */
        SELECT MAX(MASKENKEY)
        FROM BSA
--        WHERE (MASKENKEY STARTING WITH :ARTNR)
--  Änderung 27.01.2009 - KTS
        WHERE MASKENKEY STARTING WITH :ARTNR AND F_STRINGLENGTH(MASKENKEY) = :NLANG
        INTO :MKEY;

/*      MKEY = F_RIGHT(:MKEY,(F_STRINGLENGTH(:MKEY) - 1 - F_SUBSTR('-',F_LRTRIM(:MKEY))));
        MKEY = CAST(MKEY AS INTEGER) + 1;
        MKEY = F_PADLEFT(:MKEY,'0',5);*/

-- Änderung 27.01.2009 - KTS- Zählung direkt nach Vorgabe Bsp: 111,112 (11 ist Vorgabe){
        MKEY = F_RIGHT(:MKEY,F_STRINGLENGTH(:MKEY) - F_STRINGLENGTH(F_LRTRIM(:ARTNR)));
        MKEY = CAST(MKEY AS INTEGER) + 1;
--}
        MASKENKEY = :ARTNR || :MKEY;
        SUSPEND;
        EXIT;
      END
Nach ersten Test´s funktioniert es auch ohne Probleme.
Verbesserungsvorschläge nehme ich gerne entgegen.
Gruß
KTS

AvERP-Exe: 4.2.1.6
Datenbank: AvERP2009-A.01
_________________________
Suchen heißt finden und je mehr man sucht um so mehr findet man. ;-)
Antworten