Initialwert bei GP-Nummerierung

Michael Hubenschmid

Hallo Zusammen

Brauche beim Kunden eine GP Nummerierung abhängig von der Kundengruppe.
Der Nummernbereich für jede Kundengruppe ist in einer Anwendertabelle abgelegt.

z.B. Code von: 20000 Code bis: 29999

Habe folgenden SQL String gemacht für die Nummerierung:

IF '[%G;40]' = 'S'

SELECT CAST(MAX(CAST(T0.CARDCODE AS INTEGER))+1 AS varchar(10))
FROM OCRD T0
WHERE
T0.CardType = 'S'
FOR BROWSE

ELSE

SELECT CASE WHEN MAX(CAST(T0.CARDCODE AS INTEGER)) <> 0 Then CAST(MAX(CAST(T0.CARDCODE AS INTEGER))+1 AS varchar(10))
ELSE MIN(T2.Code) END
FROM OCRD T0
INNER JOIN OCRG T1 ON T0.GroupCode = T1.GroupCode
INNER JOIN [@MTF_GP_MGRP] T2 ON T1.GroupName = T2.Name
WHERE
T0.GroupCode ='102'
AND (T0.CardType = 'C' OR T0.CardType = 'L')
HAVING MAX(CAST(T0.CARDCODE AS INTEGER)) < MAX(CAST(T2.U_Cod_bis AS INTEGER))
FOR BROWSE


Jedoch habe ich noch ein Problem für den Initialwert (Fett markiert). D.h. wenn er für die angegeben Kundengruppe beim Anlegen des GP keine Nummer findet soll er den Initialwert aus der Anwendertabelle nehmen (Code von).

Jedoch bringt er mir beim Testen immer nichts zurück (auch im Query-Analyzer).

Auch würde mich interessieren ob es eine möglichkeit gibt hierbei auch eine Warnung herauszulassen, wenn der Nummernkreis voll ist, d.h der Max CardCode den er findet für die Artikelgruppe schon der definierte "Code bis" ist.
Schön wäre es eben dann wenn er die Meldung bekommen würde "Nummernkreis zuende!" und er den GP nicht hinzufügen kann"

Danke für Hilfestellungen.

Michael Hubenschmid

Hallo Zusammen!

Hier nochmals der Code in einer übersichtlicheren Variante.
Hat jemand schon eine Lösung?


IF '[%G;40]' = 'S'

SELECT CAST(MAX(CAST(T0.CARDCODE AS INTEGER))+1 AS varchar(10))
FROM OCRD T0
WHERE
T0.CardType = 'S'
FOR BROWSE

ELSE

SELECT CASE WHEN MAX(CAST(T0.CARDCODE AS INTEGER)) <> 0 Then CAST(MAX(CAST(T0.CARDCODE AS INTEGER))+1 AS varchar(10))
ELSE MIN(T2.Code) END
FROM OCRD T0
INNER JOIN OCRG T1 ON T0.GroupCode = T1.GroupCode
INNER JOIN [@MTF_GP_MGRP] T2 ON T1.GroupName = T2.Name
WHERE
T0.GroupCode ='102'
AND (T0.CardType = 'C' OR T0.CardType = 'L')
HAVING MAX(CAST(T0.CARDCODE AS INTEGER)) < MAX(CAST(T2.U_Cod_bis AS INTEGER))
FOR BROWSE

Michael Egloff

Den Fehler bei der Query sehe ich gerade nicht,
Aber wegen der Fehlermeldung müsstest du wohl dann das Query mit C# ausführen lassen, damit du eine Unterscheidung machen kannst.
Hoffe, das hilft weiter.
0

Comments

0 comments

Please sign in to leave a comment.

Didn't find what you were looking for?

New post