laufende Nummer auf Server

  • #1
T

toxictype

Bekanntes Mitglied
Themenersteller
Dabei seit
28.11.2002
Beiträge
89
Reaktionspunkte
0
Ort
north of North
Hallo again ;),

Ich würde gerne eine Worddatei (.doc) auf einen gemeinsamen Ordner (Server) anlegen, welche bei Aufruf von einem Clienten die jeweilige Belegnummer um eins erhöht und das Dokument dann auch entsprechend speichert. So, daß beim nächsten Aufruf wieder eine Nummer hochgezählt wird.

Hat jemand eine Idee, wie man das bewerkstelligen kann???

Danke
Tox
 
  • #3
Hi Lupos,

vielen Dank für den Link! Mal sehen, ob ich klar komme.
Ist der Pfad bei WORD 2002 oder höher derselbe?

HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word\Options, PROGRAMDIR)
 
  • #4
Hallo,

funzt leider nicht wirklich!
Die Nummer wird nicht hochgezählt!
 
  • #5
toxictype schrieb:
Hi Lupos,

vielen Dank für den Link! Mal sehen, ob ich klar komme.
Ist der Pfad bei WORD 2002 oder höher derselbe?

HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word\Options, PROGRAMDIR)

Hi Tox,

leider nein. Bei 2003 lautet er bspw. ....\Microsoft\Office\10.0\Word\...

Hier wäre vorher die aktuelle Wordversionsnummer abzufragen.
 
  • #6
Hallo,

unter folgendem Link gibt es eine kommerzielle Lösung (kostet als Einplatzversion 29,-- EUR). Warum immer alles selbst erfinden?



Vielleicht hilfts und Du brauchst keine Stunden um das selbst zu programmieren.

Gruß
Kurt Körner
 
  • #7
toxictype schrieb:
Hallo,

funzt leider nicht wirklich!
Die Nummer wird nicht hochgezählt!

Hi Tox,

habe es gerade mal getestet. Funktioniert bei mir einwandfrei unter Word 2000. Hast Du auch die Textmarke Nummer in der Dokumentenvorlage eingebaut? Nur wenn die vorhanden ist, läuft's. D.h. Dokumentenvorlage erstellen. Der 1. Aufruf bringt dann die Box mit der Abfrage der ersten RGNR. Dokument speichern, dann wird die Datei angelegt. Ab dem 2. Aufruf geht es dann richtig.
 
  • #8
Also, ich habe WORD 2002.
Ich öffne ein neues Dokument, kopiere das VB-Script in WORD unter Extras -> Makro -> Visual Basic Editor ein und speichere es. Nun gehe ins Dokument, gebe Nr.: ein und füge über Einfügen -> Textmarke -> Textmarkenname->Nummer' ein. Dann speichere ich das Dokument als Dokumentvorlage (.dot) ab.Dann schließe ich es, werde gefragt, ob ich die Rechnungsnummer->-> speichern möchte, klicke auf JA und das Dokument wird geschlossen. Wenn ich es öffne, werde ich nach nichts gefragt und ich hanbe auch keine Nummer dort stehen. Was mach eich falscH???

Danke Dir, Lupo!
 
  • #9
Hi Tox,

meine vorgehensweise:

- Neues Dokument
- abgespeichert als *.dot
- Extras -> Makro -> Visual Basic Editor
- Einfügen des kopierten VB-Script's in *.dot
- Textmarke (Nummer) nicht vergessen
- Abspeichern
- Dann schließe ich es, werde gefragt, ob ich die Rechnungsnummer->x' speichern möchte, klicke auf NEIN und das Dokument wird geschlossen.
- Doppelklick auf *.dot
- Frage nach neuer Rg-nummer
- Ok, akzeptiere ich
- Dokument speichern, dann wird die Datei angelegt.
- Ab dem 2. Aufruf geht es dann richtig.

Wenn Du das Makro in Deinem neuen *.doc reinkopierst, wird es wohl in der Normal.dot abgelegt. Da wird der Haken sein.

Viel Erfolg :)
 
  • #10
Hi Lupos,

wenn ich es so mache, wie Du es beschrieben hast, funzt es!
Ich denke, der Doppelklick ist der Schlüssel!
Wenn ich die Datei auf den Desktop kopieren und sie mit Doppelklíck öffne, dann wird hochgezählt. Wenn ich in WORD über Datei öffnen gehe, dann geht´s nicht!

Ist das bei Dir auch so?

Danke für alles!

Tox
 
  • #11
Kann man die .ini-Datei, in der die laufende Nummer gespeichert wird auch nur auf einem Rechner (quasi Server) anlegen? Wenn ich nun die .dot-Datei auf einem von einem anderem Rechner aufrufe, beginnt die Zahl bei null bzw. eins.
 
  • #12
toxictype schrieb:
Kann man die .ini-Datei, in der die laufende Nummer gespeichert wird auch nur auf einem Rechner (quasi Server) anlegen? Wenn ich nun die .dot-Datei auf einem von einem anderem Rechner aufrufe, beginnt die Zahl bei null bzw. eins.

Hi Tox,

wohin Du willst. Entscheidend ist, was in der Varablen iniDat steht. Der/Die Ursprungsentwickler(in) haben die Datei lkoal im Rechner in das Programmverzeichnis von der aktuellen Wordversion gelegt. Theoretisch braucht man das nicht. Also folgende Codierzeilen könnten auch raus:

Code:
'Pfad der Ini-Datei aus Registry lesen
progDir = System.PrivateProfileString(, _
    HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word\Options, PROGRAMDIR)
If Right(progDir, 1) <> \ Then progDir = progDir & \
iniDat = progDir & Rechnung.ini

Statt dessen reicht (Bsp. für Server):

Code:
iniDat = F:\Share\Rechnung.ini 

oder

iniDAT = <IP>\Share\Rechnung.ini\

(<IP> = IP-Adresse des Rechners)

Viel Erfolg.
 
  • #13
toxictype schrieb:
Hi Lupos,

wenn ich es so mache, wie Du es beschrieben hast, funzt es!
Ich denke, der Doppelklick ist der Schlüssel!
Wenn ich die Datei auf den Desktop kopieren und sie mit Doppelklíck öffne, dann wird hochgezählt. Wenn ich in WORD über Datei öffnen gehe, dann geht´s nicht!

Ist das bei Dir auch so?

Danke für alles!

Tox

Sorry, bei mir funktioniert es. :-\
 
  • #14
Hi Lupos,

danke für die Antwort! Probiere ich gleich mal aus!
Hat es einen bestimmten Grund, dass Du den Ordner->Share' genannt hast?

Tox
 
  • #15
Hi Tox,

eigentlich egal, soll nur deutlich machen, dass es sich um ein Verzeichnis handelt, das im Netz frei verfügbar, also freigegeben ist, und sich von allen Benutzern nutzen lässt.

Man gönnt sich ja sonst nichts :)
 
  • #16
Ich bin's noch mal! :-[

Es klappt wunderbar! Bis auf eine Sache:

Wenn ich auf einem->client' die Datei auf dem->Server' aufrufe (mittels Verknüpfung), zählt er die Nummer zwar hoch, aber speichert sie nicht auf dem->Server' ab!
Kann das hieran liegen: ???

->Speicherdialog aufrufen
ActiveDocument.Save

Tox
 
  • #17
Hi Tox,

es ist entscheidend was in der Variablen iniDat steht, wenn die folgende Routine ausgeführt wird:

Code:
'Abfrage ob die neue Rechnungsnummer gespeichert werden soll
If MsgBox(Soll die Rechnungsnummer  & rNr &  gespeichert werden?, _
    vbYesNo, Rechnung) = 6 Then
    On Error Resume Next
    Kill iniDat                                    ->Lösche Datei iniDat (Pfad\Dateiname)
    Open iniDat For Output As #1                    ->Erstelle/Öffne Datei iniDat
        Write #1, rNr                           ->Schreibe in Datei Satz mit Inhalt von rNr
    Close #1                                      ->Schliesse Datei
   ->Speicherdialog aufrufen
    ActiveDocument.Save
End If

Ich habe mal die Befehle mit Kommentaren versehen. Entscheidend ist dieser Bereich. Allerdings ist diese Routine m.E. nicht gerade geeignet, für den zeitgleichen Einsatz von mehreren Clients. Bedenke, hier wird die Datei gelöscht und dann neu erstellt. Ich stelle mir gerade vor, 2 Clients lesen die Datei gleichzeitig - dann haben beide dieselbe nächste Nummer, dann schliessen sie das Dokument zu unterschriedlichen Zeitpunkten und ein dritter Client liest in diesem Zeitraum. Chaos . . .

Bei dem Beispiel des Ursprungsautors ging es auch nur um den Ansatz, wie so etwas zu lösen ist für eine Einplatzinstallation. Das Handling der Datei bzw. des Datensatzes muss bei mehreren Clients, die zeitgleich zugreifen, anders gestaltet werden!

Bspw. Datei öffnen und sperren. Datensatz lesen, Nummer erhöhen, wieder fortschreiben und Datei freigeben. Das sieht schon besser aus.

Jetzt entsteht das Problem der fortlaufenden Nummer. Wenn drei Clients nacheinander den Zähler erhöht haben, aber der mittlere die Rechnung nicht gedruckt hat, ist diese Nummer ggf. futsch.

Hm, ich hoffe Dir trotzdem geholfen zu haben. 8)
 
Thema:

laufende Nummer auf Server

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben