OBS/Makros und Scripting/Allgemeines/Übersicht Funktionen: Unterschied zwischen den Versionen
Nimz (Diskussion | Beiträge) |
Nimz (Diskussion | Beiträge) |
||
Zeile 1.256: | Zeile 1.256: | ||
|} | |} | ||
'''Erklärung''':<br /> | '''Erklärung''':<br /> | ||
Diese Funktion legt im Dateiverzeichnis von OBS eine Datei an und hält diese geöffnet, bis SEMA_Release für den oder die in ''cSemas'' übergebenen Werte ausgeführt wird.<br />Dies kann genutzt werden, um die Ausführung der gleichen Funktoin bzw. Makros zu unterbinden, wenn dies(e) zu dem Zeitpunkt bereits ausgeführt wird. Dies gilt für die komplette OBS-Installation und betrifft die Ausführung durch alle Benutzer oder Dienste. Die Funktionalität entspricht z. B. dem Verhalten von OBS, wenn Sie eine Eingabemaske für den gleichen Datensatz erneut öffnen und OBS dann die Möglichkeit sperrt den Datensatz mit {{F2}} zu speichern. | Diese Funktion legt im Dateiverzeichnis von OBS eine Datei an und hält diese geöffnet, bis SEMA_Release für den oder die in ''cSemas'' übergebenen Werte ausgeführt wird.<br />Dies kann genutzt werden, um die Ausführung der gleichen Funktoin bzw. Makros zu unterbinden, wenn dies(e) zu dem Zeitpunkt bereits ausgeführt wird. Dies gilt für die komplette OBS-Installation und betrifft die Ausführung durch alle Benutzer oder Dienste. Die Funktionalität entspricht z. B. dem Verhalten von OBS, wenn Sie eine Eingabemaske für den gleichen Datensatz erneut öffnen und OBS dann die Möglichkeit sperrt den Datensatz mit {{F2}} zu speichern.<br /> | ||
<br /> | <br /> | ||
'''Beispiel''': | '''Beispiel''': |
Version vom 30. März 2023, 14:48 Uhr
Hier finden Sie nützliche Funktionen, die Sie in den Makros verwenden können, um das gewünschte Ergebnis zu erzielen.
Liste Funktionssammlungen
TMyDir
TMyDir.CreateDirectory
Definition:
function CreateDirectory(const Path: string): boolean;
Erklärung:
Erstellt ein neues Verzeichnis mit dem angegebenen Pfad, wenn es noch nicht existiert.
Beispiel:
cPfad := 'c:\Beispiel\Verzeichnis\Pfad\';
lAngelegt := TMyDir.CreateDirectory(cPfad);
TMyDir.Exists
Definition:
function Exists(const Path: string; const CreateIfNotExists: boolean=False): boolean;
Erklärung:
Prüft, ob das Verzeichnis existiert. Wird der optionale Parameter CreateIfNotExists mit dem boolschen Wert True übergeben, wird versucht das Verzeichnis anzulegen, sollte es nicht existieren.
Beispiel:
lExistiert := TMyDir.Exists(cPfad);
TMyDir.CombinePath
Definition:
function CombinePath(const cRoot: string; aAdd: array of string): string;
Erklärung:
Dem Pfad cRoot werden die einzelnen Einträge aus dem Array aAdd als Verzeichnisse angefügt und so ein neuer Pfad erstellt.
Beispiel:
cRoot := 'c:\Beispiel\Verzeichnis\Pfad';
cPfad := TMyDir.CombinePath(cRoot,['Import','2019']);
//Ergebnis: cPfad ist 'c:\Beispiel\Verzeichnis\Pfad\Import\2019'
TMyDir.BuildPath
Definition:
function BuildPath(const cRoot: string; aAdd: array of string; out cPath: string; lCreate: boolean=False): boolean;
Erklärung:
Diese Funktion ist ein Mix aus TMyDir.CombinePath und TMyDir.Exists. Es wird ein Pfad aus den Angaben cRoot und aAdd erstellt und geprüft, ob der Pfad existiert (Funktionsergebnis). Die Rückgabe des Pfades erfolgt mit cPath. Mit dem oprtionalen Parameter kann angegeben werden, ob das Verzeichnis erstellt werden soll, sollte es nicht existieren.
Beispiel:
cRoot := 'c:\Beispiel\Verzeichnis\Pfad';
cPfad := TMyDir.CombinePath(cRoot,['Import','2019']);
if (TMyDir.BuildPath(cRoot,['Import','2019'],cPfad)) then begin
Meldung('Verzeichnis '+cPfad+' existiert.');
end;
TMyDir.GetDirectoryName
Definition:
function GetDirectoryName(const Path: string): string;
Erklärung:
Den Pfad des Verzeichnisses zurück.
Beispiel:
cDatei := 'c:\Beispiel\Verzeichnis\Pfad\MeineDatei.txt';
cPfad := TMyDir.GetDirectoryName(cDatei);
//Ergebnis: cPfad ist 'c:\Beispiel\Verzeichnis\Pfad'
TMyFile
TMyFile.IsFile
Definition:
function IsFile(const Path: string): boolean;
Erklärung:
Prüft, ob die Datei existiert.
Beispiel:
cPfad := 'c:\Beispiel\Verzeichnis\Pfad\MeineDatei.txt';
if (TMyFile.IsFile(cPfad)) then begin
Meldung('Datei '+cPfad+' ist vorhanden');
end;
TMyFile.Combine
Definition:
function Combine(const Path1: string; const Path2: string): string;
Erklärung:
Kombiniert Path1 und Path2 zu einem Pfad.
Beispiel:
cPfad := TMyFile.Combine('c:\Beispiel\Verzeichnis','Pfad\MeineDatei.txt');
//cPfad ist 'c:\Beispiel\Verzeichnis\Pfad\MeineDatei.txt';
TMyFile.IsCombine
Definition:
function IsCombine(const Path1: string; const Path2: string; out ReturnPath: string): boolean;
Erklärung:
Kombiniert Path1 und Path2 zu einem Pfad und prüft, ob die Datei existiert.
Beispiel:
if (TMyFile.Combine('c:\Beispiel\Verzeichnis','Pfad\MeineDatei.txt',cPfad)) then begin
//cPfad ist 'c:\Beispiel\Verzeichnis\Pfad\MeineDatei.txt';
Meldung('Datei '+cPfad+' vorhanden');
end;
TMyFile.CombinePath
Definition:
function CombinePath(const cRootDir: string; aAdd: array of string; const cFileName: string): string;
Erklärung:
Baut aus den Parametern einen Dateipfad zusammen.
Beispiel:
cDateipfad := TMyFile.CombinePath('c:\Beispiel',['Verzeichnis','Pfad'],'MeineDatei.txt');
//cDateipfad ist 'c:\Beispiel\Verzeichnis\Pfad\MeineDatei.txt';
TMyFile.CombineRelativePath
Definition:
function CombineRelativePath(const FilePath: string; const RelativeBasePath: string; const CombineBasePath: string): string;
Erklärung:
Extrahiert aus FilePath den zu RelativeBasePath relativem Pfad und kombiniert dies mit CombineBasePath zu einem neuen Dateipfad.
Beispiel:
cPfad := TMyFile.CombineRelativePath(
'c:\Beispiel\Verzeichnis\Pfad\LieferantA\MeineDatei.txt',
'c:\Beispiel\Verzeichnis\Pfad\',
'\\mein-server\Netzwerk\OBS\data\Import'
);
//cDatei ist '\\mein-server\Netzwerk\OBS\data\Import\LieferantA\MeineDatei.txt'
TMyFile.IsCombineRelativePath
Definition:
function IsCombineRelativePath(const FilePath: string; const RelativeBasePath: string; const CombineBasePath: string; out ReturnPath: string): boolean;
Erklärung:
TMyFile.IsCombineRelativePath verbindet die Funktionalität von TMyFile.CombineRelativePath und TMyFile.IsFile. ReturnPath entspricht dem Ergebnis von TMyFile.CombineRelativePath. Das Ergebnis der Funktion TMyFile.IsFile für den Pfad ReturnPath ist auch das Ergebnis für TMyFile.IsCombineRelativePath.
TMyFile.GetFilePathUNC
Definition:
function GetFilePathUNC(const Path: string): string;
Erklärung:
Gibt den UNC-Pfad für die Datei zurück.
Beispiel:
//Annahme: Das OBS-Installationsverzeichnis ist mit dem Laufwerksbuchstaben ''O'' als Netzlaufwerk am Arbeitsplatz eingerichtet.
cPfad := 'O:\OBS\data\Import\LieferantA\MeineDatei.txt';
cUNC := TMyFile.GetFilePathUNC(cPfad);
//cUNC ist '\\mein-server\Netzwerk\OBS\data\Import\LieferantA\MeineDatei.txt'
TMyFile.GetFilePath
Definition:
function GetFilePath(const Path: string): string;
Erklärung:
Versucht Path zu einem UNC-Pfad aufzulösen. Gibt Path zurück, wenn kein UNC-Pfad verfügbar ist, aber Path existiert.
Beispiel:
cPfad := 'O:\OBS\data\Import\LieferantA\MeineDatei.txt';
cPfadNeu := TMyFile.GetFilePath(cPfad);
//cPfadNeu Werte:
//UNC vorhanden: '\\mein-server\Netzwerk\OBS\data\Import\LieferantA\MeineDatei.txt'
//Kein UNC, aber Datei existiert: 'O:\OBS\data\Import\LieferantA\MeineDatei.txt'
//Datei existiert nicht: ''
TMyFile.IsGetFilePathUNC
Definition:
function IsGetFilePathUNC(const Path: string; out ReturnPath: string): boolean;
Erklärung:
Prüft, ob die Datei Path unter einem UNC-Pfad zu finden ist. Dieser wird dann in ReturnPath enthalten.
Beispiel:
if (TMyFile.IsGetFilePathUNC('O:\OBS\data\Import\LieferantA\MeineDatei.txt',cUNC)) then begin
//cUNC ist '\\mein-server\Netzwerk\OBS\data\Import\LieferantA\MeineDatei.txt'
Meldung('Datei '+cUNC+' ist vorhanden');
end;
TMyFile.IsGetFilePath
Definition:
function IsGetFilePath(const Path: string; out ReturnPath: string): boolean;
Erklärung:
Entspricht im verhalten TMyFile.GetFilePath mit einer zusätzlichen Prüfung, ob der Rückgabepfad ReturnPath leer ist.
Beispiel:
cPfad := 'O:\OBS\data\Import\LieferantA\MeineDatei.txt';
if (TMyFile.IsGetFilePath('O:\OBS\data\Import\LieferantA\MeineDatei.txt',cPfad)) then begin
//UNC vorhanden:
// cPfad ist '\\mein-server\Netzwerk\OBS\data\Import\LieferantA\MeineDatei.txt'
// TMyFile.IsGetFilePath Ergebnis ist ''true''
//Kein UNC, aber Datei existiert:
// cPfad ist 'O:\OBS\data\Import\LieferantA\MeineDatei.txt'
// TMyFile.IsGetFilePath Ergebnis ist ''true''
//Datei existiert nicht:
// cPfad ist ''
// TMyFile.IsGetFilePath Ergebnis ist ''false''
end;
TMyFile.Move
Definition:
function Move(const SourceFileName: string; const DestFileName: string; const CreateDestDir: boolean=False; const Replace: boolean=False): boolean;
Erklärung:
Versucht die Datei SourceFileName nach DestFileName zu verschieben. Das Ergebnis der Funktion teilt mit, ob dies erfolgreich (true) oder fehlgeschlagen (false) ist. Die optionalen Parameter geben hier die Möglichkeit festzulegen, wie die Funktion bei Konflikten reagieren soll. CreateDestDir erlaubt die Anlage des Ziel-Verzeichnis, sollte es nicht existieren. Replace erlaubt es vorhandene Dateien zu überschreiben/ersetzen.
Beispiel:
if (TMyFile.Move('c:\Beispiel\Verzeichnis\Pfad\LieferantA\MeineDatei.txt','\\mein-server\Netzwerk\OBS\data\Import\LieferantA\MeineDatei.txt')) then begin
Meldung('Datei wurde verschoben');
end;
TMyFile.Delete
Definition:
function Delete(const FilePath: string): boolean;
Erklärung:
Löscht die angegebene Datei FilePath. Das Ergebnis der Funktion teilt mit, ob dies erfolgreich (true) oder fehlgeschlagen (false) ist.
Beispiel:
if (TMyFile.Delete('c:\Beispiel\Verzeichnis\Pfad\LieferantA\MeineDatei.txt')) then begin
Meldung('Datei wurde gelöscht');
end;
TObsPath
TObsPath.GetExePath
Definition:
function GetExePath(): string;
Erklärung:
Gibt den Pfad zum Installationsverzeichnis von OBS zurück.
Beispiel:
cPfad := TObsPath.GetExePath();
TObsPath.GetDataDir
Definition:
function GetDataDir(): string;
Erklärung:
Gibt den Pfad zum Unterverzeichnis data im OBS-Installationsverzeichnis.
Beispiel:
cPfad := TObsPath.GetDataDir();
TObsPath.GetSysDir
Definition:
function GetSysDir(): string;
Erklärung:
Gibt den Pfad zum Unterverzeichnis sys im OBS-Installationsverzeichnis.
Beispiel:
cPfad := TObsPath.GetSysDir();
TObsPath.GetTempDir
Definition:
function GetTempDir(): string;
Erklärung:
Gibt den Pfad zum Unterverzeichnis temp im OBS-Installationsverzeichnis.
Beispiel:
cPfad := TObsPath.GetTempDir();
TObsPath.GetBildarchivDir
Definition:
function GetBildarchivDir(): string;
Erklärung:
Gibt den Pfad zum Unterverzeichnis bildarchiv im OBS-Unterverzeichnis data.
Beispiel:
cPfad := TObsPath.GetBildarchivDir();
TObsPath.GetExportDir
Definition:
function GetExportDir(): string;
Erklärung:
Gibt den Pfad zum Unterverzeichnis export im OBS-Unterverzeichnis data.
Beispiel:
cPfad := TObsPath.GetExportDir();
TObsPath.GetImportDir
Definition:
function GetImportDir(): string;
Erklärung:
Gibt den Pfad zum Unterverzeichnis import im OBS-Unterverzeichnis data.
Beispiel:
cPfad := TObsPath.GetImportDir();
TObsPath.GetDataInOutDir
Definition:
function GetDataInOutDir(): string;
Erklärung:
Gibt den Pfad zum Unterverzeichnis datainout im OBS-Unterverzeichnis data.
Beispiel:
cPfad := TObsPath.GetDataInOutDir();
TObsPath.GetLockDir
Definition:
function GetLockDir(): string;
Erklärung:
Gibt den Pfad zum Unterverzeichnis lock im OBS-Unterverzeichnis data.
Beispiel:
cPfad := TObsPath.GetLockDir();
TObsPath.GetLockFile
Definition:
function GetLockFile(cName: string): string;
Erklärung:
Gibt den Dateipfad zu einer Lock-Datei im Verzeichnis locks im OBS-Unterverzeichnis data zurück. Die Dateiendung .lock wird automatisch ergäntzt.
Beispiel:
cPfad := TObsPath.GetLockFile('mein');
//cPfad ist dann in etwa '\\mein-server\Netzwerk\OBS\data\locks\mein.lock'
TObsPath.GetDebugDir
Definition:
function GetDebugDir(): string;
Erklärung:
Gibt den Pfad zum Unterverzeichnis debug im OBS-Unterverzeichnis data.
Beispiel:
cPfad := TObsPath.GetDebugDir();
TObsPath.GetDebugFile
Definition:
function GetDebugFile(cName: string): string;
Erklärung:
Gibt den Dateipfad zu einer Debug-Datei im Verzeichnis debug im OBS-Unterverzeichnis data zurück.
Beispiel:
cPfad := TObsPath.GetDebugFile('debug.txt');
//cPfad ist dann in etwa '\\mein-server\Netzwerk\OBS\data\debug\debug.txt'
TObsPath.GetShopDir
Definition:
function GetShopDir(): string;
Erklärung:
Gibt den Pfad zum Unterverzeichnis shop im OBS-Unterverzeichnis data.
Beispiel:
cPfad := TObsPath.GetShopDir();
TObsPath.GetRelativePath
Definition:
function GetRelativePath(const Path: string): string;
Erklärung:
Gibt den relativen Pfad innerhalb der OBS-Verzeichnisstruktur zurück.
Beispiel:
cDatei := '\\mein-server\Netzwerk\OBS\data\import\artikel.csv';
cDateiRelativ := TObsPath.GetRelativePath(cDatei);
//cDateiRelativ ist 'data\import\artikel.csv'
cVerzeichnis := '\\mein-server\Netzwerk\OBS\data\import\';
cVerzeichnisRelativ := TObsPath.GetRelativePath(cVerzeichnis);
//cVerzeichnisRelativ ist 'data\import\'
TObsPath.GetFileName
Definition:
function GetFileName(const Path: string): string;
Erklärung:
Macht aus einem relativem Pfad im OBS-Verzeichnis einen vollständigen Pfad. Wenn möglich wird der UNC-Pfad zurückgegeben.
Beispiel:
cDatei := 'data\import\artikel.csv';
cDatei := TObsPath.GetFileName(cDatei);
//cDatei ist '\\mein-server\Netzwerk\OBS\data\import\artikel.csv'
TObsPath.IsGetFileName
Definition:
function IsGetFileName(const Path: string; out ReturnPath: string): boolean;
Erklärung:
Macht aus einem relativem Pfad im OBS-Verzeichnis einen vollständigen Pfad und prüft dessen Existens. Wenn möglich wird in ReturnPath der UNC-Pfad zurückgegeben.
Beispiel:
if (TObsPath.IsGetFileName('data\import\artikel.csv',cDatei)) then begin
//cDatei ist '\\mein-server\Netzwerk\OBS\data\import\artikel.csv'
Meldung('Datei '+cDatei+' ist vorhanden');
end;
TISO
TISO.CountrySwap
Definition:
function CountrySwap(const cCode: string; const eFrom: TISOCountryCodes; const eTo: TISOCountryCodes): string;
Erklärung:
Versucht den ISO-3166-Code cCode von eFrom nach eTo zu wechseln.
Beispiel:
//Ermittelt die nummerische Kodierung zum Alpha-2-Code "de" (Deutschalnd) und zeigt diesen als Meldung an. Der nummerische Wert für de ist 276.
Meldung(TISO.CountrySwap('de',iso3166_Alpha2,iso3166_Numeric));
TISO.CountryGetRefNo
Definition:
function CountryGetRefNo(oMyDB: TxDB; const eCode: TISOCountryCodes; const cCode: string; cDefault: string=''): string;
Erklärung:
Ermittelt die OBS-Referenz aus der Liste Länderkennung für den Code cCode. Gibt cDefault zurück, wenn keine OBS-Referenz ermittelt werden konnte.
Beispiel:
//Wenn im ISO-Feld gepflegt, findet diese Funktion die entsprechende Referenz für Deutschland (OBS-Default ist "D-") und zeigt diese als Meldung.
Meldung(TISO.CountryGetRefNo(oDB,'de',iso3166_Alpha2));
TISO.CountryGetCode
Definition:
function CountryGetCode(oMyDB: TxDB; const eCode: TISOCountryCodes; const cRef: string; cDefault: string=''): string;
Erklärung:
Liste aus der Liste Länderkennung den ISO-3166-Code für die OBS-Referenz cRef aus und gibt den Code für den Typen eCode zurück.
Beispiel:
//Wenn im ISO-Feld gepflegt, liest diese Funktion den Wert für die entsprechende Referenz den OBS-Default "D-" für Deutschland und zeigt den Code als Meldung an.
//Da im OBS nur der Alpha2 gepflegt werden kann, wird der Code bei Angabe von z. B. ''iso3166_Alpha3'' in ''eCode'' intern umgewandelt.
Meldung(TISO.CountryGetRefNo(oDB,iso3166_Alpha3,'D-'));
TqSQL
TqSQL.A2I
Definition:
function A2I(const cFeld:String):integer;
Erklärung:
Der Wert des Datenbankfeldes wird in einen Integer umgewandelt und zurückgegeben.
Beispiel:
TqSQL.A2C
Definition:
function A2C(const cFeld:String):String;
Erklärung:
Der Wert des Datenbankfeldes wird in einen String umgewandelt und zurückgegeben.
Beispiel:
TqSQL.A2F
Definition:
function A2F(const cFeld:String):Double;
Erklärung:
Der Wert des Datenbankfeldes wird in einen Floatwert umgewandelt und zurückgegeben.
Beispiel:
TqSQL.A2D
Definition:
function A2D(const cFeld:String):TDateTime;
Erklärung:
Der Wert des Datenbankfeldes wird in einen Datumswert umgewandelt und zurückgegeben.
Beispiel:
var dDate : TDateTime;
dDate := xData.A2D('sys_date');
TqSQL.A2UID
Definition:
function A2UID():String;
Erklärung:
Es wird direkt die sys_uid des Eintrags zurückgegeben.
Beispiel:
cUID := xData.A2UID();
TqSQL.qSet
Definition:
function qSet(const cxField : String; xDaten : Variant):Boolean;
Erklärung:
Das Datenbankfeld cxField wird mit den Daten aus xDaten gefüllt. Die Umwandlung von Variant nach Datenbankfeld erfolgt automatisch.
Beispiel:
//String
xData.qSet('mbp_ksperre', '0');
//Float
var nEKPreis : Double;
xData.qSet('mbp_ekpreis',nEKPreis);
direkte Datenbankoperationen
DB_ReadSQLValue
Definition:
Function DB_SqlVal(const S:String; const cTyp:String='C'):String; overload;
Function DB_SqlVal(const n:Double; const cTyp:String='N'):String; overload;
Erklärung:
Wandelt einen normalen String in einen sqlkonformen String um.
Beispiel:
DB_SQLVal('100000')
DB_ReadSQLValue
Definition:
function DB_ReadSQLValue(oMyDB:TxDB; const cTable:String; const cFeld:string; const cFilter:String='') : String;
Erklärung:
Gibt den Wert aus cFeld wieder.
Beispiel:
cPSName:= DB_ReadSQLValue(oDB,'PERSSTA','ps_name','ps_nr = ' + DB_SQLVal('100000'))
DB_WriteSQLValue
Definition:
function DB_WriteSQLValue(oDB:TxDB;const cTable:String;const cFeld:string;const cValue:String;const cUNr:String;lSysDB:Boolean=CONST_SYSDB): Boolean; overload;
function DB_WriteSQLValue(oDB:TxDB;const cTable:String;const cFeld:string;const nValue:Double;const cUNr:String;lSysDB:Boolean=CONST_SYSDB): Boolean; overload;
function DB_WriteSQLValue(oDB:TxDB;const cTable:String;aFelder:Array of String;aValues:Array of variant;const cUNr:String;lSysDB:Boolean=CONST_SYSDB): Boolean; overload;
Erklärung:
Schreibt einen String anhand der sys_uid in einen Datensatz.
Beispiel:
DB_WriteSQLValue(oDB,'PERSSTA','ps_name', 'Test', cUID);
DB_WriteSQLValue(oDB,'PERSSTA',['ps_name', 'ps_zusatz'], ['Test', 'Zusatz1'], cUID)
DB_WriteSQLWhere
Definition:
function DB_WriteSQLWhere(oDB:TxDB;const cTable:String;aFelder:Array of String;aValues:Array of variant;const cWhere:String;lSysDB:Boolean=CONST_SYSDB): Boolean;
Erklärung:
Schreibt Daten anhand des Where Statements in die Datenbank.
Beispiel:
DB_WriteSQLWhere(oDB,'PERSSTA',['ps_name'], ['Test'], 'ps_name = ' + DB_SQLVal('100000'));
DB_LSeek
Definition:
function DB_LSeek(oMyDB:TxDB;const cTable:String;cFilter:String): Boolean;
Erklärung:
Überprüft, ob es zu dem Where-Statement Daten gibt
Beispiel:
DB_LSeek(oDB,'PERSSTA', 'ps_name = ' + DB_SQLVal('100000'));
DB_IsTable
Definition:
function DB_IsTable(oMyDB:TxDB; const cxTableName:String; lHashing: Boolean=True):Boolean;
Erklärung:
Überprüft, ob die Tabelle existiert. Grundsätzlich immer mit Hashing. Bei TmpTables, kann das Hashing über lHashing deaktiviert werden.
Beispiel:
DB_IsTable(oDB,'PERSSTA');
DB_IsField
Definition:
function DB_IsField(oMyDB:TxDB; const cTableName:String; const cFieldName:String; lHashing:Boolean=True):boolean;
Erklärung:
Überprüft ob das Feld existiert.
Beispiel:
DB_IsTable(oDB,'PERSSTA', 'ps_name');
DB_RecordCnt
Definition:
function DB_RecordCnt(oDB:TxDB; const cTableName:String):integer;Overload;
function DB_RecordCnt(oDB:TxDB; const cTableName:String; const cWhere:String):integer;Overload;
Erklärung:
Zählt die Datensätze.
Beispiel:
DB_RecordCnt(oDB,'PERSSTA', 'ps_name = ' + DB_SQLVal('100000'));
Liste Funktionen
Empty
Verwendung: Prüft, ob der Wert des Parameters leer bzw. 0 ist. Dies Funktioniert mit Zeichenketten (string) und Zahlen (integer und double)
Parameter: string/integer/double
Rückgabe: boolean
Beispiel:
cText := '';
IstLeer := Empty(cText);
cText := 'Beispiel';
IstLeer := Empty(cText);
Erklärung: Der String-Variable cText wird ein leerer Text zugewiesen. Mit Empty wird der Wert nun geprüft. Die boolsche Variable IstLeer ist dann true (wahr). Als nächstes wird cText der Wert "Beispiel" zugewiesen und eine erneute Prüfung mit Empty durchgeführt. Da cText jetzt einen Text enthält, ist der Wert der Variablen IstLeer nun false (falsch).
Length
Verwendung: Ermittelt die Länge einer Zeichenkette (string).
Parameter: string
Rückgabe: integer
Beispiel:
cText := 'Dies ist ein Beispiel.';
nLaenge := Length(cText);
Erklärung: Der String-Variable cText wird der Wert Dies ist ein Beispiel. zugewiesen. Mit Length wird die Länge ermittelt. Der Satz "Dies ist ein Beispiel." hat 22 Zeichen. nLaenge hat also den Wert 22.
AllTrim
Verwendung: Entfernt Umbrüche und Leerzeichen am Anfang und Ende einer Zeichenkette.
Parameter: string
Rückgabe: string
Beispiel:
cText := ' Dies ist ein Beispiel. ';
cText := AllTrim(cText);
Erklärung: Der String-Variable cText wird der Wert " Dies ist ein Beispiel. " zugewiesen. Mit AllTrim werden die unnötigen Leerzeichen am Anfang und Ende der Zeichenkette entfernt. Die Variable cText entspricht also dem Wert "Dies ist ein Beispiel.".
UpperCase/LowerCase
Verwendung: Umwandeln einer Zeichenkette in Großbuchstaben/Kleinbuchstaben.
Parameter: string
Rückgabe: string
Beispiel:
cText := 'Beispiel';
cUpper := UpperCase(cText);
cLower := LowerCase(cText);
Erklärung: Der String-Variable cText wird der Wert Beispiel zugewiesen. Mit UpperCase und LowerCase wird die Zeichenkette umgewandelt. cUpper enthält danach den Wert BEISPIEL und cLower den Wert beispiel.
ExtractFileName
Verwendung: Dateinamen aus Dateipfad auslesen.
Parameter: string
Rückgabe: string
Beispiel:
cDatei := 'c:\\Ordner\Datei.txt';
cDatei := ExtractFileName(cDatei);
Erklärung: Der String-Variable cDatei wird der Wert c:\\Ordner\Datei.txt zugewiesen. Mit ExtractFileName wird der Dateiname herausgesucht und zurückgegeben. Danach enthält cDatei nur noch den Wert Datei.txt.
StrTran
Verwendung: Sucht einen Text innerhalb eines Textes und ersetzte diesen durch einen andren Text (Suchen und ersetzen).
Parameter: string, string, string
Rückgabe: string
Beispiel:
cDatei := 'Datei.txt';
cName := StrTran(cDatei ,'.txt','');
Erklärung: Der String-Variable cDatei wird der Wert Datei.txt zugewiesen. Mit StrTran wird im Text der Variable cDatei nach .txt gesucht. Der gefundene Teil wird mit einer leeren Zeichenkette ersetzt. Danach enthält cDatei nur noch den Wert Datei.
LeftStr/RightStr
Verwendung: Gibt den linken/rechten Teil einer Zeichenketten zurück. Es werden dabei maximal soviele Zeichen zurückgegeben, wie im zweiten Parameter angegeben.
Parameter: string, integer
Rückgabe: string
Beispiel:
cText := 'Dies ist ein Beispiel';
cLeft := LeftStr(cText,2);
cRight := RightStr(cText,5);
Erklärung: Der String-Variable cText wird der Wert Dies ist ein Beispiel zugewiesen. Mit LeftStr und RightStr werden jeweils die ersten zwei Zeichen von Links und Rechts zurückgegeben. cLeft enthält danach den Wert Di und cRight den Wert spiel.
Token
Verwendung: Teilt eine Zeichenkette anhand eines Zeichens auf und gibt den engebenen Teil zurück.
Parameter: string, string, integer
Rückgabe: string
Beispiel:
cDatei := 'Datei_Name_Mit_Unterstrichen.txt';
cTeil := Token(cDatei,'_',2);
Erklärung: Der String-Variable cDatei wird der Wert Datei_Name_Mit_Unterstrichen.txt zugewiesen. Mit Token wird die Zeichenkette aufgeteilt. Als Teiler ist ein Unterstrich angeben. Dies führt im angegebenen Beispiel zu vier Teilen: Datei, Name, Mit und Unterstrichen.txt. Es wird der zweite Teil gefordert. Die Variable cTeil enthält demnach den Wert Name.
NumToken
Verwendung: Ermittelt die Anzahl der Teile einer Zeichenketten, wenn diese an den Stelle mit dem Zeichen, das als Parameter übergeben wird, geteilt wird.
Parameter: string, string
Rückgabe: integer
Beispiel:
cDatei := 'Datei_Name_Mit_Unterstrichen.txt';
nTeile := NumToken('_',cDatei);
Erklärung: Der String-Variable cDatei wird der Wert Datei_Name_Mit_Unterstrichen.txt zugewiesen. Mit NumToken wird die Anzahl der Teil-Zeichenketten der Zeichenkette cDatei ermittelt. Als Trennzeichen wurde ein Unterstrich angegeben. Dies führt im angegebenen Beispiel zu vier Teilen: Datei, Name, Mit und Unterstrichen.txt. Die Variable nTeile entspricht also dem Wert 4.
iVal
Verwendung: Wandelt die angegebene Zeichenkette in einen Ganzzahlwert um.
Parameter: string
Rückgabe: integer
Beispiel:
cZahl := '4';
nZahl := iVal(cZahl);
Erklärung: Der String-Variable cZahl wird der Wert 4 zugewiesen. Mit iVal wird die Zeichenkette in die entsprechende Ganzzahl umgewandelt. Die Variable nZahl entspricht also dem Wert 4.
fVal
Verwendung: Wandelt die angegebene Zeichenkette in eine Dezimalzahl um.
Parameter: string
Rückgabe: double
Beispiel:
cZahl := '1234,56';
nZahl := fVal(cZahl);
Erklärung: Der String-Variable cZahl wird der Wert 1234,56 zugewiesen. Mit fVal wird die Zeichenkette in die entsprechende Dezimalzahl umgewandelt. Die Variable nZahl entspricht also dem Wert 1234,56.
Roundy
Verwendung: Runden eines Dezimalwerts (Typ: Double)
Parameter: double, integer
Rückgabe: double
Aufruf:
nDezimalwert := 1234.5678;
nGerundeterWert := Roundy(nDezimalwert,2);
Erklärung: Der zu rundende Wert wird mit Parameter 1 übergeben. Die gewünschte Anzahl an Nachkommastellen wird in Parameter 2 angegeben. Die Funktion rundet dann den Wert auf die angegebene Anzahl an Dezimalstellen und gibt das Ergebnis wieder zurück. Die Variable nDezimalwert wird auf den Wert 1234,5678 gesetzt. Anschließend wird der Wert auf zwei Nachkommastellen gerundet. Die Variable nGerundeterWert entspricht also 1234,57.
Trunc
Verwendung: Abschneiden der Nachkommastellen eines Dezimalwerts
Parameter: double
Rückgabe: integer
Aufruf:
nDezimalwert := 1234.5678;
nWert := Trunc(nDezimalwert);
Erklärung: Der Dezimalwert ist als Parameter zu übergeben. Als Ergbnis werden die Vorkommastellen zurückgegeben. Die Variable nDezimalwert wird auf den Wert 1234,5678 gesetzt. Anschließend wird der Wert auf zwei Nachkommastellen gerundet. Die Variable nWert entspricht also 1234.
PadL
Definition:
function PadL(const cVar : string; iPad : integer; cPad : char=' ') : string;
Erklärung:
Füllt die Zeichenkette cVar zur linken Seite mit cPad auf, bis cVar iPad Zeichen lang ist.
Beispiel:
cAuffuellen := 'Müller';
cAufgefuellt := PadL(cAuffuellen,10);
//cAufgefuellt ist ' Müller'
cAufgefuellt := PadL(cAuffuellen,10,'X');
//cAufgefuellt ist 'XXXXMüller'
PadR
Definition:
function PadR(const cVar : string; iPad : integer; cPad : char=' ') : string;
Erklärung:
Füllt die Zeichenkette cVar zur rechten Seite mit cPad auf, bis cVar iPad Zeichen lang ist.
Beispiel:
cAuffuellen := 'Müller';
cAufgefuellt := PadR(cAuffuellen,10);
//cAufgefuellt ist 'Müller '
cAufgefuellt := PadR(cAuffuellen,10,'X');
//cAufgefuellt ist 'MüllerXXXX'
CToD
Definition:
function CToD(const sDate: string): TDateTime;
Erklärung:
Konvertiert die Zeichenkette sDate in einen Datumswert des Typs TDateTime.
Beispiel:
dDatum := CToD('2016-11-18');
dDatum := CToD('2016-11-18 17:52:35');
//In beiden Fällen entspricht der Wert in dDatum dem 18.11.2016, da CToD nur das Datum übernimmt. Die Uhrzeit wird verworfen.
Artikelstamm
AR_Exists
Definition:
function AR_Exists(oMyDB: TxDB; const cArtNr: string): boolean;
Erklärung:
Sucht im Artikelstamm nach der in cArtNr angegebenen Artikelnummer und liefert als Ergebnis True wenn der Artikel gefunden wurde.
Beispiel:
if (AR_Exists(oDB,'ABC123')) then begin
Meldung('Artikel existiert im Artikelstamm');
end;
Copy
Erklärung:
Hier kann ein Makro für die Funktion des Kopierens von Artikeln hinterlegt werden.
procedure Copy(cArtAltNr:String; cArtNeuNr:String);
begin
Meldung('Alte Artikel Nr : '+cArtAltNr);
Meldung('Neue Artikel Nr : '+cArtNeuNr);
DB_WriteSqlWhere(oDB, //DB
'ARTIKEL', //Tabelle
['a_suchbegriff'], //Liste Felder
['geändert durch Macro'], //Liste Änderungen
'a_nr='+DB_SqlVal(cArtNeuNr) //Welcher Datensatz
);
end;
Umsatz- und Vorsteuer
FindUstFromSatz
Definition:
function FindUstFromSatz(oMyDB: TxDB; nSatz: double): string;
Erklärung:
Ermittelt den OBS-Umsatzsteuerschlüssel für den Steuersatz nSatz.
Beispiel:
//Gibt den zweistelligen Schlüssel (z. B. 01) für die Umsatzsteuer mit dem Satz 19 % aus
Meldung(FindUstFromSatz(oDB,19));
UST_VK_Netto2Brutto
Definition:
function UST_VK_Netto2Brutto(oMyDB : TxDB;
cArtNr : string;
nNetto : double;
nDefaultResult : double=0;
nDefaultSatz : double=0;
nNK : integer=2): double; overload;
function UST_VK_Netto2Brutto(oMyDB : TxDB;
nNetto : double;
cSchl : string;
nDefaultResult : double=0;
nDefaultSatz : double=0;
lUseStd : boolean=False;
nNK : integer=2): double; overload;
function UST_VK_Netto2Brutto(nNetto: double; nMwstSatz: double; nNK: integer=2) : double; overload;
Erklärung:
Beispiel:
UST_VK_Brutto2Netto
Definition:
//Variante 1
function UST_VK_Brutto2Netto(oMyDB : TxDB;
cArtNr : string;
nBrutto : double;
nDefaultResult : double=0;
nDefaultSatz : double=0;
nNK : integer=2): double; overload;
//Variante 2
function UST_VK_Brutto2Netto(oMyDB : TxDB;
nBrutto : double;
cSchl : string;
nDefaultResult : double=0;
nDefaultSatz : double=0;
lUseStd : boolean=False;
nNK : integer=2): double; overload;
//Variante 3
function UST_VK_Brutto2Netto(nBrutto: double; nMwstSatz: double; nNK: integer=2) : double; overload;
Erklärung:
Wandelt einen Preis von Brutto nach Netto. Die Funktion gibt es in drei Ausführungen.
- Umwandlung über Artikelnummer
- Wandelt den Wert nBrutto nach Netto um. Der Steuersatz wird dabei über den Steuerschlüssel aus dem Artikelstamm gezogen. Falls kein Artikel mit der Nummer cArtNr im Artikelstamm gefunden werden kann, wird für die Umrechnung der Satz nDefaultSatz verwendet. Existiert der Artikel im Artikelstamm wird nDefaultResult als Ergebnis verwendet, falls kein Steuerschlüssel im Artikel gepflegt ist. HINWEIS: Wenn die Artikelnummer vorhanden ist, wird diese Variante der Umrechnung empfohlen, da hier auch Artikel mit mehreren Steuersätzen richtig umgewandelt werden.
- Wandelt den Wert nBrutto nach Netto um. Der Steuersatz wird dabei über den Steuerschlüssel aus dem Artikelstamm gezogen. Falls kein Artikel mit der Nummer cArtNr im Artikelstamm gefunden werden kann, wird für die Umrechnung der Satz nDefaultSatz verwendet. Existiert der Artikel im Artikelstamm wird nDefaultResult als Ergebnis verwendet, falls kein Steuerschlüssel im Artikel gepflegt ist.
- Umwandlung mit Steuerschlüssel
- Wandelt den Wert nBrutto nach Netto anhand des übergebenen Steuerschlüssels cSchl um. Ist der Steuerschlüssel leer, wird nDefaultResult als Ergebnis zurückgegeben. Der Steuersatz nDefaultSatz wird verwendet, wenn kein passender Eintrag zum Steuerschlüssel im OBS gefunden werden konnte.
- Umwandlung mit Steuersatz
- Der Wert nBrutto wird mit dem Steuersatz nMwstSatz umgerechnet. Die Rückgabe wird auf nNK Nachkommastellen gerundet.ACHTUNG: Der Steuersatz 19 % wird in nMwstSatz als 19.00 (Punkt als Dezimaltrennzeichen) erwartet!
- Der Wert nBrutto wird mit dem Steuersatz nMwstSatz umgerechnet. Die Rückgabe wird auf nNK Nachkommastellen gerundet.
Beispiel:
Listenaufruf
Mit folgenden Funktionen können Listen im Scripter erzeugt werden
Beispiel Anzeige Liste Warengruppen
Definition:
function SqlListeShow(cSqlDirect : String;
cFields : String;
cTitel : String;
cOrder : String;
cTable : String;
oInit : ParamObj=NIL;
nWidth : integer=800;
nHeight : integer=600;
AOwner : TComponent=NIL;
oMyDB : TxDB=NIL;
lShowMemo : Boolean=False;
lLiveFilter: Boolean=False):TxForm; overload;
function SqlListeShow(cSqlDirect : String;
cFields : String;
cTitel : String;
cOrder : String;
cTable : String;
oInit : ParamObj;
oMyDB : TxDB):TxForm; overload;
function SqlListeShowDB(aSQlPara:SqlListeParameter):TxForm;
function XSqlListeParameter():SqlListeParameter;
//verschiedene Funktionstasten Vorbelegung
//1. Zeichen "*" in der Feldbezeichnung löscht Feld aus der Live suche
procedure Init_SqlListeSuche(Sender: TObject);
procedure Init_SqlListeSucheNoLimit(Sender: TObject);
procedure Init_SqlListeExport(Sender: TObject);
procedure Init_ShowConvertField(Sender: TObject);
procedure Init_SqlListeSucheDelete(Sender: TObject);
Beispiel:
Procedure StartProc();
var cFields : String;
cSQL : String;
begin
cFields := 'wg_nr |*Nr |14'+CRLF+
'wg_name |Name |50'+CRLF+
'wg_erlkto|Erlöskonto |14';
cSQL := 'SELECT * FROM WARENGR';
SqlListeShow(cSQL,
cFields,
'Warengruppen Demo', //Titel
'wg_nr', //Order
'WARENGR ', //Main Tabel
Init_SqlListeSuche,
oDB);
end;
SQL-Exporter
Funktionen zum SQL Exporter
Call_OBSSQLExporter
Definition:
procedure Call_OBSSQlExporter(cNr:String; cParameter:String);
Erklärung:
Hiermit kann ein bestimmer SQL-Export aufgerufen werden. Über cParameter kann ein Parameter an das im SQL-Export hinterlegte Makro übergeben werden.
Beispiel:
Procedure StartProc();
begin
//Aufruf des SQL-Exports Nr. 000002
Call_OBSSQlExporter('000002','');
end;
SpreadGrid
Funktionen zum SpreadGrid
Call_ObsSpreadGrid
Definition:
procedure Call_OBSSpreadGrid(cNr:String; cCommand:String);
Erklärung:
Hiermit kann ein bestimmes SpreadGrid aufgerufen werden.
Beispiele:
Procedure StartProc();
begin
//Aufruf der SpreadGrids-Liste
Call_ObsSpreadGrid('900000','');
end;
Procedure StartProc();
begin
//Führt Spreadgrid aus
Call_OBSSpreadGrid('900000','RUN');
end;
Versandinformationen
AddOrder
Definition:
function AddOrder(oMyDB: TxDB; const cTrackId, cSpedId, cSpedIdent, cTrackInfo, cLieferant, cBestNr: string): Boolean;
Erklärung:
Legt in der OBS Trackingliste einen Eintrag zu der Bestellung cBestNr an. War die Anlage erfolgreich, wird als Ergebnis true zurückgegeben
cTrackId: Dies ist die Nummer zur Sendungsverfolgung
cSpedId: Die ID des Spediteurs aus der Spediteur Liste
cSpedIdent: Das Kürzel des Spediteurs aus der Spediteur-Lieferanten Liste
cSpedInfo: Eventueller Text der in der Mail mit versendet wird
cLieferant: Nummer des Lieferanten der Bestellung aus dem Personenstamm
cBestNr: Nummer der Bestellung aus OBS
Beispiel:
if (AddOrder(oDB,'0123456789','900001','DHL','Text','700000','100000')) then begin
Meldung('Eintrag wurde angelegt!');
end;
AddDelivery
Definition:
function AddDelivery(oMyDB: TxDB; const cTrackId, cSpedId, cSpedIdent, cLiefNr: string): Boolean;
Erklärung:
Legt in der OBS Trackingliste einen Eintrag zu dem Lieferschein cLiefNr an. War die Anlage erfolgreich, wird als Ergebnis true zurückgegeben
cTrackId: Dies ist die Nummer zur Sendungsverfolgung
cSpedId: Die ID des Spediteurs aus der Spediteur Liste
cSpedIdent: Das Kürzel des Spediteurs aus der Spediteur-Lieferanten Liste
cLiefNr: Lieferscheinnummer aus OBS
Beispiel:
if (AddDelivery(oDB,'0123456789','900001','DHL','100000')) then begin
Meldung('Eintrag wurde angelegt!');
end;
Anwesenheitsübersicht
GridHint
Definition:
//------------------------------------------------------------------------------
// Procedure: GridHint
// Author: Jr
// Date: 27-Sep-2021
// Comment:
//
// oParameter.Obj := advGrid;
// oParameter.V1 := ARow;
// oParameter.V2 := ACol;
// oParameter.V3 := ATitle;
// oParameter.V4 := AText;
//
// Verändern der Werte Möglich
//------------------------------------------------------------------------------
procedure GridHint(oParameter:TOBSParameter);
var oGrid : TAdvStringGrid;
begin
//oGrid := TAdvStringGrid(oParameter.Obj);
//Debugline(oGrid.Name);
//Debugline(oParameter.V3);
//Debugline(oParameter.V4);
end;
//------------------------------------------------------------------------------
// Procedure: Info
// Author: Jr
// Date: 27-Sep-2021
// Comment:
//
// oParameter.V1 := ME_Mitarbeiter.Text;
// oParameter.V2 := ME_Info1.Text;
// oParameter.V3 := Me_Info2.Text;
// oParameter.V4 := dDatum;
// oParameter.V5 := cSB;
// oParameter.V6 := cMNr;
//
// Verändern der Werte Möglich
//------------------------------------------------------------------------------
procedure Info(oParameter:TOBSParameter);
begin
//Debugline(oParameter.V2);
end;
Erklärung:
Wenn im Terminer die Anwesenheitsübersicht aufgerufen wird und in der Script Lib jahresurlaub eingetragen wird
Gleichzeitige Ausführung verhindern
SEMA_New
Definition:
function SEMA_New(cSemas : string;
lShowInfo : boolean=False;
cWaitName : string=''): boolean;
Parameter:
Name | Beschreibung |
---|---|
cSemas | Angabe eines oder mehrerer eindeutiger Bezeichner. Als Trennzeichen zwischen einzelnen Bezeichnern ist ein Komma zu verwenden. |
lShowInfo | Gültige Werte sind true und false. Wenn true übergeben wird, so erhält ein benutzer bei Ausführung den Hinweis, dass die Funktion bzw das Makro bereits ausgeführt wird. |
cWaitName | Wenn die Funktion bzw. das Makro ausgeführt werden und mit der weiteren Ausführung gewartet werden soll, bis das Makro wieder freigeben ist, so kann hier ein Text angegeben werden. Der Text wird dann dem Benutzer im "Bitte Warten"-Fenster angezeigt. |
Erklärung:
Diese Funktion legt im Dateiverzeichnis von OBS eine Datei an und hält diese geöffnet, bis SEMA_Release für den oder die in cSemas übergebenen Werte ausgeführt wird.
Dies kann genutzt werden, um die Ausführung der gleichen Funktoin bzw. Makros zu unterbinden, wenn dies(e) zu dem Zeitpunkt bereits ausgeführt wird. Dies gilt für die komplette OBS-Installation und betrifft die Ausführung durch alle Benutzer oder Dienste. Die Funktionalität entspricht z. B. dem Verhalten von OBS, wenn Sie eine Eingabemaske für den gleichen Datensatz erneut öffnen und OBS dann die Möglichkeit sperrt den Datensatz mit F2 zu speichern.
Beispiel:
...
if (SEMA_New('BEISPIELMAKRO1')) then begin
...
SEMA_Release('BEISPIELMAKRO1');
end;
SEMA_Release
Definition:
function SEMA_Release(cSemas : string): boolean;
Parameter:
Name | Beschreibung |
---|---|
cSemas | Angabe eines oder mehrerer eindeutiger Bezeichner. Als Trennzeichen zwischen einzelnen Bezeichnern ist ein Komma zu verwenden. |
Erklärung:
Schließt die zuvor mit SEMA_Release geöffneten Datei(en) und erlaubt so die erneute Ausführung der Funktion bzw. des Makros.
Beispiel:
...
if (SEMA_New('BEISPIELMAKRO1')) then begin
...
SEMA_Release('BEISPIELMAKRO1');
end;