Sie haben keine Berechtigung zum Lesen der Tabelle

15. März 2007 21:29

Hallo zusammen,

seid Neuestem bringt Nav 4.0 SP2 beim Erzeugen eines neuen Mandanten die Meldung „Sie haben keine Berechtigung zum Lesen der Tabelle Liquidität Einrichtung“. Diese Meldung erscheint während der Initialisierung des Mandanten.

Jedesmal wenn man nun diesen Mandanten öffnet kommt das Fenster „Initialisierung des Mandanten“ und sogleich die o.g. Fehlermeldung.

Natürlich kann ich jetzt das Backup wieder zurückspielen, dann ist auch die Meldung weg und alles läuft wie geschmiert.

Trotzdem möchte ich gerne wissen wie das kommt. Die Fehlermeldung sagt ja dass ich die Tabelle nicht LESEN kann. Also vermute ich es liegt an der Einrichtungstabelle.

Ich habe mal auf dem MSSQL-Server nach Tabellen mit dem Namen Liquidity Setup gesucht und diese verglichen. In jeder dieser Tabellen ist ein Datensatz mit leeren Einträgen, außer bei Cronus.

Ich arbeite mit einer „Lizenz für kleine Unternehmen“ :-)

Würde mich über Feedback freuen.

Viele Grüße,
Armin

------------------------------------------

Noch ein kleiner Zusatz, habe gerade den Debugger angworfen:

Die Fehlermeldung wird in der Codeunit 2 Company-Initialize produziert, und zwar im folgenden Code:

WITH LiquiditySetup DO
IF NOT FIND('-') THEN BEGIN
INIT;
INSERT;
END;

Die Felder im Object LiquiditySetup->Zoom sind leer.

So wie es aussieht ist das aber ein Code der immer, unabhängig von Berechtigungen, aufgerufen wird...

15. März 2007 22:05

Ich habe ein ähnliches Phänomen gehabt.
Das erzeugen eines Mandanten war kein Problem.
Jedoch sobald ich z.B. einen Auftrag erstellen wollte, kam die Fehlermeldung:
"Sie haben keine Berechtigung zum Lesen der Tabelle Webseite"
(...oder andere Tabellen)
Bei uns hat es geholfen, im CRONUS die entsprechende Tabelle zu leeren.

Mich würde aber auch Interessieren, warum dieses Phänomen auftaucht?
Gruß Mikka

15. März 2007 23:32

Hi Armin,

habt ihr den Mandanten mal mit einer anderen Lizenz (einer Lizenz, die "mehr kann" als eure eigene Lizenz) geöffnet?

Gruß, Marc

16. März 2007 10:46

Marc Teuber hat geschrieben:Hi Armin,

habt ihr den Mandanten mal mit einer anderen Lizenz (einer Lizenz, die "mehr kann" als eure eigene Lizenz) geöffnet?

Gruß, Marc



...und dann versehentlich einen leeren Datensatz in dieser Tabelle angelegt?

16. März 2007 11:37

Hi,
ja, ich habe einen Mandanten schon mal mit der Cronus-Lizenz bearbeitet, um den Kontorahmen zu importieren. Mit unserer Lizenz hat man nämlich keine Berechtigung den entsprechenden Dataport mit der ID 60000 auszuführen.

Ein leerer Datensatz ist tatsächlich in allen Mandanten in der Tabelle „Liquidity Setup“ vorhanden, den habe ich bei jedem Mandanten mal gelöscht (inklusive bei Cronus), aber geholfen hat es nichts.

Das Erzeugen eines neuen Mandanten geschieht aber mit unserer (reduzierten) Lizenz, und der Fehler kommt immer, sogar wenn ich auf meiner Test-Datenbank arbeite.

Die Frage ist: Woher nimmt Navision die Vorlage für die zu erzeugenden Tabellen und die Vorgabe-Werte der Tabellen? Ich habe keine entsprechenden Daten auf dem SQL-Server gefunden.

Viele Grüße,
Armin

16. März 2007 12:18

NavHummel hat geschrieben:...und dann versehentlich einen leeren Datensatz in dieser Tabelle angelegt?

Codeunit 2 Company-Initialize wird beim Erzeugen eines neuen Mandanten ausgeführt. In dieser Codeunit steht u. a. das:

Code:
WITH LiquiditySetup DO
  IF NOT FIND('-') THEN BEGIN
    INIT;
    INSERT;
  END;

Dort wird ein neuer Datensatz erzeugt.

Gruß, Marc

16. März 2007 12:19

Die Vorlage stammt aus der Tabelle, die im Object Designer angezeigt wird, ich meine die heißt auch Object.

16. März 2007 12:28

Hi,

danke für das reichhaltige Feedback.

Was bedeutet eigentlich das '-' im Code IF NOT FIND('-') THEN BEGIN.

Wenn ich mich recht erinnere geht es dabei um Satzmarkierungen ?!? Wenn die FIND-Funktion jetzt ein '-' finden würde, würde die Schleife übersprungen werden, und es käme nicht mehr zu der Fehlermeldung.

Ist ja mehr als seltssam.

Viele Grüße,
Armin

16. März 2007 12:34

Find(-) entspricht fast genau dem Findfirst, ausser dass es einen Cursor öffnet, während findfirst wohl tatsächlich nur den ersten Datensatz holt.
Immer, wenn es nur darum geht, zu sehen, ob es überhaupt einen Datensatz gibt, und der SQL-Server verwendet wird, ist Findfirst die bessere Alternative, den gibts aber erst seit SP1.
Wenn anschließend mit next durch die Datensätze gehüpft werden soll, nimmt man besser findset (bei weniger als 500 Datensätzen) oder Find(-).

16. März 2007 21:38

Hallo,

ich habe jetzt mal eine komplett neue Datenbank "from the scratch" nach Vorschrift aufgesetzt. Siehe da der Fehler tritt auch bei einem komplett neuen System auf.

Wenn man die Cronus-Lizenz temporär einlädt initialisiert der neue Mandant, mit der eigenen Lizenz nicht. Darum ziehe ich zwei Schlüsse:

1. Der erste Mandant wurde mit der Cronus-Lizenz erzeugt, darum ist der Fehler nicht aufgefallen.

2. Mit dem (von einem offiziellen Partner zugesandten) Lizenz-File ist was faul. Kann das sein dass ein Standard-Modul zu wenig enthalten ist, also bei der "Bestellung" solcher Lizenzen bei MS vergessen wird ein Standard-Modul anzugeben?

Man könnte ja jetzt sagen das man kurz die Cronus-Lizenz einlädt um einen neuen Mandanten zu erzeugen, aber das geht nicht mehr sobald mehr als zwei Mandanten in der Datenbank sind.

Was sagt der Fachmann? :-)

Viele Grüße,
Armin

16. März 2007 23:43

Nun, da man in der Regel sowieso immer noch ein paar andere Sachen immer wieder reinschaufeln muss, wie z.B. den Kontenplan,
macht es Sinn, sich einfach mit dem Cronus einen Mandanten vorzubereiten, den man als Template verwenden kann. Dann nur diesen Mandanten mit allen Datenbankobjekten in eine Datensicherung schreiben. Den Demomandant kann man ruhig aus der Datensicherung raus lassen.
Wenn man nun einen neuen Kundenmandanten anlegen will, dann erzeugt man einfach eine leere Datenbank, lädt das Backup rein und benennt den Mandanten um. Wenn man die Mandanten alle in einer Datenbank haben will, ist das auch kein Problem, wenn man den Vorlagemandanten auch entsprechend benannt hat.
Also dann nicht Datei/Mandant/neu sondern Extras/"Datensicherung importieren", was einem dann auch erspart Kontenrahmen und Standard-Buchungsgruppen-Einrichtung jedesmal mühevoll einzurichten.
So machen wir das auch bei uns: 4 Vorlagemandanten, je 2 für SKR03 und 2 für SKR04 jeweils mit normalen Buchungsgruppen und erweiterter Anzahl an Buchungsgruppen. Die werden dann nur noch an den jeweiligen Kunden angepasst und fertig!

Du kannst natürlich auch einfach den Code, der den Fehler verursacht, auskommentieren oder ihn wie folgt verändern:
Code:
WITH LiquiditySetup DO
  IF WRITEPERMISSION THEN
    IF NOT FIND('-') THEN BEGIN
      INIT;
      INSERT;
    END;

damit versucht Navision den Einrichtungsdatensatz für die Liquiditätsanalyse auch nur dann zu erzeugen, wenn sie in der Lizenz enthalten ist und das ist sie nicht in der NfkU!

17. März 2007 13:53

Hi,

danke für das Feedback!

Ich habe (noch) keine Entwicklerlizenz, sonst hätte ich den Code als alter Entwickler schon längst geändert :-) Debuggen kann man ja immer.

Die von Dir erwähnte Code-Änderung gehört eigentlich in das nächste Servicepack, denn es wird alle NfkU's betreffen, vielleicht ist es aber schon im Update für Vista drin, habe das leider nocht nicht.

Der Vorlage-Mandant ist das einzig sinnvolle. Es ist mehr als umständlich einzelne Tabellen über die Einrichtungscheckliste zu kopieren. Das geht vielleicht für zusätzliche Funktionalität, die man nicht im Standard haben will.

Ansonsten finde ich RIM ganz gut, wird an anderer Stelle im Forum diskutiert.

Viele Grüße,
Armin