NAV-Tools

24. September 2007 22:57

Diese Sammlung von Codeunits enthält zahlreiche nützliche Funktionen, die den Alltag eines Programmierers deutlich erleichtern.

  • GlobalVariableManagement
    Diese (SingleInstance-)Codeunit ist ein Beispiel, wie man "anwendungsglobale" Variablen definieren kann.
    (In diesem Beispiel wird ein Druckername hinterlegt, welcher in der Codeunit 1 über die entsprechende Funktion abgefragt werden kann.)
  • EncodeDecodeManagement
    • MD5
      Diese Funktion ermittelt den MD5-Hash des übergebenden Textes.
    • Base64EncodeStream
      Diese Funktion erzeugt eine Base64-Zeichenfolge (als Stream) für den übergebenden (Binär-)Stream
    • Base64DecodeStream
      Diese Funktion erzeugt einen (Binär-)Stream für den übergebenen (Base64-)Stream
    • EncodeFF
      Diese Funktion verschlüsselt einen übergebenen Text-String mittels der sogenannten "FF-Maske", dabei wird auch die Reihenfolge der einzelnen Zeichen innerhalb des Strings vertauscht.
    • DecodeFF
      Mit dieser Funktion kann der per "EncodeFF" verschlüsselte Text wieder in Klartext umgewandelt werden.
  • DatabaseManagement
    • GetDatabaseName
      Diese Funktion liefert den Namen der aktuell verwendeten Datenbank zurück.
    • GetServerName
      Diese Funktion liefert den Servernamen zurück.
    • GetServerType
      Diese Funktion liefert die verwendete Serverart (Native oder MS-SQL) zurück.
    • GetParameterValue
      Diese Funktion liefert den Wert eines beliebigen Parameters zurück, mit dem Dynamics NAV aufgerufen wurde.
    • GetDBUsagePercent
      Diese Funktion ermittelt die ungefähre Auslastung der Datenbank in Prozent.
      (Dieser Wert kann von der "offiziellen" Angabe abweichen!)
    • GetObjectUsageKB
      Diese Funktion ermittelt den Speicherplatzverbrauch der in der Datenbank enthaltenen Objekten.
    • GetDataUsageKB
      Diese Funktion ermittelt den Gesamt-Speicherplatzverbrauch der einzelnen Datenbankteile.
    • GetDBSizeKB
      Diese Funktion ermittelt den Speicherplatzverbrauch der in der Datenbank gespeicherten Daten.
    • GetMySessionID
      Diese Funktion liefert die Session-ID der eigenen Sitzung zurück.
    • CountActiveSessions
      Diese Funktion liefert die Anzahl aktuell verwendeter Sessions zurück.
    • LocateZupFile
      Diese Funktion liefert die absolute Pfadangabe der eigenen ZUP-Datei zurück.
    • DeleteZupFile
      Diese Funktion löscht die eigene ZUP-Datei und erstellt anschließend eine neue "leere" ZUP-Datei an gleicher Stelle mit gleichem Namen.
    • CreateZupFile
      Diese Funktion erstellt eine neue "leere" ZUP-Datei.
    • DecompileZupFile
      Diese Funktion erstellt eine Textdatei mit Initialisierungswerten, welche anschließend als Ausgangsbasis für die Funktion "CreateZupFile" verwendet werden können.
  • DateAndTimeManagement
    • HMS2Time
      Diese Funktion stellt das Äquivalent zu DMY2Date dar.
    • Time2HMS
      Diese Funktion stellt das Äquvalent zu Date2DMY dar.
    • CalcTime
      Diese Funktion stellt das Äquivalent zu CalcDate dar.
    • RoundTime
      Diese Funktion stellt das Äquivalent zu RoundDateTime dar.
    • Int2Time
      Diese Funktion ermittelt aus der angegebenen Anzahl Millisekunden (nach Mitternacht) die aktuelle Uhrzeit.
    • Time2Int
      Diese Funktion ermittelt die Anzahl Millisekunden (nach Mitternacht) von einer angegebenen Uhrzeit.
    • Time2HHMM
      Diese Funktion formatiert eine Uhrzeit im Format HH:MM.
    • HHMMSS2Time
      Diese Funktion erstellt eine Uhrzeit aus einem Text im Format HHMMSS.
    • Date2YYYYMMTT
      Diese Funktion formatiert ein Datum im Format JJJJMMTT
    • YYYYMMTT2Date
      Diese Funktion erstellt ein (Dynamics NAV) Datum aus einem Text im Format JJJJMMTT
    • Date2WWYYYY
      Diese Funktion formatiert ein (Dynamics NAV) Datum im Format KW/JJJJ.
      Hinweis: Der Format-Befehl berücksichtigt nicht, dass sich die Jahreszahl (z. B. beim 31.12.2007) ändern könnte.
    • JulianDayNo2GregorianDate
      Diese Funktion errechnet das gregorianische Datum einer julianischen Tageszahl.
    • JulianDayNo2JulianDate
      Diese Funktion errechnet das julianische Datum einer julianischen Tageszahl.
    • GregorianDate2JulianDayNo
      Diese Funktion errechnet die julianische Tageszahl eines gregorianischen Datums.
    • JulianDate2JulianDayNo
      Diese Funktion errechnet die julianische Tageszahl eines julianischen Datums
    • GregorianDate2JulianDate
      Diese Funktion errechnet das julianische Datum eines gregorianischen Datums.
    • JulianDate2GregorianDate
      Diese Funktion errechnet das gregorianische Datum eines julianischen Datums.
    • CountWorkingDays
      Diese Funktion zählt die Anzahl Arbeitstage zwischen zwei Dati unter Berücksichtigung des angegebenen Basiskalenders.
    • CountCustomizedWorkingDays
      Diese Funktion zählt die Anzahl Arbeitstage zwischen zwei Dati unter Berücksichtigung des angegebenen spezifischen Kalenders.
    • CountFinancialDays
      Diese Funktion zählt die Anzahl Finanztage zwischen zwei Dati.
      Hinweis: Jede Nation definiert die Finanztage anders!
      Diese Funktion geht davon aus, dass ein Monat 30 Tage und ein Jahr 360 Tage hat. Nur vollständig abgelaufene Tage werden berücksichtigt.
    • IndustrialDate2NormalDate
      Diese Funktion errechnet das Datum eines Industriedatums.
      (Industriedatum = TagDesJahres/Jahr)
    • NormalDate2IndustrialDate
      Diese Funktion errechnet das Industriedatum eines Datums.
    • IndustrialTime2NormalTime
      Diese Funktion errechnet die Uhrzeit einer Industrie-Uhrzeit.
      (Eine Industrie-Stunde hat 100 Minuten.)
    • NormalTime2IndustrialTime
      Diese Funktion errechnet die Industrie-Uhrzeit einer Uhrzeit.
  • WindowsScriptHostManagement
    • CreateFullKey
      Diese Funktion erstellt die vollständige Pfadangabe zu einem Windows-Registry-Schlüssels anhand eines angegebenen Pfades und eines Schlüssels.
    • RegRead
      Diese Funktion liefert den Wert eines angegebenen Windows-Registry-Schlüssels.
    • RegWrite
      Diese Funktion . ändert den Wert bzwerstellt einen angegebenen Windows-Registry-Schlüssel.
    • RegDelete
      Diese Funktion löscht einen angegebenen Schlüssel bzw. Pfad in der Windows-Registry.
    • MsgBox
      Diese Funktion ermöglicht die Generierung einer vollwertigen Message-Box, wobei der Titel, der Text, das Symbol sowie die anzuzeigenden Schaltflächen frei definiert werden können.
    • SendKeys
      Diese Funktion sendet eine beliebige Zeichenfolge an die aktive Anwendung. (In diesem Fall "Dynamics NAV".)
    • LogOff
      Diese Funktion sendet die Zeichenfolge zum Schließen der aktuellen Datenbank an Dynamics NAV.
    • ReLogOn
      Diese Funktion sendet die Zeichenfolge zum Schließen der aktuellen Datenbank und öffnen der zuletzt verwendeten Datenbank an Dynamics NAV.
      Hinweis: Da die Datenbank gerade geschlossen wurde ist sie die zuletzt verwendete Datenbank und wird somit erneut geöffnet.
  • LicenceManagement
    • GetLicenseHeader
      Diese Funktion liefert die Zeilen der Lizenzdatei zurück, die den Lizenznehmer (inkl. Adresse, ...) enthalten.
    • GetLicensee
      Diese Funktion liefert den Namen des Lizenznehmers zurück.
    • GetMaxNoOfSessions
      Diese Funktion liefert die maximale Anzahl konkurrierender Sessions laut Lizenz zurück.
      Hinweis: Die Lizenzen von Microsoft Business Solution Providern (MBSP) sind aufgrund von Platzmangel beschnitten, so dass die relevanten Informationen nicht ermittelt werden können.
    • CheckDataLicensePermission
      Diese Funktion prüft, ob ein bestimmtes Recht (Lesen, Einfügen, Bearbeiten, Löschen) für die Daten der angegebenen Tabelle in der Lizenz vorhanden ist.
    • CheckObjectLicensePermission
      Diese Funktion prüft, ob die Ausführungs-Berechtigung für ein bestimmtes Objekt (Table, Form, Report, ...) in der Lizenz vorhanden ist.
    • ShowLicenseError
      Diese Funktion generiert eine Fehlermeldung entsprechend den Dynamics NAV-Standard.
    • IsDemonstrationCompany
      Diese Funktion prüft, ob es sich um einen Demo-Mandanten handelt.
    • CheckTextFin
      Diese Funktion stellt ein Beispiel dar, wie man "virtuelle Granules" erstellen kann.
  • FileManagement
    • FormatFileSize
      Diese Funktion formatiert eine Dateigröße (in Bytes) in die größtmögliche Größenangabe (bis hin zu Zeta-Bytes).
      ExtractFolder
      Diese Funktion ermittelt den Ordner eines vollständigen Dateinamens.
      ExtractFilename
      Diese Funktion ermittelt den reinen Dateinamen eines vollständigen Dateinamens (inkl. Ordnerangabe).
      ExtractExtension
      Diese Funktion ermittelt die Dateiendung eines Dateinamens.
      OpenFolder
      Diese Funktion öffnet ein Dialog-Fenster zur Auswahl eines Ordners.
      AddBackSlash
      Diese Funktion stellt sicher, dass eine Ordnerangabe mit einem Backslash endet.
      DelBackSlash
      Diese Funktion stellt sicher, dass eine Ordnerangabe nicht mit einem Backslash endet.
      ZipFolder
      Diese Funktion kopiert die angegebene Datei/den angegebenen Ordner in einen ZIP-komprimierten Ordner.
  • HolidayManagement
    • Holiday
      Diese Funktion berechnet, ob ein angegebenes Datum (in einem bestimmten D-A-CH-Land/-Bundesland/Kanton) ein Feiertag ist, und ob dieser darüber hinaus auch noch arbeitsfrei ist.
    • CalcEaster
      Diese Funktion berechnet das Datum des Ostersonntags des angegebenen Jahres.
    • CalcAdvent
      Diese Funktion berechnet den 1. Advent des angegebenen Jahres.
  • TextManagement
    • ANSI2ASCII
      Diese Funktion konvertiert einen ANSI-Text in einen ASCII-Text.
      Hinweis: ANSI = ISO8859-1 ("Latin-1") - ASCII = Codepage 850 ("DOS-Latin-1")
    • ASCII2ANSI
      Diese Funktion konvertiert einen ASCII-Text in einen ANSI-Text.
      Hinweis: ANSI = ISO8859-1 ("Latin-1") - ASCII = Codepage 850 ("DOS-Latin-1")
    • ASCII2EBCDIC
      Diese Funktion konvertiert einen ASCII-Text in einen EBCDEC-Text.
      Hinweis: ASCII = Codepage 850 ("DOS-Latin-1")
    • EBCDIC2ASCII
      Diese Funktion konvertiert einen EBCDIC-Text in einen ASCII-Text.
      Hinweis: ASCII = Codepage 850 ("DOS-Latin-1")
    • Umlaut2PlainText
      Diese Funktion konvertiert Umlaute und Sonderzeichen in "einfache" Zeichen (z. B. "ß" -> "ss", "Ä" -> "AE")
    • ANSI2HTML
      Diese Funktion konvertiert Sonderzeichen eines ANSI-Textes in die entsprechende HTML-Schreibweise.
      Hinweis: ANSI = ISO8859-1 ("Latin-1")
    • HTML2ANSI
      Diese Funktion konvertiert einen Text mit in HTML-Schreibweise geschriebener Sonderzeichen in einen ANSI-Text.
      Hinweis: ANSI = ISO8859-1 ("Latin-1")
    • Text2HTMLdec
      Diese Funktion konvertiert sämtliche Zeichen in die dezimale HTML-Schreibweise.
    • HTMLdec2Text
      Diese Funktion konvertiert einen Text mit in dezimaler HTML-Schreibweise geschriebener Zeichen in normalen Text.
    • Text2HTMLhex
      Diese Funktion konvertiert sämtliche Zeichen in die hexadezimale HTML-Schreibweise.
    • HTMLhex2Text
      Diese Funktion konvertiert einen Text mit in hexadezimaler HTML-Schreibweise geschriebener Zeichen in normalen Text.
    • TidyPhoneNo
      Diese Funktion eliminiert sämtliche nicht-nummerische Zeichen (ausser dem Plus-Zeichen) einer Zahlenkombination.
      Beispiel: +49 (123) 456789-0 --> +491234567890
    • DecStr
      Diese Funktion stellt das Äquivalent zu INCSTR dar.
    • NormalizeText
      Diese Funktion konvertiert einen Text so, dass immer nur der erste Buchstabe nach einem Trennzeichen (Leer, Bindestrich, ...) groß und der Rest klein geschrieben ist.
  • ColorManagement
    • RGB2Color
      Diese Funktion errechnet aus den übergebenen Rot-, Grün- und Blau-Werten den korrespondierenden (Dynamics NAV-)Farbwert.
      Color2Blue
      Diese Funktion extrahiert den Blau-Wert aus einem (Dynamics NAV-)Farbwert.
      Color2Green
      Diese Funktion extrahiert den Grün-Wert aus einem (Dynamics NAV-)Farbwert.
      Color2Red
      Diese Funktion extrahiert den Rot-Wert aus einem (Dynamics NAV-)Farbwert.
  • NumberManagement
    • Bin2Hex
      Diese Funktion konvertiert einen Binärwert in einen Hexadezimalwert um.
    • Bin2Int
      Diese Funktion konvertiert einen Binärwert in einen Dezimalwert um.
    • Bin2Oct
      Diese Funktion konvertiert einen Binärwert in einen Oktalwert um.
    • Bin2User
      Diese Funktion konvertiert einen Binärwert in einen benutzerdefiniertes Zahlensystem um.
    • Hex2Bin
      Diese Funktion konvertiert einen Hexadezimalwert in einen Binärwert um.
    • Hex2Int
      Diese Funktion konvertiert einen Hexadezimalwert in einen Dezimalwert um.
    • Hex2Oct
      Diese Funktion konvertiert einen Hexadezimalwert in einen Oktalwert um.
    • Hex2User
      Diese Funktion konvertiert einen Hexadezimalwert in ein benutzerdefiniertes Zahlensystem um.
    • Int2Bin
      Diese Funktion konvertiert einen Dezimalwert in einen Binärwert um.
    • Int2Hex
      Diese Funktion konvertiert einen Dezimalwert in einen Hexadezimalwert um.
    • Int2Oct
      Diese Funktion konvertiert einen Dezimalwert in einen Oktalwert um.
    • Int2User
      Diese Funktion konvertiert einen Dezimalwert in ein benutzerdefiniertes Zahlensystem um.
    • Oct2Bin
      Diese Funktion konvertiert einen Oktalwert in einen Binärwert um.
    • Oct2Hex
      Diese Funktion konvertiert einen Oktalwert in einen Hexadezimalwert um.
    • Oct2Int
      Diese Funktion konvertiert einen Oktalwert in einen Dezimalwert um.
    • Oct2User
      Diese Funktion konvertiert einen Oktalwert in ein benutzerdefiniertes Zahlensystem um.
    • User2Bin
      Diese Funktion konvertiert ein benutzerdefiniertes Zahlensystem in einen Binärwert um.
    • User2Hex
      Diese Funktion konvertiert ein benutzerdefiniertes Zahlensystem in einen Hexadezimalwert um.
    • User2Int
      Diese Funktion konvertiert ein benutzerdefiniertes Zahlensystem in einen Dezimalwert um.
    • User2Oct
      Diese Funktion konvertiert ein benutzerdefiniertes Zahlensystem in einen Oktalwert um.
    • User2User
      Diese Funktion konvertiert ein benutzerdefiniertes Zahlensystem in ein benutzerdefiniertes Zahlensystem um.
  • RecRefManagement
    • GetBestKey
      Diese Funktion ermittelt die optimale Sortierung anhand der gesetzten Filter.
    • FormatDataType
      Diese Funktion formatiert einen Text entsprechend dem Datentyps des angegebenen Feldes.
    • EvaluateFieldRef
      Diese Funktion evaluiert einen String in eine FieldReference.
    • GetLastErrorText
      Diese Funktion liefert die letzte Fehlermeldung zurück, falls eine Funktion mit Fehlerunterdrückung aufgerufen wurde.
    • FieldIsEmpty
      Diese Funktion liefert zurück, ob die FieldReference einen leeren Feldwert repräsentiert.
    • IsPrimaryKeyField
      Diese Funktion liefert zurück, ob das angegebene Feld Teil des Primärschlüssels ist.
    • ValidateText
      Diese Funktion prüft, ob der übergebene Text in ein bestimmtes Feld validiert werden kann.
    • LookupText
      Diese Funktion ruft die LookUp-Form für ein bestimmtes Feld auf (sofern möglich).
      Hinweis: Es sind nicht alle Tabellen spezifiziert, weitere können aber auf einfachste Art hinzugefügt werden.
    • GetTableRelation
      Diese Funktion liefert die Tabellennummer der referenzierten Tabelle des übergebenen Feldes zurück.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

9. April 2008 09:10

Hallo Timo,

ich wollte grade mal die Funktion "OpenFolder" aus der CU FileManagement ausprobieren.

In der Funktion hast du die lokale Variable "ActiveWindow" definiert.
Die Automation wird bei mir als "Unknown Automation Server.Unknown Class" angezeigt.

Hab ich da was übersehen?

Gruß,
Rolf

4. Juni 2008 15:39

Hallo,

ich verwende diese zwei TextManagement Funktionen in NAV 5 und bin dabei wohl ueber einen Navision Bug gestolpert.

Code:
MailBody := TM.ANSI2HTML(TM.ASCII2ANSI(NMB.Content));


Der Rueckgabewert der 1. Funktion ist der Parameter der 2. Funktion. Dabei bringt er hin und wieder die Zeichen an der 255. Stelle durcheinander und kopiert dann Teile vom Anfang des Strings dorthin, obwohl er nur Sonderzeichen HTML konform austauschen soll!

Macht man daraus einen 2 Zeiler, gibt es keine Probleme mehr. :roll:
Code:
MailBody := TM.ASCII2ANSI(NMB.Content);
MailBody := TM.ANSI2HTML(MailBody);


Gruesse
feri

4. Juni 2008 17:03

rkaufmann hat geschrieben:In der Funktion hast du die lokale Variable "ActiveWindow" definiert.
Die Automation wird bei mir als "Unknown Automation Server.Unknown Class" angezeigt.

Hab ich da was übersehen?

Du kannst die Stelle im C/AL-Code auch durch eine 0 (Null) ersetzen, oder du lädst dir die DLL von mibuso herunter.
Die genaue URL ist in der entsprechenden Funktion als Kommentar hinterlegt.

5. Juni 2008 07:45

Das hab ich völlig übersehen.

Danke.

5. Juni 2008 09:30

feri hat geschrieben:Macht man daraus einen 2 Zeiler, gibt es keine Probleme mehr. :roll:

Hallo feri,

vielen Dank für diesen Hinweis.
Hast du zufällig die Möglichkeit, dieses Verhalten mit einer anderen Runtime-Version (fin.exe) nochmals zu prüfen?
Dadurch könnte man dann herausfinden, ob es ein Fehler innerhalb eines einzelnen Build ist oder sich schon ewig durchzieht.

22. Juli 2008 10:13

Hallo,

ich konnte mir das leider erst jetzt wieder etwas ansehen.
Mit Version 3.60 war der Fehler nicht nachvollziehbar. Neugierig geworden habe ich es dann nochmal mit 5.00 ausprobiert, da hat dann auch alles gepasst.

Leider habe ich die genaue Testmail von damals nicht mehr um das 100%ig zu testen. Jedenfalls habe ich einige verschiedene Sachen getestet und es hat gepasst. Moeglich, dass die Testmail von damals ganz besonders war. :roll:

Sicherheitshalber werde ich hier aber immer den 2 Zeiler verwenden, man weiss ja nie. :wink:

Gruesse
feri

Re: NAV-Tools

4. Dezember 2008 11:03

Vielen Dank für die Ansii2HTML Funktion.
Hat mir einiges erspart :)

Re: NAV-Tools

24. Juni 2009 11:12

Hallo Timo,

deine NAV-Tools sind klasse! Ich hatte allerdings jetzt ein kleines Problem, das ich gelöst habe: Bei der Konvertierung von ASCII nach ANSI wird das Euro-Zeichen nicht konvertiert. Das kannst du hinzufügen indem du hinten in der Funktion InitCharMap folgende Zeile anhängst:

ANSI[95] := 128; ASCII[95] := 176; // Euro

Außerdem musst du natürlich die Längen der Variablen ASCII und ANSI auf 95 erhöhen.

Viele Grüße

Rainer

Re: NAV-Tools

10. Dezember 2009 12:52

Hallo Timo,

erst einmal vielen Dank, das ich deine geschriebenen Codeunits verwenden darf, einige haben mir schon oft weiter geholfen!
Nun muss ich per Code ein Mandanten öffnen, was auch teilweise funktioniert.
das Schwierige ist das Filtern, da wir mehrere Mandanten haben.
In das Auswahl Fenster der Mandanten komme ich und ich wollte probieren, dann über die Tastenkombination ALT+A+L zu "drücken", um mir den Mandant zu filtern, den ich öffnen möchte.
Das funktioniert auch mehr oder weniger. Problem an der ganzen Sache ist, das das Mandant-Auswahl-Fenster nicht im Vordergrund steht und der Tabellenfilter sich für das Fenster öffnet, was im Hintergrund noch offen ist.
Meine Frage: Ist es möglich, über die SendKeys-Funktion ein Strg und ein TAB zu übergeben?
Da es ja durch ein % bei dem ALT auch geht, erhoffe ich mir eine Lösung :)

Vielen Dank schon mal im Vorraus!

Re: NAV-Tools

10. Dezember 2009 13:02

Mit der Forensuche findest du einige Beiträge zum Thema :-)
Anbei eine kleine Übersicht.

Windows sripting host hat geschrieben:Man kann jeden Buchstaben auf der Tastatur automatisieren,
hier eine kleine Übersicht der Sondertasten:

Taste - Zeichen
ALT - %
Bild ab - {PGDN}
Bild auf - {PGUP}
Druck - {PRTSC}
Einfg - {INSERT}, {INS}
Ende - {END}
Entf - {DELETE}, {DEL}
Escape - {ESC}
F1 bis F12 - {F1} bis {F12}
Feststelltaste - {CAPSLOCK}
Hilfe - {HELP}
nach links - {LEFT}
nach rechts - {RIGHT}
nach oben - {UP}
nach unten - {DOWN}
NUM- Feststell - {NUMLOCK}
Pause - {BREAK}
Return - {ENTER} oder ~
Rollen- Feststelltaste - {SCROLLOCK}
Pos1 - {HOME}
Rücktaste - {BACKSPACE}, {BS}, {BKSP}
STRG - ^
Tab - {TAB}
Umschalt - +
Startmenü öffnen - ^{ESC}
Quelle: quatschtel.de - Windows Scripting Host

Re: NAV-Tools

3. Dezember 2010 14:47

Hallo Timo,

ich nutze die TextManagement CU schon lange und sie hat immer hervorragende Dienste geleistet.
Heute ist mir aber eins aufgefallen:
Wenn an eine Konvertierung von ASCII nach ANSI macht und im String die hochgestellte 2, wie z.B. bei m² drin ist, wird dieses Zeichen nicht richtig konvertiert.
Obwohl das in den Konverterstrings vorgesehen ist.
Code:
ANSI[18] := 178;   ASCII[18] := 253;  // ²


Wenn ich den konvertierten String in eine Dateischreibe (TEXTMODE=TRUE) dann steht da irgend ein anderes Zeichen an der Stelle.

Ich kann mir da keinen Reim drauf machen.
Die Codeunit wird ausgeführt unter NAV 2009 Classic Client mit SQL.

Wäre schön, wenn jemand einen Tipp hätte, woran das liegen kann.

Re: NAV-Tools

3. Dezember 2010 15:20

Vielleicht verwendest du im ASCII eine abweichende Codepage. Unter DOS war es so, dass 850 eingestellt sein musste, aber das ist sehr lange her. Wie die in NAV eingestellt wird, weiß ich leider nicht, vielleicht gibt es das auch gar nicht mehr. Es kann aber auch sein, dass du einen Font hast, der das Zeichen nicht ausgeben kann?

Re: NAV-Tools

7. April 2011 16:36

Hallo Timo

Ich verwende aus deinen tollen NAV-Tools das Filemanagement. Die Funktion GetFileName, bzw. das ShowOpen erzeugt mir im RTC einen Fehler

Meldung für C/AL Programmierer
ShowOpen The common dialog function failed during initialization.
This error often occurs when insufficient memory is available.

Mein Arbeitsspeicher ist aber nur zur Hälfte belegt. Kennst du das Problem ev.?

Re: NAV-Tools

7. April 2011 18:43

Hallo rotsch,

meine (hier veröffentlichten) NAV-Tools sind noch nicht 3-Tier-kompatibel und somit noch nicht RTC-fähig.
Lösung: Die Automation-Variablen müssen auf dem Client instanziiert werden. Füge hierzu dem CREATE-Befehl den Parameter TRUE hinzu.
Nähere Infos hierzu kannst du der Online-Hilfe zum CREATE-Befehl entnehmen ;-)

Re: NAV-Tools

7. April 2011 20:12

Timo Lässer hat geschrieben:meine (hier veröffentlichten) NAV-Tools sind noch nicht 3-Tier-kompatibel und somit noch nicht RTC-fähig.


Hallo Timo

Alles klar, besten Dank!

Re: NAV-Tools

16. Juni 2011 20:51

Hallo Timo,
ich habe Frage zu der TextManagement-Codeunit, speziell zu der Umsetzung ANSI2ASCII im Bezug auf ß
Code:
InitCharMap()
....
ANSI[62] := 223;   ASCII[62] := 225;  // ß
ANSI[64] := 225;   ASCII[64] := 160;  // á

Wenn ich Text mit ' ß ' aus Navision exportiere und dabei mit der Fkt. ANSI2ASCII konvertiere, dann steht à wo ß stehen muss.
Kann es sein, dass für ß und à die Übersetzung falsch eingerichtet ist bzw. ist was anderes schuld ist?
Eigentlich steht überall im Internet als ASCII-Zeichen für ß = 225
Ich habe die Übersetzung wie folgt umgedreht (160 <--> 225), und schon klappt es mit der Auslesung von Text mit 'ß' richtig
(sowie die Auslesung von Text mit à )
Code:
ANSI[62] := 223;   ASCII[62] := 160  // ß  ==> TEST
ANSI[64] := 225;   ASCII[64] := 225; // á  == > TEST

Habe ich da einen Denkfehler?

Re: NAV-Tools

17. Juni 2011 06:58

Hallo Jupiter,

wenn du Daten aus NAV exportierst, dann kommt nur ASCII2ANSI in Frage, da NAV im ASCII-Zeichensatz exportiert.

Gleiches gilt bei einem Import:
NAV erwartet ASCII, wodurch ggfls. eine Konvertierung mittels ANSI2ASCII durchgeführt werden muss.

Re: NAV-Tools

17. Juni 2011 10:38

Timo Lässer hat geschrieben:Hallo Jupiter,

wenn du Daten aus NAV exportierst, dann kommt nur ASCII2ANSI in Frage, da NAV im ASCII-Zeichensatz exportiert.

Hallo Timm,

ich habe beide Varianten für den Export aus NAV ausprobiert, folgendes:
in NAV ist der Inhalt des Feldes, das ich exportiere: ä ö ü ß
1. bei Verwendung von ASCII2ANSI (wie von Dir empfohlen) steht in der Textdatei: õ ÷ ³ (letztes Zeichen hier leider nicht sichtabr)
2. ber Verwendung von ANSI2ASCII (mit ASCII-Wert 225 für ß) steht in der Textdatei: ä ö ü á
3. ber Verwendung von ANSI2ASCII (mit ASCII-Wert 160 für ß) steht in der Textdatei: ä ö ü ß

Wieso funktioniert es bei mir geanau umgekehrt als von Dir empfohlen?

Re: NAV-Tools

17. Juni 2011 14:13

Welchen Zeichensatz verwendest du denn in deinem Betriebssystem?
Meine Funktion konvertiert ausschließlich von ASCII Codepage 850 nach ISO 8859-1 ("Latin-1").

Re: NAV-Tools

17. Juni 2011 18:02

Timo Lässer hat geschrieben:Welchen Zeichensatz verwendest du denn in deinem Betriebssystem?
Meine Funktion konvertiert ausschließlich von ASCII Codepage 850 nach ISO 8859-1 ("Latin-1").

Wenn ich in cmd-Kommandozeile chcp eingebe bekomme ich 850 als Antwort
In der Registry unter
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
steht bei
ACP ==> 1252
OEMCP ==> 850
Steht bei Dir unter ACP 28591 ?

Re: NAV-Tools

28. Juli 2011 21:03

Da es immer häufiger zu Unstimmigkeiten und dergleichen kommt, hier nochmal ein besonderer Hinweis bezüglich der ASCII- / ANSI-Begrifflichkeiten in den oben gelisteten NAV-Tools:
ANSI versteht sich als ISO8859-1 (aka "Latin-1") und ASCII versteht sich als Codepage 850 (aka "DOS-Latin-1")

Viele Zeichen sind auch in anderen ISO8859-x Spezifikationen mit der ISO8859-1 identisch, jedoch (logischerweise) nicht alle, daher kann und wird es bei anderen Spracheinstellungen zu falschen Ausgabezeichen kommen!
Das Gleiche gilt bei unterschiedlichen ASCII-Codepages.

Ich bitte dies zu beachten.
Wer (für andere Codepages / ISO8859-x Normen) entsprechend angepasste Versionen dieser NAV-Tools anbieten möchte, darf gerne die oben genannte Codeunit "TextManagement" - um entsprechende Funktionen ergänzt - hier zum Download bereitstellen!

Re: NAV-Tools

30. August 2011 11:10

Hallo,

das Tool zur ASCII/ANSI-Umwandlung ist super, vielen Dank dafür!

Jetzt möchte ich bei uns etwas aus Navision direkt nach Excel ausgeben und darin sind Sonderzeichen, die hier nicht enthalten sind. Ich möchte jetzt gerne den Code erweitern. Die Programmierung an sich ist kein Problem, aber ich finde die passenden Werte für ANSI nicht.

Zum Beispiel: Laut Code ist ASCII für ä=228 und für ANSI=245. Die 228 finde ich überall, nicht aber die 245.

Aktuell suche ich ANSI für < (ASCII 60) > (ASCII 62) = (ASCII 61).

Kann mir hier jemand helfen? Vielen Dank im Voraus.

Re: NAV-Tools

30. August 2011 11:44

NavHummel hat geschrieben:Zum Beispiel: Laut Code ist ASCII für ä=228 und für ANSI=245. Die 228 finde ich überall, nicht aber die 245.
Das ä steht in ANSI (ISO8859-1) an der Codestelle 228. In ASCII (Codepage 850) steht es an Stelle 132. ;-)

NavHummel hat geschrieben:Aktuell suche ich ANSI für < (ASCII 60) > (ASCII 62) = (ASCII 61).
Alle Zeichensätze (ASCII, ANSI, UTF-8) sind in den ersten 7 Bit (also bis einschließlich Position 127) identisch, somit brauchen diese Zeichen nicht konvertiert werden.
(Von ISO8859-1 nach UTF-8 sind die Zeichen sogar bis Position 159 identisch.)

Re: NAV-Tools

30. August 2011 12:07

Timo Lässer hat geschrieben:
NavHummel hat geschrieben:Zum Beispiel: Laut Code ist ASCII für ä=228 und für ANSI=245. Die 228 finde ich überall, nicht aber die 245.
Das ä steht in ANSI (ISO8859-1) an der Codestelle 228. In ASCII (Codepage 850) steht es an Stelle 132. ;-)


Vielen Dank, aber warum steht in der Funktion dann:
" ANSI[84] := 245; ASCII[84] := 228; // ä " ???