OBS/Makros und Scripting/Allgemeines/Übersicht Funktionen: Unterschied zwischen den Versionen

Aus OBS Wiki
Zur Navigation springen Zur Suche springen
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

HINWEIS: Für die Verwendung dieser Funktionen siehe auch TISOCountryCodes.

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

HINWEIS: Dies ist nur ein Auszug der Funktionalität

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

HINWEIS: Dies ist nur ein Auszug der Funktionalität

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.

HINWEIS: Sollten mehr Zeichen ermittelt werden, als der ursprüngliche Wert Zeichen hat, so ist das Ergbenis gleich dem Ursprung. LeftStr(cDatei,50) hätte z. B. dazu geführt, dass cLeft ebenfalls Dies ist ein Beispiel enthält.

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.

  1. 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.
  2. 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.
  3. 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!



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;