3. Juli 2009 08:41
Guten morgen zusammen.
Ich möchte gerne ein Feld auf einen Report bauen, das den Ersteller enthält. Dafür ist es sinnvoll, das dort auch den Name auftaucht, von dem z.B. die Auftragsbestätigung erstellt hat.
Ist es möglich ein Feld zu generieren, das sich automatisch beim öffnen/bearbeiten einer Form den Windows Anmeldenamen zieht? NAV läuft bei allen in unserer Firma auch unter Windowsanmeldung.
Falles es geht möchte ich dann im zweiten Schritt zu dem Anmeldenamen (der nur aus Nachnamen besteht) den Vornamen dazubauen. Kann man das so machen: Anmeldename := Vorname + Anmeldename
Oder muss ich dann für jeden User dafür eine Variable erstellen, die diesen Wert speichert?
3. Juli 2009 08:50
Wie wäre
User := USERID;
Volker
3. Juli 2009 09:21
Danke für die schnelle Antwort.
Ich bin ziemlich Neu in der Arbeit mit NAV und frag daher nochmal nach.
Was bewirke ich genau mit User := User ID?
3. Juli 2009 09:53
misterelektro1981 hat geschrieben:Danke für die schnelle Antwort.
Ich bin ziemlich Neu in der Arbeit mit NAV und frag daher nochmal nach.
Was bewirke ich genau mit User := User ID?
Der Befehl heißt USERID (und nicht "User ID").
Mit diesem Befehl bekommst du den Login-Namen (also das, was unten auch in der Statusleiste von NAV angezeigt wird) heraus.
Die angegebene Zeile stellt eine Zuweisung des Rückgabewertes an eine (Text-)Variable namens "User" dar.
3. Juli 2009 10:29
USERID würde den kompletten String benutzten den du unten in der rechten Ecke von Navision siehst. Wenn du in einer Domäne bist sieht das so aus: DOMAENENNAME\BENUTZERNAME.
Da du nur den Nachnamen willst, musst du versuchen alles was von dem '\' und den '\' selber löschen. Jetzt hast du den Anmeldenamen. Jetzt musst du, je nachdem wie ihr den Benutzernamen zusammensetzt, musst du ihn "sezieren" und auseinderbringen, um nur noch den Nachnamen zu erhalten. Vielleicht habt ihr ja diese Struktur: Vorname.Nachname . Wenn ja könntest du leicht den Nachnamen hier rausziehen.
3. Juli 2009 12:56
Vieln dank für die Antworten. Leider schaffe ich es heute nicht mehr die Sachen zu testen, geben aber ein Feedback so schnell wie es geht.
Ich wünsche allen ein schönens Wochenende!
6. Juli 2009 08:16
Guten morgen,
das mit USERID funktioniert super. Jetzt hab ich das Problem, dass immer nur der Nachname gezogen wird und ich noch nicht mal weiß aus welcher Tabelle. Der Nachname wird in meiner Testdatenbank groß geschrieben, sollte aber ganz normal geschrieben werden also nur der erste Buchstabe groß.
Wie bekomme ich das hin und dazu noch den entsprechenden Vornamen?
Ich dachte, das kann man mit ein wenig Code lösen, dazu hatte ich folgendes geschrieben: IF USERID = irgendeinen Nachname then USERID = irgendein Vorname + irgendein Nachname;
Leider kamen nur Fehlermeldungen egal wie es ich geschrieben habe.
6. Juli 2009 09:08
USERID ist eine Systemvariable, die darfst du nicht überschreiben.
Wenn du nur eine überschaubare Menge an Usern hast, kannst du das schon mit einer Fallunterscheidung lösen.
- Code:
CASE USERID OF
MUELLER : ErstellerFeld := 'Markus Müller';
...
Da aber normalerweise mehrere Nutzer auf der Datenbank arbeiten, und diese auch im Laufe der Zeit wechseln, solltest du besser eine neue Tabelle anlegen in der du dann den Namen ablegst und später abrufst beim füllen deines Feldes.
Neue Tabelle:
- USERID
- Vorname
- Nachname
Oder, was noch einfacher ist:
Tabelle 13 SAlesperson/Purchaser verwenden.
Benutze hier als Code die USERID des jeweiligen Verkäufers.
Dann kannst du dir einfach über diese Tabelle den vollständigen Namen geben lassen.
6. Juli 2009 10:31
Um die USERID normal zu schreiben, nutz das hier:
- Code:
Ersteller := COPYSTR(USERID,1,1) + LOWERCASE(COPYSTR(USERID,2));
Damit bleibt der 1. Buchstabe groß und der Rest wird klein geschrieben.
Jedoch empfehle ich dir Danjos Lösung mit einer neuen Tabelle. Immer wenn du einen Vor-/Nachnamen brauchst schreibst du ein:
- Code:
//User in der Tabelle suchen, falls nicht vorhanden Fehlermeldung
IF NOT MeineNeueUserTabelle.GET(USERID) then
ERROR("Der Benutzer %1 ist nicht in der User-Tabelle angelegt", USERID);
//Auf User-Daten zugreifen
MESSAGE("Mein Name ist %1 %2", MeineNeueUserTabelle.Vorname, MeineNeueUserTabelle.Nachname);
6. Juli 2009 10:45
Hallo,
ich würde die Änderung mit dem Benutzernamen in der Tabelle "User Setup" machen, dort kann man mit GET(USERID) den passenden Record holen, und benötigt keine zusätzliche Tabelle.
Gruß, Fiddi
6. Juli 2009 11:03
In User-Setup stehen doch die Vor- und Nachnamen nicht drin, oder habe ich das übersehen?
Aufs AD will wohl keiner hier zugreifen um sich die Userdaten zu holen?
Volker
6. Juli 2009 11:17
Hallo ich finde es wirklich nett, dass soviele Anworten geschrieben wurden, es klappt jedoch nichts, aber das Problem bin sicherlich ich dabei.
Mir ist eigentlich egal, wie ich es mache Hauptsache es klappt nachher und egal was ich ausprobiere, ich stoße immer auf Probleme.
An Danjo:
CASE USERID OF
MUELLER : ErstellerFeld := 'Markus Müller';
...
=> woher bekomme ich meine USERID's und was bedeutet ErstellerFeld?
=> falls ich eine neue Tabelle anlegen sollte, wie bekomme ich die Daten nachher auf meinen Report?
=> das mit Tabelle 13 versteh ich garnicht
An Sebastian Pfliegel:
Ersteller := COPYSTR(USERID,1,1) + LOWERCASE(COPYSTR(USERID,2));
=> Woher genau bekomme ich den Ersteller?
//User in der Tabelle suchen, falls nicht vorhanden Fehlermeldung
IF NOT MeineNeueUserTabelle.GET(USERID) then
ERROR("Der Benutzer %1 ist nicht in der User-Tabelle angelegt", USERID);
//Auf User-Daten zugreifen
MESSAGE("Mein Name ist %1 %2", MeineNeueUserTabelle.Vorname, MeineNeueUserTabelle.Nachname);
=> was bewirken ich denn hiermit?? sieht für nen Neuling ziemlich krass aus
An fiddi:
=> öffne ich die Table 91 User Setup im Designer so ist dort nichts gepflegt. Über einen Lookup gelange ich auf die Tabelle Anmeldungen, wo alle User hinterlegt sind. Soll ich hier etwas ändern? Wenn ja wie bekomme ich dann diese Daten, bitte genau, auf meinen Report?
6. Juli 2009 11:27
Puuh, mal eine Frage am Rande:
Hast du schon eine Programmierschulung hinter dir?
Aber nun zu deinen Fragen:
USERID ist eine Systemvariable, die dir due USERID des derzeit eingeloggten Benutzers anzeigt.
Du siehst diese in der Statusleiste unten (z.B. DOMÄNE\MUELLER).
Die Daten aus Tabellen kannst du relativ problemlos auf deinen Reports andrucken, egal ob du die Tabelle selbst erstellst, oder eine verwendest die es schon gibt.
Dazu hat Sebastian dir schon die Funktion geliefert.
IF NOT MeineNeueUserTabelle.GET(USERID) then
ERROR("Der Benutzer %1 ist nicht in der User-Tabelle angelegt", USERID);
Der Code bewirkt das die Recordvariable MeineNeueUserTabelle auf dem Datensatz mit der UserId USERID (DOMÄNE\MUELLER) steht.
Gibt es keinen Datensatz dazu in deiner Tabelle, so gibt Navision eine Fehlermeldung aus und bricht den Report ab.
Den Inhalt der Tabellen felder kannst du dann über Felder in deinen Reprtsections ausgeben.
6. Juli 2009 11:38
@misterelektro1981,
ich meinte, du solltest in der Tabelle "User Setup" ein Feld " Benutzername" einfügen, damit du keine neue Tabelle benötigst (die kostet u.U. Geld).
In der Tabelle "User" oder "Windows- Login" kannst du keine Felder einfügen.
Gruß, Fiddi
6. Juli 2009 13:10
Also vorab, ich habe noch keine Schulung gehabt und versuche es mir hier beizubringen, was mich manchmal ans verzweifeln bringt.
Fiddi:
Wenn ich mir das Feld erstellt habe und mit Daten gespeist habe, wie bekomme ich es denn dann hin, diese Daten auf meinen Report zu bekommen?
6. Juli 2009 13:17
Das ganze funktioniert hier genau so wie Natalie es bereits beschrieben hat:
Natalie hat geschrieben:misterelektro1981 hat geschrieben:Also konkret habe ich mir auf der Table Company Information einige Felder erstellt und gefüllt. Diese Daten ändern sich nicht (ist halt eine Bankverbindung) und sollen auf den Report drauf.
Wenn es sich wie hier um eine Tabelle handelt, die du nur anfangs ein einziges Mal aufrufen musst, dann lege für diese Tabelle eine globale Record-Variable an und hole sie dir (GET, FIND etc.) ein einem möglichst frühen Trigger, z.B. OnPreReport. Füge in einer Section deiner Wahl TextBoxes ein und trage als SourceExpr der Box das entsprechende Tabellenfeld an.
Wenn dir all das nicht wirklich viel sagt, schau dir lieber erst mal den Standard bzw. Istzustand an, um ein Bild zu bekommen. Das sind absolute Basics in C/AL, die du beherrschen solltest, wenn du solch eine Anforderung selber umsetzen möchtest. Wenn ich dir hierfür jetzt den kompletten Quelltext liefere, lernst du nichts dabei.
6. Juli 2009 15:52
Hallo nochmals,
also das mit den Checkboxen hat funktioniert.
Ich bin hier ähnlich vorgegangen. Ich habe in der User Setup Table ein Feld Benutzernamen hinzugefügt und für ein paar User u.a. für mich die Daten eingepflegt. Dann habe ich eine gl. Variable angelegt, die mir die Daten für meinen Report bereit stellt und über den Get Befehl geholt.
Sobald die dann in die Seitenansicht möchte taucht immer eine Fehlermeldung auf: Benutzer Einirichtung Benutzer-ID exitstiert nicht
Ich kann es nicht verstehen, da ich für meinen Namen es doch eingepflegt habe. Hat jemand einen Tip?
6. Juli 2009 16:09
Schätzungsweise versuchst du ein get mit leerem Parameter.
6. Juli 2009 16:25
Zeig doch mal deinen Aufruf von dem GET. In der User Setup solltest du nicht Nachname und Vorname im gleichen Feld speichern (Stichwort Atomarität). Also schön brav zwei Felder erstellen
misterelektro1981 hat geschrieben:Also vorab, ich habe noch keine Schulung gehabt und versuche es mir hier beizubringen, was mich manchmal ans verzweifeln bringt.
Auch wenn es viel Zeit kostet, besorg dir die englischsprachigen Unterlagen C/SIDE INTRODUCTION IN MICROSOFT DYNAMICS NAV 5.0 und C/SIDE SOLUTION DEVELOPMENT IN MICROSOFT DYNAMICS NAV 5.0. Egal welche Nav-Version du hast ist es eine große Hilfe. Ich habe zuerst eine Schulung auf Basis der beiden Unterlagen bekommen und danach die Unterlagen noch einmal eine Woche selbst durchgearbeitet. Ich habe vor kurzem am Marktplatz eine Verkaufsaktion für einen Gutschein zu einer Navision-Grundschulung gesehen, vielleicht steht das Angebot noch.
6. Juli 2009 16:53
Mein Aufruf vom GET ist ganz simple: hier in Report - OnPreReport() habe ich einfach nur gl.Variable.GET geschrieben
Die gl. Variable des Typ Record bezieht sich auf die entsprechende Tabelle.
Ist das zu wenig, sprich muss ich wieder viel Code schreiben?
6. Juli 2009 16:56
Eigentlich nicht. Bei dir müsste es gl.Variable.get(UserID) sein ...
6. Juli 2009 17:04
es könnte evtl. sein, das in USERID 'Domäne\Benutzer' drinsteht, in der "User Setup" steht nur "Benutzer". Wenn du mit Windows-Anmeldung arbeitest, kannst du dann über die Tabelle "Windows- Login" den eigentlichen Benutzernamen ermitteln.
Gruß, Fiddi
6. Juli 2009 21:51
Wir sind in einer Windows-Domäne und erhalten nur den Usernamen nicht die Domäne (nehmen Windows-Login).
Und ja du musst RecordVariable.GET(USERID) schreiben, denn der Parameter sagt, du möchtest den Datensatz des Records mit dem Primärschlüssel deines angemeldeten Users.
7. Juli 2009 11:43
Hallo,
also ich habe es so gemacht wie beschrieben. Wenn ich auf Seitenansicht ohne Filter gehe, dann erscheint für z.B. alle gebuchten Rechnungen, auch die nicht von mir erstellt wurden, mein ganzer Name.
Jetzt kommen schon wieder einige Fragen auf.
Warum taucht mein Name auf allen erstellten gebuchten Rechnungen auf, er sollte ja nur auf denen auftauchen die auch von mir gebucht wurden. Ich habe dann das gleiche Feld aus der Table User Setup, das ich hinzugefügt habe wo der komplette Name hinterlegt ist in den Sales Invoice Header geschrieben (für die Rechnung). Das habe ich gemacht, damit die Daten dort gespeichert werden. Jedoch erscheint so immer eine Fehlermeldung => Die folgenden Felder müssen vom gleichen Typ sein Feld:Benutzername <--Verkaufskopf Tabelle:Verkaufsrechnungskopf <--Verkaufskopf Typ <-- Text40 <--Date
Kann man da so machen, um den User zu speichern unter den geb.Rechnugen und wieso tritt dieser Fehler auf?
Ein weiteres Problem ist, das die Seitenansicht nur ohne Filter funktioniert. Ohne Filter werden alle geb. Rechnungen angezeigt. Mit Filter, d.h. wenn ich mir nur eine bestimmte geb. Rechnung zeigen lassen will, dann kommt nichts. Woran liegt das denn?
7. Juli 2009 13:04
Lustige Ratestunde
misterelektro1981 hat geschrieben:Warum taucht mein Name auf allen erstellten gebuchten Rechnungen auf, er sollte ja nur auf denen auftauchen die auch von mir gebucht wurden.
Weil du die Variable, die den Namen aufnimmt, nicht leerst. Wenn dann kein anderer User gefunden wird, behält er eben den, der schon dort eingelesen wurde.
misterelektro1981 hat geschrieben:Jedoch erscheint so immer eine Fehlermeldung => Die folgenden Felder müssen vom gleichen Typ sein Feld:Benutzername <--Verkaufskopf Tabelle:Verkaufsrechnungskopf <--Verkaufskopf Typ <-- Text40 <--Date
Du hast ein Feld mit einer ID hinterlegt, die in der anderen Tabelle schon belegt war. Die eine ist vom Typ Text40, die andere vom Typ Date. Das darf bei diesen beiden Tabellen aber nicht so sein, da Nav beim Erstellen der Rechnung alle Felder mit gleicher ID übertragen will. Dafür müssen sie vom gleichen Typ sein.
misterelektro1981 hat geschrieben:Ein weiteres Problem ist, das die Seitenansicht nur ohne Filter funktioniert. Ohne Filter werden alle geb. Rechnungen angezeigt. Mit Filter, d.h. wenn ich mir nur eine bestimmte geb. Rechnung zeigen lassen will, dann kommt nichts. Woran liegt das denn?
Weil die Filterung keine Rechnung findet.
Wie gesagt, alles freudig geraten :)
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.