Wir testen zur Zeit AvERP in unserem Unternehmen. Hierbei ist folgendes Problem aufgetreten:
Wenn mehrere Personen gleichzeitig Kundenrechnungen schreiben, kommt es vor, daß das die gleiche Rechnungsnummer mehrfach vergeben wird. Dies ist dann der Fall, wenn beispielsweise zwei Personen relativ zeitgleich einen neuen Rechnungsdatensatz anlegen. Bei der zweiten Rechnung, dann mit dieser Nummer abgespeichert werden soll, gibt es dann logischerweise eine Fehlermeldung und die Rechnungsnummer muß manuell geändert werden.
Dies ist vielleicht noch vertretbar, wenn nur zwei Personen mit der Software arbeiten, da man die Rechnungsnummer im schlimmsten Fall einmal um eine Stelle ändern muß. Je mehr Personen jedoch gleichzeitig Rechnungen schreiben wollen, desto unübersichtlicher wird es wahrscheinlich.
Gibt es eine Möglichkeit dies zu beheben?
Vielen Dank im voraus.
Konflikt bei Vergabe von Rechnungsnummern
Moderator: SYNERPY
-
admin
- Site Admin
- Beiträge: 2673
- Registriert: Di Feb 10, 2004 5:48 am
- Wohnort: Bayreuth
-
Susanne
- Beiträge: 9
- Registriert: Di Jan 18, 2005 1:28 pm
Rechnungen automatisch erstellen
Rechnungen per Utility automatisch erstellen lassen klingt interessant. Wie funktioniert das?
-
SYN12
- Beiträge: 824
- Registriert: Mi Mär 17, 2004 12:11 pm
-
Noket
- Beiträge: 22
- Registriert: Di Feb 14, 2006 10:03 am
Man sollte evtl. trotzdem darauf hinweisen, dass diese Art und Weise nicht bei Auslandskunden angewendet werden darf (sollte), da das Mwst. Nebenkostenkennzeichen (oder so ähnlich) immer auf "1" (16%) gesetzt wird und dadurch Fehler in der Berechnung entstehen können.
Verherrender is aber der Fehler bei dem Utility aus der Maske Kundenlieferschein: wird mit diesem Utility die Rechnung erstellt geht sie an die gleiche Adresse wie der Lieferschein....
(und diese Adresse lässt sich dann von einem normalen Benutzer nicht mehr ändern, da die Rechnungsadresse nicht veränderlich ist, solange es Rechnungspositionen gibt)
aber in allen anderen Fällen geht es so schnell und reibungslos...
Verherrender is aber der Fehler bei dem Utility aus der Maske Kundenlieferschein: wird mit diesem Utility die Rechnung erstellt geht sie an die gleiche Adresse wie der Lieferschein....
(und diese Adresse lässt sich dann von einem normalen Benutzer nicht mehr ändern, da die Rechnungsadresse nicht veränderlich ist, solange es Rechnungspositionen gibt)
aber in allen anderen Fällen geht es so schnell und reibungslos...
-
Noket
- Beiträge: 22
- Registriert: Di Feb 14, 2006 10:03 am
um euch die Sache ein bischen zu vereinfachen hätt ich sogar ein Lösungsvorschlag, der nur in einem Fall nicht funktioniert, indem man zu mehreren Aufträgen einen Lieferschein schreibt, der eigentlich an zu 2 verschidenen Rechnungsadressen hätte geschickt werden sollen (kommt dann keine fehlermeldung oder sowas [wenn sowas überhaupt mal vorkommt]):
Code: Alles auswählen
CREATE PROCEDURE P_BAUF_NACH_BRRCP (
BAUF_ID INTEGER)
AS
DECLARE VARIABLE SJA VARCHAR(1);
DECLARE VARIABLE SNEIN VARCHAR(1);
DECLARE VARIABLE BKUNDE_ID_KUNR INTEGER;
DECLARE VARIABLE BADR_ID_LIEFADRNR INTEGER;
DECLARE VARIABLE BADR_ID_READRNR INTEGER;
DECLARE VARIABLE BRLS_ID INTEGER;
DECLARE VARIABLE BRRC_ID INTEGER;
DECLARE VARIABLE BAUFPO_ID INTEGER;
DECLARE VARIABLE COUNTER INTEGER;
DECLARE VARIABLE BWAER_ID INTEGER;
DECLARE VARIABLE TJA VARCHAR(5);
DECLARE VARIABLE NJA INTEGER;
BEGIN
/* Letzter Stand: 09.02.2005 11:15:47 GK */
/* Aus Auftrag einen Lieferschein und eine Rechnung erzeugen */
/* Letzter Stand 10.03.2004 16:57:19 HB - mit Teilmengen */
/* Letzter Stand 13.12.2004 06:55:53 AS */
/* PROTOKOLLIEREN, DASS AKTION HIER DURCHGELAUFEN IST */
IF (GEN_ID(GEN_ENTWICKLUNG,0) = 0) THEN
INSERT INTO A_WASMACHTIB (PROGRAMMTEIL) VALUES ('P_BAUF_NACH_BRRCP');
EXECUTE PROCEDURE P_BFIRMA_JANEIN RETURNING_VALUES (:SJA, :SNEIN);
BKUNDE_ID_KUNR = NULL;
BADR_ID_LIEFADRNR = NULL;
BADR_ID_READRNR = NULL;
/* Hier muss getestet werden, ob der Auftrag überhaupt Positionen hat,
die geliefert werden können.
Wenn nicht, dann werden auch keine Lieferschein- und
Rechnungsköpfe angelegt */
COUNTER = 0;
FOR SELECT E.ID
FROM BAUFPO E
LEFT OUTER JOIN BARTLH F ON E.BARTLH_ID_LAGERNR = F.ID
WHERE E.BAUF_ID_LINKKEY = :BAUF_ID
INTO :BAUFPO_ID
DO
COUNTER = COUNTER + 1;
IF (COUNTER < 1) THEN EXIT;
/* Informationen zum Auftrag holen */
SELECT BKUNDE_ID_KUNR,
BADR_ID_LIEFADRNR,
BADR_ID_READRNR,
BWAER_ID
FROM BAUF
WHERE ID = :BAUF_ID
INTO :BKUNDE_ID_KUNR,
:BADR_ID_LIEFADRNR,
:BADR_ID_READRNR,
:BWAER_ID;
/* Lieferschein anlegen */
BRLS_ID = NULL;
/* Positionn werden immer zum ältesten Lieferschein anlegen */
SELECT MIN(ID)
FROM BRLS
WHERE BKUNDE_ID_LINKKEY = :BKUNDE_ID_KUNR AND
MASKENKEY NOT STARTING WITH 'X' AND
BADR_ID_LADRCODE = :BADR_ID_LIEFADRNR AND
LSGEDRUCKT = :SNEIN
INTO :BRLS_ID;
IF (BRLS_ID IS NULL) THEN
BEGIN
BRLS_ID = GEN_ID(GEN_BRLS, 1);
INSERT INTO BRLS(
ID,
MASKENKEY,
ANSPRECHP,
BADR_ID_LADRCODE,
LIEFDATUM,
BKUNDE_ID_LINKKEY,
BABT_ID_LSABTNR,
LSGEDRUCKT,
UZEICH,
BLIEBE_ID_VERSBED1K,
BLIEBE_ID_VERSBED2K,
BVERSAND_ID_1,
BVERSAND_ID_2,
BMAND_ID)
SELECT
:BRLS_ID,
NULL,
A.ANSPRECHP,
A.BADR_ID_LIEFADRNR,
A.KLTERMIN,
A.BKUNDE_ID_KUNR,
A.BABT_ID_ABTNR,
:SNEIN,
A.UZEICH,
A.BLIEBE_ID_VERSBED1K,
A.BLIEBE_ID_VERSBED2K,
A.BVERSAND_ID_1,
A.BVERSAND_ID_2,
A.BMAND_ID
FROM BAUF A
WHERE A.ID = :BAUF_ID;
END
SELECT KS.KZ_MWST
FROM BRLS KP
LEFT OUTER JOIN BKUNDE KS ON KP.BKUNDE_ID_LINKKEY = KS.ID
WHERE KP.ID = :BRLS_ID
INTO :TJA;
IF (TJA = :SJA) THEN
TJA = '1';
ELSE
TJA = '2';
SELECT PROZENT
FROM BMWST
WHERE ID = :TJA
INTO :NJA;
/* Rechnungen anlegen */
BRRC_ID = NULL;
SELECT ID
FROM BRRC
WHERE BKUNDE_ID_LINKKEY = :BKUNDE_ID_KUNR AND
BADR_ID_RADRCODE = :BADR_ID_READRNR AND
RGGEDRUCKT = :SNEIN AND
RECHNUNGSART = 'R' AND
BWAER_ID = :BWAER_ID
INTO :BRRC_ID;
IF (BRRC_ID IS NULL) THEN
BEGIN
BRRC_ID = GEN_ID(GEN_BRRC, 1);
INSERT INTO BRRC(
ID,
MASKENKEY,
ANSPRECHP,
GESAMT,
GUTSCHR,
GUTSCHRART,
KURSDF,
BKUNDE_ID_LINKKEY,
MWST,
BMWST_ID_MWSTKZ,
MWSTSATZ,
NETTO,
BADR_ID_RADRCODE,
RECHDATUM,
BABT_ID_RGABTNR,
RGGEDRUCKT,
UZEICH,
VERBUCHT,
VERRECHNET,
BWAER_ID_WAEHRUNGK,
BZAHBE_ID_ZAHLBED1K,
BZAHBE_ID_ZAHLBED2K,
BZAHBE_ID_ZAHLBED3K,
BZAHBE_ID_ZAHLBED4K,
BRRCNK_SUMME,
RECHNUNGSART,
ABSCHLAGPROZENT,
BMAND_ID,
GESAMT_FW,
MWST_FW,
NETTO_FW,
BRRCNK_SUMME_FW,
BWAER_ID,
KURS_FW )
SELECT
:BRRC_ID,
NULL,
B.ANSPRECHP,
0.0,
:SNEIN,
NULL,
B.KURSDF,
B.BKUNDE_ID_KUNR,
0,
:TJA,
:NJA,
0.0,
B.BADR_ID_READRNR,
CURRENT_DATE,
B.BABT_ID_ABTNR,
:SNEIN,
B.UZEICH,
:SNEIN,
:SNEIN,
B.BWAER_ID_WAEHRUNGK,
B.BZAHBE_ID_ZAHLBED1K,
B.BZAHBE_ID_ZAHLBED2K,
B.BZAHBE_ID_ZAHLBED3K,
B.BZAHBE_ID_ZAHLBED4K,
0.0,
'R',
0,
B.BMAND_ID,
0,
0,
0,
0,
B.BWAER_ID,
B.KURS_FW
FROM BAUF B
LEFT OUTER JOIN BFIRMA C ON C.ID = 1
LEFT OUTER JOIN BMWST D ON C.BMWST_ID_MWSTKENNZ = D.ID
WHERE B.ID = :BAUF_ID;
END
/* Positionen in Lieferschein und Rechnung eintragen */
FOR SELECT E.ID
FROM BAUFPO E
LEFT OUTER JOIN BARTLH F ON E.BARTLH_ID_LAGERNR = F.ID
WHERE E.BAUF_ID_LINKKEY = :BAUF_ID
INTO :BAUFPO_ID
DO
BEGIN
UPDATE BRRCP
SET BRRC_ID_RGNR = :BRRC_ID,
BRLS_ID_LSNR = :BRLS_ID
WHERE BRRC_ID_RGNR IS NULL AND
BRLS_ID_LSNR IS NULL AND
BAUFPO_ID_AUFNRPOS = :BAUFPO_ID AND
BKUNDE_ID = BKUNDE_ID;
END
/* Nebenkosten neu berechnen */
EXECUTE PROCEDURE P_BRRCNK_AUTO(:BRRC_ID, 1)
RETURNING_VALUES (:Counter);
/* Rechnungskopf neu berechnen */
EXECUTE PROCEDURE P_BRRC_NEUBERECHNUNG (:BRRC_ID);
ENDCode: Alles auswählen
CREATE PROCEDURE P_BRLS_NACH_BRRCP (
BRLS_ID INTEGER)
AS
DECLARE VARIABLE BKUNDE_ID INTEGER;
DECLARE VARIABLE BADR_ID_LADRCODE INTEGER;
DECLARE VARIABLE BRRC_ID INTEGER;
DECLARE VARIABLE SJA VARCHAR(1);
DECLARE VARIABLE SNEIN VARCHAR(1);
DECLARE VARIABLE COUNTER INTEGER;
DECLARE VARIABLE BKUNDE_BWAER_ID INTEGER;
DECLARE VARIABLE MINID INTEGER;
DECLARE VARIABLE TJA VARCHAR(5);
DECLARE VARIABLE NJA INTEGER;
BEGIN
/* Letzter Stand 07.03.2005 19:02:18 HB */
/* Protokollieren, dass Aktion hier durchgelaufen ist */
IF (GEN_ID(GEN_ENTWICKLUNG,0) = 0) THEN
INSERT INTO A_WASMACHTIB (PROGRAMMTEIL) VALUES ('P_BRLS_NACH_BRRCP');
EXECUTE PROCEDURE P_BFIRMA_JANEIN RETURNING_VALUES (:SJA, :SNEIN);
/* Informationen aus dem Lieferschein holen */
SELECT KA.BKUNDE_ID_LINKKEY,
KA.BADR_ID_LADRCODE,
KB.BWAER_ID
FROM BRLS KA
LEFT OUTER JOIN BKUNDE KB ON KA.BKUNDE_ID_LINKKEY = KB.ID
WHERE KA.ID = :BRLS_ID
INTO :BKUNDE_ID,
:BADR_ID_LADRCODE,
:BKUNDE_BWAER_ID;
SELECT MIN(PL.ID)
FROM BRLS PO
LEFT OUTER JOIN V_BRLSP PL ON PL.BRLS_ID_LSNR = PO.ID
WHERE PO.ID = :BRLS_ID
INTO :MINID;
SELECT KL.BADR_ID_READRNR
FROM BRLS KI
LEFT OUTER JOIN V_BRLSP KO ON KO.BRLS_ID_LSNR = KI.ID
LEFT OUTER JOIN BAUF KL ON KL.MASKENKEY = KO.BAUF_MASKENKEY
WHERE KI.ID = :BRLS_ID AND KO.ID = :MINID
INTO :BADR_ID_LADRCODE;
SELECT KS.KZ_MWST
FROM BRLS KP
LEFT OUTER JOIN BKUNDE KS ON KP.BKUNDE_ID_LINKKEY = KS.ID
WHERE KP.ID = :BRLS_ID
INTO :TJA;
IF (TJA = :SJA) THEN
TJA = '1';
ELSE
TJA = '2';
SELECT PROZENT
FROM BMWST
WHERE ID = :TJA
INTO :NJA;
/* Rechnungen anlegen */
BRRC_ID = NULL;
SELECT ID
FROM BRRC
WHERE BKUNDE_ID_LINKKEY = :BKUNDE_ID AND
BADR_ID_RADRCODE = :BADR_ID_LADRCODE AND
RGGEDRUCKT = :SNEIN AND
RECHNUNGSART = 'R' AND
BWAER_ID = :BKUNDE_BWAER_ID
INTO :BRRC_ID;
IF (BRRC_ID IS NULL) THEN
BEGIN
BRRC_ID = GEN_ID(GEN_BRRC, 1);
INSERT INTO BRRC(
ID,
MASKENKEY,
ANSPRECHP,
GESAMT,
GUTSCHR,
GUTSCHRART,
BKUNDE_ID_LINKKEY,
MWST,
BMWST_ID_MWSTKZ,
MWSTSATZ,
NETTO,
BADR_ID_RADRCODE,
RECHDATUM,
BABT_ID_RGABTNR,
RGGEDRUCKT,
UZEICH,
VERBUCHT,
VERRECHNET,
BRRCNK_SUMME,
RECHNUNGSART,
ABSCHLAGPROZENT,
BMAND_ID,
BZAHBE_ID_ZAHLBED1K,
BZAHBE_ID_ZAHLBED2K,
BZAHBE_ID_ZAHLBED3K,
BZAHBE_ID_ZAHLBED4K,
BWAER_ID_WAEHRUNGK,
GESAMT_FW,
MWST_FW,
NETTO_FW,
BRRCNK_SUMME_FW,
BWAER_ID,
KURS_FW)
SELECT
:BRRC_ID,
NULL,
B.ANSPRECHP,
0.0,
:SNEIN,
NULL,
B.BKUNDE_ID_LINKKEY,
0,
:TJA,
:NJA,
0.0,
B.BADR_ID_LADRCODE,
CURRENT_DATE,
B.BABT_ID_LSABTNR,
:SNEIN,
B.UZEICH,
:SNEIN,
:SNEIN,
0.0,
'R',
0,
B.BMAND_ID,
E.BZAHBE_ID_ZAHL1K,
E.BZAHBE_ID_ZAHL2K,
E.BZAHBE_ID_ZAHL3K,
E.BZAHBE_ID_ZAHL4K,
C.BWAER_ID_FV_WAER,
0.0,
0.0,
0.0,
0.0,
E.BWAER_ID,
F.KURS
FROM BRLS B
LEFT OUTER JOIN BFIRMA C ON C.ID = 1
LEFT OUTER JOIN BMWST D ON C.BMWST_ID_MWSTKENNZ = D.ID
LEFT OUTER JOIN BKUNDE E ON B.BKUNDE_ID_LINKKEY = E.ID
LEFT OUTER JOIN BWAER F ON E.BWAER_ID = F.ID
WHERE B.ID = :BRLS_ID;
END
UPDATE BRRCP XA
SET XA.BRRC_ID_RGNR = :BRRC_ID
WHERE XA.BRRC_ID_RGNR IS NULL AND XA.BRLS_ID_LSNR = :BRLS_ID AND
XA.BAUFPO_ID_AUFNRPOS IN
(SELECT XB.BAUFPO_ID_AUFNRPOS
FROM BRRCP XB
LEFT OUTER JOIN BAUFPO XC ON XB.BAUFPO_ID_AUFNRPOS = XC.ID
LEFT OUTER JOIN BAUF XD ON XC.BAUF_ID_LINKKEY = XD.ID
WHERE XB.BRLS_ID_LSNR = :BRLS_ID AND
XB.BRLS_ID_LSNR IS NOT NULL AND
XD.BWAER_ID = :BKUNDE_BWAER_ID);
/* Nebenkosten neu berechnen */
EXECUTE PROCEDURE P_BRRCNK_AUTO(:BRRC_ID, 1)
RETURNING_VALUES (:Counter);
/* Frachtkosten berechnen */
EXECUTE PROCEDURE P_BRRC_FRACHTKOSTEN(:BRRC_ID, :BRLS_ID);
/* Rechnungskopf neu berechnen */
EXECUTE PROCEDURE P_BRRC_NEUBERECHNUNG (:BRRC_ID);
END