Initialwert bei GP-Nummerierung
Michael Hubenschmid
Hallo ZusammenBrauche 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
Please sign in to leave a comment.
Comments
0 comments