13. Oktober 2010 20:18
13. Oktober 2010 22:30
"Document No." := NoSeriesMgt.TryGetNextNo(GenJnlBatch."No. Series","Posting Date");
13. Oktober 2010 23:35
Kowa hat geschrieben:Nicht mit INCSTR manuell hochzählen!
Wenn du eine Nummernserie hinterlegt hast, dann müssen die Funktionen aus dem NoSerieManagement auch verwendet werden, damit diese auch im Takt bleibt und u.a. die "Letzte Nr. verwendet" gefüllt wird.
- Code:
"Document No." := NoSeriesMgt.TryGetNextNo(GenJnlBatch."No. Series","Posting Date");
IF ImpCust.FINDFIRST THEN BEGIN //ImpCust ist eine Tabelle > 50.000 mit importierten Daten
REPEAT
GenJnlLine.INIT;
GenJnlLine."Line No." := ImpCust."Line No.";
GenJnlLine."Journal Template Name" := 'ALLGEMEIN';
GenJnlLine."Journal Batch Name" := 'SALDEB06';
GenJnlLine."Posting Date" := ImpCust.Date;
GenJnlLine."Document Date" := ImpCust.Date;
NoSerLine.GET('SLDEB06',10000);
//MyCode := INCSTR(NoSerLine."Last No. Used");
//GenJnlLine."Document No." := MyCode;
GenJnlLine."Document No." := NoSerMng.TryGetNextNo(GenJnlBatch."No. Series","Posting Date");
//... etc. etc.
GenJnlLine.INSERT;
UNTIL ImpCust.NEXT = 0;
14. Oktober 2010 09:22
11. November 2010 08:44
Kowa hat geschrieben:Es ging nicht ums verbuchen, sondern darum, die Konsistenz zwischen generierten Nummern und der Nummernserie zu wahren. Wenn die richtigen Parameter in die Funktion gegeben werden (also der Code der zum Buchblattnamen gehörigen Serie und das Buchungsdatum), dann kommt auch die richtigen Nummern zurück. Nummernserien haben auch ein Startdatum und ein Intervall, ggf.müssen sie chronologisch sein. Nichts davon wird berücksichtigt, wenn man die Funktionen nicht nutzt.
ImpCust.SETFILTER(Date,'01.11.2009..30.11.2009');
IF ImpCust.FINDSET THEN
REPEAT
GenJnlLine.INIT;
.... //weitere Zuweisungen von ImpCust zu GenJnlLine
GenJnlLine."Document No." := NoSeriesMgt.TryGetNextNo(GenJnlBatch."No. Series",ImpCust.Date);
....
GenJnlLine.INSERT;
ImpCust.SETFILTER(Date,'01.11.2009..30.11.2009');
IF ImpCust.FINDSET THEN
REPEAT
GenJnlLine.INIT;
.... //weitere Zuweisungen von ImpCust zu GenJnlLine
GenJnlLine."Document No." := NoSeriesMgt.TryGetNextNo('UMSATZ-0911',ImpCust.Date);
...
GenJnlLine.INSERT;
11. November 2010 10:21
11. November 2010 10:37
Kowa hat geschrieben:Die Meldung hat mit Nummernserien nichts zu tun. Wenn Forms,Reports oder Dataports modal aufgerufen werden, wird zwingend eine EIngabe vom Benutzer erwartet. Wenn das mit einer Schreibtransaktion kombiniert wird (also irgendwo INSERT oder MODIFY stattfindet) dann wäre das System blockiert bis die Eingabe erfolgt. Das ist nicht erlaubt. Also entweder nicht modal starten oder die Schreibtransaktion verlegen oder ein COMMIT dazwischen. Letzeres ist aber besonders bei Transaktionen mit mehreren Tabellen, die entweder ganz oder gar nicht geändert werden müssen, keine gute Lösung und sollte vermieden werden.
GenJnlTemplate.GET('ALLGEMEIN');
GenJnlBatch.GET('ALLGEMEIN','UMSATZ-0911');
IF GenJnlBatch."No. Series" <> '' THEN BEGIN
CLEAR(NoSeriesMgt);
GenJnlLine."Document No.":= NoSeriesMgt.GetNextNo(GenJnlBatch."No. Series",ImpCust.Date,TRUE);
END;
11. November 2010 10:53
Lord_British hat geschrieben:Ich hab beim vorherirgen Code nix modal aufgerufen, der ganze Code ist im OnPush() Trigger eines Buttons auf einer Form, hinter der sich Tabelle 50000 ImpCust verbirgt.